1 /***************************************************************************
4 * Wed Nov 18 10:46:06 2009
5 * Copyright 2009 Marcin Miklas
6 * <marcin.miklas@teleca.com>
7 ****************************************************************************/
10 #include <string.h> // for strlen
11 #include <netinet/in.h>
18 GtkWidget* g_image = NULL;
19 GtkWidget* g_text_view = NULL;
23 GtkWidget* mainWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
25 gtk_window_set_default_size(GTK_WINDOW(mainWindow), 400, 300);
26 gtk_window_set_title(GTK_WINDOW(mainWindow), "NoTA Application");
27 gtk_window_set_position(GTK_WINDOW(mainWindow), GTK_WIN_POS_CENTER_ALWAYS);
29 gtk_signal_connect(GTK_OBJECT(mainWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
31 GtkWidget *vbox = gtk_vbox_new(FALSE,2);
32 gtk_container_add(GTK_CONTAINER(mainWindow),vbox);
34 g_text_view = gtk_text_view_new();
35 gtk_text_view_set_editable(GTK_TEXT_VIEW(g_text_view),FALSE);
36 gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(g_text_view),FALSE);
38 GtkWidget* swindow = gtk_scrolled_window_new (NULL, NULL);
39 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
41 GTK_POLICY_AUTOMATIC);
42 gtk_container_add(GTK_CONTAINER(swindow), g_text_view);
44 g_image = gtk_image_new();
45 GdkPixbuf* pixbuf = gtk_widget_render_icon(GTK_WIDGET(g_image),GTK_STOCK_MISSING_IMAGE,GTK_ICON_SIZE_DIALOG, NULL);
46 gtk_image_set_from_pixbuf(GTK_IMAGE(g_image),pixbuf);
48 gtk_box_pack_end(GTK_BOX(vbox), swindow, TRUE, TRUE, 0);
49 gtk_box_pack_end(GTK_BOX(vbox),g_image,TRUE,TRUE,0);
51 gtk_widget_show_all(mainWindow);
54 void gtklog(const char* str) {
55 GtkTextBuffer* text_buffer;
60 text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(g_text_view));
61 gtk_text_buffer_insert_at_cursor(text_buffer,str,strlen(str));
62 gtk_text_buffer_get_end_iter(text_buffer,&iter);
63 gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(g_text_view),&iter,0,FALSE,0,0);
68 void show_image(unsigned char* img_buf,int size) {
71 GdkPixbufLoader* loader = gdk_pixbuf_loader_new();
72 gdk_pixbuf_loader_write(loader,(guchar*)img_buf,size,NULL);
73 gdk_pixbuf_loader_close(loader,NULL);
74 GdkPixbuf* pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
75 gtk_image_set_from_pixbuf(GTK_IMAGE(g_image),pixbuf);
76 g_object_unref(loader);
81 void* app(ServiceCallbacks* cb) {
82 /* Service socket to use for connecting to the service node. */
86 /* The first parameter specifies the service to connect to (SID).
87 * The other parameters are reserved for legacy purposes.
89 sockid = n_connect(DEFAULT_SID, NULL, NULL);
91 /* sockid will be the number of the socket we got (>0), if successful,
92 * or <0 if something went wrong. Let's check:
98 LOG2("Connected socket %d to service '%d'.\n", sockid, DEFAULT_SID);
102 ServiceMessage* smsg = pack_pdu(GET_IMAGE, NULL, 0, &smsg_len);
104 err = n_send(sockid, smsg, smsg_len, HSSendBlocking);
112 int err = read_smsg(&sockid, HSReceiveNonBlocking, cb);
113 if (err < 0) //error reading service message
121 int main(int argc, char *argv[])
123 if (!g_thread_supported()) {
129 gtk_init(&argc, &argv);
133 ServiceCallbacks* cb = g_new0(ServiceCallbacks,1);
135 cb->put_image = &show_image;
136 g_thread_create((GThreadFunc)app,cb,FALSE,NULL);