static void etgl_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { ETableGroup *etg = E_TABLE_GROUP (object); ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (object); switch (property_id) { case PROP_FROZEN: g_value_set_boolean (value, etg->frozen); break; case PROP_HEIGHT: g_value_set_double (value, etgl->height); break; case PROP_WIDTH: g_value_set_double (value, etgl->width); break; case PROP_MINIMUM_WIDTH: g_value_set_double (value, etgl->minimum_width); break; case PROP_UNIFORM_ROW_HEIGHT: g_value_set_boolean (value, etgl->uniform_row_height); break; case PROP_IS_EDITING: g_value_set_boolean (value, e_table_group_leaf_is_editing (etgl)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
/** * e_table_group_container_construct * @parent: The %GnomeCanvasGroup to create a child of. * @etgc: The %ETableGroupContainer. * @full_header: The full header of the %ETable. * @header: The current header of the %ETable. * @model: The %ETableModel of the %ETable. * @sort_info: The %ETableSortInfo of the %ETable. * @n: Which grouping level this is (Starts at 0 and sends n + 1 to any child %ETableGroups. * * This routine constructs the new %ETableGroupContainer. */ void e_table_group_container_construct (GnomeCanvasGroup *parent, ETableGroupContainer *etgc, ETableHeader *full_header, ETableHeader *header, ETableModel *model, ETableSortInfo *sort_info, int n) { ETableCol *col; ETableSortColumn column = e_table_sort_info_grouping_get_nth(sort_info, n); GtkStyle *style; col = e_table_header_get_column_by_col_idx(full_header, column.column); if (col == NULL) col = e_table_header_get_column (full_header, e_table_header_count (full_header) - 1); e_table_group_construct (parent, E_TABLE_GROUP (etgc), full_header, header, model); etgc->ecol = col; g_object_ref (etgc->ecol); etgc->sort_info = sort_info; g_object_ref (etgc->sort_info); etgc->n = n; etgc->ascending = column.ascending; style = GTK_WIDGET (GNOME_CANVAS_ITEM (etgc)->canvas)->style; etgc->font_desc = pango_font_description_copy (style->font_desc); etgc->open = TRUE; }
static void etgc_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ETableGroup *etg = E_TABLE_GROUP (object); ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER (object); switch (prop_id) { case PROP_FROZEN: g_value_set_boolean (value, etg->frozen); break; case PROP_HEIGHT: g_value_set_double (value, etgc->height); break; case PROP_WIDTH: g_value_set_double (value, etgc->width); break; case PROP_MINIMUM_WIDTH: g_value_set_double (value, etgc->minimum_width); break; case PROP_UNIFORM_ROW_HEIGHT: g_value_set_boolean (value, etgc->uniform_row_height); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static void etgl_realize (GnomeCanvasItem *item) { ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (item); if (GNOME_CANVAS_ITEM_CLASS (e_table_group_leaf_parent_class)->realize) GNOME_CANVAS_ITEM_CLASS (e_table_group_leaf_parent_class)->realize (item); etgl->item = E_TABLE_ITEM (gnome_canvas_item_new ( GNOME_CANVAS_GROUP (etgl), e_table_item_get_type (), "ETableHeader", E_TABLE_GROUP (etgl)->header, "ETableModel", etgl->ets, "alternating_row_colors", etgl->alternating_row_colors, "horizontal_draw_grid", etgl->horizontal_draw_grid, "vertical_draw_grid", etgl->vertical_draw_grid, "drawfocus", etgl->draw_focus, "cursor_mode", etgl->cursor_mode, "minimum_width", etgl->minimum_width, "length_threshold", etgl->length_threshold, "selection_model", etgl->selection_model, "uniform_row_height", etgl->uniform_row_height, NULL)); etgl->etgl_cursor_change_id = g_signal_connect ( etgl->item, "cursor_change", G_CALLBACK (etgl_cursor_change), etgl); etgl->etgl_cursor_activated_id = g_signal_connect ( etgl->item, "cursor_activated", G_CALLBACK (etgl_cursor_activated), etgl); etgl->etgl_double_click_id = g_signal_connect ( etgl->item, "double_click", G_CALLBACK (etgl_double_click), etgl); etgl->etgl_right_click_id = g_signal_connect ( etgl->item, "right_click", G_CALLBACK (etgl_right_click), etgl); etgl->etgl_click_id = g_signal_connect ( etgl->item, "click", G_CALLBACK (etgl_click), etgl); etgl->etgl_key_press_id = g_signal_connect ( etgl->item, "key_press", G_CALLBACK (etgl_key_press), etgl); etgl->etgl_start_drag_id = g_signal_connect ( etgl->item, "start_drag", G_CALLBACK (etgl_start_drag), etgl); etgl->notify_is_editing_id = e_signal_connect_notify ( etgl->item, "notify::is-editing", G_CALLBACK (etgl_item_is_editing_changed_cb), etgl); e_canvas_item_request_reflow (item); }
static gboolean etgl_start_drag (GObject *object, gint model_row, gint model_col, GdkEvent *event, ETableGroupLeaf *etgl) { return e_table_group_start_drag ( E_TABLE_GROUP (etgl), model_row, model_col, event); }
static void etgl_double_click (GObject *object, gint model_row, gint model_col, GdkEvent *event, ETableGroupLeaf *etgl) { e_table_group_double_click ( E_TABLE_GROUP (etgl), model_row, model_col, event); }
static ETableGroupContainerChildNode * create_child_node (ETableGroupContainer *etgc, void *val) { ETableGroup *child; ETableGroupContainerChildNode *child_node; ETableGroup *etg = E_TABLE_GROUP(etgc); child_node = g_new (ETableGroupContainerChildNode, 1); child_node->rect = gnome_canvas_item_new (GNOME_CANVAS_GROUP (etgc), gnome_canvas_rect_get_type (), "fill_color", "grey70", "outline_color", "grey50", NULL); child_node->text = gnome_canvas_item_new (GNOME_CANVAS_GROUP (etgc), e_text_get_type (), "anchor", GTK_ANCHOR_SW, "fill_color", "black", "draw_background", FALSE, NULL); child = e_table_group_new (GNOME_CANVAS_GROUP (etgc), etg->full_header, etg->header, etg->model, etgc->sort_info, etgc->n + 1); gnome_canvas_item_set(GNOME_CANVAS_ITEM(child), "alternating_row_colors", etgc->alternating_row_colors, "horizontal_draw_grid", etgc->horizontal_draw_grid, "vertical_draw_grid", etgc->vertical_draw_grid, "drawfocus", etgc->draw_focus, "cursor_mode", etgc->cursor_mode, "selection_model", etgc->selection_model, "length_threshold", etgc->length_threshold, "uniform_row_height", etgc->uniform_row_height, "minimum_width", etgc->minimum_width - GROUP_INDENT, NULL); g_signal_connect (child, "cursor_change", G_CALLBACK (child_cursor_change), etgc); g_signal_connect (child, "cursor_activated", G_CALLBACK (child_cursor_activated), etgc); g_signal_connect (child, "double_click", G_CALLBACK (child_double_click), etgc); g_signal_connect (child, "right_click", G_CALLBACK (child_right_click), etgc); g_signal_connect (child, "click", G_CALLBACK (child_click), etgc); g_signal_connect (child, "key_press", G_CALLBACK (child_key_press), etgc); g_signal_connect (child, "start_drag", G_CALLBACK (child_start_drag), etgc); child_node->child = child; child_node->key = e_table_model_duplicate_value (etg->model, etgc->ecol->col_idx, val); child_node->string = e_table_model_value_to_string (etg->model, etgc->ecol->col_idx, val); child_node->count = 0; return child_node; }
static void e_table_group_container_child_node_free (ETableGroupContainer *etgc, ETableGroupContainerChildNode *child_node) { ETableGroup *etg = E_TABLE_GROUP (etgc); ETableGroup *child = child_node->child; gtk_object_destroy (GTK_OBJECT (child)); e_table_model_free_value (etg->model, etgc->ecol->col_idx, child_node->key); g_free(child_node->string); gtk_object_destroy (GTK_OBJECT (child_node->text)); gtk_object_destroy (GTK_OBJECT (child_node->rect)); }
/** * e_table_group_container_new * @parent: The %GnomeCanvasGroup to create a child of. * @full_header: The full header of the %ETable. * @header: The current header of the %ETable. * @model: The %ETableModel of the %ETable. * @sort_info: The %ETableSortInfo of the %ETable. * @n: Which grouping level this is (Starts at 0 and sends n + 1 to any child %ETableGroups. * * %ETableGroupContainer is an %ETableGroup which groups by the nth * grouping of the %ETableSortInfo. It creates %ETableGroups as * children. * * Returns: The new %ETableGroupContainer. */ ETableGroup * e_table_group_container_new (GnomeCanvasGroup *parent, ETableHeader *full_header, ETableHeader *header, ETableModel *model, ETableSortInfo *sort_info, int n) { ETableGroupContainer *etgc; g_return_val_if_fail (parent != NULL, NULL); etgc = g_object_new (E_TABLE_GROUP_CONTAINER_TYPE, NULL); e_table_group_container_construct (parent, etgc, full_header, header, model, sort_info, n); return E_TABLE_GROUP (etgc); }
static void etgl_cursor_activated (GObject *object, gint view_row, ETableGroupLeaf *etgl) { ETableSubset *table_subset; gint model_row; table_subset = E_TABLE_SUBSET (etgl->ets); model_row = e_table_subset_view_to_model_row (table_subset, view_row); if (model_row < 0) return; e_table_group_cursor_activated (E_TABLE_GROUP (etgl), model_row); }
static gboolean etgl_click (GObject *object, gint row, gint col, GdkEvent *event, ETableGroupLeaf *etgl) { ETableSubset *table_subset; gint model_row; table_subset = E_TABLE_SUBSET (etgl->ets); model_row = e_table_subset_view_to_model_row (table_subset, row); if (model_row < 0) return FALSE; return e_table_group_click ( E_TABLE_GROUP (etgl), model_row, col, event); }
/** * e_table_group_leaf_new * @parent: The %GnomeCanvasGroup to create a child of. * @full_header: The full header of the %ETable. * @header: The current header of the %ETable. * @model: The %ETableModel of the %ETable. * @sort_info: The %ETableSortInfo of the %ETable. * * %ETableGroupLeaf is an %ETableGroup which simply contains an * %ETableItem. * * Returns: The new %ETableGroupLeaf. */ ETableGroup * e_table_group_leaf_new (GnomeCanvasGroup *parent, ETableHeader *full_header, ETableHeader *header, ETableModel *model, ETableSortInfo *sort_info) { ETableGroupLeaf *etgl; g_return_val_if_fail (parent != NULL, NULL); etgl = g_object_new (E_TYPE_TABLE_GROUP_LEAF, NULL); e_table_group_leaf_construct ( parent, etgl, full_header, header, model, sort_info); return E_TABLE_GROUP (etgl); }
static void e_table_group_leaf_construct (GnomeCanvasGroup *parent, ETableGroupLeaf *etgl, ETableHeader *full_header, ETableHeader *header, ETableModel *model, ETableSortInfo *sort_info) { etgl->is_grouped = (e_table_sort_info_grouping_get_count (sort_info) > 0); if (etgl->is_grouped) etgl->ets = e_table_sorted_variable_new ( model, full_header, sort_info); else etgl->ets = e_table_sorted_new ( model, full_header, sort_info); e_table_group_construct ( parent, E_TABLE_GROUP (etgl), full_header, header, model); }
static void etgl_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { ETableGroup *etg = E_TABLE_GROUP (object); ETableGroupLeaf *etgl = E_TABLE_GROUP_LEAF (object); switch (property_id) { case PROP_FROZEN: etg->frozen = g_value_get_boolean (value); break; case PROP_MINIMUM_WIDTH: case PROP_WIDTH: etgl->minimum_width = g_value_get_double (value); if (etgl->item) { gnome_canvas_item_set ( GNOME_CANVAS_ITEM (etgl->item), "minimum_width", etgl->minimum_width, NULL); } break; case PROP_LENGTH_THRESHOLD: etgl->length_threshold = g_value_get_int (value); if (etgl->item) { gnome_canvas_item_set ( GNOME_CANVAS_ITEM (etgl->item), "length_threshold", etgl->length_threshold, NULL); } break; case PROP_SELECTION_MODEL: if (etgl->selection_model) g_object_unref (etgl->selection_model); etgl->selection_model = E_SELECTION_MODEL (g_value_get_object (value)); if (etgl->selection_model) { g_object_ref (etgl->selection_model); } if (etgl->item) { gnome_canvas_item_set ( GNOME_CANVAS_ITEM (etgl->item), "selection_model", etgl->selection_model, NULL); } break; case PROP_UNIFORM_ROW_HEIGHT: etgl->uniform_row_height = g_value_get_boolean (value); if (etgl->item) { gnome_canvas_item_set ( GNOME_CANVAS_ITEM (etgl->item), "uniform_row_height", etgl->uniform_row_height, NULL); } break; case PROP_TABLE_ALTERNATING_ROW_COLORS: etgl->alternating_row_colors = g_value_get_boolean (value); if (etgl->item) { gnome_canvas_item_set ( GNOME_CANVAS_ITEM (etgl->item), "alternating_row_colors", etgl->alternating_row_colors, NULL); } break; case PROP_TABLE_HORIZONTAL_DRAW_GRID: etgl->horizontal_draw_grid = g_value_get_boolean (value); if (etgl->item) { gnome_canvas_item_set ( GNOME_CANVAS_ITEM (etgl->item), "horizontal_draw_grid", etgl->horizontal_draw_grid, NULL); } break; case PROP_TABLE_VERTICAL_DRAW_GRID: etgl->vertical_draw_grid = g_value_get_boolean (value); if (etgl->item) { gnome_canvas_item_set ( GNOME_CANVAS_ITEM (etgl->item), "vertical_draw_grid", etgl->vertical_draw_grid, NULL); } break; case PROP_TABLE_DRAW_FOCUS: etgl->draw_focus = g_value_get_boolean (value); if (etgl->item) { gnome_canvas_item_set ( GNOME_CANVAS_ITEM (etgl->item), "drawfocus", etgl->draw_focus, NULL); } break; case PROP_CURSOR_MODE: etgl->cursor_mode = g_value_get_int (value); if (etgl->item) { gnome_canvas_item_set ( GNOME_CANVAS_ITEM (etgl->item), "cursor_mode", etgl->cursor_mode, NULL); } break; default: break; } }
static void etgc_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { ETableGroup *etg = E_TABLE_GROUP (object); ETableGroupContainer *etgc = E_TABLE_GROUP_CONTAINER (object); GList *list; switch (prop_id) { case PROP_FROZEN: if (g_value_get_boolean (value)) etg->frozen = TRUE; else { etg->frozen = FALSE; etgc_thaw (etg); } break; case PROP_MINIMUM_WIDTH: case PROP_WIDTH: etgc->minimum_width = g_value_get_double (value); for (list = etgc->children; list; list = g_list_next (list)) { ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data; g_object_set (child_node->child, "minimum_width", etgc->minimum_width - GROUP_INDENT, NULL); } break; case PROP_LENGTH_THRESHOLD: etgc->length_threshold = g_value_get_int (value); for (list = etgc->children; list; list = g_list_next (list)) { ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data; g_object_set (child_node->child, "length_threshold", etgc->length_threshold, NULL); } break; case PROP_UNIFORM_ROW_HEIGHT: etgc->uniform_row_height = g_value_get_boolean (value); for (list = etgc->children; list; list = g_list_next (list)) { ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data; g_object_set (child_node->child, "uniform_row_height", etgc->uniform_row_height, NULL); } break; case PROP_SELECTION_MODEL: if (etgc->selection_model) g_object_unref (etgc->selection_model); etgc->selection_model = E_SELECTION_MODEL(g_value_get_object (value)); if (etgc->selection_model) g_object_ref (etgc->selection_model); for (list = etgc->children; list; list = g_list_next (list)) { ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data; g_object_set (child_node->child, "selection_model", etgc->selection_model, NULL); } break; case PROP_TABLE_ALTERNATING_ROW_COLORS: etgc->alternating_row_colors = g_value_get_boolean (value); for (list = etgc->children; list; list = g_list_next (list)) { ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data; g_object_set (child_node->child, "alternating_row_colors", etgc->alternating_row_colors, NULL); } break; case PROP_TABLE_HORIZONTAL_DRAW_GRID: etgc->horizontal_draw_grid = g_value_get_boolean (value); for (list = etgc->children; list; list = g_list_next (list)) { ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data; g_object_set (child_node->child, "horizontal_draw_grid", etgc->horizontal_draw_grid, NULL); } break; case PROP_TABLE_VERTICAL_DRAW_GRID: etgc->vertical_draw_grid = g_value_get_boolean (value); for (list = etgc->children; list; list = g_list_next (list)) { ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data; g_object_set (child_node->child, "vertical_draw_grid", etgc->vertical_draw_grid, NULL); } break; case PROP_TABLE_DRAW_FOCUS: etgc->draw_focus = g_value_get_boolean (value); for (list = etgc->children; list; list = g_list_next (list)) { ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data; g_object_set (child_node->child, "drawfocus", etgc->draw_focus, NULL); } break; case PROP_CURSOR_MODE: etgc->cursor_mode = g_value_get_int (value); for (list = etgc->children; list; list = g_list_next (list)) { ETableGroupContainerChildNode *child_node = (ETableGroupContainerChildNode *)list->data; g_object_set (child_node->child, "cursor_mode", etgc->cursor_mode, NULL); } break; default: break; } }
static gint child_start_drag (ETableGroup *etg, int row, int col, GdkEvent *event, ETableGroupContainer *etgc) { return e_table_group_start_drag (E_TABLE_GROUP (etgc), row, col, event); }
static void child_double_click (ETableGroup *etg, int row, int col, GdkEvent *event, ETableGroupContainer *etgc) { e_table_group_double_click (E_TABLE_GROUP (etgc), row, col, event); }
static void child_cursor_activated (ETableGroup *etg, int row, ETableGroupContainer *etgc) { e_table_group_cursor_activated (E_TABLE_GROUP (etgc), row); }