Loading [MathJax]/extensions/TeX/AMSmath.js
Radium Engine  1.5.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
TreeModel.hpp
1 #pragma once
2 
3 #include <Gui/RaGui.hpp>
4 
5 #include <memory>
6 #include <vector>
7 
8 #include <QAbstractItemModel>
9 #include <QVariant>
10 
20 
21 namespace Ra {
22 namespace Gui {
23 
28 class RA_GUI_API TreeItem
29 {
30  public:
31  TreeItem() {}
32  virtual ~TreeItem() {}
33 
35  TreeItem( const TreeItem& ) = delete;
36  TreeItem& operator=( const TreeItem& ) = delete;
37 
42  virtual std::string getName() const = 0;
43 
45  virtual bool isValid() const = 0;
46 
48  virtual bool isSelectable() const = 0;
50 
53 
56  int getIndexInParent() const;
57 
58  bool isChecked() const { return m_checked; }
59  void setChecked( bool checked = true ) { m_checked = checked; }
61  public:
65  TreeItem* m_parent { nullptr };
66 
68  std::vector<std::unique_ptr<TreeItem>> m_children;
70  private:
71  bool m_checked { true };
72 };
73 
76 class RA_GUI_API TreeModel : public QAbstractItemModel
77 {
78  Q_OBJECT
79 
80  public:
81  TreeModel( QObject* parent = nullptr ) : QAbstractItemModel( parent ) {}
82 
85 
90  int rowCount( const QModelIndex& parent = QModelIndex() ) const override;
91 
97  int columnCount( const QModelIndex& parent = QModelIndex() ) const override {
98  CORE_UNUSED( parent );
99  return 1;
100  }
101 
108  QVariant data( const QModelIndex& index, int role ) const override;
109 
110  bool setData( const QModelIndex& index, const QVariant& value, int role ) override;
111 
119  QVariant headerData( int section,
120  Qt::Orientation orientation,
121  int role = Qt::DisplayRole ) const override;
122 
130  QModelIndex
131  index( int row, int column, const QModelIndex& parent = QModelIndex() ) const override;
132 
138  QModelIndex parent( const QModelIndex& child ) const override;
139 
145  Qt::ItemFlags flags( const QModelIndex& index ) const override;
146 
148 
151  void rebuildModel();
152 
153  signals:
155  void modelRebuilt();
156 
157  protected:
158  virtual std::string getHeaderString() const = 0;
159 
162  virtual void buildModel() = 0;
163 
165  TreeItem* getItem( const QModelIndex& index ) const;
166 
168  bool findInTree( const TreeItem* item ) const;
169 
171  void printModel() const;
172 
174  void setAllItemsChecked( bool checked = true );
175 
177  void setItemChecked( const QModelIndex& index, bool checked = true );
178 
179  protected:
181  std::unique_ptr<TreeItem> m_rootItem;
182 };
183 } // namespace Gui
184 } // namespace Ra
TreeItem(const TreeItem &)=delete
TreeItems are non-copyable.
std::vector< std::unique_ptr< TreeItem > > m_children
Children of item in the tree.
Definition: TreeModel.hpp:68
virtual bool isValid() const =0
Return true if the represented object is valid.
virtual bool isSelectable() const =0
Return true if the represented object can be selected.
void modelRebuilt()
Emitted when the model has been rebuilt.
virtual void buildModel()=0
int columnCount(const QModelIndex &parent=QModelIndex()) const override
Definition: TreeModel.hpp:97
std::unique_ptr< TreeItem > m_rootItem
Root of the tree.
Definition: TreeModel.hpp:181
Definition: Cage.cpp:3