0029018: Documentation - Provide user guide for Qt browser
[occt.git] / tools / DFBrowserPane / DFBrowserPane_TDataStdTreeNodeItem.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/DFBrowserPane_TDataStdTreeNodeItem.hxx>
17 #include <inspector/DFBrowserPane_Tools.hxx>
18
19 #include <inspector/DFBrowser_Module.hxx>
20 #include <inspector/DFBrowser_Tools.hxx>
21
22 #include <inspector/DFBrowserPane_AttributePane.hxx>
23 #include <inspector/DFBrowserPane_Tools.hxx>
24
25 #include <TDataStd_TreeNode.hxx>
26 #include <TDataStd_ChildNodeIterator.hxx>
27 #include <TDF_AttributeIterator.hxx>
28 #include <TDF_ChildIterator.hxx>
29
30 #include <QIcon>
31 #include <QObject>
32
33 // =======================================================================
34 // function : Init
35 // purpose :
36 // =======================================================================
37 void DFBrowserPane_TDataStdTreeNodeItem::Init()
38 {
39   DFBrowserPane_TDataStdTreeNodeItemPtr aParentItem = itemDynamicCast<DFBrowserPane_TDataStdTreeNodeItem> (Parent());
40   // if aParentItem is empty, it is the root item, an attribute field is already filled by SetAttribute method
41   if (aParentItem)
42     myAttribute = aParentItem->getChildAttribute (Row());
43
44   Handle(TDataStd_TreeNode) aTreeNode = Handle(TDataStd_TreeNode)::DownCast (myAttribute);
45   if (aTreeNode.IsNull())
46     return;
47
48   TreeModel_ItemBase::Init();
49
50   myRowCount = aTreeNode->NbChildren (false);
51   myLabelName = QString (DFBrowserPane_Tools::GetEntry (aTreeNode->Label()).ToCString());
52 }
53
54 // =======================================================================
55 // function : Reset
56 // purpose :
57 // =======================================================================
58 void DFBrowserPane_TDataStdTreeNodeItem::Reset()
59 {
60   DFBrowserPane_TDataStdTreeNodeItemPtr aParentItem = itemDynamicCast<DFBrowserPane_TDataStdTreeNodeItem> (Parent());
61   if (aParentItem)
62   {
63     Handle(TDF_Attribute) anAttribute;
64     SetAttribute (anAttribute);
65     myRowCount = 0;
66     myLabelName = QString();
67   }
68   myIsCurrentItem = false;
69   TreeModel_ItemBase::Reset();
70 }
71
72 // =======================================================================
73 // function : data
74 // purpose :
75 // =======================================================================
76 QVariant DFBrowserPane_TDataStdTreeNodeItem::initValue (const int theRole) const
77 {
78   if (Column() != 0)
79     return QVariant();
80
81   switch (theRole)
82   {
83     case Qt::DisplayRole:
84     case Qt::ToolTipRole:    return getName();
85     case Qt::ForegroundRole: return myIsCurrentItem ? QColor (Qt::darkBlue) : QColor (Qt::black);
86     case Qt::BackgroundRole: return myIsCurrentItem ? DFBrowserPane_Tools::LightHighlightColor() : QVariant();
87     default: break;
88   }
89   return QVariant();
90 }
91
92 // =======================================================================
93 // function : createChild
94 // purpose :
95 // =======================================================================
96 TreeModel_ItemBasePtr DFBrowserPane_TDataStdTreeNodeItem::createChild(int theRow, int theColumn)
97 {
98   return DFBrowserPane_TDataStdTreeNodeItem::CreateItem(currentItem(), theRow, theColumn);
99 }
100
101 // =======================================================================
102 // function : initItem
103 // purpose :
104 // =======================================================================
105 void DFBrowserPane_TDataStdTreeNodeItem::initItem() const
106 {
107   if (IsInitialized())
108     return;
109   const_cast<DFBrowserPane_TDataStdTreeNodeItem*>(this)->Init();
110 }
111
112 // =======================================================================
113 // function : getChildAttribute
114 // purpose :
115 // =======================================================================
116 Handle(TDF_Attribute) DFBrowserPane_TDataStdTreeNodeItem::getChildAttribute (const int theChildRow) const
117 {
118   Handle(TDF_Attribute) aResult;
119   
120   Handle(TDataStd_TreeNode) aTreeNode = Handle(TDataStd_TreeNode)::DownCast (myAttribute);
121   int aChildNodeId = 0;
122   for (TDataStd_ChildNodeIterator aChildIt (aTreeNode); aChildIt.More(); aChildIt.Next(), aChildNodeId++)
123   {
124     if (aChildNodeId != theChildRow)
125       continue;
126     aResult = aChildIt.Value();
127     break;
128   }
129   return aResult;
130 }
131
132 // =======================================================================
133 // function : getRowCount
134 // purpose :
135 // =======================================================================
136 int DFBrowserPane_TDataStdTreeNodeItem::getRowCount() const
137 {
138   initItem();
139   return myRowCount;
140 }