change naming conventions in NC namespace

This commit is contained in:
Andrzej Rybczak
2012-09-03 15:34:07 +02:00
parent 6f918091d9
commit af2cdca3d0
39 changed files with 1752 additions and 1898 deletions

View File

@@ -77,7 +77,7 @@ Action::Key Action::ReadKey(NC::Window &w)
int input;
while (true)
{
input = w.ReadKey();
input = w.readKey();
if (input == ERR)
return NoOp;
if (input > 255)
@@ -105,7 +105,7 @@ void Action::ValidateScreenSize()
if (COLS < 20 || MainHeight < 3)
{
NC::DestroyScreen();
NC::destroyScreen();
std::cout << "Screen is too small!\n";
exit(1);
}
@@ -188,11 +188,11 @@ void Action::ResizeScreen()
ApplyToVisibleWindows(&BasicScreen::Resize);
if (Config.header_visibility || Config.new_design)
wHeader->Resize(COLS, HeaderHeight);
wHeader->resize(COLS, HeaderHeight);
FooterStartY = LINES-(Config.statusbar_visibility ? 2 : 1);
wFooter->MoveTo(0, FooterStartY);
wFooter->Resize(COLS, Config.statusbar_visibility ? 2 : 1);
wFooter->moveTo(0, FooterStartY);
wFooter->resize(COLS, Config.statusbar_visibility ? 2 : 1);
ApplyToVisibleWindows(&BasicScreen::Refresh);
RedrawStatusbar = true;
@@ -215,7 +215,7 @@ void Action::ResizeScreen()
DesignChanged = 0;
ShowMessage("User interface: %s", Config.new_design ? "Alternative" : "Classic");
}
wFooter->Refresh();
wFooter->refresh();
refresh();
}
@@ -258,8 +258,8 @@ void Action::Seek()
int songpos = Mpd.GetElapsedTime();
time_t t = time(0);
int old_timeout = wFooter->GetTimeout();
wFooter->SetTimeout(500);
int old_timeout = wFooter->getTimeout();
wFooter->setTimeout(500);
SeekingInProgress = true;
while (true)
@@ -310,7 +310,7 @@ void Action::Seek()
tracklength += "/";
tracklength += MPD::Song::ShowTime(Mpd.GetTotalTime());
*wHeader << NC::XY(0, 0) << tracklength << " ";
wHeader->Refresh();
wHeader->refresh();
}
else
{
@@ -325,16 +325,16 @@ void Action::Seek()
tracklength += "/";
tracklength += MPD::Song::ShowTime(Mpd.GetTotalTime());
tracklength += "]";
*wFooter << NC::XY(wFooter->GetWidth()-tracklength.length(), 1) << tracklength;
*wFooter << NC::XY(wFooter->getWidth()-tracklength.length(), 1) << tracklength;
}
*wFooter << NC::fmtBoldEnd;
DrawProgressbar(songpos, Mpd.GetTotalTime());
wFooter->Refresh();
wFooter->refresh();
}
SeekingInProgress = false;
Mpd.Seek(songpos);
wFooter->SetTimeout(old_timeout);
wFooter->setTimeout(old_timeout);
UnlockProgressbar();
UnlockStatusbar();
@@ -349,7 +349,7 @@ void Action::FindItem(const FindDirection fd)
LockStatusbar();
Statusbar() << "Find " << (fd == fdForward ? "forward" : "backward") << ": ";
std::string findme = wFooter->GetString();
std::string findme = wFooter->getString();
UnlockStatusbar();
if (!findme.empty())
@@ -385,21 +385,21 @@ void Action::ListsChangeFinisher()
{
if (myScreen->ActiveWindow() == myLibrary->Tags)
{
myLibrary->Albums->Clear();
myLibrary->Songs->Clear();
myLibrary->Albums->clear();
myLibrary->Songs->clear();
}
else if (myScreen->ActiveWindow() == myLibrary->Albums)
{
myLibrary->Songs->Clear();
myLibrary->Songs->clear();
}
else if (myScreen->ActiveWindow() == myPlaylistEditor->Playlists)
{
myPlaylistEditor->Content->Clear();
myPlaylistEditor->Content->clear();
}
# ifdef HAVE_TAGLIB_H
else if (myScreen->ActiveWindow() == myTagEditor->LeftColumn)
{
myTagEditor->Tags->Clear();
myTagEditor->Tags->clear();
}
# endif // HAVE_TAGLIB_H
}
@@ -423,13 +423,13 @@ bool Action::AskYesNoQuestion(const std::string &question, void (*callback)())
LockStatusbar();
Statusbar() << question << " [" << NC::fmtBold << 'y' << NC::fmtBoldEnd << '/' << NC::fmtBold << 'n' << NC::fmtBoldEnd << "]";
wFooter->Refresh();
wFooter->refresh();
int answer = 0;
do
{
if (callback)
callback();
answer = wFooter->ReadKey();
answer = wFooter->readKey();
}
while (answer != 'y' && answer != 'n');
UnlockStatusbar();
@@ -648,13 +648,13 @@ void JumpToParentDir::Run()
{
if (myScreen == myBrowser && myBrowser->CurrentDir() != "/")
{
myBrowser->Main()->Reset();
myBrowser->Main()->reset();
myBrowser->EnterPressed();
}
# ifdef HAVE_TAGLIB_H
else if (myScreen->ActiveWindow() == myTagEditor->Dirs && myTagEditor->CurrentDir() != "/")
{
myTagEditor->Dirs->Reset();
myTagEditor->Dirs->reset();
myTagEditor->EnterPressed();
}
# endif // HAVE_TAGLIB_H
@@ -775,18 +775,18 @@ void Delete::Run()
using MPD::itSong;
using MPD::itPlaylist;
if (!myPlaylist->Items->Empty() && myScreen == myPlaylist)
if (!myPlaylist->Items->empty() && myScreen == myPlaylist)
{
if (myPlaylist->Items->hasSelected())
{
std::vector<size_t> list;
myPlaylist->Items->GetSelected(list);
myPlaylist->Items->getSelected(list);
Mpd.StartCommandsList();
for (std::vector<size_t>::reverse_iterator it = list.rbegin(); it != list.rend(); ++it)
Mpd.DeleteID((*myPlaylist->Items)[*it].value().getID());
if (Mpd.CommitCommandsList())
{
for (auto it = myPlaylist->Items->Begin(); it != myPlaylist->Items->End(); ++it)
for (auto it = myPlaylist->Items->begin(); it != myPlaylist->Items->end(); ++it)
it->setSelected(false);
ShowMessage("Selected items deleted");
}
@@ -795,15 +795,15 @@ void Delete::Run()
Mpd.DeleteID(myPlaylist->currentSong()->getID());
}
else if (
(myScreen == myBrowser && !myBrowser->Main()->Empty() && myBrowser->CurrentDir() == "/" && myBrowser->Main()->Current().value().type == itPlaylist)
(myScreen == myBrowser && !myBrowser->Main()->empty() && myBrowser->CurrentDir() == "/" && myBrowser->Main()->current().value().type == itPlaylist)
|| (myScreen->ActiveWindow() == myPlaylistEditor->Playlists)
)
{
std::string name;
if (myScreen == myBrowser)
name = myBrowser->Main()->Current().value().name;
name = myBrowser->Main()->current().value().name;
else
name = myPlaylistEditor->Playlists->Current().value();
name = myPlaylistEditor->Playlists->current().value();
bool yes = AskYesNoQuestion("Delete playlist \"" + Shorten(TO_WSTRING(name), COLS-28) + "\"?", TraceMpdStatus);
if (yes)
{
@@ -818,15 +818,15 @@ void Delete::Run()
else
ShowMessage("Aborted");
if (myPlaylistEditor->Main()) // check if initialized
myPlaylistEditor->Playlists->Clear(); // make playlists list update itself
myPlaylistEditor->Playlists->clear(); // make playlists list update itself
}
# ifndef WIN32
else if (myScreen == myBrowser && !myBrowser->Main()->Empty())
else if (myScreen == myBrowser && !myBrowser->Main()->empty())
{
if (!myBrowser->isLocal() && !isMPDMusicDirSet())
return;
MPD::Item &item = myBrowser->Main()->Current().value();
MPD::Item &item = myBrowser->Main()->current().value();
if (item.type == itSong && !Config.allow_physical_files_deletion)
{
@@ -857,15 +857,15 @@ void Delete::Run()
if (yes)
{
std::vector<size_t> list;
myBrowser->Main()->GetSelected(list);
myBrowser->Main()->getSelected(list);
if (list.empty())
list.push_back(myBrowser->Main()->Choice());
list.push_back(myBrowser->Main()->choice());
bool success = 1;
for (size_t i = 0; i < list.size(); ++i)
{
const MPD::Item &it = (*myBrowser->Main())[list[i]].value();
name = it.type == itSong ? it.song->getName() : it.name;
if (myBrowser->DeleteItem(it))
if (myBrowser->deleteItem(it))
{
const char msg[] = "\"%s\" deleted";
ShowMessage(msg, Shorten(TO_WSTRING(name), COLS-const_strlen(msg)).c_str());
@@ -891,27 +891,27 @@ void Delete::Run()
}
# endif // !WIN32
else if (myScreen->ActiveWindow() == myPlaylistEditor->Content && !myPlaylistEditor->Content->Empty())
else if (myScreen->ActiveWindow() == myPlaylistEditor->Content && !myPlaylistEditor->Content->empty())
{
if (myPlaylistEditor->Content->hasSelected())
{
std::vector<size_t> list;
myPlaylistEditor->Content->GetSelected(list);
std::string playlist = locale_to_utf_cpy(myPlaylistEditor->Playlists->Current().value());
myPlaylistEditor->Content->getSelected(list);
std::string playlist = locale_to_utf_cpy(myPlaylistEditor->Playlists->current().value());
ShowMessage("Deleting selected items...");
Mpd.StartCommandsList();
for (std::vector<size_t>::reverse_iterator it = list.rbegin(); it != list.rend(); ++it)
{
Mpd.Delete(playlist, *it);
myPlaylistEditor->Content->DeleteItem(*it);
myPlaylistEditor->Content->deleteItem(*it);
}
Mpd.CommitCommandsList();
ShowMessage("Selected items deleted from playlist \"%s\"", myPlaylistEditor->Playlists->Current().value().c_str());
ShowMessage("Selected items deleted from playlist \"%s\"", myPlaylistEditor->Playlists->current().value().c_str());
}
else
{
if (Mpd.Delete(myPlaylistEditor->Playlists->Current().value(), myPlaylistEditor->Content->Choice()))
myPlaylistEditor->Content->DeleteItem(myPlaylistEditor->Content->Choice());
if (Mpd.Delete(myPlaylistEditor->Playlists->current().value(), myPlaylistEditor->Content->choice()))
myPlaylistEditor->Content->deleteItem(myPlaylistEditor->Content->choice());
}
}
}
@@ -943,7 +943,7 @@ void SavePlaylist::Run()
LockStatusbar();
Statusbar() << "Save playlist as: ";
std::string playlist_name = wFooter->GetString();
std::string playlist_name = wFooter->getString();
std::string real_playlist_name = locale_to_utf_cpy(playlist_name);
UnlockStatusbar();
if (playlist_name.find("/") != std::string::npos)
@@ -956,7 +956,7 @@ void SavePlaylist::Run()
if (myPlaylist->Items->isFiltered())
{
Mpd.StartCommandsList();
for (size_t i = 0; i < myPlaylist->Items->Size(); ++i)
for (size_t i = 0; i < myPlaylist->Items->size(); ++i)
Mpd.AddToPlaylist(real_playlist_name, (*myPlaylist->Items)[i].value());
Mpd.CommitCommandsList();
if (Mpd.GetErrorMessage().empty())
@@ -969,7 +969,7 @@ void SavePlaylist::Run()
{
ShowMessage("Playlist saved as \"%s\"", playlist_name.c_str());
if (myPlaylistEditor->Main()) // check if initialized
myPlaylistEditor->Playlists->Clear(); // make playlist's list update itself
myPlaylistEditor->Playlists->clear(); // make playlist's list update itself
}
else if (result == MPD_SERVER_ERROR_EXIST)
{
@@ -983,7 +983,7 @@ void SavePlaylist::Run()
else
ShowMessage("Aborted");
if (myPlaylistEditor->Main()) // check if initialized
myPlaylistEditor->Playlists->Clear(); // make playlist's list update itself
myPlaylistEditor->Playlists->clear(); // make playlist's list update itself
if (myScreen == myPlaylist)
myPlaylist->EnableHighlighting();
}
@@ -992,7 +992,7 @@ void SavePlaylist::Run()
if (myBrowser->Main()
&& !myBrowser->isLocal()
&& myBrowser->CurrentDir() == "/"
&& !myBrowser->Main()->Empty())
&& !myBrowser->Main()->empty())
myBrowser->GetDirectory(myBrowser->CurrentDir());
}
@@ -1060,9 +1060,9 @@ void MoveSelectedItemsTo::Run()
ShowMessage("No selected items to move");
return;
}
size_t pos = myPlaylist->Items->Choice();
size_t pos = myPlaylist->Items->choice();
std::vector<size_t> list;
myPlaylist->Items->GetSelected(list);
myPlaylist->Items->getSelected(list);
if (pos >= list.front() && pos <= list.back()) // can't move to the middle of selected items
return;
++pos; // always move after currently highlighted item
@@ -1106,7 +1106,7 @@ void MoveSelectedItemsTo::Run()
bool Add::canBeRun() const
{
return myScreen != myPlaylistEditor
|| !myPlaylistEditor->Playlists->Empty();
|| !myPlaylistEditor->Playlists->empty();
}
void Add::Run()
@@ -1115,17 +1115,17 @@ void Add::Run()
LockStatusbar();
Statusbar() << (myScreen == myPlaylistEditor ? "Add to playlist: " : "Add: ");
std::string path = wFooter->GetString();
std::string path = wFooter->getString();
locale_to_utf(path);
UnlockStatusbar();
if (!path.empty())
{
Statusbar() << "Adding...";
wFooter->Refresh();
wFooter->refresh();
if (myScreen == myPlaylistEditor)
{
Mpd.AddToPlaylist(myPlaylistEditor->Playlists->Current().value(), path);
myPlaylistEditor->Content->Clear(); // make it refetch content of playlist
Mpd.AddToPlaylist(myPlaylistEditor->Playlists->current().value(), path);
myPlaylistEditor->Content->clear(); // make it refetch content of playlist
}
else
{
@@ -1181,26 +1181,26 @@ void ToggleDisplayMode::Run()
if (Config.columns_in_playlist)
{
myPlaylist->Items->setItemDisplayer(std::bind(Display::SongsInColumns, _1, *myPlaylist));
myPlaylist->Items->SetTitle(Config.titles_visibility ? Display::Columns(myPlaylist->Items->GetWidth()) : "");
myPlaylist->Items->setTitle(Config.titles_visibility ? Display::Columns(myPlaylist->Items->getWidth()) : "");
}
else
{
myPlaylist->Items->setItemDisplayer(std::bind(Display::Songs, _1, *myPlaylist, Config.song_list_format));
myPlaylist->Items->SetTitle("");
myPlaylist->Items->setTitle("");
}
}
else if (myScreen == myBrowser)
{
Config.columns_in_browser = !Config.columns_in_browser;
ShowMessage("Browser display mode: %s", Config.columns_in_browser ? "Columns" : "Classic");
myBrowser->Main()->SetTitle(Config.columns_in_browser && Config.titles_visibility ? Display::Columns(myBrowser->Main()->GetWidth()) : "");
myBrowser->Main()->setTitle(Config.columns_in_browser && Config.titles_visibility ? Display::Columns(myBrowser->Main()->getWidth()) : "");
}
else if (myScreen == mySearcher)
{
Config.columns_in_search_engine = !Config.columns_in_search_engine;
ShowMessage("Search engine display mode: %s", Config.columns_in_search_engine ? "Columns" : "Classic");
if (mySearcher->Main()->Size() > SearchEngine::StaticOptions)
mySearcher->Main()->SetTitle(Config.columns_in_search_engine && Config.titles_visibility ? Display::Columns(mySearcher->Main()->GetWidth()) : "");
if (mySearcher->Main()->size() > SearchEngine::StaticOptions)
mySearcher->Main()->setTitle(Config.columns_in_search_engine && Config.titles_visibility ? Display::Columns(mySearcher->Main()->getWidth()) : "");
}
else if (myScreen->ActiveWindow() == myPlaylistEditor->Content)
{
@@ -1258,7 +1258,7 @@ void ToggleAutoCenter::Run()
Config.autocenter_mode = !Config.autocenter_mode;
ShowMessage("Auto center mode: %s", Config.autocenter_mode ? "On" : "Off");
if (Config.autocenter_mode && myPlaylist->isPlaying() && !myPlaylist->Items->isFiltered())
myPlaylist->Items->Highlight(myPlaylist->NowPlaying);
myPlaylist->Items->highlight(myPlaylist->NowPlaying);
}
void UpdateDatabase::Run()
@@ -1288,7 +1288,7 @@ void JumpToPlayingSong::Run()
if (myPlaylist->isFiltered())
return;
assert(myPlaylist->isPlaying());
myPlaylist->Items->Highlight(myPlaylist->NowPlaying);
myPlaylist->Items->highlight(myPlaylist->NowPlaying);
}
else if (myScreen == myBrowser)
{
@@ -1329,10 +1329,10 @@ void StartSearching::Run()
{
if (mySearcher->Main()->at(0).isInactive())
return;
mySearcher->Main()->Highlight(SearchEngine::SearchButton);
mySearcher->Main()->Highlighting(0);
mySearcher->Main()->Refresh();
mySearcher->Main()->Highlighting(1);
mySearcher->Main()->highlight(SearchEngine::SearchButton);
mySearcher->Main()->setHighlighting(0);
mySearcher->Main()->refresh();
mySearcher->Main()->setHighlighting(1);
mySearcher->EnterPressed();
}
@@ -1351,12 +1351,12 @@ void SaveTagChanges::Run()
# ifdef HAVE_TAGLIB_H
if (myScreen == myTinyTagEditor)
{
myTinyTagEditor->Main()->Highlight(myTinyTagEditor->Main()->Size()-2); // Save
myTinyTagEditor->Main()->highlight(myTinyTagEditor->Main()->size()-2); // Save
myTinyTagEditor->EnterPressed();
}
else if (myScreen->ActiveWindow() == myTagEditor->TagTypes)
{
myTagEditor->TagTypes->Highlight(myTagEditor->TagTypes->Size()-1); // Save
myTagEditor->TagTypes->highlight(myTagEditor->TagTypes->size()-1); // Save
myTagEditor->EnterPressed();
}
# endif // HAVE_TAGLIB_H
@@ -1383,7 +1383,7 @@ void SetCrossfade::Run()
LockStatusbar();
Statusbar() << "Set crossfade to: ";
std::string crossfade = wFooter->GetString(3);
std::string crossfade = wFooter->getString(3);
UnlockStatusbar();
int cf = stringToInt(crossfade);
if (cf > 0)
@@ -1418,7 +1418,7 @@ bool EditLibraryTag::canBeRun() const
{
# ifdef HAVE_TAGLIB_H
return myScreen->ActiveWindow() == myLibrary->Tags
&& !myLibrary->Tags->Empty();
&& !myLibrary->Tags->empty();
# else
return false;
# endif // HAVE_TAGLIB_H
@@ -1433,13 +1433,13 @@ void EditLibraryTag::Run()
return;
LockStatusbar();
Statusbar() << NC::fmtBold << tagTypeToString(Config.media_lib_primary_tag) << NC::fmtBoldEnd << ": ";
std::string new_tag = wFooter->GetString(myLibrary->Tags->Current().value());
std::string new_tag = wFooter->getString(myLibrary->Tags->current().value());
UnlockStatusbar();
if (!new_tag.empty() && new_tag != myLibrary->Tags->Current().value())
if (!new_tag.empty() && new_tag != myLibrary->Tags->current().value())
{
ShowMessage("Updating tags...");
Mpd.StartSearch(1);
Mpd.AddSearch(Config.media_lib_primary_tag, locale_to_utf_cpy(myLibrary->Tags->Current().value()));
Mpd.AddSearch(Config.media_lib_primary_tag, locale_to_utf_cpy(myLibrary->Tags->current().value()));
MPD::MutableSong::SetFunction set = tagTypeToSetFunction(Config.media_lib_primary_tag);
assert(set);
bool success = true;
@@ -1471,7 +1471,7 @@ bool EditLibraryAlbum::canBeRun() const
{
# ifdef HAVE_TAGLIB_H
return myScreen->ActiveWindow() == myLibrary->Albums
&& !myLibrary->Albums->Empty();
&& !myLibrary->Albums->empty();
# else
return false;
# endif // HAVE_TAGLIB_H
@@ -1486,13 +1486,13 @@ void EditLibraryAlbum::Run()
return;
LockStatusbar();
Statusbar() << NC::fmtBold << "Album: " << NC::fmtBoldEnd;
std::string new_album = wFooter->GetString(myLibrary->Albums->Current().value().Album);
std::string new_album = wFooter->getString(myLibrary->Albums->current().value().Album);
UnlockStatusbar();
if (!new_album.empty() && new_album != myLibrary->Albums->Current().value().Album)
if (!new_album.empty() && new_album != myLibrary->Albums->current().value().Album)
{
bool success = 1;
ShowMessage("Updating tags...");
for (size_t i = 0; i < myLibrary->Songs->Size(); ++i)
for (size_t i = 0; i < myLibrary->Songs->size(); ++i)
{
ShowMessage("Updating tags in \"%s\"...", (*myLibrary->Songs)[i].value().getName().c_str());
std::string path = Config.mpd_music_dir + (*myLibrary->Songs)[i].value().getURI();
@@ -1515,7 +1515,7 @@ void EditLibraryAlbum::Run()
}
if (success)
{
Mpd.UpdateDirectory(getSharedDirectory(myLibrary->Songs->BeginV(), myLibrary->Songs->EndV()));
Mpd.UpdateDirectory(getSharedDirectory(myLibrary->Songs->beginV(), myLibrary->Songs->endV()));
ShowMessage("Tags updated successfully");
}
}
@@ -1525,12 +1525,12 @@ void EditLibraryAlbum::Run()
bool EditDirectoryName::canBeRun() const
{
return (myScreen == myBrowser
&& !myBrowser->Main()->Empty()
&& myBrowser->Main()->Current().value().type == MPD::itDirectory)
&& !myBrowser->Main()->empty()
&& myBrowser->Main()->current().value().type == MPD::itDirectory)
# ifdef HAVE_TAGLIB_H
|| (myScreen->ActiveWindow() == myTagEditor->Dirs
&& !myTagEditor->Dirs->Empty()
&& myTagEditor->Dirs->Choice() > 0)
&& !myTagEditor->Dirs->empty()
&& myTagEditor->Dirs->choice() > 0)
# endif // HAVE_TAGLIB_H
;
}
@@ -1543,10 +1543,10 @@ void EditDirectoryName::Run()
return;
if (myScreen == myBrowser)
{
std::string old_dir = myBrowser->Main()->Current().value().name;
std::string old_dir = myBrowser->Main()->current().value().name;
LockStatusbar();
Statusbar() << NC::fmtBold << "Directory: " << NC::fmtBoldEnd;
std::string new_dir = wFooter->GetString(old_dir);
std::string new_dir = wFooter->getString(old_dir);
UnlockStatusbar();
if (!new_dir.empty() && new_dir != old_dir)
{
@@ -1577,10 +1577,10 @@ void EditDirectoryName::Run()
# ifdef HAVE_TAGLIB_H
else if (myScreen->ActiveWindow() == myTagEditor->Dirs)
{
std::string old_dir = myTagEditor->Dirs->Current().value().first;
std::string old_dir = myTagEditor->Dirs->current().value().first;
LockStatusbar();
Statusbar() << NC::fmtBold << "Directory: " << NC::fmtBoldEnd;
std::string new_dir = wFooter->GetString(old_dir);
std::string new_dir = wFooter->getString(old_dir);
UnlockStatusbar();
if (!new_dir.empty() && new_dir != old_dir)
{
@@ -1605,10 +1605,10 @@ void EditDirectoryName::Run()
bool EditPlaylistName::canBeRun() const
{
return (myScreen->ActiveWindow() == myPlaylistEditor->Playlists
&& !myPlaylistEditor->Playlists->Empty())
&& !myPlaylistEditor->Playlists->empty())
|| (myScreen == myBrowser
&& !myBrowser->Main()->Empty()
&& myBrowser->Main()->Current().value().type == MPD::itPlaylist);
&& !myBrowser->Main()->empty()
&& myBrowser->Main()->current().value().type == MPD::itPlaylist);
}
void EditPlaylistName::Run()
@@ -1617,12 +1617,12 @@ void EditPlaylistName::Run()
std::string old_name;
if (myScreen->ActiveWindow() == myPlaylistEditor->Playlists)
old_name = myPlaylistEditor->Playlists->Current().value();
old_name = myPlaylistEditor->Playlists->current().value();
else
old_name = myBrowser->Main()->Current().value().name;
old_name = myBrowser->Main()->current().value().name;
LockStatusbar();
Statusbar() << NC::fmtBold << "Playlist: " << NC::fmtBoldEnd;
std::string new_name = wFooter->GetString(old_name);
std::string new_name = wFooter->getString(old_name);
UnlockStatusbar();
if (!new_name.empty() && new_name != old_name)
{
@@ -1633,7 +1633,7 @@ void EditPlaylistName::Run()
if (myBrowser->Main() && !myBrowser->isLocal())
myBrowser->GetDirectory("/");
if (myPlaylistEditor->Main())
myPlaylistEditor->Playlists->Clear();
myPlaylistEditor->Playlists->clear();
}
}
}
@@ -1675,12 +1675,12 @@ void JumpToMediaLibrary::Run()
bool JumpToPlaylistEditor::canBeRun() const
{
return myScreen == myBrowser
&& myBrowser->Main()->Current().value().type == MPD::itPlaylist;
&& myBrowser->Main()->current().value().type == MPD::itPlaylist;
}
void JumpToPlaylistEditor::Run()
{
myPlaylistEditor->Locate(myBrowser->Main()->Current().value().name);
myPlaylistEditor->Locate(myBrowser->Main()->current().value().name);
}
void ToggleScreenLock::Run()
@@ -1701,7 +1701,7 @@ void ToggleScreenLock::Run()
{
LockStatusbar();
Statusbar() << "% of the locked screen's width to be reserved (20-80): ";
std::string str_part = wFooter->GetString(intTo<std::string>::apply(Config.locked_screen_width_part*100));
std::string str_part = wFooter->getString(intTo<std::string>::apply(Config.locked_screen_width_part*100));
UnlockStatusbar();
if (str_part.empty())
return;
@@ -1760,7 +1760,7 @@ void JumpToPositionInSong::Run()
LockStatusbar();
Statusbar() << "Position to go (in %/mm:ss/seconds(s)): ";
std::string position = wFooter->GetString();
std::string position = wFooter->getString();
UnlockStatusbar();
if (position.empty())
@@ -1875,8 +1875,8 @@ void CropMainPlaylist::Run()
{
bool delete_all_but_current = !myPlaylist->Items->hasSelected();
Mpd.StartCommandsList();
int current = myPlaylist->Items->Choice();
for (int i = myPlaylist->Items->Size()-1; i >= 0; --i)
int current = myPlaylist->Items->choice();
for (int i = myPlaylist->Items->size()-1; i >= 0; --i)
{
bool delete_i = (delete_all_but_current && i != current)
|| (!delete_all_but_current && !myPlaylist->Items->at(i).isSelected());
@@ -1902,30 +1902,30 @@ bool CropPlaylist::canBeRun() const
void CropPlaylist::Run()
{
if (myPlaylistEditor->Playlists->Empty() || myPlaylistEditor->isContentFiltered())
if (myPlaylistEditor->Playlists->empty() || myPlaylistEditor->isContentFiltered())
return;
bool yes = true;
if (Config.ask_before_clearing_main_playlist)
yes = AskYesNoQuestion("Do you really want to crop playlist \"" + myPlaylistEditor->Playlists->Current().value() + "\"?", TraceMpdStatus);
yes = AskYesNoQuestion("Do you really want to crop playlist \"" + myPlaylistEditor->Playlists->current().value() + "\"?", TraceMpdStatus);
if (yes)
{
bool delete_all_but_current = !myPlaylistEditor->Content->hasSelected();
Mpd.StartCommandsList();
int current = myPlaylistEditor->Content->Choice();
std::string playlist = locale_to_utf_cpy(myPlaylistEditor->Playlists->Current().value());
for (int i = myPlaylistEditor->Content->Size()-1; i >= 0; --i)
int current = myPlaylistEditor->Content->choice();
std::string playlist = locale_to_utf_cpy(myPlaylistEditor->Playlists->current().value());
for (int i = myPlaylistEditor->Content->size()-1; i >= 0; --i)
{
bool delete_i = (delete_all_but_current && i != current)
|| (!delete_all_but_current && !myPlaylistEditor->Content->at(i).isSelected());
if (delete_i)
Mpd.Delete(playlist, i);
}
ShowMessage("Cropping playlist \"%s\"...", myPlaylistEditor->Playlists->Current().value().c_str());
ShowMessage("Cropping playlist \"%s\"...", myPlaylistEditor->Playlists->current().value().c_str());
if (Mpd.CommitCommandsList())
{
ShowMessage("Playlist \"%s\" cropped", myPlaylistEditor->Playlists->Current().value().c_str());
ShowMessage("Playlist \"%s\" cropped", myPlaylistEditor->Playlists->current().value().c_str());
// enforce content update
myPlaylistEditor->Content->Clear();
myPlaylistEditor->Content->clear();
}
}
}
@@ -1941,7 +1941,7 @@ void ClearMainPlaylist::Run()
{
ShowMessage("Deleting filtered items...");
Mpd.StartCommandsList();
for (int i = myPlaylist->Items->Size()-1; i >= 0; --i)
for (int i = myPlaylist->Items->size()-1; i >= 0; --i)
Mpd.Delete((*myPlaylist->Items)[i].value().getPosition());
if (Mpd.CommitCommandsList())
ShowMessage("Filtered items deleted");
@@ -1962,16 +1962,16 @@ bool ClearPlaylist::canBeRun() const
void ClearPlaylist::Run()
{
if (myPlaylistEditor->Playlists->Empty() || myPlaylistEditor->isContentFiltered())
if (myPlaylistEditor->Playlists->empty() || myPlaylistEditor->isContentFiltered())
return;
bool yes = true;
if (Config.ask_before_clearing_main_playlist)
yes = AskYesNoQuestion("Do you really want to clear playlist \"" + myPlaylistEditor->Playlists->Current().value() + "\"?", TraceMpdStatus);
yes = AskYesNoQuestion("Do you really want to clear playlist \"" + myPlaylistEditor->Playlists->current().value() + "\"?", TraceMpdStatus);
if (yes)
{
ShowMessage("Clearing playlist \"%s\"...", myPlaylistEditor->Playlists->Current().value().c_str());
if (Mpd.ClearPlaylist(locale_to_utf_cpy(myPlaylistEditor->Playlists->Current().value())))
ShowMessage("Playlist \"%s\" cleared", myPlaylistEditor->Playlists->Current().value().c_str());
ShowMessage("Clearing playlist \"%s\"...", myPlaylistEditor->Playlists->current().value().c_str());
if (Mpd.ClearPlaylist(locale_to_utf_cpy(myPlaylistEditor->Playlists->current().value())))
ShowMessage("Playlist \"%s\" cleared", myPlaylistEditor->Playlists->current().value().c_str());
}
}
@@ -2010,9 +2010,9 @@ void ApplyFilter::Run()
LockStatusbar();
Statusbar() << NC::fmtBold << "Apply filter: " << NC::fmtBoldEnd;
wFooter->SetGetStringHelper(std::bind(StatusbarApplyFilterImmediately, f, _1));
wFooter->GetString(f->currentFilter());
wFooter->SetGetStringHelper(StatusbarGetStringHelper);
wFooter->setGetStringHelper(std::bind(StatusbarApplyFilterImmediately, f, _1));
wFooter->getString(f->currentFilter());
wFooter->setGetStringHelper(StatusbargetStringHelper);
UnlockStatusbar();
std::string filter = f->currentFilter();
@@ -2038,8 +2038,8 @@ void DisableFilter::Run()
if (applyFilter && applyFilter->canBeRun())
{
// delete current filter
wFooter->PushChar(KEY_CTRL_U);
wFooter->PushChar(KEY_ENTER);
wFooter->pushChar(KEY_CTRL_U);
wFooter->pushChar(KEY_ENTER);
applyFilter->Execute();
}
}
@@ -2060,14 +2060,14 @@ void Find::Run()
LockStatusbar();
Statusbar() << "Find: ";
std::string findme = wFooter->GetString();
std::string findme = wFooter->getString();
UnlockStatusbar();
ShowMessage("Searching...");
Screen<NC::Scrollpad> *s = static_cast<Screen<NC::Scrollpad> *>(myScreen);
s->Main()->RemoveFormatting();
ShowMessage("%s", findme.empty() || s->Main()->SetFormatting(NC::fmtReverse, TO_WSTRING(findme), NC::fmtReverseEnd, 0) ? "Done!" : "No matching patterns found");
s->Main()->Flush();
s->Main()->removeFormatting();
ShowMessage("%s", findme.empty() || s->Main()->setFormatting(NC::fmtReverse, TO_WSTRING(findme), NC::fmtReverseEnd, 0) ? "Done!" : "No matching patterns found");
s->Main()->flush();
}
bool FindItemBackward::canBeRun() const
@@ -2136,12 +2136,12 @@ void ToggleReplayGainMode::Run()
LockStatusbar();
Statusbar() << "Replay gain mode? [" << NC::fmtBold << 'o' << NC::fmtBoldEnd << "ff/" << NC::fmtBold << 't' << NC::fmtBoldEnd << "rack/" << NC::fmtBold << 'a' << NC::fmtBoldEnd << "lbum]";
wFooter->Refresh();
wFooter->refresh();
int answer = 0;
do
{
TraceMpdStatus();
answer = wFooter->ReadKey();
answer = wFooter->readKey();
}
while (answer != 'o' && answer != 't' && answer != 'a');
UnlockStatusbar();
@@ -2180,12 +2180,12 @@ void AddRandomItems::Run()
LockStatusbar();
Statusbar() << "Add random? [" << NC::fmtBold << 's' << NC::fmtBoldEnd << "ongs/" << NC::fmtBold << 'a' << NC::fmtBoldEnd << "rtists/al" << NC::fmtBold << 'b' << NC::fmtBoldEnd << "ums] ";
wFooter->Refresh();
wFooter->refresh();
int answer = 0;
do
{
TraceMpdStatus();
answer = wFooter->ReadKey();
answer = wFooter->readKey();
}
while (answer != 's' && answer != 'a' && answer != 'b');
UnlockStatusbar();
@@ -2196,7 +2196,7 @@ void AddRandomItems::Run()
LockStatusbar();
Statusbar() << "Number of random " << tag_type_str << "s: ";
size_t number = stringToLongInt(wFooter->GetString());
size_t number = stringToLongInt(wFooter->getString());
UnlockStatusbar();
if (number && (answer == 's' ? Mpd.AddRandomSongs(number) : Mpd.AddRandomTag(tag_type, number)))
ShowMessage("%zu random %s%s added to playlist", number, tag_type_str.c_str(), number == 1 ? "" : "s");
@@ -2228,7 +2228,7 @@ void ToggleBrowserSortMode::Run()
ShowMessage("Sort songs by: Name");
break;
}
std::sort(myBrowser->Main()->BeginV()+(myBrowser->CurrentDir() != "/"), myBrowser->Main()->EndV(), CaseInsensitiveSorting());
std::sort(myBrowser->Main()->beginV()+(myBrowser->CurrentDir() != "/"), myBrowser->Main()->endV(), CaseInsensitiveSorting());
}
bool ToggleLibraryTagType::canBeRun() const
@@ -2243,12 +2243,12 @@ void ToggleLibraryTagType::Run()
LockStatusbar();
Statusbar() << "Tag type? [" << NC::fmtBold << 'a' << NC::fmtBoldEnd << "rtist/album" << NC::fmtBold << 'A' << NC::fmtBoldEnd << "rtist/" << NC::fmtBold << 'y' << NC::fmtBoldEnd << "ear/" << NC::fmtBold << 'g' << NC::fmtBoldEnd << "enre/" << NC::fmtBold << 'c' << NC::fmtBoldEnd << "omposer/" << NC::fmtBold << 'p' << NC::fmtBoldEnd << "erformer] ";
wFooter->Refresh();
wFooter->refresh();
int answer = 0;
do
{
TraceMpdStatus();
answer = wFooter->ReadKey();
answer = wFooter->readKey();
}
while (answer != 'a' && answer != 'A' && answer != 'y' && answer != 'g' && answer != 'c' && answer != 'p');
UnlockStatusbar();
@@ -2257,21 +2257,21 @@ void ToggleLibraryTagType::Run()
{
Config.media_lib_primary_tag = new_tagitem;
std::string item_type = tagTypeToString(Config.media_lib_primary_tag);
myLibrary->Tags->SetTitle(Config.titles_visibility ? item_type + "s" : "");
myLibrary->Tags->Reset();
myLibrary->Tags->setTitle(Config.titles_visibility ? item_type + "s" : "");
myLibrary->Tags->reset();
lowercase(item_type);
if (myLibrary->Columns() == 2)
{
myLibrary->Songs->Clear();
myLibrary->Albums->Reset();
myLibrary->Albums->Clear();
myLibrary->Albums->SetTitle(Config.titles_visibility ? "Albums (sorted by " + item_type + ")" : "");
myLibrary->Albums->Display();
myLibrary->Songs->clear();
myLibrary->Albums->reset();
myLibrary->Albums->clear();
myLibrary->Albums->setTitle(Config.titles_visibility ? "Albums (sorted by " + item_type + ")" : "");
myLibrary->Albums->display();
}
else
{
myLibrary->Tags->Clear();
myLibrary->Tags->Display();
myLibrary->Tags->clear();
myLibrary->Tags->display();
}
ShowMessage("Switched to list of %s tag", item_type.c_str());
}
@@ -2319,7 +2319,7 @@ void SetSelectedItemsPriority::Run()
using Global::wFooter;
assert(myScreen->ActiveWindow() == myPlaylist->Items);
if (myPlaylist->Items->Empty())
if (myPlaylist->Items->empty())
return;
if (Mpd.Version() < 17)
@@ -2330,7 +2330,7 @@ void SetSelectedItemsPriority::Run()
LockStatusbar();
Statusbar() << "Set priority [0-255]: ";
std::string strprio = wFooter->GetString();
std::string strprio = wFooter->getString();
UnlockStatusbar();
if (!isInteger(strprio.c_str()))
return;
@@ -2353,7 +2353,7 @@ bool ShowArtistInfo::canBeRun() const
#ifdef HAVE_CURL_CURL_H
return myScreen == myLastfm
|| (myScreen->ActiveWindow() == myLibrary->Tags
&& !myLibrary->Tags->Empty()
&& !myLibrary->Tags->empty()
&& Config.media_lib_primary_tag == MPD_TAG_ARTIST)
|| currentSong(myScreen);
# else
@@ -2373,9 +2373,9 @@ void ShowArtistInfo::Run()
std::string artist;
if (myScreen->ActiveWindow() == myLibrary->Tags)
{
assert(!myLibrary->Tags->Empty());
assert(!myLibrary->Tags->empty());
assert(Config.media_lib_primary_tag == MPD_TAG_ARTIST);
artist = myLibrary->Tags->Current().value();
artist = myLibrary->Tags->current().value();
}
else
{

View File

@@ -61,11 +61,11 @@ bool BrowserEntryMatcher(const Regex &rx, const MPD::Item &item, bool filter);
void Browser::Init()
{
w = new NC::Menu<MPD::Item>(0, MainStartY, COLS, MainHeight, Config.columns_in_browser && Config.titles_visibility ? Display::Columns(COLS) : "", Config.main_color, NC::brNone);
w->HighlightColor(Config.main_highlight_color);
w->CyclicScrolling(Config.use_cyclic_scrolling);
w->CenteredCursor(Config.centered_cursor);
w->SetSelectPrefix(Config.selected_item_prefix);
w->SetSelectSuffix(Config.selected_item_suffix);
w->setHighlightColor(Config.main_highlight_color);
w->cyclicScrolling(Config.use_cyclic_scrolling);
w->centeredCursor(Config.centered_cursor);
w->setSelectedPrefix(Config.selected_item_prefix);
w->setSelectedSuffix(Config.selected_item_suffix);
w->setItemDisplayer(Display::Items);
if (SupportedExtensions.empty())
@@ -78,9 +78,9 @@ void Browser::Resize()
{
size_t x_offset, width;
GetWindowResizeParams(x_offset, width);
w->Resize(width, MainHeight);
w->MoveTo(x_offset, MainStartY);
w->SetTitle(Config.columns_in_browser && Config.titles_visibility ? Display::Columns(w->GetWidth()) : "");
w->resize(width, MainHeight);
w->moveTo(x_offset, MainStartY);
w->setTitle(Config.columns_in_browser && Config.titles_visibility ? Display::Columns(w->getWidth()) : "");
hasToBeResized = 0;
}
@@ -108,7 +108,7 @@ void Browser::SwitchTo()
if (isLocal() && Config.browser_sort_mode == smMTime) // local browser doesn't support sorting by mtime
Config.browser_sort_mode = smName;
w->Empty() ? myBrowser->GetDirectory(itsBrowsedDir) : myBrowser->UpdateItemList();
w->empty() ? myBrowser->GetDirectory(itsBrowsedDir) : myBrowser->UpdateItemList();
if (myScreen != this && myScreen->isTabbable())
Global::myPrevScreen = myScreen;
@@ -125,10 +125,10 @@ std::basic_string<my_char_t> Browser::Title()
void Browser::EnterPressed()
{
if (w->Empty())
if (w->empty())
return;
const MPD::Item &item = w->Current().value();
const MPD::Item &item = w->current().value();
switch (item.type)
{
case itDirectory:
@@ -148,7 +148,7 @@ void Browser::EnterPressed()
}
case itSong:
{
size_t i = w->Choice();
size_t i = w->choice();
bool res = myPlaylist->Add(*item.song, w->at(i).isBold(), 1);
w->at(i).setBold(res);
break;
@@ -166,19 +166,19 @@ void Browser::EnterPressed()
void Browser::SpacePressed()
{
if (w->Empty())
if (w->empty())
return;
size_t i = itsBrowsedDir != "/" ? 1 : 0;
if (Config.space_selects && w->Choice() >= i)
if (Config.space_selects && w->choice() >= i)
{
i = w->Choice();
i = w->choice();
w->at(i).setSelected(!w->at(i).isSelected());
w->Scroll(NC::wDown);
w->scroll(NC::wDown);
return;
}
const MPD::Item &item = w->Current().value();
const MPD::Item &item = w->current().value();
if (isParentDirectory(item))
return;
@@ -209,7 +209,7 @@ void Browser::SpacePressed()
}
case itSong:
{
i = w->Choice();
i = w->choice();
bool res = myPlaylist->Add(*item.song, w->at(i).isBold(), 0);
w->at(i).setBold(res);
break;
@@ -221,40 +221,40 @@ void Browser::SpacePressed()
break;
}
}
w->Scroll(NC::wDown);
w->scroll(NC::wDown);
}
void Browser::MouseButtonPressed(MEVENT me)
{
if (w->Empty() || !w->hasCoords(me.x, me.y) || size_t(me.y) >= w->Size())
if (w->empty() || !w->hasCoords(me.x, me.y) || size_t(me.y) >= w->size())
return;
if (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED))
{
w->Goto(me.y);
switch (w->Current().value().type)
switch (w->current().value().type)
{
case itDirectory:
if (me.bstate & BUTTON1_PRESSED)
{
GetDirectory(w->Current().value().name);
GetDirectory(w->current().value().name);
RedrawHeader = true;
}
else
{
size_t pos = w->Choice();
size_t pos = w->choice();
SpacePressed();
if (pos < w->Size()-1)
w->Scroll(NC::wUp);
if (pos < w->size()-1)
w->scroll(NC::wUp);
}
break;
case itPlaylist:
case itSong:
if (me.bstate & BUTTON1_PRESSED)
{
size_t pos = w->Choice();
size_t pos = w->choice();
SpacePressed();
if (pos < w->Size()-1)
w->Scroll(NC::wUp);
if (pos < w->size()-1)
w->scroll(NC::wUp);
}
else
EnterPressed();
@@ -274,10 +274,10 @@ std::string Browser::currentFilter()
void Browser::applyFilter(const std::string &filter)
{
w->ShowAll();
w->showAll();
auto fun = std::bind(BrowserEntryMatcher, _1, _2, true);
auto rx = RegexFilter<MPD::Item>(filter, Config.regex_type, fun);
w->filter(w->Begin(), w->End(), rx);
w->filter(w->begin(), w->end(), rx);
}
/***********************************************************************/
@@ -286,24 +286,24 @@ bool Browser::search(const std::string &constraint)
{
auto fun = std::bind(BrowserEntryMatcher, _1, _2, false);
auto rx = RegexFilter<MPD::Item>(constraint, Config.regex_type, fun);
return w->search(w->Begin(), w->End(), rx);
return w->search(w->begin(), w->end(), rx);
}
void Browser::nextFound(bool wrap)
{
w->NextFound(wrap);
w->nextFound(wrap);
}
void Browser::prevFound(bool wrap)
{
w->PrevFound(wrap);
w->prevFound(wrap);
}
/***********************************************************************/
std::shared_ptr<ProxySongList> Browser::getProxySongList()
{
return mkProxySongList(*w, [](NC::Menu<MPD::Item>::Item &item) {
return mkProxySongList(*w, [](NC::Menu<MPD::Item>::Item &item) -> MPD::Song * {
MPD::Song *ptr = 0;
if (item.value().type == itSong)
ptr = item.value().song.get();
@@ -321,10 +321,10 @@ MPD::Song *Browser::getSong(size_t pos)
MPD::Song *Browser::currentSong()
{
if (w->Empty())
if (w->empty())
return 0;
else
return getSong(w->Choice());
return getSong(w->choice());
}
bool Browser::allowsSelection()
@@ -334,7 +334,7 @@ bool Browser::allowsSelection()
void Browser::reverseSelection()
{
reverseSelectionHelper(w->Begin()+(itsBrowsedDir == "/" ? 0 : 1), w->End());
reverseSelectionHelper(w->begin()+(itsBrowsedDir == "/" ? 0 : 1), w->end());
}
MPD::SongList Browser::getSelectedSongs()
@@ -366,12 +366,12 @@ MPD::SongList Browser::getSelectedSongs()
result.insert(result.end(), list.begin(), list.end());
}
};
for (auto it = w->Begin(); it != w->End(); ++it)
for (auto it = w->begin(); it != w->end(); ++it)
if (it->isSelected())
item_handler(it->value());
// if no item is selected, add current one
if (result.empty() && !w->Empty())
item_handler(w->Current().value());
if (result.empty() && !w->empty())
item_handler(w->current().value());
return result;
}
@@ -387,11 +387,11 @@ void Browser::LocateSong(const MPD::Song &s)
if (itsBrowsedDir != s.getDirectory())
GetDirectory(s.getDirectory());
for (size_t i = 0; i < w->Size(); ++i)
for (size_t i = 0; i < w->size(); ++i)
{
if ((*w)[i].value().type == itSong && s.getHash() == (*w)[i].value().song->getHash())
{
w->Highlight(i);
w->highlight(i);
break;
}
}
@@ -405,19 +405,19 @@ void Browser::GetDirectory(std::string dir, std::string subdir)
int highlightme = -1;
itsScrollBeginning = 0;
if (itsBrowsedDir != dir)
w->Reset();
w->reset();
itsBrowsedDir = dir;
locale_to_utf(dir);
w->Clear();
w->clear();
if (dir != "/")
{
MPD::Item parent;
parent.name = "..";
parent.type = itDirectory;
w->AddItem(parent);
w->addItem(parent);
}
MPD::ItemList list;
@@ -439,21 +439,21 @@ void Browser::GetDirectory(std::string dir, std::string subdir)
case itPlaylist:
{
utf_to_locale(it->name);
w->AddItem(*it);
w->addItem(*it);
break;
}
case itDirectory:
{
utf_to_locale(it->name);
if (it->name == subdir)
highlightme = w->Size();
w->AddItem(*it);
highlightme = w->size();
w->addItem(*it);
break;
}
case itSong:
{
bool bold = 0;
for (size_t i = 0; i < myPlaylist->Items->Size(); ++i)
for (size_t i = 0; i < myPlaylist->Items->size(); ++i)
{
if (myPlaylist->Items->at(i).value().getHash() == it->song->getHash())
{
@@ -461,13 +461,13 @@ void Browser::GetDirectory(std::string dir, std::string subdir)
break;
}
}
w->AddItem(*it, bold);
w->addItem(*it, bold);
break;
}
}
}
if (highlightme >= 0)
w->Highlight(highlightme);
w->highlight(highlightme);
}
#ifndef WIN32
@@ -579,12 +579,12 @@ void Browser::ChangeBrowseMode()
itsBrowsedDir = itsBrowseLocally ? Config.GetHomeDirectory() : "/";
if (itsBrowseLocally && *itsBrowsedDir.rbegin() == '/')
itsBrowsedDir.resize(itsBrowsedDir.length()-1);
w->Reset();
w->reset();
GetDirectory(itsBrowsedDir);
RedrawHeader = true;
}
bool Browser::DeleteItem(const MPD::Item &item)
bool Browser::deleteItem(const MPD::Item &item)
{
// parent dir
if (item.type == itDirectory && item.name == "..")
@@ -608,10 +608,10 @@ bool Browser::DeleteItem(const MPD::Item &item)
void Browser::UpdateItemList()
{
for (size_t i = 0; i < w->Size(); ++i)
for (size_t i = 0; i < w->size(); ++i)
if ((*w)[i].value().type == itSong)
w->at(i).setBold(myPlaylist->checkForSong(*(*w)[i].value().song));
w->Refresh();
w->refresh();
}
namespace {//
@@ -642,7 +642,7 @@ std::string ItemToString(const MPD::Item &item)
result = item.song->toString(Config.song_list_format_dollar_free);
break;
case MPD::itPlaylist:
result = Config.browser_playlist_prefix.Str() + getBasename(item.name);
result = Config.browser_playlist_prefix.str() + getBasename(item.name);
break;
}
return result;

View File

@@ -69,7 +69,7 @@ class Browser : public Screen< NC::Menu<MPD::Item> >, public Filterable, public
void GetLocalDirectory(MPD::ItemList &, const std::string & = "", bool = 0) const;
void ClearDirectory(const std::string &) const;
void ChangeBrowseMode();
bool DeleteItem(const MPD::Item &);
bool deleteItem(const MPD::Item &);
# endif // !WIN32
void UpdateItemList();

View File

@@ -65,12 +65,12 @@ void Clock::Resize()
GetWindowResizeParams(x_offset, width);
// used for clearing area out of clock window while resizing terminal
itsPane->Resize(width, MainHeight);
itsPane->MoveTo(x_offset, MainStartY);
itsPane->Refresh();
itsPane->resize(width, MainHeight);
itsPane->moveTo(x_offset, MainStartY);
itsPane->refresh();
if (Width <= width && Height <= MainHeight)
w->MoveTo(x_offset+(width-Width)/2, MainStartY+(MainHeight-Height)/2);
w->moveTo(x_offset+(width-Width)/2, MainStartY+(MainHeight-Height)/2);
}
void Clock::SwitchTo()
@@ -104,10 +104,10 @@ void Clock::SwitchTo()
myScreen = this;
Global::RedrawHeader = true;
Prepare();
itsPane->Refresh();
itsPane->refresh();
// clearing screen apparently fixes the problem with last digits being misrendered
w->Clear();
w->Display();
w->clear();
w->display();
}
std::basic_string<my_char_t> Clock::Title()
@@ -117,7 +117,7 @@ std::basic_string<my_char_t> Clock::Title()
void Clock::Update()
{
if (Width > itsPane->GetWidth() || Height > MainHeight)
if (Width > itsPane->getWidth() || Height > MainHeight)
{
using Global::myLockedScreen;
using Global::myInactiveScreen;
@@ -150,7 +150,7 @@ void Clock::Update()
char buf[64];
strftime(buf, 64, "%x", time);
attron(COLOR_PAIR(Config.main_color));
mvprintw(w->GetStartY()+w->GetHeight(), w->GetStartX()+(w->GetWidth()-strlen(buf))/2, "%s", buf);
mvprintw(w->getStarty()+w->getHeight(), w->getStartX()+(w->getWidth()-strlen(buf))/2, "%s", buf);
attroff(COLOR_PAIR(Config.main_color));
refresh();
@@ -173,7 +173,7 @@ void Clock::Update()
{
if (!(a & (t << 1)))
{
w->GotoXY(2*j+2, i);
w->goToXY(2*j+2, i);
}
if (Config.clock_display_seconds || j < 18)
*w << " ";
@@ -187,7 +187,7 @@ void Clock::Update()
}
}
}
w->Refresh();
w->refresh();
}
void Clock::Prepare()

View File

@@ -81,17 +81,17 @@ void setProperties(NC::Menu<T> &menu, const MPD::Song &s, HasSongs &screen, bool
{
auto pl = screen.getProxySongList();
assert(pl);
auto next = pl->getSong(menu.DrawnPosition()+1);
auto next = pl->getSong(menu.drawnPosition()+1);
if (next && next->getAlbum() != s.getAlbum())
separate_albums = true;
}
if (separate_albums)
menu << NC::fmtUnderline;
int song_pos = menu.isFiltered() ? s.getPosition() : menu.DrawnPosition();
int song_pos = menu.isFiltered() ? s.getPosition() : menu.drawnPosition();
is_now_playing = static_cast<void *>(&menu) == myPlaylist->Items
&& 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;
}
@@ -122,10 +122,10 @@ void showSongs(NC::Menu<T> &menu, const MPD::Song &s, HasSongs &screen, const st
buf << U(" ");
String2Buffer(TO_WSTRING(line.substr(it-line.begin()+1)), buf);
if (discard_colors)
buf.RemoveFormatting();
buf.removeFormatting();
if (is_now_playing)
buf << Config.now_playing_suffix;
menu << NC::XY(menu.GetWidth()-buf.Str().length()-(is_selected ? Config.selected_item_suffix_length : 0), menu.Y()) << buf;
menu << NC::XY(menu.getWidth()-buf.str().length()-(is_selected ? Config.selected_item_suffix_length : 0), menu.y()) << buf;
if (separate_albums)
menu << NC::fmtUnderlineEnd;
return;
@@ -162,19 +162,19 @@ void showSongsInColumns(NC::Menu<T> &menu, const MPD::Song &s, HasSongs &screen)
menu << Config.now_playing_prefix;
int width;
int y = menu.Y();
int remained_width = menu.GetWidth();
int y = menu.y();
int remained_width = menu.getWidth();
std::vector<Column>::const_iterator it, last = Config.columns.end() - 1;
for (it = Config.columns.begin(); it != Config.columns.end(); ++it)
{
// check current X coordinate
int x = menu.X();
int x = menu.x();
// column has relative width and all after it have fixed width,
// so stretch it so it fills whole screen along with these after.
if (it->stretch_limit >= 0) // (*)
width = remained_width - it->stretch_limit;
else
width = it->fixed ? it->width : it->width * menu.GetWidth() * 0.01;
width = it->fixed ? it->width : it->width * menu.getWidth() * 0.01;
// columns with relative width may shrink to 0, omit them
if (width == 0)
continue;
@@ -199,7 +199,7 @@ void showSongsInColumns(NC::Menu<T> &menu, const MPD::Song &s, HasSongs &screen)
if (width-offset < 0)
{
remained_width -= width + 1;
menu.GotoXY(width, y);
menu.goToXY(width, y);
menu << ' ';
continue;
}
@@ -221,7 +221,7 @@ void showSongsInColumns(NC::Menu<T> &menu, const MPD::Song &s, HasSongs &screen)
}
if (tag.empty() && it->display_empty_tag)
tag = TO_WSTRING(Config.empty_tag);
NC::Window::Cut(tag, width);
NC::Window::cut(tag, width);
if (!discard_colors && it->color != NC::clDefault)
menu << it->color;
@@ -230,12 +230,12 @@ void showSongsInColumns(NC::Menu<T> &menu, const MPD::Song &s, HasSongs &screen)
// if column uses right alignment, calculate proper offset.
// otherwise just assume offset is 0, ie. we start from the left.
if (it->right_alignment)
x_off = std::max(0, width - int(NC::Window::Length(tag)));
x_off = std::max(0, width - int(NC::Window::length(tag)));
whline(menu.Raw(), KEY_SPACE, width);
menu.GotoXY(x + x_off, y);
whline(menu.raw(), KEY_SPACE, width);
menu.goToXY(x + x_off, y);
menu << tag;
menu.GotoXY(x + width, y);
menu.goToXY(x + width, y);
if (it != last)
{
// add missing width's part and restore the value.
@@ -253,14 +253,14 @@ void showSongsInColumns(NC::Menu<T> &menu, const MPD::Song &s, HasSongs &screen)
// returns there).
if (is_now_playing)
{
int np_x = menu.GetWidth() - Config.now_playing_suffix_length;
int np_x = menu.getWidth() - Config.now_playing_suffix_length;
if (is_selected)
np_x -= Config.selected_item_suffix_length;
menu.GotoXY(np_x, y);
menu.goToXY(np_x, y);
menu << Config.now_playing_suffix;
}
if (is_selected)
menu.GotoXY(menu.GetWidth() - Config.selected_item_suffix_length, y);
menu.goToXY(menu.getWidth() - Config.selected_item_suffix_length, y);
if (separate_albums)
menu << NC::fmtUnderlineEnd;
@@ -310,9 +310,9 @@ std::string Display::Columns(size_t list_width)
}
else
name = it->name;
NC::Window::Cut(name, width);
NC::Window::cut(name, width);
int x_off = std::max(0, width - int(NC::Window::Length(name)));
int x_off = std::max(0, width - int(NC::Window::length(name)));
if (it->right_alignment)
{
result += std::string(x_off, KEY_SPACE);
@@ -337,18 +337,18 @@ std::string Display::Columns(size_t list_width)
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)
{
showSongs(menu, menu.Drawn().value(), screen, format);
showSongs(menu, menu.drawn().value(), screen, format);
}
void Display::Tags(NC::Menu<MPD::MutableSong> &menu)
{
const MPD::MutableSong &s = menu.Drawn().value();
size_t i = myTagEditor->TagTypes->Choice();
const MPD::MutableSong &s = menu.drawn().value();
size_t i = myTagEditor->TagTypes->choice();
if (i < 11)
{
ShowTag(menu, s.getTags(SongInfo::Tags[i].Get));
@@ -364,12 +364,12 @@ void Display::Tags(NC::Menu<MPD::MutableSong> &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)
{
const MPD::Item &item = menu.Drawn().value();
const MPD::Item &item = menu.drawn().value();
switch (item.type)
{
case MPD::itDirectory:
@@ -389,7 +389,7 @@ void Display::Items(NC::Menu<MPD::Item> &menu)
void Display::SearchEngine(NC::Menu<SEItem> &menu)
{
const SEItem &si = menu.Drawn().value();
const SEItem &si = menu.drawn().value();
if (si.isSong())
{
if (!Config.columns_in_search_engine)

View File

@@ -32,12 +32,12 @@ namespace Display
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)
{
menu << menu.Drawn().value().first;
menu << menu.drawn().value().first;
}
void SongsInColumns(NC::Menu<MPD::Song> &menu, HasSongs &screen);

View File

@@ -96,7 +96,7 @@ void Help::Init()
{
w = new NC::Scrollpad(0, MainStartY, COLS, MainHeight, "", Config.main_color, NC::brNone);
GetKeybindings();
w->Flush();
w->flush();
isInitialized = 1;
}
@@ -104,8 +104,8 @@ void Help::Resize()
{
size_t x_offset, width;
GetWindowResizeParams(x_offset, width);
w->Resize(width, MainHeight);
w->MoveTo(x_offset, MainStartY);
w->resize(width, MainHeight);
w->moveTo(x_offset, MainStartY);
hasToBeResized = 0;
}

View File

@@ -284,9 +284,9 @@ std::string Timestamp(time_t t)
void UpdateSongList(NC::Menu<MPD::Song> *menu)
{
for (auto it = menu->Begin(); it != menu->End(); ++it)
for (auto it = menu->begin(); it != menu->end(); ++it)
it->setSelected(myPlaylist->checkForSong(it->value()));
menu->Refresh();
menu->refresh();
}
std::basic_string<my_char_t> Scroller(const std::basic_string<my_char_t> &str, size_t &pos, size_t width)
@@ -295,7 +295,7 @@ std::basic_string<my_char_t> Scroller(const std::basic_string<my_char_t> &str, s
if (!Config.header_text_scrolling)
return s;
std::basic_string<my_char_t> result;
size_t len = NC::Window::Length(s);
size_t len = NC::Window::length(s);
if (len > width)
{

View File

@@ -72,10 +72,10 @@ template <typename Iterator> std::string getSharedDirectory(Iterator first, Iter
template <typename T> void withUnfilteredMenu(NC::Menu<T> &menu, std::function<void()> action)
{
bool is_filtered = menu.isFiltered();
menu.ShowAll();
menu.showAll();
action();
if (is_filtered)
menu.ShowFiltered();
menu.showFiltered();
}
void ParseArgv(int, char **);

View File

@@ -53,8 +53,8 @@ void Lastfm::Resize()
{
size_t x_offset, width;
GetWindowResizeParams(x_offset, width);
w->Resize(width, MainHeight);
w->MoveTo(x_offset, MainStartY);
w->resize(width, MainHeight);
w->moveTo(x_offset, MainStartY);
hasToBeResized = 0;
}
@@ -73,8 +73,8 @@ void Lastfm::Take()
{
assert(isReadyToTake);
pthread_join(itsDownloader, 0);
w->Flush();
w->Refresh();
w->flush();
w->refresh();
isDownloadInProgress = 0;
isReadyToTake = 0;
}
@@ -119,8 +119,8 @@ void Lastfm::Load()
SetTitleAndFolder();
w->Clear();
w->Reset();
w->clear();
w->reset();
std::string artist = itsArgs.find("artist")->second;
locale_to_utf(artist);
@@ -159,7 +159,7 @@ void Lastfm::Load()
pthread_create(&itsDownloader, 0, DownloadWrapper, this);
isDownloadInProgress = 1;
}
w->Flush();
w->flush();
}
void Lastfm::SetTitleAndFolder()
@@ -185,7 +185,7 @@ void Lastfm::Download()
if (result.first)
{
Save(result.second);
w->Clear();
w->clear();
utf_to_locale(result.second);
*w << result.second;
itsService->colorizeOutput(*w);

View File

@@ -104,10 +104,10 @@ bool ArtistInfo::checkArgs(const Args &args)
void ArtistInfo::colorizeOutput(NC::Scrollpad &w)
{
w.SetFormatting(NC::fmtBold, U("\n\nSimilar artists:\n"), NC::fmtBoldEnd, false);
w.SetFormatting(Config.color2, U("\n * "), NC::clEnd, true);
// below is used so format won't be removed using RemoveFormatting() by accident.
w.ForgetFormatting();
w.setFormatting(NC::fmtBold, U("\n\nSimilar artists:\n"), NC::fmtBoldEnd, false);
w.setFormatting(Config.color2, U("\n * "), NC::clEnd, true);
// below is used so format won't be removed using removeFormatting() by accident.
w.forgetFormatting();
}
bool ArtistInfo::parse(std::string &data)

View File

@@ -58,8 +58,8 @@ void Lyrics::Resize()
{
size_t x_offset, width;
GetWindowResizeParams(x_offset, width);
w->Resize(width, MainHeight);
w->MoveTo(x_offset, MainStartY);
w->resize(width, MainHeight);
w->moveTo(x_offset, MainStartY);
hasToBeResized = 0;
}
@@ -71,8 +71,8 @@ void Lyrics::Update()
if (isDownloadInProgress)
{
w->Flush();
w->Refresh();
w->flush();
w->refresh();
}
# endif // HAVE_CURL_CURL_H
if (ReloadNP)
@@ -268,7 +268,7 @@ void *Lyrics::Download()
Save(itsFilename, result.second);
utf_to_locale(result.second);
w->Clear();
w->clear();
*w << result.second;
}
else
@@ -331,8 +331,8 @@ void Lyrics::Load()
CreateDir(Config.lyrics_directory);
w->Clear();
w->Reset();
w->clear();
w->reset();
std::ifstream input(itsFilename.c_str());
if (input.is_open())
@@ -347,9 +347,9 @@ void Lyrics::Load()
*w << line;
first = 0;
}
w->Flush();
w->flush();
if (ReloadNP)
w->Refresh();
w->refresh();
}
else
{
@@ -358,7 +358,7 @@ void Lyrics::Load()
isDownloadInProgress = 1;
# else
*w << U("Local lyrics not found. As ncmpcpp has been compiled without curl support, you can put appropriate lyrics into ") << TO_WSTRING(Config.lyrics_directory) << U(" directory (file syntax is \"$ARTIST - $TITLE.txt\") or recompile ncmpcpp with curl support.");
w->Flush();
w->flush();
# endif
}
}
@@ -428,8 +428,8 @@ void Lyrics::Take()
{
assert(isReadyToTake);
pthread_join(itsDownloader, 0);
w->Flush();
w->Refresh();
w->flush();
w->refresh();
isDownloadInProgress = 0;
isReadyToTake = 0;
}

View File

@@ -86,27 +86,27 @@ void MediaLibrary::Init()
itsRightColStartX = itsLeftColWidth+itsMiddleColWidth+2;
Tags = new NC::Menu<std::string>(0, MainStartY, itsLeftColWidth, MainHeight, Config.titles_visibility ? tagTypeToString(Config.media_lib_primary_tag) + "s" : "", Config.main_color, NC::brNone);
Tags->HighlightColor(Config.active_column_color);
Tags->CyclicScrolling(Config.use_cyclic_scrolling);
Tags->CenteredCursor(Config.centered_cursor);
Tags->SetSelectPrefix(Config.selected_item_prefix);
Tags->SetSelectSuffix(Config.selected_item_suffix);
Tags->setHighlightColor(Config.active_column_color);
Tags->cyclicScrolling(Config.use_cyclic_scrolling);
Tags->centeredCursor(Config.centered_cursor);
Tags->setSelectedPrefix(Config.selected_item_prefix);
Tags->setSelectedSuffix(Config.selected_item_suffix);
Tags->setItemDisplayer(DisplayPrimaryTags);
Albums = new NC::Menu<SearchConstraints>(itsMiddleColStartX, MainStartY, itsMiddleColWidth, MainHeight, Config.titles_visibility ? "Albums" : "", Config.main_color, NC::brNone);
Albums->HighlightColor(Config.main_highlight_color);
Albums->CyclicScrolling(Config.use_cyclic_scrolling);
Albums->CenteredCursor(Config.centered_cursor);
Albums->SetSelectPrefix(Config.selected_item_prefix);
Albums->SetSelectSuffix(Config.selected_item_suffix);
Albums->setHighlightColor(Config.main_highlight_color);
Albums->cyclicScrolling(Config.use_cyclic_scrolling);
Albums->centeredCursor(Config.centered_cursor);
Albums->setSelectedPrefix(Config.selected_item_prefix);
Albums->setSelectedSuffix(Config.selected_item_suffix);
Albums->setItemDisplayer(DisplayAlbums);
Songs = new NC::Menu<MPD::Song>(itsRightColStartX, MainStartY, itsRightColWidth, MainHeight, Config.titles_visibility ? "Songs" : "", Config.main_color, NC::brNone);
Songs->HighlightColor(Config.main_highlight_color);
Songs->CyclicScrolling(Config.use_cyclic_scrolling);
Songs->CenteredCursor(Config.centered_cursor);
Songs->SetSelectPrefix(Config.selected_item_prefix);
Songs->SetSelectSuffix(Config.selected_item_suffix);
Songs->setHighlightColor(Config.main_highlight_color);
Songs->cyclicScrolling(Config.use_cyclic_scrolling);
Songs->centeredCursor(Config.centered_cursor);
Songs->setSelectedPrefix(Config.selected_item_prefix);
Songs->setSelectedSuffix(Config.selected_item_suffix);
Songs->setItemDisplayer(std::bind(Display::Songs, _1, *this, Config.song_library_format));
w = Tags;
@@ -134,28 +134,28 @@ void MediaLibrary::Resize()
itsRightColWidth = width-itsMiddleColWidth-1;
}
Tags->Resize(itsLeftColWidth, MainHeight);
Albums->Resize(itsMiddleColWidth, MainHeight);
Songs->Resize(itsRightColWidth, MainHeight);
Tags->resize(itsLeftColWidth, MainHeight);
Albums->resize(itsMiddleColWidth, MainHeight);
Songs->resize(itsRightColWidth, MainHeight);
Tags->MoveTo(itsLeftColStartX, MainStartY);
Albums->MoveTo(itsMiddleColStartX, MainStartY);
Songs->MoveTo(itsRightColStartX, MainStartY);
Tags->moveTo(itsLeftColStartX, MainStartY);
Albums->moveTo(itsMiddleColStartX, MainStartY);
Songs->moveTo(itsRightColStartX, MainStartY);
hasToBeResized = 0;
}
void MediaLibrary::Refresh()
{
Tags->Display();
Tags->display();
mvvline(MainStartY, itsMiddleColStartX-1, 0, MainHeight);
Albums->Display();
Albums->display();
mvvline(MainStartY, itsRightColStartX-1, 0, MainHeight);
Songs->Display();
if (Albums->Empty())
Songs->display();
if (Albums->empty())
{
*Albums << NC::XY(0, 0) << "No albums found.";
Albums->Window::Refresh();
Albums->Window::refresh();
}
}
@@ -171,10 +171,10 @@ void MediaLibrary::SwitchTo()
{
hasTwoColumns = !hasTwoColumns;
hasToBeResized = 1;
Tags->Clear();
Albums->Clear();
Albums->Reset();
Songs->Clear();
Tags->clear();
Albums->clear();
Albums->reset();
Songs->clear();
if (hasTwoColumns)
{
if (w == Tags)
@@ -183,13 +183,13 @@ void MediaLibrary::SwitchTo()
{
std::string item_type = tagTypeToString(Config.media_lib_primary_tag);
lowercase(item_type);
Albums->SetTitle("Albums (sorted by " + item_type + ")");
Albums->setTitle("Albums (sorted by " + item_type + ")");
}
else
Albums->SetTitle("");
Albums->setTitle("");
}
else
Albums->SetTitle(Config.titles_visibility ? "Albums" : "");
Albums->setTitle(Config.titles_visibility ? "Albums" : "");
}
}
@@ -217,60 +217,60 @@ std::basic_string<my_char_t> MediaLibrary::Title()
void MediaLibrary::Update()
{
if (!hasTwoColumns && Tags->ReallyEmpty())
if (!hasTwoColumns && Tags->reallyEmpty())
{
Albums->Clear();
Songs->Clear();
Albums->clear();
Songs->clear();
auto list = Mpd.GetList(Config.media_lib_primary_tag);
std::sort(list.begin(), list.end(), CaseInsensitiveSorting());
for (auto it = list.begin(); it != list.end(); ++it)
{
if (it->empty() && !Config.media_library_display_empty_tag)
continue;
Tags->AddItem(*it);
Tags->addItem(*it);
}
Tags->Refresh();
Tags->refresh();
}
if (!hasTwoColumns && !Tags->Empty() && Albums->ReallyEmpty() && Songs->ReallyEmpty())
if (!hasTwoColumns && !Tags->empty() && Albums->reallyEmpty() && Songs->reallyEmpty())
{
// idle has to be blocked for now since it would be enabled and
// disabled a few times by each mpd command, which makes no sense
// and slows down the whole process.
Mpd.BlockIdle(true);
Albums->Reset();
Albums->reset();
Mpd.StartFieldSearch(MPD_TAG_ALBUM);
Mpd.AddSearch(Config.media_lib_primary_tag, Tags->Current().value());
Mpd.AddSearch(Config.media_lib_primary_tag, Tags->current().value());
auto albums = Mpd.CommitSearchTags();
for (auto album = albums.begin(); album != albums.end(); ++album)
{
if (Config.media_library_display_date)
{
Mpd.StartFieldSearch(MPD_TAG_DATE);
Mpd.AddSearch(Config.media_lib_primary_tag, Tags->Current().value());
Mpd.AddSearch(Config.media_lib_primary_tag, Tags->current().value());
Mpd.AddSearch(MPD_TAG_ALBUM, *album);
auto dates = Mpd.CommitSearchTags();
for (auto date = dates.begin(); date != dates.end(); ++date)
Albums->AddItem(SearchConstraints(*album, *date));
Albums->addItem(SearchConstraints(*album, *date));
}
else
Albums->AddItem(SearchConstraints(*album, ""));
Albums->addItem(SearchConstraints(*album, ""));
}
if (!Albums->Empty())
std::sort(Albums->BeginV(), Albums->EndV(), SortSearchConstraints);
if (Albums->Size() > 1)
if (!Albums->empty())
std::sort(Albums->beginV(), Albums->endV(), SortSearchConstraints);
if (Albums->size() > 1)
{
Albums->AddSeparator();
Albums->AddItem(SearchConstraints("", AllTracksMarker));
Albums->addSeparator();
Albums->addItem(SearchConstraints("", AllTracksMarker));
}
Albums->Refresh();
Albums->refresh();
Mpd.BlockIdle(false);
}
else if (hasTwoColumns && Albums->ReallyEmpty())
else if (hasTwoColumns && Albums->reallyEmpty())
{
Songs->Clear();
Songs->clear();
*Albums << NC::XY(0, 0) << "Fetching albums...";
Albums->Window::Refresh();
Albums->Window::refresh();
Mpd.BlockIdle(true);
auto artists = Mpd.GetList(Config.media_lib_primary_tag);
for (auto artist = artists.begin(); artist != artists.end(); ++artist)
@@ -289,50 +289,50 @@ void MediaLibrary::Update()
Mpd.AddSearch(MPD_TAG_ALBUM, *album);
auto dates = Mpd.CommitSearchTags();
for (auto date = dates.begin(); date != dates.end(); ++date)
Albums->AddItem(SearchConstraints(*artist, *album, *date));
Albums->addItem(SearchConstraints(*artist, *album, *date));
}
else
Albums->AddItem(SearchConstraints(*artist, *album, *artist));
Albums->addItem(SearchConstraints(*artist, *album, *artist));
}
else
Albums->AddItem(SearchConstraints(*artist, *album, ""));
Albums->addItem(SearchConstraints(*artist, *album, ""));
}
}
Mpd.BlockIdle(0);
if (!Albums->Empty())
std::sort(Albums->BeginV(), Albums->EndV(), SortSearchConstraints);
Albums->Refresh();
if (!Albums->empty())
std::sort(Albums->beginV(), Albums->endV(), SortSearchConstraints);
Albums->refresh();
}
if (!hasTwoColumns && !Tags->Empty() && w == Albums && Albums->ReallyEmpty())
if (!hasTwoColumns && !Tags->empty() && w == Albums && Albums->reallyEmpty())
{
Albums->HighlightColor(Config.main_highlight_color);
Tags->HighlightColor(Config.active_column_color);
Albums->setHighlightColor(Config.main_highlight_color);
Tags->setHighlightColor(Config.active_column_color);
w = Tags;
}
if (!(hasTwoColumns ? Albums->Empty() : Tags->Empty()) && Songs->ReallyEmpty())
if (!(hasTwoColumns ? Albums->empty() : Tags->empty()) && Songs->reallyEmpty())
{
Songs->Reset();
Songs->reset();
Mpd.StartSearch(1);
Mpd.AddSearch(Config.media_lib_primary_tag, locale_to_utf_cpy(hasTwoColumns ? Albums->Current().value().PrimaryTag : Tags->Current().value()));
if (Albums->Current().value().Date != AllTracksMarker)
Mpd.AddSearch(Config.media_lib_primary_tag, locale_to_utf_cpy(hasTwoColumns ? Albums->current().value().PrimaryTag : Tags->current().value()));
if (Albums->current().value().Date != AllTracksMarker)
{
Mpd.AddSearch(MPD_TAG_ALBUM, locale_to_utf_cpy(Albums->Current().value().Album));
Mpd.AddSearch(MPD_TAG_ALBUM, locale_to_utf_cpy(Albums->current().value().Album));
if (Config.media_library_display_date)
Mpd.AddSearch(MPD_TAG_DATE, locale_to_utf_cpy(Albums->Current().value().Date));
Mpd.AddSearch(MPD_TAG_DATE, locale_to_utf_cpy(Albums->current().value().Date));
}
auto songs = Mpd.CommitSearchSongs();
for (auto s = songs.begin(); s != songs.end(); ++s)
Songs->AddItem(*s, myPlaylist->checkForSong(*s));
Songs->addItem(*s, myPlaylist->checkForSong(*s));
if (Albums->Current().value().Date == AllTracksMarker)
std::sort(Songs->BeginV(), Songs->EndV(), SortAllTracks);
if (Albums->current().value().Date == AllTracksMarker)
std::sort(Songs->beginV(), Songs->endV(), SortAllTracks);
else
std::sort(Songs->BeginV(), Songs->EndV(), SortSongsByTrack);
std::sort(Songs->beginV(), Songs->endV(), SortSongsByTrack);
Songs->Refresh();
Songs->refresh();
}
}
@@ -342,26 +342,26 @@ void MediaLibrary::SpacePressed()
{
if (w == Tags)
{
size_t i = Tags->Choice();
size_t i = Tags->choice();
Tags->at(i).setSelected(!Tags->at(i).isSelected());
Albums->Clear();
Songs->Clear();
Albums->clear();
Songs->clear();
}
else if (w == Albums)
{
if (Albums->Current().value().Date != AllTracksMarker)
if (Albums->current().value().Date != AllTracksMarker)
{
size_t i = Albums->Choice();
size_t i = Albums->choice();
Albums->at(i).setSelected(!Albums->at(i).isSelected());
Songs->Clear();
Songs->clear();
}
}
else if (w == Songs)
{
size_t i = Songs->Choice();
size_t i = Songs->choice();
Songs->at(i).setSelected(!Songs->at(i).isSelected());
}
w->Scroll(NC::wDown);
w->scroll(NC::wDown);
}
else
AddToPlaylist(0);
@@ -369,64 +369,64 @@ void MediaLibrary::SpacePressed()
void MediaLibrary::MouseButtonPressed(MEVENT me)
{
if (!Tags->Empty() && Tags->hasCoords(me.x, me.y))
if (!Tags->empty() && Tags->hasCoords(me.x, me.y))
{
if (w != Tags)
{
PrevColumn();
PrevColumn();
}
if (size_t(me.y) < Tags->Size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
if (size_t(me.y) < Tags->size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
{
Tags->Goto(me.y);
if (me.bstate & BUTTON3_PRESSED)
{
size_t pos = Tags->Choice();
size_t pos = Tags->choice();
SpacePressed();
if (pos < Tags->Size()-1)
Tags->Scroll(NC::wUp);
if (pos < Tags->size()-1)
Tags->scroll(NC::wUp);
}
}
else
Screen<NC::Window>::MouseButtonPressed(me);
Albums->Clear();
Songs->Clear();
Albums->clear();
Songs->clear();
}
else if (!Albums->Empty() && Albums->hasCoords(me.x, me.y))
else if (!Albums->empty() && Albums->hasCoords(me.x, me.y))
{
if (w != Albums)
w == Tags ? NextColumn() : PrevColumn();
if (size_t(me.y) < Albums->Size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
if (size_t(me.y) < Albums->size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
{
Albums->Goto(me.y);
if (me.bstate & BUTTON3_PRESSED)
{
size_t pos = Albums->Choice();
size_t pos = Albums->choice();
SpacePressed();
if (pos < Albums->Size()-1)
Albums->Scroll(NC::wUp);
if (pos < Albums->size()-1)
Albums->scroll(NC::wUp);
}
}
else
Screen<NC::Window>::MouseButtonPressed(me);
Songs->Clear();
Songs->clear();
}
else if (!Songs->Empty() && Songs->hasCoords(me.x, me.y))
else if (!Songs->empty() && Songs->hasCoords(me.x, me.y))
{
if (w != Songs)
{
NextColumn();
NextColumn();
}
if (size_t(me.y) < Songs->Size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
if (size_t(me.y) < Songs->size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
{
Songs->Goto(me.y);
if (me.bstate & BUTTON1_PRESSED)
{
size_t pos = Songs->Choice();
size_t pos = Songs->choice();
SpacePressed();
if (pos < Songs->Size()-1)
Songs->Scroll(NC::wUp);
if (pos < Songs->size()-1)
Songs->scroll(NC::wUp);
}
else
EnterPressed();
@@ -454,22 +454,22 @@ void MediaLibrary::applyFilter(const std::string &filter)
{
if (w == Tags)
{
Tags->ShowAll();
Tags->showAll();
auto rx = RegexFilter<std::string>(filter, Config.regex_type, TagEntryMatcher);
Tags->filter(Tags->Begin(), Tags->End(), rx);
Tags->filter(Tags->begin(), Tags->end(), rx);
}
else if (w == Albums)
{
Albums->ShowAll();
Albums->showAll();
auto fun = std::bind(AlbumEntryMatcher, _1, _2, true);
auto rx = RegexItemFilter<SearchConstraints>(filter, Config.regex_type, fun);
Albums->filter(Albums->Begin(), Albums->End(), rx);
Albums->filter(Albums->begin(), Albums->end(), rx);
}
else if (w == Songs)
{
Songs->ShowAll();
Songs->showAll();
auto rx = RegexFilter<MPD::Song>(filter, Config.regex_type, SongEntryMatcher);
Songs->filter(Songs->Begin(), Songs->End(), rx);
Songs->filter(Songs->begin(), Songs->end(), rx);
}
}
@@ -481,18 +481,18 @@ bool MediaLibrary::search(const std::string &constraint)
if (w == Tags)
{
auto rx = RegexFilter<std::string>(constraint, Config.regex_type, TagEntryMatcher);
result = Tags->search(Tags->Begin(), Tags->End(), rx);
result = Tags->search(Tags->begin(), Tags->end(), rx);
}
else if (w == Albums)
{
auto fun = std::bind(AlbumEntryMatcher, _1, _2, false);
auto rx = RegexItemFilter<SearchConstraints>(constraint, Config.regex_type, fun);
result = Albums->search(Albums->Begin(), Albums->End(), rx);
result = Albums->search(Albums->begin(), Albums->end(), rx);
}
else if (w == Songs)
{
auto rx = RegexFilter<MPD::Song>(constraint, Config.regex_type, SongEntryMatcher);
result = Songs->search(Songs->Begin(), Songs->End(), rx);
result = Songs->search(Songs->begin(), Songs->end(), rx);
}
return result;
}
@@ -500,21 +500,21 @@ bool MediaLibrary::search(const std::string &constraint)
void MediaLibrary::nextFound(bool wrap)
{
if (w == Tags)
Tags->NextFound(wrap);
Tags->nextFound(wrap);
else if (w == Albums)
Albums->NextFound(wrap);
Albums->nextFound(wrap);
else if (w == Songs)
Songs->NextFound(wrap);
Songs->nextFound(wrap);
}
void MediaLibrary::prevFound(bool wrap)
{
if (w == Tags)
Tags->PrevFound(wrap);
Tags->prevFound(wrap);
else if (w == Albums)
Albums->PrevFound(wrap);
Albums->prevFound(wrap);
else if (w == Songs)
Songs->PrevFound(wrap);
Songs->prevFound(wrap);
}
/***********************************************************************/
@@ -537,17 +537,17 @@ bool MediaLibrary::allowsSelection()
void MediaLibrary::reverseSelection()
{
if (w == Tags)
reverseSelectionHelper(Tags->Begin(), Tags->End());
reverseSelectionHelper(Tags->begin(), Tags->end());
else if (w == Albums)
{
// omit "All tracks"
if (Albums->Size() > 1)
reverseSelectionHelper(Albums->Begin(), Albums->End()-2);
if (Albums->size() > 1)
reverseSelectionHelper(Albums->begin(), Albums->end()-2);
else
reverseSelectionHelper(Albums->Begin(), Albums->End());
reverseSelectionHelper(Albums->begin(), Albums->end());
}
else if (w == Songs)
reverseSelectionHelper(Songs->Begin(), Songs->End());
reverseSelectionHelper(Songs->begin(), Songs->end());
}
MPD::SongList MediaLibrary::getSelectedSongs()
@@ -562,16 +562,16 @@ MPD::SongList MediaLibrary::getSelectedSongs()
std::sort(songs.begin(), songs.end(), SortAllTracks);
result.insert(result.end(), songs.begin(), songs.end());
};
for (auto it = Tags->Begin(); it != Tags->End(); ++it)
for (auto it = Tags->begin(); it != Tags->end(); ++it)
if (it->isSelected())
tag_handler(it->value());
// if no item is selected, add current one
if (result.empty() && !Tags->Empty())
tag_handler(Tags->Current().value());
if (result.empty() && !Tags->empty())
tag_handler(Tags->current().value());
}
else if (w == Albums)
{
for (auto it = Albums->Begin(); it != Albums->End() && !it->isSeparator(); ++it)
for (auto it = Albums->begin(); it != Albums->end() && !it->isSeparator(); ++it)
{
if (it->isSelected())
{
@@ -580,7 +580,7 @@ MPD::SongList MediaLibrary::getSelectedSongs()
if (hasTwoColumns)
Mpd.AddSearch(Config.media_lib_primary_tag, sc.PrimaryTag);
else
Mpd.AddSearch(Config.media_lib_primary_tag, Tags->Current().value());
Mpd.AddSearch(Config.media_lib_primary_tag, Tags->current().value());
Mpd.AddSearch(MPD_TAG_ALBUM, sc.Album);
Mpd.AddSearch(MPD_TAG_DATE, sc.Date);
auto songs = Mpd.CommitSearchSongs();
@@ -589,21 +589,21 @@ MPD::SongList MediaLibrary::getSelectedSongs()
}
}
// if no item is selected, add songs from right column
if (result.empty() && !Albums->Empty())
if (result.empty() && !Albums->empty())
{
withUnfilteredMenu(*Songs, [this, &result]() {
result.insert(result.end(), Songs->BeginV(), Songs->EndV());
result.insert(result.end(), Songs->beginV(), Songs->endV());
});
}
}
else if (w == Songs)
{
for (auto it = Songs->Begin(); it != Songs->End(); ++it)
for (auto it = Songs->begin(); it != Songs->end(); ++it)
if (it->isSelected())
result.push_back(it->value());
// if no item is selected, add current one
if (result.empty() && !Songs->Empty())
result.push_back(Songs->Current().value());
if (result.empty() && !Songs->empty())
result.push_back(Songs->current().value());
}
return result;
}
@@ -623,12 +623,12 @@ bool MediaLibrary::isNextColumnAvailable()
assert(!hasTwoColumns || w != Tags);
if (w == Tags)
{
if (!Albums->ReallyEmpty() && !Songs->ReallyEmpty())
if (!Albums->reallyEmpty() && !Songs->reallyEmpty())
return true;
}
else if (w == Albums)
{
if (!Songs->ReallyEmpty())
if (!Songs->reallyEmpty())
return true;
}
return false;
@@ -638,17 +638,17 @@ void MediaLibrary::NextColumn()
{
if (w == Tags)
{
Tags->HighlightColor(Config.main_highlight_color);
w->Refresh();
Tags->setHighlightColor(Config.main_highlight_color);
w->refresh();
w = Albums;
Albums->HighlightColor(Config.active_column_color);
Albums->setHighlightColor(Config.active_column_color);
}
else if (w == Albums)
{
Albums->HighlightColor(Config.main_highlight_color);
w->Refresh();
Albums->setHighlightColor(Config.main_highlight_color);
w->refresh();
w = Songs;
Songs->HighlightColor(Config.active_column_color);
Songs->setHighlightColor(Config.active_column_color);
}
}
@@ -657,12 +657,12 @@ bool MediaLibrary::isPrevColumnAvailable()
assert(!hasTwoColumns || w != Tags);
if (w == Songs)
{
if (!Albums->ReallyEmpty() && (hasTwoColumns || !Tags->ReallyEmpty()))
if (!Albums->reallyEmpty() && (hasTwoColumns || !Tags->reallyEmpty()))
return true;
}
else if (w == Albums)
{
if (!hasTwoColumns && !Tags->ReallyEmpty())
if (!hasTwoColumns && !Tags->reallyEmpty())
return true;
}
return false;
@@ -672,17 +672,17 @@ void MediaLibrary::PrevColumn()
{
if (w == Songs)
{
Songs->HighlightColor(Config.main_highlight_color);
w->Refresh();
Songs->setHighlightColor(Config.main_highlight_color);
w->refresh();
w = Albums;
Albums->HighlightColor(Config.active_column_color);
Albums->setHighlightColor(Config.active_column_color);
}
else if (w == Albums && !hasTwoColumns)
{
Albums->HighlightColor(Config.main_highlight_color);
w->Refresh();
Albums->setHighlightColor(Config.main_highlight_color);
w->refresh();
w = Tags;
Tags->HighlightColor(Config.active_column_color);
Tags->setHighlightColor(Config.active_column_color);
}
}
@@ -721,108 +721,108 @@ void MediaLibrary::LocateSong(const MPD::Song &s)
if (myScreen != this)
SwitchTo();
Statusbar() << "Jumping to song...";
Global::wFooter->Refresh();
Global::wFooter->refresh();
if (!hasTwoColumns)
{
Tags->ShowAll();
if (Tags->Empty())
Tags->showAll();
if (Tags->empty())
Update();
if (primary_tag != Tags->Current().value())
if (primary_tag != Tags->current().value())
{
for (size_t i = 0; i < Tags->Size(); ++i)
for (size_t i = 0; i < Tags->size(); ++i)
{
if (primary_tag == (*Tags)[i].value())
{
Tags->Highlight(i);
Albums->Clear();
Songs->Clear();
Tags->highlight(i);
Albums->clear();
Songs->clear();
break;
}
}
}
}
Albums->ShowAll();
if (Albums->Empty())
Albums->showAll();
if (Albums->empty())
Update();
std::string album = s.getAlbum();
std::string date = s.getDate();
if ((hasTwoColumns && Albums->Current().value().PrimaryTag != primary_tag)
|| album != Albums->Current().value().Album
|| date != Albums->Current().value().Date)
if ((hasTwoColumns && Albums->current().value().PrimaryTag != primary_tag)
|| album != Albums->current().value().Album
|| date != Albums->current().value().Date)
{
for (size_t i = 0; i < Albums->Size(); ++i)
for (size_t i = 0; i < Albums->size(); ++i)
{
if ((!hasTwoColumns || (*Albums)[i].value().PrimaryTag == primary_tag)
&& album == (*Albums)[i].value().Album
&& date == (*Albums)[i].value().Date)
{
Albums->Highlight(i);
Songs->Clear();
Albums->highlight(i);
Songs->clear();
break;
}
}
}
Songs->ShowAll();
if (Songs->Empty())
Songs->showAll();
if (Songs->empty())
Update();
if (s.getHash() != Songs->Current().value().getHash())
if (s.getHash() != Songs->current().value().getHash())
{
for (size_t i = 0; i < Songs->Size(); ++i)
for (size_t i = 0; i < Songs->size(); ++i)
{
if (s.getHash() == (*Songs)[i].value().getHash())
{
Songs->Highlight(i);
Songs->highlight(i);
break;
}
}
}
Tags->HighlightColor(Config.main_highlight_color);
Albums->HighlightColor(Config.main_highlight_color);
Songs->HighlightColor(Config.active_column_color);
Tags->setHighlightColor(Config.main_highlight_color);
Albums->setHighlightColor(Config.main_highlight_color);
Songs->setHighlightColor(Config.active_column_color);
w = Songs;
Refresh();
}
void MediaLibrary::AddToPlaylist(bool add_n_play)
{
if (w == Songs && !Songs->Empty())
if (w == Songs && !Songs->empty())
{
bool res = myPlaylist->Add(Songs->Current().value(), Songs->Current().isBold(), add_n_play);
Songs->Current().setBold(res);
bool res = myPlaylist->Add(Songs->current().value(), Songs->current().isBold(), add_n_play);
Songs->current().setBold(res);
}
else
{
auto list = getSelectedSongs();
if (myPlaylist->Add(list, add_n_play))
{
if ((!Tags->Empty() && w == Tags)
|| (w == Albums && Albums->Current().value().Date == AllTracksMarker))
if ((!Tags->empty() && w == Tags)
|| (w == Albums && Albums->current().value().Date == AllTracksMarker))
{
std::string tag_type = tagTypeToString(Config.media_lib_primary_tag);
lowercase(tag_type);
ShowMessage("Songs with %s = \"%s\" added", tag_type.c_str(), Tags->Current().value().c_str());
ShowMessage("Songs with %s = \"%s\" added", tag_type.c_str(), Tags->current().value().c_str());
}
else if (w == Albums)
ShowMessage("Songs from album \"%s\" added", Albums->Current().value().Album.c_str());
ShowMessage("Songs from album \"%s\" added", Albums->current().value().Album.c_str());
}
}
if (!add_n_play)
{
w->Scroll(NC::wDown);
w->scroll(NC::wDown);
if (w == Tags)
{
Albums->Clear();
Songs->Clear();
Albums->clear();
Songs->clear();
}
else if (w == Albums)
Songs->Clear();
Songs->clear();
}
}
@@ -876,12 +876,12 @@ bool SongEntryMatcher(const Regex &rx, const MPD::Song &s)
void DisplayAlbums(NC::Menu<SearchConstraints> &menu)
{
menu << AlbumToString(menu.Drawn().value());
menu << AlbumToString(menu.drawn().value());
}
void DisplayPrimaryTags(NC::Menu<std::string> &menu)
{
const std::string &tag = menu.Drawn().value();
const std::string &tag = menu.drawn().value();
if (tag.empty())
menu << Config.empty_tag;
else

View File

@@ -190,35 +190,35 @@ template <typename T> struct Menu : public Window
/// Reserves the size for internal container (this just calls std::vector::reserve())
/// @param size requested size
void Reserve(size_t size);
void reserve(size_t size);
/// Resizes the list to given size (adequate to std::vector::resize())
/// @param size requested size
void ResizeList(size_t size);
void resizeList(size_t size);
/// Adds new option to list
/// @param item object that has to be added
/// @param is_bold defines the initial state of bold attribute
/// @param is_static defines the initial state of static attribute
void AddItem(const T &item, bool is_bold = 0, bool is_static = 0);
void addItem(const T &item, bool is_bold = 0, bool is_static = 0);
/// Adds separator to list
void AddSeparator();
void addSeparator();
/// Inserts new option to list at given position
/// @param pos initial position of inserted item
/// @param item object that has to be inserted
/// @param is_bold defines the initial state of bold attribute
/// @param is_static defines the initial state of static attribute
void InsertItem(size_t pos, const T &Item, bool is_bold = 0, bool is_static = 0);
void insertItem(size_t pos, const T &Item, bool is_bold = 0, bool is_static = 0);
/// Inserts separator to list at given position
/// @param pos initial position of inserted separator
void InsertSeparator(size_t pos);
void insertSeparator(size_t pos);
/// Deletes item from given position
/// @param pos given position of item to be deleted
void DeleteItem(size_t pos);
void deleteItem(size_t pos);
/// Swaps the content of two items
/// @param one position of first item
@@ -236,14 +236,14 @@ template <typename T> struct Menu : public Window
/// Gets positions of items that are selected
/// @param v vector to be filled with selected positions numbers
void GetSelected(std::vector<size_t> &v) const;
void getSelected(std::vector<size_t> &v) const;
/// Highlights given position
/// @param pos position to be highlighted
void Highlight(size_t pos);
void highlight(size_t pos);
/// @return currently highlighted position
size_t Choice() const;
size_t choice() const;
void filter(ConstIterator first, ConstIterator last, const FilterFunction &f);
@@ -258,12 +258,12 @@ template <typename T> struct Menu : public Window
/// Moves current position in the list to the next found one
/// @param wrap if true, this function will go to the first
/// found pos after the last one, otherwise it'll do nothing.
virtual void NextFound(bool wrap);
void nextFound(bool wrap);
/// Moves current position in the list to the previous found one
/// @param wrap if true, this function will go to the last
/// found pos after the first one, otherwise it'll do nothing.
virtual void PrevFound(bool wrap);
void prevFound(bool wrap);
/// @return const reference to currently used filter function
const FilterFunction &getFilter() { return m_filter; }
@@ -272,131 +272,131 @@ template <typename T> struct Menu : public Window
bool isFiltered() { return m_options_ptr == &m_filtered_options; }
/// Turns off filtering
void ShowAll() { m_options_ptr = &m_options; }
void showAll() { m_options_ptr = &m_options; }
/// Turns on filtering
void ShowFiltered() { m_options_ptr = &m_filtered_options; }
void showFiltered() { m_options_ptr = &m_filtered_options; }
/// Refreshes the menu window
/// @see Window::Refresh()
virtual void Refresh();
virtual void refresh();
/// Scrolls by given amount of lines
/// @param where indicated where exactly one wants to go
/// @see Window::Scroll()
virtual void Scroll(Where where);
virtual void scroll(Where where);
/// Cleares all options, used filters etc. It doesn't reset highlighted position though.
/// @see Reset()
virtual void Clear();
/// @see reset()
virtual void clear();
/// Sets highlighted position to 0
void Reset();
void reset();
/// Sets prefix, that is put before each selected item to indicate its selection
/// Note that the passed variable is not deleted along with menu object.
/// @param b pointer to buffer that contains the prefix
void SetSelectPrefix(const Buffer &b) { m_selected_prefix = b; }
void setSelectedPrefix(const Buffer &b) { m_selected_prefix = b; }
/// Sets suffix, that is put after each selected item to indicate its selection
/// Note that the passed variable is not deleted along with menu object.
/// @param b pointer to buffer that contains the suffix
void SetSelectSuffix(const Buffer &b) { m_selected_suffix = b; }
void setSelectedSuffix(const Buffer &b) { m_selected_suffix = b; }
/// Sets custom color of highlighted position
/// @param col custom color
void HighlightColor(Color color) { m_highlight_color = color; }
void setHighlightColor(Color color) { m_highlight_color = color; }
/// @return state of highlighting
bool isHighlighted() { return m_highlight_enabled; }
/// Turns on/off highlighting
/// @param state state of hihglighting
void Highlighting(bool state) { m_highlight_enabled = state; }
void setHighlighting(bool state) { m_highlight_enabled = state; }
/// Turns on/off cyclic scrolling
/// @param state state of cyclic scrolling
void CyclicScrolling(bool state) { m_cyclic_scroll_enabled = state; }
void cyclicScrolling(bool state) { m_cyclic_scroll_enabled = state; }
/// Turns on/off centered cursor
/// @param state state of centered cursor
void CenteredCursor(bool state) { m_autocenter_cursor = state; }
void centeredCursor(bool state) { m_autocenter_cursor = state; }
/// Checks if list is empty
/// @return true if list is empty, false otherwise
/// @see ReallyEmpty()
virtual bool Empty() const { return m_options_ptr->empty(); }
/// @see reallyEmpty()
bool empty() const { return m_options_ptr->empty(); }
/// Checks if list is really empty since Empty() may not
/// be accurate if filter is set)
/// @return true if list is empty, false otherwise
/// @see Empty()
virtual bool ReallyEmpty() const { return m_options.empty(); }
bool reallyEmpty() const { return m_options.empty(); }
/// @return size of the list
virtual size_t Size() const;
size_t size() const { return m_options_ptr->size(); }
/// @return currently drawn item. The result is defined only within
/// drawing function that is called by Refresh()
/// @see Refresh()
const Item &Drawn() const { return *(*m_options_ptr)[m_drawn_position]; }
const Item &drawn() const { return *(*m_options_ptr)[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; }
size_t drawnPosition() const { return m_drawn_position; }
/// @return reference to last item on the list
/// @throw List::InvalidItem if requested item is separator
Menu<T>::Item &Back();
Menu<T>::Item &back() { return *m_options_ptr->back(); }
/// @return const reference to last item on the list
/// @throw List::InvalidItem if requested item is separator
const Menu<T>::Item &Back() const;
const Menu<T>::Item &back() const { return *m_options_ptr->back(); }
/// @return reference to curently highlighted object
Menu<T>::Item &Current();
Menu<T>::Item &current() { return *(*m_options_ptr)[m_highlight]; }
/// @return const reference to curently highlighted object
const Menu<T>::Item &Current() const;
const Menu<T>::Item &current() const { return *(*m_options_ptr)[m_highlight]; }
/// @param pos requested position
/// @return reference to item at given position
/// @throw std::out_of_range if given position is out of range
Menu<T>::Item &at(size_t pos);
Menu<T>::Item &at(size_t pos) { return *m_options_ptr->at(pos); }
/// @param pos requested position
/// @return const reference to item at given position
/// @throw std::out_of_range if given position is out of range
const Menu<T>::Item &at(size_t pos) const;
const Menu<T>::Item &at(size_t pos) const { return *m_options_ptr->at(pos); }
/// @param pos requested position
/// @return const reference to item at given position
const Menu<T>::Item &operator[](size_t pos) const;
const Menu<T>::Item &operator[](size_t pos) const { return *(*m_options_ptr)[pos]; }
/// @param pos requested position
/// @return const reference to item at given position
Menu<T>::Item &operator[](size_t pos);
Menu<T>::Item &operator[](size_t pos) { return *(*m_options_ptr)[pos]; }
Iterator Begin() { return Iterator(m_options_ptr->begin()); }
ConstIterator Begin() const { return ConstIterator(m_options_ptr->begin()); }
Iterator End() { return Iterator(m_options_ptr->end()); }
ConstIterator End() const { return ConstIterator(m_options_ptr->end()); }
Iterator begin() { return Iterator(m_options_ptr->begin()); }
ConstIterator begin() const { return ConstIterator(m_options_ptr->begin()); }
Iterator end() { return Iterator(m_options_ptr->end()); }
ConstIterator end() const { return ConstIterator(m_options_ptr->end()); }
ReverseIterator Rbegin() { return ReverseIterator(End()); }
ConstReverseIterator Rbegin() const { return ConstReverseIterator(End()); }
ReverseIterator Rend() { return ReverseIterator(Begin()); }
ConstReverseIterator Rend() const { return ConstReverseIterator(Begin()); }
ReverseIterator rbegin() { return ReverseIterator(end()); }
ConstReverseIterator rbegin() const { return ConstReverseIterator(end()); }
ReverseIterator rend() { return ReverseIterator(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()); }
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(EndV()); }
ConstReverseIterator RbeginV() const { return ConstReverseValueIterator(EndV()); }
ReverseValueIterator RendV() { return ReverseValueIterator(BeginV()); }
ConstReverseValueIterator RendV() const { return ConstReverseValueIterator(BeginV()); }
ReverseValueIterator rbeginV() { return ReverseValueIterator(endV()); }
ConstReverseIterator rbeginV() const { return ConstReverseValueIterator(endV()); }
ReverseValueIterator rendV() { return ReverseValueIterator(beginV()); }
ConstReverseValueIterator rendV() const { return ConstReverseValueIterator(beginV()); }
private:
bool isHighlightable(size_t pos)
@@ -442,7 +442,7 @@ template <typename T> Menu<T>::Menu(size_t startx,
m_options_ptr(&m_options),
m_beginning(0),
m_highlight(0),
m_highlight_color(itsBaseColor),
m_highlight_color(m_base_color),
m_highlight_enabled(true),
m_cyclic_scroll_enabled(false),
m_autocenter_cursor(false)
@@ -455,12 +455,12 @@ template <typename T> Menu<T>::~Menu()
delete *it;
}
template <typename T> void Menu<T>::Reserve(size_t size)
template <typename T> void Menu<T>::reserve(size_t size)
{
m_options.reserve(size);
}
template <typename T> void Menu<T>::ResizeList(size_t size)
template <typename T> void Menu<T>::resizeList(size_t size)
{
if (size > m_options.size())
{
@@ -477,27 +477,27 @@ template <typename T> void Menu<T>::ResizeList(size_t size)
}
}
template <typename T> void Menu<T>::AddItem(const T &item, bool is_bold, bool is_inactive)
template <typename T> void Menu<T>::addItem(const T &item, bool is_bold, bool is_inactive)
{
m_options.push_back(new Item(item, is_bold, is_inactive));
}
template <typename T> void Menu<T>::AddSeparator()
template <typename T> void Menu<T>::addSeparator()
{
m_options.push_back(Item::mkSeparator());
}
template <typename T> void Menu<T>::InsertItem(size_t pos, const T &item, bool is_bold, bool is_inactive)
template <typename T> void Menu<T>::insertItem(size_t pos, const T &item, bool is_bold, bool is_inactive)
{
m_options.insert(m_options.begin()+pos, new Item(item, is_bold, is_inactive));
}
template <typename T> void Menu<T>::InsertSeparator(size_t pos)
template <typename T> void Menu<T>::insertSeparator(size_t pos)
{
m_options.insert(m_options.begin()+pos, Item::mkSeparator());
}
template <typename T> void Menu<T>::DeleteItem(size_t pos)
template <typename T> void Menu<T>::deleteItem(size_t pos)
{
assert(m_options_ptr != &m_filtered_options);
assert(pos < m_options.size());
@@ -518,44 +518,44 @@ template <typename T> bool Menu<T>::Goto(size_t y)
return true;
}
template <typename T> void Menu<T>::Refresh()
template <typename T> void Menu<T>::refresh()
{
if (m_options_ptr->empty())
{
Window::Clear();
Window::Refresh();
Window::clear();
Window::refresh();
return;
}
size_t max_beginning = m_options_ptr->size() < itsHeight ? 0 : m_options_ptr->size()-itsHeight;
size_t max_beginning = m_options_ptr->size() < m_height ? 0 : m_options_ptr->size()-m_height;
m_beginning = std::min(m_beginning, max_beginning);
// if highlighted position is off the screen, make it visible
m_highlight = std::min(m_highlight, m_beginning+itsHeight-1);
m_highlight = std::min(m_highlight, m_beginning+m_height-1);
// if highlighted position is invalid, correct it
m_highlight = std::min(m_highlight, m_options_ptr->size()-1);
if (!isHighlightable(m_highlight))
{
Scroll(wUp);
scroll(wUp);
if (!isHighlightable(m_highlight))
Scroll(wDown);
scroll(wDown);
}
size_t line = 0;
m_drawn_position = m_beginning;
for (size_t &i = m_drawn_position; i < m_beginning+itsHeight; ++i, ++line)
for (size_t &i = m_drawn_position; i < m_beginning+m_height; ++i, ++line)
{
GotoXY(0, line);
goToXY(0, line);
if (i >= m_options_ptr->size())
{
for (; line < itsHeight; ++line)
mvwhline(itsWindow, line, 0, KEY_SPACE, itsWidth);
for (; line < m_height; ++line)
mvwhline(m_window, line, 0, KEY_SPACE, m_width);
break;
}
if ((*m_options_ptr)[i]->isSeparator())
{
mvwhline(itsWindow, line, 0, 0, itsWidth);
mvwhline(m_window, line, 0, 0, m_width);
continue;
}
if ((*m_options_ptr)[i]->isBold())
@@ -565,7 +565,7 @@ template <typename T> void Menu<T>::Refresh()
*this << fmtReverse;
*this << m_highlight_color;
}
mvwhline(itsWindow, line, 0, KEY_SPACE, itsWidth);
mvwhline(m_window, line, 0, KEY_SPACE, m_width);
if ((*m_options_ptr)[i]->isSelected())
*this << m_selected_prefix;
if (m_item_displayer)
@@ -580,16 +580,16 @@ template <typename T> void Menu<T>::Refresh()
if ((*m_options_ptr)[i]->isBold())
*this << fmtBoldEnd;
}
Window::Refresh();
Window::refresh();
}
template <typename T> void Menu<T>::Scroll(Where where)
template <typename T> void Menu<T>::scroll(Where where)
{
if (m_options_ptr->empty())
return;
size_t max_highlight = m_options_ptr->size()-1;
size_t max_beginning = m_options_ptr->size() < itsHeight ? 0 : m_options_ptr->size()-itsHeight;
size_t max_visible_highlight = m_beginning+itsHeight-1;
size_t max_beginning = m_options_ptr->size() < m_height ? 0 : m_options_ptr->size()-m_height;
size_t max_visible_highlight = m_beginning+m_height-1;
switch (where)
{
case wUp:
@@ -599,13 +599,13 @@ template <typename T> void Menu<T>::Scroll(Where where)
if (m_highlight == 0)
{
if (m_cyclic_scroll_enabled)
return Scroll(wEnd);
return scroll(wEnd);
break;
}
else
--m_highlight;
if (!isHighlightable(m_highlight))
Scroll(m_highlight == 0 && !m_cyclic_scroll_enabled ? wDown : wUp);
scroll(m_highlight == 0 && !m_cyclic_scroll_enabled ? wDown : wUp);
break;
}
case wDown:
@@ -615,41 +615,41 @@ template <typename T> void Menu<T>::Scroll(Where where)
if (m_highlight == max_highlight)
{
if (m_cyclic_scroll_enabled)
return Scroll(wHome);
return scroll(wHome);
break;
}
else
++m_highlight;
if (!isHighlightable(m_highlight))
Scroll(m_highlight == max_highlight && !m_cyclic_scroll_enabled ? wUp : wDown);
scroll(m_highlight == max_highlight && !m_cyclic_scroll_enabled ? wUp : wDown);
break;
}
case wPageUp:
{
if (m_cyclic_scroll_enabled && m_highlight == 0)
return Scroll(wEnd);
if (m_highlight < itsHeight)
return scroll(wEnd);
if (m_highlight < m_height)
m_highlight = 0;
else
m_highlight -= itsHeight;
if (m_beginning < itsHeight)
m_highlight -= m_height;
if (m_beginning < m_height)
m_beginning = 0;
else
m_beginning -= itsHeight;
m_beginning -= m_height;
if (!isHighlightable(m_highlight))
Scroll(m_highlight == 0 && !m_cyclic_scroll_enabled ? wDown : wUp);
scroll(m_highlight == 0 && !m_cyclic_scroll_enabled ? wDown : wUp);
break;
}
case wPageDown:
{
if (m_cyclic_scroll_enabled && m_highlight == max_highlight)
return Scroll(wHome);
m_highlight += itsHeight;
m_beginning += itsHeight;
return scroll(wHome);
m_highlight += m_height;
m_beginning += m_height;
m_beginning = std::min(m_beginning, max_beginning);
m_highlight = std::min(m_highlight, max_highlight);
if (!isHighlightable(m_highlight))
Scroll(m_highlight == max_highlight && !m_cyclic_scroll_enabled ? wUp : wDown);
scroll(m_highlight == max_highlight && !m_cyclic_scroll_enabled ? wUp : wDown);
break;
}
case wHome:
@@ -657,7 +657,7 @@ template <typename T> void Menu<T>::Scroll(Where where)
m_highlight = 0;
m_beginning = 0;
if (!isHighlightable(m_highlight))
Scroll(wDown);
scroll(wDown);
break;
}
case wEnd:
@@ -665,21 +665,21 @@ template <typename T> void Menu<T>::Scroll(Where where)
m_highlight = max_highlight;
m_beginning = max_beginning;
if (!isHighlightable(m_highlight))
Scroll(wUp);
scroll(wUp);
break;
}
}
if (m_autocenter_cursor)
Highlight(m_highlight);
highlight(m_highlight);
}
template <typename T> void Menu<T>::Reset()
template <typename T> void Menu<T>::reset()
{
m_highlight = 0;
m_beginning = 0;
}
template <typename T> void Menu<T>::Clear()
template <typename T> void Menu<T>::clear()
{
for (auto it = m_options.begin(); it != m_options.end(); ++it)
delete *it;
@@ -691,37 +691,32 @@ template <typename T> void Menu<T>::Clear()
template <typename T> bool Menu<T>::hasSelected() const
{
for (auto it = m_options_ptr->begin(); it != m_options_ptr->end(); ++it)
if ((*it)->isSelected())
for (auto it = begin(); it != end(); ++it)
if (it->isSelected())
return true;
return false;
}
template <typename T> void Menu<T>::GetSelected(std::vector<size_t> &v) const
template <typename T> void Menu<T>::getSelected(std::vector<size_t> &v) const
{
for (size_t i = 0; i < m_options_ptr->size(); ++i)
if ((*m_options_ptr)[i]->isSelected())
v.push_back(i);
}
template <typename T> void Menu<T>::Highlight(size_t pos)
template <typename T> void Menu<T>::highlight(size_t pos)
{
m_highlight = pos;
size_t half_height = itsHeight/2;
size_t half_height = m_height/2;
if (pos < half_height)
m_beginning = 0;
else
m_beginning = pos-half_height;
}
template <typename T> size_t Menu<T>::Size() const
template <typename T> size_t Menu<T>::choice() const
{
return m_options_ptr->size();
}
template <typename T> size_t Menu<T>::Choice() const
{
assert(!Empty());
assert(!empty());
return m_highlight;
}
@@ -735,7 +730,7 @@ void Menu<T>::filter(ConstIterator first, ConstIterator last, const FilterFuncti
{
if (m_filter(*it))
{
size_t pos = it-Begin();
size_t pos = it-begin();
m_filtered_positions.push_back(pos);
m_filtered_options.push_back(*it.base());
}
@@ -759,7 +754,7 @@ bool Menu<T>::search(ConstIterator first, ConstIterator last, const FilterFuncti
{
if (m_searcher(*it))
{
size_t pos = it-Begin();
size_t pos = it-begin();
m_found_positions.insert(pos);
}
}
@@ -771,68 +766,26 @@ template <typename T> void Menu<T>::clearSearchResults()
m_found_positions.clear();
}
template <typename T> void Menu<T>::NextFound(bool wrap)
template <typename T> void Menu<T>::nextFound(bool wrap)
{
if (m_found_positions.empty())
return;
auto next = m_found_positions.upper_bound(m_highlight);
if (next != m_found_positions.end())
Highlight(*next);
highlight(*next);
else if (wrap)
Highlight(*m_found_positions.begin());
highlight(*m_found_positions.begin());
}
template <typename T> void Menu<T>::PrevFound(bool wrap)
template <typename T> void Menu<T>::prevFound(bool wrap)
{
if (m_found_positions.empty())
return;
auto prev = m_found_positions.lower_bound(m_highlight);
if (prev != m_found_positions.begin())
Highlight(*--prev);
highlight(*--prev);
else if (wrap)
Highlight(*m_found_positions.rbegin());
}
template <typename T> typename Menu<T>::Item &Menu<T>::Back()
{
return *m_options_ptr->back();
}
template <typename T> const typename Menu<T>::Item &Menu<T>::Back() const
{
return *m_options_ptr->back();
}
template <typename T> typename Menu<T>::Item &Menu<T>::Current()
{
return *(*m_options_ptr)[m_highlight];
}
template <typename T> const typename Menu<T>::Item &Menu<T>::Current() const
{
return *(*m_options_ptr)[m_highlight];
}
template <typename T> typename Menu<T>::Item &Menu<T>::at(size_t pos)
{
return *m_options_ptr->at(pos);
}
template <typename T> const typename Menu<T>::Item &Menu<T>::at(size_t pos) const
{
return *m_options_ptr->at(pos);
}
template <typename T> const typename Menu<T>::Item &Menu<T>::operator[](size_t pos) const
{
assert(m_options_ptr->size() > pos);
return *(*m_options_ptr)[pos];
}
template <typename T> typename Menu<T>::Item &Menu<T>::operator[](size_t pos)
{
assert(m_options_ptr->size() > pos);
return *(*m_options_ptr)[pos];
highlight(*m_found_positions.rbegin());
}
}

View File

@@ -66,7 +66,7 @@ namespace
errorlog.close();
Mpd.Disconnect();
# ifndef USE_PDCURSES // destroying screen somehow crashes pdcurses
NC::DestroyScreen();
NC::destroyScreen();
# endif // USE_PDCURSES
WindowTitle("");
}
@@ -134,7 +134,7 @@ int main(int argc, char **argv)
cerr_buffer = std::cerr.rdbuf();
std::cerr.rdbuf(errorlog.rdbuf());
NC::InitScreen("ncmpcpp ver. " VERSION, Config.colors_enabled);
NC::initScreen("ncmpcpp ver. " VERSION, Config.colors_enabled);
Action::OriginalStatusbarVisibility = Config.statusbar_visibility;
@@ -149,14 +149,14 @@ int main(int argc, char **argv)
wHeader = new NC::Window(0, 0, COLS, Action::HeaderHeight, "", Config.header_color, NC::brNone);
if (Config.header_visibility || Config.new_design)
wHeader->Display();
wHeader->display();
wFooter = new NC::Window(0, Action::FooterStartY, COLS, Action::FooterHeight, "", Config.statusbar_color, NC::brNone);
wFooter->SetTimeout(500);
wFooter->SetGetStringHelper(StatusbarGetStringHelper);
wFooter->setTimeout(500);
wFooter->setGetStringHelper(StatusbargetStringHelper);
if (Mpd.SupportsIdle())
wFooter->AddFDCallback(Mpd.GetFD(), StatusbarMPDCallback);
wFooter->CreateHistory();
wFooter->addFDCallback(Mpd.GetFD(), StatusbarMPDCallback);
wFooter->createHistory();
// initialize screens to browser as default previous screen
myScreen = myBrowser;
@@ -194,7 +194,7 @@ int main(int argc, char **argv)
TraceMpdStatus();
int curr_pos = Mpd.GetCurrentSongPos();
if (curr_pos >= 0)
myPlaylist->Items->Highlight(curr_pos);
myPlaylist->Items->highlight(curr_pos);
}
while (!Action::ExitMainLoop)
@@ -202,14 +202,14 @@ int main(int argc, char **argv)
if (!Mpd.Connected())
{
if (!wFooter->FDCallbacksListEmpty())
wFooter->ClearFDCallbacksList();
wFooter->clearFDCallbacksList();
ShowMessage("Attempting to reconnect...");
if (Mpd.Connect())
{
ShowMessage("Connected to %s", Mpd.GetHostname().c_str());
if (Mpd.SupportsIdle())
{
wFooter->AddFDCallback(Mpd.GetFD(), StatusbarMPDCallback);
wFooter->addFDCallback(Mpd.GetFD(), StatusbarMPDCallback);
Mpd.OrderDataFetching(); // we need info about new connection
}
ShowMessages = false;
@@ -244,9 +244,9 @@ int main(int argc, char **argv)
std::basic_string<my_char_t> title = myScreen->Title();
*wHeader << NC::XY(0, 3) << wclrtoeol;
*wHeader << NC::fmtBold << Config.alternative_ui_separator_color;
mvwhline(wHeader->Raw(), 2, 0, 0, COLS);
mvwhline(wHeader->Raw(), 4, 0, 0, COLS);
*wHeader << NC::XY((COLS-NC::Window::Length(title))/2, 3);
mvwhline(wHeader->raw(), 2, 0, 0, COLS);
mvwhline(wHeader->raw(), 4, 0, 0, COLS);
*wHeader << NC::XY((COLS-NC::Window::length(title))/2, 3);
*wHeader << Config.header_color << title << NC::clEnd;
*wHeader << NC::clEnd << NC::fmtBoldEnd;
}
@@ -254,10 +254,10 @@ int main(int argc, char **argv)
{
*wHeader << NC::XY(0, 0) << wclrtoeol << NC::fmtBold << myScreen->Title() << NC::fmtBoldEnd;
*wHeader << Config.volume_color;
*wHeader << NC::XY(wHeader->GetWidth()-VolumeState.length(), 0) << VolumeState;
*wHeader << NC::XY(wHeader->getWidth()-VolumeState.length(), 0) << VolumeState;
*wHeader << NC::clEnd;
}
wHeader->Refresh();
wHeader->refresh();
RedrawHeader = false;
}
// header stuff end
@@ -294,10 +294,10 @@ int main(int argc, char **argv)
# ifdef ENABLE_VISUALIZER
// visualizer sets timeout to 40ms, but since only it needs such small
// value, we should restore defalt one after switching to another screen.
if (wFooter->GetTimeout() < 500
if (wFooter->getTimeout() < 500
&& !(myScreen == myVisualizer || myLockedScreen == myVisualizer || myInactiveScreen == myVisualizer)
)
wFooter->SetTimeout(500);
wFooter->setTimeout(500);
# endif // ENABLE_VISUALIZER
}
return 0;

View File

@@ -36,9 +36,9 @@ Outputs *myOutputs = new Outputs;
void Outputs::Init()
{
w = new NC::Menu<MPD::Output>(0, MainStartY, COLS, MainHeight, "", Config.main_color, NC::brNone);
w->CyclicScrolling(Config.use_cyclic_scrolling);
w->CenteredCursor(Config.centered_cursor);
w->HighlightColor(Config.main_highlight_color);
w->cyclicScrolling(Config.use_cyclic_scrolling);
w->centeredCursor(Config.centered_cursor);
w->setHighlightColor(Config.main_highlight_color);
w->setItemDisplayer(Display::Outputs);
isInitialized = 1;
@@ -64,7 +64,7 @@ void Outputs::SwitchTo()
if (myScreen != this && myScreen->isTabbable())
Global::myPrevScreen = myScreen;
myScreen = this;
w->Window::Clear();
w->Window::clear();
Global::RedrawHeader = true;
}
@@ -73,8 +73,8 @@ void Outputs::Resize()
{
size_t x_offset, width;
GetWindowResizeParams(x_offset, width);
w->Resize(width, MainHeight);
w->MoveTo(x_offset, MainStartY);
w->resize(width, MainHeight);
w->moveTo(x_offset, MainStartY);
hasToBeResized = 0;
}
@@ -85,15 +85,15 @@ std::basic_string<my_char_t> Outputs::Title()
void Outputs::EnterPressed()
{
if (w->Current().value().isEnabled())
if (w->current().value().isEnabled())
{
if (Mpd.DisableOutput(w->Choice()))
ShowMessage("Output \"%s\" disabled", w->Current().value().name().c_str());
if (Mpd.DisableOutput(w->choice()))
ShowMessage("Output \"%s\" disabled", w->current().value().name().c_str());
}
else
{
if (Mpd.EnableOutput(w->Choice()))
ShowMessage("Output \"%s\" enabled", w->Current().value().name().c_str());
if (Mpd.EnableOutput(w->choice()))
ShowMessage("Output \"%s\" enabled", w->current().value().name().c_str());
}
if (!Mpd.SupportsIdle())
FetchList();
@@ -101,7 +101,7 @@ void Outputs::EnterPressed()
void Outputs::MouseButtonPressed(MEVENT me)
{
if (w->Empty() || !w->hasCoords(me.x, me.y) || size_t(me.y) >= w->Size())
if (w->empty() || !w->hasCoords(me.x, me.y) || size_t(me.y) >= w->size())
return;
if (me.bstate & BUTTON1_PRESSED || me.bstate & BUTTON3_PRESSED)
{
@@ -117,12 +117,12 @@ void Outputs::FetchList()
{
if (!isInitialized)
return;
w->Clear();
w->clear();
auto outputs = Mpd.GetOutputs();
for (auto o = outputs.begin(); o != outputs.end(); ++o)
w->AddItem(*o, o->isEnabled());
w->addItem(*o, o->isEnabled());
if (myScreen == this)
w->Refresh();
w->refresh();
}
#endif // ENABLE_OUTPUTS

View File

@@ -57,11 +57,11 @@ bool playlistEntryMatcher(const Regex &rx, const MPD::Song &s);
void Playlist::Init()
{
Items = new NC::Menu<MPD::Song>(0, MainStartY, COLS, MainHeight, Config.columns_in_playlist && Config.titles_visibility ? Display::Columns(COLS) : "", Config.main_color, NC::brNone);
Items->CyclicScrolling(Config.use_cyclic_scrolling);
Items->CenteredCursor(Config.centered_cursor);
Items->HighlightColor(Config.main_highlight_color);
Items->SetSelectPrefix(Config.selected_item_prefix);
Items->SetSelectSuffix(Config.selected_item_suffix);
Items->cyclicScrolling(Config.use_cyclic_scrolling);
Items->centeredCursor(Config.centered_cursor);
Items->setHighlightColor(Config.main_highlight_color);
Items->setSelectedPrefix(Config.selected_item_prefix);
Items->setSelectedSuffix(Config.selected_item_suffix);
if (Config.columns_in_playlist)
Items->setItemDisplayer(std::bind(Display::SongsInColumns, _1, *this));
else
@@ -72,23 +72,23 @@ void Playlist::Init()
SortDialogHeight = std::min(int(MainHeight), 17);
SortDialog = new NC::Menu< std::pair<std::string, MPD::Song::GetFunction> >((COLS-SortDialogWidth)/2, (MainHeight-SortDialogHeight)/2+MainStartY, SortDialogWidth, SortDialogHeight, "Sort songs by...", Config.main_color, Config.window_border);
SortDialog->CyclicScrolling(Config.use_cyclic_scrolling);
SortDialog->CenteredCursor(Config.centered_cursor);
SortDialog->cyclicScrolling(Config.use_cyclic_scrolling);
SortDialog->centeredCursor(Config.centered_cursor);
SortDialog->setItemDisplayer(Display::Pair<std::string, MPD::Song::GetFunction>);
SortDialog->AddItem(std::make_pair("Artist", &MPD::Song::getArtist));
SortDialog->AddItem(std::make_pair("Album", &MPD::Song::getAlbum));
SortDialog->AddItem(std::make_pair("Disc", &MPD::Song::getDisc));
SortDialog->AddItem(std::make_pair("Track", &MPD::Song::getTrack));
SortDialog->AddItem(std::make_pair("Genre", &MPD::Song::getGenre));
SortDialog->AddItem(std::make_pair("Date", &MPD::Song::getDate));
SortDialog->AddItem(std::make_pair("Composer", &MPD::Song::getComposer));
SortDialog->AddItem(std::make_pair("Performer", &MPD::Song::getPerformer));
SortDialog->AddItem(std::make_pair("Title", &MPD::Song::getTitle));
SortDialog->AddItem(std::make_pair("Filename", &MPD::Song::getURI));
SortDialog->AddSeparator();
SortDialog->AddItem(std::make_pair("Sort", static_cast<MPD::Song::GetFunction>(0)));
SortDialog->AddItem(std::make_pair("Cancel", static_cast<MPD::Song::GetFunction>(0)));
SortDialog->addItem(std::make_pair("Artist", &MPD::Song::getArtist));
SortDialog->addItem(std::make_pair("Album", &MPD::Song::getAlbum));
SortDialog->addItem(std::make_pair("Disc", &MPD::Song::getDisc));
SortDialog->addItem(std::make_pair("Track", &MPD::Song::getTrack));
SortDialog->addItem(std::make_pair("Genre", &MPD::Song::getGenre));
SortDialog->addItem(std::make_pair("Date", &MPD::Song::getDate));
SortDialog->addItem(std::make_pair("Composer", &MPD::Song::getComposer));
SortDialog->addItem(std::make_pair("Performer", &MPD::Song::getPerformer));
SortDialog->addItem(std::make_pair("Title", &MPD::Song::getTitle));
SortDialog->addItem(std::make_pair("Filename", &MPD::Song::getURI));
SortDialog->addSeparator();
SortDialog->addItem(std::make_pair("Sort", static_cast<MPD::Song::GetFunction>(0)));
SortDialog->addItem(std::make_pair("Cancel", static_cast<MPD::Song::GetFunction>(0)));
}
w = Items;
@@ -118,10 +118,9 @@ void Playlist::SwitchTo()
if (myScreen != this && myScreen->isTabbable())
Global::myPrevScreen = myScreen;
myScreen = this;
Items->Window::Clear();
EnableHighlighting();
if (w != Items) // even if sorting window is active, background has to be refreshed anyway
Items->Display();
Items->display();
Global::RedrawHeader = true;
}
@@ -129,18 +128,18 @@ void Playlist::Resize()
{
size_t x_offset, width;
GetWindowResizeParams(x_offset, width);
Items->Resize(width, MainHeight);
Items->MoveTo(x_offset, MainStartY);
Items->resize(width, MainHeight);
Items->moveTo(x_offset, MainStartY);
Items->SetTitle(Config.columns_in_playlist && Config.titles_visibility ? Display::Columns(Items->GetWidth()) : "");
Items->setTitle(Config.columns_in_playlist && Config.titles_visibility ? Display::Columns(Items->getWidth()) : "");
if (w == SortDialog) // if sorting window is active, playlist needs refreshing
Items->Display();
Items->display();
SortDialogHeight = std::min(int(MainHeight), 17);
if (Items->GetWidth() >= SortDialogWidth && MainHeight >= 5)
if (Items->getWidth() >= SortDialogWidth && MainHeight >= 5)
{
SortDialog->Resize(SortDialogWidth, SortDialogHeight);
SortDialog->MoveTo(x_offset+(width-SortDialogWidth)/2, (MainHeight-SortDialogHeight)/2+MainStartY);
SortDialog->resize(SortDialogWidth, SortDialogHeight);
SortDialog->moveTo(x_offset+(width-SortDialogWidth)/2, (MainHeight-SortDialogHeight)/2+MainStartY);
}
else // if screen is too low to display sorting window, fall back to items list
w = Items;
@@ -161,19 +160,19 @@ void Playlist::EnterPressed()
{
if (w == Items)
{
if (!Items->Empty())
Mpd.PlayID(Items->Current().value().getID());
if (!Items->empty())
Mpd.PlayID(Items->current().value().getID());
}
else if (w == SortDialog)
{
size_t pos = SortDialog->Choice();
size_t pos = SortDialog->choice();
size_t beginning = 0;
size_t end = Items->Size();
size_t end = Items->size();
if (Items->hasSelected())
{
std::vector<size_t> list;
Items->GetSelected(list);
Items->getSelected(list);
beginning = *list.begin();
end = *list.rbegin()+1;
}
@@ -198,7 +197,7 @@ void Playlist::EnterPressed()
playlist.push_back((*Items)[i].value());
std::function<void(MPD::SongList::iterator, MPD::SongList::iterator)> iter_swap, quick_sort;
auto song_cmp = [](const MPD::Song &a, const MPD::Song &b) {
auto song_cmp = [](const MPD::Song &a, const MPD::Song &b) -> bool {
CaseInsensitiveStringComparison cmp;
for (size_t i = 0; i < SortOptions; ++i)
if (int ret = cmp(a.getTags((*SortDialog)[i].value().second), b.getTags((*SortDialog)[i].value().second)))
@@ -238,18 +237,18 @@ void Playlist::EnterPressed()
void Playlist::SpacePressed()
{
if (w == Items && !Items->Empty())
if (w == Items && !Items->empty())
{
Items->Current().setSelected(!Items->Current().isSelected());
Items->Scroll(NC::wDown);
Items->current().setSelected(!Items->current().isSelected());
Items->scroll(NC::wDown);
}
}
void Playlist::MouseButtonPressed(MEVENT me)
{
if (w == Items && !Items->Empty() && Items->hasCoords(me.x, me.y))
if (w == Items && !Items->empty() && Items->hasCoords(me.x, me.y))
{
if (size_t(me.y) < Items->Size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
if (size_t(me.y) < Items->size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
{
Items->Goto(me.y);
if (me.bstate & BUTTON3_PRESSED)
@@ -285,9 +284,9 @@ void Playlist::applyFilter(const std::string &filter)
{
if (w == Items)
{
Items->ShowAll();
Items->showAll();
auto rx = RegexFilter<MPD::Song>(filter, Config.regex_type, playlistEntryMatcher);
Items->filter(Items->Begin(), Items->End(), rx);
Items->filter(Items->begin(), Items->end(), rx);
}
}
@@ -299,7 +298,7 @@ bool Playlist::search(const std::string &constraint)
if (w == Items)
{
auto rx = RegexFilter<MPD::Song>(constraint, Config.regex_type, playlistEntryMatcher);
result = Items->search(Items->Begin(), Items->End(), rx);
result = Items->search(Items->begin(), Items->end(), rx);
}
return result;
}
@@ -307,13 +306,13 @@ bool Playlist::search(const std::string &constraint)
void Playlist::nextFound(bool wrap)
{
if (w == Items)
Items->NextFound(wrap);
Items->nextFound(wrap);
}
void Playlist::prevFound(bool wrap)
{
if (w == Items)
Items->PrevFound(wrap);
Items->prevFound(wrap);
}
/***********************************************************************/
@@ -338,10 +337,10 @@ MPD::Song *Playlist::getSong(size_t pos)
MPD::Song *Playlist::currentSong()
{
if (Items->Empty())
if (Items->empty())
return 0;
else
return getSong(Items->Choice());
return getSong(Items->choice());
}
bool Playlist::allowsSelection()
@@ -351,7 +350,7 @@ bool Playlist::allowsSelection()
void Playlist::reverseSelection()
{
reverseSelectionHelper(Items->Begin(), Items->End());
reverseSelectionHelper(Items->begin(), Items->end());
}
MPD::SongList Playlist::getSelectedSongs()
@@ -359,11 +358,11 @@ MPD::SongList Playlist::getSelectedSongs()
MPD::SongList result;
if (w == Items)
{
for (auto it = Items->Begin(); it != Items->End(); ++it)
for (auto it = Items->begin(); it != Items->end(); ++it)
if (it->isSelected())
result.push_back(it->value());
if (result.empty() && !Items->Empty())
result.push_back(Items->Current().value());
if (result.empty() && !Items->empty())
result.push_back(Items->current().value());
}
return result;
}
@@ -383,7 +382,7 @@ bool Playlist::isFiltered()
void Playlist::MoveSelectedItems(Movement where)
{
if (Items->Empty() || isFiltered())
if (Items->empty() || isFiltered())
return;
switch (where)
@@ -393,7 +392,7 @@ void Playlist::MoveSelectedItems(Movement where)
if (Items->hasSelected())
{
std::vector<size_t> list;
myPlaylist->Items->GetSelected(list);
myPlaylist->Items->getSelected(list);
if (list.front() > 0)
{
Mpd.StartCommandsList();
@@ -404,17 +403,17 @@ void Playlist::MoveSelectedItems(Movement where)
{
Items->at(list.back()).setSelected(false);
Items->at(list.front()-1).setSelected(true);
Items->Highlight(list[(list.size()-1)/2]-1);
Items->highlight(list[(list.size()-1)/2]-1);
}
}
}
else
{
size_t pos = myPlaylist->Items->Choice();
size_t pos = myPlaylist->Items->choice();
if (pos > 0)
{
if (Mpd.Move(pos-1, pos))
Items->Scroll(NC::wUp);
Items->scroll(NC::wUp);
}
}
break;
@@ -424,9 +423,9 @@ void Playlist::MoveSelectedItems(Movement where)
if (Items->hasSelected())
{
std::vector<size_t> list;
Items->GetSelected(list);
Items->getSelected(list);
if (list.back() < Items->Size()-1)
if (list.back() < Items->size()-1)
{
Mpd.StartCommandsList();
std::vector<size_t>::const_reverse_iterator it = list.rbegin();
@@ -436,17 +435,17 @@ void Playlist::MoveSelectedItems(Movement where)
{
Items->at(list.front()).setSelected(false);
Items->at(list.back()+1).setSelected(true);
Items->Highlight(list[(list.size()-1)/2]+1);
Items->highlight(list[(list.size()-1)/2]+1);
}
}
}
else
{
size_t pos = Items->Choice();
if (pos < Items->Size()-1)
size_t pos = Items->choice();
if (pos < Items->size()-1)
{
if (Mpd.Move(pos, pos+1))
Items->Scroll(NC::wDown);
Items->scroll(NC::wDown);
}
}
break;
@@ -458,11 +457,11 @@ void Playlist::Sort()
{
if (isFiltered())
return;
if (Items->GetWidth() < SortDialogWidth || MainHeight < 5)
if (Items->getWidth() < SortDialogWidth || MainHeight < 5)
ShowMessage("Screen is too small to display dialog window");
else
{
SortDialog->Reset();
SortDialog->reset();
w = SortDialog;
}
}
@@ -473,7 +472,7 @@ void Playlist::Reverse()
return;
ShowMessage("Reversing playlist order...");
size_t beginning = -1, end = -1;
for (size_t i = 0; i < Items->Size(); ++i)
for (size_t i = 0; i < Items->size(); ++i)
{
if (Items->at(i).isSelected())
{
@@ -485,7 +484,7 @@ void Playlist::Reverse()
if (beginning == size_t(-1)) // no selected items
{
beginning = 0;
end = Items->Size();
end = Items->size();
}
Mpd.StartCommandsList();
for (size_t i = beginning, j = end-1; i < (beginning+end)/2; ++i, --j)
@@ -500,21 +499,21 @@ void Playlist::AdjustSortOrder(Movement where)
{
case mUp:
{
size_t pos = SortDialog->Choice();
size_t pos = SortDialog->choice();
if (pos > 0 && pos < SortOptions)
{
SortDialog->Swap(pos, pos-1);
SortDialog->Scroll(NC::wUp);
SortDialog->scroll(NC::wUp);
}
break;
}
case mDown:
{
size_t pos = SortDialog->Choice();
size_t pos = SortDialog->choice();
if (pos < SortOptions-1)
{
SortDialog->Swap(pos, pos+1);
SortDialog->Scroll(NC::wDown);
SortDialog->scroll(NC::wDown);
}
break;
}
@@ -523,7 +522,7 @@ void Playlist::AdjustSortOrder(Movement where)
void Playlist::EnableHighlighting()
{
Items->Highlighting(1);
Items->setHighlighting(1);
UpdateTimer();
}
@@ -539,26 +538,26 @@ std::string Playlist::TotalLength()
if (ReloadTotalLength)
{
itsTotalLength = 0;
for (size_t i = 0; i < Items->Size(); ++i)
for (size_t i = 0; i < Items->size(); ++i)
itsTotalLength += (*Items)[i].value().getDuration();
ReloadTotalLength = 0;
}
if (Config.playlist_show_remaining_time && ReloadRemaining && !Items->isFiltered())
{
itsRemainingTime = 0;
for (size_t i = NowPlaying; i < Items->Size(); ++i)
for (size_t i = NowPlaying; i < Items->size(); ++i)
itsRemainingTime += (*Items)[i].value().getDuration();
ReloadRemaining = false;
}
result << '(' << Items->Size() << (Items->Size() == 1 ? " item" : " items");
result << '(' << Items->size() << (Items->size() == 1 ? " item" : " items");
if (Items->isFiltered())
{
Items->ShowAll();
size_t real_size = Items->Size();
Items->ShowFiltered();
if (Items->Size() != real_size)
Items->showAll();
size_t real_size = Items->size();
Items->showFiltered();
if (Items->size() != real_size)
result << " (out of " << Mpd.GetPlaylistLength() << ")";
}
@@ -567,7 +566,7 @@ std::string Playlist::TotalLength()
result << ", length: ";
ShowTime(result, itsTotalLength, Config.playlist_shorten_total_times);
}
if (Config.playlist_show_remaining_time && itsRemainingTime && !Items->isFiltered() && Items->Size() > 1)
if (Config.playlist_show_remaining_time && itsRemainingTime && !Items->isFiltered() && Items->size() > 1)
{
result << " :: remaining: ";
ShowTime(result, itsRemainingTime, Config.playlist_shorten_total_times);
@@ -579,10 +578,10 @@ std::string Playlist::TotalLength()
const MPD::Song *Playlist::NowPlayingSong()
{
bool was_filtered = Items->isFiltered();
Items->ShowAll();
Items->showAll();
const MPD::Song *s = isPlaying() ? &Items->at(NowPlaying).value() : 0;
if (was_filtered)
Items->ShowFiltered();
Items->showFiltered();
return s;
}
@@ -593,7 +592,7 @@ bool Playlist::Add(const MPD::Song &s, bool in_playlist, bool play, int position
unsigned hash = s.getHash();
if (play)
{
for (size_t i = 0; i < Items->Size(); ++i)
for (size_t i = 0; i < Items->size(); ++i)
{
if (Items->at(i).value().getHash() == hash)
{
@@ -606,12 +605,12 @@ bool Playlist::Add(const MPD::Song &s, bool in_playlist, bool play, int position
else
{
Mpd.StartCommandsList();
for (size_t i = 0; i < Items->Size(); ++i)
for (size_t i = 0; i < Items->size(); ++i)
{
if ((*Items)[i].value().getHash() == hash)
{
Mpd.Delete(i);
Items->DeleteItem(i);
Items->deleteItem(i);
i--;
}
}
@@ -662,21 +661,21 @@ bool Playlist::Add(const MPD::SongList &l, bool play, int position)
void Playlist::PlayNewlyAddedSongs()
{
bool is_filtered = Items->isFiltered();
Items->ShowAll();
size_t old_size = Items->Size();
Items->showAll();
size_t old_size = Items->size();
Mpd.UpdateStatus();
if (old_size < Items->Size())
if (old_size < Items->size())
Mpd.Play(old_size);
if (is_filtered)
Items->ShowFiltered();
Items->showFiltered();
}
void Playlist::SetSelectedItemsPriority(int prio)
{
std::vector<size_t> list;
myPlaylist->Items->GetSelected(list);
myPlaylist->Items->getSelected(list);
if (list.empty())
list.push_back(Items->Choice());
list.push_back(Items->choice());
Mpd.StartCommandsList();
for (std::vector<size_t>::const_iterator it = list.begin(); it != list.end(); ++it)
Mpd.SetPriority((*Items)[*it].value(), prio);
@@ -686,7 +685,7 @@ void Playlist::SetSelectedItemsPriority(int prio)
bool Playlist::checkForSong (const MPD::Song &s)
{
for (size_t i = 0; i < Items->Size(); ++i)
for (size_t i = 0; i < Items->size(); ++i)
if (s.getHash() == (*Items)[i].value().getHash())
return true;
return false;

View File

@@ -64,7 +64,7 @@ class Playlist : public Screen<NC::Window>, public Filterable, public HasSongs,
virtual bool isMergable() { return true; }
bool isFiltered();
bool isPlaying() { return NowPlaying >= 0 && !Items->Empty(); }
bool isPlaying() { return NowPlaying >= 0 && !Items->empty(); }
const MPD::Song *NowPlayingSong();
void MoveSelectedItems(Movement where);

View File

@@ -59,19 +59,19 @@ void PlaylistEditor::Init()
RightColumnWidth = COLS-LeftColumnWidth-1;
Playlists = new NC::Menu<std::string>(0, MainStartY, LeftColumnWidth, MainHeight, Config.titles_visibility ? "Playlists" : "", Config.main_color, NC::brNone);
Playlists->HighlightColor(Config.active_column_color);
Playlists->CyclicScrolling(Config.use_cyclic_scrolling);
Playlists->CenteredCursor(Config.centered_cursor);
Playlists->SetSelectPrefix(Config.selected_item_prefix);
Playlists->SetSelectSuffix(Config.selected_item_suffix);
Playlists->setHighlightColor(Config.active_column_color);
Playlists->cyclicScrolling(Config.use_cyclic_scrolling);
Playlists->centeredCursor(Config.centered_cursor);
Playlists->setSelectedPrefix(Config.selected_item_prefix);
Playlists->setSelectedSuffix(Config.selected_item_suffix);
Playlists->setItemDisplayer(Display::Default<std::string>);
Content = new NC::Menu<MPD::Song>(RightColumnStartX, MainStartY, RightColumnWidth, MainHeight, Config.titles_visibility ? "Playlist content" : "", Config.main_color, NC::brNone);
Content->HighlightColor(Config.main_highlight_color);
Content->CyclicScrolling(Config.use_cyclic_scrolling);
Content->CenteredCursor(Config.centered_cursor);
Content->SetSelectPrefix(Config.selected_item_prefix);
Content->SetSelectSuffix(Config.selected_item_suffix);
Content->setHighlightColor(Config.main_highlight_color);
Content->cyclicScrolling(Config.use_cyclic_scrolling);
Content->centeredCursor(Config.centered_cursor);
Content->setSelectedPrefix(Config.selected_item_prefix);
Content->setSelectedSuffix(Config.selected_item_suffix);
if (Config.columns_in_playlist_editor)
Content->setItemDisplayer(std::bind(Display::SongsInColumns, _1, *this));
else
@@ -91,11 +91,11 @@ void PlaylistEditor::Resize()
RightColumnStartX = LeftColumnStartX+LeftColumnWidth+1;
RightColumnWidth = width-LeftColumnWidth-1;
Playlists->Resize(LeftColumnWidth, MainHeight);
Content->Resize(RightColumnWidth, MainHeight);
Playlists->resize(LeftColumnWidth, MainHeight);
Content->resize(RightColumnWidth, MainHeight);
Playlists->MoveTo(LeftColumnStartX, MainStartY);
Content->MoveTo(RightColumnStartX, MainStartY);
Playlists->moveTo(LeftColumnStartX, MainStartY);
Content->moveTo(RightColumnStartX, MainStartY);
hasToBeResized = 0;
}
@@ -107,9 +107,9 @@ std::basic_string<my_char_t> PlaylistEditor::Title()
void PlaylistEditor::Refresh()
{
Playlists->Display();
Playlists->display();
mvvline(MainStartY, RightColumnStartX-1, 0, MainHeight);
Content->Display();
Content->display();
}
void PlaylistEditor::SwitchTo()
@@ -139,23 +139,23 @@ void PlaylistEditor::SwitchTo()
void PlaylistEditor::Update()
{
if (Playlists->ReallyEmpty())
if (Playlists->reallyEmpty())
{
Content->Clear();
Content->clear();
auto list = Mpd.GetPlaylists();
std::sort(list.begin(), list.end(), CaseInsensitiveSorting());
for (auto it = list.begin(); it != list.end(); ++it)
Playlists->AddItem(*it);
Playlists->Refresh();
Playlists->addItem(*it);
Playlists->refresh();
}
if (!Playlists->Empty() && Content->ReallyEmpty())
if (!Playlists->empty() && Content->reallyEmpty())
{
Content->Reset();
Content->reset();
size_t plsize = 0;
auto songs = Mpd.GetPlaylistContent(Playlists->Current().value());
auto songs = Mpd.GetPlaylistContent(Playlists->current().value());
for (auto s = songs.begin(); s != songs.end(); ++s, ++plsize)
Content->AddItem(*s, myPlaylist->checkForSong(*s));
Content->addItem(*s, myPlaylist->checkForSong(*s));
std::string title;
if (Config.titles_visibility)
{
@@ -170,29 +170,29 @@ void PlaylistEditor::Update()
else
title += "s)";
}
title.resize(Content->GetWidth());
title.resize(Content->getWidth());
}
Content->SetTitle(title);
Content->Display();
Content->setTitle(title);
Content->display();
}
if (w == Content && Content->ReallyEmpty())
if (w == Content && Content->reallyEmpty())
{
Content->HighlightColor(Config.main_highlight_color);
Playlists->HighlightColor(Config.active_column_color);
Content->setHighlightColor(Config.main_highlight_color);
Playlists->setHighlightColor(Config.active_column_color);
w = Playlists;
}
if (Content->ReallyEmpty())
if (Content->reallyEmpty())
{
*Content << NC::XY(0, 0) << "Playlist is empty.";
Content->Window::Refresh();
Content->Window::refresh();
}
}
void PlaylistEditor::MoveSelectedItems(Playlist::Movement where)
{
if (Content->Empty())
if (Content->empty())
return;
// remove search results as we may move them to different positions, but
@@ -206,30 +206,30 @@ void PlaylistEditor::MoveSelectedItems(Playlist::Movement where)
if (Content->hasSelected())
{
std::vector<size_t> list;
Content->GetSelected(list);
Content->getSelected(list);
if (list.front() > 0)
{
Mpd.StartCommandsList();
std::vector<size_t>::const_iterator it = list.begin();
for (; it != list.end(); ++it)
Mpd.Move(Playlists->Current().value(), *it-1, *it);
Mpd.Move(Playlists->current().value(), *it-1, *it);
if (Mpd.CommitCommandsList())
{
for (it = list.begin(); it != list.end(); ++it)
Content->Swap(*it-1, *it);
Content->Highlight(list[(list.size()-1)/2]-1);
Content->highlight(list[(list.size()-1)/2]-1);
}
}
}
else
{
size_t pos = Content->Choice();
size_t pos = Content->choice();
if (pos > 0)
{
if (Mpd.Move(Playlists->Current().value(), pos-1, pos))
if (Mpd.Move(Playlists->current().value(), pos-1, pos))
{
Content->Scroll(NC::wUp);
Content->scroll(NC::wUp);
Content->Swap(pos-1, pos);
}
}
@@ -241,17 +241,17 @@ void PlaylistEditor::MoveSelectedItems(Playlist::Movement where)
if (Content->hasSelected())
{
std::vector<size_t> list;
Content->GetSelected(list);
Content->getSelected(list);
if (list.back() < Content->Size()-1)
if (list.back() < Content->size()-1)
{
Mpd.StartCommandsList();
std::vector<size_t>::const_reverse_iterator it = list.rbegin();
for (; it != list.rend(); ++it)
Mpd.Move(Playlists->Current().value(), *it, *it+1);
Mpd.Move(Playlists->current().value(), *it, *it+1);
if (Mpd.CommitCommandsList())
{
Content->Highlight(list[(list.size()-1)/2]+1);
Content->highlight(list[(list.size()-1)/2]+1);
for (it = list.rbegin(); it != list.rend(); ++it)
Content->Swap(*it, *it+1);
}
@@ -259,12 +259,12 @@ void PlaylistEditor::MoveSelectedItems(Playlist::Movement where)
}
else
{
size_t pos = Content->Choice();
if (pos < Content->Size()-1)
size_t pos = Content->choice();
if (pos < Content->size()-1)
{
if (Mpd.Move(Playlists->Current().value(), pos, pos+1))
if (Mpd.Move(Playlists->current().value(), pos, pos+1))
{
Content->Scroll(NC::wDown);
Content->scroll(NC::wDown);
Content->Swap(pos, pos+1);
}
}
@@ -289,7 +289,7 @@ bool PlaylistEditor::isNextColumnAvailable()
{
if (w == Playlists)
{
if (!Content->ReallyEmpty())
if (!Content->reallyEmpty())
return true;
}
return false;
@@ -299,10 +299,10 @@ bool PlaylistEditor::NextColumn()
{
if (w == Playlists)
{
Playlists->HighlightColor(Config.main_highlight_color);
w->Refresh();
Playlists->setHighlightColor(Config.main_highlight_color);
w->refresh();
w = Content;
Content->HighlightColor(Config.active_column_color);
Content->setHighlightColor(Config.active_column_color);
return true;
}
return false;
@@ -312,7 +312,7 @@ bool PlaylistEditor::isPrevColumnAvailable()
{
if (w == Content)
{
if (!Playlists->ReallyEmpty())
if (!Playlists->reallyEmpty())
return true;
}
return false;
@@ -322,10 +322,10 @@ bool PlaylistEditor::PrevColumn()
{
if (w == Content)
{
Content->HighlightColor(Config.main_highlight_color);
w->Refresh();
Content->setHighlightColor(Config.main_highlight_color);
w->refresh();
w = Playlists;
Playlists->HighlightColor(Config.active_column_color);
Playlists->setHighlightColor(Config.active_column_color);
return true;
}
return false;
@@ -335,23 +335,23 @@ void PlaylistEditor::AddToPlaylist(bool add_n_play)
{
MPD::SongList list;
if (w == Playlists && !Playlists->Empty())
if (w == Playlists && !Playlists->empty())
{
if (Mpd.LoadPlaylist(utf_to_locale_cpy(Playlists->Current().value())))
if (Mpd.LoadPlaylist(utf_to_locale_cpy(Playlists->current().value())))
{
ShowMessage("Playlist \"%s\" loaded", Playlists->Current().value().c_str());
ShowMessage("Playlist \"%s\" loaded", Playlists->current().value().c_str());
if (add_n_play)
myPlaylist->PlayNewlyAddedSongs();
}
}
else if (w == Content && !Content->Empty())
else if (w == Content && !Content->empty())
{
bool res = myPlaylist->Add(Content->Current().value(), Content->Current().isBold(), add_n_play);
Content->Current().setBold(res);
bool res = myPlaylist->Add(Content->current().value(), Content->current().isBold(), add_n_play);
Content->current().setBold(res);
}
if (!add_n_play)
w->Scroll(NC::wDown);
w->scroll(NC::wDown);
}
void PlaylistEditor::SpacePressed()
@@ -360,18 +360,18 @@ void PlaylistEditor::SpacePressed()
{
if (w == Playlists)
{
if (!Playlists->Empty())
if (!Playlists->empty())
{
Playlists->Current().setSelected(!Playlists->Current().isSelected());
Playlists->Scroll(NC::wDown);
Playlists->current().setSelected(!Playlists->current().isSelected());
Playlists->scroll(NC::wDown);
}
}
else if (w == Content)
{
if (!Content->Empty())
if (!Content->empty())
{
Content->Current().setSelected(!Content->Current().isSelected());
Content->Scroll(NC::wDown);
Content->current().setSelected(!Content->current().isSelected());
Content->scroll(NC::wDown);
}
}
}
@@ -381,38 +381,38 @@ void PlaylistEditor::SpacePressed()
void PlaylistEditor::MouseButtonPressed(MEVENT me)
{
if (!Playlists->Empty() && Playlists->hasCoords(me.x, me.y))
if (!Playlists->empty() && Playlists->hasCoords(me.x, me.y))
{
if (w != Playlists)
PrevColumn();
if (size_t(me.y) < Playlists->Size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
if (size_t(me.y) < Playlists->size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
{
Playlists->Goto(me.y);
if (me.bstate & BUTTON3_PRESSED)
{
size_t pos = Playlists->Choice();
size_t pos = Playlists->choice();
SpacePressed();
if (pos < Playlists->Size()-1)
Playlists->Scroll(NC::wUp);
if (pos < Playlists->size()-1)
Playlists->scroll(NC::wUp);
}
}
else
Screen<NC::Window>::MouseButtonPressed(me);
Content->Clear();
Content->clear();
}
else if (!Content->Empty() && Content->hasCoords(me.x, me.y))
else if (!Content->empty() && Content->hasCoords(me.x, me.y))
{
if (w != Content)
NextColumn();
if (size_t(me.y) < Content->Size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
if (size_t(me.y) < Content->size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
{
Content->Goto(me.y);
if (me.bstate & BUTTON1_PRESSED)
{
size_t pos = Content->Choice();
size_t pos = Content->choice();
SpacePressed();
if (pos < Content->Size()-1)
Content->Scroll(NC::wUp);
if (pos < Content->size()-1)
Content->scroll(NC::wUp);
}
else
EnterPressed();
@@ -438,15 +438,15 @@ void PlaylistEditor::applyFilter(const std::string &filter)
{
if (w == Playlists)
{
Playlists->ShowAll();
Playlists->showAll();
auto rx = RegexFilter<std::string>(filter, Config.regex_type, PlaylistEntryMatcher);
Playlists->filter(Playlists->Begin(), Playlists->End(), rx);
Playlists->filter(Playlists->begin(), Playlists->end(), rx);
}
else if (w == Content)
{
Content->ShowAll();
Content->showAll();
auto rx = RegexFilter<MPD::Song>(filter, Config.regex_type, SongEntryMatcher);
Content->filter(Content->Begin(), Content->End(), rx);
Content->filter(Content->begin(), Content->end(), rx);
}
}
@@ -458,12 +458,12 @@ bool PlaylistEditor::search(const std::string &constraint)
if (w == Playlists)
{
auto rx = RegexFilter<std::string>(constraint, Config.regex_type, PlaylistEntryMatcher);
result = Playlists->search(Playlists->Begin(), Playlists->End(), rx);
result = Playlists->search(Playlists->begin(), Playlists->end(), rx);
}
else if (w == Content)
{
auto rx = RegexFilter<MPD::Song>(constraint, Config.regex_type, SongEntryMatcher);
result = Content->search(Content->Begin(), Content->End(), rx);
result = Content->search(Content->begin(), Content->end(), rx);
}
return result;
}
@@ -471,17 +471,17 @@ bool PlaylistEditor::search(const std::string &constraint)
void PlaylistEditor::nextFound(bool wrap)
{
if (w == Playlists)
Playlists->NextFound(wrap);
Playlists->nextFound(wrap);
else if (w == Content)
Content->NextFound(wrap);
Content->nextFound(wrap);
}
void PlaylistEditor::prevFound(bool wrap)
{
if (w == Playlists)
Playlists->PrevFound(wrap);
Playlists->prevFound(wrap);
else if (w == Content)
Content->PrevFound(wrap);
Content->prevFound(wrap);
}
/***********************************************************************/
@@ -504,9 +504,9 @@ bool PlaylistEditor::allowsSelection()
void PlaylistEditor::reverseSelection()
{
if (w == Playlists)
reverseSelectionHelper(Playlists->Begin(), Playlists->End());
reverseSelectionHelper(Playlists->begin(), Playlists->end());
else if (w == Content)
reverseSelectionHelper(Content->Begin(), Content->End());
reverseSelectionHelper(Content->begin(), Content->end());
}
MPD::SongList PlaylistEditor::getSelectedSongs()
@@ -515,7 +515,7 @@ MPD::SongList PlaylistEditor::getSelectedSongs()
if (w == Playlists)
{
bool any_selected = false;
for (auto it = Playlists->Begin(); it != Playlists->End(); ++it)
for (auto it = Playlists->begin(); it != Playlists->end(); ++it)
{
if (it->isSelected())
{
@@ -526,21 +526,21 @@ MPD::SongList PlaylistEditor::getSelectedSongs()
}
// we don't check for empty result here as it's possible that
// all selected playlists are empty.
if (!any_selected && !Content->Empty())
if (!any_selected && !Content->empty())
{
withUnfilteredMenu(*Content, [this, &result]() {
result.insert(result.end(), Content->BeginV(), Content->EndV());
result.insert(result.end(), Content->beginV(), Content->endV());
});
}
}
else if (w == Content)
{
for (auto it = Content->Begin(); it != Content->End(); ++it)
for (auto it = Content->begin(); it != Content->end(); ++it)
if (it->isSelected())
result.push_back(it->value());
// if no item is selected, add current one
if (result.empty() && !Content->Empty())
result.push_back(Content->Current().value());
if (result.empty() && !Content->empty())
result.push_back(Content->current().value());
}
return result;
}
@@ -552,12 +552,12 @@ void PlaylistEditor::Locate(const std::string &name)
if (!isInitialized)
Init();
Update();
for (size_t i = 0; i < Playlists->Size(); ++i)
for (size_t i = 0; i < Playlists->size(); ++i)
{
if (name == (*Playlists)[i].value())
{
Playlists->Highlight(i);
Content->Clear();
Playlists->highlight(i);
Content->clear();
break;
}
}

View File

@@ -59,10 +59,10 @@ class ProxySongList
Impl(Menu &menu, F f) : m_menu(menu), m_song_getter(f) { }
virtual ~Impl() { }
virtual bool empty() { return m_menu.Empty(); }
virtual size_t size() { return m_menu.Size(); }
virtual size_t choice() { return m_menu.Choice(); }
virtual void highlight(size_t pos) { m_menu.Highlight(pos); }
virtual bool empty() { return m_menu.empty(); }
virtual size_t size() { return m_menu.size(); }
virtual size_t choice() { return m_menu.choice(); }
virtual void highlight(size_t pos) { m_menu.highlight(pos); }
virtual bool isSelected(size_t pos) {
return m_menu[pos].isSelected();
@@ -77,8 +77,8 @@ class ProxySongList
}
virtual MPD::Song *currentSong() {
if (!m_menu.Empty())
return getSong(m_menu.Choice());
if (!m_menu.empty())
return getSong(m_menu.choice());
else
return 0;
}

View File

@@ -45,18 +45,18 @@ void GenericMouseButtonPressed(NC::Window *w, MEVENT me)
if (me.bstate & BUTTON2_PRESSED)
{
if (Config.mouse_list_scroll_whole_page)
w->Scroll(NC::wPageDown);
w->scroll(NC::wPageDown);
else
for (size_t i = 0; i < Config.lines_scrolled; ++i)
w->Scroll(NC::wDown);
w->scroll(NC::wDown);
}
else if (me.bstate & BUTTON4_PRESSED)
{
if (Config.mouse_list_scroll_whole_page)
w->Scroll(NC::wPageUp);
w->scroll(NC::wPageUp);
else
for (size_t i = 0; i < Config.lines_scrolled; ++i)
w->Scroll(NC::wUp);
w->scroll(NC::wUp);
}
}
@@ -65,12 +65,12 @@ void ScrollpadMouseButtonPressed(NC::Scrollpad *w, MEVENT me)
if (me.bstate & BUTTON2_PRESSED)
{
for (size_t i = 0; i < Config.lines_scrolled; ++i)
w->Scroll(NC::wDown);
w->scroll(NC::wDown);
}
else if (me.bstate & BUTTON4_PRESSED)
{
for (size_t i = 0; i < Config.lines_scrolled; ++i)
w->Scroll(NC::wUp);
w->scroll(NC::wUp);
}
}

View File

@@ -180,17 +180,17 @@ template <typename WindowType> WindowType *Screen<WindowType>::Main()
template <typename WindowType> void Screen<WindowType>::Refresh()
{
w->Display();
w->display();
}
template <typename WindowType> void Screen<WindowType>::RefreshWindow()
{
w->Display();
w->display();
}
template <typename WindowType> void Screen<WindowType>::Scroll(NC::Where where)
{
w->Scroll(where);
w->scroll(where);
}
template <typename WindowType> void Screen<WindowType>::MouseButtonPressed(MEVENT me)

View File

@@ -32,25 +32,25 @@ Scrollpad::Scrollpad(size_t startx,
Color color,
Border border)
: Window(startx, starty, width, height, title, color, border),
itsBeginning(0),
itsFoundValueBegin(-1),
itsFoundValueEnd(-1),
itsRealHeight(1)
m_beginning(0),
m_found_value_begin(-1),
m_found_value_end(-1),
m_real_height(1)
{
}
Scrollpad::Scrollpad(const Scrollpad &s) : Window(s)
{
itsBuffer << s.itsBuffer;
itsBeginning = s.itsBeginning;
itsRealHeight = s.itsRealHeight;
m_buffer << s.m_buffer;
m_beginning = s.m_beginning;
m_real_height = s.m_real_height;
}
void Scrollpad::Flush()
void Scrollpad::flush()
{
itsRealHeight = 1;
m_real_height = 1;
std::basic_string<my_char_t> s = itsBuffer.Str();
std::basic_string<my_char_t> s = m_buffer.str();
size_t x = 0;
int x_pos = 0;
@@ -66,7 +66,7 @@ void Scrollpad::Flush()
x_pos = x;
}
if (x >= itsWidth)
if (x >= m_width)
{
// if line is over, there was at least one space in this line and we are in the middle of the word, restore position to last known space and make it EOL
if (space_pos > 0 && (s[i] != ' ' || s[i+1] != ' '))
@@ -77,133 +77,133 @@ void Scrollpad::Flush()
}
}
if (x >= itsWidth || s[i] == '\n')
if (x >= m_width || s[i] == '\n')
{
itsRealHeight++;
m_real_height++;
x = 0;
space_pos = 0;
}
}
itsRealHeight = std::max(itsHeight, itsRealHeight);
Recreate(itsWidth, itsRealHeight);
m_real_height = std::max(m_height, m_real_height);
recreate(m_width, m_real_height);
// print our modified string
std::swap(s, itsBuffer.itsString);
static_cast<Window &>(*this) << itsBuffer;
std::swap(s, m_buffer.m_string);
static_cast<Window &>(*this) << m_buffer;
// restore original one
std::swap(s, itsBuffer.itsString);
std::swap(s, m_buffer.m_string);
}
bool Scrollpad::SetFormatting(short val_b, const std::basic_string<my_char_t> &s, short val_e, bool case_sensitive, bool for_each)
bool Scrollpad::setFormatting(short val_b, const std::basic_string<my_char_t> &s, short val_e, bool case_sensitive, bool for_each)
{
bool result = itsBuffer.SetFormatting(val_b, s, val_e, case_sensitive, for_each);
bool result = m_buffer.setFormatting(val_b, s, val_e, case_sensitive, for_each);
if (result)
{
itsFoundForEach = for_each;
itsFoundCaseSensitive = case_sensitive;
itsFoundValueBegin = val_b;
itsFoundValueEnd = val_e;
itsFoundPattern = s;
m_found_for_each = for_each;
m_found_case_sensitive = case_sensitive;
m_found_value_begin = val_b;
m_found_value_end = val_e;
m_found_pattern = s;
}
else
ForgetFormatting();
forgetFormatting();
return result;
}
void Scrollpad::ForgetFormatting()
void Scrollpad::forgetFormatting()
{
itsFoundValueBegin = -1;
itsFoundValueEnd = -1;
itsFoundPattern.clear();
m_found_value_begin = -1;
m_found_value_end = -1;
m_found_pattern.clear();
}
void Scrollpad::RemoveFormatting()
void Scrollpad::removeFormatting()
{
if (itsFoundValueBegin >= 0 && itsFoundValueEnd >= 0)
itsBuffer.RemoveFormatting(itsFoundValueBegin, itsFoundPattern, itsFoundValueEnd, itsFoundCaseSensitive, itsFoundForEach);
if (m_found_value_begin >= 0 && m_found_value_end >= 0)
m_buffer.removeFormatting(m_found_value_begin, m_found_pattern, m_found_value_end, m_found_case_sensitive, m_found_for_each);
}
void Scrollpad::Refresh()
void Scrollpad::refresh()
{
int MaxBeginning = itsRealHeight-itsHeight;
int MaxBeginning = m_real_height-m_height;
assert(MaxBeginning >= 0);
if (itsBeginning > MaxBeginning)
itsBeginning = MaxBeginning;
prefresh(itsWindow, itsBeginning, 0, itsStartY, itsStartX, itsStartY+itsHeight-1, itsStartX+itsWidth-1);
if (m_beginning > MaxBeginning)
m_beginning = MaxBeginning;
prefresh(m_window, m_beginning, 0, m_start_y, m_start_x, m_start_y+m_height-1, m_start_x+m_width-1);
}
void Scrollpad::Resize(size_t new_width, size_t new_height)
void Scrollpad::resize(size_t new_width, size_t new_height)
{
AdjustDimensions(new_width, new_height);
Flush();
adjustDimensions(new_width, new_height);
flush();
}
void Scrollpad::Scroll(Where where)
void Scrollpad::scroll(Where where)
{
int MaxBeginning = /*itsContent.size() < itsHeight ? 0 : */itsRealHeight-itsHeight;
int MaxBeginning = /*itsContent.size() < m_height ? 0 : */m_real_height-m_height;
switch (where)
{
case wUp:
{
if (itsBeginning > 0)
itsBeginning--;
if (m_beginning > 0)
m_beginning--;
break;
}
case wDown:
{
if (itsBeginning < MaxBeginning)
itsBeginning++;
if (m_beginning < MaxBeginning)
m_beginning++;
break;
}
case wPageUp:
{
itsBeginning -= itsHeight;
if (itsBeginning < 0)
itsBeginning = 0;
m_beginning -= m_height;
if (m_beginning < 0)
m_beginning = 0;
break;
}
case wPageDown:
{
itsBeginning += itsHeight;
if (itsBeginning > MaxBeginning)
itsBeginning = MaxBeginning;
m_beginning += m_height;
if (m_beginning > MaxBeginning)
m_beginning = MaxBeginning;
break;
}
case wHome:
{
itsBeginning = 0;
m_beginning = 0;
break;
}
case wEnd:
{
itsBeginning = MaxBeginning;
m_beginning = MaxBeginning;
break;
}
}
}
void Scrollpad::Clear()
void Scrollpad::clear()
{
itsRealHeight = itsHeight;
itsBuffer.Clear();
wclear(itsWindow);
delwin(itsWindow);
itsWindow = newpad(itsHeight, itsWidth);
SetTimeout(itsWindowTimeout);
SetColor(itsColor, itsBgColor);
ForgetFormatting();
keypad(itsWindow, 1);
m_real_height = m_height;
m_buffer.clear();
wclear(m_window);
delwin(m_window);
m_window = newpad(m_height, m_width);
setTimeout(m_window_timeout);
setColor(m_color, m_bg_color);
forgetFormatting();
keypad(m_window, 1);
}
void Scrollpad::Reset()
void Scrollpad::reset()
{
itsBeginning = 0;
m_beginning = 0;
}
#ifdef _UTF8
Scrollpad &Scrollpad::operator<<(const std::string &s)
{
itsBuffer << ToWString(s);
m_buffer << ToWString(s);
return *this;
}
#endif // _UTF8

View File

@@ -28,7 +28,6 @@ namespace NC
{
/// Scrollpad is specialized window that can hold large portion of text and
/// supports scrolling if the amount of it is bigger than the window area.
///
class Scrollpad: public Window
{
public:
@@ -40,20 +39,17 @@ namespace NC
/// @param title title of constructed window
/// @param color base color of constructed window
/// @param border border of constructed window
///
Scrollpad(size_t startx, size_t starty, size_t width, size_t height,
const std::string &title, Color color, Border border);
/// Copies the scrollpad
/// @param s copied scrollpad
///
Scrollpad(const Scrollpad &s);
/// Prints the text stored in internal buffer to window. Note that
/// all changes that has been made for text stored in scrollpad won't
/// be visible until one invokes this function
///
void Flush();
void flush();
/// Searches for given string in text and sets format/color at the
/// beginning and end of it using val_b and val_e flags accordingly
@@ -64,52 +60,49 @@ namespace NC
/// @param for_each indicates whether function searches through whole text and sets
/// given format for all occurences of given string or stops after first occurence
/// @return true if at least one occurence of the string was found, false otherwise
/// @see basic_buffer::SetFormatting()
///
bool SetFormatting(short val_b, const std::basic_string<my_char_t> &s,
/// @see basic_buffer::setFormatting()
bool setFormatting(short val_b, const std::basic_string<my_char_t> &s,
short val_e, bool case_sensitive, bool for_each = 1);
/// Removes all format flags and colors from stored text
///
void ForgetFormatting();
void forgetFormatting();
/// Removes all format flags and colors that was applied
/// by the most recent call to SetFormatting() function
/// @see SetFormatting()
/// @see basic_buffer::RemoveFormatting()
///
void RemoveFormatting();
/// by the most recent call to setFormatting() function
/// @see setFormatting()
/// @see basic_buffer::removeFormatting()
void removeFormatting();
/// @return text stored in internal buffer
///
std::basic_string<my_char_t> Content() { return itsBuffer.Str(); }
const std::basic_string<my_char_t> &content() { return m_buffer.str(); }
/// Refreshes the window
/// @see Window::Refresh()
///
virtual void Refresh();
virtual void refresh();
/// Scrolls by given amount of lines
/// @param where indicates where exactly one wants to go
/// @see Window::Scroll()
///
virtual void Scroll(Where where);
virtual void scroll(Where where);
/// Resizes the window
/// @param new_width new window's width
/// @param new_height new window's height
/// @see Window::Resize()
///
virtual void Resize(size_t new_width, size_t new_height);
virtual void resize(size_t new_width, size_t new_height);
/// Cleares the content of scrollpad
/// @see Window::Clear()
/// @see Window::clear()
///
virtual void Clear();
virtual void clear();
/// Sets starting position to the beginning
///
void Reset();
void reset();
/// Template function that redirects all data passed
/// to the scrollpad window to its internal buffer
@@ -118,7 +111,7 @@ namespace NC
///
template <typename T> Scrollpad &operator<<(const T &obj)
{
itsBuffer << obj;
m_buffer << obj;
return *this;
}
# ifdef _UTF8
@@ -126,17 +119,17 @@ namespace NC
# endif // _UTF8
private:
basic_buffer<my_char_t> itsBuffer;
basic_buffer<my_char_t> m_buffer;
int itsBeginning;
int m_beginning;
bool itsFoundForEach;
bool itsFoundCaseSensitive;
short itsFoundValueBegin;
short itsFoundValueEnd;
std::basic_string<my_char_t> itsFoundPattern;
bool m_found_for_each;
bool m_found_case_sensitive;
short m_found_value_begin;
short m_found_value_end;
std::basic_string<my_char_t> m_found_pattern;
size_t itsRealHeight;
size_t m_real_height;
};
}

View File

@@ -102,12 +102,12 @@ size_t SearchEngine::SearchButton = 15;
void SearchEngine::Init()
{
w = new NC::Menu<SEItem>(0, MainStartY, COLS, MainHeight, "", Config.main_color, NC::brNone);
w->HighlightColor(Config.main_highlight_color);
w->CyclicScrolling(Config.use_cyclic_scrolling);
w->CenteredCursor(Config.centered_cursor);
w->setHighlightColor(Config.main_highlight_color);
w->cyclicScrolling(Config.use_cyclic_scrolling);
w->centeredCursor(Config.centered_cursor);
w->setItemDisplayer(Display::SearchEngine);
w->SetSelectPrefix(Config.selected_item_prefix);
w->SetSelectSuffix(Config.selected_item_suffix);
w->setSelectedPrefix(Config.selected_item_prefix);
w->setSelectedSuffix(Config.selected_item_suffix);
SearchMode = &SearchModes[Config.search_engine_default_search_mode];
isInitialized = 1;
}
@@ -116,9 +116,9 @@ void SearchEngine::Resize()
{
size_t x_offset, width;
GetWindowResizeParams(x_offset, width);
w->Resize(width, MainHeight);
w->MoveTo(x_offset, MainStartY);
w->SetTitle(Config.columns_in_search_engine && Config.titles_visibility ? Display::Columns(w->GetWidth()) : "");
w->resize(width, MainHeight);
w->moveTo(x_offset, MainStartY);
w->setTitle(Config.columns_in_search_engine && Config.titles_visibility ? Display::Columns(w->getWidth()) : "");
hasToBeResized = 0;
}
@@ -129,7 +129,7 @@ void SearchEngine::SwitchTo()
if (myScreen == this)
{
Reset();
reset();
return;
}
@@ -142,7 +142,7 @@ void SearchEngine::SwitchTo()
if (hasToBeResized || myLockedScreen)
Resize();
if (w->Empty())
if (w->empty())
Prepare();
if (myScreen != this && myScreen->isTabbable())
@@ -150,7 +150,7 @@ void SearchEngine::SwitchTo()
myScreen = this;
Global::RedrawHeader = true;
if (!w->Back().value().isSong())
if (!w->back().value().isSong())
{
*w << NC::XY(0, 0) << "Updating list...";
UpdateFoundList();
@@ -164,9 +164,9 @@ std::basic_string<my_char_t> SearchEngine::Title()
void SearchEngine::EnterPressed()
{
size_t option = w->Choice();
size_t option = w->choice();
if (option > ConstraintsNumber && option < SearchButton)
w->Current().value().buffer().Clear();
w->current().value().buffer().clear();
if (option < SearchButton)
LockStatusbar();
@@ -174,59 +174,59 @@ void SearchEngine::EnterPressed()
{
std::string constraint = ConstraintsNames[option];
Statusbar() << NC::fmtBold << constraint << NC::fmtBoldEnd << ": ";
itsConstraints[option] = Global::wFooter->GetString(itsConstraints[option]);
w->Current().value().buffer().Clear();
itsConstraints[option] = Global::wFooter->getString(itsConstraints[option]);
w->current().value().buffer().clear();
constraint.resize(13, ' ');
w->Current().value().buffer() << NC::fmtBold << constraint << NC::fmtBoldEnd << ": ";
ShowTag(w->Current().value().buffer(), itsConstraints[option]);
w->current().value().buffer() << NC::fmtBold << constraint << NC::fmtBoldEnd << ": ";
ShowTag(w->current().value().buffer(), itsConstraints[option]);
}
else if (option == ConstraintsNumber+1)
{
Config.search_in_db = !Config.search_in_db;
w->Current().value().buffer() << NC::fmtBold << "Search in:" << NC::fmtBoldEnd << ' ' << (Config.search_in_db ? "Database" : "Current playlist");
w->current().value().buffer() << NC::fmtBold << "Search in:" << NC::fmtBoldEnd << ' ' << (Config.search_in_db ? "Database" : "Current playlist");
}
else if (option == ConstraintsNumber+2)
{
if (!*++SearchMode)
SearchMode = &SearchModes[0];
w->Current().value().buffer() << NC::fmtBold << "Search mode:" << NC::fmtBoldEnd << ' ' << *SearchMode;
w->current().value().buffer() << NC::fmtBold << "Search mode:" << NC::fmtBoldEnd << ' ' << *SearchMode;
}
else if (option == SearchButton)
{
w->ShowAll();
w->showAll();
ShowMessage("Searching...");
if (w->Size() > StaticOptions)
if (w->size() > StaticOptions)
Prepare();
Search();
if (w->Back().value().isSong())
if (w->back().value().isSong())
{
if (Config.columns_in_search_engine)
w->SetTitle(Config.titles_visibility ? Display::Columns(w->GetWidth()) : "");
size_t found = w->Size()-SearchEngine::StaticOptions;
w->setTitle(Config.titles_visibility ? Display::Columns(w->getWidth()) : "");
size_t found = w->size()-SearchEngine::StaticOptions;
found += 3; // don't count options inserted below
w->InsertSeparator(ResetButton+1);
w->InsertItem(ResetButton+2, SEItem(), 1, 1);
w->insertSeparator(ResetButton+1);
w->insertItem(ResetButton+2, SEItem(), 1, 1);
w->at(ResetButton+2).value().mkBuffer() << Config.color1 << "Search results: " << Config.color2 << "Found " << found << (found > 1 ? " songs" : " song") << NC::clDefault;
w->InsertSeparator(ResetButton+3);
w->insertSeparator(ResetButton+3);
UpdateFoundList();
ShowMessage("Searching finished");
if (Config.block_search_constraints_change)
for (size_t i = 0; i < StaticOptions-4; ++i)
w->at(i).setInactive(true);
w->Scroll(NC::wDown);
w->Scroll(NC::wDown);
w->scroll(NC::wDown);
w->scroll(NC::wDown);
}
else
ShowMessage("No results found");
}
else if (option == ResetButton)
{
Reset();
reset();
}
else
{
bool res = myPlaylist->Add(w->Current().value().song(), w->Current().isBold(), 1);
w->Current().setBold(res);
bool res = myPlaylist->Add(w->current().value().song(), w->current().isBold(), 1);
w->current().setBold(res);
}
if (option < SearchButton)
@@ -235,40 +235,40 @@ void SearchEngine::EnterPressed()
void SearchEngine::SpacePressed()
{
if (!w->Current().value().isSong())
if (!w->current().value().isSong())
return;
if (Config.space_selects)
{
w->Current().setSelected(!w->Current().isSelected());
w->Scroll(NC::wDown);
w->current().setSelected(!w->current().isSelected());
w->scroll(NC::wDown);
return;
}
bool res = myPlaylist->Add(w->Current().value().song(), w->Current().isBold(), 0);
w->Current().setBold(res);
w->Scroll(NC::wDown);
bool res = myPlaylist->Add(w->current().value().song(), w->current().isBold(), 0);
w->current().setBold(res);
w->scroll(NC::wDown);
}
void SearchEngine::MouseButtonPressed(MEVENT me)
{
if (w->Empty() || !w->hasCoords(me.x, me.y) || size_t(me.y) >= w->Size())
if (w->empty() || !w->hasCoords(me.x, me.y) || size_t(me.y) >= w->size())
return;
if (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED))
{
if (!w->Goto(me.y))
return;
w->Refresh();
if ((me.bstate & BUTTON3_PRESSED || w->Choice() > ConstraintsNumber) && w->Choice() < StaticOptions)
w->refresh();
if ((me.bstate & BUTTON3_PRESSED || w->choice() > ConstraintsNumber) && w->choice() < StaticOptions)
EnterPressed();
else if (w->Choice() >= StaticOptions)
else if (w->choice() >= StaticOptions)
{
if (me.bstate & BUTTON1_PRESSED)
{
size_t pos = w->Choice();
size_t pos = w->choice();
SpacePressed();
if (pos < w->Size()-1)
w->Scroll(NC::wUp);
if (pos < w->size()-1)
w->scroll(NC::wUp);
}
else
EnterPressed();
@@ -287,10 +287,10 @@ std::string SearchEngine::currentFilter()
void SearchEngine::applyFilter(const std::string &filter)
{
w->ShowAll();
w->showAll();
auto fun = std::bind(SEItemEntryMatcher, _1, _2, true);
auto rx = RegexItemFilter<SEItem>(filter, Config.regex_type, fun);
w->filter(w->Begin(), w->End(), rx);
w->filter(w->begin(), w->end(), rx);
}
/***********************************************************************/
@@ -299,24 +299,24 @@ bool SearchEngine::search(const std::string &constraint)
{
auto fun = std::bind(SEItemEntryMatcher, _1, _2, false);
auto rx = RegexItemFilter<SEItem>(constraint, Config.regex_type, fun);
return w->search(w->Begin(), w->End(), rx);
return w->search(w->begin(), w->end(), rx);
}
void SearchEngine::nextFound(bool wrap)
{
w->NextFound(wrap);
w->nextFound(wrap);
}
void SearchEngine::prevFound(bool wrap)
{
w->PrevFound(wrap);
w->prevFound(wrap);
}
/***********************************************************************/
std::shared_ptr< ProxySongList > SearchEngine::getProxySongList()
{
return mkProxySongList(*w, [](NC::Menu<SEItem>::Item &item) {
return mkProxySongList(*w, [](NC::Menu<SEItem>::Item &item) -> MPD::Song * {
MPD::Song *ptr = 0;
if (!item.isSeparator() && item.value().isSong())
ptr = &item.value().song();
@@ -326,18 +326,18 @@ std::shared_ptr< ProxySongList > SearchEngine::getProxySongList()
bool SearchEngine::allowsSelection()
{
return w->Current().value().isSong();
return w->current().value().isSong();
}
void SearchEngine::reverseSelection()
{
reverseSelectionHelper(w->Begin()+std::min(StaticOptions, w->Size()), w->End());
reverseSelectionHelper(w->begin()+std::min(StaticOptions, w->size()), w->end());
}
MPD::SongList SearchEngine::getSelectedSongs()
{
MPD::SongList result;
for (auto it = w->Begin(); it != w->End(); ++it)
for (auto it = w->begin(); it != w->end(); ++it)
{
if (it->isSelected())
{
@@ -346,10 +346,10 @@ MPD::SongList SearchEngine::getSelectedSongs()
}
}
// if no item is selected, add current one
if (result.empty() && !w->Empty())
if (result.empty() && !w->empty())
{
assert(w->Current().value().isSong());
result.push_back(w->Current().value().song());
assert(w->current().value().isSong());
result.push_back(w->current().value().song());
}
return result;
}
@@ -358,16 +358,16 @@ MPD::SongList SearchEngine::getSelectedSongs()
void SearchEngine::UpdateFoundList()
{
for (auto it = w->Begin(); it != w->End(); ++it)
for (auto it = w->begin(); it != w->end(); ++it)
if (it->value().isSong())
it->setBold(myPlaylist->checkForSong(it->value().song()));
}
void SearchEngine::Prepare()
{
w->SetTitle("");
w->Clear();
w->ResizeList(StaticOptions-3);
w->setTitle("");
w->clear();
w->resizeList(StaticOptions-3);
w->at(ConstraintsNumber).setSeparator(true);
w->at(SearchButton-1).setSeparator(true);
@@ -387,11 +387,11 @@ void SearchEngine::Prepare()
w->at(ResetButton).value().mkBuffer() << "Reset";
}
void SearchEngine::Reset()
void SearchEngine::reset()
{
for (size_t i = 0; i < ConstraintsNumber; ++i)
itsConstraints[i].clear();
w->Reset();
w->reset();
Prepare();
ShowMessage("Search state reset");
}
@@ -437,7 +437,7 @@ void SearchEngine::Search()
Mpd.AddSearch(MPD_TAG_COMMENT, itsConstraints[10]);
auto songs = Mpd.CommitSearchSongs();
for (auto s = songs.begin(); s != songs.end(); ++s)
w->AddItem(*s);
w->addItem(*s);
return;
}
@@ -446,8 +446,8 @@ void SearchEngine::Search()
list = Mpd.GetDirectoryRecursive("/");
else
{
list.reserve(myPlaylist->Items->Size());
for (auto s = myPlaylist->Items->BeginV(); s != myPlaylist->Items->EndV(); ++s)
list.reserve(myPlaylist->Items->size());
for (auto s = myPlaylist->Items->beginV(); s != myPlaylist->Items->endV(); ++s)
list.push_back(*s);
}
@@ -580,7 +580,7 @@ void SearchEngine::Search()
if (found && any_found)
{
w->AddItem(*it);
w->addItem(*it);
list[it-list.begin()] = 0;
}
found = 1;
@@ -601,7 +601,7 @@ std::string SEItemToString(const SEItem &ei)
result = ei.song().toString(Config.song_list_format_dollar_free);
}
else
result = ei.buffer().Str();
result = ei.buffer().str();
return result;
}

View File

@@ -117,7 +117,7 @@ class SearchEngine : public Screen< NC::Menu<SEItem> >, public Filterable, publi
private:
void Prepare();
void Search();
void Reset();
void reset();
const char **SearchMode;

View File

@@ -42,23 +42,23 @@ void SelectedItemsAdder::Init()
{
SetDimensions();
itsPlaylistSelector = new NC::Menu<std::string>((COLS-itsWidth)/2, (MainHeight-itsHeight)/2+MainStartY, itsWidth, itsHeight, "Add selected item(s) to...", Config.main_color, Config.window_border);
itsPlaylistSelector->CyclicScrolling(Config.use_cyclic_scrolling);
itsPlaylistSelector->CenteredCursor(Config.centered_cursor);
itsPlaylistSelector->HighlightColor(Config.main_highlight_color);
itsPlaylistSelector->cyclicScrolling(Config.use_cyclic_scrolling);
itsPlaylistSelector->centeredCursor(Config.centered_cursor);
itsPlaylistSelector->setHighlightColor(Config.main_highlight_color);
itsPlaylistSelector->setItemDisplayer(Display::Default<std::string>);
itsPositionSelector = new NC::Menu<std::string>((COLS-itsPSWidth)/2, (MainHeight-itsPSHeight)/2+MainStartY, itsPSWidth, itsPSHeight, "Where?", Config.main_color, Config.window_border);
itsPositionSelector->CyclicScrolling(Config.use_cyclic_scrolling);
itsPositionSelector->CenteredCursor(Config.centered_cursor);
itsPositionSelector->HighlightColor(Config.main_highlight_color);
itsPositionSelector->cyclicScrolling(Config.use_cyclic_scrolling);
itsPositionSelector->centeredCursor(Config.centered_cursor);
itsPositionSelector->setHighlightColor(Config.main_highlight_color);
itsPositionSelector->setItemDisplayer(Display::Default<std::string>);
itsPositionSelector->AddItem("At the end of playlist");
itsPositionSelector->AddItem("At the beginning of playlist");
itsPositionSelector->AddItem("After current track");
itsPositionSelector->AddItem("After current album");
itsPositionSelector->AddItem("After highlighted item");
itsPositionSelector->AddSeparator();
itsPositionSelector->AddItem("Cancel");
itsPositionSelector->addItem("At the end of playlist");
itsPositionSelector->addItem("At the beginning of playlist");
itsPositionSelector->addItem("After current track");
itsPositionSelector->addItem("After current album");
itsPositionSelector->addItem("After highlighted item");
itsPositionSelector->addSeparator();
itsPositionSelector->addItem("Cancel");
w = itsPlaylistSelector;
isInitialized = 1;
@@ -97,19 +97,19 @@ void SelectedItemsAdder::SwitchTo()
if (playlists_not_active)
ShowMessage("Local items can't be added to stored playlists");
w->Clear();
w->Reset();
w->clear();
w->reset();
if (myOldScreen != myPlaylist)
w->AddItem("Current MPD playlist", 0, 0);
w->AddItem("New playlist", 0, playlists_not_active);
w->AddSeparator();
w->addItem("Current MPD playlist", 0, 0);
w->addItem("New playlist", 0, playlists_not_active);
w->addSeparator();
auto playlists = Mpd.GetPlaylists();
std::sort(playlists.begin(), playlists.end(), CaseInsensitiveSorting());
for (auto it = playlists.begin(); it != playlists.end(); ++it)
w->AddItem(*it, 0, playlists_not_active);
w->AddSeparator();
w->AddItem("Cancel");
w->addItem(*it, 0, playlists_not_active);
w->addSeparator();
w->addItem("Cancel");
myScreen = this;
}
@@ -119,12 +119,12 @@ void SelectedItemsAdder::Resize()
SetDimensions();
if (itsHeight < 5) // screen too low to display this window
return myOldScreen->SwitchTo();
itsPlaylistSelector->Resize(itsWidth, itsHeight);
itsPlaylistSelector->MoveTo((COLS-itsWidth)/2, (MainHeight-itsHeight)/2+MainStartY);
itsPlaylistSelector->resize(itsWidth, itsHeight);
itsPlaylistSelector->moveTo((COLS-itsWidth)/2, (MainHeight-itsHeight)/2+MainStartY);
size_t poss_width = std::min(itsPSWidth, size_t(COLS));
size_t poss_height = std::min(itsPSHeight, size_t(MainHeight));
itsPositionSelector->Resize(poss_width, poss_height);
itsPositionSelector->MoveTo((COLS-poss_width)/2, (MainHeight-poss_height)/2+MainStartY);
itsPositionSelector->resize(poss_width, poss_height);
itsPositionSelector->moveTo((COLS-poss_width)/2, (MainHeight-poss_height)/2+MainStartY);
if (myOldScreen && myOldScreen->hasToBeResized) // resize background window
{
myOldScreen->Resize();
@@ -137,11 +137,11 @@ void SelectedItemsAdder::Refresh()
{
if (w == itsPositionSelector)
{
itsPlaylistSelector->Display();
itsPositionSelector->Display();
itsPlaylistSelector->display();
itsPositionSelector->display();
}
else
itsPlaylistSelector->Display();
itsPlaylistSelector->display();
}
std::basic_string<my_char_t> SelectedItemsAdder::Title()
@@ -151,14 +151,14 @@ std::basic_string<my_char_t> SelectedItemsAdder::Title()
void SelectedItemsAdder::EnterPressed()
{
size_t pos = w->Choice();
size_t pos = w->choice();
// adding to current playlist is disabled when playlist is active
if (w == itsPlaylistSelector && myOldScreen == myPlaylist && pos == 0)
pos++;
MPD::SongList list;
if ((w != itsPlaylistSelector || pos != 0) && pos != w->Size()-1)
if ((w != itsPlaylistSelector || pos != 0) && pos != w->size()-1)
list = dynamic_cast<HasSongs &>(*myOldScreen).getSelectedSongs();
if (w == itsPlaylistSelector)
@@ -166,14 +166,14 @@ void SelectedItemsAdder::EnterPressed()
if (pos == 0) // add to mpd playlist
{
w = itsPositionSelector;
itsPositionSelector->Reset();
itsPositionSelector->reset();
return;
}
else if (pos == 1) // create new playlist
{
LockStatusbar();
Statusbar() << "Save playlist as: ";
std::string playlist = Global::wFooter->GetString();
std::string playlist = Global::wFooter->getString();
UnlockStatusbar();
if (!playlist.empty())
{
@@ -185,22 +185,22 @@ void SelectedItemsAdder::EnterPressed()
ShowMessage("Selected item(s) added to playlist \"%s\"", playlist.c_str());
}
}
else if (pos > 1 && pos < w->Size()-1) // add items to existing playlist
else if (pos > 1 && pos < w->size()-1) // add items to existing playlist
{
std::string playlist = locale_to_utf_cpy(w->Current().value());
std::string playlist = locale_to_utf_cpy(w->current().value());
Mpd.StartCommandsList();
for (auto it = list.begin(); it != list.end(); ++it)
Mpd.AddToPlaylist(playlist, *it);
if (Mpd.CommitCommandsList())
ShowMessage("Selected item(s) added to playlist \"%s\"", w->Current().value().c_str());
ShowMessage("Selected item(s) added to playlist \"%s\"", w->current().value().c_str());
}
if (pos != w->Size()-1)
if (pos != w->size()-1)
{
// refresh playlist's lists
if (myBrowser->Main() && !myBrowser->isLocal() && myBrowser->CurrentDir() == "/")
myBrowser->GetDirectory("/");
if (myPlaylistEditor->Main())
myPlaylistEditor->Playlists->Clear(); // make playlist editor update itself
myPlaylistEditor->Playlists->clear(); // make playlist editor update itself
}
}
else
@@ -229,14 +229,14 @@ void SelectedItemsAdder::EnterPressed()
{
std::string album = myPlaylist->NowPlayingSong()->getAlbum();
int i;
for (i = Mpd.GetCurrentlyPlayingSongPos()+1; i < int(myPlaylist->Items->Size()); ++i)
for (i = Mpd.GetCurrentlyPlayingSongPos()+1; i < int(myPlaylist->Items->size()); ++i)
if ((*myPlaylist->Items)[i].value().getAlbum() != album)
break;
successful_operation = myPlaylist->Add(list, 0, i);
}
else if (pos == 4) // after highlighted item
{
successful_operation = myPlaylist->Add(list, 0, std::min(myPlaylist->Items->Choice()+1, myPlaylist->Items->Size()));
successful_operation = myPlaylist->Add(list, 0, std::min(myPlaylist->Items->choice()+1, myPlaylist->Items->size()));
}
else
{
@@ -252,7 +252,7 @@ void SelectedItemsAdder::EnterPressed()
void SelectedItemsAdder::MouseButtonPressed(MEVENT me)
{
if (w->Empty() || !w->hasCoords(me.x, me.y) || size_t(me.y) >= w->Size())
if (w->empty() || !w->hasCoords(me.x, me.y) || size_t(me.y) >= w->size())
return;
if (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED))
{

View File

@@ -67,7 +67,7 @@ void ServerInfo::SwitchTo()
Resize();
myScreen = this;
w->Window::Clear();
//w->Window::clear();
}
void ServerInfo::Resize()
@@ -75,8 +75,8 @@ void ServerInfo::Resize()
SetDimensions();
if (itsHeight < 5) // screen too low to display this window
return myOldScreen->SwitchTo();
w->Resize(itsWidth, itsHeight);
w->MoveTo((COLS-itsWidth)/2, (MainHeight-itsHeight)/2+MainStartY);
w->resize(itsWidth, itsHeight);
w->moveTo((COLS-itsWidth)/2, (MainHeight-itsHeight)/2+MainStartY);
if (myOldScreen && myOldScreen->hasToBeResized) // resize background window
{
myOldScreen->Resize();
@@ -98,7 +98,7 @@ void ServerInfo::Update()
gettimeofday(&past, 0);
Mpd.UpdateStats();
w->Clear();
w->clear();
*w << NC::fmtBold << U("Version: ") << NC::fmtBoldEnd << U("0.") << Mpd.Version() << U(".*\n");
*w << NC::fmtBold << U("Uptime: ") << NC::fmtBoldEnd;
@@ -123,8 +123,8 @@ void ServerInfo::Update()
for (auto it = itsTagTypes.begin(); it != itsTagTypes.end(); ++it)
*w << (it != itsTagTypes.begin() ? U(", ") : U(" ")) << *it;
w->Flush();
w->Refresh();
w->flush();
w->refresh();
}
void ServerInfo::SetDimensions()

View File

@@ -570,7 +570,7 @@ void Configuration::Read()
{
NC::Buffer status_no_colors;
String2Buffer(song_status_format, status_no_colors);
song_status_format_no_colors = status_no_colors.Str();
song_status_format_no_colors = status_no_colors.str();
}
else
song_status_format_no_colors = song_status_format;
@@ -645,7 +645,7 @@ void Configuration::Read()
{
if (!v.empty())
{
browser_playlist_prefix.Clear();
browser_playlist_prefix.clear();
String2Buffer(v, browser_playlist_prefix);
}
}
@@ -681,36 +681,36 @@ void Configuration::Read()
{
if (!v.empty())
{
selected_item_prefix.Clear();
selected_item_prefix.clear();
String2Buffer(v, selected_item_prefix);
selected_item_prefix_length = NC::Window::Length(TO_WSTRING(selected_item_prefix.Str()));
selected_item_prefix_length = NC::Window::length(TO_WSTRING(selected_item_prefix.str()));
}
}
else if (name == "selected_item_suffix")
{
if (!v.empty())
{
selected_item_suffix.Clear();
selected_item_suffix.clear();
String2Buffer(v, selected_item_suffix);
selected_item_suffix_length = NC::Window::Length(TO_WSTRING(selected_item_suffix.Str()));
selected_item_suffix_length = NC::Window::length(TO_WSTRING(selected_item_suffix.str()));
}
}
else if (name == "now_playing_prefix")
{
if (!v.empty())
{
now_playing_prefix.Clear();
now_playing_prefix.clear();
String2Buffer(v, now_playing_prefix);
now_playing_prefix_length = NC::Window::Length(TO_WSTRING(now_playing_prefix.Str()));
now_playing_prefix_length = NC::Window::length(TO_WSTRING(now_playing_prefix.str()));
}
}
else if (name == "now_playing_suffix")
{
if (!v.empty())
{
now_playing_suffix.Clear();
now_playing_suffix.clear();
String2Buffer(TO_WSTRING(v), now_playing_suffix);
now_playing_suffix_length = NC::Window::Length(now_playing_suffix.Str());
now_playing_suffix_length = NC::Window::length(now_playing_suffix.str());
}
}
else if (name == "color1")

View File

@@ -374,7 +374,7 @@ std::string Song::ParseFormat(std::string::const_iterator &it, const std::string
if (delimiter)
{
const std::basic_string<my_char_t> &s = TO_WSTRING(tag);
if (NC::Window::Length(s) > delimiter)
if (NC::Window::length(s) > delimiter)
tag = Shorten(s, delimiter);
}
has_some_tags = 1;

View File

@@ -59,8 +59,8 @@ void SongInfo::Resize()
{
size_t x_offset, width;
GetWindowResizeParams(x_offset, width);
w->Resize(width, MainHeight);
w->MoveTo(x_offset, MainStartY);
w->resize(width, MainHeight);
w->moveTo(x_offset, MainStartY);
hasToBeResized = 0;
}
@@ -96,10 +96,10 @@ void SongInfo::SwitchTo()
Global::RedrawHeader = true;
w->Clear();
w->Reset();
w->clear();
w->reset();
PrepareSong(*s);
w->Flush();
w->flush();
}
void SongInfo::PrepareSong(MPD::Song &s)

View File

@@ -73,7 +73,7 @@ void StatusbarMPDCallback()
Mpd.OrderDataFetching();
}
void StatusbarGetStringHelper(const std::wstring &)
void StatusbargetStringHelper(const std::wstring &)
{
TraceMpdStatus();
}
@@ -125,7 +125,7 @@ void UnlockStatusbar()
DrawProgressbar(Mpd.GetElapsedTime(), Mpd.GetTotalTime());
else
Statusbar() << wclrtoeol;
wFooter->Refresh();
wFooter->refresh();
}
}
@@ -158,8 +158,8 @@ void TraceMpdStatus()
&& myPlaylist->Items->isHighlighted()
&& Config.playlist_disable_highlight_delay)
{
myPlaylist->Items->Highlighting(0);
myPlaylist->Items->Refresh();
myPlaylist->Items->setHighlighting(0);
myPlaylist->Items->refresh();
}
if (lock_statusbar_delay > 0)
@@ -179,7 +179,7 @@ void TraceMpdStatus()
DrawProgressbar(Mpd.GetElapsedTime(), Mpd.GetTotalTime());
else
Statusbar() << wclrtoeol;
wFooter->Refresh();
wFooter->refresh();
}
}
}
@@ -192,12 +192,12 @@ void NcmpcppErrorCallback(MPD::Connection *, int errorid, const char *msg, void
// - 8-15 bits define MPD_SERVER_ERROR_* codes, compare them with (errorid >> 8)
if ((errorid >> 8) == MPD_SERVER_ERROR_PERMISSION)
{
wFooter->SetGetStringHelper(0);
wFooter->setGetStringHelper(0);
Statusbar() << "Password: ";
Mpd.SetPassword(wFooter->GetString(-1, 0, 1));
Mpd.SetPassword(wFooter->getString(-1, 0, 1));
if (Mpd.SendPassword())
ShowMessage("Password accepted");
wFooter->SetGetStringHelper(StatusbarGetStringHelper);
wFooter->setGetStringHelper(StatusbargetStringHelper);
}
else if ((errorid >> 8) == MPD_SERVER_ERROR_NO_EXIST && myScreen == myBrowser)
{
@@ -216,31 +216,31 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *)
static std::string player_state;
static MPD::Song np;
int sx = wFooter->X();
int sy = wFooter->Y();
int sx = wFooter->x();
int sy = wFooter->y();
myPlaylist->NowPlaying = Mpd.GetCurrentlyPlayingSongPos();
if (changed.Playlist)
{
np = Mpd.GetCurrentlyPlayingSong();
if (!np.empty())
WindowTitle(np.toString(Config.song_window_title_format));
//np = Mpd.GetCurrentlyPlayingSong();
//if (!np.empty())
// WindowTitle(np.toString(Config.song_window_title_format));
myPlaylist->Items->clearSearchResults();
bool is_filtered = myPlaylist->Items->isFiltered();
myPlaylist->Items->ShowAll();
myPlaylist->Items->showAll();
size_t playlist_length = Mpd.GetPlaylistLength();
if (playlist_length < myPlaylist->Items->Size())
myPlaylist->Items->ResizeList(playlist_length);
if (playlist_length < myPlaylist->Items->size())
myPlaylist->Items->resizeList(playlist_length);
auto songs = Mpd.GetPlaylistChanges(Mpd.GetOldPlaylistID());
for (auto s = songs.begin(); s != songs.end(); ++s)
{
size_t pos = s->getPosition();
if (pos < myPlaylist->Items->Size())
if (pos < myPlaylist->Items->size())
{
// if song's already in playlist, replace it with a new one
myPlaylist->Items->at(pos).value() = *s;
@@ -248,25 +248,22 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *)
else
{
// otherwise just add it to playlist
myPlaylist->Items->AddItem(*s);
myPlaylist->Items->addItem(*s);
}
}
if (is_filtered)
{
myPlaylist->applyFilter(myPlaylist->currentFilter());
if (myPlaylist->Items->Empty())
myPlaylist->Items->ShowAll();
if (myPlaylist->Items->empty())
myPlaylist->Items->showAll();
}
Playlist::ReloadTotalLength = true;
Playlist::ReloadRemaining = true;
if (myPlaylist->Items->Empty())
{
myPlaylist->Items->Reset();
myPlaylist->Items->Window::Clear();
}
if (myPlaylist->Items->empty())
myPlaylist->Items->reset();
if (isVisible(myBrowser))
{
@@ -292,24 +289,24 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *)
if (isVisible(myBrowser))
myBrowser->GetDirectory(myBrowser->CurrentDir());
else
myBrowser->Main()->Clear();
myBrowser->Main()->clear();
}
# ifdef HAVE_TAGLIB_H
if (myTagEditor->Main())
{
myTagEditor->Albums->Clear();
myTagEditor->Dirs->Clear();
myTagEditor->Albums->clear();
myTagEditor->Dirs->clear();
}
# endif // HAVE_TAGLIB_H
if (myLibrary->Main())
{
if (myLibrary->Columns() == 2)
myLibrary->Albums->Clear();
myLibrary->Albums->clear();
else
myLibrary->Tags->Clear();
myLibrary->Tags->clear();
}
if (myPlaylistEditor->Main())
myPlaylistEditor->Content->Clear();
myPlaylistEditor->Content->clear();
changed.DBUpdating = 1;
}
if (changed.PlayerState)
@@ -355,19 +352,19 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *)
player_state.clear();
# ifdef ENABLE_VISUALIZER
if (isVisible(myVisualizer))
myVisualizer->Main()->Clear();
myVisualizer->Main()->clear();
# endif // ENABLE_VISUALIZER
break;
}
}
# ifdef ENABLE_VISUALIZER
if (myScreen == myVisualizer)
wFooter->SetTimeout(state == MPD::psPlay ? Visualizer::WindowTimeout : 500);
wFooter->setTimeout(state == MPD::psPlay ? Visualizer::WindowTimeout : 500);
# endif // ENABLE_VISUALIZER
if (Config.new_design)
{
*wHeader << NC::XY(0, 1) << NC::fmtBold << player_state << NC::fmtBoldEnd;
wHeader->Refresh();
wHeader->refresh();
}
else if (!block_statusbar_update && Config.statusbar_visibility)
{
@@ -399,7 +396,7 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *)
}
if (Config.autocenter_mode && !myPlaylist->Items->isFiltered())
myPlaylist->Items->Highlight(myPlaylist->NowPlaying);
myPlaylist->Items->highlight(myPlaylist->NowPlaying);
if (Config.now_playing_lyrics && isVisible(myLyrics) && Global::myOldScreen == myPlaylist)
myLyrics->ReloadNP = 1;
@@ -446,24 +443,24 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *)
String2Buffer(TO_WSTRING(utf_to_locale_cpy(np.toString(Config.new_header_first_line, "$"))), first);
String2Buffer(TO_WSTRING(utf_to_locale_cpy(np.toString(Config.new_header_second_line, "$"))), second);
size_t first_len = NC::Window::Length(first.Str());
size_t first_len = NC::Window::length(first.str());
size_t first_margin = (std::max(tracklength.length()+1, VolumeState.length()))*2;
size_t first_start = first_len < COLS-first_margin ? (COLS-first_len)/2 : tracklength.length()+1;
size_t second_len = NC::Window::Length(second.Str());
size_t second_len = NC::Window::length(second.str());
size_t second_margin = (std::max(player_state.length(), size_t(8))+1)*2;
size_t second_start = second_len < COLS-second_margin ? (COLS-second_len)/2 : player_state.length()+1;
if (!Global::SeekingInProgress)
*wHeader << NC::XY(0, 0) << wclrtoeol << tracklength;
*wHeader << NC::XY(first_start, 0);
first.Write(*wHeader, first_line_scroll_begin, COLS-tracklength.length()-VolumeState.length()-1, U(" ** "));
first.write(*wHeader, first_line_scroll_begin, COLS-tracklength.length()-VolumeState.length()-1, U(" ** "));
*wHeader << NC::XY(0, 1) << wclrtoeol << NC::fmtBold << player_state << NC::fmtBoldEnd;
*wHeader << NC::XY(second_start, 1);
second.Write(*wHeader, second_line_scroll_begin, COLS-player_state.length()-8-2, U(" ** "));
second.write(*wHeader, second_line_scroll_begin, COLS-player_state.length()-8-2, U(" ** "));
*wHeader << NC::XY(wHeader->GetWidth()-VolumeState.length(), 0) << Config.volume_color << VolumeState << NC::clEnd;
*wHeader << NC::XY(wHeader->getWidth()-VolumeState.length(), 0) << Config.volume_color << VolumeState << NC::clEnd;
changed.StatusFlags = 1;
}
@@ -497,8 +494,8 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *)
NC::basic_buffer<my_char_t> np_song;
String2Buffer(TO_WSTRING(utf_to_locale_cpy(np.toString(Config.song_status_format, "$"))), np_song);
*wFooter << NC::XY(0, 1) << wclrtoeol << NC::fmtBold << player_state << NC::fmtBoldEnd;
np_song.Write(*wFooter, playing_song_scroll_begin, wFooter->GetWidth()-player_state.length()-tracklength.length(), U(" ** "));
*wFooter << NC::fmtBold << NC::XY(wFooter->GetWidth()-tracklength.length(), 1) << tracklength << NC::fmtBoldEnd;
np_song.write(*wFooter, playing_song_scroll_begin, wFooter->getWidth()-player_state.length()-tracklength.length(), U(" ** "));
*wFooter << NC::fmtBold << NC::XY(wFooter->getWidth()-tracklength.length(), 1) << tracklength << NC::fmtBoldEnd;
}
if (!block_progressbar_update)
DrawProgressbar(Mpd.GetElapsedTime(), Mpd.GetTotalTime());
@@ -575,10 +572,10 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *)
if (Config.new_design && !Config.header_visibility) // in this case also draw separator
{
*wHeader << NC::fmtBold << NC::clBlack;
mvwhline(wHeader->Raw(), 2, 0, 0, COLS);
mvwhline(wHeader->raw(), 2, 0, 0, COLS);
*wHeader << NC::clEnd << NC::fmtBoldEnd;
}
wHeader->Refresh();
wHeader->refresh();
}
else
{
@@ -625,9 +622,9 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *)
VolumeState += "%";
}
*wHeader << Config.volume_color;
*wHeader << NC::XY(wHeader->GetWidth()-VolumeState.length(), 0) << VolumeState;
*wHeader << NC::XY(wHeader->getWidth()-VolumeState.length(), 0) << VolumeState;
*wHeader << NC::clEnd;
wHeader->Refresh();
wHeader->refresh();
}
if (changed.Outputs)
{
@@ -635,9 +632,9 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *)
myOutputs->FetchList();
# endif // ENABLE_OUTPUTS
}
wFooter->GotoXY(sx, sy);
wFooter->goToXY(sx, sy);
if (changed.PlayerState || (changed.ElapsedTime && (!Config.new_design || Mpd.GetState() == MPD::psPlay)))
wFooter->Refresh();
wFooter->refresh();
if (changed.Playlist || changed.Database || changed.PlayerState || changed.SongID)
ApplyToVisibleWindows(&BasicScreen::RefreshWindow);
}
@@ -650,27 +647,27 @@ NC::Window &Statusbar()
void DrawProgressbar(unsigned elapsed, unsigned time)
{
unsigned pb_width = wFooter->GetWidth();
unsigned pb_width = wFooter->getWidth();
unsigned howlong = time ? pb_width*elapsed/time : 0;
if (Config.progressbar_boldness)
*wFooter << NC::fmtBold;
*wFooter << Config.progressbar_color;
if (Config.progressbar[2] != '\0')
{
wFooter->GotoXY(0, 0);
wFooter->goToXY(0, 0);
for (unsigned i = 0; i < pb_width; ++i)
*wFooter << Config.progressbar[2];
wFooter->GotoXY(0, 0);
wFooter->goToXY(0, 0);
}
else
mvwhline(wFooter->Raw(), 0, 0, 0, pb_width);
mvwhline(wFooter->raw(), 0, 0, 0, pb_width);
if (time)
{
*wFooter << Config.progressbar_elapsed_color;
pb_width = std::min(size_t(howlong), wFooter->GetWidth());
pb_width = std::min(size_t(howlong), wFooter->getWidth());
for (unsigned i = 0; i < pb_width; ++i)
*wFooter << Config.progressbar[0];
if (howlong < wFooter->GetWidth())
if (howlong < wFooter->getWidth())
*wFooter << Config.progressbar[1];
*wFooter << NC::clEnd;
}
@@ -689,14 +686,14 @@ void ShowMessage(const char *format, ...)
block_statusbar_update = 1;
else
block_progressbar_update = 1;
wFooter->GotoXY(0, Config.statusbar_visibility);
wFooter->goToXY(0, Config.statusbar_visibility);
*wFooter << NC::fmtBoldEnd;
va_list list;
va_start(list, format);
wmove(wFooter->Raw(), Config.statusbar_visibility, 0);
vw_printw(wFooter->Raw(), format, list);
wclrtoeol(wFooter->Raw());
wmove(wFooter->raw(), Config.statusbar_visibility, 0);
vw_printw(wFooter->raw(), format, list);
wclrtoeol(wFooter->raw());
va_end(list);
wFooter->Refresh();
wFooter->refresh();
}
}

View File

@@ -45,7 +45,7 @@ void DrawProgressbar(unsigned elapsed, unsigned time);
void ShowMessage(const char *, ...) GNUC_PRINTF(1, 2);
void StatusbarMPDCallback();
void StatusbarGetStringHelper(const std::wstring &);
void StatusbargetStringHelper(const std::wstring &);
void StatusbarApplyFilterImmediately(Filterable *f, const std::wstring &ws);
#endif

View File

@@ -30,14 +30,12 @@ namespace NC {//
/// Buffer template class that can store text along with its
/// format attributes. The content can be easily printed to
/// window or taken as raw string at any time.
///
template <typename C> class basic_buffer
{
friend class Scrollpad;
/// Struct used for storing information about
/// one color/format flag along with its position
///
struct FormatPos
{
size_t Position;
@@ -55,27 +53,21 @@ template <typename C> class basic_buffer
};
/// Internal buffer for storing raw text
///
std::basic_string<C> itsString;
std::basic_string<C> m_string;
/// List used for storing formatting informations
///
std::list<FormatPos> itsFormat;
std::list<FormatPos> m_format;
public:
/// Constructs an empty buffer
///
basic_buffer() { }
/// Constructs a buffer from the existed one
/// @param b copied buffer
///
basic_buffer(const basic_buffer &b);
/// @return raw content of the buffer without formatting informations
///
const std::basic_string<C> &Str() const;
const std::basic_string<C> &str() const;
/// Searches for given string in buffer and sets format/color at the
/// beginning and end of it using val_b and val_e flags accordingly
@@ -86,8 +78,7 @@ public:
/// @param for_each indicates whether function searches through whole buffer and sets
/// the format for all occurences of given string or stops after the first one
/// @return true if at least one occurence of the string was found, false otherwise
///
bool SetFormatting(short val_b, std::basic_string<C> s, short val_e,
bool setFormatting(short val_b, std::basic_string<C> s, short val_e,
bool case_sensitive, bool for_each = 1);
/// Searches for given string in buffer and removes given
@@ -98,13 +89,11 @@ public:
/// @param case_sensitive indicates whether algorithm should care about case sensitivity
/// @param for_each indicates whether function searches through whole buffer and removes
/// given format from all occurences of given string or stops after the first one
///
void RemoveFormatting(short val_b, std::basic_string<C> pattern, short val_e,
void removeFormatting(short val_b, std::basic_string<C> pattern, short val_e,
bool case_sensitive, bool for_each = 1);
/// Removes all formating applied to string in buffer.
///
void RemoveFormatting();
void removeFormatting();
/// Prints to window object given part of the string, loading all needed formatting info
/// and cleaning up after. The main goal of this function is to provide interface for
@@ -115,89 +104,84 @@ public:
/// @param width width of the string to be printed
/// @param separator additional text to be placed between the end and the beginning of
/// the string
///
void Write(Window &w, size_t &start_pos, size_t width,
void write(Window &w, size_t &start_pos, size_t width,
const std::basic_string<C> &separator) const;
/// Clears the content of the buffer and its formatting informations
///
void Clear();
void clear();
basic_buffer<C> &operator<<(int n)
{
itsString += intTo< std::basic_string<C> >::apply(n);
m_string += intTo< std::basic_string<C> >::apply(n);
return *this;
}
basic_buffer<C> &operator<<(long int n)
{
itsString += longIntTo< std::basic_string<C> >::apply(n);
m_string += longIntTo< std::basic_string<C> >::apply(n);
return *this;
}
basic_buffer<C> &operator<<(unsigned int n)
{
itsString += unsignedIntTo< std::basic_string<C> >::apply(n);
m_string += unsignedIntTo< std::basic_string<C> >::apply(n);
return *this;
}
basic_buffer<C> &operator<<(unsigned long int n)
{
itsString += unsignedLongIntTo< std::basic_string<C> >::apply(n);
m_string += unsignedLongIntTo< std::basic_string<C> >::apply(n);
return *this;
}
basic_buffer<C> &operator<<(char c)
{
itsString += c;
m_string += c;
return *this;
}
basic_buffer<C> &operator<<(wchar_t wc)
{
itsString += wc;
m_string += wc;
return *this;
}
basic_buffer<C> &operator<<(const C *s)
{
itsString += s;
m_string += s;
return *this;
}
basic_buffer<C> &operator<<(const std::basic_string<C> &s)
{
itsString += s;
m_string += s;
return *this;
}
/// Handles colors
/// @return reference to itself
///
basic_buffer<C> &operator<<(Color color);
/// Handles format flags
/// @return reference to itself
///
basic_buffer<C> &operator<<(Format f);
/// Handles copying one buffer to another using operator<<()
/// @param buf buffer to be copied
/// @return reference to itself
///
basic_buffer<C> &operator<<(const basic_buffer<C> &buf);
/// Friend operator that handles printing
/// the content of buffer to window object
friend Window &operator<<(Window &w, const basic_buffer<C> &buf)
{
const std::basic_string<C> &s = buf.itsString;
if (buf.itsFormat.empty())
const std::basic_string<C> &s = buf.m_string;
if (buf.m_format.empty())
w << s;
else
{
std::basic_string<C> tmp;
auto b = buf.itsFormat.begin(), e = buf.itsFormat.end();
auto b = buf.m_format.begin(), e = buf.m_format.end();
for (size_t i = 0; i < s.length() || b != e; ++i)
{
while (b != e && i == b->Position)
@@ -207,7 +191,7 @@ public:
w << tmp;
tmp.clear();
}
buf.LoadAttribute(w, b->Value);
buf.loadAttribute(w, b->Value);
b++;
}
tmp += s[i];
@@ -222,27 +206,24 @@ private:
/// Loads an attribute to given window object
/// @param w window object we want to load attribute to
/// @param value value of attribute to be loaded
///
void LoadAttribute(Window &w, short value) const;
void loadAttribute(Window &w, short value) const;
};
/// Standard buffer that uses narrow characters
///
typedef basic_buffer<char> Buffer;
/// Standard buffer that uses wide characters
///
typedef basic_buffer<wchar_t> WBuffer;
template <typename C> basic_buffer<C>::basic_buffer(const basic_buffer &b)
: itsString(b.itsString), itsFormat(b.itsFormat) { }
: m_string(b.m_string), m_format(b.m_format) { }
template <typename C> const std::basic_string<C> &basic_buffer<C>::Str() const
template <typename C> const std::basic_string<C> &basic_buffer<C>::str() const
{
return itsString;
return m_string;
}
template <typename C> bool basic_buffer<C>::SetFormatting(
template <typename C> bool basic_buffer<C>::setFormatting(
short val_b,
std::basic_string<C> s,
short val_e,
@@ -253,7 +234,7 @@ template <typename C> bool basic_buffer<C>::SetFormatting(
if (s.empty())
return false;
bool result = false;
std::basic_string<C> base = itsString;
std::basic_string<C> base = m_string;
if (!case_sensitive)
{
lowercase(s);
@@ -265,19 +246,19 @@ template <typename C> bool basic_buffer<C>::SetFormatting(
result = true;
fp.Value = val_b;
fp.Position = i;
itsFormat.push_back(fp);
m_format.push_back(fp);
i += s.length();
fp.Value = val_e;
fp.Position = i;
itsFormat.push_back(fp);
m_format.push_back(fp);
if (!for_each)
break;
}
itsFormat.sort();
m_format.sort();
return result;
}
template <typename C> void basic_buffer<C>::RemoveFormatting(
template <typename C> void basic_buffer<C>::removeFormatting(
short val_b,
std::basic_string<C> pattern,
short val_e,
@@ -287,7 +268,7 @@ template <typename C> void basic_buffer<C>::RemoveFormatting(
{
if (pattern.empty())
return;
std::basic_string<C> base = itsString;
std::basic_string<C> base = m_string;
if (!case_sensitive)
{
lowercase(pattern);
@@ -298,49 +279,49 @@ template <typename C> void basic_buffer<C>::RemoveFormatting(
{
fp.Value = val_b;
fp.Position = i;
itsFormat.remove(fp);
m_format.remove(fp);
i += pattern.length();
fp.Value = val_e;
fp.Position = i;
itsFormat.remove(fp);
m_format.remove(fp);
if (!for_each)
break;
}
}
template <typename C> void basic_buffer<C>::RemoveFormatting()
template <typename C> void basic_buffer<C>::removeFormatting()
{
itsFormat.clear();
m_format.clear();
}
template <typename C> void basic_buffer<C>::Write(
template <typename C> void basic_buffer<C>::write(
Window &w,
size_t &start_pos,
size_t width,
const std::basic_string<C> &separator
) const
{
std::basic_string<C> s = itsString;
size_t len = Window::Length(s);
std::basic_string<C> s = m_string;
size_t len = Window::length(s);
if (len > width)
{
s += separator;
len = 0;
auto lb = itsFormat.begin();
if (itsFormat.back().Position > start_pos) // if there is no attributes from current position, don't load them
auto lb = m_format.begin();
if (m_format.back().Position > start_pos) // if there is no attributes from current position, don't load them
{
// load all attributes that are before start position
for (; lb->Position < start_pos; ++lb)
LoadAttribute(w, lb->Value);
loadAttribute(w, lb->Value);
}
for (size_t i = start_pos; i < s.length() && len < width; ++i)
{
while (i == lb->Position && lb != itsFormat.end())
while (i == lb->Position && lb != m_format.end())
{
LoadAttribute(w, lb->Value);
loadAttribute(w, lb->Value);
++lb;
}
if ((len += wcwidth(s[i])) > width)
@@ -351,12 +332,12 @@ template <typename C> void basic_buffer<C>::Write(
start_pos = 0;
if (len < width)
lb = itsFormat.begin();
lb = m_format.begin();
for (size_t i = 0; len < width; ++i)
{
while (i == lb->Position && lb != itsFormat.end())
while (i == lb->Position && lb != m_format.end())
{
LoadAttribute(w, lb->Value);
loadAttribute(w, lb->Value);
++lb;
}
if ((len += wcwidth(s[i])) > width)
@@ -364,20 +345,20 @@ template <typename C> void basic_buffer<C>::Write(
w << s[i];
}
// load all remained attributes to clean up
for (; lb != itsFormat.end(); ++lb)
LoadAttribute(w, lb->Value);
for (; lb != m_format.end(); ++lb)
loadAttribute(w, lb->Value);
}
else
w << *this;
}
template <typename C> void basic_buffer<C>::Clear()
template <typename C> void basic_buffer<C>::clear()
{
itsString.clear();
itsFormat.clear();
m_string.clear();
m_format.clear();
}
template <typename C> void basic_buffer<C>::LoadAttribute(Window &w, short value) const
template <typename C> void basic_buffer<C>::loadAttribute(Window &w, short value) const
{
if (value < fmtNone)
w << Color(value);
@@ -388,9 +369,9 @@ template <typename C> void basic_buffer<C>::LoadAttribute(Window &w, short value
template <typename C> basic_buffer<C> &basic_buffer<C>::operator<<(Color color)
{
FormatPos f;
f.Position = itsString.length();
f.Position = m_string.length();
f.Value = color;
itsFormat.push_back(f);
m_format.push_back(f);
return *this;
}
@@ -401,13 +382,13 @@ template <typename C> basic_buffer<C> &basic_buffer<C>::operator<<(Format f)
template <typename C> basic_buffer<C> &basic_buffer<C>::operator<<(const basic_buffer<C> &buf)
{
size_t length = itsString.length();
itsString += buf.itsString;
std::list<FormatPos> tmp = buf.itsFormat;
size_t length = m_string.length();
m_string += buf.m_string;
std::list<FormatPos> tmp = buf.m_format;
if (length)
for (auto it = tmp.begin(); it != tmp.end(); ++it)
it->Position += length;
itsFormat.merge(tmp);
m_format.merge(tmp);
return *this;
}

View File

@@ -101,59 +101,59 @@ void TagEditor::Init()
SetDimensions(0, COLS);
Albums = new NC::Menu< std::pair<std::string, std::string> >(0, MainStartY, LeftColumnWidth, MainHeight, Config.titles_visibility ? "Albums" : "", Config.main_color, NC::brNone);
Albums->HighlightColor(Config.active_column_color);
Albums->CyclicScrolling(Config.use_cyclic_scrolling);
Albums->CenteredCursor(Config.centered_cursor);
Albums->setHighlightColor(Config.active_column_color);
Albums->cyclicScrolling(Config.use_cyclic_scrolling);
Albums->centeredCursor(Config.centered_cursor);
Albums->setItemDisplayer(Display::Pair<std::string, std::string>);
Dirs = new NC::Menu< std::pair<std::string, std::string> >(0, MainStartY, LeftColumnWidth, MainHeight, Config.titles_visibility ? "Directories" : "", Config.main_color, NC::brNone);
Dirs->HighlightColor(Config.active_column_color);
Dirs->CyclicScrolling(Config.use_cyclic_scrolling);
Dirs->CenteredCursor(Config.centered_cursor);
Dirs->setHighlightColor(Config.active_column_color);
Dirs->cyclicScrolling(Config.use_cyclic_scrolling);
Dirs->centeredCursor(Config.centered_cursor);
Dirs->setItemDisplayer(Display::Pair<std::string, std::string>);
LeftColumn = Config.albums_in_tag_editor ? Albums : Dirs;
TagTypes = new NC::Menu<std::string>(MiddleColumnStartX, MainStartY, MiddleColumnWidth, MainHeight, Config.titles_visibility ? "Tag types" : "", Config.main_color, NC::brNone);
TagTypes->HighlightColor(Config.main_highlight_color);
TagTypes->CyclicScrolling(Config.use_cyclic_scrolling);
TagTypes->CenteredCursor(Config.centered_cursor);
TagTypes->setHighlightColor(Config.main_highlight_color);
TagTypes->cyclicScrolling(Config.use_cyclic_scrolling);
TagTypes->centeredCursor(Config.centered_cursor);
TagTypes->setItemDisplayer(Display::Default<std::string>);
for (const SongInfo::Metadata *m = SongInfo::Tags; m->Name; ++m)
TagTypes->AddItem(m->Name);
TagTypes->AddSeparator();
TagTypes->AddItem("Filename");
TagTypes->AddSeparator();
TagTypes->addItem(m->Name);
TagTypes->addSeparator();
TagTypes->addItem("Filename");
TagTypes->addSeparator();
if (Config.titles_visibility)
TagTypes->AddItem("Options", 1, 1);
TagTypes->AddSeparator();
TagTypes->AddItem("Capitalize First Letters");
TagTypes->AddItem("lower all letters");
TagTypes->AddSeparator();
TagTypes->AddItem("Reset");
TagTypes->AddItem("Save");
TagTypes->addItem("Options", 1, 1);
TagTypes->addSeparator();
TagTypes->addItem("Capitalize First Letters");
TagTypes->addItem("lower all letters");
TagTypes->addSeparator();
TagTypes->addItem("Reset");
TagTypes->addItem("Save");
Tags = new NC::Menu<MPD::MutableSong>(RightColumnStartX, MainStartY, RightColumnWidth, MainHeight, Config.titles_visibility ? "Tags" : "", Config.main_color, NC::brNone);
Tags->HighlightColor(Config.main_highlight_color);
Tags->CyclicScrolling(Config.use_cyclic_scrolling);
Tags->CenteredCursor(Config.centered_cursor);
Tags->SetSelectPrefix(Config.selected_item_prefix);
Tags->SetSelectSuffix(Config.selected_item_suffix);
Tags->setHighlightColor(Config.main_highlight_color);
Tags->cyclicScrolling(Config.use_cyclic_scrolling);
Tags->centeredCursor(Config.centered_cursor);
Tags->setSelectedPrefix(Config.selected_item_prefix);
Tags->setSelectedSuffix(Config.selected_item_suffix);
Tags->setItemDisplayer(Display::Tags);
FParserDialog = new NC::Menu<std::string>((COLS-FParserDialogWidth)/2, (MainHeight-FParserDialogHeight)/2+MainStartY, FParserDialogWidth, FParserDialogHeight, "", Config.main_color, Config.window_border);
FParserDialog->CyclicScrolling(Config.use_cyclic_scrolling);
FParserDialog->CenteredCursor(Config.centered_cursor);
FParserDialog->cyclicScrolling(Config.use_cyclic_scrolling);
FParserDialog->centeredCursor(Config.centered_cursor);
FParserDialog->setItemDisplayer(Display::Default<std::string>);
FParserDialog->AddItem("Get tags from filename");
FParserDialog->AddItem("Rename files");
FParserDialog->AddSeparator();
FParserDialog->AddItem("Cancel");
FParserDialog->addItem("Get tags from filename");
FParserDialog->addItem("Rename files");
FParserDialog->addSeparator();
FParserDialog->addItem("Cancel");
FParser = new NC::Menu<std::string>((COLS-FParserWidth)/2, (MainHeight-FParserHeight)/2+MainStartY, FParserWidthOne, FParserHeight, "_", Config.main_color, Config.active_window_border);
FParser->CyclicScrolling(Config.use_cyclic_scrolling);
FParser->CenteredCursor(Config.centered_cursor);
FParser->cyclicScrolling(Config.use_cyclic_scrolling);
FParser->centeredCursor(Config.centered_cursor);
FParser->setItemDisplayer(Display::Default<std::string>);
FParserLegend = new NC::Scrollpad((COLS-FParserWidth)/2+FParserWidthOne, (MainHeight-FParserHeight)/2+MainStartY, FParserWidthTwo, FParserHeight, "Legend", Config.main_color, Config.window_border);
@@ -187,24 +187,24 @@ void TagEditor::Resize()
GetWindowResizeParams(x_offset, width);
SetDimensions(x_offset, width);
Albums->Resize(LeftColumnWidth, MainHeight);
Dirs->Resize(LeftColumnWidth, MainHeight);
TagTypes->Resize(MiddleColumnWidth, MainHeight);
Tags->Resize(RightColumnWidth, MainHeight);
FParserDialog->Resize(FParserDialogWidth, FParserDialogHeight);
FParser->Resize(FParserWidthOne, FParserHeight);
FParserLegend->Resize(FParserWidthTwo, FParserHeight);
FParserPreview->Resize(FParserWidthTwo, FParserHeight);
Albums->resize(LeftColumnWidth, MainHeight);
Dirs->resize(LeftColumnWidth, MainHeight);
TagTypes->resize(MiddleColumnWidth, MainHeight);
Tags->resize(RightColumnWidth, MainHeight);
FParserDialog->resize(FParserDialogWidth, FParserDialogHeight);
FParser->resize(FParserWidthOne, FParserHeight);
FParserLegend->resize(FParserWidthTwo, FParserHeight);
FParserPreview->resize(FParserWidthTwo, FParserHeight);
Albums->MoveTo(LeftColumnStartX, MainStartY);
Dirs->MoveTo(LeftColumnStartX, MainStartY);
TagTypes->MoveTo(MiddleColumnStartX, MainStartY);
Tags->MoveTo(RightColumnStartX, MainStartY);
Albums->moveTo(LeftColumnStartX, MainStartY);
Dirs->moveTo(LeftColumnStartX, MainStartY);
TagTypes->moveTo(MiddleColumnStartX, MainStartY);
Tags->moveTo(RightColumnStartX, MainStartY);
FParserDialog->MoveTo(x_offset+(width-FParserDialogWidth)/2, (MainHeight-FParserDialogHeight)/2+MainStartY);
FParser->MoveTo(x_offset+(width-FParserWidth)/2, (MainHeight-FParserHeight)/2+MainStartY);
FParserLegend->MoveTo(x_offset+(width-FParserWidth)/2+FParserWidthOne, (MainHeight-FParserHeight)/2+MainStartY);
FParserPreview->MoveTo(x_offset+(width-FParserWidth)/2+FParserWidthOne, (MainHeight-FParserHeight)/2+MainStartY);
FParserDialog->moveTo(x_offset+(width-FParserDialogWidth)/2, (MainHeight-FParserDialogHeight)/2+MainStartY);
FParser->moveTo(x_offset+(width-FParserWidth)/2, (MainHeight-FParserHeight)/2+MainStartY);
FParserLegend->moveTo(x_offset+(width-FParserWidth)/2+FParserWidthOne, (MainHeight-FParserHeight)/2+MainStartY);
FParserPreview->moveTo(x_offset+(width-FParserWidth)/2+FParserWidthOne, (MainHeight-FParserHeight)/2+MainStartY);
if (MainHeight < 5 && (w == FParserDialog || w == FParser || w == FParserHelper)) // screen too low
w = TagTypes; // fall back to main columns
@@ -242,33 +242,33 @@ void TagEditor::SwitchTo()
void TagEditor::Refresh()
{
LeftColumn->Display();
LeftColumn->display();
mvvline(MainStartY, MiddleColumnStartX-1, 0, MainHeight);
TagTypes->Display();
TagTypes->display();
mvvline(MainStartY, RightColumnStartX-1, 0, MainHeight);
Tags->Display();
Tags->display();
if (w == FParserDialog)
{
FParserDialog->Display();
FParserDialog->display();
}
else if (w == FParser || w == FParserHelper)
{
FParser->Display();
FParserHelper->Display();
FParser->display();
FParserHelper->display();
}
}
void TagEditor::Update()
{
if (LeftColumn->ReallyEmpty())
if (LeftColumn->reallyEmpty())
{
LeftColumn->Window::Clear();
Tags->Clear();
LeftColumn->Window::clear();
Tags->clear();
if (Config.albums_in_tag_editor)
{
*Albums << NC::XY(0, 0) << "Fetching albums...";
Albums->Window::Refresh();
Albums->Window::refresh();
Mpd.BlockIdle(true); // for the same reason as in media library
auto albums = Mpd.GetList(MPD_TAG_ALBUM);
for (auto album = albums.begin(); album != albums.end(); ++album)
@@ -277,10 +277,10 @@ void TagEditor::Update()
Mpd.AddSearch(MPD_TAG_ALBUM, *album);
auto songs = Mpd.CommitSearchSongs();
if (!songs.empty())
Albums->AddItem(std::make_pair(songs[0].toString(Config.tag_editor_album_format), *album));
Albums->addItem(std::make_pair(songs[0].toString(Config.tag_editor_album_format), *album));
}
Mpd.BlockIdle(false);
std::sort(Albums->BeginV(), Albums->EndV(), CaseInsensitiveSorting());
std::sort(Albums->beginV(), Albums->endV(), CaseInsensitiveSorting());
}
else
{
@@ -291,58 +291,58 @@ void TagEditor::Update()
{
size_t slash = itsBrowsedDir.rfind("/");
std::string parent = slash != std::string::npos ? itsBrowsedDir.substr(0, slash) : "/";
Dirs->AddItem(make_pair("..", parent));
Dirs->addItem(make_pair("..", parent));
}
else
Dirs->AddItem(std::make_pair(".", "/"));
Dirs->addItem(std::make_pair(".", "/"));
for (auto dir = dirs.begin(); dir != dirs.end(); ++dir)
{
size_t slash = dir->rfind("/");
std::string to_display = slash != std::string::npos ? dir->substr(slash+1) : *dir;
Dirs->AddItem(make_pair(to_display, *dir));
Dirs->addItem(make_pair(to_display, *dir));
if (*dir == itsHighlightedDir)
highlightme = Dirs->Size()-1;
highlightme = Dirs->size()-1;
}
if (highlightme != -1)
Dirs->Highlight(highlightme);
Dirs->highlight(highlightme);
}
LeftColumn->Display();
TagTypes->Refresh();
LeftColumn->display();
TagTypes->refresh();
}
if (Tags->ReallyEmpty())
if (Tags->reallyEmpty())
{
Tags->Reset();
Tags->reset();
if (Config.albums_in_tag_editor)
{
if (!Albums->Empty())
if (!Albums->empty())
{
Mpd.StartSearch(1);
Mpd.AddSearch(MPD_TAG_ALBUM, Albums->Current().value().second);
Mpd.AddSearch(MPD_TAG_ALBUM, Albums->current().value().second);
auto albums = Mpd.CommitSearchSongs();
std::sort(albums.begin(), albums.end(), CaseInsensitiveSorting());
for (auto album = albums.begin(); album != albums.end(); ++album)
Tags->AddItem(*album);
Tags->addItem(*album);
}
}
else
{
auto songs = Mpd.GetSongs(Dirs->Current().value().second);
auto songs = Mpd.GetSongs(Dirs->current().value().second);
std::sort(songs.begin(), songs.end(), CaseInsensitiveSorting());
for (auto s = songs.begin(); s != songs.end(); ++s)
Tags->AddItem(*s);
Tags->addItem(*s);
}
Tags->Refresh();
Tags->refresh();
}
if (w == TagTypes && TagTypes->Choice() < 13)
if (w == TagTypes && TagTypes->choice() < 13)
{
Tags->Refresh();
Tags->refresh();
}
else if (TagTypes->Choice() >= 13)
else if (TagTypes->choice() >= 13)
{
Tags->Window::Clear();
Tags->Window::Refresh();
Tags->Window::clear();
Tags->Window::refresh();
}
}
@@ -352,20 +352,20 @@ void TagEditor::EnterPressed()
if (w == Dirs)
{
auto dirs = Mpd.GetDirectories(LeftColumn->Current().value().second);
auto dirs = Mpd.GetDirectories(LeftColumn->current().value().second);
if (!dirs.empty())
{
itsHighlightedDir = itsBrowsedDir;
itsBrowsedDir = LeftColumn->Current().value().second;
LeftColumn->Clear();
LeftColumn->Reset();
itsBrowsedDir = LeftColumn->current().value().second;
LeftColumn->clear();
LeftColumn->reset();
}
else
ShowMessage("No subdirs found");
}
else if (w == FParserDialog)
{
size_t choice = FParserDialog->Choice();
size_t choice = FParserDialog->choice();
if (choice == 3) // cancel
{
w = TagTypes;
@@ -376,7 +376,7 @@ void TagEditor::EnterPressed()
// prepare additional windows
FParserLegend->Clear();
FParserLegend->clear();
*FParserLegend << U("%a - artist\n");
*FParserLegend << U("%A - album artist\n");
*FParserLegend << U("%t - title\n");
@@ -391,37 +391,37 @@ void TagEditor::EnterPressed()
*FParserLegend << NC::fmtBold << U("Files:\n") << NC::fmtBoldEnd;
for (auto it = EditedSongs.begin(); it != EditedSongs.end(); ++it)
*FParserLegend << Config.color2 << U(" * ") << NC::clEnd << (*it)->getName() << '\n';
FParserLegend->Flush();
FParserLegend->flush();
if (!Patterns.empty())
Config.pattern = Patterns.front();
FParser->Clear();
FParser->Reset();
FParser->AddItem("Pattern: " + Config.pattern);
FParser->AddItem("Preview");
FParser->AddItem("Legend");
FParser->AddSeparator();
FParser->AddItem("Proceed");
FParser->AddItem("Cancel");
FParser->clear();
FParser->reset();
FParser->addItem("Pattern: " + Config.pattern);
FParser->addItem("Preview");
FParser->addItem("Legend");
FParser->addSeparator();
FParser->addItem("Proceed");
FParser->addItem("Cancel");
if (!Patterns.empty())
{
FParser->AddSeparator();
FParser->AddItem("Recent patterns", 1, 1);
FParser->AddSeparator();
FParser->addSeparator();
FParser->addItem("Recent patterns", 1, 1);
FParser->addSeparator();
for (std::list<std::string>::const_iterator it = Patterns.begin(); it != Patterns.end(); ++it)
FParser->AddItem(*it);
FParser->addItem(*it);
}
FParser->SetTitle(choice == 0 ? "Get tags from filename" : "Rename files");
FParser->setTitle(choice == 0 ? "Get tags from filename" : "Rename files");
w = FParser;
FParserUsePreview = 1;
FParserHelper = FParserLegend;
FParserHelper->Display();
FParserHelper->display();
}
else if (w == FParser)
{
bool quit = 0;
size_t pos = FParser->Choice();
size_t pos = FParser->choice();
if (pos == 4) // save
FParserUsePreview = 0;
@@ -430,7 +430,7 @@ void TagEditor::EnterPressed()
{
LockStatusbar();
Statusbar() << "Pattern: ";
std::string new_pattern = wFooter->GetString(Config.pattern);
std::string new_pattern = wFooter->getString(Config.pattern);
UnlockStatusbar();
if (!new_pattern.empty())
{
@@ -443,11 +443,11 @@ void TagEditor::EnterPressed()
{
bool success = 1;
ShowMessage("Parsing...");
FParserPreview->Clear();
FParserPreview->clear();
for (auto it = EditedSongs.begin(); it != EditedSongs.end(); ++it)
{
MPD::MutableSong &s = **it;
if (FParserDialog->Choice() == 0) // get tags from filename
if (FParserDialog->choice() == 0) // get tags from filename
{
if (FParserUsePreview)
{
@@ -484,8 +484,8 @@ void TagEditor::EnterPressed()
if (FParserUsePreview)
{
FParserHelper = FParserPreview;
FParserHelper->Flush();
FParserHelper->Display();
FParserHelper->flush();
FParserHelper->display();
}
else if (success)
{
@@ -499,7 +499,7 @@ void TagEditor::EnterPressed()
else if (pos == 2) // show legend
{
FParserHelper = FParserLegend;
FParserHelper->Display();
FParserHelper->display();
}
else if (pos == 5) // cancel
{
@@ -507,7 +507,7 @@ void TagEditor::EnterPressed()
}
else // list of patterns
{
Config.pattern = FParser->Current().value();
Config.pattern = FParser->current().value();
FParser->at(0).value() = "Pattern: " + Config.pattern;
}
@@ -520,22 +520,22 @@ void TagEditor::EnterPressed()
}
}
if ((w != TagTypes && w != Tags) || Tags->Empty()) // after this point we start dealing with tags
if ((w != TagTypes && w != Tags) || Tags->empty()) // after this point we start dealing with tags
return;
EditedSongs.clear();
if (Tags->hasSelected()) // if there are selected songs, perform operations only on them
{
std::vector<size_t> selected;
Tags->GetSelected(selected);
Tags->getSelected(selected);
for (auto it = selected.begin(); it != selected.end(); ++it)
EditedSongs.push_back(&(*Tags)[*it].value());
}
else
for (size_t i = 0; i < Tags->Size(); ++i)
for (size_t i = 0; i < Tags->size(); ++i)
EditedSongs.push_back(&(*Tags)[i].value());
size_t id = TagTypes->Choice();
size_t id = TagTypes->choice();
if (w == TagTypes && id == 5)
{
@@ -564,8 +564,8 @@ void TagEditor::EnterPressed()
if (id > 0 && w == TagTypes)
{
LockStatusbar();
Statusbar() << NC::fmtBold << TagTypes->Current().value() << NC::fmtBoldEnd << ": ";
std::string new_tag = wFooter->GetString(Tags->Current().value().getTags(get));
Statusbar() << NC::fmtBold << TagTypes->current().value() << NC::fmtBoldEnd << ": ";
std::string new_tag = wFooter->getString(Tags->current().value().getTags(get));
UnlockStatusbar();
for (auto it = EditedSongs.begin(); it != EditedSongs.end(); ++it)
(*it)->setTag(set, new_tag);
@@ -573,12 +573,12 @@ void TagEditor::EnterPressed()
else if (w == Tags)
{
LockStatusbar();
Statusbar() << NC::fmtBold << TagTypes->Current().value() << NC::fmtBoldEnd << ": ";
std::string new_tag = wFooter->GetString(Tags->Current().value().getTags(get));
Statusbar() << NC::fmtBold << TagTypes->current().value() << NC::fmtBoldEnd << ": ";
std::string new_tag = wFooter->getString(Tags->current().value().getTags(get));
UnlockStatusbar();
if (new_tag != Tags->Current().value().getTags(get))
Tags->Current().value().setTag(set, new_tag);
Tags->Scroll(NC::wDown);
if (new_tag != Tags->current().value().getTags(get))
Tags->current().value().setTag(set, new_tag);
Tags->scroll(NC::wDown);
}
}
else
@@ -592,23 +592,23 @@ void TagEditor::EnterPressed()
ShowMessage("Screen is too small to display additional windows");
return;
}
FParserDialog->Reset();
FParserDialog->reset();
w = FParserDialog;
}
else if (w == Tags)
{
MPD::MutableSong &s = Tags->Current().value();
MPD::MutableSong &s = Tags->current().value();
std::string old_name = s.getNewURI().empty() ? s.getName() : s.getNewURI();
size_t last_dot = old_name.rfind(".");
std::string extension = old_name.substr(last_dot);
old_name = old_name.substr(0, last_dot);
LockStatusbar();
Statusbar() << NC::fmtBold << "New filename: " << NC::fmtBoldEnd;
std::string new_name = wFooter->GetString(old_name);
std::string new_name = wFooter->getString(old_name);
UnlockStatusbar();
if (!new_name.empty() && new_name != old_name)
s.setNewURI(new_name + extension);
Tags->Scroll(NC::wDown);
Tags->scroll(NC::wDown);
}
}
else if (id == 16) // capitalize first letters
@@ -627,7 +627,7 @@ void TagEditor::EnterPressed()
}
else if (id == 18) // reset
{
Tags->Clear();
Tags->clear();
ShowMessage("Changes reset");
}
else if (id == 19) // save
@@ -648,25 +648,25 @@ void TagEditor::EnterPressed()
if (success)
{
ShowMessage("Tags updated");
TagTypes->HighlightColor(Config.main_highlight_color);
TagTypes->Reset();
w->Refresh();
TagTypes->setHighlightColor(Config.main_highlight_color);
TagTypes->reset();
w->refresh();
w = LeftColumn;
LeftColumn->HighlightColor(Config.active_column_color);
Mpd.UpdateDirectory(getSharedDirectory(Tags->BeginV(), Tags->EndV()));
LeftColumn->setHighlightColor(Config.active_column_color);
Mpd.UpdateDirectory(getSharedDirectory(Tags->beginV(), Tags->endV()));
}
else
Tags->Clear();
Tags->clear();
}
}
}
void TagEditor::SpacePressed()
{
if (w == Tags && !Tags->Empty())
if (w == Tags && !Tags->empty())
{
Tags->Current().setSelected(!Tags->Current().isSelected());
w->Scroll(NC::wDown);
Tags->current().setSelected(!Tags->current().isSelected());
w->scroll(NC::wDown);
return;
}
if (w != LeftColumn)
@@ -675,8 +675,8 @@ void TagEditor::SpacePressed()
Config.albums_in_tag_editor = !Config.albums_in_tag_editor;
w = LeftColumn = Config.albums_in_tag_editor ? Albums : Dirs;
ShowMessage("Switched to %s view", Config.albums_in_tag_editor ? "albums" : "directories");
LeftColumn->Display();
Tags->Clear();
LeftColumn->display();
Tags->clear();
}
void TagEditor::MouseButtonPressed(MEVENT me)
@@ -701,7 +701,7 @@ void TagEditor::MouseButtonPressed(MEVENT me)
{
if (w != FParser)
PrevColumn();
if (size_t(me.y) < FParser->Size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
if (size_t(me.y) < FParser->size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
{
FParser->Goto(me.y);
if (me.bstate & BUTTON3_PRESSED)
@@ -717,14 +717,14 @@ void TagEditor::MouseButtonPressed(MEVENT me)
ScrollpadMouseButtonPressed(FParserHelper, me);
}
}
else if (!LeftColumn->Empty() && LeftColumn->hasCoords(me.x, me.y))
else if (!LeftColumn->empty() && LeftColumn->hasCoords(me.x, me.y))
{
if (w != LeftColumn)
{
PrevColumn();
PrevColumn();
}
if (size_t(me.y) < LeftColumn->Size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
if (size_t(me.y) < LeftColumn->size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
{
LeftColumn->Goto(me.y);
if (me.bstate & BUTTON1_PRESSED)
@@ -734,35 +734,35 @@ void TagEditor::MouseButtonPressed(MEVENT me)
}
else
Screen<NC::Window>::MouseButtonPressed(me);
Tags->Clear();
Tags->clear();
}
else if (!TagTypes->Empty() && TagTypes->hasCoords(me.x, me.y))
else if (!TagTypes->empty() && TagTypes->hasCoords(me.x, me.y))
{
if (w != TagTypes)
w == LeftColumn ? NextColumn() : PrevColumn();
if (size_t(me.y) < TagTypes->Size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
if (size_t(me.y) < TagTypes->size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
{
if (!TagTypes->Goto(me.y))
return;
TagTypes->Refresh();
Tags->Refresh();
TagTypes->refresh();
Tags->refresh();
if (me.bstate & BUTTON3_PRESSED)
EnterPressed();
}
else
Screen<NC::Window>::MouseButtonPressed(me);
}
else if (!Tags->Empty() && Tags->hasCoords(me.x, me.y))
else if (!Tags->empty() && Tags->hasCoords(me.x, me.y))
{
if (w != Tags)
{
NextColumn();
NextColumn();
}
if (size_t(me.y) < Tags->Size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
if (size_t(me.y) < Tags->size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
{
Tags->Goto(me.y);
Tags->Refresh();
Tags->refresh();
if (me.bstate & BUTTON3_PRESSED)
EnterPressed();
}
@@ -789,22 +789,22 @@ void TagEditor::applyFilter(const std::string &filter)
{
if (w == Dirs)
{
Dirs->ShowAll();
Dirs->showAll();
auto fun = std::bind(DirEntryMatcher, _1, _2, true);
auto rx = RegexFilter< std::pair<std::string, std::string> >(filter, Config.regex_type, fun);
Dirs->filter(Dirs->Begin(), Dirs->End(), rx);
Dirs->filter(Dirs->begin(), Dirs->end(), rx);
}
else if (w == Albums)
{
Albums->ShowAll();
Albums->showAll();
auto rx = RegexFilter< std::pair<std::string, std::string> >(filter, Config.regex_type, AlbumEntryMatcher);
Albums->filter(Albums->Begin(), Albums->End(), rx);
Albums->filter(Albums->begin(), Albums->end(), rx);
}
else if (w == Tags)
{
Tags->ShowAll();
Tags->showAll();
auto rx = RegexFilter<MPD::MutableSong>(filter, Config.regex_type, SongEntryMatcher);
Tags->filter(Tags->Begin(), Tags->End(), rx);
Tags->filter(Tags->begin(), Tags->end(), rx);
}
}
@@ -817,17 +817,17 @@ bool TagEditor::search(const std::string &constraint)
{
auto fun = std::bind(DirEntryMatcher, _1, _2, false);
auto rx = RegexFilter< std::pair<std::string, std::string> >(constraint, Config.regex_type, fun);
result = Dirs->search(Dirs->Begin(), Dirs->End(), rx);
result = Dirs->search(Dirs->begin(), Dirs->end(), rx);
}
else if (w == Albums)
{
auto rx = RegexFilter< std::pair<std::string, std::string> >(constraint, Config.regex_type, AlbumEntryMatcher);
result = Albums->search(Albums->Begin(), Albums->End(), rx);
result = Albums->search(Albums->begin(), Albums->end(), rx);
}
else if (w == Tags)
{
auto rx = RegexFilter<MPD::MutableSong>(constraint, Config.regex_type, SongEntryMatcher);
result = Tags->search(Tags->Begin(), Tags->End(), rx);
result = Tags->search(Tags->begin(), Tags->end(), rx);
}
return result;
}
@@ -835,21 +835,21 @@ bool TagEditor::search(const std::string &constraint)
void TagEditor::nextFound(bool wrap)
{
if (w == Dirs)
Dirs->NextFound(wrap);
Dirs->nextFound(wrap);
else if (w == Albums)
Albums->NextFound(wrap);
Albums->nextFound(wrap);
else if (w == Tags)
Tags->NextFound(wrap);
Tags->nextFound(wrap);
}
void TagEditor::prevFound(bool wrap)
{
if (w == Dirs)
Dirs->PrevFound(wrap);
Dirs->prevFound(wrap);
else if (w == Albums)
Albums->PrevFound(wrap);
Albums->prevFound(wrap);
else if (w == Tags)
Tags->PrevFound(wrap);
Tags->prevFound(wrap);
}
/***********************************************************************/
@@ -872,7 +872,7 @@ bool TagEditor::allowsSelection()
void TagEditor::reverseSelection()
{
if (w == Tags)
reverseSelectionHelper(Tags->Begin(), Tags->End());
reverseSelectionHelper(Tags->begin(), Tags->end());
}
MPD::SongList TagEditor::getSelectedSongs()
@@ -880,12 +880,12 @@ MPD::SongList TagEditor::getSelectedSongs()
MPD::SongList result;
if (w == Tags)
{
for (auto it = Tags->Begin(); it != Tags->End(); ++it)
for (auto it = Tags->begin(); it != Tags->end(); ++it)
if (it->isSelected())
result.push_back(it->value());
// if no song was selected, add current one
if (result.empty() && !Tags->Empty())
result.push_back(Tags->Current().value());
if (result.empty() && !Tags->empty())
result.push_back(Tags->current().value());
}
return result;
}
@@ -896,12 +896,12 @@ bool TagEditor::isNextColumnAvailable()
{
if (w == LeftColumn)
{
if (!TagTypes->ReallyEmpty() && !Tags->ReallyEmpty())
if (!TagTypes->reallyEmpty() && !Tags->reallyEmpty())
return true;
}
else if (w == TagTypes)
{
if (!Tags->ReallyEmpty())
if (!Tags->reallyEmpty())
return true;
}
else if (w == FParser)
@@ -915,27 +915,27 @@ bool TagEditor::NextColumn()
{
if (w == LeftColumn)
{
LeftColumn->HighlightColor(Config.main_highlight_color);
w->Refresh();
LeftColumn->setHighlightColor(Config.main_highlight_color);
w->refresh();
w = TagTypes;
TagTypes->HighlightColor(Config.active_column_color);
TagTypes->setHighlightColor(Config.active_column_color);
return true;
}
else if (w == TagTypes && TagTypes->Choice() < 13 && !Tags->ReallyEmpty())
else if (w == TagTypes && TagTypes->choice() < 13 && !Tags->reallyEmpty())
{
TagTypes->HighlightColor(Config.main_highlight_color);
w->Refresh();
TagTypes->setHighlightColor(Config.main_highlight_color);
w->refresh();
w = Tags;
Tags->HighlightColor(Config.active_column_color);
Tags->setHighlightColor(Config.active_column_color);
return true;
}
else if (w == FParser)
{
FParser->SetBorder(Config.window_border);
FParser->Display();
FParser->setBorder(Config.window_border);
FParser->display();
w = FParserHelper;
FParserHelper->SetBorder(Config.active_window_border);
FParserHelper->Display();
FParserHelper->setBorder(Config.active_window_border);
FParserHelper->display();
return true;
}
return false;
@@ -945,12 +945,12 @@ bool TagEditor::isPrevColumnAvailable()
{
if (w == Tags)
{
if (!TagTypes->ReallyEmpty() && !LeftColumn->ReallyEmpty())
if (!TagTypes->reallyEmpty() && !LeftColumn->reallyEmpty())
return true;
}
else if (w == TagTypes)
{
if (!LeftColumn->ReallyEmpty())
if (!LeftColumn->reallyEmpty())
return true;
}
else if (w == FParserHelper)
@@ -964,27 +964,27 @@ bool TagEditor::PrevColumn()
{
if (w == Tags)
{
Tags->HighlightColor(Config.main_highlight_color);
w->Refresh();
Tags->setHighlightColor(Config.main_highlight_color);
w->refresh();
w = TagTypes;
TagTypes->HighlightColor(Config.active_column_color);
TagTypes->setHighlightColor(Config.active_column_color);
return true;
}
else if (w == TagTypes)
{
TagTypes->HighlightColor(Config.main_highlight_color);
w->Refresh();
TagTypes->setHighlightColor(Config.main_highlight_color);
w->refresh();
w = LeftColumn;
LeftColumn->HighlightColor(Config.active_column_color);
LeftColumn->setHighlightColor(Config.active_column_color);
return true;
}
else if (w == FParserHelper)
{
FParserHelper->SetBorder(Config.window_border);
FParserHelper->Display();
FParserHelper->setBorder(Config.window_border);
FParserHelper->display();
w = FParser;
FParser->SetBorder(Config.active_window_border);
FParser->Display();
FParser->setBorder(Config.active_window_border);
FParser->display();
return true;
}
return false;
@@ -1020,23 +1020,23 @@ void TagEditor::LocateSong(const MPD::Song &s)
itsBrowsedDir = "/";
if (itsBrowsedDir.empty())
itsBrowsedDir = "/";
Dirs->Clear();
Dirs->clear();
Update();
}
if (itsBrowsedDir == "/")
Dirs->Reset(); // go to the first pos, which is "." (music dir root)
Dirs->reset(); // go to the first pos, which is "." (music dir root)
// highlight directory we need and get files from it
std::string dir = getBasename(s.getDirectory());
for (size_t i = 0; i < Dirs->Size(); ++i)
for (size_t i = 0; i < Dirs->size(); ++i)
{
if ((*Dirs)[i].value().first == dir)
{
Dirs->Highlight(i);
Dirs->highlight(i);
break;
}
}
Tags->Clear();
Tags->clear();
Update();
// go to the right column
@@ -1044,11 +1044,11 @@ void TagEditor::LocateSong(const MPD::Song &s)
NextColumn();
// highlight our file
for (size_t i = 0; i < Tags->Size(); ++i)
for (size_t i = 0; i < Tags->size(); ++i)
{
if ((*Tags)[i].value().getHash() == s.getHash())
{
Tags->Highlight(i);
Tags->highlight(i);
break;
}
}
@@ -1145,13 +1145,13 @@ bool TagEditor::WriteTags(MPD::MutableSong &s)
{
// if we rename local file, it won't get updated
// so just remove it from playlist and add again
size_t pos = myPlaylist->Items->Choice();
size_t pos = myPlaylist->Items->choice();
Mpd.StartCommandsList();
Mpd.Delete(pos);
int id = Mpd.AddSong("file://" + new_name);
if (id >= 0)
{
s = myPlaylist->Items->Back().value();
s = myPlaylist->Items->back().value();
Mpd.Move(s.getPosition(), pos);
}
Mpd.CommitCommandsList();
@@ -1368,7 +1368,7 @@ std::string ParseFilename(MPD::MutableSong &s, std::string mask, bool preview)
std::string SongToString(const MPD::MutableSong &s)
{
std::string result;
size_t i = myTagEditor->TagTypes->Choice();
size_t i = myTagEditor->TagTypes->choice();
if (i < 11)
result = (s.*SongInfo::Tags[i].Get)(0);
else if (i == 12)

View File

@@ -47,9 +47,9 @@ TinyTagEditor *myTinyTagEditor = new TinyTagEditor;
void TinyTagEditor::Init()
{
w = new NC::Menu<NC::Buffer>(0, MainStartY, COLS, MainHeight, "", Config.main_color, NC::brNone);
w->HighlightColor(Config.main_highlight_color);
w->CyclicScrolling(Config.use_cyclic_scrolling);
w->CenteredCursor(Config.centered_cursor);
w->setHighlightColor(Config.main_highlight_color);
w->cyclicScrolling(Config.use_cyclic_scrolling);
w->centeredCursor(Config.centered_cursor);
w->setItemDisplayer(Display::Default<NC::Buffer>);
isInitialized = 1;
}
@@ -58,8 +58,8 @@ void TinyTagEditor::Resize()
{
size_t x_offset, width;
GetWindowResizeParams(x_offset, width);
w->Resize(width, MainHeight);
w->MoveTo(x_offset, MainStartY);
w->resize(width, MainHeight);
w->moveTo(x_offset, MainStartY);
hasToBeResized = 0;
}
@@ -105,14 +105,14 @@ std::basic_string<my_char_t> TinyTagEditor::Title()
void TinyTagEditor::EnterPressed()
{
size_t option = w->Choice();
size_t option = w->choice();
LockStatusbar();
if (option < 19) // separator after comment
{
size_t pos = option-8;
Statusbar() << NC::fmtBold << SongInfo::Tags[pos].Name << ": " << NC::fmtBoldEnd;
itsEdited.setTag(SongInfo::Tags[pos].Set, Global::wFooter->GetString(itsEdited.getTags(SongInfo::Tags[pos].Get)));
w->at(option).value().Clear();
itsEdited.setTag(SongInfo::Tags[pos].Set, Global::wFooter->getString(itsEdited.getTags(SongInfo::Tags[pos].Get)));
w->at(option).value().clear();
w->at(option).value() << NC::fmtBold << SongInfo::Tags[pos].Name << ':' << NC::fmtBoldEnd << ' ';
ShowTag(w->at(option).value(), itsEdited.getTags(SongInfo::Tags[pos].Get));
}
@@ -123,9 +123,9 @@ void TinyTagEditor::EnterPressed()
size_t dot = filename.rfind(".");
std::string extension = filename.substr(dot);
filename = filename.substr(0, dot);
std::string new_name = Global::wFooter->GetString(filename);
std::string new_name = Global::wFooter->getString(filename);
itsEdited.setNewURI(new_name + extension);
w->at(option).value().Clear();
w->at(option).value().clear();
w->at(option).value() << NC::fmtBold << "Filename:" << NC::fmtBoldEnd << ' ' << (itsEdited.getNewURI().empty() ? itsEdited.getName() : itsEdited.getNewURI());
}
UnlockStatusbar();
@@ -141,7 +141,7 @@ void TinyTagEditor::EnterPressed()
else
{
if (myOldScreen == myPlaylist)
myPlaylist->Items->Current().value() = itsEdited;
myPlaylist->Items->current().value() = itsEdited;
else if (myOldScreen == myBrowser)
myBrowser->GetDirectory(myBrowser->CurrentDir());
}
@@ -155,7 +155,7 @@ void TinyTagEditor::EnterPressed()
void TinyTagEditor::MouseButtonPressed(MEVENT me)
{
if (w->Empty() || !w->hasCoords(me.x, me.y) || size_t(me.y) >= w->Size())
if (w->empty() || !w->hasCoords(me.x, me.y) || size_t(me.y) >= w->size())
return;
if (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED))
{
@@ -163,7 +163,7 @@ void TinyTagEditor::MouseButtonPressed(MEVENT me)
return;
if (me.bstate & BUTTON3_PRESSED)
{
w->Refresh();
w->refresh();
EnterPressed();
}
}
@@ -195,10 +195,10 @@ bool TinyTagEditor::getTags()
if (!isInitialized)
Init();
w->Clear();
w->Reset();
w->clear();
w->reset();
w->ResizeList(24);
w->resizeList(24);
for (size_t i = 0; i < 7; ++i)
w->at(i).setInactive(true);
@@ -214,7 +214,7 @@ bool TinyTagEditor::getTags()
w->at(i).setInactive(true);
}
w->Highlight(8);
w->highlight(8);
w->at(0).value() << NC::fmtBold << Config.color1 << "Song name: " << NC::fmtBoldEnd << Config.color2 << itsEdited.getName() << NC::clEnd;
w->at(1).value() << NC::fmtBold << Config.color1 << "Location in DB: " << NC::fmtBoldEnd << Config.color2;

View File

@@ -81,7 +81,7 @@ void Visualizer::SwitchTo()
if (myScreen != this && myScreen->isTabbable())
Global::myPrevScreen = myScreen;
myScreen = this;
w->Clear();
w->clear();
SetFD();
@@ -89,7 +89,7 @@ void Visualizer::SwitchTo()
itsTimer.tv_usec = 0;
if (itsFifo >= 0)
Global::wFooter->SetTimeout(WindowTimeout);
Global::wFooter->setTimeout(WindowTimeout);
Global::RedrawHeader = true;
}
@@ -97,8 +97,8 @@ void Visualizer::Resize()
{
size_t x_offset, width;
GetWindowResizeParams(x_offset, width);
w->Resize(width, MainHeight);
w->MoveTo(x_offset, MainStartY);
w->resize(width, MainHeight);
w->moveTo(x_offset, MainStartY);
hasToBeResized = 0;
}
@@ -134,7 +134,7 @@ void Visualizer::Update()
# endif // HAVE_FFTW3_H
draw = &Visualizer::DrawSoundWave;
w->Clear();
w->clear();
ssize_t samples_read = data/sizeof(int16_t);
if (Config.visualizer_in_stereo)
{
@@ -150,7 +150,7 @@ void Visualizer::Update()
}
else
(this->*draw)(buf, samples_read, 0, MainHeight);
w->Refresh();
w->refresh();
}
void Visualizer::SpacePressed()
@@ -163,10 +163,10 @@ void Visualizer::SpacePressed()
void Visualizer::DrawSoundWave(int16_t *buf, ssize_t samples, size_t y_offset, size_t height)
{
const int samples_per_col = samples/w->GetWidth();
const int samples_per_col = samples/w->getWidth();
const int half_height = height/2;
double prev_point_pos = 0;
const size_t win_width = w->GetWidth();
const size_t win_width = w->getWidth();
for (size_t i = 0; i < win_width; ++i)
{
double point_pos = 0;
@@ -206,7 +206,7 @@ void Visualizer::DrawFrequencySpectrum(int16_t *buf, ssize_t samples, size_t y_o
for (unsigned i = 0; i < itsFFTResults; ++i)
itsFreqsMagnitude[i] = sqrt(itsOutput[i][0]*itsOutput[i][0] + itsOutput[i][1]*itsOutput[i][1])/1e5*height/5;
const size_t win_width = w->GetWidth();
const size_t win_width = w->getWidth();
const int freqs_per_col = itsFFTResults/win_width /* cut bandwidth a little to achieve better look */ * 7/10;
for (size_t i = 0; i < win_width; ++i)
{
@@ -215,7 +215,7 @@ void Visualizer::DrawFrequencySpectrum(int16_t *buf, ssize_t samples, size_t y_o
bar_height += itsFreqsMagnitude[i*freqs_per_col+j];
bar_height = std::min(bar_height/freqs_per_col, height);
const size_t start_y = y_offset > 0 ? y_offset : height-bar_height;
const size_t stop_y = std::min(bar_height+start_y, w->GetHeight());
const size_t stop_y = std::min(bar_height+start_y, w->getHeight());
for (size_t j = start_y; j < stop_y; ++j)
*w << NC::XY(i, j) << Config.visualizer_chars[1];
}

View File

@@ -34,7 +34,7 @@
namespace NC {//
void InitScreen(GNUC_UNUSED const char *window_title, bool enable_colors)
void initScreen(GNUC_UNUSED const char *window_title, bool enable_colors)
{
const int ColorsTable[] =
{
@@ -65,7 +65,7 @@ void InitScreen(GNUC_UNUSED const char *window_title, bool enable_colors)
curs_set(0);
}
void DestroyScreen()
void destroyScreen()
{
curs_set(1);
endwin();
@@ -78,305 +78,298 @@ Window::Window(size_t startx,
const std::string &title,
Color color,
Border border)
: itsWindow(0),
itsWinBorder(0),
itsStartX(startx),
itsStartY(starty),
itsWidth(width),
itsHeight(height),
itsWindowTimeout(-1),
itsColor(color),
itsBgColor(clDefault),
itsBaseColor(color),
itsBaseBgColor(clDefault),
itsBorder(border),
itsGetStringHelper(0),
itsTitle(title),
itsHistory(0),
itsBoldCounter(0),
itsUnderlineCounter(0),
itsReverseCounter(0),
itsAltCharsetCounter(0)
: m_window(0),
m_border_window(0),
m_start_x(startx),
m_start_y(starty),
m_width(width),
m_height(height),
m_window_timeout(-1),
m_color(color),
m_bg_color(clDefault),
m_base_color(color),
m_base_bg_color(clDefault),
m_border(border),
m_get_string_helper(0),
m_title(title),
m_history(0),
m_bold_counter(0),
m_underline_counter(0),
m_reverse_counter(0),
m_alt_charset_counter(0)
{
if (itsStartX > size_t(COLS)
|| itsStartY > size_t(LINES)
|| itsWidth+itsStartX > size_t(COLS)
|| itsHeight+itsStartY > size_t(LINES))
if (m_start_x > size_t(COLS)
|| m_start_y > size_t(LINES)
|| m_width+m_start_x > size_t(COLS)
|| m_height+m_start_y > size_t(LINES))
FatalError("Constructed window is bigger than terminal size!");
if (itsBorder != brNone)
if (m_border != brNone)
{
itsWinBorder = newpad(itsHeight, itsWidth);
wattron(itsWinBorder, COLOR_PAIR(itsBorder));
box(itsWinBorder, 0, 0);
itsStartX++;
itsStartY++;
itsWidth -= 2;
itsHeight -= 2;
m_border_window = newpad(m_height, m_width);
wattron(m_border_window, COLOR_PAIR(m_border));
box(m_border_window, 0, 0);
m_start_x++;
m_start_y++;
m_width -= 2;
m_height -= 2;
}
if (!itsTitle.empty())
if (!m_title.empty())
{
itsStartY += 2;
itsHeight -= 2;
m_start_y += 2;
m_height -= 2;
}
itsWindow = newpad(itsHeight, itsWidth);
m_window = newpad(m_height, m_width);
SetColor(itsColor);
keypad(itsWindow, 1);
setColor(m_color);
keypad(m_window, 1);
}
Window::Window(const Window &w) : itsWindow(dupwin(w.itsWindow)),
itsWinBorder(dupwin(w.itsWinBorder)),
itsStartX(w.itsStartX),
itsStartY(w.itsStartY),
itsWidth(w.itsWidth),
itsHeight(w.itsHeight),
itsWindowTimeout(w.itsWindowTimeout),
itsColor(w.itsColor),
itsBgColor(w.itsBgColor),
itsBaseColor(w.itsBaseColor),
itsBaseBgColor(w.itsBaseBgColor),
itsBorder(w.itsBorder),
itsGetStringHelper(w.itsGetStringHelper),
itsTitle(w.itsTitle),
itsColors(w.itsColors),
itsHistory(w.itsHistory),
itsBoldCounter(w.itsBoldCounter),
itsUnderlineCounter(w.itsUnderlineCounter),
itsReverseCounter(w.itsReverseCounter),
itsAltCharsetCounter(w.itsAltCharsetCounter)
Window::Window(const Window &w) : m_window(dupwin(w.m_window)),
m_border_window(dupwin(w.m_border_window)),
m_start_x(w.m_start_x),
m_start_y(w.m_start_y),
m_width(w.m_width),
m_height(w.m_height),
m_window_timeout(w.m_window_timeout),
m_color(w.m_color),
m_bg_color(w.m_bg_color),
m_base_color(w.m_base_color),
m_base_bg_color(w.m_base_bg_color),
m_border(w.m_border),
m_get_string_helper(w.m_get_string_helper),
m_title(w.m_title),
m_color_stack(w.m_color_stack),
m_history(w.m_history),
m_bold_counter(w.m_bold_counter),
m_underline_counter(w.m_underline_counter),
m_reverse_counter(w.m_reverse_counter),
m_alt_charset_counter(w.m_alt_charset_counter)
{
}
Window::~Window()
{
delwin(itsWindow);
delwin(itsWinBorder);
delwin(m_window);
delwin(m_border_window);
}
void Window::SetColor(Color fg, Color bg)
void Window::setColor(Color fg, Color bg)
{
if (fg == clDefault)
fg = itsBaseColor;
fg = m_base_color;
if (fg != clDefault)
wattron(itsWindow, COLOR_PAIR(bg*8+fg));
wattron(m_window, COLOR_PAIR(bg*8+fg));
else
wattroff(itsWindow, COLOR_PAIR(itsColor));
itsColor = fg;
itsBgColor = bg;
wattroff(m_window, COLOR_PAIR(m_color));
m_color = fg;
m_bg_color = bg;
}
void Window::SetBaseColor(Color fg, Color bg)
void Window::setBaseColor(Color fg, Color bg)
{
itsBaseColor = fg;
itsBaseBgColor = bg;
m_base_color = fg;
m_base_bg_color = bg;
}
void Window::SetBorder(Border border)
void Window::setBorder(Border border)
{
if (border == brNone && itsBorder != brNone)
if (border == brNone && m_border != brNone)
{
delwin(itsWinBorder);
itsStartX--;
itsStartY--;
itsHeight += 2;
itsWidth += 2;
Recreate(itsWidth, itsHeight);
delwin(m_border_window);
m_start_x--;
m_start_y--;
m_height += 2;
m_width += 2;
recreate(m_width, m_height);
}
else if (border != brNone && itsBorder == brNone)
else if (border != brNone && m_border == brNone)
{
itsWinBorder = newpad(itsHeight, itsWidth);
wattron(itsWinBorder, COLOR_PAIR(border));
box(itsWinBorder,0,0);
itsStartX++;
itsStartY++;
itsHeight -= 2;
itsWidth -= 2;
Recreate(itsWidth, itsHeight);
m_border_window = newpad(m_height, m_width);
wattron(m_border_window, COLOR_PAIR(border));
box(m_border_window,0,0);
m_start_x++;
m_start_y++;
m_height -= 2;
m_width -= 2;
recreate(m_width, m_height);
}
else
{
wattron(itsWinBorder,COLOR_PAIR(border));
box(itsWinBorder, 0, 0);
wattron(m_border_window,COLOR_PAIR(border));
box(m_border_window, 0, 0);
}
itsBorder = border;
m_border = border;
}
void Window::SetTitle(const std::string &new_title)
void Window::setTitle(const std::string &new_title)
{
if (itsTitle == new_title)
if (m_title == new_title)
{
return;
}
else if (!new_title.empty() && itsTitle.empty())
else if (!new_title.empty() && m_title.empty())
{
itsStartY += 2;
itsHeight -= 2;
Recreate(itsWidth, itsHeight);
m_start_y += 2;
m_height -= 2;
recreate(m_width, m_height);
}
else if (new_title.empty() && !itsTitle.empty())
else if (new_title.empty() && !m_title.empty())
{
itsStartY -= 2;
itsHeight += 2;
Recreate(itsWidth, itsHeight);
m_start_y -= 2;
m_height += 2;
recreate(m_width, m_height);
}
itsTitle = new_title;
m_title = new_title;
}
void Window::CreateHistory()
void Window::createHistory()
{
if (!itsHistory)
itsHistory = new std::list<std::wstring>;
if (!m_history)
m_history = new std::list<std::wstring>;
}
void Window::DeleteHistory()
void Window::deleteHistory()
{
delete itsHistory;
itsHistory = 0;
delete m_history;
m_history = 0;
}
void Window::Recreate(size_t width, size_t height)
void Window::recreate(size_t width, size_t height)
{
delwin(itsWindow);
itsWindow = newpad(height, width);
SetTimeout(itsWindowTimeout);
SetColor(itsColor, itsBgColor);
keypad(itsWindow, 1);
delwin(m_window);
m_window = newpad(height, width);
setTimeout(m_window_timeout);
setColor(m_color, m_bg_color);
keypad(m_window, 1);
}
void Window::MoveTo(size_t new_x, size_t new_y)
void Window::moveTo(size_t new_x, size_t new_y)
{
itsStartX = new_x;
itsStartY = new_y;
if (itsBorder != brNone)
m_start_x = new_x;
m_start_y = new_y;
if (m_border != brNone)
{
itsStartX++;
itsStartY++;
m_start_x++;
m_start_y++;
}
if (!itsTitle.empty())
itsStartY += 2;
if (!m_title.empty())
m_start_y += 2;
}
void Window::AdjustDimensions(size_t width, size_t height)
void Window::adjustDimensions(size_t width, size_t height)
{
if (itsBorder != brNone)
if (m_border != brNone)
{
delwin(itsWinBorder);
itsWinBorder = newpad(height, width);
wattron(itsWinBorder, COLOR_PAIR(itsBorder));
box(itsWinBorder, 0, 0);
delwin(m_border_window);
m_border_window = newpad(height, width);
wattron(m_border_window, COLOR_PAIR(m_border));
box(m_border_window, 0, 0);
width -= 2;
height -= 2;
}
if (!itsTitle.empty())
if (!m_title.empty())
height -= 2;
itsHeight = height;
itsWidth = width;
m_height = height;
m_width = width;
}
void Window::Resize(size_t new_width, size_t new_height)
void Window::resize(size_t new_width, size_t new_height)
{
AdjustDimensions(new_width, new_height);
Recreate(itsWidth, itsHeight);
adjustDimensions(new_width, new_height);
recreate(m_width, m_height);
}
void Window::ShowBorder() const
void Window::showBorder() const
{
if (itsBorder != brNone)
if (m_border != brNone)
{
refresh();
prefresh(itsWinBorder, 0, 0, GetStartY(), GetStartX(), itsStartY+itsHeight, itsStartX+itsWidth);
::refresh();
prefresh(m_border_window, 0, 0, getStarty(), getStartX(), m_start_y+m_height, m_start_x+m_width);
}
if (!itsTitle.empty())
if (!m_title.empty())
{
if (itsBorder != brNone)
attron(COLOR_PAIR(itsBorder));
if (m_border != brNone)
attron(COLOR_PAIR(m_border));
else
attron(COLOR_PAIR(itsBaseColor));
mvhline(itsStartY-1, itsStartX, 0, itsWidth);
attron(COLOR_PAIR(m_base_color));
mvhline(m_start_y-1, m_start_x, 0, m_width);
attron(A_BOLD);
mvhline(itsStartY-2, itsStartX, 32, itsWidth); // clear title line
mvaddstr(itsStartY-2, itsStartX, itsTitle.c_str());
attroff(COLOR_PAIR(itsBorder) | A_BOLD);
mvhline(m_start_y-2, m_start_x, 32, m_width); // clear title line
mvaddstr(m_start_y-2, m_start_x, m_title.c_str());
attroff(COLOR_PAIR(m_border) | A_BOLD);
}
::refresh();
}
void Window::display()
{
showBorder();
refresh();
}
void Window::Display()
void Window::refresh()
{
ShowBorder();
Refresh();
prefresh(m_window, 0, 0, m_start_y, m_start_x, m_start_y+m_height-1, m_start_x+m_width-1);
}
void Window::Refresh()
void Window::clear()
{
prefresh(itsWindow, 0, 0, itsStartY, itsStartX, itsStartY+itsHeight-1, itsStartX+itsWidth-1);
werase(m_window);
}
void Window::Clear()
void Window::bold(bool bold_state) const
{
werase(itsWindow);
(bold_state ? wattron : wattroff)(m_window, A_BOLD);
}
void Window::Hide(char ch) const
void Window::underline(bool underline_state) const
{
for (size_t i = 0; i < GetHeight(); ++i)
mvhline(i+GetStartY(), GetStartX(), ch, GetWidth());
refresh();
(underline_state ? wattron : wattroff)(m_window, A_UNDERLINE);
}
void Window::Bold(bool bold_state) const
void Window::reverse(bool reverse_state) const
{
(bold_state ? wattron : wattroff)(itsWindow, A_BOLD);
(reverse_state ? wattron : wattroff)(m_window, A_REVERSE);
}
void Window::Underline(bool underline_state) const
void Window::altCharset(bool altcharset_state) const
{
(underline_state ? wattron : wattroff)(itsWindow, A_UNDERLINE);
(altcharset_state ? wattron : wattroff)(m_window, A_ALTCHARSET);
}
void Window::Reverse(bool reverse_state) const
void Window::setTimeout(int timeout)
{
(reverse_state ? wattron : wattroff)(itsWindow, A_REVERSE);
m_window_timeout = timeout;
wtimeout(m_window, timeout);
}
void Window::AltCharset(bool altcharset_state) const
void Window::addFDCallback(int fd, void (*callback)())
{
(altcharset_state ? wattron : wattroff)(itsWindow, A_ALTCHARSET);
m_fds.push_back(std::make_pair(fd, callback));
}
void Window::SetTimeout(int timeout)
void Window::clearFDCallbacksList()
{
itsWindowTimeout = timeout;
wtimeout(itsWindow, timeout);
}
void Window::AddFDCallback(int fd, void (*callback)())
{
itsFDs.push_back(std::make_pair(fd, callback));
}
void Window::ClearFDCallbacksList()
{
itsFDs.clear();
m_fds.clear();
}
bool Window::FDCallbacksListEmpty() const
{
return itsFDs.empty();
return m_fds.empty();
}
int Window::ReadKey()
int Window::readKey()
{
int result;
// if there are characters in input queue, get them and
// return immediately.
if (!itsInputQueue.empty())
if (!m_input_queue.empty())
{
result = itsInputQueue.front();
itsInputQueue.pop();
result = m_input_queue.front();
m_input_queue.pop();
return result;
}
// in pdcurses polling stdin doesn't work, so we can't poll
@@ -391,25 +384,25 @@ int Window::ReadKey()
FD_ZERO(&fdset);
# if !defined(USE_PDCURSES)
FD_SET(STDIN_FILENO, &fdset);
timeval timeout = { itsWindowTimeout/1000, (itsWindowTimeout%1000)*1000 };
timeval timeout = { m_window_timeout/1000, (m_window_timeout%1000)*1000 };
# else
timeval timeout = { 0, 0 };
# endif
int fd_max = STDIN_FILENO;
for (FDCallbacks::const_iterator it = itsFDs.begin(); it != itsFDs.end(); ++it)
for (FDCallbacks::const_iterator it = m_fds.begin(); it != m_fds.end(); ++it)
{
if (it->first > fd_max)
fd_max = it->first;
FD_SET(it->first, &fdset);
}
if (select(fd_max+1, &fdset, 0, 0, itsWindowTimeout < 0 ? 0 : &timeout) > 0)
if (select(fd_max+1, &fdset, 0, 0, m_window_timeout < 0 ? 0 : &timeout) > 0)
{
# if !defined(USE_PDCURSES)
result = FD_ISSET(STDIN_FILENO, &fdset) ? wgetch(itsWindow) : ERR;
result = FD_ISSET(STDIN_FILENO, &fdset) ? wgetch(m_window) : ERR;
# endif // !USE_PDCURSES
for (FDCallbacks::const_iterator it = itsFDs.begin(); it != itsFDs.end(); ++it)
for (FDCallbacks::const_iterator it = m_fds.begin(); it != m_fds.end(); ++it)
if (FD_ISSET(it->first, &fdset))
it->second();
}
@@ -417,33 +410,33 @@ int Window::ReadKey()
else
result = ERR;
# else
result = wgetch(itsWindow);
result = wgetch(m_window);
# endif
return result;
}
void Window::PushChar(int ch)
void Window::pushChar(int ch)
{
itsInputQueue.push(ch);
m_input_queue.push(ch);
}
std::string Window::GetString(const std::string &base, size_t length, size_t width, bool encrypted)
std::string Window::getString(const std::string &base, size_t length, size_t width, bool encrypted)
{
int input;
size_t beginning, maxbeginning, minx, x, real_x, y, maxx, real_maxx;
getyx(itsWindow, y, x);
getyx(m_window, y, x);
minx = real_maxx = maxx = real_x = x;
width--;
if (width == size_t(-1))
width = itsWidth-x-1;
width = m_width-x-1;
curs_set(1);
std::wstring wbase = ToWString(base);
std::wstring *tmp = &wbase;
std::list<std::wstring>::iterator history_it = itsHistory->end();
std::list<std::wstring>::iterator history_it = m_history->end();
std::string tmp_in;
wchar_t wc_in;
@@ -463,7 +456,7 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid
block_scrolling = 0;
maxbeginning = block_scrolling ? 0 : (tmp->length() < width ? 0 : tmp->length()-width);
maxx = minx + (Length(*tmp) < width ? Length(*tmp) : width);
maxx = minx + (Window::length(*tmp) < width ? Window::length(*tmp) : width);
real_maxx = minx + (tmp->length() < width ? tmp->length() : width);
@@ -490,19 +483,19 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid
gotoend = 0;
}
mvwhline(itsWindow, y, minx, ' ', width+1);
mvwhline(m_window, y, minx, ' ', width+1);
if (!encrypted)
mvwprintw(itsWindow, y, minx, "%ls", tmp->substr(beginning, width+1).c_str());
mvwprintw(m_window, y, minx, "%ls", tmp->substr(beginning, width+1).c_str());
else
mvwhline(itsWindow, y, minx, '*', maxx-minx);
mvwhline(m_window, y, minx, '*', maxx-minx);
if (itsGetStringHelper)
itsGetStringHelper(*tmp);
if (m_get_string_helper)
m_get_string_helper(*tmp);
wmove(itsWindow, y, x);
prefresh(itsWindow, 0, 0, itsStartY, itsStartX, itsStartY+itsHeight-1, itsStartX+itsWidth-1);
input = ReadKey();
wmove(m_window, y, x);
prefresh(m_window, 0, 0, m_start_y, m_start_x, m_start_y+m_height-1, m_start_x+m_width-1);
input = readKey();
switch (input)
{
@@ -510,9 +503,9 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid
case KEY_MOUSE:
break;
case KEY_UP:
if (itsHistory && !encrypted && history_it != itsHistory->begin())
if (m_history && !encrypted && history_it != m_history->begin())
{
while (--history_it != itsHistory->begin())
while (--history_it != m_history->begin())
if (!history_it->empty())
break;
tmp = &*history_it;
@@ -520,12 +513,12 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid
}
break;
case KEY_DOWN:
if (itsHistory && !encrypted && history_it != itsHistory->end())
if (m_history && !encrypted && history_it != m_history->end())
{
while (++history_it != itsHistory->end())
while (++history_it != m_history->end())
if (!history_it->empty())
break;
tmp = &(history_it == itsHistory->end() ? wbase : *history_it);
tmp = &(history_it == m_history->end() ? wbase : *history_it);
gotoend = 1;
}
break;
@@ -634,133 +627,133 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid
while (input != KEY_ENTER);
curs_set(0);
if (itsHistory && !encrypted)
if (m_history && !encrypted)
{
if (history_it != itsHistory->end())
if (history_it != m_history->end())
{
itsHistory->push_back(*history_it);
tmp = &itsHistory->back();
itsHistory->erase(history_it);
m_history->push_back(*history_it);
tmp = &m_history->back();
m_history->erase(history_it);
}
else
itsHistory->push_back(*tmp);
m_history->push_back(*tmp);
}
return ToString(*tmp);
}
void Window::GotoXY(int x, int y)
void Window::goToXY(int x, int y)
{
wmove(itsWindow, y, x);
wmove(m_window, y, x);
}
int Window::X()
int Window::x()
{
return getcurx(itsWindow);
return getcurx(m_window);
}
int Window::Y()
int Window::y()
{
return getcury(itsWindow);
return getcury(m_window);
}
bool Window::hasCoords(int &x, int &y)
{
# ifndef USE_PDCURSES
return wmouse_trafo(itsWindow, &y, &x, 0);
return wmouse_trafo(m_window, &y, &x, 0);
# else
// wmouse_trafo is broken in pdcurses, use our own implementation
size_t u_x = x, u_y = y;
if (u_x >= itsStartX && u_x < itsStartX+itsWidth
&& u_y >= itsStartY && u_y < itsStartY+itsHeight)
if (u_x >= m_start_x && u_x < m_start_x+m_width
&& u_y >= m_start_y && u_y < m_start_y+m_height)
{
x -= itsStartX;
y -= itsStartY;
x -= m_start_x;
y -= m_start_y;
return true;
}
return false;
# endif
}
size_t Window::GetWidth() const
size_t Window::getWidth() const
{
if (itsBorder != brNone)
return itsWidth+2;
if (m_border != brNone)
return m_width+2;
else
return itsWidth;
return m_width;
}
size_t Window::GetHeight() const
size_t Window::getHeight() const
{
size_t height = itsHeight;
if (itsBorder != brNone)
size_t height = m_height;
if (m_border != brNone)
height += 2;
if (!itsTitle.empty())
if (!m_title.empty())
height += 2;
return height;
}
size_t Window::GetStartX() const
size_t Window::getStartX() const
{
if (itsBorder != brNone)
return itsStartX-1;
if (m_border != brNone)
return m_start_x-1;
else
return itsStartX;
return m_start_x;
}
size_t Window::GetStartY() const
size_t Window::getStarty() const
{
size_t starty = itsStartY;
if (itsBorder != brNone)
size_t starty = m_start_y;
if (m_border != brNone)
starty--;
if (!itsTitle.empty())
if (!m_title.empty())
starty -= 2;
return starty;
}
const std::string &Window::getTitle() const
{
return itsTitle;
return m_title;
}
Color Window::GetColor() const
Color Window::getColor() const
{
return itsColor;
return m_color;
}
Border Window::GetBorder() const
Border Window::getBorder() const
{
return itsBorder;
return m_border;
}
int Window::GetTimeout() const
int Window::getTimeout() const
{
return itsWindowTimeout;
return m_window_timeout;
}
void Window::Scroll(Where where)
void Window::scroll(Where where)
{
idlok(itsWindow, 1);
scrollok(itsWindow, 1);
idlok(m_window, 1);
scrollok(m_window, 1);
switch (where)
{
case wUp:
wscrl(itsWindow, 1);
wscrl(m_window, 1);
break;
case wDown:
wscrl(itsWindow, -1);
wscrl(m_window, -1);
break;
case wPageUp:
wscrl(itsWindow, itsWidth);
wscrl(m_window, m_width);
break;
case wPageDown:
wscrl(itsWindow, -itsWidth);
wscrl(m_window, -m_width);
break;
default:
break;
}
idlok(itsWindow, 0);
scrollok(itsWindow, 0);
idlok(m_window, 0);
scrollok(m_window, 0);
}
@@ -771,8 +764,8 @@ Window &Window::operator<<(Colors colors)
*this << clEnd;
return *this;
}
itsColors.push(colors);
SetColor(colors.fg, colors.bg);
m_color_stack.push(colors);
setColor(colors.fg, colors.bg);
return *this;
}
@@ -781,21 +774,21 @@ Window &Window::operator<<(Color color)
switch (color)
{
case clDefault:
while (!itsColors.empty())
itsColors.pop();
SetColor(itsBaseColor, itsBaseBgColor);
while (!m_color_stack.empty())
m_color_stack.pop();
setColor(m_base_color, m_base_bg_color);
break;
case clEnd:
if (!itsColors.empty())
itsColors.pop();
if (!itsColors.empty())
SetColor(itsColors.top().fg, itsColors.top().bg);
if (!m_color_stack.empty())
m_color_stack.pop();
if (!m_color_stack.empty())
setColor(m_color_stack.top().fg, m_color_stack.top().bg);
else
SetColor(itsBaseColor, itsBaseBgColor);
setColor(m_base_color, m_base_bg_color);
break;
default:
itsColors.push(Colors(color, clDefault));
SetColor(itsColors.top().fg, itsColors.top().bg);
m_color_stack.push(Colors(color, clDefault));
setColor(m_color_stack.top().fg, m_color_stack.top().bg);
}
return *this;
}
@@ -805,37 +798,37 @@ Window &Window::operator<<(Format format)
switch (format)
{
case fmtNone:
Bold((itsBoldCounter = 0));
Reverse((itsReverseCounter = 0));
AltCharset((itsAltCharsetCounter = 0));
bold((m_bold_counter = 0));
reverse((m_reverse_counter = 0));
altCharset((m_alt_charset_counter = 0));
break;
case fmtBold:
Bold(++itsBoldCounter);
bold(++m_bold_counter);
break;
case fmtBoldEnd:
if (--itsBoldCounter <= 0)
Bold((itsBoldCounter = 0));
if (--m_bold_counter <= 0)
bold((m_bold_counter = 0));
break;
case fmtUnderline:
Underline(++itsUnderlineCounter);
underline(++m_underline_counter);
break;
case fmtUnderlineEnd:
if (--itsUnderlineCounter <= 0)
Underline((itsUnderlineCounter = 0));
if (--m_underline_counter <= 0)
underline((m_underline_counter = 0));
break;
case fmtReverse:
Reverse(++itsReverseCounter);
reverse(++m_reverse_counter);
break;
case fmtReverseEnd:
if (--itsReverseCounter <= 0)
Reverse((itsReverseCounter = 0));
if (--m_reverse_counter <= 0)
reverse((m_reverse_counter = 0));
break;
case fmtAltCharset:
AltCharset(++itsAltCharsetCounter);
altCharset(++m_alt_charset_counter);
break;
case fmtAltCharsetEnd:
if (--itsAltCharsetCounter <= 0)
AltCharset((itsAltCharsetCounter = 0));
if (--m_alt_charset_counter <= 0)
altCharset((m_alt_charset_counter = 0));
break;
}
return *this;
@@ -843,73 +836,73 @@ Window &Window::operator<<(Format format)
Window &Window::operator<<(int (*f)(WINDOW *))
{
f(itsWindow);
f(m_window);
return *this;
}
Window &Window::operator<<(XY coords)
{
GotoXY(coords.x, coords.y);
goToXY(coords.x, coords.y);
return *this;
}
Window &Window::operator<<(const char *s)
{
wprintw(itsWindow, "%s", s);
wprintw(m_window, "%s", s);
return *this;
}
Window &Window::operator<<(char c)
{
wprintw(itsWindow, "%c", c);
wprintw(m_window, "%c", c);
return *this;
}
Window &Window::operator<<(const wchar_t *ws)
{
wprintw(itsWindow, "%ls", ws);
wprintw(m_window, "%ls", ws);
return *this;
}
Window &Window::operator<<(wchar_t wc)
{
wprintw(itsWindow, "%lc", wc);
wprintw(m_window, "%lc", wc);
return *this;
}
Window &Window::operator<<(int i)
{
wprintw(itsWindow, "%d", i);
wprintw(m_window, "%d", i);
return *this;
}
Window &Window::operator<<(double d)
{
wprintw(itsWindow, "%f", d);
wprintw(m_window, "%f", d);
return *this;
}
Window &Window::operator<<(const std::string &s)
{
for (std::string::const_iterator it = s.begin(); it != s.end(); ++it)
wprintw(itsWindow, "%c", *it);
wprintw(m_window, "%c", *it);
return *this;
}
Window &Window::operator<<(const std::wstring &ws)
{
for (std::wstring::const_iterator it = ws.begin(); it != ws.end(); ++it)
wprintw(itsWindow, "%lc", *it);
wprintw(m_window, "%lc", *it);
return *this;
}
Window &Window::operator<<(size_t s)
{
wprintw(itsWindow, "%zu", s);
wprintw(m_window, "%zu", s);
return *this;
}
size_t Window::Length(const std::wstring &ws)
size_t Window::length(const std::wstring &ws)
{
# ifdef WIN32
return ws.length();
@@ -919,7 +912,7 @@ size_t Window::Length(const std::wstring &ws)
# endif // WIN32
}
void Window::Cut(std::wstring &ws, size_t max_len)
void Window::cut(std::wstring &ws, size_t max_len)
{
size_t i = 0;
int remained_len = max_len;

View File

@@ -91,6 +91,9 @@
#undef KEY_ENTER
#define KEY_ENTER 10
// undefine scroll macro as it collides with Window::scroll
#undef scroll
#ifndef USE_PDCURSES
// NOTICE: redefine BUTTON2_PRESSED as it doesn't always work, I noticed
// that it sometimes returns 134217728 (2^27) instead of expected mask, so the
@@ -118,15 +121,12 @@
/// NC namespace provides set of easy-to-use
/// wrappers over original curses library
///
namespace NC {//
/// Colors used by NCurses
///
enum Color { clDefault, clBlack, clRed, clGreen, clYellow, clBlue, clMagenta, clCyan, clWhite, clEnd };
/// Format flags used by NCurses
///
enum Format {
fmtNone = clEnd+1,
fmtBold, fmtBoldEnd,
@@ -136,32 +136,26 @@ enum Format {
};
/// Available border colors for window
///
enum Border { brNone, brBlack, brRed, brGreen, brYellow, brBlue, brMagenta, brCyan, brWhite };
/// This indicates how much the window has to be scrolled
///
enum Where { wUp, wDown, wPageUp, wPageDown, wHome, wEnd };
/// Helper function that is invoked each time one will want
/// to obtain string from Window::GetString() function
/// @see Window::GetString()
///
/// to obtain string from Window::getString() function
/// @see Window::getString()
typedef std::function<void(const std::wstring &)> GetStringHelper;
/// Initializes curses screen and sets some additional attributes
/// @param window_title title of the window (has an effect only if pdcurses lib is used)
/// @param enable_colors enables colors
///
void InitScreen(const char *window_title, bool enable_colors);
void initScreen(const char *window_title, bool enable_colors);
/// Destroys the screen
///
void DestroyScreen();
void destroyScreen();
/// Struct used to set color of both foreground and background of window
/// @see Window::operator<<()
///
struct Colors
{
Colors(Color one, Color two = clDefault) : fg(one), bg(two) { }
@@ -171,7 +165,6 @@ struct Colors
/// Struct used for going to given coordinates
/// @see Window::operator<<()
///
struct XY
{
XY(int xx, int yy) : x(xx), y(yy) { }
@@ -180,7 +173,6 @@ struct XY
};
/// Main class of NCurses namespace, used as base for other specialized windows
///
struct Window
{
/// Constructs an empty window with given parameters
@@ -191,56 +183,44 @@ struct Window
/// @param title title of constructed window
/// @param color base color of constructed window
/// @param border border of constructed window
///
Window(size_t startx, size_t starty, size_t width, size_t height,
const std::string &title, Color color, Border border);
/// Copies thw window
/// @param w copied window
///
Window(const Window &w);
/// Destroys the window and frees memory
///
virtual ~Window();
/// Allows for direct access to internal WINDOW pointer in case there
/// is no wrapper for a function from curses library one may want to use
/// @return internal WINDOW pointer
///
WINDOW *Raw() const { return itsWindow; }
WINDOW *raw() const { return m_window; }
/// @return window's width
///
size_t GetWidth() const;
size_t getWidth() const;
/// @return window's height
///
size_t GetHeight() const;
size_t getHeight() const;
/// @return X position of left upper window's corner
///
size_t GetStartX() const;
size_t getStartX() const;
/// @return Y position of left upper window's corner
///
size_t GetStartY() const;
size_t getStarty() const;
/// @return window's title
///
const std::string &getTitle() const;
/// @return current window's color
///
Color GetColor() const;
Color getColor() const;
/// @return current window's border
///
Border GetBorder() const;
Border getBorder() const;
/// @return current window's timeout
///
int GetTimeout() const;
int getTimeout() const;
/// Reads the string from standard input. Note that this is much more complex
/// function than getstr() from curses library. It allows for moving through
@@ -257,36 +237,31 @@ struct Window
/// actual text.
/// @return edited string
///
/// @see SetGetStringHelper()
/// @see setGetStringHelper()
/// @see SetTimeout()
/// @see CreateHistory()
///
std::string GetString(const std::string &base, size_t length = -1,
std::string getString(const std::string &base, size_t length = -1,
size_t width = 0, bool encrypted = 0);
/// Wrapper for above function that doesn't take base string (it will be empty).
/// Taken parameters are the same as for above.
///
std::string GetString(size_t length = -1, size_t width = 0, bool encrypted = 0)
std::string getString(size_t length = -1, size_t width = 0, bool encrypted = 0)
{
return GetString("", length, width, encrypted);
return getString("", length, width, encrypted);
}
/// Moves cursor to given coordinates
/// @param x given X position
/// @param y given Y position
///
void GotoXY(int x, int y);
void goToXY(int x, int y);
/// @return x window coordinate
/// @see GetXY()
///
int X();
/// @see GetXy()
int x();
/// @return y windows coordinate
/// @see GetXY()
///
int Y();
/// @see GetXy()
int y();
/// Used to indicate whether given coordinates of main screen lies within
/// window area or not and if they do, transform them into in-window coords.
@@ -294,106 +269,82 @@ struct Window
/// @param x X position of main screen to be checked
/// @param y Y position of main screen to be checked
/// @return true if it transformed variables, false otherwise
///
bool hasCoords(int &x, int &y);
/// Sets helper function used in GetString()
/// @param helper pointer to function that matches GetStringHelper prototype
/// @see GetString()
///
void SetGetStringHelper(GetStringHelper helper) { itsGetStringHelper = helper; }
/// Sets helper function used in getString()
/// @param helper pointer to function that matches getStringHelper prototype
/// @see getString()
void setGetStringHelper(GetStringHelper helper) { m_get_string_helper = helper; }
/// Sets window's base color
/// @param fg foregound base color
/// @param bg background base color
///
void SetBaseColor(Color fg, Color bg = clDefault);
void setBaseColor(Color fg, Color bg = clDefault);
/// Sets window's border
/// @param border new window's border
///
void SetBorder(Border border);
void setBorder(Border border);
/// Sets window's timeout
/// @param timeout window's timeout
///
void SetTimeout(int timeout);
void setTimeout(int timeout);
/// Sets window's title
/// @param new_title new title for window
///
void SetTitle(const std::string &new_title);
void setTitle(const std::string &new_title);
/// Creates internal container that stores all previous
/// strings that were edited using this window.
///
void CreateHistory();
void createHistory();
/// Deletes container with all previous history entries
///
void DeleteHistory();
/// "Hides" the window by filling its area with given character
/// @param ch character to fill the area
/// @see Clear()
///
void Hide(char ch = 32) const;
void deleteHistory();
/// Refreshed whole window and its border
/// @see Refresh()
///
void Display();
void display();
/// Refreshes whole window, but not the border
/// @see Display()
///
virtual void Refresh();
/// @see display()
virtual void refresh();
/// Moves the window to new coordinates
/// @param new_x new X position of left upper corner of window
/// @param new_y new Y position of left upper corner of window
///
virtual void MoveTo(size_t new_x, size_t new_y);
virtual void moveTo(size_t new_x, size_t new_y);
/// Resizes the window
/// @param new_width new window's width
/// @param new_height new window's height
///
virtual void Resize(size_t new_width, size_t new_height);
virtual void resize(size_t new_width, size_t new_height);
/// Cleares the window
///
virtual void Clear();
virtual void clear();
/// Adds given file descriptor to the list that will be polled in
/// ReadKey() along with stdin and callback that will be invoked
/// when there is data waiting for reading in it
/// @param fd file descriptor
/// @param callback callback
///
void AddFDCallback(int fd, void (*callback)());
void addFDCallback(int fd, void (*callback)());
/// Clears list of file descriptors and their callbacks
///
void ClearFDCallbacksList();
void clearFDCallbacksList();
/// Checks if list of file descriptors is empty
/// @return true if list is empty, false otherwise
///
bool FDCallbacksListEmpty() const;
/// Reads key from standard input (or takes it from input queue)
/// and writes it into read_key variable
///
int ReadKey();
int readKey();
/// Push single character into input queue, so it can get consumed by ReadKey
void PushChar(int ch);
void pushChar(int ch);
/// Scrolls the window by amount of lines given in its parameter
/// @param where indicates how many lines it has to scroll
///
virtual void Scroll(Where where);
virtual void scroll(Where where);
/// Applies function of compatible prototype to internal WINDOW pointer
/// The mostly used function in this case seem to be wclrtoeol(), which
@@ -402,13 +353,11 @@ struct Window
/// recommend anyone passing this pointer here ;)
/// @param f pointer to function to call with internal WINDOW pointer
/// @return reference to itself
///
Window &operator<<(int (*f)(WINDOW *));
/// Applies foreground and background colors to window
/// @param colors struct that holds new colors information
/// @return reference to itself
///
Window &operator<<(Colors colors);
/// Applies foregound color to window. Note that colors applied
@@ -417,7 +366,6 @@ struct Window
/// all colors and fall back to base one, pass clDefault.
/// @param color new color value
/// @return reference to itself
///
Window &operator<<(Color color);
/// Applies format flag to window. Note that these attributes are
@@ -425,191 +373,181 @@ struct Window
/// it you have to pass fmtBoldEnd also twice.
/// @param format format flag
/// @return reference to itself
///
Window &operator<<(Format format);
/// Moves current cursor position to given coordinates.
/// @param coords struct that holds information about new coordinations
/// @return reference to itself
///
Window &operator<<(XY coords);
/// Prints string to window
/// @param s const pointer to char array to be printed
/// @return reference to itself
///
Window &operator<<(const char *s);
/// Prints single character to window
/// @param c character to be printed
/// @return reference to itself
///
Window &operator<<(char c);
/// Prints wide string to window
/// @param ws const pointer to wchar_t array to be printed
/// @return reference to itself
///
Window &operator<<(const wchar_t *ws);
/// Prints single wide character to window
/// @param wc wide character to be printed
/// @return reference to itself
///
Window &operator<<(wchar_t wc);
/// Prints int to window
/// @param i integer value to be printed
/// @return reference to itself
///
Window &operator<<(int i);
/// Prints double to window
/// @param d double value to be printed
/// @return reference to itself
///
Window &operator<<(double d);
/// Prints size_t to window
/// @param s size value to be printed
/// @return reference to itself
///
Window &operator<<(size_t s);
/// Prints std::string to window
/// @param s string to be printed
/// @return reference to itself
///
Window &operator<<(const std::string &s);
/// Prints std::wstring to window
/// @param ws wide string to be printed
/// @return reference to itself
///
Window &operator<<(const std::wstring &ws);
/// Fallback for Length() for wide strings used if unicode support is disabled
/// @param s string that real length has to be measured
/// @return standard std::string::length() result since it's only fallback
///
static size_t Length(const std::string &s) { return s.length(); }
/// Measures real length of wide string (required if e.g. asian characters are used)
/// @param ws wide string that real length has to be measured
/// @return real length of wide string
///
static size_t Length(const std::wstring &ws);
static size_t length(const std::wstring &ws);
/// Fallback for Length() for wide strings used if unicode support is disabled
/// @param s string that real length has to be measured
/// @return standard std::string::length() result since it's only fallback
static size_t length(const std::string &s) { return s.length(); }
/// Cuts string so it fits desired length on the screen. Note that it uses
/// wcwidth to check real width of all characters it contains. If string
/// fits requested length it's not modified at all.
/// @param ws wide string to be cut
/// @param max_len maximal length of string
static void Cut(std::wstring &ws, size_t max_len);
static void cut(std::wstring &ws, size_t max_len);
/// Variant for std::string, it just falls back to std::string::resize
static void cut(std::string &s, size_t max_len) { s.resize(max_len); }
protected:
/// Sets colors of window (interal use only)
/// @param fg foregound color
/// @param bg background color
///
void SetColor(Color fg, Color bg = clDefault);
void setColor(Color fg, Color bg = clDefault);
/// Refreshes window's border
///
void ShowBorder() const;
void showBorder() const;
/// Changes dimensions of window, called from Resize()
/// @param width new window's width
/// @param height new window's height
/// @see Resize()
///
void AdjustDimensions(size_t width, size_t height);
void adjustDimensions(size_t width, size_t height);
/// Deletes old window and creates new. It's called by Resize(),
/// SetBorder() or SetTitle() since internally windows are
/// SetBorder() or setTitle() since internally windows are
/// handled as curses pads and change in size requires to delete
/// them and create again, there is no way to change size of pad.
/// @see SetBorder()
/// @see SetTitle()
/// @see setTitle()
/// @see Resize()
///
virtual void Recreate(size_t width, size_t height);
virtual void recreate(size_t width, size_t height);
/// internal WINDOW pointers
WINDOW *itsWindow;
WINDOW *itsWinBorder;
WINDOW *m_window;
WINDOW *m_border_window;
/// start points and dimensions
size_t itsStartX;
size_t itsStartY;
size_t itsWidth;
size_t itsHeight;
size_t m_start_x;
size_t m_start_y;
size_t m_width;
size_t m_height;
/// window timeout
int itsWindowTimeout;
int m_window_timeout;
/// current colors
Color itsColor;
Color itsBgColor;
Color m_color;
Color m_bg_color;
/// base colors
Color itsBaseColor;
Color itsBaseBgColor;
Color m_base_color;
Color m_base_bg_color;
/// current border
Border itsBorder;
Border m_border;
private:
/// Sets state of bold attribute (internal use only)
/// @param bold_state state of bold attribute
///
void Bold(bool bold_state) const;
void bold(bool bold_state) const;
/// Sets state of underline attribute (internal use only)
/// @param underline_state state of underline attribute
///
void Underline(bool underline_state) const;
void underline(bool underline_state) const;
/// Sets state of reverse attribute (internal use only)
/// @param reverse_state state of reverse attribute
///
void Reverse(bool reverse_state) const;
void reverse(bool reverse_state) const;
/// Sets state of altcharset attribute (internal use only)
/// @param altcharset_state state of altcharset attribute
///
void AltCharset(bool altcharset_state) const;
void altCharset(bool altcharset_state) const;
/// pointer to helper function used by GetString()
/// @see GetString()
/// pointer to helper function used by getString()
/// @see getString()
///
GetStringHelper itsGetStringHelper;
GetStringHelper m_get_string_helper;
/// window title
std::string itsTitle;
std::string m_title;
/// stack of colors
std::stack<Colors> itsColors;
std::stack<Colors> m_color_stack;
/// input queue of a window. you can put characters there using
/// PushChar and they will be immediately consumed and
/// returned by ReadKey
std::queue<int> itsInputQueue;
std::queue<int> m_input_queue;
/// containter used for additional file descriptors that have
/// to be polled in ReadKey() and correspondent callbacks that
/// are invoked if there is data available in them
typedef std::vector< std::pair<int, void (*)()> > FDCallbacks;
FDCallbacks itsFDs;
FDCallbacks m_fds;
/// pointer to container used as history
std::list<std::wstring> *itsHistory;
std::list<std::wstring> *m_history;
/// counters for format flags
int itsBoldCounter;
int itsUnderlineCounter;
int itsReverseCounter;
int itsAltCharsetCounter;
int m_bold_counter;
int m_underline_counter;
int m_reverse_counter;
int m_alt_charset_counter;
};
}