/* Name: cuchar.h Author: Michal Sudolsky Date: 26.08.2005 17:43 */ // modified by Juraj Kolesar // cuchar - In Slovak languange original word 'kuchar' means 'cooker' in english // -this library is extension of ncurses (curses) library thats why is there 'cu' in the name // -and it is cooking chars on your display so together it sounds like cook-char, shortly cuchar // This library should make easier to create UI for console aplications. #ifndef false #define false 0 #endif #ifndef true #define true 1 #endif #ifndef bool #define bool char #endif #define CC_NOCHANGE 0x7FFFFFFF #define CC_MAXLONG 0x7FFFFFFF #define CC_OFFSET_CHAR 32 /* Keyboard Keys constants definition {{{ ********************************** * -every catched keyboard event is transformed into CC_K constant * -library then handles unified constants independent from UI environment ***************************************************************************/ #define CC_OFFSET_KEY 256 #define CC_KEY_LEFT CC_OFFSET_KEY + 0 #define CC_KEY_RIGHT CC_OFFSET_KEY + 1 #define CC_KEY_UP CC_OFFSET_KEY + 2 #define CC_KEY_DOWN CC_OFFSET_KEY + 3 #define CC_KEY_HOME CC_OFFSET_KEY + 4 #define CC_KEY_END CC_OFFSET_KEY + 5 #define CC_KEY_PGUP CC_OFFSET_KEY + 6 #define CC_KEY_PGDOWN CC_OFFSET_KEY + 7 #define CC_KEY_CENTER CC_OFFSET_KEY + 8 #define CC_KEY_ESC CC_OFFSET_KEY + 9 #define CC_KEY_ENTER CC_OFFSET_KEY + 10 #define CC_KEY_DEL CC_OFFSET_KEY + 11 #define CC_KEY_INS CC_OFFSET_KEY + 12 #define CC_KEY_TAB CC_OFFSET_KEY + 13 #define CC_KEY_BACK CC_OFFSET_KEY + 14 #define CC_KEY_PAUSE CC_OFFSET_KEY + 15 #define CC_KEY_POPUP CC_OFFSET_KEY + 16 #define CC_KEY_F1 CC_OFFSET_KEY + 17 #define CC_KEY_F2 CC_OFFSET_KEY + 18 #define CC_KEY_F3 CC_OFFSET_KEY + 19 #define CC_KEY_F4 CC_OFFSET_KEY + 20 #define CC_KEY_F5 CC_OFFSET_KEY + 21 #define CC_KEY_F6 CC_OFFSET_KEY + 22 #define CC_KEY_F7 CC_OFFSET_KEY + 23 #define CC_KEY_F8 CC_OFFSET_KEY + 24 #define CC_KEY_F9 CC_OFFSET_KEY + 25 #define CC_KEY_F10 CC_OFFSET_KEY + 26 #define CC_KEY_F11 CC_OFFSET_KEY + 27 #define CC_KEY_F12 CC_OFFSET_KEY + 28 /* }}} */ /* Mouse Events constants definition {{{ ************************************ * -the same as by CC_K * -CC_OFFSET_KEY is used to not mix CC_K and CC_M constants, * what makes possible to handle all constants (Events) together ***************************************************************************/ #define CC_OFFSET_MOUSE CC_OFFSET_KEY + 29 #define CC_MOUSE_MOVE CC_OFFSET_MOUSE + 0 #define CC_MOUSE_L_DOWN CC_OFFSET_MOUSE + 1 #define CC_MOUSE_L_UP CC_OFFSET_MOUSE + 2 #define CC_MOUSE_L_DBLCLK CC_OFFSET_MOUSE + 3 #define CC_MOUSE_R_DOWN CC_OFFSET_MOUSE + 4 #define CC_MOUSE_R_UP CC_OFFSET_MOUSE + 5 #define CC_MOUSE_R_DBLCLK CC_OFFSET_MOUSE + 6 /* }}} */ #define CC_OFFSET_END CC_OFFSET_MOUSE + 7 #define CC_MOD_SHIFT 0x2000 #define CC_MOD_ALT 0x8000 #define CC_MOD_CTRL 0x4000 #define CC_MASK_KEY 0x1FFF #define CC_MASK_MOD 0xE000 #define CC_ST_VISIBLE 0x00010000 #define CC_ST_AUTOXSIZE 0x00020000 #define CC_ST_AUTOYSIZE 0x00040000 #define CC_ST_AL_LEFT 0x00080000 // CC_ST_Ax_yyy s rovnakym x sa nesmu navzajom kombinovat #define CC_ST_AL_CENTER 0x00100000 #define CC_ST_AL_FIXED (CC_ST_AL_LEFT|CC_ST_AL_CENTER) #define CC_ST_AU_UP 0x00200000 #define CC_ST_AU_CENTER 0x00400000 #define CC_ST_AU_FIXED (CC_ST_AU_UP|CC_ST_AU_CENTER) #define CC_ST_AR_RIGHT 0x00800000 #define CC_ST_AR_CENTER 0x01000000 #define CC_ST_AR_FIXED (CC_ST_AR_RIGHT|CC_ST_AR_CENTER) #define CC_ST_AD_DOWN 0x02000000 #define CC_ST_AD_CENTER 0x04000000 #define CC_ST_AD_FIXED (CC_ST_AD_DOWN|CC_ST_AD_CENTER) #define CC_ST_A_HCENTER (CC_ST_AL_CENTER|CC_ST_AR_CENTER) #define CC_ST_A_VCENTER (CC_ST_AU_CENTER|CC_ST_AD_CENTER) #define CC_ST_A_CENTER (CC_ST_A_HCENTER|CC_ST_A_VCENTER) #define CC_ST_A_HCLIENT (CC_ST_AL_LEFT|CC_ST_AR_RIGHT) #define CC_ST_A_VCLIENT (CC_ST_AU_UP|CC_ST_AD_DOWN) #define CC_ST_A_CLIENT (CC_ST_A_HCLIENT|CC_ST_A_VCLIENT) #define CC_ST_A_HFIXED (CC_ST_AL_FIXED|CC_ST_AR_FIXED) #define CC_ST_A_VFIXED (CC_ST_AU_FIXED|CC_ST_AD_FIXED) #define CC_ST_A_FIXED (CC_ST_A_HFIXED|CC_ST_A_VFIXED) #define CC_ST_A_TEMP 0x08000000 #define CC_ST_TA_HCENTER (CC_ST_A_HCENTER|CC_ST_A_TEMP) #define CC_ST_TA_VCENTER (CC_ST_A_VCENTER|CC_ST_A_TEMP) #define CC_ST_TA_CENTER (CC_ST_A_CENTER|CC_ST_A_TEMP) #define CC_ST_TA_HCLIENT (CC_ST_A_HCLIENT|CC_ST_A_TEMP) #define CC_ST_TA_VCLIENT (CC_ST_A_VCLIENT|CC_ST_A_TEMP) #define CC_ST_TA_CLIENT (CC_ST_A_CLIENT|CC_ST_A_TEMP) #define CC_ST_TOP_WIN 0x10000000 #define CC_ST_TE_DOWNTEXT_COLORS 0x00000001 #define CC_ST_CO_WITH_EDIT 0x00000001 #define CC_ST_DI_HASMAXIMIZE 0x00000001 #define CC_ST_DI_HASMINIMIZE 0x00000002 #define CC_ST_DI_SIZEABLE 0x00000004 #define CC_SV_IN_MASK 3 #define CC_SV_NORMAL 0 #define CC_SV_MAXIMIZED 1 #define CC_SV_MINIMIZED 2 #define CC_SV_IN_MAXSTATE 2 #define CC_ED_NORMAL 0 #define CC_ED_READONLY 1 #define CC_ED_PASSWORD 2 #define CC_BT_NORMAL 0 #define CC_BT_CHECK1 1 #define CC_BT_CHECK2 2 #define CC_PA_SOLID 0 #define CC_PA_PATTERN 1 #define CC_PA_BORDER 2 #define CC_LI_NORMAL 0 #define CC_LI_COMBO 1 #define CC_LI_TABLE 2 #define CC_MB_DEFAULT 0 #define CC_MB_OK 0x00000001 #define CC_MB_YES 0x00000002 #define CC_MB_NO 0x00000004 #define CC_MB_CANCEL 0x00000008 #define CC_C_DEFAULT -1 #define CC_C_BLACK 0 #define CC_C_RED 1 #define CC_C_GREEN 2 #define CC_C_YELLOW 3 #define CC_C_BLUE 4 #define CC_C_MAGENTA 5 #define CC_C_CYAN 6 #define CC_C_WHITE 7 #define CC_C_LBLACK 8 #define CC_C_LRED 9 #define CC_C_LGREEN 10 #define CC_C_LYELLOW 11 #define CC_C_LBLUE 12 #define CC_C_LMAGENTA 13 #define CC_C_LCYAN 14 #define CC_C_LWHITE 15 #define CC_TP_TEXT 0 #define CC_TP_EDIT 1 #define CC_TP_BUTTON 2 #define CC_TP_SCROLL 3 #define CC_TP_COMBO 4 #define CC_TP_LIST 5 #define CC_TP_STATUS 6 #define CC_TP_PAINT 7 #define CC_TP_MENU 8 #define CC_TP_DIALOG 9 #ifndef __Cc_Win typedef void Cc_Win; #define __Cc_Win #endif typedef struct _Cc_Menu_I{ long id; bool checked; char *text; unsigned short shortcut; Cc_Win *submenu; }Cc_Menu_I; typedef struct _Cc_Text_P{ char type; char *text; long cback, ctext; }Cc_Text_P; typedef struct _Cc_Edit_P{ char type; char style; // CC_ED_xxx long cback, cbmask, cfmask, ctext; void (*change)(); // void change(Cc_Win*) }Cc_Edit_P; typedef struct _Cc_Button_P{ char type; char *text; char style; // CC_BT_xxx bool checked; long cback[3], ctext[3], cutext[3], cfocus[3]; bool hasfocus; void (*push)(); // void push(Cc_Win*) }Cc_Button_P; typedef struct _Cc_Scroll_P{ char type; long pos, minpos, maxpos, pagecnt, cnt; long cback, cmark, cbar, carrowup, carrowdown; bool vert; void (*change)(); // void change(Cc_Win*) }Cc_Scroll_P; typedef struct _Cc_Combo_P{ char type; long activeline, cback, cbutback[2], cbutfront[2]; void (*change)(); // void change(Cc_Win*) long maxvisitems; long lstvy; long lstcback, lstcborder, lstctext, lstcselected, lstcseltext, lstcactive, lstcactivetext; GList *lstlines; long lstscrcback, lstscrcmark, lstscrcbar, lstscrcarrowup, lstscrcarrowdown; char edistyle; long edicbmask, edicfmask; }Cc_Combo_P; typedef struct _Cc_List_P{ char type; long activeline, cback, cborder, ccells, ctext, cselected, cseltext, cactive, cactivetext; char combotyp; // CC_LI_LIST-normal list, CC_LI_COMBO-list in combo, CC_LI_TABLE-table GList *lines; void (*change)(); // void change(Cc_Win*) void (*dblclk)(); // void dblclk(Cc_Win*) long scrcback, scrcmark, scrcbar, scrcarrowup, scrcarrowdown; }Cc_List_P; typedef struct _Cc_Status_P{ char type; long pos, maxpos; long cbclear, cbfull, ctclear, ctfull; bool vert, vtext; char *text; }Cc_Status_P; typedef struct _Cc_Paint_P{ char type; char style; // CC_PA_xxx long cback, color; }Cc_Paint_P; typedef struct _Cc_Menu_P{ char type; long cback, cborder, ctext, cutext, cactive, cactivetext, cactiveutext; GList *lines; void (*change)(); // void change(Cc_Win*) void (*select)(); // void change(Cc_Win*,long i) bool vert; }Cc_Menu_P; typedef struct _Cc_Dialog_P{ char type; char *caption; char style; long cback, cbactive, cbinactive, cbuttext[3]; bool modal; Cc_Win *menu; void (*resize)(); // void resize(Cc_Win*) void (*sizeok)(); // bool sizeok(Cc_Win *,long *x,long *y,long *vx,long *vy) void (*close)(); // void close(Cc_Win*) }Cc_Dialog_P; typedef union _Cc_Union_P{ char type; Cc_Text_P text; Cc_Edit_P edit; Cc_Button_P button; Cc_Scroll_P scroll; Cc_Combo_P combo; Cc_List_P list; Cc_Status_P status; Cc_Paint_P paint; Cc_Menu_P menu; Cc_Dialog_P dialog; }Cc_Union_P; typedef struct _Cc_Timer_P{ Cc_Win *win; long period; long prior; void (*timer)(); // void timer(Cc_Timer*) }Cc_Timer_P; #ifndef __Cc_Timer typedef void Cc_Timer; #define __Cc_Timer #endif // Exported functions Cc_Win *cc_file_open_dialog(Cc_Win *parent, void (*action)(Cc_Win *sender,char *filename), bool modal,char *caption,char *filename,char *mask); Cc_Win *cc_color_dialog(Cc_Win *parent,void (*action)(Cc_Win *sender,long i), bool modal,char *caption,long color); Cc_Win *cc_message_box(Cc_Win *parent,void (*action)(Cc_Win *sender,long i), bool modal,char *caption,char *text, long style); // style=CC_MB_xxx void cc_edit_copy(Cc_Win *edit); void cc_edit_paste(Cc_Win *edit); void cc_edit_delete(Cc_Win *edit); void cc_edit_cut(Cc_Win *edit); void cc_edit_select(Cc_Win *edit,long sta,long end); void cc_edit_cc_get_selection(Cc_Win *edit,long *sta,long *end); void cc_set_clipboard(char *text); char *cc_get_clipboard(); void cc_track_popup_menu(Cc_Win *menu,long x,long y); Cc_Win *cc_create_menu(Cc_Win *parent,Cc_Menu_P *menu, bool (*acel)(Cc_Win *win,long x,long y, unsigned short key)); Cc_Win *cc_create_submenu(Cc_Win *menu); void cc_add_menu_item(Cc_Win *menu,Cc_Menu_I *cmenu); void cc_ins_menu_item(Cc_Win *menu,long pos,Cc_Menu_I *cmenu); void cc_set_menu_item(Cc_Win *menu,long pos,Cc_Menu_I *cmenu); void cc_get_menu_item(Cc_Win *menu,long pos,Cc_Menu_I *cmenu); void cc_del_menu_item(Cc_Win *menu,long pos); void cc_set_api_run(bool run); bool cc_is_api_run(); void cc_set_capture(Cc_Win *win); Cc_Win *cc_get_capture(); bool cc_set_focus(Cc_Win *win); Cc_Win *cc_get_focus(); bool cc_show_win(Cc_Win *win,bool visible); void cc_get_mouse_pos(long *x,long *y); void cc_sleep(long milisec); long cc_get_tick(); void cc_client_to_screen(Cc_Win *p,long *x,long *y); void cc_screen_to_client(Cc_Win *p,long *x,long *y); bool cc_get_menu_pos(Cc_Win *win,long id,Cc_Win **submenu,long *pos); void cc_set_user(Cc_Win *win,void *user); void *cc_get_user(Cc_Win *win); void cc_set_checked(Cc_Win *win,long pos,bool status); bool cc_get_checked(Cc_Win *win,long pos); void cc_set_text(Cc_Win *win,char *text); char *cc_get_text(Cc_Win *win); void cc_set_pos(Cc_Win *win,long pos); long cc_get_pos(Cc_Win *win); void cc_set_list(Cc_Win *win,GList *list); GList *cc_get_list(Cc_Win *win); void cc_set_hl_downtext(Cc_Win *text); Cc_Win *cc_get_hl_downtext(); void cc_set_menu(Cc_Win *win,Cc_Win *menu); Cc_Win *cc_get_menu(Cc_Win *win); void cc_set_acel(Cc_Win *win,bool (*acel)(Cc_Win *win,long x,long y, unsigned short key)); void *cc_get_acel(Cc_Win *win); void cc_set_resize_proc(Cc_Win *win,void (*resize)(Cc_Win *win)); void *cc_get_resize_proc(Cc_Win *win); void cc_set_parent(Cc_Win *win,Cc_Win *parent); Cc_Win *cc_get_parent(Cc_Win *win); long cc_create_thread(void *(*proc)()); Cc_Timer *cc_set_timer(Cc_Win *win,long msec,char prior,void (*timer)(Cc_Timer*)); void cc_del_timer_for_win(Cc_Win *win); void cc_del_timer(Cc_Timer *timer); long cc_get_timer_clock(Cc_Timer *timer); void cc_set_timer_params(Cc_Timer *timer,Cc_Timer_P *params); void cc_get_timer_params(Cc_Timer *timer,Cc_Timer_P *params); bool cc_is_timer_run(Cc_Timer *timer); void cc_get_client_size(Cc_Win *win,long *x,long *y,long *vx,long *vy); bool cc_send_message(Cc_Win *win,long x,long y,unsigned short key); void cc_delete_win(Cc_Win *win); char cc_get_win_type(Cc_Win *win); bool cc_move_win(Cc_Win *win,long x,long y,long vx,long vy,long state); Cc_Win *cc_create_win(Cc_Win *parent,long x,long y,long vx,long vy, Cc_Union_P *extra,long style,bool (*acel)(Cc_Win *win, long x,long y,unsigned short key)); void cc_set_win_params(Cc_Win *win,Cc_Union_P *params); void cc_get_win_params(Cc_Win *win,Cc_Union_P *params); bool cc_message_pump(); void cc_init(int argc,char *argv[]); void cc_done();