1 /* connection-specific-smtp-window.c */
3 #include "modest-connection-specific-smtp-window.h"
4 #include "modest-connection-specific-smtp-edit-window.h"
5 #include <gtk/gtktreeview.h>
6 #include <gtk/gtkcellrenderertext.h>
7 #include <gtk/gtkliststore.h>
8 #include <gtk/gtkscrolledwindow.h>
9 #include <gtk/gtkbutton.h>
10 #include <gtk/gtkhbox.h>
11 #include <gtk/gtkvbox.h>
12 #include <gtk/gtkstock.h>
14 #include <glib/gi18n.h>
16 G_DEFINE_TYPE (ModestConnectionSpecificSmtpWindow, modest_connection_specific_smtp_window, GTK_TYPE_WINDOW);
18 #define CONNECTION_SPECIFIC_SMTP_WINDOW_GET_PRIVATE(o) \
19 (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEST_TYPE_CONNECTION_SPECIFIC_SMTP_WINDOW, ModestConnectionSpecificSmtpWindowPrivate))
21 typedef struct _ModestConnectionSpecificSmtpWindowPrivate ModestConnectionSpecificSmtpWindowPrivate;
23 struct _ModestConnectionSpecificSmtpWindowPrivate
25 GtkTreeView *treeview;
30 modest_connection_specific_smtp_window_get_property (GObject *object, guint property_id,
31 GValue *value, GParamSpec *pspec)
33 switch (property_id) {
35 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
40 modest_connection_specific_smtp_window_set_property (GObject *object, guint property_id,
41 const GValue *value, GParamSpec *pspec)
43 switch (property_id) {
45 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
50 modest_connection_specific_smtp_window_dispose (GObject *object)
52 if (G_OBJECT_CLASS (modest_connection_specific_smtp_window_parent_class)->dispose)
53 G_OBJECT_CLASS (modest_connection_specific_smtp_window_parent_class)->dispose (object);
57 modest_connection_specific_smtp_window_finalize (GObject *object)
59 ModestConnectionSpecificSmtpWindowPrivate *priv = CONNECTION_SPECIFIC_SMTP_WINDOW_GET_PRIVATE (object);
61 g_object_unref (G_OBJECT (priv->model));
63 G_OBJECT_CLASS (modest_connection_specific_smtp_window_parent_class)->finalize (object);
67 modest_connection_specific_smtp_window_class_init (ModestConnectionSpecificSmtpWindowClass *klass)
69 GObjectClass *object_class = G_OBJECT_CLASS (klass);
71 g_type_class_add_private (klass, sizeof (ModestConnectionSpecificSmtpWindowPrivate));
73 object_class->get_property = modest_connection_specific_smtp_window_get_property;
74 object_class->set_property = modest_connection_specific_smtp_window_set_property;
75 object_class->dispose = modest_connection_specific_smtp_window_dispose;
76 object_class->finalize = modest_connection_specific_smtp_window_finalize;
81 MODEL_COL_SERVER_NAME = 1,
86 fill_with_connections (ModestConnectionSpecificSmtpWindow *self)
89 * When TnyMaemoDevice provides enough of the libconic API to implement this. */
94 on_edit_window_hide (GtkWindow *window, gpointer user_data)
96 /* Destroy the window when it is closed: */
97 gtk_widget_destroy (GTK_WIDGET (window));
102 on_button_edit (GtkButton *button, gpointer user_data)
104 ModestConnectionSpecificSmtpWindow *self = MODEST_CONNECTION_SPECIFIC_SMTP_WINDOW (user_data);
106 /* TODO: Specify the chosen connection to edit: */
107 GtkWidget * window = GTK_WIDGET (modest_connection_specific_smtp_edit_window_new ());
108 gtk_window_set_transient_for (GTK_WINDOW (self), GTK_WINDOW (window));
109 g_signal_connect (G_OBJECT (window), "hide",
110 G_CALLBACK (on_edit_window_hide), self);
111 gtk_widget_show (window);
115 on_button_cancel (GtkButton *button, gpointer user_data)
117 ModestConnectionSpecificSmtpWindow *self = MODEST_CONNECTION_SPECIFIC_SMTP_WINDOW (user_data);
120 * The code that showed it will respond to the hide signal. */
121 gtk_widget_hide (GTK_WIDGET (self));
125 modest_connection_specific_smtp_window_init (ModestConnectionSpecificSmtpWindow *self)
127 ModestConnectionSpecificSmtpWindowPrivate *priv = CONNECTION_SPECIFIC_SMTP_WINDOW_GET_PRIVATE (self);
129 /* Create a tree model for the tree view:
130 * with a string for the name, a string for the server name, and an int for the ID.
131 * This must match our MODEL_COLS enum constants.
133 priv->model = GTK_TREE_MODEL (gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT));
135 /* Setup the tree view: */
136 priv->treeview = GTK_TREE_VIEW (gtk_tree_view_new_with_model (priv->model));
139 * The ID model column in not shown in the view. */
140 GtkTreeViewColumn *view_column = gtk_tree_view_column_new ();
141 GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();
142 gtk_tree_view_column_pack_start(view_column, renderer, TRUE);
143 gtk_tree_view_column_set_attributes (view_column, renderer,
144 "text", MODEL_COL_NAME, NULL);
145 gtk_tree_view_column_set_title (view_column, _("mcen_ia_optionalsmtp_connection_name"));
146 gtk_tree_view_append_column (priv->treeview, view_column);
149 /* server name column: */
150 view_column = gtk_tree_view_column_new ();
151 renderer = gtk_cell_renderer_text_new ();
152 gtk_tree_view_column_pack_start(view_column, renderer, TRUE);
153 gtk_tree_view_column_set_attributes (view_column, renderer,
154 "text", MODEL_COL_SERVER_NAME, NULL);
155 gtk_tree_view_column_set_title (view_column, _("mcen_ia_optionalsmtp_servername"));
156 gtk_tree_view_append_column (priv->treeview, view_column);
158 /* Fill the model with rows: */
159 fill_with_connections (self);
161 GtkWidget *vbox = gtk_vbox_new (FALSE, 2);
163 /* Put the treeview in a scrolled window and add it to the box: */
164 GtkWidget *scrolled_window = gtk_scrolled_window_new (NULL, NULL);
165 gtk_widget_show (scrolled_window);
166 gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (priv->treeview));
167 gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (scrolled_window), TRUE, TRUE, 2);
168 gtk_widget_show (GTK_WIDGET (priv->treeview));
170 /* Add the buttons: */
171 GtkWidget *hbox = gtk_hbox_new (FALSE, 2);
172 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 2);
173 gtk_widget_show (hbox);
175 GtkWidget *button_edit = gtk_button_new_from_stock (GTK_STOCK_EDIT);
176 gtk_box_pack_start (GTK_BOX (hbox), button_edit, TRUE, FALSE, 2);
177 gtk_widget_show (button_edit);
178 g_signal_connect (G_OBJECT (button_edit), "clicked",
179 G_CALLBACK (on_button_edit), self);
181 GtkWidget *button_cancel = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
182 gtk_box_pack_start (GTK_BOX (hbox), button_cancel, TRUE, FALSE, 2);
183 gtk_widget_show (button_cancel);
184 g_signal_connect (G_OBJECT (button_edit), "clicked",
185 G_CALLBACK (on_button_cancel), self);
187 gtk_widget_show (vbox);
190 ModestConnectionSpecificSmtpWindow*
191 modest_connection_specific_smtp_window_new (void)
193 return g_object_new (MODEST_TYPE_CONNECTION_SPECIFIC_SMTP_WINDOW, NULL);