Salome HOME
Commit of the current operation if the preselection is activated.
authornds <natalia.donis@opencascade.com>
Thu, 11 Dec 2014 13:46:24 +0000 (16:46 +0300)
committernds <natalia.donis@opencascade.com>
Thu, 11 Dec 2014 13:46:24 +0000 (16:46 +0300)
src/ModuleBase/ModuleBase_IModule.cpp
src/ModuleBase/ModuleBase_IModule.h
src/ModuleBase/ModuleBase_Operation.cpp
src/ModuleBase/ModuleBase_Operation.h
src/PartSet/PartSet_Module.cpp
src/PartSet/PartSet_Module.h
src/XGUI/XGUI_PropertyPanel.cpp
src/XGUI/XGUI_Workshop.cpp
src/XGUI/XGUI_Workshop.h

index ab6aa1f3e40e68196566bbde98290d3058c29f67..9f7da7a38f3a7bd69213e6a8f05dd7ec36feaeda 100644 (file)
 ModuleBase_IModule::ModuleBase_IModule(ModuleBase_IWorkshop* theParent)
   : QObject(theParent), myWorkshop(theParent) 
 {
-  connect(myWorkshop, SIGNAL(operationStarted(ModuleBase_Operation*)), 
-          SLOT(onOperationStarted(ModuleBase_Operation*)));
-
   connect(myWorkshop, SIGNAL(operationStopped(ModuleBase_Operation*)), 
           SLOT(onOperationStopped(ModuleBase_Operation*)));
 
-  connect(myWorkshop, SIGNAL(operationResumed(ModuleBase_Operation*)), 
-          SLOT(onOperationResumed(ModuleBase_Operation*)));
-
   connect(myWorkshop, SIGNAL(operationComitted(ModuleBase_Operation*)), 
           SLOT(onOperationComitted(ModuleBase_Operation*)));
 
index f6219675ce0679430ddbf3b878941ebd066d933d..bf1675bfaa9e4ac32f9ec5dc7e8fe7ed0073b6ea 100644 (file)
@@ -45,6 +45,14 @@ class MODULEBASE_EXPORT ModuleBase_IModule : public QObject
   /// \param theCmdId the operation name\r
   virtual void launchOperation(const QString& theCmdId);\r
 \r
+  /// Realizes some functionality by an operation start\r
+  /// \param theOperation a started operation\r
+  virtual void operationStarted(ModuleBase_Operation* theOperation) {}\r
+\r
+  /// Realizes some functionality by an operation resume\r
+  /// \param theOperation a resumed operation\r
+  virtual void operationResumed(ModuleBase_Operation* theOperation) {}\r
+\r
   /// Called when it is necessary to update a command state (enable or disable it)\r
   //virtual bool isFeatureEnabled(const QString& theCmdId) const = 0;\r
 \r
@@ -66,14 +74,10 @@ public slots:
   void onFeatureTriggered();\r
 \r
 protected slots:\r
-  /// SLOT, that is called after the operation is started. Connect on the focus activated signal\r
-  virtual void onOperationStarted(ModuleBase_Operation* theOperation) {}\r
-  \r
   /// SLOT, that is called after the operation is stopped. Switched off the modfications performed\r
   /// by the operation start\r
   virtual void onOperationStopped(ModuleBase_Operation* theOperation) {}\r
 \r
-  virtual void onOperationResumed(ModuleBase_Operation* theOperation) {}\r
 \r
   virtual void onOperationComitted(ModuleBase_Operation* theOperation) {}\r
 \r
index 58d0c2d9c0e51ce2c9a84d76c542b0b50982f892..798a8298747c4a43b96dc0d83cf7e1832ce9a6ad 100644 (file)
@@ -169,6 +169,7 @@ void ModuleBase_Operation::start()
 
   startOperation();
   emit started();
+
 }
 
 void ModuleBase_Operation::postpone()
@@ -230,16 +231,16 @@ void ModuleBase_Operation::setRunning(bool theState)
   }
 }
 
