[Desktop Entry]
Encoding=UTF-8
-Version=1.0
+Version=1.1.0
Type=Application
Name=SomePlayer
X-Text-Domain=someplayer
Icon=someplayer
X-HildonDesk-ShowInToolbar=true
X-Osso-Type=application/x-executable
-Categories=Office;
+Categories=AudioVideo;
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 \
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 =
ui->listView->selectionModel()->clearSelection();
QQueue<int> 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();
void LibraryForm::_use_button() {
_lib->saveCurrentPlaylist(_current_playlist);
+ _current_playlist = _lib->getCurrentPlaylist();
}
void LibraryForm::search(QString &pattern) {
}
void Player::play() {
+ if (_playlist.tracks().isEmpty())
+ return;
_state = PLAYER_PLAYING;
emit stateChanged(_state);
if (_current == -1) {
#include <QSlider>
#include "trackrenderer.h"
#include <QResource>
+#include "playlistdialog.h"
using namespace SomePlayer::DataObjects;
using namespace SomePlayer::Playback;
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);
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)));
_lib->saveCurrentPlaylist(_current_playlist);
_player->setPlaylist(_current_playlist);
}
+
+void PlayerForm::_add_to_playlists() {
+ QList<QModelIndex> idx = ui->playlistView->selectionModel()->selectedIndexes();
+ int id = idx.first().row();
+
+ QList<QString> names = _lib->getPlaylistsNames();
+ names.removeOne(_CURRENT_PLAYLIST_SUBST_);
+ PlaylistDialog dialog(names, this);
+ dialog.exec();
+ QList<QString> selected = dialog.selected();
+ foreach (QString name, selected) {
+ Playlist pl = _lib->getPlaylist(name);
+ pl.addTrack(_current_playlist.tracks().at(id));
+ _lib->savePlaylist(pl);
+ }
+}
void _delete_track();
void _enqueue_track();
void _add_to_favorites();
+ void _add_to_playlists();
void _state_changed(PlayerState);
void _toggle_repeat();
void _toggle_random();
--- /dev/null
+#include "playlistdialog.h"
+#include "ui_playlistdialog.h"
+#include <QStandardItemModel>
+
+PlaylistDialog::PlaylistDialog(QList<QString> 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<QString> PlaylistDialog::selected() {
+ QList<QString> _selected;
+ QList<QModelIndex> idx = ui->listView->selectionModel()->selectedIndexes();
+ foreach (QModelIndex id, idx) {
+ _selected.append(id.data().toString());
+ }
+ return _selected;
+}
--- /dev/null
+#ifndef PLAYLISTDIALOG_H
+#define PLAYLISTDIALOG_H
+
+#include <QDialog>
+
+namespace Ui {
+ class PlaylistDialog;
+}
+
+class PlaylistDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit PlaylistDialog(QList<QString> playlistNames, QWidget *parent = 0);
+ ~PlaylistDialog();
+
+ QList<QString> selected();
+
+private:
+ Ui::PlaylistDialog *ui;
+
+private slots:
+};
+
+#endif // PLAYLISTDIALOG_H
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PlaylistDialog</class>
+ <widget class="QDialog" name="PlaylistDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>592</width>
+ <height>361</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Dialog</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QListView" name="listView">
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="selectionMode">
+ <enum>QAbstractItemView::MultiSelection</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>PlaylistDialog</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>PlaylistDialog</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>