From 0b048cf534be4899cb6a993cf67cb79662ac4af5 Mon Sep 17 00:00:00 2001 From: Nikolay Tischenko Date: Thu, 23 Sep 2010 22:47:30 +0700 Subject: [PATCH] Fixed bug with removing tracks from another playlist. Implemented adding track to another playlists --- resources/someplayer.desktop | 4 +-- someplayer.pro | 9 +++-- src/libraryform.cpp | 7 ++-- src/player/player.cpp | 2 ++ src/playerform.cpp | 19 ++++++++++ src/playerform.h | 1 + src/playlistdialog.cpp | 29 +++++++++++++++ src/playlistdialog.h | 26 ++++++++++++++ src/playlistdialog.ui | 80 ++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 170 insertions(+), 7 deletions(-) create mode 100644 src/playlistdialog.cpp create mode 100644 src/playlistdialog.h create mode 100644 src/playlistdialog.ui diff --git a/resources/someplayer.desktop b/resources/someplayer.desktop index 0e2ca43..9cb0267 100644 --- a/resources/someplayer.desktop +++ b/resources/someplayer.desktop @@ -1,6 +1,6 @@ [Desktop Entry] Encoding=UTF-8 -Version=1.0 +Version=1.1.0 Type=Application Name=SomePlayer X-Text-Domain=someplayer @@ -8,4 +8,4 @@ Exec=/opt/someplayer/someplayer Icon=someplayer X-HildonDesk-ShowInToolbar=true X-Osso-Type=application/x-executable -Categories=Office; +Categories=AudioVideo; diff --git a/someplayer.pro b/someplayer.pro index fa3d919..0f501be 100644 --- a/someplayer.pro +++ b/someplayer.pro @@ -25,7 +25,8 @@ SOURCES += src/main.cpp\ src/libraryform.cpp \ src/busywidget.cpp \ src/trackrenderer.cpp \ - src/config.cpp + src/config.cpp \ + src/playlistdialog.cpp HEADERS += src/mainwindow.h \ src/player/player.h \ @@ -43,12 +44,14 @@ HEADERS += src/mainwindow.h \ src/libraryform.h \ src/busywidget.h \ src/trackrenderer.h \ - src/config.h + src/config.h \ + src/playlistdialog.h FORMS += src/ui/mainwindow.ui \ src/ui/playerform.ui \ src/ui/libraryform.ui \ - src/ui/busywidget.ui + src/ui/busywidget.ui \ + src/playlistdialog.ui CONFIG += mobility MOBILITY = diff --git a/src/libraryform.cpp b/src/libraryform.cpp index a6ff189..f63cdf4 100644 --- a/src/libraryform.cpp +++ b/src/libraryform.cpp @@ -277,14 +277,16 @@ void LibraryForm::_delete_button() { ui->listView->selectionModel()->clearSelection(); QQueue to_delete; foreach (QModelIndex id, selected) { - _delete_track(_current_tracks.at(id.row())); to_delete.append(id.row()); } qSort(to_delete); int count = to_delete.count(); for (int i = count-1; i >= 0; i--) { - _current_tracks.removeAt(to_delete.at(i)); + _current_playlist.removeTrackAt(to_delete.at(i)); + qDebug() << "Removing from" << _current_playlist.name() << to_delete.at(i); } + _current_tracks = _current_playlist.tracks(); + _lib->savePlaylist(_current_playlist); __fill_model_tracks(_model, _current_tracks); } else if (_state == STATE_PLAYLIST) { QModelIndexList selected = ui->listView->selectionModel()->selectedIndexes(); @@ -313,6 +315,7 @@ void LibraryForm::_delete_track(Track track) { void LibraryForm::_use_button() { _lib->saveCurrentPlaylist(_current_playlist); + _current_playlist = _lib->getCurrentPlaylist(); } void LibraryForm::search(QString &pattern) { diff --git a/src/player/player.cpp b/src/player/player.cpp index 0181fc6..bd8c8d5 100644 --- a/src/player/player.cpp +++ b/src/player/player.cpp @@ -162,6 +162,8 @@ void Player::seek(int s) { } void Player::play() { + if (_playlist.tracks().isEmpty()) + return; _state = PLAYER_PLAYING; emit stateChanged(_state); if (_current == -1) { diff --git a/src/playerform.cpp b/src/playerform.cpp index c00332c..fd2bdab 100644 --- a/src/playerform.cpp +++ b/src/playerform.cpp @@ -26,6 +26,7 @@ #include #include "trackrenderer.h" #include +#include "playlistdialog.h" using namespace SomePlayer::DataObjects; using namespace SomePlayer::Playback; @@ -70,6 +71,7 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : QAction *delete_action = _context_menu->addAction("Delete"); QAction *enqueue_action = _context_menu->addAction("Enqueue"); QAction *add_to_favorites = _context_menu->addAction("Add to favorites"); + QAction *add_to_playlists = _context_menu->addAction("Add to playlists"); _track_renderer = new TrackRenderer(this); ui->playlistView->setItemDelegateForColumn(0, _track_renderer); @@ -92,6 +94,7 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : connect(delete_action, SIGNAL(triggered()), this, SLOT(_delete_track())); connect(enqueue_action, SIGNAL(triggered()), this, SLOT(_enqueue_track())); connect(add_to_favorites, SIGNAL(triggered()), this, SLOT(_add_to_favorites())); + connect(add_to_playlists, SIGNAL(triggered()), this, SLOT(_add_to_playlists())); connect(_player, SIGNAL(stateChanged(PlayerState)), this, SLOT(_state_changed(PlayerState))); connect(_player, SIGNAL(trackDone(Track)), _lib, SLOT(updateTrackCount(Track))); connect(_tag_resolver, SIGNAL(decoded(Track)), this, SLOT(_track_decoded(Track))); @@ -286,3 +289,19 @@ void PlayerForm::_track_decoded(Track track) { _lib->saveCurrentPlaylist(_current_playlist); _player->setPlaylist(_current_playlist); } + +void PlayerForm::_add_to_playlists() { + QList idx = ui->playlistView->selectionModel()->selectedIndexes(); + int id = idx.first().row(); + + QList names = _lib->getPlaylistsNames(); + names.removeOne(_CURRENT_PLAYLIST_SUBST_); + PlaylistDialog dialog(names, this); + dialog.exec(); + QList selected = dialog.selected(); + foreach (QString name, selected) { + Playlist pl = _lib->getPlaylist(name); + pl.addTrack(_current_playlist.tracks().at(id)); + _lib->savePlaylist(pl); + } +} diff --git a/src/playerform.h b/src/playerform.h index d03878a..6129049 100644 --- a/src/playerform.h +++ b/src/playerform.h @@ -73,6 +73,7 @@ private slots: void _delete_track(); void _enqueue_track(); void _add_to_favorites(); + void _add_to_playlists(); void _state_changed(PlayerState); void _toggle_repeat(); void _toggle_random(); diff --git a/src/playlistdialog.cpp b/src/playlistdialog.cpp new file mode 100644 index 0000000..a4fd908 --- /dev/null +++ b/src/playlistdialog.cpp @@ -0,0 +1,29 @@ +#include "playlistdialog.h" +#include "ui_playlistdialog.h" +#include + +PlaylistDialog::PlaylistDialog(QList playlistNames, QWidget *parent) : + QDialog(parent), + ui(new Ui::PlaylistDialog) +{ + ui->setupUi(this); + QStandardItemModel *model = new QStandardItemModel(this); + foreach (QString str, playlistNames) { + model->appendRow(new QStandardItem(str)); + } + ui->listView->setModel(model); +} + +PlaylistDialog::~PlaylistDialog() +{ + delete ui; +} + +QList PlaylistDialog::selected() { + QList _selected; + QList idx = ui->listView->selectionModel()->selectedIndexes(); + foreach (QModelIndex id, idx) { + _selected.append(id.data().toString()); + } + return _selected; +} diff --git a/src/playlistdialog.h b/src/playlistdialog.h new file mode 100644 index 0000000..89758e0 --- /dev/null +++ b/src/playlistdialog.h @@ -0,0 +1,26 @@ +#ifndef PLAYLISTDIALOG_H +#define PLAYLISTDIALOG_H + +#include + +namespace Ui { + class PlaylistDialog; +} + +class PlaylistDialog : public QDialog +{ + Q_OBJECT + +public: + explicit PlaylistDialog(QList playlistNames, QWidget *parent = 0); + ~PlaylistDialog(); + + QList selected(); + +private: + Ui::PlaylistDialog *ui; + +private slots: +}; + +#endif // PLAYLISTDIALOG_H diff --git a/src/playlistdialog.ui b/src/playlistdialog.ui new file mode 100644 index 0000000..048b5c6 --- /dev/null +++ b/src/playlistdialog.ui @@ -0,0 +1,80 @@ + + + PlaylistDialog + + + + 0 + 0 + 592 + 361 + + + + Dialog + + + + 0 + + + 0 + + + + + QAbstractItemView::NoEditTriggers + + + QAbstractItemView::MultiSelection + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + PlaylistDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + PlaylistDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + -- 1.7.9.5