Add copy and move menu items to the playlist

This commit is contained in:
David Sansome 2010-06-24 23:36:39 +00:00
parent e1e8866424
commit 69924cd76a
31 changed files with 158 additions and 8 deletions

View File

@ -683,6 +683,11 @@ TagLib::String QStringToTaglibString(const QString& s) {
return TagLib::String(s.toUtf8().constData(), TagLib::String::UTF8); return TagLib::String(s.toUtf8().constData(), TagLib::String::UTF8);
} }
bool Song::IsEditable() const {
return d->valid_ && !d->filename_.isNull() &&
d->filetype_ != Type_Stream && d->filetype_ != Type_Unknown;
}
bool Song::Save() const { bool Song::Save() const {
if (d->filename_.isNull()) if (d->filename_.isNull())
return false; return false;

View File

@ -170,7 +170,7 @@ class Song {
QString PrettyLength() const; QString PrettyLength() const;
// Setters // Setters
bool IsEditable() const { return d->valid_ && !d->filename_.isNull(); } bool IsEditable() const;
bool Save() const; bool Save() const;
void set_id(int id) { d->id_ = id; } void set_id(int id) { d->id_ = id; }

View File

@ -440,6 +440,9 @@ msgstr ""
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -441,6 +441,9 @@ msgstr "Snížit hlasitost"
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -441,6 +441,9 @@ msgstr ""
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -442,6 +442,9 @@ msgstr "Lautstärke verringern"
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -444,6 +444,9 @@ msgstr "Μείωση έντασης"
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -442,6 +442,9 @@ msgstr "Decrease volume"
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "Delay between visualisations" msgstr "Delay between visualisations"
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -440,6 +440,9 @@ msgstr ""
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "Delay between visualisations" msgstr "Delay between visualisations"
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -444,6 +444,9 @@ msgstr "Disminuir volumen"
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -440,6 +440,9 @@ msgstr ""
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -441,6 +441,9 @@ msgstr "Diminuer le volume"
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -440,6 +440,9 @@ msgstr ""
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -443,6 +443,9 @@ msgstr "Riduci il volume"
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -440,6 +440,9 @@ msgstr ""
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -440,6 +440,9 @@ msgstr ""
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -440,6 +440,9 @@ msgstr "Reduire lo volum"
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -441,6 +441,9 @@ msgstr ""
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -442,6 +442,9 @@ msgstr "Diminuir volume"
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -442,6 +442,9 @@ msgstr "Diminuir volume"
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -440,6 +440,9 @@ msgstr ""
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -441,6 +441,9 @@ msgstr "Уменьшить громкость"
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -443,6 +443,9 @@ msgstr "Znížiť hlasitosť"
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -442,6 +442,9 @@ msgstr "Sänk volymen"
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -440,6 +440,9 @@ msgstr "Sesi azalt"
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -431,6 +431,9 @@ msgstr ""
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -442,6 +442,9 @@ msgstr "Зменшити гучність"
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -440,6 +440,9 @@ msgstr "降低音量"
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -440,6 +440,9 @@ msgstr ""
msgid "Delay between visualizations" msgid "Delay between visualizations"
msgstr "" msgstr ""
msgid "Delete files..."
msgstr ""
msgid "Delete from disk..." msgid "Delete from disk..."
msgstr "" msgstr ""

View File

@ -365,9 +365,16 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
playlist_menu_->addAction(ui_->action_renumber_tracks); playlist_menu_->addAction(ui_->action_renumber_tracks);
playlist_menu_->addAction(ui_->action_selection_set_value); playlist_menu_->addAction(ui_->action_selection_set_value);
playlist_menu_->addSeparator(); playlist_menu_->addSeparator();
playlist_copy_to_library_ = playlist_menu_->addAction(IconLoader::Load("edit-copy"), tr("Copy to library..."), this, SLOT(PlaylistCopyToLibrary()));
playlist_move_to_library_ = playlist_menu_->addAction(IconLoader::Load("go-jump"), tr("Move to library..."), this, SLOT(PlaylistMoveToLibrary()));
playlist_organise_ = playlist_menu_->addAction(IconLoader::Load("edit-copy"), tr("Organise files..."), this, SLOT(PlaylistMoveToLibrary()));
playlist_delete_ = playlist_menu_->addAction(IconLoader::Load("edit-delete"), tr("Delete files..."), this, SLOT(PlaylistDelete()));
playlist_menu_->addSeparator();
playlist_menu_->addAction(ui_->action_clear_playlist); playlist_menu_->addAction(ui_->action_clear_playlist);
playlist_menu_->addAction(ui_->action_shuffle); playlist_menu_->addAction(ui_->action_shuffle);
playlist_delete_->setVisible(false); // TODO
connect(ui_->playlist, SIGNAL(UndoRedoActionsChanged(QAction*,QAction*)), connect(ui_->playlist, SIGNAL(UndoRedoActionsChanged(QAction*,QAction*)),
SLOT(PlaylistUndoRedoChanged(QAction*,QAction*))); SLOT(PlaylistUndoRedoChanged(QAction*,QAction*)));
@ -871,7 +878,10 @@ void MainWindow::InsertRadioItems(const PlaylistItemList& items) {
void MainWindow::PlaylistRightClick(const QPoint& global_pos, const QModelIndex& index) { void MainWindow::PlaylistRightClick(const QPoint& global_pos, const QModelIndex& index) {
playlist_menu_index_ = index; playlist_menu_index_ = index;
if (playlists_->current()->current_index() == index.row() && player_->GetState() == Engine::Playing) { QModelIndex source_index = playlists_->current()->proxy()->mapToSource(index);
// Is this song currently playing?
if (playlists_->current()->current_index() == source_index.row() && player_->GetState() == Engine::Playing) {
playlist_play_pause_->setText(tr("Pause")); playlist_play_pause_->setText(tr("Pause"));
playlist_play_pause_->setIcon(IconLoader::Load("media-playback-pause")); playlist_play_pause_->setIcon(IconLoader::Load("media-playback-pause"));
} else { } else {
@ -879,10 +889,11 @@ void MainWindow::PlaylistRightClick(const QPoint& global_pos, const QModelIndex&
playlist_play_pause_->setIcon(IconLoader::Load("media-playback-start")); playlist_play_pause_->setIcon(IconLoader::Load("media-playback-start"));
} }
// Are we allowed to pause?
if (index.isValid()) { if (index.isValid()) {
playlist_play_pause_->setEnabled( playlist_play_pause_->setEnabled(
playlists_->current()->current_index() != index.row() || playlists_->current()->current_index() != source_index.row() ||
! (playlists_->current()->item_at(index.row())->options() & PlaylistItem::PauseDisabled)); ! (playlists_->current()->item_at(source_index.row())->options() & PlaylistItem::PauseDisabled));
} else { } else {
playlist_play_pause_->setEnabled(false); playlist_play_pause_->setEnabled(false);
} }
@ -907,26 +918,39 @@ void MainWindow::PlaylistRightClick(const QPoint& global_pos, const QModelIndex&
ui_->action_edit_value->setVisible(editable); ui_->action_edit_value->setVisible(editable);
ui_->action_remove_from_playlist->setEnabled(!selection.isEmpty()); ui_->action_remove_from_playlist->setEnabled(!selection.isEmpty());
playlist_copy_to_library_->setVisible(false);
playlist_move_to_library_->setVisible(false);
playlist_organise_->setVisible(false);
playlist_delete_->setVisible(false);
if (!index.isValid()) { if (!index.isValid()) {
ui_->action_selection_set_value->setVisible(false); ui_->action_selection_set_value->setVisible(false);
ui_->action_edit_value->setVisible(false); ui_->action_edit_value->setVisible(false);
} else { } else {
Playlist::Column column = (Playlist::Column)index.column(); Playlist::Column column = (Playlist::Column)index.column();
bool editable = Playlist::column_is_editable(column); bool column_is_editable = Playlist::column_is_editable(column);
ui_->action_selection_set_value->setVisible( ui_->action_selection_set_value->setVisible(
ui_->action_selection_set_value->isVisible() && editable); ui_->action_selection_set_value->isVisible() && column_is_editable);
ui_->action_edit_value->setVisible( ui_->action_edit_value->setVisible(
ui_->action_edit_value->isVisible() && editable); ui_->action_edit_value->isVisible() && column_is_editable);
QString column_name = Playlist::column_name(column); QString column_name = Playlist::column_name(column);
QString column_value = playlists_->current()->data(index).toString(); QString column_value = playlists_->current()->data(source_index).toString();
if (column_value.length() > 25) if (column_value.length() > 25)
column_value = column_value.left(25) + "..."; column_value = column_value.left(25) + "...";
ui_->action_selection_set_value->setText(tr("Set %1 to \"%2\"...") ui_->action_selection_set_value->setText(tr("Set %1 to \"%2\"...")
.arg(column_name.toLower()).arg(column_value)); .arg(column_name.toLower()).arg(column_value));
ui_->action_edit_value->setText(tr("Edit tag \"%1\"...").arg(column_name)); ui_->action_edit_value->setText(tr("Edit tag \"%1\"...").arg(column_name));
// Is it a library item?
if (playlists_->current()->item_at(source_index.row())->type() == "Library") {
playlist_organise_->setVisible(editable);
} else {
playlist_copy_to_library_->setVisible(editable);
playlist_move_to_library_->setVisible(editable);
}
} }
playlist_menu_->popup(global_pos); playlist_menu_->popup(global_pos);
@ -1220,3 +1244,34 @@ void MainWindow::MoveFilesToLibrary(const QList<QUrl> &urls) {
organise_dialog_->SetCopy(false); organise_dialog_->SetCopy(false);
organise_dialog_->show(); organise_dialog_->show();
} }
void MainWindow::PlaylistCopyToLibrary() {
PlaylistOrganiseSelected(true);
}
void MainWindow::PlaylistMoveToLibrary() {
PlaylistOrganiseSelected(false);
}
void MainWindow::PlaylistOrganiseSelected(bool copy) {
QModelIndexList indexes = playlists_->current()->proxy()->mapSelectionToSource(
ui_->playlist->view()->selectionModel()->selection()).indexes();
QList<QUrl> urls;
int last_row = -1;
foreach (const QModelIndex& index, indexes) {
if (last_row == index.row())
continue;
last_row = index.row();
urls << playlists_->current()->item_at(index.row())->Url();
}
organise_dialog_->SetUrls(urls);
organise_dialog_->SetCopy(copy);
organise_dialog_->show();
}
void MainWindow::PlaylistDelete() {
}

View File

@ -108,6 +108,11 @@ class MainWindow : public QMainWindow, public PlatformInterface {
void EditValue(); void EditValue();
void PlaylistUndoRedoChanged(QAction* undo, QAction* redo); void PlaylistUndoRedoChanged(QAction* undo, QAction* redo);
void PlaylistCopyToLibrary();
void PlaylistMoveToLibrary();
void PlaylistOrganiseSelected(bool copy);
void PlaylistDelete();
void PlayIndex(const QModelIndex& index); void PlayIndex(const QModelIndex& index);
void StopAfterCurrent(); void StopAfterCurrent();
@ -195,6 +200,10 @@ class MainWindow : public QMainWindow, public PlatformInterface {
QAction* playlist_play_pause_; QAction* playlist_play_pause_;
QAction* playlist_stop_after_; QAction* playlist_stop_after_;
QAction* playlist_undoredo_; QAction* playlist_undoredo_;
QAction* playlist_organise_;
QAction* playlist_copy_to_library_;
QAction* playlist_move_to_library_;
QAction* playlist_delete_;
QModelIndex playlist_menu_index_; QModelIndex playlist_menu_index_;
QSortFilterProxyModel* library_sort_model_; QSortFilterProxyModel* library_sort_model_;