]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
*** empty log message ***
authorvsr <vsr@opencascade.com>
Wed, 11 Jul 2007 14:19:01 +0000 (14:19 +0000)
committervsr <vsr@opencascade.com>
Wed, 11 Jul 2007 14:19:01 +0000 (14:19 +0000)
src/LightApp/LightApp_Application.cxx
src/Qtx/Makefile.am
src/Qtx/QtxActionSet.cxx
src/Qtx/QtxMultiAction.cxx
src/Qtx/QtxMultiAction.h
src/Qtx/QtxSplash.cxx
src/Qtx/QtxSplash.h
src/Session/SALOME_Session_Server.cxx
src/Session/Session_ServerCheck.cxx

index d32f6da9bea18903102de0d5396041f5c139485a..92a7c232521fe640f134afe0698197e30bf4cf5b 100644 (file)
@@ -1667,7 +1667,7 @@ QWidget* LightApp_Application::createWindow( const int flag )
     PyConsole_Console* pyCons = new PyConsole_Console( desktop() );
     pyCons->setWindowTitle( tr( "PYTHON_CONSOLE" ) );
     wid = pyCons;
-    //    pyCons->connectPopupRequest( this, SLOT( onConnectPopupRequest( SUIT_PopupClient*, QContextMenuEvent* ) ) );
+    pyCons->connectPopupRequest( this, SLOT( onConnectPopupRequest( SUIT_PopupClient*, QContextMenuEvent* ) ) );
   }
 #endif
   else if ( flag == WT_LogWindow )
index d6b55351312d9edf24b0c47dc757429279b41c35..36c435bea25fa4d2261b9c3f4168cabfe087698b 100755 (executable)
@@ -49,6 +49,7 @@ salomeinclude_HEADERS=                \
        QtxLogoMgr.h            \
        QtxMainWindow.h         \
        QtxMap.h                \
+       QtxMultiAction.h        \
        QtxMRUAction.h          \
        QtxPagePrefMgr.h        \
        QtxPathDialog.h         \
@@ -100,6 +101,7 @@ dist_libqtx_la_SOURCES=             \
        QtxListAction.cxx       \
        QtxLogoMgr.cxx          \
        QtxMainWindow.cxx       \
+       QtxMultiAction.cxx      \
        QtxMRUAction.cxx        \
        QtxPagePrefMgr.cxx      \
        QtxPathDialog.cxx       \
@@ -145,6 +147,7 @@ MOC_FILES=                          \
        QtxListAction_moc.cxx           \
        QtxLogoMgr_moc.cxx              \
        QtxMainWindow_moc.cxx           \
+       QtxMultiAction_moc.cxx          \
        QtxMRUAction_moc.cxx            \
        QtxPagePrefMgr_moc.cxx          \
        QtxPathDialog_moc.cxx           \
index 7625022ecd39f63cbd1ee62de0e719869508b746..6f6ab940cca85943046bfecc23c29fadd1372ffa 100644 (file)
@@ -377,6 +377,11 @@ void QtxActionSet::updateAction( QWidget* w )
   }
 }
 