-bool ModuleBase_Operation::activateByPreselection()
+void ModuleBase_Operation::activateByPreselection()
 {
   if (!myPropertyPanel || myPreSelection.empty()) {
     myPropertyPanel->activateNextWidget(NULL);
-    return false;
+    return;
   }
   const QList<ModuleBase_ModelWidget*>& aWidgets = myPropertyPanel->modelWidgets();
   if (aWidgets.empty()) {
     myPropertyPanel->activateNextWidget(NULL);
-    return false;
+    return;
   }
   
   ModuleBase_ModelWidget* aWgt, *aFilledWgt = 0;
@@ -264,14 +265,10 @@ bool ModuleBase_Operation::activateByPreselection()
     }
   }
 
-  if (aFilledWgt) {
-    myPropertyPanel->activateNextWidget(aFilledWgt);
+  myPropertyPanel->activateNextWidget(aFilledWgt);
+  if (aFilledWgt)
     emit activatedByPreselection();
-    return true;
-  }
-  else
-    myPropertyPanel->activateNextWidget(NULL);
-  return false;
+
 }
 
 void ModuleBase_Operation::initSelection(ModuleBase_ISelection* theSelection,
@@ -355,6 +352,11 @@ void ModuleBase_Operation::setPropertyPanel(ModuleBase_IPropertyPanel* theProp)
   myPropertyPanel->setEditingMode(isEditOperation());
   //connect(myPropertyPanel, SIGNAL(widgetActivated(ModuleBase_ModelWidget*)), this,
   //        SLOT(onWidgetActivated(ModuleBase_ModelWidget*)));
+
+  // Do not activate widgets by default if the current operation is editing operation
+  // Because we don't know which widget is going to be edited. 
+  if (!isEditOperation())
+    activateByPreselection();
 }
 
 bool ModuleBase_Operation::isGranted(QString theId) const
index 17233f0f289c25dac63bc012466e1d79e18be90f..f20c7f4762ecfdd185247985b31e4a05b6862627 100644 (file)
@@ -126,8 +126,8 @@ Q_OBJECT
 
   ModuleBase_IPropertyPanel* propertyPanel() const { return myPropertyPanel; }
 
-  /// Activates widgets by preselection if it is accepted
-  virtual bool activateByPreselection();
+  /// Activates widgets by preselection if it is accepted. Emits signal if the activation is correct
+  virtual void activateByPreselection();
 
   /// If the operation works with feature which is sub-feature of another one
   /// then this variable has to be initialised by parent feature 
index b47766109400766128c4500219ebca36d200086d..bffa6148d710e82f1beaddc82f3598790845a595 100644 (file)
@@ -178,7 +178,7 @@ void PartSet_Module::onOperationAborted(ModuleBase_Operation* theOperation)
   breakOperationSequence();
 }
 
-void PartSet_Module::onOperationStarted(ModuleBase_Operation* theOperation)
+void PartSet_Module::operationStarted(ModuleBase_Operation* theOperation)
 {
   if (theOperation->id().toStdString() == SketchPlugin_Sketch::ID()) {
     // Display all sketcher sub-Objects
index 129df5353712c3eee24cb768c238807cdadfb8be..e9a145ebb2c947f6a26d6c0e060ef004421d6dee 100644 (file)
@@ -49,6 +49,10 @@ public:
 
   QStringList sketchOperationIdList() const;
 
+  /// Realizes some functionality by an operation start
+  /// \param theOperation a started operation
+  virtual void operationStarted(ModuleBase_Operation* theOperation);
+
 public slots:
   /// SLOT, that is called by no more widget signal emitted by property panel
   /// Set a specific flag to restart the sketcher operation
@@ -60,8 +64,6 @@ protected slots:
 
   virtual void onOperationAborted(ModuleBase_Operation* theOperation);
 
-  virtual void onOperationStarted(ModuleBase_Operation* theOperation);
-
   virtual void onOperationStopped(ModuleBase_Operation* theOperation);
 
   /// Called when previous operation is finished
index b94bb1903f708438fc9b5d236f214a084930b816..e788d15da4cee0b63b2ff942a069a4e3c4142e29 100644 (file)
@@ -77,6 +77,7 @@ void XGUI_PropertyPanel::cleanContent()
   myWidgets.clear();
   qDeleteAll(myCustomWidget->children());
   myActiveWidget = NULL;
+  setWindowTitle(tr("Property Panel"));
 }
 
 void XGUI_PropertyPanel::setModelWidgets(const QList<ModuleBase_ModelWidget*>& theWidgets)
index 91041203fbebba9cb8d49beae6d96b76ea0999a9..f8fe475ca68e19a063172b064c081518237062fd 100644 (file)
@@ -146,8 +146,9 @@ XGUI_Workshop::XGUI_Workshop(XGUI_SalomeConnector* theConnector)
   myModuleConnector = new XGUI_ModuleConnector(this);
 
   connect(myOperationMgr, SIGNAL(operationStarted(ModuleBase_Operation*)), 
-          SLOT(onOperationStarted()));
-  connect(myOperationMgr, SIGNAL(operationResumed(ModuleBase_Operation*)), SLOT(onOperationStarted()));
+          SLOT(onOperationStarted(ModuleBase_Operation*)));
+  connect(myOperationMgr, SIGNAL(operationResumed(ModuleBase_Operation*)),
+          SLOT(onOperationResumed(ModuleBase_Operation*)));
   connect(myOperationMgr, SIGNAL(operationStopped(ModuleBase_Operation*)),
           SLOT(onOperationStopped(ModuleBase_Operation*)));
   connect(myMainWindow, SIGNAL(exitKeySequence()), SLOT(onExit()));
