diff --git a/src/helpers.cpp b/src/helpers.cpp index 9967ac96..3a52511b 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -504,7 +504,6 @@ bool GetSongInfo(Song &s) void GetDirectory(string dir) { - pthread_t bolder; browsed_dir_scroll_begin = 0; if (browsed_dir != dir) mBrowser->Reset(); diff --git a/src/menu.cpp b/src/menu.cpp index da3c587a..1dfc26ed 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -73,6 +73,9 @@ void Menu::AddOption(const string &str, LOCATION location, HAVE_SEPARATOR separa new_option->is_static = 0; new_option->is_bold = 0; itsOptions.push_back(new_option); + + if (itsOptions.size() > itsBeginning && itsOptions.size() <= itsBeginning+itsHeight) + NeedsRedraw.push_back(itsOptions.size()-1); } void Menu::AddBoldOption(const string &str, LOCATION location, HAVE_SEPARATOR separator) @@ -84,6 +87,9 @@ void Menu::AddBoldOption(const string &str, LOCATION location, HAVE_SEPARATOR se new_option->is_static = 0; new_option->is_bold = 1; itsOptions.push_back(new_option); + + if (itsOptions.size() > itsBeginning && itsOptions.size() <= itsBeginning+itsHeight) + NeedsRedraw.push_back(itsOptions.size()-1); } void Menu::AddStaticOption(const string &str, LOCATION location, HAVE_SEPARATOR separator) @@ -96,6 +102,9 @@ void Menu::AddStaticOption(const string &str, LOCATION location, HAVE_SEPARATOR new_option->is_bold = 0; itsOptions.push_back(new_option); itsStaticsNumber++; + + if (itsOptions.size() > itsBeginning && itsOptions.size() <= itsBeginning+itsHeight) + NeedsRedraw.push_back(itsOptions.size()-1); } void Menu::AddStaticBoldOption(const string &str, LOCATION location, HAVE_SEPARATOR separator) @@ -108,6 +117,9 @@ void Menu::AddStaticBoldOption(const string &str, LOCATION location, HAVE_SEPARA new_option->is_bold = 1; itsOptions.push_back(new_option); itsStaticsNumber++; + + if (itsOptions.size() > itsBeginning && itsOptions.size() <= itsBeginning+itsHeight) + NeedsRedraw.push_back(itsOptions.size()-1); } void Menu::AddSeparator() @@ -117,11 +129,14 @@ void Menu::AddSeparator() void Menu::UpdateOption(int index, string str, LOCATION location, HAVE_SEPARATOR separator) { + index--; try { - itsOptions.at(index-1)->location = location; - itsOptions.at(index-1)->content = str; - itsOptions.at(index-1)->have_separator = separator; + itsOptions.at(index)->location = location; + itsOptions.at(index)->content = str; + itsOptions.at(index)->have_separator = separator; + if (index >= itsBeginning && index < itsBeginning+itsHeight) + NeedsRedraw.push_back(index); } catch (std::out_of_range) { @@ -130,9 +145,12 @@ void Menu::UpdateOption(int index, string str, LOCATION location, HAVE_SEPARATOR void Menu::BoldOption(int index, IS_BOLD bold) { + index--; try { - itsOptions.at(index-1)->is_bold = bold; + itsOptions.at(index)->is_bold = bold; + if (index >= itsBeginning && index < itsBeginning+itsHeight) + NeedsRedraw.push_back(index); } catch (std::out_of_range) { @@ -141,13 +159,14 @@ void Menu::BoldOption(int index, IS_BOLD bold) void Menu::MakeStatic(int index, IS_STATIC stat) { + index--; try { - if (stat && !itsOptions.at(index-1)->is_static) + if (stat && !itsOptions.at(index)->is_static) itsStaticsNumber++; - if (!stat && itsOptions.at(index-1)->is_static) + if (!stat && itsOptions.at(index)->is_static) itsStaticsNumber--; - itsOptions.at(index-1)->is_static = stat; + itsOptions.at(index)->is_static = stat; } catch (std::out_of_range) { @@ -191,19 +210,50 @@ void Menu::DeleteOption(int no) } delete itsOptions[no-1]; itsOptions.erase(itsOptions.begin()+no-1); + + if (itsHighlight > itsOptions.size()-1) + itsHighlight = itsOptions.size()-1; + + int MaxBeginning = itsOptions.size() < itsHeight ? 0 : itsOptions.size()-itsHeight; + if (itsBeginning > MaxBeginning) + { + itsBeginning = MaxBeginning; + NeedsRedraw.push_back(itsHighlight); + Refresh(); + redraw_screen(); + } + else + { + vector