actions: implement filtering playlist on priorities

master
Andrzej Rybczak 14 years ago
parent 45a097a45b
commit a26b1f62f9
  1. 28
      src/actions.cpp
  2. 13
      src/actions.h
  3. 1
      src/bindings.cpp
  4. 1
      src/help.cpp
  5. 4
      src/utility/string.cpp
  6. 2
      src/utility/string.h

@ -2204,9 +2204,9 @@ void SetSelectedItemsPriority::Run()
Statusbar() << "Set priority [0-255]: ";
std::string strprio = wFooter->getString();
UnlockStatusbar();
if (!isInteger(strprio.c_str()))
if (!isInteger(strprio.c_str(), true))
return;
int prio = atoi(strprio.c_str());
int prio = stringToInt(strprio);
if (prio < 0 || prio > 255)
{
ShowMessage("Number is out of range");
@ -2215,6 +2215,29 @@ void SetSelectedItemsPriority::Run()
myPlaylist->SetSelectedItemsPriority(prio);
}
bool FilterPlaylistOnPriorities::canBeRun() const
{
return myScreen->ActiveWindow() == myPlaylist->Items;
}
void FilterPlaylistOnPriorities::Run()
{
using Global::wFooter;
LockStatusbar();
Statusbar() << "Show songs with priority higher than: ";
std::string strprio = wFooter->getString();
UnlockStatusbar();
if (!isInteger(strprio.c_str(), false))
return;
unsigned prio = stringToInt(strprio);
myPlaylist->Items->filter(myPlaylist->Items->begin(), myPlaylist->Items->end(),
[prio](const NC::Menu<MPD::Song>::Item &s) {
return s.value().getPrio() > prio;
});
ShowMessage("Playlist filtered (songs with priority higher than %u)", prio);
}
void ShowSongInfo::Run()
{
mySongInfo->SwitchTo();
@ -2578,6 +2601,7 @@ void populateActions()
insertAction(new RefetchLyrics());
insertAction(new RefetchArtistInfo());
insertAction(new SetSelectedItemsPriority());
insertAction(new FilterPlaylistOnPriorities());
insertAction(new ShowSongInfo());
insertAction(new ShowArtistInfo());
insertAction(new ShowLyrics());

@ -44,7 +44,8 @@ enum ActionType
aApplyFilter, aFind, aFindItemForward, aFindItemBackward, aNextFoundItem,
aPreviousFoundItem, aToggleFindMode, aToggleReplayGainMode, aToggleSpaceMode, aToggleAddMode,
aToggleMouse, aToggleBitrateVisibility, aAddRandomItems, aToggleBrowserSortMode, aToggleLibraryTagType,
aRefetchLyrics, aRefetchArtistInfo, aSetSelectedItemsPriority, aShowSongInfo, aShowArtistInfo,
aRefetchLyrics, aRefetchArtistInfo, aSetSelectedItemsPriority, aFilterPlaylistOnPriorities,
aShowSongInfo, aShowArtistInfo,
aShowLyrics, aQuit, aNextScreen, aPreviousScreen, aShowHelp, aShowPlaylist, aShowBrowser,
aShowSearchEngine, aShowMediaLibrary, aShowPlaylistEditor, aShowTagEditor, aShowOutputs,
aShowVisualizer, aShowClock, aShowServerInfo
@ -915,6 +916,16 @@ protected:
virtual void Run();
};
struct FilterPlaylistOnPriorities : public Action
{
FilterPlaylistOnPriorities()
: Action(aFilterPlaylistOnPriorities, "filter_playlist_on_priorities") { }
protected:
virtual bool canBeRun() const;
virtual void Run();
};
struct ShowSongInfo : public Action
{
ShowSongInfo() : Action(aShowSongInfo, "show_song_info") { }

@ -493,7 +493,6 @@ void BindingsConfiguration::generateDefaults()
if (notBound(k = stringToKey("q")))
bind(k, aQuit);
if (notBound(k = stringToKey("-")))
bind(k, aVolumeDown);
}

@ -297,6 +297,7 @@ void Help::GetKeybindings()
KeyDesc(aSavePlaylist, "Save playlist");
KeyDesc(aSortPlaylist, "Sort playlist");
KeyDesc(aReversePlaylist, "Reverse playlist");
KeyDesc(aFilterPlaylistOnPriorities, "Filter playlist on priorities");
KeyDesc(aJumpToPlayingSong, "Jump to playing song");
KeyDesc(aTogglePlayingSongCentering, "Toggle playing song centering");

@ -33,13 +33,13 @@ long stringToLongInt(const std::string &s)
return atol(s.c_str());
}
bool isInteger(const char *s)
bool isInteger(const char *s, bool accept_signed)
{
assert(s);
if (*s == '\0')
return false;
for (const char *it = s; *it != '\0'; ++it)
if (!isdigit(*it) && (it != s || *it != '-'))
if (!(isdigit(*it) || (accept_signed && it == s && *it == '-')))
return false;
return true;
}

@ -54,7 +54,7 @@ template <size_t N> struct print<N, std::wstring> {
int stringToInt(const std::string &s);
long stringToLongInt(const std::string &s);
bool isInteger(const char *s);
bool isInteger(const char *s, bool accept_signed);
std::string ToString(const std::wstring &ws);
std::wstring ToWString(const std::string &s);

Loading…
Cancel
Save