@@ -557,56 +558,34 @@ void XGUI_Workshop::onObjectDeletedMsg(const std::shared_ptr<ModelAPI_ObjectDele
 }
 
 //******************************************************
-void XGUI_Workshop::onOperationStarted()
+void XGUI_Workshop::onOperationStarted(ModuleBase_Operation* theOperation)
 {
-  ModuleBase_Operation* aOperation = myOperationMgr->currentOperation();
-  if (this->isSalomeMode()) 
-    aOperation->setNestedFeatures(mySalomeConnector->nestedActions(aOperation->id()));
-  else 
-    aOperation->setNestedFeatures(myActionsMgr->nestedCommands(aOperation->id()));
-  
-  if (aOperation->getDescription()->hasXmlRepresentation()) {  //!< No need for property panel
-    connectWithOperation(aOperation);
-
-    showPropertyPanel();
-    QString aXmlRepr = aOperation->getDescription()->xmlRepresentation();
-    ModuleBase_WidgetFactory aFactory = ModuleBase_WidgetFactory(aXmlRepr.toStdString(),
-                                                                 myModuleConnector);
-
-    myPropertyPanel->cleanContent();
-    aFactory.createWidget(myPropertyPanel->contentWidget());
-    ModuleBase_Tools::zeroMargins(myPropertyPanel->contentWidget());
-
-    QList<ModuleBase_ModelWidget*> aWidgets = aFactory.getModelWidgets();
-    foreach (ModuleBase_ModelWidget* aWidget, aWidgets) {
-      aWidget->setFeature(aOperation->feature());
-      aWidget->enableFocusProcessing();
-      QObject::connect(aWidget, SIGNAL(valuesChanged()), this, SLOT(onWidgetValuesChanged()));
-      // Init default values
-      if (!aOperation->isEditOperation() && !aWidget->isComputedDefault()) {
-        aWidget->storeValue();
-      }
-    }
+  setNestedFeatures(theOperation);
 
-    myPropertyPanel->setModelWidgets(aWidgets);
-    aOperation->setPropertyPanel(myPropertyPanel);
-    // Do not activate widgets by default if the current operation is editing operation
-    // Because we don't know which widget is going to be edited. 
-    if ((!aOperation->isEditOperation())) {
-      aOperation->activateByPreselection();
-    }
-    // Set final definitions if they are necessary
-    myModule->propertyPanelDefined(aOperation);
+  if (theOperation->getDescription()->hasXmlRepresentation()) {  //!< No need for property panel
+    connectWithOperation(theOperation);
+    setPropertyPanel(theOperation);
+  }
+  updateCommandStatus();
 
-    // Widget activation (from the previous method) may commit the current operation
-    // if pre-selection is enougth for it. So we shouldn't update prop panel's title
-    if(myOperationMgr->isCurrentOperation(aOperation)) {
-      myPropertyPanel->setWindowTitle(aOperation->getDescription()->description());
-    }
+  myModule->operationStarted(theOperation);
+}
+
+//******************************************************
+void XGUI_Workshop::onOperationResumed(ModuleBase_Operation* theOperation)
+{
+  setNestedFeatures(theOperation);
+
+  if (theOperation->getDescription()->hasXmlRepresentation()) {  //!< No need for property panel
+    connectWithOperation(theOperation);
+    setPropertyPanel(theOperation);
   }
   updateCommandStatus();
+
+  myModule->operationResumed(theOperation);
 }
 
+
 //******************************************************
 void XGUI_Workshop::onOperationStopped(ModuleBase_Operation* theOperation)
 {
@@ -625,6 +604,44 @@ void XGUI_Workshop::onOperationStopped(ModuleBase_Operation* theOperation)
   }
 }
 
