Salome HOME
Remove DirY from Sketch attributes
[modules/shaper.git] / src / PartSet / PartSet_WidgetSketchLabel.cpp
index 454d0e1fca98f0575417aa88d2ec52e4beab12c7..d47fadecdcdc159462422c6fffc9261e4f09d327 100644 (file)
@@ -7,6 +7,8 @@
 #include "PartSet_WidgetSketchLabel.h"
 #include "PartSet_Tools.h"
 
+#include "SketchPlugin_SketchEntity.h"
+
 #include <XGUI_Workshop.h>
 #include <XGUI_Displayer.h>
 #include <XGUI_SelectionMgr.h>
@@ -16,6 +18,7 @@
 
 #include <ModuleBase_Operation.h>
 #include <ModuleBase_ViewerPrs.h>
+#include <ModuleBase_Tools.h>
 
 #include <GeomAlgoAPI_FaceBuilder.h>
 #include <GeomDataAPI_Point.h>
 
 #include <QLabel>
 #include <QTimer>
-
-#define PLANE_SIZE          "200"     
-#define SKETCH_WIDTH        "4"
+#include <QApplication>
+#include <QVBoxLayout>
 
 
 PartSet_WidgetSketchLabel::PartSet_WidgetSketchLabel(QWidget* theParent,
                                                      const Config_WidgetAPI* theData,
                                                      const std::string& theParentId)
-    : ModuleBase_ModelWidget(theParent, theData, theParentId), myPreviewDisplayed(false)
+    : ModuleBase_ModelWidget(theParent, theData, theParentId),
+      myPreviewDisplayed(false),
+      myWorkshop(NULL)
 {
   myText = QString::fromStdString(theData->getProperty("title"));
   myLabel = new QLabel("", theParent);
@@ -56,6 +60,11 @@ PartSet_WidgetSketchLabel::PartSet_WidgetSketchLabel(QWidget* theParent,
   mySelectionTimer = new QTimer(this);
   connect(mySelectionTimer, SIGNAL(timeout()), SLOT(setSketchingMode()));
   mySelectionTimer->setSingleShot(true);
+
+  QVBoxLayout* aLayout = new QVBoxLayout(this);
+  ModuleBase_Tools::zeroMargins(aLayout);
+  aLayout->addWidget(myLabel);
+  setLayout(aLayout);
 }
 
 PartSet_WidgetSketchLabel::~PartSet_WidgetSketchLabel()
@@ -65,12 +74,9 @@ PartSet_WidgetSketchLabel::~PartSet_WidgetSketchLabel()
 
 QList<QWidget*> PartSet_WidgetSketchLabel::getControls() const
 {
-  return QList<QWidget*>();
-}
-
-QWidget* PartSet_WidgetSketchLabel::getControl() const
-{
-  return myLabel;
+  QList<QWidget*> aResult;
+  aResult << myLabel;
+  return aResult;
 }
 
 void PartSet_WidgetSketchLabel::onPlaneSelected()
@@ -89,7 +95,7 @@ void PartSet_WidgetSketchLabel::onPlaneSelected()
           DataPtr aData = feature()->data();
           AttributeSelectionPtr aSelAttr = 
             std::dynamic_pointer_cast<ModelAPI_AttributeSelection>
-            (aData->attribute(SketchPlugin_Feature::EXTERNAL_ID()));
+            (aData->attribute(SketchPlugin_SketchEntity::EXTERNAL_ID()));
           if (aSelAttr) {
             ResultPtr aRes = std::dynamic_pointer_cast<ModelAPI_Result>(aPrs.object());
             if (aRes) {
@@ -110,13 +116,14 @@ void PartSet_WidgetSketchLabel::onPlaneSelected()
         // Clear selection mode and define sketching mode
         XGUI_Displayer* aDisp = myWorkshop->displayer();
         aDisp->removeSelectionFilter(myFaceFilter);
-        aDisp->closeLocalContexts();
+        //aDisp->closeLocalContexts();
         emit planeSelected(plane());
         setSketchingMode();
 
         // Update sketcher actions
         XGUI_ActionsMgr* anActMgr = myWorkshop->actionsMgr();
         anActMgr->update();
+        myWorkshop->viewer()->update();
       }
     }
   }
@@ -129,7 +136,18 @@ std::shared_ptr<GeomAPI_Pln> PartSet_WidgetSketchLabel::plane() const
 
 }
 
