@ -261,6 +261,7 @@ bool ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImG
table - > HostClipRect = inner_window - > ClipRect ;
table - > HostClipRect = inner_window - > ClipRect ;
table - > HostSkipItems = inner_window - > SkipItems ;
table - > HostSkipItems = inner_window - > SkipItems ;
table - > HostBackupParentWorkRect = inner_window - > ParentWorkRect ;
table - > HostBackupParentWorkRect = inner_window - > ParentWorkRect ;
table - > HostBackupColumnsOffset = outer_window - > DC . ColumnsOffset ;
table - > HostCursorMaxPos = inner_window - > DC . CursorMaxPos ;
table - > HostCursorMaxPos = inner_window - > DC . CursorMaxPos ;
inner_window - > ParentWorkRect = inner_window - > WorkRect ;
inner_window - > ParentWorkRect = inner_window - > WorkRect ;
@ -305,6 +306,8 @@ bool ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImG
g . CurrentTableStack . push_back ( ImGuiPtrOrIndex ( g . Tables . GetIndex ( table ) ) ) ;
g . CurrentTableStack . push_back ( ImGuiPtrOrIndex ( g . Tables . GetIndex ( table ) ) ) ;
g . CurrentTable = table ;
g . CurrentTable = table ;
outer_window - > DC . CurrentTable = table ;
outer_window - > DC . CurrentTable = table ;
if ( inner_window ! = outer_window ) // So EndChild() within the inner window can restore the table properly.
inner_window - > DC . CurrentTable = table ;
if ( ( table_last_flags & ImGuiTableFlags_Reorderable ) & & ! ( flags & ImGuiTableFlags_Reorderable ) )
if ( ( table_last_flags & ImGuiTableFlags_Reorderable ) & & ! ( flags & ImGuiTableFlags_Reorderable ) )
table - > IsResetDisplayOrderRequest = true ;
table - > IsResetDisplayOrderRequest = true ;
@ -1079,7 +1082,7 @@ void ImGui::EndTable()
inner_window - > ParentWorkRect = table - > HostBackupParentWorkRect ;
inner_window - > ParentWorkRect = table - > HostBackupParentWorkRect ;
inner_window - > SkipItems = table - > HostSkipItems ;
inner_window - > SkipItems = table - > HostSkipItems ;
outer_window - > DC . CursorPos = table - > OuterRect . Min ;
outer_window - > DC . CursorPos = table - > OuterRect . Min ;
outer_window - > DC . ColumnsOffset . x = 0.0f ;
outer_window - > DC . ColumnsOffset = table - > HostBackupColumnsOffset ;
if ( inner_window ! = outer_window )
if ( inner_window ! = outer_window )
{
{
EndChild ( ) ;
EndChild ( ) ;
@ -1110,9 +1113,8 @@ void ImGui::EndTable()
// Clear or restore current table, if any
// Clear or restore current table, if any
IM_ASSERT ( g . CurrentWindow = = outer_window ) ;
IM_ASSERT ( g . CurrentWindow = = outer_window ) ;
IM_ASSERT ( g . CurrentTable = = table ) ;
IM_ASSERT ( g . CurrentTable = = table ) ;
outer_window - > DC . CurrentTable = NULL ;
g . CurrentTableStack . pop_back ( ) ;
g . CurrentTableStack . pop_back ( ) ;
g. CurrentTable = g . CurrentTableStack . Size ? g . Tables . GetByIndex ( g . CurrentTableStack . back ( ) . Index ) : NULL ;
outer_window- > DC . CurrentTable = g. CurrentTable = g . CurrentTableStack . Size ? g . Tables . GetByIndex ( g . CurrentTableStack . back ( ) . Index ) : NULL ;
}
}
// FIXME-TABLE: This is a mess, need to redesign how we render borders.
// FIXME-TABLE: This is a mess, need to redesign how we render borders.
@ -2601,15 +2603,17 @@ void ImGui::TableLoadSettings(ImGuiTable* table)
settings = TableSettingsFindByID ( table - > ID ) ;
settings = TableSettingsFindByID ( table - > ID ) ;
if ( settings = = NULL )
if ( settings = = NULL )
return ;
return ;
if ( settings - > ColumnsCount ! = table - > ColumnsCount ) // Allow settings if columns count changed. We could otherwise decide to return...
table - > IsSettingsDirty = true ;
table - > SettingsOffset = g . SettingsTables . offset_from_ptr ( settings ) ;
table - > SettingsOffset = g . SettingsTables . offset_from_ptr ( settings ) ;
}
}
else
else
{
{
settings = TableGetBoundSettings ( table ) ;
settings = TableGetBoundSettings ( table ) ;
}
}
table - > SettingsLoadedFlags = settings - > SaveFlags ;
table - > SettingsLoadedFlags = settings - > SaveFlags ;
table - > RefScale = settings - > RefScale ;
table - > RefScale = settings - > RefScale ;
IM_ASSERT ( settings - > ColumnsCount = = table - > ColumnsCount ) ;
// Serialize ImGuiTableSettings/ImGuiTableColumnSettings into ImGuiTable/ImGuiTableColumn
// Serialize ImGuiTableSettings/ImGuiTableColumnSettings into ImGuiTable/ImGuiTableColumn
ImGuiTableColumnSettings * column_settings = settings - > GetColumnSettings ( ) ;
ImGuiTableColumnSettings * column_settings = settings - > GetColumnSettings ( ) ;
@ -2772,13 +2776,17 @@ void ImGui::DebugNodeTable(ImGuiTable* table)
char buf [ 256 ] ;
char buf [ 256 ] ;
char * p = buf ;
char * p = buf ;
const char * buf_end = buf + IM_ARRAYSIZE ( buf ) ;
const char * buf_end = buf + IM_ARRAYSIZE ( buf ) ;
ImFormatString ( p , buf_end - p , " Table 0x%08X (%d columns, in '%s') " , table - > ID , table - > ColumnsCount , table - > OuterWindow - > Name ) ;
const bool is_active = ( table - > LastFrameActive > = ImGui : : GetFrameCount ( ) - 2 ) ;
ImFormatString ( p , buf_end - p , " Table 0x%08X (%d columns, in '%s')%s " , table - > ID , table - > ColumnsCount , table - > OuterWindow - > Name , is_active ? " " : " *Inactive* " ) ;
if ( ! is_active ) { PushStyleColor ( ImGuiCol_Text , GetStyleColorVec4 ( ImGuiCol_TextDisabled ) ) ; }
bool open = TreeNode ( table , " %s " , buf ) ;
bool open = TreeNode ( table , " %s " , buf ) ;
if ( ! is_active ) { PopStyleColor ( ) ; }
if ( IsItemHovered ( ) )
if ( IsItemHovered ( ) )
GetForegroundDrawList ( ) - > AddRect ( table - > OuterRect . Min , table - > OuterRect . Max , IM_COL32 ( 255 , 255 , 0 , 255 ) ) ;
GetForegroundDrawList ( ) - > AddRect ( table - > OuterRect . Min , table - > OuterRect . Max , IM_COL32 ( 255 , 255 , 0 , 255 ) ) ;
if ( ! open )
if ( ! open )
return ;
return ;
BulletText ( " OuterWidth: %.1f, InnerWidth: %.1f%s " , table - > OuterRect . GetWidth ( ) , table - > InnerWidth , table - > InnerWidth = = 0.0f ? " (auto) " : " " ) ;
BulletText ( " OuterRect: Pos: (%.1f,%.1f) Size: (%.1f,%.1f) " , table - > OuterRect . Min . x , table - > OuterRect . Min . y , table - > OuterRect . GetWidth ( ) , table - > OuterRect . GetHeight ( ) ) ;
BulletText ( " InnerWidth: %.1f%s " , table - > InnerWidth , table - > InnerWidth = = 0.0f ? " (auto) " : " " ) ;
BulletText ( " ColumnsWidth: %.1f, AutoFitWidth: %.1f " , table - > ColumnsTotalWidth , table - > ColumnsAutoFitWidth ) ;
BulletText ( " ColumnsWidth: %.1f, AutoFitWidth: %.1f " , table - > ColumnsTotalWidth , table - > ColumnsAutoFitWidth ) ;
BulletText ( " HoveredColumnBody: %d, HoveredColumnBorder: %d " , table - > HoveredColumnBody , table - > HoveredColumnBorder ) ;
BulletText ( " HoveredColumnBody: %d, HoveredColumnBorder: %d " , table - > HoveredColumnBody , table - > HoveredColumnBorder ) ;
BulletText ( " ResizedColumn: %d, ReorderColumn: %d, HeldHeaderColumn: %d " , table - > ResizedColumn , table - > ReorderColumn , table - > HeldHeaderColumn ) ;
BulletText ( " ResizedColumn: %d, ReorderColumn: %d, HeldHeaderColumn: %d " , table - > ResizedColumn , table - > ReorderColumn , table - > HeldHeaderColumn ) ;