X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSALOME_PYQT%2FSalomePyQt%2FSalomePyQt.cxx;h=d69a60b1b2284c06db0b87c5db6c99496327c8f8;hb=1bd04fc2bea6dba898b81b46b2d82056c36598ca;hp=04074001c49a9dfe05d0d07a5d7c38b8f74576c1;hpb=567efd9864811a8eb7de02faa4e3f76f29f66d9c;p=modules%2Fgui.git diff --git a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx index 04074001c..d69a60b1b 100644 --- a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx +++ b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx @@ -42,6 +42,9 @@ #include "OCCViewer_ViewWindow.h" #include "OCCViewer_ViewFrame.h" #endif // DISABLE_OCCVIEWER +#ifndef DISABLE_VTKVIEWER +#include "SVTK_ViewWindow.h" +#endif // DISABLE_VTKVIEWER #ifndef DISABLE_PLOT2DVIEWER #include "Plot2d_ViewManager.h" #include "Plot2d_ViewWindow.h" @@ -747,6 +750,93 @@ void SalomePyQt::putInfo( const QString& msg, const int sec ) ProcessVoidEvent( new TPutInfoEvent( msg, sec ) ); } +/*! + \fn int SalomePyQt::showNotification( const QString& msg, const QString& title, const int sec ); + \brief Show notification in the application's desktop window. + + Optional third delay parameter (\a sec) can be used to specify + time of the notification diplaying in seconds. If this parameter is less + or equal to zero, the permanent notification will be put. + + Notification can be forcibly hidden via hideNotification() method. + + \param msg message text + \param title title text + \param sec notification displaying time in seconds + \return unique ID of the notification (can be used to hide notification) + \sa hideNotification() +*/ + +class TShowNotifyEvent: public SALOME_Event +{ + QString myMsg; + QString myTitle; + int mySecs; + +public: + typedef int TResult; + TResult myResult; + +public: + TShowNotifyEvent( const QString& msg, const QString& title, const int sec = -1 ) : myMsg( msg ), myTitle( title), mySecs( sec ), myResult( -1 ) {} + virtual void Execute() + { + if ( LightApp_Application* anApp = getApplication() ) { + myResult = anApp->showNotification( myMsg, myTitle, mySecs * 1000 ); + } + } +}; + +int SalomePyQt::showNotification( const QString& msg, const QString& title, const int sec ) +{ + return ProcessEvent( new TShowNotifyEvent( msg, title, sec ) ); +} + +/*! + \fn void SalomePyQt::hideNotification( const QString& msg ); + \brief Remove notification with given message text from the application's desktop. + + \param msg message text + \sa showNotification() +*/ + +/*! + \fn void SalomePyQt::hideNotification( const int id ); + \brief Remove notification with given \a id from the application's desktop. + + \param id notification id + \sa showNotification() +*/ + +class THideNotifyEvent: public SALOME_Event +{ + int myId; + QString myMsg; + +public: + THideNotifyEvent( const QString& msg ) : myId( -1 ), myMsg( msg ) {} + THideNotifyEvent( const int id ) : myId( id ) {} + virtual void Execute() + { + if ( LightApp_Application* anApp = getApplication() ) { + if ( myId >= 0 ) + anApp->hideNotification( myId ); + else + anApp->hideNotification( myMsg ); + } + } +}; + +void SalomePyQt::hideNotification( const QString& msg ) +{ + ProcessVoidEvent( new THideNotifyEvent( msg ) ); +} + +void SalomePyQt::hideNotification( const int id ) +{ + ProcessVoidEvent( new THideNotifyEvent( id ) ); +} + /*! \fn const QString SalomePyQt::getActiveComponent(); \brief Get the currently active module name (for the current study). @@ -3004,6 +3094,85 @@ bool SalomePyQt::setViewSize( const int w, const int h, const int id ) return ProcessEvent( new TSetViewSize( w, h, id ) ); } +/*! + \fn bool SalomePyQt::setViewRotationPoint( const double x, const double y, const double z, const int id ); + \brief Set view rotation point + \param x coordinate X view rotation point + \param y coordinate Y view rotation point + \param z coordinate Z view rotation point + \param id window identifier + \return \c true if operation is completed successfully and \c false otherwise +*/ + +class TSetViewRotationPoint: public SALOME_Event +{ +public: + typedef bool TResult; + TResult myResult; + double myX; + double myY; + double myZ; + int myWndId; + TSetViewRotationPoint( const double x, const double y, const double z, const int id ) + : myResult( false ), + myX( x ), + myY( y ), + myZ( z ), + myWndId( id ) {} + virtual void Execute() + { + SUIT_ViewWindow* wnd = 0; + if ( !myWndId ) { + if ( LightApp_Application* anApp = getApplication() ) { + SUIT_ViewManager* vm = anApp->activeViewManager(); + if ( vm ) + wnd = vm->getActiveView(); + } + } + else { + wnd = dynamic_cast( getWnd( myWndId ) ); + } + if ( wnd ) { + SUIT_ViewManager* viewMgr = wnd->getViewManager(); + if ( viewMgr ) { + QString type = viewMgr->getType(); + if ( type == "OCCViewer") { +#ifndef DISABLE_OCCVIEWER + // specific processing for OCC viewer: + // OCC view can embed up to 4 sub-views, split according to the specified layout; + // - if there is only one sub-view active; its rotation point will be changed; + // - if there are several sub-views, rotaion points of each of them will be changed. + OCCViewer_ViewWindow* occView = qobject_cast( wnd ); + if ( occView ) { + for ( int i = OCCViewer_ViewFrame::BOTTOM_RIGHT; i <= OCCViewer_ViewFrame::TOP_RIGHT; i++ ) { + if ( occView && occView->getView( i ) ) { + occView->getView( i )->activateSetRotationSelected( myX, myY, myZ ); + myResult = true; + } + } + } +#endif // DISABLE_OCCVIEWER + } + else if ( type == "VTKViewer") { +#ifndef DISABLE_VTKVIEWER + SVTK_ViewWindow* vtkView = qobject_cast( wnd ); + if ( vtkView ) + { + double aCenter[3] = { myX, myY, myZ }; + vtkView->activateSetRotationSelected( (void*)aCenter ); + myResult = true; + } +#endif // DISABLE_VTKVIEWER + } + } + } + } +}; +bool SalomePyQt::setViewRotationPoint( const double x, const double y, const double z, const int id ) +{ + return ProcessEvent( new TSetViewRotationPoint( x, y, z, id ) ); +} + /*! \fn QString SalomePyQt::getViewTitle( const int id ); \brief Get view caption