new feature: cyclic scrolling

This commit is contained in:
Andrzej Rybczak
2009-03-30 20:03:23 +02:00
parent dda14b9796
commit 310b6c0ecd
12 changed files with 44 additions and 7 deletions

View File

@@ -142,6 +142,8 @@
#
#fancy_scrolling = "yes"
#
#cyclic_scrolling = "no"
#
#follow_now_playing_lyrics = "no"
#
#ncmpc_like_songs_adding = "no" (enabled - add/remove, disabled - always add)

View File

@@ -123,6 +123,9 @@ No need to describe it, huh?
.B fancy_scrolling = yes/no
If enabled, content of other columns will be updated immediately while scrolling, otherwise only after you stop scrolling.
.TP
.B cyclic_scrolling = yes/no
If enabled, cyclic scrolling is used (e.g. if you press down arrow being at the end of list, it'll take you to the beginning)
.TP
.B playlist_show_remaining_time = yes/no
If enabled, time remaining to end of playlist will be shown after playlist's statistics.
.TP

View File

@@ -54,6 +54,7 @@ void Browser::Init()
w = new Menu<Item>(0, MainStartY, COLS, MainHeight, Config.columns_in_browser ? Display::Columns(Config.song_columns_list_format) : "", Config.main_color, brNone);
w->HighlightColor(Config.main_highlight_color);
w->SetTimeout(ncmpcpp_window_timeout);
w->CyclicScrolling(Config.use_cyclic_scrolling);
w->SetSelectPrefix(&Config.selected_item_prefix);
w->SetSelectSuffix(&Config.selected_item_suffix);
w->SetItemDisplayer(Display::Items);

View File

@@ -52,17 +52,20 @@ void MediaLibrary::Init()
Artists = new Menu<string>(0, MainStartY, itsLeftColWidth, MainHeight, IntoStr(Config.media_lib_primary_tag) + "s", Config.main_color, brNone);
Artists->HighlightColor(Config.active_column_color);
Artists->SetTimeout(ncmpcpp_window_timeout);
Artists->CyclicScrolling(Config.use_cyclic_scrolling);
Artists->SetItemDisplayer(Display::Generic);
Albums = new Menu< std::pair<std::string, SearchConstraints> >(itsMiddleColStartX, MainStartY, itsMiddleColWidth, MainHeight, "Albums", Config.main_color, brNone);
Albums->HighlightColor(Config.main_highlight_color);
Albums->SetTimeout(ncmpcpp_window_timeout);
Albums->CyclicScrolling(Config.use_cyclic_scrolling);
Albums->SetItemDisplayer(Display::Pairs);
Albums->SetGetStringFunction(StringPairToString);
Songs = new Menu<Song>(itsRightColStartX, MainStartY, itsRightColWidth, MainHeight, "Songs", Config.main_color, brNone);
Songs->HighlightColor(Config.main_highlight_color);
Songs->SetTimeout(ncmpcpp_window_timeout);
Songs->CyclicScrolling(Config.use_cyclic_scrolling);
Songs->SetSelectPrefix(&Config.selected_item_prefix);
Songs->SetSelectSuffix(&Config.selected_item_suffix);
Songs->SetItemDisplayer(Display::Songs);

View File

@@ -148,7 +148,7 @@ namespace NCurses
void ShowFiltered() { itsOptionsPtr = &itsFilteredOptions; }
virtual void Refresh();
virtual void Scroll(Where);
virtual void Scroll(Where where);
virtual void Reset();
virtual void Clear(bool clrscr = 1);
@@ -166,6 +166,7 @@ namespace NCurses
void HighlightColor(Color col) { itsHighlightColor = col; }
void Highlighting(bool hl) { highlightEnabled = hl; }
void CyclicScrolling(bool cs) { useCyclicScrolling = cs; }
virtual bool Empty() const { return itsOptionsPtr->empty(); }
@@ -203,6 +204,7 @@ namespace NCurses
Color itsHighlightColor;
bool highlightEnabled;
bool useCyclicScrolling;
Buffer *itsSelectedPrefix;
Buffer *itsSelectedSuffix;
@@ -228,6 +230,7 @@ template <typename T> NCurses::Menu<T>::Menu(size_t startx,
itsHighlight(0),
itsHighlightColor(itsBaseColor),
highlightEnabled(1),
useCyclicScrolling(0),
itsSelectedPrefix(0),
itsSelectedSuffix(0)
{
@@ -432,10 +435,11 @@ template <typename T> void NCurses::Menu<T>::Scroll(Where where)
if (itsHighlight <= itsBeginning && itsHighlight > 0)
{
itsBeginning--;
//Window::Scroll(wUp);
}
if (itsHighlight == 0)
{
if (useCyclicScrolling)
return Scroll(wEnd);
break;
}
else
@@ -444,7 +448,7 @@ template <typename T> void NCurses::Menu<T>::Scroll(Where where)
}
if (!(*itsOptionsPtr)[itsHighlight] || (*itsOptionsPtr)[itsHighlight]->isStatic)
{
Scroll(itsHighlight == 0 ? wDown : wUp);
Scroll(itsHighlight == 0 && !useCyclicScrolling ? wDown : wUp);
}
break;
}
@@ -453,10 +457,11 @@ template <typename T> void NCurses::Menu<T>::Scroll(Where where)
if (itsHighlight >= MaxCurrentHighlight && itsHighlight < MaxHighlight)
{
itsBeginning++;
//Window::Scroll(wDown);
}
if (itsHighlight == MaxHighlight)
{
if (useCyclicScrolling)
return Scroll(wHome);
break;
}
else
@@ -465,12 +470,14 @@ template <typename T> void NCurses::Menu<T>::Scroll(Where where)
}
if (!(*itsOptionsPtr)[itsHighlight] || (*itsOptionsPtr)[itsHighlight]->isStatic)
{
Scroll(itsHighlight == MaxHighlight ? wUp : wDown);
Scroll(itsHighlight == MaxHighlight && !useCyclicScrolling ? wUp : wDown);
}
break;
}
case wPageUp:
{
if (useCyclicScrolling && itsHighlight == 0)
return Scroll(wEnd);
itsHighlight -= itsHeight;
itsBeginning -= itsHeight;
if (itsBeginning < 0)
@@ -481,12 +488,14 @@ template <typename T> void NCurses::Menu<T>::Scroll(Where where)
}
if (!(*itsOptionsPtr)[itsHighlight] || (*itsOptionsPtr)[itsHighlight]->isStatic)
{
Scroll(itsHighlight == 0 ? wDown: wUp);
Scroll(itsHighlight == 0 && !useCyclicScrolling ? wDown : wUp);
}
break;
}
case wPageDown:
{
if (useCyclicScrolling && itsHighlight == MaxHighlight)
return Scroll(wHome);
itsHighlight += itsHeight;
itsBeginning += itsHeight;
if (itsBeginning > MaxBeginning)
@@ -497,7 +506,7 @@ template <typename T> void NCurses::Menu<T>::Scroll(Where where)
}
if (!(*itsOptionsPtr)[itsHighlight] || (*itsOptionsPtr)[itsHighlight]->isStatic)
{
Scroll(itsHighlight == MaxHighlight ? wUp : wDown);
Scroll(itsHighlight == MaxHighlight && !useCyclicScrolling ? wUp : wDown);
}
break;
}

