0029018: Documentation - Provide user guide for Qt browser
[occt.git] / tools / DFBrowserPane / DFBrowserPane_Tools.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_Tools.hxx>
17
18 #include <AIS_DisplayMode.hxx>
19 #include <CDM_CanCloseStatus.hxx>
20 #include <Graphic3d_MaterialAspect.hxx>
21 #include <Graphic3d_NameOfMaterial.hxx>
22 #include <Standard_Version.hxx>
23 #include <TCollection_AsciiString.hxx>
24 #include <TDataStd.hxx>
25 #include <TDataStd_RealEnum.hxx>
26 #include <TDataXtd.hxx>
27 #include <TDataXtd_ConstraintEnum.hxx>
28 #include <TDataXtd_GeometryEnum.hxx>
29 #include <TDF_Tool.hxx>
30 #include <TNaming.hxx>
31 #include <TNaming_NameType.hxx>
32 #include <TNaming_Evolution.hxx>
33 #include <TopAbs.hxx>
34 #include <TopAbs_ShapeEnum.hxx>
35 #include <TopAbs_Orientation.hxx>
36
37 #include <QApplication>
38 #include <QPalette>
39 #include <QStringList>
40 #include <QStyle>
41 #include <QWidget>
42
43 #include <sstream>
44
45 const int TABLE_COLUMN_0_WIDTH = 200;
46 const int TABLE_COLUMN_OTHER_WIDTH = 120;
47
48 // =======================================================================
49 // function : DefaultPanelColumnWidth
50 // purpose :
51 // =======================================================================
52 int DFBrowserPane_Tools::DefaultPanelColumnWidth (const int theColumnId)
53 {
54   return theColumnId == 0 ? TABLE_COLUMN_0_WIDTH : TABLE_COLUMN_OTHER_WIDTH;
55 }
56
57 // =======================================================================
58 // function : GetEntry
59 // purpose :
60 // =======================================================================
61 TCollection_AsciiString DFBrowserPane_Tools::GetEntry (const TDF_Label& theLabel)
62 {
63   if (theLabel.IsNull())
64     return "Null";
65
66   TCollection_AsciiString anAsciiEntry;
67   TDF_Tool::Entry(theLabel, anAsciiEntry);
68   return anAsciiEntry;
69 }
70
71 // =======================================================================
72 // function : GetPointerInfo
73 // purpose :
74 // =======================================================================
75 TCollection_AsciiString DFBrowserPane_Tools::GetPointerInfo (const Handle(Standard_Transient)& thePointer, const bool isShortInfo)
76 {
77   std::ostringstream aPtrStr;
78   aPtrStr << thePointer.operator->();
79   if (!isShortInfo)
80     return aPtrStr.str().c_str();
81
82   TCollection_AsciiString anInfoPtr (aPtrStr.str().c_str());
83   for (int aSymbolId = 1; aSymbolId < anInfoPtr.Length(); aSymbolId++)
84   {
85     if (anInfoPtr.Value(aSymbolId) != '0')
86     {
87       anInfoPtr = anInfoPtr.SubString(aSymbolId, anInfoPtr.Length());
88       anInfoPtr.Prepend("0x");
89       return anInfoPtr;
90     }
91   }
92   return aPtrStr.str().c_str();
93 }
94
95 // =======================================================================
96 // function : ShapeTypeInfo
97 // purpose :
98 // =======================================================================
99 QVariant DFBrowserPane_Tools::ShapeTypeInfo (const TopoDS_Shape& theShape)
100 {
101   return theShape.IsNull() ? QString ("Empty")
102                            : QString (DFBrowserPane_Tools::ToName (DB_SHAPE_TYPE, theShape.ShapeType()).ToCString());
103 }
104
105 // =======================================================================
106 // function : LightHighlightColor
107 // purpose :
108 // =======================================================================
109 QColor DFBrowserPane_Tools::LightHighlightColor()
110 {
111   QWidget aWidget;
112   QPalette aPalette = aWidget.palette();
113   return aPalette.highlight().color().lighter();
114 }
115
116 // =======================================================================
117 // function : ToName
118 // purpose :
119 // =======================================================================
120 TCollection_AsciiString DFBrowserPane_Tools::ToName (const DFBrowserPane_OcctEnumType& theType,
121                                                      const Standard_Integer& theEnumId)
122 {
123   Standard_SStream aSStream;
124   switch (theType)
125   {
126     case DB_CONSTRAINT_TYPE: { TDataXtd::Print ((TDataXtd_ConstraintEnum)theEnumId, aSStream); break; }
127     case DB_NAMING_TYPE:     { TNaming::Print ((TNaming_NameType)theEnumId, aSStream); break; }
128     case DB_SHAPE_TYPE:      { TopAbs::Print ((TopAbs_ShapeEnum)theEnumId, aSStream); break; }
129     case DB_NS_TYPE:         { TNaming::Print ((TNaming_Evolution)theEnumId, aSStream); break; }
130     case DB_GEOM_TYPE:       { TDataXtd::Print ((TDataXtd_GeometryEnum)theEnumId, aSStream); break; }
131     case DB_DIMENSION_TYPE:  { TDataStd::Print ((TDataStd_RealEnum)theEnumId, aSStream); break; }
132     case DB_MATERIAL_TYPE:   return Graphic3d_MaterialAspect::MaterialName (theEnumId+1);
133     case DB_DISPLAY_MODE:
134     {
135       switch (theEnumId)
136       {
137         case AIS_WireFrame: return "WireFrame";
138         case AIS_Shaded: return "Shaded";
139         default: return "UNKNOWN DISPLAY MODE";
140       }
141       break;
142     }
143     case DB_ORIENTATION_TYPE: { TopAbs::Print((TopAbs_Orientation)theEnumId, aSStream); break; }
144     case DB_CDM_CAN_CLOSE_STATUS:
145     {
146       switch (theEnumId)
147       {
148         case CDM_CCS_OK: return "OK";
149         case CDM_CCS_NotOpen: return "NotOpen";
150         case CDM_CCS_UnstoredReferenced: return "UnstoredReferenced";
151         case CDM_CCS_ReferenceRejection: return "ReferenceRejection";
152         default: return "UNKNOWN CDM_CanCloseStatus";
153       }
154       break;
155     }
156     default: return "UNKNOWN PARAMETER";
157   }
158   return aSStream.str().c_str();
159 }