+/*!
+  \brief Check if the action itself should be invisible
+  (only child action are shown)
+  \return \c true if the action itself should be visible
+*/
 bool QtxActionSet::isEmptyAction() const
 {
   return true;
index c0f00bb4aa600e8be01e2f26c3eb1504943b5ff2..30b0c55509e9b10e76d9d13d7e362f890eba321f 100644 (file)
@@ -16,6 +16,9 @@
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+// File:      QtxMultiAction.cxx
+// Author:    Sergey TELKOV
+//
 
 #include "QtxMultiAction.h"
 
 #include <QApplication>
 #include <QStyleOptionButton>
 
+/*!
+  \class QtxMultiAction::Filter
+  \brief Waches for the buttons in the popup menu 
+  to update the tool buttons state.
+  \internal
+*/
+
+class QtxMultiAction::Filter : public QObject
+{
+public:
+  //! \brief Constructor
+  Filter( QObject* parent ) : QObject( parent ) {}
+  //! \brief Destructor
+  ~Filter() {}
+  //! \brief Process events from the child tool buttons
+  bool eventFilter( QObject* o, QEvent* e )
+  {
+    if ( e->type() == QEvent::Leave ) {
+      QToolButton* tb = qobject_cast<QToolButton*>( o );
+      if ( tb )
+       tb->setDown( false );
+    }
+    return QObject::eventFilter( o, e );
+  }
+};
+
+/*!
+  \class QtxMultiAction::Button
+  \brief Custom button to be used in the toolbar.
+  \internal
+*/
+
 class QtxMultiAction::Button : public QToolButton
 {
 public:
+  //! \brief Constructor
   Button( QWidget* parent = 0 ) : QToolButton( parent ) {}
+  //! \brief Destructor
   ~Button() {};
 
 protected:
+  //! \brief Paint the button
   virtual void paintEvent( QPaintEvent* e )
   {
     QToolButton::paintEvent( e );
@@ -56,11 +94,26 @@ protected:
 };
 
 /*!
-  Constructor
+  \class QtxMultiAction
+  \brief The class QtxMultiAction implements modifiable action.
+
+  The QtxMultiAction class provides a possibility to assign a set of actions 
+  (insertAction() function). The action can be used in the toolbar (and even
+  in the menu) to show drop-down menu with the list of the assigned actions.
+
+  Initially the first action from the list becomes current and it is activated
+  when the tool button is clicked by the user. If user presses and holds the mouse
+  button at the tool button, it shows the popup menu with all the assigned actions.
+  When the user selects any action from the popup menu, it becames current.
+*/
+
+/*!
+  \brief Constructor.
+  \param parent parent object
 */
 QtxMultiAction::QtxMultiAction( QObject* parent )
 : QtxActionSet( parent ),
-myCurrent( 0 )
+  myCurrent( 0 )
 {
   setVisible( true );
   setMenu( new QMenu( 0 ) );
@@ -68,9 +121,14 @@ myCurrent( 0 )
   connect( this, SIGNAL( triggered( QAction* ) ), this, SLOT( onTriggered( QAction* ) ) );
 }
 
+/*!
+  \brief Constructor.
+  \param txt action menu text
+  \param parent parent object
+*/
 QtxMultiAction::QtxMultiAction( const QString& txt, QObject* parent )
 : QtxActionSet( parent ),
-myCurrent( 0 )
+  myCurrent( 0 )
 {
   setText( txt );
   setVisible( true );
@@ -79,9 +137,15 @@ myCurrent( 0 )
   connect( this, SIGNAL( triggered( QAction* ) ), this, SLOT( onTriggered( QAction* ) ) );
 }
 
+/*!
+  \brief Constructor.
+  \param ico action menu icon
+  \param txt action menu text
+  \param parent parent object
+*/
 QtxMultiAction::QtxMultiAction( const QIcon& ico, const QString& txt, QObject* parent )
 : QtxActionSet( parent ),
-myCurrent( 0 )
+  myCurrent( 0 )
 {
   setIcon( ico );
   setText( txt );
@@ -91,16 +155,29 @@ myCurrent( 0 )
   connect( this, SIGNAL( triggered( QAction* ) ), this, SLOT( onTriggered( QAction* ) ) );
 }
 
+/*!
+  \brief Destructor
+*/
 QtxMultiAction::~QtxMultiAction()
 {
 }
 
-void QtxMultiAction::onClicked( bool )
+/*!
+  \brief Called when the user activates the current action 
+  (for example by clicking the tool button).
+  \param on (not used)
+*/
+void QtxMultiAction::onClicked( bool /*on*/ )
 {
   if ( myCurrent )
     myCurrent->activate( QAction::Trigger );
 }
 
+/*!
+  \brief Called when user activates any action from the
+  dropdown menu.
+  \param a action being activated
+*/
 void QtxMultiAction::onTriggered( QAction* a )
 {
   if ( !a )
@@ -121,6 +198,9 @@ void QtxMultiAction::onTriggered( QAction* a )
   }
 }
 
+/*!
+  \brief Update action.
+*/
 void QtxMultiAction::updateAction()
 {
   QtxActionSet::updateAction();
@@ -130,6 +210,10 @@ void QtxMultiAction::updateAction()
     updateButton( ::qobject_cast<QToolButton*>( *it ) );
 }
 
+/*!
+  \brief Update child (popup menu) action.
+  \param w widget menu widget
+*/
 void QtxMultiAction::updateAction( QWidget* w )
 {
   if ( !w )
@@ -147,11 +231,21 @@ void QtxMultiAction::updateAction( QWidget* w )
   }
 }
 
