0029018: Documentation - Provide user guide for Qt browser
[occt.git] / tools / DFBrowser / DFBrowser_TreeLevelViewModel.cxx
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 #include <inspector/DFBrowser_TreeLevelViewModel.hxx>
17
18 #include <inspector/DFBrowser_Item.hxx>
19 #include <inspector/DFBrowser_ItemRole.hxx>
20 #include <inspector/DFBrowser_Module.hxx>
21 #include <inspector/DFBrowser_Tools.hxx>
22 #include <inspector/DFBrowser_TreeLevelView.hxx>
23
24 #include <TDF_AttributeIterator.hxx>
25 #include <TDF_ChildIterator.hxx>
26 #include <TDF_Label.hxx>
27 #include <inspector/TreeModel_ModelBase.hxx>
28
29 #include <QApplication>
30 #include <QColor>
31 #include <QFont>
32 #include <QIcon>
33
34 // =======================================================================
35 // function : Init
36 // purpose :
37 // =======================================================================
38 void DFBrowser_TreeLevelViewModel::Init (const QModelIndex& theTreeIndex)
39 {
40   myIndex = theTreeIndex;
41   TreeModel_ItemBasePtr anItem  = TreeModel_ModelBase::GetItemByIndex (theTreeIndex);
42   myRowCount = anItem ? anItem->rowCount() : 0;
43   if (!anItem)
44     return;
45   EmitLayoutChanged();
46 }
47
48 // =======================================================================
49 // function : GetTreeViewIndex
50 // purpose :
51 // =======================================================================
52 QModelIndex DFBrowser_TreeLevelViewModel::GetTreeViewIndex (const QModelIndex& theIndex) const
53 {
54   return myIndex.model()->index (theIndex.row(), 0, myIndex);
55 }
56
57 // =======================================================================
58 // function : headerData
59 // purpose :
60 // =======================================================================
61 QVariant DFBrowser_TreeLevelViewModel::headerData (int theSection, Qt::Orientation theOrientation, int theRole) const
62 {
63   return (theOrientation == Qt::Horizontal && theRole == Qt::DisplayRole && theSection == 1) ? QVariant (tr ("Name")) : QVariant();
64 }
65
66 // =======================================================================
67 // function : index
68 // purpose :
69 // =======================================================================
70 QModelIndex DFBrowser_TreeLevelViewModel::index (int theRow, int theColumn, const QModelIndex& theParent) const
71 {
72   if (!hasIndex(theRow, theColumn, theParent))
73     return QModelIndex();
74   return createIndex(theRow, theColumn);
75 }
76
77 // =======================================================================
78 // function : data
79 // purpose :
80 // =======================================================================
81 QVariant DFBrowser_TreeLevelViewModel::data (const QModelIndex& theIndex, int theRole) const
82 {
83   QModelIndex anIndex = myIndex.model()->index (theIndex.row(), 0, myIndex);
84
85   if ( !anIndex.isValid() )
86     return QVariant ("undefined");
87
88   QVariant aValue;
89   TreeModel_ItemBasePtr anItemBase = TreeModel_ModelBase::GetItemByIndex (anIndex);
90   if (theIndex.column() == 0)
91   {
92     DFBrowser_ItemBasePtr aDBrowserItem = itemDynamicCast<DFBrowser_ItemBase> (anItemBase);
93     bool aPrevValue = aDBrowserItem->SetUseAdditionalInfo (false);
94     aValue = anItemBase->data (anIndex, theRole);
95     aDBrowserItem->SetUseAdditionalInfo (aPrevValue);
96   }
97   else { // column = 1
98     if (theRole == Qt::DisplayRole || theRole == Qt::ToolTipRole)
99     {
100       DFBrowser_ItemPtr anItem = itemDynamicCast<DFBrowser_Item> (anItemBase);
101       if (anItem)
102         aValue = anItem->GetAttributeInfo (DFBrowser_ItemRole_AdditionalInfo);
103     }
104   }
105   if (theIndex.column() == 0 && theRole == Qt::FontRole) // method name is in italic
106   {
107     QFont aFont = qApp->font();
108     aFont.setItalic (true);
109     return aFont;
110   }
111   if (theIndex.column() == 0 && theRole == Qt::ForegroundRole) // method name is light gray
112     return QColor (Qt::darkGray).darker(150);
113
114   return aValue;
115 }
116
117 // =======================================================================
118 // function : flags
119 // purpose :
120 // =======================================================================
121 Qt::ItemFlags DFBrowser_TreeLevelViewModel::flags (const QModelIndex& theIndex) const
122 {
123   if (!theIndex.isValid())
124     return 0;
125   Qt::ItemFlags aFlags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
126
127   return aFlags;
128 }