]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Corrections of selection architecture
authorvsv <vitaly.smetannikov@opencascade.com>
Tue, 28 Oct 2014 09:41:32 +0000 (12:41 +0300)
committervsv <vitaly.smetannikov@opencascade.com>
Tue, 28 Oct 2014 09:41:32 +0000 (12:41 +0300)
28 files changed:
src/ModuleBase/ModuleBase_IModule.cpp
src/ModuleBase/ModuleBase_IModule.h
src/ModuleBase/ModuleBase_ISelection.h
src/ModuleBase/ModuleBase_Operation.cpp
src/ModuleBase/ModuleBase_Operation.h
src/ModuleBase/ModuleBase_ResultPrs.cpp
src/ModuleBase/ModuleBase_WidgetFactory.cpp
src/PartSet/PartSet_Module.cpp
src/PartSet/PartSet_Module.h
src/PartSet/PartSet_OperationFeatureBase.cpp
src/PartSet/PartSet_OperationFeatureBase.h
src/PartSet/PartSet_OperationFeatureCreate.cpp
src/PartSet/PartSet_OperationFeatureCreate.h
src/PartSet/PartSet_OperationFeatureEdit.cpp
src/PartSet/PartSet_OperationFeatureEdit.h
src/PartSet/PartSet_OperationFeatureEditMulti.cpp
src/PartSet/PartSet_OperationFeatureEditMulti.h
src/PartSet/PartSet_OperationSketch.cpp
src/PartSet/PartSet_OperationSketch.h
src/PartSet/PartSet_OperationSketchBase.cpp
src/PartSet/PartSet_OperationSketchBase.h
src/PartSet/PartSet_Tools.cpp
src/PartSet/PartSet_Tools.h
src/PartSet/PartSet_Validators.cpp
src/XGUI/XGUI_Displayer.cpp
src/XGUI/XGUI_Selection.cpp
src/XGUI/XGUI_Selection.h
src/XGUI/XGUI_ViewWindow.cpp

index c8b347f76914e8fff388af20d1e54292233ad4c9..773c84b5a32542459a3078a08108c60aa94a4c37 100644 (file)
@@ -1,5 +1,6 @@
 
 #include "ModuleBase_IModule.h"
+#include "ModuleBase_IViewer.h"
 #include "ModuleBase_ViewerPrs.h"
 #include "ModuleBase_Operation.h"
 #include "ModuleBase_ISelection.h"
 #include <Config_PointerMessage.h>
 
 
+ModuleBase_IModule::ModuleBase_IModule(ModuleBase_IWorkshop* theParent)
+  : QObject(theParent), myWorkshop(theParent) 
+{
+  connect(myWorkshop, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged()));
+  connect(myWorkshop->viewer(), SIGNAL(mousePress(QMouseEvent*)), this,
+          SLOT(onMousePressed(QMouseEvent*)));
+  connect(myWorkshop->viewer(), SIGNAL(mouseRelease(QMouseEvent*)), this,
+          SLOT(onMouseReleased(QMouseEvent*)));
+  connect(myWorkshop->viewer(), SIGNAL(mouseMove(QMouseEvent*)), this,
+          SLOT(onMouseMoved(QMouseEvent*)));
+  connect(myWorkshop->viewer(), SIGNAL(keyRelease(QKeyEvent*)), this,
+          SLOT(onKeyRelease(QKeyEvent*)));
+  connect(myWorkshop->viewer(), SIGNAL(mouseDoubleClick(QMouseEvent*)), this,
+          SLOT(onMouseDoubleClick(QMouseEvent*)));
+}
+
+
 void ModuleBase_IModule::launchOperation(const QString& theCmdId)
 {
   ModuleBase_Operation* anOperation = createOperation(theCmdId.toStdString());
   ModuleBase_ISelection* aSelection = myWorkshop->selection();
   // Initialise operation with preliminary selection
-  std::list<ModuleBase_ViewerPrs> aSelected = aSelection->getSelected();
-  std::list<ModuleBase_ViewerPrs> aHighlighted = aSelection->getHighlighted();
+  QList<ModuleBase_ViewerPrs> aSelected = aSelection->getSelected();
+  QList<ModuleBase_ViewerPrs> aHighlighted = aSelection->getHighlighted();
   anOperation->initSelection(aSelected, aHighlighted);
   sendOperation(anOperation);
 }
index 3bea34002f32817fddaea37358746822060ccc83..5787ccfb09989d5aa62afee6753a0117fc91b384 100644 (file)
-#ifndef ModuleBase_IModule_H\r
-#define ModuleBase_IModule_H\r
-\r
+#ifndef ModuleBase_IModule_H
+#define ModuleBase_IModule_H
+
 #include "ModuleBase.h"
-#include "ModuleBase_IWorkshop.h"\r
-\r
-#include <QString>\r
-#include <QObject>\r
-\r
-\r
-class QAction;\r
-class Config_WidgetAPI;\r
-class ModuleBase_ModelWidget;\r
-class ModuleBase_Operation;\r
-class ModuleBase_IWorkshop;\r
-\r
-/**\r
- * Interface to a module\r
- */\r
-class MODULEBASE_EXPORT ModuleBase_IModule : public QObject\r
-{\r
- public:\r
-\r
-   ModuleBase_IModule(ModuleBase_IWorkshop* theParent): QObject(theParent), myWorkshop(theParent) {}\r
-\r
-  virtual ~ModuleBase_IModule() {}\r
-\r
-  /// Reads description of features from XML file \r
-  virtual void createFeatures() = 0;\r
-\r
-  /// Called on creation of menu item in desktop\r
-  virtual void featureCreated(QAction*) = 0;\r
-\r
-  /// Creates an operation and send it to loop\r
-  /// \param theCmdId the operation name\r
-  virtual void launchOperation(const QString& theCmdId);\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
-  /// Creates custom widgets for property panel\r
-  virtual QWidget* createWidgetByType(const std::string& theType, QWidget* theParent,\r
-                                      Config_WidgetAPI* theWidgetApi,\r
-                                      QList<ModuleBase_ModelWidget*>& theModelWidgets)\r
-  {\r
-    return 0;\r
-  }\r
-\r
-  ModuleBase_IWorkshop* workshop() const { return myWorkshop; }\r
-\r
- protected:\r
-  /// Sends the operation for launching\r
-  /// \param theOperation the operation\r
-  void sendOperation(ModuleBase_Operation* theOperation);\r
-\r
-  /// Creates a new operation\r
-  /// \param theCmdId the operation name\r
-  /// \param theFeatureKind a kind of feature to get the feature xml description\r
-  virtual ModuleBase_Operation* createOperation(const std::string& theCmdId,\r
-                                        const std::string& theFeatureKind = "") = 0;\r
-\r
-\r
-protected:\r
-\r
-  ModuleBase_IWorkshop* myWorkshop;\r
-\r
-};\r
-\r
-//! This function must return a new module instance.\r
-extern "C" {\r
-typedef ModuleBase_IModule* (*CREATE_FUNC)(ModuleBase_IWorkshop*);\r
-}\r
-\r
-#define CREATE_MODULE "createModule"\r
-\r
-#endif //ModuleBase_IModule\r
+#include "ModuleBase_IWorkshop.h"
+
+#include <QString>
+#include <QObject>
+
+
+class QAction;
+class QMouseEvent;\r
+class QKeyEvent;\r
+class Config_WidgetAPI;
+class ModuleBase_ModelWidget;
+class ModuleBase_Operation;
+class ModuleBase_IWorkshop;
+
+/**
+ * Interface to a module
+ */
+class MODULEBASE_EXPORT ModuleBase_IModule : public QObject
+{
+  Q_OBJECT
+ public:
+
+   ModuleBase_IModule(ModuleBase_IWorkshop* theParent);
+
+  virtual ~ModuleBase_IModule() {}
+
+  /// Reads description of features from XML file 
+  virtual void createFeatures() = 0;
+
+  /// Called on creation of menu item in desktop
+  virtual void featureCreated(QAction*) = 0;
+
+  /// Creates an operation and send it to loop
+  /// \param theCmdId the operation name
+  virtual void launchOperation(const QString& theCmdId);
+
+  /// Called when it is necessary to update a command state (enable or disable it)
+  //virtual bool isFeatureEnabled(const QString& theCmdId) const = 0;
+
+  /// Creates custom widgets for property panel
+  virtual QWidget* createWidgetByType(const std::string& theType, QWidget* theParent,
+                                      Config_WidgetAPI* theWidgetApi,
+                                      QList<ModuleBase_ModelWidget*>& theModelWidgets)
+  {
+    return 0;
+  }
+
+  ModuleBase_IWorkshop* workshop() const { return myWorkshop; }
+
+protected slots:
+
+  /// Called on selection changed event
+  virtual void onSelectionChanged() {}
+
+  /// SLOT, that is called by mouse press in the viewer.\r
+  /// The mouse released point is sent to the current operation to be processed.\r
+  /// \param theEvent the mouse event\r
+  virtual void onMousePressed(QMouseEvent* theEvent) {}\r
+\r
+  /// SLOT, that is called by mouse release in the viewer.\r
+  /// The mouse released point is sent to the current operation to be processed.\r
+  /// \param theEvent the mouse event\r
+  virtual void onMouseReleased(QMouseEvent* theEvent) {}\r
+  \r
+  /// SLOT, that is called by mouse move in the viewer.\r
+  /// The mouse moved point is sent to the current operation to be processed.\r
+  /// \param theEvent the mouse event\r
+  virtual void onMouseMoved(QMouseEvent* theEvent) {}\r
+\r
+  /// SLOT, that is called by the mouse double click in the viewer.\r
+  /// \param theEvent the mouse event\r
+  virtual void onMouseDoubleClick(QMouseEvent* theEvent) {}\r
+\r
+  /// SLOT, that is called by the key in the viewer is clicked.\r
+  /// \param theEvent the mouse event\r
+  virtual void onKeyRelease(QKeyEvent* theEvent) {}\r
+
+ protected:
+  /// Sends the operation for launching
+  /// \param theOperation the operation
+  void sendOperation(ModuleBase_Operation* theOperation);
+
+  /// Creates a new operation
+  /// \param theCmdId the operation name
+  /// \param theFeatureKind a kind of feature to get the feature xml description
+  virtual ModuleBase_Operation* createOperation(const std::string& theCmdId,
+                                        const std::string& theFeatureKind = "") = 0;
+
+
+protected:
+
+  ModuleBase_IWorkshop* myWorkshop;
+
+};
+
+//! This function must return a new module instance.
+extern "C" {
+typedef ModuleBase_IModule* (*CREATE_FUNC)(ModuleBase_IWorkshop*);
+}
+
+#define CREATE_MODULE "createModule"
+
+#endif //ModuleBase_IModule
index 72845616b89eea80aad2a15e2175a7d42a506a31..c1b06ca1b71fae47724684d7c339f41e2fdcd158 100644 (file)
@@ -14,7 +14,7 @@
 #include <NCollection_List.hxx>
 #include <TopoDS_Shape.hxx>
 
