]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
*** empty log message ***
authorvsr <vsr@opencascade.com>
Thu, 12 Jul 2007 11:52:09 +0000 (11:52 +0000)
committervsr <vsr@opencascade.com>
Thu, 12 Jul 2007 11:52:09 +0000 (11:52 +0000)
src/Qtx/QtxActionSet.cxx
src/Qtx/QtxMultiAction.cxx
src/Qtx/QtxMultiAction.h

index 6f6ab940cca85943046bfecc23c29fadd1372ffa..da8d7630dda2e6891c4a6e7bc65e845d9872c4e3 100644 (file)
@@ -217,6 +217,10 @@ void QtxActionSet::clear()
 */
 void QtxActionSet::onChanged()
 {
+  QList<QWidget*> lst = createdWidgets();
+  for ( QList<QWidget*>::iterator it = lst.begin(); it != lst.end(); ++it )
+    (*it)->setEnabled( isEnabled() );
+
   if ( !isVisible() || !isEmptyAction() )
     return;
 
index 89c4420442ae367de04008fd3dae34efa743d7db..806e0f00b688f907e017c470f66cf1c7cc5be2f6 100644 (file)
@@ -168,7 +168,7 @@ QtxMultiAction::~QtxMultiAction()
 */
 void QtxMultiAction::setActiveAction( QAction* a )
 {
-  if ( a && actions().contains( a ) && a != myCurrent ) {
+  if ( a && actions().contains( a ) && a != myCurrent && a->isEnabled() ) {
     myCurrent = a;
     updateAction();
   }
@@ -294,8 +294,8 @@ QWidget* QtxMultiAction::createWidget( QWidget* parent )
 */
 void QtxMultiAction::actionAdded( QAction* a )
 {
-  if ( !myCurrent )
-    myCurrent = a;
+  connect( a, SIGNAL( changed() ), this, SLOT( onActionChanged() ) );
+  onActionChanged();
 }
 
 /*!
@@ -304,10 +304,14 @@ void QtxMultiAction::actionAdded( QAction* a )
 */
 void QtxMultiAction::actionRemoved( QAction* a )
 {
+  disconnect( a, SIGNAL( changed() ), this, SLOT( onActionChanged() ) );
+
   if ( myCurrent != a )
     return;
 
-  myCurrent = actions().isEmpty() ? 0 : actions().first();
+  myCurrent = 0;
+
+  onActionChanged();
 
   updateAction();
 }
@@ -354,3 +358,31 @@ void QtxMultiAction::updateButton( QToolButton* btn )
     vbox->addWidget( b );
   }
 }
+
+/*!
+  \brief Called when any child action is enabled/disabled.
+  
+  If the current action is disabled, the multi-action switches
+  to first found enabled. If all child actions are disabled, the
+  action itself is also disabled.
+*/
+void QtxMultiAction::onActionChanged()
+{
+  if ( myCurrent && myCurrent->isEnabled() )
+    return;
+
+  QList<QAction*> alist = actions();
+  QAction* a = 0;
+  for ( QList<QAction*>::ConstIterator it = alist.begin(); it != alist.end() && !a; ++it ) {
+    if ( (*it)->isEnabled() )
+      a = *it;
+  }
+
+  if ( a )
+    myCurrent = a;
+  else
+    myCurrent = alist.isEmpty() ? 0 : alist.first();
+
+  setEnabled( myCurrent && myCurrent->isEnabled() );
+  updateAction();
+}
index fa2ea58671c2bf2b40914a90b8ec299f1c7dd215..07bb3e062f83d5c3077d82a58c9b52766d879777 100644 (file)
@@ -43,9 +43,10 @@ public:
   void             setActiveAction( QAction* );
   QAction*         activeAction() const;
 
-public slots:
+private slots:
   void             onClicked( bool );
   void             onTriggered( QAction* );
+  void             onActionChanged();
 
 protected:
   virtual bool     isEmptyAction() const;