From 49a21370a6225ecd71c0ff8462ced3ba4f7be1a7 Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Fri, 14 Sep 2012 18:38:28 +0200 Subject: [PATCH] playlist editor: change columns to be non-pointers --- src/actions.cpp | 80 ++++++------ src/playlist_editor.cpp | 261 ++++++++++++++++++++-------------------- src/playlist_editor.h | 4 +- 3 files changed, 172 insertions(+), 173 deletions(-) diff --git a/src/actions.cpp b/src/actions.cpp index c206fa65..28e4e704 100644 --- a/src/actions.cpp +++ b/src/actions.cpp @@ -398,9 +398,9 @@ void Action::ListsChangeFinisher() { myLibrary->Songs.clear(); } - else if (myScreen->activeWindow() == myPlaylistEditor->Playlists) + else if (myScreen->isActiveWindow(myPlaylistEditor->Playlists)) { - myPlaylistEditor->Content->clear(); + myPlaylistEditor->Content.clear(); } # ifdef HAVE_TAGLIB_H else if (myScreen->activeWindow() == myTagEditor->Dirs) @@ -841,23 +841,23 @@ void Delete::Run() Statusbar::msg("Aborted"); } # endif // !WIN32 - else if (myScreen == myPlaylistEditor && !myPlaylistEditor->Content->empty()) + else if (myScreen == myPlaylistEditor && !myPlaylistEditor->Content.empty()) { - if (myScreen->activeWindow() == myPlaylistEditor->Playlists) + if (myScreen->isActiveWindow(myPlaylistEditor->Playlists)) { std::string question; - if (myPlaylistEditor->Playlists->hasSelected()) + if (myPlaylistEditor->Playlists.hasSelected()) question = "Delete selected playlists?"; else { question = "Delete playlist \""; - question += ToString(wideShorten(ToWString(myPlaylistEditor->Playlists->current().value()), COLS-question.size()-10)); + question += ToString(wideShorten(ToWString(myPlaylistEditor->Playlists.current().value()), COLS-question.size()-10)); question += "\"?"; } bool yes = AskYesNoQuestion(question, Status::trace); if (yes) { - auto list = getSelectedOrCurrent(myPlaylistEditor->Playlists->begin(), myPlaylistEditor->Playlists->end(), myPlaylistEditor->Playlists->currentI()); + auto list = getSelectedOrCurrent(myPlaylistEditor->Playlists.begin(), myPlaylistEditor->Playlists.end(), myPlaylistEditor->Playlists.currentI()); Mpd.StartCommandsList(); for (auto it = list.begin(); it != list.end(); ++it) Mpd.DeletePlaylist((*it)->value()); @@ -867,12 +867,12 @@ void Delete::Run() else Statusbar::msg("Aborted"); } - else if (myScreen->activeWindow() == myPlaylistEditor->Content) + else if (myScreen->isActiveWindow(myPlaylistEditor->Content)) { - std::string playlist = myPlaylistEditor->Playlists->current().value(); + 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)) + if (deleteSelectedSongs(myPlaylistEditor->Content, delete_fun)) Statusbar::msg("Item(s) deleted"); } } @@ -982,8 +982,8 @@ bool MoveSelectedItemsUp::canBeRun() const return ((myScreen == myPlaylist && !myPlaylist->main().empty() && !myPlaylist->isFiltered()) - || (myScreen->activeWindow() == myPlaylistEditor->Content - && !myPlaylistEditor->Content->empty() + || (myScreen->isActiveWindow(myPlaylistEditor->Content) + && !myPlaylistEditor->Content.empty() && !myPlaylistEditor->isContentFiltered())); } @@ -995,10 +995,10 @@ void MoveSelectedItemsUp::Run() } else if (myScreen == myPlaylistEditor) { - assert(!myPlaylistEditor->Playlists->empty()); - std::string playlist = myPlaylistEditor->Playlists->current().value(); + assert(!myPlaylistEditor->Playlists.empty()); + std::string playlist = myPlaylistEditor->Playlists.current().value(); auto move_fun = std::bind(&MPD::Connection::PlaylistMove, _1, playlist, _2, _3); - moveSelectedItemsUp(*myPlaylistEditor->Content, move_fun); + moveSelectedItemsUp(myPlaylistEditor->Content, move_fun); } } @@ -1007,8 +1007,8 @@ bool MoveSelectedItemsDown::canBeRun() const return ((myScreen == myPlaylist && !myPlaylist->main().empty() && !myPlaylist->isFiltered()) - || (myScreen->activeWindow() == myPlaylistEditor->Content - && !myPlaylistEditor->Content->empty() + || (myScreen->isActiveWindow(myPlaylistEditor->Content) + && !myPlaylistEditor->Content.empty() && !myPlaylistEditor->isContentFiltered())); } @@ -1020,17 +1020,17 @@ void MoveSelectedItemsDown::Run() } else if (myScreen == myPlaylistEditor) { - assert(!myPlaylistEditor->Playlists->empty()); - std::string playlist = myPlaylistEditor->Playlists->current().value(); + assert(!myPlaylistEditor->Playlists.empty()); + std::string playlist = myPlaylistEditor->Playlists.current().value(); auto move_fun = std::bind(&MPD::Connection::PlaylistMove, _1, playlist, _2, _3); - moveSelectedItemsDown(*myPlaylistEditor->Content, move_fun); + moveSelectedItemsDown(myPlaylistEditor->Content, move_fun); } } bool MoveSelectedItemsTo::canBeRun() const { return myScreen == myPlaylist - || myScreen->activeWindow() == myPlaylistEditor->Content; + || myScreen->isActiveWindow(myPlaylistEditor->Content); } void MoveSelectedItemsTo::Run() @@ -1039,17 +1039,17 @@ void MoveSelectedItemsTo::Run() moveSelectedItemsTo(myPlaylist->main(), std::bind(&MPD::Connection::Move, _1, _2, _3)); else { - assert(!myPlaylistEditor->Playlists->empty()); - std::string playlist = myPlaylistEditor->Playlists->current().value(); + assert(!myPlaylistEditor->Playlists.empty()); + std::string playlist = myPlaylistEditor->Playlists.current().value(); auto move_fun = std::bind(&MPD::Connection::PlaylistMove, _1, playlist, _2, _3); - moveSelectedItemsTo(*myPlaylistEditor->Content, move_fun); + moveSelectedItemsTo(myPlaylistEditor->Content, move_fun); } } bool Add::canBeRun() const { return myScreen != myPlaylistEditor - || !myPlaylistEditor->Playlists->empty(); + || !myPlaylistEditor->Playlists.empty(); } void Add::Run() @@ -1065,7 +1065,7 @@ void Add::Run() Statusbar::put() << "Adding..."; wFooter->refresh(); if (myScreen == myPlaylistEditor) - Mpd.AddToPlaylist(myPlaylistEditor->Playlists->current().value(), path); + Mpd.AddToPlaylist(myPlaylistEditor->Playlists.current().value(), path); else { const char lastfm_url[] = "lastfm://"; @@ -1107,7 +1107,7 @@ bool ToggleDisplayMode::canBeRun() const return myScreen == myPlaylist || myScreen == myBrowser || myScreen == mySearcher - || myScreen->activeWindow() == myPlaylistEditor->Content; + || myScreen->isActiveWindow(myPlaylistEditor->Content); } void ToggleDisplayMode::Run() @@ -1144,14 +1144,14 @@ void ToggleDisplayMode::Run() if (mySearcher->main().size() > SearchEngine::StaticOptions) mySearcher->main().setTitle(Config.columns_in_search_engine && Config.titles_visibility ? Display::Columns(mySearcher->main().getWidth()) : ""); } - else if (myScreen->activeWindow() == myPlaylistEditor->Content) + else if (myScreen->isActiveWindow(myPlaylistEditor->Content)) { Config.columns_in_playlist_editor = !Config.columns_in_playlist_editor; Statusbar::msg("Playlist editor display mode: %s", Config.columns_in_playlist_editor ? "Columns" : "Classic"); if (Config.columns_in_playlist_editor) - myPlaylistEditor->Content->setItemDisplayer(std::bind(Display::SongsInColumns, _1, myPlaylistEditor)); + myPlaylistEditor->Content.setItemDisplayer(std::bind(Display::SongsInColumns, _1, myPlaylistEditor)); else - myPlaylistEditor->Content->setItemDisplayer(std::bind(Display::Songs, _1, myPlaylistEditor, Config.song_list_format)); + myPlaylistEditor->Content.setItemDisplayer(std::bind(Display::Songs, _1, myPlaylistEditor, Config.song_list_format)); } } @@ -1529,8 +1529,8 @@ void EditDirectoryName::Run() bool EditPlaylistName::canBeRun() const { - return (myScreen->activeWindow() == myPlaylistEditor->Playlists - && !myPlaylistEditor->Playlists->empty()) + return (myScreen->isActiveWindow(myPlaylistEditor->Playlists) + && !myPlaylistEditor->Playlists.empty()) || (myScreen == myBrowser && !myBrowser->main().empty() && myBrowser->main().current().value().type == MPD::itPlaylist); @@ -1541,8 +1541,8 @@ void EditPlaylistName::Run() using Global::wFooter; std::string old_name; - if (myScreen->activeWindow() == myPlaylistEditor->Playlists) - old_name = myPlaylistEditor->Playlists->current().value(); + if (myScreen->isActiveWindow(myPlaylistEditor->Playlists)) + old_name = myPlaylistEditor->Playlists.current().value(); else old_name = myBrowser->main().current().value().name; Statusbar::lock(); @@ -1794,8 +1794,8 @@ bool CropPlaylist::canBeRun() const void CropPlaylist::Run() { - assert(!myPlaylistEditor->Playlists->empty()); - std::string playlist = myPlaylistEditor->Playlists->current().value(); + assert(!myPlaylistEditor->Playlists.empty()); + std::string playlist = myPlaylistEditor->Playlists.current().value(); bool yes = true; if (Config.ask_before_clearing_main_playlist) yes = AskYesNoQuestion("Do you really want to crop playlist \"" + playlist + "\"?", Status::trace); @@ -1803,7 +1803,7 @@ void CropPlaylist::Run() { auto delete_fun = std::bind(&MPD::Connection::PlaylistDelete, _1, playlist, _2); Statusbar::msg("Cropping playlist \"%s\"...", playlist.c_str()); - if (cropPlaylist(*myPlaylistEditor->Content, delete_fun)) + if (cropPlaylist(myPlaylistEditor->Content, delete_fun)) Statusbar::msg("Playlist \"%s\" cropped", playlist.c_str()); } } @@ -1830,8 +1830,8 @@ bool ClearPlaylist::canBeRun() const void ClearPlaylist::Run() { - assert(!myPlaylistEditor->Playlists->empty()); - std::string playlist = myPlaylistEditor->Playlists->current().value(); + assert(!myPlaylistEditor->Playlists.empty()); + std::string playlist = myPlaylistEditor->Playlists.current().value(); bool yes = true; if (Config.ask_before_clearing_main_playlist) yes = AskYesNoQuestion("Do you really want to clear playlist \"" + playlist + "\"?", Status::trace); @@ -1840,7 +1840,7 @@ void ClearPlaylist::Run() auto delete_fun = std::bind(&MPD::Connection::PlaylistDelete, _1, playlist, _2); auto clear_fun = std::bind(&MPD::Connection::ClearPlaylist, _1, playlist); Statusbar::msg("Deleting items from \"%s\"...", playlist.c_str()); - if (clearPlaylist(*myPlaylistEditor->Content, delete_fun, clear_fun)) + if (clearPlaylist(myPlaylistEditor->Content, delete_fun, clear_fun)) Statusbar::msg("Items deleted from \"%s\"", playlist.c_str()); } } diff --git a/src/playlist_editor.cpp b/src/playlist_editor.cpp index 20bc00d3..56e1c64b 100644 --- a/src/playlist_editor.cpp +++ b/src/playlist_editor.cpp @@ -61,26 +61,26 @@ PlaylistEditor::PlaylistEditor() RightColumnStartX = LeftColumnWidth+1; RightColumnWidth = COLS-LeftColumnWidth-1; - Playlists = new NC::Menu(0, MainStartY, LeftColumnWidth, MainHeight, Config.titles_visibility ? "Playlists" : "", Config.main_color, NC::brNone); - Playlists->setHighlightColor(Config.active_column_color); - Playlists->cyclicScrolling(Config.use_cyclic_scrolling); - Playlists->centeredCursor(Config.centered_cursor); - Playlists->setSelectedPrefix(Config.selected_item_prefix); - Playlists->setSelectedSuffix(Config.selected_item_suffix); - Playlists->setItemDisplayer(Display::Default); + Playlists = NC::Menu(0, MainStartY, LeftColumnWidth, MainHeight, Config.titles_visibility ? "Playlists" : "", Config.main_color, NC::brNone); + Playlists.setHighlightColor(Config.active_column_color); + Playlists.cyclicScrolling(Config.use_cyclic_scrolling); + Playlists.centeredCursor(Config.centered_cursor); + Playlists.setSelectedPrefix(Config.selected_item_prefix); + Playlists.setSelectedSuffix(Config.selected_item_suffix); + Playlists.setItemDisplayer(Display::Default); - Content = new NC::Menu(RightColumnStartX, MainStartY, RightColumnWidth, MainHeight, Config.titles_visibility ? "Playlist content" : "", Config.main_color, NC::brNone); - Content->setHighlightColor(Config.main_highlight_color); - Content->cyclicScrolling(Config.use_cyclic_scrolling); - Content->centeredCursor(Config.centered_cursor); - Content->setSelectedPrefix(Config.selected_item_prefix); - Content->setSelectedSuffix(Config.selected_item_suffix); + Content = NC::Menu(RightColumnStartX, MainStartY, RightColumnWidth, MainHeight, Config.titles_visibility ? "Playlist content" : "", Config.main_color, NC::brNone); + Content.setHighlightColor(Config.main_highlight_color); + Content.cyclicScrolling(Config.use_cyclic_scrolling); + Content.centeredCursor(Config.centered_cursor); + Content.setSelectedPrefix(Config.selected_item_prefix); + Content.setSelectedSuffix(Config.selected_item_suffix); if (Config.columns_in_playlist_editor) - Content->setItemDisplayer(std::bind(Display::SongsInColumns, _1, this)); + Content.setItemDisplayer(std::bind(Display::SongsInColumns, _1, this)); else - Content->setItemDisplayer(std::bind(Display::Songs, _1, this, Config.song_list_format)); + Content.setItemDisplayer(std::bind(Display::Songs, _1, this, Config.song_list_format)); - w = Playlists; + w = &Playlists; } void PlaylistEditor::resize() @@ -93,11 +93,11 @@ void PlaylistEditor::resize() RightColumnStartX = LeftColumnStartX+LeftColumnWidth+1; RightColumnWidth = width-LeftColumnWidth-1; - Playlists->resize(LeftColumnWidth, MainHeight); - Content->resize(RightColumnWidth, MainHeight); + Playlists.resize(LeftColumnWidth, MainHeight); + Content.resize(RightColumnWidth, MainHeight); - Playlists->moveTo(LeftColumnStartX, MainStartY); - Content->moveTo(RightColumnStartX, MainStartY); + Playlists.moveTo(LeftColumnStartX, MainStartY); + Content.moveTo(RightColumnStartX, MainStartY); hasToBeResized = 0; } @@ -109,9 +109,9 @@ std::wstring PlaylistEditor::title() void PlaylistEditor::refresh() { - Playlists->display(); + Playlists.display(); mvvline(MainStartY, RightColumnStartX-1, 0, MainHeight); - Content->display(); + Content.display(); } void PlaylistEditor::switchTo() @@ -138,41 +138,41 @@ void PlaylistEditor::switchTo() void PlaylistEditor::update() { - if (Playlists->reallyEmpty() || playlistsUpdateRequested) + if (Playlists.reallyEmpty() || playlistsUpdateRequested) { playlistsUpdateRequested = false; - Playlists->clearSearchResults(); - withUnfilteredMenuReapplyFilter(*Playlists, [this]() { + Playlists.clearSearchResults(); + withUnfilteredMenuReapplyFilter(Playlists, [this]() { auto list = Mpd.GetPlaylists(); std::sort(list.begin(), list.end(), LocaleBasedSorting(std::locale(), Config.ignore_leading_the)); auto playlist = list.begin(); - if (Playlists->size() > list.size()) - Playlists->resizeList(list.size()); - for (auto it = Playlists->begin(); it != Playlists->end(); ++it, ++playlist) + if (Playlists.size() > list.size()) + Playlists.resizeList(list.size()); + for (auto it = Playlists.begin(); it != Playlists.end(); ++it, ++playlist) it->value() = *playlist; for (; playlist != list.end(); ++playlist) - Playlists->addItem(*playlist); + Playlists.addItem(*playlist); }); - Playlists->refresh(); + Playlists.refresh(); } - if (!Playlists->empty() && (Content->reallyEmpty() || contentUpdateRequested)) + if (!Playlists.empty() && (Content.reallyEmpty() || contentUpdateRequested)) { contentUpdateRequested = false; - Content->clearSearchResults(); - withUnfilteredMenuReapplyFilter(*Content, [this]() { - auto list = Mpd.GetPlaylistContent(Playlists->current().value()); + Content.clearSearchResults(); + withUnfilteredMenuReapplyFilter(Content, [this]() { + auto list = Mpd.GetPlaylistContent(Playlists.current().value()); auto song = list.begin(); - if (Content->size() > list.size()) - Content->resizeList(list.size()); - for (auto it = Content->begin(); it != Content->end(); ++it, ++song) + if (Content.size() > list.size()) + Content.resizeList(list.size()); + for (auto it = Content.begin(); it != Content.end(); ++it, ++song) { it->value() = *song; it->setBold(myPlaylist->checkForSong(*song)); } for (; song != list.end(); ++song) - Content->addItem(*song, myPlaylist->checkForSong(*song)); + Content.addItem(*song, myPlaylist->checkForSong(*song)); std::string title; if (Config.titles_visibility) { @@ -184,30 +184,30 @@ void PlaylistEditor::update() title += ")"; else title += "s)"; - title.resize(Content->getWidth()); + title.resize(Content.getWidth()); } - Content->setTitle(title); + Content.setTitle(title); }); - Content->display(); + Content.display(); } - if (w == Content && Content->reallyEmpty()) + if (isActiveWindow(Content) && Content.reallyEmpty()) { - Content->setHighlightColor(Config.main_highlight_color); - Playlists->setHighlightColor(Config.active_column_color); - w = Playlists; + Content.setHighlightColor(Config.main_highlight_color); + Playlists.setHighlightColor(Config.active_column_color); + w = &Playlists; } - if (Playlists->empty() && Content->reallyEmpty()) + if (Playlists.empty() && Content.reallyEmpty()) { - Content->Window::clear(); - Content->Window::display(); + Content.Window::clear(); + Content.Window::display(); } } bool PlaylistEditor::isContentFiltered() { - if (Content->isFiltered()) + if (Content.isFiltered()) { Statusbar::msg("Function currently unavailable due to filtered playlist content"); return true; @@ -217,7 +217,7 @@ bool PlaylistEditor::isContentFiltered() std::shared_ptr PlaylistEditor::contentProxyList() { - return mkProxySongList(*Content, [](NC::Menu::Item &item) { + return mkProxySongList(Content, [](NC::Menu::Item &item) { return &item.value(); }); } @@ -226,17 +226,17 @@ void PlaylistEditor::AddToPlaylist(bool add_n_play) { MPD::SongList list; - if (w == Playlists && !Playlists->empty()) + if (isActiveWindow(Playlists) && !Playlists.empty()) { - if (Mpd.LoadPlaylist(Playlists->current().value())) + if (Mpd.LoadPlaylist(Playlists.current().value())) { - Statusbar::msg("Playlist \"%s\" loaded", Playlists->current().value().c_str()); + Statusbar::msg("Playlist \"%s\" loaded", Playlists.current().value().c_str()); if (add_n_play) myPlaylist->PlayNewlyAddedSongs(); } } - else if (w == Content && !Content->empty()) - myPlaylist->Add(Content->current().value(), add_n_play); + else if (isActiveWindow(Content) && !Content.empty()) + myPlaylist->Add(Content.current().value(), add_n_play); if (!add_n_play) w->scroll(NC::wDown); @@ -251,20 +251,20 @@ void PlaylistEditor::spacePressed() { if (Config.space_selects) { - if (w == Playlists) + if (isActiveWindow(Playlists)) { - if (!Playlists->empty()) + if (!Playlists.empty()) { - Playlists->current().setSelected(!Playlists->current().isSelected()); - Playlists->scroll(NC::wDown); + Playlists.current().setSelected(!Playlists.current().isSelected()); + Playlists.scroll(NC::wDown); } } - else if (w == Content) + else if (isActiveWindow(Content)) { - if (!Content->empty()) + if (!Content.empty()) { - Content->current().setSelected(!Content->current().isSelected()); - Content->scroll(NC::wDown); + Content.current().setSelected(!Content.current().isSelected()); + Content.scroll(NC::wDown); } } } @@ -274,48 +274,48 @@ void PlaylistEditor::spacePressed() void PlaylistEditor::mouseButtonPressed(MEVENT me) { - if (!Playlists->empty() && Playlists->hasCoords(me.x, me.y)) + if (!Playlists.empty() && Playlists.hasCoords(me.x, me.y)) { - if (w != Playlists) + if (!isActiveWindow(Playlists)) { if (previousColumnAvailable()) previousColumn(); else return; } - if (size_t(me.y) < Playlists->size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED))) + if (size_t(me.y) < Playlists.size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED))) { - Playlists->Goto(me.y); + Playlists.Goto(me.y); if (me.bstate & BUTTON3_PRESSED) { - size_t pos = Playlists->choice(); + size_t pos = Playlists.choice(); spacePressed(); - if (pos < Playlists->size()-1) - Playlists->scroll(NC::wUp); + if (pos < Playlists.size()-1) + Playlists.scroll(NC::wUp); } } else Screen::mouseButtonPressed(me); - Content->clear(); + Content.clear(); } - else if (!Content->empty() && Content->hasCoords(me.x, me.y)) + else if (!Content.empty() && Content.hasCoords(me.x, me.y)) { - if (w != Content) + if (!isActiveWindow(Content)) { if (nextColumnAvailable()) nextColumn(); else return; } - if (size_t(me.y) < Content->size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED))) + if (size_t(me.y) < Content.size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED))) { - Content->Goto(me.y); + Content.Goto(me.y); if (me.bstate & BUTTON1_PRESSED) { - size_t pos = Content->choice(); + size_t pos = Content.choice(); spacePressed(); - if (pos < Content->size()-1) - Content->scroll(NC::wUp); + if (pos < Content.size()-1) + Content.scroll(NC::wUp); } else enterPressed(); @@ -335,26 +335,26 @@ bool PlaylistEditor::allowsFiltering() std::string PlaylistEditor::currentFilter() { std::string filter; - if (w == Playlists) - filter = RegexFilter::currentFilter(*Playlists); - else if (w == Content) - filter = RegexFilter::currentFilter(*Content); + if (isActiveWindow(Playlists)) + filter = RegexFilter::currentFilter(Playlists); + else if (isActiveWindow(Content)) + filter = RegexFilter::currentFilter(Content); return filter; } void PlaylistEditor::applyFilter(const std::string &filter) { - if (w == Playlists) + if (isActiveWindow(Playlists)) { - Playlists->showAll(); + Playlists.showAll(); auto rx = RegexFilter(filter, Config.regex_type, PlaylistEntryMatcher); - Playlists->filter(Playlists->begin(), Playlists->end(), rx); + Playlists.filter(Playlists.begin(), Playlists.end(), rx); } - else if (w == Content) + else if (isActiveWindow(Content)) { - Content->showAll(); + Content.showAll(); auto rx = RegexFilter(filter, Config.regex_type, SongEntryMatcher); - Content->filter(Content->begin(), Content->end(), rx); + Content.filter(Content.begin(), Content.end(), rx); } } @@ -368,33 +368,33 @@ bool PlaylistEditor::allowsSearching() bool PlaylistEditor::search(const std::string &constraint) { bool result = false; - if (w == Playlists) + if (isActiveWindow(Playlists)) { auto rx = RegexFilter(constraint, Config.regex_type, PlaylistEntryMatcher); - result = Playlists->search(Playlists->begin(), Playlists->end(), rx); + result = Playlists.search(Playlists.begin(), Playlists.end(), rx); } - else if (w == Content) + else if (isActiveWindow(Content)) { auto rx = RegexFilter(constraint, Config.regex_type, SongEntryMatcher); - result = Content->search(Content->begin(), Content->end(), rx); + result = Content.search(Content.begin(), Content.end(), rx); } return result; } void PlaylistEditor::nextFound(bool wrap) { - if (w == Playlists) - Playlists->nextFound(wrap); - else if (w == Content) - Content->nextFound(wrap); + if (isActiveWindow(Playlists)) + Playlists.nextFound(wrap); + else if (isActiveWindow(Content)) + Content.nextFound(wrap); } void PlaylistEditor::prevFound(bool wrap) { - if (w == Playlists) - Playlists->prevFound(wrap); - else if (w == Content) - Content->prevFound(wrap); + if (isActiveWindow(Playlists)) + Playlists.prevFound(wrap); + else if (isActiveWindow(Content)) + Content.prevFound(wrap); } /***********************************************************************/ @@ -402,7 +402,7 @@ void PlaylistEditor::prevFound(bool wrap) std::shared_ptr PlaylistEditor::getProxySongList() { auto ptr = nullProxySongList(); - if (w == Content) + if (isActiveWindow(Content)) ptr = contentProxyList(); return ptr; } @@ -414,19 +414,19 @@ bool PlaylistEditor::allowsSelection() void PlaylistEditor::reverseSelection() { - if (w == Playlists) - reverseSelectionHelper(Playlists->begin(), Playlists->end()); - else if (w == Content) - reverseSelectionHelper(Content->begin(), Content->end()); + if (isActiveWindow(Playlists)) + reverseSelectionHelper(Playlists.begin(), Playlists.end()); + else if (isActiveWindow(Content)) + reverseSelectionHelper(Content.begin(), Content.end()); } MPD::SongList PlaylistEditor::getSelectedSongs() { MPD::SongList result; - if (w == Playlists) + if (isActiveWindow(Playlists)) { bool any_selected = false; - for (auto it = Playlists->begin(); it != Playlists->end(); ++it) + for (auto it = Playlists.begin(); it != Playlists.end(); ++it) { if (it->isSelected()) { @@ -437,21 +437,21 @@ MPD::SongList PlaylistEditor::getSelectedSongs() } // we don't check for empty result here as it's possible that // all selected playlists are empty. - if (!any_selected && !Content->empty()) + if (!any_selected && !Content.empty()) { - withUnfilteredMenu(*Content, [this, &result]() { - result.insert(result.end(), Content->beginV(), Content->endV()); + withUnfilteredMenu(Content, [this, &result]() { + result.insert(result.end(), Content.beginV(), Content.endV()); }); } } - else if (w == Content) + else if (isActiveWindow(Content)) { - for (auto it = Content->begin(); it != Content->end(); ++it) + for (auto it = Content.begin(); it != Content.end(); ++it) if (it->isSelected()) result.push_back(it->value()); // if no item is selected, add current one - if (result.empty() && !Content->empty()) - result.push_back(Content->current().value()); + if (result.empty() && !Content.empty()) + result.push_back(Content.current().value()); } return result; } @@ -460,9 +460,9 @@ MPD::SongList PlaylistEditor::getSelectedSongs() bool PlaylistEditor::previousColumnAvailable() { - if (w == Content) + if (isActiveWindow(Content)) { - if (!Playlists->reallyEmpty()) + if (!Playlists.reallyEmpty()) return true; } return false; @@ -470,20 +470,20 @@ bool PlaylistEditor::previousColumnAvailable() void PlaylistEditor::previousColumn() { - if (w == Content) + if (isActiveWindow(Content)) { - Content->setHighlightColor(Config.main_highlight_color); + Content.setHighlightColor(Config.main_highlight_color); w->refresh(); - w = Playlists; - Playlists->setHighlightColor(Config.active_column_color); + w = &Playlists; + Playlists.setHighlightColor(Config.active_column_color); } } bool PlaylistEditor::nextColumnAvailable() { - if (w == Playlists) + if (isActiveWindow(Playlists)) { - if (!Content->reallyEmpty()) + if (!Content.reallyEmpty()) return true; } return false; @@ -491,27 +491,26 @@ bool PlaylistEditor::nextColumnAvailable() void PlaylistEditor::nextColumn() { - if (w == Playlists) + if (isActiveWindow(Playlists)) { - Playlists->setHighlightColor(Config.main_highlight_color); + Playlists.setHighlightColor(Config.main_highlight_color); w->refresh(); - w = Content; - Content->setHighlightColor(Config.active_column_color); + w = &Content; + Content.setHighlightColor(Config.active_column_color); } } /***********************************************************************/ - void PlaylistEditor::Locate(const std::string &name) { update(); - for (size_t i = 0; i < Playlists->size(); ++i) + for (size_t i = 0; i < Playlists.size(); ++i) { - if (name == (*Playlists)[i].value()) + if (name == Playlists[i].value()) { - Playlists->highlight(i); - Content->clear(); + Playlists.highlight(i); + Content.clear(); break; } } diff --git a/src/playlist_editor.h b/src/playlist_editor.h index 31861e7e..f3fc7d57 100644 --- a/src/playlist_editor.h +++ b/src/playlist_editor.h @@ -76,8 +76,8 @@ struct PlaylistEditor : public Screen, public Filterable, public H bool isContentFiltered(); std::shared_ptr contentProxyList(); - NC::Menu *Playlists; - NC::Menu *Content; + NC::Menu Playlists; + NC::Menu Content; protected: virtual bool isLockable() OVERRIDE { return true; }