src/mn-imap-mailbox-properties.gob (7891B) - raw
1 /* 2 * Mail Notification 3 * Copyright (C) 2003-2008 Jean-Yves Lefort <jylefort@brutele.be> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 */ 19 20 %headertop{ 21 #include "mn-pi-mailbox-properties.h" 22 %} 23 24 %privateheader{ 25 #include "mn-imap-mailbox.h" 26 %} 27 28 %{ 29 #include <glib/gi18n.h> 30 #include "mn-mailbox-properties.h" 31 #include "mn-mailbox-properties-private.h" 32 #include "mn-authenticated-mailbox-properties-private.h" 33 #include "mn-pi-mailbox-properties-private.h" 34 #include "mn-auth-combo-box.h" 35 #include "mn-util.h" 36 #include "mn-properties-dialog.h" 37 %} 38 39 class MN:IMAP:Mailbox:Properties from MN:PI:Mailbox:Properties 40 { 41 private GtkWidget *inbox_radio; 42 private GtkWidget *other_radio; 43 private GtkWidget *mailbox_entry; 44 private GtkWidget *use_idle_radio[MN_IMAP_MAILBOX_N_USE_IDLE]; 45 46 property BOOLEAN complete (override) 47 get 48 { 49 gboolean complete; 50 51 complete = mn_pi_mailbox_properties_is_complete(MN_PI_MAILBOX_PROPERTIES(self)); 52 if (complete) 53 { 54 gboolean other_active; 55 const char *mailbox; 56 57 other_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(selfp->other_radio)); 58 mailbox = gtk_entry_get_text(GTK_ENTRY(selfp->mailbox_entry)); 59 60 if (other_active && ! *mailbox) 61 complete = FALSE; 62 } 63 64 g_value_set_boolean(VAL, complete); 65 }; 66 67 property STRING default_name (override) 68 get 69 { 70 const char *username; 71 const char *server; 72 gboolean other_active; 73 const char *mailbox; 74 75 mn_authenticated_mailbox_properties_get_contents(MN_AUTHENTICATED_MAILBOX_PROPERTIES(self), 76 &username, 77 NULL); 78 mn_pi_mailbox_properties_get_contents(MN_PI_MAILBOX_PROPERTIES(self), 79 NULL, 80 NULL, 81 &server, 82 NULL); 83 84 other_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(selfp->other_radio)); 85 mailbox = gtk_entry_get_text(GTK_ENTRY(selfp->mailbox_entry)); 86 87 g_value_take_string(VAL, mn_imap_mailbox_build_name(username, server, other_active ? mailbox : NULL)); 88 }; 89 90 class_init (class) 91 { 92 MNMailboxPropertiesClass *p_class = MN_MAILBOX_PROPERTIES_CLASS(class); 93 94 p_class->type = "imap"; 95 p_class->combo_label = "IMAP"; 96 } 97 98 init (self) 99 { 100 MNMailboxProperties *properties = MN_MAILBOX_PROPERTIES(self); 101 MNPIMailboxProperties *pi = MN_PI_MAILBOX_PROPERTIES(self); 102 GtkWidget *hbox; 103 GtkWidget *folder_vbox; 104 GtkWidget *idle_section; 105 GtkWidget *idle_vbox; 106 int i; 107 108 /* translators: header capitalization */ 109 folder_vbox = mn_mailbox_properties_add_general_section(properties, _("IMAP Mailbox")); 110 111 selfp->inbox_radio = gtk_radio_button_new_with_mnemonic(NULL, _("In_box")); 112 gtk_size_group_add_widget(properties->label_size_group, selfp->inbox_radio); 113 114 gtk_box_pack_start(GTK_BOX(folder_vbox), selfp->inbox_radio, FALSE, FALSE, 0); 115 116 selfp->other_radio = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(selfp->inbox_radio), _("_Other:")); 117 gtk_size_group_add_widget(properties->label_size_group, selfp->other_radio); 118 119 selfp->mailbox_entry = gtk_entry_new(); 120 gtk_widget_set_sensitive(selfp->mailbox_entry, FALSE); 121 122 hbox = gtk_hbox_new(FALSE, 12); 123 gtk_box_pack_start(GTK_BOX(hbox), selfp->other_radio, FALSE, FALSE, 0); 124 gtk_box_pack_start(GTK_BOX(hbox), selfp->mailbox_entry, TRUE, TRUE, 0); 125 gtk_box_pack_start(GTK_BOX(folder_vbox), hbox, FALSE, FALSE, 0); 126 gtk_widget_show_all(folder_vbox); 127 128 /* translators: header capitalization */ 129 idle_section = mn_hig_section_new_with_box(_("Use the IDLE Extension"), NULL, &idle_vbox); 130 gtk_box_pack_start(GTK_BOX(pi->connection_page), idle_section, FALSE, FALSE, 0); 131 gtk_widget_show(idle_section); 132 133 self_add_idle_usage(self, GTK_BOX(idle_vbox), MN_IMAP_MAILBOX_USE_IDLE_NEVER, Q_("IMAP connection tab|_Never")); 134 self_add_idle_usage(self, GTK_BOX(idle_vbox), MN_IMAP_MAILBOX_USE_IDLE_AUTODETECT, _("A_utodetect")); 135 self_add_idle_usage(self, GTK_BOX(idle_vbox), MN_IMAP_MAILBOX_USE_IDLE_ALWAYS, _("Al_ways")); 136 137 /* by default, autodetect is enabled */ 138 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(selfp->use_idle_radio[MN_IMAP_MAILBOX_USE_IDLE_AUTODETECT]), TRUE); 139 140 mn_auth_combo_box_append(MN_AUTH_COMBO_BOX(pi->auth_combo), "+LOGIN", "IMAP LOGIN"); 141 142 for (i = 0; i < MN_PI_MAILBOX_N_CONNECTION_TYPES; i++) 143 gtk_spin_button_set_value(GTK_SPIN_BUTTON(pi->port_spin[i]), mn_imap_mailbox_default_ports[i]); 144 145 properties->entries = g_slist_append(properties->entries, selfp->mailbox_entry); 146 147 g_signal_connect(selfp->inbox_radio, "toggled", G_CALLBACK(self_radio_toggled_h), self); 148 g_signal_connect(selfp->other_radio, "toggled", G_CALLBACK(self_radio_toggled_h), self); 149 150 g_object_connect(selfp->mailbox_entry, 151 "swapped-signal::changed", mn_mailbox_properties_notify_complete, self, 152 "swapped-signal::changed", mn_mailbox_properties_notify_default_name, self, 153 NULL); 154 } 155 156 private void 157 add_idle_usage (self, 158 Gtk:Box *idle_vbox (check null), 159 MNIMAPMailboxUseIDLE usage, 160 const char *mnemonic (check null)) 161 { 162 selfp->use_idle_radio[usage] = usage == 0 163 ? gtk_radio_button_new_with_mnemonic(NULL, mnemonic) 164 : gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(selfp->use_idle_radio[0]), mnemonic); 165 166 gtk_box_pack_start(idle_vbox, selfp->use_idle_radio[usage], TRUE, TRUE, 0); 167 gtk_widget_show(selfp->use_idle_radio[usage]); 168 } 169 170 private void 171 radio_toggled_h (GtkToggleButton *togglebutton, gpointer user_data) 172 { 173 Self *self = user_data; 174 175 gtk_widget_set_sensitive(selfp->mailbox_entry, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(selfp->other_radio))); 176 177 g_object_notify(G_OBJECT(self), "complete"); 178 g_object_notify(G_OBJECT(self), "default-name"); 179 } 180 181 override (MN:Mailbox:Properties) void 182 set_mailbox (MNMailboxProperties *properties, MNMailbox *mailbox) 183 { 184 Self *self = SELF(properties); 185 MNIMAPMailbox *imap_mailbox = MN_IMAP_MAILBOX(mailbox); 186 187 PARENT_HANDLER(properties, mailbox); 188 189 if (! mn_utf8_strcasecmp(imap_mailbox->mailbox, "INBOX")) 190 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(selfp->inbox_radio), TRUE); 191 else 192 { 193 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(selfp->other_radio), TRUE); 194 gtk_entry_set_text(GTK_ENTRY(selfp->mailbox_entry), imap_mailbox->mailbox); 195 } 196 197 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(selfp->use_idle_radio[imap_mailbox->use_idle_extension]), TRUE); 198 } 199 200 override (MN:Mailbox:Properties) MNMailbox * 201 get_mailbox (MNMailboxProperties *properties) 202 { 203 Self *self = SELF(properties); 204 MNIMAPMailboxUseIDLE use_idle; 205 MNMailbox *mailbox; 206 207 mailbox = PARENT_HANDLER(properties); 208 209 for (use_idle = 0; use_idle < MN_IMAP_MAILBOX_N_USE_IDLE; use_idle++) 210 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(selfp->use_idle_radio[use_idle]))) 211 break; 212 213 g_object_set(mailbox, MN_IMAP_MAILBOX_PROP_USE_IDLE_EXTENSION(use_idle), NULL); 214 215 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(selfp->other_radio))) 216 g_object_set(mailbox, MN_IMAP_MAILBOX_PROP_MAILBOX((char *) gtk_entry_get_text(GTK_ENTRY(selfp->mailbox_entry))), NULL); 217 218 return mailbox; 219 } 220 }