Synopsis#include <gtk/gtk.h> enum GtkCellRendererState; enum GtkCellRendererMode; GtkCellRenderer; GtkCellRendererClass; void gtk_cell_renderer_get_size (GtkCellRenderer *cell, GtkWidget *widget, const GdkRectangle *cell_area, gint *x_offset, gint *y_offset, gint *width, gint *height); void gtk_cell_renderer_render (GtkCellRenderer *cell, GdkWindow *window, GtkWidget *widget, const GdkRectangle *background_area, const GdkRectangle *cell_area, const GdkRectangle *expose_area, GtkCellRendererState flags); gboolean gtk_cell_renderer_activate (GtkCellRenderer *cell, GdkEvent *event, GtkWidget *widget, const gchar *path, const GdkRectangle *background_area, const GdkRectangle *cell_area, GtkCellRendererState flags); GtkCellEditable* gtk_cell_renderer_start_editing (GtkCellRenderer *cell, GdkEvent *event, GtkWidget *widget, const gchar *path, const GdkRectangle *background_area, const GdkRectangle *cell_area, GtkCellRendererState flags); void gtk_cell_renderer_editing_canceled (GtkCellRenderer *cell); void gtk_cell_renderer_stop_editing (GtkCellRenderer *cell, gboolean canceled); void gtk_cell_renderer_get_fixed_size (GtkCellRenderer *cell, gint *width, gint *height); void gtk_cell_renderer_set_fixed_size (GtkCellRenderer *cell, gint width, gint height); Object HierarchyGObject +----GInitiallyUnowned +----GtkObject +----GtkCellRenderer +----GtkCellRendererText +----GtkCellRendererPixbuf +----GtkCellRendererProgress +----GtkCellRendererToggle Properties"cell-background" gchar* : Write "cell-background-gdk" GdkColor* : Read / Write "cell-background-set" gboolean : Read / Write "editing" gboolean : Read "height" gint : Read / Write "is-expanded" gboolean : Read / Write "is-expander" gboolean : Read / Write "mode" GtkCellRendererMode : Read / Write "sensitive" gboolean : Read / Write "visible" gboolean : Read / Write "width" gint : Read / Write "xalign" gfloat : Read / Write "xpad" guint : Read / Write "yalign" gfloat : Read / Write "ypad" guint : Read / Write DescriptionThe GtkCellRenderer is a base class of a set of objects used for rendering a cell to a GdkDrawable. These objects are used primarily by the GtkTreeView widget, though they aren't tied to them in any specific way. It is worth noting that GtkCellRenderer is not a GtkWidget and cannot be treated as such.
The primary use of a GtkCellRenderer is for drawing a certain graphical
elements on a GdkDrawable. Typically, one cell renderer is used to
draw many cells on the screen. To this extent, it isn't expected that a
CellRenderer keep any permanent state around. Instead, any state is set
just prior to use using GObjects property system. Then, the
cell is measured using There are a number of rules that must be followed when writing a new GtkCellRenderer. First and formost, it's important that a certain set of properties will always yield a cell renderer of the same size, barring a GtkStyle change. The GtkCellRenderer also has a number of generic properties that are expected to be honored by all children.
Beyond merely rendering a cell, cell renderers can optionally
provide active user interface elements. A cell renderer can be
activatable like GtkCellRendererToggle,
which toggles when it gets activated by a mouse click, or it can be
editable like GtkCellRendererText, which
allows the user to edit the text using a GtkEntry.
To make a cell renderer activatable or editable, you have to
implement the Detailsenum GtkCellRendererStatetypedef enum { GTK_CELL_RENDERER_SELECTED = 1 << 0, GTK_CELL_RENDERER_PRELIT = 1 << 1, GTK_CELL_RENDERER_INSENSITIVE = 1 << 2, /* this flag means the cell is in the sort column/row */ GTK_CELL_RENDERER_SORTED = 1 << 3, GTK_CELL_RENDERER_FOCUSED = 1 << 4 } GtkCellRendererState; Tells how a cell is to be rendererd.
enum GtkCellRendererModetypedef enum { GTK_CELL_RENDERER_MODE_INERT, GTK_CELL_RENDERER_MODE_ACTIVATABLE, GTK_CELL_RENDERER_MODE_EDITABLE } GtkCellRendererMode; Identifies how the user can interact with a particular cell.
GtkCellRendererClasstypedef struct { GtkObjectClass parent_class; /* vtable - not signals */ void (* get_size) (GtkCellRenderer *cell, GtkWidget *widget, GdkRectangle *cell_area, gint *x_offset, gint *y_offset, gint *width, gint *height); void (* render) (GtkCellRenderer *cell, GdkDrawable *window, GtkWidget *widget, GdkRectangle *background_area, GdkRectangle *cell_area, GdkRectangle *expose_area, GtkCellRendererState flags); gboolean (* activate) (GtkCellRenderer *cell, GdkEvent *event, GtkWidget *widget, const gchar *path, GdkRectangle *background_area, GdkRectangle *cell_area, GtkCellRendererState flags); GtkCellEditable *(* start_editing) (GtkCellRenderer *cell, GdkEvent *event, GtkWidget *widget, const gchar *path, GdkRectangle *background_area, GdkRectangle *cell_area, GtkCellRendererState flags); /* Signals */ void (* editing_canceled) (GtkCellRenderer *cell); void (* editing_started) (GtkCellRenderer *cell, GtkCellEditable *editable, const gchar *path); /* Padding for future expansion */ void (*_gtk_reserved1) (void); void (*_gtk_reserved2) (void); } GtkCellRendererClass;
gtk_cell_renderer_get_size ()void gtk_cell_renderer_get_size (GtkCellRenderer *cell, GtkWidget *widget, const GdkRectangle *cell_area, gint *x_offset, gint *y_offset, gint *width, gint *height);
Obtains the width and height needed to render the cell. Used by view
widgets to determine the appropriate size for the cell_area passed to
Please note that the values set in
gtk_cell_renderer_render ()void gtk_cell_renderer_render (GtkCellRenderer *cell, GdkWindow *window, GtkWidget *widget, const GdkRectangle *background_area, const GdkRectangle *cell_area, const GdkRectangle *expose_area, GtkCellRendererState flags);
Invokes the virtual render function of the GtkCellRenderer. The three
passed-in rectangles are areas of
gtk_cell_renderer_activate ()gboolean gtk_cell_renderer_activate (GtkCellRenderer *cell, GdkEvent *event, GtkWidget *widget, const gchar *path, const GdkRectangle *background_area, const GdkRectangle *cell_area, GtkCellRendererState flags); Passes an activate event to the cell renderer for possible processing. Some cell renderers may use events; for example, GtkCellRendererToggle toggles when it gets a mouse click.
gtk_cell_renderer_start_editing ()GtkCellEditable* gtk_cell_renderer_start_editing (GtkCellRenderer *cell, GdkEvent *event, GtkWidget *widget, const gchar *path, const GdkRectangle *background_area, const GdkRectangle *cell_area, GtkCellRendererState flags); Passes an activate event to the cell renderer for possible processing.
gtk_cell_renderer_editing_canceled ()void gtk_cell_renderer_editing_canceled (GtkCellRenderer *cell); Warning
Causes the cell renderer to emit the "editing-canceled" signal. This function is for use only by implementations of cell renderers that need to notify the client program that an editing process was canceled and the changes were not committed.
Since 2.4 gtk_cell_renderer_stop_editing ()void gtk_cell_renderer_stop_editing (GtkCellRenderer *cell, gboolean canceled);
Informs the cell renderer that the editing is stopped.
If This function should be called by cell renderer implementations in response to the "editing-done" signal of GtkCellEditable.
Since 2.6 gtk_cell_renderer_get_fixed_size ()void gtk_cell_renderer_get_fixed_size (GtkCellRenderer *cell, gint *width, gint *height);
Fills in
gtk_cell_renderer_set_fixed_size ()void gtk_cell_renderer_set_fixed_size (GtkCellRenderer *cell, gint width, gint height); Sets the renderer size to be explicit, independent of the properties set.
Property DetailsThe
|
|
the object which received the signal |
|
user data set when the signal handler was connected. |
Since 2.4
"editing-started"
signalvoid user_function (GtkCellRenderer *renderer, GtkCellEditable *editable, gchar *path, gpointer user_data) : Run First
This signal gets emitted when a cell starts to be edited.
The indended use of this signal is to do special setup
on editable
, e.g. adding a GtkEntryCompletion or setting
up additional columns in a GtkComboBox.
Note that GTK+ doesn't guarantee that cell renderers will
continue to use the same kind of widget for editing in future
releases, therefore you should check the type of editable
before doing any specific setup, as in the following example:
static void text_editing_started (GtkCellRenderer *cell, GtkCellEditable *editable, const gchar *path, gpointer data) { if (GTK_IS_ENTRY (editable)) { GtkEntry *entry = GTK_ENTRY (editable); /* ... create a GtkEntryCompletion */ gtk_entry_set_completion (entry, completion); } }
|
the object which received the signal |
|
the GtkCellEditable |
|
the path identifying the edited cell |
|
user data set when the signal handler was connected. |
Since 2.6