diff options
Diffstat (limited to 'plugins/groupwise-features')
-rw-r--r-- | plugins/groupwise-features/junk-mail-settings.c | 146 | ||||
-rw-r--r-- | plugins/groupwise-features/junk-settings.c | 437 | ||||
-rw-r--r-- | plugins/groupwise-features/junk-settings.glade | 494 | ||||
-rw-r--r-- | plugins/groupwise-features/junk-settings.h | 103 |
4 files changed, 1180 insertions, 0 deletions
diff --git a/plugins/groupwise-features/junk-mail-settings.c b/plugins/groupwise-features/junk-mail-settings.c new file mode 100644 index 0000000000..99008b3e01 --- /dev/null +++ b/plugins/groupwise-features/junk-mail-settings.c @@ -0,0 +1,146 @@ +/* + * Copyright (C) 2005 Novell, Inc. + * + * Author(s): Vivek Jain <jvivek@novell.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <glib/gi18n-lib.h> +#include <string.h> +#include <stdio.h> +#include <gtk/gtk.h> + +#include "camel/camel-store.h" +#include "camel/camel-folder.h" +#include "camel/camel-medium.h" +#include "camel/camel-mime-message.h" +#include "mail/em-popup.h" +#include <mail/em-folder-view.h> +#include <e-gw-connection.h> +#include "mail/em-account-editor.h" +#include "e-util/e-account.h" +#include "mail/em-config.h" +#include "share-folder.h" +#include "junk-settings.h" + +void +org_gnome_junk_settings(EPlugin *ep, EMPopupTargetSelect *t); + +static void +abort_changes (JunkSettings *js) +{ + g_object_run_dispose ((GObject *)js); +} + +static void +junk_dialog_response (GtkWidget *dialog, int response, JunkSettings *js) +{ + if (response == GTK_RESPONSE_ACCEPT) { + commit_changes(js); + abort_changes (js); + } + else + abort_changes (js); + + gtk_widget_destroy (dialog); + +} + +static void +junk_mail_settings (EPopup *ep, EPopupItem *item, void *data) +{ + GtkWidget *dialog ,*w, *notebook, *box; + JunkSettings *junk_tab; + int page_count =0; + EGwConnection *cnc; + CamelFolder *folder = (CamelFolder *)data; + CamelStore *store = folder->parent_store; + cnc = get_cnc (store); + + dialog = gtk_dialog_new_with_buttons ("Junk Settings", + NULL, + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_CANCEL, + GTK_RESPONSE_REJECT, + GTK_STOCK_OK, + GTK_RESPONSE_ACCEPT, + NULL); + gtk_window_set_default_size ((GtkWindow *) dialog, 292, 260); + gtk_widget_ensure_style (dialog); + gtk_container_set_border_width ((GtkContainer *) ((GtkDialog *) dialog)->vbox, 12); + box = gtk_vbox_new (FALSE, 6); + w = gtk_label_new (); + gtk_label_set_markup (GTK_LABEL (w), "<b>Junk Mail Settings</b>"); + gtk_box_pack_start ((GtkBox *) box, w, FALSE, FALSE, 6); + + junk_tab = junk_settings_new (cnc); + w = junk_tab->vbox; + gtk_box_pack_start ((GtkBox *) box, w, FALSE, FALSE, 6); + + /*We might have to add more options for settings i.e. more pages*/ + while (page_count > 0 ){ + notebook = gtk_notebook_new (); + gtk_notebook_append_page (notebook, box, NULL); + gtk_box_pack_start ((GtkBox *) ((GtkDialog *) dialog)->vbox, notebook, TRUE, TRUE, 0); + } + + if (page_count == 0) + gtk_box_pack_start ((GtkBox *) ((GtkDialog *) dialog)->vbox, box, TRUE, TRUE, 0); + + g_signal_connect (dialog, "response", G_CALLBACK (junk_dialog_response), junk_tab); + gtk_widget_show_all (dialog); +} + +static EPopupItem popup_items[] = { +{ E_POPUP_ITEM, "50.emfv.05", N_("Junk Mail Settings..."), junk_mail_settings, NULL, NULL, 0, EM_POPUP_SELECT_MANY|EM_FOLDER_VIEW_SELECT_LISTONLY} +}; + +static void +popup_free (EPopup *ep, GSList *items, void *data) +{ +g_slist_free (items); +} + +void +org_gnome_junk_settings(EPlugin *ep, EMPopupTargetSelect *t) +{ + GSList *menus = NULL; + + int i = 0; + static int first =1; + + if (! g_strrstr (t->uri, "groupwise://")) + return ; + + /* for translation*/ + if (first == 1) { + popup_items[0].label = _(popup_items[0].label); + + } + + first++; + + for (i = 0; i < sizeof (popup_items) / sizeof (popup_items[0]); i++) + menus = g_slist_prepend (menus, &popup_items[i]); + + e_popup_add_items (t->target.popup, menus, NULL, popup_free, t->folder); + +} + diff --git a/plugins/groupwise-features/junk-settings.c b/plugins/groupwise-features/junk-settings.c new file mode 100644 index 0000000000..daccf8c1c1 --- /dev/null +++ b/plugins/groupwise-features/junk-settings.c @@ -0,0 +1,437 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Author: Vivek Jain <jvivek@novell.com> + * + * Copyright 2005 Novell, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif +#include <glade/glade.h> +#include "junk-settings.h" +#include <glib/gmain.h> +#include <gtk/gtktreemodel.h> +#include <gtk/gtkliststore.h> +#include <gtk/gtktreeselection.h> +#include <gtk/gtktreeview.h> +#include <gtk/gtkdialog.h> +#include <gtk/gtkbutton.h> +#include <gtk/gtk.h> +#include <gtk/gtktogglebutton.h> +#include <gtk/gtkcellrenderertoggle.h> +#include <gtk/gtkcellrenderertext.h> +#include <libgnomeui/gnome-ui-init.h> +#include <libgnome/gnome-init.h> +#include <e-util/e-error.h> +#include <e-gw-connection.h> +#define ROOTNODE "vboxSettings" +#define d(x) + +struct _JunkEntry { + EGwJunkEntry *entry; + int flag; +}; + +typedef struct _JunkEntry JunkEntry; + +static void junk_settings_class_init (JunkSettingsClass *class); +static void junk_settings_init (JunkSettings *js); +static void junk_settings_destroy (GtkObject *obj); +static void junk_settings_finalise (GObject *obj); +static void free_all(JunkSettings *js); +static void get_junk_list (JunkSettings *js); +static void disable_clicked (GtkRadioButton *button, JunkSettings *js); +static void enable_clicked (GtkRadioButton *button, JunkSettings *js); +GType junk_settings_get_type (void); + +static GtkVBoxClass *parent_class = NULL; + +GType +junk_settings_get_type (void) +{ + static GType type = 0; + + if (!type) { + static const GTypeInfo info = { + sizeof (JunkSettingsClass), + NULL, NULL, + (GClassInitFunc) junk_settings_class_init, + NULL, NULL, + sizeof (JunkSettings), + 0, + (GInstanceInitFunc) junk_settings_init + }; + + type = g_type_register_static (gtk_vbox_get_type (), "JunkSettings", &info, 0); + } + + return type; +} + +static void +junk_settings_class_init (JunkSettingsClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass); + + parent_class = g_type_class_ref (gtk_vbox_get_type ()); + object_class->destroy = junk_settings_destroy; + gobject_class->finalize = junk_settings_finalise; +} + +static void +junk_settings_finalise (GObject *obj) +{ + JunkSettings *js = (JunkSettings *) obj; + g_object_unref (js->xml); + free_all(js); + + G_OBJECT_CLASS (parent_class)->finalize (obj); +} + +static void +junk_settings_destroy (GtkObject *obj) +{ + JunkSettings *js = (JunkSettings *) obj; + free_all (js); + GTK_OBJECT_CLASS (parent_class)->destroy (obj); +} + +static void +junk_settings_init (JunkSettings *js) +{ + js->users = 0; + js->flag_for_ok = 0; + js->enabled = FALSE; + js->junk_list = NULL; + js->entry_list = NULL; +} + +static void +free_entry_node(EGwJunkEntry *entry) +{ + if(entry){ + g_free(entry->match); + entry->match = NULL; + } + + return; +} + +static void +free_node(JunkEntry *nentry) +{ + EGwJunkEntry *junk_entry = nentry->entry; + + if(junk_entry){ + g_free(junk_entry->match); + junk_entry->match = NULL; + } + + return; +} + +static JunkEntry * +find_node(GList *list, gchar *match) +{ + JunkEntry *one_entry = NULL; + EGwJunkEntry *ent = NULL; + GList *tmp; + gint i ; + + if(list){ + tmp = g_list_first(list); + for(i=0; tmp ; i++) + { + one_entry = tmp->data; + ent = one_entry->entry; + if(!g_ascii_strcasecmp(ent->match, match)){ + return one_entry; + /*if found, it returns that user*/ + } + tmp= g_list_next(tmp); + } + } + + return NULL; +} + +static void +free_all (JunkSettings *js) +{ + if (js->junk_list){ + g_list_foreach (js->junk_list,(GFunc) free_node, NULL); + g_list_free (js->junk_list); + js->junk_list = NULL; + } +} + +static void +get_junk_list (JunkSettings *js) +{ + GList *list = NULL; + char *entry; + char *msg; + int use_junk, use_block, use_pab, persistence; + + if (E_IS_GW_CONNECTION (js->cnc)) { + if (e_gw_connection_get_junk_settings (js->cnc, &use_junk, &use_block, &use_pab, &persistence) == E_GW_CONNECTION_STATUS_OK) { + if (use_junk) { + js->enabled = TRUE; + gtk_toggle_button_set_active((GtkToggleButton *) js->enable, TRUE); + enable_clicked(js->enable , js); + gtk_widget_set_sensitive (GTK_WIDGET (js->table), TRUE); + } else { + gtk_toggle_button_set_active ((GtkToggleButton *) js->disable, TRUE); + disable_clicked (js->disable , js); + } + } + /* get list of containers */ + if (e_gw_connection_get_junk_entries (js->cnc, &(list)) == E_GW_CONNECTION_STATUS_OK) { + js->users = g_list_length (list); + if (js->users) { +/* I populate the list and set flags to 0 for the existing users*/ + while (list) { + JunkEntry *junk_entry = g_new0 (JunkEntry , 1); + junk_entry->entry = list->data; + junk_entry->flag = 0; + entry = g_strdup ((junk_entry->entry)->match); + msg = g_strdup_printf ("%s", entry); + gtk_list_store_append (GTK_LIST_STORE (js->model), &(js->iter)); + gtk_list_store_set (GTK_LIST_STORE (js->model), &(js->iter), 0, msg, -1); + js->junk_list = g_list_append (js->junk_list, junk_entry); + + g_free (msg); + g_free (entry); + msg = NULL; + entry = NULL; + list = list->next; + } + } + } + else + g_warning("Could not get the JUNK List"); + } +} + +void +commit_changes (JunkSettings *js) +{ + GList *new_list = NULL; + GList *remove_list = NULL; + GList *node = NULL; + JunkEntry *junk_entry = NULL; + EGwJunkEntry *entry; + int use_junk, use_pab, use_block, persistence; + + for (node = js->junk_list; node; node = node->next) + { + junk_entry = node->data; + if (junk_entry->flag & 0x1) + new_list = g_list_append (new_list, junk_entry->entry); + else if (junk_entry->flag & 0x4) { + remove_list = g_list_append (remove_list, junk_entry->entry); + } + } + + if (E_IS_GW_CONNECTION (js->cnc)) { + if(js->flag_for_ok == 2 && js->enabled){ /* just turn off the bits*/ + use_junk = use_pab = use_block = persistence = 0; + if (e_gw_connection_modify_junk_settings (js->cnc, use_junk, use_pab, use_block, persistence) == E_GW_CONNECTION_STATUS_OK); + + } + if (js->flag_for_ok == 0 && !js->enabled) { + use_block = use_pab =0; + use_junk = 1; + persistence = 14; /* We are setting the default persistence*/ + if (e_gw_connection_modify_junk_settings (js->cnc, use_junk, use_pab, use_block, persistence) == E_GW_CONNECTION_STATUS_OK); + } + + while (new_list) { + entry = new_list->data; + if (e_gw_connection_create_junk_entry (js->cnc, entry->match, "email", "junk") == E_GW_CONNECTION_STATUS_OK); + new_list = new_list->next; + } + while (remove_list) { + entry = remove_list->data; + if (e_gw_connection_remove_junk_entry (js->cnc, entry->id) == E_GW_CONNECTION_STATUS_OK); + remove_list = remove_list->next; + } + + } + if(new_list){ + g_list_foreach (new_list, (GFunc) free_entry_node, NULL); + g_list_free (new_list); + } + new_list = NULL; + if(remove_list){ + g_list_foreach (remove_list,(GFunc) free_entry_node, NULL); + g_list_free (remove_list); + } + remove_list = NULL; +} + +static void +enable_clicked (GtkRadioButton *button, JunkSettings *js) +{ + js->flag_for_ok = 0; + gtk_widget_set_sensitive (GTK_WIDGET (js->table) ,TRUE); +} + +static void +disable_clicked (GtkRadioButton *button, JunkSettings *js) +{ + js->flag_for_ok = 2; + gtk_widget_set_sensitive (GTK_WIDGET (js->table), FALSE); +} + +static void +add_clicked(GtkButton *button, JunkSettings *js) +{ + const char *email = NULL; + const char *self_email = NULL; + JunkEntry *new_entry = NULL; + EGwJunkEntry *junk_entry = NULL; + gchar *msg = NULL; + + self_email = g_strdup (e_gw_connection_get_user_email (js->cnc)); + email = gtk_entry_get_text (js->entry); + /* You can't mark junk sender yourself*/ + if (g_strrstr (email, "@") == NULL || (!g_ascii_strcasecmp (email , self_email)) || !g_ascii_strcasecmp (email, "" )) + return; + else { + /*check whether already exists*/ + if (js->junk_list && email){ + new_entry = find_node (js->junk_list, (gchar *)email); + if (new_entry) + return; + + } + junk_entry = g_new0 (EGwJunkEntry, 1); + new_entry = g_new0 (JunkEntry, 1); + junk_entry->match = g_strdup(email); +/*XXX:populate more fields*/ + new_entry->entry = junk_entry; + new_entry->flag = 1; + msg = g_strdup (email); + gtk_list_store_append (GTK_LIST_STORE (js->model), &(js->iter)); + gtk_list_store_set (GTK_LIST_STORE (js->model), &(js->iter), 0, msg, -1); + g_free(msg); + js->junk_list = g_list_append (js->junk_list, new_entry); + js->flag_for_ok = 0; + } + gtk_entry_set_text (GTK_ENTRY(js->entry), ""); +} + +static void +remove_clicked(GtkButton *button, JunkSettings *js) +{ + JunkEntry *entry = NULL; + gchar *email; + + gtk_tree_model_get ((GtkTreeModel *) js->model, &(js->iter), 0, &email, -1); + entry = find_node (js->junk_list, email); + if (entry->flag & 0x1) { + js->junk_list = g_list_remove (js->junk_list, entry); + free_node(entry); + } else { + entry->flag = 0; + entry->flag |= 0x4; + } + g_free (email); + gtk_list_store_remove (GTK_LIST_STORE (js->model), &(js->iter)); +} + + +static void +user_selected(GtkTreeSelection *selection, JunkSettings *js) +{ + gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); + if (gtk_tree_selection_get_selected (selection, &(js->model), &(js->iter))){ + gtk_widget_set_sensitive (GTK_WIDGET (js->remove), TRUE); + + } +} + +static void +junk_settings_construct (JunkSettings *js) +{ + GladeXML *xml; + GtkWidget *box; + + xml = glade_xml_new (EVOLUTION_GLADEDIR "/junk-settings.glade", ROOTNODE, NULL); + js->xml =xml; + + if (!js->xml) { + g_warning ("could not get xml"); + } + js->vbox = GTK_VBOX (glade_xml_get_widget(js->xml, "vboxSettings")); + js->table = GTK_WIDGET (glade_xml_get_widget (js->xml, "vbox194")); + gtk_widget_set_sensitive (GTK_WIDGET (js->table), FALSE); + + js->enable = GTK_RADIO_BUTTON (glade_xml_get_widget (js->xml, "radEnable")); + g_signal_connect ((gpointer) js->enable, "clicked", G_CALLBACK (enable_clicked), js); + + js->disable = GTK_RADIO_BUTTON (glade_xml_get_widget (js->xml, "radDisable")); + g_signal_connect ((gpointer) js->disable, "clicked", G_CALLBACK (disable_clicked), js); + + js->add_button = GTK_BUTTON (glade_xml_get_widget(js->xml, "Add")); + g_signal_connect((GtkWidget *) js->add_button, "clicked", G_CALLBACK (add_clicked), js); + + js->remove = GTK_BUTTON(glade_xml_get_widget(js->xml, "Remove")); + g_signal_connect ((GtkWidget *) js->remove, "clicked", G_CALLBACK (remove_clicked), js); + gtk_widget_set_sensitive(GTK_WIDGET (js->remove), FALSE); + + js->entry = GTK_ENTRY (glade_xml_get_widget (js->xml, "entry4")); + /*TODO:connect entry and label*/ + box = GTK_WIDGET (glade_xml_get_widget (js->xml, "hbox227")); + gtk_widget_show ((GtkWidget *) js->entry); + + js->scrolled_window = GTK_WIDGET (glade_xml_get_widget (js->xml,"scrolledwindow4")); + + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (js->scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + + js->model = gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); + js->entry_list = gtk_tree_view_new (); + /*gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (js->scrolled_window), (GtkWidget *)js->entry_list);*/ + gtk_container_add (GTK_CONTAINER (js->scrolled_window), (GtkWidget *)js->entry_list); + gtk_tree_view_set_model (GTK_TREE_VIEW (js->entry_list), GTK_TREE_MODEL (js->model)); + gtk_widget_show (GTK_WIDGET (js->entry_list)); + + js->cell = gtk_cell_renderer_text_new (); + js->column = gtk_tree_view_column_new_with_attributes ("Email", js->cell, "text", 0, NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (js->entry_list), + GTK_TREE_VIEW_COLUMN (js->column)); + + g_signal_connect(gtk_tree_view_get_selection(GTK_TREE_VIEW (js->entry_list)), "changed", G_CALLBACK (user_selected), js); +} + +JunkSettings * +junk_settings_new (EGwConnection *ccnc) +{ + JunkSettings *new; + new = (JunkSettings *) g_object_new (junk_settings_get_type (), NULL); + junk_settings_construct (new); + new->cnc = ccnc; + if (new->cnc) + get_junk_list(new); + + return (JunkSettings *) new; +} + + diff --git a/plugins/groupwise-features/junk-settings.glade b/plugins/groupwise-features/junk-settings.glade new file mode 100644 index 0000000000..473b723d0b --- /dev/null +++ b/plugins/groupwise-features/junk-settings.glade @@ -0,0 +1,494 @@ +<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> +<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> + +<glade-interface> +<requires lib="gnome"/> + +<widget class="GtkWindow" id="main_page"> + <property name="title" translatable="yes">Junk Mail Settings</property> + <property name="type">GTK_WINDOW_TOPLEVEL</property> + <property name="window_position">GTK_WIN_POS_NONE</property> + <property name="modal">False</property> + <property name="resizable">True</property> + <property name="destroy_with_parent">False</property> + <property name="decorated">True</property> + <property name="skip_taskbar_hint">False</property> + <property name="skip_pager_hint">False</property> + <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property> + <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> + <property name="focus_on_map">True</property> + + <child> + <widget class="GtkNotebook" id="sharing_props"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="show_tabs">True</property> + <property name="show_border">True</property> + <property name="tab_pos">GTK_POS_TOP</property> + <property name="scrollable">False</property> + <property name="enable_popup">False</property> + + <child> + <widget class="GtkVBox" id="vboxSettings"> + <property name="border_width">12</property> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">12</property> + + <child> + <widget class="GtkVBox" id="vboxSharingOptions"> + <property name="width_request">0</property> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">6</property> + + <child> + <widget class="GtkHBox" id="hbox186"> + <property name="width_request">0</property> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">12</property> + + <child> + <widget class="GtkLabel" id="label539"> + <property name="visible">True</property> + <property name="label" translatable="yes"></property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkVBox" id="vbox190"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">6</property> + + <child> + <widget class="GtkRadioButton" id="radDisable"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">_Disable</property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <property name="active">False</property> + <property name="inconsistent">False</property> + <property name="draw_indicator">True</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkRadioButton" id="radEnable"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">_Enable</property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <property name="active">False</property> + <property name="inconsistent">False</property> + <property name="draw_indicator">True</property> + <property name="group">radDisable</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkVBox" id="vbox194"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkHBox" id="hbox226"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">6</property> + + <child> + <widget class="GtkVBox" id="vbox195"> + <property name="width_request">234</property> + <property name="height_request">209</property> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkHBox" id="hbox227"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkLabel" id="label557"> + <property name="visible">True</property> + <property name="label" translatable="yes">Email:</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="entry4"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">True</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">*</property> + <property name="activates_default">False</property> + </widget> + <packing> + <property name="padding">2</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="users"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Junk List :</b></property> + <property name="use_underline">False</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="padding">6</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkScrolledWindow" id="scrolledwindow4"> + <property name="width_request">282</property> + <property name="height_request">150</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property> + <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> + <property name="window_placement">GTK_CORNER_TOP_LEFT</property> + + <child> + <placeholder/> + </child> + </widget> + <packing> + <property name="padding">6</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkVBox" id="vbox196"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">6</property> + + <child> + <widget class="GtkButton" id="Add"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + + <child> + <widget class="GtkAlignment" id="alignment4"> + <property name="visible">True</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + <property name="top_padding">0</property> + <property name="bottom_padding">0</property> + <property name="left_padding">0</property> + <property name="right_padding">0</property> + + <child> + <widget class="GtkHBox" id="hbox229"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">2</property> + + <child> + <widget class="GtkImage" id="image3"> + <property name="visible">True</property> + <property name="stock">gtk-add</property> + <property name="icon_size">4</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label561"> + <property name="width_request">29</property> + <property name="visible">True</property> + <property name="label" translatable="yes">_Add</property> + <property name="use_underline">True</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkButton" id="Remove"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + + <child> + <widget class="GtkAlignment" id="alignment5"> + <property name="visible">True</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + <property name="top_padding">0</property> + <property name="bottom_padding">0</property> + <property name="left_padding">0</property> + <property name="right_padding">0</property> + + <child> + <widget class="GtkHBox" id="hbox230"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">2</property> + + <child> + <widget class="GtkImage" id="image4"> + <property name="visible">True</property> + <property name="stock">gtk-remove</property> + <property name="icon_size">4</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label562"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Remove</property> + <property name="use_underline">True</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <placeholder/> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + <packing> + <property name="tab_expand">False</property> + <property name="tab_fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="lblJunkList"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Junk List</property> + <property name="use_underline">True</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_CENTER</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </widget> + <packing> + <property name="type">tab</property> + </packing> + </child> + </widget> + </child> +</widget> + +</glade-interface> diff --git a/plugins/groupwise-features/junk-settings.h b/plugins/groupwise-features/junk-settings.h new file mode 100644 index 0000000000..b5bb22c72c --- /dev/null +++ b/plugins/groupwise-features/junk-settings.h @@ -0,0 +1,103 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: Vivek Jain <jvivek@novell.com> + * + * Copyright 2005 Novell, Inc. (www.novell.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + +#ifndef __JUNK_SETTINGS_H__ +#define __JUNK_SETTINGS_H__ + +#ifdef __cplusplus +extern "C" { +#pragma } +#endif /* __cplusplus */ + +#include <glib.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtk.h> +#include <camel/camel-store.h> +#include <e-gw-connection.h> + +#define _JUNK_SETTINGS_TYPE (junk_settings_get_type ()) +#define JUNK_SETTINGS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), JUNK_SETTINGS, JunkSettings)) +#define JUNK_SETTINGS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), JUNK_SETTINGS_TYPE, JunkSettings)) +#define IS_JUNK_SETTINGS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), JUNK_SETTINGS_TYPE)) +#define IS_JUNK_SETTINGS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), JUNK_SETTINGS_TYPE)) + +typedef struct _JunkSettings JunkSettings; +typedef struct _JunkSettingsClass JunkSettingsClass; + +struct _GtkWidget; +struct _GladeXML; +struct _GtkButton; +struct _GtkTreeView; +struct _GtkLabel; +struct _GtkEntry; +struct _GtkWindow; +struct _GtkRadioButton; +struct _GtkListStore; +struct _GtkCellRenderer; +struct _GtkTreeViewColumn; +struct _GtkFrame; +struct _GtkVBox; + +struct _JunkSettings { + GtkVBox parent_object; + + struct _GladeXML *xml; + + /* General tab */ + + /* Default Behavior */ + struct _GtkTreeView *entry_list; + struct _GtkButton *add_button; + struct _GtkButton *remove; + struct _GtkEntry *entry; + struct _GtkRadioButton *enable; + struct _GtkRadioButton *disable; + struct _GtkWidget *scrolled_window; + struct _GtkListStore *model; + struct _GtkCellRenderer *cell; + struct _GtkTreeViewColumn *column; + struct _GtkVBox *vbox; + struct _GtkVBox *table; + struct _GtkWidget *window; + + GList *junk_list; + gint users; + gint flag_for_ok; + gboolean enabled; + EGwConnection *cnc; + GtkTreeIter iter; +}; + +struct _JunkSettingsClass { + GtkVBoxClass parent_class; + +}; + +GType junk_settings_get_type (void); +struct _JunkSettings * junk_settings_new (EGwConnection *ccnc); +void commit_changes (JunkSettings *js); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __JUNK_SETTINGS_H__ */ |