2023-08-22 03:19:51 +00:00
|
|
|
WORKSPACE_COMMAND(W_Command_SplitPanelHorizontal)
|
2023-06-17 17:00:55 +00:00
|
|
|
{
|
2023-08-22 03:19:51 +00:00
|
|
|
workspace *Workspace = W_GetState();
|
|
|
|
W_SplitPanel(Workspace->CurrentPanel, Axis2_X);
|
2023-06-17 17:00:55 +00:00
|
|
|
}
|
|
|
|
|
2023-08-22 03:19:51 +00:00
|
|
|
WORKSPACE_COMMAND(W_Command_SplitPanelVertical)
|
2023-06-17 17:00:55 +00:00
|
|
|
{
|
2023-08-22 03:19:51 +00:00
|
|
|
workspace *Workspace = W_GetState();
|
|
|
|
W_SplitPanel(Workspace->CurrentPanel, Axis2_Y);
|
2023-06-17 17:00:55 +00:00
|
|
|
}
|
|
|
|
|
2023-08-22 03:19:51 +00:00
|
|
|
WORKSPACE_COMMAND(W_Command_ClosePanel)
|
2023-06-17 17:00:55 +00:00
|
|
|
{
|
2023-08-22 03:19:51 +00:00
|
|
|
workspace *Workspace = W_GetState();
|
2023-07-19 15:09:41 +00:00
|
|
|
|
2023-06-17 17:00:55 +00:00
|
|
|
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);
|
2023-08-22 03:19:51 +00:00
|
|
|
W_DeletePanel(Child);
|
2023-06-17 17:00:55 +00:00
|
|
|
}
|
|
|
|
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.
|
2023-08-22 03:19:51 +00:00
|
|
|
workspace_view *NextChild = 0;
|
2023-06-17 17:00:55 +00:00
|
|
|
for(workspace_view *Child = Panel->FirstView;
|
|
|
|
Child != 0;
|
2023-08-22 03:19:51 +00:00
|
|
|
Child = NextChild)
|
2023-06-17 17:00:55 +00:00
|
|
|
{
|
2023-08-22 03:19:51 +00:00
|
|
|
NextChild = Child->Next;
|
|
|
|
W_DestroyView(Child);
|
2023-06-17 17:00:55 +00:00
|
|
|
}
|
|
|
|
|
2023-08-22 03:19:51 +00:00
|
|
|
W_DeletePanel(Panel);
|
2023-07-19 15:09:41 +00:00
|
|
|
}
|
|
|
|
|
2023-08-22 03:19:51 +00:00
|
|
|
WORKSPACE_COMMAND(W_Command_OpenView)
|
2023-08-06 10:35:09 +00:00
|
|
|
{
|
2023-08-22 03:19:51 +00:00
|
|
|
workspace *Workspace = W_GetState();
|
|
|
|
W_CreateNewView((workspace_view_type)Argument, Workspace->CurrentPanel);
|
|
|
|
}
|
|
|
|
|
|
|
|
WORKSPACE_COMMAND(W_Command_CloseView)
|
|
|
|
{
|
|
|
|
workspace_view *View = (workspace_view *)U64ToPointer(Argument);
|
|
|
|
workspace_panel *Panel = View->Parent;
|
|
|
|
|
|
|
|
DLLRemove(Panel->FirstView, Panel->LastView, View);
|
|
|
|
if(Panel->CurrentView == View)
|
|
|
|
{
|
|
|
|
Panel->CurrentView = Panel->FirstView;
|
|
|
|
}
|
|
|
|
|
|
|
|
W_DestroyView(View);
|
2023-08-06 10:35:09 +00:00
|
|
|
}
|
|
|
|
|
2023-07-19 15:09:41 +00:00
|
|
|
#if VN_INTERNAL
|
2023-08-22 03:19:51 +00:00
|
|
|
WORKSPACE_COMMAND(W_Command_ToggleRenderUIDebugRects)
|
2023-07-19 15:09:41 +00:00
|
|
|
{
|
|
|
|
DEBUG_DebugSettings->RenderUIDebugRects = !DEBUG_DebugSettings->RenderUIDebugRects;
|
|
|
|
}
|
2023-08-22 03:19:51 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
WORKSPACE_COMMAND(W_Command_Test)
|
|
|
|
{
|
|
|
|
for(s32 Index = 0; Index < 10000; Index += 1)
|
|
|
|
{
|
|
|
|
W_IssueCommand(W_Command_OpenView, W_View_TextEditor);
|
|
|
|
W_IssueCommand(W_Command_CloseView, 0);
|
|
|
|
}
|
|
|
|
}
|