Salome HOME
Restore old planes selection definition
[modules/shaper.git] / src / PartSet / PartSet_OperationFeatureEdit.cpp
index 2626c68993895b781fe05bcae3639204019a3550..7975baa652d223a39a1765023498965bc8b29277 100644 (file)
@@ -6,23 +6,28 @@
 #include <PartSet_Tools.h>
 #include <PartSet_OperationSketch.h>
 
+#include <SketchPlugin_Constraint.h>
+
 #include <ModuleBase_OperationDescription.h>
-#include <Model_Events.h>
+#include <ModuleBase_WidgetEditor.h>
+#include <ModuleBase_ViewerPrs.h>
 
-#include <XGUI_ViewerPrs.h>
+#include <ModelAPI_Events.h>
 
 #include <SketchPlugin_Feature.h>
 #include <GeomDataAPI_Point2D.h>
 #include <ModelAPI_Data.h>
 #include <ModelAPI_Document.h>
 
-#include <Model_Events.h>
+#include <ModelAPI_Events.h>
 
 #include <Events_Loop.h>
 
 #include <SketchPlugin_Line.h>
 
 #include <V3d_View.hxx>
+#include <AIS_DimensionOwner.hxx>
+#include <AIS_DimensionSelectionMode.hxx>
 
 #ifdef _DEBUG
 #include <QDebug>
@@ -48,41 +53,40 @@ bool PartSet_OperationFeatureEdit::isGranted(ModuleBase_IOperation* theOperation
   return theOperation->getDescription()->operationId().toStdString() == PartSet_OperationSketch::Type();
 }
 
-std::list<int> PartSet_OperationFeatureEdit::getSelectionModes(FeaturePtr theFeature) const
+std::list<int> PartSet_OperationFeatureEdit::getSelectionModes(ObjectPtr theFeature) const
 {
   return PartSet_OperationSketchBase::getSelectionModes(theFeature);
 }
 
-void PartSet_OperationFeatureEdit::init(FeaturePtr theFeature,
-                                     const std::list<XGUI_ViewerPrs>& theSelected,
-                                     const std::list<XGUI_ViewerPrs>& theHighlighted)
+void PartSet_OperationFeatureEdit::initFeature(FeaturePtr theFeature)
 {
   setEditingFeature(theFeature);
 }
 
+
 FeaturePtr PartSet_OperationFeatureEdit::sketch() const
 {
   return mySketch;
 }
 
 void PartSet_OperationFeatureEdit::mousePressed(QMouseEvent* theEvent, Handle(V3d_View) theView,
-                                             const std::list<XGUI_ViewerPrs>& /*theSelected*/,
-                                             const std::list<XGUI_ViewerPrs>& theHighlighted)
+                                             const std::list<ModuleBase_ViewerPrs>& theSelected,
+                                             const std::list<ModuleBase_ViewerPrs>& theHighlighted)
 {
-  FeaturePtr aFeature;
+  ObjectPtr aFeature;
   if (!theHighlighted.empty())
-    aFeature = theHighlighted.front().feature();
-
-  if (!aFeature || aFeature != feature())
-  {
+    aFeature = theHighlighted.front().object();
+  if (!aFeature && !theSelected.empty()) // changed for a constrain
+    aFeature = theSelected.front().object();
+  if (!aFeature || aFeature != feature()) {
     commit();
     emit featureConstructed(feature(), FM_Deactivation);
 
     bool aHasShift = (theEvent->modifiers() & Qt::ShiftModifier);
     if(aHasShift && !theHighlighted.empty()) {
-      QFeatureList aSelected;
+      QList<ObjectPtr> aSelected;
       aSelected.push_back(feature());
-      aSelected.push_back(theHighlighted.front().feature());
+      aSelected.push_back(theHighlighted.front().object());
       emit setSelection(aSelected);
     }
     else if (aFeature) {
@@ -119,12 +123,33 @@ void PartSet_OperationFeatureEdit::mouseMoved(QMouseEvent* theEvent, Handle(V3d_
 }
 
 void PartSet_OperationFeatureEdit::mouseReleased(QMouseEvent* theEvent, Handle(V3d_View) theView,
-                                              const std::list<XGUI_ViewerPrs>& /*theSelected*/,
-                                              const std::list<XGUI_ViewerPrs>& /*theHighlighted*/)
+                                              const std::list<ModuleBase_ViewerPrs>& /*theSelected*/,
+                                              const std::list<ModuleBase_ViewerPrs>& /*theHighlighted*/)
 {
   blockSelection(false);
 }
 
+void PartSet_OperationFeatureEdit::mouseDoubleClick(QMouseEvent* theEvent, Handle_V3d_View theView,
+                                                    const std::list<ModuleBase_ViewerPrs>& theSelected,
+                                                    const std::list<ModuleBase_ViewerPrs>& theHighlighted)
+{
+  // TODO the functionality is important only for constraint feature. Should be moved in another place
+  if (!theSelected.empty()) {
+    ModuleBase_ViewerPrs aFeaturePrs = theSelected.front();
+    if (!aFeaturePrs.owner().IsNull()) {
+      Handle(AIS_DimensionOwner) anOwner = Handle(AIS_DimensionOwner)::DownCast(aFeaturePrs.owner());
+      if (!anOwner.IsNull() && anOwner->SelectionMode() == AIS_DSM_Text) {
+        bool isValid;
+        double aValue = PartSet_Tools::featureValue(feature(), SketchPlugin_Constraint::VALUE(), isValid);
+        if (isValid) {
+          ModuleBase_WidgetEditor::editFeatureValue(feature(), SketchPlugin_Constraint::VALUE());
+          flushUpdated();
+        }
+      }
+    }
+  }
+}
+
 void PartSet_OperationFeatureEdit::startOperation()
 {
   PartSet_OperationSketchBase::startOperation();
@@ -146,11 +171,11 @@ void PartSet_OperationFeatureEdit::blockSelection(bool isBlocked, const bool isR
     return;
 
   myIsBlockedSelection = isBlocked;
-  QFeatureList aFeatureList;
+  QList<ObjectPtr> aFeatureList;
   aFeatureList.append(feature());
 
   if (isBlocked) {
-    emit setSelection(QFeatureList());
+    emit setSelection(QList<ObjectPtr>());
     emit stopSelection(aFeatureList, true);
   }
   else {
@@ -168,12 +193,10 @@ FeaturePtr PartSet_OperationFeatureEdit::createFeature(const bool /*theFlushMess
 
 void PartSet_OperationFeatureEdit::sendFeatures()
 {
-  static Events_ID anEvent = Events_Loop::eventByName(EVENT_FEATURE_MOVED);
+  static Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_MOVED);
 
   FeaturePtr aFeature = feature();
-
-  Model_FeatureUpdatedMessage aMessage(aFeature, anEvent);
-  Events_Loop::loop()->send(aMessage);
+  ModelAPI_EventCreator::get()->sendUpdated(aFeature, anEvent);
 
   Events_Loop::loop()->flush(anEvent);
   flushUpdated();