| 3285 | } |
| 3286 | |
| 3287 | void ImGui::TableSaveSettings(ImGuiTable* table) |
| 3288 | { |
| 3289 | table->IsSettingsDirty = false; |
| 3290 | if (table->Flags & ImGuiTableFlags_NoSavedSettings) |
| 3291 | return; |
| 3292 | |
| 3293 | // Bind or create settings data |
| 3294 | ImGuiContext& g = *GImGui; |
| 3295 | ImGuiTableSettings* settings = TableGetBoundSettings(table); |
| 3296 | if (settings == NULL) |
| 3297 | { |
| 3298 | settings = TableSettingsCreate(table->ID, table->ColumnsCount); |
| 3299 | table->SettingsOffset = g.SettingsTables.offset_from_ptr(settings); |
| 3300 | } |
| 3301 | settings->ColumnsCount = (ImGuiTableColumnIdx)table->ColumnsCount; |
| 3302 | |
| 3303 | // Serialize ImGuiTable/ImGuiTableColumn into ImGuiTableSettings/ImGuiTableColumnSettings |
| 3304 | IM_ASSERT(settings->ID == table->ID); |
| 3305 | IM_ASSERT(settings->ColumnsCount == table->ColumnsCount && settings->ColumnsCountMax >= settings->ColumnsCount); |
| 3306 | ImGuiTableColumn* column = table->Columns.Data; |
| 3307 | ImGuiTableColumnSettings* column_settings = settings->GetColumnSettings(); |
| 3308 | |
| 3309 | bool save_ref_scale = false; |
| 3310 | settings->SaveFlags = ImGuiTableFlags_None; |
| 3311 | for (int n = 0; n < table->ColumnsCount; n++, column++, column_settings++) |
| 3312 | { |
| 3313 | const float width_or_weight = (column->Flags & ImGuiTableColumnFlags_WidthStretch) ? column->StretchWeight : column->WidthRequest; |
| 3314 | column_settings->WidthOrWeight = width_or_weight; |
| 3315 | column_settings->Index = (ImGuiTableColumnIdx)n; |
| 3316 | column_settings->DisplayOrder = column->DisplayOrder; |
| 3317 | column_settings->SortOrder = column->SortOrder; |
| 3318 | column_settings->SortDirection = column->SortDirection; |
| 3319 | column_settings->IsEnabled = column->IsUserEnabled; |
| 3320 | column_settings->IsStretch = (column->Flags & ImGuiTableColumnFlags_WidthStretch) ? 1 : 0; |
| 3321 | if ((column->Flags & ImGuiTableColumnFlags_WidthStretch) == 0) |
| 3322 | save_ref_scale = true; |
| 3323 | |
| 3324 | // We skip saving some data in the .ini file when they are unnecessary to restore our state. |
| 3325 | // Note that fixed width where initial width was derived from auto-fit will always be saved as InitStretchWeightOrWidth will be 0.0f. |
| 3326 | // FIXME-TABLE: We don't have logic to easily compare SortOrder to DefaultSortOrder yet so it's always saved when present. |
| 3327 | if (width_or_weight != column->InitStretchWeightOrWidth) |
| 3328 | settings->SaveFlags |= ImGuiTableFlags_Resizable; |
| 3329 | if (column->DisplayOrder != n) |
| 3330 | settings->SaveFlags |= ImGuiTableFlags_Reorderable; |
| 3331 | if (column->SortOrder != -1) |
| 3332 | settings->SaveFlags |= ImGuiTableFlags_Sortable; |
| 3333 | if (column->IsUserEnabled != ((column->Flags & ImGuiTableColumnFlags_DefaultHide) == 0)) |
| 3334 | settings->SaveFlags |= ImGuiTableFlags_Hideable; |
| 3335 | } |
| 3336 | settings->SaveFlags &= table->Flags; |
| 3337 | settings->RefScale = save_ref_scale ? table->RefScale : 0.0f; |
| 3338 | |
| 3339 | MarkIniSettingsDirty(); |
| 3340 | } |
| 3341 | |
| 3342 | void ImGui::TableLoadSettings(ImGuiTable* table) |
| 3343 | { |
nothing calls this directly
no test coverage detected