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__
|