Move queuemanager to fancytabbar
This commit is contained in:
parent
3ef0bf60d0
commit
c97bc55c6f
@ -10,6 +10,7 @@ Unreleased:
|
|||||||
* Added Deezer support
|
* Added Deezer support
|
||||||
* New improved fancy tabwidget
|
* New improved fancy tabwidget
|
||||||
* Fixed bug not loading engine settings
|
* Fixed bug not loading engine settings
|
||||||
|
* Moved queue manager into tabbar for easier access
|
||||||
|
|
||||||
Version 0.3.3:
|
Version 0.3.3:
|
||||||
|
|
||||||
|
@ -164,11 +164,12 @@ set(SOURCES
|
|||||||
playlist/playlisttabbar.cpp
|
playlist/playlisttabbar.cpp
|
||||||
playlist/playlistundocommands.cpp
|
playlist/playlistundocommands.cpp
|
||||||
playlist/playlistview.cpp
|
playlist/playlistview.cpp
|
||||||
playlist/queue.cpp
|
|
||||||
playlist/queuemanager.cpp
|
|
||||||
playlist/songloaderinserter.cpp
|
playlist/songloaderinserter.cpp
|
||||||
playlist/songplaylistitem.cpp
|
playlist/songplaylistitem.cpp
|
||||||
|
|
||||||
|
queue/queue.cpp
|
||||||
|
queue/queueview.cpp
|
||||||
|
|
||||||
playlistparsers/asxiniparser.cpp
|
playlistparsers/asxiniparser.cpp
|
||||||
playlistparsers/asxparser.cpp
|
playlistparsers/asxparser.cpp
|
||||||
playlistparsers/cueparser.cpp
|
playlistparsers/cueparser.cpp
|
||||||
@ -331,11 +332,12 @@ set(HEADERS
|
|||||||
playlist/playlisttabbar.h
|
playlist/playlisttabbar.h
|
||||||
playlist/playlistview.h
|
playlist/playlistview.h
|
||||||
playlist/playlistitemmimedata.h
|
playlist/playlistitemmimedata.h
|
||||||
playlist/queue.h
|
|
||||||
playlist/queuemanager.h
|
|
||||||
playlist/songloaderinserter.h
|
playlist/songloaderinserter.h
|
||||||
playlist/songmimedata.h
|
playlist/songmimedata.h
|
||||||
|
|
||||||
|
queue/queue.h
|
||||||
|
queue/queueview.h
|
||||||
|
|
||||||
playlistparsers/asxiniparser.h
|
playlistparsers/asxiniparser.h
|
||||||
playlistparsers/asxparser.h
|
playlistparsers/asxparser.h
|
||||||
playlistparsers/cueparser.h
|
playlistparsers/cueparser.h
|
||||||
@ -446,7 +448,8 @@ set(UI
|
|||||||
playlist/playlistlistcontainer.ui
|
playlist/playlistlistcontainer.ui
|
||||||
playlist/playlistsaveoptionsdialog.ui
|
playlist/playlistsaveoptionsdialog.ui
|
||||||
playlist/playlistsequence.ui
|
playlist/playlistsequence.ui
|
||||||
playlist/queuemanager.ui
|
|
||||||
|
queue/queueview.ui
|
||||||
|
|
||||||
covermanager/albumcoverexport.ui
|
covermanager/albumcoverexport.ui
|
||||||
covermanager/albumcovermanager.ui
|
covermanager/albumcovermanager.ui
|
||||||
|
@ -112,8 +112,8 @@
|
|||||||
#include "playlist/playlistmanager.h"
|
#include "playlist/playlistmanager.h"
|
||||||
#include "playlist/playlistsequence.h"
|
#include "playlist/playlistsequence.h"
|
||||||
#include "playlist/playlistview.h"
|
#include "playlist/playlistview.h"
|
||||||
#include "playlist/queue.h"
|
#include "queue/queue.h"
|
||||||
#include "playlist/queuemanager.h"
|
#include "queue/queueview.h"
|
||||||
#include "playlistparsers/playlistparser.h"
|
#include "playlistparsers/playlistparser.h"
|
||||||
#include "analyzer/analyzercontainer.h"
|
#include "analyzer/analyzercontainer.h"
|
||||||
#include "equalizer/equalizer.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()),
|
device_view_(device_view_container_->view()),
|
||||||
#endif
|
#endif
|
||||||
playlist_list_(new PlaylistListContainer(this)),
|
playlist_list_(new PlaylistListContainer(this)),
|
||||||
|
queue_view_(new QueueView(this)),
|
||||||
settings_dialog_(std::bind(&MainWindow::CreateSettingsDialog, this)),
|
settings_dialog_(std::bind(&MainWindow::CreateSettingsDialog, this)),
|
||||||
cover_manager_([=]() {
|
cover_manager_([=]() {
|
||||||
AlbumCoverManager *cover_manager = new AlbumCoverManager(app, app->collection_backend());
|
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;
|
return dialog;
|
||||||
}),
|
}),
|
||||||
#endif
|
#endif
|
||||||
queue_manager_([=]() {
|
|
||||||
QueueManager *manager = new QueueManager;
|
|
||||||
manager->SetPlaylistManager(app->playlist_manager());
|
|
||||||
return manager;
|
|
||||||
}),
|
|
||||||
#ifdef HAVE_STREAM_TIDAL
|
#ifdef HAVE_STREAM_TIDAL
|
||||||
tidal_search_view_(new InternetSearchView(app_, app_->tidal_search(), TidalSettingsPage::kSettingsGroup, SettingsDialog::Page_Tidal, this)),
|
tidal_search_view_(new InternetSearchView(app_, app_->tidal_search(), TidalSettingsPage::kSettingsGroup, SettingsDialog::Page_Tidal, this)),
|
||||||
#endif
|
#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(collection_view_, IconLoader::Load("vinyl"), "Collection");
|
||||||
ui_->tabs->addTab(file_view_, IconLoader::Load("document-open"), "Files");
|
ui_->tabs->addTab(file_view_, IconLoader::Load("document-open"), "Files");
|
||||||
ui_->tabs->addTab(playlist_list_, IconLoader::Load("view-media-playlist"), "Playlists");
|
ui_->tabs->addTab(playlist_list_, IconLoader::Load("view-media-playlist"), "Playlists");
|
||||||
|
ui_->tabs->addTab(queue_view_, IconLoader::Load("footsteps"), "Queue");
|
||||||
#ifndef Q_OS_WIN
|
#ifndef Q_OS_WIN
|
||||||
ui_->tabs->addTab(device_view_, IconLoader::Load("device"), "Devices");
|
ui_->tabs->addTab(device_view_, IconLoader::Load("device"), "Devices");
|
||||||
#endif
|
#endif
|
||||||
@ -360,7 +357,6 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co
|
|||||||
// Configure
|
// Configure
|
||||||
|
|
||||||
ui_->action_cover_manager->setIcon(IconLoader::Load("document-download"));
|
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_edit_track->setIcon(IconLoader::Load("edit-rename"));
|
||||||
ui_->action_equalizer->setIcon(IconLoader::Load("equalizer"));
|
ui_->action_equalizer->setIcon(IconLoader::Load("equalizer"));
|
||||||
ui_->action_update_collection->setIcon(IconLoader::Load("view-refresh"));
|
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_jump, SIGNAL(triggered()), ui_->playlist->view(), SLOT(JumpToCurrentlyPlayingTrack()));
|
||||||
connect(ui_->action_update_collection, SIGNAL(triggered()), app_->collection(), SLOT(IncrementalScan()));
|
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_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()));
|
//connect(ui_->action_add_files_to_transcoder, SIGNAL(triggered()), SLOT(AddFilesToTranscoder()));
|
||||||
|
|
||||||
// Playlist view actions
|
// Playlist view actions
|
||||||
@ -699,6 +694,8 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co
|
|||||||
// Load playlists
|
// Load playlists
|
||||||
app_->playlist_manager()->Init(app_->collection_backend(), app_->playlist_backend(), ui_->playlist_sequence, ui_->playlist);
|
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.
|
// This connection must be done after the playlists have been initialized.
|
||||||
connect(this, SIGNAL(StopAfterToggled(bool)), osd_, SLOT(StopAfterToggle(bool)));
|
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() {
|
void MainWindow::PlaylistViewSelectionModelChanged() {
|
||||||
|
|
||||||
connect(ui_->playlist->view()->selectionModel(),SIGNAL(currentChanged(QModelIndex, QModelIndex)), SLOT(PlaylistCurrentChanged(QModelIndex)));
|
connect(ui_->playlist->view()->selectionModel(),SIGNAL(currentChanged(QModelIndex, QModelIndex)), SLOT(PlaylistCurrentChanged(QModelIndex)));
|
||||||
|
@ -78,7 +78,7 @@ class GlobalShortcuts;
|
|||||||
class MimeData;
|
class MimeData;
|
||||||
class OrganiseDialog;
|
class OrganiseDialog;
|
||||||
class PlaylistListContainer;
|
class PlaylistListContainer;
|
||||||
class QueueManager;
|
class QueueView;
|
||||||
class Song;
|
class Song;
|
||||||
class SystemTrayIcon;
|
class SystemTrayIcon;
|
||||||
#if defined(HAVE_GSTREAMER) && defined(HAVE_CHROMAPRINT)
|
#if defined(HAVE_GSTREAMER) && defined(HAVE_CHROMAPRINT)
|
||||||
@ -252,7 +252,6 @@ signals:
|
|||||||
void ShowTranscodeDialog();
|
void ShowTranscodeDialog();
|
||||||
#endif
|
#endif
|
||||||
void ShowErrorDialog(const QString& message);
|
void ShowErrorDialog(const QString& message);
|
||||||
void ShowQueueManager();
|
|
||||||
void EnsureSettingsDialogCreated();
|
void EnsureSettingsDialogCreated();
|
||||||
void EnsureEditTagDialogCreated();
|
void EnsureEditTagDialogCreated();
|
||||||
SettingsDialog *CreateSettingsDialog();
|
SettingsDialog *CreateSettingsDialog();
|
||||||
@ -317,6 +316,7 @@ signals:
|
|||||||
DeviceView *device_view_;
|
DeviceView *device_view_;
|
||||||
#endif
|
#endif
|
||||||
PlaylistListContainer *playlist_list_;
|
PlaylistListContainer *playlist_list_;
|
||||||
|
QueueView *queue_view_;
|
||||||
|
|
||||||
Lazy<SettingsDialog> settings_dialog_;
|
Lazy<SettingsDialog> settings_dialog_;
|
||||||
Lazy<AlbumCoverManager> cover_manager_;
|
Lazy<AlbumCoverManager> cover_manager_;
|
||||||
@ -328,7 +328,6 @@ signals:
|
|||||||
#ifdef HAVE_GSTREAMER
|
#ifdef HAVE_GSTREAMER
|
||||||
Lazy<OrganiseDialog> organise_dialog_;
|
Lazy<OrganiseDialog> organise_dialog_;
|
||||||
#endif
|
#endif
|
||||||
Lazy<QueueManager> queue_manager_;
|
|
||||||
|
|
||||||
#if defined(HAVE_GSTREAMER) && defined(HAVE_CHROMAPRINT)
|
#if defined(HAVE_GSTREAMER) && defined(HAVE_CHROMAPRINT)
|
||||||
std::unique_ptr<TagFetcher> tag_fetcher_;
|
std::unique_ptr<TagFetcher> tag_fetcher_;
|
||||||
|
@ -435,7 +435,6 @@
|
|||||||
<string>&Tools</string>
|
<string>&Tools</string>
|
||||||
</property>
|
</property>
|
||||||
<addaction name="action_cover_manager"/>
|
<addaction name="action_cover_manager"/>
|
||||||
<addaction name="action_queue_manager"/>
|
|
||||||
<addaction name="action_equalizer"/>
|
<addaction name="action_equalizer"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="action_update_collection"/>
|
<addaction name="action_update_collection"/>
|
||||||
@ -674,11 +673,6 @@
|
|||||||
<string>&Update changed collection folders</string>
|
<string>&Update changed collection folders</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="action_queue_manager">
|
|
||||||
<property name="text">
|
|
||||||
<string>&Queue Manager</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="action_about_qt">
|
<action name="action_about_qt">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>About &Qt</string>
|
<string>About &Qt</string>
|
||||||
|
@ -71,6 +71,7 @@
|
|||||||
#include "collection/collection.h"
|
#include "collection/collection.h"
|
||||||
#include "collection/collectionbackend.h"
|
#include "collection/collectionbackend.h"
|
||||||
#include "collection/collectionplaylistitem.h"
|
#include "collection/collectionplaylistitem.h"
|
||||||
|
#include "queue/queue.h"
|
||||||
#include "playlist.h"
|
#include "playlist.h"
|
||||||
#include "playlistitem.h"
|
#include "playlistitem.h"
|
||||||
#include "playlistview.h"
|
#include "playlistview.h"
|
||||||
@ -79,7 +80,6 @@
|
|||||||
#include "playlistfilter.h"
|
#include "playlistfilter.h"
|
||||||
#include "playlistitemmimedata.h"
|
#include "playlistitemmimedata.h"
|
||||||
#include "playlistundocommands.h"
|
#include "playlistundocommands.h"
|
||||||
#include "queue.h"
|
|
||||||
#include "songloaderinserter.h"
|
#include "songloaderinserter.h"
|
||||||
#include "songmimedata.h"
|
#include "songmimedata.h"
|
||||||
#include "songplaylistitem.h"
|
#include "songplaylistitem.h"
|
||||||
|
@ -38,14 +38,22 @@
|
|||||||
#include <QAbstractProxyModel>
|
#include <QAbstractProxyModel>
|
||||||
#include <QPersistentModelIndex>
|
#include <QPersistentModelIndex>
|
||||||
|
|
||||||
#include "playlist.h"
|
#include "core/utilities.h"
|
||||||
|
#include "playlist/playlist.h"
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
|
|
||||||
using std::stable_sort;
|
using std::stable_sort;
|
||||||
|
|
||||||
const char *Queue::kRowsMimetype = "application/x-strawberry-queue-rows";
|
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 {
|
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 dataChanged(proxy_index, proxy_index);
|
||||||
}
|
}
|
||||||
|
emit ItemCountChanged(this->ItemCount());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,6 +123,7 @@ void Queue::SourceLayoutChanged() {
|
|||||||
--i;
|
--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 {
|
int Queue::PositionOf(const QModelIndex &source_index) const {
|
||||||
return mapFromSource(source_index).row();
|
return mapFromSource(source_index).row();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Queue::is_empty() const {
|
bool Queue::is_empty() const { return source_indexes_.isEmpty(); }
|
||||||
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() {
|
void Queue::Clear() {
|
||||||
|
|
||||||
if (source_indexes_.isEmpty()) return;
|
if (source_indexes_.isEmpty()) return;
|
||||||
|
|
||||||
beginRemoveRows(QModelIndex(), 0, source_indexes_.count() - 1);
|
beginRemoveRows(QModelIndex(), 0, source_indexes_.count() - 1);
|
||||||
source_indexes_.clear();
|
source_indexes_.clear();
|
||||||
endRemoveRows();
|
endRemoveRows();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Queue::Move(const QList<int> &proxy_rows, int pos) {
|
void Queue::Move(const QList<int> &proxy_rows, int pos) {
|
@ -34,11 +34,13 @@
|
|||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <QMimeData>
|
#include <QMimeData>
|
||||||
|
|
||||||
|
#include "playlist/playlist.h"
|
||||||
|
|
||||||
class Queue : public QAbstractProxyModel {
|
class Queue : public QAbstractProxyModel {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Queue(QObject *parent = nullptr);
|
Queue(Playlist *parent = nullptr);
|
||||||
|
|
||||||
static const char *kRowsMimetype;
|
static const char *kRowsMimetype;
|
||||||
|
|
||||||
@ -47,10 +49,13 @@ class Queue : public QAbstractProxyModel {
|
|||||||
int PositionOf(const QModelIndex &source_index) const;
|
int PositionOf(const QModelIndex &source_index) const;
|
||||||
bool ContainsSourceRow(int source_row) const;
|
bool ContainsSourceRow(int source_row) const;
|
||||||
int PeekNext() const;
|
int PeekNext() const;
|
||||||
|
int ItemCount() const;
|
||||||
|
quint64 GetTotalLength() const;
|
||||||
|
|
||||||
// Modify the queue
|
// Modify the queue
|
||||||
int TakeNext();
|
int TakeNext();
|
||||||
void ToggleTracks(const QModelIndexList &source_indexes);
|
void ToggleTracks(const QModelIndexList &source_indexes);
|
||||||
|
void InsertFirst(const QModelIndexList &source_indexes);
|
||||||
void Clear();
|
void Clear();
|
||||||
void Move(const QList<int> &proxy_rows, int pos);
|
void Move(const QList<int> &proxy_rows, int pos);
|
||||||
void MoveUp(int row);
|
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);
|
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
|
||||||
Qt::ItemFlags flags(const QModelIndex &index) const;
|
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 SourceDataChanged(const QModelIndex &top_left, const QModelIndex &bottom_right);
|
||||||
void SourceLayoutChanged();
|
void SourceLayoutChanged();
|
||||||
|
void UpdateTotalLength();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<QPersistentModelIndex> source_indexes_;
|
QList<QPersistentModelIndex> source_indexes_;
|
||||||
|
const Playlist *playlist_;
|
||||||
|
quint64 total_length_ns_;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // QUEUE_H
|
#endif // QUEUE_H
|
@ -22,7 +22,6 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QDialog>
|
|
||||||
#include <QAbstractItemModel>
|
#include <QAbstractItemModel>
|
||||||
#include <QItemSelectionModel>
|
#include <QItemSelectionModel>
|
||||||
#include <QKeySequence>
|
#include <QKeySequence>
|
||||||
@ -31,22 +30,24 @@
|
|||||||
#include <QShortcut>
|
#include <QShortcut>
|
||||||
#include <QTreeView>
|
#include <QTreeView>
|
||||||
#include <QtAlgorithms>
|
#include <QtAlgorithms>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
#include "core/iconloader.h"
|
#include "core/iconloader.h"
|
||||||
#include "playlist.h"
|
#include "playlist/playlist.h"
|
||||||
#include "playlistdelegates.h"
|
#include "playlist/playlistdelegates.h"
|
||||||
#include "playlistmanager.h"
|
#include "playlist/playlistmanager.h"
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
#include "queuemanager.h"
|
#include "queueview.h"
|
||||||
#include "ui_queuemanager.h"
|
#include "ui_queueview.h"
|
||||||
|
|
||||||
using std::stable_sort;
|
using std::stable_sort;
|
||||||
|
|
||||||
QueueManager::QueueManager(QWidget *parent)
|
QueueView::QueueView(QWidget *parent)
|
||||||
: QDialog(parent),
|
: QWidget(parent),
|
||||||
ui_(new Ui_QueueManager),
|
ui_(new Ui_QueueView),
|
||||||
playlists_(nullptr),
|
playlists_(nullptr),
|
||||||
current_playlist_(nullptr) {
|
current_playlist_(nullptr) {
|
||||||
|
|
||||||
ui_->setupUi(this);
|
ui_->setupUi(this);
|
||||||
ui_->list->setItemDelegate(new QueuedItemDelegate(this, 0));
|
ui_->list->setItemDelegate(new QueuedItemDelegate(this, 0));
|
||||||
|
|
||||||
@ -65,16 +66,13 @@ QueueManager::QueueManager(QWidget *parent)
|
|||||||
connect(ui_->remove, SIGNAL(clicked()), SLOT(Remove()));
|
connect(ui_->remove, SIGNAL(clicked()), SLOT(Remove()));
|
||||||
connect(ui_->clear, SIGNAL(clicked()), SLOT(Clear()));
|
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_;
|
delete ui_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QueueManager::SetPlaylistManager(PlaylistManager *manager) {
|
void QueueView::SetPlaylistManager(PlaylistManager *manager) {
|
||||||
|
|
||||||
playlists_ = 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_) {
|
if (current_playlist_) {
|
||||||
disconnect(current_playlist_->queue(), SIGNAL(rowsInserted(QModelIndex, int, int)), this, SLOT(UpdateButtonState()));
|
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(rowsRemoved(QModelIndex, int, int)), this, SLOT(UpdateButtonState()));
|
||||||
disconnect(current_playlist_->queue(), SIGNAL(layoutChanged()), 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()));
|
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(rowsInserted(QModelIndex,int,int)), this, SLOT(UpdateButtonState()));
|
||||||
connect(current_playlist_->queue(), SIGNAL(rowsRemoved(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(layoutChanged()), this, SLOT(UpdateButtonState()));
|
||||||
|
connect(current_playlist_->queue(), SIGNAL(SummaryTextChanged(QString)), ui_->summary, SLOT(setText(QString)));
|
||||||
connect(current_playlist_, SIGNAL(destroyed()), this, SLOT(PlaylistDestroyed()));
|
connect(current_playlist_, SIGNAL(destroyed()), this, SLOT(PlaylistDestroyed()));
|
||||||
|
|
||||||
ui_->list->setModel(current_playlist_->queue());
|
ui_->list->setModel(current_playlist_->queue());
|
||||||
|
|
||||||
connect(ui_->list->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), SLOT(UpdateButtonState()));
|
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();
|
QModelIndexList indexes = ui_->list->selectionModel()->selectedRows();
|
||||||
std::stable_sort(indexes.begin(), indexes.end());
|
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();
|
QModelIndexList indexes = ui_->list->selectionModel()->selectedRows();
|
||||||
std::stable_sort(indexes.begin(), indexes.end());
|
std::stable_sort(indexes.begin(), indexes.end());
|
||||||
@ -132,11 +134,11 @@ void QueueManager::MoveDown() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QueueManager::Clear() {
|
void QueueView::Clear() {
|
||||||
current_playlist_->queue()->Clear();
|
current_playlist_->queue()->Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QueueManager::Remove() {
|
void QueueView::Remove() {
|
||||||
|
|
||||||
// collect the rows to be removed
|
// collect the rows to be removed
|
||||||
QList<int> row_list;
|
QList<int> row_list;
|
||||||
@ -148,7 +150,7 @@ void QueueManager::Remove() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QueueManager::UpdateButtonState() {
|
void QueueView::UpdateButtonState() {
|
||||||
|
|
||||||
const QModelIndex current = ui_->list->selectionModel()->currentIndex();
|
const QModelIndex current = ui_->list->selectionModel()->currentIndex();
|
||||||
|
|
||||||
@ -167,7 +169,7 @@ void QueueManager::UpdateButtonState() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QueueManager::PlaylistDestroyed() {
|
void QueueView::PlaylistDestroyed() {
|
||||||
current_playlist_ = nullptr;
|
current_playlist_ = nullptr;
|
||||||
// We'll get another CurrentPlaylistChanged() soon
|
// We'll get another CurrentPlaylistChanged() soon
|
||||||
}
|
}
|
@ -18,8 +18,8 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef QUEUEMANAGER_H
|
#ifndef QUEUEVIEW_H
|
||||||
#define QUEUEMANAGER_H
|
#define QUEUEVIEW_H
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
@ -30,14 +30,14 @@
|
|||||||
|
|
||||||
class Playlist;
|
class Playlist;
|
||||||
class PlaylistManager;
|
class PlaylistManager;
|
||||||
class Ui_QueueManager;
|
class Ui_QueueView;
|
||||||
|
|
||||||
class QueueManager : public QDialog {
|
class QueueView : public QWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QueueManager(QWidget *parent = nullptr);
|
QueueView(QWidget *parent = nullptr);
|
||||||
~QueueManager();
|
~QueueView();
|
||||||
|
|
||||||
void SetPlaylistManager(PlaylistManager *manager);
|
void SetPlaylistManager(PlaylistManager *manager);
|
||||||
|
|
||||||
@ -52,10 +52,10 @@ private slots:
|
|||||||
void Clear();
|
void Clear();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui_QueueManager *ui_;
|
Ui_QueueView *ui_;
|
||||||
|
|
||||||
PlaylistManager *playlists_;
|
PlaylistManager *playlists_;
|
||||||
Playlist *current_playlist_;
|
Playlist *current_playlist_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // QUEUEMANAGER_H
|
#endif // QUEUEVIEW_H
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<ui version="4.0">
|
<ui version="4.0">
|
||||||
<class>QueueManager</class>
|
<class>QueueView</class>
|
||||||
<widget class="QDialog" name="QueueManager">
|
<widget class="QWidget" name="QueueView">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
@ -11,15 +11,127 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Queue Manager</string>
|
<string>QueueView</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowIcon">
|
<property name="windowIcon">
|
||||||
<iconset resource="../../data/icons.qrc">
|
<iconset>
|
||||||
<normaloff>:/icons/64x64/strawberry.png</normaloff>:/icons/64x64/strawberry.png</iconset>
|
<normaloff>:/icons/64x64/strawberry.png</normaloff>:/icons/64x64/strawberry.png</iconset>
|
||||||
</property>
|
</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>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<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>
|
<item>
|
||||||
<widget class="QTreeView" name="list">
|
<widget class="QTreeView" name="list">
|
||||||
<property name="acceptDrops">
|
<property name="acceptDrops">
|
||||||
@ -54,143 +166,10 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</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>
|
</layout>
|
||||||
</item>
|
</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>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources>
|
<resources/>
|
||||||
<include location="../../data/data.qrc"/>
|
<connections/>
|
||||||
<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>
|
|
||||||
</ui>
|
</ui>
|
Loading…
x
Reference in New Issue
Block a user