2016-02-01 05:03:42 +00:00
|
|
|
/*
|
|
|
|
* Mr. 4th Dimention - Allen Webster
|
|
|
|
*
|
2016-05-06 15:34:08 +00:00
|
|
|
* 06.05.2016 (dd.mm.yyyy)
|
2016-02-01 05:03:42 +00:00
|
|
|
*
|
|
|
|
* Global app level settings definition
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
// TOP
|
|
|
|
|
2018-03-24 21:43:57 +00:00
|
|
|
#if !defined(FRED_APP_MODELS_H)
|
|
|
|
#define FRED_APP_MODELS_H
|
|
|
|
|
2016-02-01 05:03:42 +00:00
|
|
|
struct App_Settings{
|
|
|
|
char *init_files[8];
|
|
|
|
i32 init_files_count;
|
|
|
|
i32 init_files_max;
|
2017-01-30 18:41:08 +00:00
|
|
|
|
2017-06-23 23:07:18 +00:00
|
|
|
char **custom_flags;
|
|
|
|
i32 custom_flags_count;
|
|
|
|
|
2016-02-01 05:03:42 +00:00
|
|
|
i32 initial_line;
|
|
|
|
b32 lctrl_lalt_is_altgr;
|
2016-03-21 22:27:27 +00:00
|
|
|
|
2017-11-20 23:31:57 +00:00
|
|
|
i32 font_size;
|
|
|
|
b32 use_hinting;
|
2016-02-01 05:03:42 +00:00
|
|
|
};
|
|
|
|
|
2019-08-13 00:57:25 +00:00
|
|
|
enum App_State{
|
|
|
|
APP_STATE_EDIT,
|
|
|
|
APP_STATE_RESIZING,
|
|
|
|
// never below this
|
|
|
|
APP_STATE_COUNT
|
|
|
|
};
|
|
|
|
|
2016-03-07 05:13:20 +00:00
|
|
|
struct Models{
|
2019-08-13 04:19:02 +00:00
|
|
|
System_Functions *system;
|
2019-10-01 02:06:21 +00:00
|
|
|
Thread_Context *tctx;
|
|
|
|
|
|
|
|
Arena *arena;
|
|
|
|
Heap heap;
|
2019-03-29 21:21:50 +00:00
|
|
|
|
2016-03-04 01:41:52 +00:00
|
|
|
App_Settings settings;
|
2019-08-13 00:57:25 +00:00
|
|
|
App_State state;
|
2016-03-04 01:41:52 +00:00
|
|
|
|
2019-09-02 21:32:52 +00:00
|
|
|
Face_ID global_face_id;
|
2017-03-11 18:35:12 +00:00
|
|
|
|
2017-11-08 18:24:30 +00:00
|
|
|
Mapping mapping;
|
2016-03-04 01:41:52 +00:00
|
|
|
Command_Binding prev_command;
|
|
|
|
|
2019-08-04 05:36:13 +00:00
|
|
|
Coroutine_Group coroutines;
|
|
|
|
Coroutine *command_coroutine;
|
2016-03-04 01:41:52 +00:00
|
|
|
u32 command_coroutine_flags[2];
|
|
|
|
|
2019-03-21 03:18:08 +00:00
|
|
|
Child_Process_Container child_processes;
|
2016-09-09 13:04:51 +00:00
|
|
|
Custom_API config_api;
|
|
|
|
|
2019-01-31 12:38:24 +00:00
|
|
|
Application_Links app_links;
|
|
|
|
|
|
|
|
Hook_Function *hooks[hook_type_count];
|
2017-06-23 23:07:18 +00:00
|
|
|
Start_Hook_Function *hook_start;
|
2019-09-04 05:31:35 +00:00
|
|
|
Buffer_Hook_Function *hook_open_file;
|
|
|
|
Buffer_Hook_Function *hook_new_file;
|
|
|
|
Buffer_Hook_Function *hook_save_file;
|
|
|
|
Buffer_Hook_Function *hook_end_file;
|
2019-03-22 01:27:28 +00:00
|
|
|
File_Edit_Range_Function *hook_file_edit_range;
|
2019-08-13 18:54:15 +00:00
|
|
|
File_Externally_Modified_Function *hook_file_externally_modified;
|
2016-09-09 13:04:51 +00:00
|
|
|
Command_Caller_Hook_Function *command_caller;
|
2018-09-22 23:45:24 +00:00
|
|
|
Render_Caller_Function *render_caller;
|
2016-09-09 13:04:51 +00:00
|
|
|
Input_Filter_Function *input_filter;
|
2019-09-02 18:59:36 +00:00
|
|
|
Delta_Rule_Function *scroll_rule;
|
2017-11-30 23:25:49 +00:00
|
|
|
Buffer_Name_Resolver_Function *buffer_name_resolver;
|
2019-02-25 23:42:13 +00:00
|
|
|
Modify_Color_Table_Function *modify_color_table;
|
2019-03-15 08:38:28 +00:00
|
|
|
Clipboard_Change_Hook_Function *clipboard_change;
|
2019-02-27 05:49:35 +00:00
|
|
|
Get_View_Buffer_Region_Function *get_view_buffer_region;
|
2016-09-09 13:04:51 +00:00
|
|
|
|
2019-02-25 23:42:13 +00:00
|
|
|
Color_Table fallback_color_table;
|
|
|
|
Color_Table color_table;
|
2016-03-04 01:41:52 +00:00
|
|
|
|
2019-02-05 09:13:38 +00:00
|
|
|
Layout layout;
|
2016-03-04 01:41:52 +00:00
|
|
|
Working_Set working_set;
|
2017-07-17 23:35:13 +00:00
|
|
|
Live_Views live_set;
|
2019-02-08 10:03:48 +00:00
|
|
|
Global_History global_history;
|
2019-04-01 00:36:09 +00:00
|
|
|
Text_Layout_Container text_layouts;
|
2019-07-24 07:41:40 +00:00
|
|
|
Font_Set font_set;
|
2017-05-19 23:55:50 +00:00
|
|
|
|
2019-09-04 05:31:35 +00:00
|
|
|
Managed_ID_Set managed_id_set;
|
2018-08-18 08:16:52 +00:00
|
|
|
Dynamic_Workspace dynamic_workspace;
|
2018-08-12 03:45:09 +00:00
|
|
|
Lifetime_Allocator lifetime_allocator;
|
2018-06-23 03:03:58 +00:00
|
|
|
|
2016-03-20 21:51:58 +00:00
|
|
|
Editing_File *message_buffer;
|
2016-06-29 17:45:26 +00:00
|
|
|
Editing_File *scratch_buffer;
|
2019-08-16 02:54:06 +00:00
|
|
|
Editing_File *log_buffer;
|
2016-05-19 18:01:36 +00:00
|
|
|
|
2016-03-04 01:41:52 +00:00
|
|
|
Hot_Directory hot_directory;
|
2016-05-19 18:01:36 +00:00
|
|
|
|
2016-05-29 21:34:52 +00:00
|
|
|
b32 keep_playing;
|
2016-06-07 16:26:11 +00:00
|
|
|
|
2019-03-29 21:21:50 +00:00
|
|
|
// TODO(allen): do(eliminate user_*_key* nonsense from the core)
|
2017-02-17 22:03:19 +00:00
|
|
|
Key_Code user_up_key;
|
|
|
|
Key_Code user_down_key;
|
2017-04-15 21:47:23 +00:00
|
|
|
Key_Modifier user_up_key_modifier;
|
|
|
|
Key_Modifier user_down_key_modifier;
|
2017-11-30 19:02:37 +00:00
|
|
|
|
|
|
|
b32 has_new_title;
|
|
|
|
char *title_space;
|
|
|
|
i32 title_capacity;
|
2018-03-10 02:06:55 +00:00
|
|
|
|
2019-03-30 21:51:56 +00:00
|
|
|
Panel *resizing_intermediate_panel;
|
|
|
|
|
2019-02-25 23:42:13 +00:00
|
|
|
u32 edit_finished_hook_repeat_speed;
|
2018-03-10 02:06:55 +00:00
|
|
|
|
2019-03-30 21:51:56 +00:00
|
|
|
Plat_Handle period_wakeup_timer;
|
2019-02-25 23:42:13 +00:00
|
|
|
i32 frame_counter;
|
2019-03-30 21:51:56 +00:00
|
|
|
u32 next_animate_delay;
|
2019-02-25 23:42:13 +00:00
|
|
|
b32 animate_next_frame;
|
|
|
|
|
|
|
|
// Last frame state
|
|
|
|
Vec2_i32 prev_p;
|
|
|
|
Panel *prev_mouse_panel;
|
|
|
|
b32 animated_last_frame;
|
|
|
|
u64 last_render_usecond_stamp;
|
|
|
|
|
2018-11-18 19:47:28 +00:00
|
|
|
// Event Context
|
2018-11-20 04:18:57 +00:00
|
|
|
Application_Step_Input *input;
|
2018-11-18 19:47:28 +00:00
|
|
|
Key_Event_Data key;
|
|
|
|
|
|
|
|
Render_Target *target;
|
2019-03-31 18:55:26 +00:00
|
|
|
b32 in_render_mode;
|
|
|
|
// TODO(allen): endless stack?
|
|
|
|
Vec2 coordinate_center_stack[32];
|
|
|
|
i32 coordinate_center_stack_top;
|
2016-03-04 01:41:52 +00:00
|
|
|
};
|
|
|
|
|
2018-03-24 21:43:57 +00:00
|
|
|
////////////////////////////////
|
|
|
|
|
2018-08-26 09:55:12 +00:00
|
|
|
typedef i32 Dynamic_Workspace_Type;
|
|
|
|
enum{
|
|
|
|
DynamicWorkspace_Global = 0,
|
2018-09-26 18:06:57 +00:00
|
|
|
DynamicWorkspace_Unassociated = 1,
|
|
|
|
DynamicWorkspace_Buffer = 2,
|
|
|
|
DynamicWorkspace_View = 3,
|
|
|
|
DynamicWorkspace_Intersected = 4,
|
2018-08-26 09:55:12 +00:00
|
|
|
};
|
|
|
|
|
2018-03-24 21:43:57 +00:00
|
|
|
enum Input_Types{
|
|
|
|
Input_AnyKey,
|
|
|
|
Input_Esc,
|
|
|
|
Input_MouseMove,
|
|
|
|
Input_MouseLeftButton,
|
|
|
|
Input_MouseRightButton,
|
|
|
|
Input_MouseWheel,
|
|
|
|
Input_Count
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Consumption_Record{
|
|
|
|
b32 consumed;
|
|
|
|
char consumer[32];
|
|
|
|
};
|
|
|
|
|
2019-08-04 05:36:13 +00:00
|
|
|
typedef i32 App_Coroutine_Purpose;
|
|
|
|
enum{
|
2018-03-24 21:43:57 +00:00
|
|
|
Co_View,
|
2019-07-26 00:18:05 +00:00
|
|
|
Co_Command,
|
2018-03-24 21:43:57 +00:00
|
|
|
};
|
|
|
|
struct App_Coroutine_State{
|
|
|
|
void *co;
|
|
|
|
i32 type;
|
|
|
|
};
|
2016-02-01 05:03:42 +00:00
|
|
|
|
2018-03-24 21:43:57 +00:00
|
|
|
struct Command_In{
|
2018-11-18 19:47:28 +00:00
|
|
|
Models *models;
|
2018-03-24 21:43:57 +00:00
|
|
|
Command_Binding bind;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct File_Init{
|
2019-06-01 23:58:28 +00:00
|
|
|
String_Const_u8 name;
|
2018-03-24 21:43:57 +00:00
|
|
|
Editing_File **ptr;
|
|
|
|
b32 read_only;
|
|
|
|
};
|
2016-05-06 15:34:08 +00:00
|
|
|
|
2018-03-24 21:43:57 +00:00
|
|
|
enum Command_Line_Action{
|
|
|
|
CLAct_Nothing,
|
|
|
|
CLAct_Ignore,
|
|
|
|
CLAct_UserFile,
|
|
|
|
CLAct_CustomDLL,
|
|
|
|
CLAct_InitialFilePosition,
|
|
|
|
CLAct_WindowSize,
|
|
|
|
CLAct_WindowMaximize,
|
|
|
|
CLAct_WindowPosition,
|
|
|
|
CLAct_WindowFullscreen,
|
|
|
|
CLAct_FontSize,
|
|
|
|
CLAct_FontUseHinting,
|
|
|
|
CLAct_LogStdout,
|
|
|
|
CLAct_LogFile,
|
|
|
|
//
|
|
|
|
CLAct_COUNT,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum Command_Line_Mode{
|
|
|
|
CLMode_App,
|
|
|
|
CLMode_Custom
|
|
|
|
};
|
|
|
|
|
2019-07-26 00:18:05 +00:00
|
|
|
enum{
|
|
|
|
AppCoroutineRequest_None = 0,
|
|
|
|
AppCoroutineRequest_NewFontFace = 1,
|
|
|
|
AppCoroutineRequest_ModifyFace = 2,
|
|
|
|
};
|
|
|
|
|
2019-08-13 04:19:02 +00:00
|
|
|
////////////////////////////////
|
|
|
|
|
|
|
|
struct Mutex_Lock{
|
|
|
|
Mutex_Lock(System_Functions *system, System_Mutex mutex);
|
|
|
|
~Mutex_Lock();
|
|
|
|
operator System_Mutex();
|
|
|
|
System_Functions *system;
|
|
|
|
System_Mutex mutex;
|
|
|
|
};
|
|
|
|
|
2018-03-24 21:43:57 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
// BOTTOM
|
2016-05-06 15:34:08 +00:00
|
|
|
|