File: GiftiLabelTable.h

package info (click to toggle)
caret 5.6.4~dfsg.1-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd, wheezy
  • size: 31,904 kB
  • ctags: 28,901
  • sloc: cpp: 378,050; python: 6,718; ansic: 5,507; makefile: 333; sh: 46
file content (323 lines) | stat: -rw-r--r-- 10,937 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323

#ifndef __GIFTI_LABEL_TABLE_H__
#define __GIFTI_LABEL_TABLE_H__

/*LICENSE_START*/
/*
 *  Copyright 1995-2002 Washington University School of Medicine
 *
 *  http://brainmap.wustl.edu
 *
 *  This file is part of CARET.
 *
 *  CARET is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 * 
 *  CARET is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with CARET; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */
/*LICENSE_END*/

#include <QString>
#include <vector>

#include "FileException.h"

class ColorFile;
class QTextStream;
class StringTable;

/// table for label indices and names
class GiftiLabelTable {
   public:
      // constructor
      GiftiLabelTable();
      
      // copy constructor
      GiftiLabelTable(const GiftiLabelTable& nlt);
      
      // destructor
      ~GiftiLabelTable();

      // assignment operator
      GiftiLabelTable& operator=(const GiftiLabelTable& nlt);
      
      // add a label (returns the label's index)
      int addLabel(const QString& labelName);
      
      // append a label table to this one
      void append(const GiftiLabelTable& nlt,
                  const std::vector<int>* labelsWithTheseIndicesOnly = NULL);
      
      // assign colors to the labels
      void assignColors(const ColorFile& colorFile);

      // get colors from the labels
      void addColorsToColorFile(ColorFile& colorFile);

      // Create a label from each of the colors in a color file
      void createLabelsFromColors(const ColorFile& colorFile);

      // clear out the labels
      void clear();
      
      // delete a label
      void deleteLabel(const int labelIndex);
      
      // are there labels ?
      bool empty() const { return labels.empty(); }
      
      // get the index of a label
      int getLabelIndex(const QString& labelName) const;
      
      // get label using its index
      QString getLabel(const int indx) const;
      
      // get all labels
      void getAllLabels(std::vector<QString>& labelsOut) const;
           
      /// get the number of labels
      int getNumberOfLabels() const { return labels.size(); }
      
      // set the label for a specified index (index must be >= 0)
      void setLabel(const int indx,
                    const QString& labelName);
        
      // set a label's color file index
      void setColorFileIndex(const int indx,
                             const int colorFileIndex);
      
      // get a labels color file index
      int getColorFileIndex(const int indx) const;

      // get label enabled using its index
      bool getLabelEnabled(const int indx) const;
      
      // set label enabled for a specified index (index must be >= 0)
      void setLabelEnabled(const int indx,
                           const bool b);
      
      // set all labels enabled
      void setAllLabelsEnabled(const bool b);

      // Set LabelTable had colors when it was read
      void setHadColorsWhenRead(bool b) { this->hadColorsWhenRead = b; }

      // Get LabelTable had colors when it was read
      bool getHadColorsWhenRead() const { return this->hadColorsWhenRead; }

      // get teh color components as floats ranging 0.0 to 1.0
      void getColorFloat(const int indx,
                         float& red,
                         float& green,
                         float& blue,
                         float& alpha) const;

      // set the color components from floats ranging 0.0 to 1.0
      void setColorFloat(const int indx,
                         float red,
                         float green,
                         float blue,
                         float alpha);

      // get teh color components
      void getColor(const int indx,
                    unsigned char& red,
                    unsigned char& green,
                    unsigned char& blue,
                    unsigned char& alpha) const;

      // set the color components
      void setColor(const int indx,
                    unsigned char red,
                    unsigned char green,
                    unsigned char blue,
                    unsigned char alpha);

      // write the label table
      void writeAsXML(QTextStream& stream,
                      const int indentOffset) const;

      // write as Caret6 XML
      void writeAsXML(XmlGenericWriter& xmlWriter) const;

      /// write the data into a StringTable
      void writeDataIntoStringTable(StringTable& table) const;
      
      /// read the data from a StringTable
      void readDataFromStringTable(const StringTable& table) throw (FileException);
      
      /// get the default color components
      static void getDefaultColor(unsigned char& redOut,
                                  unsigned char& greenOut,
                                  unsigned char& blueOut,
                                  unsigned char& alphaOut) {
         redOut   = 255;
         greenOut = 255;
         blueOut  = 255;
         alphaOut = 255;
      }

