From 3bd02f6abf1740028c2bef32789ebcfd1437cc9a Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Sat, 6 Oct 2012 18:28:14 +0200 Subject: [PATCH] actions: use namespace --- src/actions.cpp | 642 ++++++++++++++++++++-------------------- src/actions.h | 526 ++++++++++++++++---------------- src/bindings.cpp | 21 +- src/bindings.h | 8 +- src/cmdargs.cpp | 2 +- src/macro_utilities.cpp | 4 + src/macro_utilities.h | 24 +- src/ncmpcpp.cpp | 18 +- src/tag_editor.cpp | 4 +- 9 files changed, 633 insertions(+), 616 deletions(-) diff --git a/src/actions.cpp b/src/actions.cpp index d92bb733..3e4f5deb 100644 --- a/src/actions.cpp +++ b/src/actions.cpp @@ -65,23 +65,30 @@ using namespace std::placeholders; using Global::myScreen; -bool Action::OriginalStatusbarVisibility; -bool Action::ExitMainLoop = false; - -size_t Action::HeaderHeight; -size_t Action::FooterHeight; -size_t Action::FooterStartY; - namespace {// -std::map Actions; +enum class Find { Forward, Backward }; + +std::map AvailableActions; -void insertAction(Action *a); void populateActions(); +void seek(); +void findItem(const Find direction); +void listsChangeFinisher(); + } -void Action::validateScreenSize() +namespace Actions {// + +bool OriginalStatusbarVisibility; +bool ExitMainLoop = false; + +size_t HeaderHeight; +size_t FooterHeight; +size_t FooterStartY; + +void validateScreenSize() { using Global::MainHeight; @@ -93,7 +100,7 @@ void Action::validateScreenSize() } } -void Action::initializeScreens() +void initializeScreens() { myHelp = new Help; myPlaylist = new Playlist; @@ -130,7 +137,7 @@ void Action::initializeScreens() } -void Action::setResizeFlags() +void setResizeFlags() { myHelp->hasToBeResized = 1; myPlaylist->hasToBeResized = 1; @@ -166,7 +173,7 @@ void Action::setResizeFlags() # endif // ENABLE_CLOCK } -void Action::resizeScreen(bool reload_main_window) +void resizeScreen(bool reload_main_window) { using Global::MainHeight; using Global::wHeader; @@ -223,7 +230,7 @@ void Action::resizeScreen(bool reload_main_window) refresh(); } -void Action::setWindowsDimensions() +void setWindowsDimensions() { using Global::MainStartY; using Global::MainHeight; @@ -244,173 +251,7 @@ void Action::setWindowsDimensions() FooterHeight = Config.statusbar_visibility ? 2 : 1; } -void Action::seek() -{ - using Global::wHeader; - using Global::wFooter; - using Global::Timer; - using Global::SeekingInProgress; - - if (!Mpd.GetTotalTime()) - { - Statusbar::msg("Unknown item length"); - return; - } - - Progressbar::lock(); - Statusbar::lock(); - - int songpos = Mpd.GetElapsedTime(); - timeval t = Timer; - - int old_timeout = wFooter->getTimeout(); - wFooter->setTimeout(500); - - SeekingInProgress = true; - while (true) - { - Status::trace(); - myPlaylist->UpdateTimer(); - - int howmuch = Config.incremental_seeking ? (Timer.tv_sec-t.tv_sec)/2+Config.seek_time : Config.seek_time; - - Key input = Key::read(*wFooter); - auto k = Bindings.get(input); - if (k.first == k.second || !k.first->isSingle()) // no single action? - break; - Action *a = k.first->action(); - if (dynamic_cast(a)) - { - if (songpos < Mpd.GetTotalTime()) - { - songpos += howmuch; - if (songpos > Mpd.GetTotalTime()) - songpos = Mpd.GetTotalTime(); - } - } - else if (dynamic_cast(a)) - { - if (songpos > 0) - { - songpos -= howmuch; - if (songpos < 0) - songpos = 0; - } - } - else - break; - - *wFooter << NC::fmtBold; - std::string tracklength; - if (Config.new_design) - { - if (Config.display_remaining_time) - { - tracklength = "-"; - tracklength += MPD::Song::ShowTime(Mpd.GetTotalTime()-songpos); - } - else - tracklength = MPD::Song::ShowTime(songpos); - tracklength += "/"; - tracklength += MPD::Song::ShowTime(Mpd.GetTotalTime()); - *wHeader << NC::XY(0, 0) << tracklength << " "; - wHeader->refresh(); - } - else - { - tracklength = " ["; - if (Config.display_remaining_time) - { - tracklength += "-"; - tracklength += MPD::Song::ShowTime(Mpd.GetTotalTime()-songpos); - } - else - tracklength += MPD::Song::ShowTime(songpos); - tracklength += "/"; - tracklength += MPD::Song::ShowTime(Mpd.GetTotalTime()); - tracklength += "]"; - *wFooter << NC::XY(wFooter->getWidth()-tracklength.length(), 1) << tracklength; - } - *wFooter << NC::fmtBoldEnd; - Progressbar::draw(songpos, Mpd.GetTotalTime()); - wFooter->refresh(); - } - SeekingInProgress = false; - Mpd.Seek(songpos); - - wFooter->setTimeout(old_timeout); - - Progressbar::unlock(); - Statusbar::unlock(); -} - -void Action::findItem(const Find direction) -{ - using Global::wFooter; - - Searchable *w = dynamic_cast(myScreen); - assert(w); - assert(w->allowsSearching()); - - Statusbar::lock(); - Statusbar::put() << "Find " << (direction == Find::Forward ? "forward" : "backward") << ": "; - std::string findme = wFooter->getString(); - Statusbar::unlock(); - - if (!findme.empty()) - Statusbar::msg("Searching..."); - - bool success = w->search(findme); - - if (findme.empty()) - return; - - if (success) - Statusbar::msg("Searching finished"); - else - Statusbar::msg("Unable to find \"%s\"", findme.c_str()); - - if (direction == Find::Forward) - w->nextFound(Config.wrapped_search); - else - w->prevFound(Config.wrapped_search); - - if (myScreen == myPlaylist) - myPlaylist->EnableHighlighting(); -} - -void Action::listsChangeFinisher() -{ - if (myScreen == myLibrary - || myScreen == myPlaylistEditor -# ifdef HAVE_TAGLIB_H - || myScreen == myTagEditor -# endif // HAVE_TAGLIB_H - ) - { - if (myScreen->activeWindow() == &myLibrary->Tags) - { - myLibrary->Albums.clear(); - myLibrary->Songs.clear(); - } - else if (myScreen->activeWindow() == &myLibrary->Albums) - { - myLibrary->Songs.clear(); - } - else if (myScreen->isActiveWindow(myPlaylistEditor->Playlists)) - { - myPlaylistEditor->Content.clear(); - } -# ifdef HAVE_TAGLIB_H - else if (myScreen->activeWindow() == myTagEditor->Dirs) - { - myTagEditor->Tags->clear(); - } -# endif // HAVE_TAGLIB_H - } -} - -bool Action::connectToMPD() +bool connectToMPD() { if (!Mpd.Connect()) { @@ -422,7 +263,7 @@ bool Action::connectToMPD() return true; } -bool Action::askYesNoQuestion(const std::string &question, void (*callback)()) +bool askYesNoQuestion(const std::string &question, void (*callback)()) { using Global::wFooter; @@ -441,7 +282,7 @@ bool Action::askYesNoQuestion(const std::string &question, void (*callback)()) return answer == 'y'; } -bool Action::isMPDMusicDirSet() +bool isMPDMusicDirSet() { if (Config.mpd_music_dir.empty()) { @@ -451,19 +292,19 @@ bool Action::isMPDMusicDirSet() return true; } -Action *Action::get(ActionType at) +BaseAction *get(ActionType at) { - if (Actions.empty()) + if (AvailableActions.empty()) populateActions(); - return Actions[at]; + return AvailableActions[at]; } -Action *Action::get(const std::string &name) +BaseAction *get(const std::string &name) { - Action *result = 0; - if (Actions.empty()) + BaseAction *result = 0; + if (AvailableActions.empty()) populateActions(); - for (auto it = Actions.begin(); it != Actions.end(); ++it) + for (auto it = AvailableActions.begin(); it != AvailableActions.end(); ++it) { if (it->second->name() == name) { @@ -1651,7 +1492,7 @@ void ToggleScreenLock::run() if (myLockedScreen != 0) { BaseScreen::unlock(); - Action::setResizeFlags(); + Actions::setResizeFlags(); myScreen->resize(); Statusbar::msg("Screen unlocked"); } @@ -1982,7 +1823,7 @@ bool FindItemBackward::canBeRun() const void FindItemForward::run() { - findItem(Find::Forward); + findItem(::Find::Forward); listsChangeFinisher(); } @@ -1994,7 +1835,7 @@ bool FindItemForward::canBeRun() const void FindItemBackward::run() { - findItem(Find::Backward); + findItem(::Find::Backward); listsChangeFinisher(); } @@ -2574,133 +2415,302 @@ void ShowServerInfo::run() myServerInfo->switchTo(); } -namespace {// - -void insertAction(Action *a) -{ - Actions[a->type()] = a; } +namespace {// + void populateActions() { - insertAction(new Dummy()); - insertAction(new MouseEvent()); - insertAction(new ScrollUp()); - insertAction(new ScrollDown()); - insertAction(new ScrollUpArtist()); - insertAction(new ScrollUpAlbum()); - insertAction(new ScrollDownArtist()); - insertAction(new ScrollDownAlbum()); - insertAction(new PageUp()); - insertAction(new PageDown()); - insertAction(new MoveHome()); - insertAction(new MoveEnd()); - insertAction(new ToggleInterface()); - insertAction(new JumpToParentDirectory()); - insertAction(new PressEnter()); - insertAction(new PressSpace()); - insertAction(new PreviousColumn()); - insertAction(new NextColumn()); - insertAction(new MasterScreen()); - insertAction(new SlaveScreen()); - insertAction(new VolumeUp()); - insertAction(new VolumeDown()); - insertAction(new DeletePlaylistItems()); - insertAction(new DeleteStoredPlaylist()); - insertAction(new DeleteBrowserItems()); - insertAction(new ReplaySong()); - insertAction(new PreviousSong()); - insertAction(new NextSong()); - insertAction(new Pause()); - insertAction(new Stop()); - insertAction(new ExecuteCommand()); - insertAction(new SavePlaylist()); - insertAction(new MoveSortOrderUp()); - insertAction(new MoveSortOrderDown()); - insertAction(new MoveSelectedItemsUp()); - insertAction(new MoveSelectedItemsDown()); - insertAction(new MoveSelectedItemsTo()); - insertAction(new Add()); - insertAction(new SeekForward()); - insertAction(new SeekBackward()); - insertAction(new ToggleDisplayMode()); - insertAction(new ToggleSeparatorsBetweenAlbums()); - insertAction(new ToggleLyricsFetcher()); - insertAction(new ToggleFetchingLyricsInBackground()); - insertAction(new TogglePlayingSongCentering()); - insertAction(new UpdateDatabase()); - insertAction(new JumpToPlayingSong()); - insertAction(new ToggleRepeat()); - insertAction(new Shuffle()); - insertAction(new ToggleRandom()); - insertAction(new StartSearching()); - insertAction(new SaveTagChanges()); - insertAction(new ToggleSingle()); - insertAction(new ToggleConsume()); - insertAction(new ToggleCrossfade()); - insertAction(new SetCrossfade()); - insertAction(new EditSong()); - insertAction(new EditLibraryTag()); - insertAction(new EditLibraryAlbum()); - insertAction(new EditDirectoryName()); - insertAction(new EditPlaylistName()); - insertAction(new EditLyrics()); - insertAction(new JumpToBrowser()); - insertAction(new JumpToMediaLibrary()); - insertAction(new JumpToPlaylistEditor()); - insertAction(new ToggleScreenLock()); - insertAction(new JumpToTagEditor()); - insertAction(new JumpToPositionInSong()); - insertAction(new ReverseSelection()); - insertAction(new RemoveSelection()); - insertAction(new SelectAlbum()); - insertAction(new AddSelectedItems()); - insertAction(new CropMainPlaylist()); - insertAction(new CropPlaylist()); - insertAction(new ClearMainPlaylist()); - insertAction(new ClearPlaylist()); - insertAction(new SortPlaylist()); - insertAction(new ReversePlaylist()); - insertAction(new ApplyFilter()); - insertAction(new Find()); - insertAction(new FindItemForward()); - insertAction(new FindItemBackward()); - insertAction(new NextFoundItem()); - insertAction(new PreviousFoundItem()); - insertAction(new ToggleFindMode()); - insertAction(new ToggleReplayGainMode()); - insertAction(new ToggleSpaceMode()); - insertAction(new ToggleAddMode()); - insertAction(new ToggleMouse()); - insertAction(new ToggleBitrateVisibility()); - insertAction(new AddRandomItems()); - insertAction(new ToggleBrowserSortMode()); - insertAction(new ToggleLibraryTagType()); - insertAction(new ToggleMediaLibrarySortMode()); - insertAction(new RefetchLyrics()); - insertAction(new RefetchArtistInfo()); - insertAction(new SetSelectedItemsPriority()); - insertAction(new FilterPlaylistOnPriorities()); - insertAction(new ShowSongInfo()); - insertAction(new ShowArtistInfo()); - insertAction(new ShowLyrics()); - insertAction(new Quit()); - insertAction(new NextScreen()); - insertAction(new PreviousScreen()); - insertAction(new ShowHelp()); - insertAction(new ShowPlaylist()); - insertAction(new ShowBrowser()); - insertAction(new ChangeBrowseMode()); - insertAction(new ShowSearchEngine()); - insertAction(new ResetSearchEngine()); - insertAction(new ShowMediaLibrary()); - insertAction(new ToggleMediaLibraryColumnsMode()); - insertAction(new ShowPlaylistEditor()); - insertAction(new ShowTagEditor()); - insertAction(new ShowOutputs()); - insertAction(new ShowVisualizer()); - insertAction(new ShowClock()); - insertAction(new ShowServerInfo()); + auto insert_action = [](Actions::BaseAction *a) { + AvailableActions[a->type()] = a; + }; + insert_action(new Actions::Dummy()); + insert_action(new Actions::MouseEvent()); + insert_action(new Actions::ScrollUp()); + insert_action(new Actions::ScrollDown()); + insert_action(new Actions::ScrollUpArtist()); + insert_action(new Actions::ScrollUpAlbum()); + insert_action(new Actions::ScrollDownArtist()); + insert_action(new Actions::ScrollDownAlbum()); + insert_action(new Actions::PageUp()); + insert_action(new Actions::PageDown()); + insert_action(new Actions::MoveHome()); + insert_action(new Actions::MoveEnd()); + insert_action(new Actions::ToggleInterface()); + insert_action(new Actions::JumpToParentDirectory()); + insert_action(new Actions::PressEnter()); + insert_action(new Actions::PressSpace()); + insert_action(new Actions::PreviousColumn()); + insert_action(new Actions::NextColumn()); + insert_action(new Actions::MasterScreen()); + insert_action(new Actions::SlaveScreen()); + insert_action(new Actions::VolumeUp()); + insert_action(new Actions::VolumeDown()); + insert_action(new Actions::DeletePlaylistItems()); + insert_action(new Actions::DeleteStoredPlaylist()); + insert_action(new Actions::DeleteBrowserItems()); + insert_action(new Actions::ReplaySong()); + insert_action(new Actions::PreviousSong()); + insert_action(new Actions::NextSong()); + insert_action(new Actions::Pause()); + insert_action(new Actions::Stop()); + insert_action(new Actions::ExecuteCommand()); + insert_action(new Actions::SavePlaylist()); + insert_action(new Actions::MoveSortOrderUp()); + insert_action(new Actions::MoveSortOrderDown()); + insert_action(new Actions::MoveSelectedItemsUp()); + insert_action(new Actions::MoveSelectedItemsDown()); + insert_action(new Actions::MoveSelectedItemsTo()); + insert_action(new Actions::Add()); + insert_action(new Actions::SeekForward()); + insert_action(new Actions::SeekBackward()); + insert_action(new Actions::ToggleDisplayMode()); + insert_action(new Actions::ToggleSeparatorsBetweenAlbums()); + insert_action(new Actions::ToggleLyricsFetcher()); + insert_action(new Actions::ToggleFetchingLyricsInBackground()); + insert_action(new Actions::TogglePlayingSongCentering()); + insert_action(new Actions::UpdateDatabase()); + insert_action(new Actions::JumpToPlayingSong()); + insert_action(new Actions::ToggleRepeat()); + insert_action(new Actions::Shuffle()); + insert_action(new Actions::ToggleRandom()); + insert_action(new Actions::StartSearching()); + insert_action(new Actions::SaveTagChanges()); + insert_action(new Actions::ToggleSingle()); + insert_action(new Actions::ToggleConsume()); + insert_action(new Actions::ToggleCrossfade()); + insert_action(new Actions::SetCrossfade()); + insert_action(new Actions::EditSong()); + insert_action(new Actions::EditLibraryTag()); + insert_action(new Actions::EditLibraryAlbum()); + insert_action(new Actions::EditDirectoryName()); + insert_action(new Actions::EditPlaylistName()); + insert_action(new Actions::EditLyrics()); + insert_action(new Actions::JumpToBrowser()); + insert_action(new Actions::JumpToMediaLibrary()); + insert_action(new Actions::JumpToPlaylistEditor()); + insert_action(new Actions::ToggleScreenLock()); + insert_action(new Actions::JumpToTagEditor()); + insert_action(new Actions::JumpToPositionInSong()); + insert_action(new Actions::ReverseSelection()); + insert_action(new Actions::RemoveSelection()); + insert_action(new Actions::SelectAlbum()); + insert_action(new Actions::AddSelectedItems()); + insert_action(new Actions::CropMainPlaylist()); + insert_action(new Actions::CropPlaylist()); + insert_action(new Actions::ClearMainPlaylist()); + insert_action(new Actions::ClearPlaylist()); + insert_action(new Actions::SortPlaylist()); + insert_action(new Actions::ReversePlaylist()); + insert_action(new Actions::ApplyFilter()); + insert_action(new Actions::Find()); + insert_action(new Actions::FindItemForward()); + insert_action(new Actions::FindItemBackward()); + insert_action(new Actions::NextFoundItem()); + insert_action(new Actions::PreviousFoundItem()); + insert_action(new Actions::ToggleFindMode()); + insert_action(new Actions::ToggleReplayGainMode()); + insert_action(new Actions::ToggleSpaceMode()); + insert_action(new Actions::ToggleAddMode()); + insert_action(new Actions::ToggleMouse()); + insert_action(new Actions::ToggleBitrateVisibility()); + insert_action(new Actions::AddRandomItems()); + insert_action(new Actions::ToggleBrowserSortMode()); + insert_action(new Actions::ToggleLibraryTagType()); + insert_action(new Actions::ToggleMediaLibrarySortMode()); + insert_action(new Actions::RefetchLyrics()); + insert_action(new Actions::RefetchArtistInfo()); + insert_action(new Actions::SetSelectedItemsPriority()); + insert_action(new Actions::FilterPlaylistOnPriorities()); + insert_action(new Actions::ShowSongInfo()); + insert_action(new Actions::ShowArtistInfo()); + insert_action(new Actions::ShowLyrics()); + insert_action(new Actions::Quit()); + insert_action(new Actions::NextScreen()); + insert_action(new Actions::PreviousScreen()); + insert_action(new Actions::ShowHelp()); + insert_action(new Actions::ShowPlaylist()); + insert_action(new Actions::ShowBrowser()); + insert_action(new Actions::ChangeBrowseMode()); + insert_action(new Actions::ShowSearchEngine()); + insert_action(new Actions::ResetSearchEngine()); + insert_action(new Actions::ShowMediaLibrary()); + insert_action(new Actions::ToggleMediaLibraryColumnsMode()); + insert_action(new Actions::ShowPlaylistEditor()); + insert_action(new Actions::ShowTagEditor()); + insert_action(new Actions::ShowOutputs()); + insert_action(new Actions::ShowVisualizer()); + insert_action(new Actions::ShowClock()); + insert_action(new Actions::ShowServerInfo()); +} + +void seek() +{ + using Global::wHeader; + using Global::wFooter; + using Global::Timer; + using Global::SeekingInProgress; + + if (!Mpd.GetTotalTime()) + { + Statusbar::msg("Unknown item length"); + return; + } + + Progressbar::lock(); + Statusbar::lock(); + + int songpos = Mpd.GetElapsedTime(); + timeval t = Timer; + + int old_timeout = wFooter->getTimeout(); + wFooter->setTimeout(500); + + auto seekForward = Actions::get(aSeekForward); + auto seekBackward = Actions::get(aSeekBackward); + + SeekingInProgress = true; + while (true) + { + Status::trace(); + myPlaylist->UpdateTimer(); + + int howmuch = Config.incremental_seeking ? (Timer.tv_sec-t.tv_sec)/2+Config.seek_time : Config.seek_time; + + Key input = Key::read(*wFooter); + auto k = Bindings.get(input); + if (k.first == k.second || !k.first->isSingle()) // no single action? + break; + auto a = k.first->action(); + if (a == seekForward) + { + if (songpos < Mpd.GetTotalTime()) + { + songpos += howmuch; + if (songpos > Mpd.GetTotalTime()) + songpos = Mpd.GetTotalTime(); + } + } + else if (a == seekBackward) + { + if (songpos > 0) + { + songpos -= howmuch; + if (songpos < 0) + songpos = 0; + } + } + else + break; + + *wFooter << NC::fmtBold; + std::string tracklength; + if (Config.new_design) + { + if (Config.display_remaining_time) + { + tracklength = "-"; + tracklength += MPD::Song::ShowTime(Mpd.GetTotalTime()-songpos); + } + else + tracklength = MPD::Song::ShowTime(songpos); + tracklength += "/"; + tracklength += MPD::Song::ShowTime(Mpd.GetTotalTime()); + *wHeader << NC::XY(0, 0) << tracklength << " "; + wHeader->refresh(); + } + else + { + tracklength = " ["; + if (Config.display_remaining_time) + { + tracklength += "-"; + tracklength += MPD::Song::ShowTime(Mpd.GetTotalTime()-songpos); + } + else + tracklength += MPD::Song::ShowTime(songpos); + tracklength += "/"; + tracklength += MPD::Song::ShowTime(Mpd.GetTotalTime()); + tracklength += "]"; + *wFooter << NC::XY(wFooter->getWidth()-tracklength.length(), 1) << tracklength; + } + *wFooter << NC::fmtBoldEnd; + Progressbar::draw(songpos, Mpd.GetTotalTime()); + wFooter->refresh(); + } + SeekingInProgress = false; + Mpd.Seek(songpos); + + wFooter->setTimeout(old_timeout); + + Progressbar::unlock(); + Statusbar::unlock(); +} + +void findItem(const Find direction) +{ + using Global::wFooter; + + Searchable *w = dynamic_cast(myScreen); + assert(w); + assert(w->allowsSearching()); + + Statusbar::lock(); + Statusbar::put() << "Find " << (direction == Find::Forward ? "forward" : "backward") << ": "; + std::string findme = wFooter->getString(); + Statusbar::unlock(); + + if (!findme.empty()) + Statusbar::msg("Searching..."); + + bool success = w->search(findme); + + if (findme.empty()) + return; + + if (success) + Statusbar::msg("Searching finished"); + else + Statusbar::msg("Unable to find \"%s\"", findme.c_str()); + + if (direction == ::Find::Forward) + w->nextFound(Config.wrapped_search); + else + w->prevFound(Config.wrapped_search); + + if (myScreen == myPlaylist) + myPlaylist->EnableHighlighting(); +} + +void listsChangeFinisher() +{ + if (myScreen == myLibrary + || myScreen == myPlaylistEditor +# ifdef HAVE_TAGLIB_H + || myScreen == myTagEditor +# endif // HAVE_TAGLIB_H + ) + { + if (myScreen->activeWindow() == &myLibrary->Tags) + { + myLibrary->Albums.clear(); + myLibrary->Songs.clear(); + } + else if (myScreen->activeWindow() == &myLibrary->Albums) + { + myLibrary->Songs.clear(); + } + else if (myScreen->isActiveWindow(myPlaylistEditor->Playlists)) + { + myPlaylistEditor->Content.clear(); + } +# ifdef HAVE_TAGLIB_H + else if (myScreen->activeWindow() == myTagEditor->Dirs) + { + myTagEditor->Tags->clear(); + } +# endif // HAVE_TAGLIB_H + } } } diff --git a/src/actions.h b/src/actions.h index 7816f162..55b2b6bc 100644 --- a/src/actions.h +++ b/src/actions.h @@ -57,11 +57,31 @@ enum ActionType aShowClock, aShowServerInfo }; -struct Action +namespace Actions {// + +void validateScreenSize(); +void initializeScreens(); +void setResizeFlags(); +void resizeScreen(bool reload_main_window); +void setWindowsDimensions(); + +bool connectToMPD(); +bool askYesNoQuestion(const std::string &question, void (*callback)()); +bool isMPDMusicDirSet(); + +struct BaseAction *get(ActionType at); +struct BaseAction *get(const std::string &name); + +extern bool OriginalStatusbarVisibility; +extern bool ExitMainLoop; + +extern size_t HeaderHeight; +extern size_t FooterHeight; +extern size_t FooterStartY; + +struct BaseAction { - enum class Find { Forward, Backward }; - - Action(ActionType type, const char *name) : m_type(type), m_name(name) { } + BaseAction(ActionType type, const char *name) : m_type(type), m_name(name) { } const char *name() const { return m_name; } ActionType type() const { return m_type; } @@ -78,49 +98,25 @@ struct Action return false; } - static void validateScreenSize(); - static void initializeScreens(); - static void setResizeFlags(); - static void resizeScreen(bool reload_main_window); - static void setWindowsDimensions(); - - static bool connectToMPD(); - static bool askYesNoQuestion(const std::string &question, void (*callback)()); - static bool isMPDMusicDirSet(); - - static Action *get(ActionType at); - static Action *get(const std::string &name); - - static bool OriginalStatusbarVisibility; - static bool ExitMainLoop; - - static size_t HeaderHeight; - static size_t FooterHeight; - static size_t FooterStartY; - protected: virtual void run() = 0; - static void seek(); - static void findItem(const Find direction); - static void listsChangeFinisher(); - private: ActionType m_type; const char *m_name; }; -struct Dummy : public Action +struct Dummy : public BaseAction { - Dummy() : Action(aDummy, "dummy") { } + Dummy() : BaseAction(aDummy, "dummy") { } protected: virtual void run() { } }; -struct MouseEvent : public Action +struct MouseEvent : public BaseAction { - MouseEvent() : Action(aMouseEvent, "mouse_event") { } + MouseEvent() : BaseAction(aMouseEvent, "mouse_event") { } protected: virtual bool canBeRun() const; @@ -131,352 +127,352 @@ protected: MEVENT m_old_mouse_event; }; -struct ScrollUp : public Action +struct ScrollUp : public BaseAction { - ScrollUp() : Action(aScrollUp, "scroll_up") { } + ScrollUp() : BaseAction(aScrollUp, "scroll_up") { } protected: virtual void run(); }; -struct ScrollDown : public Action +struct ScrollDown : public BaseAction { - ScrollDown() : Action(aScrollDown, "scroll_down") { } + ScrollDown() : BaseAction(aScrollDown, "scroll_down") { } protected: virtual void run(); }; -struct ScrollUpArtist : public Action +struct ScrollUpArtist : public BaseAction { - ScrollUpArtist() : Action(aScrollUpArtist, "scroll_up_artist") { } + ScrollUpArtist() : BaseAction(aScrollUpArtist, "scroll_up_artist") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ScrollUpAlbum : public Action +struct ScrollUpAlbum : public BaseAction { - ScrollUpAlbum() : Action(aScrollUpAlbum, "scroll_up_album") { } + ScrollUpAlbum() : BaseAction(aScrollUpAlbum, "scroll_up_album") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ScrollDownArtist : public Action +struct ScrollDownArtist : public BaseAction { - ScrollDownArtist() : Action(aScrollDownArtist, "scroll_down_artist") { } + ScrollDownArtist() : BaseAction(aScrollDownArtist, "scroll_down_artist") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ScrollDownAlbum : public Action +struct ScrollDownAlbum : public BaseAction { - ScrollDownAlbum() : Action(aScrollDownAlbum, "scroll_down_album") { } + ScrollDownAlbum() : BaseAction(aScrollDownAlbum, "scroll_down_album") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct PageUp : public Action +struct PageUp : public BaseAction { - PageUp() : Action(aPageUp, "page_up") { } + PageUp() : BaseAction(aPageUp, "page_up") { } protected: virtual void run(); }; -struct PageDown : public Action +struct PageDown : public BaseAction { - PageDown() : Action(aPageDown, "page_down") { } + PageDown() : BaseAction(aPageDown, "page_down") { } protected: virtual void run(); }; -struct MoveHome : public Action +struct MoveHome : public BaseAction { - MoveHome() : Action(aMoveHome, "move_home") { } + MoveHome() : BaseAction(aMoveHome, "move_home") { } protected: virtual void run(); }; -struct MoveEnd : public Action +struct MoveEnd : public BaseAction { - MoveEnd() : Action(aMoveEnd, "move_end") { } + MoveEnd() : BaseAction(aMoveEnd, "move_end") { } protected: virtual void run(); }; -struct ToggleInterface : public Action +struct ToggleInterface : public BaseAction { - ToggleInterface() : Action(aToggleInterface, "toggle_interface") { } + ToggleInterface() : BaseAction(aToggleInterface, "toggle_interface") { } protected: virtual void run(); }; -struct JumpToParentDirectory : public Action +struct JumpToParentDirectory : public BaseAction { - JumpToParentDirectory() : Action(aJumpToParentDirectory, "jump_to_parent_directory") { } + JumpToParentDirectory() : BaseAction(aJumpToParentDirectory, "jump_to_parent_directory") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct PressEnter : public Action +struct PressEnter : public BaseAction { - PressEnter() : Action(aPressEnter, "press_enter") { } + PressEnter() : BaseAction(aPressEnter, "press_enter") { } protected: virtual void run(); }; -struct PressSpace : public Action +struct PressSpace : public BaseAction { - PressSpace() : Action(aPressSpace, "press_space") { } + PressSpace() : BaseAction(aPressSpace, "press_space") { } protected: virtual void run(); }; -struct PreviousColumn : public Action +struct PreviousColumn : public BaseAction { - PreviousColumn() : Action(aPreviousColumn, "previous_column") { } + PreviousColumn() : BaseAction(aPreviousColumn, "previous_column") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct NextColumn : public Action +struct NextColumn : public BaseAction { - NextColumn() : Action(aNextColumn, "next_column") { } + NextColumn() : BaseAction(aNextColumn, "next_column") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct MasterScreen : public Action +struct MasterScreen : public BaseAction { - MasterScreen() : Action(aMasterScreen, "master_screen") { } + MasterScreen() : BaseAction(aMasterScreen, "master_screen") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct SlaveScreen : public Action +struct SlaveScreen : public BaseAction { - SlaveScreen() : Action(aSlaveScreen, "slave_screen") { } + SlaveScreen() : BaseAction(aSlaveScreen, "slave_screen") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct VolumeUp : public Action +struct VolumeUp : public BaseAction { - VolumeUp() : Action(aVolumeUp, "volume_up") { } + VolumeUp() : BaseAction(aVolumeUp, "volume_up") { } protected: virtual void run(); }; -struct VolumeDown : public Action +struct VolumeDown : public BaseAction { - VolumeDown() : Action(aVolumeDown, "volume_down") { } + VolumeDown() : BaseAction(aVolumeDown, "volume_down") { } protected: virtual void run(); }; -struct DeletePlaylistItems : public Action +struct DeletePlaylistItems : public BaseAction { - DeletePlaylistItems() : Action(aDeletePlaylistItems, "delete_playlist_items") { } + DeletePlaylistItems() : BaseAction(aDeletePlaylistItems, "delete_playlist_items") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct DeleteStoredPlaylist : public Action +struct DeleteStoredPlaylist : public BaseAction { - DeleteStoredPlaylist() : Action(aDeleteStoredPlaylist, "delete_stored_playlist") { } + DeleteStoredPlaylist() : BaseAction(aDeleteStoredPlaylist, "delete_stored_playlist") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct DeleteBrowserItems : public Action +struct DeleteBrowserItems : public BaseAction { - DeleteBrowserItems() : Action(aDeleteBrowserItems, "delete_browser_items") { } + DeleteBrowserItems() : BaseAction(aDeleteBrowserItems, "delete_browser_items") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ReplaySong : public Action +struct ReplaySong : public BaseAction { - ReplaySong() : Action(aReplaySong, "replay_song") { } + ReplaySong() : BaseAction(aReplaySong, "replay_song") { } protected: virtual void run(); }; -struct PreviousSong : public Action +struct PreviousSong : public BaseAction { - PreviousSong() : Action(aPrevious, "previous") { } + PreviousSong() : BaseAction(aPrevious, "previous") { } protected: virtual void run(); }; -struct NextSong : public Action +struct NextSong : public BaseAction { - NextSong() : Action(aNext, "next") { } + NextSong() : BaseAction(aNext, "next") { } protected: virtual void run(); }; -struct Pause : public Action +struct Pause : public BaseAction { - Pause() : Action(aPause, "pause") { } + Pause() : BaseAction(aPause, "pause") { } protected: virtual void run(); }; -struct Stop : public Action +struct Stop : public BaseAction { - Stop() : Action(aStop, "stop") { } + Stop() : BaseAction(aStop, "stop") { } protected: virtual void run(); }; -struct ExecuteCommand : public Action +struct ExecuteCommand : public BaseAction { - ExecuteCommand() : Action(aExecuteCommand, "execute_command") { } + ExecuteCommand() : BaseAction(aExecuteCommand, "execute_command") { } protected: virtual void run(); }; -struct SavePlaylist : public Action +struct SavePlaylist : public BaseAction { - SavePlaylist() : Action(aSavePlaylist, "save_playlist") { } + SavePlaylist() : BaseAction(aSavePlaylist, "save_playlist") { } protected: virtual void run(); }; -struct MoveSortOrderUp : public Action +struct MoveSortOrderUp : public BaseAction { - MoveSortOrderUp() : Action(aMoveSortOrderUp, "move_sort_order_up") { } + MoveSortOrderUp() : BaseAction(aMoveSortOrderUp, "move_sort_order_up") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct MoveSortOrderDown : public Action +struct MoveSortOrderDown : public BaseAction { - MoveSortOrderDown() : Action(aMoveSortOrderDown, "move_sort_order_down") { } + MoveSortOrderDown() : BaseAction(aMoveSortOrderDown, "move_sort_order_down") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct MoveSelectedItemsUp : public Action +struct MoveSelectedItemsUp : public BaseAction { - MoveSelectedItemsUp() : Action(aMoveSelectedItemsUp, "move_selected_items_up") { } + MoveSelectedItemsUp() : BaseAction(aMoveSelectedItemsUp, "move_selected_items_up") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct MoveSelectedItemsDown : public Action +struct MoveSelectedItemsDown : public BaseAction { - MoveSelectedItemsDown() : Action(aMoveSelectedItemsDown, "move_selected_items_down") { } + MoveSelectedItemsDown() : BaseAction(aMoveSelectedItemsDown, "move_selected_items_down") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct MoveSelectedItemsTo : public Action +struct MoveSelectedItemsTo : public BaseAction { - MoveSelectedItemsTo() : Action(aMoveSelectedItemsTo, "move_selected_items_to") { } + MoveSelectedItemsTo() : BaseAction(aMoveSelectedItemsTo, "move_selected_items_to") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct Add : public Action +struct Add : public BaseAction { - Add() : Action(aAdd, "add") { } + Add() : BaseAction(aAdd, "add") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct SeekForward : public Action +struct SeekForward : public BaseAction { - SeekForward() : Action(aSeekForward, "seek_forward") { } + SeekForward() : BaseAction(aSeekForward, "seek_forward") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct SeekBackward : public Action +struct SeekBackward : public BaseAction { - SeekBackward() : Action(aSeekBackward, "seek_backward") { } + SeekBackward() : BaseAction(aSeekBackward, "seek_backward") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ToggleDisplayMode : public Action +struct ToggleDisplayMode : public BaseAction { - ToggleDisplayMode() : Action(aToggleDisplayMode, "toggle_display_mode") { } + ToggleDisplayMode() : BaseAction(aToggleDisplayMode, "toggle_display_mode") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ToggleSeparatorsBetweenAlbums : public Action +struct ToggleSeparatorsBetweenAlbums : public BaseAction { ToggleSeparatorsBetweenAlbums() - : Action(aToggleSeparatorsBetweenAlbums, "toggle_separators_between_albums") { } + : BaseAction(aToggleSeparatorsBetweenAlbums, "toggle_separators_between_albums") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ToggleLyricsFetcher : public Action +struct ToggleLyricsFetcher : public BaseAction { - ToggleLyricsFetcher() : Action(aToggleLyricsFetcher, "toggle_lyrics_fetcher") { } + ToggleLyricsFetcher() : BaseAction(aToggleLyricsFetcher, "toggle_lyrics_fetcher") { } protected: # ifndef HAVE_CURL_CURL_H @@ -485,10 +481,10 @@ protected: virtual void run(); }; -struct ToggleFetchingLyricsInBackground : public Action +struct ToggleFetchingLyricsInBackground : public BaseAction { ToggleFetchingLyricsInBackground() - : Action(aToggleFetchingLyricsInBackground, "toggle_fetching_lyrics_in_background") { } + : BaseAction(aToggleFetchingLyricsInBackground, "toggle_fetching_lyrics_in_background") { } protected: # ifndef HAVE_CURL_CURL_H @@ -497,647 +493,647 @@ protected: virtual void run(); }; -struct TogglePlayingSongCentering : public Action +struct TogglePlayingSongCentering : public BaseAction { TogglePlayingSongCentering() - : Action(aTogglePlayingSongCentering, "toggle_playing_song_centering") { } + : BaseAction(aTogglePlayingSongCentering, "toggle_playing_song_centering") { } protected: virtual void run(); }; -struct UpdateDatabase : public Action +struct UpdateDatabase : public BaseAction { - UpdateDatabase() : Action(aUpdateDatabase, "update_database") { } + UpdateDatabase() : BaseAction(aUpdateDatabase, "update_database") { } protected: virtual void run(); }; -struct JumpToPlayingSong : public Action +struct JumpToPlayingSong : public BaseAction { - JumpToPlayingSong() : Action(aJumpToPlayingSong, "jump_to_playing_song") { } + JumpToPlayingSong() : BaseAction(aJumpToPlayingSong, "jump_to_playing_song") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ToggleRepeat : public Action +struct ToggleRepeat : public BaseAction { - ToggleRepeat() : Action(aToggleRepeat, "toggle_repeat") { } + ToggleRepeat() : BaseAction(aToggleRepeat, "toggle_repeat") { } protected: virtual void run(); }; -struct Shuffle : public Action +struct Shuffle : public BaseAction { - Shuffle() : Action(aShuffle, "shuffle") { } + Shuffle() : BaseAction(aShuffle, "shuffle") { } protected: virtual void run(); }; -struct ToggleRandom : public Action +struct ToggleRandom : public BaseAction { - ToggleRandom() : Action(aToggleRandom, "toggle_random") { } + ToggleRandom() : BaseAction(aToggleRandom, "toggle_random") { } protected: virtual void run(); }; -struct StartSearching : public Action +struct StartSearching : public BaseAction { - StartSearching() : Action(aStartSearching, "start_searching") { } + StartSearching() : BaseAction(aStartSearching, "start_searching") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct SaveTagChanges : public Action +struct SaveTagChanges : public BaseAction { - SaveTagChanges() : Action(aSaveTagChanges, "save_tag_changes") { } + SaveTagChanges() : BaseAction(aSaveTagChanges, "save_tag_changes") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ToggleSingle : public Action +struct ToggleSingle : public BaseAction { - ToggleSingle() : Action(aToggleSingle, "toggle_single") { } + ToggleSingle() : BaseAction(aToggleSingle, "toggle_single") { } protected: virtual void run(); }; -struct ToggleConsume : public Action +struct ToggleConsume : public BaseAction { - ToggleConsume() : Action(aToggleConsume, "toggle_consume") { } + ToggleConsume() : BaseAction(aToggleConsume, "toggle_consume") { } protected: virtual void run(); }; -struct ToggleCrossfade : public Action +struct ToggleCrossfade : public BaseAction { - ToggleCrossfade() : Action(aToggleCrossfade, "toggle_crossfade") { } + ToggleCrossfade() : BaseAction(aToggleCrossfade, "toggle_crossfade") { } protected: virtual void run(); }; -struct SetCrossfade : public Action +struct SetCrossfade : public BaseAction { - SetCrossfade() : Action(aSetCrossfade, "set_crossfade") { } + SetCrossfade() : BaseAction(aSetCrossfade, "set_crossfade") { } protected: virtual void run(); }; -struct EditSong : public Action +struct EditSong : public BaseAction { - EditSong() : Action(aEditSong, "edit_song") { } + EditSong() : BaseAction(aEditSong, "edit_song") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct EditLibraryTag : public Action +struct EditLibraryTag : public BaseAction { - EditLibraryTag() : Action(aEditLibraryTag, "edit_library_tag") { } + EditLibraryTag() : BaseAction(aEditLibraryTag, "edit_library_tag") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct EditLibraryAlbum : public Action +struct EditLibraryAlbum : public BaseAction { - EditLibraryAlbum() : Action(aEditLibraryAlbum, "edit_library_album") { } + EditLibraryAlbum() : BaseAction(aEditLibraryAlbum, "edit_library_album") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct EditDirectoryName : public Action +struct EditDirectoryName : public BaseAction { - EditDirectoryName() : Action(aEditDirectoryName, "edit_directory_name") { } + EditDirectoryName() : BaseAction(aEditDirectoryName, "edit_directory_name") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct EditPlaylistName : public Action +struct EditPlaylistName : public BaseAction { - EditPlaylistName() : Action(aEditPlaylistName, "edit_playlist_name") { } + EditPlaylistName() : BaseAction(aEditPlaylistName, "edit_playlist_name") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct EditLyrics : public Action +struct EditLyrics : public BaseAction { - EditLyrics() : Action(aEditLyrics, "edit_lyrics") { } + EditLyrics() : BaseAction(aEditLyrics, "edit_lyrics") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct JumpToBrowser : public Action +struct JumpToBrowser : public BaseAction { - JumpToBrowser() : Action(aJumpToBrowser, "jump_to_browser") { } + JumpToBrowser() : BaseAction(aJumpToBrowser, "jump_to_browser") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct JumpToMediaLibrary : public Action +struct JumpToMediaLibrary : public BaseAction { - JumpToMediaLibrary() : Action(aJumpToMediaLibrary, "jump_to_media_library") { } + JumpToMediaLibrary() : BaseAction(aJumpToMediaLibrary, "jump_to_media_library") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct JumpToPlaylistEditor : public Action +struct JumpToPlaylistEditor : public BaseAction { - JumpToPlaylistEditor() : Action(aJumpToPlaylistEditor, "jump_to_playlist_editor") { } + JumpToPlaylistEditor() : BaseAction(aJumpToPlaylistEditor, "jump_to_playlist_editor") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ToggleScreenLock : public Action +struct ToggleScreenLock : public BaseAction { - ToggleScreenLock() : Action(aToggleScreenLock, "toggle_screen_lock") { } + ToggleScreenLock() : BaseAction(aToggleScreenLock, "toggle_screen_lock") { } protected: virtual void run(); }; -struct JumpToTagEditor : public Action +struct JumpToTagEditor : public BaseAction { - JumpToTagEditor() : Action(aJumpToTagEditor, "jump_to_tag_editor") { } + JumpToTagEditor() : BaseAction(aJumpToTagEditor, "jump_to_tag_editor") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct JumpToPositionInSong : public Action +struct JumpToPositionInSong : public BaseAction { - JumpToPositionInSong() : Action(aJumpToPositionInSong, "jump_to_position_in_song") { } + JumpToPositionInSong() : BaseAction(aJumpToPositionInSong, "jump_to_position_in_song") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ReverseSelection : public Action +struct ReverseSelection : public BaseAction { - ReverseSelection() : Action(aReverseSelection, "reverse_selection") { } + ReverseSelection() : BaseAction(aReverseSelection, "reverse_selection") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct RemoveSelection : public Action +struct RemoveSelection : public BaseAction { - RemoveSelection() : Action(aRemoveSelection, "remove_selection") { } + RemoveSelection() : BaseAction(aRemoveSelection, "remove_selection") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct SelectAlbum : public Action +struct SelectAlbum : public BaseAction { - SelectAlbum() : Action(aSelectAlbum, "select_album") { } + SelectAlbum() : BaseAction(aSelectAlbum, "select_album") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct AddSelectedItems : public Action +struct AddSelectedItems : public BaseAction { - AddSelectedItems() : Action(aAddSelectedItems, "add_selected_items") { } + AddSelectedItems() : BaseAction(aAddSelectedItems, "add_selected_items") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct CropMainPlaylist : public Action +struct CropMainPlaylist : public BaseAction { - CropMainPlaylist() : Action(aCropMainPlaylist, "crop_main_playlist") { } + CropMainPlaylist() : BaseAction(aCropMainPlaylist, "crop_main_playlist") { } protected: virtual void run(); }; -struct CropPlaylist : public Action +struct CropPlaylist : public BaseAction { - CropPlaylist() : Action(aCropPlaylist, "crop_playlist") { } + CropPlaylist() : BaseAction(aCropPlaylist, "crop_playlist") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ClearMainPlaylist : public Action +struct ClearMainPlaylist : public BaseAction { - ClearMainPlaylist() : Action(aClearMainPlaylist, "clear_main_playlist") { } + ClearMainPlaylist() : BaseAction(aClearMainPlaylist, "clear_main_playlist") { } protected: virtual void run(); }; -struct ClearPlaylist : public Action +struct ClearPlaylist : public BaseAction { - ClearPlaylist() : Action(aClearPlaylist, "clear_playlist") { } + ClearPlaylist() : BaseAction(aClearPlaylist, "clear_playlist") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct SortPlaylist : public Action +struct SortPlaylist : public BaseAction { - SortPlaylist() : Action(aSortPlaylist, "sort_playlist") { } + SortPlaylist() : BaseAction(aSortPlaylist, "sort_playlist") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ReversePlaylist : public Action +struct ReversePlaylist : public BaseAction { - ReversePlaylist() : Action(aReversePlaylist, "reverse_playlist") { } + ReversePlaylist() : BaseAction(aReversePlaylist, "reverse_playlist") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ApplyFilter : public Action +struct ApplyFilter : public BaseAction { - ApplyFilter() : Action(aApplyFilter, "apply_filter") { } + ApplyFilter() : BaseAction(aApplyFilter, "apply_filter") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct Find : public Action +struct Find : public BaseAction { - Find() : Action(aFind, "find") { } + Find() : BaseAction(aFind, "find") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct FindItemForward : public Action +struct FindItemForward : public BaseAction { - FindItemForward() : Action(aFindItemForward, "find_item_forward") { } + FindItemForward() : BaseAction(aFindItemForward, "find_item_forward") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct FindItemBackward : public Action +struct FindItemBackward : public BaseAction { - FindItemBackward() : Action(aFindItemBackward, "find_item_backward") { } + FindItemBackward() : BaseAction(aFindItemBackward, "find_item_backward") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct NextFoundItem : public Action +struct NextFoundItem : public BaseAction { - NextFoundItem() : Action(aNextFoundItem, "next_found_item") { } + NextFoundItem() : BaseAction(aNextFoundItem, "next_found_item") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct PreviousFoundItem : public Action +struct PreviousFoundItem : public BaseAction { - PreviousFoundItem() : Action(aPreviousFoundItem, "previous_found_item") { } + PreviousFoundItem() : BaseAction(aPreviousFoundItem, "previous_found_item") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ToggleFindMode : public Action +struct ToggleFindMode : public BaseAction { - ToggleFindMode() : Action(aToggleFindMode, "toggle_find_mode") { } + ToggleFindMode() : BaseAction(aToggleFindMode, "toggle_find_mode") { } protected: virtual void run(); }; -struct ToggleReplayGainMode : public Action +struct ToggleReplayGainMode : public BaseAction { - ToggleReplayGainMode() : Action(aToggleReplayGainMode, "toggle_replay_gain_mode") { } + ToggleReplayGainMode() : BaseAction(aToggleReplayGainMode, "toggle_replay_gain_mode") { } protected: virtual void run(); }; -struct ToggleSpaceMode : public Action +struct ToggleSpaceMode : public BaseAction { - ToggleSpaceMode() : Action(aToggleSpaceMode, "toggle_space_mode") { } + ToggleSpaceMode() : BaseAction(aToggleSpaceMode, "toggle_space_mode") { } protected: virtual void run(); }; -struct ToggleAddMode : public Action +struct ToggleAddMode : public BaseAction { - ToggleAddMode() : Action(aToggleAddMode, "toggle_add_mode") { } + ToggleAddMode() : BaseAction(aToggleAddMode, "toggle_add_mode") { } protected: virtual void run(); }; -struct ToggleMouse : public Action +struct ToggleMouse : public BaseAction { - ToggleMouse() : Action(aToggleMouse, "toggle_mouse") { } + ToggleMouse() : BaseAction(aToggleMouse, "toggle_mouse") { } protected: virtual void run(); }; -struct ToggleBitrateVisibility : public Action +struct ToggleBitrateVisibility : public BaseAction { - ToggleBitrateVisibility() : Action(aToggleBitrateVisibility, "toggle_bitrate_visibility") { } + ToggleBitrateVisibility() : BaseAction(aToggleBitrateVisibility, "toggle_bitrate_visibility") { } protected: virtual void run(); }; -struct AddRandomItems : public Action +struct AddRandomItems : public BaseAction { - AddRandomItems() : Action(aAddRandomItems, "add_random_items") { } + AddRandomItems() : BaseAction(aAddRandomItems, "add_random_items") { } protected: virtual void run(); }; -struct ToggleBrowserSortMode : public Action +struct ToggleBrowserSortMode : public BaseAction { - ToggleBrowserSortMode() : Action(aToggleBrowserSortMode, "toggle_browser_sort_mode") { } + ToggleBrowserSortMode() : BaseAction(aToggleBrowserSortMode, "toggle_browser_sort_mode") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ToggleLibraryTagType : public Action +struct ToggleLibraryTagType : public BaseAction { - ToggleLibraryTagType() : Action(aToggleLibraryTagType, "toggle_library_tag_type") { } + ToggleLibraryTagType() : BaseAction(aToggleLibraryTagType, "toggle_library_tag_type") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ToggleMediaLibrarySortMode : public Action +struct ToggleMediaLibrarySortMode : public BaseAction { ToggleMediaLibrarySortMode() - : Action(aToggleMediaLibrarySortMode, "toggle_media_library_sort_mode") { } + : BaseAction(aToggleMediaLibrarySortMode, "toggle_media_library_sort_mode") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct RefetchLyrics : public Action +struct RefetchLyrics : public BaseAction { - RefetchLyrics() : Action(aRefetchLyrics, "refetch_lyrics") { } + RefetchLyrics() : BaseAction(aRefetchLyrics, "refetch_lyrics") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct RefetchArtistInfo : public Action +struct RefetchArtistInfo : public BaseAction { - RefetchArtistInfo() : Action(aRefetchArtistInfo, "refetch_artist_info") { } + RefetchArtistInfo() : BaseAction(aRefetchArtistInfo, "refetch_artist_info") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct SetSelectedItemsPriority : public Action +struct SetSelectedItemsPriority : public BaseAction { SetSelectedItemsPriority() - : Action(aSetSelectedItemsPriority, "set_selected_items_priority") { } + : BaseAction(aSetSelectedItemsPriority, "set_selected_items_priority") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct FilterPlaylistOnPriorities : public Action +struct FilterPlaylistOnPriorities : public BaseAction { FilterPlaylistOnPriorities() - : Action(aFilterPlaylistOnPriorities, "filter_playlist_on_priorities") { } + : BaseAction(aFilterPlaylistOnPriorities, "filter_playlist_on_priorities") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ShowSongInfo : public Action +struct ShowSongInfo : public BaseAction { - ShowSongInfo() : Action(aShowSongInfo, "show_song_info") { } + ShowSongInfo() : BaseAction(aShowSongInfo, "show_song_info") { } protected: virtual void run(); }; -struct ShowArtistInfo : public Action +struct ShowArtistInfo : public BaseAction { - ShowArtistInfo() : Action(aShowArtistInfo, "show_artist_info") { } + ShowArtistInfo() : BaseAction(aShowArtistInfo, "show_artist_info") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ShowLyrics : public Action +struct ShowLyrics : public BaseAction { - ShowLyrics() : Action(aShowLyrics, "show_lyrics") { } + ShowLyrics() : BaseAction(aShowLyrics, "show_lyrics") { } protected: virtual void run(); }; -struct Quit : public Action +struct Quit : public BaseAction { - Quit() : Action(aQuit, "quit") { } + Quit() : BaseAction(aQuit, "quit") { } protected: virtual void run(); }; -struct NextScreen : public Action +struct NextScreen : public BaseAction { - NextScreen() : Action(aNextScreen, "next_screen") { } + NextScreen() : BaseAction(aNextScreen, "next_screen") { } protected: virtual void run(); }; -struct PreviousScreen : public Action +struct PreviousScreen : public BaseAction { - PreviousScreen() : Action(aPreviousScreen, "previous_screen") { } + PreviousScreen() : BaseAction(aPreviousScreen, "previous_screen") { } protected: virtual void run(); }; -struct ShowHelp : public Action +struct ShowHelp : public BaseAction { - ShowHelp() : Action(aShowHelp, "show_help") { } + ShowHelp() : BaseAction(aShowHelp, "show_help") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ShowPlaylist : public Action +struct ShowPlaylist : public BaseAction { - ShowPlaylist() : Action(aShowPlaylist, "show_playlist") { } + ShowPlaylist() : BaseAction(aShowPlaylist, "show_playlist") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ShowBrowser : public Action +struct ShowBrowser : public BaseAction { - ShowBrowser() : Action(aShowBrowser, "show_browser") { } + ShowBrowser() : BaseAction(aShowBrowser, "show_browser") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ChangeBrowseMode : public Action +struct ChangeBrowseMode : public BaseAction { - ChangeBrowseMode() : Action(aChangeBrowseMode, "change_browse_mode") { } + ChangeBrowseMode() : BaseAction(aChangeBrowseMode, "change_browse_mode") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ShowSearchEngine : public Action +struct ShowSearchEngine : public BaseAction { - ShowSearchEngine() : Action(aShowSearchEngine, "show_search_engine") { } + ShowSearchEngine() : BaseAction(aShowSearchEngine, "show_search_engine") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ResetSearchEngine : public Action +struct ResetSearchEngine : public BaseAction { - ResetSearchEngine() : Action(aResetSearchEngine, "reset_search_engine") { } + ResetSearchEngine() : BaseAction(aResetSearchEngine, "reset_search_engine") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ShowMediaLibrary : public Action +struct ShowMediaLibrary : public BaseAction { - ShowMediaLibrary() : Action(aShowMediaLibrary, "show_media_library") { } + ShowMediaLibrary() : BaseAction(aShowMediaLibrary, "show_media_library") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ToggleMediaLibraryColumnsMode : public Action +struct ToggleMediaLibraryColumnsMode : public BaseAction { ToggleMediaLibraryColumnsMode() - : Action(aToggleMediaLibraryColumnsMode, "toggle_media_library_columns_mode") { } + : BaseAction(aToggleMediaLibraryColumnsMode, "toggle_media_library_columns_mode") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ShowPlaylistEditor : public Action +struct ShowPlaylistEditor : public BaseAction { - ShowPlaylistEditor() : Action(aShowPlaylistEditor, "show_playlist_editor") { } + ShowPlaylistEditor() : BaseAction(aShowPlaylistEditor, "show_playlist_editor") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ShowTagEditor : public Action +struct ShowTagEditor : public BaseAction { - ShowTagEditor() : Action(aShowTagEditor, "show_tag_editor") { } + ShowTagEditor() : BaseAction(aShowTagEditor, "show_tag_editor") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ShowOutputs : public Action +struct ShowOutputs : public BaseAction { - ShowOutputs() : Action(aShowOutputs, "show_outputs") { } + ShowOutputs() : BaseAction(aShowOutputs, "show_outputs") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ShowVisualizer : public Action +struct ShowVisualizer : public BaseAction { - ShowVisualizer() : Action(aShowVisualizer, "show_visualizer") { } + ShowVisualizer() : BaseAction(aShowVisualizer, "show_visualizer") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ShowClock : public Action +struct ShowClock : public BaseAction { - ShowClock() : Action(aShowClock, "show_clock") { } + ShowClock() : BaseAction(aShowClock, "show_clock") { } protected: virtual bool canBeRun() const; virtual void run(); }; -struct ShowServerInfo : public Action +struct ShowServerInfo : public BaseAction { - ShowServerInfo() : Action(aShowServerInfo, "show_server_info") { } + ShowServerInfo() : BaseAction(aShowServerInfo, "show_server_info") { } protected: # ifdef HAVE_TAGLIB_H @@ -1146,4 +1142,6 @@ protected: virtual void run(); }; +} + #endif // NCMPCPP_ACTIONS_H diff --git a/src/bindings.cpp b/src/bindings.cpp index 64cf1d67..d0c0cafb 100644 --- a/src/bindings.cpp +++ b/src/bindings.cpp @@ -92,13 +92,13 @@ Key stringToKey(const std::string &s) } template -Action *parseActionLine(const std::string &line, F error) +Actions::BaseAction *parseActionLine(const std::string &line, F error) { - Action *result = 0; + Actions::BaseAction *result = 0; size_t i = 0; for (; i < line.size() && !isspace(line[i]); ++i) { } if (i == line.size()) // only action name - result = Action::get(line); + result = Actions::get(line); else // there is something else { std::string action_name = line.substr(0, i); @@ -107,8 +107,9 @@ Action *parseActionLine(const std::string &line, F error) // push single character into input queue std::string arg = getEnclosedString(line, '"', '"', 0); Key k = stringToSpecialKey(arg); + auto queue = std::vector{ k.getChar() }; if (k != Key::noOp) - result = new PushCharacters(&Global::wFooter, std::vector{ k.getChar() }); + result = new Actions::PushCharacters(&Global::wFooter, std::move(queue)); else error() << "invalid character passed to push_character: '" << arg << "'\n"; } @@ -122,7 +123,7 @@ Action *parseActionLine(const std::string &line, F error) // if char is signed, erase 1s from char -> int conversion for (auto it = arg.begin(); it != arg.end(); ++it) *it &= 0xff; - result = new PushCharacters(&Global::wFooter, std::move(queue)); + result = new Actions::PushCharacters(&Global::wFooter, std::move(queue)); } else error() << "empty argument passed to push_characters\n"; @@ -133,7 +134,7 @@ Action *parseActionLine(const std::string &line, F error) std::string arg = getEnclosedString(line, '"', '"', 0); ScreenType screen_type = stringToScreenType(arg); if (screen_type != ScreenType::Unknown) - result = new RequireScreen(screen_type); + result = new Actions::RequireScreen(screen_type); else error() << "unknown screen passed to require_screen: '" << arg << "'\n"; } @@ -141,9 +142,9 @@ Action *parseActionLine(const std::string &line, F error) { // require that given action is runnable std::string arg = getEnclosedString(line, '"', '"', 0); - Action *action = Action::get(arg); + auto action = Actions::get(arg); if (action) - result = new RequireRunnable(action); + result = new Actions::RequireRunnable(action); else error() << "unknown action passed to require_runnable: '" << arg << "'\n"; } @@ -151,7 +152,7 @@ Action *parseActionLine(const std::string &line, F error) { std::string command = getEnclosedString(line, '"', '"', 0); if (!command.empty()) - result = new RunExternalCommand(std::move(command)); + result = new Actions::RunExternalCommand(std::move(command)); else error() << "empty command passed to run_external_command\n"; } @@ -312,7 +313,7 @@ bool BindingsConfiguration::read(const std::string &file) else if (isspace(line[0])) // name of action to be bound { trim(line); - Action *action = parseActionLine(line, error); + auto action = parseActionLine(line, error); if (action) actions.push_back(action); else diff --git a/src/bindings.h b/src/bindings.h index 0dcf44cc..fa94be87 100644 --- a/src/bindings.h +++ b/src/bindings.h @@ -72,9 +72,9 @@ struct Key /// Represents either single action or chain of actions bound to a certain key struct Binding { - typedef std::vector ActionChain; + typedef std::vector ActionChain; - Binding(ActionType at) : m_is_single(true), m_action(Action::get(at)) { } + Binding(ActionType at) : m_is_single(true), m_action(Actions::get(at)) { } Binding(const ActionChain &actions) { assert(actions.size() > 0); if (actions.size() == 1) { @@ -107,7 +107,7 @@ struct Binding assert(!m_is_single); return m_chain; } - Action *action() const { + Actions::BaseAction *action() const { assert(m_is_single); return m_action; } @@ -115,7 +115,7 @@ struct Binding private: bool m_is_single; union { - Action *m_action; + Actions::BaseAction *m_action; ActionChain *m_chain; }; }; diff --git a/src/cmdargs.cpp b/src/cmdargs.cpp index bc1e112d..785f53b5 100644 --- a/src/cmdargs.cpp +++ b/src/cmdargs.cpp @@ -121,7 +121,7 @@ void ParseArgv(int argc, char **argv) exit(0); } - if (!Action::connectToMPD()) + if (!Actions::connectToMPD()) exit(1); if (!strcmp(argv[i], "-s") || !strcmp(argv[i], "--screen")) diff --git a/src/macro_utilities.cpp b/src/macro_utilities.cpp index 142786a5..8ff2437d 100644 --- a/src/macro_utilities.cpp +++ b/src/macro_utilities.cpp @@ -21,6 +21,8 @@ #include "global.h" #include "macro_utilities.h" +namespace Actions {// + void PushCharacters::run() { for (auto it = m_queue.begin(); it != m_queue.end(); ++it) @@ -42,3 +44,5 @@ void RunExternalCommand::run() GNUC_UNUSED int res; res = std::system(m_command.c_str()); } + +} \ No newline at end of file diff --git a/src/macro_utilities.h b/src/macro_utilities.h index 906ef5e9..3e0c7aed 100644 --- a/src/macro_utilities.h +++ b/src/macro_utilities.h @@ -25,10 +25,12 @@ #include "actions.h" #include "screen_type.h" -struct PushCharacters : public Action +namespace Actions {// + +struct PushCharacters : public BaseAction { PushCharacters(NC::Window **w, std::vector &&queue) - : Action(aMacroUtility, ""), m_window(w), m_queue(queue) { } + : BaseAction(aMacroUtility, ""), m_window(w), m_queue(queue) { } protected: virtual void run(); @@ -38,23 +40,23 @@ private: std::vector m_queue; }; -struct RequireRunnable : public Action +struct RequireRunnable : public BaseAction { - RequireRunnable(Action *action) - : Action(aMacroUtility, ""), m_action(action) { assert(action); } + RequireRunnable(BaseAction *action) + : BaseAction(aMacroUtility, ""), m_action(action) { assert(action); } protected: virtual bool canBeRun() const; virtual void run() { } private: - Action *m_action; + BaseAction *m_action; }; -struct RequireScreen : public Action +struct RequireScreen : public BaseAction { RequireScreen(ScreenType screen_type) - : Action(aMacroUtility, ""), m_screen_type(screen_type) { } + : BaseAction(aMacroUtility, ""), m_screen_type(screen_type) { } protected: virtual bool canBeRun() const; @@ -64,10 +66,10 @@ private: ScreenType m_screen_type; }; -struct RunExternalCommand : public Action +struct RunExternalCommand : public BaseAction { RunExternalCommand(std::string command) - : Action(aMacroUtility, ""), m_command(command) { } + : BaseAction(aMacroUtility, ""), m_command(command) { } protected: virtual void run(); @@ -76,4 +78,6 @@ private: std::string m_command; }; +} + #endif // NCMPCPP_MACRO_UTILITIES_H diff --git a/src/ncmpcpp.cpp b/src/ncmpcpp.cpp index 570d9965..9f33f7c3 100644 --- a/src/ncmpcpp.cpp +++ b/src/ncmpcpp.cpp @@ -60,7 +60,7 @@ namespace } else if (signal == SIGWINCH) { - Action::resizeScreen(true); + Actions::resizeScreen(true); } } # endif // !WIN32 @@ -121,7 +121,7 @@ int main(int argc, char **argv) if (argc > 1) ParseArgv(argc, argv); - if (!Action::connectToMPD()) + if (!Actions::connectToMPD()) exit(1); if (Mpd.Version() < 16) @@ -142,7 +142,7 @@ int main(int argc, char **argv) NC::initScreen("ncmpcpp ver. " VERSION, Config.colors_enabled); - Action::OriginalStatusbarVisibility = Config.statusbar_visibility; + Actions::OriginalStatusbarVisibility = Config.statusbar_visibility; if (!Config.titles_visibility) wattron(stdscr, COLOR_PAIR(Config.main_color)); @@ -150,15 +150,15 @@ int main(int argc, char **argv) if (Config.new_design) Config.statusbar_visibility = 0; - Action::setWindowsDimensions(); - Action::validateScreenSize(); - Action::initializeScreens(); + Actions::setWindowsDimensions(); + Actions::validateScreenSize(); + Actions::initializeScreens(); - wHeader = new NC::Window(0, 0, COLS, Action::HeaderHeight, "", Config.header_color, NC::brNone); + wHeader = new NC::Window(0, 0, COLS, Actions::HeaderHeight, "", Config.header_color, NC::brNone); if (Config.header_visibility || Config.new_design) wHeader->display(); - wFooter = new NC::Window(0, Action::FooterStartY, COLS, Action::FooterHeight, "", Config.statusbar_color, NC::brNone); + wFooter = new NC::Window(0, Actions::FooterStartY, COLS, Actions::FooterHeight, "", Config.statusbar_color, NC::brNone); wFooter->setTimeout(500); wFooter->setGetStringHelper(Statusbar::Helpers::getString); if (Mpd.SupportsIdle()) @@ -202,7 +202,7 @@ int main(int argc, char **argv) signal(SIGWINCH, sighandler); # endif // !WIN32 - while (!Action::ExitMainLoop) + while (!Actions::ExitMainLoop) { if (!Mpd.Connected()) { diff --git a/src/tag_editor.cpp b/src/tag_editor.cpp index c4efc5a0..be8b8f7b 100644 --- a/src/tag_editor.cpp +++ b/src/tag_editor.cpp @@ -468,7 +468,7 @@ void TagEditor::enterPressed() if (w == TagTypes && id == 5) { - bool yes = Action::askYesNoQuestion("Number tracks?", Status::trace); + bool yes = Actions::askYesNoQuestion("Number tracks?", Status::trace); if (yes) { auto it = EditedSongs.begin(); @@ -929,7 +929,7 @@ bool TagEditor::ifAnyModifiedAskForDiscarding() { bool result = true; if (isAnyModified(*Tags)) - result = Action::askYesNoQuestion("There are pending changes, are you sure?", Status::trace); + result = Actions::askYesNoQuestion("There are pending changes, are you sure?", Status::trace); return result; }