mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-24 20:57:00 +00:00
Demo: Tweak table sorting demo code.
This commit is contained in:
parent
303dc091b4
commit
8c497793f9
@ -3785,6 +3785,14 @@ struct MyItem
|
|||||||
// very often by the sorting algorithm it would be a little wasteful.
|
// very often by the sorting algorithm it would be a little wasteful.
|
||||||
static const ImGuiTableSortSpecs* s_current_sort_specs;
|
static const ImGuiTableSortSpecs* s_current_sort_specs;
|
||||||
|
|
||||||
|
static void SortWithSortSpecs(ImGuiTableSortSpecs* sort_specs, MyItem* items, int items_count)
|
||||||
|
{
|
||||||
|
s_current_sort_specs = sort_specs; // Store in variable accessible by the sort function.
|
||||||
|
if (items_count > 1)
|
||||||
|
qsort(items, (size_t)items_count, sizeof(items[0]), MyItem::CompareWithSortSpecs);
|
||||||
|
s_current_sort_specs = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// Compare function to be used by qsort()
|
// Compare function to be used by qsort()
|
||||||
static int IMGUI_CDECL CompareWithSortSpecs(const void* lhs, const void* rhs)
|
static int IMGUI_CDECL CompareWithSortSpecs(const void* lhs, const void* rhs)
|
||||||
{
|
{
|
||||||
@ -5304,14 +5312,11 @@ static void ShowDemoWindowTables()
|
|||||||
ImGui::TableHeadersRow();
|
ImGui::TableHeadersRow();
|
||||||
|
|
||||||
// Sort our data if sort specs have been changed!
|
// Sort our data if sort specs have been changed!
|
||||||
if (ImGuiTableSortSpecs* sorts_specs = ImGui::TableGetSortSpecs())
|
if (ImGuiTableSortSpecs* sort_specs = ImGui::TableGetSortSpecs())
|
||||||
if (sorts_specs->SpecsDirty)
|
if (sort_specs->SpecsDirty)
|
||||||
{
|
{
|
||||||
MyItem::s_current_sort_specs = sorts_specs; // Store in variable accessible by the sort function.
|
MyItem::SortWithSortSpecs(sort_specs, items.Data, items.Size);
|
||||||
if (items.Size > 1)
|
sort_specs->SpecsDirty = false;
|
||||||
qsort(&items[0], (size_t)items.Size, sizeof(items[0]), MyItem::CompareWithSortSpecs);
|
|
||||||
MyItem::s_current_sort_specs = NULL;
|
|
||||||
sorts_specs->SpecsDirty = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Demonstrate using clipper for large vertical lists
|
// Demonstrate using clipper for large vertical lists
|
||||||
@ -5519,15 +5524,13 @@ static void ShowDemoWindowTables()
|
|||||||
ImGui::TableSetupScrollFreeze(freeze_cols, freeze_rows);
|
ImGui::TableSetupScrollFreeze(freeze_cols, freeze_rows);
|
||||||
|
|
||||||
// Sort our data if sort specs have been changed!
|
// Sort our data if sort specs have been changed!
|
||||||
ImGuiTableSortSpecs* sorts_specs = ImGui::TableGetSortSpecs();
|
ImGuiTableSortSpecs* sort_specs = ImGui::TableGetSortSpecs();
|
||||||
if (sorts_specs && sorts_specs->SpecsDirty)
|
if (sort_specs && sort_specs->SpecsDirty)
|
||||||
items_need_sort = true;
|
items_need_sort = true;
|
||||||
if (sorts_specs && items_need_sort && items.Size > 1)
|
if (sort_specs && items_need_sort && items.Size > 1)
|
||||||
{
|
{
|
||||||
MyItem::s_current_sort_specs = sorts_specs; // Store in variable accessible by the sort function.
|
MyItem::SortWithSortSpecs(sort_specs, items.Data, items.Size);
|
||||||
qsort(&items[0], (size_t)items.Size, sizeof(items[0]), MyItem::CompareWithSortSpecs);
|
sort_specs->SpecsDirty = false;
|
||||||
MyItem::s_current_sort_specs = NULL;
|
|
||||||
sorts_specs->SpecsDirty = false;
|
|
||||||
}
|
}
|
||||||
items_need_sort = false;
|
items_need_sort = false;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user