+/*!
+  \brief Check if the action itself should be invisible
+  (only child action are shown)
+  \return \c true if the action itself should be visible
+*/
 bool QtxMultiAction::isEmptyAction() const
 {
   return false;
 }
 
+/*!
+  \brief Create widget to be displayed in the toolbar.
+  \param parent parent widget (should be toolbar)
+  \return toolbar button
+*/
 QWidget* QtxMultiAction::createWidget( QWidget* parent )
 {
   QToolBar* tb = ::qobject_cast<QToolBar*>( parent );
@@ -173,12 +267,20 @@ QWidget* QtxMultiAction::createWidget( QWidget* parent )
   return w;
 }
 
+/*!
+  \brief Called when the child action is added to this action.
+  \param a child action being added
+*/
 void QtxMultiAction::actionAdded( QAction* a )
 {
   if ( !myCurrent )
     myCurrent = a;
 }
 
+/*!
+  \brief Called when the child action is removed from this action.
+  \param a child action being removed
+*/
 void QtxMultiAction::actionRemoved( QAction* a )
 {
   if ( myCurrent != a )
@@ -189,6 +291,10 @@ void QtxMultiAction::actionRemoved( QAction* a )
   updateAction();
 }
 
+/*!
+  \brief Update toolbar button.
+  \param btn toolbar button
+*/
 void QtxMultiAction::updateButton( QToolButton* btn )
 {
   if ( !btn )
@@ -212,7 +318,7 @@ void QtxMultiAction::updateButton( QToolButton* btn )
   QVBoxLayout* vbox = new QVBoxLayout( pm );
   vbox->setMargin( 1 );
   vbox->setSpacing( 0 );
-
+  Filter* filter = new Filter( vbox );
   QList<QAction*> actList = actions();
   for ( QList<QAction*>::iterator itr = actList.begin(); itr != actList.end(); ++itr )
   {
@@ -223,12 +329,7 @@ void QtxMultiAction::updateButton( QToolButton* btn )
     b->setIconSize( btn->iconSize() );
     b->setToolButtonStyle( btn->toolButtonStyle() );
     b->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
+    b->installEventFilter( filter );
     vbox->addWidget( b );
   }
-
-/*
-  QList<QAction*> actList = actions();
-  for ( QList<QAction*>::iterator itr = actList.begin(); itr != actList.end(); ++itr )
-    pm->addAction( *itr );
-*/
 }
index e778efd1782ab5aaedfbcb52089a0114f687a92a..fbf239836860bce1769e5e00f5c8ab22dfd96824 100644 (file)
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+// File:      QtxMultiAction.h
+// Author:    Sergey TELKOV
+//
+
 #ifndef QTXMULTIACTION_H
 #define QTXMULTIACTION_H
 
@@ -28,6 +32,7 @@ class QTX_EXPORT QtxMultiAction : public QtxActionSet
   Q_OBJECT
 
   class Button;
+  class Filter;
 
 public:
   QtxMultiAction( QObject* parent = 0 );
@@ -56,4 +61,4 @@ private:
   QAction*         myCurrent;
 };
 
