aboutsummaryrefslogtreecommitdiffstats
path: root/my-evolution/e-summary-shown.c
diff options
context:
space:
mode:
Diffstat (limited to 'my-evolution/e-summary-shown.c')
-rw-r--r--my-evolution/e-summary-shown.c663
1 files changed, 0 insertions, 663 deletions
diff --git a/my-evolution/e-summary-shown.c b/my-evolution/e-summary-shown.c
deleted file mode 100644
index dfc9f3f449..0000000000
--- a/my-evolution/e-summary-shown.c
+++ /dev/null
@@ -1,663 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors: Iain Holmes <iain@ximian.com>
- *
- * Copyright 2002 Ximian, Inc. (www.ximian.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.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <string.h>
-
-#include <gtk/gtkalignment.h>
-#include <gtk/gtkbutton.h>
-#include <gtk/gtkenums.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtkimage.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkstock.h>
-#include <gtk/gtkvbox.h>
-
-#include <gal/util/e-util.h>
-#include <gal/widgets/e-gui-utils.h>
-
-#include <gal/e-table/e-table-header.h>
-#include <gal/e-table/e-table-header-item.h>
-#include <gal/e-table/e-table-item.h>
-#include <gal/e-table/e-cell-text.h>
-#include <gal/e-table/e-cell-tree.h>
-#include <gal/e-table/e-table.h>
-#include <gal/e-table/e-tree.h>
-
-#include <gal/e-table/e-tree-scrolled.h>
-#include <gal/e-table/e-tree-memory.h>
-#include <gal/e-table/e-tree-memory-callbacks.h>
-#include <gal/e-table/e-tree-table-adapter.h>
-
-#include <libgnome/gnome-i18n.h>
-
-#include "e-summary-shown.h"
-
-#define COLS 1
-
-/* Needs to be filled in before use */
-#define SPEC "<ETableSpecification cursor-mode=\"line\" draw-focus=\"true\"> \
-<ETableColumn model_col=\"0\" _title=\"%s\" resizable=\"true\" cell=\"tree-string\" compare=\"string\"/> \
-<ETableState> \
-<column source=\"0\"/> \
-<grouping><leaf column=\"0\" ascending=\"true\"/></grouping> \
-</ETableState> \
-</ETableSpecification>"
-
-#define PARENT_TYPE (gtk_hbox_get_type ())
-static GtkObjectClass *e_summary_shown_parent_class;
-
-enum {
- ITEM_CHANGED,
- SELECTION_CHANGED,
- LAST_SIGNAL
-};
-static guint32 shown_signals[LAST_SIGNAL] = { 0 };
-
-typedef struct _TableData {
- ETreeModel *etm;
- ETreePath *root;
-
- GtkWidget *etable;
- GSList *contents;
-} TableData;
-
-struct _ESummaryShownPrivate {
- TableData *all, *shown;
- GtkWidget *add, *remove;
-};
-
-static GdkPixbuf *
-icon_at (ETreeModel *etm,
- ETreePath path,
- void *model_data)
-{
- return NULL;
-}
-
-static int
-column_count (ETreeModel *etm,
- void *data)
-{
- return COLS;
-}
-
-static void *
-duplicate_value (ETreeModel *etm,
- int col,
- const void *value,
- void *data)
-{
- return g_strdup (value);
-}
-
-static void
-free_value (ETreeModel *etm,
- int col,
- void *value,
- void *data)
-{
- g_free (value);
-}
-
-static void *
-initialise_value (ETreeModel *etm,
- int col,
- void *data)
-{
- return g_strdup ("");
-}
-
-static gboolean
-value_is_empty (ETreeModel *etm,
- int col,
- const void *value,
- void *data)
-{
- return !(value && *(char *)value);
-}
-
-static char *
-value_to_string (ETreeModel *etm,
- int col,
- const void *value,
- void *data)
-{
- return g_strdup (value);
-}
-
-static void *
-value_at (ETreeModel *etm,
- ETreePath path,
- int col,
- void *model_data)
-{
- GHashTable *model = model_data;
- ESummaryShownModelEntry *entry;
-
- if (e_tree_model_node_is_root (etm, path)) {
- return "<Root>";
- }
-
- entry = g_hash_table_lookup (model, path);
- if (entry == NULL) {
- return "<None>";
- } else {
- return entry->name;
- }
-}
-
-static gboolean
-is_editable (ETreeModel *etm,
- ETreePath path,
- int col,
- void *model_data)
-{
- return FALSE;
-}
-
-static void
-destroy (GtkObject *object)
-{
- ESummaryShown *shown;
- ESummaryShownPrivate *priv;
-
- shown = E_SUMMARY_SHOWN (object);
- priv = shown->priv;
-
- if (priv == NULL) {
- return;
- }
-
- g_free (priv);
- shown->priv = NULL;
-
- e_summary_shown_parent_class->destroy (object);
-}
-
-static void
-e_summary_shown_class_init (GtkObjectClass *object_class)
-{
- object_class->destroy = destroy;
-
- e_summary_shown_parent_class = gtk_type_class (PARENT_TYPE);
-
- shown_signals[ITEM_CHANGED] = gtk_signal_new ("item-changed",
- GTK_RUN_LAST,
- GTK_CLASS_TYPE (object_class),
- GTK_SIGNAL_OFFSET (ESummaryShownClass, item_changed),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- shown_signals[SELECTION_CHANGED] = gtk_signal_new ("selection-changed",
- GTK_RUN_LAST,
- GTK_CLASS_TYPE (object_class),
- GTK_SIGNAL_OFFSET (ESummaryShownClass, selection_changed),
- gtk_marshal_NONE__POINTER,
- GTK_TYPE_NONE, 1,
- GTK_TYPE_POINTER);
-}
-
-static gboolean
-is_location_in_shown (ESummaryShown *shown,
- const char *location)
-{
- GSList *p;
-
- for (p = shown->priv->shown->contents; p; p = p->next) {
- ESummaryShownModelEntry *entry = p->data;
- if (entry->location == NULL) {
- continue;
- }
-
- if (strcmp (entry->location, location) == 0) {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-struct _CountData {
- ESummaryShown *shown;
- GList *selected_list;
- int count;
-};
-
-static void
-real_selected_count (ETreePath path,
- gpointer data)
-{
- ESummaryShownModelEntry *entry;
- struct _CountData *cd = data;
-
- entry = g_hash_table_lookup (cd->shown->all_model, path);
- g_return_if_fail (entry != NULL);
-
- cd->selected_list = g_list_prepend (cd->selected_list, path);
- if (entry->showable == FALSE) {
- return;
- }
-
- if (is_location_in_shown (cd->shown, entry->location)) {
- return;
- }
-
- cd->count++;
-}
-
-static void
-all_selection_changed (ETree *et,
- ESummaryShown *shown)
-{
- ESelectionModel *esm;
- int count;
-
- esm = e_tree_get_selection_model (et);
-
- count = e_selection_model_selected_count (esm);
- if (count == 0) {
- gtk_widget_set_sensitive (shown->priv->add, FALSE);
-
- gtk_signal_emit (GTK_OBJECT (shown), shown_signals[SELECTION_CHANGED], 0, NULL);
- } else {
- struct _CountData *cd;
-
- cd = g_new (struct _CountData, 1);
- cd->shown = shown;
- cd->selected_list = NULL;
- cd->count = 0;
-
- e_tree_selection_model_foreach (E_TREE_SELECTION_MODEL (esm),
- real_selected_count, cd);
- if (cd->count != 0) {
- gtk_widget_set_sensitive (shown->priv->add, TRUE);
- } else {
- gtk_widget_set_sensitive (shown->priv->add, FALSE);
- }
-
- gtk_signal_emit (GTK_OBJECT (shown), shown_signals[SELECTION_CHANGED], cd->selected_list);
-
- g_list_free (cd->selected_list);
- g_free (cd);
- }
-}
-
-static void
-shown_selection_changed (ETree *et,
- ESummaryShown *shown)
-{
- ESelectionModel *esm;
- int count;
-
- esm = e_tree_get_selection_model (et);
-
- count = e_selection_model_selected_count (esm);
- if (count == 0) {
- gtk_widget_set_sensitive (shown->priv->remove, FALSE);
- } else {
- gtk_widget_set_sensitive (shown->priv->remove, TRUE);
- }
-}
-
-static void
-maybe_move_to_shown (ETreePath path,
- gpointer closure)
-{
- gpointer *pair = closure;
- ESummaryShown *shown = pair[0];
- GList **list = pair[1];
- ESummaryShownModelEntry *entry, *new_entry;
-
- entry = g_hash_table_lookup (shown->all_model, path);
- g_return_if_fail (entry != NULL);
-
- /* Check is the entry can be shown */
- if (entry->showable == FALSE) {
- return;
- }
-
- /* check if the entry is already in the shown list */
- if (is_location_in_shown (shown, entry->location) == TRUE) {
- return;
- }
-
- new_entry = g_new (ESummaryShownModelEntry, 1);
- new_entry->name = g_strdup (entry->name);
- new_entry->location = g_strdup (entry->location);
- new_entry->showable = entry->showable;
- new_entry->ref_count = 0;
-
- *list = g_list_prepend (*list, new_entry);
-}
-
-static void
-add_clicked (GtkWidget *button,
- ESummaryShown *shown)
-{
- ESelectionModel *esm;
- ETree *et;
- gpointer pair[2];
- GList *list = NULL;
- GList *iterator;
-
- et = e_tree_scrolled_get_tree (E_TREE_SCROLLED (shown->priv->all->etable));
- esm = e_tree_get_selection_model (et);
-
- pair[0] = shown;
- pair[1] = &list;
- e_tree_selection_model_foreach (E_TREE_SELECTION_MODEL (esm),
- maybe_move_to_shown, pair);
-
- for (iterator = list; iterator; iterator = iterator->next) {
- ESummaryShownModelEntry *new_entry = iterator->data;
- e_summary_shown_add_node (shown, FALSE, new_entry, NULL, FALSE, NULL);
- }
-
- g_list_free (list);
- gtk_signal_emit (GTK_OBJECT (shown), shown_signals[ITEM_CHANGED]);
-
- gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE);
-}
-
-static void
-remove_from_shown (ETreePath path,
- gpointer closure)
-{
- gpointer *pair = closure;
- ESummaryShown *shown = pair[0];
- GList **list = pair[1];
- ESummaryShownModelEntry *entry;
-
- entry = g_hash_table_lookup (shown->shown_model, path);
- g_return_if_fail (entry != NULL);
-
- *list = g_list_prepend (*list, entry);
-}
-
-static void
-remove_clicked (GtkWidget *button,
- ESummaryShown *shown)
-{
- ESelectionModel *esm;
- ETree *et;
- gpointer pair[2];
- GList *list = NULL;
- GList *iterator;
-
- et = e_tree_scrolled_get_tree (E_TREE_SCROLLED (shown->priv->shown->etable));
- esm = e_tree_get_selection_model (et);
-
- pair[0] = shown;
- pair[1] = &list;
- e_tree_selection_model_foreach (E_TREE_SELECTION_MODEL (esm),
- remove_from_shown, pair);
-
- list = g_list_reverse (list);
-
- for (iterator = list; iterator; iterator = iterator->next) {
- ESummaryShownModelEntry *entry = iterator->data;
- e_summary_shown_remove_node (shown, FALSE, entry);
- }
- g_list_free (list);
-
- gtk_signal_emit (GTK_OBJECT (shown), shown_signals[ITEM_CHANGED]);
-
- gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE);
-}
-
-static TableData *
-make_table (GHashTable *data_model,
- const char *title,
- GtkSignalFunc callback,
- gpointer closure)
-{
- TableData *td;
- ETreeMemory *etmm;
- ETree *tree;
- char *real_spec;
-
- td = g_new (TableData, 1);
- td->etm = e_tree_memory_callbacks_new (icon_at,
- column_count,
-
- NULL,
- NULL,
-
- NULL,
- NULL,
-
- value_at,
- NULL,
- is_editable,
-
- duplicate_value,
- free_value,
- initialise_value,
- value_is_empty,
- value_to_string,
-
- data_model);
- etmm = E_TREE_MEMORY (td->etm);
- e_tree_memory_set_expanded_default (etmm, FALSE);
-
- td->root = e_tree_memory_node_insert (etmm, NULL, 0, NULL);
-
- real_spec = g_strdup_printf (SPEC, title);
- td->etable = e_tree_scrolled_new (td->etm, NULL, real_spec, NULL);
- g_free (real_spec);
-
- tree = e_tree_scrolled_get_tree (E_TREE_SCROLLED (td->etable));
- e_tree_root_node_set_visible (tree, FALSE);
- g_signal_connect (tree, "selection-change", callback, closure);
-
- td->contents = NULL;
- return td;
-}
-
-static void
-e_summary_shown_init (ESummaryShown *shown)
-{
- ESummaryShownPrivate *priv;
- GtkWidget *vbox;
- GtkWidget *align;
-
- gtk_box_set_spacing (GTK_BOX (shown), 3);
-
- shown->shown_model = g_hash_table_new (NULL, NULL);
- shown->all_model = g_hash_table_new (NULL, NULL);
-
- priv = g_new (ESummaryShownPrivate, 1);
- shown->priv = priv;
-
- priv->all = make_table (shown->all_model, _("All"), G_CALLBACK (all_selection_changed), shown);
-
- gtk_box_pack_start (GTK_BOX (shown), priv->all->etable, TRUE, TRUE, 2);
- gtk_widget_show (priv->all->etable);
-
- vbox = gtk_vbox_new (TRUE, 9);
- align = gtk_alignment_new (.5, .5, .5, 0.0);
- gtk_container_add (GTK_CONTAINER (align), vbox);
-
- gtk_box_pack_start (GTK_BOX (shown), align, FALSE, FALSE, 3);
-
- /* Fixme: nice GFX version */
- priv->add = gtk_button_new_from_stock (GTK_STOCK_ADD);
- gtk_widget_set_sensitive (priv->add, FALSE);
- gtk_box_pack_start (GTK_BOX (vbox), priv->add, TRUE, FALSE, 0);
- g_signal_connect (priv->add, "clicked", G_CALLBACK (add_clicked), shown);
-
- /* Fixme: Ditto */
- priv->remove = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
- gtk_widget_set_sensitive (priv->remove, FALSE);
- gtk_box_pack_start (GTK_BOX (vbox), priv->remove, TRUE, FALSE, 0);
- g_signal_connect (priv->remove, "clicked", G_CALLBACK (remove_clicked), shown);
-
- gtk_widget_show_all (align);
-
- priv->shown = make_table (shown->shown_model, _("Shown"), G_CALLBACK (shown_selection_changed), shown);
-
- gtk_box_pack_start (GTK_BOX (shown), priv->shown->etable, TRUE, TRUE, 2);
- gtk_widget_show (priv->shown->etable);
-}
-
-E_MAKE_TYPE (e_summary_shown, "ESummaryShown", ESummaryShown,
- e_summary_shown_class_init, e_summary_shown_init, PARENT_TYPE);
-
-GtkWidget *
-e_summary_shown_new (void)
-{
- ESummaryShown *shown;
-
- shown = gtk_type_new (e_summary_shown_get_type ());
- return GTK_WIDGET (shown);
-}
-
-ETreePath
-e_summary_shown_add_node (ESummaryShown *shown,
- gboolean all,
- ESummaryShownModelEntry *entry,
- ETreePath parent,
- gboolean expanded,
- gpointer data)
-{
- TableData *td;
- ETreePath path;
- ETreeMemory *etmm;
- ETree *tree;
- GHashTable *model;
-
- g_return_val_if_fail (IS_E_SUMMARY_SHOWN (shown), NULL);
-
- if (all == TRUE) {
- td = shown->priv->all;
- model = shown->all_model;
- } else {
- td = shown->priv->shown;
- model = shown->shown_model;
- }
-
- if (parent == NULL) {
- parent = td->root;
- }
-
- etmm = E_TREE_MEMORY (td->etm);
- path = e_tree_memory_node_insert (etmm, parent, -1, data);
-
- tree = e_tree_scrolled_get_tree (E_TREE_SCROLLED (td->etable));
- if (e_tree_model_get_expanded_default (E_TREE_MODEL(etmm)) != expanded)
- e_tree_node_set_expanded (tree, path, expanded);
-
- entry->path = path;
-
- g_hash_table_insert (model, path, entry);
-
- if (all == FALSE) {
- /* Add the location to the list */
- td->contents = g_slist_prepend (td->contents, entry);
- }
-
- return path;
-}
-
-void
-e_summary_shown_remove_node (ESummaryShown *shown,
- gboolean all,
- ESummaryShownModelEntry *entry)
-{
- TableData *td;
- GHashTable *model;
- ETreeMemory *etmm;
-
- g_return_if_fail (IS_E_SUMMARY_SHOWN (shown));
-
- if (all == TRUE) {
- td = shown->priv->all;
- model = shown->all_model;
- } else {
- td = shown->priv->shown;
- model = shown->shown_model;
- }
-
- etmm = E_TREE_MEMORY (td->etm);
- e_tree_memory_node_remove (etmm, entry->path);
-
- g_hash_table_remove (model, entry->path);
-
- if (all == FALSE) {
- td->contents = g_slist_remove (td->contents, entry);
- }
-
-}
-
-void
-e_summary_shown_freeze (ESummaryShown *shown)
-{
- g_return_if_fail (IS_E_SUMMARY_SHOWN (shown));
-
- e_tree_memory_freeze (E_TREE_MEMORY (shown->priv->all->etm));
- e_tree_memory_freeze (E_TREE_MEMORY (shown->priv->shown->etm));
-}
-
-void
-e_summary_shown_thaw (ESummaryShown *shown)
-{
- g_return_if_fail (IS_E_SUMMARY_SHOWN (shown));
-
- e_tree_memory_thaw (E_TREE_MEMORY (shown->priv->all->etm));
- e_tree_memory_thaw (E_TREE_MEMORY (shown->priv->shown->etm));
-}
-
-static void
-make_list (ETreePath path,
- gpointer data)
-{
- GList **list = data;
-
- *list = g_list_prepend (*list, path);
-}
-
-GList *
-e_summary_shown_get_selection (ESummaryShown *shown,
- gboolean all)
-{
- ETree *et;
- ESelectionModel *esm;
- GList *list = NULL;
-
- if (all) {
- et = e_tree_scrolled_get_tree (E_TREE_SCROLLED (shown->priv->all->etable));
- } else {
- et = e_tree_scrolled_get_tree (E_TREE_SCROLLED (shown->priv->shown->etable));
- }
-
- esm = e_tree_get_selection_model (et);
-
- e_tree_selection_model_foreach (E_TREE_SELECTION_MODEL (esm),
- make_list, &list);
-
- return list;
-}