Move queuemanager to fancytabbar
This commit is contained in:
parent
3ef0bf60d0
commit
c97bc55c6f
|
@ -10,6 +10,7 @@ Unreleased:
|
|||
* Added Deezer support
|
||||
* New improved fancy tabwidget
|
||||
* Fixed bug not loading engine settings
|
||||
* Moved queue manager into tabbar for easier access
|
||||
|
||||
Version 0.3.3:
|
||||
|
||||
|
|
|
@ -164,11 +164,12 @@ set(SOURCES
|
|||
playlist/playlisttabbar.cpp
|
||||
playlist/playlistundocommands.cpp
|
||||
playlist/playlistview.cpp
|
||||
playlist/queue.cpp
|
||||
playlist/queuemanager.cpp
|
||||
playlist/songloaderinserter.cpp
|
||||
playlist/songplaylistitem.cpp
|
||||
|
||||
queue/queue.cpp
|
||||
queue/queueview.cpp
|
||||
|
||||
playlistparsers/asxiniparser.cpp
|
||||
playlistparsers/asxparser.cpp
|
||||
playlistparsers/cueparser.cpp
|
||||
|
@ -331,11 +332,12 @@ set(HEADERS
|
|||
playlist/playlisttabbar.h
|
||||
playlist/playlistview.h
|
||||
playlist/playlistitemmimedata.h
|
||||
playlist/queue.h
|
||||
playlist/queuemanager.h
|
||||
playlist/songloaderinserter.h
|
||||
playlist/songmimedata.h
|
||||
|
||||
queue/queue.h
|
||||
queue/queueview.h
|
||||
|
||||
playlistparsers/asxiniparser.h
|
||||
playlistparsers/asxparser.h
|
||||
playlistparsers/cueparser.h
|
||||
|
@ -446,7 +448,8 @@ set(UI
|
|||
playlist/playlistlistcontainer.ui
|
||||
playlist/playlistsaveoptionsdialog.ui
|
||||
playlist/playlistsequence.ui
|
||||
playlist/queuemanager.ui
|
||||
|
||||
queue/queueview.ui
|
||||
|
||||
covermanager/albumcoverexport.ui
|
||||
covermanager/albumcovermanager.ui
|
||||
|
|
|
@ -112,8 +112,8 @@
|
|||
#include "playlist/playlistmanager.h"
|
||||
#include "playlist/playlistsequence.h"
|
||||
#include "playlist/playlistview.h"
|
||||
#include "playlist/queue.h"
|
||||
#include "playlist/queuemanager.h"
|
||||
#include "queue/queue.h"
|
||||
#include "queue/queueview.h"
|
||||
#include "playlistparsers/playlistparser.h"
|
||||
#include "analyzer/analyzercontainer.h"
|
||||
#include "equalizer/equalizer.h"
|
||||
|
@ -187,6 +187,7 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co
|
|||
device_view_(device_view_container_->view()),
|
||||
#endif
|
||||
playlist_list_(new PlaylistListContainer(this)),
|
||||
queue_view_(new QueueView(this)),
|
||||
settings_dialog_(std::bind(&MainWindow::CreateSettingsDialog, this)),
|
||||
cover_manager_([=]() {
|
||||
AlbumCoverManager *cover_manager = new AlbumCoverManager(app, app->collection_backend());
|
||||
|
@ -206,11 +207,6 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co
|
|||
return dialog;
|
||||
}),
|
||||
#endif
|
||||
queue_manager_([=]() {
|
||||
QueueManager *manager = new QueueManager;
|
||||
manager->SetPlaylistManager(app->playlist_manager());
|
||||
return manager;
|
||||
}),
|
||||
#ifdef HAVE_STREAM_TIDAL
|
||||
tidal_search_view_(new InternetSearchView(app_, app_->tidal_search(), TidalSettingsPage::kSettingsGroup, SettingsDialog::Page_Tidal, this)),
|
||||
#endif
|
||||
|
@ -268,6 +264,7 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co
|
|||
ui_->tabs->addTab(collection_view_, IconLoader::Load("vinyl"), "Collection");
|
||||
ui_->tabs->addTab(file_view_, IconLoader::Load("document-open"), "Files");
|
||||
ui_->tabs->addTab(playlist_list_, IconLoader::Load("view-media-playlist"), "Playlists");
|
||||
ui_->tabs->addTab(queue_view_, IconLoader::Load("footsteps"), "Queue");
|
||||
#ifndef Q_OS_WIN
|
||||
ui_->tabs->addTab(device_view_, IconLoader::Load("device"), "Devices");
|
||||
#endif
|
||||
|
@ -360,7 +357,6 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co
|
|||
// Configure
|
||||
|
||||
ui_->action_cover_manager->setIcon(IconLoader::Load("document-download"));
|
||||
ui_->action_queue_manager->setIcon(IconLoader::Load("footsteps"));
|
||||
ui_->action_edit_track->setIcon(IconLoader::Load("edit-rename"));
|
||||
ui_->action_equalizer->setIcon(IconLoader::Load("equalizer"));
|
||||
ui_->action_update_collection->setIcon(IconLoader::Load("view-refresh"));
|
||||
|
@ -413,7 +409,6 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co
|
|||
connect(ui_->action_jump, SIGNAL(triggered()), ui_->playlist->view(), SLOT(JumpToCurrentlyPlayingTrack()));
|
||||
connect(ui_->action_update_collection, SIGNAL(triggered()), app_->collection(), SLOT(IncrementalScan()));
|
||||
connect(ui_->action_full_collection_scan, SIGNAL(triggered()), app_->collection(), SLOT(FullScan()));
|
||||
connect(ui_->action_queue_manager, SIGNAL(triggered()), SLOT(ShowQueueManager()));
|
||||
//connect(ui_->action_add_files_to_transcoder, SIGNAL(triggered()), SLOT(AddFilesToTranscoder()));
|
||||
|
||||
// Playlist view actions
|
||||
|
@ -699,6 +694,8 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co
|
|||
// Load playlists
|
||||
app_->playlist_manager()->Init(app_->collection_backend(), app_->playlist_backend(), ui_->playlist_sequence, ui_->playlist);
|
||||
|
||||
queue_view_->SetPlaylistManager(app_->playlist_manager());
|
||||
|
||||
// This connection must be done after the playlists have been initialized.
|
||||
connect(this, SIGNAL(StopAfterToggled(bool)), osd_, SLOT(StopAfterToggle(bool)));
|
||||
|
||||
|
@ -2224,14 +2221,6 @@ void MainWindow::CheckFullRescanRevisions() {
|
|||
}
|
||||
}
|
||||
|
||||
void MainWindow::ShowQueueManager() {
|
||||
//if (!queue_manager_) {
|
||||
//queue_manager_.reset(new QueueManager);
|
||||
//queue_manager_->SetPlaylistManager(app_->playlist_manager());
|
||||
//}
|
||||
queue_manager_->show();
|
||||
}
|
||||
|
||||
void MainWindow::PlaylistViewSelectionModelChanged() {
|
||||
|
||||
connect(ui_->playlist->view()->selectionModel(),SIGNAL(currentChanged(QModelIndex, QModelIndex)), SLOT(PlaylistCurrentChanged(QModelIndex)));
|
||||
|
|
|
@ -78,7 +78,7 @@ class GlobalShortcuts;
|
|||
class MimeData;
|
||||
class OrganiseDialog;
|
||||
class PlaylistListContainer;
|
||||
class QueueManager;
|
||||
class QueueView;
|
||||
class Song;
|
||||
class SystemTrayIcon;
|
||||
#if defined(HAVE_GSTREAMER) && defined(HAVE_CHROMAPRINT)
|
||||
|
@ -252,7 +252,6 @@ signals:
|
|||
void ShowTranscodeDialog();
|
||||
#endif
|
||||
void ShowErrorDialog(const QString& message);
|
||||
void ShowQueueManager();
|
||||
void EnsureSettingsDialogCreated();
|
||||
void EnsureEditTagDialogCreated();
|
||||
SettingsDialog *CreateSettingsDialog();
|
||||
|
@ -317,6 +316,7 @@ signals:
|
|||
DeviceView *device_view_;
|
||||
#endif
|
||||
PlaylistListContainer *playlist_list_;
|
||||
QueueView *queue_view_;
|
||||
|
||||
Lazy<SettingsDialog> settings_dialog_;
|
||||
Lazy<AlbumCoverManager> cover_manager_;
|
||||
|
@ -328,7 +328,6 @@ signals:
|
|||
#ifdef HAVE_GSTREAMER
|
||||
Lazy<OrganiseDialog> organise_dialog_;
|
||||
#endif
|
||||
Lazy<QueueManager> queue_manager_;
|
||||
|
||||
#if defined(HAVE_GSTREAMER) && defined(HAVE_CHROMAPRINT)
|
||||
std::unique_ptr<TagFetcher> tag_fetcher_;
|
||||
|
|
|
@ -435,7 +435,6 @@
|
|||
<string>&Tools</string>
|
||||
</property>
|
||||
<addaction name="action_cover_manager"/>
|
||||
<addaction name="action_queue_manager"/>
|
||||
<addaction name="action_equalizer"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_update_collection"/>
|
||||
|
@ -674,11 +673,6 @@
|
|||
<string>&Update changed collection folders</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_queue_manager">
|
||||
<property name="text">
|
||||
<string>&Queue Manager</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_about_qt">
|
||||
<property name="text">
|
||||
<string>About &Qt</string>
|
||||
|
|
|
@ -71,6 +71,7 @@
|
|||
#include "collection/collection.h"
|
||||
#include "collection/collectionbackend.h"
|
||||
#include "collection/collectionplaylistitem.h"
|
||||
#include "queue/queue.h"
|
||||
#include "playlist.h"
|
||||
#include "playlistitem.h"
|
||||
#include "playlistview.h"
|
||||
|
@ -79,7 +80,6 @@
|
|||
#include "playlistfilter.h"
|
||||
#include "playlistitemmimedata.h"
|
||||
#include "playlistundocommands.h"
|
||||
#include "queue.h"
|
||||
#include "songloaderinserter.h"
|
||||
#include "songmimedata.h"
|
||||
#include "songplaylistitem.h"
|
||||
|
|
|
@ -38,14 +38,22 @@
|
|||
#include <QAbstractProxyModel>
|
||||
#include <QPersistentModelIndex>
|
||||
|
||||
#include "playlist.h"
|
||||
#include "core/utilities.h"
|
||||
#include "playlist/playlist.h"
|
||||
#include "queue.h"
|
||||
|
||||
using std::stable_sort;
|
||||
|
||||
const char *Queue::kRowsMimetype = "application/x-strawberry-queue-rows";
|
||||
|
||||
Queue::Queue(QObject *parent) : QAbstractProxyModel(parent) {}
|
||||
Queue::Queue(Playlist *parent) : QAbstractProxyModel(parent), playlist_(parent), total_length_ns_(0) {
|
||||
|
||||
connect(this, SIGNAL(ItemCountChanged(int)), SLOT(UpdateTotalLength()));
|
||||
connect(this, SIGNAL(TotalLengthChanged(quint64)), SLOT(UpdateSummaryText()));
|
||||
|
||||
UpdateSummaryText();
|
||||
|
||||
}
|
||||
|
||||
QModelIndex Queue::mapFromSource(const QModelIndex &source_index) const {
|
||||
|
||||
|
@ -101,6 +109,7 @@ void Queue::SourceDataChanged(const QModelIndex &top_left, const QModelIndex &bo
|
|||
|
||||
emit dataChanged(proxy_index, proxy_index);
|
||||
}
|
||||
emit ItemCountChanged(this->ItemCount());
|
||||
|
||||
}
|
||||
|
||||
|
@ -114,6 +123,7 @@ void Queue::SourceLayoutChanged() {
|
|||
--i;
|
||||
}
|
||||
}
|
||||
emit ItemCountChanged(this->ItemCount());
|
||||
|
||||
}
|
||||
|
||||
|
@ -176,20 +186,83 @@ void Queue::ToggleTracks(const QModelIndexList &source_indexes) {
|
|||
|
||||
}
|
||||
|
||||
void Queue::InsertFirst(const QModelIndexList &source_indexes) {
|
||||
|
||||
for (const QModelIndex &source_index : source_indexes) {
|
||||
QModelIndex proxy_index = mapFromSource(source_index);
|
||||
if (proxy_index.isValid()) {
|
||||
// Already in the queue, so remove it to be reinserted later
|
||||
const int row = proxy_index.row();
|
||||
beginRemoveRows(QModelIndex(), row, row);
|
||||
source_indexes_.removeAt(row);
|
||||
endRemoveRows();
|
||||
}
|
||||
}
|
||||
|
||||
const int rows = source_indexes.count();
|
||||
// Enqueue the tracks at the beginning
|
||||
beginInsertRows(QModelIndex(), 0, rows - 1);
|
||||
int offset = 0;
|
||||
for (const QModelIndex& source_index : source_indexes) {
|
||||
source_indexes_.insert(offset, QPersistentModelIndex(source_index));
|
||||
offset++;
|
||||
}
|
||||
endInsertRows();
|
||||
|
||||
}
|
||||
|
||||
int Queue::PositionOf(const QModelIndex &source_index) const {
|
||||
return mapFromSource(source_index).row();
|
||||
}
|
||||
|
||||
bool Queue::is_empty() const {
|
||||
return source_indexes_.isEmpty();
|
||||
bool Queue::is_empty() const { return source_indexes_.isEmpty(); }
|
||||
|
||||
int Queue::ItemCount() const { return source_indexes_.length(); }
|
||||
|
||||
quint64 Queue::GetTotalLength() const { return total_length_ns_; }
|
||||
|
||||
void Queue::UpdateTotalLength() {
|
||||
|
||||
quint64 total = 0;
|
||||
|
||||
for (QPersistentModelIndex row : source_indexes_) {
|
||||
int id = row.row();
|
||||
|
||||
Q_ASSERT(playlist_->has_item_at(id));
|
||||
|
||||
quint64 length = playlist_->item_at(id)->Metadata().length_nanosec();
|
||||
if (length > 0) total += length;
|
||||
}
|
||||
|
||||
total_length_ns_ = total;
|
||||
|
||||
emit TotalLengthChanged(total);
|
||||
|
||||
}
|
||||
|
||||
void Queue::UpdateSummaryText() {
|
||||
|
||||
QString summary;
|
||||
int tracks = this->ItemCount();
|
||||
quint64 nanoseconds = this->GetTotalLength();
|
||||
|
||||
summary += tracks == 1 ? tr("1 track") : tr("%1 tracks").arg(tracks);
|
||||
|
||||
if (nanoseconds)
|
||||
summary += " - [ " + Utilities::WordyTimeNanosec(nanoseconds) + " ]";
|
||||
|
||||
emit SummaryTextChanged(summary);
|
||||
|
||||
}
|
||||
|
||||
void Queue::Clear() {
|
||||
|
||||
if (source_indexes_.isEmpty()) return;
|
||||
|
||||
beginRemoveRows(QModelIndex(), 0, source_indexes_.count() - 1);
|
||||
source_indexes_.clear();
|
||||
endRemoveRows();
|
||||
|
||||
}
|
||||
|
||||
void Queue::Move(const QList<int> &proxy_rows, int pos) {
|
|
@ -34,11 +34,13 @@
|
|||
#include <QStringList>
|
||||
#include <QMimeData>
|
||||
|
||||
#include "playlist/playlist.h"
|
||||
|
||||
class Queue : public QAbstractProxyModel {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Queue(QObject *parent = nullptr);
|
||||
Queue(Playlist *parent = nullptr);
|
||||
|
||||
static const char *kRowsMimetype;
|
||||
|
||||
|
@ -47,10 +49,13 @@ class Queue : public QAbstractProxyModel {
|
|||
int PositionOf(const QModelIndex &source_index) const;
|
||||
bool ContainsSourceRow(int source_row) const;
|
||||
int PeekNext() const;
|
||||
int ItemCount() const;
|
||||
quint64 GetTotalLength() const;
|
||||
|
||||
// Modify the queue
|
||||
int TakeNext();
|
||||
void ToggleTracks(const QModelIndexList &source_indexes);
|
||||
void InsertFirst(const QModelIndexList &source_indexes);
|
||||
void Clear();
|
||||
void Move(const QList<int> &proxy_rows, int pos);
|
||||
void MoveUp(int row);
|
||||
|
@ -75,12 +80,24 @@ class Queue : public QAbstractProxyModel {
|
|||
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
|
||||
Qt::ItemFlags flags(const QModelIndex &index) const;
|
||||
|
||||
private slots:
|
||||
public slots:
|
||||
void UpdateSummaryText();
|
||||
|
||||
signals:
|
||||
void TotalLengthChanged(const quint64 length);
|
||||
void ItemCountChanged(const int count);
|
||||
void SummaryTextChanged(const QString& message);
|
||||
|
||||
private slots:
|
||||
void SourceDataChanged(const QModelIndex &top_left, const QModelIndex &bottom_right);
|
||||
void SourceLayoutChanged();
|
||||
void UpdateTotalLength();
|
||||
|
||||
private:
|
||||
private:
|
||||
QList<QPersistentModelIndex> source_indexes_;
|
||||
const Playlist *playlist_;
|
||||
quint64 total_length_ns_;
|
||||
|
||||
};
|
||||
|
||||
#endif // QUEUE_H
|
|
@ -22,7 +22,6 @@
|
|||
#include <algorithm>
|
||||
|
||||
#include <QWidget>
|
||||
#include <QDialog>
|
||||
#include <QAbstractItemModel>
|
||||
#include <QItemSelectionModel>
|
||||
#include <QKeySequence>
|
||||
|
@ -31,22 +30,24 @@
|
|||
#include <QShortcut>
|
||||
#include <QTreeView>
|
||||
#include <QtAlgorithms>
|
||||
#include <QTimer>
|
||||
|
||||
#include "core/iconloader.h"
|
||||
#include "playlist.h"
|
||||
#include "playlistdelegates.h"
|
||||
#include "playlistmanager.h"
|
||||
#include "playlist/playlist.h"
|
||||
#include "playlist/playlistdelegates.h"
|
||||
#include "playlist/playlistmanager.h"
|
||||
#include "queue.h"
|
||||
#include "queuemanager.h"
|
||||
#include "ui_queuemanager.h"
|
||||
#include "queueview.h"
|
||||
#include "ui_queueview.h"
|
||||
|
||||
using std::stable_sort;
|
||||
|
||||
QueueManager::QueueManager(QWidget *parent)
|
||||
: QDialog(parent),
|
||||
ui_(new Ui_QueueManager),
|
||||
QueueView::QueueView(QWidget *parent)
|
||||
: QWidget(parent),
|
||||
ui_(new Ui_QueueView),
|
||||
playlists_(nullptr),
|
||||
current_playlist_(nullptr) {
|
||||
|
||||
ui_->setupUi(this);
|
||||
ui_->list->setItemDelegate(new QueuedItemDelegate(this, 0));
|
||||
|
||||
|
@ -65,16 +66,13 @@ QueueManager::QueueManager(QWidget *parent)
|
|||
connect(ui_->remove, SIGNAL(clicked()), SLOT(Remove()));
|
||||
connect(ui_->clear, SIGNAL(clicked()), SLOT(Clear()));
|
||||
|
||||
QShortcut *close = new QShortcut(QKeySequence::Close, this);
|
||||
connect(close, SIGNAL(activated()), SLOT(close()));
|
||||
|
||||
}
|
||||
|
||||
QueueManager::~QueueManager() {
|
||||
QueueView::~QueueView() {
|
||||
delete ui_;
|
||||
}
|
||||
|
||||
void QueueManager::SetPlaylistManager(PlaylistManager *manager) {
|
||||
void QueueView::SetPlaylistManager(PlaylistManager *manager) {
|
||||
|
||||
playlists_ = manager;
|
||||
|
||||
|
@ -83,12 +81,13 @@ void QueueManager::SetPlaylistManager(PlaylistManager *manager) {
|
|||
|
||||
}
|
||||
|
||||
void QueueManager::CurrentPlaylistChanged(Playlist *playlist) {
|
||||
void QueueView::CurrentPlaylistChanged(Playlist *playlist) {
|
||||
|
||||
if (current_playlist_) {
|
||||
disconnect(current_playlist_->queue(), SIGNAL(rowsInserted(QModelIndex, int, int)), this, SLOT(UpdateButtonState()));
|
||||
disconnect(current_playlist_->queue(), SIGNAL(rowsRemoved(QModelIndex, int, int)), this, SLOT(UpdateButtonState()));
|
||||
disconnect(current_playlist_->queue(), SIGNAL(layoutChanged()), this, SLOT(UpdateButtonState()));
|
||||
disconnect(current_playlist_->queue(), SIGNAL(SummaryTextChanged(QString)), ui_->summary, SLOT(setText(QString)));
|
||||
disconnect(current_playlist_, SIGNAL(destroyed()), this, SLOT(PlaylistDestroyed()));
|
||||
}
|
||||
|
||||
|
@ -97,15 +96,18 @@ void QueueManager::CurrentPlaylistChanged(Playlist *playlist) {
|
|||
connect(current_playlist_->queue(), SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(UpdateButtonState()));
|
||||
connect(current_playlist_->queue(), SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(UpdateButtonState()));
|
||||
connect(current_playlist_->queue(), SIGNAL(layoutChanged()), this, SLOT(UpdateButtonState()));
|
||||
connect(current_playlist_->queue(), SIGNAL(SummaryTextChanged(QString)), ui_->summary, SLOT(setText(QString)));
|
||||
connect(current_playlist_, SIGNAL(destroyed()), this, SLOT(PlaylistDestroyed()));
|
||||
|
||||
ui_->list->setModel(current_playlist_->queue());
|
||||
|
||||
connect(ui_->list->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), SLOT(UpdateButtonState()));
|
||||
|
||||
QTimer::singleShot(0, current_playlist_->queue(), SLOT(UpdateSummaryText()));
|
||||
|
||||
}
|
||||
|
||||
void QueueManager::MoveUp() {
|
||||
void QueueView::MoveUp() {
|
||||
|
||||
QModelIndexList indexes = ui_->list->selectionModel()->selectedRows();
|
||||
std::stable_sort(indexes.begin(), indexes.end());
|
||||
|
@ -118,7 +120,7 @@ void QueueManager::MoveUp() {
|
|||
|
||||
}
|
||||
|
||||
void QueueManager::MoveDown() {
|
||||
void QueueView::MoveDown() {
|
||||
|
||||
QModelIndexList indexes = ui_->list->selectionModel()->selectedRows();
|
||||
std::stable_sort(indexes.begin(), indexes.end());
|
||||
|
@ -132,11 +134,11 @@ void QueueManager::MoveDown() {
|
|||
|
||||
}
|
||||
|
||||
void QueueManager::Clear() {
|
||||
void QueueView::Clear() {
|
||||
current_playlist_->queue()->Clear();
|
||||
}
|
||||
|
||||
void QueueManager::Remove() {
|
||||
void QueueView::Remove() {
|
||||
|
||||
// collect the rows to be removed
|
||||
QList<int> row_list;
|
||||
|
@ -148,7 +150,7 @@ void QueueManager::Remove() {
|
|||
|
||||
}
|
||||
|
||||
void QueueManager::UpdateButtonState() {
|
||||
void QueueView::UpdateButtonState() {
|
||||
|
||||
const QModelIndex current = ui_->list->selectionModel()->currentIndex();
|
||||
|
||||
|
@ -167,7 +169,7 @@ void QueueManager::UpdateButtonState() {
|
|||
|
||||
}
|
||||
|
||||
void QueueManager::PlaylistDestroyed() {
|
||||
void QueueView::PlaylistDestroyed() {
|
||||
current_playlist_ = nullptr;
|
||||
// We'll get another CurrentPlaylistChanged() soon
|
||||
}
|
|
@ -18,8 +18,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#ifndef QUEUEMANAGER_H
|
||||
#define QUEUEMANAGER_H
|
||||
#ifndef QUEUEVIEW_H
|
||||
#define QUEUEVIEW_H
|
||||
|
||||
#include "config.h"
|
||||
|
||||
|
@ -30,14 +30,14 @@
|
|||
|
||||
class Playlist;
|
||||
class PlaylistManager;
|
||||
class Ui_QueueManager;
|
||||
class Ui_QueueView;
|
||||
|
||||
class QueueManager : public QDialog {
|
||||
class QueueView : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QueueManager(QWidget *parent = nullptr);
|
||||
~QueueManager();
|
||||
QueueView(QWidget *parent = nullptr);
|
||||
~QueueView();
|
||||
|
||||
void SetPlaylistManager(PlaylistManager *manager);
|
||||
|
||||
|
@ -52,10 +52,10 @@ private slots:
|
|||
void Clear();
|
||||
|
||||
private:
|
||||
Ui_QueueManager *ui_;
|
||||
Ui_QueueView *ui_;
|
||||
|
||||
PlaylistManager *playlists_;
|
||||
Playlist *current_playlist_;
|
||||
};
|
||||
|
||||
#endif // QUEUEMANAGER_H
|
||||
#endif // QUEUEVIEW_H
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>QueueManager</class>
|
||||
<widget class="QDialog" name="QueueManager">
|
||||
<class>QueueView</class>
|
||||
<widget class="QWidget" name="QueueView">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
|
@ -11,15 +11,127 @@
|
|||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Queue Manager</string>
|
||||
<string>QueueView</string>
|
||||
</property>
|
||||
<property name="windowIcon">
|
||||
<iconset resource="../../data/icons.qrc">
|
||||
<iconset>
|
||||
<normaloff>:/icons/64x64/strawberry.png</normaloff>:/icons/64x64/strawberry.png</iconset>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<layout class="QVBoxLayout" name="layout_queueview">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QToolButton" name="move_down">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Move down</string>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>16</width>
|
||||
<height>16</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+↑</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="move_up">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Move up</string>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>16</width>
|
||||
<height>16</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+↓</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="remove">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Remove</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="clear">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Clear</string>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>16</width>
|
||||
<height>16</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+K</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="spacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="summary">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTreeView" name="list">
|
||||
<property name="acceptDrops">
|
||||
|
@ -54,143 +166,10 @@
|
|||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="move_up">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Move up</string>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>16</width>
|
||||
<height>16</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+Up</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="move_down">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Move down</string>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>16</width>
|
||||
<height>16</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+Down</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="remove">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Remove</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="clear">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Clear</string>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>16</width>
|
||||
<height>16</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+K</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Close</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../../data/data.qrc"/>
|
||||
<include location="../../data/icons.qrc"/>
|
||||
</resources>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>QueueManager</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>QueueManager</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
Loading…
Reference in New Issue