actions: require action to be non-null if we query by action type

This commit is contained in:
Andrzej Rybczak
2013-07-13 19:04:22 +02:00
parent fb9df0caee
commit 7167d036d0
5 changed files with 14 additions and 15 deletions

View File

@@ -282,11 +282,14 @@ bool isMPDMusicDirSet()
return true;
}
BaseAction *get(Actions::Type at)
BaseAction &get(Actions::Type at)
{
if (AvailableActions.empty())
populateActions();
return AvailableActions[at];
BaseAction *action = AvailableActions[at];
// action should be always present if action type in queried
assert(action != nullptr);
return *action;
}
BaseAction *get(const std::string &name)
@@ -348,9 +351,9 @@ void MouseEvent::run()
) // volume
{
if (m_mouse_event.bstate & BUTTON2_PRESSED)
get(Type::VolumeDown)->execute();
get(Type::VolumeDown).execute();
else
get(Type::VolumeUp)->execute();
get(Type::VolumeUp).execute();
}
else if (m_mouse_event.bstate & (BUTTON1_PRESSED | BUTTON2_PRESSED | BUTTON3_PRESSED | BUTTON4_PRESSED))
myScreen->mouseButtonPressed(m_mouse_event);
@@ -2573,8 +2576,8 @@ void seek()
int old_timeout = wFooter->getTimeout();
wFooter->setTimeout(500);
auto seekForward = Actions::get(Actions::Type::SeekForward);
auto seekBackward = Actions::get(Actions::Type::SeekBackward);
auto seekForward = &Actions::get(Actions::Type::SeekForward);
auto seekBackward = &Actions::get(Actions::Type::SeekBackward);
SeekingInProgress = true;
while (true)

View File

@@ -50,7 +50,7 @@ enum class Type
NextFoundItem, PreviousFoundItem, ToggleFindMode, ToggleReplayGainMode,
ToggleSpaceMode, ToggleAddMode, ToggleMouse, ToggleBitrateVisibility,
AddRandomItems, ToggleBrowserSortMode, ToggleLibraryTagType,
ToggleMediaLibrarySortMode, RefetchLyrics, RefetchArtistInfo,
ToggleMediaLibrarySortMode, RefetchLyrics,
SetSelectedItemsPriority, FilterPlaylistOnPriorities, ShowSongInfo,
ShowArtistInfo, ShowLyrics, Quit, NextScreen, PreviousScreen, ShowHelp,
ShowPlaylist, ShowBrowser, ChangeBrowseMode, ShowSearchEngine,
@@ -68,9 +68,6 @@ void setWindowsDimensions();
bool askYesNoQuestion(const std::string &question, void (*callback)());
bool isMPDMusicDirSet();
struct BaseAction *get(Type at);
struct BaseAction *get(const std::string &name);
extern bool OriginalStatusbarVisibility;
extern bool ExitMainLoop;
@@ -105,6 +102,9 @@ private:
const char *m_name;
};
BaseAction &get(Type at);
BaseAction *get(const std::string &name);
struct Dummy : public BaseAction
{
Dummy() : BaseAction(Type::Dummy, "dummy") { }

View File

@@ -582,7 +582,6 @@ void BindingsConfiguration::generateDefaults()
bind(k, Actions::Type::ToggleBrowserSortMode);
bind(k, Actions::Type::ToggleLibraryTagType);
bind(k, Actions::Type::RefetchLyrics);
bind(k, Actions::Type::RefetchArtistInfo);
bind(k, Actions::Type::AddRandomItems);
}
if (notBound(k = stringToKey("ctrl_p")))

View File

@@ -74,7 +74,7 @@ struct Binding
{
typedef std::vector<Actions::BaseAction *> ActionChain;
Binding(Actions::Type at) : m_is_single(true), m_action(Actions::get(at)) { }
Binding(Actions::Type at) : m_is_single(true), m_action(&Actions::get(at)) { }
Binding(const ActionChain &actions) {
assert(actions.size() > 0);
if (actions.size() == 1) {

View File

@@ -348,9 +348,6 @@ void Help::GetKeybindings()
KeyDesc(Actions::Type::EditLyrics, "Open lyrics in external editor");
KeyDesc(Actions::Type::RefetchLyrics, "Refetch lyrics");
KeysSection("Artist info");
KeyDesc(Actions::Type::RefetchArtistInfo, "Refetch artist info");
# ifdef HAVE_TAGLIB_H
KeysSection("Tiny tag editor");
KeyDesc(Actions::Type::PressEnter, "Edit tag");