| 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 |