mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-10 13:06:59 -04:00
Reduced flicker in card list
git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@1202 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user