-#include <list>
+#include <QList>
 
 class ModuleBase_ISelection
 {
@@ -23,12 +23,12 @@ class ModuleBase_ISelection
   /// Returns a list of viewer selected presentations
   /// \param theShapeTypeToSkip the shapes with this type will be skipped during the result list build
   /// \return list of presentations
-  virtual std::list<ModuleBase_ViewerPrs> getSelected(int theShapeTypeToSkip = -1) const = 0;
+  virtual QList<ModuleBase_ViewerPrs> getSelected(int theShapeTypeToSkip = -1) const = 0;
 
   /// Returns a list of viewer highlited presentations
   /// \param theShapeTypeToSkip the shapes with this type will be skipped during the result list build
   /// \return list of presentations
-  virtual std::list<ModuleBase_ViewerPrs> getHighlighted(int theShapeTypeToSkip = -1) const = 0;
+  virtual QList<ModuleBase_ViewerPrs> getHighlighted(int theShapeTypeToSkip = -1) const = 0;
 
   /**
    * Returns list of features currently selected in 3d viewer
index 19876df75612ffd5f5b1d2ee36c8a92ed17e45c8..825c28360a19d302f94f3cd92b532ac0eb95fd88 100644 (file)
@@ -238,11 +238,11 @@ void ModuleBase_Operation::activateByPreselection()
     return;
   ModuleBase_ModelWidget* aActiveWgt = myPropertyPanel->activeWidget();
   if ((myPreSelection.size() > 0) && aActiveWgt) {
-    const ModuleBase_ViewerPrs& aPrs = myPreSelection.front();
+    const ModuleBase_ViewerPrs& aPrs = myPreSelection.first();
     ModuleBase_WidgetValueFeature aValue;
     aValue.setObject(aPrs.object());
     if (aActiveWgt->setValue(&aValue)) {
-      myPreSelection.remove(aPrs);
+      myPreSelection.removeOne(aPrs);
       myPropertyPanel->activateNextWidget();
     }
     // If preselection is enough to make a valid feature - apply it immediately
@@ -250,8 +250,8 @@ void ModuleBase_Operation::activateByPreselection()
 }
 
 void ModuleBase_Operation::initSelection(
-    const std::list<ModuleBase_ViewerPrs>& theSelected,
-    const std::list<ModuleBase_ViewerPrs>& /*theHighlighted*/)
+    const QList<ModuleBase_ViewerPrs>& theSelected,
+    const QList<ModuleBase_ViewerPrs>& /*theHighlighted*/)
 {
   myPreSelection = theSelected;
 }
index 80cab9e125b85f9afd783ed2480d906f86bf41ce..0d1ea591e818e0a1e2358418457ef944582b7c4f 100644 (file)
@@ -17,6 +17,7 @@
 #include <QObject>
 #include <QString>
 #include <QStringList>
+#include <List>
 
 class ModuleBase_ModelWidget;
 class ModuleBase_OperationDescription;
@@ -116,8 +117,8 @@ Q_OBJECT
   /// Initialisation of operation with preliminary selection
   /// \param theSelected the list of selected presentations
   /// \param theHighlighted the list of highlighted presentations
-  virtual void initSelection(const std::list<ModuleBase_ViewerPrs>& theSelected,
-                             const std::list<ModuleBase_ViewerPrs>& theHighlighted);
+  virtual void initSelection(const QList<ModuleBase_ViewerPrs>& theSelected,
+                             const QList<ModuleBase_ViewerPrs>& theHighlighted);
 
   virtual void setPropertyPanel(ModuleBase_IPropertyPanel* theProp);
 
@@ -230,7 +231,7 @@ signals:
   QStringList myNestedFeatures;
 
   /// List of pre-selected object 
-  std::list<ModuleBase_ViewerPrs> myPreSelection;
+  QList<ModuleBase_ViewerPrs> myPreSelection;
 
   /// Access to property panel
   ModuleBase_IPropertyPanel* myPropertyPanel;
index c8eea52c22e4155eaab79d4322e32f145c23351d..1bb9efc25403af27390776c73396fc9eefa1d2d8 100644 (file)
@@ -46,6 +46,8 @@ void ModuleBase_ResultPrs::Compute(const Handle(PrsMgr_PresentationManager3d)& t
                                    const Standard_Integer theMode)
 {
   boost::shared_ptr<GeomAPI_Shape> aShapePtr = ModelAPI_Tools::shape(myResult);
+  if (!aShapePtr)
+    return;
   myOriginalShape = aShapePtr->impl<TopoDS_Shape>();
   Set(aShapePtr->impl<TopoDS_Shape>());
   AIS_Shape::Compute(thePresentationManager, thePresentation, theMode);
index 057c4d5d3b19d3aff33415718fd537ae24d826e8..985c56a50fd24749f50e91c820876e053fa4cb3b 100644 (file)
@@ -57,6 +57,7 @@ ModuleBase_WidgetFactory::ModuleBase_WidgetFactory(const std::string& theXmlRepr
 
 ModuleBase_WidgetFactory::~ModuleBase_WidgetFactory()
 {
+  delete myWidgetApi;
 }
 
 void ModuleBase_WidgetFactory::createWidget(QWidget* theParent)
index b2f838d1a9a7d72038c3b586a9613c81c4cb8865..d3058ab2bf63bd86a83ad8898517260b10365a00 100644 (file)
@@ -87,16 +87,6 @@ PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop)
   connect(aContextMenuMgr, SIGNAL(actionTriggered(const QString&, bool)), this,
           SLOT(onContextMenuCommand(const QString&, bool)));
 
-  connect(myWorkshop->viewer(), SIGNAL(mousePress(QMouseEvent*)), this,
-          SLOT(onMousePressed(QMouseEvent*)));
-  connect(myWorkshop->viewer(), SIGNAL(mouseRelease(QMouseEvent*)), this,
-          SLOT(onMouseReleased(QMouseEvent*)));
-  connect(myWorkshop->viewer(), SIGNAL(mouseMove(QMouseEvent*)), this,
-          SLOT(onMouseMoved(QMouseEvent*)));
-  connect(myWorkshop->viewer(), SIGNAL(keyRelease(QKeyEvent*)), this,
-          SLOT(onKeyRelease(QKeyEvent*)));
-  connect(myWorkshop->viewer(), SIGNAL(mouseDoubleClick(QMouseEvent*)), this,
-          SLOT(onMouseDoubleClick(QMouseEvent*)));
 }
 
 PartSet_Module::~PartSet_Module()
@@ -224,14 +214,27 @@ void PartSet_Module::onMousePressed(QMouseEvent* theEvent)
   XGUI_Workshop* aXWshp = xWorkshop();
   PartSet_OperationSketchBase* aPreviewOp = 
     dynamic_cast<PartSet_OperationSketchBase*>(workshop()->currentOperation());
-  Handle(V3d_View) aView = myWorkshop->viewer()->activeView();
-  if (aPreviewOp && (!aView.IsNull())) {
+  if (aPreviewOp) {
     ModuleBase_ISelection* aSelection = workshop()->selection();
     // Initialise operation with preliminary selection
-    std::list<ModuleBase_ViewerPrs> aSelected = aSelection->getSelected();
-    std::list<ModuleBase_ViewerPrs> aHighlighted = aSelection->getHighlighted();
-
-    aPreviewOp->mousePressed(theEvent, aView, aSelected, aHighlighted);
+    //QList<ModuleBase_ViewerPrs> aSelected = aSelection->getSelected();
+    //QList<ModuleBase_ViewerPrs> aHighlighted = aSelection->getHighlighted();
+    //QList<ObjectPtr> aObjList;
+    //bool aHasShift = (theEvent->modifiers() & Qt::ShiftModifier);
+    //if (aHasShift) {
+    //  foreach(ModuleBase_ViewerPrs aPrs, aSelected)
+    //    aObjList.append(aPrs.object());
+
+    //  foreach (ModuleBase_ViewerPrs aPrs, aHighlighted) {
+    //    if (!aObjList.contains(aPrs.object()))
+    //      aObjList.append(aPrs.object());
+    //  }
+    //} else {
+    //  foreach(ModuleBase_ViewerPrs aPrs, aHighlighted)
+    //    aObjList.append(aPrs.object());
+    //}
+    //onSetSelection(aObjList);
+    aPreviewOp->mousePressed(theEvent, myWorkshop->viewer(), aSelection);
   }
 }
 
@@ -239,14 +242,10 @@ void PartSet_Module::onMouseReleased(QMouseEvent* theEvent)
 {
   PartSet_OperationSketchBase* aPreviewOp = 
     dynamic_cast<PartSet_OperationSketchBase*>(myWorkshop->currentOperation());
-  Handle(V3d_View) aView = myWorkshop->viewer()->activeView();
-  if (aPreviewOp && (!aView.IsNull())) {
+  if (aPreviewOp) {
     ModuleBase_ISelection* aSelection = workshop()->selection();
     // Initialise operation with preliminary selection
-    std::list<ModuleBase_ViewerPrs> aSelected = aSelection->getSelected();
-    std::list<ModuleBase_ViewerPrs> aHighlighted = aSelection->getHighlighted();
-
-    aPreviewOp->mouseReleased(theEvent, aView, aSelected, aHighlighted);
+    aPreviewOp->mouseReleased(theEvent, myWorkshop->viewer(), aSelection);
   }
 }
 
@@ -254,9 +253,8 @@ void PartSet_Module::onMouseMoved(QMouseEvent* theEvent)
 {
   PartSet_OperationSketchBase* aPreviewOp = 
     dynamic_cast<PartSet_OperationSketchBase*>(myWorkshop->currentOperation());
-  Handle(V3d_View) aView = myWorkshop->viewer()->activeView();
-  if (aPreviewOp && (!aView.IsNull()))
-    aPreviewOp->mouseMoved(theEvent, aView);
+  if (aPreviewOp)
+    aPreviewOp->mouseMoved(theEvent, myWorkshop->viewer());
 }
 
 void PartSet_Module::onKeyRelease(QKeyEvent* theEvent)
@@ -276,9 +274,7 @@ void PartSet_Module::onMouseDoubleClick(QMouseEvent* theEvent)
   if (aPreviewOp && (!aView.IsNull())) {
     ModuleBase_ISelection* aSelection = workshop()->selection();
     // Initialise operation with preliminary selection
-    std::list<ModuleBase_ViewerPrs> aSelected = aSelection->getSelected();
-    std::list<ModuleBase_ViewerPrs> aHighlighted = aSelection->getHighlighted();
-    aPreviewOp->mouseDoubleClick(theEvent, aView, aSelected, aHighlighted);
+    aPreviewOp->mouseDoubleClick(theEvent, aView, aSelection);
   }
 }
 
@@ -314,8 +310,8 @@ void PartSet_Module::onRestartOperation(std::string theName, ObjectPtr theObject
     }
     ModuleBase_ISelection* aSelection = workshop()->selection();
     // Initialise operation with preliminary selection
