]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Provide connection of new features in SALOME module
authorvsv <vitaly.smetannikov@opencascade.com>
Tue, 10 Jun 2014 14:24:36 +0000 (18:24 +0400)
committervsv <vitaly.smetannikov@opencascade.com>
Tue, 10 Jun 2014 14:24:36 +0000 (18:24 +0400)
12 files changed:
src/GeomAlgoAPI/GeomAlgoAPI_SketchBuilder.cpp
src/ModuleBase/ModuleBase_WidgetDoubleValue.cpp
src/NewGeom/CMakeLists.txt
src/NewGeom/NewGeom_Module.cpp
src/NewGeom/NewGeom_Module.h
src/NewGeom/NewGeom_SalomeViewer.cpp
src/NewGeom/NewGeom_SalomeViewer.h
src/XGUI/XGUI_ContextMenuMgr.cpp
src/XGUI/XGUI_ContextMenuMgr.h
src/XGUI/XGUI_SalomeViewer.h
src/XGUI/XGUI_ViewerProxy.cpp
src/XGUI/XGUI_Workshop.cpp

index b910d17532b93fe170d948a762fd0fc9526dbc06..08f39e8c0b27bf75ba562b14b8ca9b5fcd30301e 100644 (file)
 #include <TopoDS_Wire.hxx>
 
 #include <Precision.hxx>
+
+#ifndef DBL_MAX
+#define DBL_MAX 1.7976931348623158e+308 
+#endif
+
+
 const double tolerance = Precision::Confusion();
 
 /// \brief Search first vertex - the vertex with lowest x coordinate, which is used in 2 edges at least
index 0824da5b414ac1e73ec5bfe3070031ce317dab28..9c02822e8f0b42ba119f63f9fec865a0c8c6cd2c 100644 (file)
 #include <QEvent>
 #include <QKeyEvent>
 
+#ifndef DBL_MAX
+#define DBL_MAX 1.7976931348623158e+308 
+#endif
+
 
 ModuleBase_WidgetDoubleValue::ModuleBase_WidgetDoubleValue(QWidget* theParent, const Config_WidgetAPI* theData)
   : ModuleBase_ModelWidget(theParent, theData)
index 27b7c58f481c9ea961947fc3c0af63b6386d2290..e0d4ba7305ffb0fc727ce28c012e9279dddf1b0d 100644 (file)
@@ -35,6 +35,7 @@ SET(PROJECT_LIBRARIES
        ${LightApp}
        ${CAM}
        ${OCCViewer}
+       ${qtx}
 )
 
 ADD_DEFINITIONS( -DNewGeom_EXPORTS ${CAS_DEFINITIONS} )
index 549276279f14ece914747ce0b52deb231b7a3dce..fc07f5d55bf7f280db540e4aed232fa1fc4e5585 100644 (file)
@@ -6,6 +6,7 @@
 
 #include <XGUI_Workshop.h>
 #include <XGUI_PropertyPanel.h>
+#include <XGUI_ContextMenuMgr.h>
 
 #include <LightApp_Application.h>
 #include <LightApp_SelectionMgr.h>
@@ -16,6 +17,7 @@
 #include <SUIT_Desktop.h>
 #include <SUIT_ViewManager.h>
 
+#include <QtxPopupMgr.h>
 #include <QtxActionMenuMgr.h>
 
 #include <QDockWidget>
@@ -72,7 +74,6 @@ bool NewGeom_Module::activateModule(SUIT_Study* theStudy)
   if (isDone) {
     setMenuShown( true );
     setToolShown( true );
-    myWorkshop->propertyPanel()->hide();
 
     if (!mySelector) {
       ViewManagerList OCCViewManagers;
@@ -81,10 +82,22 @@ bool NewGeom_Module::activateModule(SUIT_Study* theStudy)
         mySelector = createSelector(OCCViewManagers.first());
       }
     }
+    myWorkshop->propertyPanel()->hide();
+    QtxPopupMgr* aMgr = popupMgr(); // Create popup manager
+    action(myEraseAll)->setEnabled(false);
   }
   return isDone;
 }
 
