|
|
|
@ -874,7 +874,8 @@ void ImGui::TableUpdateLayout(ImGuiTable* table) |
|
|
|
|
// Context menu
|
|
|
|
|
if (table->IsContextPopupOpen && table->InstanceCurrent == table->InstanceInteracted) |
|
|
|
|
{ |
|
|
|
|
if (BeginPopup("##TableContextMenu")) |
|
|
|
|
const ImGuiID context_menu_id = ImHashStr("##ContextMenu", 0, table->ID); |
|
|
|
|
if (BeginPopupEx(context_menu_id, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings)) |
|
|
|
|
{ |
|
|
|
|
TableDrawContextMenu(table); |
|
|
|
|
EndPopup(); |
|
|
|
@ -2010,20 +2011,19 @@ void ImGui::TableOpenContextMenu(ImGuiTable* table, int column_n) |
|
|
|
|
table->IsContextPopupOpen = true; |
|
|
|
|
table->ContextPopupColumn = (ImS8)column_n; |
|
|
|
|
table->InstanceInteracted = table->InstanceCurrent; |
|
|
|
|
OpenPopup("##TableContextMenu"); |
|
|
|
|
const ImGuiID context_menu_id = ImHashStr("##ContextMenu", 0, table->ID); |
|
|
|
|
OpenPopupEx(context_menu_id, ImGuiPopupFlags_None); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 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.
|
|
|
|
|
// FIXME-TABLE: However presently this function uses too many internal structures/calls.
|
|
|
|
|
void ImGui::TableAutoHeaders() |
|
|
|
|
{ |
|
|
|
|
ImGuiStyle& style = ImGui::GetStyle(); |
|
|
|
|
|
|
|
|
|
ImGuiContext& g = *GImGui; |
|
|
|
|
//ImGuiWindow* window = g.CurrentWindow;
|
|
|
|
|
ImGuiTable* table = g.CurrentTable; |
|
|
|
|
IM_ASSERT(table != NULL && "Need to call TableAutoHeaders() after BeginTable()!"); |
|
|
|
|
const int columns_count = table->ColumnsCount; |
|
|
|
@ -2043,7 +2043,6 @@ void ImGui::TableAutoHeaders() |
|
|
|
|
|
|
|
|
|
// 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.
|
|
|
|
|
int open_context_popup = INT_MAX; |
|
|
|
|
for (int column_n = 0; column_n < columns_count; column_n++) |
|
|
|
|
{ |
|
|
|
|
if (!TableSetColumnIndex(column_n)) |
|
|
|
@ -2071,25 +2070,19 @@ void ImGui::TableAutoHeaders() |
|
|
|
|
PushID(table->InstanceCurrent * table->ColumnsCount + column_n); |
|
|
|
|
TableHeader(name); |
|
|
|
|
PopID(); |
|
|
|
|
|
|
|
|
|
// We don't use BeginPopupContextItem() because we want the popup to stay up even after the column is hidden
|
|
|
|
|
if (IsMouseReleased(1) && IsItemHovered()) |
|
|
|
|
open_context_popup = column_n; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// FIXME-TABLE: This is not user-land code any more + need to explain WHY this is here! (added in fa88f023)
|
|
|
|
|
//window->SkipItems = table->HostSkipItems;
|
|
|
|
|
|
|
|
|
|
// Allow opening popup from the right-most section after the last column
|
|
|
|
|
// (We don't actually need to ImGuiHoveredFlags_AllowWhenBlockedByPopup because in reality this is generally
|
|
|
|
|
// not required anymore.. because popup opening code tends to be reacting on IsMouseReleased() and the click
|
|
|
|
|
// would already have closed any other popups!)
|
|
|
|
|
if (IsMouseReleased(1) && TableGetHoveredColumn() == columns_count && g.IO.MousePos.y >= row_y1 && g.IO.MousePos.y < row_y1 + row_height) |
|
|
|
|
open_context_popup = -1; // Will open a non-column-specific popup.
|
|
|
|
|
|
|
|
|
|
// Open Context Menu
|
|
|
|
|
if (open_context_popup != INT_MAX) |
|
|
|
|
TableOpenContextMenu(table, open_context_popup); |
|
|
|
|
// Allow opening popup from the right-most section after the last column.
|
|
|
|
|
// (We don't actually need to use ImGuiHoveredFlags_AllowWhenBlockedByPopup because in reality this is generally
|
|
|
|
|
// not required anymore.. because popup opening code tends to be reacting on IsMouseReleased() and the click would
|
|
|
|
|
// already have closed any other popups!)
|
|
|
|
|
// FIXME-TABLE: TableOpenContextMenu() is not public yet.
|
|
|
|
|
if (IsMouseReleased(1) && TableGetHoveredColumn() == columns_count) |
|
|
|
|
if (g.IO.MousePos.y >= row_y1 && g.IO.MousePos.y < row_y1 + row_height) |
|
|
|
|
TableOpenContextMenu(table, -1); // Will open a non-column-specific popup.
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Emit a column header (text + optional sort order)
|
|
|
|
@ -2214,6 +2207,10 @@ void ImGui::TableHeader(const char* label) |
|
|
|
|
column->ContentMaxPosHeadersIdeal = ImMax(column->ContentMaxPosHeadersIdeal, max_pos_x); |
|
|
|
|
|
|
|
|
|
PopID(); |
|
|
|
|
|
|
|
|
|
// We don't use BeginPopupContextItem() because we want the popup to stay up even after the column is hidden
|
|
|
|
|
if (IsMouseReleased(1) && IsItemHovered()) |
|
|
|
|
TableOpenContextMenu(table, column_n); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void ImGui::TableSortSpecsClickColumn(ImGuiTable* table, ImGuiTableColumn* clicked_column, bool add_to_existing_sort_orders) |
|
|
|
|