From a7468cf0ef84415bfe7c2d0cfcd1eaa00e266a7a Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Thu, 27 Jul 2006 15:56:10 +0000 Subject: [PATCH] * add functions for easily getting various combo boxes * add 'online/offline'-widget, which syncs with the account store * auto_connect is not optional anymore pmo-trunk-r429 --- src/modest-widget-factory.c | 155 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 125 insertions(+), 30 deletions(-) diff --git a/src/modest-widget-factory.c b/src/modest-widget-factory.c index f2853ea..5a9a923 100644 --- a/src/modest-widget-factory.c +++ b/src/modest-widget-factory.c @@ -28,7 +28,8 @@ */ #include "modest-widget-factory.h" -/* include other impl specific header files */ +#include +#include /* 'private'/'protected' functions */ static void modest_widget_factory_class_init (ModestWidgetFactoryClass *klass); @@ -51,6 +52,11 @@ static void on_msg_link_clicked (ModestMsgView *msgview, const gchar* lin static void on_msg_attachment_clicked (ModestMsgView *msgview, int index, ModestWidgetFactory *self); +static void on_connection_changed (TnyDeviceIface *device, gboolean online, + ModestWidgetFactory *self); +static void on_online_toggle_toggled (GtkToggleButton *toggle, ModestWidgetFactory *factory); + + /* list my signals */ enum { /* MY_SIGNAL_1, */ @@ -81,9 +87,8 @@ struct _ModestWidgetFactoryPrivate { GtkWidget *progress_bar; GtkWidget *status_bar; - - gboolean auto_connect; + GtkWidget *online_toggle; StatusID status_bar_ctx[STATUS_ID_NUM]; }; @@ -182,6 +187,45 @@ modest_widget_factory_finalize (GObject *obj) } + +static void +init_signals (ModestWidgetFactory *self) +{ + + TnyDeviceIface *device; + ModestWidgetFactoryPrivate *priv; + + priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); + + g_signal_connect (G_OBJECT(priv->header_view), "message_selected", + G_CALLBACK(on_message_selected), self); + g_signal_connect (G_OBJECT(priv->folder_view), "folder_selected", + G_CALLBACK(on_folder_selected), self); + g_signal_connect (G_OBJECT(priv->header_view), "status_update", + G_CALLBACK(on_header_status_update), self); + g_signal_connect (G_OBJECT(priv->msg_preview), "link_clicked", + G_CALLBACK(on_msg_link_clicked), self); + g_signal_connect (G_OBJECT(priv->msg_preview), "link_hover", + G_CALLBACK(on_msg_link_hover), self); + g_signal_connect (G_OBJECT(priv->msg_preview), "attachment_clicked", + G_CALLBACK(on_msg_attachment_clicked), self); + + /* FIXME: const casting is evil ==> tinymail */ + device = (TnyDeviceIface*)tny_account_store_iface_get_device + (TNY_ACCOUNT_STORE_IFACE(priv->account_store)); + if (device) { + g_signal_connect (G_OBJECT(device), "connection_changed", + G_CALLBACK(on_connection_changed), self); + g_signal_connect (G_OBJECT(priv->online_toggle), "toggled", + G_CALLBACK(on_online_toggle_toggled), self); + + /* init toggle in correct state */ + on_connection_changed (device, + tny_device_iface_is_online (device), + self); + } +} + static gboolean init_widgets (ModestWidgetFactory *self) { @@ -203,28 +247,20 @@ init_widgets (ModestWidgetFactory *self) g_printerr ("modest: cannot instantiate header view\n"); return FALSE; } - + + /* msg preview */ if (!(priv->msg_preview = MODEST_MSG_VIEW(modest_msg_view_new (NULL)))) { g_printerr ("modest: cannot instantiate header view\n"); return FALSE; } - if (priv->auto_connect) { - g_signal_connect (G_OBJECT(priv->header_view), "message_selected", - G_CALLBACK(on_message_selected), self); - g_signal_connect (G_OBJECT(priv->folder_view), "folder_selected", - G_CALLBACK(on_folder_selected), self); - g_signal_connect (G_OBJECT(priv->header_view), "status_update", - G_CALLBACK(on_header_status_update), self); - g_signal_connect (G_OBJECT(priv->msg_preview), "link_clicked", - G_CALLBACK(on_msg_link_clicked), self); - g_signal_connect (G_OBJECT(priv->msg_preview), "link_hover", - G_CALLBACK(on_msg_link_hover), self); - g_signal_connect (G_OBJECT(priv->msg_preview), "attachment_clicked", - G_CALLBACK(on_msg_attachment_clicked), self); - } + /* online/offline combo */ + priv->online_toggle = gtk_toggle_button_new (); + + init_signals (self); + return TRUE; } @@ -232,8 +268,7 @@ init_widgets (ModestWidgetFactory *self) ModestWidgetFactory* modest_widget_factory_new (ModestConf *conf, ModestTnyAccountStore *account_store, - ModestAccountMgr *account_mgr, - gboolean auto_connect) + ModestAccountMgr *account_mgr) { GObject *obj; ModestWidgetFactoryPrivate *priv; @@ -245,8 +280,6 @@ modest_widget_factory_new (ModestConf *conf, obj = g_object_new(MODEST_TYPE_WIDGET_FACTORY, NULL); priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(obj); - priv->auto_connect = auto_connect; - g_object_ref (G_OBJECT(conf)); priv->conf = conf; @@ -322,25 +355,51 @@ modest_widget_factory_get_status_bar (ModestWidgetFactory *self) GtkWidget* -modest_widget_factory_get_store_combo (ModestWidgetFactory *self) +modest_widget_factory_get_combo_box (ModestWidgetFactory *self, ModestComboBoxType type) { - GtkWidget *combo; - GtkListStore *store; + GtkWidget *combo_box; + GtkListStore *model; GtkTreeIter iter; const gchar **protos, **cursor; g_return_val_if_fail (self, NULL); - combo = gtk_combo_box_new_text (); - cursor = protos = modest_proto_store_protos (); + combo_box = gtk_combo_box_new_text (); + + switch (type) { + case MODEST_COMBO_BOX_TYPE_STORE_PROTOS: + cursor = protos = modest_proto_store_protos (); + break; + case MODEST_COMBO_BOX_TYPE_TRANSPORT_PROTOS: + cursor = protos = modest_proto_transport_protos (); + break; + case MODEST_COMBO_BOX_TYPE_SECURITY_PROTOS: + cursor = protos = modest_proto_security_protos (); + break; + case MODEST_COMBO_BOX_TYPE_AUTH_PROTOS: + cursor = protos = modest_proto_auth_protos (); + break; + default: + g_assert_not_reached (); + } while (cursor && *cursor) { - gtk_combo_box_append_text (GTK_COMBO_BOX(combo), + gtk_combo_box_append_text (GTK_COMBO_BOX(combo_box), (const gchar*)*cursor); ++cursor; } - gtk_combo_box_set_active (GTK_COMBO_BOX(combo), 0); + gtk_combo_box_set_active (GTK_COMBO_BOX(combo_box), 0); - return combo; + return combo_box; +} + + + + +GtkWidget* +modest_widget_factory_get_online_toggle (ModestWidgetFactory *self) +{ + g_return_val_if_fail (self, NULL); + return MODEST_WIDGET_FACTORY_GET_PRIVATE(self)->online_toggle; } @@ -437,3 +496,39 @@ on_msg_attachment_clicked (ModestMsgView *msgview, int index, msg); g_free (msg); } + + +static void +on_connection_changed (TnyDeviceIface *device, gboolean online, + ModestWidgetFactory *self) +{ + gint item; + ModestWidgetFactoryPrivate *priv; + + priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(priv->online_toggle), + online); + gtk_button_set_label (GTK_BUTTON(priv->online_toggle), + online ? _("Online") : _("Offline")); +} + + +static void +on_online_toggle_toggled (GtkToggleButton *toggle, ModestWidgetFactory *self) +{ + gboolean online; + const TnyDeviceIface *device; + ModestWidgetFactoryPrivate *priv; + + priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); + online = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(priv->online_toggle)); + device = tny_account_store_iface_get_device + (TNY_ACCOUNT_STORE_IFACE(priv->account_store)); + + /* FIXME: const casting should not be necessary ==> tinymail */ + if (online) /* we're moving to online state */ + tny_device_iface_force_online ((TnyDeviceIface*)device); + else /* we're moving to offline state */ + tny_device_iface_force_offline ((TnyDeviceIface*)device); +} -- 1.7.9.5