View File

@@ -1376,6 +1376,7 @@ int main(int argc, char *argv[])
Menu<string> mDialog((COLS-dialog_width)/2, (LINES-dialog_height)/2, dialog_width, dialog_height, "Add selected items to...", Config.main_color, Config.window_border);
mDialog.SetTimeout(ncmpcpp_window_timeout);
mDialog.CyclicScrolling(Config.use_cyclic_scrolling);
mDialog.SetItemDisplayer(Display::Generic);
bool playlists_not_active = myScreen == myBrowser && Config.local_browser;

View File

@@ -51,6 +51,7 @@ void Playlist::Init()
{
w = new Menu<MPD::Song>(0, MainStartY, COLS, MainHeight, Config.columns_in_playlist ? Display::Columns(Config.song_columns_list_format) : "", Config.main_color, brNone);
w->SetTimeout(ncmpcpp_window_timeout);
w->CyclicScrolling(Config.use_cyclic_scrolling);
w->HighlightColor(Config.main_highlight_color);
w->SetSelectPrefix(&Config.selected_item_prefix);
w->SetSelectSuffix(&Config.selected_item_suffix);
@@ -61,6 +62,7 @@ void Playlist::Init()
SortDialog = new Menu< std::pair<std::string, MPD::Song::GetFunction> >((COLS-SortDialogWidth)/2, (LINES-SortDialogHeight)/2, SortDialogWidth, SortDialogHeight, "Sort songs by...", Config.main_color, Config.window_border);
SortDialog->SetTimeout(ncmpcpp_window_timeout);
SortDialog->CyclicScrolling(Config.use_cyclic_scrolling);
SortDialog->SetItemDisplayer(Display::Pairs);
SortDialog->AddOption(std::make_pair("Artist", &MPD::Song::GetArtist));

View File

@@ -49,11 +49,13 @@ void PlaylistEditor::Init()
Playlists = new Menu<string>(0, MainStartY, LeftColumnWidth, MainHeight, "Playlists", Config.main_color, brNone);
Playlists->HighlightColor(Config.active_column_color);
Playlists->SetTimeout(ncmpcpp_window_timeout);
Playlists->CyclicScrolling(Config.use_cyclic_scrolling);
Playlists->SetItemDisplayer(Display::Generic);
Content = new Menu<Song>(RightColumnStartX, MainStartY, RightColumnWidth, MainHeight, "Playlist's content", Config.main_color, brNone);
Content->HighlightColor(Config.main_highlight_color);
Content->SetTimeout(ncmpcpp_window_timeout);
Content->CyclicScrolling(Config.use_cyclic_scrolling);
Content->SetSelectPrefix(&Config.selected_item_prefix);
Content->SetSelectSuffix(&Config.selected_item_suffix);
Content->SetItemDisplayer(Display::Songs);

View File

@@ -47,6 +47,7 @@ void SearchEngine::Init()
w = new Menu< std::pair<Buffer *, Song *> >(0, MainStartY, COLS, MainHeight, "", Config.main_color, brNone);
w->HighlightColor(Config.main_highlight_color);
w->SetTimeout(ncmpcpp_window_timeout);
w->CyclicScrolling(Config.use_cyclic_scrolling);
w->SetItemDisplayer(Display::SearchEngine);
w->SetSelectPrefix(&Config.selected_item_prefix);
w->SetSelectSuffix(&Config.selected_item_suffix);

View File

@@ -274,6 +274,7 @@ void DefaultConfiguration(ncmpcpp_config &conf)
conf.ignore_leading_the = false;
conf.block_search_constraints_change = true;
conf.use_console_editor = false;
conf.use_cyclic_scrolling = false;
conf.set_window_title = true;
conf.mpd_port = 6600;
conf.mpd_connection_timeout = 15;
@@ -574,6 +575,10 @@ void ReadConfiguration(ncmpcpp_config &conf)
{
conf.fancy_scrolling = v == "yes";
}
else if (cl.find("cyclic_scrolling") != string::npos)
{
conf.use_cyclic_scrolling = v == "yes";
}
else if (cl.find("playlist_show_remaining_time") != string::npos)
{
conf.playlist_show_remaining_time = v == "yes";

View File

@@ -165,6 +165,7 @@ struct ncmpcpp_config
bool ignore_leading_the;
bool block_search_constraints_change;
bool use_console_editor;
bool use_cyclic_scrolling;
int mpd_port;
int mpd_connection_timeout;

View File

@@ -50,6 +50,7 @@ void TinyTagEditor::Init()
w = new Menu<Buffer>(0, MainStartY, COLS, MainHeight, "", Config.main_color, brNone);
w->HighlightColor(Config.main_highlight_color);
w->SetTimeout(ncmpcpp_window_timeout);
w->CyclicScrolling(Config.use_cyclic_scrolling);
w->SetItemDisplayer(Display::Generic);
}
@@ -306,12 +307,14 @@ void TagEditor::Init()
Albums = new Menu<string_pair>(0, MainStartY, LeftColumnWidth, MainHeight, "Albums", Config.main_color, brNone);
Albums->HighlightColor(Config.active_column_color);
Albums->SetTimeout(ncmpcpp_window_timeout);
Albums->CyclicScrolling(Config.use_cyclic_scrolling);
Albums->SetItemDisplayer(Display::Pairs);
Albums->SetGetStringFunction(StringPairToString);
Dirs = new Menu<string_pair>(0, MainStartY, LeftColumnWidth, MainHeight, "Directories", Config.main_color, brNone);
Dirs->HighlightColor(Config.active_column_color);
Dirs->SetTimeout(ncmpcpp_window_timeout);
Dirs->CyclicScrolling(Config.use_cyclic_scrolling);
Dirs->SetItemDisplayer(Display::Pairs);
Dirs->SetGetStringFunction(StringPairToString);
@@ -320,11 +323,13 @@ void TagEditor::Init()
TagTypes = new Menu<string>(MiddleColumnStartX, MainStartY, MiddleColumnWidth, MainHeight, "Tag types", Config.main_color, brNone);
TagTypes->HighlightColor(Config.main_highlight_color);
TagTypes->SetTimeout(ncmpcpp_window_timeout);
TagTypes->CyclicScrolling(Config.use_cyclic_scrolling);
TagTypes->SetItemDisplayer(Display::Generic);
Tags = new Menu<Song>(RightColumnStartX, MainStartY, RightColumnWidth, MainHeight, "Tags", Config.main_color, brNone);
Tags->HighlightColor(Config.main_highlight_color);
Tags->SetTimeout(ncmpcpp_window_timeout);
Tags->CyclicScrolling(Config.use_cyclic_scrolling);
Tags->SetSelectPrefix(&Config.selected_item_prefix);
Tags->SetSelectSuffix(&Config.selected_item_suffix);
Tags->SetItemDisplayer(Display::Tags);
@@ -1165,6 +1170,7 @@ void TagEditor::DealWithFilenames(SongList &v)
Menu<string> *Main = new Menu<string>((COLS-width)/2, (LINES-height)/2, width, height, "", Config.main_color, Config.window_border);
Main->SetTimeout(ncmpcpp_window_timeout);
Main->CyclicScrolling(Config.use_cyclic_scrolling);
Main->SetItemDisplayer(Display::Generic);
Main->AddOption("Get tags from filename");
Main->AddOption("Rename files");
@@ -1225,6 +1231,7 @@ void TagEditor::DealWithFilenames(SongList &v)
Main = new Menu<string>((COLS-width)/2, (LINES-height)/2, one_width, height, "", Config.main_color, Config.active_window_border);
Main->SetTimeout(ncmpcpp_window_timeout);
Main->CyclicScrolling(Config.use_cyclic_scrolling);
Main->SetItemDisplayer(Display::Generic);
if (!Patterns.empty())