Added SetNextTreeNodeOpened() with optional condition flag in replacement of OpenNextNode()
This commit is contained in:
parent
ea17240b96
commit
2177b11682
45
imgui.cpp
45
imgui.cpp
@ -129,6 +129,7 @@
|
|||||||
Occasionally introducing changes that are breaking the API. The breakage are generally minor and easy to fix.
|
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.
|
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/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/10 (1.32) - renamed GetItemWidth() to CalcItemWidth() to clarify its evolving behavior
|
||||||
- 2015/02/08 (1.31) - renamed GetTextLineSpacing() to GetTextLineHeightWithSpacing()
|
- 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: 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: field resize behavior - field could stretch when being edited? hover tooltip shows more text?
|
||||||
- text edit: add multi-line text edit
|
- 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
|
- 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: write more decent code to allow saving/loading new fields
|
||||||
- settings: api for per-tool simple persistent data (bool,int,float) in .ini file
|
- settings: api for per-tool simple persistent data (bool,int,float) in .ini file
|
||||||
@ -889,7 +889,6 @@ struct ImGuiDrawContext
|
|||||||
ImVector<float> TextWrapPos;
|
ImVector<float> TextWrapPos;
|
||||||
ImGuiColorEditMode ColorEditMode;
|
ImGuiColorEditMode ColorEditMode;
|
||||||
ImGuiStorage* StateStorage;
|
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 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.
|
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);
|
LastItemAabb = ImGuiAabb(0.0f,0.0f,0.0f,0.0f);
|
||||||
LastItemHovered = false;
|
LastItemHovered = false;
|
||||||
StateStorage = NULL;
|
StateStorage = NULL;
|
||||||
OpenNextNode = -1;
|
|
||||||
|
|
||||||
ColumnsStartX = 0.0f;
|
ColumnsStartX = 0.0f;
|
||||||
ColumnsOffsetX = 0.0f;
|
ColumnsOffsetX = 0.0f;
|
||||||
@ -999,6 +997,7 @@ struct ImGuiState
|
|||||||
ImVector<ImGuiColMod> ColorModifiers;
|
ImVector<ImGuiColMod> ColorModifiers;
|
||||||
ImVector<ImGuiStyleMod> StyleModifiers;
|
ImVector<ImGuiStyleMod> StyleModifiers;
|
||||||
ImVector<ImFont*> FontStack;
|
ImVector<ImFont*> FontStack;
|
||||||
|
|
||||||
ImVec2 SetNextWindowPosVal;
|
ImVec2 SetNextWindowPosVal;
|
||||||
ImGuiSetCondition SetNextWindowPosCond;
|
ImGuiSetCondition SetNextWindowPosCond;
|
||||||
ImVec2 SetNextWindowSizeVal;
|
ImVec2 SetNextWindowSizeVal;
|
||||||
@ -1006,6 +1005,8 @@ struct ImGuiState
|
|||||||
bool SetNextWindowCollapsedVal;
|
bool SetNextWindowCollapsedVal;
|
||||||
ImGuiSetCondition SetNextWindowCollapsedCond;
|
ImGuiSetCondition SetNextWindowCollapsedCond;
|
||||||
bool SetNextWindowFocus;
|
bool SetNextWindowFocus;
|
||||||
|
bool SetNextTreeNodeOpenedVal;
|
||||||
|
ImGuiSetCondition SetNextTreeNodeOpenedCond;
|
||||||
|
|
||||||
// Render
|
// Render
|
||||||
ImVector<ImDrawList*> RenderDrawLists;
|
ImVector<ImDrawList*> RenderDrawLists;
|
||||||
@ -1051,6 +1052,7 @@ struct ImGuiState
|
|||||||
ActiveIdIsAlive = false;
|
ActiveIdIsAlive = false;
|
||||||
ActiveIdIsFocusedOnly = false;
|
ActiveIdIsFocusedOnly = false;
|
||||||
SettingsDirtyTimer = 0.0f;
|
SettingsDirtyTimer = 0.0f;
|
||||||
|
|
||||||
SetNextWindowPosVal = ImVec2(0.0f, 0.0f);
|
SetNextWindowPosVal = ImVec2(0.0f, 0.0f);
|
||||||
SetNextWindowPosCond = 0;
|
SetNextWindowPosCond = 0;
|
||||||
SetNextWindowSizeVal = ImVec2(0.0f, 0.0f);
|
SetNextWindowSizeVal = ImVec2(0.0f, 0.0f);
|
||||||
@ -1058,6 +1060,8 @@ struct ImGuiState
|
|||||||
SetNextWindowCollapsedVal = false;
|
SetNextWindowCollapsedVal = false;
|
||||||
SetNextWindowCollapsedCond = 0;
|
SetNextWindowCollapsedCond = 0;
|
||||||
SetNextWindowFocus = false;
|
SetNextWindowFocus = false;
|
||||||
|
SetNextTreeNodeOpenedVal = false;
|
||||||
|
SetNextTreeNodeOpenedCond = 0;
|
||||||
|
|
||||||
SliderAsInputTextId = 0;
|
SliderAsInputTextId = 0;
|
||||||
ActiveComboID = 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.ColumnsCellMinY = window->DC.ColumnsCellMaxY = window->DC.ColumnsStartPos.y;
|
||||||
window->DC.TreeDepth = 0;
|
window->DC.TreeDepth = 0;
|
||||||
window->DC.StateStorage = &window->StateStorage;
|
window->DC.StateStorage = &window->StateStorage;
|
||||||
window->DC.OpenNextNode = -1;
|
|
||||||
|
|
||||||
// Reset contents size for auto-fitting
|
// Reset contents size for auto-fitting
|
||||||
window->SizeContentsFit = ImVec2(0.0f, 0.0f);
|
window->SizeContentsFit = ImVec2(0.0f, 0.0f);
|
||||||
@ -4204,7 +4207,7 @@ void ImGui::LogButtons()
|
|||||||
LogToClipboard(g.LogAutoExpandMaxDepth);
|
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;
|
ImGuiState& g = *GImGui;
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
@ -4220,14 +4223,31 @@ bool ImGui::CollapsingHeader(const char* label, const char* str_id, const bool d
|
|||||||
label = str_id;
|
label = str_id;
|
||||||
const ImGuiID id = window->GetID(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;
|
ImGuiStorage* storage = window->DC.StateStorage;
|
||||||
bool opened;
|
bool opened;
|
||||||
if (window->DC.OpenNextNode != -1)
|
if (g.SetNextTreeNodeOpenedCond != 0)
|
||||||
{
|
{
|
||||||
opened = window->DC.OpenNextNode > 0;
|
if (g.SetNextTreeNodeOpenedCond & ImGuiSetCondition_Always)
|
||||||
|
{
|
||||||
|
opened = g.SetNextTreeNodeOpenedVal;
|
||||||
storage->SetInt(id, opened);
|
storage->SetInt(id, opened);
|
||||||
window->DC.OpenNextNode = -1;
|
}
|
||||||
|
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
|
else
|
||||||
{
|
{
|
||||||
@ -4418,10 +4438,11 @@ bool ImGui::TreeNode(const char* str_label_id)
|
|||||||
return TreeNode(str_label_id, "%s", 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();
|
ImGuiState& g = *GImGui;
|
||||||
window->DC.OpenNextNode = open ? 1 : 0;
|
g.SetNextTreeNodeOpenedVal = opened;
|
||||||
|
g.SetNextTreeNodeOpenedCond = cond ? cond : ImGuiSetCondition_Always;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::PushID(const char* str_id)
|
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 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 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 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 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 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);
|
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 ColorEdit3(const char* label, float col[3]);
|
||||||
IMGUI_API bool ColorEdit4(const char* label, float col[4], bool show_alpha = true);
|
IMGUI_API bool ColorEdit4(const char* label, float col[4], bool show_alpha = true);
|
||||||
IMGUI_API void ColorEditMode(ImGuiColorEditMode mode);
|
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_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 char* str_id, const char* fmt, ...); // "
|
||||||
IMGUI_API bool TreeNode(const void* ptr_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 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 TreePush(const void* ptr_id = NULL); // "
|
||||||
IMGUI_API void TreePop();
|
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
|
// Selectable / Lists
|
||||||
IMGUI_API bool Selectable(const char* label, bool selected, const ImVec2& size = ImVec2(0,0));
|
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)
|
// Obsolete (will be removed)
|
||||||
IMGUI_API void GetDefaultFontData(const void** fnt_data, unsigned int* fnt_size, const void** png_data, unsigned int* png_size);
|
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
|
} // namespace ImGui
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user