diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-03-16 12:42:28 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-03-16 12:42:28 +0000 |
| commit | 8040e9cf13fa527c9262b5a4eaa233304485c1c9 (patch) | |
| tree | 5dd7abd261be975c32ff2baf5b0ccf34cd4c10a5 /src | |
| parent | 520755833a9206995ce61c306fdf5bdff7e37264 (diff) | |
| download | qmmp-8040e9cf13fa527c9262b5a4eaa233304485c1c9.tar.gz qmmp-8040e9cf13fa527c9262b5a4eaa233304485c1c9.tar.bz2 qmmp-8040e9cf13fa527c9262b5a4eaa233304485c1c9.zip | |
qsui: prepare for new action editor implementation
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@6187 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/plugins/Ui/qsui/actionmanager.cpp | 75 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/actionmanager.h | 31 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/forms/mainwindow.ui | 40 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/mainwindow.cpp | 61 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/mainwindow.h | 5 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/toolbareditor.cpp | 38 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/toolbareditor.h | 2 |
7 files changed, 157 insertions, 95 deletions
diff --git a/src/plugins/Ui/qsui/actionmanager.cpp b/src/plugins/Ui/qsui/actionmanager.cpp index 2e63a0faa..3f135865e 100644 --- a/src/plugins/Ui/qsui/actionmanager.cpp +++ b/src/plugins/Ui/qsui/actionmanager.cpp @@ -23,6 +23,7 @@ #include <QIcon> #include <QFile> #include <QApplication> +#include <QWidgetAction> #include <qmmp/qmmp.h> #include "actionmanager.h" @@ -208,25 +209,93 @@ void ActionManager::resetShortcuts() void ActionManager::registerAction(int id, QAction *action, QString confKey, QString key) { + if(m_actions.value(id)) + qFatal("ActionManager: invalid action id"); + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); settings.beginGroup("SimpleUiShortcuts"); action->setShortcut(settings.value(confKey, key).toString()); action->setProperty("defaultShortcut", key); action->setObjectName(confKey); + m_actions[id] = action; + settings.endGroup(); +} + +void ActionManager::registerWidget(int id, QWidget *w, QString text, QString name) +{ if(m_actions.value(id)) qFatal("ActionManager: invalid action id"); + QWidgetAction *action = new QWidgetAction(this); + action->setText(text); + action->setObjectName(name); + action->setDefaultWidget(w); m_actions[id] = action; - settings.endGroup(); } -QStringList ActionManager::toolBarActionNames() const +QToolBar *ActionManager::createToolBar(ActionManager::ToolBarInfo info, QWidget *parent) +{ + QToolBar *toolBar = new QToolBar(info.title, parent); + updateToolBar(toolBar, info); + return toolBar; +} + +void ActionManager::updateToolBar(QToolBar *toolBar, ActionManager::ToolBarInfo info) +{ + toolBar->clear(); + foreach (QString name, info.actionNames) + { + if(name == "separator") + { + toolBar->addSeparator()->setObjectName("separator"); + continue; + } + QAction *action = findChild<QAction *>(name); + action->setVisible(true); + toolBar->addAction(action); + } +} + +ActionManager::ToolBarInfo ActionManager::defaultToolBar() const { QList <Type> idList; idList << PL_ADD_FILE << PL_ADD_DIRECTORY << PREVIOUS << PLAY << PAUSE << STOP << NEXT << EJECT; + idList << UI_SEPARATOR << UI_POS_SLIDER << UI_SEPARATOR << UI_VOL_SLIDER << VOL_MUTE; QStringList names; foreach (Type id, idList) { + if(id == UI_SEPARATOR) + { + names << "separator"; + continue; + } names << m_actions.value(id)->objectName(); } - return names; + ActionManager::ToolBarInfo info; + info.title = tr("Toolbar"); + info.actionNames = names; + return info; +} + +QList<ActionManager::ToolBarInfo> ActionManager::readToolBarSettings() const +{ + QList<ToolBarInfo> list; + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); + int size = settings.beginReadArray("SimpleUiToolbars"); + for(int i = 0; i < size; ++i) + { + ToolBarInfo info; + settings.setArrayIndex(i); + info.title = settings.value("title").toString(); + info.actionNames = settings.value("actions").toStringList(); + list.append(info); + } + settings.endArray(); + if(list.isEmpty()) + list << defaultToolBar(); + return list; +} + +void ActionManager::writeToolBarSettings(QList<ActionManager::ToolBarInfo> l) +{ + } diff --git a/src/plugins/Ui/qsui/actionmanager.h b/src/plugins/Ui/qsui/actionmanager.h index 1a1980e41..eb57ad106 100644 --- a/src/plugins/Ui/qsui/actionmanager.h +++ b/src/plugins/Ui/qsui/actionmanager.h @@ -24,6 +24,8 @@ #include <QObject> #include <QString> #include <QHash> +#include <QList> +#include <QToolBar> class QAction; class QSettings; @@ -61,10 +63,10 @@ public: WM_ALLWAYS_ON_TOP, WM_STICKY, - UI_ANALYZER, - UI_FILEBROWSER, - UI_COVER, - UI_PLAYLISTBROWSER, + UI_ANALYZER, //external + UI_FILEBROWSER, //external + UI_COVER, //external + UI_PLAYLISTBROWSER, //external UI_SHOW_TABS, UI_SHOW_TITLEBARS, UI_BLOCK_TOOLBARS, @@ -102,7 +104,18 @@ public: ABOUT_UI, ABOUT, ABOUT_QT, - QUIT + QUIT, + + //widgets + UI_POS_SLIDER, //external + UI_VOL_SLIDER, //external + UI_SEPARATOR, + }; + + struct ToolBarInfo + { + QString title; + QStringList actionNames; }; QAction *action(int type); @@ -111,7 +124,13 @@ public: void saveActions(); void resetShortcuts(); void registerAction(int id, QAction *action, QString confKey, QString key); - QStringList toolBarActionNames() const; + void registerWidget(int id, QWidget *w, QString text, QString name); + QToolBar *createToolBar(ToolBarInfo info, QWidget *parent); + void updateToolBar(QToolBar *toolBar, ToolBarInfo info); + ActionManager::ToolBarInfo defaultToolBar() const; + QList<ToolBarInfo> readToolBarSettings() const; + void writeToolBarSettings(QList<ToolBarInfo> l); + static ActionManager* instance(); private: diff --git a/src/plugins/Ui/qsui/forms/mainwindow.ui b/src/plugins/Ui/qsui/forms/mainwindow.ui index 5a9eb2797..22292be17 100644 --- a/src/plugins/Ui/qsui/forms/mainwindow.ui +++ b/src/plugins/Ui/qsui/forms/mainwindow.ui @@ -89,46 +89,6 @@ <addaction name="menuTools"/> <addaction name="menuHelp"/> </widget> - <widget class="QToolBar" name="buttonsToolBar"> - <property name="windowTitle"> - <string>Playback</string> - </property> - <property name="iconSize"> - <size> - <width>16</width> - <height>16</height> - </size> - </property> - <attribute name="toolBarArea"> - <enum>TopToolBarArea</enum> - </attribute> - <attribute name="toolBarBreak"> - <bool>false</bool> - </attribute> - </widget> - <widget class="QToolBar" name="progressToolBar"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="windowTitle"> - <string>Progress</string> - </property> - <property name="iconSize"> - <size> - <width>16</width> - <height>16</height> - </size> - </property> - <attribute name="toolBarArea"> - <enum>TopToolBarArea</enum> - </attribute> - <attribute name="toolBarBreak"> - <bool>false</bool> - </attribute> - </widget> <widget class="QDockWidget" name="analyzerDockWidget"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> diff --git a/src/plugins/Ui/qsui/mainwindow.cpp b/src/plugins/Ui/qsui/mainwindow.cpp index 56e4d76b4..e872524a1 100644 --- a/src/plugins/Ui/qsui/mainwindow.cpp +++ b/src/plugins/Ui/qsui/mainwindow.cpp @@ -103,14 +103,13 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) } connect(model, SIGNAL(nameChanged(QString)), SLOT(updateTabs())); } - m_slider = new PositionSlider(this); - m_slider->setFocusPolicy(Qt::NoFocus); - m_slider->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - m_ui.progressToolBar->addWidget(m_slider); + m_positionSlider = new PositionSlider(this); + m_positionSlider->setFocusPolicy(Qt::NoFocus); + m_positionSlider->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); //prepare visualization Visual::initialize(this, m_visMenu, SLOT(updateActions())); //playlist manager - connect(m_slider, SIGNAL(sliderReleased()), SLOT(seek())); + connect(m_positionSlider, SIGNAL(sliderReleased()), SLOT(seek())); connect(m_pl_manager, SIGNAL(currentPlayListChanged(PlayListModel*,PlayListModel*)), SLOT(updateTabs())); connect(m_pl_manager, SIGNAL(selectedPlayListChanged(PlayListModel*,PlayListModel*)), @@ -131,23 +130,18 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) m_ui.statusbar->addPermanentWidget(m_statusLabel, 0); m_ui.statusbar->addPermanentWidget(m_timeLabel, 1); //volume - m_ui.progressToolBar->addSeparator(); m_volumeSlider = new QSlider(Qt::Horizontal, this); m_volumeSlider->setFocusPolicy(Qt::NoFocus); m_volumeSlider->setFixedWidth(100); m_volumeSlider->setRange(0,100); - QIcon volumeIcon = QIcon::fromTheme("audio-volume-high", QIcon(":/qsui/audio-volume-high.png")); - m_volumeAction = m_ui.progressToolBar->addAction(volumeIcon, tr("Volume")); - m_volumeAction->setCheckable(true); - connect(m_volumeAction, SIGNAL(triggered(bool)), m_core, SLOT(setMuted(bool))); + SET_ACTION(ActionManager::VOL_MUTE, m_core, SLOT(setMuted(bool))); connect(m_volumeSlider, SIGNAL(valueChanged(int)), m_core, SLOT(setVolume(int))); connect(m_core, SIGNAL(volumeChanged(int)), m_volumeSlider, SLOT(setValue(int))); connect(m_core, SIGNAL(volumeChanged(int)), SLOT(updateVolumeIcon())); connect(m_core, SIGNAL(mutedChanged(bool)), SLOT(updateVolumeIcon())); - connect(m_core, SIGNAL(mutedChanged(bool)), m_volumeAction, SLOT(setChecked(bool))); + connect(m_core, SIGNAL(mutedChanged(bool)), ACTION(ActionManager::VOL_MUTE), SLOT(setChecked(bool))); m_volumeSlider->setValue(m_core->volume()); updateVolumeIcon(); - m_ui.progressToolBar->addWidget(m_volumeSlider); //visualization m_analyzer = new QSUiAnalyzer(this); m_ui.analyzerDockWidget->setWidget(m_analyzer); @@ -191,9 +185,9 @@ void MainWindow::addUrl() void MainWindow::updatePosition(qint64 pos) { - m_slider->setMaximum(m_core->totalTime()/1000); - if(!m_slider->isSliderDown()) - m_slider->setValue(pos/1000); + m_positionSlider->setMaximum(m_core->totalTime()/1000); + if(!m_positionSlider->isSliderDown()) + m_positionSlider->setValue(pos/1000); QString text = MetaDataFormatter::formatLength(pos/1000, false); if(m_core->totalTime() > 1000) @@ -206,7 +200,7 @@ void MainWindow::updatePosition(qint64 pos) void MainWindow::seek() { - m_core->seek(m_slider->value()*1000); + m_core->seek(m_positionSlider->value()*1000); } void MainWindow::showState(Qmmp::State state) @@ -229,7 +223,7 @@ void MainWindow::showState(Qmmp::State state) updateStatus(); m_analyzer->stop(); m_timeLabel->clear(); - m_slider->setValue(0); + m_positionSlider->setValue(0); m_analyzer->clearCover(); qobject_cast<CoverWidget *>(m_ui.coverDockWidget->widget())->clearCover(); setWindowTitle("Qmmp"); @@ -351,7 +345,8 @@ void MainWindow::updateVolumeIcon() else if(maxVol >= 30 && maxVol < 60) iconName = "audio-volume-medium"; - m_volumeAction->setIcon(QIcon::fromTheme(iconName, QIcon(QString(":/qsui/") + iconName + ".png"))); + ACTION(ActionManager::VOL_MUTE)->setIcon(QIcon::fromTheme(iconName, QIcon(QString(":/qsui/") + iconName + ".png"))); + //m_volumeAction->setIcon(QIcon::fromTheme(iconName, QIcon(QString(":/qsui/") + iconName + ".png"))); } void MainWindow::jumpTo() @@ -436,6 +431,10 @@ void MainWindow::createActions() ActionManager::instance()->registerAction(ActionManager::UI_PLAYLISTBROWSER, m_ui.playlistsDockWidget->toggleViewAction(), "playlist_browser", tr("P")); + ActionManager::instance()->registerWidget(ActionManager::UI_POS_SLIDER, m_positionSlider, + tr("Position"), "position_slider"); + ActionManager::instance()->registerWidget(ActionManager::UI_VOL_SLIDER, m_volumeSlider, + tr("Volume"), "volume_slider"); //playback SET_ACTION(ActionManager::PREVIOUS, m_player, SLOT(previous())); SET_ACTION(ActionManager::PLAY, m_player, SLOT(play())); @@ -698,7 +697,7 @@ void MainWindow::createButtons() void MainWindow::readSettings() { - QSettings settings (Qmmp::configFile(), QSettings::IniFormat); + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); settings.beginGroup("Simple"); m_titleFormatter.setPattern(settings.value("window_title_format","%if(%p,%p - %t,%t)").toString()); if(m_update) @@ -723,6 +722,12 @@ void MainWindow::readSettings() } else { + foreach (ActionManager::ToolBarInfo info, ActionManager::instance()->readToolBarSettings()) + { + QToolBar *toolBar = ActionManager::instance()->createToolBar(info, this); + toolBar->setIconSize(QSize(16,16)); + addToolBar(toolBar); + } restoreGeometry(settings.value("mw_geometry").toByteArray()); QByteArray wstate = settings.value("mw_state").toByteArray(); if(wstate.isEmpty()) @@ -757,9 +762,17 @@ void MainWindow::readSettings() m_update = true; } + + + + + //load toolbar actions - m_ui.buttonsToolBar->clear(); - QStringList names = ActionManager::instance()->toolBarActionNames(); + //m_ui.buttonsToolBar->clear(); + + + + /*QStringList names = ActionManager::instance()->toolBarActionNames(); names = settings.value("toolbar_actions", names).toStringList(); foreach (QString name, names) { @@ -786,7 +799,7 @@ void MainWindow::readSettings() QAction *action = ActionManager::instance()->findChild<QAction *>(name); if(action) m_ui.buttonsToolBar->addAction(action); - } + }*/ m_hideOnClose = settings.value("hide_on_close", false).toBool(); m_ui.tabWidget->setTabsClosable(settings.value("pl_tabs_closable", false).toBool()); @@ -930,8 +943,8 @@ void MainWindow::setTitleBarsVisible(bool visible) void MainWindow::setToolBarsBlocked(bool blocked) { - m_ui.buttonsToolBar->setMovable(!blocked); - m_ui.progressToolBar->setMovable(!blocked); + //m_ui.buttonsToolBar->setMovable(!blocked); + //m_ui.progressToolBar->setMovable(!blocked); } void MainWindow::editToolBar() diff --git a/src/plugins/Ui/qsui/mainwindow.h b/src/plugins/Ui/qsui/mainwindow.h index a151ec9c2..a413a0091 100644 --- a/src/plugins/Ui/qsui/mainwindow.h +++ b/src/plugins/Ui/qsui/mainwindow.h @@ -91,16 +91,16 @@ private slots: private: void closeEvent(QCloseEvent *); void hideEvent(QHideEvent *); - bool m_wasMaximized; void createActions(); void createButtons(); void writeSettings(); + bool m_wasMaximized; QString m_lastDir; PlayListManager *m_pl_manager; Ui::MainWindow m_ui; MediaPlayer *m_player; QmmpUiSettings *m_ui_settings; - PositionSlider *m_slider; + PositionSlider *m_positionSlider; QLabel *m_timeLabel; SoundCore *m_core; QLabel *m_statusLabel; @@ -109,7 +109,6 @@ private: QMenu *m_pl_menu; QMenu *m_tab_menu; QSlider *m_volumeSlider; - QAction *m_volumeAction; KeyboardManager *m_key_manager; QSUiAnalyzer *m_analyzer; QToolButton *m_addListButton, *m_tabListMenuButton; diff --git a/src/plugins/Ui/qsui/toolbareditor.cpp b/src/plugins/Ui/qsui/toolbareditor.cpp index abe0fb1bd..738fd9272 100644 --- a/src/plugins/Ui/qsui/toolbareditor.cpp +++ b/src/plugins/Ui/qsui/toolbareditor.cpp @@ -20,6 +20,8 @@ #include <QApplication> #include <QSettings> +#include <QToolBar> +#include <QWidgetAction> #include <qmmp/qmmp.h> #include "toolbareditor.h" #include "ui_toolbareditor.h" @@ -47,46 +49,46 @@ ToolBarEditor::~ToolBarEditor() void ToolBarEditor::accept() { - QStringList names; + /*QStringList names; for(int row = 0; row < m_ui->activeActionsListWidget->count(); ++row) names.append(m_ui->activeActionsListWidget->item(row)->data(Qt::UserRole).toString()); QSettings settings (Qmmp::configFile(), QSettings::IniFormat); - settings.setValue("Simple/toolbar_actions", names); + settings.setValue("Simple/toolbar_actions", names);*/ QDialog::accept(); } void ToolBarEditor::populateActionList(bool reset) { - QStringList names = ActionManager::instance()->toolBarActionNames(); - if(!reset) + m_ui->toolbarNameComboBox->clear(); + m_ui->actionsListWidget->clear(); + m_ui->activeActionsListWidget->clear(); + + QStringList actionNames; + foreach (ActionManager::ToolBarInfo info, ActionManager::instance()->readToolBarSettings()) { - QSettings settings (Qmmp::configFile(), QSettings::IniFormat); - names = settings.value("Simple/toolbar_actions", names).toStringList(); + actionNames << info.actionNames; + m_ui->toolbarNameComboBox->addItem(info.title); } - for(int id = ActionManager::PLAY; id <= ActionManager::QUIT; ++id) + for(int id = ActionManager::PLAY; id <= ActionManager::UI_VOL_SLIDER; ++id) { QAction *action = ACTION(id); - if(action->icon().isNull()) + if(!action || actionNames.contains(action->objectName())) + continue; + if(!qobject_cast<QWidgetAction *>(action) && action->icon().isNull()) continue; + QListWidgetItem *item = new QListWidgetItem(); item->setIcon(action->icon()); item->setText(action->text().replace("&", "")); item->setData(Qt::UserRole, action->objectName()); - if(!names.contains(action->objectName())) - m_ui->actionsListWidget->addItem(item); + m_ui->actionsListWidget->addItem(item); } - if(!names.contains("position_slider")) - m_ui->actionsListWidget->addItem(createExtraItem(tr("Position Slider"), "position_slider")); - if(!names.contains("volume_slider")) - m_ui->actionsListWidget->addItem(createExtraItem(tr("Volume Slider"), "volume_slider")); - if(!names.contains("volume_icon")) - m_ui->actionsListWidget->addItem(createExtraItem(tr("Volume Icon"), "volume_icon")); m_ui->actionsListWidget->addItem(createExtraItem("-- " + tr("Separator") + " --", "separator")); - foreach (QString name, names) + /*foreach (QString name, names) { QAction *action = ActionManager::instance()->findChild<QAction *>(name); if(action) @@ -113,7 +115,7 @@ void ToolBarEditor::populateActionList(bool reset) { m_ui->activeActionsListWidget->addItem(createExtraItem("-- " + tr("Separator") + " --", name)); } - } + }*/ } QListWidgetItem *ToolBarEditor::createExtraItem(const QString &name, const QString &shortName, const QIcon &icon) diff --git a/src/plugins/Ui/qsui/toolbareditor.h b/src/plugins/Ui/qsui/toolbareditor.h index 65d6a1b76..70502b1c3 100644 --- a/src/plugins/Ui/qsui/toolbareditor.h +++ b/src/plugins/Ui/qsui/toolbareditor.h @@ -40,7 +40,7 @@ class ToolBarEditor : public QDialog Q_OBJECT public: - explicit ToolBarEditor(QWidget *parent = 0); + explicit ToolBarEditor(QWidget *parent); ~ToolBarEditor(); public slots: |
