/contrib/C_Layer/ASM/loadboxlib.asm |
---|
144,3 → 144,9 |
public menu_bar_draw as '_menu_bar_draw' |
public menu_bar_mouse as '_menu_bar_mouse' |
public menu_bar_activate as '_menu_bar_activate' |
public dynamic_button_draw as '_dynamic_button_draw' |
public dynamic_button_mouse as '_dynamic_button_mouse' |
public path_show_prepare as '_path_show_prepare' |
public path_show_draw as '_path_show_draw' |
/contrib/C_Layer/EXAMPLE/libguic_kolibri/dbutton_files.c |
---|
0,0 → 1,152 |
/* |
KolibriGUI demobox |
-Picture Button |
-StaticText |
-File Open/Save Dialog |
-Filebrowser (planned) |
Free for all |
Initially written by Siemargl, 2016 |
ToDo |
*/ |
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
#include "kos32sys.h" |
#include "kolibri_gui.h" |
#include "kolibri_opendialog.h" |
#include "kolibri_libimg.h" |
char temp_path[4096]; |
int main() |
{ |
/* 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 = malloc(icon_rgb_size * 3), |
*image_data; |
// make full path + argv |
FILE *ficon = fopen("reload_16x16_8b.png", "rb"); |
if (!ficon) |
{ |
debug_board_write_str("no icons file reload_16x16_8b.png "); |
return 1; |
} |
int ficon_size = fread(image_data_rgb, 1, icon_rgb_size * 3, ficon); |
if (ferror(ficon)) |
{ |
debug_board_write_str("error reading file reload_16x16_8b.png "); |
return 1; |
} |
fclose(ficon); |
// îïðåäåëÿåì âèä èçîáðàæåíèÿ è ïåðåâîäèì åãî âî âðåìåííûé áóôåð image_data |
image_data = (*img_decode)(image_data_rgb, ficon_size, 0); |
// ïðåîáðàçóåì èçîáðàæåíèå ê ôîðìàòó rgb |
(*img_to_rgb2)(image_data, image_data_rgb); |
// óäàëÿåì âðåìåííûé áóôåð image_data |
(*img_destroy)(image_data); |
// creating GUI using library functions |
kolibri_window *main_window = kolibri_new_window(50, 40, 400, 160, "PictureButton and File dialog demo"); |
pict_button tbar[3]; |
gui_add_pict_button(main_window, kolibri_pict_button(&tbar[0], X_Y(10, 16), X_Y(10, 16), image_data_rgb, image_data_rgb + icon_rgb_size, image_data_rgb + icon_rgb_size * 2, 24, NULL, 0)); |
gui_add_pict_button(main_window, kolibri_pict_button(&tbar[1], X_Y(20, 16), X_Y(10, 16), image_data_rgb, image_data_rgb + icon_rgb_size, image_data_rgb + icon_rgb_size * 2, 24, NULL, 0)); |
gui_add_pict_button(main_window, kolibri_pict_button(&tbar[2], X_Y(30, 16), X_Y(10, 16), image_data_rgb, image_data_rgb + icon_rgb_size, image_data_rgb + icon_rgb_size * 2, 24, NULL, 0)); |
statictext labels[3]; // tips |
gui_add_statictext(main_window, kolibri_statictext_def(&labels[0], X_Y(5, 28), "Open")); |
gui_add_statictext(main_window, kolibri_statictext_def(&labels[1], X_Y(20, 28), "Save")); |
gui_add_statictext(main_window, kolibri_statictext_def(&labels[2], X_Y(30, 28), "Select Dir")); |
open_dialog *dlg_opensave = kolibri_new_open_dialog(OPEN, 10, 10, 420, 320); |
(*OpenDialog_init)(dlg_opensave); |
pathview pview; |
gui_add_pathview(main_window, kolibri_pathview(&pview, X_Y(10, 40), 330, 0, 0, dlg_opensave->openfile_path, temp_path, 0, 0)); // black font, no background |
do /* Start of main activity loop */ |
{ |
switch(gui_event) |
{ |
case KOLIBRI_EVENT_REDRAW: |
kolibri_handle_event_redraw(main_window); |
break; |
case KOLIBRI_EVENT_NONE: |
break; |
case KOLIBRI_EVENT_KEY: |
keypress = get_key(); |
kolibri_handle_event_key(main_window); |
break; |
case KOLIBRI_EVENT_BUTTON: |
pressed_button = get_os_button(); |
switch (pressed_button) |
{ |
case BTN_QUIT: |
return 0; |
break; |
} |
break; |
case KOLIBRI_EVENT_MOUSE: |
// mouse_pos = get_mouse_pos(POS_WINDOW); // window relative |
// mouse_button = get_mouse_eventstate(); |
kolibri_handle_event_mouse(main_window); |
if(tbar[0].click) // open |
{ |
tbar[0].click = 0; |
dlg_opensave->mode = OPEN; |
(*OpenDialog_start)(dlg_opensave); |
if (dlg_opensave->status != 2 && dlg_opensave->status != 1) // fail or cancel |
(*path_show_prepare)(&pview); |
kolibri_handle_event_redraw(main_window); |
} |
if(tbar[1].click) // save |
{ |
tbar[1].click = 0; |
dlg_opensave->mode = SAVE; |
(*OpenDialog_start)(dlg_opensave); |
if (dlg_opensave->status != 2 && dlg_opensave->status != 1) // fail or cancel |
(*path_show_prepare)(&pview); |
kolibri_handle_event_redraw(main_window); |
} |
if(tbar[2].click) // select |
{ |
tbar[2].click = 0; |
dlg_opensave->mode = SELECT; |
(*OpenDialog_start)(dlg_opensave); |
if (dlg_opensave->status != 2 && dlg_opensave->status != 1) // fail or cancel |
(*path_show_prepare)(&pview); |
kolibri_handle_event_redraw(main_window); |
} |
break; |
} |
gui_event = get_os_event(); |
} while(1) ; /* End of main activity loop */ |
return 0; |
} |
/contrib/C_Layer/EXAMPLE/libguic_kolibri/scroll_progress.c |
---|
107,7 → 107,7 |
switch(gui_event) |
{ |
case KOLIBRI_EVENT_REDRAW: |
sbh->all_redraw = sbv->all_redraw = 1; // resetted |
sbh->all_redraw = sbv->all_redraw = 1; // resetted by sbar |
kolibri_handle_event_redraw(main_window); |
valuechange = 0; |
break; |
163,6 → 163,7 |
// mouse_button = get_mouse_eventstate(); |
// add logic to find widget under mouse |
kolibri_handle_event_mouse(main_window); |
// we can optimize a lot, if sb->delta2 == 1 then call sb->mouse() and redraw only if sb->redraw with flag all_redraw = 0 (only runner). Then reset redraw. OMG ( |
if (sbh->position != value) // scrollbars was changed |
{ |
value = sbh->position; |
/contrib/C_Layer/INCLUDE/kolibri_colordialog.h |
---|
43,6 → 43,7 |
return new_colordialog; |
} |
extern void kolibri_proclib_init() __attribute__((__stdcall__)); |
extern void (*ColorDialog_init)(color_dialog *) __attribute__((__stdcall__)); |
extern void (*ColorDialog_start)(color_dialog *) __attribute__((__stdcall__)); |
#endif /* KOLIBRI_COLORDIALOG_H */ |
/contrib/C_Layer/INCLUDE/kolibri_d_button.h |
---|
0,0 → 1,52 |
#ifndef KOLIBRI_DBUTTON_H |
#define KOLIBRI_DBUTTON_H |
typedef struct { |
uint32_t type; |
uint32_t x_w; |
uint32_t y_h; |
uint32_t mouse_pos; |
uint32_t mouse_keys; |
uint32_t mouse_keys_old; |
void* active_raw; //active bitmap |
void* passive_raw; //passive bitmap |
void* click_raw; //pressed bitmap |
uint32_t resolution_raw; // bpp, as esi fn65 |
void* palette_raw; // palette, as edi fn65 |
uint32_t offset_raw; // width as ebp fn65 |
uint32_t select; // internal state: 0 - passive, 2 - pressed, 1 - clicked |
uint32_t click; // clicked - 1, zero it after tested |
} pict_button; |
inline pict_button* kolibri_pict_button(pict_button* b, uint32_t x_w, uint32_t y_h, void* active_pict, void* passive_pict, void* pressed_pict, uint32_t bpp, void* palette, int32_t offset_line) |
{ |
b->type = b->mouse_pos = b->mouse_keys = b->mouse_keys_old = b->select = b->click = 0; |
b->x_w = x_w; |
b->y_h = y_h; |
b->active_raw = active_pict; |
b->passive_raw = passive_pict; |
b->click_raw = pressed_pict; |
b->resolution_raw = bpp; |
b->palette_raw = palette; |
b->offset_raw = offset_line; |
return b; |
} |
inline pict_button* kolibri_new_pict_button(uint32_t x_w, uint32_t y_h, void* active_pict, void* passive_pict, void* pressed_pict, uint32_t bpp, void* palette, int32_t offset_line) |
{ |
pict_button *new_d_but = (pict_button *)malloc(sizeof(pict_button)); |
return kolibri_pict_button(new_d_but, x_w, y_h, active_pict, passive_pict, pressed_pict, bpp, palette, offset_line); |
} |
inline void gui_add_pict_button(kolibri_window *wnd, pict_button* db) |
{ |
kolibri_window_add_element(wnd, KOLIBRI_D_BUTTON, db); |
} |
extern void (*dynamic_button_draw)(pict_button *) __attribute__((__stdcall__)); |
extern void (*dynamic_button_mouse)(pict_button *) __attribute__((__stdcall__)); |
#endif /* KOLIBRI_DBUTTON_H */ |
/contrib/C_Layer/INCLUDE/kolibri_gui_elements.h |
---|
21,8 → 21,9 |
KOLIBRI_PROGRESS_BAR, |
KOLIBRI_STATICTEXT, |
KOLIBRI_STATICNUM, |
KOLIBRI_BUTTON, |
KOLIBRI_D_BUTTON, |
KOLIBRI_PATHSHOW, |
/* Add elements above this element in order to let KOLIBRI_NUM_GUI_ELEMENTS */ |
/* stay at correct value */ |
65,19 → 66,22 |
void kolibri_window_add_element(kolibri_window *some_window, enum KOLIBRI_GUI_ELEMENT_TYPE element_type, void *some_gui_element); // forward declaration |
/* GUI Elements being used */ |
#include "kolibri_button.h" |
#include "kolibri_checkbox.h" |
#include "kolibri_d_button.h" |
#include "kolibri_editbox.h" |
#include "kolibri_checkbox.h" |
#include "kolibri_button.h" |
#include "kolibri_frame.h" |
#include "kolibri_menubar.h" |
#include "kolibri_optionbox.h" |
#include "kolibri_pathshow.h" |
#include "kolibri_progressbar.h" |
#include "kolibri_frame.h" |
#include "kolibri_scrollbar.h" |
#include "kolibri_statictext.h" |
#include "kolibri_optionbox.h" |
#include "kolibri_menubar.h" |
/*---------------------Define various functions for initializing GUI-------*/ |
/* Master table containing operations for various GUI elements in one place */ |
135,7 → 139,15 |
kolibri_gui_op_table[KOLIBRI_MENU_BAR].mouse_fn = (cb_elem_boxlib)menu_bar_mouse; |
kolibri_gui_op_table[KOLIBRI_MENU_BAR].key_fn = NULL; |
debug_board_printf("KOLIBRI_MENU_BAR (%x,%x,%x)\n", menu_bar_draw,menu_bar_mouse,menu_bar_activate); |
kolibri_gui_op_table[KOLIBRI_D_BUTTON].redraw_fn = (cb_elem_boxlib)dynamic_button_draw; |
kolibri_gui_op_table[KOLIBRI_D_BUTTON].mouse_fn = (cb_elem_boxlib)dynamic_button_mouse; |
kolibri_gui_op_table[KOLIBRI_D_BUTTON].key_fn = NULL; |
debug_board_printf("KOLIBRI_D_BUTTON (%x,%x,%x)\n", dynamic_button_draw, dynamic_button_mouse, 0); |
kolibri_gui_op_table[KOLIBRI_PATHSHOW].redraw_fn = (cb_elem_boxlib)path_show_draw; |
kolibri_gui_op_table[KOLIBRI_PATHSHOW].mouse_fn = NULL; |
kolibri_gui_op_table[KOLIBRI_PATHSHOW].key_fn = NULL; |
debug_board_printf("KOLIBRI_PATHSHOW (%x,%x,%x)\n", path_show_draw, 0, 0); |
} |
/* Create a new main GUI window for KolibriOS */ |
/contrib/C_Layer/INCLUDE/kolibri_opendialog.h |
---|
5,19 → 5,30 |
char sz_dir_default_path[] = "/rd/1"; |
char sz_start_path[] = "/rd/1/File managers/opendial"; |
enum open_dialog_mode { |
OPEN, |
SAVE, |
SELECT |
}; |
typedef struct { |
unsigned int size; |
unsigned char end; |
}od_filter; |
typedef struct { |
unsigned int mode; |
unsigned int procinfo; |
unsigned int com_area_name; |
char* procinfo; |
char* com_area_name; |
unsigned int com_area; |
unsigned int opendir_path; |
unsigned int dir_default_path; |
unsigned int start_path; |
unsigned int draw_window; |
char* opendir_path; |
char* dir_default_path; |
char* start_path; |
void (*draw_window)(); |
unsigned int status; |
unsigned int openfile_path; |
unsigned int filename_area; |
unsigned int filter_area; |
char* openfile_path; |
char* filename_area; |
od_filter* filter_area; |
unsigned short x_size; |
unsigned short x_start; |
unsigned short y_size; |
24,14 → 35,9 |
unsigned short y_start; |
}open_dialog; |
typedef struct { |
unsigned int size; |
unsigned char end; |
}od_filter; |
void fake_on_redraw(void) {} |
struct open_dialog* kolibri_new_open_dialog(unsigned int mode, unsigned short tlx, unsigned short tly, unsigned short x_size, unsigned short y_size) |
open_dialog* kolibri_new_open_dialog(unsigned int mode, unsigned short tlx, unsigned short tly, unsigned short x_size, unsigned short y_size) |
{ |
open_dialog *new_opendialog = (open_dialog *)malloc(sizeof(open_dialog)); |
od_filter *new_od_filter = (od_filter *)malloc(sizeof(od_filter)); |
45,11 → 51,11 |
new_opendialog -> mode = mode; |
new_opendialog -> procinfo = proc_info; |
new_opendialog -> com_area_name = &sz_com_area_name; |
new_opendialog -> com_area_name = sz_com_area_name; |
new_opendialog -> com_area = 0; |
new_opendialog -> opendir_path = plugin_path; |
new_opendialog -> dir_default_path = &sz_dir_default_path; |
new_opendialog -> start_path = &sz_start_path; |
new_opendialog -> dir_default_path = sz_dir_default_path; |
new_opendialog -> start_path = sz_start_path; |
new_opendialog -> draw_window = &fake_on_redraw; |
new_opendialog -> status = 0; |
new_opendialog -> openfile_path = openfile_path; |
62,6 → 68,7 |
return new_opendialog; |
} |
extern void kolibri_proclib_init(); |
extern void (*OpenDialog_init)(open_dialog *) __attribute__((__stdcall__)); |
extern void (*OpenDialog_start)(open_dialog *) __attribute__((__stdcall__)); |
#endif /* KOLIBRI_OPENDIALOG_H */ |
/contrib/C_Layer/INCLUDE/kolibri_pathshow.h |
---|
0,0 → 1,51 |
#ifndef KOLIBRI_PATHSHOW_H |
#define KOLIBRI_PATHSHOW_H |
typedef struct { |
uint32_t type; |
uint32_t x_y; |
uint16_t font_size_x; // 6 - for font 0, 8 - for font 1 |
uint16_t area_size_x; |
uint32_t font_number; // 0 - monospace, 1 - variable, as fn4 (2bit only 0-3) |
uint32_t background_flag; // as fn4, if 0, bk_color unneeded |
color_t font_color; // as fn4 |
color_t background_color; // as fn4 |
char* text_pointer; // 4096 ? |
char* work_area_pointer; // 4096 ? |
uint32_t temp_text_length; |
} pathview; |
inline pathview* kolibri_pathview(pathview* p, uint32_t x_y, uint32_t width, uint32_t font_number, uint32_t is_bkgr, char* text, char* temp_buf, color_t font, color_t bkgr) |
{ |
p->type = p->temp_text_length = 0; |
p->x_y = x_y; |
p->font_size_x = font_number == 0 ? 6 : 8; // need correction for bigger fonts |
p->area_size_x = width; |
p->font_number = font_number; |
p->background_flag = is_bkgr; |
p->text_pointer = text; |
p->work_area_pointer = temp_buf; |
p->font_color = font; |
p->background_color = bkgr; |
return p; |
} |
inline pathview* kolibri_new_pathview(pathview* p, uint32_t x_y, uint32_t width, uint32_t font_number, uint32_t is_bkgr, char* text, char* temp_buf, color_t font, color_t bkgr) |
{ |
pathview *new_pv = (pathview *)malloc(sizeof(pathview)); |
return kolibri_pathview(new_pv, x_y, width, font_number, is_bkgr, text, temp_buf, font, bkgr); |
} |
inline void gui_add_pathview(kolibri_window *wnd, pathview* pv) |
{ |
kolibri_window_add_element(wnd, KOLIBRI_PATHSHOW, pv); |
} |
extern void (*path_show_prepare)(pathview *) __attribute__((__stdcall__)); |
extern void (*path_show_draw)(pathview *) __attribute__((__stdcall__)); |
#endif /* KOLIBRI_PATHSHOW_H */ |
/contrib/C_Layer/INCLUDE/kolibri_statictext.h |
---|
66,6 → 66,13 |
:); |
} |
inline void gui_add_statictext(kolibri_window *wnd, statictext* st) |
{ |
kolibri_window_add_element(wnd, KOLIBRI_STATICTEXT, st); |
} |
staticnum* kolibri_staticnum(staticnum* st, uint32_t xy, int32_t width, int16_t number, encoding_t enc, int size, color_t font, color_t bg) |
{ |
st->start_xy = xy; |
97,6 → 104,12 |
return kolibri_new_staticnum(xy, width, number, cp866, 0, kolibri_color_table.color_work_text, 0); |
} |
inline void gui_add_staticnum(kolibri_window *wnd, staticnum* sn) |
{ |
kolibri_window_add_element(wnd, KOLIBRI_STATICNUM, sn); |
} |
__attribute__((__stdcall__)) |
void staticnum_draw(staticnum *st) |
{ |