mirror of
https://github.com/Drezil/imgui.git
synced 2025-07-06 04:58:47 +02:00
Tables: (Breaking change) Sorting: Made it users responsability to clear SpecsDirty back to false, so TableGetSortSpecs() doesn't have side-effect any more. + comments
This commit is contained in:
@ -3250,6 +3250,8 @@ struct MyItem
|
||||
// however qsort doesn't allow passing user data to comparing function.
|
||||
// As a workaround, we are storing the sort specs in a static/global for the comparing function to access.
|
||||
// In your own use case you would probably pass the sort specs to your sorting/comparing functions directly and not use a global.
|
||||
// We could technically call ImGui::TableGetSortSpecs() in CompareWithSortSpecs(), but considering that this function is called
|
||||
// very often by the sorting algorithm it would be a little wasteful.
|
||||
static const ImGuiTableSortSpecs* s_current_sort_specs;
|
||||
|
||||
// Compare function to be used by qsort()
|
||||
@ -4201,12 +4203,14 @@ static void ShowDemoWindowTables()
|
||||
ImGui::TableSetupColumn("Quantity", ImGuiTableColumnFlags_PreferSortDescending | ImGuiTableColumnFlags_WidthStretch, -1.0f, MyItemColumnID_Quantity);
|
||||
|
||||
// Sort our data if sort specs have been changed!
|
||||
if (const ImGuiTableSortSpecs* sorts_specs = ImGui::TableGetSortSpecs())
|
||||
if (sorts_specs->SpecsChanged && items.Size > 1)
|
||||
if (ImGuiTableSortSpecs* sorts_specs = ImGui::TableGetSortSpecs())
|
||||
if (sorts_specs->SpecsDirty)
|
||||
{
|
||||
MyItem::s_current_sort_specs = sorts_specs; // Store in variable accessible by the sort function.
|
||||
qsort(&items[0], (size_t)items.Size, sizeof(items[0]), MyItem::CompareWithSortSpecs);
|
||||
if (items.Size > 1)
|
||||
qsort(&items[0], (size_t)items.Size, sizeof(items[0]), MyItem::CompareWithSortSpecs);
|
||||
MyItem::s_current_sort_specs = NULL;
|
||||
sorts_specs->SpecsDirty = false;
|
||||
}
|
||||
|
||||
// Display data
|
||||
@ -4389,14 +4393,15 @@ static void ShowDemoWindowTables()
|
||||
ImGui::TableSetupColumn("Hidden", ImGuiTableColumnFlags_DefaultHide | ImGuiTableColumnFlags_NoSort);
|
||||
|
||||
// Sort our data if sort specs have been changed!
|
||||
const ImGuiTableSortSpecs* sorts_specs = ImGui::TableGetSortSpecs();
|
||||
if (sorts_specs && sorts_specs->SpecsChanged)
|
||||
ImGuiTableSortSpecs* sorts_specs = ImGui::TableGetSortSpecs();
|
||||
if (sorts_specs && sorts_specs->SpecsDirty)
|
||||
items_need_sort = true;
|
||||
if (sorts_specs && items_need_sort && items.Size > 1)
|
||||
{
|
||||
MyItem::s_current_sort_specs = sorts_specs; // Store in variable accessible by the sort function.
|
||||
qsort(&items[0], (size_t)items.Size, sizeof(items[0]), MyItem::CompareWithSortSpecs);
|
||||
MyItem::s_current_sort_specs = NULL;
|
||||
sorts_specs->SpecsDirty = false;
|
||||
}
|
||||
items_need_sort = false;
|
||||
|
||||
|
Reference in New Issue
Block a user