Commit 0fa931dc authored by twanvl's avatar twanvl

Reduced flicker in card list

parent 4d66b3e7
...@@ -287,7 +287,7 @@ void AutoReplaceWindow::updateItem() { ...@@ -287,7 +287,7 @@ void AutoReplaceWindow::updateItem() {
ar->replace = replace->GetValue(); ar->replace = replace->GetValue();
ar->enabled = enabled->GetValue(); ar->enabled = enabled->GetValue();
ar->whole_word = whole_word->GetValue(); ar->whole_word = whole_word->GetValue();
list->refreshList(); list->refreshList(true);
in_event = false; in_event = false;
} }
......
...@@ -119,7 +119,7 @@ void CardListBase::onAction(const Action& action, bool undone) { ...@@ -119,7 +119,7 @@ void CardListBase::onAction(const Action& action, bool undone) {
return; return;
} }
TYPE_CASE(action, ValueAction) { TYPE_CASE(action, ValueAction) {
if (action.card) refreshList(); if (action.card) refreshList(true);
} }
} }
......
...@@ -147,26 +147,34 @@ struct ItemList::ItemComparer { ...@@ -147,26 +147,34 @@ struct ItemList::ItemComparer {
} }
}; };
void ItemList::refreshList() { void ItemList::refreshList(bool refresh_current_only) {
Freeze();
// Get all items // Get all items
sorted_list.clear(); vector<VoidP> old_sorted_list;
swap(sorted_list, old_sorted_list);
getItems(sorted_list); getItems(sorted_list);
long item_count = (long)sorted_list.size();
SetItemCount(item_count);
// Sort the list // Sort the list
if (sort_by_column >= 0) { if (sort_by_column >= 0) {
sort(sorted_list.begin(), sorted_list.end(), ItemComparer(*this)); sort(sorted_list.begin(), sorted_list.end(), ItemComparer(*this));
} }
// Has the entire list changed?
if (refresh_current_only && sorted_list == old_sorted_list) {
if (selected_item_pos > 0) RefreshItem(selected_item_pos);
return;
}
// refresh // refresh
if (item_count) // Note: Freeze/Thaw makes flicker worse
RefreshItems(0, item_count - 1); long item_count = (long)sorted_list.size();
if (item_count == 0) Refresh(); SetItemCount(item_count);
// (re)select current item // (re)select current item
findSelectedItemPos(); findSelectedItemPos();
focusNone(); focusNone();
focusSelectedItem(true); focusSelectedItem(true);
Thaw(); // refresh items
if (item_count == 0) {
Refresh();
} else {
RefreshItems(0, item_count - 1);
}
} }
void ItemList::sortBy(long column, bool ascending) { void ItemList::sortBy(long column, bool ascending) {
......
...@@ -71,7 +71,7 @@ class ItemList : public wxListView { ...@@ -71,7 +71,7 @@ class ItemList : public wxListView {
/// Sort by the given column /// Sort by the given column
virtual void sortBy(long column, bool ascending); virtual void sortBy(long column, bool ascending);
/// Refresh the card list (resort, refresh and reselect current item) /// Refresh the card list (resort, refresh and reselect current item)
void refreshList(); void refreshList(bool refresh_current_only = false);
/// Set the image of a column header (fixes wx bug) /// Set the image of a column header (fixes wx bug)
void SetColumnImage(int col, int image); void SetColumnImage(int col, int image);
......
...@@ -76,7 +76,7 @@ void KeywordList::onAction(const Action& action, bool undone) { ...@@ -76,7 +76,7 @@ void KeywordList::onAction(const Action& action, bool undone) {
KeywordTextValue* value = dynamic_cast<KeywordTextValue*>(action.valueP.get()); KeywordTextValue* value = dynamic_cast<KeywordTextValue*>(action.valueP.get());
if (value) { if (value) {
// this is indeed an action on a keyword, refresh // this is indeed an action on a keyword, refresh
refreshList(); refreshList(true);
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment