diff --git a/src/display.cpp b/src/display.cpp index af929bb2..735be5cd 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -76,22 +76,23 @@ template void setProperties(NC::Menu &menu, const MPD::Song &s, HasSongs &screen, bool &separate_albums, bool &is_now_playing, bool &is_selected, bool &discard_colors) { + size_t drawn_pos = menu.drawn() - menu.begin(); separate_albums = false; if (Config.playlist_separate_albums) { auto pl = screen.getProxySongList(); assert(pl); - auto next = pl->getSong(menu.drawnPosition()+1); + auto next = pl->getSong(drawn_pos+1); if (next && next->getAlbum() != s.getAlbum()) separate_albums = true; } if (separate_albums) menu << NC::fmtUnderline; - int song_pos = menu.isFiltered() ? s.getPosition() : menu.drawnPosition(); + int song_pos = menu.isFiltered() ? s.getPosition() : drawn_pos; is_now_playing = static_cast(&menu) == myPlaylist->Items && song_pos == myPlaylist->NowPlaying; - is_selected = menu.drawn().isSelected(); + is_selected = menu.drawn()->isSelected(); discard_colors = Config.discard_colors_if_item_is_selected && is_selected; } @@ -337,17 +338,17 @@ std::string Display::Columns(size_t list_width) void Display::SongsInColumns(NC::Menu &menu, HasSongs &screen) { - showSongsInColumns(menu, menu.drawn().value(), screen); + showSongsInColumns(menu, menu.drawn()->value(), screen); } void Display::Songs(NC::Menu &menu, HasSongs &screen, const std::string &format) { - showSongs(menu, menu.drawn().value(), screen, format); + showSongs(menu, menu.drawn()->value(), screen, format); } void Display::Tags(NC::Menu &menu) { - const MPD::MutableSong &s = menu.drawn().value(); + const MPD::MutableSong &s = menu.drawn()->value(); size_t i = myTagEditor->TagTypes->choice(); if (i < 11) { @@ -364,12 +365,12 @@ void Display::Tags(NC::Menu &menu) void Display::Outputs(NC::Menu &menu) { - menu << menu.drawn().value().name(); + menu << menu.drawn()->value().name(); } void Display::Items(NC::Menu &menu) { - const MPD::Item &item = menu.drawn().value(); + const MPD::Item &item = menu.drawn()->value(); switch (item.type) { case MPD::itDirectory: @@ -389,7 +390,7 @@ void Display::Items(NC::Menu &menu) void Display::SearchEngine(NC::Menu &menu) { - const SEItem &si = menu.drawn().value(); + const SEItem &si = menu.drawn()->value(); if (si.isSong()) { if (!Config.columns_in_search_engine) diff --git a/src/display.h b/src/display.h index e5e57786..b79208cb 100644 --- a/src/display.h +++ b/src/display.h @@ -32,12 +32,12 @@ namespace Display template void Default(NC::Menu &menu) { - menu << menu.drawn().value(); + menu << menu.drawn()->value(); } template void Pair(NC::Menu< std::pair > &menu) { - menu << menu.drawn().value().first; + menu << menu.drawn()->value().first; } void SongsInColumns(NC::Menu &menu, HasSongs &screen); diff --git a/src/media_library.cpp b/src/media_library.cpp index 4761e1c0..caa8e62e 100644 --- a/src/media_library.cpp +++ b/src/media_library.cpp @@ -893,12 +893,12 @@ bool SongEntryMatcher(const Regex &rx, const MPD::Song &s) void DisplayAlbums(NC::Menu &menu) { - menu << AlbumToString(menu.drawn().value()); + menu << AlbumToString(menu.drawn()->value()); } void DisplayPrimaryTags(NC::Menu &menu) { - const std::string &tag = menu.drawn().value(); + const std::string &tag = menu.drawn()->value(); if (tag.empty()) menu << Config.empty_tag; else diff --git a/src/menu.h b/src/menu.h index c5e9f669..60400db4 100644 --- a/src/menu.h +++ b/src/menu.h @@ -343,12 +343,7 @@ template struct Menu : public Window /// @return currently drawn item. The result is defined only within /// drawing function that is called by Refresh() /// @see Refresh() - const Item &drawn() const { return *(*m_options_ptr)[m_drawn_position]; } - - /// @return position of currently drawn item. The result is defined - /// only within drawing function that is called by Refresh() - /// @see Refresh() - size_t drawnPosition() const { return m_drawn_position; } + ConstIterator drawn() const { return begin() + m_drawn_position; } /// @return reference to last item on the list /// @throw List::InvalidItem if requested item is separator