From 8320afe7fc596d4ad32c00f59ce83de2039a14e6 Mon Sep 17 00:00:00 2001 From: vsv Date: Fri, 28 Nov 2014 12:21:24 +0300 Subject: [PATCH] Porting of the new operations on SALOME --- .../ModuleBase_WidgetShapeSelector.cpp | 3 +- src/NewGeom/NewGeom_SalomeViewer.cpp | 181 ++++++++++++------ src/NewGeom/NewGeom_SalomeViewer.h | 47 ++++- src/PartSet/PartSet_WidgetPoint2d.cpp | 2 + src/XGUI/XGUI_ViewerProxy.cpp | 34 ++-- 5 files changed, 188 insertions(+), 79 deletions(-) diff --git a/src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp b/src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp index 211363d16..0f1f10064 100644 --- a/src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp +++ b/src/ModuleBase/ModuleBase_WidgetShapeSelector.cpp @@ -46,6 +46,7 @@ #include #include #include +#include #include #include @@ -258,7 +259,6 @@ void ModuleBase_WidgetShapeSelector::onSelectionChanged() return; } setObject(aObject, aShape); - //activateSelection(false); emit focusOutWidget(this); } } @@ -272,7 +272,6 @@ void ModuleBase_WidgetShapeSelector::setObject(ObjectPtr theObj, std::shared_ptr raisePanel(); } updateSelectionName(); - //activateSelection(false); emit valuesChanged(); } diff --git a/src/NewGeom/NewGeom_SalomeViewer.cpp b/src/NewGeom/NewGeom_SalomeViewer.cpp index ed2764138..ef6d6c539 100644 --- a/src/NewGeom/NewGeom_SalomeViewer.cpp +++ b/src/NewGeom/NewGeom_SalomeViewer.cpp @@ -10,12 +10,34 @@ #include #include + +Handle(V3d_View) NewGeom_SalomeView::v3dView() const +{ + SUIT_ViewManager* aMgr = myViewer->getViewManager(); + OCCViewer_ViewWindow* aWnd = static_cast(aMgr->getActiveView()); + Handle(V3d_View) aView = aWnd->getViewPort()->getView(); + return aView; +} + +//********************************************** +//********************************************** +//********************************************** + + + NewGeom_SalomeViewer::NewGeom_SalomeViewer(QObject* theParent) : ModuleBase_IViewer(theParent), - mySelector(0) + mySelector(0), myView(0), myIsSelectionChanged(false) +{ +} + +NewGeom_SalomeViewer::~NewGeom_SalomeViewer() { + if (myView) + delete myView; } + //********************************************** Handle(AIS_InteractiveContext) NewGeom_SalomeViewer::AISContext() const { @@ -59,64 +81,107 @@ void NewGeom_SalomeViewer::setSelector(NewGeom_OCCSelector* theSel) OCCViewer_Viewer* aViewer = mySelector->viewer(); SUIT_ViewManager* aMgr = aViewer->getViewManager(); + myView = new NewGeom_SalomeView(mySelector->viewer()); + // TODO: Provide ModuleBase_IViewWindow interface - //connect(aMgr, SIGNAL(lastViewClosed(SUIT_ViewManager*)), this, SIGNAL(lastViewClosed())); - //connect(aMgr, SIGNAL(tryCloseView(SUIT_ViewManager*)), this, SIGNAL(tryCloseView())); - //connect(aMgr, SIGNAL(deleteView(SUIT_ViewManager*)), this, SIGNAL(deleteView())); - //connect(aMgr, SIGNAL(viewCreated(SUIT_ViewManager*)), this, SIGNAL(viewCreated())); - //connect(aMgr, SIGNAL(activated(SUIT_ViewManager*)), this, SIGNAL(activated())); - - //connect(aMgr, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)), this, - // SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*))); - //connect(aMgr, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)), this, - // SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*))); - //connect(aMgr, SIGNAL(mouseDoubleClick(SUIT_ViewWindow*, QMouseEvent*)), this, - // SLOT(onMouseDoubleClick(SUIT_ViewWindow*, QMouseEvent*))); - //connect(aMgr, SIGNAL(mouseMove(SUIT_ViewWindow*, QMouseEvent*)), this, - // SLOT(onMouseMove(SUIT_ViewWindow*, QMouseEvent*))); - //connect(aMgr, SIGNAL(keyPress(SUIT_ViewWindow*, QKeyEvent*)), 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())); -} - -//********************************************** -//void NewGeom_SalomeViewer::onMousePress(SUIT_ViewWindow*, QMouseEvent* theEvent) -//{ -// emit mousePress(theEvent); -//} -// -////********************************************** -//void NewGeom_SalomeViewer::onMouseRelease(SUIT_ViewWindow*, QMouseEvent* theEvent) -//{ -// emit mouseRelease(theEvent); -//} -// -////********************************************** -//void NewGeom_SalomeViewer::onMouseDoubleClick(SUIT_ViewWindow*, QMouseEvent* theEvent) -//{ -// emit mouseDoubleClick(theEvent); -//} -// -////********************************************** -//void NewGeom_SalomeViewer::onMouseMove(SUIT_ViewWindow*, QMouseEvent* theEvent) -//{ -// emit mouseMove(theEvent); -//} -// -////********************************************** -//void NewGeom_SalomeViewer::onKeyPress(SUIT_ViewWindow*, QKeyEvent* theEvent) -//{ -// emit keyPress(theEvent); -//} -// -////********************************************** -//void NewGeom_SalomeViewer::onKeyRelease(SUIT_ViewWindow*, QKeyEvent* theEvent) -//{ -// emit keyRelease(theEvent); -//} + connect(aMgr, SIGNAL(lastViewClosed(SUIT_ViewManager*)), this, SIGNAL(lastViewClosed())); + + connect(aMgr, SIGNAL(tryCloseView(SUIT_ViewWindow*)), + this, SLOT(onTryCloseView(SUIT_ViewWindow*))); + connect(aMgr, SIGNAL(deleteView(SUIT_ViewWindow*)), + this, SLOT(onDeleteView(SUIT_ViewWindow*))); + connect(aMgr, SIGNAL(viewCreated(SUIT_ViewWindow*)), + this, SLOT(onViewCreated(SUIT_ViewWindow*))); + connect(aMgr, SIGNAL(activated(SUIT_ViewWindow*)), + this, SLOT(onActivated(SUIT_ViewWindow*))); + + connect(aMgr, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)), this, + SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*))); + connect(aMgr, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)), this, + SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*))); + connect(aMgr, SIGNAL(mouseDoubleClick(SUIT_ViewWindow*, QMouseEvent*)), this, + SLOT(onMouseDoubleClick(SUIT_ViewWindow*, QMouseEvent*))); + connect(aMgr, SIGNAL(mouseMove(SUIT_ViewWindow*, QMouseEvent*)), this, + SLOT(onMouseMove(SUIT_ViewWindow*, QMouseEvent*))); + + connect(aMgr, SIGNAL(keyPress(SUIT_ViewWindow*, QKeyEvent*)), this, + SLOT(onKeyPress(SUIT_ViewWindow*, QKeyEvent*))); + connect(aMgr, SIGNAL(keyRelease(SUIT_ViewWindow*, QKeyEvent*)), this, + SLOT(onKeyRelease(SUIT_ViewWindow*, QKeyEvent*))); + + connect(aViewer, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); +} + +//********************************************** +void NewGeom_SalomeViewer::onSelectionChanged() +{ + // Selection event must be sent only after mouse release + myIsSelectionChanged = true; +} + +//********************************************** +void NewGeom_SalomeViewer::onMousePress(SUIT_ViewWindow*, QMouseEvent* theEvent) +{ + emit mousePress(myView, theEvent); +} + +//********************************************** +void NewGeom_SalomeViewer::onMouseRelease(SUIT_ViewWindow*, QMouseEvent* theEvent) +{ + emit mouseRelease(myView, theEvent); + if (myIsSelectionChanged) { + emit selectionChanged(); + myIsSelectionChanged = false; + } +} + +//********************************************** +void NewGeom_SalomeViewer::onMouseDoubleClick(SUIT_ViewWindow*, QMouseEvent* theEvent) +{ + emit mouseDoubleClick(myView, theEvent); +} + +//********************************************** +void NewGeom_SalomeViewer::onMouseMove(SUIT_ViewWindow*, QMouseEvent* theEvent) +{ + emit mouseMove(myView, theEvent); +} + +//********************************************** +void NewGeom_SalomeViewer::onKeyPress(SUIT_ViewWindow*, QKeyEvent* theEvent) +{ + emit keyPress(myView, theEvent); +} + +//********************************************** +void NewGeom_SalomeViewer::onKeyRelease(SUIT_ViewWindow*, QKeyEvent* theEvent) +{ + emit keyRelease(myView, theEvent); +} + +//********************************************** +void NewGeom_SalomeViewer::onTryCloseView(SUIT_ViewWindow*) +{ + emit tryCloseView(myView); +} + +//********************************************** +void NewGeom_SalomeViewer::onDeleteView(SUIT_ViewWindow*) +{ + emit deleteView(myView); +} + +//********************************************** +void NewGeom_SalomeViewer::onViewCreated(SUIT_ViewWindow*) +{ + emit viewCreated(myView); +} + +//********************************************** +void NewGeom_SalomeViewer::onActivated(SUIT_ViewWindow*) +{ + emit activated(myView); +} //********************************************** void NewGeom_SalomeViewer::enableSelection(bool isEnabled) diff --git a/src/NewGeom/NewGeom_SalomeViewer.h b/src/NewGeom/NewGeom_SalomeViewer.h index c0d1ec6ce..8362a7d1e 100644 --- a/src/NewGeom/NewGeom_SalomeViewer.h +++ b/src/NewGeom/NewGeom_SalomeViewer.h @@ -5,12 +5,33 @@ #include "NewGeom.h" #include +#include + +#include class SUIT_ViewWindow; class QMouseEvent; class QKeyEvent; class NewGeom_OCCSelector; +class OCCViewer_Viewer; +class SUIT_ViewManager; + + +class NewGeom_SalomeView: public ModuleBase_IViewWindow +{ +public: + NewGeom_SalomeView(OCCViewer_Viewer* theViewer) { myViewer = theViewer; } + + virtual Handle(V3d_View) v3dView() const; + + void setViewer(OCCViewer_Viewer* theViewer) { myViewer = theViewer; } + OCCViewer_Viewer* viewer() const { return myViewer; } + +private: + OCCViewer_Viewer* myViewer; +}; + class NewGeom_SalomeViewer : public ModuleBase_IViewer { @@ -18,6 +39,8 @@ Q_OBJECT public: NewGeom_SalomeViewer(QObject* theParent); + ~NewGeom_SalomeViewer(); + //! Returns AIS_InteractiveContext from current OCCViewer virtual Handle(AIS_InteractiveContext) AISContext() const; @@ -65,17 +88,25 @@ Q_OBJECT } private slots: - // TODO: Provide ModuleBase_IViewWindow interface - //void onMousePress(SUIT_ViewWindow*, QMouseEvent*); - //void onMouseRelease(SUIT_ViewWindow*, QMouseEvent*); - //void onMouseDoubleClick(SUIT_ViewWindow*, QMouseEvent*); - //void onMouseMove(SUIT_ViewWindow*, QMouseEvent*); - //void onKeyPress(SUIT_ViewWindow*, QKeyEvent*); - //void onKeyRelease(SUIT_ViewWindow*, QKeyEvent*); + void onMousePress(SUIT_ViewWindow*, QMouseEvent*); + void onMouseRelease(SUIT_ViewWindow*, QMouseEvent*); + void onMouseDoubleClick(SUIT_ViewWindow*, QMouseEvent*); + void onMouseMove(SUIT_ViewWindow*, QMouseEvent*); + void onKeyPress(SUIT_ViewWindow*, QKeyEvent*); + void onKeyRelease(SUIT_ViewWindow*, QKeyEvent*); + + void onTryCloseView(SUIT_ViewWindow*); + void onDeleteView(SUIT_ViewWindow*); + void onViewCreated(SUIT_ViewWindow*); + void onActivated(SUIT_ViewWindow*); + + void onSelectionChanged(); private: NewGeom_OCCSelector* mySelector; - + NewGeom_SalomeView* myView; + bool myIsSelectionChanged; }; + #endif diff --git a/src/PartSet/PartSet_WidgetPoint2d.cpp b/src/PartSet/PartSet_WidgetPoint2d.cpp index 1fc77dc99..70b21db9e 100644 --- a/src/PartSet/PartSet_WidgetPoint2d.cpp +++ b/src/PartSet/PartSet_WidgetPoint2d.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -231,6 +232,7 @@ void PartSet_WidgetPoint2D::onMouseRelease(ModuleBase_IViewWindow* theWnd, QMous PartSet_Tools::convertTo2D(aPoint, mySketch, theWnd->v3dView(), aX, aY); setPoint(aX, aY); emit vertexSelected(aObjects.front(), aShape); + QApplication::processEvents(); emit focusOutWidget(this); return; } diff --git a/src/XGUI/XGUI_ViewerProxy.cpp b/src/XGUI/XGUI_ViewerProxy.cpp index 6e619156d..747dec245 100644 --- a/src/XGUI/XGUI_ViewerProxy.cpp +++ b/src/XGUI/XGUI_ViewerProxy.cpp @@ -68,23 +68,35 @@ void XGUI_ViewerProxy::connectToViewer() ModuleBase_IViewer* aViewer = myWorkshop->salomeConnector()->viewer(); connect(aViewer, SIGNAL(lastViewClosed()), this, SIGNAL(lastViewClosed())); - connect(aViewer, SIGNAL(tryCloseView()), this, SIGNAL(tryCloseView())); - connect(aViewer, SIGNAL(deleteView()), this, SIGNAL(deleteView())); - connect(aViewer, SIGNAL(viewCreated()), this, SIGNAL(viewCreated())); - connect(aViewer, SIGNAL(activated()), this, SIGNAL(activated())); + connect(aViewer, SIGNAL(tryCloseView(ModuleBase_IViewWindow*)), + this, SIGNAL(tryCloseView(ModuleBase_IViewWindow*))); - connect(aViewer, SIGNAL(mousePress(QMouseEvent*)), this, SIGNAL(mousePress(QMouseEvent*))); + connect(aViewer, SIGNAL(deleteView(ModuleBase_IViewWindow*)), + this, SIGNAL(deleteView(ModuleBase_IViewWindow*))); - connect(aViewer, SIGNAL(mouseRelease(QMouseEvent*)), this, SIGNAL(mouseRelease(QMouseEvent*))); + connect(aViewer, SIGNAL(viewCreated(ModuleBase_IViewWindow*)), + this, SIGNAL(viewCreated(ModuleBase_IViewWindow*))); - connect(aViewer, SIGNAL(mouseDoubleClick(QMouseEvent*)), this, - SIGNAL(mouseDoubleClick(QMouseEvent*))); + connect(aViewer, SIGNAL(activated(ModuleBase_IViewWindow*)), + this, SIGNAL(activated(ModuleBase_IViewWindow*))); - connect(aViewer, SIGNAL(mouseMove(QMouseEvent*)), this, SIGNAL(mouseMove(QMouseEvent*))); + connect(aViewer, SIGNAL(mousePress(ModuleBase_IViewWindow*, QMouseEvent*)), + this, SIGNAL(mousePress(ModuleBase_IViewWindow*, QMouseEvent*))); - connect(aViewer, SIGNAL(keyPress(QKeyEvent*)), this, SIGNAL(keyPress(QKeyEvent*))); + connect(aViewer, SIGNAL(mouseRelease(ModuleBase_IViewWindow*, QMouseEvent*)), + this, SIGNAL(mouseRelease(ModuleBase_IViewWindow*, QMouseEvent*))); - connect(aViewer, SIGNAL(keyRelease(QKeyEvent*)), this, SIGNAL(keyRelease(QKeyEvent*))); + connect(aViewer, SIGNAL(mouseDoubleClick(ModuleBase_IViewWindow*, QMouseEvent*)), this, + SIGNAL(mouseDoubleClick(ModuleBase_IViewWindow*, QMouseEvent*))); + + connect(aViewer, SIGNAL(mouseMove(ModuleBase_IViewWindow*, QMouseEvent*)), + this, SIGNAL(mouseMove(ModuleBase_IViewWindow*, QMouseEvent*))); + + connect(aViewer, SIGNAL(keyPress(ModuleBase_IViewWindow*, QKeyEvent*)), + this, SIGNAL(keyPress(ModuleBase_IViewWindow*, QKeyEvent*))); + + connect(aViewer, SIGNAL(keyRelease(ModuleBase_IViewWindow*, QKeyEvent*)), + this, SIGNAL(keyRelease(ModuleBase_IViewWindow*, QKeyEvent*))); connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged())); connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), this, -- 2.39.2