diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-04-18 09:34:27 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-04-18 09:34:27 +0000 |
| commit | 67d105bf5e0d6e05f9f606b27df2145727c9c4e6 (patch) | |
| tree | 0a7b5d09c88d3f2e38bfdaa78ce6ccba1d6c8753 | |
| parent | 0140e8d79c40c90a49b6be41ce6466eb23cc126e (diff) | |
| download | qmmp-67d105bf5e0d6e05f9f606b27df2145727c9c4e6.tar.gz qmmp-67d105bf5e0d6e05f9f606b27df2145727c9c4e6.tar.bz2 qmmp-67d105bf5e0d6e05f9f606b27df2145727c9c4e6.zip | |
auto-hide empty service menus
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8783 90c681e8-e032-0410-971d-27865f9a5e38
| -rw-r--r-- | src/qmmpui/uihelper.cpp | 25 | ||||
| -rw-r--r-- | src/qmmpui/uihelper.h | 7 |
2 files changed, 21 insertions, 11 deletions
diff --git a/src/qmmpui/uihelper.cpp b/src/qmmpui/uihelper.cpp index a6029621e..5ae9e9184 100644 --- a/src/qmmpui/uihelper.cpp +++ b/src/qmmpui/uihelper.cpp @@ -45,7 +45,6 @@ UiHelper::UiHelper(QObject *parent) { m_instance = this; m_jumpDialog = nullptr; - m_model = nullptr; General::create(parent); QSettings settings(Qmmp::configFile(), QSettings::IniFormat); m_lastDir = settings.value("General/last_dir", QDir::homePath()).toString(); //last directory @@ -59,7 +58,7 @@ UiHelper::~UiHelper() bool UiHelper::visibilityControl() { - foreach(GeneralFactory *factory, General::enabledFactories()) + for(const GeneralFactory *factory : General::enabledFactories()) { if (factory->properties().visibilityControl) return true; @@ -79,16 +78,20 @@ void UiHelper::addAction(QAction *action, MenuType type) m_menus[type].menu->insertAction(m_menus[type].before, action); else m_menus[type].menu->addAction(action); + m_menus[type].menu->menuAction()->setVisible(!m_menus[type].autoHide || !m_menus[type].actions.isEmpty()); } } void UiHelper::removeAction(QAction *action) { - foreach(MenuType type, m_menus.keys()) + for(MenuType type : m_menus.keys()) { m_menus[type].actions.removeAll(action); if(m_menus[type].menu) + { m_menus[type].menu->removeAction(action); + m_menus[type].menu->menuAction()->setVisible(!m_menus[type].autoHide || !m_menus[type].actions.isEmpty()); + } } } @@ -97,26 +100,32 @@ QList<QAction *> UiHelper::actions(MenuType type) return m_menus[type].actions; } -QMenu *UiHelper::createMenu(MenuType type, const QString &title, QWidget *parent) +QMenu *UiHelper::createMenu(MenuType type, const QString &title, bool autoHide, QWidget *parent) { if(m_menus[type].menu) { m_menus[type].menu->setTitle(title); - return m_menus[type].menu; } - m_menus[type].menu = new QMenu(title, parent); - m_menus[type].menu->addActions(m_menus[type].actions); + else + { + m_menus[type].menu = new QMenu(title, parent); + m_menus[type].menu->addActions(m_menus[type].actions); + } + m_menus[type].autoHide = autoHide; + m_menus[type].menu->menuAction()->setVisible(!autoHide || !m_menus[type].actions.isEmpty()); return m_menus[type].menu; } -void UiHelper::registerMenu(UiHelper::MenuType type, QMenu *menu, QAction *before) +void UiHelper::registerMenu(UiHelper::MenuType type, QMenu *menu, bool autoHide, QAction *before) { m_menus[type].menu = menu; m_menus[type].before = before; + m_menus[type].autoHide = autoHide; if(before) m_menus[type].menu->insertActions(before, m_menus[type].actions); else m_menus[type].menu->addActions(m_menus[type].actions); + m_menus[type].menu->menuAction()->setVisible(!autoHide || !m_menus[type].actions.isEmpty()); } void UiHelper::addFiles(QWidget *parent, PlayListModel *model) diff --git a/src/qmmpui/uihelper.h b/src/qmmpui/uihelper.h index ff8521271..2367b62f4 100644 --- a/src/qmmpui/uihelper.h +++ b/src/qmmpui/uihelper.h @@ -88,14 +88,14 @@ public: * @param title Menu title. * @param parent Parent widget */ - QMenu *createMenu(MenuType type, const QString &title = QString(), QWidget *parent = nullptr); + QMenu *createMenu(MenuType type, const QString &title = QString(), bool autoHide = true, QWidget *parent = nullptr); /*! * Registers existing menu for access from general plugins. * @param type Menu type. * @param menu Menu pointer. * @param before An action, after which the rest are added. */ - void registerMenu(MenuType type, QMenu *menu, QAction *before = nullptr); + void registerMenu(MenuType type, QMenu *menu, bool autoHide = false, QAction *before = nullptr); /*! * Opens 'Add Files' dialog * @param parent Parent widget @@ -194,11 +194,12 @@ private: QPointer<QMenu> menu; QPointer<QAction> before; QList<QAction*> actions; + bool autoHide = false; }; QMap<MenuType, MenuData> m_menus; QString m_lastDir; QPointer <JumpToTrackDialog> m_jumpDialog; - PlayListModel *m_model; + PlayListModel *m_model = nullptr; static UiHelper* m_instance; }; |
