vn/code/vn_workspace_commands.cpp

100 lines
2.7 KiB
C++

WORKSPACE_COMMAND(Workspace_Command_SplitPanelHorizontal)
{
workspace *Workspace = Workspace_GetState();
Workspace_SplitPanel(Workspace->CurrentPanel, Axis2_X);
}
WORKSPACE_COMMAND(Workspace_Command_SplitPanelVertical)
{
workspace *Workspace = Workspace_GetState();
Workspace_SplitPanel(Workspace->CurrentPanel, Axis2_Y);
}
WORKSPACE_COMMAND(Workspace_Command_ClosePanel)
{
workspace *Workspace = Workspace_GetState();
workspace_panel *Panel = (workspace_panel *)Argument;
if(!Panel)
{
Panel = Workspace->CurrentPanel;
}
workspace_panel *Parent = Panel->Parent;
Assert(Parent);
Assert(Panel != Workspace->RootPanel);
DLLRemove(Parent->First, Parent->Last, Panel);
b32 OneChildRemains = (Parent->First == Parent->Last);
if(OneChildRemains)
{
workspace_panel *Child = Parent->First;
Assert(DLLIsEmpty(Parent->FirstView));
Parent->FirstView = Child->FirstView;
Parent->LastView = Child->LastView;
Parent->First = Child->First;
Parent->Last = Child->Last;
Parent->SplitAxis = Child->SplitAxis;
// sixten: Update the parents of the children.
for(workspace_view *View = Parent->FirstView;
View != 0;
View = View->Next)
{
View->Parent = Parent;
}
for(workspace_panel *ParentChild = Parent->First;
ParentChild != 0;
ParentChild = ParentChild->Next)
{
ParentChild->Parent = Parent;
}
DLLRemove(Parent->First, Parent->Last, Child);
Workspace_DeletePanel(Child);
}
else
{
s32 ChildCount = 0;
for(workspace_panel *Child = Parent->First;
Child != 0;
Child = Child->Next)
{
++ChildCount;
}
r32 ToAppend = Panel->PercentOfParent / ChildCount;
for(workspace_panel *Child = Parent->First;
Child != 0;
Child = Child->Next)
{
Child->PercentOfParent += ToAppend;
}
}
// sixten: Delete all child views.
for(workspace_view *Child = Panel->FirstView;
Child != 0;
Child = Child->Next)
{
//Workspace_DeleteView(Child);
}
Workspace_DeletePanel(Panel);
}
WORKSPACE_COMMAND(Workspace_Command_OpenView)
{
workspace *Workspace = Workspace_GetState();
Workspace_CreateNewView((workspace_view_type)Argument, Workspace->CurrentPanel);
}
#if VN_INTERNAL
WORKSPACE_COMMAND(Workspace_Command_ToggleRenderUIDebugRects)
{
DEBUG_DebugSettings->RenderUIDebugRects = !DEBUG_DebugSettings->RenderUIDebugRects;
}
#endif