diff options
author | Jonathan Blandford <jrb@redhat.com> | 2001-05-25 23:10:49 +0000 |
---|---|---|
committer | Jonathan Blandford <jrb@src.gnome.org> | 2001-05-25 23:10:49 +0000 |
commit | 710fb020bf814b47fefcf086c027e77efb9c60d6 (patch) | |
tree | a04a6f362cfec3f4198aecbbc9fb5682e2d6a679 /gtk/gtktreeviewcolumn.c | |
parent | e05472202d7b911e260dd90b59374e8c9a05c18e (diff) | |
download | gtk+-710fb020bf814b47fefcf086c027e77efb9c60d6.tar.gz |
Remove almost all instances of GtkCellRenderer in code (all but dnd icon
Fri May 25 19:04:17 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_calc_size): Remove almost all
instances of GtkCellRenderer in code (all but dnd icon code).
Virtualized in GtkTreeViewColumn. Now I need to move focus in
there, and I can do multiple Cells per column.
* gtk/gtktreeviewcolumn.c: Proxy all cell calls correctly
* gtk/gtktreemodel.c (gtk_tree_row_reference_new_proxy): fix bug
when model was unreffed prior to removing the row reference.
Diffstat (limited to 'gtk/gtktreeviewcolumn.c')
-rw-r--r-- | gtk/gtktreeviewcolumn.c | 232 |
1 files changed, 180 insertions, 52 deletions
diff --git a/gtk/gtktreeviewcolumn.c b/gtk/gtktreeviewcolumn.c index 824f1c19c9..b3ec91e44e 100644 --- a/gtk/gtktreeviewcolumn.c +++ b/gtk/gtktreeviewcolumn.c @@ -376,6 +376,11 @@ gtk_tree_view_column_set_property (GObject *object, g_value_get_float (value)); break; + case PROP_REORDERABLE: + gtk_tree_view_column_set_reorderable (tree_column, + g_value_get_boolean (value)); + break; + case PROP_SORT_INDICATOR: gtk_tree_view_column_set_sort_indicator (tree_column, g_value_get_boolean (value)); @@ -454,6 +459,11 @@ gtk_tree_view_column_get_property (GObject *object, gtk_tree_view_column_get_alignment (tree_column)); break; + case PROP_REORDERABLE: + g_value_set_boolean (value, + gtk_tree_view_column_get_reorderable (tree_column)); + break; + case PROP_SORT_INDICATOR: g_value_set_boolean (value, gtk_tree_view_column_get_sort_indicator (tree_column)); @@ -494,6 +504,8 @@ gtk_tree_view_column_create_button (GtkTreeViewColumn *tree_column) /* make sure we own a reference to it as well. */ gtk_widget_set_parent (tree_column->button, GTK_WIDGET (tree_view)); + if (tree_view->priv->header_window) + gtk_widget_set_parent_window (tree_column->button, tree_view->priv->header_window); gtk_signal_connect (GTK_OBJECT (tree_column->button), "realize", (GtkSignalFunc) gtk_tree_view_column_button_realize, @@ -643,7 +655,7 @@ gtk_tree_view_column_update_button (GtkTreeViewColumn *tree_column) { if (tree_column->visible) { - gtk_widget_show (tree_column->button); + gtk_widget_show_now (tree_column->button); if (tree_column->window) { if (tree_column->column_type == GTK_TREE_VIEW_COLUMN_RESIZEABLE) @@ -666,9 +678,15 @@ gtk_tree_view_column_update_button (GtkTreeViewColumn *tree_column) } if (tree_column->reorderable || tree_column->clickable) - GTK_WIDGET_SET_FLAGS (tree_column->button, GTK_CAN_FOCUS); + { + GTK_WIDGET_SET_FLAGS (tree_column->button, GTK_CAN_FOCUS); + } else - GTK_WIDGET_UNSET_FLAGS (tree_column->button, GTK_CAN_FOCUS); + { + GTK_WIDGET_UNSET_FLAGS (tree_column->button, GTK_CAN_FOCUS); + if (GTK_WIDGET_HAS_FOCUS (tree_column->button)) + gtk_window_set_focus (GTK_WINDOW (gtk_widget_get_toplevel (tree_column->tree_view)), NULL); + } tree_column->dirty = TRUE; gtk_widget_queue_resize (tree_column->tree_view); @@ -1253,55 +1271,6 @@ gtk_tree_view_column_clear_attributes (GtkTreeViewColumn *tree_column) } } -/** - * gtk_tree_view_column_set_cell_data: - * @tree_column: A #GtkTreeViewColumn. - * @tree_model: The #GtkTreeModel to to get the cell renderers attributes from. - * @iter: The #GtkTreeIter to to get the cell renderer's attributes from. - * - * Sets the cell renderer based on the @tree_model and @tree_node. That is, for - * every attribute mapping in @tree_column, it will get a value from the set - * column on the @tree_node, and use that value to set the attribute on the cell - * renderer. - **/ -void -gtk_tree_view_column_set_cell_data (GtkTreeViewColumn *tree_column, - GtkTreeModel *tree_model, - GtkTreeIter *iter) -{ - GSList *list; - GValue value = { 0, }; - GObject *cell; - - g_return_if_fail (tree_column != NULL); - g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column)); - g_return_if_fail (tree_column->cell != NULL); - - if (tree_model == NULL) - return; - - cell = (GObject *) tree_column->cell; - list = tree_column->attributes; - - g_object_freeze_notify (cell); - - while (list && list->next) - { - gtk_tree_model_get_value (tree_model, iter, - GPOINTER_TO_INT (list->next->data), - &value); - g_object_set_property (cell, (gchar *) list->data, &value); - g_value_unset (&value); - list = list->next->next; - - } - - if (tree_column->func) - (* tree_column->func) (tree_column, tree_column->cell, tree_model, iter, tree_column->func_data); - - g_object_thaw_notify (cell); -} - /* Options for manipulating the columns */ /** @@ -1916,3 +1885,162 @@ gtk_tree_view_column_get_sort_order (GtkTreeViewColumn *tree_column) + +/** + * gtk_tree_view_column_cell_set_cell_data: + * @tree_column: A #GtkTreeViewColumn. + * @tree_model: The #GtkTreeModel to to get the cell renderers attributes from. + * @iter: The #GtkTreeIter to to get the cell renderer's attributes from. + * + * Sets the cell renderer based on the @tree_model and @tree_node. That is, for + * every attribute mapping in @tree_column, it will get a value from the set + * column on the @tree_node, and use that value to set the attribute on the cell + * renderer. This is used primarily by the GtkTreeView. + **/ +void +gtk_tree_view_column_cell_set_cell_data (GtkTreeViewColumn *tree_column, + GtkTreeModel *tree_model, + GtkTreeIter *iter) +{ + GSList *list; + GValue value = { 0, }; + GObject *cell; + + g_return_if_fail (tree_column != NULL); + g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column)); + g_return_if_fail (tree_column->cell != NULL); + + if (tree_model == NULL) + return; + + cell = (GObject *) tree_column->cell; + list = tree_column->attributes; + + g_object_freeze_notify (cell); + + while (list && list->next) + { + gtk_tree_model_get_value (tree_model, iter, + GPOINTER_TO_INT (list->next->data), + &value); + g_object_set_property (cell, (gchar *) list->data, &value); + g_value_unset (&value); + list = list->next->next; + + } + + if (tree_column->func) + (* tree_column->func) (tree_column, tree_column->cell, tree_model, iter, tree_column->func_data); + + g_object_thaw_notify (cell); +} + +/** + * gtk_tree_view_column_cell_get_size: + * @tree_column: A #GtkTreeViewColumn. + * @cell_area: The area a the column will be allocated, or %NULL + * @x_offset: location to return x offset of cell relative to @cell_area, or %NULL + * @y_offset: location to return y offset of cell relative to @cell_area, or %NULL + * @width: location to return width needed to render a cell, or %NULL + * @height: location to return height needed to render a cell, or %NULL + * + * Obtains the width and height needed to render the column. This is used + * primarily by the GtkTreeView. + **/ +void +gtk_tree_view_column_cell_get_size (GtkTreeViewColumn *tree_column, + GdkRectangle *cell_area, + gint *x_offset, + gint *y_offset, + gint *width, + gint *height) +{ + g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column)); + + gtk_cell_renderer_get_size (tree_column->cell, + tree_column->tree_view, + cell_area, + x_offset, + y_offset, + width, + height); + +} + +/** + * gtk_tree_view_column_cell_render: + * @tree_column: A #GtkTreeViewColumn. + * @window: a #GdkDrawable to draw to + * @background_area: entire cell area (including tree expanders and maybe padding on the sides) + * @cell_area: area normally rendered by a cell renderer + * @expose_area: area that actually needs updating + * @flags: flags that affect rendering + * + * Renders the cell contained by #tree_column. This is used primarily by the + * GtkTreeView. + **/ +void +gtk_tree_view_column_cell_render (GtkTreeViewColumn *tree_column, + GdkWindow *window, + GdkRectangle *background_area, + GdkRectangle *cell_area, + GdkRectangle *expose_area, + guint flags) +{ + gboolean visible; + g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column)); + + g_object_get (G_OBJECT (tree_column->cell), "visible", &visible, NULL); + if (visible) + gtk_cell_renderer_render (tree_column->cell, + window, + tree_column->tree_view, + background_area, + cell_area, + expose_area, + flags); +} + +/** + * gtk_tree_view_column_cell_event: + * @tree_column: A #GtkTreeViewColumn. + * @event: a #GdkEvent + * @path_string: widget-dependent string representation of the event location; e.g. for #GtkTreeView, a string representation of #GtkTreePath + * @background_area: background area as passed to gtk_cell_renderer_render() + * @cell_area: cell area as passed to gtk_cell_renderer_render() + * @flags: render flags + * + * Handles an event. This is used primarily by the GtkTreeView. + * + * Return value: %TRUE if the event was consumed/handled + **/ +gboolean +gtk_tree_view_column_cell_event (GtkTreeViewColumn *tree_column, + GdkEvent *event, + gchar *path_string, + GdkRectangle *background_area, + GdkRectangle *cell_area, + guint flags) +{ + gboolean visible, can_activate; + + g_return_val_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column), FALSE); + + g_object_get (G_OBJECT (tree_column->cell), + "visible", &visible, + "can_activate", &can_activate, + NULL); + if (visible && can_activate) + { + if (gtk_cell_renderer_event (tree_column->cell, + event, + tree_column->tree_view, + path_string, + background_area, + cell_area, + flags)) + return TRUE; + + } + return FALSE; +} |