menu: add value iterator

This commit is contained in:
Andrzej Rybczak
2012-08-31 09:19:45 +02:00
parent 04bbdc53fc
commit e4f4cd68c0
4 changed files with 28 additions and 12 deletions

View File

@@ -2205,7 +2205,7 @@ void ToggleBrowserSortMode::Run()
ShowMessage("Sort songs by: Name"); ShowMessage("Sort songs by: Name");
break; break;
} }
std::sort(myBrowser->Main()->Begin()+(myBrowser->CurrentDir() != "/"), myBrowser->Main()->End(), CaseInsensitiveSorting()); std::sort(myBrowser->Main()->BeginV()+(myBrowser->CurrentDir() != "/"), myBrowser->Main()->EndV(), CaseInsensitiveSorting());
} }
bool ToggleLibraryTagType::canBeRun() const bool ToggleLibraryTagType::canBeRun() const

View File

@@ -248,7 +248,7 @@ void MediaLibrary::Update()
} }
utf_to_locale(Artists->Current().value()); utf_to_locale(Artists->Current().value());
if (!Albums->Empty()) if (!Albums->Empty())
std::sort(Albums->Begin(), Albums->End(), SearchConstraintsSorting()); std::sort(Albums->BeginV(), Albums->EndV(), SearchConstraintsSorting());
if (Albums->Size() > 1) if (Albums->Size() > 1)
{ {
Albums->AddSeparator(); Albums->AddSeparator();
@@ -306,7 +306,7 @@ void MediaLibrary::Update()
} }
Mpd.BlockIdle(0); Mpd.BlockIdle(0);
if (!Albums->Empty()) if (!Albums->Empty())
std::sort(Albums->Begin(), Albums->End(), SearchConstraintsSorting()); std::sort(Albums->BeginV(), Albums->EndV(), SearchConstraintsSorting());
Albums->Refresh(); Albums->Refresh();
} }
@@ -334,9 +334,9 @@ void MediaLibrary::Update()
}); });
if (Albums->Current().value().Date == AllTracksMarker) if (Albums->Current().value().Date == AllTracksMarker)
std::sort(Songs->Begin(), Songs->End(), SortAllTracks); std::sort(Songs->BeginV(), Songs->EndV(), SortAllTracks);
else else
std::sort(Songs->Begin(), Songs->End(), SortSongsByTrack); std::sort(Songs->BeginV(), Songs->EndV(), SortSongsByTrack);
Songs->Window::Clear(); Songs->Window::Clear();
Songs->Refresh(); Songs->Refresh();

View File

@@ -215,16 +215,25 @@ template <typename T> struct Menu : public Window, public List
}; };
typedef ItemIterator< typedef ItemIterator<
T, typename std::vector<Item *>::iterator Item, typename std::vector<Item *>::iterator
> Iterator; > Iterator;
typedef ItemIterator< typedef ItemIterator<
typename std::add_const<T>::type, typename std::vector<Item *>::const_iterator const Item, typename std::vector<Item *>::const_iterator
> ConstIterator; > ConstIterator;
typedef std::reverse_iterator<Iterator> ReverseIterator; typedef std::reverse_iterator<Iterator> ReverseIterator;
typedef std::reverse_iterator<ConstIterator> ConstReverseIterator; typedef std::reverse_iterator<ConstIterator> ConstReverseIterator;
typedef ItemIterator<
T, typename std::vector<Item *>::iterator
> ValueIterator;
typedef ItemIterator<
typename std::add_const<T>::type, typename std::vector<Item *>::const_iterator
> ConstValueIterator;
typedef std::reverse_iterator<ValueIterator> ReverseValueIterator;
typedef std::reverse_iterator<ConstValueIterator> ConstReverseValueIterator;
/// Constructs an empty menu with given parameters /// Constructs an empty menu with given parameters
/// @param startx X position of left upper corner of constructed menu /// @param startx X position of left upper corner of constructed menu
/// @param starty Y position of left upper corner of constructed menu /// @param starty Y position of left upper corner of constructed menu
@@ -522,16 +531,24 @@ template <typename T> struct Menu : public Window, public List
Iterator Begin() { return Iterator(m_options_ptr->begin()); } Iterator Begin() { return Iterator(m_options_ptr->begin()); }
ConstIterator Begin() const { return ConstIterator(m_options_ptr->begin()); } ConstIterator Begin() const { return ConstIterator(m_options_ptr->begin()); }
Iterator End() { return Iterator(m_options_ptr->end()); } Iterator End() { return Iterator(m_options_ptr->end()); }
ConstIterator End() const { return ConstIterator(m_options_ptr->end()); } ConstIterator End() const { return ConstIterator(m_options_ptr->end()); }
ReverseIterator Rbegin() { return ReverseIterator(End()); } ReverseIterator Rbegin() { return ReverseIterator(End()); }
ConstReverseIterator Rbegin() const { return ConstReverseIterator(End()); } ConstReverseIterator Rbegin() const { return ConstReverseIterator(End()); }
ReverseIterator Rend() { return ReverseIterator(Begin()); } ReverseIterator Rend() { return ReverseIterator(Begin()); }
ConstReverseIterator Rend() const { return ConstReverseIterator(Begin()); } ConstReverseIterator Rend() const { return ConstReverseIterator(Begin()); }
ValueIterator BeginV() { return ValueIterator(m_options_ptr->begin()); }
ConstValueIterator BeginV() const { return ConstValueIterator(m_options_ptr->begin()); }
ValueIterator EndV() { return ValueIterator(m_options_ptr->end()); }
ConstValueIterator EndV() const { return ConstValueIterator(m_options_ptr->end()); }
ReverseValueIterator RbeginV() { return ReverseValueIterator(End()); }
ConstReverseIterator RbeginV() const { return ConstReverseValueIterator(End()); }
ReverseValueIterator RendV() { return ReverseValueIterator(Begin()); }
ConstReverseValueIterator RendV() const { return ConstReverseValueIterator(Begin()); }
private: private:
/// Clears filter, filtered data etc. /// Clears filter, filtered data etc.
/// ///
@@ -1063,4 +1080,3 @@ template <typename T> typename Menu<T>::Item &Menu<T>::operator[](size_t pos)
} }
#endif #endif

View File

@@ -255,7 +255,7 @@ void TagEditor::Update()
Albums->AddItem(std::make_pair(l[0].toString(Config.tag_editor_album_format), *it)); Albums->AddItem(std::make_pair(l[0].toString(Config.tag_editor_album_format), *it));
} }
Mpd.BlockIdle(0); Mpd.BlockIdle(0);
std::sort(Albums->Begin(), Albums->End(), CaseInsensitiveSorting()); std::sort(Albums->BeginV(), Albums->EndV(), CaseInsensitiveSorting());
} }
else else
{ {