2018-08-04 02:41:38 +00:00
|
|
|
/*
|
2019-10-16 04:54:40 +00:00
|
|
|
* Lister base
|
2018-08-04 02:41:38 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
// TOP
|
|
|
|
|
2019-10-16 04:54:40 +00:00
|
|
|
#if !defined(FCODER_LISTER_BASE_H)
|
|
|
|
#define FCODER_LISTER_BASE_H
|
2018-08-04 02:41:38 +00:00
|
|
|
|
2019-02-26 23:17:53 +00:00
|
|
|
typedef i32 Lister_Activation_Code;
|
2018-08-04 02:41:38 +00:00
|
|
|
enum{
|
|
|
|
ListerActivation_Finished = 0,
|
|
|
|
ListerActivation_Continue = 1,
|
|
|
|
ListerActivation_ContinueAndRefresh = 2,
|
|
|
|
};
|
|
|
|
|
2018-12-17 02:07:49 +00:00
|
|
|
typedef void Lister_Regenerate_List_Function_Type(Application_Links *app, struct Lister *lister);
|
2018-08-04 02:41:38 +00:00
|
|
|
|
2018-09-15 23:48:02 +00:00
|
|
|
struct Lister_Node{
|
|
|
|
Lister_Node *next;
|
|
|
|
Lister_Node *prev;
|
2019-06-01 23:58:28 +00:00
|
|
|
String_Const_u8 string;
|
2018-08-10 21:52:57 +00:00
|
|
|
union{
|
2019-06-01 23:58:28 +00:00
|
|
|
String_Const_u8 status;
|
2019-02-26 23:17:53 +00:00
|
|
|
i32 index;
|
2018-08-10 21:52:57 +00:00
|
|
|
};
|
2018-08-04 02:41:38 +00:00
|
|
|
void *user_data;
|
2019-02-26 23:17:53 +00:00
|
|
|
i32 raw_index;
|
2018-08-04 02:41:38 +00:00
|
|
|
};
|
|
|
|
|
2019-10-14 05:27:57 +00:00
|
|
|
struct Lister_Node_List{
|
2018-09-15 23:48:02 +00:00
|
|
|
Lister_Node *first;
|
|
|
|
Lister_Node *last;
|
2019-02-26 23:17:53 +00:00
|
|
|
i32 count;
|
2018-08-04 02:41:38 +00:00
|
|
|
};
|
|
|
|
|
2018-09-15 23:48:02 +00:00
|
|
|
struct Lister_Node_Ptr_Array{
|
|
|
|
Lister_Node **node_ptrs;
|
2019-02-26 23:17:53 +00:00
|
|
|
i32 count;
|
2018-09-14 19:02:02 +00:00
|
|
|
};
|
|
|
|
|
2019-10-13 21:45:41 +00:00
|
|
|
typedef Lister_Activation_Code Lister_Key_Stroke_Function(Application_Links *app);
|
2019-10-15 03:26:00 +00:00
|
|
|
typedef void Lister_Navigate_Function(Application_Links *app,
|
|
|
|
View_ID view, struct Lister *lister,
|
|
|
|
i32 index_delta);
|
2019-10-13 21:45:41 +00:00
|
|
|
|
2018-08-05 07:09:18 +00:00
|
|
|
struct Lister_Handlers{
|
2018-08-04 02:41:38 +00:00
|
|
|
Lister_Regenerate_List_Function_Type *refresh;
|
|
|
|
Custom_Command_Function *write_character;
|
|
|
|
Custom_Command_Function *backspace;
|
2019-10-15 03:26:00 +00:00
|
|
|
Lister_Navigate_Function *navigate;
|
2019-10-13 21:45:41 +00:00
|
|
|
Lister_Key_Stroke_Function *key_stroke;
|
2018-08-05 07:09:18 +00:00
|
|
|
};
|
|
|
|
|
2019-10-25 06:17:54 +00:00
|
|
|
struct Lister_Result{
|
|
|
|
b32 canceled;
|
2019-10-25 23:33:50 +00:00
|
|
|
b32 activated_by_click;
|
|
|
|
String_Const_u8 text_field;
|
|
|
|
void *user_data;
|
2019-10-25 06:17:54 +00:00
|
|
|
};
|
|
|
|
|
2018-12-17 02:07:49 +00:00
|
|
|
struct Lister{
|
2019-10-01 02:06:21 +00:00
|
|
|
Arena *arena;
|
2019-10-14 05:27:57 +00:00
|
|
|
Temp_Memory restore_all_point;
|
|
|
|
|
2019-10-14 22:57:47 +00:00
|
|
|
Lister_Handlers handlers;
|
|
|
|
|
|
|
|
Mapping *mapping;
|
|
|
|
Command_Map *map;
|
|
|
|
|
|
|
|
u8 query_space[256];
|
|
|
|
u8 text_field_space[256];
|
|
|
|
u8 key_string_space[256];
|
|
|
|
String_u8 query;
|
|
|
|
String_u8 text_field;
|
|
|
|
String_u8 key_string;
|
|
|
|
|
|
|
|
Lister_Node_List options;
|
|
|
|
Temp_Memory filter_restore_point;
|
|
|
|
Lister_Node_Ptr_Array filtered;
|
|
|
|
|
2019-10-15 03:26:00 +00:00
|
|
|
b32 set_vertical_focus_to_item;
|
2019-10-14 22:57:47 +00:00
|
|
|
Lister_Node *highlighted_node;
|
|
|
|
void *hot_user_data;
|
|
|
|
i32 item_index;
|
|
|
|
i32 raw_item_index;
|
|
|
|
|
|
|
|
Basic_Scroll scroll;
|
2019-10-15 03:26:00 +00:00
|
|
|
i32 visible_count;
|
2019-10-25 06:17:54 +00:00
|
|
|
|
|
|
|
Lister_Result out;
|
2018-12-17 02:07:49 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct Lister_Prealloced_String{
|
2019-06-01 23:58:28 +00:00
|
|
|
String_Const_u8 string;
|
2018-08-04 02:41:38 +00:00
|
|
|
};
|
|
|
|
|
2019-10-14 02:13:15 +00:00
|
|
|
struct Lister_Filtered{
|
|
|
|
Lister_Node_Ptr_Array exact_matches;
|
|
|
|
Lister_Node_Ptr_Array before_extension_matches;
|
|
|
|
Lister_Node_Ptr_Array substring_matches;
|
|
|
|
};
|
|
|
|
|
2018-08-05 07:09:18 +00:00
|
|
|
////////////////////////////////
|
|
|
|
|
2019-10-25 06:17:54 +00:00
|
|
|
struct Lister_Choice{
|
|
|
|
Lister_Choice *next;
|
|
|
|
String_Const_u8 string;
|
|
|
|
String_Const_u8 status;
|
2019-10-13 21:45:41 +00:00
|
|
|
Key_Code key_code;
|
2019-10-25 23:33:50 +00:00
|
|
|
union{
|
|
|
|
u64 user_data;
|
|
|
|
void *user_data_ptr;
|
|
|
|
};
|
2019-10-25 06:17:54 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct Lister_Choice_List{
|
|
|
|
Lister_Choice *first;
|
|
|
|
Lister_Choice *last;
|
2018-08-05 07:09:18 +00:00
|
|
|
};
|
|
|
|
|
2018-08-04 02:41:38 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
// BOTTOM
|
|
|
|
|