How to set the no_docking and no_tab_bar for the MainDockSpace ?
juseus03 opened this issue · comments
As the question states, I want to add these flags for the MainDockSpace. Currently, I can do it for all secondary splits via the "node_flags" attribute of each split. Is there a way to get this attribute for the MainDockSpace? I can't find a way to reference to it.
Thanks
I have a idea:
in docking_details.cpp
void ImplProvideFullScreenDockSpace(const ImGuiWindowParams& imGuiWindowParams)
{
DoCreateFullScreenImGuiWindow(imGuiWindowParams, true);
ImGuiID mainDockspaceId = ImGui::GetID("MainDockSpace");
ImGuiDockNodeFlags dockspace_flags =
ImGuiDockNodeFlags_PassthruCentralNode; // ImGuiDockNodeFlags_PassthruDockspace;
if(imGuiWindowParams.Enable_MainDockSpace_KeepAliveOnly)
dockspace_flags |= ImGuiDockNodeFlags_KeepAliveOnly;
if(imGuiWindowParams.Enable_MainDockSpace_NoResize)
dockspace_flags |= ImGuiDockNodeFlags_NoResize;
if(imGuiWindowParams.Enable_MainDockSpace_NoTabBar)
dockspace_flags |= ImGuiDockNodeFlags_NoTabBar;
ImGui::DockSpace(mainDockspaceId, ImVec2(0.0f, 0.0f), dockspace_flags);
gImGuiSplitIDs["MainDockSpace"] = mainDockspaceId;
}
in imgui_window_params.h
struct ImGuiWindowParams
{
DefaultImGuiWindowType defaultImGuiWindowType = DefaultImGuiWindowType::ProvideFullScreenWindow;
ImVec4 backgroundColor = ImVec4(0.45f, 0.55f, 0.60f, 1.00f);
bool showMenuBar = false;
bool showMenu_App = true;
bool showMenu_App_Quit = true;
bool showMenu_View = true;
bool showStatusBar = false;
bool showStatus_Fps = true;
bool rememberStatusBarSettings = true;
bool configWindowsMoveFromTitleBarOnly = true;
bool enableViewports = false;
std::string menuAppTitle = "";
ImGuiTheme::ImGuiTweakedTheme tweakedTheme;
bool showMenu_View_Themes = true;
bool rememberTheme = true;
bool Enable_MainDockSpace_KeepAliveOnly = false;
bool Enable_MainDockSpace_NoResize = false;
bool Enable_MainDockSpace_NoTabBar = false;
};
} // namespace HelloImGui
Hi, thanks for the proposition. I'm back from a long holiday, but I will check it soon.
Hi,
I implemented something close to your suggestion, however it happens inside DockingParams and it uses the original ImGui flags.
In docking_params.h, we now have:
struct DockingParams
{
std::vector<DockingSplit> dockingSplits;
std::vector<DockableWindow> dockableWindows;
std::string layoutName = "Default";
DockingLayoutCondition layoutCondition = DockingLayoutCondition::FirstUseEver;
bool layoutReset = false;
// **********************
// This was added
// **********************
ImGuiDockNodeFlags mainDockSpaceNodeFlags = ImGuiDockNodeFlags_PassthruCentralNode;
// Helpers
DockableWindow * dockableWindowOfName(const std::string& name);
void focusDockableWindow(const std::string& windowName);
std::optional<ImGuiID> dockSpaceIdFromName(const std::string& dockSpaceName);
};
And the demo hello_imgui_demodocking will demonstrate the usage interactively:
![image](https://private-user-images.githubusercontent.com/7694091/266079299-faaf8e75-5d43-4721-a4b8-60650ce7f65f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTg2MzEyMTgsIm5iZiI6MTcxODYzMDkxOCwicGF0aCI6Ii83Njk0MDkxLzI2NjA3OTI5OS1mYWFmOGU3NS01ZDQzLTQ3MjEtYTRiOC02MDY1MGNlN2Y2NWYucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDYxNyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA2MTdUMTMyODM4WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MzFlOTUzMWFlMjZkNzA0MzQ2MWVmYjNhNmYyN2JkNzNiYzYyMzBkYzZkODBkYjhhZjgwOGE3ZmQ4Y2Y2MzkxOSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.eJx0CVc6ZTxplZoSBwnl3gg6ZmCvAu71IF951s0y-UM)