aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/table
diff options
context:
space:
mode:
authorChristopher James Lahey <clahey@ximian.com>2001-03-30 09:27:38 +0800
committerChris Lahey <clahey@src.gnome.org>2001-03-30 09:27:38 +0800
commit491523b07ca6d9b1264ff2f53760a580715f2db6 (patch)
tree32c42d340fb0b3b667f25982192d64b88675b6e2 /widgets/table
parent55c3dea8392096c85ab4bfcd7872b44bb1a3e16c (diff)
downloadgsoc2013-evolution-491523b07ca6d9b1264ff2f53760a580715f2db6.tar.gz
gsoc2013-evolution-491523b07ca6d9b1264ff2f53760a580715f2db6.tar.zst
gsoc2013-evolution-491523b07ca6d9b1264ff2f53760a580715f2db6.zip
Updated to set the width of the header canvas to be equal to the width of
2001-03-29 Christopher James Lahey <clahey@ximian.com> * e-table.c, e-tree.c, e-tree.h: Updated to set the width of the header canvas to be equal to the width of the table canvas to avoid infinite loops. Added left arrow and right arrow as tree collapse and expand bindings. svn path=/trunk/; revision=9035
Diffstat (limited to 'widgets/table')
-rw-r--r--widgets/table/e-table.c39
-rw-r--r--widgets/table/e-tree.c55
-rw-r--r--widgets/table/e-tree.h4
3 files changed, 73 insertions, 25 deletions
diff --git a/widgets/table/e-table.c b/widgets/table/e-table.c
index 4a2edcb6f1..a61ec0fea9 100644
--- a/widgets/table/e-table.c
+++ b/widgets/table/e-table.c
@@ -257,12 +257,28 @@ et_focus (GtkContainer *container, GtkDirectionType direction)
}
static void
+set_header_canvas_width (ETable *e_table)
+{
+ double oldwidth, oldheight, width;
+
+ gnome_canvas_get_scroll_region (GNOME_CANVAS (e_table->table_canvas),
+ NULL, NULL, &width, NULL);
+ gnome_canvas_get_scroll_region (GNOME_CANVAS (e_table->header_canvas),
+ NULL, NULL, &oldwidth, &oldheight);
+
+ if (oldwidth != width ||
+ oldheight != E_TABLE_HEADER_ITEM (e_table->header_item)->height - 1)
+ gnome_canvas_set_scroll_region (
+ GNOME_CANVAS (e_table->header_canvas),
+ 0, 0, width, /* COLUMN_HEADER_HEIGHT - 1 */
+ E_TABLE_HEADER_ITEM (e_table->header_item)->height - 1);
+
+}
+
+static void
header_canvas_size_allocate (GtkWidget *widget, GtkAllocation *alloc, ETable *e_table)
{
- gnome_canvas_set_scroll_region (
- GNOME_CANVAS (e_table->header_canvas),
- 0, 0, alloc->width - 1, /* COLUMN_HEADER_HEIGHT - 1 */
- E_TABLE_HEADER_ITEM (e_table->header_item)->height - 1);
+ set_header_canvas_width (e_table);
/* When the header item is created ->height == 0,
as the font is only created when everything is realized.
@@ -321,6 +337,7 @@ table_canvas_reflow_idle (ETable *e_table)
{
gdouble height, width;
gdouble item_height;
+ gdouble oldheight, oldwidth;
GtkAllocation *alloc = &(GTK_WIDGET (e_table->table_canvas)->allocation);
gtk_object_get (GTK_OBJECT (e_table->canvas_vbox),
@@ -331,11 +348,17 @@ table_canvas_reflow_idle (ETable *e_table)
height = MAX ((int)height, alloc->height);
width = MAX((int)width, alloc->width);
/* I have no idea why this needs to be -1, but it works. */
- gnome_canvas_set_scroll_region (
- GNOME_CANVAS (e_table->table_canvas),
- 0, 0, width - 1, height - 1);
+ gnome_canvas_get_scroll_region (GNOME_CANVAS (e_table->table_canvas),
+ NULL, NULL, &oldwidth, &oldheight);
+
+ if (oldwidth != width - 1 ||
+ oldheight != height - 1) {
+ gnome_canvas_set_scroll_region (GNOME_CANVAS (e_table->table_canvas),
+ 0, 0, width - 1, height - 1);
+ set_header_canvas_width (e_table);
+ }
gtk_object_set (GTK_OBJECT (e_table->white_item),
- "y1", item_height + 1,
+ "y1", item_height,
"x2", width,
"y2", height,
NULL);
diff --git a/widgets/table/e-tree.c b/widgets/table/e-tree.c
index d73c63d144..5263271557 100644
--- a/widgets/table/e-tree.c
+++ b/widgets/table/e-tree.c
@@ -174,7 +174,7 @@ e_tree_init (GtkObject *object)
e_tree->drag_source_button_press_event_id = 0;
e_tree->drag_source_motion_notify_event_id = 0;
- e_tree->selection = e_table_selection_model_new();
+ e_tree->selection = E_SELECTION_MODEL(e_table_selection_model_new());
e_tree->spec = NULL;
}
@@ -206,12 +206,28 @@ et_focus (GtkContainer *container, GtkDirectionType direction)
}
static void
+set_header_canvas_width (ETree *e_tree)
+{
+ double oldwidth, oldheight, width;
+
+ gnome_canvas_get_scroll_region (GNOME_CANVAS (e_tree->table_canvas),
+ NULL, NULL, &width, NULL);
+ gnome_canvas_get_scroll_region (GNOME_CANVAS (e_tree->header_canvas),
+ NULL, NULL, &oldwidth, &oldheight);
+
+ if (oldwidth != width ||
+ oldheight != E_TABLE_HEADER_ITEM (e_tree->header_item)->height - 1)
+ gnome_canvas_set_scroll_region (
+ GNOME_CANVAS (e_tree->header_canvas),
+ 0, 0, width, /* COLUMN_HEADER_HEIGHT - 1 */
+ E_TABLE_HEADER_ITEM (e_tree->header_item)->height - 1);
+
+}
+
+static void
header_canvas_size_allocate (GtkWidget *widget, GtkAllocation *alloc, ETree *e_tree)
{
- gnome_canvas_set_scroll_region (
- GNOME_CANVAS (e_tree->header_canvas),
- 0, 0, alloc->width - 1, /* COLUMN_HEADER_HEIGHT - 1 */
- E_TABLE_HEADER_ITEM (e_tree->header_item)->height - 1);
+ set_header_canvas_width (e_tree);
/* When the header item is created ->height == 0,
as the font is only created when everything is realized.
@@ -259,6 +275,7 @@ tree_canvas_reflow_idle (ETree *e_tree)
{
gdouble height, width;
gdouble item_height;
+ gdouble oldheight, oldwidth;
GtkAllocation *alloc = &(GTK_WIDGET (e_tree->table_canvas)->allocation);
gtk_object_get (GTK_OBJECT (e_tree->item),
@@ -269,11 +286,17 @@ tree_canvas_reflow_idle (ETree *e_tree)
height = MAX ((int)height, alloc->height);
width = MAX((int)width, alloc->width);
/* I have no idea why this needs to be -1, but it works. */
- gnome_canvas_set_scroll_region (
- GNOME_CANVAS (e_tree->table_canvas),
- 0, 0, width - 1, height - 1);
+ gnome_canvas_get_scroll_region (GNOME_CANVAS (e_tree->table_canvas),
+ NULL, NULL, &oldwidth, &oldheight);
+
+ if (oldwidth != width - 1 ||
+ oldheight != height - 1) {
+ gnome_canvas_set_scroll_region (GNOME_CANVAS (e_tree->table_canvas),
+ 0, 0, width - 1, height - 1);
+ set_header_canvas_width (e_tree);
+ }
gtk_object_set (GTK_OBJECT (e_tree->white_item),
- "y1", item_height + 1,
+ "y1", item_height,
"x2", width,
"y2", height,
NULL);
@@ -415,10 +438,12 @@ item_key_press (ETableItem *eti, int row, int col, GdkEvent *event, ETree *et)
return_val = 1;
break;
case '=':
+ case GDK_Right:
path = e_tree_table_adapter_node_at_row(et->etta, row);
e_tree_table_adapter_node_set_expanded (et->etta, path, TRUE);
break;
case '-':
+ case GDK_Left:
path = e_tree_table_adapter_node_at_row(et->etta, row);
e_tree_table_adapter_node_set_expanded (et->etta, path, FALSE);
break;
@@ -747,12 +772,6 @@ et_real_construct (ETree *e_tree, ETreeModel *etm, ETableExtras *ete,
e_tree->etta = E_TREE_TABLE_ADAPTER(e_tree_table_adapter_new(E_TREE_MODEL(e_tree->sorted)));
- gtk_object_set(GTK_OBJECT(e_tree->selection),
- "model", E_TABLE_MODEL(e_tree->etta),
- "selection_mode", specification->selection_mode,
- "cursor_mode", specification->cursor_mode,
- NULL);
-
gtk_widget_push_visual (gdk_rgb_get_visual ());
gtk_widget_push_colormap (gdk_rgb_get_cmap ());
@@ -761,6 +780,12 @@ et_real_construct (ETree *e_tree, ETreeModel *etm, ETableExtras *ete,
gtk_object_set (GTK_OBJECT (e_tree->selection),
"model", e_tree->etta,
"sorter", e_tree->sorter,
+#if 0
+ "ets", e_tree->sorted,
+ "model", e_tree->model,
+#endif
+ "selection_mode", specification->selection_mode,
+ "cursor_mode", specification->cursor_mode,
NULL);
gtk_signal_connect(GTK_OBJECT(e_tree->selection), "selection_changed",
diff --git a/widgets/table/e-tree.h b/widgets/table/e-tree.h
index 6b8f71789c..3ff63e315a 100644
--- a/widgets/table/e-tree.h
+++ b/widgets/table/e-tree.h
@@ -9,7 +9,7 @@
#include <gal/e-table/e-table-group.h>
#include <gal/e-table/e-table-sort-info.h>
#include <gal/e-table/e-table-item.h>
-#include <gal/e-table/e-table-selection-model.h>
+#include <gal/e-table/e-tree-selection-model.h>
#include <gal/e-table/e-table-extras.h>
#include <gal/e-table/e-table-specification.h>
#include <gal/widgets/e-printable.h>
@@ -41,7 +41,7 @@ typedef struct {
ETableSortInfo *sort_info;
ESorter *sorter;
- ETableSelectionModel *selection;
+ ESelectionModel *selection;
ETableSpecification *spec;
int reflow_idle_id;