-    std::list<ModuleBase_ViewerPrs> aSelected = aSelection->getSelected();
-    std::list<ModuleBase_ViewerPrs> aHighlighted = aSelection->getHighlighted();
+    QList<ModuleBase_ViewerPrs> aSelected = aSelection->getSelected();
+    QList<ModuleBase_ViewerPrs> aHighlighted = aSelection->getHighlighted();
     aSketchOp->initSelection(aSelected, aHighlighted);
   } //else if (aFeature) {
     //anOperation->setFeature(aFeature);
@@ -453,8 +449,10 @@ ModuleBase_Operation* PartSet_Module::createOperation(const std::string& theCmdI
             SLOT(onFeatureConstructed(ObjectPtr, int)));
     connect(aPreviewOp, SIGNAL(restartRequired(std::string, ObjectPtr)), this,
             SLOT(onRestartOperation(std::string, ObjectPtr)));
-    connect(aPreviewOp, SIGNAL(multiSelectionEnabled(bool)), this,
-            SLOT(onMultiSelectionEnabled(bool)));
+    // If manage multi selection the it will be impossible to select more then one
+    // object under operation Edit
+//    connect(aPreviewOp, SIGNAL(multiSelectionEnabled(bool)), this,
+//            SLOT(onMultiSelectionEnabled(bool)));
 
     connect(aPreviewOp, SIGNAL(stopSelection(const QList<ObjectPtr>&, const bool)), this,
             SLOT(onStopSelection(const QList<ObjectPtr>&, const bool)));
@@ -605,3 +603,23 @@ gp_Pln PartSet_Module::getSketchPlane(FeaturePtr theSketch) const
   return gp_Pln(aOrig, aDir);
 }
 
+
+void PartSet_Module::onSelectionChanged()
+{
+  ModuleBase_ISelection* aSelect = myWorkshop->selection();
+  QList<ModuleBase_ViewerPrs> aSelected = aSelect->getSelected();
+  // We need to stop edit operation if selection is cleared
+  if (aSelected.size() == 0) {
+    PartSet_OperationFeatureEdit* anEditOp = 
+      dynamic_cast<PartSet_OperationFeatureEdit*>(myWorkshop->currentOperation());
+    if (!anEditOp)
+      return;
+    anEditOp->commit();
+  } else {
+    PartSet_OperationSketchBase* aSketchOp = 
+      dynamic_cast<PartSet_OperationSketchBase*>(myWorkshop->currentOperation());
+    if (aSketchOp) {
+      aSketchOp->selectionChanged(aSelect);
+    }
+  }
+}
index 79379ffc49403e1734ece9fa633d3c26fbba883b..f5851100ce749aa309c4dd6dc8367c7d74f60aee 100644 (file)
@@ -17,8 +17,6 @@
 
 #include <boost/shared_ptr.hpp>
 
-class QMouseEvent;
-class QKeyEvent;
 class PartSet_Listener;
 class ModelAPI_Feature;
 class XGUI_ViewerPrs;
@@ -70,26 +68,6 @@ Q_OBJECT
   void onOperationStopped(ModuleBase_Operation* theOperation);
   /// SLOT, that is called afetr the popup menu action clicked.
   void onContextMenuCommand(const QString& theId, bool isChecked);
-  /// SLOT, that is called by mouse press in the viewer.
-  /// The mouse released point is sent to the current operation to be processed.
-  /// \param theEvent the mouse event
-  void onMousePressed(QMouseEvent* theEvent);
-  /// SLOT, that is called by mouse release in the viewer.
-  /// The mouse released point is sent to the current operation to be processed.
-  /// \param theEvent the mouse event
-  void onMouseReleased(QMouseEvent* theEvent);
-  /// SLOT, that is called by mouse move in the viewer.
-  /// The mouse moved point is sent to the current operation to be processed.
-  /// \param theEvent the mouse event
-  void onMouseMoved(QMouseEvent* theEvent);
-
-  /// SLOT, that is called by the key in the viewer is clicked.
-  /// \param theEvent the mouse event
-  void onKeyRelease(QKeyEvent* theEvent);
-
-  /// SLOT, that is called by the mouse double click in the viewer.
-  /// \param theEvent the mouse event
-  void onMouseDoubleClick(QMouseEvent* theEvent);
 
   /// SLOT, to apply to the current viewer the operation
   /// \param theX the X projection value
@@ -129,6 +107,33 @@ Q_OBJECT
   /// \param the attribute of the feature
   void onStorePoint2D(ObjectPtr theFeature, const std::string& theAttribute);
 
+protected slots:
+  /// Called on selection changed event
+  virtual void onSelectionChanged();
+
+  /// SLOT, that is called by mouse press in the viewer.
+  /// The mouse released point is sent to the current operation to be processed.
+  /// \param theEvent the mouse event
+  virtual void onMousePressed(QMouseEvent* theEvent);
+
+  /// SLOT, that is called by mouse release in the viewer.
+  /// The mouse released point is sent to the current operation to be processed.
+  /// \param theEvent the mouse event
+  virtual void onMouseReleased(QMouseEvent* theEvent);
+  
+  /// SLOT, that is called by mouse move in the viewer.
+  /// The mouse moved point is sent to the current operation to be processed.
+  /// \param theEvent the mouse event
+  virtual void onMouseMoved(QMouseEvent* theEvent);
+
+  /// SLOT, that is called by the mouse double click in the viewer.
+  /// \param theEvent the mouse event
+  virtual void onMouseDoubleClick(QMouseEvent* theEvent);
+
+  /// SLOT, that is called by the key in the viewer is clicked.
+  /// \param theEvent the mouse event
+  virtual void onKeyRelease(QKeyEvent* theEvent);
+
  protected:
   /// Creates a new operation
   /// \param theCmdId the operation name
index 9955fa5f05a9eefd10a419b6c013c83b66c0df61..458410aba5f87f446abc99c8d228e1a6a1b5f9bd 100644 (file)
@@ -25,6 +25,8 @@
 #include <ModuleBase_WidgetPoint2D.h>
 #include <ModuleBase_WidgetValueFeature.h>
 #include "ModuleBase_IPropertyPanel.h"
+#include "ModuleBase_ISelection.h"
+#include "ModuleBase_IViewer.h"
 
 #include <XGUI_Constants.h>
 
@@ -59,35 +61,36 @@ CompositeFeaturePtr PartSet_OperationFeatureBase::sketch() const
   return mySketch;
 }
 
-void PartSet_OperationFeatureBase::mouseReleased(QMouseEvent* theEvent, Handle(V3d_View) theView,
-                                                 const std::list<ModuleBase_ViewerPrs>& theSelected,
-                                                 const std::list<ModuleBase_ViewerPrs>& /*theHighlighted*/)
+void PartSet_OperationFeatureBase::mouseReleased(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer,
+                                                 ModuleBase_ISelection* theSelection)
 {
-  gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theView);
+  Handle(V3d_View) aView = theViewer->activeView();
+  gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), aView);
   double aX = aPoint.X(), anY = aPoint.Y();
+  QList<ModuleBase_ViewerPrs> aSelected = theSelection->getSelected();
 
-  if (theSelected.empty()) {
-    PartSet_Tools::convertTo2D(aPoint, sketch(), theView, aX, anY);
+  if (aSelected.empty()) {
+    PartSet_Tools::convertTo2D(aPoint, sketch(), aView, aX, anY);
   } else {
-    ModuleBase_ViewerPrs aPrs = theSelected.front();
+    ModuleBase_ViewerPrs aPrs = aSelected.first();
     const TopoDS_Shape& aShape = aPrs.shape();
     if (!aShape.IsNull()) {
       if (aShape.ShapeType() == TopAbs_VERTEX) { // a point is selected
         const TopoDS_Vertex& aVertex = TopoDS::Vertex(aShape);
         if (!aVertex.IsNull()) {
           aPoint = BRep_Tool::Pnt(aVertex);
-          PartSet_Tools::convertTo2D(aPoint, sketch(), theView, aX, anY);
+          PartSet_Tools::convertTo2D(aPoint, sketch(), aView, aX, anY);
           ModuleBase_ModelWidget* aActiveWgt = myPropertyPanel->activeWidget();
           PartSet_Tools::setConstraints(sketch(), feature(), aActiveWgt->attributeID(), aX, anY);
         }
       } else if (aShape.ShapeType() == TopAbs_EDGE) { // a line is selected
-        PartSet_Tools::convertTo2D(aPoint, sketch(), theView, aX, anY);
+        PartSet_Tools::convertTo2D(aPoint, sketch(), aView, aX, anY);
       }
     }
   }
   ObjectPtr aFeature;
-  if (!theSelected.empty()) {
-    ModuleBase_ViewerPrs aPrs = theSelected.front();
+  if (!aSelected.empty()) {
+    ModuleBase_ViewerPrs aPrs = aSelected.first();
     aFeature = aPrs.object();
   } else {
     aFeature = feature();  // for the widget distance only
index a9651e6f85536884b551d5f99f0ffcdb409fe76d..cde5fb6756674e736437cfc49e2bb817d5ccc6db 100644 (file)
@@ -42,9 +42,8 @@ Q_OBJECT
   /// \param theView a viewer to have the viewer the eye position
   /// \param theSelected the list of selected presentations
   /// \param theHighlighted the list of highlighted presentations
-  virtual void mouseReleased(QMouseEvent* theEvent, Handle_V3d_View theView,
-                             const std::list<ModuleBase_ViewerPrs>& theSelected,
-                             const std::list<ModuleBase_ViewerPrs>& theHighlighted);
+  virtual void mouseReleased(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer,
+                             ModuleBase_ISelection* theSelection);
 
 
  protected:
index 0bc2d9238b818f5f51b4ccc8cc1afd29dca400f2..c2780006535a3cc6645a7c75db092c66c516f3a2 100644 (file)
@@ -27,6 +27,8 @@
 #include <ModuleBase_WidgetValueFeature.h>
 #include <ModuleBase_ViewerPrs.h>
 #include <ModuleBase_IPropertyPanel.h>
+#include <ModuleBase_ISelection.h>
+#include <ModuleBase_IViewer.h>
 
 #include <XGUI_Constants.h>
 
@@ -77,11 +79,12 @@ bool PartSet_OperationFeatureCreate::canBeCommitted() const
   return false;
 }
 
-void PartSet_OperationFeatureCreate::mouseMoved(QMouseEvent* theEvent, Handle(V3d_View) theView)
+void PartSet_OperationFeatureCreate::mouseMoved(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer)
 {
     double aX, anY;
-    gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theView);
-    PartSet_Tools::convertTo2D(aPoint, sketch(), theView, aX, anY);
+    Handle(V3d_View) aView = theViewer->activeView();
+    gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), aView);
+    PartSet_Tools::convertTo2D(aPoint, sketch(), aView, aX, anY);
     setWidgetValue(feature(), aX, anY);
     flushUpdated();
 }