+//******************************************************
+bool NewGeom_Module::deactivateModule(SUIT_Study* theStudy)
+{
+  setMenuShown( false );
+  setToolShown( false );
+  //myWorkshop->contextMenuMgr()->disconnectViewer();
+  return LightApp_Module::deactivateModule(theStudy);
+}
+
 //******************************************************
 void NewGeom_Module::onViewManagerAdded( SUIT_ViewManager* theMgr )
 {
@@ -112,14 +125,6 @@ NewGeom_OCCSelector* NewGeom_Module::createSelector(SUIT_ViewManager* theMgr)
   return 0;
 }
 
-//******************************************************
-bool NewGeom_Module::deactivateModule(SUIT_Study* theStudy)
-{
-  setMenuShown( false );
-  setToolShown( false );
-  return LightApp_Module::deactivateModule(theStudy);
-}
-
 //******************************************************
 CAM_DataModel* NewGeom_Module::createDataModel()
 {
@@ -242,3 +247,10 @@ void NewGeom_Module::selectionChanged()
   LightApp_Module::selectionChanged();
   myWorkshop->salomeViewerSelectionChanged();
 }
+
+//******************************************************
+void NewGeom_Module::contextMenuPopup(const QString& theClient, QMenu* theMenu, QString& theTitle)
+{
+  myWorkshop->contextMenuMgr()->addViewerItems(theMenu);
+  LightApp_Module::contextMenuPopup(theClient, theMenu, theTitle);
+}
\ No newline at end of file
index ef0b4eb4ad28d8f2596b7155a7bc70c35c3f0142..78cc95fba730ed4993f1587facaf8743d325ecad 100644 (file)
@@ -74,6 +74,8 @@ public:
   //! Returns list of Ids of defined actions (just by NewGeom module)
   virtual QStringList commandIdList() const;
 
+  virtual void contextMenuPopup(const QString& theClient, QMenu* theMenu, QString& theTitle);
+
 public slots:
   virtual bool activateModule( SUIT_Study* theStudy);
   virtual bool deactivateModule( SUIT_Study* theStudy);
index 5fe0be383819ede7a8b7f2dfe95e8c76778ac3eb..99a99d328f23807bfbf2283e41a6640dd2982f58 100644 (file)
@@ -4,9 +4,14 @@
 
 #include <OCCViewer_ViewWindow.h>
 #include <OCCViewer_ViewPort3d.h>
+#include <OCCViewer_ViewFrame.h>
 
 #include <SUIT_ViewManager.h>
 
+#include <QMouseEvent>
+#include <QContextMenuEvent>
+
+
 NewGeom_SalomeViewer::NewGeom_SalomeViewer(QObject* theParent)
 : XGUI_SalomeViewer(theParent), mySelector(0)
 {
@@ -70,6 +75,9 @@ void NewGeom_SalomeViewer::setSelector(NewGeom_OCCSelector* theSel)
           this, SLOT(onKeyPress(SUIT_ViewWindow*, QKeyEvent*)));
   connect(aMgr, SIGNAL(keyRelease(SUIT_ViewWindow*, QKeyEvent*)),
           this, SLOT(onKeyRelease(SUIT_ViewWindow*, QKeyEvent*)));
+
+  connect(aViewer, SIGNAL(selectionChanged()),
+          this, SIGNAL(selectionChanged()));
 }
 
 //**********************************************
@@ -82,6 +90,11 @@ void NewGeom_SalomeViewer::onMousePress(SUIT_ViewWindow*, QMouseEvent* theEvent)
 void NewGeom_SalomeViewer::onMouseRelease(SUIT_ViewWindow*, QMouseEvent* theEvent)
 {
   emit mouseRelease(theEvent);
+  //if ((theEvent->button() == Qt::RightButton) && 
+  //  (theEvent->modifiers() == Qt::NoModifier)) {
+  //  QContextMenuEvent aEvent(QContextMenuEvent::Mouse, theEvent->pos(), theEvent->globalPos());
+  //  emit contextMenuRequested(&aEvent);
+  //}
 }
 
 //**********************************************
@@ -131,3 +144,13 @@ bool NewGeom_SalomeViewer::isMultiSelectionEnabled() const
 {
   return mySelector->viewer()->isMultiSelectionEnabled();
 }
