X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_ViewerProxy.cpp;h=788a0d906ec07a474aaa51c330f69b53264117e3;hb=08a596f683652d0694b58dbb14eadfe11163c803;hp=e07c3693e75ca6e91446ddefc12c7d9d2b16b020;hpb=c52423b158d7e2bae396c62e4fe62e7e8f78c381;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_ViewerProxy.cpp b/src/XGUI/XGUI_ViewerProxy.cpp index e07c3693e..788a0d906 100644 --- a/src/XGUI/XGUI_ViewerProxy.cpp +++ b/src/XGUI/XGUI_ViewerProxy.cpp @@ -1,185 +1,416 @@ +// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or +// email : webmaster.salome@opencascade.com +// + #include "XGUI_ViewerProxy.h" #include "XGUI_Workshop.h" -#include "XGUI_MainWindow.h" -#include "XGUI_ViewPort.h" -#include "XGUI_ViewWindow.h" -#include "XGUI_Viewer.h" #include "XGUI_SalomeConnector.h" +#include "XGUI_Displayer.h" + +#ifndef HAVE_SALOME + #include + #include + #include + #include +#endif +#include + +#include XGUI_ViewerProxy::XGUI_ViewerProxy(XGUI_Workshop* theParent) -: XGUI_SalomeViewer(theParent), myWorkshop(theParent) + : ModuleBase_IViewer(theParent), + myWorkshop(theParent) { } +void XGUI_ViewerProxy::connectViewProxy() +{ +#ifdef HAVE_SALOME + connect(myWorkshop->salomeConnector()->viewer(), SIGNAL(trihedronVisibilityChanged(bool)), + SIGNAL(trihedronVisibilityChanged(bool))); +#else + connect(myWorkshop->mainWindow()->viewer(), SIGNAL(trihedronVisibilityChanged(bool)), + SIGNAL(trihedronVisibilityChanged(bool))); +#endif +} Handle(AIS_InteractiveContext) XGUI_ViewerProxy::AISContext() const { - if (myWorkshop->isSalomeMode()) { - return myWorkshop->salomeConnector()->viewer()->AISContext(); - } else { - return myWorkshop->mainWindow()->viewer()->AISContext(); - } + Handle(AIS_InteractiveContext) aContext; +#ifdef HAVE_SALOME + aContext = myWorkshop->salomeConnector()->viewer()->AISContext(); +#else + aContext = myWorkshop->mainWindow()->viewer()->AISContext(); +#endif + return aContext; +} + +Handle(AIS_Trihedron) XGUI_ViewerProxy::trihedron() const +{ +#ifdef HAVE_SALOME + return myWorkshop->salomeConnector()->viewer()->trihedron(); +#else + return myWorkshop->mainWindow()->viewer()->trihedron(); +#endif } Handle(V3d_Viewer) XGUI_ViewerProxy::v3dViewer() const { - if (myWorkshop->isSalomeMode()) { - return myWorkshop->salomeConnector()->viewer()->v3dViewer(); - } else { - return myWorkshop->mainWindow()->viewer()->v3dViewer(); - } +#ifdef HAVE_SALOME + return myWorkshop->salomeConnector()->viewer()->v3dViewer(); +#else + return myWorkshop->mainWindow()->viewer()->v3dViewer(); +#endif } Handle(V3d_View) XGUI_ViewerProxy::activeView() const { - if (myWorkshop->isSalomeMode()) { - return myWorkshop->salomeConnector()->viewer()->activeView(); - } else { - XGUI_Viewer* aViewer = myWorkshop->mainWindow()->viewer(); - return aViewer->activeViewWindow()->viewPort()->getView(); - } +#ifdef HAVE_SALOME + return myWorkshop->salomeConnector()->viewer()->activeView(); +#else + AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer(); + return (aViewer->activeViewWindow()) ? + aViewer->activeViewWindow()->viewPortApp()->getView() : + Handle(V3d_View)(); +#endif +} + +QWidget* XGUI_ViewerProxy::activeViewPort() const +{ +#ifdef HAVE_SALOME + return myWorkshop->salomeConnector()->viewer()->activeViewPort(); +#else + AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer(); + return (aViewer->activeViewWindow()) ? + aViewer->activeViewWindow()->viewPortApp(): 0; +#endif } - -void XGUI_ViewerProxy::setViewProjection(double theX, double theY, double theZ) + +void XGUI_ViewerProxy::setViewProjection(double theX, double theY, double theZ, double theTwist) { Handle(V3d_View) aView3d = activeView(); - if ( !aView3d.IsNull() ) { + if (!aView3d.IsNull()) { aView3d->SetProj(theX, theY, theZ); - aView3d->FitAll( 0.01, true, true ); + aView3d->SetTwist( theTwist ); + aView3d->FitAll(0.01, false); aView3d->SetZSize(0.); + if (aView3d->Depth() < 0.1) + aView3d->DepthFitAll(); } } +void XGUI_ViewerProxy::fitAll() +{ +#ifdef HAVE_SALOME + myWorkshop->salomeConnector()->viewer()->fitAll(); +#else + AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer(); + if (aViewer->activeViewWindow()) + aViewer->activeViewWindow()->viewPortApp()->fitAll(); +#endif +} + +void XGUI_ViewerProxy::eraseAll() +{ +#ifdef HAVE_SALOME + myWorkshop->salomeConnector()->viewer()->eraseAll(); +#else +#endif +} void XGUI_ViewerProxy::connectToViewer() { - if (myWorkshop->isSalomeMode()) { - XGUI_SalomeViewer* 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(mousePress(QMouseEvent*)), - this, SIGNAL(mousePress(QMouseEvent*))); - - connect(aViewer, SIGNAL(mouseRelease(QMouseEvent*)), - this, SIGNAL(mouseRelease(QMouseEvent*))); - - connect(aViewer, SIGNAL(mouseDoubleClick(QMouseEvent*)), - this, SIGNAL(mouseDoubleClick(QMouseEvent*))); - - connect(aViewer, SIGNAL(mouseMove(QMouseEvent*)), - this, SIGNAL(mouseMove(QMouseEvent*))); - - connect(aViewer, SIGNAL(keyPress(QKeyEvent*)), - this, SIGNAL(keyPress(QKeyEvent*))); - - connect(aViewer, SIGNAL(keyRelease(QKeyEvent*)), - this, SIGNAL(keyRelease(QKeyEvent*))); - } else { - XGUI_Viewer* aViewer = myWorkshop->mainWindow()->viewer(); - - connect(aViewer, SIGNAL(lastViewClosed()), - this, SIGNAL(lastViewClosed())); - connect(aViewer, SIGNAL(tryCloseView(XGUI_ViewWindow*)), - this, SIGNAL(tryCloseView())); - connect(aViewer, SIGNAL(deleteView(XGUI_ViewWindow*)), - this, SIGNAL(deleteView())); - connect(aViewer, SIGNAL(viewCreated(XGUI_ViewWindow*)), - this, SIGNAL(viewCreated())); - connect(aViewer, SIGNAL(activated(XGUI_ViewWindow*)), - this, SIGNAL(activated())); - - connect(aViewer, SIGNAL(mousePress(XGUI_ViewWindow*, QMouseEvent*)), - this, SLOT(onMousePress(XGUI_ViewWindow*, QMouseEvent*))); - connect(aViewer, SIGNAL(mouseRelease(XGUI_ViewWindow*, QMouseEvent*)), - this, SLOT(onMouseRelease(XGUI_ViewWindow*, QMouseEvent*))); - connect(aViewer, SIGNAL(mouseDoubleClick(XGUI_ViewWindow*, QMouseEvent*)), - this, SLOT(onMouseDoubleClick(XGUI_ViewWindow*, QMouseEvent*))); - connect(aViewer, SIGNAL(mouseMove(XGUI_ViewWindow*, QMouseEvent*)), - this, SLOT(onMouseMove(XGUI_ViewWindow*, QMouseEvent*))); - connect(aViewer, SIGNAL(keyPress(XGUI_ViewWindow*, QKeyEvent*)), - this, SLOT(onKeyPress(XGUI_ViewWindow*, QKeyEvent*))); - connect(aViewer, SIGNAL(keyRelease(XGUI_ViewWindow*, QKeyEvent*)), - this, SLOT(onKeyRelease(XGUI_ViewWindow*, QKeyEvent*))); +#ifdef HAVE_SALOME + ModuleBase_IViewer* aViewer = myWorkshop->salomeConnector()->viewer(); + + connect(aViewer, SIGNAL(lastViewClosed()), this, SIGNAL(lastViewClosed())); + connect(aViewer, SIGNAL(tryCloseView(ModuleBase_IViewWindow*)), + this, SIGNAL(tryCloseView(ModuleBase_IViewWindow*))); + + connect(aViewer, SIGNAL(deleteView(ModuleBase_IViewWindow*)), + this, SIGNAL(deleteView(ModuleBase_IViewWindow*))); + + connect(aViewer, SIGNAL(viewCreated(ModuleBase_IViewWindow*)), + this, SLOT(onViewCreated(ModuleBase_IViewWindow*))); + + connect(aViewer, SIGNAL(activated(ModuleBase_IViewWindow*)), + this, SIGNAL(activated(ModuleBase_IViewWindow*))); + + connect(aViewer, SIGNAL(mousePress(ModuleBase_IViewWindow*, QMouseEvent*)), + this, SIGNAL(mousePress(ModuleBase_IViewWindow*, QMouseEvent*))); + + connect(aViewer, SIGNAL(mouseRelease(ModuleBase_IViewWindow*, QMouseEvent*)), + this, SIGNAL(mouseRelease(ModuleBase_IViewWindow*, QMouseEvent*))); + + 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(viewTransformed(int)), this, SIGNAL(viewTransformed(int))); + + connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), this, + SIGNAL(contextMenuRequested(QContextMenuEvent*))); +#else + AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer(); + + connect(aViewer, SIGNAL(lastViewClosed()), this, SIGNAL(lastViewClosed())); + + connect(aViewer, SIGNAL(tryCloseView(AppElements_ViewWindow*)), + this, SLOT(onTryCloseView(AppElements_ViewWindow*))); + + connect(aViewer, SIGNAL(deleteView(AppElements_ViewWindow*)), + this, SLOT(onDeleteView(AppElements_ViewWindow*))); + + connect(aViewer, SIGNAL(viewCreated(AppElements_ViewWindow*)), + this, SLOT(onViewCreated(AppElements_ViewWindow*))); + + connect(aViewer, SIGNAL(activated(AppElements_ViewWindow*)), + this, SLOT(onActivated(AppElements_ViewWindow*))); + + connect(aViewer, SIGNAL(mousePress(AppElements_ViewWindow*, QMouseEvent*)), this, + SLOT(onMousePress(AppElements_ViewWindow*, QMouseEvent*))); + + connect(aViewer, SIGNAL(mouseRelease(AppElements_ViewWindow*, QMouseEvent*)), this, + SLOT(onMouseRelease(AppElements_ViewWindow*, QMouseEvent*))); + + connect(aViewer, SIGNAL(mouseDoubleClick(AppElements_ViewWindow*, QMouseEvent*)), this, + SLOT(onMouseDoubleClick(AppElements_ViewWindow*, QMouseEvent*))); + + connect(aViewer, SIGNAL(mouseMove(AppElements_ViewWindow*, QMouseEvent*)), this, + SLOT(onMouseMove(AppElements_ViewWindow*, QMouseEvent*))); + + connect(aViewer, SIGNAL(keyPress(AppElements_ViewWindow*, QKeyEvent*)), this, + SLOT(onKeyPress(AppElements_ViewWindow*, QKeyEvent*))); + + connect(aViewer, SIGNAL(keyRelease(AppElements_ViewWindow*, QKeyEvent*)), this, + SLOT(onKeyRelease(AppElements_ViewWindow*, QKeyEvent*))); + + connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged())); + connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), this, + SIGNAL(contextMenuRequested(QContextMenuEvent*))); +#endif +} + +bool XGUI_ViewerProxy::eventFilter(QObject *theObject, QEvent *theEvent) +{ + if (theEvent->type() == QEvent::Enter) { + emit enterViewPort(); } + else if (theEvent->type() == QEvent::Leave) { + emit leaveViewPort(); + } + return ModuleBase_IViewer::eventFilter(theObject, theEvent); +} + +void XGUI_ViewerProxy::onViewCreated(ModuleBase_IViewWindow* theWnd) +{ + theWnd->viewPort()->installEventFilter(this); + + myWindowScale.insert (theWnd->v3dView(), theWnd->v3dView()->Camera()->Scale()); + + emit viewCreated(theWnd); +} + +#ifndef HAVE_SALOME +void XGUI_ViewerProxy::onTryCloseView(AppElements_ViewWindow* theWnd) +{ + emit tryCloseView(theWnd); +} + +void XGUI_ViewerProxy::onDeleteView(AppElements_ViewWindow* theWnd) +{ + if (myWindowScale.contains(theWnd->v3dView())) + myWindowScale.remove (theWnd->v3dView()); + emit deleteView(theWnd); +} + +void XGUI_ViewerProxy::onViewCreated(AppElements_ViewWindow* theWnd) +{ + theWnd->viewPort()->installEventFilter(this); + + connect(theWnd, SIGNAL(vpTransformationFinished(AppElements_ViewWindow::OperationType)), + this, SLOT(onViewTransformed(AppElements_ViewWindow::OperationType))); + + myWindowScale.insert (theWnd->v3dView(), theWnd->v3dView()->Camera()->Scale()); + + emit viewCreated(theWnd); +} + +void XGUI_ViewerProxy::onActivated(AppElements_ViewWindow* theWnd) +{ + emit activated(theWnd); } -void XGUI_ViewerProxy::onMousePress(XGUI_ViewWindow*, QMouseEvent* theEvent) +void XGUI_ViewerProxy::onMousePress(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent) { - emit mousePress(theEvent); + emit mousePress(theWnd, theEvent); } -void XGUI_ViewerProxy::onMouseRelease(XGUI_ViewWindow*, QMouseEvent* theEvent) +void XGUI_ViewerProxy::onMouseRelease(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent) { - emit mouseRelease(theEvent); + emit mouseRelease(theWnd, theEvent); } -void XGUI_ViewerProxy::onMouseDoubleClick(XGUI_ViewWindow*, QMouseEvent* theEvent) +void XGUI_ViewerProxy::onMouseDoubleClick(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent) { - emit mouseDoubleClick(theEvent); + emit mouseDoubleClick(theWnd, theEvent); } -void XGUI_ViewerProxy::onMouseMove(XGUI_ViewWindow*, QMouseEvent* theEvent) +void XGUI_ViewerProxy::onMouseMove(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent) { - emit mouseMove(theEvent); + emit mouseMove(theWnd, theEvent); } -void XGUI_ViewerProxy::onKeyPress(XGUI_ViewWindow*, QKeyEvent* theEvent) +void XGUI_ViewerProxy::onKeyPress(AppElements_ViewWindow* theWnd, QKeyEvent* theEvent) { - emit keyPress(theEvent); + emit keyPress(theWnd, theEvent); } -void XGUI_ViewerProxy::onKeyRelease(XGUI_ViewWindow*, QKeyEvent* theEvent) +void XGUI_ViewerProxy::onKeyRelease(AppElements_ViewWindow* theWnd, QKeyEvent* theEvent) { - emit keyRelease(theEvent); + emit keyRelease(theWnd, theEvent); } +void XGUI_ViewerProxy::onViewTransformed(AppElements_ViewWindow::OperationType theType) +{ + emit viewTransformed((int) theType); +} + +#endif + + //*************************************** void XGUI_ViewerProxy::enableSelection(bool isEnabled) { - if (myWorkshop->isSalomeMode()) { - myWorkshop->salomeConnector()->viewer()->enableSelection(isEnabled); - } else { - myWorkshop->mainWindow()->viewer()->setSelectionEnabled(isEnabled); - } +#ifdef HAVE_SALOME + myWorkshop->salomeConnector()->viewer()->enableSelection(isEnabled); +#else + myWorkshop->mainWindow()->viewer()->setSelectionEnabled(isEnabled); +#endif } //*************************************** bool XGUI_ViewerProxy::isSelectionEnabled() const { - if (myWorkshop->isSalomeMode()) { - return myWorkshop->salomeConnector()->viewer()->isSelectionEnabled(); - } else { - return myWorkshop->mainWindow()->viewer()->isSelectionEnabled(); - } +#ifdef HAVE_SALOME + return myWorkshop->salomeConnector()->viewer()->isSelectionEnabled(); +#else + return myWorkshop->mainWindow()->viewer()->isSelectionEnabled(); +#endif } //*************************************** void XGUI_ViewerProxy::enableMultiselection(bool isEnable) { - if (myWorkshop->isSalomeMode()) { - myWorkshop->salomeConnector()->viewer()->enableMultiselection(isEnable); - } else { - myWorkshop->mainWindow()->viewer()->setMultiSelectionEnabled(isEnable); - } +#ifdef HAVE_SALOME + myWorkshop->salomeConnector()->viewer()->enableMultiselection(isEnable); +#else + myWorkshop->mainWindow()->viewer()->setMultiSelectionEnabled(isEnable); +#endif } //*************************************** bool XGUI_ViewerProxy::isMultiSelectionEnabled() const +{ +#ifdef HAVE_SALOME + return myWorkshop->salomeConnector()->viewer()->isMultiSelectionEnabled(); +#else + return myWorkshop->mainWindow()->viewer()->isMultiSelectionEnabled(); +#endif +} + +//*************************************** +bool XGUI_ViewerProxy::enableDrawMode(bool isEnabled) +{ +#ifdef HAVE_SALOME + return myWorkshop->salomeConnector()->viewer()->enableDrawMode(isEnabled); +#else + return myWorkshop->mainWindow()->viewer()->enableDrawMode(isEnabled); +#endif +} + +//*************************************** +void XGUI_ViewerProxy::addSelectionFilter(const Handle(SelectMgr_Filter)& theFilter) +{ + myWorkshop->displayer()->addSelectionFilter(theFilter); +} + +//*************************************** +void XGUI_ViewerProxy::removeSelectionFilter(const Handle(SelectMgr_Filter)& theFilter) +{ + myWorkshop->displayer()->removeSelectionFilter(theFilter); +} + +//*************************************** +bool XGUI_ViewerProxy::hasSelectionFilter(const Handle(SelectMgr_Filter)& theFilter) +{ + return myWorkshop->displayer()->hasSelectionFilter(theFilter); +} + +//*************************************** +void XGUI_ViewerProxy::clearSelectionFilters() +{ + myWorkshop->displayer()->removeFilters(); +} + +//*************************************** +void XGUI_ViewerProxy::update() +{ + myWorkshop->displayer()->updateViewer(); +} + +//*************************************** +bool XGUI_ViewerProxy::canDragByMouse() const { if (myWorkshop->isSalomeMode()) { - return myWorkshop->salomeConnector()->viewer()->isMultiSelectionEnabled(); + ModuleBase_IViewer* aViewer = myWorkshop->salomeConnector()->viewer(); + return aViewer->canDragByMouse(); } else { - return myWorkshop->mainWindow()->viewer()->isMultiSelectionEnabled(); + return true; } } + + +//*************************************** +//void XGUI_ViewerProxy::Zfitall() +//{ +//#ifdef HAVE_SALOME +// myWorkshop->salomeConnector()->viewer()->Zfitall(); +//#else +// AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer(); +// AppElements_ViewWindow* aView = aViewer->activeViewWindow(); +// if (aView) { +// Handle(V3d_View) aView3d = aView->v3dView(); +// aView3d->ZFitAll(); +// if (aView3d->Depth() < 0.1) +// aView3d->DepthFitAll(); +// } +//#endif +//} \ No newline at end of file