#include #include "btk-text.h" #define NEW_PP(type, pp) (pp = (type*)malloc(sizeof(type))) #define PP_BUTTON(c) ((btk_pp_button_t*)c->pp) #define PP_EDITOR(c) ((btk_pp_editor_t*)c->pp) #define PP_INPUT(c) ((btk_pp_input_t*)c->pp) #define PP_LIST(c) ((btk_pp_list_t*)c->pp) #define PP_MARK(c) ((btk_pp_mark_t*)c->pp) #define PP_SWITCH(c) ((btk_pp_switch_t*)c->pp) #define PP_TABLE(c) ((btk_pp_table_t*)c->pp) enum btk_cell_states { BTK_CELL_STATE_INITIAL = 0, BTK_CELL_STATE_HIDDEN = 1U << 0, BTK_CELL_STATE_DISABLED = 1U << 1, BTK_CELL_STATE_FOCUSED = 1U << 2, BTK_CELL_STATE_PRESSED = 1U << 3, BTK_CELL_STATE_ON = 1U << 4, BTK_CELL_STATE_BELL = 1U << 5, BTK_CELL_STATE_IN = 1U << 6 }; enum btk_cell_group { BTK_CELL_GROUP_PASSIVE, BTK_CELL_GROUP_DYNAMIC, BTK_CELL_GROUP_FIELD }; enum btk_cell_type { BTK_CELL_TYPE_EMPTY, BTK_CELL_TYPE_MARK, BTK_CELL_TYPE_GAUGE, BTK_CELL_TYPE_BUTTON, BTK_CELL_TYPE_SWITCH, BTK_CELL_TYPE_WHEEL, BTK_CELL_TYPE_LIST, BTK_CELL_TYPE_TABLE, BTK_CELL_TYPE_INPUT, BTK_CELL_TYPE_PROMPT, BTK_CELL_TYPE_EDITOR }; enum btk_cell_table_col_state { BTK_CELL_TABLE_COL_HIDDEN, BTK_CELL_TABLE_COL_VISIBLE }; typedef struct { /* global properties */ unsigned int group; unsigned int type; unsigned int state; btk_area_t ca; /* geometry in cell coordinates */ btk_area_t pa; /* geometry in pixel coordinates */ void *pp; /* type specific properties to cast */ btk_field_t *fd; /* for field group types only */ int lh; /* lock pixel height from stretching */ char *label; } btk_cell_t; typedef struct { void (*func)(void); } btk_pp_button_t; typedef struct { char *text; unsigned int text_w; btk_pos_t caret_2d; int caret; int scroll; btk_par_t *par; } btk_pp_editor_t; typedef struct { char *text; unsigned int text_w; /* max text size */ int caret; int scroll; } btk_pp_input_t; typedef struct { char **items; unsigned int *items_n; unsigned int items_w; int item_sel; int **filter; // TODO int **order; // TODO int **spot; int scroll; void (*func_trigger)(int); void (*func_sel)(int); } btk_pp_list_t; typedef struct { int justify; } btk_pp_mark_t; typedef struct { void (*func)(int, btk_arg_t); btk_arg_t func_args; } btk_pp_switch_t; typedef struct { char *header; char **items; unsigned int items_w; unsigned int cols_n; unsigned int *rows_n; int row_sel; int *cols_ena; /* hidden cols */ unsigned int *cols_cw; /* width in cell units of each col */ unsigned int *cols_pw; /* width in picels of each col */ unsigned int *cols_px; /* position of each col in pixels */ unsigned int sc; /* stretch col */ unsigned int tw; /* columns total pixel width */ int **filter; // TODO int **order; // TODO int **spot; btk_pos_t scroll; void (*func_trigger)(int); void (*func_sel)(int); } btk_pp_table_t; void btk_cell_set_button (btk_cell_t *, unsigned int, unsigned int, unsigned int, char *, void (*)(void)); void btk_cell_set_editor (btk_cell_t *, unsigned int, unsigned int, unsigned int, unsigned int, char *, unsigned int); void btk_cell_set_empty (btk_cell_t *, unsigned int, unsigned int, unsigned int, unsigned int); void btk_cell_set_input (btk_cell_t *, unsigned int, unsigned int, unsigned int, char *, unsigned int); void btk_cell_set_list (btk_cell_t *, unsigned int, unsigned int, unsigned int, unsigned int, char **, unsigned int *, unsigned int, int **, int **, int **, void (*)(int), void (*)(int)); void btk_cell_set_mark (btk_cell_t *, unsigned int, unsigned int, unsigned int, int, char *); void btk_cell_set_switch (btk_cell_t *, unsigned int, unsigned int, unsigned int, char *, void (*)(int, btk_arg_t), btk_arg_t); void btk_cell_set_table (btk_cell_t *, unsigned int, unsigned int, unsigned int, unsigned int, char *, char **, unsigned int, unsigned int, unsigned int *, int *, unsigned int *, unsigned int, int **, int **, int **, void (*)(int), void (*)(int)); void btk_cell_button_trigger (btk_cell_t *, int); void btk_cell_destroy (btk_cell_t *); void btk_cell_draw (btk_cell_t *, cairo_t *); void btk_cell_editor_input_button (btk_cell_t *, int, int, btk_pos_t); void btk_cell_editor_input_key (btk_cell_t *, uint32_t); void btk_cell_editor_reset_caret (btk_cell_t*); void btk_cell_editor_update_text (btk_cell_t *); btk_field_t* btk_cell_field_create (cairo_surface_t *, btk_area_t); void btk_cell_input_button (btk_cell_t *, int, int, btk_pos_t); void btk_cell_input_input_key (btk_cell_t *, uint32_t); void btk_cell_input_reset_caret (btk_cell_t *); void btk_cell_field_destroy (btk_field_t *); void btk_cell_list_deselect (btk_cell_t*); void btk_cell_list_input_button (btk_cell_t *, int, int, btk_pos_t); int btk_cell_list_get_sel (btk_cell_t *); void btk_cell_setup_font (cairo_t *c_ctx); void btk_cell_switch_toggle (btk_cell_t *, int); void btk_cell_table_deselect (btk_cell_t*); char* btk_cell_table_get_item (btk_cell_t *, int, int); void btk_cell_table_input_button (btk_cell_t *, int, int, btk_pos_t); void btk_cell_table_update_geometry (btk_cell_t *);