0029018: Documentation - Provide user guide for Qt browser
[occt.git] / tools / DFBrowserPane / DFBrowserPane_AttributePaneModel.hxx
1 // Created on: 2017-06-16
2 // Created by: Natalia ERMOLAEVA
3 // Copyright (c) 2017 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement. 
15
16 #ifndef DFBrowserPane_AttributePaneModel_H
17 #define DFBrowserPane_AttributePaneModel_H
18
19 #include <Standard.hxx>
20 #include <TDocStd_Document.hxx>
21
22 #ifdef _MSC_VER
23 #pragma warning(disable : 4127) // conditional expression is constant
24 #endif
25 #include <QAbstractTableModel>
26 #include <QList>
27 #include <QVariant>
28
29 //! \class DFBrowserPane_AttributePaneModel
30 //! \brief This is an extension of table model to visualize a container of values
31 //! It is possible to:
32 //! - set orientation to interpretate the values.
33 //! - set table view header values.
34 //! Items of the view are enabled and selectable.
35 class DFBrowserPane_AttributePaneModel : public QAbstractTableModel
36 {
37 public:
38
39   //! Constructor
40   Standard_EXPORT DFBrowserPane_AttributePaneModel(QObject* theParent = 0);
41
42   //! Destructor
43   virtual ~DFBrowserPane_AttributePaneModel() {}
44
45   //! Sets direction of the values applying, whether it should be placed by rows or by columns
46   //! \param theOrientation if horizontal, the values are applyed by rows, otherwise by columns
47   void SetOrientation (const Qt::Orientation& theOrientation) { myOrientation = theOrientation; }
48
49   //! Returns table orientation for setting data values
50   //! \return thye current orientation
51   Qt::Orientation GetOrientation() const { return myOrientation; }
52
53   //! Sets number of columns
54   //! \param theColumnCount a column count
55   void SetColumnCount (const int theColumnCount) { myColumnCount = theColumnCount; }
56
57   //! Fills the model with the values. Store the values in a cache.
58   //! \param theValues a container of values
59   Standard_EXPORT void Init (const QList<QVariant>& theValues);
60
61   //! Fills the model header values for orientation.
62   //! \param theValues a container of header text values
63   //! \param theOrientation an orientation of header
64   Standard_EXPORT void SetHeaderValues (const QList<QVariant>& theValues, Qt::Orientation theOrientation);
65
66   //! Returns header values for orientation.
67   //! \param theValues a container of header text values
68   //! \param theOrientation an orientation of header
69   const QList<QVariant>& HeaderValues (Qt::Orientation theOrientation)
70     { return theOrientation == Qt::Horizontal ? myHorizontalHeaderValues : myVerticalHeaderValues; }
71
72   //! Returns indices of italic columns
73   //! \return indices of columns
74   const QList<int>& GetItalicColumns() const { return myItalicColumns; }
75
76   //! Sets indices of italic columns
77   //! \param theValues indices of columns
78   void SetItalicColumns (const QList<int>& theValues) { myItalicColumns = theValues; }
79
80   //! Returns number of columns, depending on orientation: myColumnCount or size of values container
81   //! \param theParent an index of the parent item
82   //! \return an integer value
83   Standard_EXPORT virtual int columnCount (const QModelIndex& theParent = QModelIndex()) const Standard_OVERRIDE;
84
85   //! Returns number of rows, depending on orientation: myColumnCount or size of values container
86   //! \param theParent an index of the parent item
87   //! \return an integer value
88   Standard_EXPORT virtual int rowCount (const QModelIndex& theParent = QModelIndex()) const Standard_OVERRIDE;
89
90   //! Returns content of the model index for the given role, it is obtained from internal container of values
91   //! It returns value only for DisplayRole.
92   //! \param theIndex a model index
93   //! \param theRole a view role
94   //! \return value intepreted depending on the given role
95   Standard_EXPORT virtual QVariant data (const QModelIndex& theIndex, int theRole = Qt::DisplayRole) const Standard_OVERRIDE;
96
97   //! Returns content of the model index for the given role, it is obtainer from internal container of header values
98   //! It returns value only for DisplayRole.
99   //! \param theSection an index of value in the container 
100   //! \param theIndex a model index
101   //! \param theRole a view role
102   //! \return value intepreted depending on the given role
103   Standard_EXPORT virtual QVariant headerData (int theSection, Qt::Orientation theOrientation, int theRole = Qt::DisplayRole) const Standard_OVERRIDE;
104
105   //! Returns flags for the item: ItemIsEnabled | Qt::ItemIsSelectable
106   //! \param theIndex a model index
107   //! \return flags
108   Qt::ItemFlags flags (const QModelIndex& theIndex) const
109   { return theIndex.isValid() ? Qt::ItemIsEnabled | Qt::ItemIsSelectable : Qt::NoItemFlags; }
110
111 private:
112
113   Qt::Orientation myOrientation; //!< orientation how the values should fill the current table view
114   int myColumnCount; //!< number of table columns
115   QMap< int, QList<QVariant> > myValuesMap; //!< container of values, filled in Init(), used in data()
116   QList<QVariant> myHorizontalHeaderValues; //!< table horizontal header values
117   QList<QVariant> myVerticalHeaderValues; //!< table vertical header values
118   QList<int> myItalicColumns; //!< indices of columns that should be visualized in gray and italic
119
120 };
121
122 #endif