4coder/custom/4coder_lister_base.h

126 lines
2.5 KiB
C
Raw Normal View History

/*
* Lister base
*/
// TOP
#if !defined(FCODER_LISTER_BASE_H)
#define FCODER_LISTER_BASE_H
2019-02-26 23:17:53 +00:00
typedef i32 Lister_Activation_Code;
enum{
ListerActivation_Finished = 0,
ListerActivation_Continue = 1,
ListerActivation_ContinueAndRefresh = 2,
};
typedef void Lister_Regenerate_List_Function_Type(Application_Links *app, struct Lister *lister);
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
};
void *user_data;
2019-02-26 23:17:53 +00:00
i32 raw_index;
};
2019-10-14 05:27:57 +00:00
struct Lister_Node_List{
Lister_Node *first;
Lister_Node *last;
2019-02-26 23:17:53 +00:00
i32 count;
};
struct Lister_Node_Ptr_Array{
Lister_Node **node_ptrs;
2019-02-26 23:17:53 +00:00
i32 count;
};
2019-10-13 21:45:41 +00:00
typedef Lister_Activation_Code Lister_Key_Stroke_Function(Application_Links *app);
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{
Lister_Regenerate_List_Function_Type *refresh;
Custom_Command_Function *write_character;
Custom_Command_Function *backspace;
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
};
struct Lister_Result{
b32 canceled;
b32 activated_by_click;
String_Const_u8 text_field;
void *user_data;
};
struct Lister{
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;
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;
i32 visible_count;
Lister_Result out;
};
struct Lister_Prealloced_String{
2019-06-01 23:58:28 +00:00
String_Const_u8 string;
};
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
////////////////////////////////
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;
union{
u64 user_data;
void *user_data_ptr;
};
};
struct Lister_Choice_List{
Lister_Choice *first;
Lister_Choice *last;
2018-08-05 07:09:18 +00:00
};
#endif
// BOTTOM