Skip to content

Commit 94bfe95

Browse files
committed
UPDATE sceneGraph: can be vertically resized when component opened underneath + automatic scroll centering when click on component item in graph
1 parent ac1029e commit 94bfe95

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

SofaImGui/src/SofaImGui/windows/SceneGraph.cpp

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@ namespace windows
160160

161161
if (ImGui::IsItemClicked())
162162
{
163+
ImGui::SetScrollHereY();
164+
163165
if (ImGui::IsMouseDoubleClicked(0))
164166
{
165167
componentToOpen.insert(object);
@@ -242,8 +244,10 @@ namespace windows
242244

243245
static ImGuiTableFlags flags = ImGuiTableFlags_ScrollY | ImGuiTableFlags_BordersV | ImGuiTableFlags_BordersOuterH | ImGuiTableFlags_Resizable | ImGuiTableFlags_RowBg | ImGuiTableFlags_NoBordersInBody;
244246

245-
ImVec2 outer_size = ImVec2(0.0f, static_cast<bool>(clickedObject) * ImGui::GetTextLineHeightWithSpacing() * 20);
246-
if (ImGui::BeginTable("sceneGraphTable", 2, flags, outer_size))
247+
static float tableHeight = 0.0;
248+
ImVec2 outer_size = ImVec2(0.0f, tableHeight);
249+
ImGui::BeginChild("tableRegion", outer_size, ImGuiChildFlags_None);
250+
if (ImGui::BeginTable("sceneGraphTable", 2, flags))
247251
{
248252
ImGui::TableSetupScrollFreeze(0, 1); // Make top row always visible
249253
ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_NoHide);
@@ -254,12 +258,23 @@ namespace windows
254258

255259
ImGui::EndTable();
256260
}
261+
ImGui::EndChild();
262+
ImGui::InvisibleButton("##splitter", ImVec2(-1, 2.0f)); // Invisible button used to adjust scene graoh table vertical height
263+
if (ImGui::IsItemHovered())
264+
ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeNS);
265+
if (ImGui::IsItemActive())
266+
{
267+
// Mouse drag adjusts height
268+
tableHeight += ImGui::GetIO().MouseDelta.y;
269+
if (tableHeight < (ImGui::GetTextLineHeightWithSpacing() * 10.0f)) tableHeight = ImGui::GetTextLineHeightWithSpacing() * 10.0f; // min clamp
270+
}
257271

258272
static bool areDataDisplayed;
259273
areDataDisplayed = clickedObject != nullptr;
260274
if (clickedObject != nullptr)
261275
{
262-
ImGui::Separator();
276+
if (tableHeight == 0) tableHeight = static_cast<bool>(clickedObject) * ImGui::GetTextLineHeightWithSpacing() * 30;
277+
//ImGui::Separator();
263278
ImGui::SetNextItemOpen(true, ImGuiCond_Appearing);
264279
if (ImGui::CollapsingHeader((ICON_FA_CUBE " " + clickedObject->getName()).c_str(), &areDataDisplayed))
265280
{

0 commit comments

Comments
 (0)