]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Update of the currently added menu items during action menu text or property "isSepar...
authorstv <stv@opencascade.com>
Wed, 19 Oct 2005 11:54:50 +0000 (11:54 +0000)
committerstv <stv@opencascade.com>
Wed, 19 Oct 2005 11:54:50 +0000 (11:54 +0000)
src/Qtx/QtxDockAction.cxx
src/Qtx/QtxDockAction.h

index 2c88abb4f0ea76aed83a26f522a087b21a2fb835..f126120ed745787712bd8e0310c98a549131d5bf 100755 (executable)
@@ -150,7 +150,11 @@ bool QtxDockAction::isSeparate() const
 
 void QtxDockAction::setSeparate( const bool on )
 {
+  if ( mySeparate == on )
+    return;
+
   mySeparate = on;
+  updateMenus();
 }
 
 /*!
@@ -232,6 +236,15 @@ bool QtxDockAction::removeFrom( QWidget* wid )
   return QtxAction::removeFrom( wid );
 }
 
+void QtxDockAction::setMenuText( const QString& txt )
+{
+  if ( menuText() == txt )
+    return;
+
+  QtxAction::setMenuText( txt );
+  updateMenus();
+}
+
 /*!
        Name: addDockWindow [public]
        Desc: Add dock window to internal data structures. Action will be include all added
@@ -1167,3 +1180,43 @@ void QtxDockAction::collectNames( const int place, QStringList& lst ) const
     lst.append( name );
   }
 }
+
+void QtxDockAction::updateMenus()
+{
+  for ( MenuMap::Iterator it = myMenu.begin(); it != myMenu.end(); ++it )
+  {
+    QPopupMenu* pm = it.key();
+    MenuInfo& inf = it.data();
+
+    int toolId = findId( pm, inf.tool );
+    int dockId = findId( pm, inf.dock );
+
+    int index = pm->indexOf( dockId );
+
+    if ( isSeparate() && !inf.tool )
+      inf.tool = new QPopupMenu( pm );
+
+    pm->removeItem( dockId );
+    pm->removeItem( toolId );
+
+    if ( !isSeparate() && inf.tool )
+    {
+      delete inf.tool;
+      inf.tool = 0;
+    }
+
+    QString dock, tool;
+    splitMenuText( dock, tool );
+
+    if ( inf.dock )
+      iconSet().isNull() ? pm->insertItem ( dock, inf.dock, -1, index ) :
+                           pm->insertItem ( iconSet(), dock, inf.dock, -1, index );
+
+    if ( index >= 0 )
+      index++;
+
+    if ( inf.tool )
+      iconSet().isNull() ? pm->insertItem ( tool, inf.tool, -1, index ) :
+                          pm->insertItem ( iconSet(), tool, inf.tool, -1, index );
+  }
+}
index 8e443be9a9d350c910342cf10d34863ad0802b10..154e4db2a0d36f5c46cd2bca5d35e8eb57dafd60 100755 (executable)
@@ -48,6 +48,7 @@ public:
   virtual bool addTo( QWidget* );
   virtual bool addTo( QWidget*, const int );
   virtual bool removeFrom( QWidget* );
+  virtual void setMenuText( const QString& );
 
   bool         addDockWindow( QDockWindow* );
   bool         removeDockWindow( QDockWindow* );
@@ -100,6 +101,8 @@ private:
 
   void         collectNames( const int, QStringList& ) const;
 
+  void         updateMenus();
+
 private:
   enum { AutoAdd = QEvent::User, LoadArea };