From 642eb2678fa496d8f18777c4b156e1d4b97b22c3 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Thu, 23 Aug 2007 04:28:20 +0000 Subject: [PATCH] Separated implementation of GtkAssistant --- src/callbacks.c | 181 +-------------------------------------- src/gtkassistant.c | 208 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 209 insertions(+), 180 deletions(-) create mode 100644 src/gtkassistant.c diff --git a/src/callbacks.c b/src/callbacks.c index 93b85ca..2a1d0f2 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -376,31 +376,8 @@ typedef struct _AccountData static GtkWidget * _assistant_account_select(AccountData * ad); static GtkWidget * _assistant_account_config(AccountConfig * config); -/* GtkAssistant implementation */ #if !GTK_CHECK_VERSION(2, 10, 0) -/* macros */ -# define GTK_ASSISTANT(widget) (widget) - -/* types */ -typedef enum _GtkAssistantPageType -{ - GTK_ASSISTANT_PAGE_CONTENT, - GTK_ASSISTANT_PAGE_INTRO, - GTK_ASSISTANT_PAGE_CONFIRM, - GTK_ASSISTANT_PAGE_SUMMARY, - GTK_ASSISTANT_PAGE_PROGRESS -} GtkAssistantPageType; - -/* functions */ -static GtkWidget * gtk_assistant_new(void); -static gint gtk_assistant_get_current_page(GtkWidget * widget); -static gint gtk_assistant_append_page(GtkWidget * widget, GtkWidget * page); -static void gtk_assistant_set_page_type(GtkWidget * widget, GtkWidget * page, - GtkAssistantPageType type); -static void gtk_assistant_set_page_title(GtkWidget * widget, GtkWidget * page, - const gchar * title); -static void gtk_assistant_set_page_complete(GtkWidget * widget, - GtkWidget * page, gboolean complete); +# include "gtkassistant.c" #endif static void _on_assistant_cancel(GtkWidget * widget, gpointer data); static void _on_assistant_close(GtkWidget * widget, gpointer data); @@ -471,162 +448,6 @@ void on_account_new(GtkWidget * widget, gpointer data) gtk_widget_show(assistant); } -#if !GTK_CHECK_VERSION(2, 10, 0) -/* types */ -typedef struct _GtkAssistant -{ - GtkWidget * window; - GtkWidget * frame; - GtkWidget * label; - GtkWidget ** page; - unsigned int page_cnt; - unsigned int page_cur; -} GtkAssistant; - -/* functions */ -/* gtk_assistant_new */ -static int _gtkassistant_error(char const * message, int ret); -static gboolean _on_gtkassistant_closex(GtkWidget * widget, GdkEvent * event, - gpointer data); -static void _on_gtkassistant_cancel(GtkWidget * widget, gpointer data); -static void _on_gtkassistant_forward(GtkWidget * widget, gpointer data); -static void _on_gtkassistant_back(GtkWidget * widget, gpointer data); - -static GtkWidget * gtk_assistant_new(void) -{ - GtkAssistant * assistant; - GtkWidget * window; - GtkWidget * frame; - GtkWidget * vbox; - GtkWidget * widget; - GtkWidget * hbox; - - if((assistant = calloc(1, sizeof(*assistant))) == NULL) - _gtkassistant_error("out of memory", 0); - window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_container_set_border_width(GTK_CONTAINER(window), 4); - gtk_window_set_resizable(GTK_WINDOW(window), FALSE); - g_object_set_data(G_OBJECT(window), "assistant", assistant); - g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK( - _on_gtkassistant_closex), assistant); - vbox = gtk_vbox_new(FALSE, 4); - /* frame */ - frame = gtk_frame_new(""); - gtk_widget_show(frame); - gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); - /* navigation buttons */ - hbox = gtk_hbox_new(FALSE, 4); - widget = gtk_button_new_from_stock(GTK_STOCK_GO_FORWARD); - g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK( - _on_gtkassistant_forward), assistant); - gtk_widget_show(widget); - gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 0); - widget = gtk_button_new_from_stock(GTK_STOCK_GO_BACK); - g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK( - _on_gtkassistant_back), assistant); - gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 0); - widget = gtk_button_new_from_stock(GTK_STOCK_CANCEL); - g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK( - _on_gtkassistant_cancel), assistant); - gtk_widget_show(widget); - gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 0); - gtk_widget_show(hbox); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show(vbox); - gtk_container_add(GTK_CONTAINER(window), vbox); - if(assistant == NULL) - return window; - assistant->window = window; - assistant->frame = frame; - assistant->label = gtk_frame_get_label_widget(GTK_FRAME(frame)); - return window; -} - -static int _gtkassistant_error(char const * message, int ret) -{ - fprintf(stderr, "%s%s%s", "*** GtkAssistant wrapper ", message, - " ***\n"); - return ret; -} - -static gboolean _on_gtkassistant_closex(GtkWidget * widget, GdkEvent * event, - gpointer data) -{ - _on_gtkassistant_cancel(NULL, data); - return TRUE; -} - -static void _on_gtkassistant_cancel(GtkWidget * widget, gpointer data) -{ - GtkAssistant * assistant = data; - - /* FIXME signals to handle? */ - gtk_widget_destroy(assistant->window); - free(assistant->page); - free(assistant); -} - -static void _on_gtkassistant_forward(GtkWidget * widget, gpointer data) -{ - GtkAssistant * assistant = data; - - /* FIXME */ -} - -static void _on_gtkassistant_back(GtkWidget * widget, gpointer data) -{ - GtkAssistant * assistant = data; - - /* FIXME */ -} - - -static gint gtk_assistant_get_current_page(GtkWidget * widget) -{ - /* FIXME */ -} - - -static gint gtk_assistant_append_page(GtkWidget * widget, GtkWidget * page) -{ - GtkAssistant * assistant; - GtkWidget ** p; - - if((assistant = g_object_get_data(G_OBJECT(widget), "assistant")) - == NULL) - return _gtkassistant_error("data not found", -1); - if((p = realloc(assistant->page, sizeof(*p) * (assistant->page_cnt+1))) - == NULL) - return _gtkassistant_error(strerror(errno), -1); - assistant->page = p; - assistant->page[assistant->page_cnt] = page; - if(assistant->page_cnt == 0) - gtk_container_add(GTK_CONTAINER(assistant->frame), page); - gtk_widget_show(page); - return assistant->page_cnt++; -} - - -static void gtk_assistant_set_page_type(GtkWidget * widget, GtkWidget * page, - GtkAssistantPageType type) -{ - /* FIXME */ -} - - -static void gtk_assistant_set_page_title(GtkWidget * widget, GtkWidget * page, - const gchar * title) -{ - /* FIXME */ -} - - -static void gtk_assistant_set_page_complete(GtkWidget * widget, - GtkWidget * page, gboolean complete) -{ - /* FIXME */ -} -#endif static void _on_assistant_cancel(GtkWidget * widget, gpointer data) { diff --git a/src/gtkassistant.c b/src/gtkassistant.c new file mode 100644 index 0000000..c16927d --- /dev/null +++ b/src/gtkassistant.c @@ -0,0 +1,208 @@ +/* $Id$ */ +/* Copyright (c) 2007 Pierre Pronchery */ +/* This file is part of DeforaOS Desktop Mailer */ +/* Mailer is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License version 2 as published by the Free + * Software Foundation. + * + * Mailer is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * Mailer; if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA */ + + + + +/* GtkAssistant */ +/* macros */ +# define GTK_ASSISTANT(widget) (widget) + +/* types */ +typedef struct _GtkAssistant +{ + GtkWidget * window; + GtkWidget * frame; + GtkWidget * label; + GtkWidget ** page; + unsigned int page_cnt; + unsigned int page_cur; +} GtkAssistant; + +typedef enum _GtkAssistantPageType +{ + GTK_ASSISTANT_PAGE_CONTENT, + GTK_ASSISTANT_PAGE_INTRO, + GTK_ASSISTANT_PAGE_CONFIRM, + GTK_ASSISTANT_PAGE_SUMMARY, + GTK_ASSISTANT_PAGE_PROGRESS +} GtkAssistantPageType; + + +/* functions */ +static GtkWidget * gtk_assistant_new(void); +static gint gtk_assistant_get_current_page(GtkWidget * widget); +static gint gtk_assistant_append_page(GtkWidget * widget, GtkWidget * page); +static void gtk_assistant_set_page_type(GtkWidget * widget, GtkWidget * page, + GtkAssistantPageType type); +static void gtk_assistant_set_page_title(GtkWidget * widget, GtkWidget * page, + const gchar * title); +static void gtk_assistant_set_page_complete(GtkWidget * widget, + GtkWidget * page, gboolean complete); + +/* useful */ +static int _gtkassistant_error(char const * message, int ret); + +/* callbacks */ +static gboolean _on_gtkassistant_closex(GtkWidget * widget, GdkEvent * event, + gpointer data); +static void _on_gtkassistant_cancel(GtkWidget * widget, gpointer data); +static void _on_gtkassistant_forward(GtkWidget * widget, gpointer data); +static void _on_gtkassistant_back(GtkWidget * widget, gpointer data); + + +/* functions */ +/* gtk_assistant_new */ +static GtkWidget * gtk_assistant_new(void) +{ + GtkAssistant * assistant; + GtkWidget * window; + GtkWidget * frame; + GtkWidget * vbox; + GtkWidget * widget; + GtkWidget * hbox; + + if((assistant = calloc(1, sizeof(*assistant))) == NULL) + _gtkassistant_error("out of memory", 0); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_container_set_border_width(GTK_CONTAINER(window), 4); + gtk_window_set_resizable(GTK_WINDOW(window), FALSE); + g_object_set_data(G_OBJECT(window), "assistant", assistant); + g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK( + _on_gtkassistant_closex), assistant); + vbox = gtk_vbox_new(FALSE, 4); + /* frame */ + frame = gtk_frame_new(""); + gtk_widget_show(frame); + gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); + /* navigation buttons */ + hbox = gtk_hbox_new(FALSE, 4); + widget = gtk_button_new_from_stock(GTK_STOCK_GO_FORWARD); + g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK( + _on_gtkassistant_forward), assistant); + gtk_widget_show(widget); + gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 0); + widget = gtk_button_new_from_stock(GTK_STOCK_GO_BACK); + g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK( + _on_gtkassistant_back), assistant); + gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 0); + widget = gtk_button_new_from_stock(GTK_STOCK_CANCEL); + g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK( + _on_gtkassistant_cancel), assistant); + gtk_widget_show(widget); + gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 0); + gtk_widget_show(hbox); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + gtk_widget_show(vbox); + gtk_container_add(GTK_CONTAINER(window), vbox); + if(assistant == NULL) + return window; + assistant->window = window; + assistant->frame = frame; + assistant->label = gtk_frame_get_label_widget(GTK_FRAME(frame)); + return window; +} + + +/* useful */ +static int _gtkassistant_error(char const * message, int ret) +{ + fprintf(stderr, "%s%s%s", "*** GtkAssistant wrapper ", message, + " ***\n"); + return ret; +} + + +/* callbacks */ +static gboolean _on_gtkassistant_closex(GtkWidget * widget, GdkEvent * event, + gpointer data) +{ + _on_gtkassistant_cancel(NULL, data); + return TRUE; +} + + +static void _on_gtkassistant_cancel(GtkWidget * widget, gpointer data) +{ + GtkAssistant * assistant = data; + + /* FIXME signals to handle? */ + gtk_widget_destroy(assistant->window); + free(assistant->page); + free(assistant); +} + + +static void _on_gtkassistant_forward(GtkWidget * widget, gpointer data) +{ + GtkAssistant * assistant = data; + + /* FIXME */ +} + + +static void _on_gtkassistant_back(GtkWidget * widget, gpointer data) +{ + GtkAssistant * assistant = data; + + /* FIXME */ +} + + +static gint gtk_assistant_get_current_page(GtkWidget * widget) +{ + /* FIXME */ +} + + +static gint gtk_assistant_append_page(GtkWidget * widget, GtkWidget * page) +{ + GtkAssistant * assistant; + GtkWidget ** p; + + if((assistant = g_object_get_data(G_OBJECT(widget), "assistant")) + == NULL) + return _gtkassistant_error("data not found", -1); + if((p = realloc(assistant->page, sizeof(*p) * (assistant->page_cnt+1))) + == NULL) + return _gtkassistant_error(strerror(errno), -1); + assistant->page = p; + assistant->page[assistant->page_cnt] = page; + if(assistant->page_cnt == 0) + gtk_container_add(GTK_CONTAINER(assistant->frame), page); + gtk_widget_show(page); + return assistant->page_cnt++; +} + + +static void gtk_assistant_set_page_type(GtkWidget * widget, GtkWidget * page, + GtkAssistantPageType type) +{ + /* FIXME */ +} + + +static void gtk_assistant_set_page_title(GtkWidget * widget, GtkWidget * page, + const gchar * title) +{ + /* FIXME */ +} + + +static void gtk_assistant_set_page_complete(GtkWidget * widget, + GtkWidget * page, gboolean complete) +{ + /* FIXME */ +}