mirror of
https://github.com/Drezil/imgui.git
synced 2025-02-16 22:42:44 +00:00
Tables: Honor width/weight passed to TableSetupColumn() after .ini load since we don't actually restore that data currently.
Demo: Remove filter from Advanced Table demo since it's breaking with clipping.
This commit is contained in:
parent
0e7b3f2f2f
commit
5431cbd3f0
@ -3661,14 +3661,14 @@ static void ShowDemoWindowTables()
|
|||||||
{
|
{
|
||||||
for (int column = 0; column < column_count; column++)
|
for (int column = 0; column < column_count; column++)
|
||||||
{
|
{
|
||||||
ImGui::TableNextCell();
|
|
||||||
// Make the UI compact because there are so many fields
|
// Make the UI compact because there are so many fields
|
||||||
|
ImGui::TableNextCell();
|
||||||
ImGuiStyle& style = ImGui::GetStyle();
|
ImGuiStyle& style = ImGui::GetStyle();
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(style.FramePadding.x, 2));
|
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(style.FramePadding.x, 2));
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x, 2));
|
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x, 2));
|
||||||
ImGui::PushID(column);
|
ImGui::PushID(column);
|
||||||
ImGui::AlignTextToFramePadding(); // FIXME-TABLE: Workaround for wrong text baseline propagation
|
ImGui::AlignTextToFramePadding(); // FIXME-TABLE: Workaround for wrong text baseline propagation
|
||||||
ImGui::Text("Column '%s'", column_names[column]);
|
ImGui::Text("Flags for '%s'", column_names[column]);
|
||||||
ImGui::CheckboxFlags("_NoResize", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoResize);
|
ImGui::CheckboxFlags("_NoResize", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoResize);
|
||||||
ImGui::CheckboxFlags("_NoClipX", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoClipX);
|
ImGui::CheckboxFlags("_NoClipX", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoClipX);
|
||||||
ImGui::CheckboxFlags("_NoHide", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoHide);
|
ImGui::CheckboxFlags("_NoHide", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoHide);
|
||||||
@ -3880,8 +3880,8 @@ static void ShowDemoWindowTables()
|
|||||||
{
|
{
|
||||||
// The first column will use the default _WidthStretch when ScrollX is Off and _WidthFixed when ScrollX is On
|
// The first column will use the default _WidthStretch when ScrollX is Off and _WidthFixed when ScrollX is On
|
||||||
ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_NoHide);
|
ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_NoHide);
|
||||||
ImGui::TableSetupColumn("Size", ImGuiTableColumnFlags_WidthFixed, ImGui::GetFontSize() * 10);
|
ImGui::TableSetupColumn("Size", ImGuiTableColumnFlags_WidthFixed, ImGui::GetFontSize() * 6);
|
||||||
ImGui::TableSetupColumn("Type", ImGuiTableColumnFlags_WidthFixed, ImGui::GetFontSize() * 20);
|
ImGui::TableSetupColumn("Type", ImGuiTableColumnFlags_WidthFixed, ImGui::GetFontSize() * 10);
|
||||||
ImGui::TableAutoHeaders();
|
ImGui::TableAutoHeaders();
|
||||||
|
|
||||||
// Simple storage to output a dummy file-system.
|
// Simple storage to output a dummy file-system.
|
||||||
@ -4043,10 +4043,10 @@ static void ShowDemoWindowTables()
|
|||||||
static float inner_width_without_scroll = 0.0f; // Fill
|
static float inner_width_without_scroll = 0.0f; // Fill
|
||||||
static float inner_width_with_scroll = 0.0f; // Auto-extend
|
static float inner_width_with_scroll = 0.0f; // Auto-extend
|
||||||
static bool outer_size_enabled = true;
|
static bool outer_size_enabled = true;
|
||||||
static bool lock_left_column_visibility = false;
|
static bool lock_first_column_visibility = false;
|
||||||
static bool show_headers = true;
|
static bool show_headers = true;
|
||||||
static bool show_wrapped_text = false;
|
static bool show_wrapped_text = false;
|
||||||
static ImGuiTextFilter filter;
|
//static ImGuiTextFilter filter;
|
||||||
//ImGui::SetNextItemOpen(true, ImGuiCond_Once); // FIXME-TABLE: Enabling this results in initial clipped first pass on table which affects sizing
|
//ImGui::SetNextItemOpen(true, ImGuiCond_Once); // FIXME-TABLE: Enabling this results in initial clipped first pass on table which affects sizing
|
||||||
if (ImGui::TreeNodeEx("Options"))
|
if (ImGui::TreeNodeEx("Options"))
|
||||||
{
|
{
|
||||||
@ -4130,10 +4130,10 @@ static void ShowDemoWindowTables()
|
|||||||
ImGui::SameLine(); HelpMarker("Specify height of the Selectable item.");
|
ImGui::SameLine(); HelpMarker("Specify height of the Selectable item.");
|
||||||
ImGui::DragInt("items_count", &items_count, 0.1f, 0, 5000);
|
ImGui::DragInt("items_count", &items_count, 0.1f, 0, 5000);
|
||||||
ImGui::Combo("contents_type (first column)", &contents_type, contents_type_names, IM_ARRAYSIZE(contents_type_names));
|
ImGui::Combo("contents_type (first column)", &contents_type, contents_type_names, IM_ARRAYSIZE(contents_type_names));
|
||||||
filter.Draw("filter");
|
//filter.Draw("filter");
|
||||||
ImGui::Checkbox("show_headers", &show_headers);
|
ImGui::Checkbox("show_headers", &show_headers);
|
||||||
ImGui::Checkbox("show_wrapped_text", &show_wrapped_text);
|
ImGui::Checkbox("show_wrapped_text", &show_wrapped_text);
|
||||||
ImGui::Checkbox("lock_left_column_visibility", &lock_left_column_visibility);
|
ImGui::Checkbox("lock_first_column_visibility", &lock_first_column_visibility);
|
||||||
ImGui::Unindent();
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::PopItemWidth();
|
ImGui::PopItemWidth();
|
||||||
@ -4168,7 +4168,7 @@ static void ShowDemoWindowTables()
|
|||||||
// Declare columns
|
// Declare columns
|
||||||
// We use the "user_id" parameter of TableSetupColumn() to specify a user id that will be stored in the sort specifications.
|
// We use the "user_id" parameter of TableSetupColumn() to specify a user id that will be stored in the sort specifications.
|
||||||
// This is so our sort function can identify a column given our own identifier. We could also identify them based on their index!
|
// This is so our sort function can identify a column given our own identifier. We could also identify them based on their index!
|
||||||
ImGui::TableSetupColumn("ID", ImGuiTableColumnFlags_DefaultSort | ImGuiTableColumnFlags_WidthFixed | (lock_left_column_visibility ? ImGuiTableColumnFlags_NoHide : 0), -1.0f, MyItemColumnID_ID);
|
ImGui::TableSetupColumn("ID", ImGuiTableColumnFlags_DefaultSort | ImGuiTableColumnFlags_WidthFixed | (lock_first_column_visibility ? ImGuiTableColumnFlags_NoHide : 0), -1.0f, MyItemColumnID_ID);
|
||||||
ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_WidthFixed, -1.0f, MyItemColumnID_Name);
|
ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_WidthFixed, -1.0f, MyItemColumnID_Name);
|
||||||
ImGui::TableSetupColumn("Action", ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_WidthFixed, -1.0f, MyItemColumnID_Action);
|
ImGui::TableSetupColumn("Action", ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_WidthFixed, -1.0f, MyItemColumnID_Action);
|
||||||
ImGui::TableSetupColumn("Quantity Long Label", ImGuiTableColumnFlags_PreferSortDescending | ImGuiTableColumnFlags_WidthStretch, 1.0f, MyItemColumnID_Quantity);// , ImGuiTableColumnFlags_None | ImGuiTableColumnFlags_WidthAlwaysAutoResize);
|
ImGui::TableSetupColumn("Quantity Long Label", ImGuiTableColumnFlags_PreferSortDescending | ImGuiTableColumnFlags_WidthStretch, 1.0f, MyItemColumnID_Quantity);// , ImGuiTableColumnFlags_None | ImGuiTableColumnFlags_WidthAlwaysAutoResize);
|
||||||
@ -4209,8 +4209,8 @@ static void ShowDemoWindowTables()
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
MyItem* item = &items[row_n];
|
MyItem* item = &items[row_n];
|
||||||
if (!filter.PassFilter(item->Name))
|
//if (!filter.PassFilter(item->Name))
|
||||||
continue;
|
// continue;
|
||||||
|
|
||||||
const bool item_is_selected = selection.contains(item->ID);
|
const bool item_is_selected = selection.contains(item->ID);
|
||||||
ImGui::PushID(item->ID);
|
ImGui::PushID(item->ID);
|
||||||
|
@ -1830,9 +1830,9 @@ struct ImGuiTableColumn
|
|||||||
ImGuiID UserID; // Optional, value passed to TableSetupColumn()
|
ImGuiID UserID; // Optional, value passed to TableSetupColumn()
|
||||||
ImGuiTableColumnFlags FlagsIn; // Flags as they were provided by user. See ImGuiTableColumnFlags_
|
ImGuiTableColumnFlags FlagsIn; // Flags as they were provided by user. See ImGuiTableColumnFlags_
|
||||||
ImGuiTableColumnFlags Flags; // Effective flags. See ImGuiTableColumnFlags_
|
ImGuiTableColumnFlags Flags; // Effective flags. See ImGuiTableColumnFlags_
|
||||||
float ResizeWeight; // ~1.0f. Master width data when (Flags & _WidthStretch)
|
|
||||||
float MinX; // Absolute positions
|
float MinX; // Absolute positions
|
||||||
float MaxX;
|
float MaxX;
|
||||||
|
float ResizeWeight; // ~1.0f. Master width data when (Flags & _WidthStretch)
|
||||||
float WidthRequested; // Master width data when !(Flags & _WidthStretch)
|
float WidthRequested; // Master width data when !(Flags & _WidthStretch)
|
||||||
float WidthGiven; // == (MaxX - MinX). FIXME-TABLE: Store all persistent width in multiple of FontSize?
|
float WidthGiven; // == (MaxX - MinX). FIXME-TABLE: Store all persistent width in multiple of FontSize?
|
||||||
float StartXRows; // Start position for the frame, currently ~(MinX + CellPaddingX)
|
float StartXRows; // Start position for the frame, currently ~(MinX + CellPaddingX)
|
||||||
@ -1865,8 +1865,7 @@ struct ImGuiTableColumn
|
|||||||
ImGuiTableColumn()
|
ImGuiTableColumn()
|
||||||
{
|
{
|
||||||
memset(this, 0, sizeof(*this));
|
memset(this, 0, sizeof(*this));
|
||||||
ResizeWeight = 1.0f;
|
ResizeWeight = WidthRequested = WidthGiven = -1.0f;
|
||||||
WidthRequested = WidthGiven = -1.0f;
|
|
||||||
NameOffset = -1;
|
NameOffset = -1;
|
||||||
IsActive = NextIsActive = true;
|
IsActive = NextIsActive = true;
|
||||||
IndexDisplayOrder = IndexWithinActiveSet = -1;
|
IndexDisplayOrder = IndexWithinActiveSet = -1;
|
||||||
|
@ -585,7 +585,9 @@ void ImGui::TableUpdateLayout(ImGuiTable* table)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
IM_ASSERT(column->Flags & ImGuiTableColumnFlags_WidthStretch);
|
IM_ASSERT(column->Flags & ImGuiTableColumnFlags_WidthStretch);
|
||||||
IM_ASSERT(column->ResizeWeight > 0.0f);
|
const int init_size = (column->ResizeWeight < 0.0f);
|
||||||
|
if (init_size)
|
||||||
|
column->ResizeWeight = 1.0f;
|
||||||
total_weights += column->ResizeWeight;
|
total_weights += column->ResizeWeight;
|
||||||
if (table->LeftMostStretchedColumnDisplayOrder == -1)
|
if (table->LeftMostStretchedColumnDisplayOrder == -1)
|
||||||
table->LeftMostStretchedColumnDisplayOrder = (ImS8)column->IndexDisplayOrder;
|
table->LeftMostStretchedColumnDisplayOrder = (ImS8)column->IndexDisplayOrder;
|
||||||
@ -1378,7 +1380,8 @@ void ImGui::TableSetupColumn(const char* label, ImGuiTableColumnFlags flags,
|
|||||||
flags = column->Flags;
|
flags = column->Flags;
|
||||||
|
|
||||||
// Initialize defaults
|
// Initialize defaults
|
||||||
if (table->IsInitializing && !table->IsSettingsLoaded)
|
// FIXME-TABLE: We don't restore widths/weight so let's avoid using IsSettingsLoaded for now
|
||||||
|
if (table->IsInitializing && column->WidthRequested < 0.0f && column->ResizeWeight < 0.0f)// && !table->IsSettingsLoaded)
|
||||||
{
|
{
|
||||||
// Init width or weight
|
// Init width or weight
|
||||||
// Disable auto-fit if a default fixed width has been specified
|
// Disable auto-fit if a default fixed width has been specified
|
||||||
@ -1396,7 +1399,9 @@ void ImGui::TableSetupColumn(const char* label, ImGuiTableColumnFlags flags,
|
|||||||
{
|
{
|
||||||
column->ResizeWeight = 1.0f;
|
column->ResizeWeight = 1.0f;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (table->IsInitializing && !table->IsSettingsLoaded)
|
||||||
|
{
|
||||||
// Init default visibility/sort state
|
// Init default visibility/sort state
|
||||||
if (flags & ImGuiTableColumnFlags_DefaultHide)
|
if (flags & ImGuiTableColumnFlags_DefaultHide)
|
||||||
column->IsActive = column->NextIsActive = false;
|
column->IsActive = column->NextIsActive = false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user