actions: split Delete into Delete{PlaylistItems,BrowserItems,StoredPlaylists}

This commit is contained in:
Andrzej Rybczak
2012-09-19 02:01:27 +02:00
parent b57428db90
commit 552bc77318
6 changed files with 138 additions and 89 deletions

View File

@@ -144,7 +144,10 @@
# press_enter # press_enter
# #
#def_key "delete" #def_key "delete"
# delete # delete_playlist_items
#
#def_key "delete"
# delete_stored_playlist
# #
#def_key "right" #def_key "right"
# next_column # next_column

View File

@@ -781,21 +781,40 @@ void VolumeDown::Run()
Mpd.SetVolume(Mpd.GetVolume()-1); Mpd.SetVolume(Mpd.GetVolume()-1);
} }
void Delete::Run() bool DeletePlaylistItems::canBeRun() const
{ {
if (myScreen == myPlaylist && !myPlaylist->main().empty()) return (myScreen == myPlaylist && !myPlaylist->main().empty())
|| (myScreen->isActiveWindow(myPlaylistEditor->Content) && !myPlaylistEditor->Content.empty());
}
void DeletePlaylistItems::Run()
{
if (myScreen == myPlaylist)
{ {
Statusbar::msg("Deleting items..."); Statusbar::msg("Deleting items...");
auto delete_fun = std::bind(&MPD::Connection::Delete, _1, _2); auto delete_fun = std::bind(&MPD::Connection::Delete, _1, _2);
if (deleteSelectedSongs(myPlaylist->main(), delete_fun)) if (deleteSelectedSongs(myPlaylist->main(), delete_fun))
Statusbar::msg("Item(s) deleted"); Statusbar::msg("Item(s) deleted");
} }
# ifndef WIN32 else if (myScreen->isActiveWindow(myPlaylistEditor->Content))
else if (myScreen == myBrowser && !myBrowser->main().empty())
{ {
if (!myBrowser->isLocal() && !isMPDMusicDirSet()) std::string playlist = myPlaylistEditor->Playlists.current().value();
return; auto delete_fun = std::bind(&MPD::Connection::PlaylistDelete, _1, playlist, _2);
Statusbar::msg("Deleting items...");
if (deleteSelectedSongs(myPlaylistEditor->Content, delete_fun))
Statusbar::msg("Item(s) deleted");
}
}
bool DeleteBrowserItems::canBeRun() const
{
return myScreen == myBrowser
&& !myBrowser->main().empty()
&& isMPDMusicDirSet();
}
void DeleteBrowserItems::Run()
{
std::string question; std::string question;
if (hasSelected(myBrowser->main().begin(), myBrowser->main().end())) if (hasSelected(myBrowser->main().begin(), myBrowser->main().end()))
question = "Delete selected items?"; question = "Delete selected items?";
@@ -833,17 +852,23 @@ void Delete::Run()
} }
if (success) if (success)
{ {
if (!myBrowser->isLocal()) if (myBrowser->isLocal())
myBrowser->GetDirectory(myBrowser->CurrentDir());
else
Mpd.UpdateDirectory(myBrowser->CurrentDir()); Mpd.UpdateDirectory(myBrowser->CurrentDir());
} }
} }
else else
Statusbar::msg("Aborted"); Statusbar::msg("Aborted");
} }
# endif // !WIN32
else if (myScreen == myPlaylistEditor && !myPlaylistEditor->Content.empty()) bool DeleteStoredPlaylist::canBeRun() const
{ {
if (myScreen->isActiveWindow(myPlaylistEditor->Playlists)) return myScreen->isActiveWindow(myPlaylistEditor->Playlists)
&& myPlaylistEditor->Playlists.empty();
}
void DeleteStoredPlaylist::Run()
{ {
std::string question; std::string question;
if (hasSelected(myPlaylistEditor->Playlists.begin(), myPlaylistEditor->Playlists.end())) if (hasSelected(myPlaylistEditor->Playlists.begin(), myPlaylistEditor->Playlists.end()))
@@ -867,16 +892,6 @@ void Delete::Run()
else else
Statusbar::msg("Aborted"); Statusbar::msg("Aborted");
} }
else if (myScreen->isActiveWindow(myPlaylistEditor->Content))
{
std::string playlist = myPlaylistEditor->Playlists.current().value();
auto delete_fun = std::bind(&MPD::Connection::PlaylistDelete, _1, playlist, _2);
Statusbar::msg("Deleting items...");
if (deleteSelectedSongs(myPlaylistEditor->Content, delete_fun))
Statusbar::msg("Item(s) deleted");
}
}
}
void ReplaySong::Run() void ReplaySong::Run()
{ {
@@ -2552,7 +2567,9 @@ void populateActions()
insertAction(new SlaveScreen()); insertAction(new SlaveScreen());
insertAction(new VolumeUp()); insertAction(new VolumeUp());
insertAction(new VolumeDown()); insertAction(new VolumeDown());
insertAction(new Delete()); insertAction(new DeletePlaylistItems());
insertAction(new DeleteStoredPlaylist());
insertAction(new DeleteBrowserItems());
insertAction(new ReplaySong()); insertAction(new ReplaySong());
insertAction(new PreviousSong()); insertAction(new PreviousSong());
insertAction(new NextSong()); insertAction(new NextSong());

View File

@@ -31,7 +31,7 @@ enum ActionType
aDummy, aMouseEvent, aScrollUp, aScrollDown, aScrollUpArtist, aScrollUpAlbum, aScrollDownArtist, aDummy, aMouseEvent, aScrollUp, aScrollDown, aScrollUpArtist, aScrollUpAlbum, aScrollDownArtist,
aScrollDownAlbum, aPageUp, aPageDown, aMoveHome, aMoveEnd, aToggleInterface, aJumpToParentDirectory, aScrollDownAlbum, aPageUp, aPageDown, aMoveHome, aMoveEnd, aToggleInterface, aJumpToParentDirectory,
aPressEnter, aPressSpace, aPreviousColumn, aNextColumn, aMasterScreen, aSlaveScreen, aVolumeUp, aPressEnter, aPressSpace, aPreviousColumn, aNextColumn, aMasterScreen, aSlaveScreen, aVolumeUp,
aVolumeDown, aDelete, aReplaySong, aPrevious, aNext, aPause, aStop, aSavePlaylist, aVolumeDown, aDeletePlaylistItems, aDeleteStoredPlaylist, aDeleteBrowserItems, aReplaySong, aPrevious, aNext, aPause, aStop, aSavePlaylist,
aMoveSortOrderUp, aMoveSortOrderDown, aMoveSelectedItemsUp, aMoveSelectedItemsDown, aMoveSortOrderUp, aMoveSortOrderDown, aMoveSelectedItemsUp, aMoveSelectedItemsDown,
aMoveSelectedItemsTo, aAdd, aSeekForward, aSeekBackward, aToggleDisplayMode, aToggleSeparatorsBetweenAlbums, aMoveSelectedItemsTo, aAdd, aSeekForward, aSeekBackward, aToggleDisplayMode, aToggleSeparatorsBetweenAlbums,
aToggleLyricsFetcher, aToggleFetchingLyricsInBackground, aTogglePlayingSongCentering, aUpdateDatabase, aToggleLyricsFetcher, aToggleFetchingLyricsInBackground, aTogglePlayingSongCentering, aUpdateDatabase,
@@ -294,11 +294,30 @@ protected:
virtual void Run(); virtual void Run();
}; };
struct Delete : public Action struct DeletePlaylistItems : public Action
{ {
Delete() : Action(aDelete, "delete") { } DeletePlaylistItems() : Action(aDeletePlaylistItems, "delete_playlist_items") { }
protected: protected:
virtual bool canBeRun() const;
virtual void Run();
};
struct DeleteStoredPlaylist : public Action
{
DeleteStoredPlaylist() : Action(aDeleteStoredPlaylist, "delete_stored_playlist") { }
protected:
virtual bool canBeRun() const;
virtual void Run();
};
struct DeleteBrowserItems : public Action
{
DeleteBrowserItems() : Action(aDeleteBrowserItems, "delete_browser_items") { }
protected:
virtual bool canBeRun() const;
virtual void Run(); virtual void Run();
}; };

