aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpui
diff options
context:
space:
mode:
Diffstat (limited to 'src/qmmpui')
-rw-r--r--src/qmmpui/uihelper.cpp77
-rw-r--r--src/qmmpui/uihelper.h16
2 files changed, 43 insertions, 50 deletions
diff --git a/src/qmmpui/uihelper.cpp b/src/qmmpui/uihelper.cpp
index 4a6bd6bc2..1d965a9b6 100644
--- a/src/qmmpui/uihelper.cpp
+++ b/src/qmmpui/uihelper.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2008-2017 by Ilya Kotov *
+ * Copyright (C) 2008-2018 by Ilya Kotov *
* forkotov02@ya.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -44,8 +44,6 @@ UiHelper::UiHelper(QObject *parent)
: QObject(parent)
{
m_instance = this;
- m_toolsMenu = 0;
- m_playlistMenu = 0;
m_jumpDialog = 0;
m_model = 0;
General::create(parent);
@@ -73,64 +71,53 @@ bool UiHelper::visibilityControl()
void UiHelper::addAction(QAction *action, MenuType type)
{
connect(action, SIGNAL(destroyed (QObject *)), SLOT(removeAction(QObject*)));
- switch ((int) type)
+
+ if(!m_menus[type].actions.contains(action))
+ m_menus[type].actions.append(action);
+ if(m_menus[type].menu && !m_menus[type].menu->actions().contains(action))
{
- case TOOLS_MENU:
- if (!m_toolsActions.contains(action))
- m_toolsActions.append(action);
- if (m_toolsMenu && !m_toolsMenu->actions ().contains(action))
- m_toolsMenu->addAction(action);
- break;
- case PLAYLIST_MENU:
- if (!m_playlistActions.contains(action))
- m_playlistActions.append(action);
- if (m_playlistMenu && !m_playlistMenu->actions ().contains(action))
- m_playlistMenu->addAction(action);
+ if(m_menus[type].before)
+ m_menus[type].menu->insertAction(m_menus[type].before, action);
+ else
+ m_menus[type].menu->addAction(action);
}
}
void UiHelper::removeAction(QAction *action)
{
- m_toolsActions.removeAll(action);
- if (m_toolsMenu)
- m_toolsMenu->removeAction(action);
- m_playlistActions.removeAll(action);
- if (m_playlistMenu)
- m_playlistMenu->removeAction(action);
+ foreach(MenuType type, m_menus.keys())
+ {
+ m_menus[type].actions.removeAll(action);
+ if(m_menus[type].menu)
+ m_menus[type].menu->removeAction(action);
+ }
}
QList<QAction *> UiHelper::actions(MenuType type)
{
- if (type == TOOLS_MENU)
- return m_toolsActions;
- else
- return m_playlistActions;
+ return m_menus[type].actions;
}
QMenu *UiHelper::createMenu(MenuType type, const QString &title, QWidget *parent)
{
- switch ((int) type)
+ if(m_menus[type].menu)
{
- case TOOLS_MENU:
- if (!m_toolsMenu)
- {
- m_toolsMenu = new QMenu(title, parent);
- m_toolsMenu->addActions(m_toolsActions);
- }
- else
- m_toolsMenu->setTitle(title);
- return m_toolsMenu;
- case PLAYLIST_MENU:
- if (!m_playlistMenu)
- {
- m_playlistMenu = new QMenu(title, parent);
- m_playlistMenu->addActions(m_playlistActions);
- }
- else
- m_playlistMenu->setTitle(title);
- return m_playlistMenu;
+ m_menus[type].menu->setTitle(title);
+ return m_menus[type].menu;
}
- return 0;
+ m_menus[type].menu = new QMenu(title, parent);
+ m_menus[type].menu->addActions(m_menus[type].actions);
+ return m_menus[type].menu;
+}
+
+void UiHelper::registerMenu(UiHelper::MenuType type, QMenu *menu, QAction *before)
+{
+ m_menus[type].menu = menu;
+ m_menus[type].before = before;
+ if(before)
+ m_menus[type].menu->insertActions(before, m_menus[type].actions);
+ else
+ m_menus[type].menu->addActions(m_menus[type].actions);
}
void UiHelper::addFiles(QWidget *parent, PlayListModel *model)
diff --git a/src/qmmpui/uihelper.h b/src/qmmpui/uihelper.h
index 49636d0f7..46844e788 100644
--- a/src/qmmpui/uihelper.h
+++ b/src/qmmpui/uihelper.h
@@ -60,7 +60,8 @@ public:
enum MenuType
{
TOOLS_MENU = 0, /*!< tools menu */
- PLAYLIST_MENU /*!< playlist context menu */
+ PLAYLIST_MENU, /*!< playlist context menu */
+ ADD_MENU
};
/*!
* Returns \b true if one of the general plugin can change visibility, otherwise returns \b false
@@ -88,6 +89,8 @@ public:
* @param parent Parent widget
*/
QMenu *createMenu(MenuType type, const QString &title = QString(), QWidget *parent = 0);
+ void registerMenu(MenuType type, QMenu *menu, QAction *before = 0);
+
/*!
* Opens 'Add Files' dialog
* @param parent Parent widget
@@ -181,10 +184,13 @@ private slots:
private:
QMap <GeneralFactory*, General*> m_generals;
- QList <QAction*> m_toolsActions;
- QList <QAction*> m_playlistActions;
- QPointer<QMenu> m_toolsMenu;
- QPointer<QMenu> m_playlistMenu;
+ struct MenuData
+ {
+ QPointer<QMenu> menu;
+ QPointer<QAction> before;
+ QList<QAction*> actions;
+ };
+ QMap<MenuType, MenuData> m_menus;
QString m_lastDir;
QPointer <JumpToTrackDialog> m_jumpDialog;
PlayListModel *m_model;