X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Viewer.cpp;h=23560ca86031d369571e2dcf5d864eb5a43d675e;hb=d86c77d1c6210bbe04fbc3e5b00f9e212e1ec930;hp=881b91f8723f846346cda4dbc7b62535a186059f;hpb=24fd5aa4e000a03e484c5d4c544e5e08b08a747f;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Viewer.cpp b/src/XGUI/XGUI_Viewer.cpp index 881b91f87..23560ca86 100644 --- a/src/XGUI/XGUI_Viewer.cpp +++ b/src/XGUI/XGUI_Viewer.cpp @@ -5,6 +5,7 @@ #include #include +#include #include @@ -17,6 +18,11 @@ #include #include #include +#include +#include +#include + +#include #ifdef WIN32 #include @@ -61,17 +67,17 @@ Handle(V3d_Viewer) CreateViewer(const Standard_ExtString name, const Standard_CS */ QString XGUI_Viewer::backgroundData(QStringList& gradList, QIntList& idList, QIntList& txtList) { - gradList << tr("GT_HORIZONTALGRADIENT") << tr("GT_VERTICALGRADIENT") - << tr("GT_FIRSTDIAGONALGRADIENT") << tr("GT_SECONDDIAGONALGRADIENT") - << tr("GT_FIRSTCORNERGRADIENT") << tr("GT_SECONDCORNERGRADIENT") - << tr("GT_THIRDCORNERGRADIENT") << tr("GT_FORTHCORNERGRADIENT"); + gradList << tr("Horizontal gradient") << tr("Vertical gradient") + << tr("First diagonal gradient") << tr("Second diagonal gradient") + << tr("First corner gradient") << tr("Second corner gradient") + << tr("Third corner gradient") << tr("Fourth corner gradient"); idList << XGUI::HorizontalGradient << XGUI::VerticalGradient << XGUI::Diagonal1Gradient << XGUI::Diagonal2Gradient << XGUI::Corner1Gradient << XGUI::Corner2Gradient << XGUI::Corner3Gradient << XGUI::Corner4Gradient; #ifdef OCC_ENABLE_TEXTURED_BACKGROUND txtList << XGUI::CenterTexture << XGUI::TileTexture << XGUI::StretchTexture; #endif - return tr("BG_IMAGE_FILES"); + return tr("Image files (*.bmp *.gif *.pix *.xwd *.rgb *.rs)"); } XGUI_Viewer::XGUI_Viewer(XGUI_MainWindow* theParent, bool DisplayTrihedron) @@ -145,6 +151,10 @@ XGUI_Viewer::XGUI_Viewer(XGUI_MainWindow* theParent, bool DisplayTrihedron) } // set zooming style to standard //myZoomingStyle = 0; + + QMdiArea* aMDI = myMainWindow->mdiArea(); + connect(aMDI, SIGNAL(subWindowActivated(QMdiSubWindow*)), this, SLOT(onWindowActivated(QMdiSubWindow*))); + } XGUI_Viewer::~XGUI_Viewer(void) @@ -180,6 +190,37 @@ QMdiSubWindow* XGUI_Viewer::createView(V3d_TypeOfView theType) return aWnd; } +XGUI_ViewWindow* XGUI_Viewer::activeViewWindow() const +{ + return dynamic_cast(myActiveView->widget()); +} + +void XGUI_Viewer::getSelectedObjects(AIS_ListOfInteractive& theList) +{ + theList.Clear(); + for (myAISContext->InitSelected(); myAISContext->MoreSelected(); myAISContext->NextSelected()) + theList.Append(myAISContext->SelectedInteractive()); +} + +void XGUI_Viewer::getSelectedShapes(NCollection_List& theList) +{ + Handle(AIS_InteractiveContext) ic = AISContext(); + + for (ic->InitSelected(); ic->MoreSelected(); ic->NextSelected()) { + TopoDS_Shape aShape = ic->SelectedShape(); + if (!aShape.IsNull()) + theList.Append(aShape); + } +} + +void XGUI_Viewer::setObjectsSelected(const AIS_ListOfInteractive& theList) +{ + AIS_ListIteratorOfListOfInteractive aIt; + for (aIt.Initialize(theList); aIt.More(); aIt.Next()) + myAISContext->AddOrRemoveSelected(aIt.Value(), false); + myAISContext->UpdateCurrentViewer(); +} + /*! Sets hot button *\param theOper - hot operation *\param theState - adding state to state map operations. @@ -206,6 +247,17 @@ void XGUI_Viewer::getHotButton(XGUI::InteractionStyle theInteractionStyle, theButton = myButtonMap[theInteractionStyle][theOper]; } +void XGUI_Viewer::setViewProjection(double theX, double theY, double theZ) +{ + XGUI_ViewWindow* aWindow = dynamic_cast(myActiveView->widget()); + if (aWindow) { + Handle(V3d_View) aView3d = aWindow->viewPort()->getView(); + if ( !aView3d.IsNull() ) + aView3d->SetProj(theX, theY, theZ); + aWindow->viewPort()->fitAll(); + } +} + /*! Changes visibility of trihedron to opposite */ @@ -227,7 +279,7 @@ bool XGUI_Viewer::isTrihedronVisible() const \param on - new state */ -void XGUI_Viewer::setTrihedronShown(const bool on) +void XGUI_Viewer::setTrihedronShown(bool on) { if (myTrihedron.IsNull()) return; @@ -324,7 +376,7 @@ bool XGUI_Viewer::computeTrihedronSize(double& theNewSize, double& theSize) if (aMaxSide < Precision::Confusion()) return false; - static float EPS = 5.0E-3; + static float EPS = (float)5.0E-3; theSize = trihedron()->Size(); //theNewSize = aMaxSide*aSizeInPercents / 100.0; @@ -401,8 +453,14 @@ void XGUI_Viewer::addView(QMdiSubWindow* theView) connect(aWindow, SIGNAL(keyReleased(XGUI_ViewWindow*, QKeyEvent*)), this, SIGNAL(keyRelease(XGUI_ViewWindow*, QKeyEvent*))); - connect(aWindow, SIGNAL(contextMenuRequested( QContextMenuEvent* )), - this, SLOT (onContextMenuRequested( QContextMenuEvent* ))); +// connect(aWindow, SIGNAL(contextMenuRequested( QContextMenuEvent* )), +// this, SLOT (onContextMenuRequested( QContextMenuEvent* ))); + + connect(aWindow, SIGNAL(mouseMoving(XGUI_ViewWindow*, QMouseEvent*)), + this, SLOT(onMouseMove(XGUI_ViewWindow*, QMouseEvent*))); + + connect(aWindow, SIGNAL(mouseReleased(XGUI_ViewWindow*, QMouseEvent*)), + this, SLOT(onMouseReleased(XGUI_ViewWindow*, QMouseEvent*))); myViews.append(theView); } @@ -412,5 +470,54 @@ void XGUI_Viewer::addView(QMdiSubWindow* theView) */ void XGUI_Viewer::onWindowActivated(QMdiSubWindow* view) { + if (view && (view != myActiveView) && (!view->isMinimized())) { myActiveView = view; + ((XGUI_ViewWindow*)myActiveView->widget())->windowActivated(); + QList::iterator aIt; + for (aIt = myViews.begin(); aIt != myViews.end(); ++aIt) { + if ((*aIt) != myActiveView) { + ((XGUI_ViewWindow*)(*aIt)->widget())->windowDeactivated(); + } + } + } +} + + +void XGUI_Viewer::onWindowMinimized(QMdiSubWindow* theWnd) +{ + if (myActiveView == theWnd) { + myActiveView = 0; + QList::iterator aIt; + for (aIt = myViews.begin(); aIt != myViews.end(); ++aIt) { + if (!(*aIt)->widget()->isMinimized()) { + (*aIt)->raise(); + onWindowActivated(*aIt); + break; + } + } + } +} + +/*! + SLOT: called on mouse move, processes hilighting +*/ +void XGUI_Viewer::onMouseMove(XGUI_ViewWindow* theWindow, QMouseEvent* theEvent) +{ + XGUI_ViewPort* aViewPort = theWindow->viewPort(); + Handle(V3d_View) aView3d = aViewPort->getView(); + + if ( !aView3d.IsNull() ) { + myAISContext->MoveTo(theEvent->x(), theEvent->y(), aView3d); + mouseMoved(theEvent->pos()); + } +} + +/*! + SLOT: called on mouse button release, finishes selection +*/ +void XGUI_Viewer::onMouseReleased(XGUI_ViewWindow* theWindow, QMouseEvent* theEvent) +{ + myAISContext->Select(); + + emit mouseReleased(theEvent->pos()); }