Commit 0fa931dc authored by twanvl's avatar twanvl

Reduced flicker in card list

parent 4d66b3e7
......@@ -287,7 +287,7 @@ void AutoReplaceWindow::updateItem() {
ar->replace = replace->GetValue();
ar->enabled = enabled->GetValue();
ar->whole_word = whole_word->GetValue();
list->refreshList();
list->refreshList(true);
in_event = false;
}
......
......@@ -119,7 +119,7 @@ void CardListBase::onAction(const Action& action, bool undone) {
return;
}
TYPE_CASE(action, ValueAction) {
if (action.card) refreshList();
if (action.card) refreshList(true);
}
}
......
......@@ -147,26 +147,34 @@ struct ItemList::ItemComparer {
}
};
void ItemList::refreshList() {
Freeze();
void ItemList::refreshList(bool refresh_current_only) {
// Get all items
sorted_list.clear();
vector<VoidP> old_sorted_list;
swap(sorted_list, old_sorted_list);
getItems(sorted_list);
long item_count = (long)sorted_list.size();
SetItemCount(item_count);
// Sort the list
if (sort_by_column >= 0) {
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
if (item_count)
RefreshItems(0, item_count - 1);
if (item_count == 0) Refresh();
// Note: Freeze/Thaw makes flicker worse
long item_count = (long)sorted_list.size();
SetItemCount(item_count);
// (re)select current item
findSelectedItemPos();
focusNone();
focusSelectedItem(true);
Thaw();
// refresh items
if (item_count == 0) {
Refresh();
} else {
RefreshItems(0, item_count - 1);
}
}
void ItemList::sortBy(long column, bool ascending) {
......
......@@ -71,7 +71,7 @@ class ItemList : public wxListView {
/// Sort by the given column
virtual void sortBy(long column, bool ascending);
/// 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)
void SetColumnImage(int col, int image);
......
......@@ -76,7 +76,7 @@ void KeywordList::onAction(const Action& action, bool undone) {
KeywordTextValue* value = dynamic_cast<KeywordTextValue*>(action.valueP.get());
if (value) {
// 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