]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
An improvement to process 'Enter' button click in the PartSet module.
authornds <natalia.donis@opencascade.com>
Wed, 3 Dec 2014 12:08:09 +0000 (15:08 +0300)
committernds <natalia.donis@opencascade.com>
Wed, 3 Dec 2014 12:08:09 +0000 (15:08 +0300)
This is important for the line creation. The current line should be validated. A line creation operation is restarted but a new line does not connected to the previous countour.

src/PartSet/PartSet_Module.cpp
src/PartSet/PartSet_Module.h
src/XGUI/XGUI_OperationMgr.cpp
src/XGUI/XGUI_OperationMgr.h

index 38e9671ddf41432dc9403728289afddd9547d628..8edff2835d028ba3bbab1717ec605357da3a9527 100644 (file)
@@ -93,7 +93,7 @@ extern "C" PARTSET_EXPORT ModuleBase_IModule* createModule(ModuleBase_IWorkshop*
 
 PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop)
   : ModuleBase_IModule(theWshop), 
-  myIsDragging(false), myRestartingMode(true), myDragDone(false)
+  myIsDragging(false), myRestartingMode(LastFeatureUse), myDragDone(false)
 {
   //myWorkshop = dynamic_cast<XGUI_Workshop*>(theWshop);
   ModuleBase_IViewer* aViewer = aViewer = theWshop->viewer();
@@ -106,6 +106,11 @@ PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop)
   connect(aViewer, SIGNAL(mouseMove(ModuleBase_IViewWindow*, QMouseEvent*)),
           this, SLOT(onMouseMoved(ModuleBase_IViewWindow*, QMouseEvent*)));
 
+  XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(theWshop);
+  XGUI_Workshop* aWorkshop = aConnector->workshop();
+
+  XGUI_OperationMgr* anOpMgr = aWorkshop->operationMgr();
+  connect(anOpMgr, SIGNAL(keyEnterReleased()), this, SLOT(onEnterReleased()));
 }
 
 PartSet_Module::~PartSet_Module()
@@ -137,9 +142,9 @@ void PartSet_Module::onOperationComitted(ModuleBase_Operation* theOperation)
   FeaturePtr aFeature = theOperation->feature();
   std::shared_ptr<SketchPlugin_Feature> aSPFeature = 
             std::dynamic_pointer_cast<SketchPlugin_Feature>(aFeature);
-  if (aSPFeature && myRestartingMode) {
+  if (aSPFeature && (myRestartingMode != None)) {
     myLastOperationId = theOperation->id();
-    myLastFeature = theOperation->feature();
+    myLastFeature = myRestartingMode == LastFeatureUse ? theOperation->feature() : FeaturePtr();
     launchOperation(myLastOperationId);
   } else {
     breakOperationSequence();
@@ -150,7 +155,7 @@ void PartSet_Module::breakOperationSequence()
 {
   myLastOperationId = "";
   myLastFeature = FeaturePtr();
-  myRestartingMode = false;
+  myRestartingMode = None;
 
 }
 
@@ -161,7 +166,7 @@ void PartSet_Module::onOperationAborted(ModuleBase_Operation* theOperation)
 
 void PartSet_Module::onOperationStarted(ModuleBase_Operation* theOperation)
 {
-  myRestartingMode = true;
+  myRestartingMode = LastFeatureUse;
   if (theOperation->id().toStdString() == SketchPlugin_Sketch::ID()) {
     // Display all sketcher sub-Objects
     myCurrentSketch = std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(theOperation->feature());
@@ -502,6 +507,10 @@ void PartSet_Module::onMouseMoved(ModuleBase_IViewWindow* theWnd, QMouseEvent* t
   }
 }
 
+void PartSet_Module::onEnterReleased()
+{
+  myRestartingMode = LastFeatureEmpty;
+}
 
 QStringList PartSet_Module::sketchOperationIdList() const
 {
index 085876eb23bbdf83af816698ed20782608e2db75..1dd3b8cc2cb183dabc39274aa889b822c724297c 100644 (file)
@@ -28,7 +28,14 @@ class PARTSET_EXPORT PartSet_Module : public ModuleBase_IModule
 {
 Q_OBJECT
 
- public:
+/// Enumeration to specify the restart operation properties.
+enum RestartingMode {
+  None, /// the operation should not be restarted
+  LastFeatureUse, /// the operation is restarted and use the previous feature for own initialization
+  LastFeatureEmpty /// the operation is restarted and does not use the previous feature
+};
+
+public:
   PartSet_Module(ModuleBase_IWorkshop* theWshop);
   virtual ~PartSet_Module();
 
@@ -70,6 +77,10 @@ protected slots:
   /// \param theEvent the mouse event
   virtual void onMouseMoved(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent);
 
+  /// SLOT, that is called by enter key released
+  /// Set a specific type of restarting the current operation
+  void onEnterReleased();
+
   /// Launches the operation from current highlighting
   void launchEditing();
 
@@ -102,7 +113,7 @@ protected slots:
    bool myDragDone;
 
    // Automatical restarting mode flag
-   bool myRestartingMode;
+   RestartingMode myRestartingMode;
 
    double myCurX, myCurY;
    CompositeFeaturePtr myCurrentSketch;
index 6a3cc32be29d37c438487e4f59cd69d549979fdb..94e5026e251f9d7b5502bbcf4096fafa14854847 100644 (file)
@@ -264,6 +264,7 @@ bool XGUI_OperationMgr::onKeyReleased(QKeyEvent* theEvent)
   switch (theEvent->key()) {
     case Qt::Key_Return:
     case Qt::Key_Enter: {
+      emit keyEnterReleased();
       commitOperation();
     }
       break;
index c589e0dc5ec9e6f4bffec1073a18e25c60ea618f..29a340b0dad6dc55092248d56aa861fe2fbfe66a 100644 (file)
@@ -108,6 +108,9 @@ signals:
   /// Signal is emitted after the validate methods calls.
   void operationValidated(bool);
 
+  /// Signal is emitted after the key released click.
+  void keyEnterReleased();
+
  protected:
 
   /// Commits the current operatin if it is valid