Add shuffle and repeat options. These don't do anything yet.
Updates issue #20
This commit is contained in:
parent
427e24dece
commit
c9ddf09869
|
@ -66,5 +66,9 @@
|
|||
<file>download.png</file>
|
||||
<file>zoom-in.png</file>
|
||||
<file>schema-3.sql</file>
|
||||
<file>media-playlist-repeat.png</file>
|
||||
<file>media-playlist-shuffle.png</file>
|
||||
<file>media-playlist-repeat-off.png</file>
|
||||
<file>media-playlist-shuffle-off.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 625 B |
Binary file not shown.
After Width: | Height: | Size: 744 B |
Binary file not shown.
After Width: | Height: | Size: 839 B |
Binary file not shown.
After Width: | Height: | Size: 492 B |
|
@ -55,6 +55,7 @@ set(CLEMENTINE-SOURCES
|
|||
albumcoverloader.cpp
|
||||
m3uparser.cpp
|
||||
playlistmanager.cpp
|
||||
shufflerepeatwidget.cpp
|
||||
)
|
||||
|
||||
# Header files that have Q_OBJECT in
|
||||
|
@ -103,6 +104,7 @@ set(CLEMENTINE-MOC-HEADERS
|
|||
albumcoverloader.h
|
||||
m3uparser.h
|
||||
playlistmanager.h
|
||||
shufflerepeatwidget.h
|
||||
)
|
||||
|
||||
# UI files
|
||||
|
@ -122,6 +124,7 @@ set(CLEMENTINE-UI
|
|||
addstreamdialog.ui
|
||||
shortcutsdialog.ui
|
||||
albumcovermanager.ui
|
||||
shufflerepeatwidget.ui
|
||||
)
|
||||
|
||||
# Resource files
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "albumcovermanager.h"
|
||||
#include "m3uparser.h"
|
||||
#include "playlistmanager.h"
|
||||
#include "shufflerepeatwidget.h"
|
||||
|
||||
#include "qxtglobalshortcut.h"
|
||||
|
||||
|
@ -50,6 +51,7 @@ MainWindow::MainWindow(QNetworkAccessManager* network, QWidget *parent)
|
|||
tray_icon_(new SystemTrayIcon(this)),
|
||||
osd_(new OSD(tray_icon_, this)),
|
||||
track_slider_(new TrackSlider(this)),
|
||||
shuffle_repeat_widget_(new ShuffleRepeatWidget(this)),
|
||||
edit_tag_dialog_(new EditTagDialog(this)),
|
||||
multi_loading_indicator_(new MultiLoadingIndicator(this)),
|
||||
library_config_dialog_(new LibraryConfigDialog(this)),
|
||||
|
@ -264,6 +266,7 @@ MainWindow::MainWindow(QNetworkAccessManager* network, QWidget *parent)
|
|||
ui_.analyzer->set_engine(player_->GetEngine());
|
||||
|
||||
// Statusbar widgets
|
||||
ui_.statusBar->addPermanentWidget(shuffle_repeat_widget_);
|
||||
ui_.statusBar->addPermanentWidget(track_slider_);
|
||||
ui_.statusBar->addWidget(multi_loading_indicator_);
|
||||
multi_loading_indicator_->hide();
|
||||
|
|
|
@ -25,6 +25,7 @@ class About;
|
|||
class AddStreamDialog;
|
||||
class ShortcutsDialog;
|
||||
class AlbumCoverManager;
|
||||
class ShuffleRepeatWidget;
|
||||
|
||||
class QSortFilterProxyModel;
|
||||
class SystemTrayIcon;
|
||||
|
@ -107,6 +108,7 @@ class MainWindow : public QMainWindow {
|
|||
SystemTrayIcon* tray_icon_;
|
||||
OSD* osd_;
|
||||
TrackSlider* track_slider_;
|
||||
ShuffleRepeatWidget* shuffle_repeat_widget_;
|
||||
EditTagDialog* edit_tag_dialog_;
|
||||
MultiLoadingIndicator* multi_loading_indicator_;
|
||||
LibraryConfigDialog* library_config_dialog_;
|
||||
|
|
|
@ -0,0 +1,107 @@
|
|||
#include "shufflerepeatwidget.h"
|
||||
|
||||
#include <QMenu>
|
||||
#include <QActionGroup>
|
||||
#include <QSettings>
|
||||
#include <QtDebug>
|
||||
|
||||
const char* ShuffleRepeatWidget::kSettingsGroup = "ShuffleRepeat";
|
||||
|
||||
ShuffleRepeatWidget::ShuffleRepeatWidget(QWidget *parent)
|
||||
: QWidget(parent),
|
||||
repeat_menu_(new QMenu(this)),
|
||||
shuffle_menu_(new QMenu(this)),
|
||||
loading_(false),
|
||||
repeat_mode_(Repeat_Off),
|
||||
shuffle_mode_(Shuffle_Off)
|
||||
{
|
||||
ui_.setupUi(this);
|
||||
|
||||
QActionGroup* repeat_group = new QActionGroup(this);
|
||||
repeat_group->addAction(ui_.action_repeat_off);
|
||||
repeat_group->addAction(ui_.action_repeat_track);
|
||||
repeat_group->addAction(ui_.action_repeat_album);
|
||||
repeat_group->addAction(ui_.action_repeat_playlist);
|
||||
repeat_menu_->addActions(repeat_group->actions());
|
||||
ui_.repeat->setMenu(repeat_menu_);
|
||||
|
||||
QActionGroup* shuffle_group = new QActionGroup(this);
|
||||
shuffle_group->addAction(ui_.action_shuffle_off);
|
||||
shuffle_group->addAction(ui_.action_shuffle_all);
|
||||
shuffle_group->addAction(ui_.action_shuffle_album);
|
||||
shuffle_menu_->addActions(shuffle_group->actions());
|
||||
ui_.shuffle->setMenu(shuffle_menu_);
|
||||
|
||||
connect(repeat_group, SIGNAL(triggered(QAction*)), SLOT(RepeatActionTriggered(QAction*)));
|
||||
connect(shuffle_group, SIGNAL(triggered(QAction*)), SLOT(ShuffleActionTriggered(QAction*)));
|
||||
|
||||
Load();
|
||||
}
|
||||
|
||||
void ShuffleRepeatWidget::Load() {
|
||||
QSettings s;
|
||||
s.beginGroup(kSettingsGroup);
|
||||
|
||||
loading_ = true; // Stops these setter functions calling Save()
|
||||
SetShuffleMode(ShuffleMode(s.value("shuffle_mode", Shuffle_Off).toInt()));
|
||||
SetRepeatMode(RepeatMode(s.value("repeat_mode", Repeat_Off).toInt()));
|
||||
loading_ = false;
|
||||
}
|
||||
|
||||
void ShuffleRepeatWidget::Save() {
|
||||
if (loading_) return;
|
||||
|
||||
QSettings s;
|
||||
s.beginGroup(kSettingsGroup);
|
||||
|
||||
s.setValue("shuffle_mode", shuffle_mode_);
|
||||
s.setValue("repeat_mode", repeat_mode_);
|
||||
}
|
||||
|
||||
void ShuffleRepeatWidget::RepeatActionTriggered(QAction* action) {
|
||||
RepeatMode mode = Repeat_Off;
|
||||
if (action == ui_.action_repeat_track) mode = Repeat_Track;
|
||||
if (action == ui_.action_repeat_album) mode = Repeat_Album;
|
||||
if (action == ui_.action_repeat_playlist) mode = Repeat_Playlist;
|
||||
|
||||
SetRepeatMode(mode);
|
||||
}
|
||||
|
||||
void ShuffleRepeatWidget::ShuffleActionTriggered(QAction* action) {
|
||||
ShuffleMode mode = Shuffle_Off;
|
||||
if (action == ui_.action_shuffle_all) mode = Shuffle_All;
|
||||
if (action == ui_.action_shuffle_album) mode = Shuffle_Album;
|
||||
|
||||
SetShuffleMode(mode);
|
||||
}
|
||||
|
||||
void ShuffleRepeatWidget::SetRepeatMode(RepeatMode mode) {
|
||||
ui_.repeat->setChecked(mode != Repeat_Off);
|
||||
|
||||
switch(mode) {
|
||||
case Repeat_Off: ui_.action_repeat_off->setChecked(true); break;
|
||||
case Repeat_Track: ui_.action_repeat_track->setChecked(true); break;
|
||||
case Repeat_Album: ui_.action_repeat_album->setChecked(true); break;
|
||||
case Repeat_Playlist: ui_.action_repeat_playlist->setChecked(true); break;
|
||||
}
|
||||
|
||||
if (mode != repeat_mode_)
|
||||
emit RepeatModeChanged(mode);
|
||||
repeat_mode_ = mode;
|
||||
Save();
|
||||
}
|
||||
|
||||
void ShuffleRepeatWidget::SetShuffleMode(ShuffleMode mode) {
|
||||
ui_.shuffle->setChecked(mode != Shuffle_Off);
|
||||
|
||||
switch (mode) {
|
||||
case Shuffle_Off: ui_.action_shuffle_off->setChecked(true); break;
|
||||
case Shuffle_All: ui_.action_shuffle_all->setChecked(true); break;
|
||||
case Shuffle_Album: ui_.action_shuffle_album->setChecked(true); break;
|
||||
}
|
||||
|
||||
if (mode != shuffle_mode_)
|
||||
emit ShuffleModeChanged(mode);
|
||||
shuffle_mode_ = mode;
|
||||
Save();
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
#ifndef SHUFFLEREPEATWIDGET_H
|
||||
#define SHUFFLEREPEATWIDGET_H
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
class QMenu;
|
||||
|
||||
#include "ui_shufflerepeatwidget.h"
|
||||
|
||||
class ShuffleRepeatWidget : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
ShuffleRepeatWidget(QWidget *parent = 0);
|
||||
|
||||
enum RepeatMode {
|
||||
Repeat_Off = 0,
|
||||
Repeat_Track = 1,
|
||||
Repeat_Album = 2,
|
||||
Repeat_Playlist = 3,
|
||||
};
|
||||
enum ShuffleMode {
|
||||
Shuffle_Off = 0,
|
||||
Shuffle_All = 1,
|
||||
Shuffle_Album = 2,
|
||||
};
|
||||
|
||||
static const char* kSettingsGroup;
|
||||
|
||||
void Load();
|
||||
void Save();
|
||||
|
||||
public slots:
|
||||
void SetRepeatMode(RepeatMode mode);
|
||||
void SetShuffleMode(ShuffleMode mode);
|
||||
|
||||
signals:
|
||||
void RepeatModeChanged(RepeatMode mode);
|
||||
void ShuffleModeChanged(ShuffleMode mode);
|
||||
|
||||
private slots:
|
||||
void RepeatActionTriggered(QAction*);
|
||||
void ShuffleActionTriggered(QAction*);
|
||||
|
||||
private:
|
||||
Ui::ShuffleRepeatWidget ui_;
|
||||
|
||||
QMenu* repeat_menu_;
|
||||
QMenu* shuffle_menu_;
|
||||
|
||||
bool loading_;
|
||||
RepeatMode repeat_mode_;
|
||||
ShuffleMode shuffle_mode_;
|
||||
};
|
||||
|
||||
#endif // SHUFFLEREPEATWIDGET_H
|
|
@ -0,0 +1,151 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>ShuffleRepeatWidget</class>
|
||||
<widget class="QWidget" name="ShuffleRepeatWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>62</width>
|
||||
<height>37</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QToolButton, QToolButton:hover, QToolButton:pressed {
|
||||
border: 0px;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
#line {
|
||||
margin: 3px 0px 3px 0px;
|
||||
}</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QToolButton" name="repeat">
|
||||
<property name="toolTip">
|
||||
<string>Repeat</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>:/media-playlist-repeat-off.png</normaloff>
|
||||
<normalon>:/media-playlist-repeat.png</normalon>:/media-playlist-repeat-off.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>16</width>
|
||||
<height>16</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="popupMode">
|
||||
<enum>QToolButton::InstantPopup</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="shuffle">
|
||||
<property name="toolTip">
|
||||
<string>Shuffle</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>:/media-playlist-shuffle-off.png</normaloff>
|
||||
<normalon>:/media-playlist-shuffle.png</normalon>:/media-playlist-shuffle-off.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>16</width>
|
||||
<height>16</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="popupMode">
|
||||
<enum>QToolButton::InstantPopup</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<action name="action_repeat_off">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Don't repeat</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_repeat_track">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Repeat track</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_repeat_album">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Repeat album</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_repeat_playlist">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Repeat playlist</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_shuffle_off">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Don't shuffle</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_shuffle_album">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Shuffle by album</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_shuffle_all">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Shuffle all</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
Loading…
Reference in New Issue