make feature 'display separators between albums' work in all screens
This commit is contained in:
@@ -175,7 +175,7 @@ If enabled, time remaining to end of playlist will be shown after playlist's sta
|
|||||||
If enabled, total/remaining playlist time displayed in statusbar will be shown using shortened units' names (d:h:m:s instead of days:hours:minutes:seconds).
|
If enabled, total/remaining playlist time displayed in statusbar will be shown using shortened units' names (d:h:m:s instead of days:hours:minutes:seconds).
|
||||||
.TP
|
.TP
|
||||||
.B playlist_separate_albums = yes/no
|
.B playlist_separate_albums = yes/no
|
||||||
If enabled, separators will be placed between albums in playlist.
|
If enabled, separators will be placed between albums.
|
||||||
.TP
|
.TP
|
||||||
.B playlist_display_mode = classic/columns
|
.B playlist_display_mode = classic/columns
|
||||||
Default display mode for Playlist.
|
Default display mode for Playlist.
|
||||||
|
|||||||
@@ -57,6 +57,8 @@ const char *Browser::SupportedExtensions[] =
|
|||||||
|
|
||||||
void Browser::Init()
|
void Browser::Init()
|
||||||
{
|
{
|
||||||
|
static Display::ScreenFormat sf = { this, &Config.song_list_format };
|
||||||
|
|
||||||
w = new Menu<MPD::Item>(0, MainStartY, COLS, MainHeight, Config.columns_in_browser ? Display::Columns() : "", Config.main_color, brNone);
|
w = new Menu<MPD::Item>(0, MainStartY, COLS, MainHeight, Config.columns_in_browser ? Display::Columns() : "", Config.main_color, brNone);
|
||||||
w->HighlightColor(Config.main_highlight_color);
|
w->HighlightColor(Config.main_highlight_color);
|
||||||
w->CyclicScrolling(Config.use_cyclic_scrolling);
|
w->CyclicScrolling(Config.use_cyclic_scrolling);
|
||||||
@@ -64,6 +66,7 @@ void Browser::Init()
|
|||||||
w->SetSelectPrefix(&Config.selected_item_prefix);
|
w->SetSelectPrefix(&Config.selected_item_prefix);
|
||||||
w->SetSelectSuffix(&Config.selected_item_suffix);
|
w->SetSelectSuffix(&Config.selected_item_suffix);
|
||||||
w->SetItemDisplayer(Display::Items);
|
w->SetItemDisplayer(Display::Items);
|
||||||
|
w->SetItemDisplayerUserData(&sf);
|
||||||
w->SetGetStringFunction(ItemToString);
|
w->SetGetStringFunction(ItemToString);
|
||||||
isInitialized = 1;
|
isInitialized = 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ class Browser : public Screen< Menu<MPD::Item> >
|
|||||||
virtual bool isTabbable() { return true; }
|
virtual bool isTabbable() { return true; }
|
||||||
|
|
||||||
virtual MPD::Song *CurrentSong();
|
virtual MPD::Song *CurrentSong();
|
||||||
|
virtual MPD::Song *GetSong(size_t pos) { return w->at(pos).type == MPD::itSong ? (*w)[pos].song : 0; }
|
||||||
|
|
||||||
virtual bool allowsSelection() { return true; }
|
virtual bool allowsSelection() { return true; }
|
||||||
virtual void ReverseSelection();
|
virtual void ReverseSelection();
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
|
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
#include "display.h"
|
#include "display.h"
|
||||||
#include "helpers.h"
|
#include "helpers.h"
|
||||||
#include "info.h"
|
#include "info.h"
|
||||||
@@ -130,7 +132,7 @@ std::string Display::Columns()
|
|||||||
return TO_STRING(result);
|
return TO_STRING(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Display::SongsInColumns(const MPD::Song &s, void *, Menu<MPD::Song> *menu)
|
void Display::SongsInColumns(const MPD::Song &s, void *data, Menu<MPD::Song> *menu)
|
||||||
{
|
{
|
||||||
if (!s.Localized())
|
if (!s.Localized())
|
||||||
const_cast<MPD::Song *>(&s)->Localize();
|
const_cast<MPD::Song *>(&s)->Localize();
|
||||||
@@ -142,10 +144,14 @@ void Display::SongsInColumns(const MPD::Song &s, void *, Menu<MPD::Song> *menu)
|
|||||||
if (Config.columns.empty())
|
if (Config.columns.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bool separate_albums = Config.playlist_separate_albums
|
assert(data);
|
||||||
&& myScreen == myPlaylist
|
bool separate_albums = false;
|
||||||
&& menu->CurrentlyDrawedPosition()+1 < myPlaylist->Items->Size()
|
if (Config.playlist_separate_albums && menu->CurrentlyDrawedPosition()+1 < menu->Size())
|
||||||
&& (*myPlaylist->Items)[menu->CurrentlyDrawedPosition()+1].GetAlbum() != s.GetAlbum();
|
{
|
||||||
|
MPD::Song *next = static_cast<ScreenFormat *>(data)->screen->GetSong(menu->CurrentlyDrawedPosition()+1);
|
||||||
|
if (next && next->GetAlbum() != s.GetAlbum())
|
||||||
|
separate_albums = true;
|
||||||
|
}
|
||||||
if (separate_albums)
|
if (separate_albums)
|
||||||
*menu << fmtUnderline;
|
*menu << fmtUnderline;
|
||||||
|
|
||||||
@@ -300,10 +306,14 @@ void Display::Songs(const MPD::Song &s, void *data, Menu<MPD::Song> *menu)
|
|||||||
if (is_now_playing)
|
if (is_now_playing)
|
||||||
*menu << Config.now_playing_prefix;
|
*menu << Config.now_playing_prefix;
|
||||||
|
|
||||||
bool separate_albums = Config.playlist_separate_albums
|
assert(data);
|
||||||
&& myScreen == myPlaylist
|
bool separate_albums = false;
|
||||||
&& menu->CurrentlyDrawedPosition()+1 < myPlaylist->Items->Size()
|
if (Config.playlist_separate_albums && menu->CurrentlyDrawedPosition()+1 < menu->Size())
|
||||||
&& (*myPlaylist->Items)[menu->CurrentlyDrawedPosition()+1].GetAlbum() != s.GetAlbum();
|
{
|
||||||
|
MPD::Song *next = static_cast<ScreenFormat *>(data)->screen->GetSong(menu->CurrentlyDrawedPosition()+1);
|
||||||
|
if (next && next->GetAlbum() != s.GetAlbum())
|
||||||
|
separate_albums = true;
|
||||||
|
}
|
||||||
if (separate_albums)
|
if (separate_albums)
|
||||||
{
|
{
|
||||||
*menu << fmtUnderline;
|
*menu << fmtUnderline;
|
||||||
@@ -312,7 +322,7 @@ void Display::Songs(const MPD::Song &s, void *data, Menu<MPD::Song> *menu)
|
|||||||
|
|
||||||
bool discard_colors = Config.discard_colors_if_item_is_selected && menu->isSelected(menu->CurrentlyDrawedPosition());
|
bool discard_colors = Config.discard_colors_if_item_is_selected && menu->isSelected(menu->CurrentlyDrawedPosition());
|
||||||
|
|
||||||
std::string line = s.toString(*static_cast<std::string *>(data), "$");
|
std::string line = s.toString(*static_cast<ScreenFormat *>(data)->format, "$");
|
||||||
for (std::string::const_iterator it = line.begin(); it != line.end(); ++it)
|
for (std::string::const_iterator it = line.begin(); it != line.end(); ++it)
|
||||||
{
|
{
|
||||||
if (*it == '$')
|
if (*it == '$')
|
||||||
@@ -376,7 +386,7 @@ void Display::Tags(const MPD::Song &s, void *data, Menu<MPD::Song> *menu)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Display::Items(const MPD::Item &item, void *, Menu<MPD::Item> *menu)
|
void Display::Items(const MPD::Item &item, void *data, Menu<MPD::Item> *menu)
|
||||||
{
|
{
|
||||||
switch (item.type)
|
switch (item.type)
|
||||||
{
|
{
|
||||||
@@ -392,9 +402,9 @@ void Display::Items(const MPD::Item &item, void *, Menu<MPD::Item> *menu)
|
|||||||
}
|
}
|
||||||
case MPD::itSong:
|
case MPD::itSong:
|
||||||
if (!Config.columns_in_browser)
|
if (!Config.columns_in_browser)
|
||||||
Display::Songs(*item.song, &Config.song_list_format, reinterpret_cast<Menu<MPD::Song> *>(menu));
|
Display::Songs(*item.song, data, reinterpret_cast<Menu<MPD::Song> *>(menu));
|
||||||
else
|
else
|
||||||
Display::SongsInColumns(*item.song, 0, reinterpret_cast<Menu<MPD::Song> *>(menu));
|
Display::SongsInColumns(*item.song, data, reinterpret_cast<Menu<MPD::Song> *>(menu));
|
||||||
return;
|
return;
|
||||||
case MPD::itPlaylist:
|
case MPD::itPlaylist:
|
||||||
*menu << Config.browser_playlist_prefix << ExtractTopName(item.name);
|
*menu << Config.browser_playlist_prefix << ExtractTopName(item.name);
|
||||||
@@ -404,14 +414,14 @@ void Display::Items(const MPD::Item &item, void *, Menu<MPD::Item> *menu)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Display::SearchEngine(const std::pair<Buffer *, MPD::Song *> &pair, void *, Menu< std::pair<Buffer *, MPD::Song *> > *menu)
|
void Display::SearchEngine(const std::pair<Buffer *, MPD::Song *> &pair, void *data, Menu< std::pair<Buffer *, MPD::Song *> > *menu)
|
||||||
{
|
{
|
||||||
if (pair.second)
|
if (pair.second)
|
||||||
{
|
{
|
||||||
if (!Config.columns_in_search_engine)
|
if (!Config.columns_in_search_engine)
|
||||||
Display::Songs(*pair.second, &Config.song_list_format, reinterpret_cast<Menu<MPD::Song> *>(menu));
|
Display::Songs(*pair.second, data, reinterpret_cast<Menu<MPD::Song> *>(menu));
|
||||||
else
|
else
|
||||||
Display::SongsInColumns(*pair.second, 0, reinterpret_cast<Menu<MPD::Song> *>(menu));
|
Display::SongsInColumns(*pair.second, data, reinterpret_cast<Menu<MPD::Song> *>(menu));
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -24,9 +24,16 @@
|
|||||||
#include "ncmpcpp.h"
|
#include "ncmpcpp.h"
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "mpdpp.h"
|
#include "mpdpp.h"
|
||||||
|
#include "screen.h"
|
||||||
|
|
||||||
namespace Display
|
namespace Display
|
||||||
{
|
{
|
||||||
|
struct ScreenFormat
|
||||||
|
{
|
||||||
|
BasicScreen *screen;
|
||||||
|
std::string *format;
|
||||||
|
};
|
||||||
|
|
||||||
std::string Columns();
|
std::string Columns();
|
||||||
|
|
||||||
template <typename T> void Generic(const T &t, void *, Menu<T> *menu)
|
template <typename T> void Generic(const T &t, void *, Menu<T> *menu)
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ void Help::GetKeybindings()
|
|||||||
# endif // HAVE_TAGLIB_H
|
# endif // HAVE_TAGLIB_H
|
||||||
*w << DisplayKeys(Key.ToggleDisplayMode) << "Toggle display mode\n";
|
*w << DisplayKeys(Key.ToggleDisplayMode) << "Toggle display mode\n";
|
||||||
*w << DisplayKeys(Key.ToggleInterface) << "Toggle user interface\n";
|
*w << DisplayKeys(Key.ToggleInterface) << "Toggle user interface\n";
|
||||||
*w << DisplayKeys(Key.ToggleSeparatorsInPlaylist) << "Toggle displaying separators between albums in playlist\n";
|
*w << DisplayKeys(Key.ToggleSeparatorsInPlaylist) << "Toggle displaying separators between albums\n";
|
||||||
*w << DisplayKeys(Key.GoToPosition) << "Go to given position in current song (in % by default)\n";
|
*w << DisplayKeys(Key.GoToPosition) << "Go to given position in current song (in % by default)\n";
|
||||||
*w << DisplayKeys(Key.SongInfo) << "Show song info\n";
|
*w << DisplayKeys(Key.SongInfo) << "Show song info\n";
|
||||||
# ifdef HAVE_CURL_CURL_H
|
# ifdef HAVE_CURL_CURL_H
|
||||||
|
|||||||
@@ -75,6 +75,8 @@ void MediaLibrary::Init()
|
|||||||
Albums->SetGetStringFunction(AlbumToString);
|
Albums->SetGetStringFunction(AlbumToString);
|
||||||
Albums->SetGetStringFunctionUserData(this);
|
Albums->SetGetStringFunctionUserData(this);
|
||||||
|
|
||||||
|
static Display::ScreenFormat sf = { this, &Config.song_library_format };
|
||||||
|
|
||||||
Songs = new Menu<MPD::Song>(itsRightColStartX, MainStartY, itsRightColWidth, MainHeight, "Songs", Config.main_color, brNone);
|
Songs = new Menu<MPD::Song>(itsRightColStartX, MainStartY, itsRightColWidth, MainHeight, "Songs", Config.main_color, brNone);
|
||||||
Songs->HighlightColor(Config.main_highlight_color);
|
Songs->HighlightColor(Config.main_highlight_color);
|
||||||
Songs->CyclicScrolling(Config.use_cyclic_scrolling);
|
Songs->CyclicScrolling(Config.use_cyclic_scrolling);
|
||||||
@@ -82,7 +84,7 @@ void MediaLibrary::Init()
|
|||||||
Songs->SetSelectPrefix(&Config.selected_item_prefix);
|
Songs->SetSelectPrefix(&Config.selected_item_prefix);
|
||||||
Songs->SetSelectSuffix(&Config.selected_item_suffix);
|
Songs->SetSelectSuffix(&Config.selected_item_suffix);
|
||||||
Songs->SetItemDisplayer(Display::Songs);
|
Songs->SetItemDisplayer(Display::Songs);
|
||||||
Songs->SetItemDisplayerUserData(&Config.song_library_format);
|
Songs->SetItemDisplayerUserData(&sf);
|
||||||
Songs->SetGetStringFunction(SongToString);
|
Songs->SetGetStringFunction(SongToString);
|
||||||
|
|
||||||
w = Artists;
|
w = Artists;
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ class MediaLibrary : public Screen<Window>
|
|||||||
virtual bool isTabbable() { return true; }
|
virtual bool isTabbable() { return true; }
|
||||||
|
|
||||||
virtual MPD::Song *CurrentSong();
|
virtual MPD::Song *CurrentSong();
|
||||||
|
virtual MPD::Song *GetSong(size_t pos) { return w == Songs ? &Songs->at(pos) : 0; }
|
||||||
|
|
||||||
virtual bool allowsSelection() { return true; }
|
virtual bool allowsSelection() { return true; }
|
||||||
virtual void ReverseSelection();
|
virtual void ReverseSelection();
|
||||||
|
|||||||
@@ -47,6 +47,8 @@ Menu< std::pair<std::string, MPD::Song::GetFunction> > *Playlist::SortDialog = 0
|
|||||||
|
|
||||||
void Playlist::Init()
|
void Playlist::Init()
|
||||||
{
|
{
|
||||||
|
static Display::ScreenFormat sf = { this, &Config.song_list_format };
|
||||||
|
|
||||||
Items = new Menu<MPD::Song>(0, MainStartY, COLS, MainHeight, Config.columns_in_playlist ? Display::Columns() : "", Config.main_color, brNone);
|
Items = new Menu<MPD::Song>(0, MainStartY, COLS, MainHeight, Config.columns_in_playlist ? Display::Columns() : "", Config.main_color, brNone);
|
||||||
Items->CyclicScrolling(Config.use_cyclic_scrolling);
|
Items->CyclicScrolling(Config.use_cyclic_scrolling);
|
||||||
Items->CenteredCursor(Config.centered_cursor);
|
Items->CenteredCursor(Config.centered_cursor);
|
||||||
@@ -54,7 +56,7 @@ void Playlist::Init()
|
|||||||
Items->SetSelectPrefix(&Config.selected_item_prefix);
|
Items->SetSelectPrefix(&Config.selected_item_prefix);
|
||||||
Items->SetSelectSuffix(&Config.selected_item_suffix);
|
Items->SetSelectSuffix(&Config.selected_item_suffix);
|
||||||
Items->SetItemDisplayer(Config.columns_in_playlist ? Display::SongsInColumns : Display::Songs);
|
Items->SetItemDisplayer(Config.columns_in_playlist ? Display::SongsInColumns : Display::Songs);
|
||||||
Items->SetItemDisplayerUserData(&Config.song_list_format);
|
Items->SetItemDisplayerUserData(&sf);
|
||||||
Items->SetGetStringFunction(Config.columns_in_playlist ? SongInColumnsToString : SongToString);
|
Items->SetGetStringFunction(Config.columns_in_playlist ? SongInColumnsToString : SongToString);
|
||||||
Items->SetGetStringFunctionUserData(&Config.song_list_format);
|
Items->SetGetStringFunctionUserData(&Config.song_list_format);
|
||||||
|
|
||||||
@@ -275,7 +277,7 @@ void Playlist::MouseButtonPressed(MEVENT me)
|
|||||||
|
|
||||||
MPD::Song *Playlist::CurrentSong()
|
MPD::Song *Playlist::CurrentSong()
|
||||||
{
|
{
|
||||||
return !Items->Empty() ? &Items->Current() : 0;
|
return w == Items && !Items->Empty() ? &Items->Current() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Playlist::GetSelectedSongs(MPD::SongList &v)
|
void Playlist::GetSelectedSongs(MPD::SongList &v)
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ class Playlist : public Screen<Window>
|
|||||||
virtual bool isTabbable() { return true; }
|
virtual bool isTabbable() { return true; }
|
||||||
|
|
||||||
virtual MPD::Song *CurrentSong();
|
virtual MPD::Song *CurrentSong();
|
||||||
|
virtual MPD::Song *GetSong(size_t pos) { return w == Items ? &Items->at(pos) : 0; }
|
||||||
|
|
||||||
virtual bool allowsSelection() { return w == Items; }
|
virtual bool allowsSelection() { return w == Items; }
|
||||||
virtual void ReverseSelection() { Items->ReverseSelection(); }
|
virtual void ReverseSelection() { Items->ReverseSelection(); }
|
||||||
|
|||||||
@@ -51,6 +51,8 @@ void PlaylistEditor::Init()
|
|||||||
Playlists->CenteredCursor(Config.centered_cursor);
|
Playlists->CenteredCursor(Config.centered_cursor);
|
||||||
Playlists->SetItemDisplayer(Display::Generic);
|
Playlists->SetItemDisplayer(Display::Generic);
|
||||||
|
|
||||||
|
static Display::ScreenFormat sf = { this, &Config.song_list_format };
|
||||||
|
|
||||||
Content = new Menu<MPD::Song>(RightColumnStartX, MainStartY, RightColumnWidth, MainHeight, "Playlist's content", Config.main_color, brNone);
|
Content = new Menu<MPD::Song>(RightColumnStartX, MainStartY, RightColumnWidth, MainHeight, "Playlist's content", Config.main_color, brNone);
|
||||||
Content->HighlightColor(Config.main_highlight_color);
|
Content->HighlightColor(Config.main_highlight_color);
|
||||||
Content->CyclicScrolling(Config.use_cyclic_scrolling);
|
Content->CyclicScrolling(Config.use_cyclic_scrolling);
|
||||||
@@ -58,7 +60,7 @@ void PlaylistEditor::Init()
|
|||||||
Content->SetSelectPrefix(&Config.selected_item_prefix);
|
Content->SetSelectPrefix(&Config.selected_item_prefix);
|
||||||
Content->SetSelectSuffix(&Config.selected_item_suffix);
|
Content->SetSelectSuffix(&Config.selected_item_suffix);
|
||||||
Content->SetItemDisplayer(Display::Songs);
|
Content->SetItemDisplayer(Display::Songs);
|
||||||
Content->SetItemDisplayerUserData(&Config.song_list_format);
|
Content->SetItemDisplayerUserData(&sf);
|
||||||
Content->SetGetStringFunction(Playlist::SongToString);
|
Content->SetGetStringFunction(Playlist::SongToString);
|
||||||
Content->SetGetStringFunctionUserData(&Config.song_list_format);
|
Content->SetGetStringFunctionUserData(&Config.song_list_format);
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ class PlaylistEditor : public Screen<Window>
|
|||||||
virtual bool isTabbable() { return true; }
|
virtual bool isTabbable() { return true; }
|
||||||
|
|
||||||
virtual MPD::Song *CurrentSong();
|
virtual MPD::Song *CurrentSong();
|
||||||
|
virtual MPD::Song *GetSong(size_t pos) { return w == Content ? &Content->at(pos) : 0; }
|
||||||
|
|
||||||
virtual bool allowsSelection() { return w == Content; }
|
virtual bool allowsSelection() { return w == Content; }
|
||||||
virtual void ReverseSelection() { Content->ReverseSelection(); }
|
virtual void ReverseSelection() { Content->ReverseSelection(); }
|
||||||
|
|||||||
@@ -96,6 +96,11 @@ class BasicScreen
|
|||||||
///
|
///
|
||||||
virtual MPD::Song *CurrentSong() { return 0; }
|
virtual MPD::Song *CurrentSong() { return 0; }
|
||||||
|
|
||||||
|
/// @return pointer to song at given position in the screen
|
||||||
|
/// (if screen is provides one) or null pointer otherwise.
|
||||||
|
///
|
||||||
|
virtual MPD::Song *GetSong(GNUC_UNUSED size_t pos) { return 0; }
|
||||||
|
|
||||||
/// @return true if the screen allows selecting items, false otherwise
|
/// @return true if the screen allows selecting items, false otherwise
|
||||||
///
|
///
|
||||||
virtual bool allowsSelection() = 0;
|
virtual bool allowsSelection() = 0;
|
||||||
|
|||||||
@@ -61,11 +61,14 @@ size_t SearchEngine::SearchButton = 14;
|
|||||||
|
|
||||||
void SearchEngine::Init()
|
void SearchEngine::Init()
|
||||||
{
|
{
|
||||||
|
static Display::ScreenFormat sf = { this, &Config.song_list_format };
|
||||||
|
|
||||||
w = new Menu< std::pair<Buffer *, MPD::Song *> >(0, MainStartY, COLS, MainHeight, "", Config.main_color, brNone);
|
w = new Menu< std::pair<Buffer *, MPD::Song *> >(0, MainStartY, COLS, MainHeight, "", Config.main_color, brNone);
|
||||||
w->HighlightColor(Config.main_highlight_color);
|
w->HighlightColor(Config.main_highlight_color);
|
||||||
w->CyclicScrolling(Config.use_cyclic_scrolling);
|
w->CyclicScrolling(Config.use_cyclic_scrolling);
|
||||||
w->CenteredCursor(Config.centered_cursor);
|
w->CenteredCursor(Config.centered_cursor);
|
||||||
w->SetItemDisplayer(Display::SearchEngine);
|
w->SetItemDisplayer(Display::SearchEngine);
|
||||||
|
w->SetItemDisplayerUserData(&sf);
|
||||||
w->SetSelectPrefix(&Config.selected_item_prefix);
|
w->SetSelectPrefix(&Config.selected_item_prefix);
|
||||||
w->SetSelectSuffix(&Config.selected_item_suffix);
|
w->SetSelectSuffix(&Config.selected_item_suffix);
|
||||||
w->SetGetStringFunction(SearchEngineOptionToString);
|
w->SetGetStringFunction(SearchEngineOptionToString);
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ class SearchEngine : public Screen< Menu< std::pair<Buffer *, MPD::Song *> > >
|
|||||||
virtual bool isTabbable() { return true; }
|
virtual bool isTabbable() { return true; }
|
||||||
|
|
||||||
virtual MPD::Song *CurrentSong();
|
virtual MPD::Song *CurrentSong();
|
||||||
|
virtual MPD::Song *GetSong(size_t pos) { return w->at(pos).second; }
|
||||||
|
|
||||||
virtual bool allowsSelection() { return w->Choice() >= StaticOptions; }
|
virtual bool allowsSelection() { return w->Choice() >= StaticOptions; }
|
||||||
virtual void ReverseSelection() { w->ReverseSelection(StaticOptions); }
|
virtual void ReverseSelection() { w->ReverseSelection(StaticOptions); }
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ class TagEditor : public Screen<Window>
|
|||||||
virtual bool isTabbable() { return true; }
|
virtual bool isTabbable() { return true; }
|
||||||
|
|
||||||
virtual MPD::Song *CurrentSong();
|
virtual MPD::Song *CurrentSong();
|
||||||
|
virtual MPD::Song *GetSong(size_t pos) { return w == Tags ? &Tags->at(pos) : 0; }
|
||||||
|
|
||||||
virtual bool allowsSelection() { return w == Tags; }
|
virtual bool allowsSelection() { return w == Tags; }
|
||||||
virtual void ReverseSelection() { Tags->ReverseSelection(); }
|
virtual void ReverseSelection() { Tags->ReverseSelection(); }
|
||||||
|
|||||||
Reference in New Issue
Block a user