do not attempt to get/select/whatever item from an empty menu
This commit is contained in:
@@ -38,6 +38,7 @@ class List
|
|||||||
virtual ~List() { };
|
virtual ~List() { };
|
||||||
virtual void Select(int, bool) = 0;
|
virtual void Select(int, bool) = 0;
|
||||||
virtual void Static(int, bool) = 0;
|
virtual void Static(int, bool) = 0;
|
||||||
|
virtual bool Empty() const = 0;
|
||||||
virtual bool isSelected(int = -1) const = 0;
|
virtual bool isSelected(int = -1) const = 0;
|
||||||
virtual bool isStatic(int = -1) const = 0;
|
virtual bool isStatic(int = -1) const = 0;
|
||||||
virtual bool hasSelected() const = 0;
|
virtual bool hasSelected() const = 0;
|
||||||
@@ -108,7 +109,7 @@ template <class T> class Menu : public Window, public List
|
|||||||
void HighlightColor(Color col) { itsHighlightColor = col; }
|
void HighlightColor(Color col) { itsHighlightColor = col; }
|
||||||
void Highlighting(bool hl) { highlightEnabled = hl; }
|
void Highlighting(bool hl) { highlightEnabled = hl; }
|
||||||
|
|
||||||
bool Empty() const { return itsOptions.empty(); }
|
virtual bool Empty() const { return itsOptions.empty(); }
|
||||||
|
|
||||||
T &Back();
|
T &Back();
|
||||||
const T &Back() const;
|
const T &Back() const;
|
||||||
@@ -311,6 +312,8 @@ template <class T> void Menu<T>::Refresh()
|
|||||||
|
|
||||||
template <class T> void Menu<T>::Scroll(Where where)
|
template <class T> void Menu<T>::Scroll(Where where)
|
||||||
{
|
{
|
||||||
|
if (itsOptions.empty())
|
||||||
|
return;
|
||||||
int MaxHighlight = itsOptions.size()-1;
|
int MaxHighlight = itsOptions.size()-1;
|
||||||
int MaxBeginning = itsOptions.size() < itsHeight ? 0 : itsOptions.size()-itsHeight;
|
int MaxBeginning = itsOptions.size() < itsHeight ? 0 : itsOptions.size()-itsHeight;
|
||||||
int MaxCurrentHighlight = itsBeginning+itsHeight-1;
|
int MaxCurrentHighlight = itsBeginning+itsHeight-1;
|
||||||
|
|||||||
@@ -487,10 +487,8 @@ int main(int argc, char *argv[])
|
|||||||
sort(list.begin(), list.end(), CaseInsensitiveSorting());
|
sort(list.begin(), list.end(), CaseInsensitiveSorting());
|
||||||
for (TagList::iterator it = list.begin(); it != list.end(); it++)
|
for (TagList::iterator it = list.begin(); it != list.end(); it++)
|
||||||
{
|
{
|
||||||
if ((mLibArtists->Empty() || mLibArtists->Back() != *it) && !it->empty())
|
if (!it->empty())
|
||||||
{
|
|
||||||
mLibArtists->AddOption(*it);
|
mLibArtists->AddOption(*it);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
mLibArtists->Window::Clear();
|
mLibArtists->Window::Clear();
|
||||||
mLibArtists->Refresh();
|
mLibArtists->Refresh();
|
||||||
@@ -953,6 +951,9 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
ENTER_BROWSER_SCREEN:
|
ENTER_BROWSER_SCREEN:
|
||||||
|
|
||||||
|
if (mBrowser->Empty())
|
||||||
|
continue;
|
||||||
|
|
||||||
const Item &item = mBrowser->Current();
|
const Item &item = mBrowser->Current();
|
||||||
switch (item.type)
|
switch (item.type)
|
||||||
{
|
{
|
||||||
@@ -1312,7 +1313,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
SongList list;
|
SongList list;
|
||||||
|
|
||||||
if (wCurrent == mLibArtists)
|
if (!mLibArtists->Empty() && wCurrent == mLibArtists)
|
||||||
{
|
{
|
||||||
const string &tag = mLibArtists->Current();
|
const string &tag = mLibArtists->Current();
|
||||||
Mpd->StartSearch(1);
|
Mpd->StartSearch(1);
|
||||||
@@ -1421,7 +1422,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
SongList list;
|
SongList list;
|
||||||
|
|
||||||
if (wCurrent == mPlaylistList)
|
if (wCurrent == mPlaylistList && !mPlaylistList->Empty())
|
||||||
{
|
{
|
||||||
const string &playlist = mPlaylistList->Current();
|
const string &playlist = mPlaylistList->Current();
|
||||||
Mpd->GetPlaylistContent(playlist, list);
|
Mpd->GetPlaylistContent(playlist, list);
|
||||||
@@ -1698,6 +1699,8 @@ int main(int argc, char *argv[])
|
|||||||
if (wCurrent == mPlaylist || wCurrent == mEditorTags || (wCurrent == mBrowser && ((Menu<Song> *)wCurrent)->Choice() >= (browsed_dir != "/" ? 1 : 0)) || (wCurrent == mSearcher && !mSearcher->Current().first) || wCurrent == mLibSongs || wCurrent == mPlaylistEditor)
|
if (wCurrent == mPlaylist || wCurrent == mEditorTags || (wCurrent == mBrowser && ((Menu<Song> *)wCurrent)->Choice() >= (browsed_dir != "/" ? 1 : 0)) || (wCurrent == mSearcher && !mSearcher->Current().first) || wCurrent == mLibSongs || wCurrent == mPlaylistEditor)
|
||||||
{
|
{
|
||||||
List *mList = (Menu<Song> *)wCurrent;
|
List *mList = (Menu<Song> *)wCurrent;
|
||||||
|
if (mList->Empty())
|
||||||
|
continue;
|
||||||
size_t i = mList->Choice();
|
size_t i = mList->Choice();
|
||||||
mList->Select(i, !mList->isSelected(i));
|
mList->Select(i, !mList->isSelected(i));
|
||||||
wCurrent->Scroll(wDown);
|
wCurrent->Scroll(wDown);
|
||||||
@@ -1705,7 +1708,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (current_screen == csBrowser)
|
if (current_screen == csBrowser && !mBrowser->Empty())
|
||||||
{
|
{
|
||||||
const Item &item = mBrowser->Current();
|
const Item &item = mBrowser->Current();
|
||||||
switch (item.type)
|
switch (item.type)
|
||||||
|
|||||||
Reference in New Issue
Block a user