X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FNewGeom%2FNewGeom_SalomeViewer.cpp;h=86e2d8f1b2e5b61d42ce62c760279ed70a5676a8;hb=68420e410a9846ec7dcb2f4645030455bc374288;hp=8fe9bd862ce0662f02e3b90a5385616ca6f2b78d;hpb=d090d2a84b306232c2bfc888594339f0042c9040;p=modules%2Fshaper.git diff --git a/src/NewGeom/NewGeom_SalomeViewer.cpp b/src/NewGeom/NewGeom_SalomeViewer.cpp index 8fe9bd862..86e2d8f1b 100644 --- a/src/NewGeom/NewGeom_SalomeViewer.cpp +++ b/src/NewGeom/NewGeom_SalomeViewer.cpp @@ -12,15 +12,33 @@ #include #include +NewGeom_SalomeView::NewGeom_SalomeView(OCCViewer_Viewer* theViewer) +: ModuleBase_IViewWindow(), myCurrentView(0) +{ + myViewer = theViewer; +} + 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(); + Handle(V3d_View) aView; + if (myCurrentView) { + OCCViewer_ViewWindow* aWnd = static_cast(myCurrentView); + aView = aWnd->getViewPort()->getView(); + } return aView; } +QWidget* NewGeom_SalomeView::viewPort() const +{ + QWidget* aViewPort = 0; + if (myCurrentView) { + OCCViewer_ViewWindow* aWnd = static_cast(myCurrentView); + aViewPort = aWnd->getViewPort(); + } + return aViewPort; +} + //********************************************** //********************************************** //********************************************** @@ -52,16 +70,21 @@ Handle(AIS_InteractiveContext) NewGeom_SalomeViewer::AISContext() const //********************************************** Handle(V3d_Viewer) NewGeom_SalomeViewer::v3dViewer() const { - return mySelector->viewer()->getViewer3d(); + if (mySelector) + return mySelector->viewer()->getViewer3d(); + return Handle(V3d_Viewer)(); } //********************************************** Handle(V3d_View) NewGeom_SalomeViewer::activeView() const { - OCCViewer_Viewer* aViewer = mySelector->viewer(); - SUIT_ViewManager* aMgr = aViewer->getViewManager(); - OCCViewer_ViewWindow* aWnd = static_cast(aMgr->getActiveView()); - return aWnd->getViewPort()->getView(); + if (mySelector) { + OCCViewer_Viewer* aViewer = mySelector->viewer(); + SUIT_ViewManager* aMgr = aViewer->getViewManager(); + OCCViewer_ViewWindow* aWnd = static_cast(aMgr->getActiveView()); + return aWnd->getViewPort()->getView(); + } + return Handle(V3d_View)(); } //********************************************** @@ -122,14 +145,16 @@ void NewGeom_SalomeViewer::onSelectionChanged() } //********************************************** -void NewGeom_SalomeViewer::onMousePress(SUIT_ViewWindow*, QMouseEvent* theEvent) +void NewGeom_SalomeViewer::onMousePress(SUIT_ViewWindow* theView, QMouseEvent* theEvent) { + myView->setCurrentView(theView); emit mousePress(myView, theEvent); } //********************************************** -void NewGeom_SalomeViewer::onMouseRelease(SUIT_ViewWindow*, QMouseEvent* theEvent) +void NewGeom_SalomeViewer::onMouseRelease(SUIT_ViewWindow* theView, QMouseEvent* theEvent) { + myView->setCurrentView(theView); emit mouseRelease(myView, theEvent); if (myIsSelectionChanged) { emit selectionChanged(); @@ -138,25 +163,54 @@ void NewGeom_SalomeViewer::onMouseRelease(SUIT_ViewWindow*, QMouseEvent* theEven } //********************************************** -void NewGeom_SalomeViewer::onMouseDoubleClick(SUIT_ViewWindow*, QMouseEvent* theEvent) +void NewGeom_SalomeViewer::onMouseDoubleClick(SUIT_ViewWindow* theView, QMouseEvent* theEvent) { + myView->setCurrentView(theView); emit mouseDoubleClick(myView, theEvent); } //********************************************** -void NewGeom_SalomeViewer::onMouseMove(SUIT_ViewWindow*, QMouseEvent* theEvent) +void NewGeom_SalomeViewer::onMouseMove(SUIT_ViewWindow* theView, QMouseEvent* theEvent) { + myView->setCurrentView(theView); + OCCViewer_ViewWindow* aViewWnd = dynamic_cast(theView); + Handle(AIS_InteractiveContext) aContext = AISContext(); + if (aContext->HasDetected()) // Set focus to provide key events in the view + aViewWnd->getViewPort()->setFocus(Qt::MouseFocusReason); emit mouseMove(myView, theEvent); } //********************************************** -void NewGeom_SalomeViewer::onKeyPress(SUIT_ViewWindow*, QKeyEvent* theEvent) +bool NewGeom_SalomeViewer::canDragByMouse() const +{ + OCCViewer_Viewer* aViewer = mySelector->viewer(); + SUIT_ViewWindow* aWnd = aViewer->getViewManager()->getActiveView(); + OCCViewer_ViewWindow* aViewWnd = dynamic_cast(aWnd); + if (aViewWnd) { + return (aViewWnd->interactionStyle() == 0); + } + return true; +} + + +//********************************************** +void NewGeom_SalomeViewer::onKeyPress(SUIT_ViewWindow* theView, QKeyEvent* theEvent) { + OCCViewer_ViewWindow* aViewWnd = dynamic_cast(theView); + Handle(AIS_InteractiveContext) aContext = AISContext(); + Handle(V3d_View) aView = aViewWnd->getViewPort()->getView(); + + bool noModifiers = (theEvent->modifiers() == Qt::NoModifier); + if ((theEvent->key() == Qt::Key_N) && noModifiers) { + aContext->HilightNextDetected(aView); + } else if ((theEvent->key() == Qt::Key_P) && noModifiers) { + aContext->HilightPreviousDetected(aView); + } emit keyPress(myView, theEvent); } //********************************************** -void NewGeom_SalomeViewer::onKeyRelease(SUIT_ViewWindow*, QKeyEvent* theEvent) +void NewGeom_SalomeViewer::onKeyRelease(SUIT_ViewWindow* theView, QKeyEvent* theEvent) { emit keyRelease(myView, theEvent); } @@ -174,8 +228,9 @@ void NewGeom_SalomeViewer::onDeleteView(SUIT_ViewWindow*) } //********************************************** -void NewGeom_SalomeViewer::onViewCreated(SUIT_ViewWindow*) +void NewGeom_SalomeViewer::onViewCreated(SUIT_ViewWindow* theView) { + myView->setCurrentView(theView); emit viewCreated(myView); } @@ -188,45 +243,54 @@ void NewGeom_SalomeViewer::onActivated(SUIT_ViewWindow*) //********************************************** void NewGeom_SalomeViewer::enableSelection(bool isEnabled) { - mySelector->viewer()->enableSelection(isEnabled); - // there is a fix for a black-colored window - // the viewer rubber band is valid if the values delta is less than 1 - // TODO: remove this row after moving to SALOME 7.5 - mySelector->viewer()->setInteractionStyle(isEnabled ? SUIT_ViewModel::STANDARD - : SUIT_ViewModel::KEY_FREE); + if (mySelector) + mySelector->viewer()->enableSelection(isEnabled); + // The enableSelection() in SALOME 7.5 cause of forced Viewer update(we have blinking) + // After this is corrected, the first row should be recommented, the last - removed + //mySelector->viewer()->setInteractionStyle(isEnabled ? SUIT_ViewModel::STANDARD + // : SUIT_ViewModel::KEY_FREE); } //********************************************** bool NewGeom_SalomeViewer::isSelectionEnabled() const { - return mySelector->viewer()->isSelectionEnabled(); + if (mySelector) + return mySelector->viewer()->isSelectionEnabled(); } //********************************************** void NewGeom_SalomeViewer::enableMultiselection(bool isEnable) { - mySelector->viewer()->enableMultiselection(isEnable); + if (mySelector) + mySelector->viewer()->enableMultiselection(isEnable); } //********************************************** bool NewGeom_SalomeViewer::isMultiSelectionEnabled() const { - return mySelector->viewer()->isMultiSelectionEnabled(); + if (mySelector) + return mySelector->viewer()->isMultiSelectionEnabled(); + return false; } //********************************************** void NewGeom_SalomeViewer::fitAll() { - SUIT_ViewManager* aMgr = mySelector->viewer()->getViewManager(); - OCCViewer_ViewFrame* aVFrame = dynamic_cast(aMgr->getActiveView()); - if (aVFrame) { - aVFrame->onFitAll(); + if (mySelector) { + SUIT_ViewManager* aMgr = mySelector->viewer()->getViewManager(); + OCCViewer_ViewFrame* aVFrame = dynamic_cast(aMgr->getActiveView()); + if (aVFrame) { + aVFrame->onFitAll(); + } } } //********************************************** void NewGeom_SalomeViewer::setViewProjection(double theX, double theY, double theZ) { + if (!mySelector) + return; + SUIT_ViewManager* aMgr = mySelector->viewer()->getViewManager(); OCCViewer_ViewFrame* aVFrame = dynamic_cast(aMgr->getActiveView()); if (aVFrame) {