ui/qt/toolkit.cpp

changeset 103
6606616eca9f
parent 0
2483f517c562
child 108
77254bd6dccb
--- 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);
+}
+

mercurial