diff --git a/src/Gui/DlgToolbarsImp.cpp b/src/Gui/DlgToolbarsImp.cpp index b5bcdbf77534..fe193cbb9ccf 100644 --- a/src/Gui/DlgToolbarsImp.cpp +++ b/src/Gui/DlgToolbarsImp.cpp @@ -680,6 +680,41 @@ void DlgCustomToolbarsImp::renameCustomToolbar(const QString& old_name, const QS } } +QList DlgCustomToolbarsImp::getActionGroup(QAction* action) +{ + QList group; + QList widgets = action->associatedWidgets(); + for (QList::iterator it = widgets.begin(); it != widgets.end(); ++it) { + QToolButton* tb = qobject_cast(*it); + if (tb) { + QMenu* menu = tb->menu(); + if (menu) { + group = menu->actions(); + break; + } + } + } + return group; +} + +void DlgCustomToolbarsImp::setActionGroup(QAction* action, const QList& group) +{ + // See also ActionGroup::addTo() + QList widgets = action->associatedWidgets(); + for (QList::iterator it = widgets.begin(); it != widgets.end(); ++it) { + QToolButton* tb = qobject_cast(*it); + if (tb) { + QMenu* menu = tb->menu(); + if (!menu) { + tb->setPopupMode(QToolButton::MenuButtonPopup); + QMenu* menu = new QMenu(tb); + menu->addActions(group); + tb->setMenu(menu); + } + } + } +} + void DlgCustomToolbarsImp::addCustomCommand(const QString& name, const QByteArray& cmd) { QVariant data = workbenchBox->itemData(workbenchBox->currentIndex(), Qt::UserRole); @@ -757,8 +792,11 @@ void DlgCustomToolbarsImp::moveUpCustomCommand(const QString& name, const QByteA } } if (before != 0) { + QList group = getActionGroup(*it); bars.front()->removeAction(*it); bars.front()->insertAction(before, *it); + if (!group.isEmpty()) + setActionGroup(*it, group); break; } } @@ -797,13 +835,19 @@ void DlgCustomToolbarsImp::moveDownCustomCommand(const QString& name, const QByt ++it; // second last item if (*it == actions.back()) { + QList group = getActionGroup(act); bars.front()->removeAction(act); bars.front()->addAction(act); + if (!group.isEmpty()) + setActionGroup(act, group); break; } ++it; + QList group = getActionGroup(act); bars.front()->removeAction(act); bars.front()->insertAction(*it, act); + if (!group.isEmpty()) + setActionGroup(act, group); break; } } diff --git a/src/Gui/DlgToolbarsImp.h b/src/Gui/DlgToolbarsImp.h index 7077216b7467..a7ce803a39c8 100644 --- a/src/Gui/DlgToolbarsImp.h +++ b/src/Gui/DlgToolbarsImp.h @@ -103,6 +103,10 @@ class DlgCustomToolbarsImp : public DlgCustomToolbars virtual void removeCustomCommand(const QString&, const QByteArray&); virtual void moveUpCustomCommand(const QString&, const QByteArray&); virtual void moveDownCustomCommand(const QString&, const QByteArray&); + +private: + QList getActionGroup(QAction*); + void setActionGroup(QAction*, const QList& group); }; /** This class implements the creation of user defined toolbox bars.