Salome HOME
8462a2591c3a7c9e1ec6dba206fb5191610691bf
[modules/shaper.git] / src / XGUI / XGUI_InspectionPanel.h
1 // Copyright (C) 2014-2021  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #ifndef XGUI_INSPECTIONPANEL_H_
21 #define XGUI_INSPECTIONPANEL_H_
22
23 #include "XGUI.h"
24
25 #include <ModelAPI_Feature.h>
26
27 #include <QDockWidget>
28
29 #include <memory>
30
31 class XGUI_Workshop;
32 class QLineEdit;
33 class QTableWidget;
34 class QLabel;
35 class QTextBrowser;
36 class QVBoxLayout;
37 class QResizeEvent;
38 class QStackedWidget;
39 class QGridLayout;
40
41 class TopoDS_Shape;
42
43 class GeomAPI_Vertex;
44 class GeomAPI_Edge;
45 class GeomAPI_Wire;
46 class GeomAPI_Face;
47 class GeomAPI_Shell;
48 class GeomAPI_Solid;
49 class GeomAPI_Shape;
50
51 class GeomAPI_Pln;
52 class GeomAPI_Sphere;
53 class GeomAPI_Cylinder;
54 class GeomAPI_Cone;
55 class GeomAPI_Torus;
56 class GeomAPI_Box;
57 class ModuleBase_PageWidget;
58
59 /// Internal name of property panel widget
60 MAYBE_UNUSED const static char* INSPECTION_PANEL = "inspection_panel_dock";
61
62 /**
63 * \ingroup GUI
64 * A class which represents an inspection panel: to show content of currently selected objects
65 */
66 class XGUI_EXPORT XGUI_InspectionPanel : public QDockWidget
67 {
68   Q_OBJECT
69 public:
70   /// Type of selected objects
71   enum SudShape {
72     ShapeId,
73     CompoundId,
74     CompsolidId,
75     SolidId,
76     ShellId,
77     FaceId,
78     WireId,
79     EdgeId,
80     VertexId
81   };
82
83   /// Constructor
84   /// \param theParent is a parent of the property panel
85   /// \param theMgr operation manager
86   XGUI_InspectionPanel(QWidget* theParent, XGUI_Workshop* theWorkshop);
87
88   // Destructor
89   virtual ~XGUI_InspectionPanel();
90
91 protected:
92   virtual void showEvent(QShowEvent* theEvent);
93
94 private slots:
95   /// A slot to react on selection changed
96   void onSelectionChanged();
97
98 private:
99   /// Set counts of a sub-shapes
100   /// \param theId an id of sub-shape type
101   /// \param theVal a number of sub-shapes of corresponded type
102   void setSubShapeValue(SudShape theId, int theVal);
103
104   /// Set name of current selection
105   /// \param theName the name
106   void setName(const QString& theName);
107
108   /// Set content of selected shape into table
109   /// \param theShape the shape
110   void setShapeContent(const TopoDS_Shape& theShape);
111
112   /// Set parameters of the selected shape
113   /// \param theShape the shape
114   void setShapeParams(const TopoDS_Shape& theShape);
115
116   /// Clear content of the window
117   void clearContent();
118
119   /// Show parameters of a vertex
120   /// \param theVertex the vertex
121   void fillVertex(const std::shared_ptr<GeomAPI_Vertex>& theVertex);
122
123   /// Show parameters of a edge
124   /// \param theEdge the edge
125   void fillEdge(const std::shared_ptr<GeomAPI_Edge>& theEdge);
126
127   /// Show parameters of a wire
128   /// \param theWire the wire
129   void fillWire(const std::shared_ptr<GeomAPI_Wire>& theWire);
130
131   /// Show parameters of a face
132   /// \param theFace the face
133   void fillFace(const std::shared_ptr<GeomAPI_Face>& theFace);
134
135   /// Show parameters of a shell
136   /// \param theShell the shell
137   void fillShell(const std::shared_ptr<GeomAPI_Shell>& theShell);
138
139   /// Show parameters of a solid
140   /// \param theSolid the solid
141   void fillSolid(const std::shared_ptr<GeomAPI_Solid>& theSolid);
142
143   /// Show parameters of a compound
144   /// \param theShape the compound
145   void fillContainer(const std::shared_ptr<GeomAPI_Shape>& theShape);
146
147   /// Show parameters of a plane
148   /// \param theTitle a title of the object
149   /// \param thePlane the plane
150   void setPlaneType(const QString& theTitle, const std::shared_ptr<GeomAPI_Pln>& thePlane);
151
152   /// Show parameters of a sphere
153   /// \param theTitle a title of the object
154   /// \param theSphere the sphere
155   void setSphereType(const QString& theTitle, const std::shared_ptr<GeomAPI_Sphere>& theSphere);
156
157   /// Show parameters of a cylinder
158   /// \param theTitle a title of the object
159   /// \param theCyl the cylinder
160   void setCylinderType(const QString& theTitle, const std::shared_ptr<GeomAPI_Cylinder>& theCyl);
161
162   /// Show parameters of a cone
163   /// \param theTitle a title of the object
164   /// \param theCone the cone
165   void setConeType(const QString& theTitle, const std::shared_ptr<GeomAPI_Cone>& theCone);
166
167   /// Show parameters of a torus
168   /// \param theTitle a title of the object
169   /// \param theTorus the torus
170   void setTorusType(const QString& theTitle, const std::shared_ptr<GeomAPI_Torus>& theTorus);
171
172   /// Show parameters of a box
173   /// \param theTitle a title of the object
174   /// \param theBox the box
175   void setBoxType(const QString& theTitle, const std::shared_ptr<GeomAPI_Box>& theBox);
176
177   /// Show parameters of a rotated box
178   /// \param theTitle a title of the object
179   /// \param theBox the box
180   void setRotatedBoxType(const QString& theTitle, const std::shared_ptr<GeomAPI_Box>& theBox);
181
182   /// Set text into parameters area
183   /// \param theText the text
184   void setParamsText(const QString& theText);
185
186   /// Fills Feature panel with controls specific to the given feature
187   /// \param theFeature the selected feature
188   void buildFeaturePane(const FeaturePtr& theFeature);
189
190 private:
191   XGUI_Workshop* myWorkshop; //> selection manager
192
193   QLineEdit* myNameEdt; ///> Name field
194   QTableWidget* mySubShapesTab; ///> table of sub-shapes
195   QLabel* myTypeLbl; ///> label of a type
196   QTextBrowser* myTypeParams; ///> parameters area
197   QVBoxLayout* myMainLayout; ///> main layout
198   ModuleBase_PageWidget* myFeaturePane; ///> Content of feature property panel
199   QGridLayout* myFeatureLayout; ///> Layout of feature panel
200   QStackedWidget* myStackWgt; ///> base widget of the panel
201   int myShapePanelId;
202   int myFeaturePanelId;
203 };
204
205 #endif