View File

@@ -256,6 +256,11 @@ bool BindingsConfiguration::read(const std::string &file)
break; break;
} }
} }
else
{
error() << "invalid line: '" << line << "'\n";
break;
}
} }
if (key_def_in_progress) if (key_def_in_progress)
bind_key_def(); bind_key_def();
@@ -293,7 +298,10 @@ void BindingsConfiguration::generateDefaults()
if (notBound(k = stringToKey("enter"))) if (notBound(k = stringToKey("enter")))
bind(k, aPressEnter); bind(k, aPressEnter);
if (notBound(k = stringToKey("delete"))) if (notBound(k = stringToKey("delete")))
bind(k, aDelete); {
bind(k, aDeletePlaylistItems);
bind(k, aDeleteStoredPlaylist);
}
if (notBound(k = stringToKey("right"))) if (notBound(k = stringToKey("right")))
{ {
bind(k, aNextColumn); bind(k, aNextColumn);

View File

@@ -27,6 +27,7 @@
#include "browser.h" #include "browser.h"
#include "charset.h" #include "charset.h"
#include "display.h" #include "display.h"
#include "error.h"
#include "global.h" #include "global.h"
#include "helpers.h" #include "helpers.h"
#include "playlist.h" #include "playlist.h"
@@ -555,9 +556,8 @@ void Browser::ChangeBrowseMode()
bool Browser::deleteItem(const MPD::Item &item) bool Browser::deleteItem(const MPD::Item &item)
{ {
// parent dir if (isParentDirectory((item)))
if (item.type == itDirectory && item.name == "..") FatalError("Parent directory passed to Browser::deleteItem");
return false;
// playlist created by mpd // playlist created by mpd
if (!isLocal() && item.type == itPlaylist && CurrentDir() == "/") if (!isLocal() && item.type == itPlaylist && CurrentDir() == "/")
@@ -571,7 +571,7 @@ bool Browser::deleteItem(const MPD::Item &item)
if (item.type == itDirectory) if (item.type == itDirectory)
ClearDirectory(path); ClearDirectory(path);
return remove(path.c_str()) == 0; return std::remove(path.c_str()) == 0;
} }
#endif // !WIN32 #endif // !WIN32

View File

@@ -268,7 +268,7 @@ void Help::GetKeybindings()
KeysSection("Playlist"); KeysSection("Playlist");
KeyDesc(aPressEnter, "Play selected item"); KeyDesc(aPressEnter, "Play selected item");
KeyDesc(aDelete, "Delete selected item(s) from playlist"); KeyDesc(aDeletePlaylistItems, "Delete selected item(s) from playlist");
KeyDesc(aClearMainPlaylist, "Clear playlist"); KeyDesc(aClearMainPlaylist, "Clear playlist");
KeyDesc(aCropMainPlaylist, "Clear playlist except selected item(s)"); KeyDesc(aCropMainPlaylist, "Clear playlist except selected item(s)");
KeyDesc(aSetSelectedItemsPriority, "Set priority of selected items"); KeyDesc(aSetSelectedItemsPriority, "Set priority of selected items");
@@ -298,7 +298,7 @@ void Help::GetKeybindings()
KeyDesc(aToggleBrowserSortMode, "Toggle sort mode"); KeyDesc(aToggleBrowserSortMode, "Toggle sort mode");
KeyDesc(aJumpToPlayingSong, "Locate playing song"); KeyDesc(aJumpToPlayingSong, "Locate playing song");
KeyDesc(aJumpToParentDirectory, "Jump to parent directory"); KeyDesc(aJumpToParentDirectory, "Jump to parent directory");
KeyDesc(aDelete, "Delete item"); KeyDesc(aDeleteBrowserItems, "Delete selected items from disk");
KeyDesc(aJumpToPlaylistEditor, "Jump to playlist editor (playlists only)"); KeyDesc(aJumpToPlaylistEditor, "Jump to playlist editor (playlists only)");
KeysSection("Search engine"); KeysSection("Search engine");
@@ -333,6 +333,8 @@ void Help::GetKeybindings()
KeyDesc(aEditPlaylistName, "Edit playlist name"); KeyDesc(aEditPlaylistName, "Edit playlist name");
KeyDesc(aMoveSelectedItemsUp, "Move selected item(s) up"); KeyDesc(aMoveSelectedItemsUp, "Move selected item(s) up");
KeyDesc(aMoveSelectedItemsDown, "Move selected item(s) down"); KeyDesc(aMoveSelectedItemsDown, "Move selected item(s) down");
KeyDesc(aDeleteStoredPlaylist, "Delete selected playlists (left column)");
KeyDesc(aDeletePlaylistItems, "Delete selected item(s) from playlist (right column)");
KeyDesc(aClearPlaylist, "Clear playlist"); KeyDesc(aClearPlaylist, "Clear playlist");
KeyDesc(aCropPlaylist, "Clear playlist except selected items"); KeyDesc(aCropPlaylist, "Clear playlist except selected items");