aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/table
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/table')
-rw-r--r--widgets/table/e-table-config.c417
-rw-r--r--widgets/table/e-table-config.glade629
-rw-r--r--widgets/table/e-table-config.glade.h14
-rw-r--r--widgets/table/e-table-config.h35
-rw-r--r--widgets/table/e-table-header-item.c18
-rw-r--r--widgets/table/e-table-header-item.h2
-rw-r--r--widgets/table/e-table.c20
-rw-r--r--widgets/table/test-table.c4
8 files changed, 576 insertions, 563 deletions
diff --git a/widgets/table/e-table-config.c b/widgets/table/e-table-config.c
index 679c2d5b63..c0fa629019 100644
--- a/widgets/table/e-table-config.c
+++ b/widgets/table/e-table-config.c
@@ -10,303 +10,324 @@
#include <config.h>
#include <stdlib.h>
-#include <gnome.h>
+#include <libgnomeui/gnome-dialog.h>
+#include <glade/glade.h>
#include "e-table-config.h"
#include "e-table-config-field.h"
#include "gal/util/e-util.h"
-#define PARENT_TYPE (gnome_dialog_get_type())
-static GnomeDialogClass *etco_parent_class;
+#define PARENT_TYPE (gtk_object_get_type())
+
+static GtkObjectClass *config_parent_class;
static void
-etco_destroy (GtkObject *object)
+config_destroy (GtkObject *object)
{
- ETableConfig *etco = E_TABLE_CONFIG (object);
-
- if (etco->state) {
- if (etco->sorting_changed_id)
- gtk_signal_disconnect(GTK_OBJECT(etco->state->sort_info), etco->sorting_changed_id);
- if (etco->grouping_changed_id)
- gtk_signal_disconnect(GTK_OBJECT(etco->state->sort_info), etco->grouping_changed_id);
- gtk_object_unref(GTK_OBJECT(etco->state));
+ ETableConfig *config = E_TABLE_CONFIG (object);
+
+ if (config->state) {
+ if (config->sorting_changed_id)
+ gtk_signal_disconnect(GTK_OBJECT(config->state->sort_info), config->sorting_changed_id);
+ if (config->grouping_changed_id)
+ gtk_signal_disconnect(GTK_OBJECT(config->state->sort_info), config->grouping_changed_id);
+ gtk_object_unref(GTK_OBJECT(config->state));
}
- gtk_object_unref(GTK_OBJECT(etco->spec));
+ gtk_object_unref(GTK_OBJECT(config->spec));
- GTK_OBJECT_CLASS (etco_parent_class)->destroy (object);
+ GTK_OBJECT_CLASS (config_parent_class)->destroy (object);
}
static void
-etco_class_init (GtkObjectClass *klass)
+config_class_init (GtkObjectClass *klass)
{
- etco_parent_class = gtk_type_class (PARENT_TYPE);
+ config_parent_class = gtk_type_class (PARENT_TYPE);
- klass->destroy = etco_destroy;
+ klass->destroy = config_destroy;
}
static void
-etco_clear_sort(GtkWidget *widget, ETableConfig *etco)
+config_clear_sort (GtkWidget *widget, ETableConfig *config)
{
- etco->sort_dialog = NULL;
- gtk_object_unref(GTK_OBJECT(etco));
+ config->sort_dialog = NULL;
+ gtk_object_unref(GTK_OBJECT(config));
}
static void
-etco_clear_group(GtkWidget *widget, ETableConfig *etco)
+config_clear_group (GtkWidget *widget, ETableConfig *config)
{
- etco->group_dialog = NULL;
- gtk_object_unref(GTK_OBJECT(etco));
+ config->group_dialog = NULL;
+ gtk_object_unref(GTK_OBJECT(config));
}
static void
-etco_sort_config_show(GtkWidget *widget, ETableConfig *etco)
+config_sort_config_show (GtkWidget *widget, ETableConfig *config)
{
- if (etco->sort_dialog)
- gdk_window_raise(GTK_WIDGET(etco->sort_dialog)->window);
+ if (config->sort_dialog)
+ gdk_window_raise (GTK_WIDGET (config->sort_dialog)->window);
else {
GtkWidget *etcf;
- etco->sort_dialog = gnome_dialog_new(_("Sort"),
+ config->sort_dialog = gnome_dialog_new(_("Sort"),
GNOME_STOCK_BUTTON_OK,
NULL);
- etcf = GTK_WIDGET(e_table_config_field_new(etco->spec,
- etco->state->sort_info,
+ etcf = GTK_WIDGET(e_table_config_field_new(config->spec,
+ config->state->sort_info,
FALSE));
- gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(etco->sort_dialog)->vbox), etcf, FALSE, FALSE, 0);
- gnome_dialog_set_parent(GNOME_DIALOG(etco->sort_dialog),
- GTK_WINDOW(etco));
+ gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(config->sort_dialog)->vbox), etcf, FALSE, FALSE, 0);
+ gnome_dialog_set_parent(GNOME_DIALOG(config->sort_dialog),
+ GTK_WINDOW(config));
- gtk_signal_connect(GTK_OBJECT(etco->sort_dialog), "destroy",
- GTK_SIGNAL_FUNC(etco_clear_sort), etco);
- gtk_object_ref(GTK_OBJECT(etco));
+ gtk_signal_connect(GTK_OBJECT(config->sort_dialog), "destroy",
+ GTK_SIGNAL_FUNC(config_clear_sort), config);
+ gtk_object_ref(GTK_OBJECT(config));
- gtk_signal_connect(GTK_OBJECT(etco->sort_dialog), "clicked",
- GTK_SIGNAL_FUNC(gnome_dialog_close), etco);
+ gtk_signal_connect(GTK_OBJECT(config->sort_dialog), "clicked",
+ GTK_SIGNAL_FUNC(gnome_dialog_close), config);
gtk_widget_show(GTK_WIDGET(etcf));
- gtk_widget_show(GTK_WIDGET(etco->sort_dialog));
+ gtk_widget_show(GTK_WIDGET(config->sort_dialog));
}
}
static void
-etco_group_config_show(GtkWidget *widget, ETableConfig *etco)
+config_group_config_show(GtkWidget *widget, ETableConfig *config)
{
- if (etco->group_dialog)
- gdk_window_raise(GTK_WIDGET(etco->group_dialog)->window);
+ if (config->group_dialog)
+ gdk_window_raise(GTK_WIDGET(config->group_dialog)->window);
else {
GtkWidget *etcf;
- etco->group_dialog = gnome_dialog_new(_("Group"),
+ config->group_dialog = gnome_dialog_new(_("Group"),
GNOME_STOCK_BUTTON_OK,
NULL);
- etcf = GTK_WIDGET(e_table_config_field_new(etco->spec,
- etco->state->sort_info,
+ etcf = GTK_WIDGET(e_table_config_field_new(config->spec,
+ config->state->sort_info,
TRUE));
- gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(etco->group_dialog)->vbox), etcf, FALSE, FALSE, 0);
- gnome_dialog_set_parent(GNOME_DIALOG(etco->group_dialog),
- GTK_WINDOW(etco));
+ gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(config->group_dialog)->vbox), etcf, FALSE, FALSE, 0);
+ gnome_dialog_set_parent(GNOME_DIALOG(config->group_dialog),
+ GTK_WINDOW(config));
- gtk_signal_connect(GTK_OBJECT(etco->group_dialog), "destroy",
- GTK_SIGNAL_FUNC(etco_clear_group), etco);
- gtk_signal_connect(GTK_OBJECT(etco->group_dialog), "clicked",
- GTK_SIGNAL_FUNC(gnome_dialog_close), etco);
- gtk_object_ref(GTK_OBJECT(etco));
+ gtk_signal_connect(GTK_OBJECT(config->group_dialog), "destroy",
+ GTK_SIGNAL_FUNC(config_clear_group), config);
+ gtk_signal_connect(GTK_OBJECT(config->group_dialog), "clicked",
+ GTK_SIGNAL_FUNC(gnome_dialog_close), config);
+ gtk_object_ref(GTK_OBJECT(config));
gtk_widget_show(GTK_WIDGET(etcf));
- gtk_widget_show(GTK_WIDGET(etco->group_dialog));
+ gtk_widget_show(GTK_WIDGET(config->group_dialog));
}
}
static void
-etco_sort_info_update(ETableSortInfo *info, ETableConfig *etco)
+config_sort_info_update (ETableConfig *config)
{
- int count;
- int i;
- gchar **strings;
- gchar *substrings[3];
- int stringcount = 0;
- gchar *string;
+ ETableSortInfo *info = config->state->sort_info;
+ GString *res;
+ int count, i;
- count = e_table_sort_info_sorting_get_count(info);
- strings = g_new(gchar *, count + 1);
+ count = e_table_sort_info_sorting_get_count (info);
+ res = g_string_new ("");
for (i = 0; i < count; i++) {
- ETableSortColumn col = e_table_sort_info_sorting_get_nth(info, i);
+ ETableSortColumn col = e_table_sort_info_sorting_get_nth (info, i);
ETableColumnSpecification **column;
- substrings[0] = NULL;
-
- for (column = etco->spec->columns; *column; column++) {
+ for (column = config->spec->columns; *column; column++) {
if (col.column == (*column)->model_col) {
- substrings[0] = (*column)->title_;
+ g_string_append (res, (*column)->title_);
+ g_string_append_c (res, ' ');
+ g_string_append (
+ res,
+ col.ascending ?
+ _("(Ascending)") : _("(Descending)"));
break;
}
}
-
- if (substrings[0]) {
- substrings[1] = col.ascending ? _("(Ascending)") : _("(Descending)");
- substrings[2] = NULL;
- strings[stringcount++] = g_strjoinv(" ", substrings);
- }
- }
- strings[stringcount] = NULL;
- string = g_strjoinv(", ", strings);
-
- for (i = 0; strings[i]; i++) {
- g_free(strings[i]);
}
- gtk_label_set_text(GTK_LABEL(etco->sort_label), string);
- g_free(string);
+ if (res->str [0] == 0)
+ g_string_append (res, _("Not sorted"));
+
+ gtk_label_set_text (GTK_LABEL(config->sort_label), res->str);
+ g_string_free (res, TRUE);
}
static void
-etco_group_info_update(ETableSortInfo *info, ETableConfig *etco)
+config_group_info_update (ETableConfig *config)
{
- int count;
- int i;
- gchar **strings;
- gchar *substrings[3];
- int stringcount = 0;
- gchar *string;
+ ETableSortInfo *info = config->state->sort_info;
+ GString *res;
+ int count, i;
- count = e_table_sort_info_grouping_get_count(info);
- strings = g_new(gchar *, count + 1);
+ count = e_table_sort_info_grouping_get_count (info);
+ res = g_string_new ("");
for (i = 0; i < count; i++) {
- ETableSortColumn col = e_table_sort_info_grouping_get_nth(info, i);
+ ETableSortColumn col = e_table_sort_info_grouping_get_nth (info, i);
ETableColumnSpecification **column;
- substrings[0] = NULL;
-
- for (column = etco->spec->columns; *column; column++) {
+ for (column = config->spec->columns; *column; column++) {
if (col.column == (*column)->model_col) {
- substrings[0] = (*column)->title_;
- break;
+ g_string_append (res, (*column)->title_);
+ g_string_append_c (res, ' ');
+ g_string_append (
+ res,
+ col.ascending ?
+ _("(Ascending)") : _("(Descending)"));
}
}
-
- if (substrings[0]) {
- substrings[1] = col.ascending ? _("(Ascending)") : _("(Descending)");
- substrings[2] = NULL;
- strings[stringcount++] = g_strjoinv(" ", substrings);
- }
}
- strings[stringcount] = NULL;
- string = g_strjoinv(", ", strings);
+ if (res->str [0] == 0)
+ g_string_append (res, _("No grouping"));
+
+ gtk_label_set_text (GTK_LABEL (config->group_label), res->str);
+ g_string_free (res, TRUE);
+}
+
+static void
+config_fields_info_update (ETableConfig *config)
+{
+ ETableColumnSpecification **column;
+ GString *res = g_string_new ("");
- for (i = 0; strings[i]; i++) {
- g_free(strings[i]);
+ for (column = config->spec->columns; *column; *column++){
+ g_string_append (res, (*column)->title_);
+ if (column [1])
+ g_string_append (res, ", ");
}
- gtk_label_set_text(GTK_LABEL(etco->group_label), string);
- g_free(string);
+ gtk_label_set_text (GTK_LABEL (config->fields_label), res->str);
+ g_string_free (res, TRUE);
+}
+
+static void
+apply_changes (ETableConfig *config)
+{
+ /* Do apply changes here */
+}
+
+static void
+dialog_destroyed (GtkObject *dialog, ETableConfig *config)
+{
+ gtk_object_destroy (GTK_OBJECT (config));
}
static void
-etco_init (ETableConfig *etco)
+setup_gui (ETableConfig *config)
{
- GtkWidget *frame;
- GtkWidget *table;
GtkWidget *sort_button;
GtkWidget *group_button;
+ GladeXML *gui = glade_xml_new (
+ ETABLE_GLADEDIR "/e-table-config.glade", NULL);
+
+ config->dialog_toplevel = glade_xml_get_widget (
+ gui, "e-table-config");
- gtk_window_set_title(GTK_WINDOW(etco), _("View Summary"));
- gnome_dialog_append_buttons(GNOME_DIALOG(etco),
- GNOME_STOCK_BUTTON_OK,
- NULL);
- gnome_dialog_set_default(GNOME_DIALOG(etco), 0);
-
- frame = gtk_frame_new(_("Description"));
- gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(etco)->vbox), frame, FALSE, FALSE, 0);
-
- table = gtk_table_new(2, 2, FALSE);
- gtk_table_set_row_spacings(GTK_TABLE(table), 6);
- gtk_table_set_col_spacings(GTK_TABLE(table), 6);
- gtk_container_add(GTK_CONTAINER(frame), table);
- gtk_container_set_border_width(GTK_CONTAINER(table), 6);
-
- sort_button = gtk_button_new_with_label(_("Sort..."));
- gtk_table_attach(GTK_TABLE(table),
- sort_button,
- 0, 1, 0, 1,
- GTK_FILL,
- GTK_FILL,
- 0, 0);
-
- group_button = gtk_button_new_with_label(_("Group By..."));
- gtk_table_attach(GTK_TABLE(table),
- group_button,
- 0, 1, 1, 2,
- GTK_FILL,
- GTK_FILL,
- 0, 0);
-
- etco->sort_label = gtk_label_new("");
- gtk_table_attach(GTK_TABLE(table),
- etco->sort_label,
- 1, 2, 0, 1,
- GTK_FILL | GTK_EXPAND,
- GTK_FILL,
- 0, 0);
-
- etco->group_label = gtk_label_new("");
- gtk_table_attach(GTK_TABLE(table),
- etco->group_label,
- 1, 2, 1, 2,
- GTK_FILL | GTK_EXPAND,
- GTK_FILL,
- 0, 0);
-
- gtk_signal_connect(GTK_OBJECT(sort_button), "clicked",
- GTK_SIGNAL_FUNC(etco_sort_config_show), etco);
- gtk_signal_connect(GTK_OBJECT(group_button), "clicked",
- GTK_SIGNAL_FUNC(etco_group_config_show), etco);
-
- gtk_widget_show(etco->group_label);
- gtk_widget_show(etco->sort_label);
- gtk_widget_show(group_button);
- gtk_widget_show(sort_button);
- gtk_widget_show(table);
- gtk_widget_show(frame);
-
- etco->sorting_changed_id = 0;
- etco->grouping_changed_id = 0;
+ gtk_notebook_set_show_tabs (
+ GTK_NOTEBOOK (GNOME_PROPERTY_BOX (
+ config->dialog_toplevel)->notebook),
+ FALSE);
+
+ gtk_signal_connect (
+ GTK_OBJECT (config->dialog_toplevel), "apply",
+ GTK_SIGNAL_FUNC (apply_changes), config);
+
+ config->dialog_show_fields = glade_xml_get_widget (
+ gui, "dialog-show-fields");
+ config->dialog_group_by = glade_xml_get_widget (
+ gui, "dialog-group-by");
+ config->dialog_sort = glade_xml_get_widget (
+ gui, "dialog-sort");
+
+ config->sort_label = glade_xml_get_widget (
+ gui, "label-sort");
+ config->group_label = glade_xml_get_widget (
+ gui, "label-group");
+ config->fields_label = glade_xml_get_widget (
+ gui, "label-fields");
+
+ sort_button = glade_xml_get_widget (gui, "button-sort");
+ gtk_signal_connect(
+ GTK_OBJECT(sort_button), "clicked",
+ GTK_SIGNAL_FUNC (config_sort_config_show), config);
+
+ group_button = glade_xml_get_widget (gui, "button-group");
+ gtk_signal_connect(
+ GTK_OBJECT(group_button), "clicked",
+ GTK_SIGNAL_FUNC (config_group_config_show), config);
+
+ gtk_signal_connect (
+ GTK_OBJECT (config->dialog_toplevel), "destroy",
+ GTK_SIGNAL_FUNC (dialog_destroyed), config);
+
+ gtk_object_unref (GTK_OBJECT (gui));
}
-E_MAKE_TYPE(e_table_config, "ETableConfig", ETableConfig, etco_class_init, etco_init, PARENT_TYPE);
+static void
+config_init (ETableConfig *config)
+{
+ glade_gnome_init ();
+ setup_gui (config);
-GtkWidget *
-e_table_config_new (ETableSpecification *spec,
- ETableState *state)
+ config->sorting_changed_id = 0;
+ config->grouping_changed_id = 0;
+}
+
+E_MAKE_TYPE(e_table_config, "ETableConfig", ETableConfig, config_class_init, config_init, PARENT_TYPE);
+
+ETableConfig *
+e_table_config_new (const char *header,
+ ETableSpecification *spec,
+ ETableState *state)
{
- ETableConfig *etco = gtk_type_new (E_TABLE_CONFIG_TYPE);
+ ETableConfig *config = gtk_type_new (E_TABLE_CONFIG_TYPE);
- e_table_config_construct(etco, spec, state);
+ if (e_table_config_construct (config, config, spec, state) == NULL){
+ gtk_object_destroy (GTK_OBJECT (config));
+ return NULL;
+ }
- return GTK_WIDGET(etco);
+ gtk_widget_show (config->dialog_toplevel);
+ return E_TABLE_CONFIG (config);
}
-GtkWidget *
-e_table_config_construct (ETableConfig *etco,
+ETableConfig *
+e_table_config_construct (ETableConfig *config,
+ const char *header,
ETableSpecification *spec,
ETableState *state)
{
- etco->spec = spec;
- etco->state = state;
-
- if (etco->spec)
- gtk_object_ref(GTK_OBJECT(etco->spec));
- if (etco->state)
- gtk_object_ref(GTK_OBJECT(etco->state));
-
- etco->sorting_changed_id = gtk_signal_connect(GTK_OBJECT(etco->state->sort_info), "sort_info_changed",
- GTK_SIGNAL_FUNC(etco_sort_info_update), etco);
- etco->grouping_changed_id = gtk_signal_connect(GTK_OBJECT(etco->state->sort_info), "group_info_changed",
- GTK_SIGNAL_FUNC(etco_group_info_update), etco);
-
- etco_sort_info_update(etco->state->sort_info, etco);
- etco_group_info_update(etco->state->sort_info, etco);
-
- return GTK_WIDGET(etco);
+ config->spec = spec;
+ config->state = state;
+
+ if (config->spec)
+ gtk_object_ref (GTK_OBJECT(config->spec));
+ if (config->state)
+ gtk_object_ref (GTK_OBJECT(config->state));
+
+ /*
+ * FIXME:
+ *
+ * Are we going to allow async changes to the ETable? If so,
+ * we are in for some more work than required
+ *
+ */
+ config->sorting_changed_id = gtk_signal_connect (
+ GTK_OBJECT(config->state->sort_info), "sort_info_changed",
+ GTK_SIGNAL_FUNC(config_sort_info_update), config);
+ config->grouping_changed_id = gtk_signal_connect (
+ GTK_OBJECT(config->state->sort_info), "group_info_changed",
+ GTK_SIGNAL_FUNC (config_group_info_update), config);
+
+ config_sort_info_update (config);
+ config_group_info_update (config);
+ config_fields_info_update (config);
+
+ return E_TABLE_CONFIG (config);
}
+void
+e_table_config_raise (ETableConfig *config)
+{
+ gdk_window_raise (GTK_WIDGET (config->dialog_toplevel)->window);
+}
diff --git a/widgets/table/e-table-config.glade b/widgets/table/e-table-config.glade
index 3cc9c0e8e7..ba1c151322 100644
--- a/widgets/table/e-table-config.glade
+++ b/widgets/table/e-table-config.glade
@@ -19,334 +19,6 @@
<widget>
<class>GnomeDialog</class>
- <name>e-table-config</name>
- <visible>False</visible>
- <title>View Summary</title>
- <type>GTK_WINDOW_TOPLEVEL</type>
- <position>GTK_WIN_POS_NONE</position>
- <modal>False</modal>
- <allow_shrink>False</allow_shrink>
- <allow_grow>True</allow_grow>
- <auto_shrink>False</auto_shrink>
- <auto_close>False</auto_close>
- <hide_on_close>False</hide_on_close>
-
- <widget>
- <class>GtkVBox</class>
- <child_name>GnomeDialog:vbox</child_name>
- <name>dialog-vbox2</name>
- <homogeneous>False</homogeneous>
- <spacing>0</spacing>
- <child>
- <padding>0</padding>
- <expand>True</expand>
- <fill>True</fill>
- </child>
-
- <widget>
- <class>GtkHButtonBox</class>
- <child_name>GnomeDialog:action_area</child_name>
- <name>dialog-action_area2</name>
- <layout_style>GTK_BUTTONBOX_END</layout_style>
- <spacing>0</spacing>
- <child_min_width>85</child_min_width>
- <child_min_height>27</child_min_height>
- <child_ipad_x>7</child_ipad_x>
- <child_ipad_y>0</child_ipad_y>
- <child>
- <padding>0</padding>
- <expand>False</expand>
- <fill>True</fill>
- <pack>GTK_PACK_END</pack>
- </child>
-
- <widget>
- <class>GtkButton</class>
- <name>button12</name>
- <can_default>True</can_default>
- <can_focus>True</can_focus>
- <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
- </widget>
-
- <widget>
- <class>GtkButton</class>
- <name>button14</name>
- <can_default>True</can_default>
- <can_focus>True</can_focus>
- <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
- </widget>
- </widget>
-
- <widget>
- <class>GtkFrame</class>
- <name>top-frame</name>
- <border_width>2</border_width>
- <label>Description</label>
- <label_xalign>0</label_xalign>
- <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
- <child>
- <padding>0</padding>
- <expand>True</expand>
- <fill>True</fill>
- </child>
-
- <widget>
- <class>GtkTable</class>
- <name>table1</name>
- <border_width>2</border_width>
- <rows>3</rows>
- <columns>3</columns>
- <homogeneous>False</homogeneous>
- <row_spacing>2</row_spacing>
- <column_spacing>4</column_spacing>
-
- <widget>
- <class>GtkLabel</class>
- <name>label2</name>
- <label></label>
- <justify>GTK_JUSTIFY_CENTER</justify>
- <wrap>False</wrap>
- <xalign>0</xalign>
- <yalign>0.5</yalign>
- <xpad>0</xpad>
- <ypad>0</ypad>
- <child>
- <left_attach>2</left_attach>
- <right_attach>3</right_attach>
- <top_attach>0</top_attach>
- <bottom_attach>1</bottom_attach>
- <xpad>0</xpad>
- <ypad>0</ypad>
- <xexpand>False</xexpand>
- <yexpand>False</yexpand>
- <xshrink>False</xshrink>
- <yshrink>False</yshrink>
- <xfill>True</xfill>
- <yfill>False</yfill>
- </child>
- </widget>
-
- <widget>
- <class>GtkLabel</class>
- <name>label3</name>
- <label></label>
- <justify>GTK_JUSTIFY_CENTER</justify>
- <wrap>False</wrap>
- <xalign>0</xalign>
- <yalign>0.5</yalign>
- <xpad>0</xpad>
- <ypad>0</ypad>
- <child>
- <left_attach>2</left_attach>
- <right_attach>3</right_attach>
- <top_attach>1</top_attach>
- <bottom_attach>2</bottom_attach>
- <xpad>0</xpad>
- <ypad>0</ypad>
- <xexpand>False</xexpand>
- <yexpand>False</yexpand>
- <xshrink>False</xshrink>
- <yshrink>False</yshrink>
- <xfill>True</xfill>
- <yfill>False</yfill>
- </child>
- </widget>
-
- <widget>
- <class>GtkLabel</class>
- <name>label4</name>
- <label></label>
- <justify>GTK_JUSTIFY_CENTER</justify>
- <wrap>False</wrap>
- <xalign>0</xalign>
- <yalign>0.5</yalign>
- <xpad>0</xpad>
- <ypad>0</ypad>
- <child>
- <left_attach>2</left_attach>
- <right_attach>3</right_attach>
- <top_attach>2</top_attach>
- <bottom_attach>3</bottom_attach>
- <xpad>0</xpad>
- <ypad>0</ypad>
- <xexpand>False</xexpand>
- <yexpand>False</yexpand>
- <xshrink>False</xshrink>
- <yshrink>False</yshrink>
- <xfill>True</xfill>
- <yfill>False</yfill>
- </child>
- </widget>
-
- <widget>
- <class>GtkButton</class>
- <name>button15</name>
- <can_default>True</can_default>
- <can_focus>True</can_focus>
- <signal>
- <name>clicked</name>
- <handler>on_fields_clicked</handler>
- <last_modification_time>Tue, 03 Oct 2000 22:11:12 GMT</last_modification_time>
- </signal>
- <label>_Fields...</label>
- <relief>GTK_RELIEF_NORMAL</relief>
- <child>
- <left_attach>0</left_attach>
- <right_attach>1</right_attach>
- <top_attach>0</top_attach>
- <bottom_attach>1</bottom_attach>
- <xpad>0</xpad>
- <ypad>0</ypad>
- <xexpand>False</xexpand>
- <yexpand>False</yexpand>
- <xshrink>False</xshrink>
- <yshrink>False</yshrink>
- <xfill>True</xfill>
- <yfill>False</yfill>
- </child>
- </widget>
-
- <widget>
- <class>GtkButton</class>
- <name>button18</name>
- <can_default>True</can_default>
- <can_focus>True</can_focus>
- <signal>
- <name>clicked</name>
- <handler>on_sort_clicked</handler>
- <last_modification_time>Tue, 03 Oct 2000 22:10:58 GMT</last_modification_time>
- </signal>
- <label>_Sort...</label>
- <relief>GTK_RELIEF_NORMAL</relief>
- <child>
- <left_attach>0</left_attach>
- <right_attach>1</right_attach>
- <top_attach>2</top_attach>
- <bottom_attach>3</bottom_attach>
- <xpad>0</xpad>
- <ypad>0</ypad>
- <xexpand>False</xexpand>
- <yexpand>False</yexpand>
- <xshrink>False</xshrink>
- <yshrink>False</yshrink>
- <xfill>True</xfill>
- <yfill>False</yfill>
- </child>
- </widget>
-
- <widget>
- <class>GtkButton</class>
- <name>button16</name>
- <can_default>True</can_default>
- <can_focus>True</can_focus>
- <signal>
- <name>clicked</name>
- <handler>on_group_by_clicked</handler>
- <last_modification_time>Tue, 03 Oct 2000 22:10:50 GMT</last_modification_time>
- </signal>
- <label>_Group By...</label>
- <relief>GTK_RELIEF_NORMAL</relief>
- <child>
- <left_attach>0</left_attach>
- <right_attach>1</right_attach>
- <top_attach>1</top_attach>
- <bottom_attach>2</bottom_attach>
- <xpad>0</xpad>
- <ypad>0</ypad>
- <xexpand>False</xexpand>
- <yexpand>False</yexpand>
- <xshrink>False</xshrink>
- <yshrink>False</yshrink>
- <xfill>True</xfill>
- <yfill>False</yfill>
- </child>
- </widget>
-
- <widget>
- <class>GtkLabel</class>
- <name>label5</name>
- <label>Icon, Attachment, Flag Status,
-Full Name, Company, </label>
- <justify>GTK_JUSTIFY_CENTER</justify>
- <wrap>False</wrap>
- <xalign>0.5</xalign>
- <yalign>0.5</yalign>
- <xpad>0</xpad>
- <ypad>0</ypad>
- <child>
- <left_attach>1</left_attach>
- <right_attach>2</right_attach>
- <top_attach>0</top_attach>
- <bottom_attach>1</bottom_attach>
- <xpad>0</xpad>
- <ypad>0</ypad>
- <xexpand>False</xexpand>
- <yexpand>False</yexpand>
- <xshrink>False</xshrink>
- <yshrink>False</yshrink>
- <xfill>True</xfill>
- <yfill>True</yfill>
- </child>
- </widget>
-
- <widget>
- <class>GtkLabel</class>
- <name>label6</name>
- <label>None</label>
- <justify>GTK_JUSTIFY_CENTER</justify>
- <wrap>False</wrap>
- <xalign>0.5</xalign>
- <yalign>0.5</yalign>
- <xpad>0</xpad>
- <ypad>0</ypad>
- <child>
- <left_attach>1</left_attach>
- <right_attach>2</right_attach>
- <top_attach>1</top_attach>
- <bottom_attach>2</bottom_attach>
- <xpad>0</xpad>
- <ypad>0</ypad>
- <xexpand>False</xexpand>
- <yexpand>False</yexpand>
- <xshrink>False</xshrink>
- <yshrink>False</yshrink>
- <xfill>True</xfill>
- <yfill>True</yfill>
- </child>
- </widget>
-
- <widget>
- <class>GtkLabel</class>
- <name>label7</name>
- <label>File As (ascending)</label>
- <justify>GTK_JUSTIFY_CENTER</justify>
- <wrap>False</wrap>
- <xalign>0.5</xalign>
- <yalign>0.5</yalign>
- <xpad>0</xpad>
- <ypad>0</ypad>
- <child>
- <left_attach>1</left_attach>
- <right_attach>2</right_attach>
- <top_attach>2</top_attach>
- <bottom_attach>3</bottom_attach>
- <xpad>0</xpad>
- <ypad>0</ypad>
- <xexpand>False</xexpand>
- <yexpand>False</yexpand>
- <xshrink>False</xshrink>
- <yshrink>False</yshrink>
- <xfill>True</xfill>
- <yfill>True</yfill>
- </child>
- </widget>
- </widget>
- </widget>
- </widget>
-</widget>
-
-<widget>
- <class>GnomeDialog</class>
<name>dialog-show-fields</name>
<visible>False</visible>
<title>Show Fields</title>
@@ -1997,4 +1669,305 @@ Full Name, Company, </label>
</widget>
</widget>
+<widget>
+ <class>GnomePropertyBox</class>
+ <name>e-table-config</name>
+ <position>GTK_WIN_POS_NONE</position>
+ <modal>False</modal>
+ <allow_shrink>False</allow_shrink>
+ <allow_grow>False</allow_grow>
+ <auto_shrink>False</auto_shrink>
+
+ <widget>
+ <class>GtkNotebook</class>
+ <child_name>GnomePropertyBox:notebook</child_name>
+ <name>notebook1</name>
+ <show_tabs>False</show_tabs>
+ <show_border>True</show_border>
+ <tab_pos>GTK_POS_TOP</tab_pos>
+ <scrollable>False</scrollable>
+ <tab_hborder>2</tab_hborder>
+ <tab_vborder>2</tab_vborder>
+ <popup_enable>False</popup_enable>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkFrame</class>
+ <name>top-frame</name>
+ <border_width>2</border_width>
+ <label>Description</label>
+ <label_xalign>0</label_xalign>
+ <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+
+ <widget>
+ <class>GtkTable</class>
+ <name>table1</name>
+ <border_width>2</border_width>
+ <rows>3</rows>
+ <columns>3</columns>
+ <homogeneous>False</homogeneous>
+ <row_spacing>2</row_spacing>
+ <column_spacing>4</column_spacing>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label2</name>
+ <label></label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label3</name>
+ <label></label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label4</name>
+ <label></label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <left_attach>2</left_attach>
+ <right_attach>3</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button15</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <signal>
+ <name>clicked</name>
+ <handler>on_fields_clicked</handler>
+ <last_modification_time>Tue, 03 Oct 2000 22:11:12 GMT</last_modification_time>
+ </signal>
+ <label>_Fields...</label>
+ <relief>GTK_RELIEF_NORMAL</relief>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>1</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-sort</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <signal>
+ <name>clicked</name>
+ <handler>on_sort_clicked</handler>
+ <last_modification_time>Tue, 03 Oct 2000 22:10:58 GMT</last_modification_time>
+ </signal>
+ <label>_Sort...</label>
+ <relief>GTK_RELIEF_NORMAL</relief>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>1</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button-group</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <signal>
+ <name>clicked</name>
+ <handler>on_group_by_clicked</handler>
+ <last_modification_time>Tue, 03 Oct 2000 22:10:50 GMT</last_modification_time>
+ </signal>
+ <label>_Group By...</label>
+ <relief>GTK_RELIEF_NORMAL</relief>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>1</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label-group</name>
+ <label></label>
+ <justify>GTK_JUSTIFY_LEFT</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label-sort</name>
+ <label></label>
+ <justify>GTK_JUSTIFY_LEFT</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label-fields</name>
+ <label></label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <child_name>Notebook:tab</child_name>
+ <name>label20</name>
+ <label>label20</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+ </widget>
+</widget>
+
</GTK-Interface>
diff --git a/widgets/table/e-table-config.glade.h b/widgets/table/e-table-config.glade.h
index de73232529..bed862eaac 100644
--- a/widgets/table/e-table-config.glade.h
+++ b/widgets/table/e-table-config.glade.h
@@ -4,15 +4,6 @@
* DO NOT compile it as part of your application.
*/
-gchar *s = N_("View Summary");
-gchar *s = N_("Description");
-gchar *s = N_("_Fields...");
-gchar *s = N_("_Sort...");
-gchar *s = N_("_Group By...");
-gchar *s = N_("Icon, Attachment, Flag Status,\n"
- "Full Name, Company, ");
-gchar *s = N_("None");
-gchar *s = N_("File As (ascending)");
gchar *s = N_("Show Fields");
gchar *s = N_("A_vailable Fields:");
gchar *s = N_("Sh_ow these fields in order:");
@@ -55,3 +46,8 @@ gchar *s = N_("Sort Items By");
gchar *s = N_("File By");
gchar *s = N_("Ascending");
gchar *s = N_("Descending");
+gchar *s = N_("Description");
+gchar *s = N_("_Fields...");
+gchar *s = N_("_Sort...");
+gchar *s = N_("_Group By...");
+gchar *s = N_("label20");
diff --git a/widgets/table/e-table-config.h b/widgets/table/e-table-config.h
index ddae3f1497..4b444636d7 100644
--- a/widgets/table/e-table-config.h
+++ b/widgets/table/e-table-config.h
@@ -13,14 +13,26 @@
#define E_IS_TABLE_CONFIG_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), E_TABLE_CONFIG_TYPE))
typedef struct {
- GnomeDialog base;
-
+ GtkObject parent;
+
+ /*
+ * Our various dialog boxes
+ */
+ GtkWidget *dialog_toplevel;
+ GtkWidget *dialog_show_fields;
+ GtkWidget *dialog_group_by;
+ GtkWidget *dialog_sort;
+
+ /*
+ * The state we manipulate
+ */
ETableSpecification *spec;
ETableState *state;
GtkWidget *sort_label;
GtkWidget *group_label;
-
+ GtkWidget *fields_label;
+
GtkWidget *sort_dialog;
GtkWidget *group_dialog;
@@ -29,14 +41,17 @@ typedef struct {
} ETableConfig;
typedef struct {
- GnomeDialogClass parent_class;
+ GtkObjectClass parent_class;
} ETableConfigClass;
-GtkType e_table_config_get_type (void);
-GtkWidget *e_table_config_new (ETableSpecification *spec,
- ETableState *state);
-GtkWidget *e_table_config_construct (ETableConfig *etco,
- ETableSpecification *spec,
- ETableState *state);
+GtkType e_table_config_get_type (void);
+ETableConfig *e_table_config_new (const char *header,
+ ETableSpecification *spec,
+ ETableState *state);
+ETableConfig *e_table_config_construct (ETableConfig *etco,
+ const char *header,
+ ETableSpecification *spec,
+ ETableState *state);
+void e_table_config_raise (ETableConfig *config);
#endif /* _E_TABLE_CONFIG_H */
diff --git a/widgets/table/e-table-header-item.c b/widgets/table/e-table-header-item.c
index cbb236cca0..e67b83edb5 100644
--- a/widgets/table/e-table-header-item.c
+++ b/widgets/table/e-table-header-item.c
@@ -1186,21 +1186,27 @@ ethi_popup_format_columns(GtkWidget *widget, EthiHeaderInfo *info)
}
static void
+config_destroyed (GtkObject *object, ETableHeaderItem *ethi)
+{
+ ethi->config = NULL;
+}
+
+static void
ethi_popup_customize_view(GtkWidget *widget, EthiHeaderInfo *info)
{
ETableHeaderItem *ethi = info->ethi;
ETableState *state;
if (ethi->config)
- gdk_window_raise(GTK_WIDGET(ethi->config)->window);
+ e_table_config_raise (E_TABLE_CONFIG (ethi->config));
else {
state = e_table_get_state_object(ethi->table);
- ethi->config = e_table_config_new(ethi->table->spec,
- state);
- gtk_signal_connect(GTK_OBJECT(ethi->config), "clicked",
- GTK_SIGNAL_FUNC(gnome_dialog_close), ethi);
- gtk_widget_show(ethi->config);
+ ethi->config = e_table_config_new (
+ _("Configuring view: FIXME"),
+ ethi->table->spec, state);
+ gtk_signal_connect (GTK_OBJECT (ethi->config), "destroy",
+ GTK_SIGNAL_FUNC (config_destroyed), ethi);
}
}
diff --git a/widgets/table/e-table-header-item.h b/widgets/table/e-table-header-item.h
index b029d58280..1c2941c602 100644
--- a/widgets/table/e-table-header-item.h
+++ b/widgets/table/e-table-header-item.h
@@ -62,7 +62,7 @@ typedef struct {
/* For adding fields. */
ETableHeader *full_header;
ETable *table;
- GtkWidget *config;
+ void *config;
} ETableHeaderItem;
typedef struct {
diff --git a/widgets/table/e-table.c b/widgets/table/e-table.c
index 2d2303def1..eec3f44735 100644
--- a/widgets/table/e-table.c
+++ b/widgets/table/e-table.c
@@ -373,12 +373,13 @@ group_key_press (ETableGroup *etg, int row, int col, GdkEvent *event, ETable *et
GdkEventButton click;
switch (key->keyval) {
case GDK_Page_Down:
- gtk_adjustment_set_value(gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas)),
- CLAMP(gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->value +
- (gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->page_size - 20),
- 0,
- gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->upper -
- gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->page_size));
+ gtk_adjustment_set_value(
+ gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas)),
+ CLAMP(gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->value +
+ (gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->page_size - 20),
+ 0,
+ gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->upper -
+ gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->page_size));
click.type = GDK_BUTTON_PRESS;
click.window = GTK_LAYOUT (et->table_canvas)->bin_window;
click.send_event = key->send_event;
@@ -392,9 +393,10 @@ group_key_press (ETableGroup *etg, int row, int col, GdkEvent *event, ETable *et
return_val = 1;
break;
case GDK_Page_Up:
- gtk_adjustment_set_value(gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas)),
- gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->value -
- (gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->page_size - 20));
+ gtk_adjustment_set_value(
+ gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas)),
+ gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->value -
+ (gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->page_size - 20));
click.type = GDK_BUTTON_PRESS;
click.window = GTK_LAYOUT (et->table_canvas)->bin_window;
click.send_event = key->send_event;
diff --git a/widgets/table/test-table.c b/widgets/table/test-table.c
index 1dcba363fa..314df1000e 100644
--- a/widgets/table/test-table.c
+++ b/widgets/table/test-table.c
@@ -9,8 +9,8 @@
#include <stdio.h>
#include <string.h>
#include <gnome.h>
-#include "gal/e-util/e-cursors.h"
-#include "gal/e-util/e-canvas.h"
+#include "gal/widgets/e-cursors.h"
+#include "gal/widgets/e-canvas.h"
#include "e-table-simple.h"
#include "e-table-header.h"
#include "e-table-header-item.h"