@ -2,13 +2,18 @@
// (tables and columns code)
/*
*
* Index of this file :
*
* // [SECTION] Widgets: BeginTable, EndTable, etc.
* // [SECTION] Widgets: Columns, BeginColumns, EndColumns, etc.
*
*/
Index of this file :
// [SECTION] Tables: BeginTable, EndTable, etc.
// [SECTION] Tables: Headers
// [SECTION] Tables: Context Menu
// [SECTION] Tables: Settings (.ini data)
// [SECTION] Tables: Garbage Collection
// [SECTION] Tables: Debugging
// [SECTION] Columns, BeginColumns, EndColumns, etc.
*/
# if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
# define _CRT_SECURE_NO_WARNINGS
@ -22,12 +27,17 @@
# endif
# include "imgui_internal.h"
// System includes
# if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
# include <stddef.h> // intptr_t
# else
# include <stdint.h> // intptr_t
# endif
//-------------------------------------------------------------------------
// Warnings
//-------------------------------------------------------------------------
// Visual Studio warnings
# ifdef _MSC_VER
# pragma warning (disable: 4127) // condition expression is constant
@ -45,6 +55,7 @@
# pragma clang diagnostic ignored "-Wunknown-pragmas" // warning: unknown warning group 'xxx'
# pragma clang diagnostic ignored "-Wold-style-cast" // warning: use of old-style cast // yes, they are more terse.
# pragma clang diagnostic ignored "-Wfloat-equal" // warning: comparing floating point with == or != is unsafe // storing and comparing against same constants (typically 0.0f) is ok.
# pragma clang diagnostic ignored "-Wformat-nonliteral" // warning: format string is not a string literal // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code.
# pragma clang diagnostic ignored "-Wsign-conversion" // warning: implicit conversion changes signedness
# pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // warning: zero as null pointer constant // some standard header variations use #define NULL 0
# pragma clang diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
@ -53,13 +64,12 @@
# pragma clang diagnostic ignored "-Wimplicit-int-float-conversion" // warning: implicit conversion from 'xxx' to 'float' may lose precision
# elif defined(__GNUC__)
# pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
# pragma GCC diagnostic ignored "-Wformat-nonliteral" // warning: format not a string literal, format string not checked
# pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
# endif
//-----------------------------------------------------------------------------
// [SECTION] Widgets: BeginTable, EndTable, etc.
//-----------------------------------------------------------------------------
// [SECTION] Tables: BeginTable, EndTable, etc.
//-----------------------------------------------------------------------------
// Typical call flow: (root level is public API):
// - BeginTable() user begin into a table
@ -1744,7 +1754,7 @@ void ImGui::TableNextRow(ImGuiTableRowFlags row_flags, float row_min_height)
table - > InnerWindow - > SkipItems = true ;
}
// [Internal]
// [Internal] Called by TableNextRow()!
void ImGui : : TableBeginRow ( ImGuiTable * table )
{
ImGuiWindow * window = table - > InnerWindow ;
@ -1777,7 +1787,7 @@ void ImGui::TableBeginRow(ImGuiTable* table)
}
}
// [Internal]
// [Internal] Called by TableNextRow()!
void ImGui : : TableEndRow ( ImGuiTable * table )
{
ImGuiContext & g = * GImGui ;
@ -2684,7 +2694,22 @@ void ImGui::TableSortSpecsBuild(ImGuiTable* table)
}
//-------------------------------------------------------------------------
// TABLE - .ini settings
// [SECTION] Tables: Settings (.ini data)
//-------------------------------------------------------------------------
// - TableSettingsInit() [Internal]
// - TableSettingsCalcChunkSize() [Internal]
// - TableSettingsCreate() [Internal]
// - TableSettingsFindByID() [Internal]
// - TableSettingsClearByID() [Internal]
// - TableGetBoundSettings() [Internal]
// - TableSaveSettings() [Internal]
// - TableLoadSettings() [Internal]
// - TableSettingsHandler_ClearAll() [Internal]
// - TableSettingsHandler_ApplyAll() [Internal]
// - TableSettingsHandler_ReadOpen() [Internal]
// - TableSettingsHandler_ReadLine() [Internal]
// - TableSettingsHandler_WriteAll() [Internal]
// - TableSettingsInstallHandler() [Internal]
//-------------------------------------------------------------------------
// [Init] 1: TableSettingsHandler_ReadXXXX() Load and parse .ini file into TableSettings.
// [Main] 2: TableLoadSettings() When table is created, bind Table to TableSettings, serialize TableSettings data into Table.
@ -2693,7 +2718,7 @@ void ImGui::TableSortSpecsBuild(ImGuiTable* table)
//-------------------------------------------------------------------------
// Clear and initialize empty settings instance
static void Init TableSettings( ImGuiTableSettings * settings , ImGuiID id , int columns_count , int columns_count_max )
static void TableSettingsInit ( ImGuiTableSettings * settings , ImGuiID id , int columns_count , int columns_count_max )
{
IM_PLACEMENT_NEW ( settings ) ImGuiTableSettings ( ) ;
ImGuiTableColumnSettings * settings_column = settings - > GetColumnSettings ( ) ;
@ -2714,7 +2739,7 @@ ImGuiTableSettings* ImGui::TableSettingsCreate(ImGuiID id, int columns_count)
{
ImGuiContext & g = * GImGui ;
ImGuiTableSettings * settings = g . SettingsTables . alloc_chunk ( TableSettingsCalcChunkSize ( columns_count ) ) ;
Init TableSettings( settings , id , columns_count , columns_count ) ;
TableSettingsInit ( settings , id , columns_count , columns_count ) ;
return settings ;
}
@ -2893,7 +2918,7 @@ static void* TableSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*,
{
if ( settings - > ColumnsCountMax > = columns_count )
{
Init TableSettings( settings , id , columns_count , settings - > ColumnsCountMax ) ; // Recycle
TableSettingsInit ( settings , id , columns_count , settings - > ColumnsCountMax ) ; // Recycle
return settings ;
}
settings - > ID = 0 ; // Invalidate storage, we won't fit because of a count change
@ -2980,7 +3005,11 @@ void ImGui::TableSettingsInstallHandler(ImGuiContext* context)
}
//-------------------------------------------------------------------------
// TABLE - Garbage Collection
// [SECTION] Tables: Garbage Collection
//-------------------------------------------------------------------------
// - TableRemove() [Internal]
// - TableGcCompactTransientBuffers() [Internal]
// - TableGcCompactSettings() [Internal]
//-------------------------------------------------------------------------
// Remove Table (currently only used by TestEngine)
@ -3030,8 +3059,9 @@ void ImGui::TableGcCompactSettings()
g . SettingsTables . swap ( new_chunk_stream ) ;
}
//-------------------------------------------------------------------------
// TABLE - Debugging
// [SECTION] Tables: Debugging
//-------------------------------------------------------------------------
// - DebugNodeTable() [Internal]
//-------------------------------------------------------------------------
@ -3112,13 +3142,9 @@ void ImGui::DebugNodeTableSettings(ImGuiTableSettings* settings)
# endif // #ifndef IMGUI_DISABLE_METRICS_WINDOW
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
// [SECTION] Widgets: Columns, BeginColumns, EndColumns, etc.
// [SECTION] Columns, BeginColumns, EndColumns, etc.
// (This is a legacy API, prefer using BeginTable/EndTable!)
//-------------------------------------------------------------------------
// - SetWindowClipRectBeforeSetChannel() [Internal]