-void PartSet_WidgetSketchLabel::activate()
+bool PartSet_WidgetSketchLabel::focusTo()
+{
+  myLabel->setFocus();
+  return true;
+}
+
+void PartSet_WidgetSketchLabel::enableFocusProcessing()
+{
+  myLabel->installEventFilter(this);
+}
+
+void PartSet_WidgetSketchLabel::activateCustom()
 {
   std::shared_ptr<GeomAPI_Pln> aPlane = plane();
   if (aPlane) {
@@ -141,8 +159,8 @@ void PartSet_WidgetSketchLabel::activate()
     showPreviewPlanes();
 
     XGUI_Displayer* aDisp = myWorkshop->displayer();
-    aDisp->openLocalContext();
-    aDisp->activateObjects(QIntList());
+    //aDisp->openLocalContext();
+    //aDisp->activateObjects(QIntList());
     if (myFaceFilter.IsNull())
       myFaceFilter = new StdSelect_FaceFilter(StdSelect_Plane);
     aDisp->addSelectionFilter(myFaceFilter);
@@ -165,7 +183,7 @@ void PartSet_WidgetSketchLabel::deactivate()
   XGUI_Displayer* aDisp = myWorkshop->displayer();
   aDisp->removeSelectionFilter(myFaceFilter);
   //aDisp->removeSelectionFilter(mySketchFilter);
-  aDisp->closeLocalContexts();
+  //aDisp->closeLocalContexts();
   erasePreviewPlanes();
 }
 
@@ -192,9 +210,16 @@ void PartSet_WidgetSketchLabel::showPreviewPlanes()
     std::shared_ptr<GeomAPI_Dir> aXZDir(new GeomAPI_Dir(0, 1, 0));
     std::shared_ptr<GeomAPI_Dir> aXYDir(new GeomAPI_Dir(0, 0, 1));
 
-    int aR[] = {255, 0, 0};
-    int aG[] = {0, 255, 0};
-    int aB[] = {0, 0, 255};
+    std::vector<int> aYZRGB, aXZRGB, aXYRGB;
+    aYZRGB = Config_PropManager::color("Visualization", "yz_plane_color",
+                                                        YZ_PLANE_COLOR);
+    aXZRGB = Config_PropManager::color("Visualization", "xz_plane_color",
+                                                        XZ_PLANE_COLOR);
+    aXYRGB = Config_PropManager::color("Visualization", "xy_plane_color",
+                                                        XY_PLANE_COLOR);
+    int aR[] = {aYZRGB[0], aYZRGB[1], aYZRGB[2]};
+    int aG[] = {aXZRGB[0], aXZRGB[1], aXZRGB[2]};
+    int aB[] = {aXYRGB[0], aXYRGB[1], aXYRGB[2]};
 
     myYZPlane = createPreviewPlane(anOrigin, aYZDir, aR);
     myXZPlane = createPreviewPlane(anOrigin, aXZDir, aG);
@@ -212,7 +237,7 @@ AISObjectPtr PartSet_WidgetSketchLabel::createPreviewPlane(std::shared_ptr<GeomA
                                                            std::shared_ptr<GeomAPI_Dir> theNorm, 
                                                            const int theRGB[3])
 {
-  double aSize = Config_PropManager::integer("Sketch planes", "Size of planes", PLANE_SIZE);
+  double aSize = Config_PropManager::integer("Sketch planes", "planes_size", PLANE_SIZE);
   std::shared_ptr<GeomAPI_Shape> aFace = GeomAlgoAPI_FaceBuilder::square(theOrigin, theNorm, aSize);
   AISObjectPtr aAIS = AISObjectPtr(new GeomAPI_AISObject());
   aAIS->createShape(aFace);
@@ -262,9 +287,6 @@ std::shared_ptr<GeomAPI_Dir> PartSet_WidgetSketchLabel::setSketchPlane(const Top
   std::shared_ptr<GeomDataAPI_Dir> aDirX = std::dynamic_pointer_cast<GeomDataAPI_Dir>(
       aData->attribute(SketchPlugin_Sketch::DIRX_ID()));
   aDirX->setValue(aXDir);
-  std::shared_ptr<GeomDataAPI_Dir> aDirY = std::dynamic_pointer_cast<GeomDataAPI_Dir>(
-      aData->attribute(SketchPlugin_Sketch::DIRY_ID()));
-  aDirY->setValue(aYDir);
   std::shared_ptr<GeomAPI_Dir> aDir = aPlane->direction();
   return aDir;
 }
@@ -272,24 +294,13 @@ std::shared_ptr<GeomAPI_Dir> PartSet_WidgetSketchLabel::setSketchPlane(const Top
 
 void PartSet_WidgetSketchLabel::setSketchingMode()
 {
-  qDebug("### Set sketching mode");
-
   XGUI_Displayer* aDisp = myWorkshop->displayer();
-  QIntList aModes;
   // Clear standard selection modes if they are defined
-  aDisp->activateObjects(aModes);
-  aDisp->openLocalContext();
-
-  // Set filter
-  std::shared_ptr<GeomAPI_Pln> aPlane = plane();
-  double aA, aB, aC, aD;
-  aPlane->coefficients(aA, aB, aC, aD);
-  gp_Pln aPln(aA, aB, aC, aD);
-  // No selection of external objects
-  //mySketchFilter = new ModuleBase_ShapeInPlaneFilter(aPln);
-  //aDisp->addSelectionFilter(mySketchFilter);
+  //aDisp->activateObjects(aModes);
+  //aDisp->openLocalContext();
 
   // Get default selection modes
+  QIntList aModes;
   aModes.append(AIS_DSM_Text);
   aModes.append(AIS_DSM_Line);
   aModes.append(AIS_Shape::SelectionMode((TopAbs_ShapeEnum) TopAbs_VERTEX));