-#endif
+#endif // QTXMULTIACTION_H
index 1de1ba6a0f681c0c42c0b49623ce0887739372c1..c954e9b0c5e27e85d59717a1a319e07883f619b9 100644 (file)
@@ -41,7 +41,7 @@ public:
     \param msg progress message
     \param progress current progress (for example, in %)
   */
-  ProgressEvent( const QString& msg, const int progress = 0 )
+  ProgressEvent( const QString& msg, const int progress )
     : QEvent( (QEvent::Type)id() ),
       myMessage( msg ),
       myProgress( progress )
@@ -143,6 +143,11 @@ private:
 
   The displayed message text includes constant info and status message. The constant info
   is set by setConstantInfo() method and status message is set by setMessage().
+
+  Sometimes it is useful to splay an error message above the splash screen window.
+  For example, it can be necessary if an error occurs when loading the application.
+  Method setError() can be used to show the error message and set the error code which
+  can be then retrieved with the error() function.
 */
 
 //! The only one instance of splash screen
@@ -203,8 +208,9 @@ QtxSplash* QtxSplash::splash( const QPixmap& px )
   \brief Send the status message and (optionally) current progress 
   to the splash screen.
 
-  This function can be used, for example, from an external thread
-  which checks the application loading progress.
+  If the second parameter is less than 0 (default) than it is ignored
+  and only the status message is changed. If you want to modify progress
+  also, pass positive value to the \a progress parameter explicitly.
 
   \param msg progress status message
   \param progress current progress
@@ -223,8 +229,9 @@ void QtxSplash::setStatus( const QString& msg, const int progress )
   \param error error message
   \param title message box title
   \param code error code
+  \sa error()
 */
-void QtxSplash::error( const QString& error, const QString& title, const int code )
+void QtxSplash::setError( const QString& error, const QString& title, const int code )
 {
   if ( mySplash ) {
     mySplash->setError( code );
@@ -662,6 +669,7 @@ QString QtxSplash::message() const
   If no error code has been set, 0 is returned.
 
   \return last error code
+  \sa setError()
 */
 int QtxSplash::error() const
 {
@@ -799,7 +807,8 @@ void QtxSplash::customEvent( QEvent* ce )
   if ( ce->type() == ProgressEvent::id() ) {
     ProgressEvent* pe = (ProgressEvent*)ce;
     pe->message().isEmpty() ? clear() : setMessage( pe->message() );
-    setProgress( pe->progress() );
+    if ( pe->progress() >= 0 )
+      setProgress( pe->progress() );
     QApplication::instance()->processEvents();
   }
 }
index d59c38c68f8e491f023de048a643db44101163c2..280851166f7415c5cb30a9b4be1caa6f69f52e06 100644 (file)
@@ -61,8 +61,8 @@ public:
   
   static QtxSplash* splash( const QPixmap& = QPixmap() );
   
-  static void       setStatus( const QString&, const int = 0 );
-  static void       error( const QString&, const QString& = QString::null, const int = -1 );
+  static void       setStatus( const QString&, const int = -1 );
+  static void       setError( const QString&, const QString& = QString::null, const int = -1 );
   
   void              setPixmap( const QPixmap& );
   QPixmap           pixmap() const;
index 78caf6a059f9f695284fe6f931f8a13d0df76a53..1b4668852f18308dd40c31af8a96e3f73d5c390c 100755 (executable)
@@ -475,7 +475,7 @@ int main( int argc, char **argv )
        QString msg = sc.currentMessage();
        QString err = sc.error();
        if ( !err.isEmpty() ) {
-         QtxSplash::error( err );
+         QtxSplash::setError( err );
          QApplication::instance()->processEvents();
          result = -1;
          break;
index d037a5b769eba182246a066d12996cd65b5f55fa..27535f84feb0a4463a239b80d10f46218bf00fbd 100644 (file)
@@ -158,6 +158,8 @@ Session_ServerCheck::Session_ServerCheck( QMutex* mutex, QWaitCondition* wc )
 */
 Session_ServerCheck::~Session_ServerCheck()
 {
+  terminate();
+  while( isRunning() );
 }
 
 /*!