From 570c0e03b78f5dd76812e1edd727fa3af9a5de5c Mon Sep 17 00:00:00 2001 From: ocornut Date: Thu, 18 Jun 2026 23:13:09 +0200 Subject: [PATCH] Tables: extract part of TableLoadSettingsForColumns() into TableLoadSettingsForColumn(). (#9108) --- imgui_internal.h | 2 ++ imgui_tables.cpp | 51 ++++++++++++++++++++++++------------------------ 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/imgui_internal.h b/imgui_internal.h index ff66e2989..c3cea78cd 100644 --- a/imgui_internal.h +++ b/imgui_internal.h @@ -3263,6 +3263,8 @@ namespace ImGui // Tables: Settings IMGUI_API void TableLoadSettings(ImGuiTable* table); + IMGUI_API void TableLoadSettingsForColumns(ImGuiTable* table); + IMGUI_API void TableLoadSettingsForColumn(ImGuiTableColumn* column, const ImGuiTableColumnSettings* column_settings, ImGuiTableFlags load_flags); IMGUI_API void TableSaveSettings(ImGuiTable* table); IMGUI_API void TableResetSettings(ImGuiTable* table); IMGUI_API ImGuiTableSettings* TableGetBoundSettings(ImGuiTable* table); diff --git a/imgui_tables.cpp b/imgui_tables.cpp index e449b7ea3..75af671e1 100644 --- a/imgui_tables.cpp +++ b/imgui_tables.cpp @@ -3962,7 +3962,7 @@ void ImGui::TableLoadSettings(ImGuiTable* table) table->SettingsLoadedFlags = settings->SaveFlags; table->RefScale = settings->RefScale; - // (TableUpdateLayout() will further read from settings data) + // TableUpdateLayout() will then call TableLoadSettingsForColumns() to apply the data. } void ImGui::TableLoadSettingsForColumns(ImGuiTable* table) @@ -3973,15 +3973,11 @@ void ImGui::TableLoadSettingsForColumns(ImGuiTable* table) if (settings == NULL) return; - // When using TrackTopologyChanges mode, columns ID are either all sets, either all cleared (initially). - //const bool has_columns_id = table->Columns[0].ID != 0; - // Serialize ImGuiTableSettings/ImGuiTableColumnSettings into ImGuiTable/ImGuiTableColumn ImGuiTableColumnSettings* column_settings = settings->GetColumnSettings(); for (int data_n = 0; data_n < settings->ColumnsCount; data_n++, column_settings++) { int column_n = column_settings->Index; - //if (table->Flags & ImGuiTableFlags_TrackTopologyChanges) if ((table->Flags & ImGuiTableFlags_TrackTopologyChanges) && (settings->SaveFlags & ImGuiTableFlags_TrackTopologyChanges))// && has_columns_id) if (column_n >= table->ColumnsCount || table->Columns[column_n].ID != column_settings->ID) { @@ -3993,31 +3989,34 @@ void ImGui::TableLoadSettingsForColumns(ImGuiTable* table) if (column_n < 0 || column_n >= table->ColumnsCount) continue; - - ImGuiTableColumn* column = &table->Columns[column_n]; - column->IsLoadedSettings = true; - if (settings->SaveFlags & ImGuiTableFlags_TrackTopologyChanges) - column->ID = column_settings->ID; - if (settings->SaveFlags & ImGuiTableFlags_Resizable) - { - if (column_settings->IsStretch) - column->StretchWeight = column_settings->WidthOrWeight; - else - column->WidthRequest = column_settings->WidthOrWeight; - column->AutoFitQueue = 0x00; - } - if (settings->SaveFlags & ImGuiTableFlags_Reorderable) - column->DisplayOrder = column_settings->DisplayOrder; - else - column->DisplayOrder = column_settings->Index; // Because default depends on previous Index, we need to set that up and cannot rely on TableInitColumnDefaults() - if ((settings->SaveFlags & ImGuiTableFlags_Hideable) && column_settings->IsEnabled != -1) - column->IsUserEnabled = column->IsUserEnabledNextFrame = (column_settings->IsEnabled == 1); - column->SortOrder = column_settings->SortOrder; - column->SortDirection = column_settings->SortDirection; + TableLoadSettingsForColumn(&table->Columns[column_n], column_settings, settings->SaveFlags); } table->SettingsLoadedFlags |= ImGuiTableFlags_Reorderable; // We handle above in code above. } +void ImGui::TableLoadSettingsForColumn(ImGuiTableColumn* column, const ImGuiTableColumnSettings* column_settings, ImGuiTableFlags load_flags) +{ + column->IsLoadedSettings = true; + if (load_flags & ImGuiTableFlags_TrackTopologyChanges) + column->ID = column_settings->ID; + if (load_flags & ImGuiTableFlags_Resizable) + { + if (column_settings->IsStretch) + column->StretchWeight = column_settings->WidthOrWeight; + else + column->WidthRequest = column_settings->WidthOrWeight; + column->AutoFitQueue = 0x00; + } + if (load_flags & ImGuiTableFlags_Reorderable) + column->DisplayOrder = column_settings->DisplayOrder; + else + column->DisplayOrder = column_settings->Index; // Because default depends on previous Index, we need to set that up and cannot rely on TableInitColumnDefaults() + if ((load_flags & ImGuiTableFlags_Hideable) && column_settings->IsEnabled != -1) + column->IsUserEnabled = column->IsUserEnabledNextFrame = (column_settings->IsEnabled == 1); + column->SortOrder = column_settings->SortOrder; + column->SortDirection = column_settings->SortDirection; +} + struct ImGuiTableFixDisplayOrderColumnData { ImGuiTableColumnIdx Idx;