@ -1715,7 +1715,7 @@ bool ImGui::TableGetColumnIsEnabled(int column_n) 
			
		
	
		
			
				
					        return  false ;   
			
		
	
		
			
				
					    if  ( column_n  <  0 )   
			
		
	
		
			
				
					        column_n  =  table - > CurrentColumn ;   
			
		
	
		
			
				
					    return  ( table - > EnabledMaskByIndex  &  ( ( ImU64 ) 1  < <  column_n ) )  = =  0 ;   
			
		
	
		
			
				
					    return  ( table - > EnabledMaskByIndex  &  ( ( ImU64 ) 1  < <  column_n ) )  ! =  0 ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					void  ImGui : : TableSetColumnIsEnabled ( int  column_n ,  bool  hidden )  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -2134,7 +2134,7 @@ void ImGui::TableMergeDrawChannels(ImGuiTable* table) 
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					// 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 (as some are also done in TableEndRow) 
  
			
		
	
		
			
				
					void  ImGui : : TableDrawBorders ( ImGuiTable *  table )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiWindow *  inner_window  =  table - > InnerWindow ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -2391,20 +2391,23 @@ void ImGui::TableSortSpecsBuild(ImGuiTable* table) 
			
		
	
		
			
				
					    TableSortSpecsSanitize ( table ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Write output
   
			
		
	
		
			
				
					    table - > SortSpecsData . resize ( table - > SortSpecsCount ) ;   
			
		
	
		
			
				
					    const  bool  single_sort_specs  =  ( table - > SortSpecsCount  < =  1 ) ;   
			
		
	
		
			
				
					    table - > SortSpecsMulti . resize ( single_sort_specs  ?  0  :  table - > SortSpecsCount ) ;   
			
		
	
		
			
				
					    ImGuiTableSortSpecsColumn *  sort_specs  =  single_sort_specs  ?  & table - > SortSpecsSingle  :  table - > SortSpecsMulti . Data ;   
			
		
	
		
			
				
					    for  ( int  column_n  =  0 ;  column_n  <  table - > ColumnsCount ;  column_n + + )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        ImGuiTableColumn *  column  =  & table - > Columns [ column_n ] ;   
			
		
	
		
			
				
					        if  ( column - > SortOrder  = =  - 1 )   
			
		
	
		
			
				
					            continue ;   
			
		
	
		
			
				
					        ImGuiTableSortSpecsColumn *  sort_spec  =  & table - > SortSpecsData [ column - > SortOrder ] ;   
			
		
	
		
			
				
					        IM_ASSERT ( column - > SortOrder  <  table - > SortSpecsCount ) ;   
			
		
	
		
			
				
					        ImGuiTableSortSpecsColumn *  sort_spec  =  & sort_specs [ column - > SortOrder ] ;   
			
		
	
		
			
				
					        sort_spec - > ColumnUserID  =  column - > UserID ;   
			
		
	
		
			
				
					        sort_spec - > ColumnIndex  =  ( ImGuiTableColumnIdx ) column_n ;   
			
		
	
		
			
				
					        sort_spec - > SortOrder  =  ( ImGuiTableColumnIdx ) column - > SortOrder ;   
			
		
	
		
			
				
					        sort_spec - > SortDirection  =  column - > SortDirection ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					    table - > SortSpecs . Specs  =  table - > SortSpecsData . Data ;   
			
		
	
		
			
				
					    table - > SortSpecs . SpecsCount  =  table - > SortSpecsData . Size  ;   
			
		
	
		
			
				
					    table - > SortSpecs . Specs  =  sort_specs ;   
			
		
	
		
			
				
					    table - > SortSpecs . SpecsCount  =  table - > SortSpecsCount  ;   
			
		
	
		
			
				
					    table - > SortSpecs . SpecsDirty  =  true ;  // Mark as dirty for user
   
			
		
	
		
			
				
					    table - > IsSortSpecsDirty  =  false ;  // Mark as not dirty for us
   
			
		
	
		
			
				
					}  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -2412,58 +2415,51 @@ void ImGui::TableSortSpecsBuild(ImGuiTable* table) 
			
		
	
		
			
				
					//-------------------------------------------------------------------------
  
			
		
	
		
			
				
					// [SECTION] Tables: Headers
  
			
		
	
		
			
				
					//-------------------------------------------------------------------------
  
			
		
	
		
			
				
					// - TableGetHeaderRowHeight() [Internal]
  
			
		
	
		
			
				
					// - TableHeadersRow()
  
			
		
	
		
			
				
					// - TableHeader()
  
			
		
	
		
			
				
					//-------------------------------------------------------------------------
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					// This is a helper to output TableHeader() calls based on the column names declared in TableSetupColumn().
  
			
		
	
		
			
				
					float  ImGui : : TableGetHeaderRowHeight ( )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    // Caring for a minor edge case:
   
			
		
	
		
			
				
					    // Calculate row height, for the unlikely case that some labels may be taller than others.
   
			
		
	
		
			
				
					    // If we didn't do that, uneven header height would highlight but smaller one before the tallest wouldn't catch input for all height.
   
			
		
	
		
			
				
					    // In your custom header row you may omit this all together and just call TableNextRow() without a height...
   
			
		
	
		
			
				
					    float  row_height  =  GetTextLineHeight ( ) ;   
			
		
	
		
			
				
					    int  columns_count  =  TableGetColumnCount ( ) ;   
			
		
	
		
			
				
					    for  ( int  column_n  =  0 ;  column_n  <  columns_count ;  column_n + + )   
			
		
	
		
			
				
					        if  ( TableGetColumnIsEnabled ( column_n ) )   
			
		
	
		
			
				
					            row_height  =  ImMax ( row_height ,  CalcTextSize ( TableGetColumnName ( column_n ) ) . y ) ;   
			
		
	
		
			
				
					    row_height  + =  GetStyle ( ) . CellPadding . y  *  2.0f ;   
			
		
	
		
			
				
					    return  row_height ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					// [Public] This is a helper to output TableHeader() calls based on the column names declared in TableSetupColumn().
  
			
		
	
		
			
				
					// The intent is that advanced users willing to create customized headers would not need to use this helper
  
			
		
	
		
			
				
					// and can create their own! For example: TableHeader() may be preceeded by Checkbox() or other custom widgets.
  
			
		
	
		
			
				
					// See 'Demo->Tables->Custom headers' for a demonstration of implementing a custom version of this.
  
			
		
	
		
			
				
					// This code is constructed to not make much use of internal functions, as it is intended to be a template to copy.
  
			
		
	
		
			
				
					// FIXME-TABLE: TableOpenContextMenu() and TableGetHeaderRowHeight() are not public.
  
			
		
	
		
			
				
					void  ImGui : : TableHeadersRow ( )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiStyle &  style  =  ImGui : : GetStyle ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    ImGuiContext &  g  =  * GImGui ;   
			
		
	
		
			
				
					    ImGuiTable *  table  =  g . CurrentTable ;   
			
		
	
		
			
				
					    IM_ASSERT ( table  ! =  NULL  & &  " Need to call TableHeadersRow() after BeginTable()! " ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Calculate row height (for the unlikely case that labels may be are multi-line)
   
			
		
	
		
			
				
					    // If we didn't do that, uneven header height would work but their highlight won't cover the full row height.
   
			
		
	
		
			
				
					    float  row_height  =  GetTextLineHeight ( ) ;   
			
		
	
		
			
				
					    const  float  row_y1  =  GetCursorScreenPos ( ) . y ;   
			
		
	
		
			
				
					    const  int  columns_count  =  TableGetColumnCount ( ) ;   
			
		
	
		
			
				
					    for  ( int  column_n  =  0 ;  column_n  <  columns_count ;  column_n + + )   
			
		
	
		
			
				
					        if  ( TableGetColumnIsEnabled ( column_n ) )   
			
		
	
		
			
				
					            row_height  =  ImMax ( row_height ,  CalcTextSize ( TableGetColumnName ( column_n ) ) . y ) ;   
			
		
	
		
			
				
					    row_height  + =  style . CellPadding . y  *  2.0f ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Open row
   
			
		
	
		
			
				
					    const  float  row_y1  =  GetCursorScreenPos ( ) . y ;   
			
		
	
		
			
				
					    const  float  row_height  =  TableGetHeaderRowHeight ( ) ;   
			
		
	
		
			
				
					    TableNextRow ( ImGuiTableRowFlags_Headers ,  row_height ) ;   
			
		
	
		
			
				
					    if  ( table - > HostSkipItems )  // Merely an optimization, you may skip in your own code.
   
			
		
	
		
			
				
					        return ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // This for loop is constructed to not make use of internal functions,
   
			
		
	
		
			
				
					    // as this is intended to be a base template to copy and build from.
   
			
		
	
		
			
				
					    const  int  columns_count  =  TableGetColumnCount ( ) ;   
			
		
	
		
			
				
					    for  ( int  column_n  =  0 ;  column_n  <  columns_count ;  column_n + + )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        if  ( ! TableSetColumnIndex ( column_n ) )   
			
		
	
		
			
				
					            continue ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // [DEBUG] Test custom user elements
   
			
		
	
		
			
				
					#if 0  
			
		
	
		
			
				
					        if  ( column_n  <  2 )   
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            static  bool  b [ 2 ]  =  { } ;   
			
		
	
		
			
				
					            PushID ( column_n ) ;   
			
		
	
		
			
				
					            PushStyleVar ( ImGuiStyleVar_FramePadding ,  ImVec2 ( 0 ,  0 ) ) ;   
			
		
	
		
			
				
					            Checkbox ( " ## " ,  & b [ column_n ] ) ;   
			
		
	
		
			
				
					            PopStyleVar ( ) ;   
			
		
	
		
			
				
					            PopID ( ) ;   
			
		
	
		
			
				
					            SameLine ( 0.0f ,  style . ItemInnerSpacing . x ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					# endif  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Push an id to allow unnamed labels (generally accidental, but let's behave nicely with them)
   
			
		
	
		
			
				
					        // - in your own code you may omit the PushID/PopID all-together, provided you know they won't collide
   
			
		
	
		
			
				
					        // - table->InstanceCurrent is only >0 when we use multiple BeginTable/EndTable calls with same identifier.
   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -2474,7 +2470,6 @@ void ImGui::TableHeadersRow() 
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Allow opening popup from the right-most section after the last column.
   
			
		
	
		
			
				
					    // FIXME-TABLE: TableOpenContextMenu() is not public yet.
   
			
		
	
		
			
				
					    ImVec2  mouse_pos  =  ImGui : : GetMousePos ( ) ;   
			
		
	
		
			
				
					    if  ( IsMouseReleased ( 1 )  & &  TableGetHoveredColumn ( )  = =  columns_count )   
			
		
	
		
			
				
					        if  ( mouse_pos . y  > =  row_y1  & &  mouse_pos . y  <  row_y1  +  row_height )   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -2565,9 +2560,8 @@ void ImGui::TableHeader(const char* label) 
			
		
	
		
			
				
					        w_arrow  =  ImFloor ( g . FontSize  *  ARROW_SCALE  +  g . Style . FramePadding . x ) ; // table->CellPadding.x);
   
			
		
	
		
			
				
					        if  ( column - > SortOrder  ! =  - 1 )   
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            w_sort_text  =  0.0f ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            char  sort_order_suf [ 8 ] ;   
			
		
	
		
			
				
					            w_sort_text  =  0.0f ;   
			
		
	
		
			
				
					            if  ( column - > SortOrder  >  0 )   
			
		
	
		
			
				
					            {   
			
		
	
		
			
				
					                ImFormatString ( sort_order_suf ,  IM_ARRAYSIZE ( sort_order_suf ) ,  " %d " ,  column - > SortOrder  +  1 ) ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -2675,11 +2669,11 @@ void ImGui::TableDrawContextMenu(ImGuiTable* table) 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        const  char *  size_all_desc ;   
			
		
	
		
			
				
					        if  ( table - > ColumnsEnabledFixedCount  = =  table - > ColumnsEnabledCount )   
			
		
	
		
			
				
					            size_all_desc  =  " Size all columns to fit " ;            // All fixed
   
			
		
	
		
			
				
					            size_all_desc  =  " Size all columns to fit###SizeAll  " ;         // All fixed
   
			
		
	
		
			
				
					        else  if  ( table - > ColumnsEnabledFixedCount  = =  0 )   
			
		
	
		
			
				
					            size_all_desc  =  " Size all columns to default " ;        // All stretch
   
			
		
	
		
			
				
					            size_all_desc  =  " Size all columns to default###SizeAll  " ;     // All stretch
   
			
		
	
		
			
				
					        else   
			
		
	
		
			
				
					            size_all_desc  =  " Size all columns to fit/default " ;    // Mixed
   
			
		
	
		
			
				
					            size_all_desc  =  " Size all columns to fit/default###SizeAll  " ; // Mixed
   
			
		
	
		
			
				
					        if  ( MenuItem ( size_all_desc ,  NULL ) )   
			
		
	
		
			
				
					            TableSetColumnWidthAutoAll ( table ) ;   
			
		
	
		
			
				
					        want_separator  =  true ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -3074,7 +3068,7 @@ void ImGui::TableGcCompactTransientBuffers(ImGuiTable* table) 
			
		
	
		
			
				
					    ImGuiContext &  g  =  * GImGui ;   
			
		
	
		
			
				
					    IM_ASSERT ( table - > MemoryCompacted  = =  false ) ;   
			
		
	
		
			
				
					    table - > DrawSplitter . ClearFreeMemory ( ) ;   
			
		
	
		
			
				
					    table - > SortSpecsData  . clear ( ) ;   
			
		
	
		
			
				
					    table - > SortSpecsMulti  . clear ( ) ;   
			
		
	
		
			
				
					    table - > SortSpecs . Specs  =  NULL ;   
			
		
	
		
			
				
					    table - > IsSortSpecsDirty  =  true ;   
			
		
	
		
			
				
					    table - > ColumnsNames . clear ( ) ;