+
+//**********************************************
+void NewGeom_SalomeViewer::fitAll()
+{
+  SUIT_ViewManager* aMgr = mySelector->viewer()->getViewManager();
+  OCCViewer_ViewFrame* aVFrame = dynamic_cast<OCCViewer_ViewFrame*>(aMgr->getActiveView());
+  if (aVFrame) {
+    aVFrame->onFitAll();
+  }
+}
\ No newline at end of file
index a665af3b77298a9767f90d8cac6b125a8cda704d..8217e0146fb647b63b27f12a0ad024adefd2504f 100644 (file)
@@ -40,6 +40,9 @@ public:
   //! Returns true if multiselection is enabled
   virtual bool isMultiSelectionEnabled() const;
 
+  //! Perfroms the fit all for the active view
+  virtual void fitAll();
+
   void setSelector(NewGeom_OCCSelector* theSel);
 
   NewGeom_OCCSelector* selector() const { return mySelector; }
index a02f1d2dc397bc3a573ad4e54727067e52ba7883..efe3c9c127763939cb292274e67a4ae5d6b45ac6 100644 (file)
@@ -5,7 +5,7 @@
 #include "XGUI_SelectionMgr.h"
 #include "XGUI_Displayer.h"
 #include "XGUI_MainWindow.h"
-#include "XGUI_Viewer.h"
+#include "XGUI_ViewerProxy.h"
 
 #include "PartSetPlugin_Part.h"
 
@@ -84,7 +84,7 @@ void XGUI_ContextMenuMgr::onContextMenuRequest(QContextMenuEvent* theEvent)
   QMenu* aMenu = 0;
   if (sender() == myWorkshop->objectBrowser())
     aMenu = objectBrowserMenu();
