30 #include <stdlib.h> |
30 #include <stdlib.h> |
31 #include <string.h> |
31 #include <string.h> |
32 |
32 |
33 #include "toolkit.h" |
33 #include "toolkit.h" |
34 #include "toolbar.h" |
34 #include "toolbar.h" |
|
35 #include "model.h" |
|
36 #include "image.h" |
35 #include "../common/document.h" |
37 #include "../common/document.h" |
36 #include "../common/properties.h" |
38 #include "../common/properties.h" |
|
39 |
|
40 #include <pthread.h> |
37 |
41 |
38 static char *application_name; |
42 static char *application_name; |
39 |
43 |
40 static ui_callback appclose_fnc; |
44 static ui_callback appclose_fnc; |
41 static void *appclose_udata; |
45 static void *appclose_udata; |
|
46 |
|
47 static UiObject *active_window; |
42 |
48 |
43 void ui_init(char *appname, int argc, char **argv) { |
49 void ui_init(char *appname, int argc, char **argv) { |
44 gtk_init(&argc, &argv); |
50 gtk_init(&argc, &argv); |
45 application_name = appname; |
51 application_name = appname; |
46 |
52 |
47 uic_docmgr_init(); |
53 uic_docmgr_init(); |
48 ui_toolbar_init(); |
54 ui_toolbar_init(); |
49 |
55 |
50 // init custom types |
56 // init custom types |
51 //ui_list_init(); |
57 ui_list_init(); |
|
58 |
|
59 ui_image_init(); |
52 |
60 |
53 uic_load_app_properties(); |
61 uic_load_app_properties(); |
54 } |
62 } |
55 |
63 |
56 char* ui_appname() { |
64 char* ui_appname() { |
57 return application_name; |
65 return application_name; |
58 } |
66 } |
59 |
67 |
60 void ui_exitfunc(ui_callback f, void *udata) { |
68 void ui_exitfunc(ui_callback f, void *userdata) { |
61 appclose_fnc = f; |
69 appclose_fnc = f; |
62 appclose_udata = udata; |
70 appclose_udata = userdata; |
63 } |
71 } |
64 |
72 |
65 void ui_openfilefunc(ui_callback f, void *userdata) { |
73 void ui_openfilefunc(ui_callback f, void *userdata) { |
66 // OS X only |
74 // OS X only |
67 } |
75 } |
77 void ui_show(UiObject *obj) { |
85 void ui_show(UiObject *obj) { |
78 uic_check_group_widgets(obj->ctx); |
86 uic_check_group_widgets(obj->ctx); |
79 gtk_widget_show_all(obj->widget); |
87 gtk_widget_show_all(obj->widget); |
80 } |
88 } |
81 |
89 |
|
90 void ui_close(UiObject *obj) { |
|
91 gtk_widget_destroy(obj->widget); |
|
92 } |
|
93 |
|
94 |
|
95 static gboolean ui_job_finished(void *data) { |
|
96 UiJob *job = data; |
|
97 |
|
98 UiEvent event; |
|
99 event.obj = job->obj; |
|
100 event.window = job->obj->window; |
|
101 event.document = job->obj->document; |
|
102 event.intval = 0; |
|
103 event.eventdata = NULL; |
|
104 |
|
105 job->finish_callback(&event, job->finish_data); |
|
106 free(job); |
|
107 return FALSE; |
|
108 } |
|
109 |
|
110 static void* ui_jobthread(void *data) { |
|
111 UiJob *job = data; |
|
112 int result = job->job_func(job->job_data); |
|
113 if(!result) { |
|
114 g_idle_add(ui_job_finished, job); |
|
115 } |
|
116 } |
|
117 |
|
118 void ui_job(UiObject *obj, ui_threadfunc tf, void *td, ui_callback f, void *fd) { |
|
119 UiJob *job = malloc(sizeof(UiJob)); |
|
120 job->obj = obj; |
|
121 job->job_func = tf; |
|
122 job->job_data = td; |
|
123 job->finish_callback = f; |
|
124 job->finish_data = fd; |
|
125 pthread_t pid; |
|
126 pthread_create(&pid, NULL, ui_jobthread, job); |
|
127 } |
|
128 |
82 void ui_set_enabled(UIWIDGET widget, int enabled) { |
129 void ui_set_enabled(UIWIDGET widget, int enabled) { |
83 gtk_widget_set_sensitive(widget, enabled); |
130 gtk_widget_set_sensitive(widget, enabled); |
|
131 } |
|
132 |
|
133 void ui_set_show_all(UIWIDGET widget, int value) { |
|
134 gtk_widget_set_no_show_all(widget, !value); |
|
135 } |
|
136 |
|
137 void ui_set_visible(UIWIDGET widget, int visible) { |
|
138 if(visible) { |
|
139 gtk_widget_set_no_show_all(widget, FALSE); |
|
140 gtk_widget_show_all(widget); |
|
141 } else { |
|
142 gtk_widget_hide(widget); |
|
143 } |
84 } |
144 } |
85 |
145 |
86 void ui_clipboard_set(char *str) { |
146 void ui_clipboard_set(char *str) { |
87 GtkClipboard *cb = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); |
147 GtkClipboard *cb = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); |
88 gtk_clipboard_set_text(cb, str, strlen(str)); |
148 gtk_clipboard_set_text(cb, str, strlen(str)); |