132 lines
3.2 KiB
C
132 lines
3.2 KiB
C
/* date = May 5th 2023 10:12 am */
|
|
|
|
#ifndef VN_WORKSPACE_H
|
|
#define VN_WORKSPACE_H
|
|
|
|
#include "vn_workspace_editor.h"
|
|
#include "vn_workspace_text_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(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: General Purpose Allocation
|
|
memory_arena *FrameArena;
|
|
|
|
// 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: State management
|
|
static void Workspace_SetState(workspace *Workspace);
|
|
static workspace *Workspace_GetState(void);
|
|
static memory_arena *Workspace_FrameArena(void);
|
|
|
|
//- sixten: Commands
|
|
static void Workspace_IssueCommand(workspace_command_sig *Sig, u64 Argument);
|
|
static void Workspace_ProcessCommands(void);
|
|
|
|
//- sixten: Panels
|
|
static workspace_panel *Workspace_CreateNewPanel(workspace_panel *Parent);
|
|
static void Workspace_DeletePanel(workspace_panel *Panel);
|
|
static void Workspace_SplitPanel(workspace_panel *Panel, axis2 Axis);
|
|
|
|
//- sixten: Builder code
|
|
static ui_signal Workspace_BuildToolbarButton(char *Text, toolbar_menu Menu);
|
|
static ui_signal Workspace_BuildMenuItem(u32 Icon, char *Text, char *Shortcut);
|
|
static void Workspace_BuildToolbar(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
|