SMTK  @SMTK_VERSION@
Simulation Modeling Tool Kit
qtItem.h
1 //=========================================================================
2 // Copyright (c) Kitware, Inc.
3 // All rights reserved.
4 // See LICENSE.txt for details.
5 //
6 // This software is distributed WITHOUT ANY WARRANTY; without even
7 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
8 // PURPOSE. See the above copyright notice for more information.
9 //=========================================================================
10 
11 #ifndef smtk_extension_qtItem_h
12 #define smtk_extension_qtItem_h
13 
14 #include "smtk/PublicPointerDefs.h"
15 #include "smtk/extension/qt/Exports.h"
16 #include "smtk/extension/qt/qtAttributeItemInfo.h"
17 #include "smtk/view/Configuration.h"
18 #include <QObject>
19 #include <QPointer>
20 
21 // VTK's wrapper parser does not properly handle Qt macros on macos.
22 #if defined(__VTK_WRAP__) && !defined(Q_SLOTS)
23 #define Q_DISABLE_COPY(x)
24 #define Q_SLOTS
25 #define Q_SIGNALS protected
26 #define Q_OBJECT
27 #endif
28 
29 class qtItemInternals;
30 
31 namespace smtk
32 {
33 namespace extension
34 {
35 class qtUIManager;
36 
37 /* Define a casting macro for use by the constants below. */
38 #if defined(__cplusplus)
39 #define smtk_TYPE_CAST(T, V) static_cast<T>(V)
40 #else
41 #define smtk_TYPE_CAST(T, V) ((T)(V))
42 #endif
43 
44 #define smtk_INT_MIN smtk_TYPE_CAST(int, ~(~0u >> 1))
45 #define smtk_INT_MAX smtk_TYPE_CAST(int, ~0u >> 1)
46 #define smtk_UNSIGNED_INT_MIN smtk_TYPE_CAST(unsigned int, 0)
47 #define smtk_UNSIGNED_INT_MAX smtk_TYPE_CAST(unsigned int, ~0u)
48 #define smtk_LONG_MIN smtk_TYPE_CAST(long, ~(~0ul >> 1))
49 #define smtk_LONG_MAX smtk_TYPE_CAST(long, ~0ul >> 1)
50 #define smtk_UNSIGNED_LONG_MIN smtk_TYPE_CAST(unsigned long, 0ul)
51 #define smtk_UNSIGNED_LONG_MAX smtk_TYPE_CAST(unsigned long, ~0ul)
52 #define smtk_FLOAT_MIN smtk_TYPE_CAST(float, -1.0e+38f)
53 #define smtk_FLOAT_MAX smtk_TYPE_CAST(float, 1.0e+38f)
54 #define smtk_DOUBLE_MIN smtk_TYPE_CAST(double, -1.0e+299)
55 #define smtk_DOUBLE_MAX smtk_TYPE_CAST(double, 1.0e+299)
56 
57 #define smtk_DOUBLE_CONSTRAINT_PRECISION 0.000001
58 #define smtk_USER_DATA_TYPE 10000
59 
61 class SMTKQTEXT_EXPORT qtItem : public QObject
62 {
63  Q_OBJECT
64 
65 public:
66  qtItem(const qtAttributeItemInfo& info);
67  ~qtItem() override;
68 
69  smtk::attribute::ItemPtr item() const { return m_itemInfo.item(); }
70 
71  template<typename ItemType>
72  std::shared_ptr<ItemType> itemAs() const
73  {
74  return m_itemInfo.itemAs<ItemType>();
75  }
76 
77  qtUIManager* uiManager() const { return m_itemInfo.uiManager(); }
78 
80  smtk::attribute::ResourcePtr attributeResource() const;
81 
82  QPointer<QWidget> widget() { return m_widget; }
83  QPointer<QWidget> parentWidget() { return m_itemInfo.parentWidget(); }
84 
85  bool isLeafItem() { return m_isLeafItem; }
86 
87  virtual void setLabelVisible(bool) { ; }
88  virtual bool isFixedWidth() const;
89 
90  void showAdvanceLevelOverlay(bool);
91  bool useSelectionManager() const { return m_useSelectionManager; }
92  void setReadOnly(bool mode) { m_readOnly = mode; }
93  bool isReadOnly() const;
97  virtual void markForDeletion();
98 
100  virtual QWidget* lastEditor() const { return nullptr; }
102  virtual void updateTabOrder(QWidget* /*precedingEditor*/) {}
103 
104 public Q_SLOTS:
105  // Controls whether the Selection Manager should be used for setting model
106  // and mesh entity items - Note that this is just a hint and could be ignored
107  // due to other criteria
108  // virtual void setUseSelectionManager(bool mode) { m_useSelectionManager = mode; }
109 
112  virtual void updateItemData();
113 
114 Q_SIGNALS:
116  void widgetSizeChanged();
118  void modified();
122  void childModified(qtItem* item);
123 
128  void editingWidgetChanged();
129 
130 protected Q_SLOTS:
131  virtual void onAdvanceLevelChanged(int levelIdx);
132  virtual void onChildWidgetSizeChanged() { ; }
133 
134 protected:
135  virtual void createWidget() { ; }
136  virtual void setLocalAdvanceLevel(unsigned int level);
137  virtual void addChildItem(qtItem*);
138  virtual void removeChildItem(qtItem*);
139  virtual void clearChildItems();
140  QList<qtItem*>& childItems();
141 
142  QPointer<QWidget> m_widget;
143  bool m_isLeafItem;
144  bool m_useSelectionManager;
145  bool m_readOnly;
146  bool m_markedForDeletion;
147  qtAttributeItemInfo m_itemInfo;
148  QList<smtk::extension::qtItem*> m_childItems;
149 
150 private:
151  qtItemInternals* Internals;
152 };
153 } // namespace extension
154 } // namespace smtk
155 
156 #endif
smtk
The main namespace for the Simulation Modeling Tool Kit (SMTK).
Definition: doc.h:33
smtk::extension::qtItem
an abstract UI class for attribute item
Definition: qtItem.h:61
PublicPointerDefs.h
smtk::extension::qtUIManager
Container for managers whose content is presented via Qt widgets.
Definition: qtUIManager.h:57
smtk::extension::qtItem::lastEditor
virtual QWidget * lastEditor() const
Returns editor widget, used when setting tab order.
Definition: qtItem.h:100
qtItemInternals
Definition: qtItem.cxx:25
smtk::extension::qtItem::updateTabOrder
virtual void updateTabOrder(QWidget *)
Sets previous widget for tabbing order.
Definition: qtItem.h:102
smtk::extension::qtAttributeItemInfo
Class used to generate widgets for Attribute Items.
Definition: qtAttributeItemInfo.h:39
smtk::attribute::ItemPtr
smtk::shared_ptr< smtk::attribute::Item > ItemPtr
Definition: PublicPointerDefs.h:467
smtk::attribute::ResourcePtr
smtk::shared_ptr< smtk::attribute::Resource > ResourcePtr
Definition: PublicPointerDefs.h:604