Slicer 5.11
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
qSlicerSubjectHierarchyAbstractPlugin.h
Go to the documentation of this file.
1/*==============================================================================
2
3 Program: 3D Slicer
4
5 Copyright (c) Laboratory for Percutaneous Surgery (PerkLab)
6 Queen's University, Kingston, ON, Canada. All Rights Reserved.
7
8 See COPYRIGHT.txt
9 or http://www.slicer.org/copyright/copyright.txt for details.
10
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
16
17 This file was originally developed by Csaba Pinter, PerkLab, Queen's University
18 and was supported through the Applied Cancer Research Unit program of Cancer Care
19 Ontario with funds provided by the Ontario Ministry of Health and Long-Term Care
20
21==============================================================================*/
22
23#ifndef __qSlicerSubjectHierarchyAbstractPlugin_h
24#define __qSlicerSubjectHierarchyAbstractPlugin_h
25
26// Qt includes
27#include <QColor>
28#include <QMap>
29#include <QObject>
30#include <QStringList>
31#include <QIcon>
32#include <QVariant>
33
34// MRML includes
36
37#include "qSlicerSubjectHierarchyModuleWidgetsExport.h"
38
39class QStandardItem;
40class QAction;
43
44struct Q_SLICER_MODULE_SUBJECTHIERARCHY_WIDGETS_EXPORT qSlicerTerminologyMetadata
45{
47
48 void clear()
49 {
50 this->Terminology.clear();
51 this->DefaultTerminology.clear();
52 this->Name.clear();
53 this->NameAutoGenerated = false;
54 this->ColorAutoGenerated = true;
55 this->GeneratedColor = QColor();
56
57 this->HasTerminology = false;
58 this->HasDefaultTerminology = false;
59 this->HasName = false;
60 this->HasNameAutoGenerated = false;
61 this->HasColorAutoGenerated = false;
62 this->HasGeneratedColor = false;
63 }
64
65 void setTerminology(const QString& terminology)
66 {
67 this->Terminology = terminology;
68 this->HasTerminology = true;
69 }
70
72 {
73 this->DefaultTerminology = defaultTerminology;
74 this->HasDefaultTerminology = true;
75 }
76
77 void setName(const QString& name)
78 {
79 this->Name = name;
80 this->HasName = true;
81 }
82
84 {
85 this->NameAutoGenerated = nameAutoGenerated;
86 this->HasNameAutoGenerated = true;
87 }
88
90 {
91 this->ColorAutoGenerated = colorAutoGenerated;
92 this->HasColorAutoGenerated = true;
93 }
94
96 {
97 this->GeneratedColor = generatedColor;
98 this->HasGeneratedColor = true;
99 }
100
101 bool hasTerminology() const { return this->HasTerminology; }
102 bool hasDefaultTerminology() const { return this->HasDefaultTerminology; }
103 bool hasName() const { return this->HasName; }
104 bool hasNameAutoGenerated() const { return this->HasNameAutoGenerated; }
105 bool hasColorAutoGenerated() const { return this->HasColorAutoGenerated; }
106 bool hasGeneratedColor() const { return this->HasGeneratedColor; }
107
108 const QString& terminology() const { return this->Terminology; }
109 const QString& defaultTerminology() const { return this->DefaultTerminology; }
110 const QString& name() const { return this->Name; }
111 bool nameAutoGenerated() const { return this->NameAutoGenerated; }
112 bool colorAutoGenerated() const { return this->ColorAutoGenerated; }
113 const QColor& generatedColor() const { return this->GeneratedColor; }
114
115private:
116 QString Terminology;
117 QString DefaultTerminology;
118 QString Name;
119 bool NameAutoGenerated{ false };
120 bool ColorAutoGenerated{ true };
121 QColor GeneratedColor;
122
123 bool HasTerminology{ false };
124 bool HasDefaultTerminology{ false };
125 bool HasName{ false };
126 bool HasNameAutoGenerated{ false };
127 bool HasColorAutoGenerated{ false };
128 bool HasGeneratedColor{ false };
129};
130
151class Q_SLICER_MODULE_SUBJECTHIERARCHY_WIDGETS_EXPORT qSlicerSubjectHierarchyAbstractPlugin : public QObject
152{
153 Q_OBJECT
154 Q_ENUMS(ActionSectionType)
155
156
159 Q_PROPERTY(QString name READ name WRITE setName)
160 Q_PROPERTY(QString helpText READ helpText)
161
162public:
163 typedef QObject Superclass;
164 qSlicerSubjectHierarchyAbstractPlugin(QObject* parent = nullptr);
166
167 // Role-related virtual methods
168 // If the subclass plugin does not offer a role, these do not need to be overridden
169public:
176 Q_INVOKABLE virtual double canOwnSubjectHierarchyItem(vtkIdType itemID) const;
177
180 Q_INVOKABLE virtual const QString roleForPlugin() const;
181
183 virtual const QString helpText() const;
184
187 Q_INVOKABLE virtual QIcon icon(vtkIdType itemID);
188
190 Q_INVOKABLE virtual QIcon visibilityIcon(int visible);
191
197 Q_INVOKABLE virtual QIcon visibilityIconWithParentHidden(int visible);
198
200 Q_INVOKABLE virtual bool canEditProperties(vtkIdType itemID);
201
203 Q_INVOKABLE virtual void editProperties(vtkIdType itemID);
204
207 Q_INVOKABLE virtual QString displayedItemName(vtkIdType itemID) const;
208
210 Q_INVOKABLE virtual QString tooltip(vtkIdType itemID) const;
211
213 Q_INVOKABLE virtual void setDisplayVisibility(vtkIdType itemID, int visible);
214
217 Q_INVOKABLE virtual int getDisplayVisibility(vtkIdType itemID) const;
218
222 Q_INVOKABLE virtual void setDisplayColor( //
223 vtkIdType itemID,
224 QColor color,
225 const qSlicerTerminologyMetadata& terminologyMetadata = qSlicerTerminologyMetadata());
226
228 Q_INVOKABLE void setDisplayColor(vtkIdType itemID, QColor color, QMap<int, QVariant> terminologyMetadata);
229
232 Q_INVOKABLE virtual QColor getDisplayColor(vtkIdType itemID, qSlicerTerminologyMetadata& terminologyMetadata) const;
233
235 Q_INVOKABLE QColor getDisplayColor(vtkIdType itemID, QMap<int, QVariant>& terminologyMetadata) const;
236
238 Q_INVOKABLE QColor getDisplayColor(vtkIdType itemID) const;
239
240 // Function related virtual methods
241public:
244 Q_INVOKABLE virtual QList<QAction*> itemContextMenuActions() const;
245
250 Q_INVOKABLE virtual QList<QAction*> sceneContextMenuActions() const;
251
254 Q_INVOKABLE virtual void showContextMenuActionsForItem(vtkIdType itemID) { Q_UNUSED(itemID); };
255
259
262 Q_INVOKABLE virtual void showVisibilityContextMenuActionsForItem(vtkIdType itemID) { Q_UNUSED(itemID); };
263
267 Q_INVOKABLE virtual QList<QAction*> transformContextMenuActions() const;
268
271 Q_INVOKABLE virtual void showTransformContextMenuActionsForItem(vtkIdType itemID) { Q_UNUSED(itemID); };
272
276 Q_INVOKABLE virtual QList<QAction*> viewContextMenuActions() const;
277
281 Q_INVOKABLE virtual void showViewContextMenuActionsForItem(vtkIdType itemID, QVariantMap eventData)
282 {
283 Q_UNUSED(itemID);
284 Q_UNUSED(eventData);
285 };
286
287 // Parenting related virtual methods with default implementation
288public:
298 Q_INVOKABLE virtual double canAddNodeToSubjectHierarchy(vtkMRMLNode* node, vtkIdType parentItemID = vtkMRMLSubjectHierarchyNode::INVALID_ITEM_ID) const;
299
305 Q_INVOKABLE virtual bool addNodeToSubjectHierarchy(vtkMRMLNode* node, vtkIdType parentItemID);
306
315 Q_INVOKABLE virtual double canReparentItemInsideSubjectHierarchy(vtkIdType itemID, vtkIdType parentItemID) const;
316
319 Q_INVOKABLE virtual bool reparentItemInsideSubjectHierarchy(vtkIdType itemID, vtkIdType parentItemID);
320
325 Q_INVOKABLE virtual bool showItemInView(vtkIdType itemID, vtkMRMLAbstractViewNode* viewNode, vtkIdList* allItemsToShow);
326
327 // Utility functions
328public:
330 Q_INVOKABLE bool isThisPluginOwnerOfItem(vtkIdType itemID) const;
331
334 Q_INVOKABLE static qSlicerAbstractModuleWidget* switchToModule(QString moduleName);
335
341 static QIcon applyParentHiddenEffect(const QIcon& icon);
342
343public:
345 virtual QString name() const;
346
349 virtual void setName(QString name);
350
361
371 Q_INVOKABLE static void setActionPosition(QAction* action, int section, int weight = 0, double weightAdjustment = 0.0);
372
373 // @{
376 Q_INVOKABLE void setColorAndTerminologyToDisplayableNode(vtkIdType itemID,
377 QColor color,
378 const qSlicerTerminologyMetadata& terminologyMetadata,
379 bool useSelectedColor,
380 bool disableScalarVisibility);
381 Q_INVOKABLE QColor colorAndTerminologyFromDisplayableNode(vtkIdType itemID, qSlicerTerminologyMetadata& terminologyMetadata, bool useSelectedColor) const;
382 // @}
383
384signals:
386 void requestExpandItem(vtkIdType itemID);
387
391
392protected:
398
399protected:
401 QString m_Name;
402
403private:
405 void operator=(const qSlicerSubjectHierarchyAbstractPlugin&); // Not implemented
408};
409
410#endif
virtual Q_INVOKABLE QList< QAction * > transformContextMenuActions() const
void requestExpandItem(vtkIdType itemID)
Signal requesting expanding of the subject hierarchy tree item belonging to an item.
Q_INVOKABLE QColor colorAndTerminologyFromDisplayableNode(vtkIdType itemID, qSlicerTerminologyMetadata &terminologyMetadata, bool useSelectedColor) const
static Q_INVOKABLE void setActionPosition(QAction *action, int section, int weight=0, double weightAdjustment=0.0)
virtual void setName(QString name)
virtual Q_INVOKABLE QList< QAction * > itemContextMenuActions() const
Q_INVOKABLE void setColorAndTerminologyToDisplayableNode(vtkIdType itemID, QColor color, const qSlicerTerminologyMetadata &terminologyMetadata, bool useSelectedColor, bool disableScalarVisibility)
virtual Q_INVOKABLE QList< QAction * > viewContextMenuActions() const
virtual Q_INVOKABLE void showTransformContextMenuActionsForItem(vtkIdType itemID)
qSlicerSubjectHierarchyAbstractPlugin(QObject *parent=nullptr)
virtual Q_INVOKABLE QList< QAction * > visibilityContextMenuActions() const
virtual Q_INVOKABLE double canReparentItemInsideSubjectHierarchy(vtkIdType itemID, vtkIdType parentItemID) const
virtual Q_INVOKABLE void setDisplayVisibility(vtkIdType itemID, int visible)
Set display visibility of an owned subject hierarchy item.
virtual Q_INVOKABLE QList< QAction * > sceneContextMenuActions() const
Q_INVOKABLE bool isThisPluginOwnerOfItem(vtkIdType itemID) const
Determines if the item is owned by this plugin.
virtual Q_INVOKABLE const QString roleForPlugin() const
virtual QString name() const
Get the name of the plugin.
virtual Q_INVOKABLE QIcon visibilityIcon(int visible)
Get visibility icon for a visibility state.
virtual Q_INVOKABLE QString displayedItemName(vtkIdType itemID) const
virtual Q_INVOKABLE bool addNodeToSubjectHierarchy(vtkMRMLNode *node, vtkIdType parentItemID)
virtual Q_INVOKABLE QString tooltip(vtkIdType itemID) const
Generate tooltip for a owned subject hierarchy item.
static Q_INVOKABLE qSlicerAbstractModuleWidget * switchToModule(QString moduleName)
virtual Q_INVOKABLE bool reparentItemInsideSubjectHierarchy(vtkIdType itemID, vtkIdType parentItemID)
virtual Q_INVOKABLE bool showItemInView(vtkIdType itemID, vtkMRMLAbstractViewNode *viewNode, vtkIdList *allItemsToShow)
virtual Q_INVOKABLE void setDisplayColor(vtkIdType itemID, QColor color, const qSlicerTerminologyMetadata &terminologyMetadata=qSlicerTerminologyMetadata())
virtual Q_INVOKABLE QColor getDisplayColor(vtkIdType itemID, qSlicerTerminologyMetadata &terminologyMetadata) const
virtual Q_INVOKABLE int getDisplayVisibility(vtkIdType itemID) const
virtual Q_INVOKABLE QIcon visibilityIconWithParentHidden(int visible)
virtual Q_INVOKABLE void showViewContextMenuActionsForItem(vtkIdType itemID, QVariantMap eventData)
virtual Q_INVOKABLE void showVisibilityContextMenuActionsForItem(vtkIdType itemID)
virtual Q_INVOKABLE void editProperties(vtkIdType itemID)
Open module belonging to item and set inputs in opened module.
virtual Q_INVOKABLE bool canEditProperties(vtkIdType itemID)
Returns true if the module can edit properties of this item using editProperties.
virtual Q_INVOKABLE void showContextMenuActionsForItem(vtkIdType itemID)
virtual Q_INVOKABLE QIcon icon(vtkIdType itemID)
@ SectionTop
Use this section to make items appear at the top of the menu.
@ SectionBottom
Use this section to make items appear at the bottom of the menu.
@ SectionDefault
By default (if no position is defined) actions will appear in this section.
@ SectionInteraction
Actions for changing the current interaction mode (in view context menu).
@ SectionComponent
Actions for the selected node component (e.g., control point within a node).
static QIcon applyParentHiddenEffect(const QIcon &icon)
virtual Q_INVOKABLE double canAddNodeToSubjectHierarchy(vtkMRMLNode *node, vtkIdType parentItemID=vtkMRMLSubjectHierarchyNode::INVALID_ITEM_ID) const
virtual Q_INVOKABLE double canOwnSubjectHierarchyItem(vtkIdType itemID) const
Abstract MRML node to represent a view. The class holds the properties common to any view type (3D,...
Abstract Superclass for all specific types of MRML nodes.
QMap< QString, QVariant > QVariantMap
void setTerminology(const QString &terminology)
void setColorAutoGenerated(bool colorAutoGenerated)
void setNameAutoGenerated(bool nameAutoGenerated)
void setGeneratedColor(const QColor &generatedColor)
void setDefaultTerminology(const QString &defaultTerminology)