]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Task 2.1 "Functionality of inspection 'what is'" from CEA specification. Panel definition
authorvsv <vsv@opencascade.com>
Tue, 3 Jul 2018 17:35:25 +0000 (20:35 +0300)
committervsv <vsv@opencascade.com>
Tue, 3 Jul 2018 17:35:25 +0000 (20:35 +0300)
src/XGUI/CMakeLists.txt
src/XGUI/XGUI_InspectionPanel.cpp [new file with mode: 0644]
src/XGUI/XGUI_InspectionPanel.h [new file with mode: 0644]
src/XGUI/XGUI_Workshop.cpp
src/XGUI/XGUI_Workshop.h

index 72be73b8ff01f17cdef47dc197fe801e445cf8da..9602b24c5cd27a3ffc41dbe4f301b94ae7fdfab3 100644 (file)
@@ -62,6 +62,7 @@ SET(PROJECT_HEADERS
     XGUI_ViewerProxy.h
     XGUI_Workshop.h
     XGUI_WorkshopListener.h
+       XGUI_InspectionPanel.h
 )
 
 SET(PROJECT_MOC_HEADERS
@@ -89,6 +90,7 @@ SET(PROJECT_MOC_HEADERS
     XGUI_ViewerProxy.h
     XGUI_Workshop.h
     XGUI_WorkshopListener.h
+       XGUI_InspectionPanel.h
 )
 
 # sources / moc wrappings
@@ -127,6 +129,7 @@ SET(PROJECT_SOURCES
     XGUI_ViewerProxy.cpp
     XGUI_Workshop.cpp
     XGUI_WorkshopListener.cpp
+       XGUI_InspectionPanel.cpp
 )
 
 SET(PROJECT_RESOURCES
diff --git a/src/XGUI/XGUI_InspectionPanel.cpp b/src/XGUI/XGUI_InspectionPanel.cpp
new file mode 100644 (file)
index 0000000..b89334e
--- /dev/null
@@ -0,0 +1,240 @@
+// Copyright (C) 2014-2017  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or
+// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+//
+
+#include "XGUI_InspectionPanel.h"
+#include "XGUI_SelectionMgr.h"
+#include "XGUI_Selection.h"
+
+#include <QLayout>
+#include <QScrollArea>
+#include <QLabel>
+#include <QLineEdit>
+#include <QTableWidget>
+#include <QHeaderView>
+#include <QTextBrowser>
+
+XGUI_InspectionPanel::XGUI_InspectionPanel(QWidget* theParent, XGUI_SelectionMgr* theMgr)
+  : QDockWidget(theParent),
+  mySelectionMgr(theMgr)
+{
+  setWindowTitle(tr("Inspection Panel"));
+  setObjectName(INSPECTION_PANEL);
+  setStyleSheet("::title { position: relative; padding-left: 5px; text-align: left center }");
+
+  QScrollArea* aScrollArea = new QScrollArea(this);
+  setWidget(aScrollArea);
+
+  // Create an internal widget
+  QWidget* aMainWidget = new QWidget(aScrollArea);
+
+  QVBoxLayout* aMainLayout = new QVBoxLayout(aMainWidget);
+  aMainLayout->setContentsMargins(5, 5, 5, 5);
+
+  QWidget* aNameWgt = new QWidget(aMainWidget);
+  QHBoxLayout* aNameLayout = new QHBoxLayout(aNameWgt);
+  aNameLayout->setContentsMargins(0, 0, 0, 0);
+  aNameLayout->addWidget(new QLabel(tr("Object"), aNameWgt));
+  myNameEdt = new QLineEdit(aNameWgt);
+  myNameEdt->setReadOnly(true);
+  aNameLayout->addWidget(myNameEdt);
+
+  aMainLayout->addWidget(aNameWgt);
+
+  // Table with sub-shapes
+  mySubShapesTab = new QTableWidget(9, 2, aMainWidget);
+  mySubShapesTab->setFocusPolicy(Qt::NoFocus);
+  mySubShapesTab->verticalHeader()->hide();
+  QStringList aTitles;
+  aTitles << tr("Sub-shapes") << tr("Number");
+  mySubShapesTab->setHorizontalHeaderLabels(aTitles);
+
+  QStringList aSubShapes;
+  aSubShapes << "SHAPE" << "COMPOUND" << "COMPSOLID" <<
+    "SOLID" << "SHELL" << "FACE" << "WIRE" << "EDGE" << "VERTEX";
+  int i = 0;
+  foreach(QString aType, aSubShapes) {
+    QTableWidgetItem* aItem = new QTableWidgetItem(aType);
+    aItem->setFlags(Qt::ItemIsEnabled);
+    mySubShapesTab->setItem(i++, 0, aItem);
+  }
+  for (i = 0; i < 9; i++) {
+    QTableWidgetItem* aItem = new QTableWidgetItem("0");
+    aItem->setFlags(Qt::ItemIsEnabled);
+    aItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
+    mySubShapesTab->setItem(i, 1, aItem);
+  }
+  mySubShapesTab->setColumnWidth(0, 90);
+  mySubShapesTab->setColumnWidth(1, 70);
+
+  mySubShapesTab->setMaximumWidth(170);
+  mySubShapesTab->setMinimumHeight(300);
+
+  aMainLayout->addWidget(mySubShapesTab);
+
+  // Type of object
+  QWidget* aTypeWgt = new QWidget(aMainWidget);
+  QHBoxLayout* aTypeLayout = new QHBoxLayout(aTypeWgt);
+  aTypeLayout->setContentsMargins(0, 0, 0, 0);
+
+  aTypeLayout->addWidget(new QLabel(tr("Type:"), aTypeWgt));
+  myTypeLbl = new QLabel("No-type", aTypeWgt);
+  aTypeLayout->addWidget(myTypeLbl);
+
+  aMainLayout->addWidget(aTypeWgt);
+
+  myTypeParams = new QTextBrowser(aMainWidget);
+  myTypeParams->setMaximumWidth(170);
+  myTypeParams->setMaximumHeight(160);
+  myTypeParams->setReadOnly(true);
+  myTypeParams->setFocusPolicy(Qt::NoFocus);
+  myTypeParams->setFrameStyle(QFrame::NoFrame);
+  myTypeParams->viewport()->setBackgroundRole(QPalette::Window);
+
+  aMainLayout->addWidget(myTypeParams);
+
+  aScrollArea->setWidget(aMainWidget);
+
+  connect(mySelectionMgr, SIGNAL(selectionChanged()), SLOT(onSelectionChanged()));
+
+  // Test
+  setVertexType(0, 0, 0);
+}
+
+XGUI_InspectionPanel::~XGUI_InspectionPanel()
+{
+}
+
+void XGUI_InspectionPanel::setSubShapeValue(SudShape theId, int theVal)
+{
+  mySubShapesTab->item(theId, 1)->setText(QString::number(theVal));
+}
+
+void XGUI_InspectionPanel::onSelectionChanged()
+{
+  QObjectPtrList aObjects = mySelectionMgr->selection()->selectedObjects();
+  if (aObjects.count() > 0) {
+    ObjectPtr aObj = aObjects.first();
+    setName(aObj->data()->name().c_str());
+  }
+}
+
+void XGUI_InspectionPanel::setName(const QString& theName)
+{
+  myNameEdt->setText(theName);
+}
+
+#define TITLE(val) ("<b>" + val + "</b>")
+
+void XGUI_InspectionPanel::setCylinderType(double theX, double theY, double theZ,
+  double theDX, double theDY, double theDZ, double theRadius, double theHeight)
+{
+  myTypeLbl->setText(tr("Cylinder"));
+  QString aParams = TITLE(tr("Center")) +
+    "<br> X: " + QString::number(theX) +
+    "<br> Y: " + QString::number(theY) +
+    "<br> Z: " + QString::number(theZ) +
+    "<br>" + TITLE(tr("Axis")) +
+    "<br> DX: " + QString::number(theDX) +
+    "<br> DY: " + QString::number(theDY) +
+    "<br> DZ: " + QString::number(theDZ) +
+    "<br>" + TITLE(tr("Dimensions")) +
+    "<br>" + tr("Radius:") + QString::number(theRadius) +
+    "<br>" + tr("Height") + QString::number(theHeight);
+
+  myTypeParams->setText(aParams);
+}
+
+void XGUI_InspectionPanel::setSphereType(double theX, double theY, double theZ, double theRadius)
+{
+  myTypeLbl->setText(tr("Sphere"));
+  QString aParams = TITLE(tr("Center")) +
+    "<br> X: " + QString::number(theX) +
+    "<br> Y: " + QString::number(theY) +
+    "<br> Z: " + QString::number(theZ) +
+    "<br>" + TITLE(tr("Dimensions")) +
+    "<br>" + tr("Radius:") + QString::number(theRadius);
+  myTypeParams->setText(aParams);
+}
+
+void XGUI_InspectionPanel::setBoxType(double theX, double theY, double theZ,
+  double theXsize, double theYsize, double theZsize)
+{
+  myTypeLbl->setText(tr("Box"));
+  QString aParams = TITLE(tr("Position")) +
+    "<br> X: " + QString::number(theX) +
+    "<br> Y: " + QString::number(theY) +
+    "<br> Z: " + QString::number(theZ) +
+    "<br>" + TITLE(tr("Dimensions")) +
+    "<br>" + "Ax :" + QString::number(theXsize) +
+    "<br>" + "Ay :" + QString::number(theYsize) +
+    "<br>" + "Az :" + QString::number(theZsize);
+  myTypeParams->setText(aParams);
+}
+
+
+void XGUI_InspectionPanel::setRotatedBoxType(double theX, double theY, double theZ,
+  double theZaxisX, double theZaxisY, double theZaxisZ,
+  double theXaxisX, double theXaxisY, double theXaxisZ,
+  double theXsize, double theYsize, double theZsize)
+{
+  myTypeLbl->setText(tr("Box"));
+  QString aParams = TITLE(tr("Position")) +
+    "<br> X: " + QString::number(theX) +
+    "<br> Y: " + QString::number(theY) +
+    "<br> Z: " + QString::number(theZ) +
+    "<br>" + TITLE(tr("Z axis")) +
+    "<br> DX: " + QString::number(theZaxisX) +
+    "<br> DY: " + QString::number(theZaxisY) +
+    "<br> DZ: " + QString::number(theZaxisZ) +
+    "<br>" + TITLE(tr("X axis")) +
+    "<br> DX: " + QString::number(theXaxisX) +
+    "<br> DY: " + QString::number(theXaxisY) +
+    "<br> DZ: " + QString::number(theXaxisZ) +
+    "<br>" + TITLE(tr("Dimensions")) +
+    "<br>" + "Ax :" + QString::number(theXsize) +
+    "<br>" + "Ay :" + QString::number(theYsize) +
+    "<br>" + "Az :" + QString::number(theZsize);
+  myTypeParams->setText(aParams);
+}
+
+void XGUI_InspectionPanel::setPlaneType(double theX, double theY, double theZ,
+  double theDX, double theDY, double theDZ)
+{
+  myTypeLbl->setText(tr("Plane"));
+  QString aParams = TITLE(tr("Center")) +
+    "<br> X: " + QString::number(theX) +
+    "<br> Y: " + QString::number(theY) +
+    "<br> Z: " + QString::number(theZ) +
+    "<br>" + TITLE(tr("Normal")) +
+    "<br> DX: " + QString::number(theDX) +
+    "<br> DY: " + QString::number(theDY) +
+    "<br> DZ: " + QString::number(theDZ);
+  myTypeParams->setText(aParams);
+}
+
+void XGUI_InspectionPanel::setVertexType(double theX, double theY, double theZ)
+{
+  myTypeLbl->setText(tr("Vertex"));
+  QString aParams = TITLE(tr("Coordinates")) +
+    "<br> X: " + QString::number(theX) +
+    "<br> Y: " + QString::number(theY) +
+    "<br> Z: " + QString::number(theZ);
+  myTypeParams->setText(aParams);
+}
\ No newline at end of file
diff --git a/src/XGUI/XGUI_InspectionPanel.h b/src/XGUI/XGUI_InspectionPanel.h
new file mode 100644 (file)
index 0000000..27ea2a8
--- /dev/null
@@ -0,0 +1,95 @@
+// Copyright (C) 2014-2017  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or
+// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+//
+
+#ifndef XGUI_INSPECTIONPANEL_H_
+#define XGUI_INSPECTIONPANEL_H_
+
+#include "XGUI.h"
+
+#include <QDockWidget>
+
+class XGUI_SelectionMgr;
+class QLineEdit;
+class QTableWidget;
+class QLabel;
+class QTextBrowser;
+
+/// Internal name of property panel widget
+const static char* INSPECTION_PANEL = "inspection_panel_dock";
+
+class XGUI_EXPORT XGUI_InspectionPanel : public QDockWidget
+{
+  Q_OBJECT
+public:
+  enum SudShape {
+    ShapeId,
+    CompoundId,
+    CompsolidId,
+    SolidId,
+    ShellId,
+    FaceId,
+    WireId,
+    EdgeId,
+    VertexId
+  };
+
+  /// Constructor
+  /// \param theParent is a parent of the property panel
+  /// \param theMgr operation manager
+  XGUI_InspectionPanel(QWidget* theParent, XGUI_SelectionMgr* theMgr);
+
+  virtual ~XGUI_InspectionPanel();
+
+  void setSubShapeValue(SudShape theId, int theVal);
+
+  void setName(const QString& theName);
+
+  // Set of type parameters
+  void setCylinderType(double theX, double theY, double theZ,
+    double theDX, double theDY, double theDZ, double theRadius, double theHeight);
+
+  void setSphereType(double theX, double theY, double theZ, double theRadius);
+
+  void setBoxType(double theX, double theY, double theZ,
+    double theXsize, double theYsize, double theZsize);
+
+  void setRotatedBoxType(double theX, double theY, double theZ,
+    double theZaxisX, double theZaxisY, double theZaxisZ,
+    double theXaxisX, double theXaxisY, double theXaxisZ,
+    double theXsize, double theYsize, double theZsize);
+
+  void setPlaneType(double theX, double theY, double theZ,
+    double theDX, double theDY, double theDZ);
+
+  void setVertexType(double theX, double theY, double theZ);
+
+private slots:
+  void onSelectionChanged();
+
+private:
+  XGUI_SelectionMgr* mySelectionMgr;
+
+  QLineEdit* myNameEdt;
+  QTableWidget* mySubShapesTab;
+  QLabel* myTypeLbl;
+  QTextBrowser* myTypeParams;
+};
+
+#endif
\ No newline at end of file
index 9ca33837f0da0fc847c1073470a3d51066038bd9..caf8e541b84214648dae8947618801ff677b7958 100755 (executable)
@@ -50,6 +50,7 @@
 #include <XGUI_HistoryMenu.h>
 #include <XGUI_QtEvents.h>
 #include <XGUI_DataModel.h>
+#include <XGUI_InspectionPanel.h>
 
 #ifndef HAVE_SALOME
 #include <AppElements_Button.h>
@@ -174,6 +175,7 @@ XGUI_Workshop::XGUI_Workshop(XGUI_SalomeConnector* theConnector)
       myModule(NULL),
       mySalomeConnector(theConnector),
       myPropertyPanel(0),
+      myInspectionPanel(0),
       myFacesPanel(0),
       myObjectBrowser(0),
       myDisplayer(0)
@@ -1341,6 +1343,11 @@ void XGUI_Workshop::createDockWidgets()
                                 Qt::BottomDockWidgetArea);
   connect(myFacesPanel, SIGNAL(closed()), myFacesPanel, SLOT(onClosed()));
 
+  myInspectionPanel = new XGUI_InspectionPanel(aDesktop, mySelector);
+  myInspectionPanel->setAllowedAreas(Qt::LeftDockWidgetArea |
+    Qt::RightDockWidgetArea);
+  aDesktop->addDockWidget(Qt::RightDockWidgetArea, myInspectionPanel);
+
   aDesktop->addDockWidget(
 #ifdef HAVE_SALOME
     Qt::RightDockWidgetArea,
index 7495365b43824d14eb09af3ea719752d016a1df4..7af135fc8ba7c165fd1d0954cfee97b59a2cc42d 100755 (executable)
@@ -63,6 +63,7 @@ class XGUI_SelectionActivate;
 class XGUI_SelectionMgr;
 class XGUI_ViewerProxy;
 class XGUI_WorkshopListener;
+class XGUI_InspectionPanel;
 
 class ModuleBase_IModule;
 class ModuleBase_IViewer;
@@ -130,6 +131,9 @@ Q_OBJECT
   /// Returns property panel widget
   XGUI_PropertyPanel* propertyPanel() const { return myPropertyPanel; }
 
+  /// Returns property panel widget
+  XGUI_InspectionPanel* inspectionPanel() const { return myInspectionPanel; }
+
   /// Returns panel for hide object faces
   XGUI_FacesPanel* facesPanel() const { return myFacesPanel; }
 
@@ -480,10 +484,6 @@ private:
   /// \param theParent a parent of widget
   QDockWidget* createObjectBrowser(QWidget* theParent);
 
-  /// Create property panel widget
-  /// \param theParent a parent of widget
-  QDockWidget* createPropertyPanel(QWidget* theParent);
-
   // Creates Dock widgets: Object browser and Property panel
   void createDockWidgets();
 
@@ -528,6 +528,7 @@ private:
   QString myCurrentDir; ///< cached the last open directory
   QIntList myViewerSelMode; ///< selection modes set in the viewer
   Config_DataModelReader* myDataModelXMLReader; ///< XML reader of data model
+  XGUI_InspectionPanel* myInspectionPanel; ///< container of feature attributes widgets
 };
 
 #endif