menu: make Menu::drawn return ConstIterator

This commit is contained in:
Andrzej Rybczak
2012-09-04 23:05:41 +02:00
parent bf3a7a7715
commit 5f637103a6
4 changed files with 15 additions and 19 deletions

View File

@@ -76,22 +76,23 @@ template <typename T>
void setProperties(NC::Menu<T> &menu, const MPD::Song &s, HasSongs &screen, bool &separate_albums, void setProperties(NC::Menu<T> &menu, const MPD::Song &s, HasSongs &screen, bool &separate_albums,
bool &is_now_playing, bool &is_selected, bool &discard_colors) bool &is_now_playing, bool &is_selected, bool &discard_colors)
{ {
size_t drawn_pos = menu.drawn() - menu.begin();
separate_albums = false; separate_albums = false;
if (Config.playlist_separate_albums) if (Config.playlist_separate_albums)
{ {
auto pl = screen.getProxySongList(); auto pl = screen.getProxySongList();
assert(pl); assert(pl);
auto next = pl->getSong(menu.drawnPosition()+1); auto next = pl->getSong(drawn_pos+1);
if (next && next->getAlbum() != s.getAlbum()) if (next && next->getAlbum() != s.getAlbum())
separate_albums = true; separate_albums = true;
} }
if (separate_albums) if (separate_albums)
menu << NC::fmtUnderline; 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<void *>(&menu) == myPlaylist->Items is_now_playing = static_cast<void *>(&menu) == myPlaylist->Items
&& song_pos == myPlaylist->NowPlaying; && 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; 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<MPD::Song> &menu, HasSongs &screen) void Display::SongsInColumns(NC::Menu<MPD::Song> &menu, HasSongs &screen)
{ {
showSongsInColumns(menu, menu.drawn().value(), screen); showSongsInColumns(menu, menu.drawn()->value(), screen);
} }
void Display::Songs(NC::Menu<MPD::Song> &menu, HasSongs &screen, const std::string &format) void Display::Songs(NC::Menu<MPD::Song> &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<MPD::MutableSong> &menu) void Display::Tags(NC::Menu<MPD::MutableSong> &menu)
{ {
const MPD::MutableSong &s = menu.drawn().value(); const MPD::MutableSong &s = menu.drawn()->value();
size_t i = myTagEditor->TagTypes->choice(); size_t i = myTagEditor->TagTypes->choice();
if (i < 11) if (i < 11)
{ {
@@ -364,12 +365,12 @@ void Display::Tags(NC::Menu<MPD::MutableSong> &menu)
void Display::Outputs(NC::Menu<MPD::Output> &menu) void Display::Outputs(NC::Menu<MPD::Output> &menu)
{ {
menu << menu.drawn().value().name(); menu << menu.drawn()->value().name();
} }
void Display::Items(NC::Menu<MPD::Item> &menu) void Display::Items(NC::Menu<MPD::Item> &menu)
{ {
const MPD::Item &item = menu.drawn().value(); const MPD::Item &item = menu.drawn()->value();
switch (item.type) switch (item.type)
{ {
case MPD::itDirectory: case MPD::itDirectory:
@@ -389,7 +390,7 @@ void Display::Items(NC::Menu<MPD::Item> &menu)
void Display::SearchEngine(NC::Menu<SEItem> &menu) void Display::SearchEngine(NC::Menu<SEItem> &menu)
{ {
const SEItem &si = menu.drawn().value(); const SEItem &si = menu.drawn()->value();
if (si.isSong()) if (si.isSong())
{ {
if (!Config.columns_in_search_engine) if (!Config.columns_in_search_engine)

View File

@@ -32,12 +32,12 @@ namespace Display
template <typename T> void Default(NC::Menu<T> &menu) template <typename T> void Default(NC::Menu<T> &menu)
{ {
menu << menu.drawn().value(); menu << menu.drawn()->value();
} }
template <typename A, typename B> void Pair(NC::Menu< std::pair<A, B> > &menu) template <typename A, typename B> void Pair(NC::Menu< std::pair<A, B> > &menu)
{ {
menu << menu.drawn().value().first; menu << menu.drawn()->value().first;
} }
void SongsInColumns(NC::Menu<MPD::Song> &menu, HasSongs &screen); void SongsInColumns(NC::Menu<MPD::Song> &menu, HasSongs &screen);

View File

@@ -893,12 +893,12 @@ bool SongEntryMatcher(const Regex &rx, const MPD::Song &s)
void DisplayAlbums(NC::Menu<SearchConstraints> &menu) void DisplayAlbums(NC::Menu<SearchConstraints> &menu)
{ {
menu << AlbumToString(menu.drawn().value()); menu << AlbumToString(menu.drawn()->value());
} }
void DisplayPrimaryTags(NC::Menu<std::string> &menu) void DisplayPrimaryTags(NC::Menu<std::string> &menu)
{ {
const std::string &tag = menu.drawn().value(); const std::string &tag = menu.drawn()->value();
if (tag.empty()) if (tag.empty())
menu << Config.empty_tag; menu << Config.empty_tag;
else else

View File

@@ -343,12 +343,7 @@ template <typename T> struct Menu : public Window
/// @return currently drawn item. The result is defined only within /// @return currently drawn item. The result is defined only within
/// drawing function that is called by Refresh() /// drawing function that is called by Refresh()
/// @see Refresh() /// @see Refresh()
const Item &drawn() const { return *(*m_options_ptr)[m_drawn_position]; } ConstIterator drawn() const { return begin() + 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; }
/// @return reference to last item on the list /// @return reference to last item on the list
/// @throw List::InvalidItem if requested item is separator /// @throw List::InvalidItem if requested item is separator