1 /* modest-edit-window.c */
3 /* insert (c)/licensing information) */
7 #include "modest-edit-window.h"
12 #endif /*HAVE_CONFIG_H*/
14 #include <glib/gi18n.h>
16 /* include other impl specific header files */
18 /* 'private'/'protected' functions */
19 static void modest_edit_window_class_init (ModestEditWindowClass *klass);
20 static void modest_edit_window_init (ModestEditWindow *obj);
21 static void modest_edit_window_finalize (GObject *obj);
24 static GtkWidget* modest_edit_window_toolbar (void);
26 static void on_send_clicked (GtkToolButton *button, gpointer data);
27 static void on_cut_clicked (GtkToolButton *button, gpointer data);
28 static void on_copy_clicked (GtkToolButton *button, gpointer data);
29 static void on_paste_clicked (GtkToolButton *button, gpointer data);
30 static void on_quit_clicked (GtkToolButton *button, gpointer data);
31 static void on_save_clicked (GtkToolButton *button, gpointer data);
42 typedef struct _ModestEditWindowPrivate ModestEditWindowPrivate;
43 struct _ModestEditWindowPrivate {
48 GtkEntry *subject_entry;
50 GtkTextView *body_text;
51 GtkStatusbar *status_bar;
54 #define MODEST_EDIT_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
55 MODEST_TYPE_EDIT_WINDOW, \
56 ModestEditWindowPrivate))
58 static GtkWindowClass *parent_class = NULL;
60 /* uncomment the following if you have defined any signals */
61 /* static guint signals[LAST_SIGNAL] = {0}; */
64 modest_edit_window_get_type (void)
66 static GType my_type = 0;
68 static const GTypeInfo my_info = {
69 sizeof(ModestEditWindowClass),
71 NULL, /* base finalize */
72 (GClassInitFunc) modest_edit_window_class_init,
73 NULL, /* class finalize */
74 NULL, /* class data */
75 sizeof(ModestEditWindow),
77 (GInstanceInitFunc) modest_edit_window_init,
79 my_type = g_type_register_static (GTK_TYPE_WINDOW,
87 modest_edit_window_class_init (ModestEditWindowClass *klass)
89 GObjectClass *gobject_class;
90 gobject_class = (GObjectClass*) klass;
92 parent_class = g_type_class_peek_parent (klass);
93 gobject_class->finalize = modest_edit_window_finalize;
95 g_type_class_add_private (gobject_class, sizeof(ModestEditWindowPrivate));
97 /* signal definitions go here, e.g.: */
98 /* signals[MY_SIGNAL_1] = */
99 /* g_signal_new ("my_signal_1",....); */
100 /* signals[MY_SIGNAL_2] = */
101 /* g_signal_new ("my_signal_2",....); */
106 modest_edit_window_init (ModestEditWindow *self)
108 ModestEditWindowPrivate *priv;
110 GtkWidget *to_button, *cc_button, *bcc_button;
111 GtkWidget *subject_label;
113 GtkWidget *scrolled_win;
116 priv = MODEST_EDIT_WINDOW_GET_PRIVATE(self);
118 priv->to_entry = GTK_ENTRY(gtk_entry_new_with_max_length (255));
119 priv->cc_entry = GTK_ENTRY(gtk_entry_new_with_max_length (255));
120 priv->bcc_entry = GTK_ENTRY(gtk_entry_new_with_max_length (255));
121 priv->subject_entry = GTK_ENTRY(gtk_entry_new_with_max_length (255));
122 priv->status_bar = GTK_STATUSBAR(gtk_statusbar_new ());
124 toolbar = modest_edit_window_toolbar ();
126 to_button = gtk_button_new_with_label (_("To..."));
127 cc_button = gtk_button_new_with_label (_("Cc..."));
128 bcc_button = gtk_button_new_with_label (_("Bcc.."));
130 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
131 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(scrolled_win),
132 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
133 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(scrolled_win),
136 subject_label = gtk_label_new ("Subject:");
138 table = gtk_table_new (4, 2, FALSE);
140 gtk_table_attach (GTK_TABLE(table), to_button,
141 0, 1, 0, 1, 0, 0, 0, 0);
142 gtk_table_attach (GTK_TABLE(table), GTK_WIDGET(priv->to_entry),
143 1, 2, 0, 1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
145 gtk_table_attach (GTK_TABLE(table), cc_button,
146 0, 1, 1, 2, 0, 0, 0, 0);
147 gtk_table_attach (GTK_TABLE(table), GTK_WIDGET(priv->cc_entry),
148 1, 2, 1, 2, GTK_EXPAND|GTK_FILL, 0, 0, 0);
150 gtk_table_attach (GTK_TABLE(table), bcc_button,
151 0, 1, 2, 3, 0, 0, 0, 0);
152 gtk_table_attach (GTK_TABLE(table), GTK_WIDGET(priv->bcc_entry),
153 1, 2, 2, 3, GTK_EXPAND|GTK_FILL, 0, 0, 0);
155 gtk_table_attach (GTK_TABLE(table), subject_label,
156 0, 1, 3, 4, 0, 0, 0, 0);
157 gtk_table_attach (GTK_TABLE(table), GTK_WIDGET(priv->subject_entry),
158 1, 2, 3, 4, GTK_EXPAND|GTK_FILL, 0, 0, 0);
160 priv->body_text = GTK_TEXT_VIEW(gtk_text_view_new ());
162 gtk_container_add (GTK_CONTAINER(scrolled_win), GTK_WIDGET(priv->body_text));
164 vbox = gtk_vbox_new (FALSE, 5);
166 gtk_box_pack_start (GTK_BOX(vbox), toolbar, FALSE, TRUE,2);
167 gtk_box_pack_start (GTK_BOX(vbox), table, FALSE, TRUE,2);
168 gtk_box_pack_start (GTK_BOX(vbox), scrolled_win, TRUE, TRUE, 2);
169 gtk_box_pack_start (GTK_BOX(vbox), GTK_WIDGET(priv->status_bar),
172 /* make everything but the top level container visible,
173 * so gtk_widget_show will work */
174 gtk_widget_show_all (vbox);
175 gtk_container_add (GTK_CONTAINER(self), vbox);
180 modest_edit_window_finalize (GObject *obj)
182 /* free/unref instance resources here */
187 modest_edit_window_new (const gchar *to, const gchar *cc,
188 const gchar *bcc, const gchar *subject,
189 const gchar *body, const GSList *attachments)
192 ModestEditWindowPrivate *priv;
193 GObject *obj = g_object_new(MODEST_TYPE_EDIT_WINDOW, NULL);
195 priv = MODEST_EDIT_WINDOW_GET_PRIVATE(obj);
197 /* FIXME: valid utf-8 */
200 gtk_entry_set_text (priv->to_entry, to);
202 gtk_entry_set_text (priv->cc_entry, cc);
204 gtk_entry_set_text (priv->bcc_entry,bcc);
207 gtk_entry_set_text (priv->subject_entry, subject);
210 gtk_text_buffer_insert (gtk_text_view_get_buffer(priv->body_text),
211 NULL, body, strlen(body));
213 /* FIXME: attachments */
215 return GTK_WIDGET(obj);
222 modest_edit_window_toolbar (void)
225 GtkToolItem *send, *save, *cut, *copy, *paste, *quit;
227 toolbar = gtk_toolbar_new ();
229 /* FIXME: get a better icon */
230 send = gtk_tool_button_new_from_stock (GTK_STOCK_MEDIA_PLAY);
232 save = gtk_tool_button_new_from_stock (GTK_STOCK_SAVE);
233 cut = gtk_tool_button_new_from_stock (GTK_STOCK_CUT);
234 copy = gtk_tool_button_new_from_stock (GTK_STOCK_COPY);
235 paste = gtk_tool_button_new_from_stock (GTK_STOCK_PASTE);
236 quit = gtk_tool_button_new_from_stock (GTK_STOCK_QUIT);
238 g_signal_connect (send, "clicked", G_CALLBACK(on_send_clicked),
240 g_signal_connect (save, "clicked", G_CALLBACK(on_save_clicked),
242 g_signal_connect (cut, "clicked", G_CALLBACK(on_cut_clicked),
244 g_signal_connect (copy, "clicked", G_CALLBACK(on_copy_clicked),
246 g_signal_connect (paste, "clicked", G_CALLBACK(on_paste_clicked),
248 g_signal_connect (quit, "clicked", G_CALLBACK(on_quit_clicked),
251 gtk_toolbar_insert (GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(send), -1);
252 gtk_toolbar_insert (GTK_TOOLBAR(toolbar),
253 GTK_TOOL_ITEM(gtk_separator_tool_item_new()),
255 gtk_toolbar_insert (GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(save), -1);
256 gtk_toolbar_insert (GTK_TOOLBAR(toolbar),
257 GTK_TOOL_ITEM(gtk_separator_tool_item_new()),
260 gtk_toolbar_insert (GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(cut), -1);
261 gtk_toolbar_insert (GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(copy), -1);
262 gtk_toolbar_insert (GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(paste), -1);
264 gtk_toolbar_insert (GTK_TOOLBAR(toolbar),
265 GTK_TOOL_ITEM(gtk_separator_tool_item_new()),
267 gtk_toolbar_insert (GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(quit), -1);
274 on_send_clicked (GtkToolButton *button, gpointer data)
276 g_warning ("clicked: %s", (gchar *)data);
280 on_cut_clicked (GtkToolButton *button, gpointer data)
282 g_warning (__FUNCTION__);
285 on_copy_clicked (GtkToolButton *button, gpointer data)
287 g_warning (__FUNCTION__);
290 on_paste_clicked (GtkToolButton *button, gpointer data)
292 g_warning (__FUNCTION__);
296 on_save_clicked (GtkToolButton *button, gpointer data)
298 g_warning (__FUNCTION__);
304 on_quit_clicked (GtkToolButton *button, gpointer data)
306 g_warning (__FUNCTION__);