ui/qt/toolkit.cpp

changeset 103
6606616eca9f
parent 0
2483f517c562
child 108
77254bd6dccb
equal deleted inserted replaced
102:64ded9f6a6c6 103:6606616eca9f
33 #include "window.h" 33 #include "window.h"
34 #include "stock.h" 34 #include "stock.h"
35 35
36 #include "../common/document.h" 36 #include "../common/document.h"
37 #include "../common/properties.h" 37 #include "../common/properties.h"
38 #include "../common/menu.h"
39 #include "../common/toolbar.h"
38 40
39 static char *application_name; 41 static const char *application_name;
40 42
41 static ui_callback appclose_fnc; 43 static ui_callback startup_func;
42 static void *appclose_udata; 44 static void *startup_data;
45 static ui_callback open_func;
46 void *open_data;
47 static ui_callback exit_func;
48 void *exit_data;
43 49
44 //static QApplication app(qargc, qargv); 50 static int is_toplevel_realized = 0;
51
45 int app_argc; 52 int app_argc;
46 char **app_argv; 53 char **app_argv;
47 QApplication *application = NULL; 54 QApplication *application = NULL;
48 55
49 void ui_init(char *appname, int argc, char **argv) { 56 void ui_init(const char *appname, int argc, char **argv) {
50 application_name = appname; 57 application_name = appname;
51 58
52 app_argc = argc; 59 app_argc = argc;
53 app_argv = argv; 60 app_argv = argv;
54 application = new QApplication(app_argc, app_argv); 61 application = new QApplication(app_argc, app_argv);
55 62
56 uic_docmgr_init(); 63 uic_docmgr_init();
64 uic_menu_init();
65 uic_toolbar_init();
57 66
58 uic_load_app_properties(); 67 uic_load_app_properties();
59 68
60 ui_stock_init();
61 } 69 }
62 70
63 char* ui_appname() { 71 const char* ui_appname() {
64 return application_name; 72 return application_name;
65 } 73 }
66 74
67 void ui_exitfunc(ui_callback f, void *udata) { 75 void ui_onstartup(ui_callback f, void *userdata) {
68 appclose_fnc = f; 76 startup_func = f;
69 appclose_udata = udata; 77 startup_data = userdata;
70 } 78 }
71 79
72 void ui_openfilefunc(ui_callback f, void *userdata) { 80 void ui_onopen(ui_callback f, void *userdata) {
73 // OS X only 81 open_func = f;
82 open_data = userdata;
83 }
84
85 void ui_onexit(ui_callback f, void *userdata) {
86 exit_func = f;
87 exit_data = userdata;
74 } 88 }
75 89
76 void ui_main() { 90 void ui_main() {
91 if(startup_func) {
92 startup_func(NULL, startup_data);
93 }
77 application->exec(); 94 application->exec();
78 95 if(exit_func) {
79 if(appclose_fnc) { 96 exit_func(NULL, exit_data);
80 appclose_fnc(NULL, appclose_udata);
81 } 97 }
82 uic_store_app_properties(); 98 uic_store_app_properties();
83 99
84 delete application; 100 delete application;
85 } 101 }
101 117
102 } 118 }
103 119
104 120
105 121
122 /* --------------------- Implemtation UiEventWrapper --------------------- */
106 123
107 UiEventWrapper::UiEventWrapper(UiObject *obj, ui_callback f, void* userdata) { 124 UiEventWrapper::UiEventWrapper(UiObject *obj, ui_callback f, void* userdata) {
108 this->obj = obj; 125 this->obj = obj;
109 this->callback = f; 126 this->callback = f;
110 this->userdata = userdata; 127 this->userdata = userdata;
111 } 128 }
112 129
113 void UiEventWrapper::slot() { 130 void UiEventWrapper::slot() {
131 if(!callback) {
132 return;
133 }
134
114 UiEvent e; 135 UiEvent e;
115 e.obj = obj; 136 e.obj = obj;
116 e.window = obj->window; 137 e.window = obj->window;
117 e.document = obj->ctx->document; 138 e.document = obj->ctx->document;
118 e.eventdata = NULL; 139 e.eventdata = NULL;
119 e.intval = 0; 140 e.intval = 0;
141 e.set = ui_get_setop();
142 if(prepare_event) {
143 prepare_event(&e, this);
144 }
120 callback(&e, userdata); 145 callback(&e, userdata);
146
147 // TODO: notify var observers
121 } 148 }
149
150 void UiEventWrapper::destroy() {
151 delete this;
152 }
153
154
155 /* --------------------- Implemtation UiAction --------------------- */
156
157 UiAction::UiAction(UiObject *obj, QString &label, ui_callback f, void *userdata) : QAction(label, NULL) {
158 this->obj = obj;
159 this->callback = f;
160 this->userdata = userdata;
161 }
162
163 UiAction::~UiAction() {
164 // TODO: unbind var
165 }
166
167 void UiAction::trigger() {
168 if(!callback) {
169 return;
170 }
171
172 UiEvent e;
173 e.obj = obj;
174 e.window = obj->window;
175 e.document = obj->ctx->document;
176 e.eventdata = NULL;
177 e.intval = 0;
178 e.set = ui_get_setop();
179 if(prepare_event) {
180 prepare_event(&e, this);
181 }
182 callback(&e, userdata);
183
184 // TODO: notify var observers
185 }
186
187 // ui_enablefunc for UiAction
188 void ui_action_enable(UiAction *action, int enable) {
189 action->setEnabled((bool)enable);
190 }
191

mercurial