Slicer 5.9
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
qMRMLColorModel.h
Go to the documentation of this file.
1/*==============================================================================
2
3 Program: 3D Slicer
4
5 Copyright (c) Kitware Inc.
6
7 See COPYRIGHT.txt
8 or http://www.slicer.org/copyright/copyright.txt for details.
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15
16 This file was originally developed by Julien Finet, Kitware Inc.
17 and was partially funded by NIH grant 3P41RR013218-12S1
18
19==============================================================================*/
20
21#ifndef __qMRMLColorModel_h
22#define __qMRMLColorModel_h
23
24// Qt includes
25#include <QStandardItemModel>
26
27// CTK includes
28#include <ctkPimpl.h>
29#include <ctkVTKObject.h>
30
31// MRMLWidgets includes
32#include "qMRMLWidgetsExport.h"
33
34class vtkMRMLNode;
37class QAction;
38
39class qMRMLColorModelPrivate;
40
41//------------------------------------------------------------------------------
42class QMRML_WIDGETS_EXPORT qMRMLColorModel : public QStandardItemModel
43{
44 Q_OBJECT
45 QVTK_OBJECT
46 Q_ENUMS(ItemDataRole)
47 Q_PROPERTY(bool noneEnabled READ noneEnabled WRITE setNoneEnabled)
48
54 Q_PROPERTY(int colorColumn READ colorColumn WRITE setColorColumn)
59 Q_PROPERTY(int labelColumn READ labelColumn WRITE setLabelColumn)
64 Q_PROPERTY(int opacityColumn READ opacityColumn WRITE setOpacityColumn)
71
72public:
73 typedef QAbstractItemModel Superclass;
74 qMRMLColorModel(QObject *parent=nullptr);
75 ~qMRMLColorModel() override;
76
79
82 void setNoneEnabled(bool enable);
83 bool noneEnabled()const;
84
85 int colorColumn()const;
86 void setColorColumn(int column);
87
88 int labelColumn()const;
89 void setLabelColumn(int column);
90
91 int opacityColumn()const;
92 void setOpacityColumn(int column);
93
95 void setTerminologyColumn(int column);
96
97 int checkableColumn()const;
98 void setCheckableColumn(int column);
99
103 inline int colorFromIndex(const QModelIndex &index)const;
107 int colorFromItem(QStandardItem* item)const;
108
109 QStandardItem* itemFromColor(int color, int column = 0)const;
110 QModelIndexList indexes(int color)const;
111
112 inline QColor qcolorFromIndex(const QModelIndex& nodeIndex)const;
113 inline QColor qcolorFromItem(QStandardItem* nodeItem)const;
114 QColor qcolorFromColor(int color)const;
115
118 QString nameFromColor(int colorEntry)const;
121 int colorFromName(const QString& name)const;
122
125 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
126
128 static QString terminologyTextForColor(vtkMRMLColorNode* colorNode, int colorIndex, bool simplified=false);
129
131 void updateRowForColor(int color);
132
133protected slots:
134 void onMRMLColorNodeModified(vtkObject* node);
135 void onItemChanged(QStandardItem * item);
136
137protected:
138 qMRMLColorModel(qMRMLColorModelPrivate* pimpl, QObject *parent=nullptr);
139 virtual void updateItemFromColor(QStandardItem* item, int color, int column);
140 virtual void updateColorFromItem(int color, QStandardItem* item);
141 virtual void updateNode();
142
143 static void onMRMLNodeEvent(vtkObject* vtk_obj, unsigned long event,
144 void* client_data, void* call_data);
145protected:
146 QScopedPointer<qMRMLColorModelPrivate> d_ptr;
147
148private:
149 Q_DECLARE_PRIVATE(qMRMLColorModel);
150 Q_DISABLE_COPY(qMRMLColorModel);
151};
152
153// -----------------------------------------------------------------------------
154int qMRMLColorModel::colorFromIndex(const QModelIndex &nodeIndex)const
155{
156 return this->colorFromItem(this->itemFromIndex(nodeIndex));
157}
158
159// -----------------------------------------------------------------------------
160QColor qMRMLColorModel::qcolorFromIndex(const QModelIndex &nodeIndex)const
161{
162 return this->qcolorFromItem(this->itemFromIndex(nodeIndex));
163}
164
165// -----------------------------------------------------------------------------
166QColor qMRMLColorModel::qcolorFromItem(QStandardItem* nodeItem)const
167{
168 return this->qcolorFromColor(this->colorFromItem(nodeItem));
169}
170
171#endif
QModelIndexList indexes(int color) const
virtual void updateItemFromColor(QStandardItem *item, int color, int column)
virtual void updateColorFromItem(int color, QStandardItem *item)
QStandardItem * itemFromColor(int color, int column=0) const
int colorFromItem(QStandardItem *item) const
static QString terminologyTextForColor(vtkMRMLColorNode *colorNode, int colorIndex, bool simplified=false)
Assemble human readable text in format ": , in , " from color in color node.
void setColorColumn(int column)
int colorFromIndex(const QModelIndex &index) const
QAbstractItemModel Superclass
void updateRowForColor(int color)
Update all items in the row of a given color index.
int terminologyColumn() const
virtual void updateNode()
QString nameFromColor(int colorEntry) const
qMRMLColorModel(QObject *parent=nullptr)
void setLabelColumn(int column)
void onMRMLColorNodeModified(vtkObject *node)
void setCheckableColumn(int column)
QColor qcolorFromItem(QStandardItem *nodeItem) const
QColor qcolorFromColor(int color) const
QVTK_OBJECTbool noneEnabled
void setNoneEnabled(bool enable)
QColor qcolorFromIndex(const QModelIndex &nodeIndex) const
void onItemChanged(QStandardItem *item)
static void onMRMLNodeEvent(vtkObject *vtk_obj, unsigned long event, void *client_data, void *call_data)
void setMRMLColorNode(vtkMRMLColorNode *node)
vtkMRMLColorNode * mrmlColorNode() const
void setOpacityColumn(int column)
void setTerminologyColumn(int column)
QScopedPointer< qMRMLColorModelPrivate > d_ptr
int colorFromName(const QString &name) const
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
MRML logic class for color manipulation.
Abstract MRML node to represent color information.
Abstract Superclass for all specific types of MRML nodes.