--- a/ui/qt/toolkit.cpp Tue Feb 25 21:11:00 2025 +0100 +++ b/ui/qt/toolkit.cpp Sat Apr 05 16:46:11 2025 +0200 @@ -35,18 +35,25 @@ #include "../common/document.h" #include "../common/properties.h" +#include "../common/menu.h" +#include "../common/toolbar.h" -static char *application_name; +static const char *application_name; -static ui_callback appclose_fnc; -static void *appclose_udata; +static ui_callback startup_func; +static void *startup_data; +static ui_callback open_func; +void *open_data; +static ui_callback exit_func; +void *exit_data; -//static QApplication app(qargc, qargv); +static int is_toplevel_realized = 0; + int app_argc; char **app_argv; QApplication *application = NULL; -void ui_init(char *appname, int argc, char **argv) { +void ui_init(const char *appname, int argc, char **argv) { application_name = appname; app_argc = argc; @@ -54,30 +61,39 @@ application = new QApplication(app_argc, app_argv); uic_docmgr_init(); + uic_menu_init(); + uic_toolbar_init(); uic_load_app_properties(); - - ui_stock_init(); + } -char* ui_appname() { +const char* ui_appname() { return application_name; } -void ui_exitfunc(ui_callback f, void *udata) { - appclose_fnc = f; - appclose_udata = udata; +void ui_onstartup(ui_callback f, void *userdata) { + startup_func = f; + startup_data = userdata; } -void ui_openfilefunc(ui_callback f, void *userdata) { - // OS X only +void ui_onopen(ui_callback f, void *userdata) { + open_func = f; + open_data = userdata; +} + +void ui_onexit(ui_callback f, void *userdata) { + exit_func = f; + exit_data = userdata; } void ui_main() { + if(startup_func) { + startup_func(NULL, startup_data); + } application->exec(); - - if(appclose_fnc) { - appclose_fnc(NULL, appclose_udata); + if(exit_func) { + exit_func(NULL, exit_data); } uic_store_app_properties(); @@ -103,6 +119,7 @@ +/* --------------------- Implemtation UiEventWrapper --------------------- */ UiEventWrapper::UiEventWrapper(UiObject *obj, ui_callback f, void* userdata) { this->obj = obj; @@ -111,11 +128,64 @@ } void UiEventWrapper::slot() { + if(!callback) { + return; + } + UiEvent e; e.obj = obj; e.window = obj->window; e.document = obj->ctx->document; e.eventdata = NULL; e.intval = 0; + e.set = ui_get_setop(); + if(prepare_event) { + prepare_event(&e, this); + } callback(&e, userdata); + + // TODO: notify var observers } + +void UiEventWrapper::destroy() { + delete this; +} + + +/* --------------------- Implemtation UiAction --------------------- */ + +UiAction::UiAction(UiObject *obj, QString &label, ui_callback f, void *userdata) : QAction(label, NULL) { + this->obj = obj; + this->callback = f; + this->userdata = userdata; +} + +UiAction::~UiAction() { + // TODO: unbind var +} + +void UiAction::trigger() { + if(!callback) { + return; + } + + UiEvent e; + e.obj = obj; + e.window = obj->window; + e.document = obj->ctx->document; + e.eventdata = NULL; + e.intval = 0; + e.set = ui_get_setop(); + if(prepare_event) { + prepare_event(&e, this); + } + callback(&e, userdata); + + // TODO: notify var observers +} + +// ui_enablefunc for UiAction +void ui_action_enable(UiAction *action, int enable) { + action->setEnabled((bool)enable); +} +