+void XGUI_Workshop::setNestedFeatures(ModuleBase_Operation* theOperation)
+{
+  if (this->isSalomeMode()) 
+    theOperation->setNestedFeatures(mySalomeConnector->nestedActions(theOperation->id()));
+  else 
+    theOperation->setNestedFeatures(myActionsMgr->nestedCommands(theOperation->id()));
+}
+
+void XGUI_Workshop::setPropertyPanel(ModuleBase_Operation* theOperation)
+{
+  showPropertyPanel();
+  QString aXmlRepr = theOperation->getDescription()->xmlRepresentation();
+  ModuleBase_WidgetFactory aFactory = ModuleBase_WidgetFactory(aXmlRepr.toStdString(),
+                                                                myModuleConnector);
+
+  myPropertyPanel->cleanContent();
+  aFactory.createWidget(myPropertyPanel->contentWidget());
+  ModuleBase_Tools::zeroMargins(myPropertyPanel->contentWidget());
+
+  QList<ModuleBase_ModelWidget*> aWidgets = aFactory.getModelWidgets();
+  foreach (ModuleBase_ModelWidget* aWidget, aWidgets) {
+    aWidget->setFeature(theOperation->feature());
+    aWidget->enableFocusProcessing();
+    QObject::connect(aWidget, SIGNAL(valuesChanged()), this, SLOT(onWidgetValuesChanged()));
+    // Init default values
+    if (!theOperation->isEditOperation() && !aWidget->isComputedDefault()) {
+      aWidget->storeValue();
+    }
+  }
+  
+  myPropertyPanel->setModelWidgets(aWidgets);
+  theOperation->setPropertyPanel(myPropertyPanel);
+
+  myModule->propertyPanelDefined(theOperation);
+
+  myPropertyPanel->setWindowTitle(theOperation->getDescription()->description());
+}
+
 bool XGUI_Workshop::event(QEvent * theEvent)
 {
   PostponeMessageQtEvent* aPostponedEv = dynamic_cast<PostponeMessageQtEvent*>(theEvent);
index fd02a8bbacb88acd1fdf99a52a70f1b75c266dc0..f8c293c5e9744a3812cae58774c4d292da0b1f33 100644 (file)
@@ -219,6 +219,14 @@ signals:
   void closeDocument();
 
  protected:
+  // Find the nested features and set them into the operation
+  // \param theOperation an operation
+  void setNestedFeatures(ModuleBase_Operation* theOperation);
+  // Update the property panel content by the XML description of the operation and set the panel
+  // into the operation
+  // \param theOperation an operation
+  void setPropertyPanel(ModuleBase_Operation* theOperation);
+
   bool event(QEvent * theEvent);
   //Event-loop processing methods:
   void addFeature(const std::shared_ptr<Config_FeatureMessage>&);
@@ -240,7 +248,13 @@ signals:
  private slots:
   /// SLOT, that is called after the operation is started. Update workshop state according to
   /// the started operation, e.g. visualizes the property panel and connect to it.
-  void onOperationStarted();
+  /// \param theOpertion a started operation
+  void onOperationStarted(ModuleBase_Operation* theOperation);
+
+  /// SLOT, that is called after the operation is resumed. Update workshop state according to
+  /// the started operation, e.g. visualizes the property panel and connect to it.
+  /// \param theOpertion a resumed operation
+  virtual void onOperationResumed(ModuleBase_Operation* theOperation);
 
   /// SLOT, that is called after the operation is stopped. Update workshop state, e.g.
   /// hides the property panel and udpate the command status.