ui/gtk/toolkit.c

changeset 33
458831c574f4
parent 29
c96169444d88
child 52
25e5390cce41
--- a/ui/gtk/toolkit.c	Sat Apr 12 13:44:53 2014 +0200
+++ b/ui/gtk/toolkit.c	Sat May 10 15:43:22 2014 +0200
@@ -32,14 +32,20 @@
 
 #include "toolkit.h"
 #include "toolbar.h"
+#include "model.h"
+#include "image.h"
 #include "../common/document.h"
 #include "../common/properties.h"
 
+#include <pthread.h>
+
 static char *application_name;
 
 static ui_callback   appclose_fnc;
 static void          *appclose_udata;
 
+static UiObject      *active_window;
+
 void ui_init(char *appname, int argc, char **argv) {
     gtk_init(&argc, &argv);
     application_name = appname;
@@ -48,7 +54,9 @@
     ui_toolbar_init();
     
     // init custom types
-    //ui_list_init();
+    ui_list_init();
+    
+    ui_image_init();
     
     uic_load_app_properties();
 }
@@ -57,9 +65,9 @@
     return application_name;
 }
 
-void ui_exitfunc(ui_callback f, void *udata) {
+void ui_exitfunc(ui_callback f, void *userdata) {
     appclose_fnc = f;
-    appclose_udata = udata;
+    appclose_udata = userdata;
 }
 
 void ui_openfilefunc(ui_callback f, void *userdata) {
@@ -79,10 +87,62 @@
     gtk_widget_show_all(obj->widget);
 }
 
+void ui_close(UiObject *obj) {
+    gtk_widget_destroy(obj->widget);
+}
+
+
+static gboolean ui_job_finished(void *data) {
+    UiJob *job = data;
+    
+    UiEvent event;
+    event.obj = job->obj;
+    event.window = job->obj->window;
+    event.document = job->obj->document;
+    event.intval = 0;
+    event.eventdata = NULL;
+
+    job->finish_callback(&event, job->finish_data);
+    free(job);
+    return FALSE;
+}
+
+static void* ui_jobthread(void *data) {
+    UiJob *job = data;
+    int result = job->job_func(job->job_data);
+    if(!result) {
+        g_idle_add(ui_job_finished, job);
+    }
+}
+
+void ui_job(UiObject *obj, ui_threadfunc tf, void *td, ui_callback f, void *fd) {
+    UiJob *job = malloc(sizeof(UiJob));
+    job->obj = obj;
+    job->job_func = tf;
+    job->job_data = td;
+    job->finish_callback = f;
+    job->finish_data = fd;
+    pthread_t pid;
+    pthread_create(&pid, NULL, ui_jobthread, job);
+}
+
 void ui_set_enabled(UIWIDGET widget, int enabled) {
     gtk_widget_set_sensitive(widget, enabled);
 }
 
+void ui_set_show_all(UIWIDGET widget, int value) {
+    gtk_widget_set_no_show_all(widget, !value);
+}
+
+void ui_set_visible(UIWIDGET widget, int visible) {
+    if(visible) {
+        gtk_widget_set_no_show_all(widget, FALSE);
+        gtk_widget_show_all(widget);
+    } else {
+        gtk_widget_hide(widget);
+    }
+}
+
 void ui_clipboard_set(char *str) {
     GtkClipboard *cb = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
     gtk_clipboard_set_text(cb, str, strlen(str));
@@ -103,3 +163,11 @@
 void ui_destroy_userdata(GtkWidget *object, void *userdata) {
     free(userdata);
 }
+
+void ui_set_active_window(UiObject *obj) {
+    active_window = obj;
+}
+
+UiObject *ui_get_active_window() {
+    return active_window;
+}

mercurial