acc9c6b95cb19809f46da28efcbc8314ecdb1270
[modest] / src / maemo / modest-signature-editor-dialog.c
1 /* connection-specific-smtp-window.c */
2
3 #include "modest-signature-editor-dialog.h"
4 #include "widgets/modest-ui-constants.h"
5 #include "modest-hildon-includes.h"
6 #include "widgets/modest-serversecurity-combo-box.h"
7 #include "widgets/modest-secureauth-combo-box.h"
8 #include "widgets/modest-validating-entry.h"
9 #include "modest-runtime.h"
10 #include <modest-account-mgr-helpers.h>
11 #include <gtk/gtkcheckbutton.h>
12 #include <gtk/gtkhbox.h>
13 #include <gtk/gtkvbox.h>
14 #include <gtk/gtktextview.h>
15 #include <gtk/gtklabel.h>
16 #include <gtk/gtkscrolledwindow.h>
17 #include <gtk/gtkstock.h>
18
19 #include <glib/gi18n.h>
20
21 G_DEFINE_TYPE (ModestSignatureEditorDialog, modest_signature_editor_dialog, GTK_TYPE_DIALOG);
22
23 #define SIGNATURE_EDITOR_DIALOG_GET_PRIVATE(o) \
24         (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEST_TYPE_SIGNATURE_EDITOR_DIALOG, ModestSignatureEditorDialogPrivate))
25
26 typedef struct _ModestSignatureEditorDialogPrivate ModestSignatureEditorDialogPrivate;
27
28 struct _ModestSignatureEditorDialogPrivate
29 {
30         GtkWidget *checkbox_use;
31         GtkWidget *label;
32         GtkWidget *scrolledwindow;
33         GtkWidget *textview;
34 };
35
36 static void
37 modest_signature_editor_dialog_get_property (GObject *object, guint property_id,
38                                                                                                                         GValue *value, GParamSpec *pspec)
39 {
40         switch (property_id) {
41         default:
42                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
43         }
44 }
45
46 static void
47 modest_signature_editor_dialog_set_property (GObject *object, guint property_id,
48                                                                                                                         const GValue *value, GParamSpec *pspec)
49 {
50         switch (property_id) {
51         default:
52                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
53         }
54 }
55
56 static void
57 modest_signature_editor_dialog_dispose (GObject *object)
58 {
59         if (G_OBJECT_CLASS (modest_signature_editor_dialog_parent_class)->dispose)
60                 G_OBJECT_CLASS (modest_signature_editor_dialog_parent_class)->dispose (object);
61 }
62
63 static void
64 modest_signature_editor_dialog_finalize (GObject *object)
65 {
66         G_OBJECT_CLASS (modest_signature_editor_dialog_parent_class)->finalize (object);
67 }
68
69 static void
70 modest_signature_editor_dialog_class_init (ModestSignatureEditorDialogClass *klass)
71 {
72         GObjectClass *object_class = G_OBJECT_CLASS (klass);
73
74         g_type_class_add_private (klass, sizeof (ModestSignatureEditorDialogPrivate));
75
76         object_class->get_property = modest_signature_editor_dialog_get_property;
77         object_class->set_property = modest_signature_editor_dialog_set_property;
78         object_class->dispose = modest_signature_editor_dialog_dispose;
79         object_class->finalize = modest_signature_editor_dialog_finalize;
80 }
81
82 static void
83 enable_widgets (ModestSignatureEditorDialog *self)
84 {
85         ModestSignatureEditorDialogPrivate *priv = 
86                 SIGNATURE_EDITOR_DIALOG_GET_PRIVATE (self);
87                 
88         const gboolean enable = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->checkbox_use));
89         gtk_widget_set_sensitive (priv->label, enable);
90         gtk_widget_set_sensitive (priv->scrolledwindow, enable);
91         gtk_text_view_set_editable (GTK_TEXT_VIEW (priv->textview), enable);
92 }
93
94 static void
95 on_toggle_button_changed (GtkToggleButton *togglebutton, gpointer user_data)
96 {
97         ModestSignatureEditorDialog *self = MODEST_SIGNATURE_EDITOR_DIALOG (user_data);
98         enable_widgets (self);
99 }
100
101 static void
102 modest_signature_editor_dialog_init (ModestSignatureEditorDialog *self)
103 {
104         ModestSignatureEditorDialogPrivate *priv = 
105                 SIGNATURE_EDITOR_DIALOG_GET_PRIVATE (self);
106         
107         gtk_window_set_title (GTK_WINDOW (self), _("mcen_ti_email_signatures_edit_title"));
108                 
109         GtkWidget *box = GTK_DIALOG(self)->vbox; /* gtk_vbox_new (FALSE, MODEST_MARGIN_HALF); */
110         gtk_container_set_border_width (GTK_CONTAINER (box), MODEST_MARGIN_HALF);
111         
112         priv->checkbox_use = gtk_check_button_new_with_label (
113                 _("mcen_fi_email_signatures_use_signature"));
114         gtk_box_pack_start (GTK_BOX (box), priv->checkbox_use, FALSE, FALSE, MODEST_MARGIN_HALF);
115         gtk_widget_show (priv->checkbox_use);
116         
117         g_signal_connect (G_OBJECT (priv->checkbox_use), "toggled",
118                 G_CALLBACK (on_toggle_button_changed), self);
119                 
120         
121         priv->label = gtk_label_new (""); /* Set in modest_signature_editor_dialog_set_settings(). */
122         gtk_box_pack_start (GTK_BOX (box), priv->label, FALSE, FALSE, MODEST_MARGIN_HALF);
123         gtk_widget_show (priv->label);
124         
125         priv->scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
126         gtk_container_set_border_width (GTK_CONTAINER (priv->scrolledwindow), MODEST_MARGIN_DEFAULT);
127         gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scrolledwindow), 
128                 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
129         gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (priv->scrolledwindow), GTK_SHADOW_IN);
130         gtk_box_pack_start (GTK_BOX (box), priv->scrolledwindow, FALSE, FALSE, MODEST_MARGIN_HALF);
131         gtk_widget_show (priv->scrolledwindow);
132                 
133         priv->textview = gtk_text_view_new ();
134         gtk_container_add (GTK_CONTAINER (priv->scrolledwindow), priv->textview);
135         gtk_widget_show (priv->textview);
136         GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->textview));
137         gtk_text_buffer_set_text (buffer, "--\n", -1); /* Default, as per the UI spec. */
138         
139         /* Add the buttons: */
140         gtk_dialog_add_button (GTK_DIALOG (self), GTK_STOCK_OK, GTK_RESPONSE_OK);
141         gtk_dialog_add_button (GTK_DIALOG (self), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
142         
143         
144         gtk_widget_show (box);
145         
146         /* When this window is shown, hibernation should not be possible, 
147          * because there is no sensible way to save the state: */
148     modest_window_mgr_prevent_hibernation_while_window_is_shown (
149         modest_runtime_get_window_mgr (), GTK_WINDOW (self)); 
150 }
151
152 ModestSignatureEditorDialog*
153 modest_signature_editor_dialog_new (void)
154 {
155         return g_object_new (MODEST_TYPE_SIGNATURE_EDITOR_DIALOG, NULL);
156 }
157
158 void
159 modest_signature_editor_dialog_set_settings (
160         ModestSignatureEditorDialog *window, gboolean use_signature, const gchar* signature, 
161         const gchar* account_title)
162 {
163         ModestSignatureEditorDialogPrivate *priv = 
164                 SIGNATURE_EDITOR_DIALOG_GET_PRIVATE (window);
165
166         /* This causes a warning because of the %s in the translation, but not in the original string: */
167         gchar* label_text = g_strdup_printf (_("mcen_ia_email_signatures_edit_dlg_label"), 
168                 account_title);
169         gtk_label_set_text (GTK_LABEL (priv->label), label_text);
170         g_free (label_text);
171         
172         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->checkbox_use), use_signature);
173         
174         GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->textview));
175         if (signature)
176                 gtk_text_buffer_set_text (buffer, signature, -1);
177         else
178                 gtk_text_buffer_set_text (buffer, "--\n", -1); /* Default, as per the UI spec. */
179                 
180         enable_widgets (window);
181 }
182
183 /*
184  * The result must be freed with g_free(). */
185 gchar*
186 modest_signature_editor_dialog_get_settings (
187         ModestSignatureEditorDialog *window, gboolean* use_signature)
188 {
189         ModestSignatureEditorDialogPrivate *priv = 
190                 SIGNATURE_EDITOR_DIALOG_GET_PRIVATE (window);
191                 
192         g_assert(use_signature);
193         
194         *use_signature = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->checkbox_use));
195                         
196         GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->textview));
197         
198         GtkTextIter start, end;
199         gtk_text_buffer_get_bounds (buffer, &start, &end);
200         return gtk_text_buffer_get_text (buffer, &start, &end, TRUE);
201 }