      /// get the default color components as floats
      static void getDefaultColorFloat(float& redOut,
                                       float& greenOut,
                                       float& blueOut,
                                       float& alphaOut) {
         unsigned char r, g, b, a;
         getDefaultColor(r, g, b, a);
         redOut   = ((float)r / 255.0);
         greenOut = ((float)g / 255.0);
         blueOut  = ((float)b / 255.0);
         alphaOut = ((float)a / 255.0);
      }

   protected:
      /// class used for storing a label and its corresponding color index
      class LabelData {
         public:
            /// constructor
            LabelData(const QString& labelNameIn) {
               labelName = labelNameIn;
               colorFileIndex = -1;
               labelEnabled = true;
               GiftiLabelTable::getDefaultColor(red,
                                                green,
                                                blue,
                                                alpha);
            };
            
            /// constructor
            LabelData(const QString& labelNameIn,
                      const unsigned char redIn,
                      const unsigned char greenIn,
                      const unsigned char blueIn,
                      const unsigned char alphaIn = 255) {
               labelName = labelNameIn;
               colorFileIndex = -1;
               labelEnabled = true;
               red = redIn;
               green = greenIn;
               blue = blueIn;
               alpha = alphaIn;
            };

            /// destructor
            ~LabelData() { }
            
            /// get the label name
            QString getLabelName() const { return labelName; }
            
            /// set the label name
            void setLabelName(const QString& labelNameIn) { labelName = labelNameIn; }
            
            /// get the color file index
            int getColorFileIndex() const { return colorFileIndex; }
            
            /// set the color file index
            void setColorFileIndex(const int indx) { colorFileIndex = indx; }
            
            /// set the label is enabled
            void setLabelEnabled(const bool b) { labelEnabled = b; }
            
            /// get the label is enabled
            bool getLabelEnabled() const { return labelEnabled; }
            
            /// get the color components
            void getColor(unsigned char& redOut,
                          unsigned char& greenOut,
                          unsigned char& blueOut,
                          unsigned char& alphaOut) const {
               redOut   = red;
               greenOut = green;
               blueOut  = blue;
               alphaOut = alpha;
            }

            /// set the color components
            void setColor(const unsigned char redIn,
                          const unsigned char greenIn,
                          const unsigned char blueIn,
                          const unsigned char alphaIn) {
               red   = redIn;
               green = greenIn;
               blue  = blueIn;
               alpha = alphaIn;
            }
            

            /// get the color components as floats ranging 0.0 to 1.0
            void getColorFloat(float& redOut,
                               float& greenOut,
                               float& blueOut,
                               float& alphaOut) const {
               redOut   = ((float)red / 255.0);
               greenOut = ((float)green / 255.0);
               blueOut  = ((float)blue / 255.0);
               alphaOut = ((float)alpha / 255.0);
            }

            /// set the color components from floats ranging 0.0 to 1.0
            void setColorFloat(const float redIn,
                               const float greenIn,
                               const float blueIn,
                               const float alphaIn) {
               red   = (unsigned char)(redIn * 255.0);
               green = (unsigned char)(greenIn * 255.0);
               blue  = (unsigned char)(blueIn * 255.0);
               alpha = (unsigned char)(alphaIn * 255.0);
            }

         protected:
            /// name of label
            QString labelName;

            /// red component
            unsigned char red;

            /// green component
            unsigned char green;

            /// blue component
            unsigned char blue;

            /// alpha component
            unsigned char alpha;

            /// index in color file
            int colorFileIndex;
            
            /// label is enabled
            bool labelEnabled;
      };
      
      // copy helper used by copy constructor and assignement operators
      void copyHelperGiftiLabelTable(const GiftiLabelTable& nlt);
      
      /// container for labels
      typedef std::vector<LabelData> LabelContainer;
      
      /// iterator for label container
      typedef LabelContainer::iterator LabelContainerIterator;
      
      /// iterator for label container
      typedef LabelContainer::const_iterator ConstLabelContainerIterator;
      
      // the labels
      LabelContainer labels;
      
      // colors were present when label table was read
      bool hadColorsWhenRead;

      /*** IF ADDITIONAL MEMBERS ARE ADDED UPDATE copyHelperGiftiLabelTable() ***/
};

#endif // __GIFTI_LABEL_TABLE_H__