]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Improovement of messages in status bar for module.
authorstv <stv@opencascade.com>
Thu, 31 Aug 2006 13:38:38 +0000 (13:38 +0000)
committerstv <stv@opencascade.com>
Thu, 31 Aug 2006 13:38:38 +0000 (13:38 +0000)
src/CAM/CAM_Module.cxx
src/CAM/CAM_Module.h
src/SUIT/SUIT_Application.cxx
src/SUIT/SUIT_Application.h

index 9b37b334795b8786ddfe0982a41c59ea0199193e..5e08436f6671ea4ea7e3f4acc7d386ecc9f9b4b1 100755 (executable)
@@ -87,10 +87,13 @@ CAM_Module::~CAM_Module()
 void CAM_Module::initialize( CAM_Application* app )
 {
   myApp = app;
-  if (myApp) {
+  if ( myApp )
+  {
     SUIT_Session* aSession = SUIT_Session::session();
-    connect(aSession, SIGNAL( applicationClosed( SUIT_Application* ) ),
-            this, SLOT( onApplicationClosed( SUIT_Application* ) ));
+    connect( aSession, SIGNAL( applicationClosed( SUIT_Application* ) ),
+             this, SLOT( onApplicationClosed( SUIT_Application* ) ) );
+
+    connect( myApp, SIGNAL( infoChanged( QString ) ), this, SLOT( onInfoChanged( QString ) ) );
   }
 }
 
@@ -167,10 +170,40 @@ void CAM_Module::studyChanged( SUIT_Study* , SUIT_Study* )
 {
 }
 
+/*!Return true if module is active.*/
+bool CAM_Module::isActiveModule() const
+{
+  return application() ? application()->activeModule() == this : false;
+}
+
+/*!
+  Put the message into the status bar of the desktop. Message will be displayed
+  during specified \amscec milliseconds. If parameter \amsec is negative then
+  message will be persistently displayed when module is active.
+*/
+void CAM_Module::putInfo( const QString& msg, const int msec )
+{
+  if ( application() )
+    application()->putInfo( msg, msec );
+
+  if ( msec < 0 )
+    myInfo = msg;
+}
+
+/*!
+  Restore persistently displayed info string when previos information status string erasing
+  if module is active.
+*/
+void CAM_Module::onInfoChanged( QString txt )
+{
+  if ( txt.isEmpty() && isActiveModule() && !myInfo.isEmpty() && application() )
+    application()->putInfo( myInfo );
+}
+
 /*!Public slot, nullify application pointer if the application was closed.*/
 void CAM_Module::onApplicationClosed( SUIT_Application* theApp )
 {
-  if (myApp == theApp)
+  if ( myApp == theApp )
     myApp = NULL;
 }
 
@@ -640,10 +673,10 @@ void CAM_Module::connectToStudy( CAM_Study* camStudy )
     CAM_DataModel* dm = it.current()->dataModel();
     if( it.current() == this && !camStudy->containsDataModel( dm ) )
     {
-      if( prev )
-       camStudy->insertDataModel( it.current()->dataModel(), prev );
+      if ( prev )
+             camStudy->insertDataModel( it.current()->dataModel(), prev );
       else
-       camStudy->insertDataModel( it.current()->dataModel(), 0 );
+             camStudy->insertDataModel( it.current()->dataModel(), 0 );
     }
     prev = dm;
   }
index 3409905e764e985401eb90cee97e9d4362754677..df9282a410f7df1e0c051fa603df0d67034112f3 100755 (executable)
@@ -64,6 +64,10 @@ public:
   virtual void           contextMenuPopup( const QString&, QPopupMenu*, QString& title ) {};
   virtual void           updateCommandsStatus() {};
 
+  virtual void           putInfo( const QString&, const int = -1 );
+
+  bool                   isActiveModule() const;
+
   /** @name Set Menu Shown*/
   //@{
   virtual void           setMenuShown( const bool );
@@ -89,6 +93,9 @@ public slots:
 
   virtual void           onApplicationClosed( SUIT_Application* );
 
+private slots:
+  void                   onInfoChanged( QString );
+
 protected: 
   virtual CAM_DataModel* createDataModel();
 
@@ -136,6 +143,7 @@ private:
   CAM_Application*       myApp;
   QString                myName;
   QPixmap                myIcon;
+  QString                myInfo;
   CAM_DataModel*         myDataModel;
   QMap<int, QAction*>    myActionMap;
 
@@ -146,7 +154,8 @@ private:
 #pragma warning( default: 4251 )
 #endif
 
-extern "C" {
+extern "C"
+{
   typedef CAM_Module* (*GET_MODULE_FUNC)();
 }
 
index a4a21d8623fb062d71e8f0c460382553fb8edbf4..bbe68030d2b757c51ddd1624e2802656960ba6fd 100755 (executable)
@@ -168,7 +168,7 @@ SUIT_ResourceMgr* SUIT_Application::resourceMgr() const
   \param msg - text of message
   \param msec - time in milliseconds, after that the status label will be cleared
 */
-void SUIT_Application::putInfo ( const QString& msg, const int msec )
+void SUIT_Application::putInfo( const QString& msg, const int msec )
 {
   if ( !desktop() )
     return;
@@ -180,9 +180,28 @@ void SUIT_Application::putInfo ( const QString& msg, const int msec )
     myStatusLabel->show();
   }
 
+  QString prev = myStatusLabel->text();
+
   myStatusLabel->setText( msg );
   if ( msec != -1 )
-    QTimer::singleShot( msec <= 0 ? DEFAULT_MESSAGE_DELAY : msec, myStatusLabel, SLOT( clear() ) );
+    QTimer::singleShot( msec <= 0 ? DEFAULT_MESSAGE_DELAY : msec, this, SLOT( onInfoClear() ) );
+
+  if ( prev != msg )
+    emit infoChanged( msg );
+}
+
+/*!
+  Clear the information label in status bar after delay.
+*/
+void SUIT_Application::onInfoClear()
+{
+  if ( !myStatusLabel )
+    return;
+
+  bool changed = !myStatusLabel->text().isEmpty();
+  myStatusLabel->clear();
+  if ( changed )
+    emit infoChanged( QString::null );
 }
 
 /*!
index 05e269137f475e1da9a04413ddc7b8d12698d73c..0bf48847e47efb99ae3aaaa7a08de43aabc794b7 100755 (executable)
 #include <qobject.h>
 #include <qwidget.h>
 
+class QLabel;
+class QString;
 class QAction;
+class QIconSet;
 class SUIT_Desktop;
 class SUIT_Convertor;
 class SUIT_ViewModel;
 class SUIT_ResourceMgr;
-class QString;
-class QIconSet;
-class QLabel;
 
 #ifdef WIN32
 #pragma warning ( disable:4251 )
@@ -112,6 +112,10 @@ public:
 signals:
   void                  applicationClosed( SUIT_Application* );
   void                  activated( SUIT_Application* );
+  void                  infoChanged( QString );
+
+private slots:
+  void                  onInfoClear();
 
 protected:
   SUIT_Application*     startApplication( int, char** ) const;