/contrib/C_Layer/ASM/loadboxlib.asm |
---|
104,7 → 104,7 |
ted_is_select, 'ted_is_select' , \ |
ted_key, 'ted_key' , \ |
ted_mouse, 'ted_mouse' , \ |
ted_open_file, 'ted_open_file' , \ |
ted_open_file, 'ted_open_file_asm' , \ |
ted_save_file, 'ted_save_file' , \ |
ted_text_add, 'ted_text_add' , \ |
ted_but_select_word, 'ted_but_select_word' , \ |
156,3 → 156,30 |
public fb_draw_panel as '_filebrowse_draw' |
public fb_mouse as '_filebrowse_mouse' |
public fb_key as '_filebrowse_key' |
public ted_but_sumb_upper as '_ted_but_sumb_upper_asm' |
public ted_but_sumb_lover as '_ted_but_sumb_lover_asm' |
public ted_but_convert_by_table as '_ted_but_convert_by_table_asm' |
public ted_can_save as '_ted_can_save_asm' |
public ted_clear as '_ted_clear_asm' |
public ted_delete as '_ted_delete_asm' |
public ted_draw as '_ted_draw' |
public ted_init as '_ted_init_asm' |
public ted_init_scroll_bars as '_ted_init_scroll_bars' |
public ted_init_syntax_file as '_ted_init_syntax_file' |
public ted_is_select as '_ted_is_select_asm' |
public ted_key as '_ted_key_asm' |
public ted_mouse as '_ted_mouse' |
public ted_open_file as '_ted_open_file_asm' |
public ted_save_file as '_ted_save_file_asm' |
public ted_text_add as '_ted_text_add' |
public ted_but_select_word as '_ted_but_select_word' |
public ted_but_cut as '_ted_but_cut_asm' |
public ted_but_copy as '_ted_but_copy' |
public ted_but_paste as '_ted_but_paste' |
public ted_but_undo as '_ted_but_undo_asm' |
public ted_but_redo as '_ted_but_redo_asm' |
public ted_but_reverse as '_ted_but_reverse_asm' |
public ted_but_find_next as '_ted_but_find_next' |
public ted_text_colored as 'ted_text_colored_asm' |
/contrib/C_Layer/ASM/loadmsgbox.asm |
---|
0,0 → 1,34 |
format coff |
use32 ; Tell compiler to use 32 bit instructions |
section '.init' code ; Keep this line before includes or GCC messes up call addresses |
include '../../../programs/proc32.inc' |
include '../../../programs/macros.inc' |
purge section,mov,add,sub |
include '../../../programs/dll.inc' |
public init_msgbox as '_kolibri_msgbox_init' |
;;; Returns 0 on success. -1 on failure. |
proc init_msgbox |
pusha |
mcall 68,11 |
stdcall dll.Load, @IMPORT |
popa |
ret |
endp |
@IMPORT: |
library lib_boxlib, 'msgbox.obj' |
import lib_boxlib, \ |
mb_create, 'mb_create' , \ |
mb_reinit, 'mb_reinit' , \ |
mb_setfunctions, 'mb_setfunctions' |
public mb_create as '_msgbox_create' |
public mb_reinit as '_msgbox_reinit' |
public mb_setfunctions as '_msgbox_setfunctions' |
/contrib/C_Layer/EXAMPLE/libguic_kolibri/boardmsg.c |
---|
38,7 → 38,7 |
edit_box *textbox = kolibri_new_edit_box(20, 30, 40, &editbox_interlock); |
edit_box *textbox2 = kolibri_new_edit_box(20, 50, 30, &editbox_interlock); |
kolibri_button *button = kolibri_new_button(310, 30, 24, 14, 0x21, kolibri_color_table.color_work_button); |
frame *fr = kolibri_new_frame(X_Y(12, 350), X_Y(5, 70), 0x00FCFCFC, 0x00DCDCDC, "Frame Title", 0, kolibri_color_table.color_work_text, kolibri_color_table.color_work_area); |
frame *fr = kolibri_new_frame(X_Y(12, 350), X_Y(5, 70), 0x00FCFCFC, 0x00DCDCDC, "Frame Title", 0, kolibri_color_table.color_work_text, kolibri_color_table.color_work_area, 0); |
kolibri_window_add_element(main_window, KOLIBRI_EDIT_BOX, textbox); |
kolibri_window_add_element(main_window, KOLIBRI_EDIT_BOX, textbox2); |
/contrib/C_Layer/EXAMPLE/libguic_kolibri/dbutton_files.c |
---|
41,7 → 41,6 |
kolibri_proclib_init(); // opensave && color dialogs |
kolibri_libimg_init(); // png handling |
int gui_event = KOLIBRI_EVENT_REDRAW; |
uint32_t pressed_button = 0; |
// uint32_t mouse_button; |
110,13 → 109,6 |
brows.folder_data = read_folderdata("/rd/1"); |
brows.select_panel_counter = 1; // if want to show selection |
kolibri_handle_event_redraw(main_window); |
brows.all_redraw = 1; |
(*filebrowse_draw)(&brows); |
//??? set_os_keyb_mode(1); // needed for keyboard use in menu |
int extended_key = 0, act = 0; |
do /* Start of main activity loop */ |
{ |
123,8 → 115,6 |
switch(gui_event) |
{ |
case KOLIBRI_EVENT_REDRAW: |
//???? start red |
//brows.marked_file = 1; |
control_minimal_window_size(430, 500); |
brows.all_redraw = 1; |
kolibri_handle_event_redraw(main_window); |
/contrib/C_Layer/EXAMPLE/libguic_kolibri/editor_tree_msgbox.c |
---|
0,0 → 1,132 |
/* |
KolibriGUI demobox |
-Editor (multiline edit) |
-TreeView |
-MsgBox Dialog |
Free for all |
Initially written by Siemargl, 2016 |
ToDo |
*/ |
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
#include <assert.h> |
#include "kos32sys.h" |
#include "kolibri_gui.h" |
#include "kolibri_libimg.h" |
#include "kolibri_msgbox.h" |
char temp_path[4096]; |
char* load_file_inmem(char* fname, int32_t* read_sz); // see below |
int main(int argc, char **argv) |
{ |
/* Load all libraries, initialize global tables like system color table and |
operations table. kolibri_gui_init() will EXIT with mcall -1 if it fails |
to do it's job. This is all you need to call and all libraries and GUI |
elements can be used after a successful call to this function |
*/ |
kolibri_gui_init(); |
kolibri_proclib_init(); // opensave && color dialogs |
kolibri_libimg_init(); // png handling |
int gui_event = KOLIBRI_EVENT_REDRAW; |
uint32_t pressed_button = 0; |
// uint32_t mouse_button; |
// pos_t mouse_pos; |
oskey_t keypress; |
// load image for buttons |
const int icon_rgb_size = 16*16*3; // every icons 16x16 24bpp |
char *image_data_rgb, |
*image_data, |
*filedata; |
// make full path + argv |
strcpy(temp_path, argv[0]); |
char *pc = strrchr(temp_path, '/'); // this fails if has params with '/' within. use argv[0] instead |
if (pc) pc[1] = 0; |
strcat(temp_path, "reload_16x16_8b.png"); |
// debug_board_write_str(temp_path); |
int32_t read_bytes; |
filedata = load_file_inmem(temp_path, &read_bytes); |
image_data_rgb = malloc(icon_rgb_size * 3); // we know size |
// îïðåäåëÿåì âèä èçîáðàæåíèÿ è ïåðåâîäèì åãî âî âðåìåííûé áóôåð image_data |
image_data = (*img_decode)(filedata, read_bytes, 0); |
// ïðåîáðàçóåì èçîáðàæåíèå ê ôîðìàòó rgb |
(*img_to_rgb2)(image_data, image_data_rgb); |
// óäàëÿåì âðåìåííûé áóôåð image_data |
(*img_destroy)(image_data); |
free(filedata); |
// creating GUI using library functions |
kolibri_window *main_window = kolibri_new_window(50, 40, 470, 500, "Editor, TreeView and MsgBox demo"); |
editor *ed; |
editor *ed_lock; |
gui_add_editor(main_window, ed = kolibri_new_editor(X_Y(10, 440), X_Y(20, 150), 0x1001, 2048, &ed_lock)); |
ed_lock = ed; |
filedata = load_file_inmem("/rd/1/File managers/z_icons.png", &read_bytes); |
image_data_rgb = malloc(icon_rgb_size * 20); // we know size |
// îïðåäåëÿåì âèä èçîáðàæåíèÿ è ïåðåâîäèì åãî âî âðåìåííûé áóôåð image_data |
image_data = (*img_decode)(filedata, read_bytes, 0); |
// ïðåîáðàçóåì èçîáðàæåíèå ê ôîðìàòó rgb |
(*img_to_rgb2)(image_data, image_data_rgb); |
// óäàëÿåì âðåìåííûé áóôåð image_data |
(*img_destroy)(image_data); |
free(filedata); |
filedata = load_file_inmem("/rd/1/File managers/icons.ini", &read_bytes); |
int extended_key = 0, act = 0; |
msgbox* box = kolibri_new_msgbox("Exit", "Are\rYOU\rSure?", 3, "YES", "Absolute", "Not Yet", NULL); // default NOT |
do /* Start of main activity loop */ |
{ |
switch(gui_event) |
{ |
case KOLIBRI_EVENT_REDRAW: |
if (box->retval == 1 || box->retval == 2) return 0; // msgbox closes |
kolibri_handle_event_redraw(main_window); |
break; |
case KOLIBRI_EVENT_NONE: |
break; |
case KOLIBRI_EVENT_KEY: |
if (ed_lock == ed) |
editor_key(ed); |
else |
kolibri_handle_event_key(main_window); |
break; |
case KOLIBRI_EVENT_BUTTON: |
pressed_button = get_os_button(); |
switch (pressed_button) |
{ |
case BTN_QUIT: |
if (box->retval == 3 || box->retval == 0) // not started or cancelled, analyze when redraw after closing msgbox |
kolibri_start_msgbox(box, NULL); |
return 0; |
break; |
} |
break; |
case KOLIBRI_EVENT_MOUSE: |
kolibri_handle_event_mouse(main_window); |
break; |
} |
gui_event = get_os_event(); |
} while(1) ; /* End of main activity loop */ |
return 0; |
} |
/contrib/C_Layer/INCLUDE/kolibri_buf2d.h |
---|
7,7 → 7,7 |
extern int kolibri_buf2d_init(void); |
typedef struct { |
typedef struct __attribute__ ((__packed__)) { |
unsigned int *buf_pointer; |
uint16_t left; |
uint16_t top; |
/contrib/C_Layer/INCLUDE/kolibri_colordialog.h |
---|
4,7 → 4,7 |
char cd_com_area_name[] = "FFFFFFFF_color_dialog"; |
char cd_start_path[] = "/rd/1/colrdial"; |
typedef struct { |
typedef struct __attribute__ ((__packed__)) { |
unsigned int type; |
unsigned int procinfo; |
unsigned int com_area_name; |
/contrib/C_Layer/INCLUDE/kolibri_editor.h |
---|
0,0 → 1,497 |
#ifndef KOLIBRI_EDITOR_H |
#define KOLIBRI_EDITOR_H |
// (êîëè÷åñòâî ñèìâîëîâ â íîâîì äîêóìåíòå + 2) |
#define TE_MAXCHARS 100002 |
// ìàêñèìàëüíûé ðàçìåð ôàéëà ñèíòàêñèñà |
#define TE_MAX_SYNTAX_FILESIZE 410000 |
// buffer for copy|paste |
#define TE_BUF_SIZE 4096 |
typedef void (*editor_callback)(void); |
struct __attribute__ ((__packed__)) editor_symbol { |
uint8_t c; // +0 ñèìâîë |
uint8_t col; // +1 öâåò |
struct editor_symbol *prev; // +2 |
struct editor_symbol *next; // +6 óêàçàòåëè |
uint32_t tc; // +10 âðåì. ñîçäàíèÿ |
uint32_t td; // +14 âðåì. óäàëåíèÿ |
}; |
/// ñòðóêòóðà òåêñòîâîãî ðåäàêòîðà |
typedef struct __attribute__ ((__packed__)) { |
uint32_t x_pos; //0 |
uint32_t y_pos; //50 |
uint32_t width; //440 |
uint32_t hight; //150 |
uint32_t w_pane; //30 øèðèíà ïàíåëè â îêíå |
uint32_t h_pane; //25 âûñîòà ïàíåëè â îêíå |
uint32_t width_sym; //9 øèðèíà ñèìâîëà (çíàêîìåñòà) â îêíå |
uint32_t hight_sym; //16 âûñîòà ñèìâîëà (çíàêîìåñòà) â îêíå |
uint8_t drag_m; // âûäåëåíèå îò ìûøè |
uint8_t drag_k; // âûäåëåíèå îò êëàâèàòóðû |
uint32_t sel_x0; // ñòðóêòóðà âûäåëåíèÿ |
uint32_t sel_y0; |
uint32_t sel_x1; |
uint32_t sel_y1; |
uint32_t seln_x0; //äîïîëíèòåëüíàÿ ñòðóêòóðà âûäåëåíèÿ |
uint32_t seln_y0; |
uint32_t seln_x1; |
uint32_t seln_y1; |
struct editor_symbol *tex; // text memory pointer |
struct editor_symbol *tex_1; // text first symbol pointer |
struct editor_symbol *tex_end;// text end memory pointer |
uint32_t cur_x; //êîîðäèíàòà x êóðñîðà |
uint32_t cur_y; //êîîðäèíàòà y êóðñîðà |
uint32_t max_chars; // TE_MAXCHARS ;+86 ìàêñèìàëüíîå ÷èñëî ñèìâîëîâ â îäíîì äîêóìåíòå |
uint32_t count_colors_text; // 1 ;+90 êîëè÷åñòâî öâåòîâ òåêñòà |
uint32_t count_key_words; //+94 êîëëè÷åñòâî êëþ÷åâûõ ñëîâ |
color_t color_cursor; // 0x808080 ;+98 öâåò êóðñîðà |
color_t color_wnd_capt; // 0x80 ;+102 öâåò ïîëåé âîêðóã îêíà |
color_t color_wnd_work; // 0x0 ;+106 öâåò ôîíà îêíà |
color_t color_wnd_bord; //0xd0d0d0 ;+110 öâåò òåêñòà íà ïîëÿõ |
color_t color_select; // 0x208080 ;+114 öâåò âûäåëåíèÿ |
color_t color_cur_text; // 0xff0000 ;+118 öâåò ñèìâîëà ïîä êóðñîðîì |
color_t color_wnd_text; // 0xffff00 ;+122 öâåò òåêñòà â îêíå |
char *syntax_file; // óêàçàòåëü íà íà÷àëî ôàéëà ñèíòàêñèñà |
uint32_t syntax_file_size; // TE_MAX_SYNTAX_FILESIZE ;+130 ìàêñèìàëüíûé ðàçìåð ôàéëà ñèíòàêñèñà |
void *text_colors; // óêàçàòåëü íà ìàññèâ öâåòîâ òåêñòà |
char *help_text_f1; // óêàçàòåëü íà òåêñò ñïðàâêè (ïî íàæàòèè F1) |
int help_id; // -1 ;+142 èäåíòèôèêàòîð äëÿ ñïðàâêè |
void *key_words_data; // óêàçàòåëü íà ñòðóêòóðû êëþ÷åâûõ ñëîâ TexColViv |
uint32_t tim_ch; // êîëè÷åñòâî èçìåíåíèé â ôàéëå |
uint32_t tim_undo; // êîëè÷åñòâî îòìåíåííûõ äåéñòâèé |
uint32_t tim_ls; // âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ |
uint32_t tim_co; // âðåìÿ ïîñëåäíåé öâåòîâîé ðàçìåòêè |
void *el_focus; // óêàçàòåëü íà ïåðåìåííóþ ýëåìåíòà â ôîêóñå pointer to pointer** |
uint8_t err_save; // îøèáêà ñîõðàíåíèÿ ôàéëà |
uint8_t panel_id; // íîìåð îòêðûòîé ïàíåëè |
uint8_t key_new; // ñèìâîë, êîòîðûé áóäåò äîáàâëÿòñÿ ñ êëàâèàòóðû |
uint8_t symbol_new_line; // ascii 20 ñèìâîë çàâåðøåíèÿ ñòðîêè |
scrollbar *scr_w; // âåðòèêàëüíûé ñêðîëëèíã != NULL |
scrollbar *scr_h; // ãîðèçîíòàëüíûé ñêðîëëèíã != NULL |
char *arr_key_pos;// óêàçàòåëü íà ìàññèâ ïîçèöèé êëþ÷åâûõ ñëîâ |
char *buffer; // óêàçàòåëü íà áóôåð êîïèðîâàíèÿ/âñòàâêè != NULL, also size |
char *buffer_find;// óêàçàòåëü íà áóôåð äëÿ ïîèñêà (sized 302) |
uint8_t cur_ins; // 1 ðåæèì ðàáîòû êóðñîðà (îáû÷íûé èëè çàìåíà) |
uint8_t mode_color; // 1 ðåæèì âûäåëåíèÿ ñëîâ öâåòîì (0-âûêë. 1-âêë.) |
uint8_t mode_invis; // 0 ðåæèì ïîêàçà íåïå÷àòàåìûõ ñèìâîëîâ |
uint8_t gp_opt; // 0 îïöèè âîçâðàùàåìûå ôóíêöèåé ted_get_pos_by_cursor |
editor_callback fun_on_key_ctrl_o; // óêàçàòåëü íà ôóíêöèþ âûçûâàåìóþ ïðè íàæàòèè Ctrl+O (îòêðûòèå ôàéëà), can be NULL |
editor_callback fun_on_key_ctrl_f; // ... Ctrl+F (âûçîâà/ñêðûòèÿ ïàíåëè ïîèñêà) |
editor_callback fun_on_key_ctrl_n; // ... Ctrl+N (ñîçäàíèå íîâîãî äîêóìåíòà) |
editor_callback fun_on_key_ctrl_s; // ... Ctrl+S |
uint32_t buffer_size;// BUF_SIZE ðàçìåð áóôåðà êîïèðîâàíèÿ/âñòàâêè |
editor_callback fun_find_err; // óêàçàòåëü íà ôóíêöèþ âûçûâàåìóþ åñëè ïîèñê çàêîí÷èëñÿ íåóäà÷íî |
editor_callback fun_init_synt_err; // unused óêàçàòåëü íà ôóíêöèþ âûçûâàåìóþ ïðè îøèáî÷íîì îòêðûòèè ôàéëà ñèíòàêñèñà |
editor_callback fun_draw_panel_buttons; // óêàçàòåëü íà ôóíêöèþ ðèñîâàíèÿ ïàíåëè ñ êíîïêàìè |
editor_callback fun_draw_panel_find; // óêàçàòåëü íà ôóíêöèþ ðèñîâàíèÿ ïàíåëè ïîèñêà |
editor_callback fun_draw_panel_syntax; // óêàçàòåëü íà ôóíêöèþ ðèñîâàíèÿ ïàíåëè ñèíòàêñèñà |
editor_callback fun_save_err; // óêàçàòåëü íà ôóíêöèþ âûçûâàåìóþ åñëè ñîõðàíåíèå ôàéëà çàêîí÷èëîñü íåóäà÷íî |
uint32_t increase_size; //200 ÷èñëî ñèìâîëîâ íà êîòîðûå áóäåò óâå÷èâàòüñÿ ïàìÿòü ïðè íåõâàòêå |
void *ptr_free_symb; // èñïîëüçóåòñÿ âíóòðè ýëåìåíòà äëÿ óñêîðåíèÿ âñòàâêè òåêñòà |
uint32_t font_size; // ;+250 ìíîæèòåëü äëÿ ðàçìåðà øðèôòà // binary OR mask for ECX SysFn4 |
} editor; |
struct __attribute__ ((__packed__)) editor_color_item |
{ |
char word[40]; // ñëîâî äëÿ ïîäñâåòêè |
uint32_t f1_offset; // ñìåùåíèå â òàáëèöå F1 ïîäñêàçîê |
uint8_t flags; // ôëàãè èñïîëüçóåìûå ïðè âûäåëåíèè |
uint8_t endc; // ñèìâîë êîíöà âûäåëåíèÿ (èñïîëüçóåòñÿ ïðè flags&4) |
uint8_t escc; // ýêðàíèðóþùèé ñèìâîë (èñïîëüçóåòñÿ ïðè flags&4) ascii(34) ïðèìåðû ýêðàíèðîâàíèÿ \r \n \t |
uint8_t color; // öâåò ïî òàáëèöå öâåòîâ |
}; |
struct editor_syntax_file |
{ |
uint32_t count_colors_text; // êîë-âî öâåòîâ òåêñòà dd (text-color_wnd_text)/4 |
uint32_t count_key_words; // êîë-âî êëþ÷åâûõ ñëîâ dd (f1-text)/48 |
color_t color_cursor; // dd 0xf1fcd0 |
color_t color_wnd_capt; // dd 0x080808 |
color_t color_wnd_work; // dd 0x1C1C1C |
color_t color_wnd_bord; // dd 0xc0c0c0 |
color_t color_select; // dd 0x3E3D32 |
color_t color_cur_text; // dd 0x808080 |
color_t color_wnd_text[]; // òàáëèöà öâåòîâ ðàçìåðîì count_colors_text |
// editor_color_item[]; // òàáëèöà êëþ÷åâûõ ïîäñâå÷åííûõ ñëîâ ðàçìåðîì count_key_words |
}; |
static struct editor_syntax_file default_syntax = { |
10, //count_colors_text |
0, // count_key_words dd (f1-text)/48 |
0xf1fcd0, //color_cursor dd 0xf1fcd0 |
0x080808, //color_wnd_capt dd 0x080808 |
0x1C1C1C, //color_wnd_work dd 0x1C1C1C |
0xc0c0c0, //color_wnd_bord dd 0xc0c0c0 |
0x3E3D32, //color_select dd 0x3E3D32 |
0x808080, //color_cur_text dd 0x808080 |
{0xD0D0D0, 0xffff00, 0x00ff00, 0x00ffff, 0x808080, 0xff40ff, 0x4080ff, 0xff0000, 0x8080ff, 0x00ccff} |
}; |
// next structure must follow syntax definition, at least has 1 element !!! |
static struct editor_color_item word1 = { |
"siemargl", 1, 0, 0, 1 // test word colored as 1st in table |
}; |
// next structure preferably follow syntax definition, at least has 1 element !!! |
static char f1_table[] = { |
"\0" |
"First\0" |
"Last\0" |
}; |
extern void (*ted_draw)(editor *) __attribute__((__stdcall__)); |
extern void (*ted_init_scroll_bars)(editor *, int opt) __attribute__((__stdcall__)); |
/// opt bits = 1 - ìåíÿòü öâåò ñêðîëëèíãîâ, 2 - èçìåíèëèñü ðàçìåðû îêíà, 4 - èçìåíèëèñü ðàçìåðû äîêóìåíòà |
extern void (*ted_init_syntax_file)(editor *) __attribute__((__stdcall__)); |
extern void (*ted_mouse)(editor *) __attribute__((__stdcall__)); |
extern void (*ted_text_add)(editor *, char *text, int textlen, int opt) __attribute__((__stdcall__)); |
/// add text to cursor pos |
/// opt == ted_opt_ed_change_time, ted_opt_ed_move_cursor |
///ted_opt_ed_move_cursor equ 1 ;äâèãàòü êóðñîð ïîñëå äîáàâëåíèÿ òåêñòà |
///ted_opt_ed_change_time equ 2 ;äîáàâëÿòü èçìåíåíèÿ ïðè ðåäàêòèðîâàíèè òåêñòà |
extern void (*ted_but_select_word)(editor *) __attribute__((__stdcall__)); |
/// select word under cursor |
extern void (*ted_but_copy)(editor *) __attribute__((__stdcall__)); |
extern void (*ted_but_paste)(editor *) __attribute__((__stdcall__)); |
extern void (*ted_but_find_next)(editor *) __attribute__((__stdcall__)); |
///move cursor to <ed_buffer_find>, calls ted_fun_find_err() if exist |
extern void (*ted_but_sumb_upper_asm)(editor *) __attribute__((__stdcall__)); |
static inline void editor_selected_toupper(editor *ed) |
{ |
__asm__ __volatile__ ( |
"push edi \n\t" |
"push esi \n\t":::); |
(*ted_but_sumb_upper_asm)(ed); |
__asm__ __volatile__ ( |
"pop esi \n\t" |
"pop edi \n\t":::); |
} |
extern void (*ted_but_sumb_lover_asm)(editor *) __attribute__((__stdcall__)); |
static inline void editor_selected_tolower(editor *ed) |
{ |
__asm__ __volatile__ ( |
"push edi \n\t" |
"push esi \n\t":::); |
(*ted_but_sumb_lover_asm)(ed); |
__asm__ __volatile__ ( |
"pop esi \n\t" |
"pop edi \n\t":::); |
} |
extern void (*ted_but_convert_by_table_asm)(editor *, char* table) __attribute__((__stdcall__)); |
static inline void editor_convert_by_table(editor *ed, char* table) |
{ |
__asm__ __volatile__ ( |
"push edi \n\t" |
"push esi \n\t":::); |
(*ted_but_convert_by_table_asm)(ed, table); |
__asm__ __volatile__ ( |
"pop esi \n\t" |
"pop edi \n\t":::); |
} |
extern int (*ted_can_save_asm)(editor *) __attribute__((__stdcall__)); |
static inline int editor_can_save(editor *ed) |
/// return 1 if can be saved |
{ |
int ret; |
__asm__ __volatile__ ( |
"push edi \n\t":::); |
(*ted_can_save_asm)(ed); |
__asm__ __volatile__ ( |
"pop edi \n\t":"=a"(ret)::); |
return ret; |
} |
extern void (*ted_clear_asm)(editor *, int) __attribute__((__stdcall__)); |
static inline void editor_clear(editor *ed, int all) |
/// all==1 - clear all memory |
{ |
__asm__ __volatile__ ( |
"push edi \n\t":::); |
(*ted_clear_asm)(ed, all); |
__asm__ __volatile__ ( |
"pop edi \n\t":::); |
} |
extern void (*ted_delete_asm)(editor *) __attribute__((__stdcall__)); |
static inline void editor_delete(editor *ed) |
/// frees all memory (destroy) |
{ |
__asm__ __volatile__ ( |
"push edi \n\t":::); |
(*ted_delete_asm)(ed); |
__asm__ __volatile__ ( |
"pop edi \n\t":::); |
free(ed->scr_w); |
free(ed->scr_h); |
free(ed->buffer); |
free(ed->buffer_find); |
} |
extern void (*ted_init_asm)(editor *) __attribute__((__stdcall__)); |
static inline void editor_init(editor *ed) |
/// allocate memory |
{ |
__asm__ __volatile__ ( |
"push edi \n\t":::); |
(*ted_init_asm)(ed); |
__asm__ __volatile__ ( |
"pop edi \n\t":::); |
} |
extern int (*ted_is_select)(editor *) __attribute__((__stdcall__)); |
static inline int editor_is_select(editor *ed) |
/// return 1 if have selection |
{ |
int ret; |
__asm__ __volatile__ ( |
"push ebx \n\t":::); |
(*ted_is_select)(ed); |
__asm__ __volatile__ ( |
"pop ebx \n\t":"=a"(ret)::); |
return ret; |
} |
enum control_keys { |
KM_SHIFT = 0x00010000, |
KM_CTRL = 0x00020000, |
KM_ALT = 0x00040000, |
KM_NUMLOCK = 0x00080000 |
}; |
extern void (*ted_key_asm)(editor *, char* table, int control) __attribute__((__stdcall__)); |
static inline void editor_keyboard(editor *ed, char* table, enum control_keys control, int ch) |
/// control is KM_SHIFT, KM_ALT, KM_CTRL, KM_NUMLOCK, |
/// ch = GET_KEY |
/// table = SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT |
{ |
__asm__ __volatile__ ( |
"nop \n\t"::"a"(ch):); |
(*ted_key_asm)(ed, table, control); |
} |
extern void (*ted_open_file_asm)(editor *, struct fs_dirinfo*, char *fname) __attribute__((__stdcall__)); |
static inline int editor_openfile(editor *ed, char *fname, int *readbytes) |
/// returns errcode as SysFn70 |
{ |
int ret; |
struct fs_dirinfo di; |
__asm__ __volatile__ ( |
"push edi \n\t":::); |
(*ted_open_file_asm)(ed, &di, fname); |
__asm__ __volatile__ ( |
"pop edi \n\t":"=b"(*readbytes), "=a"(ret)::); |
return ret; |
} |
extern void (*ted_save_file_asm)(editor *, struct fs_dirinfo*, char *fname) __attribute__((__stdcall__)); |
static inline int editor_savefile(editor *ed, char *fname) |
/// returns errcode, calls fun_save_err() if exists |
{ |
struct fs_dirinfo di; |
(*ted_save_file_asm)(ed, &di, fname); |
return ed->err_save; |
} |
extern void (*ted_but_cut)(editor *) __attribute__((__stdcall__)); |
static inline void editor_cut(editor *ed) |
{ |
__asm__ __volatile__ ( |
"push edi \n\t":::); |
(*ted_but_cut)(ed); |
__asm__ __volatile__ ( |
"pop edi \n\t":::); |
} |
extern void (*ted_but_undo)(editor *) __attribute__((__stdcall__)); |
static inline void editor_undo(editor *ed) |
{ |
__asm__ __volatile__ ( |
"push edi \n\t":::); |
(*ted_but_undo)(ed); |
__asm__ __volatile__ ( |
"pop edi \n\t":::); |
} |
extern void (*ted_but_redo)(editor *) __attribute__((__stdcall__)); |
static inline void editor_redo(editor *ed) |
{ |
__asm__ __volatile__ ( |
"push edi \n\t":::); |
(*ted_but_redo)(ed); |
__asm__ __volatile__ ( |
"pop edi \n\t":::); |
} |
extern void (*ted_but_reverse)(editor *) __attribute__((__stdcall__)); |
static inline void editor_reverse(editor *ed) |
{ |
__asm__ __volatile__ ( |
"push edi \n\t" |
"push ebx\n\t":::); |
(*ted_but_reverse)(ed); |
__asm__ __volatile__ ( |
"pop ebx \n\t" |
"pop edi \n\t":::); |
} |
extern void (*ted_text_colored_asm)() __attribute__((__stdcall__)); |
static inline void editor_text_colored(editor *ed) |
{ |
__asm__ __volatile__ ( |
"nop \n\t"::"D"(ed):); |
(*ted_text_colored_asm)(); |
} |
static inline |
uint32_t get_control_keys(void) |
{ |
uint32_t ctrl; |
__asm__ __volatile__( |
"int $0x40 \n\t" |
:"=a"(ctrl) |
:"a"(66),"b"(3)); |
return ctrl; |
}; |
static inline |
int get_keyboard_layout(int opt, char* buf) |
/// 128 byte buffer |
/// opt: 1 - normal, 2 - shifted, 3 - alted, or 9 - return language |
{ |
uint32_t lang; |
__asm__ __volatile__( |
"int $0x40 \n\t" |
:"=a"(lang) |
:"a"(26),"b"(2), "c"(opt), "d"(buf)); |
return lang; |
}; |
static void editor_key(editor* ed) |
// callback for gui |
{ |
uint32_t control = get_control_keys(); |
enum control_keys ed_ctrl = 0; |
int ly_opt = 1; |
if (control & 3) { ed_ctrl |= KM_SHIFT; ly_opt = 2; } |
if (control & 0xC) ed_ctrl |= KM_CTRL; |
if (control & 0x30){ ed_ctrl |= KM_ALT; ly_opt = 3; } |
if (control & 0x80) ed_ctrl |= KM_NUMLOCK; |
char conv_table[128]; |
get_keyboard_layout(ly_opt, conv_table); |
editor_keyboard(ed, conv_table, ed_ctrl, get_key().val); |
} |
inline void gui_add_editor(kolibri_window *wnd, editor* e) |
{ |
kolibri_window_add_element(wnd, KOLIBRI_EDITOR, e); |
} |
static inline editor* kolibri_new_editor(uint32_t x_w, uint32_t y_h, uint32_t font, uint32_t max_chars, editor **editor_interlock) |
/// font - 0b10SSS 8x16 size multiply (SSS+1), 0xSSS - 6x9 multiply (SSS+1) |
{ |
editor *ed = (editor *)calloc(1, sizeof(editor)); |
ed->x_pos = x_w >> 16; |
ed->width = x_w & 0xFFFF; |
ed->y_pos = y_h >> 16; |
ed->hight = y_h & 0xFFFF; |
// no panel, w_pane, h_pane == 0 |
// font |
if (font == 0) font = 0x10; // default 16 = 8x16 |
int font_multipl = (font & 7) + 1; |
ed->font_size = font << 24; |
if (font & 0x10) // 8x16 |
{ |
ed->width_sym = 8 * font_multipl; |
ed->hight_sym = 16 * font_multipl; |
} else // 6x9 |
{ |
ed->width_sym = 6 * font_multipl; |
ed->hight_sym = 9 * font_multipl; |
} |
// memory sizing for text & syntax |
ed->max_chars = max_chars; |
ed->increase_size = max_chars / 2; |
ed->syntax_file_size = sizeof (default_syntax); |
/* // loaded auto from syntax |
ed->color_cursor = 0x808080; |
ed->color_wnd_capt = 0x80; |
ed->color_wnd_bord = 0xd0d0d0; |
ed->color_select = 0x208080; |
ed->color_cur_text = 0xff0000; |
ed->color_wnd_text = 0xffff00; |
*/ |
ed->symbol_new_line = 20; // ascii(20) |
ed->scr_w = kolibri_new_scrollbar_def(0, 0, 100, 30, 0); |
ed->scr_h = kolibri_new_scrollbar_def(0, 0, 100, 30, 0); |
ed->buffer_size = TE_BUF_SIZE; |
ed->buffer = malloc(TE_BUF_SIZE); |
ed->buffer_find = malloc(TE_BUF_SIZE / 8); //where to store text to search |
ed->cur_ins = 1; // insert mode default |
ed->mode_color = 1; // can select text |
ed->mode_invis = 1; // show nonprinted symbols |
// ??? saveregs ax,cx,di |
editor_init(ed); // memory allocation, cleaning |
ed->syntax_file = (char*)&default_syntax; |
(*ted_init_syntax_file)(ed); // load colors and syntax highlight |
ed->help_text_f1 = f1_table; // override if not aligned immediately after syntax words |
ed->key_words_data = &word1; |
return ed; |
} |
#endif // KOLIBRI_EDITOR_H |
/contrib/C_Layer/INCLUDE/kolibri_filebrowse.h |
---|
112,7 → 112,7 |
uint32_t select_flag; // widget have focus, set auto on mouseclick, but need to reset before mouse() |
color_t background_color; // self explained, 0xffffff |
color_t select_color; // self explained, 0xbbddff |
color_t select_text_color; // self explained - have a bug - newer used |
color_t select_text_color; // self explained - have a bug - never really used |
color_t text_color; // self explained |
color_t reduct_text_color; // 0xff0000 - spec color for cutted filenames |
color_t marked_text_color; // not used |
216,12 → 216,7 |
0x000000, 0xbbddff, kolibri_color_table.color_work_text, kolibri_color_table.color_work_area, 0xff0000); |
} |
*/ |
/* |
inline frame* kolibri_new_frame_def(uint32_t x_w, uint32_t y_h, char *text) |
{ |
return kolibri_new_frame(x_w, y_h, 0x00FCFCFC, 0x00DCDCDC, text, TOP, kolibri_color_table.color_work_text, kolibri_color_table.color_work_area); |
} |
*/ |
inline void gui_add_filebrowser(kolibri_window *wnd, filebrowser* f) |
{ |
kolibri_window_add_element(wnd, KOLIBRI_FILEBROWSE, f); |
/contrib/C_Layer/INCLUDE/kolibri_frame.h |
---|
1,11 → 1,27 |
#ifndef KOLIBRI_FRAME_H |
#define KOLIBRI_FRAME_H |
enum { |
TOP, |
BOTTON |
enum fr_text_position_t { |
FR_TOP, |
FR_BOTTON |
}; |
/* |
; FR_FLAGS = [x][yyy][z] |
; z - Caption |
; yyy - BorderStyle |
; x - BackStyle |
*/ |
enum fr_flags_t { |
FR_CAPTION = 1, // if text != null set auto |
FR_DOUBLE = 0, // default |
FR_RAISED = 2, |
FR_SUNKEN = 4, |
FR_ETCHED = 6, |
FR_RINGED = 8, |
FR_FILLED = 0x10 |
}; |
typedef struct { |
uint32_t type; |
uint32_t x_w; |
12,7 → 28,7 |
uint32_t y_h; |
color_t ext_col; |
color_t int_col; |
uint32_t draw_text_flag; |
uint32_t flags; |
char *text_pointer; |
uint32_t text_position; |
uint32_t font_number; |
21,7 → 37,8 |
color_t font_bg_color; |
}frame; |
inline frame* kolibri_frame(frame* f, uint32_t x_w, uint32_t y_h, color_t ext_col, color_t int_col, char *text, uint32_t text_position, color_t font_color, color_t font_bgcolor) |
inline frame* kolibri_frame(frame* f, uint32_t x_w, uint32_t y_h, color_t ext_col, color_t int_col, char *text, enum fr_text_position_t text_position, |
color_t font_color, color_t font_bgcolor, enum fr_flags_t flags) |
{ |
f->type = 0; |
f->x_w = x_w; |
28,7 → 45,8 |
f->y_h = y_h; |
f->ext_col = ext_col; |
f->int_col = int_col; |
f->draw_text_flag = text != NULL; |
f->flags = flags; |
if (text) f->flags |= FR_CAPTION; |
f->text_pointer = text; |
f->text_position = text_position; |
f->font_number = 0; // 0 == font 6x9, 1==8x16 |
36,23 → 54,25 |
f->font_color = font_color | 0x80000000; |
f->font_bg_color = font_bgcolor; |
return f; |
} |
inline frame* kolibri_new_frame(uint32_t x_w, uint32_t y_h, color_t ext_col, color_t int_col, char *text, uint32_t text_position, color_t font_color, color_t font_bgcolor) |
inline frame* kolibri_new_frame(uint32_t x_w, uint32_t y_h, color_t ext_col, color_t int_col, char *text, enum fr_text_position_t text_position, |
color_t font_color, color_t font_bgcolor, enum fr_flags_t flags) |
{ |
frame *new_frame = (frame *)malloc(sizeof(frame)); |
return kolibri_frame(new_frame, x_w, y_h, ext_col, int_col, text, text_position, font_color, font_bgcolor); |
return kolibri_frame(new_frame, x_w, y_h, ext_col, int_col, text, text_position, font_color, font_bgcolor, flags); |
} |
inline frame* kolibri_frame_def(frame* f, uint32_t x_w, uint32_t y_h, char *text) |
{ |
return kolibri_frame(f, x_w, y_h, 0x00FCFCFC, 0x00DCDCDC, text, TOP, kolibri_color_table.color_work_text, kolibri_color_table.color_work_area); |
return kolibri_frame(f, x_w, y_h, 0x00FCFCFC, 0x00DCDCDC, text, FR_TOP, kolibri_color_table.color_work_text, kolibri_color_table.color_work_area, 0); |
} |
inline frame* kolibri_new_frame_def(uint32_t x_w, uint32_t y_h, char *text) |
{ |
return kolibri_new_frame(x_w, y_h, 0x00FCFCFC, 0x00DCDCDC, text, TOP, kolibri_color_table.color_work_text, kolibri_color_table.color_work_area); |
return kolibri_new_frame(x_w, y_h, 0x00FCFCFC, 0x00DCDCDC, text, FR_TOP, kolibri_color_table.color_work_text, kolibri_color_table.color_work_area, 0); |
} |
inline void gui_add_frame(kolibri_window *wnd, frame* f) |
/contrib/C_Layer/INCLUDE/kolibri_gui_elements.h |
---|
25,6 → 25,7 |
KOLIBRI_D_BUTTON, |
KOLIBRI_PATHSHOW, |
KOLIBRI_FILEBROWSE, |
KOLIBRI_EDITOR, |
/* Add elements above this element in order to let KOLIBRI_NUM_GUI_ELEMENTS */ |
/* stay at correct value */ |
79,9 → 80,9 |
#include "kolibri_scrollbar.h" |
#include "kolibri_statictext.h" |
#include "kolibri_filebrowse.h" |
#include "kolibri_editor.h" |
/*---------------------Define various functions for initializing GUI-------*/ |
/* Master table containing operations for various GUI elements in one place */ |
150,7 → 151,11 |
kolibri_gui_op_table[KOLIBRI_FILEBROWSE].redraw_fn = (cb_elem_boxlib)filebrowse_draw; |
kolibri_gui_op_table[KOLIBRI_FILEBROWSE].mouse_fn = (cb_elem_boxlib)filebrowse_mouse; |
kolibri_gui_op_table[KOLIBRI_FILEBROWSE].key_fn = (cb_elem_boxlib)filebrowse_key; |
debug_board_printf("KOLIBRI_FILEBROWSE (%x,%x,%x)\n", filebrowse_draw, filebrowse_mouse, filebrowse_key); |
kolibri_gui_op_table[KOLIBRI_EDITOR].redraw_fn = (cb_elem_boxlib)ted_draw; |
kolibri_gui_op_table[KOLIBRI_EDITOR].mouse_fn = (cb_elem_boxlib)ted_mouse; |
kolibri_gui_op_table[KOLIBRI_EDITOR].key_fn = (cb_elem_boxlib)editor_key; |
debug_board_printf("KOLIBRI_EDITOR (%x,%x,%x)\n", ted_draw, ted_mouse, editor_key); |
} |
/* Create a new main GUI window for KolibriOS */ |
/contrib/C_Layer/INCLUDE/kolibri_kmenu.h |
---|
22,7 → 22,7 |
}; |
} t_font; |
typedef struct { |
typedef struct __attribute__ ((__packed__)) { |
uint16_t left, top, right, bottom; |
} t_rect; |
/contrib/C_Layer/INCLUDE/kolibri_msgbox.h |
---|
0,0 → 1,60 |
#ifndef KOLIBRI_MSGBOX_H |
#define KOLIBRI_MSGBOX_H |
#include <stdarg.h> |
typedef struct __attribute__ ((__packed__)) { |
uint8_t retval; // 0 - win closed, 1 to n - button num, also default button on start |
uint8_t reserv; |
char texts[2048]; // mus be enough ;-) |
char msgbox_stack[1024]; |
uint32_t top_stack; |
} msgbox; |
typedef void (*msgbox_callback)(void); |
static int msgbox_inited; |
extern void kolibri_msgbox_init(); |
extern void (*msgbox_create)(msgbox *, void *thread) __attribute__((__stdcall__)); // clears callbacks, ! if fix lib, we can return eax as of Fn51 |
extern void (*msgbox_setfunctions)(msgbox_callback*) __attribute__((__stdcall__)); // must be called immediately after create, zero-ended array |
extern void (*msgbox_reinit)(msgbox *) __attribute__((__stdcall__)); // recalc sizes when structure changes, called auto when MsgBoxCreate |
static inline msgbox* kolibri_new_msgbox(char* title, char* text, int def_but, ...) |
/// text can be multilined by code 13 = "\r" |
/// def_but - highlighted and used on Enter (if zero - default is [X]), user may use Tabs or Arrows |
/// last params are buttons text, max 8. last must set as NULL |
{ |
va_list vl; |
va_start(vl, def_but); |
msgbox* box = calloc(sizeof(msgbox), 1); |
box->retval = (uint8_t)def_but; |
char *pc = box->texts, |
*but_text = va_arg(vl, char*); |
strcpy(pc, title); |
pc += strlen(title) + 1; |
while (but_text) |
{ |
strcpy(pc, but_text); |
pc += strlen(but_text) + 1; |
// assert(pc - box->texts < sizeof box->texts); |
} |
va_end(vl); |
return box; |
} |
void kolibri_start_msgbox(msgbox* box, msgbox_callback cb[]) |
{ |
if (!msgbox_inited) |
{ |
kolibri_msgbox_init(); |
msgbox_inited++; |
} |
(*msgbox_create)(box, &box->top_stack); |
if (cb) (*msgbox_setfunctions)(cb); |
} |
#endif |
/contrib/C_Layer/INCLUDE/kolibri_opendialog.h |
---|
11,12 → 11,12 |
SELECT |
}; |
typedef struct { |
typedef struct __attribute__ ((__packed__)) { |
unsigned int size; |
unsigned char end; |
}od_filter; |
typedef struct { |
typedef struct __attribute__ ((__packed__)) { |
unsigned int mode; |
char* procinfo; |
char* com_area_name; |
/contrib/C_Layer/INCLUDE/kolibri_optionbox.h |
---|
1,7 → 1,7 |
#ifndef KOLIBRI_OPTIONBOX_H |
#define KOLIBRI_OPTIONBOX_H |
typedef struct option_box_t{ |
typedef struct __attribute__ ((__packed__)) option_box_t { |
struct option_box_t **selected; |
uint16_t posx; |
uint16_t posy; |
/contrib/C_Layer/INCLUDE/kolibri_pathshow.h |
---|
1,7 → 1,7 |
#ifndef KOLIBRI_PATHSHOW_H |
#define KOLIBRI_PATHSHOW_H |
typedef struct { |
typedef struct __attribute__ ((__packed__)) { |
uint32_t type; |
uint32_t x_y; |
uint16_t font_size_x; // 6 - for font 0, 8 - for font 1 |
/contrib/C_Layer/INCLUDE/kolibri_scrollbar.h |
---|
1,7 → 1,7 |
#ifndef KOLIBRI_SCROLLBAR_H |
#define KOLIBRI_SCROLLBAR_H |
typedef struct { |
typedef struct __attribute__ ((__packed__)) { |
// uint16_t xsize; |
// uint16_t xpos; |
// uint16_t ysize; |
9,7 → 9,7 |
uint32_t x_w; |
uint32_t y_h; |
uint32_t btn_height; |
uint32_t type; |
uint32_t type; // type 1 - stylish frame, type 2 - ?, type 0 - ? |
uint32_t max_area; |
uint32_t cur_area; |
uint32_t position; |
/contrib/C_Layer/INCLUDE/kolibri_treelist.h |
---|
0,0 → 1,106 |
#ifndef KOLIBRI_TREELIST_H |
#define KOLIBRI_TREELIST_H |
/* |
el_focus dd tedit0 |
mouse_dd dd 0 |
tree1 tree_list 264,count_of_dir_list_files+2, tl_key_no_edit+tl_draw_par_line+tl_list_box_mode,\ |
16,16, 0x8080ff,0x0000ff,0xffffff, 0,70,TED_PANEL_WIDTH-17,120, 0,0,0, el_focus,\ |
ws_dir_lbox,0 |
tree3 tree_list MAX_COLOR_WORD_LEN,3,tl_key_no_edit,\ |
16,16, 0x8080ff,0x0000ff,0xffffff, 5,30,300,160, 16, 0,0, el_focus, w_scr_t3,0 |
tree_file_struct: |
dd 1 |
dd 0,0,count_of_dir_list_files |
dd dir_mem |
db 0 |
dd file_name ;sys_path |
*/ |
/* |
;struct TreeList |
; type dw ? ;+ 0 òèï ýëåìåíòà, èëè èíäåêñ èêîíêè äëÿ óçëà |
; lev db ? ;+ 2 óðîâåíü ýëåìåíòà |
; clo db ? ;+ 3 ôëàã çàêðûòèÿ, èëè îòêðûòèÿ (èìååò ñìûñë äëÿ ðîäèòåëüñêîãî óçëà) |
; perv dd ? ;+ 4 èíäåêñ ïðåäûäóùåãî ýëåìåíòà |
; next dd ? ;+ 8 èíäåêñ ïîñëåäóþùåãî ýëåìåíòà |
; tc dd ? ;+12 âðåì. ñîçäàíèÿ |
; td dd ? ;+16 âðåì. óäàëåíèÿ |
;ends |
struc tree_list info_size,info_max_count,style, img_cx,img_cy,\ |
col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\ |
info_capt_len,el_focus, p_scroll,on_press { |
.box_left dd box_l |
.box_top dd box_t |
.box_width dd box_w |
.box_height dd box_h |
.data_info dd 0 |
.info_size dw info_size |
.info_max_count dd info_max_count |
.style dd style |
.data_nodes dd 0 |
.data_img dd 0 |
.img_cx dw img_cx |
.img_cy dw img_cy |
.data_img_sys dd 0 |
.ch_tim dd 0 |
.tim_undo dd 0 |
.cur_pos dd 0 |
.col_bkg dd col_bkg |
.col_zag dd col_zag |
.col_txt dd col_txt |
.capt_cy dw capt_cy |
.info_capt_offs dw info_capt_offs |
.info_capt_len dw info_capt_len |
.el_focus dd el_focus |
.p_scroll dd p_scroll |
.on_press dd on_press |
} |
*/ |
// êîíñòàíòû ñòèëÿ |
enum tl_style { |
TL_KEY_NO_EDIT = 1, // ýëåìåíò íåëüçÿ ðåäàêòèðîâàòü íà êëàâèàòóðå (èçìåíÿòü óðîâíè, óäàëÿòü) |
TL_DRAW_PAR_LINE = 2, // ðèñîâàòü ëèíèè ê ðîäèòåëüñêîìó óçëó |
TL_LISTBOX_MODE = 4 //ñòèëü íå îòîáðàæàåò óðîâíè (êàê â ListBox âñå îäíîãî óðîâíÿ) |
}; |
typedef struct __attribute__ ((__packed__)) { |
uint32_t left; |
uint32_t top; |
uint32_t width; |
uint32_t height; |
void *data_info; // óêàçàòåëü íà îñíîâíûå äàíûå |
uint16_t info_size; // ðàçìåð äàííûõ âûäåëÿåìûõ äëÿ êàæäîãî óçëà (ïîëüçîâàòåëüñüêèå äàííûå + òåêñò äëÿ ïîäïèñè) |
uint32_t info_max_count; // ìàêñèìàëüíîå êîëè÷åñòâî óçëîâ, êîòîðûå ìîæíî äîáàâèòü â ýëåìåíò |
uint32_t style; // ñòèëè ýëåìåíòà |
void *data_nodes; // óêàçàòåëü íà ñòðóêòóðû óçëîâ |
void *data_img; // óêàçàòåëü íà èçîáðàæåíèÿ ñ èêîíêàìè óçëîâ |
uint16_t img_cx; // øèðèíà èêîíîê |
uint16_t img_cy; // âûñîòà èêîíîê |
void *data_img_sys;//óêàçàòåëü íà ñèñòåìíûå èçîáðàæåíèÿ (ñòðåëêè, ïëþñèêè) |
uint32_t ch_tim; // êîëè÷åñòâî èçìåíåíèé â ôàéëå |
uint32_t tim_undo; // êîëè÷åñòâî îòìåíåííûõ äåéñòâèé |
uint32_t cur_pos; // ïîçèöèÿ êóðñîðà |
color_t col_bkg; // öâåò ôîíà |
color_t tl_col_zag; // öâåò çàãîëîâêà |
color_t tl_col_txt; // öâåò òåêñòà |
uint16_t capt_cy; // âûñîòà ïîäïèñè |
uint16_t info_capt_offs;//ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà) |
uint16_t info_capt_len;//äëèíà òåêñòà ïîäïèñè óçëà (åñëè = 0 òî äî êîíöà ñòðóêòóðû) |
void *el_focus; // óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå |
void *p_scroll; // óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà |
void *on_press; // +84 óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ âûçûâàåòñÿ ïðè íàæàòèè Enter |
} treelist; |
/* |
;êîíñòàíòû äëÿ ôóíêöèé |
tl_err_save_memory_size equ 10b ;íå õâàòàåò ïàìÿòè äëÿ ñîõðàíåíèÿ ýëåìåíòà |
tl_err_load_caption equ 1b ;â ïàìÿòè íåò çàãîëîâêà 'tree' |
tl_err_load_info_size equ 100b ;íå ñîâïàäàåò ðàçìåð èíôîðìàöèîííîé ñòðóêòóðû ïðè îòêðûòèè |
tl_load_mode_add equ 0x20000 ;îïöèÿ ñ÷èòûâàíèÿ â ðåæèìå äîáàâëåíèÿ èíôîðìàöèè |
tl_save_load_heder_size equ 26 ;ðàçìåð çàãîëîâêà äëÿ çàïèñè/÷òåíèÿ ýëåìåíòîâ |
*/ |
#endif //KOLIBRI_TREELIST_H |