X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FQtx%2FQtxActionMenuMgr.cxx;h=54704d0c73584779f250f4d71e0822d43913b47b;hb=00be77fd72d1e9378e32b88a468ec16bebb9b806;hp=c6b8affc40280e0796073d48ff1a682e832c9a7d;hpb=6878ef4d7381638ec39d1ca9d03afc21a69401aa;p=modules%2Fgui.git diff --git a/src/Qtx/QtxActionMenuMgr.cxx b/src/Qtx/QtxActionMenuMgr.cxx index c6b8affc4..54704d0c7 100644 --- a/src/Qtx/QtxActionMenuMgr.cxx +++ b/src/Qtx/QtxActionMenuMgr.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -312,7 +312,8 @@ int QtxActionMenuMgr::insert( QAction* a, const int pId, const int group, const \param idx menu index inside the menu group \return action ID */ -int QtxActionMenuMgr::insert( const QString& title, const int pId, const int group, const int id, const int idx ) +int QtxActionMenuMgr::insert( const QString& title, const int pId, const int group, + const int id, const int idx, QMenu* _menu) { MenuNode* pNode = pId == -1 ? myRoot : find( pId ); if ( !pNode ) @@ -333,7 +334,11 @@ int QtxActionMenuMgr::insert( const QString& title, const int pId, const int gro int gid = (id == -1 || eNode ) ? generateId() : id; - QMenu* menu = new QMenu( 0 ); + QMenu* menu; + if (_menu) + menu = _menu; + else + menu = new QMenu( 0 ); QAction* ma = menu->menuAction(); ma->setText( title ); @@ -869,8 +874,6 @@ void QtxActionMenuMgr::updateMenu( MenuNode* startNode, const bool rec, const bo if ( !mw ) return; - bool filled = checkWidget( mw ); - // first remove all own actions and collect foreign ones QMap< QAction*, QList > foreign; QAction* a; @@ -961,13 +964,14 @@ void QtxActionMenuMgr::updateMenu( MenuNode* startNode, const bool rec, const bo foreach( a, formapit.value() ) mw->insertAction( preva, a ); } - + // remove extra separators simplifySeparators( mw ); // update parent menu if necessary - if ( updParent && node->parent && filled != checkWidget( mw ) ) + if ( updParent && node->parent ) { updateMenu( node->parent, false ); + } } /*! @@ -1014,7 +1018,12 @@ bool QtxActionMenuMgr::checkWidget( QWidget* wid ) const if ( !wid ) return false; - return !wid->actions().isEmpty(); + bool res = false; + QList lst = wid->actions(); + for ( QList::const_iterator it = lst.begin(); it != lst.end() && !res; ++it ) { + res = !(*it)->isSeparator() && (*it)->isVisible(); + } + return res; } /*! @@ -1195,6 +1204,25 @@ void QtxActionMenuMgr::triggerUpdate( const int id, const bool rec ) QtxActionMgr::triggerUpdate(); } +/*! + \brief Called when action is changed. + + Schedule delayed update for parent menu of changed action. +*/ +void QtxActionMenuMgr::actionChanged( int id ) +{ + NodeList aNodes; + find( id, aNodes ); + + for ( NodeList::iterator it = aNodes.begin(); it != aNodes.end(); ++it ) + { + MenuNode* node = *it; + if ( node->visible ) { + triggerUpdate( node->parent ? node->parent->id : myRoot->id, false ); + } + } +} + /*! \brief Called when delayed content update is performed.