@@ -101,37 +104,39 @@ void PartSet_OperationFeatureCreate::keyReleased(const int theKey)
   }
 }
 
-void PartSet_OperationFeatureCreate::mouseReleased(QMouseEvent* theEvent, Handle(V3d_View) theView,
-                                                 const std::list<ModuleBase_ViewerPrs>& theSelected,
-                                                 const std::list<ModuleBase_ViewerPrs>& /*theHighlighted*/)
+void PartSet_OperationFeatureCreate::mouseReleased(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer,
+                                                   ModuleBase_ISelection* theSelection)
 {
-  gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theView);
+  Handle(V3d_View) aView = theViewer->activeView();
+  gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), aView);
   double aX = aPoint.X(), anY = aPoint.Y();
   bool isClosedContour = false;
 
-  if (theSelected.empty()) {
-    PartSet_Tools::convertTo2D(aPoint, sketch(), theView, aX, anY);
+  QList<ModuleBase_ViewerPrs> aSelected = theSelection->getSelected();
+
+  if (aSelected.empty()) {
+    PartSet_Tools::convertTo2D(aPoint, sketch(), aView, aX, anY);
   } else {
-    ModuleBase_ViewerPrs aPrs = theSelected.front();
+    ModuleBase_ViewerPrs aPrs = aSelected.first();
     const TopoDS_Shape& aShape = aPrs.shape();
     if (!aShape.IsNull()) {
       if (aShape.ShapeType() == TopAbs_VERTEX) { // a point is selected
         const TopoDS_Vertex& aVertex = TopoDS::Vertex(aShape);
         if (!aVertex.IsNull()) {
           aPoint = BRep_Tool::Pnt(aVertex);
-          PartSet_Tools::convertTo2D(aPoint, sketch(), theView, aX, anY);
+          PartSet_Tools::convertTo2D(aPoint, sketch(), aView, aX, anY);
           ModuleBase_ModelWidget* aActiveWgt = myPropertyPanel->activeWidget();
           PartSet_Tools::setConstraints(sketch(), feature(), aActiveWgt->attributeID(), aX, anY);
           isClosedContour = true;
         }
       } else if (aShape.ShapeType() == TopAbs_EDGE) { // a line is selected
-        PartSet_Tools::convertTo2D(aPoint, sketch(), theView, aX, anY);
+        PartSet_Tools::convertTo2D(aPoint, sketch(), aView, aX, anY);
       }
     }
   }
   ObjectPtr aFeature;
-  if (!theSelected.empty()) {
-    ModuleBase_ViewerPrs aPrs = theSelected.front();
+  if (!aSelected.empty()) {
+    ModuleBase_ViewerPrs aPrs = aSelected.first();
     aFeature = aPrs.object();
   } else {
     aFeature = feature();  // for the widget distance only
@@ -155,7 +160,7 @@ void PartSet_OperationFeatureCreate::mouseReleased(QMouseEvent* theEvent, Handle
 void PartSet_OperationFeatureCreate::startOperation()
 {
   PartSet_OperationSketchBase::startOperation();
-  emit multiSelectionEnabled(false);
+  //emit multiSelectionEnabled(false);
 }
 
 void PartSet_OperationFeatureCreate::abortOperation()
@@ -167,7 +172,7 @@ void PartSet_OperationFeatureCreate::abortOperation()
 void PartSet_OperationFeatureCreate::stopOperation()
 {
   PartSet_OperationSketchBase::stopOperation();
-  emit multiSelectionEnabled(true);
+  //emit multiSelectionEnabled(true);
 }
 
 void PartSet_OperationFeatureCreate::afterCommitOperation()
index b13b8ece551344d3efb079359872832f4d886f77..bbc83f5007c9143d6b61abfac82c4eae195c9870 100644 (file)
@@ -42,16 +42,15 @@ Q_OBJECT
   /// Gives the current mouse point in the viewer
   /// \param thePoint a point clicked in the viewer
   /// \param theEvent the mouse event
-  virtual void mouseMoved(QMouseEvent* theEvent, Handle_V3d_View theView);
+  virtual void mouseMoved(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer);
 
   /// Gives the current selected objects to be processed by the operation
   /// \param theEvent the mouse event
   /// \param theView a viewer to have the viewer the eye position
   /// \param theSelected the list of selected presentations
   /// \param theHighlighted the list of highlighted presentations
-  virtual void mouseReleased(QMouseEvent* theEvent, Handle_V3d_View theView,
-                             const std::list<ModuleBase_ViewerPrs>& theSelected,
-                             const std::list<ModuleBase_ViewerPrs>& theHighlighted);
+  virtual void mouseReleased(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer,
+                             ModuleBase_ISelection* theSelection);
   /// Processes the key pressed in the view
   /// \param theKey a key value
   virtual void keyReleased(const int theKey);
index 16e2b44370ae89345e43b8faf42c09064ad472c9..bc73304dd1c8b7f52307a63cc6f69e4884ee770d 100644 (file)
@@ -5,6 +5,7 @@
 #include <PartSet_OperationFeatureEdit.h>
 #include <PartSet_Tools.h>
 #include <PartSet_OperationSketch.h>
+#include <PartSet_OperationFeatureEditMulti.h>
 
 #include <SketchPlugin_Constraint.h>
 
@@ -12,6 +13,8 @@
 #include <ModuleBase_WidgetEditor.h>
 #include <ModuleBase_ViewerPrs.h>
 #include <ModuleBase_IPropertyPanel.h>
+#include <ModuleBase_ISelection.h>
+#include <ModuleBase_IViewer.h>
 
 #include <ModelAPI_Events.h>
 
@@ -52,62 +55,82 @@ PartSet_OperationFeatureEdit::~PartSet_OperationFeatureEdit()
 }
 
 
-void PartSet_OperationFeatureEdit::mousePressed(QMouseEvent* theEvent, Handle(V3d_View) theView,
-                                                const std::list<ModuleBase_ViewerPrs>& theSelected,
-                                                const std::list<ModuleBase_ViewerPrs>& theHighlighted)
+void PartSet_OperationFeatureEdit::mousePressed(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer, ModuleBase_ISelection* theSelection)
 {
   ModuleBase_ModelWidget* aActiveWgt = myPropertyPanel->activeWidget();
   if(aActiveWgt && aActiveWgt->isViewerSelector()) {
     // Almost do nothing, all stuff in on PartSet_OperationFeatureBase::mouseReleased
-    PartSet_OperationFeatureBase::mousePressed(theEvent, theView, theSelected, theHighlighted);
+    PartSet_OperationFeatureBase::mousePressed(theEvent, theViewer, theSelection);
     return;
   }
+  QList<ModuleBase_ViewerPrs> aSelected = theSelection->getSelected();
+  QList<ModuleBase_ViewerPrs> aHighlighted = theSelection->getHighlighted();
+  bool aHasShift = (theEvent->modifiers() & Qt::ShiftModifier);
+  if (aHasShift && !aHighlighted.empty()) {
+    foreach (ModuleBase_ViewerPrs aPrs, aHighlighted) {
+      aSelected.append(aPrs);
+    }
+  }
   ObjectPtr aObject;
-  if (!theHighlighted.empty())
-    aObject = theHighlighted.front().object();
-  if (!aObject && !theSelected.empty())  // changed for a constrain
-    aObject = theSelected.front().object();
+  if (!aSelected.empty()) {
+    aObject = aSelected.first().object();
+  } else {   
+    if (!aHighlighted.empty())
+      aObject = aHighlighted.first().object();
+  }
+  //if (!theHighlighted.empty())
+  //  aObject = theHighlighted.front().object();
+  //if (!aObject && !theSelected.empty())  // changed for a constrain
+  //  aObject = theSelected.front().object();
 
   FeaturePtr aFeature = ModelAPI_Feature::feature(aObject);
-  if (!aFeature || aFeature != feature()) {
+  if (!aFeature || aFeature != feature() || (aSelected.size() > 1)) {
     if (commit()) {
       emit featureConstructed(feature(), FM_Deactivation);
 
+      // If we have selection and prehilighting with shift pressed 
+      // Then we have to select all these objects and restart as multi edit operfation
       //bool aHasShift = (theEvent->modifiers() & Qt::ShiftModifier);
       //if (aHasShift && !theHighlighted.empty()) {
       //  QList<ObjectPtr> aSelected;
       //  std::list<ModuleBase_ViewerPrs>::const_iterator aIt;
       //  for (aIt = theSelected.cbegin(); aIt != theSelected.cend(); ++aIt)
       //    aSelected.append((*aIt).object());
-        /*for (aIt = theHighlighted.cbegin(); aIt != theHighlighted.cend(); ++aIt) {
-         if (!aSelected.contains((*aIt).object()))
-         aSelected.append((*aIt).object());
-         }*/
-        //aSelected.push_back(feature());
-        //aSelected.push_back(theHighlighted.front().object());
-        //emit setSelection(aSelected);
+
+      //  for (aIt = theHighlighted.cbegin(); aIt != theHighlighted.cend(); ++aIt) {
+      //    if (!aSelected.contains((*aIt).object()))
+      //      aSelected.append((*aIt).object());
+      //  }
+      //  emit setSelection(aSelected);
       //} else 
       if (aFeature) {
-        restartOperation(PartSet_OperationFeatureEdit::Type(), aFeature);
+        std::string anOperationType =
+            (aSelected.size() > 1) ?
+                PartSet_OperationFeatureEditMulti::Type() : PartSet_OperationFeatureEdit::Type();
+        restartOperation(anOperationType, aFeature);
       }
+      //}
     }
-  }
+  } 
 }
 
-void PartSet_OperationFeatureEdit::mouseMoved(QMouseEvent* theEvent, Handle(V3d_View) theView)
+void PartSet_OperationFeatureEdit::mouseMoved(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer)
 {
   if (!(theEvent->buttons() & Qt::LeftButton))
     return;
+  Handle(V3d_View) aView = theViewer->activeView();
+  gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), aView);
 
-  gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theView);
+  if (theViewer->isSelectionEnabled())
+    theViewer->enableSelection(false);
 
-  blockSelection(true);
+  //blockSelection(true);
   if (myCurPoint.myIsInitialized) {
     double aCurX, aCurY;
-    PartSet_Tools::convertTo2D(myCurPoint.myPoint, sketch(), theView, aCurX, aCurY);
+    PartSet_Tools::convertTo2D(myCurPoint.myPoint, sketch(), aView, aCurX, aCurY);
 
     double aX, anY;
-    PartSet_Tools::convertTo2D(aPoint, sketch(), theView, aX, anY);
+    PartSet_Tools::convertTo2D(aPoint, sketch(), aView, aX, anY);
 
     double aDeltaX = aX - aCurX;
     double aDeltaY = anY - aCurY;
@@ -127,29 +150,30 @@ void PartSet_OperationFeatureEdit::mouseMoved(QMouseEvent* theEvent, Handle(V3d_
 }
 
 void PartSet_OperationFeatureEdit::mouseReleased(
-    QMouseEvent* theEvent, Handle(V3d_View) theView,
-    const std::list<ModuleBase_ViewerPrs>& theSelected,
-    const std::list<ModuleBase_ViewerPrs>& theHighlighted)
+    QMouseEvent* theEvent, ModuleBase_IViewer* theViewer,
+    ModuleBase_ISelection* theSelection)
 {
   ModuleBase_ModelWidget* aActiveWgt = 0;
   if (myPropertyPanel)
     aActiveWgt = myPropertyPanel->activeWidget();
   if(aActiveWgt && aActiveWgt->isViewerSelector()) {
     // Almost do nothing, all stuff in on PartSet_OperationFeatureBase::mouseReleased
-    PartSet_OperationFeatureBase::mouseReleased(theEvent, theView, theSelected, theHighlighted);
-  } else {
-    blockSelection(false);
-  }
+    PartSet_OperationFeatureBase::mouseReleased(theEvent, theViewer, theSelection);
+  }// else {
+    //blockSelection(false);
+  //}
+  if (!theViewer->isSelectionEnabled())
+    theViewer->enableSelection(true);
 }
 
 void PartSet_OperationFeatureEdit::mouseDoubleClick(
     QMouseEvent* theEvent, Handle_V3d_View theView,
-    const std::list<ModuleBase_ViewerPrs>& theSelected,
-    const std::list<ModuleBase_ViewerPrs>& theHighlighted)
+    ModuleBase_ISelection* theSelection)
 {
   // TODO the functionality is important only for constraint feature. Should be moved in another place
-  if (!theSelected.empty()) {
-    ModuleBase_ViewerPrs aFeaturePrs = theSelected.front();
+  QList<ModuleBase_ViewerPrs> aSelected = theSelection->getSelected();
+  if (!aSelected.empty()) {
+    ModuleBase_ViewerPrs aFeaturePrs = aSelected.first();
     if (!aFeaturePrs.owner().IsNull()) {
       Handle(AIS_DimensionOwner) anOwner = Handle(AIS_DimensionOwner)::DownCast(
           aFeaturePrs.owner());
@@ -169,36 +193,36 @@ void PartSet_OperationFeatureEdit::mouseDoubleClick(
 void PartSet_OperationFeatureEdit::startOperation()
 {
   PartSet_OperationSketchBase::startOperation();
-  emit multiSelectionEnabled(false);
+  //emit multiSelectionEnabled(false);
 
   myCurPoint.clear();
 }
 
 void PartSet_OperationFeatureEdit::stopOperation()
 {
-  emit multiSelectionEnabled(true);
+  //emit multiSelectionEnabled(true);
 
-  blockSelection(false, false);
+  //blockSelection(false, false);
 }
 
-void PartSet_OperationFeatureEdit::blockSelection(bool isBlocked, const bool isRestoreSelection)
-{
-  if (myIsBlockedSelection == isBlocked)
-    return;
-
-  myIsBlockedSelection = isBlocked;
-  QList<ObjectPtr> aFeatureList;
-  aFeatureList.append(feature());
-
-  if (isBlocked) {
-    emit setSelection(QList<ObjectPtr>());
-    emit stopSelection(aFeatureList, true);
-  } else {
-    emit stopSelection(aFeatureList, false);
-    if (isRestoreSelection)
-      emit setSelection(aFeatureList);
-  }
-}
+//void PartSet_OperationFeatureEdit::blockSelection(bool isBlocked, const bool isRestoreSelection)
+//{
+//  if (myIsBlockedSelection == isBlocked)
+//    return;
+//
+//  myIsBlockedSelection = isBlocked;
+//  QList<ObjectPtr> aFeatureList;
+//  aFeatureList.append(feature());
+//
+//  //if (isBlocked) {
+//  //  emit setSelection(QList<ObjectPtr>());
+//  //  emit stopSelection(aFeatureList, true);
+//  //} else {
+//  //  emit stopSelection(aFeatureList, false);
+//  //  if (isRestoreSelection)
+//  //    emit setSelection(aFeatureList);
+//  //}
+//}
 
 FeaturePtr PartSet_OperationFeatureEdit::createFeature(const bool theFlushMessage,
   CompositeFeaturePtr theCompositeFeature)
index 1b741a56a06b2a2d578d9920cabe5305d03d37b4..293c63d952fd60f68267e7d34dafd04fc3d808bf 100644 (file)
@@ -11,6 +11,7 @@
 #include <QObject>
 
 class QMouseEvent;
+class ModuleBase_ISelection;
 
 /*!
  \class PartSet_OperationFeatureEdit
@@ -75,21 +76,19 @@ Q_OBJECT
   /// \param theView a viewer to have the viewer the eye position
   /// \param theSelected the list of selected presentations
   /// \param theHighlighted the list of highlighted presentations
-  virtual void mousePressed(QMouseEvent* theEvent, Handle_V3d_View theView,
-                            const std::list<ModuleBase_ViewerPrs>& theSelected,
-                            const std::list<ModuleBase_ViewerPrs>& theHighlighted);
+  virtual void mousePressed(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer, ModuleBase_ISelection* theSelection);
+
   /// Gives the current mouse point in the viewer
   /// \param theEvent the mouse event
   /// \param theView a viewer to have the viewer the eye position
-  virtual void mouseMoved(QMouseEvent* theEvent, Handle_V3d_View theView);
+  virtual void mouseMoved(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer);
   /// Gives the current selected objects to be processed by the operation
   /// \param thePoint a point clicked in the viewer
   /// \param theEvent the mouse event
   /// \param theSelected the list of selected presentations
   /// \param theHighlighted the list of highlighted presentations
-  virtual void mouseReleased(QMouseEvent* theEvent, Handle_V3d_View theView,
-                             const std::list<ModuleBase_ViewerPrs>& theSelected,
-                             const std::list<ModuleBase_ViewerPrs>& theHighlighted);
+  virtual void mouseReleased(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer,
+                             ModuleBase_ISelection* theSelection);
 
   /// Processes the mouse double click in the point
   /// \param theEvent the mouse event
@@ -97,8 +96,7 @@ Q_OBJECT
   /// \param theSelected the list of selected presentations
   /// \param theHighlighted the list of highlighted presentations
   virtual void mouseDoubleClick(QMouseEvent* theEvent, Handle_V3d_View theView,
-                                const std::list<ModuleBase_ViewerPrs>& theSelected,
-                                const std::list<ModuleBase_ViewerPrs>& theHighlighted);
+                                ModuleBase_ISelection* theSelection);
 
  protected:
   /// \brief Virtual method called when operation is started
@@ -123,7 +121,7 @@ Q_OBJECT
   /// the internal operation features are to be selected
   /// \param isBlocked the state whether the operation is blocked or unblocked
   /// \param isRestoreSelection the state whether the selected objects should be reselected
-  void blockSelection(bool isBlocked, const bool isRestoreSelection = true);
+  //void blockSelection(bool isBlocked, const bool isRestoreSelection = true);
 
   /// Sends the features
   void sendFeatures();
index 9c98058604b8920cdbbb412820ecefd43d5b126c..7ae6d08d998721920679ef0f9673ed4be437259c 100644 (file)
@@ -8,6 +8,7 @@
 
 #include <ModuleBase_OperationDescription.h>
 #include <ModuleBase_ViewerPrs.h>
+#include <ModuleBase_IViewer.h>
 
 #include <ModelAPI_Events.h>
 
@@ -47,11 +48,10 @@ PartSet_OperationFeatureEditMulti::~PartSet_OperationFeatureEditMulti()
 }
 
 
-bool isContains(const std::list<ModuleBase_ViewerPrs>& theSelected, const ModuleBase_ViewerPrs& thePrs)
+bool isContains(const QList<ModuleBase_ViewerPrs>& theSelected, const ModuleBase_ViewerPrs& thePrs)
 {
-  std::list<ModuleBase_ViewerPrs>::const_iterator anIt;
-  for (anIt = theSelected.cbegin(); anIt != theSelected.cend(); ++anIt) {
-    if ((*anIt).object() == thePrs.object())
+  foreach (ModuleBase_ViewerPrs aPrs, theSelected) {
+    if (aPrs.object() == thePrs.object())
       return true;
   }
   return false;
@@ -59,8 +59,8 @@ bool isContains(const std::list<ModuleBase_ViewerPrs>& theSelected, const Module
 
 
 void PartSet_OperationFeatureEditMulti::initSelection(
-    const std::list<ModuleBase_ViewerPrs>& theSelected,
-    const std::list<ModuleBase_ViewerPrs>& theHighlighted)
+    const QList<ModuleBase_ViewerPrs>& theSelected,
+    const QList<ModuleBase_ViewerPrs>& theHighlighted)
 {
   //if (!theHighlighted.empty()) {
   //  // if there is highlighted object, we check whether it is in the list of selected objects
@@ -80,17 +80,16 @@ void PartSet_OperationFeatureEditMulti::initSelection(
   //} else
   myFeatures = theSelected;
   // add highlighted elements if they are not selected
-  std::list<ModuleBase_ViewerPrs>::const_iterator anIt;
-  for (anIt = theHighlighted.cbegin(); anIt != theHighlighted.cend(); ++anIt) {
-    if (!isContains(myFeatures, (*anIt)))
-      myFeatures.push_back(*anIt);
+  foreach (ModuleBase_ViewerPrs aPrs, theHighlighted) {
+    if (!isContains(myFeatures, aPrs))
+      myFeatures.append(aPrs);
   }
   // Remove current feature if it is in the list (it will be moved as main feature)
   FeaturePtr aFea = feature();
-  for (anIt = myFeatures.cbegin(); anIt != myFeatures.cend(); ++anIt) {
-    FeaturePtr aF = ModelAPI_Feature::feature((*anIt).object());
-    if (ModelAPI_Feature::feature((*anIt).object()) == feature()) {
-      myFeatures.erase(anIt);
+  foreach (ModuleBase_ViewerPrs aPrs, myFeatures) {
+    FeaturePtr aF = ModelAPI_Feature::feature(aPrs.object());
+    if (ModelAPI_Feature::feature(aPrs.object()) == feature()) {
+      myFeatures.removeOne(aPrs);
       break;
     }
   }
@@ -101,27 +100,25 @@ CompositeFeaturePtr PartSet_OperationFeatureEditMulti::sketch() const
   return mySketch;
 }
 
-void PartSet_OperationFeatureEditMulti::mousePressed(
-    QMouseEvent* theEvent, Handle(V3d_View) theView,
-    const std::list<ModuleBase_ViewerPrs>& /*theSelected*/,
-    const std::list<ModuleBase_ViewerPrs>& theHighlighted)
+void PartSet_OperationFeatureEditMulti::mousePressed(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer, ModuleBase_ISelection* theSelection)
 {
 }
 
-void PartSet_OperationFeatureEditMulti::mouseMoved(QMouseEvent* theEvent, Handle(V3d_View) theView)
+void PartSet_OperationFeatureEditMulti::mouseMoved(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer)
 {
   if (!(theEvent->buttons() & Qt::LeftButton))
     return;
 
-  gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theView);
+  Handle(V3d_View) aView = theViewer->activeView();
+  gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), aView);
 
-  blockSelection(true);
+  //blockSelection(true);
   if (myCurPoint.myIsInitialized) {
     double aCurX, aCurY;
-    PartSet_Tools::convertTo2D(myCurPoint.myPoint, sketch(), theView, aCurX, aCurY);
+    PartSet_Tools::convertTo2D(myCurPoint.myPoint, sketch(), aView, aCurX, aCurY);
 
     double aX, anY;
-    PartSet_Tools::convertTo2D(aPoint, sketch(), theView, aX, anY);
+    PartSet_Tools::convertTo2D(aPoint, sketch(), aView, aX, anY);
 
     double aDeltaX = aX - aCurX;
     double aDeltaY = anY - aCurY;
@@ -130,10 +127,8 @@ void PartSet_OperationFeatureEditMulti::mouseMoved(QMouseEvent* theEvent, Handle
         SketchPlugin_Feature>(feature());
     aSketchFeature->move(aDeltaX, aDeltaY);
 
-    std::list<ModuleBase_ViewerPrs>::const_iterator anIt = myFeatures.begin(), 
-      aLast = myFeatures.end();
-    for (; anIt != aLast; anIt++) {
-      ObjectPtr aObject = (*anIt).object();
+    foreach (ModuleBase_ViewerPrs aPrs, myFeatures) {
+      ObjectPtr aObject = aPrs.object();
       if (!aObject || aObject == feature())
         continue;
       FeaturePtr aFeature = ModelAPI_Feature::feature(aObject);
@@ -150,16 +145,12 @@ void PartSet_OperationFeatureEditMulti::mouseMoved(QMouseEvent* theEvent, Handle
 }
 
 void PartSet_OperationFeatureEditMulti::mouseReleased(
-    QMouseEvent* theEvent, Handle(V3d_View) theView,
-    const std::list<ModuleBase_ViewerPrs>& /*theSelected*/,
-    const std::list<ModuleBase_ViewerPrs>& /*theHighlighted*/)
+    QMouseEvent* theEvent, ModuleBase_IViewer* theViewer,
+    ModuleBase_ISelection* theSelection)
 {
   if (commit()) {
-    std::list<ModuleBase_ViewerPrs> aFeatures = myFeatures;
-    std::list<ModuleBase_ViewerPrs>::const_iterator anIt = aFeatures.begin(), aLast =
-        aFeatures.end();
-    for (; anIt != aLast; anIt++) {
-      ObjectPtr aFeature = (*anIt).object();
+    foreach (ModuleBase_ViewerPrs aPrs, myFeatures) {
+      ObjectPtr aFeature = aPrs.object();
       if (aFeature) {
         emit featureConstructed(aFeature, FM_Deactivation);
       }
@@ -170,54 +161,51 @@ void PartSet_OperationFeatureEditMulti::mouseReleased(
 void PartSet_OperationFeatureEditMulti::startOperation()
 {
   PartSet_OperationSketchBase::startOperation();
-  emit multiSelectionEnabled(false);
+  //emit multiSelectionEnabled(false);
 
-  blockSelection(true);
+  //blockSelection(true);
 
   myCurPoint.clear();
 }
 
 void PartSet_OperationFeatureEditMulti::stopOperation()
 {
-  emit multiSelectionEnabled(true);
+  //emit multiSelectionEnabled(true);
 
-  blockSelection(false, true);
+  //blockSelection(false, true);
 
   myFeatures.clear();
 }
 
-void PartSet_OperationFeatureEditMulti::blockSelection(bool isBlocked,
-                                                       const bool isRestoreSelection)
-{
-  if (myIsBlockedSelection == isBlocked)
-    return;
-
-  myIsBlockedSelection = isBlocked;
-  QList<ObjectPtr> aFeatureList;
-  std::list<ModuleBase_ViewerPrs>::const_iterator anIt = myFeatures.begin(), aLast =
-      myFeatures.end();
-  /*for(; anIt != aLast; anIt++)
-   aFeatureList.append((*anIt).feature());*/
-  if (isBlocked) {
-    emit setSelection(QList<ObjectPtr>());
-    emit stopSelection(aFeatureList, true);
-  } else {
-    emit stopSelection(aFeatureList, false);
-    if (isRestoreSelection) {
-      emit setSelection(aFeatureList);
-    }
-  }
-}
+//void PartSet_OperationFeatureEditMulti::blockSelection(bool isBlocked,
+//                                                       const bool isRestoreSelection)
+//{
+//  if (myIsBlockedSelection == isBlocked)
+//    return;
+//
+//  myIsBlockedSelection = isBlocked;
+//  QList<ObjectPtr> aFeatureList;
+////  std::list<ModuleBase_ViewerPrs>::const_iterator anIt = myFeatures.begin(), aLast =
+////      myFeatures.end();
+//  /*for(; anIt != aLast; anIt++)
+//   aFeatureList.append((*anIt).feature());*/
+//  //if (isBlocked) {
+//  //  emit setSelection(QList<ObjectPtr>());
+//  //  emit stopSelection(aFeatureList, true);
+//  //} else {
+//  //  emit stopSelection(aFeatureList, false);
+//  //  if (isRestoreSelection) {
+//  //    emit setSelection(aFeatureList);
+//  //  }
+//  //}
+//}
 
 void PartSet_OperationFeatureEditMulti::sendFeatures()
 {
   static Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_MOVED);
 
-  std::list<FeaturePtr> aFeatures;
-  std::list<ModuleBase_ViewerPrs>::const_iterator anIt = myFeatures.begin(), aLast =
-      myFeatures.end();
-  for (; anIt != aLast; anIt++) {
-    ObjectPtr aFeature = (*anIt).object();
+  foreach (ModuleBase_ViewerPrs aPrs, myFeatures) {
+    ObjectPtr aFeature = aPrs.object();
     if (!aFeature)
       continue;
 
index 44de5817bc6325261866f36df5e15fde4ab8a24f..3454bdd5b61e04411b89e5d167f10bb280042be3 100644 (file)
@@ -9,6 +9,7 @@
 
 #include <PartSet_OperationSketchBase.h>
 #include <QObject>
+#include <QList>
 
 class QMouseEvent;
 
@@ -73,8 +74,8 @@ Q_OBJECT
   /// Initialisation of operation with preliminary selection
   /// \param theSelected the list of selected presentations
   /// \param theHighlighted the list of highlighted presentations
-  virtual void initSelection(const std::list<ModuleBase_ViewerPrs>& theSelected,
-                             const std::list<ModuleBase_ViewerPrs>& theHighlighted);
+  virtual void initSelection(const QList<ModuleBase_ViewerPrs>& theSelected,
+                             const QList<ModuleBase_ViewerPrs>& theHighlighted);
 
   /// Returns the operation sketch feature
   /// \returns the sketch instance
@@ -85,21 +86,21 @@ Q_OBJECT
   /// \param theView a viewer to have the viewer the eye position
   /// \param theSelected the list of selected presentations
   /// \param theHighlighted the list of highlighted presentations
-  virtual void mousePressed(QMouseEvent* theEvent, Handle_V3d_View theView,
-                            const std::list<ModuleBase_ViewerPrs>& theSelected,
-                            const std::list<ModuleBase_ViewerPrs>& theHighlighted);
+  virtual void mousePressed(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer, ModuleBase_ISelection* theSelection);
+
   /// Gives the current mouse point in the viewer
   /// \param theEvent the mouse event
   /// \param theView a viewer to have the viewer the eye position
-  virtual void mouseMoved(QMouseEvent* theEvent, Handle_V3d_View theView);
+  virtual void mouseMoved(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer);
+
   /// Gives the current selected objects to be processed by the operation
   /// \param thePoint a point clicked in the viewer
   /// \param theEvent the mouse event
   /// \param theSelected the list of selected presentations
   /// \param theHighlighted the list of highlighted presentations
-  virtual void mouseReleased(QMouseEvent* theEvent, Handle_V3d_View theView,
-                             const std::list<ModuleBase_ViewerPrs>& theSelected,
-                             const std::list<ModuleBase_ViewerPrs>& theHighlighted);
+  virtual void mouseReleased(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer, 
+                             ModuleBase_ISelection* theSelection);
+
  protected:
   /// \brief Virtual method called when operation is started
   /// Virtual method called when operation started (see start() method for more description)
@@ -116,14 +117,14 @@ Q_OBJECT
   /// the internal operation features are to be selected
   /// \param isBlocked the state whether the operation is blocked or unblocked
   /// \param isRestoreSelection the state whether the selected objects should be reselected
-  void blockSelection(bool isBlocked, const bool isRestoreSelection = true);
+  //void blockSelection(bool isBlocked, const bool isRestoreSelection = true);
 
   /// Sends the features
   void sendFeatures();
 
  private:
   CompositeFeaturePtr mySketch;  ///< the sketch feature
-  std::list<ModuleBase_ViewerPrs> myFeatures;  ///< the features to apply the edit operation
+  QList<ModuleBase_ViewerPrs> myFeatures;  ///< the features to apply the edit operation
   Point myCurPoint;  ///< the current 3D point clicked or moved
   bool myIsBlockedSelection;  ///< the state of the last state of selection blocked signal
 };
index 6deab5b2801ddc8ff68401fefd96e418e62be863..7bfddff3066104fa436db128714d63338039b724 100644 (file)
@@ -22,6 +22,8 @@
 #include <GeomAPI_XYZ.h>
 
 #include <ModuleBase_ViewerPrs.h>
+#include <ModuleBase_ISelection.h>
+#include <ModuleBase_IViewer.h>
 #include <Events_Loop.h>
 
 #include <AIS_Shape.hxx>
@@ -53,49 +55,63 @@ CompositeFeaturePtr PartSet_OperationSketch::sketch() const
   return boost::dynamic_pointer_cast<ModelAPI_CompositeFeature>(feature());
 }
 
-void PartSet_OperationSketch::mousePressed(QMouseEvent* theEvent, Handle_V3d_View theView,
-                                           const std::list<ModuleBase_ViewerPrs>& theSelected,
-                                           const std::list<ModuleBase_ViewerPrs>& theHighlighted)
+void PartSet_OperationSketch::mousePressed(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer, ModuleBase_ISelection* theSelection)
 {
   if (hasSketchPlane()) {
     // if shift button is pressed and there are some already selected objects, the operation should
     // not be started. We just want to combine some selected objects.
     bool aHasShift = (theEvent->modifiers() & Qt::ShiftModifier);
-    if (aHasShift && theSelected.size() > 0)
-      return;
-
-    if (theHighlighted.size() == 1) {
-      ObjectPtr aFeature = theHighlighted.front().object();
+    QList<ModuleBase_ViewerPrs> aSelected = theSelection->getSelected();
+    QList<ModuleBase_ViewerPrs> aHighlighted = theSelection->getHighlighted();
+    //if (aHasShift && (aSelected.size() > 0)) {
+      foreach(ModuleBase_ViewerPrs aPrs, aHighlighted)
+        aSelected.append(aPrs);
+    //}
+    //if (aHasShift && aSelected.size() > 0)
+    //  return;
+
+    if (aSelected.size() > 0) {
+      ObjectPtr aFeature = aSelected.first().object();
       if (aFeature) {
         std::string anOperationType =
-            (theSelected.size() > 1) ?
+            (aSelected.size() > 1) ?
                 PartSet_OperationFeatureEditMulti::Type() : PartSet_OperationFeatureEdit::Type();
+        //theViewer->enableSelection(false);
         restartOperation(anOperationType, aFeature);
       }
-    } else
-      myFeatures = theHighlighted;
-
-  } else {
-    if (!theHighlighted.empty()) {
-      ModuleBase_ViewerPrs aPrs = theHighlighted.front();
-      const TopoDS_Shape& aShape = aPrs.shape();
-      if (!aShape.IsNull())
-        setSketchPlane(aShape);
-    }
+    } //else
+    //myFeatures = aSelected;
+
+  } 
+}
+
+
+void PartSet_OperationSketch::selectionChanged(ModuleBase_ISelection* theSelection)
+{
+  if (hasSketchPlane())
+    return;
+
+  QList<ModuleBase_ViewerPrs> aSelected = theSelection->getSelected();
+  if (!aSelected.empty()) {
+    ModuleBase_ViewerPrs aPrs = aSelected.first();
+    const TopoDS_Shape& aShape = aPrs.shape();
+    if (!aShape.IsNull())
+      setSketchPlane(aShape);
   }
 }
 
-void PartSet_OperationSketch::mouseReleased(QMouseEvent* theEvent, Handle_V3d_View theView,
-                                            const std::list<ModuleBase_ViewerPrs>& theSelected,
-                                            const std::list<ModuleBase_ViewerPrs>& theHighlighted)
+
+void PartSet_OperationSketch::mouseReleased(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer,
+                                            ModuleBase_ISelection* theSelection)
 {
+  QList<ModuleBase_ViewerPrs> aSelected = theSelection->getSelected();
   if (hasSketchPlane()) {
     /// TODO: OCC bug: 25034 - the highlighted list should be filled not only for AIS_Shape
     /// but for other IO, for example constraint dimensions.
     /// It is empty and we have to use the process mouse release to start edition operation
     /// for these objects
-    if (theSelected.size() == 1) {
-      ObjectPtr aObject = theSelected.front().object();
+    if (aSelected.size() == 1) {
+      ObjectPtr aObject = aSelected.first().object();
       if (aObject) {
         restartOperation(PartSet_OperationFeatureEdit::Type(), aObject);
       }
@@ -103,13 +119,14 @@ void PartSet_OperationSketch::mouseReleased(QMouseEvent* theEvent, Handle_V3d_Vi
   }
 }
 
-void PartSet_OperationSketch::mouseMoved(QMouseEvent* theEvent, Handle(V3d_View) theView)
+void PartSet_OperationSketch::mouseMoved(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer)
 {
   if (!hasSketchPlane() || !(theEvent->buttons() & Qt::LeftButton) || myFeatures.empty())
     return;
 
   if (myFeatures.size() != 1) {
-    FeaturePtr aFeature = PartSet_Tools::nearestFeature(theEvent->pos(), theView, feature(),
+    Handle(V3d_View) aView = theViewer->activeView();
+    FeaturePtr aFeature = PartSet_Tools::nearestFeature(theEvent->pos(), aView, feature(),
                                                         myFeatures);
     if (aFeature)
       restartOperation(PartSet_OperationFeatureEditMulti::Type(), aFeature);
index d3ede8b3d0aec290ccf814e72e9da2674092557c..47601096f7b1af293facbb3c9fd3e2daf98aeb70 100644 (file)
@@ -12,6 +12,7 @@
 #include <SketchPlugin_Sketch.h>
 
 #include <QObject>
+#include <QList>
 
 class Handle_AIS_InteractiveObject;
 
@@ -50,22 +51,20 @@ Q_OBJECT
   /// \param theView a viewer to have the viewer the eye position
   /// \param theSelected the list of selected presentations
   /// \param theHighlighted the list of highlighted presentations
-  virtual void mousePressed(QMouseEvent* theEvent, Handle_V3d_View theView,
-                            const std::list<ModuleBase_ViewerPrs>& theSelected,
-                            const std::list<ModuleBase_ViewerPrs>& theHighlighted);
+  virtual void mousePressed(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer, ModuleBase_ISelection* theSelection);
+
   /// Processes the mouse release in the point
   /// \param theEvent the mouse event
   /// \param theView a viewer to have the viewer the eye position
   /// \param theSelected the list of selected presentations
   /// \param theHighlighted the list of highlighted presentations
-  virtual void mouseReleased(QMouseEvent* theEvent, Handle_V3d_View theView,
-                             const std::list<ModuleBase_ViewerPrs>& theSelected,
-                             const std::list<ModuleBase_ViewerPrs>& theHighlighted);
+  virtual void mouseReleased(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer,
+                             ModuleBase_ISelection* theSelection);
 
   /// Gives the current mouse point in the viewer
   /// \param thePoint a point clicked in the viewer
   /// \param theEvent the mouse event
-  virtual void mouseMoved(QMouseEvent* theEvent, Handle_V3d_View theView);
+  virtual void mouseMoved(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer);
 
   /// Returns the list of the nested features
   /// \return the list of subfeatures
@@ -88,6 +87,9 @@ Q_OBJECT
   /// Set the plane to the current sketch
   /// \param theShape the shape
   void setSketchPlane(const TopoDS_Shape& theShape);
+  
+  /// Called on selection changed when the operation is active
+  virtual void selectionChanged(ModuleBase_ISelection* theSelection);
 
   /// If operation needs to redisplay its result during operation
   /// then this method has to return True
@@ -111,7 +113,7 @@ signals:
   virtual void afterCommitOperation();
 
  private:
-  std::list<ModuleBase_ViewerPrs> myFeatures;  ///< the features to apply the edit operation
+  QList<ModuleBase_ViewerPrs> myFeatures;  ///< the features to apply the edit operation
 };
 
 #endif
index d8cd8ec7e860324884ff529f4daa330cc5282783..3ca38de905f599dea7ca664c9dbbe945887cef1f 100644 (file)
@@ -7,6 +7,7 @@
 #include <ModelAPI_ResultBody.h>
 
 #include <ModuleBase_IPropertyPanel.h>
+#include <ModuleBase_IViewer.h>
 #include <ModuleBase_ModelWidget.h>
 #include <ModuleBase_WidgetValueFeature.h>
 
@@ -60,25 +61,24 @@ FeaturePtr PartSet_OperationSketchBase::createFeature(const bool theFlushMessage
   return myFeature;
 }
 
-void PartSet_OperationSketchBase::mousePressed(
-    QMouseEvent* theEvent, Handle_V3d_View theView,
-    const std::list<ModuleBase_ViewerPrs>& theSelected,
-    const std::list<ModuleBase_ViewerPrs>& theHighlighted)
+void PartSet_OperationSketchBase::mousePressed(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer, ModuleBase_ISelection* theSelection)
 {
 }
 void PartSet_OperationSketchBase::mouseReleased(
-    QMouseEvent* theEvent, Handle_V3d_View theView,
-    const std::list<ModuleBase_ViewerPrs>& theSelected,
-    const std::list<ModuleBase_ViewerPrs>& theHighlighted)
+    QMouseEvent* theEvent, ModuleBase_IViewer* theViewer,
+    ModuleBase_ISelection* theSelection)
 {
 }
-void PartSet_OperationSketchBase::mouseMoved(QMouseEvent* theEvent, Handle(V3d_View) theView)
+void PartSet_OperationSketchBase::mouseMoved(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer)
 {
 }
 void PartSet_OperationSketchBase::mouseDoubleClick(
     QMouseEvent* theEvent, Handle_V3d_View theView,
-    const std::list<ModuleBase_ViewerPrs>& theSelected,
-    const std::list<ModuleBase_ViewerPrs>& theHighlighted)
+    ModuleBase_ISelection* theSelection)
+{
+}
+
+void PartSet_OperationSketchBase::selectionChanged(ModuleBase_ISelection* theSelection)
 {
 }
 
@@ -103,11 +103,11 @@ void PartSet_OperationSketchBase::activateByPreselection()
     return;
   ModuleBase_ModelWidget* aActiveWgt = myPropertyPanel->activeWidget();
   if ((myPreSelection.size() > 0) && aActiveWgt) {
-    const ModuleBase_ViewerPrs& aPrs = myPreSelection.front();
+    const ModuleBase_ViewerPrs& aPrs = myPreSelection.first();
     ModuleBase_WidgetValueFeature aValue;
     aValue.setObject(aPrs.object());
     if (aActiveWgt->setValue(&aValue)) {
-      myPreSelection.remove(aPrs);
+      myPreSelection.removeOne(aPrs);
       if(isValid()) {
         //myActiveWidget = NULL;
         commit();
index c7d639348f858daae620f6403558e1f81e3f17a6..5de7b7330c594baff0265d480475b31dd8820583 100644 (file)
@@ -27,6 +27,8 @@ class Handle_V3d_View;
 class QMouseEvent;
 class GeomAPI_Shape;
 class ModuleBase_ViewerPrs;
+class ModuleBase_ISelection;
+class ModuleBase_IViewer;
 
 /*!
  \class PartSet_OperationSketchBase
@@ -69,23 +71,20 @@ Q_OBJECT
   /// \param theView a viewer to have the viewer the eye position
   /// \param theSelected the list of selected presentations
   /// \param theHighlighted the list of highlighted presentations
-  virtual void mousePressed(QMouseEvent* theEvent, Handle_V3d_View theView,
-                            const std::list<ModuleBase_ViewerPrs>& theSelected,
-                            const std::list<ModuleBase_ViewerPrs>& theHighlighted);
+  virtual void mousePressed(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer, ModuleBase_ISelection* theSelection);
 
   /// Processes the mouse release in the point
   /// \param theEvent the mouse event
   /// \param theView a viewer to have the viewer the eye position
   /// \param theSelected the list of selected presentations
   /// \param theHighlighted the list of highlighted presentations
-  virtual void mouseReleased(QMouseEvent* theEvent, Handle_V3d_View theView,
-                             const std::list<ModuleBase_ViewerPrs>& theSelected,
-                             const std::list<ModuleBase_ViewerPrs>& theHighlighted);
+  virtual void mouseReleased(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer,
+                             ModuleBase_ISelection* theSelection);
 
   /// Processes the mouse move in the point
   /// \param theEvent the mouse event
   /// \param theView a viewer to have the viewer the eye position
-  virtual void mouseMoved(QMouseEvent* theEvent, Handle_V3d_View theView);
+  virtual void mouseMoved(QMouseEvent* theEvent, ModuleBase_IViewer* theViewer);
 
   /// Processes the mouse double click in the point
   /// \param theEvent the mouse event
@@ -93,8 +92,11 @@ Q_OBJECT
   /// \param theSelected the list of selected presentations
   /// \param theHighlighted the list of highlighted presentations
   virtual void mouseDoubleClick(QMouseEvent* theEvent, Handle_V3d_View theView,
-                                const std::list<ModuleBase_ViewerPrs>& theSelected,
-                                const std::list<ModuleBase_ViewerPrs>& theHighlighted);
+                                ModuleBase_ISelection* theSelection);
+
+  
+  /// Called on selection changed when the operation is active
+  virtual void selectionChanged(ModuleBase_ISelection* theSelection);
 
   /// Emits a signal about the operation start. This signal has an information about the feature.
   /// If the provided feature is empty, the current operation feature is used.
@@ -123,7 +125,7 @@ signals:
 
   /// signal to enable/disable multi selection in the viewer
   /// \param theEnabled the boolean state
-  void multiSelectionEnabled(bool theEnabled);
+  //void multiSelectionEnabled(bool theEnabled);
 
   /// signal to enable/disable selection in the viewer
   /// \param theFeatures a list of features to be disabled
index 892f610a0d36e43ebc4511f884184f9c97cc98bb..74a83734c198efb1ead726d00276d7fab3cefc1b 100644 (file)
@@ -139,21 +139,17 @@ void PartSet_Tools::convertTo3D(const double theX, const double theY, FeaturePtr
 
 FeaturePtr PartSet_Tools::nearestFeature(QPoint thePoint, Handle_V3d_View theView,
                                          FeaturePtr theSketch,
-                                         const std::list<ModuleBase_ViewerPrs>& theFeatures)
+                                         const QList<ModuleBase_ViewerPrs>& theFeatures)
 {
   double aX, anY;
   gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(thePoint, theView);
   PartSet_Tools::convertTo2D(aPoint, theSketch, theView, aX, anY);
 
   FeaturePtr aFeature;
-  std::list<ModuleBase_ViewerPrs>::const_iterator anIt = theFeatures.begin(), aLast = theFeatures
-      .end();
-
   FeaturePtr aDeltaFeature;
   double aMinDelta = -1;
   ModuleBase_ViewerPrs aPrs;
-  for (; anIt != aLast; anIt++) {
-    aPrs = *anIt;
+  foreach (ModuleBase_ViewerPrs aPrs, theFeatures) {
     if (!aPrs.object())
       continue;
     boost::shared_ptr<SketchPlugin_Feature> aSketchFeature = boost::dynamic_pointer_cast<
index 160814747f5184035d4814a27d8a85688519e865..872102d8b6d9022e9beea3a9cada4c2105cf5de3 100644 (file)
 #include <gp_Pnt.hxx>
 
 #include <QPoint>
+#include <QList>
 
 #include <ModelAPI_CompositeFeature.h>
 
 #include <boost/shared_ptr.hpp>
 
-#include <list>
-
 class Handle_V3d_View;
 class ModuleBase_ViewerPrs;
 class GeomDataAPI_Point2D;
@@ -59,7 +58,7 @@ class PARTSET_EXPORT PartSet_Tools
   /// \param theSketch the sketch feature
   /// \param theFeatures the list of selected presentations
   static FeaturePtr nearestFeature(QPoint thePoint, Handle_V3d_View theView, FeaturePtr theSketch,
-                                   const std::list<ModuleBase_ViewerPrs>& theFeatures);
+                                   const QList<ModuleBase_ViewerPrs>& theFeatures);
 
   /// Returns pointer to the root document.
   static boost::shared_ptr<ModelAPI_Document> document();
index d464e85ab1534fec6c88e9e2434f31ecb3e1990c..7a976bda33749c371cf392ef0478f5217e0edfc6 100644 (file)
@@ -9,17 +9,15 @@
 #include <BRep_Tool.hxx>
 #include <GeomAdaptor_Curve.hxx>
 #include <GeomAbs_CurveType.hxx>
+#include <ModuleBase_ISelection.h>
 
 #include <list>
 
 int shapesNbPoints(const ModuleBase_ISelection* theSelection)
 {
-  std::list<ModuleBase_ViewerPrs> aList = theSelection->getSelected();
-  std::list<ModuleBase_ViewerPrs>::iterator it;
-  ModuleBase_ViewerPrs aPrs;
+  QList<ModuleBase_ViewerPrs> aList = theSelection->getSelected();  
   int aCount = 0;
-  for (it = aList.begin(); it != aList.end(); ++it) {
-    aPrs = *it;
+  foreach (ModuleBase_ViewerPrs aPrs, aList) {
     const TopoDS_Shape& aShape = aPrs.shape();
     if (!aShape.IsNull()) {
       if (aShape.ShapeType() == TopAbs_VERTEX)
@@ -31,12 +29,9 @@ int shapesNbPoints(const ModuleBase_ISelection* theSelection)
 
 int shapesNbLines(const ModuleBase_ISelection* theSelection)
 {
-  std::list<ModuleBase_ViewerPrs> aList = theSelection->getSelected();
-  std::list<ModuleBase_ViewerPrs>::iterator it;
-  ModuleBase_ViewerPrs aPrs;
+  QList<ModuleBase_ViewerPrs> aList = theSelection->getSelected();
   int aCount = 0;
-  for (it = aList.begin(); it != aList.end(); ++it) {
-    aPrs = *it;
+  foreach(ModuleBase_ViewerPrs aPrs, aList) {
     const TopoDS_Shape& aShape = aPrs.shape();
     if (!aShape.IsNull()) {
       if (aShape.ShapeType() == TopAbs_EDGE) {
@@ -78,12 +73,10 @@ bool PartSet_ParallelValidator::isValid(const ModuleBase_ISelection* theSelectio
 
 bool PartSet_RadiusValidator::isValid(const ModuleBase_ISelection* theSelection) const
 {
-  std::list<ModuleBase_ViewerPrs> aList = theSelection->getSelected();
-  std::list<ModuleBase_ViewerPrs>::iterator it;
+  QList<ModuleBase_ViewerPrs> aList = theSelection->getSelected();
   ModuleBase_ViewerPrs aPrs;
   int aCount = 0;
-  for (it = aList.begin(); it != aList.end(); ++it) {
-    aPrs = *it;
+  foreach (ModuleBase_ViewerPrs aPrs, aList) {
     const TopoDS_Shape& aShape = aPrs.shape();
     if (!aShape.IsNull()) {
       if (aShape.ShapeType() == TopAbs_EDGE) {
index 736de32d2d7059deaafe0394e5b8e1d83f5cf0cd..dfbb75db58bb234acee173434b96204b9ab2ce9e 100644 (file)
@@ -239,7 +239,7 @@ void XGUI_Displayer::setSelected(const QList<ObjectPtr>& theResults, const bool
     if (anObj) {
       Handle(AIS_InteractiveObject) anAIS = anObj->impl<Handle(AIS_InteractiveObject)>();
       if (!anAIS.IsNull())
-        aContext->AddOrRemoveSelected(anAIS, false);
+        aContext->SetSelected(anAIS, false);
     }
   }
   if (isUpdateViewer)
index 1b91cb3dccad3b2dc905d617c40f91ebf8b16474..7ef11f4f66cb2d08724364aaedf882d93e04fffa 100644 (file)
@@ -19,10 +19,10 @@ XGUI_Selection::XGUI_Selection(XGUI_Workshop* theWorkshop)
 {
 }
 
-std::list<ModuleBase_ViewerPrs> XGUI_Selection::getSelected(int theShapeTypeToSkip) const
+QList<ModuleBase_ViewerPrs> XGUI_Selection::getSelected(int theShapeTypeToSkip) const
 {
   std::set<ObjectPtr> aPrsFeatures;
-  std::list<ModuleBase_ViewerPrs> aPresentations;
+  QList<ModuleBase_ViewerPrs> aPresentations;
   XGUI_Displayer* aDisplayer = myWorkshop->displayer();
 
   Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
@@ -44,15 +44,15 @@ std::list<ModuleBase_ViewerPrs> XGUI_Selection::getSelected(int theShapeTypeToSk
     }
     Handle(SelectMgr_EntityOwner) anOwner = aContext->SelectedOwner();
     aPrs.setOwner(anOwner);
-    aPresentations.push_back(aPrs);
+    aPresentations.append(aPrs);
   }
   return aPresentations;
 }
 
-std::list<ModuleBase_ViewerPrs> XGUI_Selection::getHighlighted(int theShapeTypeToSkip) const
+QList<ModuleBase_ViewerPrs> XGUI_Selection::getHighlighted(int theShapeTypeToSkip) const
 {
   std::set<ObjectPtr> aPrsFeatures;
-  std::list<ModuleBase_ViewerPrs> aPresentations;
+  QList<ModuleBase_ViewerPrs> aPresentations;
   XGUI_Displayer* aDisplayer = myWorkshop->displayer();
 
   Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
index 5f399a7ee32450f7ba0d3258a3d35b283d2c0154..4868a9a80f7ffad28785f15f05cc8d354a26d158 100644 (file)
@@ -16,8 +16,6 @@
 #include <NCollection_List.hxx>
 #include <TopoDS_Shape.hxx>
 
-#include <list>
-
 class XGUI_Workshop;
 
 class XGUI_EXPORT XGUI_Selection : public ModuleBase_ISelection
@@ -28,12 +26,12 @@ class XGUI_EXPORT XGUI_Selection : public ModuleBase_ISelection
   /// Returns a list of viewer selected presentations
   /// \param theShapeTypeToSkip the shapes with this type will be skipped during the result list build
   /// \return list of presentations
-  virtual std::list<ModuleBase_ViewerPrs> getSelected(int theShapeTypeToSkip = -1) const;
+  virtual QList<ModuleBase_ViewerPrs> getSelected(int theShapeTypeToSkip = -1) const;
 
   /// Returns a list of viewer highlited presentations
   /// \param theShapeTypeToSkip the shapes with this type will be skipped during the result list build
   /// \return list of presentations
-  virtual std::list<ModuleBase_ViewerPrs> getHighlighted(int theShapeTypeToSkip = -1) const;
+  virtual QList<ModuleBase_ViewerPrs> getHighlighted(int theShapeTypeToSkip = -1) const;
 
   /**
    * Returns list of currently selected objects
index 2d2b4cc1c0738208ae8e7777ead8350c0a7c844d..b64386288fe908cad45948a44f5f7a6d6599e46e 100644 (file)
@@ -175,7 +175,9 @@ XGUI_ViewWindow::XGUI_ViewWindow(XGUI_Viewer* theViewer, V3d_TypeOfView theType)
       myEventStarted(false),
       myIsActive(false),
       myLastState(WindowNormalState),
-      myOperation(NOTHING)
+      myOperation(NOTHING),
+      myGripWgt(0),
+      myPicture(0)
 {
   mySelectedPoint = gp_Pnt(0., 0., 0.);
   setFrameStyle(QFrame::Raised);