/* date = May 5th 2023 10:12 am */ #ifndef VN_WORKSPACE_H #define VN_WORKSPACE_H #include "vn_workspace_editor.h" // sixten(TODO): Remove this type entirely. enum toolbar_menu { ToolbarMenu_None = 0, ToolbarMenu_Panel, ToolbarMenu_View, ToolbarMenu_Window, }; struct workspace_panel { workspace_panel *First; workspace_panel *Last; workspace_panel *Next; workspace_panel *Prev; workspace_panel *Parent; struct workspace_view *FirstView; struct workspace_view *LastView; struct workspace_view *CurrentView; axis2 SplitAxis; r32 PercentOfParent; }; #include "vn_workspace_view.h" #define WORKSPACE_COMMAND(name, ...) void name(workspace *Workspace, u64 Argument) typedef WORKSPACE_COMMAND(workspace_command_sig); struct workspace_command { workspace_command_sig *Command; u64 Argument; workspace_command *Next; workspace_command *Prev; }; struct workspace_keybind { platform_key Key; platform_modifiers Modifiers; workspace_command_sig *Command; u64 Argument; }; enum workspace_drag_payload_state { Workspace_DragPayload_Inactive = 0, Workspace_DragPayload_Active, Workspace_DragPayload_Released, }; struct workspace_drag_payload { ui_key Key; workspace_view *View; }; struct workspace { vn_input *Input; platform_event_list *EventList; // sixten: Command Allocation memory_arena CommandArena; workspace_command *FirstFreeCommand; workspace_command *LastFreeCommand; // sixten: Command List workspace_command *FirstCommand; workspace_command *LastCommand; // sixten: Keybinds workspace_keybind Keybinds[256]; s32 KeybindCount; // sixten: Panels memory_arena PanelArena; workspace_panel *FirstFreePanel; workspace_panel *LastFreePanel; workspace_drag_payload_state DragPayloadState; workspace_drag_payload DragPayload; toolbar_menu Menu; v2 MenuP; r32 MenuTransition; workspace_panel *RootPanel; workspace_panel *CurrentPanel; }; //- sixten: Commands static void Workspace_IssueCommand(workspace *Workspace, workspace_command_sig *Sig, u64 Argument); static void Workspace_ProcessCommands(workspace *Workspace); //- sixten: Panels static workspace_panel *Workspace_CreateNewPanel(workspace *Workspace, workspace_panel *Parent); static void Workspace_DeletePanel(workspace *Workspace, workspace_panel *Panel); static void Workspace_SplitPanel(workspace *Workspace, workspace_panel *Panel, axis2 Axis); //- sixten: Builder code static ui_signal Workspace_BuildToolbarButton(workspace *Workspace, char *Text, toolbar_menu Menu); static ui_signal Workspace_BuildMenuItem(u32 Icon, char *Text, char *Shortcut); static void Workspace_BuildToolbar(workspace *Workspace, r32 dtForFrame); //- sixten: Workspace static void Workspace_Init(workspace *Workspace); static void Workspace_Update(workspace *Workspace, vn_render_commands *RenderCommands, vn_input *Input, glyph_atlas *GlyphAtlas); #endif //VN_WORKSPACE_H