aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Ui/qsui
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Ui/qsui')
-rw-r--r--src/plugins/Ui/qsui/actionmanager.cpp75
-rw-r--r--src/plugins/Ui/qsui/actionmanager.h31
-rw-r--r--src/plugins/Ui/qsui/forms/mainwindow.ui40
-rw-r--r--src/plugins/Ui/qsui/mainwindow.cpp61
-rw-r--r--src/plugins/Ui/qsui/mainwindow.h5
-rw-r--r--src/plugins/Ui/qsui/toolbareditor.cpp38
-rw-r--r--src/plugins/Ui/qsui/toolbareditor.h2
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: