diff --git a/src/color_parser.cpp b/src/color_parser.cpp index 427f4cfb..de2dc0f0 100644 --- a/src/color_parser.cpp +++ b/src/color_parser.cpp @@ -20,9 +20,9 @@ #include "window.h" -std::pair Window::into_color(const string &str) +ColorPair Window::into_color(const string &str) { - std::pair colors; + ColorPair colors; if (str == "[/]") { diff --git a/src/menu.cpp b/src/menu.cpp index 826c9dc4..26617ba6 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -81,7 +81,7 @@ int Menu::count_length(string str) return length; } -void Menu::AddOption(const string &str, LOCATION location, HAVE_SEPARATOR separator) +void Menu::AddOption(const string &str, Location location, bool separator) { Option *new_option = new Option; new_option->content = str; @@ -93,7 +93,7 @@ void Menu::AddOption(const string &str, LOCATION location, HAVE_SEPARATOR separa NeedsRedraw.push_back(itsOptions.size()-1); } -void Menu::AddBoldOption(const string &str, LOCATION location, HAVE_SEPARATOR separator) +void Menu::AddBoldOption(const string &str, Location location, bool separator) { Option *new_option = new Option; new_option->content = str; @@ -106,7 +106,7 @@ void Menu::AddBoldOption(const string &str, LOCATION location, HAVE_SEPARATOR se NeedsRedraw.push_back(itsOptions.size()-1); } -void Menu::AddStaticOption(const string &str, LOCATION location, HAVE_SEPARATOR separator) +void Menu::AddStaticOption(const string &str, Location location, bool separator) { Option *new_option = new Option; new_option->content = str; @@ -120,7 +120,7 @@ void Menu::AddStaticOption(const string &str, LOCATION location, HAVE_SEPARATOR NeedsRedraw.push_back(itsOptions.size()-1); } -void Menu::AddStaticBoldOption(const string &str, LOCATION location, HAVE_SEPARATOR separator) +void Menu::AddStaticBoldOption(const string &str, Location location, bool separator) { Option *new_option = new Option; new_option->content = str; @@ -140,7 +140,7 @@ void Menu::AddSeparator() AddStaticOption("", lLeft, 1); } -void Menu::UpdateOption(int index, string str, LOCATION location, HAVE_SEPARATOR separator) +void Menu::UpdateOption(int index, string str, Location location, bool separator) { index--; try @@ -156,7 +156,7 @@ void Menu::UpdateOption(int index, string str, LOCATION location, HAVE_SEPARATOR } } -void Menu::BoldOption(int index, IS_BOLD bold) +void Menu::BoldOption(int index, bool bold) { index--; try @@ -170,7 +170,7 @@ void Menu::BoldOption(int index, IS_BOLD bold) } } -void Menu::MakeStatic(int index, IS_STATIC stat) +void Menu::MakeStatic(int index, bool stat) { index--; try @@ -312,7 +312,7 @@ void Menu::Refresh(bool redraw_whole_window) if (line < 0 || line+1 > itsHeight) // do not draw if line should be invisible anyway continue; - COLOR old_basecolor = itsBaseColor; + Color old_basecolor = itsBaseColor; if (*it == itsHighlight && itsHighlightEnabled) { @@ -387,7 +387,7 @@ void Menu::Refresh(bool redraw_whole_window) wrefresh(itsWindow); } -void Menu::Go(WHERE where) +void Menu::Go(Where where) { if (Empty()) return; int MaxHighlight = itsOptions.size()-1; diff --git a/src/menu.h b/src/menu.h index f9e1184a..6417727e 100644 --- a/src/menu.h +++ b/src/menu.h @@ -25,11 +25,7 @@ #include -typedef bool IS_STATIC; -typedef bool HAVE_SEPARATOR; -typedef bool IS_BOLD; - -enum LOCATION { lLeft, lCenter, lRight }; +enum Location { lLeft, lCenter, lRight }; struct Option { @@ -39,33 +35,33 @@ struct Option bool is_bold; bool selected; bool have_separator; - LOCATION location; + Location location; }; class Menu : public Window { public: - Menu(int startx, int starty, int width, int height, string title, COLOR color, BORDER border) : Window(startx, starty, width, height, title, color, border), itsSelectedPrefix("[r]"), itsSelectedSuffix("[/r]"), itsStaticsNumber(0), itsBeginning(0), itsHighlight(0), itsHighlightColor(itsBaseColor), itsHighlightEnabled(1) { SetColor(color); } + Menu(int startx, int starty, int width, int height, string title, Color color, Border border) : Window(startx, starty, width, height, title, color, border), itsSelectedPrefix("[r]"), itsSelectedSuffix("[/r]"), itsStaticsNumber(0), itsBeginning(0), itsHighlight(0), itsHighlightColor(itsBaseColor), itsHighlightEnabled(1) { SetColor(color); } Menu(const Menu &); virtual ~Menu(); virtual void Add(string str) { AddOption(str); } - void AddOption(const string &, LOCATION = lLeft, HAVE_SEPARATOR = 0); - void AddBoldOption(const string &str, LOCATION location = lLeft, HAVE_SEPARATOR sep = 0); - void AddStaticOption(const string &str, LOCATION location = lLeft, HAVE_SEPARATOR sep = 0); - void AddStaticBoldOption(const string &str, LOCATION location = lLeft, HAVE_SEPARATOR sep = 0); + void AddOption(const string &, Location = lLeft, bool separator = 0); + void AddBoldOption(const string &str, Location location = lLeft, bool separator = 0); + void AddStaticOption(const string &str, Location location = lLeft, bool separator = 0); + void AddStaticBoldOption(const string &str, Location location = lLeft, bool separator = 0); void AddSeparator(); - void UpdateOption(int, string, LOCATION = lLeft, HAVE_SEPARATOR = 0); - void BoldOption(int, IS_BOLD); - void MakeStatic(int, IS_STATIC); + void UpdateOption(int, string, Location = lLeft, bool separator = 0); + void BoldOption(int, bool); + void MakeStatic(int, bool); void DeleteOption(int); void Swap(int, int); string GetCurrentOption() const; string GetOption(int i) const; - virtual void Display(bool = 0); - virtual void Refresh(bool = 0); - virtual void Go(WHERE); + virtual void Display(bool redraw_whole_window = 0); + virtual void Refresh(bool redraw_whole_window = 0); + virtual void Go(Where); void Highlight(int); virtual void Reset(); virtual void Clear(bool clear_screen = 1); @@ -77,7 +73,7 @@ class Menu : public Window void SetSelectSuffix(string str) { itsSelectedSuffix = str; } void GetSelectedList(vector &); - void HighlightColor(COLOR col) { itsHighlightColor = col; NeedsRedraw.push_back(itsHighlight); } + void HighlightColor(Color col) { itsHighlightColor = col; NeedsRedraw.push_back(itsHighlight); } void Highlighting(bool hl) { itsHighlightEnabled = hl; NeedsRedraw.push_back(itsHighlight); Refresh(); } int GetRealChoice() const; @@ -106,7 +102,7 @@ class Menu : public Window int itsBeginning; int itsHighlight; - COLOR itsHighlightColor; + Color itsHighlightColor; bool itsHighlightEnabled; }; diff --git a/src/ncmpcpp.cpp b/src/ncmpcpp.cpp index 325d964e..1d4ad7e0 100644 --- a/src/ncmpcpp.cpp +++ b/src/ncmpcpp.cpp @@ -184,7 +184,7 @@ int main(int argc, char *argv[]) curs_set(0); if (Config.colors_enabled) - EnableColors(); + Window::EnableColors(); int main_start_y = 2; int main_height = LINES-4; @@ -329,6 +329,7 @@ int main(int argc, char *argv[]) int footer_height = Config.statusbar_visibility ? 2 : 1; wFooter = new Window(0, footer_start_y, COLS, footer_height, "", Config.statusbar_color, brNone); + wFooter->GetGetStringHelper(TraceMpdStatus); wFooter->Display(); wCurrent = mPlaylist; @@ -882,9 +883,9 @@ int main(int argc, char *argv[]) { wFooter->WriteXY(0, Config.statusbar_visibility, "[b]New title:[/b] ", 1); if (s.GetTitle() == UNKNOWN_TITLE) - s.SetTitle(wFooter->GetString("", TraceMpdStatus)); + s.SetTitle(wFooter->GetString()); else - s.SetTitle(wFooter->GetString(s.GetTitle(), TraceMpdStatus)); + s.SetTitle(wFooter->GetString(s.GetTitle())); mTagEditor->UpdateOption(option, "[b]Title:[/b] " + s.GetTitle()); break; } @@ -892,9 +893,9 @@ int main(int argc, char *argv[]) { wFooter->WriteXY(0, Config.statusbar_visibility, "[b]New artist:[/b] ", 1); if (s.GetArtist() == UNKNOWN_ARTIST) - s.SetArtist(wFooter->GetString("", TraceMpdStatus)); + s.SetArtist(wFooter->GetString()); else - s.SetArtist(wFooter->GetString(s.GetArtist(), TraceMpdStatus)); + s.SetArtist(wFooter->GetString(s.GetArtist())); mTagEditor->UpdateOption(option, "[b]Artist:[/b] " + s.GetArtist()); break; } @@ -902,9 +903,9 @@ int main(int argc, char *argv[]) { wFooter->WriteXY(0, Config.statusbar_visibility, "[b]New album:[/b] ", 1); if (s.GetAlbum() == UNKNOWN_ALBUM) - s.SetAlbum(wFooter->GetString("", TraceMpdStatus)); + s.SetAlbum(wFooter->GetString()); else - s.SetAlbum(wFooter->GetString(s.GetAlbum(), TraceMpdStatus)); + s.SetAlbum(wFooter->GetString(s.GetAlbum())); mTagEditor->UpdateOption(option, "[b]Album:[/b] " + s.GetAlbum()); break; } @@ -912,9 +913,9 @@ int main(int argc, char *argv[]) { wFooter->WriteXY(0, Config.statusbar_visibility, "[b]New year:[/b] ", 1); if (s.GetYear() == EMPTY_TAG) - s.SetYear(wFooter->GetString(4, TraceMpdStatus)); + s.SetYear(wFooter->GetString(4)); else - s.SetYear(wFooter->GetString(s.GetYear(), 4, TraceMpdStatus)); + s.SetYear(wFooter->GetString(s.GetYear(), 4)); mTagEditor->UpdateOption(option, "[b]Year:[/b] " + s.GetYear()); break; } @@ -922,9 +923,9 @@ int main(int argc, char *argv[]) { wFooter->WriteXY(0, Config.statusbar_visibility, "[b]New track:[/b] ", 1); if (s.GetTrack() == EMPTY_TAG) - s.SetTrack(wFooter->GetString(3, TraceMpdStatus)); + s.SetTrack(wFooter->GetString(3)); else - s.SetTrack(wFooter->GetString(s.GetTrack(), 3, TraceMpdStatus)); + s.SetTrack(wFooter->GetString(s.GetTrack(), 3)); mTagEditor->UpdateOption(option, "[b]Track:[/b] " + s.GetTrack()); break; } @@ -932,9 +933,9 @@ int main(int argc, char *argv[]) { wFooter->WriteXY(0, Config.statusbar_visibility, "[b]New genre:[/b] ", 1); if (s.GetGenre() == EMPTY_TAG) - s.SetGenre(wFooter->GetString("", TraceMpdStatus)); + s.SetGenre(wFooter->GetString()); else - s.SetGenre(wFooter->GetString(s.GetGenre(), TraceMpdStatus)); + s.SetGenre(wFooter->GetString(s.GetGenre())); mTagEditor->UpdateOption(option, "[b]Genre:[/b] " + s.GetGenre()); break; } @@ -942,9 +943,9 @@ int main(int argc, char *argv[]) { wFooter->WriteXY(0, Config.statusbar_visibility, "[b]New comment:[/b] ", 1); if (s.GetComment() == EMPTY_TAG) - s.SetComment(wFooter->GetString("", TraceMpdStatus)); + s.SetComment(wFooter->GetString()); else - s.SetComment(wFooter->GetString(s.GetComment(), TraceMpdStatus)); + s.SetComment(wFooter->GetString(s.GetComment())); mTagEditor->UpdateOption(option, "[b]Comment:[/b] " + s.GetComment()); break; } @@ -1021,9 +1022,9 @@ int main(int argc, char *argv[]) { wFooter->WriteXY(0, Config.statusbar_visibility, "[b]Filename:[/b] ", 1); if (s.GetShortFilename() == EMPTY_TAG) - s.SetShortFilename(wFooter->GetString("", TraceMpdStatus)); + s.SetShortFilename(wFooter->GetString()); else - s.SetShortFilename(wFooter->GetString(s.GetShortFilename(), TraceMpdStatus)); + s.SetShortFilename(wFooter->GetString(s.GetShortFilename())); mSearcher->UpdateOption(option, "[b]Filename:[/b] " + s.GetShortFilename()); break; } @@ -1031,9 +1032,9 @@ int main(int argc, char *argv[]) { wFooter->WriteXY(0, Config.statusbar_visibility, "[b]Title:[/b] ", 1); if (s.GetTitle() == UNKNOWN_TITLE) - s.SetTitle(wFooter->GetString("", TraceMpdStatus)); + s.SetTitle(wFooter->GetString()); else - s.SetTitle(wFooter->GetString(s.GetTitle(), TraceMpdStatus)); + s.SetTitle(wFooter->GetString(s.GetTitle())); mSearcher->UpdateOption(option, "[b]Title:[/b] " + s.GetTitle()); break; } @@ -1041,9 +1042,9 @@ int main(int argc, char *argv[]) { wFooter->WriteXY(0, Config.statusbar_visibility, "[b]Artist:[/b] ", 1); if (s.GetArtist() == UNKNOWN_ARTIST) - s.SetArtist(wFooter->GetString("", TraceMpdStatus)); + s.SetArtist(wFooter->GetString()); else - s.SetArtist(wFooter->GetString(s.GetArtist(), TraceMpdStatus)); + s.SetArtist(wFooter->GetString(s.GetArtist())); mSearcher->UpdateOption(option, "[b]Artist:[/b] " + s.GetArtist()); break; } @@ -1051,9 +1052,9 @@ int main(int argc, char *argv[]) { wFooter->WriteXY(0, Config.statusbar_visibility, "[b]Album:[/b] ", 1); if (s.GetAlbum() == UNKNOWN_ALBUM) - s.SetAlbum(wFooter->GetString("", TraceMpdStatus)); + s.SetAlbum(wFooter->GetString()); else - s.SetAlbum(wFooter->GetString(s.GetAlbum(), TraceMpdStatus)); + s.SetAlbum(wFooter->GetString(s.GetAlbum())); mSearcher->UpdateOption(option, "[b]Album:[/b] " + s.GetAlbum()); break; } @@ -1061,9 +1062,9 @@ int main(int argc, char *argv[]) { wFooter->WriteXY(0, Config.statusbar_visibility, "[b]Year:[/b] ", 1); if (s.GetYear() == EMPTY_TAG) - s.SetYear(wFooter->GetString(4, TraceMpdStatus)); + s.SetYear(wFooter->GetString(4)); else - s.SetYear(wFooter->GetString(s.GetYear(), 4, TraceMpdStatus)); + s.SetYear(wFooter->GetString(s.GetYear(), 4)); mSearcher->UpdateOption(option, "[b]Year:[/b] " + s.GetYear()); break; } @@ -1071,9 +1072,9 @@ int main(int argc, char *argv[]) { wFooter->WriteXY(0, Config.statusbar_visibility, "[b]Track:[/b] ", 1); if (s.GetTrack() == EMPTY_TAG) - s.SetTrack(wFooter->GetString(3, TraceMpdStatus)); + s.SetTrack(wFooter->GetString(3)); else - s.SetTrack(wFooter->GetString(s.GetTrack(), 3, TraceMpdStatus)); + s.SetTrack(wFooter->GetString(s.GetTrack(), 3)); mSearcher->UpdateOption(option, "[b]Track:[/b] " + s.GetTrack()); break; } @@ -1081,9 +1082,9 @@ int main(int argc, char *argv[]) { wFooter->WriteXY(0, Config.statusbar_visibility, "[b]Genre:[/b] ", 1); if (s.GetGenre() == EMPTY_TAG) - s.SetGenre(wFooter->GetString("", TraceMpdStatus)); + s.SetGenre(wFooter->GetString()); else - s.SetGenre(wFooter->GetString(s.GetGenre(), TraceMpdStatus)); + s.SetGenre(wFooter->GetString(s.GetGenre())); mSearcher->UpdateOption(option, "[b]Genre:[/b] " + s.GetGenre()); break; } @@ -1091,9 +1092,9 @@ int main(int argc, char *argv[]) { wFooter->WriteXY(0, Config.statusbar_visibility, "[b]Comment:[/b] ", 1); if (s.GetComment() == EMPTY_TAG) - s.SetComment(wFooter->GetString("", TraceMpdStatus)); + s.SetComment(wFooter->GetString()); else - s.SetComment(wFooter->GetString(s.GetComment(), TraceMpdStatus)); + s.SetComment(wFooter->GetString(s.GetComment())); mSearcher->UpdateOption(option, "[b]Comment:[/b] " + s.GetComment()); break; } @@ -1534,7 +1535,7 @@ int main(int argc, char *argv[]) { LOCK_STATUSBAR; wFooter->WriteXY(0, Config.statusbar_visibility, "Save playlist as: ", 1); - string playlist_name = wFooter->GetString("", TraceMpdStatus); + string playlist_name = wFooter->GetString(); UNLOCK_STATUSBAR; if (playlist_name.find("/") != string::npos) { @@ -1674,7 +1675,7 @@ int main(int argc, char *argv[]) { LOCK_STATUSBAR; wFooter->WriteXY(0, Config.statusbar_visibility, "Add: ", 1); - string path = wFooter->GetString("", TraceMpdStatus); + string path = wFooter->GetString(); UNLOCK_STATUSBAR; if (!path.empty()) { @@ -1789,7 +1790,7 @@ int main(int argc, char *argv[]) { LOCK_STATUSBAR; wFooter->WriteXY(0, Config.statusbar_visibility, "Set crossfade to: ", 1); - string crossfade = wFooter->GetString(3, TraceMpdStatus); + string crossfade = wFooter->GetString(3); UNLOCK_STATUSBAR; int cf = StrToInt(crossfade); if (cf > 0) @@ -1846,7 +1847,7 @@ int main(int argc, char *argv[]) } LOCK_STATUSBAR; wFooter->WriteXY(0, Config.statusbar_visibility, "Position to go (in %): ", 1); - string position = wFooter->GetString(3, TraceMpdStatus); + string position = wFooter->GetString(3); int newpos = atoi(position.c_str()); if (newpos > 0 && newpos < 100 && !position.empty()) Mpd->Seek(vPlaylist[now_playing]->GetTotalLength()*newpos/100.0); @@ -2016,7 +2017,7 @@ int main(int argc, char *argv[]) { LOCK_STATUSBAR; wFooter->WriteXY(0, Config.statusbar_visibility, "Save playlist as: ", 1); - string playlist = wFooter->GetString("", TraceMpdStatus); + string playlist = wFooter->GetString(); UNLOCK_STATUSBAR; if (!playlist.empty()) { @@ -2100,7 +2101,7 @@ int main(int argc, char *argv[]) Menu *mCurrent = static_cast(wCurrent); LOCK_STATUSBAR; wFooter->WriteXY(0, Config.statusbar_visibility, "Find " + how + ": ", 1); - string findme = wFooter->GetString("", TraceMpdStatus); + string findme = wFooter->GetString(); UNLOCK_STATUSBAR; timer = time(NULL); if (findme.empty()) diff --git a/src/scrollpad.cpp b/src/scrollpad.cpp index 39a03cc3..f2380e14 100644 --- a/src/scrollpad.cpp +++ b/src/scrollpad.cpp @@ -151,7 +151,7 @@ void Scrollpad::Resize(int width, int height) } } -void Scrollpad::Go(WHERE where) +void Scrollpad::Go(Where where) { int MaxBeginning; @@ -197,7 +197,7 @@ void Scrollpad::Go(WHERE where) } } -void Scrollpad::SetBorder(BORDER border) +void Scrollpad::SetBorder(Border border) { if (have_to_recreate(border)) recreate_win(); diff --git a/src/scrollpad.h b/src/scrollpad.h index a669f466..409a97b9 100644 --- a/src/scrollpad.h +++ b/src/scrollpad.h @@ -26,16 +26,16 @@ class Scrollpad: public Window { public: - Scrollpad(int startx, int starty, int width, int height, string title, COLOR color, BORDER border) : Window(startx, starty, width, height, title, color, border), itsBeginning(0), itsRealHeight(1), itsXPos(0) { delwin(itsWindow); itsWindow = newpad(itsHeight,itsWidth); } + Scrollpad(int startx, int starty, int width, int height, string title, Color color, Border border) : Window(startx, starty, width, height, title, color, border), itsBeginning(0), itsRealHeight(1), itsXPos(0) { delwin(itsWindow); itsWindow = newpad(itsHeight,itsWidth); } Scrollpad(const Scrollpad &); virtual ~Scrollpad() {} virtual void Add(string); virtual void Display(bool = 0); virtual void Refresh(bool = 0); - virtual void Go(WHERE); + virtual void Go(Where); virtual void MoveTo(int newx, int newy) { reallocate_win(newx, newy); } virtual void Resize(int, int); - virtual void SetBorder(BORDER); + virtual void SetBorder(Border); virtual void SetTitle(string); virtual void Clear(); virtual Window * Clone() { return new Scrollpad(*this); } diff --git a/src/settings.cpp b/src/settings.cpp index 7d3e9345..f1acd3f3 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -213,7 +213,7 @@ string GetConfigLineValue(const string &line) return ""; } -string IntoStr(COLOR color) +string IntoStr(Color color) { string result = ""; @@ -237,9 +237,9 @@ string IntoStr(COLOR color) return result; } -COLOR IntoColor(const string &color) +Color IntoColor(const string &color) { - COLOR result = clDefault; + Color result = clDefault; if (color == "black") result = clBlack; diff --git a/src/settings.h b/src/settings.h index 4e2f4948..ac3ffc3e 100644 --- a/src/settings.h +++ b/src/settings.h @@ -96,16 +96,16 @@ struct ncmpcpp_config string selected_item_prefix; string selected_item_suffix; - COLOR empty_tags_color; - COLOR header_color; - COLOR volume_color; - COLOR state_line_color; - COLOR state_flags_color; - COLOR main_color; - COLOR main_highlight_color; - COLOR progressbar_color; - COLOR statusbar_color; - COLOR active_column_color; + Color empty_tags_color; + Color header_color; + Color volume_color; + Color state_line_color; + Color state_flags_color; + Color main_color; + Color main_highlight_color; + Color progressbar_color; + Color statusbar_color; + Color active_column_color; bool colors_enabled; bool set_window_title; @@ -126,8 +126,8 @@ void DefaultKeys(ncmpcpp_keys &); void DefaultConfiguration(ncmpcpp_config &); void GetKeys(string, int *); string GetLineValue(const string &); -string IntoStr(COLOR); -COLOR IntoColor(const string &); +string IntoStr(Color); +Color IntoColor(const string &); void ReadKeys(ncmpcpp_keys &); void ReadConfiguration(ncmpcpp_config &); diff --git a/src/window.cpp b/src/window.cpp index 9d09884b..4987b662 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -20,7 +20,7 @@ #include "window.h" -Window::Window(int startx, int starty, int width, int height, string title, COLOR color, BORDER border) : itsWindow(0), itsWinBorder(0), itsStartX(startx), itsStartY(starty), itsWidth(width), itsHeight(height), BBEnabled(1), AutoRefreshEnabled(1), itsTitle(title), itsColor(color), itsBaseColor(color), itsBgColor(clDefault), itsBaseBgColor(clDefault), itsBorder(border) +Window::Window(int startx, int starty, int width, int height, string title, Color color, Border border) : itsWindow(0), itsWinBorder(0), itsGetStringHelper(0), itsStartX(startx), itsStartY(starty), itsWidth(width), itsHeight(height), BBEnabled(1), AutoRefreshEnabled(1), itsTitle(title), itsColor(color), itsBaseColor(color), itsBgColor(clDefault), itsBaseBgColor(clDefault), itsBorder(border) { if (itsStartX < 0) itsStartX = 0; if (itsStartY < 0) itsStartY = 0; @@ -53,6 +53,7 @@ Window::Window(const Window &w) { itsWindow = dupwin(w.itsWindow); itsWinBorder = dupwin(w.itsWinBorder); + itsGetStringHelper = w.itsGetStringHelper; itsStartX = w.itsStartX; itsStartY = w.itsStartY; itsWidth = w.itsWidth; @@ -74,7 +75,7 @@ Window::~Window() delwin(itsWinBorder); } -void Window::SetColor(COLOR col, COLOR background) +void Window::SetColor(Color col, Color background) { if (col != clDefault) wattron(itsWindow,COLOR_PAIR(background*8+col)); @@ -84,13 +85,13 @@ void Window::SetColor(COLOR col, COLOR background) itsBgColor = background; } -void Window::SetBaseColor(COLOR col, COLOR background) +void Window::SetBaseColor(Color col, Color background) { itsBaseColor = col; itsBaseBgColor = background; } -bool Window::have_to_recreate(BORDER border) +bool Window::have_to_recreate(Border border) { if (border == brNone && itsBorder != brNone) { @@ -132,7 +133,7 @@ bool Window::have_to_recreate(string newtitle) return false; } -void Window::SetBorder(BORDER border) +void Window::SetBorder(Border border) { if (have_to_recreate(border)) recreate_win(); @@ -279,7 +280,7 @@ void Window::ReadKey() const wgetch(itsWindow); } -void Window::Write(int limit, const string &str, CLEAR_TO_EOL clrtoeol) +void Window::Write(int limit, const string &str, bool clrtoeol) { if (BBEnabled && !str.empty()) { @@ -319,7 +320,7 @@ void Window::Write(int limit, const string &str, CLEAR_TO_EOL clrtoeol) tmp.clear(); if (is_valid_color(color)) { - std::pair colors = into_color(color); + ColorPair colors = into_color(color); SetColor(colors.first, colors.second); } else @@ -342,7 +343,7 @@ void Window::Write(int limit, const string &str, CLEAR_TO_EOL clrtoeol) } #ifdef UTF8_ENABLED -void Window::Write(int limit, const wstring &str, CLEAR_TO_EOL clrtoeol) +void Window::Write(int limit, const wstring &str, bool clrtoeol) { if (BBEnabled) { @@ -382,7 +383,7 @@ void Window::Write(int limit, const wstring &str, CLEAR_TO_EOL clrtoeol) tmp.clear(); if (is_valid_color(ToString(color))) { - std::pair colors = into_color(ToString(color)); + ColorPair colors = into_color(ToString(color)); SetColor(colors.first, colors.second); } else @@ -404,21 +405,21 @@ void Window::Write(int limit, const wstring &str, CLEAR_TO_EOL clrtoeol) wrefresh(itsWindow); } -void Window::WriteXY(int x, int y, int limit, const wstring &str, CLEAR_TO_EOL cleartoeol) +void Window::WriteXY(int x, int y, int limit, const wstring &str, bool cleartoeol) { wmove(itsWindow,y,x); Write(limit, str, cleartoeol); } #endif -void Window::WriteXY(int x, int y, int limit, const string &str, CLEAR_TO_EOL cleartoeol) +void Window::WriteXY(int x, int y, int limit, const string &str, bool cleartoeol) { wmove(itsWindow,y,x); Write(limit, str, cleartoeol); } -string Window::GetString(const string &base, unsigned int length, void (*given_function)()) const +string Window::GetString(const string &base, unsigned int length) const { curs_set(1); @@ -445,8 +446,8 @@ string Window::GetString(const string &base, unsigned int length, void (*given_f do { - if (given_function) - given_function(); + if (itsGetStringHelper) + itsGetStringHelper(); wmove(itsWindow,y,x); input = wgetch(itsWindow); @@ -578,29 +579,26 @@ string Window::GetTitle() const return itsTitle; } -COLOR Window::GetColor() const +Color Window::GetColor() const { return itsColor; } -BORDER Window::GetBorder() const +Border Window::GetBorder() const { return itsBorder; } -void EnableColors() +void Window::EnableColors() { if (has_colors()) { start_color(); + use_default_colors(); int num = 1; - if (use_default_colors() != ERR) - for (int i = -1; i < 8; i++) - for (int j = 0; j < 8; j++) - init_pair(num++, j, i); - else - for (int i = 1; i <= 8; i++) - init_pair(i, i, COLOR_BLACK); + for (int i = -1; i < 8; i++) + for (int j = 0; j < 8; j++) + init_pair(num++, j, i); } } diff --git a/src/window.h b/src/window.h index 87540cf5..8a0e7129 100644 --- a/src/window.h +++ b/src/window.h @@ -35,17 +35,16 @@ # define TO_STRING(x) x #endif -typedef bool CLEAR_TO_EOL; - using std::string; using std::wstring; using std::vector; -enum COLOR { clDefault, clBlack, clRed, clGreen, clYellow, clBlue, clMagenta, clCyan, clWhite }; -enum BORDER { brNone, brBlack, brRed, brGreen, brYellow, brBlue, brMagenta, brCyan, brWhite }; -enum WHERE { UP, DOWN, PAGE_UP, PAGE_DOWN, HOME, END }; +enum Color { clDefault, clBlack, clRed, clGreen, clYellow, clBlue, clMagenta, clCyan, clWhite }; +enum Border { brNone, brBlack, brRed, brGreen, brYellow, brBlue, brMagenta, brCyan, brWhite }; +enum Where { UP, DOWN, PAGE_UP, PAGE_DOWN, HOME, END }; -void EnableColors(); +typedef void (*GetStringHelper)(); +typedef std::pair ColorPair; char * ToString(const wchar_t *); wchar_t * ToWString(const char *); @@ -60,13 +59,14 @@ int CountBBCodes(const wstring &); class Window { public: - Window(int, int, int, int, string, COLOR, BORDER); + Window(int, int, int, int, string, Color, Border); Window(const Window &); virtual ~Window(); virtual WINDOW *RawWin() { return itsWindow; } - virtual void SetColor(COLOR, COLOR = clDefault); - virtual void SetBaseColor(COLOR, COLOR = clDefault); - virtual void SetBorder(BORDER); + virtual void GetGetStringHelper(GetStringHelper helper) { itsGetStringHelper = helper; } + virtual void SetColor(Color, Color = clDefault); + virtual void SetBaseColor(Color, Color = clDefault); + virtual void SetBorder(Border); virtual void EnableBB() { BBEnabled = 1; } virtual void DisableBB() { BBEnabled = 0; } virtual void SetTitle(string); @@ -84,19 +84,18 @@ class Window virtual void AutoRefresh(bool val) { AutoRefreshEnabled = val; } virtual void ReadKey(int &) const; virtual void ReadKey() const; - virtual void Write(const string &s, CLEAR_TO_EOL cte = 0) { Write(0xFFFF, s, cte); } - virtual void Write(int, const string &, CLEAR_TO_EOL = 0); - virtual void WriteXY(int x, int y, const string &s, CLEAR_TO_EOL ete = 0) { WriteXY(x, y, 0xFFFF, s, ete); } - virtual void WriteXY(int, int, int, const string &, CLEAR_TO_EOL = 0); + virtual void Write(const string &s, bool cte = 0) { Write(0xFFFF, s, cte); } + virtual void Write(int, const string &, bool = 0); + virtual void WriteXY(int x, int y, const string &s, bool ete = 0) { WriteXY(x, y, 0xFFFF, s, ete); } + virtual void WriteXY(int, int, int, const string &, bool = 0); #ifdef UTF8_ENABLED - virtual void Write(const wstring &s, CLEAR_TO_EOL cte = 0) { Write(0xFFFF, s, cte); } - virtual void Write(int, const wstring &, CLEAR_TO_EOL = 0); - virtual void WriteXY(int x, int y, const wstring &s, CLEAR_TO_EOL ete = 0) { WriteXY(x, y, 0xFFFF, s, ete); } - virtual void WriteXY(int, int, int, const wstring &, CLEAR_TO_EOL = 0); + virtual void Write(const wstring &s, bool cte = 0) { Write(0xFFFF, s, cte); } + virtual void Write(int, const wstring &, bool = 0); + virtual void WriteXY(int x, int y, const wstring &s, bool ete = 0) { WriteXY(x, y, 0xFFFF, s, ete); } + virtual void WriteXY(int, int, int, const wstring &, bool = 0); #endif - virtual string GetString(int num, void (*ptr)() = NULL) const { return GetString("", num, ptr); } - virtual string GetString(const string &str, void (*ptr)()) const { return GetString(str, -1, ptr); } - virtual string GetString(const string &, unsigned int = -1, void (*)() = NULL) const; + virtual string GetString(const string &, unsigned int = -1) const; + virtual string GetString(unsigned int length = -1) const { return GetString("", length); } virtual void Scrollable(bool) const; virtual void GetXY(int &, int &) const; virtual void GotoXY(int, int) const; @@ -105,25 +104,28 @@ class Window virtual int GetStartX() const; virtual int GetStartY() const; virtual string GetTitle() const; - virtual COLOR GetColor() const; - virtual BORDER GetBorder() const; + virtual Color GetColor() const; + virtual Border GetBorder() const; virtual Window * Clone() { return new Window(*this); } virtual Window * EmptyClone(); - virtual void Go(WHERE) { } // for Menu and Scrollpad class + virtual void Go(Where) { } // for Menu and Scrollpad class virtual int GetChoice() const { return -1; } // for Menu class virtual void Add(string str) { Write(str); } // for Scrollpad class + + static void EnableColors(); + protected: virtual bool have_to_recreate(string); - virtual bool have_to_recreate(BORDER); + virtual bool have_to_recreate(Border); virtual bool reallocate_win(int, int); virtual void recreate_win(); virtual void show_border() const; - virtual std::pair into_color(const string &); - //bool is_valid_color(const string &); + virtual ColorPair into_color(const string &); WINDOW *itsWindow; WINDOW *itsWinBorder; + GetStringHelper itsGetStringHelper; int itsStartX; int itsStartY; int itsWidth; @@ -131,12 +133,12 @@ class Window bool BBEnabled; bool AutoRefreshEnabled; string itsTitle; - std::stack< std::pair > itsColors; - COLOR itsColor; - COLOR itsBaseColor; - COLOR itsBgColor; - COLOR itsBaseBgColor; - BORDER itsBorder; + std::stack itsColors; + Color itsColor; + Color itsBaseColor; + Color itsBgColor; + Color itsBaseBgColor; + Border itsBorder; }; #endif