|
@@ -577,6 +577,7 @@ bool ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImG
|
|
|
// Initialize
|
|
|
table->SettingsOffset = -1;
|
|
|
table->IsSortSpecsDirty = true;
|
|
|
+ table->IsSettingsDirty = true; // Records itself into .ini file even when in default state (#7934)
|
|
|
table->InstanceInteracted = -1;
|
|
|
table->ContextPopupColumn = -1;
|
|
|
table->ReorderColumn = table->ResizedColumn = table->LastResizedColumn = -1;
|
|
@@ -3718,6 +3719,19 @@ void ImGui::TableLoadSettings(ImGuiTable* table)
|
|
|
table->SettingsLoadedFlags = settings->SaveFlags;
|
|
|
table->RefScale = settings->RefScale;
|
|
|
|
|
|
+ // Initialize default columns settings
|
|
|
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
|
|
|
+ {
|
|
|
+ ImGuiTableColumn* column = &table->Columns[column_n];
|
|
|
+ column->StretchWeight = -1.0f;
|
|
|
+ column->WidthRequest = -1.0f;
|
|
|
+ column->AutoFitQueue = 0x00;
|
|
|
+ column->DisplayOrder = (ImGuiTableColumnIdx)column_n;
|
|
|
+ column->IsUserEnabled = column->IsUserEnabledNextFrame = (column->Flags & ImGuiTableColumnFlags_DefaultHide) ? 0 : 1;
|
|
|
+ column->SortOrder = (column->Flags & ImGuiTableColumnFlags_DefaultSort) ? 0 : -1;
|
|
|
+ column->SortDirection = (column->Flags & ImGuiTableColumnFlags_DefaultSort) ? (ImS8)ImGuiSortDirection_None : (column->Flags & ImGuiTableColumnFlags_PreferSortDescending) ? (ImS8)ImGuiSortDirection_Descending : (ImU8)(ImGuiSortDirection_Ascending);
|
|
|
+ }
|
|
|
+
|
|
|
// Serialize ImGuiTableSettings/ImGuiTableColumnSettings into ImGuiTable/ImGuiTableColumn
|
|
|
ImGuiTableColumnSettings* column_settings = settings->GetColumnSettings();
|
|
|
ImU64 display_order_mask = 0;
|
|
@@ -3734,14 +3748,12 @@ void ImGui::TableLoadSettings(ImGuiTable* table)
|
|
|
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 = (ImGuiTableColumnIdx)column_n;
|
|
|
display_order_mask |= (ImU64)1 << column->DisplayOrder;
|
|
|
- column->IsUserEnabled = column->IsUserEnabledNextFrame = (column_settings->IsEnabled != -1 ? column_settings->IsEnabled == 1 : (column->Flags & ImGuiTableColumnFlags_DefaultHide) ? 0 : 1);
|
|
|
+ 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;
|
|
|
}
|
|
@@ -3837,8 +3849,7 @@ static void TableSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandle
|
|
|
const bool save_visible = (settings->SaveFlags & ImGuiTableFlags_Hideable) != 0;
|
|
|
const bool save_order = (settings->SaveFlags & ImGuiTableFlags_Reorderable) != 0;
|
|
|
const bool save_sort = (settings->SaveFlags & ImGuiTableFlags_Sortable) != 0;
|
|
|
- if (!save_size && !save_visible && !save_order && !save_sort)
|
|
|
- continue;
|
|
|
+ // We need to save the [Table] entry even if all the bools are false, since this records a table with "default settings".
|
|
|
|
|
|
buf->reserve(buf->size() + 30 + settings->ColumnsCount * 50); // ballpark reserve
|
|
|
buf->appendf("[%s][0x%08X,%d]\n", handler->TypeName, settings->ID, settings->ColumnsCount);
|