/* * ECell::event method */ static gint ecv_event (ECellView *ecell_view, GdkEvent *event, int model_col, int view_col, int row, ECellFlags flags, ECellActions *actions) { ECellHboxView *hbox_view = (ECellHboxView *)ecell_view; int y = 0; int i; int subcell_offset = 0; switch (event->type) { case GDK_BUTTON_PRESS: case GDK_BUTTON_RELEASE: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: y = event->button.y; break; case GDK_MOTION_NOTIFY: y = event->motion.y; break; default: /* nada */ break; } for (i = 0; i < hbox_view->subcell_view_count; i++) { int width = e_cell_max_width_by_row (hbox_view->subcell_views[i], hbox_view->model_cols[i], view_col, row); if (width < hbox_view->def_size_cols[i]) width = hbox_view->def_size_cols[i]; if (y < subcell_offset + width) return e_cell_event(hbox_view->subcell_views[i], event, hbox_view->model_cols[i], view_col, row, flags, actions); subcell_offset += width; } return 0; }
/* * ECell::max_width method */ static gint ect_max_width (ECellView *ecell_view, gint model_col, gint view_col) { ECellTreeView *tree_view = (ECellTreeView *) ecell_view; gint row; gint number_of_rows; gint max_width = 0; gint width = 0; gint subcell_max_width = 0; gboolean per_row = e_cell_max_width_by_row_implemented (tree_view->subcell_view); number_of_rows = e_table_model_row_count (ecell_view->e_table_model); if (!per_row) subcell_max_width = e_cell_max_width (tree_view->subcell_view, model_col, view_col); for (row = 0; row < number_of_rows; row++) { gint offset, subcell_offset; #if 0 gboolean expanded, expandable; ETreeTableAdapter *tree_table_adapter = e_cell_tree_get_tree_table_adapter (ecell_view->e_table_model, row); #endif offset = offset_of_node (ecell_view->e_table_model, row); subcell_offset = offset; width = subcell_offset; if (per_row) width += e_cell_max_width_by_row (tree_view->subcell_view, model_col, view_col, row); else width += subcell_max_width; #if 0 expandable = e_tree_model_node_is_expandable (tree_model, node); expanded = e_tree_table_adapter_node_is_expanded (tree_table_adapter, node); /* This is unnecessary since this is already handled * by the offset_of_node function. If that changes, * this will have to change too. */ if (expandable) { GdkPixbuf *image; image = (expanded ? E_CELL_TREE (tree_view->cell_view.ecell)->open_pixbuf : E_CELL_TREE (tree_view->cell_view.ecell)->closed_pixbuf); width += gdk_pixbuf_get_width (image); } #endif max_width = MAX (max_width, width); } return max_width; }