mirror of
https://github.com/Drezil/imgui.git
synced 2024-12-17 21:56:36 +00:00
Added SetNextTreeNodeOpened() with optional condition flag in replacement of OpenNextNode()
This commit is contained in:
parent
ea17240b96
commit
2177b11682
47
imgui.cpp
47
imgui.cpp
@ -129,6 +129,7 @@
|
||||
Occasionally introducing changes that are breaking the API. The breakage are generally minor and easy to fix.
|
||||
Here is a change-log of API breaking changes, if you are using one of the functions listed, expect to have to fix some code.
|
||||
|
||||
- 2015/02/27 (1.34) - renamed OpenNextNode(bool) to SetNextTreeNodeOpened(bool, ImGuiSetCondition), kept inline redirection function
|
||||
- 2015/02/11 (1.32) - changed text input callback ImGuiTextEditCallback return type from void-->int. reserved for future use, return 0 for now.
|
||||
- 2015/02/10 (1.32) - renamed GetItemWidth() to CalcItemWidth() to clarify its evolving behavior
|
||||
- 2015/02/08 (1.31) - renamed GetTextLineSpacing() to GetTextLineHeightWithSpacing()
|
||||
@ -289,7 +290,6 @@
|
||||
- text edit: flag to disable live update of the user buffer.
|
||||
- text edit: field resize behavior - field could stretch when being edited? hover tooltip shows more text?
|
||||
- text edit: add multi-line text edit
|
||||
- tree: reformulate OpenNextNode() into SetNextWindowCollapsed() api
|
||||
- tree: add treenode/treepush int variants? because (void*) cast from int warns on some platforms/settings
|
||||
- settings: write more decent code to allow saving/loading new fields
|
||||
- settings: api for per-tool simple persistent data (bool,int,float) in .ini file
|
||||
@ -889,7 +889,6 @@ struct ImGuiDrawContext
|
||||
ImVector<float> TextWrapPos;
|
||||
ImGuiColorEditMode ColorEditMode;
|
||||
ImGuiStorage* StateStorage;
|
||||
int OpenNextNode; // FIXME: Reformulate this feature like SetNextWindowCollapsed() API
|
||||
|
||||
float ColumnsStartX; // Start position from left of window (increased by TreePush/TreePop, etc.)
|
||||
float ColumnsOffsetX; // Offset to the current column (if ColumnsCurrent > 0). FIXME: This and the above should be a stack to allow use cases like Tree->Column->Tree. Need revamp columns API.
|
||||
@ -912,7 +911,6 @@ struct ImGuiDrawContext
|
||||
LastItemAabb = ImGuiAabb(0.0f,0.0f,0.0f,0.0f);
|
||||
LastItemHovered = false;
|
||||
StateStorage = NULL;
|
||||
OpenNextNode = -1;
|
||||
|
||||
ColumnsStartX = 0.0f;
|
||||
ColumnsOffsetX = 0.0f;
|
||||
@ -999,6 +997,7 @@ struct ImGuiState
|
||||
ImVector<ImGuiColMod> ColorModifiers;
|
||||
ImVector<ImGuiStyleMod> StyleModifiers;
|
||||
ImVector<ImFont*> FontStack;
|
||||
|
||||
ImVec2 SetNextWindowPosVal;
|
||||
ImGuiSetCondition SetNextWindowPosCond;
|
||||
ImVec2 SetNextWindowSizeVal;
|
||||
@ -1006,6 +1005,8 @@ struct ImGuiState
|
||||
bool SetNextWindowCollapsedVal;
|
||||
ImGuiSetCondition SetNextWindowCollapsedCond;
|
||||
bool SetNextWindowFocus;
|
||||
bool SetNextTreeNodeOpenedVal;
|
||||
ImGuiSetCondition SetNextTreeNodeOpenedCond;
|
||||
|
||||
// Render
|
||||
ImVector<ImDrawList*> RenderDrawLists;
|
||||
@ -1051,6 +1052,7 @@ struct ImGuiState
|
||||
ActiveIdIsAlive = false;
|
||||
ActiveIdIsFocusedOnly = false;
|
||||
SettingsDirtyTimer = 0.0f;
|
||||
|
||||
SetNextWindowPosVal = ImVec2(0.0f, 0.0f);
|
||||
SetNextWindowPosCond = 0;
|
||||
SetNextWindowSizeVal = ImVec2(0.0f, 0.0f);
|
||||
@ -1058,6 +1060,8 @@ struct ImGuiState
|
||||
SetNextWindowCollapsedVal = false;
|
||||
SetNextWindowCollapsedCond = 0;
|
||||
SetNextWindowFocus = false;
|
||||
SetNextTreeNodeOpenedVal = false;
|
||||
SetNextTreeNodeOpenedCond = 0;
|
||||
|
||||
SliderAsInputTextId = 0;
|
||||
ActiveComboID = 0;
|
||||
@ -3035,7 +3039,6 @@ bool ImGui::Begin(const char* name, bool* p_opened, const ImVec2& size, float bg
|
||||
window->DC.ColumnsCellMinY = window->DC.ColumnsCellMaxY = window->DC.ColumnsStartPos.y;
|
||||
window->DC.TreeDepth = 0;
|
||||
window->DC.StateStorage = &window->StateStorage;
|
||||
window->DC.OpenNextNode = -1;
|
||||
|
||||
// Reset contents size for auto-fitting
|
||||
window->SizeContentsFit = ImVec2(0.0f, 0.0f);
|
||||
@ -4204,7 +4207,7 @@ void ImGui::LogButtons()
|
||||
LogToClipboard(g.LogAutoExpandMaxDepth);
|
||||
}
|
||||
|
||||
bool ImGui::CollapsingHeader(const char* label, const char* str_id, const bool display_frame, const bool default_open)
|
||||
bool ImGui::CollapsingHeader(const char* label, const char* str_id, bool display_frame, bool default_open)
|
||||
{
|
||||
ImGuiState& g = *GImGui;
|
||||
ImGuiWindow* window = GetCurrentWindow();
|
||||
@ -4220,14 +4223,31 @@ bool ImGui::CollapsingHeader(const char* label, const char* str_id, const bool d
|
||||
label = str_id;
|
||||
const ImGuiID id = window->GetID(str_id);
|
||||
|
||||
// We only write to the tree storage if the user clicks
|
||||
// We only write to the tree storage if the user clicks (or explicitely use SetNextTreeNode*** functions)
|
||||
ImGuiStorage* storage = window->DC.StateStorage;
|
||||
bool opened;
|
||||
if (window->DC.OpenNextNode != -1)
|
||||
if (g.SetNextTreeNodeOpenedCond != 0)
|
||||
{
|
||||
opened = window->DC.OpenNextNode > 0;
|
||||
storage->SetInt(id, opened);
|
||||
window->DC.OpenNextNode = -1;
|
||||
if (g.SetNextTreeNodeOpenedCond & ImGuiSetCondition_Always)
|
||||
{
|
||||
opened = g.SetNextTreeNodeOpenedVal;
|
||||
storage->SetInt(id, opened);
|
||||
}
|
||||
else
|
||||
{
|
||||
// We thread ImGuiSetCondition_FirstUseThisSession and ImGuiSetCondition_FirstUseEver the same because tree node state are not saved persistently.
|
||||
const int stored_value = storage->GetInt(id, -1);
|
||||
if (stored_value == -1)
|
||||
{
|
||||
opened = g.SetNextTreeNodeOpenedVal;
|
||||
storage->SetInt(id, opened);
|
||||
}
|
||||
else
|
||||
{
|
||||
opened = stored_value != 0;
|
||||
}
|
||||
}
|
||||
g.SetNextTreeNodeOpenedCond = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -4418,10 +4438,11 @@ bool ImGui::TreeNode(const char* str_label_id)
|
||||
return TreeNode(str_label_id, "%s", str_label_id);
|
||||
}
|
||||
|
||||
void ImGui::OpenNextNode(bool open)
|
||||
void ImGui::SetNextTreeNodeOpened(bool opened, ImGuiSetCondition cond)
|
||||
{
|
||||
ImGuiWindow* window = GetCurrentWindow();
|
||||
window->DC.OpenNextNode = open ? 1 : 0;
|
||||
ImGuiState& g = *GImGui;
|
||||
g.SetNextTreeNodeOpenedVal = opened;
|
||||
g.SetNextTreeNodeOpenedCond = cond ? cond : ImGuiSetCondition_Always;
|
||||
}
|
||||
|
||||
void ImGui::PushID(const char* str_id)
|
||||
|
7
imgui.h
7
imgui.h
@ -269,7 +269,7 @@ namespace ImGui
|
||||
IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size);
|
||||
IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0));
|
||||
IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,1), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no paddnig.
|
||||
IMGUI_API bool CollapsingHeader(const char* label, const char* str_id = NULL, const bool display_frame = true, const bool default_open = false);
|
||||
IMGUI_API bool CollapsingHeader(const char* label, const char* str_id = NULL, bool display_frame = true, bool default_open = false);
|
||||
IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix. Use power!=1.0 for logarithmic sliders.
|
||||
IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
|
||||
IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
|
||||
@ -300,6 +300,8 @@ namespace ImGui
|
||||
IMGUI_API bool ColorEdit3(const char* label, float col[3]);
|
||||
IMGUI_API bool ColorEdit4(const char* label, float col[4], bool show_alpha = true);
|
||||
IMGUI_API void ColorEditMode(ImGuiColorEditMode mode);
|
||||
|
||||
// Trees
|
||||
IMGUI_API bool TreeNode(const char* str_label_id); // if returning 'true' the node is open and the user is responsible for calling TreePop
|
||||
IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...); // "
|
||||
IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...); // "
|
||||
@ -308,7 +310,7 @@ namespace ImGui
|
||||
IMGUI_API void TreePush(const char* str_id = NULL); // already called by TreeNode(), but you can call Push/Pop yourself for layouting purpose
|
||||
IMGUI_API void TreePush(const void* ptr_id = NULL); // "
|
||||
IMGUI_API void TreePop();
|
||||
IMGUI_API void OpenNextNode(bool open); // force open/close the next TreeNode or CollapsingHeader
|
||||
IMGUI_API void SetNextTreeNodeOpened(bool opened, ImGuiSetCondition cond = 0); // set next tree node to be opened.
|
||||
|
||||
// Selectable / Lists
|
||||
IMGUI_API bool Selectable(const char* label, bool selected, const ImVec2& size = ImVec2(0,0));
|
||||
@ -370,6 +372,7 @@ namespace ImGui
|
||||
|
||||
// Obsolete (will be removed)
|
||||
IMGUI_API void GetDefaultFontData(const void** fnt_data, unsigned int* fnt_size, const void** png_data, unsigned int* png_size);
|
||||
static inline void OpenNextNode(bool open) { ImGui::SetNextTreeNodeOpened(open, 0); }
|
||||
|
||||
} // namespace ImGui
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user