-  else if (sender() == myWorkshop->mainWindow()->viewer()) {
+  else if (sender() == myWorkshop->viewer()) {
     aMenu = viewerMenu();
   }
   
@@ -141,19 +141,7 @@ QMenu* XGUI_ContextMenuMgr::objectBrowserMenu() const
 QMenu* XGUI_ContextMenuMgr::viewerMenu() const
 {
   QMenu* aMenu = new QMenu();
-  XGUI_SelectionMgr* aSelMgr = myWorkshop->selector();
-  QFeatureList aFeatures = aSelMgr->selectedFeatures();
-  if (aFeatures.size() > 0) {
-    if (aFeatures.size() > 0)
-      aMenu->addAction(action("EDIT_CMD"));
-    aMenu->addAction(action("HIDE_CMD"));
-    aMenu->addAction(action("DELETE_CMD"));
-  }
-  QMdiArea* aMDI = myWorkshop->mainWindow()->mdiArea();
-  if (aMDI->actions().size() > 0) {
-    QMenu* aSubMenu = aMenu->addMenu(tr("Windows"));
-    aSubMenu->addActions(aMDI->actions());
-  }
+  addViewerItems(aMenu);
   if (aMenu->actions().size() > 0) {
     return aMenu;
   }
@@ -161,6 +149,35 @@ QMenu* XGUI_ContextMenuMgr::viewerMenu() const
   return 0;
 }
 
+void XGUI_ContextMenuMgr::addViewerItems(QMenu* theMenu) const
+{
+  XGUI_SelectionMgr* aSelMgr = myWorkshop->selector();
+  QFeatureList aFeatures = aSelMgr->selectedFeatures();
+  if (aFeatures.size() > 0) {
+    if (aFeatures.size() == 1)
+      theMenu->addAction(action("EDIT_CMD"));
+    bool isVisible = false;
+    foreach(FeaturePtr aFeature, aFeatures) {
+      if (myWorkshop->displayer()->isVisible(aFeature)) {
+        isVisible = true;
+        break;
+      }
+    }
+    if (isVisible)
+      theMenu->addAction(action("HIDE_CMD"));
+    else 
+      theMenu->addAction(action("SHOW_CMD"));
+    theMenu->addAction(action("DELETE_CMD"));
+  }
+  if (!myWorkshop->isSalomeMode()) {
+    QMdiArea* aMDI = myWorkshop->mainWindow()->mdiArea();
+    if (aMDI->actions().size() > 0) {
+      QMenu* aSubMenu = theMenu->addMenu(tr("Windows"));
+      aSubMenu->addActions(aMDI->actions());
+    }
+  }
+}
+
 void XGUI_ContextMenuMgr::connectObjectBrowser() const
 {
   connect(myWorkshop->objectBrowser(), SIGNAL(contextMenuRequested(QContextMenuEvent*)), 
@@ -169,7 +186,7 @@ void XGUI_ContextMenuMgr::connectObjectBrowser() const
 
 void XGUI_ContextMenuMgr::connectViewer() const
 {
-  // TODO: Adapt to SALOME mode
-  connect(myWorkshop->mainWindow()->viewer(), SIGNAL(contextMenuRequested(QContextMenuEvent*)), 
+  connect(myWorkshop->viewer(), SIGNAL(contextMenuRequested(QContextMenuEvent*)), 
     this, SLOT(onContextMenuRequest(QContextMenuEvent*)));
 }
+
index a8255ff0cab25dc269bf109b82d373c7574c6280..a48bd79c770d442bab75cf086aa5a2d108f73b44 100644 (file)
@@ -12,6 +12,9 @@ class QAction;
 class QContextMenuEvent;
 class QMenu;
 
+/**
+* A claas wihich provides manement of context menu
+*/
 class XGUI_EXPORT XGUI_ContextMenuMgr: public QObject
 {
 Q_OBJECT
@@ -19,20 +22,27 @@ public:
   XGUI_ContextMenuMgr(XGUI_Workshop* theParent);
   virtual ~XGUI_ContextMenuMgr();
 
+  /// Create all actions for context menus. It is called on creation of application
   void createActions();
 
-  void addAction(const QString& theId, QAction* theAction);
-
+  /// Returns action according to the given ID
   QAction* action(const QString& theId) const;
 
+  /// Returns list of registered actions Ids
   QStringList actionIds() const;
 
+  /// update state of internal commands
   void updateCommandsStatus();
 
+  /// Connect to object browser from workshop. Has to called at creation of viewer.
   void connectObjectBrowser() const;
 
+  /// Connect to viewer from workshop. Has to called at creation of viewer.
   void connectViewer() const;
 
+  /// Add menu atems for viewer into the given menu (used in SALOME mode)
+  void addViewerItems(QMenu* theMenu) const;
+
 signals:
   void actionTriggered(const QString& theId, bool isChecked);
 
@@ -42,6 +52,14 @@ private slots:
   void onContextMenuRequest(QContextMenuEvent* theEvent);
 
 private:
+  /** 
+  * Add action
+  * \param theId - string ID of the item
+  * \param theAction - action to add
+  */
+  void addAction(const QString& theId, QAction* theAction);
+
+
   QMenu* objectBrowserMenu() const;
   QMenu* viewerMenu() const;
 
index a07008bfc7c66d7c22e4f5205be7bf28c4286f07..d35937900240d77e028ab446ff1d9101d828371d 100644 (file)
@@ -9,6 +9,7 @@
 
 class QMouseEvent;
 class QKeyEvent;
+class QContextMenuEvent;
 
 /**
 * A Base object for definition of connector object to
@@ -58,6 +59,7 @@ signals:
   void activated();
 
   void selectionChanged();
+  void contextMenuRequested(QContextMenuEvent*);
 };
 
 #endif
\ No newline at end of file
index b5c3706da956764bebaa2b0db2a2341369ba8805..19453efdb3a4719691ba02a5952c86c9a4cf14fe 100644 (file)
@@ -97,6 +97,9 @@ void XGUI_ViewerProxy::connectToViewer()
             this, SIGNAL(keyRelease(QKeyEvent*)));
 
     connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged()));
+    connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), 
+            this, SIGNAL(contextMenuRequested(QContextMenuEvent*)));
+
   } else {
     XGUI_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
 
@@ -125,6 +128,8 @@ void XGUI_ViewerProxy::connectToViewer()
             this, SLOT(onKeyRelease(XGUI_ViewWindow*, QKeyEvent*)));
 
     connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged()));
+    connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), 
+            this, SIGNAL(contextMenuRequested(QContextMenuEvent*)));
   }
 }
 
index 3ff0a00463a827badf234ed8c5de717103df3893..c4c6ac93951c4a80300d7f7e5278e6b2d26fc9e4 100644 (file)
@@ -450,10 +450,10 @@ void XGUI_Workshop::onNew()
   if (!isSalomeMode()) {
     myMainWindow->showPythonConsole();
     QMdiSubWindow* aWnd = myMainWindow->viewer()->createView();
-    myContextMenuMgr->connectViewer();
     aWnd->showMaximized();
     updateCommandStatus();
   }
+  myContextMenuMgr->connectViewer();
   QApplication::restoreOverrideCursor();
 }