void gtk_cell_view_set_background_color (GtkCellView *view, const GdkColor *color) { g_return_if_fail (GTK_IS_CELL_VIEW (view)); if (color) { if (!view->priv->background_set) { view->priv->background_set = TRUE; g_object_notify (G_OBJECT (view), "background_set"); } view->priv->background = *color; } else { if (view->priv->background_set) { view->priv->background_set = FALSE; g_object_notify (G_OBJECT (view), "background_set"); } } }
/** * gtk_cell_view_set_background_color: * @cell_view: a #GtkCellView * @color: the new background color * * Sets the background color of @view. * * Since: 2.6 */ void gtk_cell_view_set_background_color (GtkCellView *cell_view, const GdkColor *color) { g_return_if_fail (GTK_IS_CELL_VIEW (cell_view)); if (color) { if (!cell_view->priv->background_set) { cell_view->priv->background_set = TRUE; g_object_notify (G_OBJECT (cell_view), "background-set"); } cell_view->priv->background.red = color->red / 65535.; cell_view->priv->background.green = color->green / 65535.; cell_view->priv->background.blue = color->blue / 65535.; cell_view->priv->background.alpha = 1; } else { if (cell_view->priv->background_set) { cell_view->priv->background_set = FALSE; g_object_notify (G_OBJECT (cell_view), "background-set"); } } gtk_widget_queue_draw (GTK_WIDGET (cell_view)); }
static void gtk_cell_view_cell_layout_set_cell_data_func (GtkCellLayout *layout, GtkCellRenderer *cell, GtkCellLayoutDataFunc func, gpointer func_data, GDestroyNotify destroy) { GtkCellView *cellview = GTK_CELL_VIEW (layout); GtkCellViewCellInfo *info; g_return_if_fail (GTK_IS_CELL_VIEW (cellview)); info = gtk_cell_view_get_cell_info (cellview, cell); g_return_if_fail (info != NULL); if (info->destroy) { GDestroyNotify d = info->destroy; info->destroy = NULL; d (info->func_data); } info->func = func; info->func_data = func_data; info->destroy = destroy; }
gboolean gtk_cell_view_get_size_of_row (GtkCellView *cell_view, GtkTreePath *path, GtkRequisition *requisition) { GtkTreeRowReference *tmp; GtkRequisition req; g_return_val_if_fail (GTK_IS_CELL_VIEW (cell_view), FALSE); g_return_val_if_fail (path != NULL, FALSE); g_return_val_if_fail (requisition != NULL, FALSE); tmp = cell_view->priv->displayed_row; cell_view->priv->displayed_row = gtk_tree_row_reference_new (cell_view->priv->model, path); gtk_cell_view_size_request (GTK_WIDGET (cell_view), requisition); gtk_tree_row_reference_free (cell_view->priv->displayed_row); cell_view->priv->displayed_row = tmp; /* restore actual size info */ gtk_cell_view_size_request (GTK_WIDGET (cell_view), &req); return TRUE; }
/** * gtk_cell_view_get_size_of_row: * @cell_view: a #GtkCellView * @path: a #GtkTreePath * @requisition: (out): return location for the size * * Sets @requisition to the size needed by @cell_view to display * the model row pointed to by @path. * * Return value: %TRUE * * Since: 2.6 * * Deprecated: 3.0: Combo box formerly used this to calculate the * sizes for cellviews, now you can achieve this by either using * the #GtkCellView:fit-model property or by setting the currently * displayed row of the #GtkCellView and using gtk_widget_get_preferred_size(). */ gboolean gtk_cell_view_get_size_of_row (GtkCellView *cell_view, GtkTreePath *path, GtkRequisition *requisition) { GtkTreeRowReference *tmp; GtkRequisition req; g_return_val_if_fail (GTK_IS_CELL_VIEW (cell_view), FALSE); g_return_val_if_fail (path != NULL, FALSE); tmp = cell_view->priv->displayed_row; cell_view->priv->displayed_row = gtk_tree_row_reference_new (cell_view->priv->model, path); gtk_widget_get_preferred_width (GTK_WIDGET (cell_view), &req.width, NULL); gtk_widget_get_preferred_height_for_width (GTK_WIDGET (cell_view), req.width, &req.height, NULL); gtk_tree_row_reference_free (cell_view->priv->displayed_row); cell_view->priv->displayed_row = tmp; if (requisition) *requisition = req; return TRUE; }
/** * gtk_cell_view_set_model: * @cell_view: a #GtkCellView * @model: (allow-none): a #GtkTreeModel * * Sets the model for @cell_view. If @cell_view already has a model * set, it will remove it before setting the new model. If @model is * %NULL, then it will unset the old model. * * Since: 2.6 */ void gtk_cell_view_set_model (GtkCellView *cell_view, GtkTreeModel *model) { g_return_if_fail (GTK_IS_CELL_VIEW (cell_view)); g_return_if_fail (model == NULL || GTK_IS_TREE_MODEL (model)); if (cell_view->priv->model) { g_signal_handler_disconnect (cell_view->priv->model, cell_view->priv->row_changed_id); cell_view->priv->row_changed_id = 0; if (cell_view->priv->displayed_row) gtk_tree_row_reference_free (cell_view->priv->displayed_row); cell_view->priv->displayed_row = NULL; g_object_unref (cell_view->priv->model); } cell_view->priv->model = model; if (cell_view->priv->model) { g_object_ref (cell_view->priv->model); cell_view->priv->row_changed_id = g_signal_connect (cell_view->priv->model, "row-changed", G_CALLBACK (row_changed_cb), cell_view); } }
static GtkWidget * get_label_from_container (GtkWidget *container) { GtkWidget *label; GList *children, *tmp_list; if (!GTK_IS_CONTAINER (container)) return NULL; children = gtk_container_get_children (GTK_CONTAINER (container)); label = NULL; for (tmp_list = children; tmp_list != NULL; tmp_list = tmp_list->next) { if (GTK_IS_LABEL (tmp_list->data)) { label = tmp_list->data; break; } else if (GTK_IS_CELL_VIEW (tmp_list->data)) { label = tmp_list->data; break; } else if (GTK_IS_BOX (tmp_list->data)) { label = get_label_from_container (GTK_WIDGET (tmp_list->data)); if (label) break; } } g_list_free (children); return label; }
/** * gtk_cell_view_get_model: * @cell_view: a #GtkCellView * * Returns the model for @cell_view. If no model is used %NULL is * returned. * * Returns: (transfer none): a #GtkTreeModel used or %NULL * * Since: 2.16 **/ GtkTreeModel * gtk_cell_view_get_model (GtkCellView *cell_view) { g_return_val_if_fail (GTK_IS_CELL_VIEW (cell_view), NULL); return cell_view->priv->model; }
static void gtk_cell_view_cell_layout_reorder (GtkCellLayout *layout, GtkCellRenderer *cell, gint position) { GList *link; GtkCellViewCellInfo *info; GtkCellView *cellview = GTK_CELL_VIEW (layout); g_return_if_fail (GTK_IS_CELL_VIEW (cellview)); g_return_if_fail (GTK_IS_CELL_RENDERER (cell)); info = gtk_cell_view_get_cell_info (cellview, cell); g_return_if_fail (info != NULL); g_return_if_fail (position >= 0); link = g_list_find (cellview->priv->cell_list, info); g_return_if_fail (link != NULL); cellview->priv->cell_list = g_list_remove_link (cellview->priv->cell_list, link); cellview->priv->cell_list = g_list_insert (cellview->priv->cell_list, info, position); gtk_widget_queue_draw (GTK_WIDGET (cellview)); }
static void gtk_cell_view_cell_layout_clear_attributes (GtkCellLayout *layout, GtkCellRenderer *renderer) { GtkCellViewCellInfo *info; GtkCellView *cellview = GTK_CELL_VIEW (layout); GSList *list; g_return_if_fail (GTK_IS_CELL_VIEW (cellview)); g_return_if_fail (GTK_IS_CELL_RENDERER (renderer)); info = gtk_cell_view_get_cell_info (cellview, renderer); if (info != NULL) { list = info->attributes; while (list && list->next) { g_free (list->data); list = list->next->next; } g_slist_free (info->attributes); info->attributes = NULL; } }
/** * gtk_cell_view_set_background_rgba: * @cell_view: a #GtkCellView * @rgba: the new background color * * Sets the background color of @cell_view. * * Since: 3.0 */ void gtk_cell_view_set_background_rgba (GtkCellView *cell_view, const GdkRGBA *rgba) { g_return_if_fail (GTK_IS_CELL_VIEW (cell_view)); if (rgba) { if (!cell_view->priv->background_set) { cell_view->priv->background_set = TRUE; g_object_notify (G_OBJECT (cell_view), "background-set"); } cell_view->priv->background = *rgba; } else { if (cell_view->priv->background_set) { cell_view->priv->background_set = FALSE; g_object_notify (G_OBJECT (cell_view), "background-set"); } } gtk_widget_queue_draw (GTK_WIDGET (cell_view)); }
//________________________________________________________________________________ void ComboBoxData::initializeCellView( GtkWidget* widget ) { GList* children( gtk_container_get_children( GTK_CONTAINER( widget ) ) ); for( GList* child = g_list_first(children); child; child = g_list_next(child) ) { if( !GTK_IS_CELL_VIEW( child->data ) ) continue; // convert to widget and store GtkWidget* widget( GTK_WIDGET( child->data ) ); if( _cell._widget == widget ) return; assert( !_cell._widget ); _cell._widget = GTK_WIDGET( child->data ); _cell._destroyId.connect( G_OBJECT(widget), "destroy", G_CALLBACK( childDestroyNotifyEvent ), this ); updateCellViewColor(); } if( children ) g_list_free( children ); return; }
/** * gtk_cell_view_get_displayed_row: * @cell_view: a #GtkCellView * * Returns a #GtkTreePath referring to the currently * displayed row. If no row is currently displayed, * %NULL is returned. * * Returns: the currently displayed row or %NULL * * Since: 2.6 */ GtkTreePath * gtk_cell_view_get_displayed_row (GtkCellView *cell_view) { g_return_val_if_fail (GTK_IS_CELL_VIEW (cell_view), NULL); if (!cell_view->priv->displayed_row) return NULL; return gtk_tree_row_reference_get_path (cell_view->priv->displayed_row); }
/** * gtk_cell_view_get_fit_model: * @cell_view: a #GtkCellView * * Gets whether @cell_view is configured to request space * to fit the entire #GtkTreeModel. * * Return value: whether @cell_view requests space to fit * the entire #GtkTreeModel. * * Since: 3.0 */ gboolean gtk_cell_view_get_fit_model (GtkCellView *cell_view) { GtkCellViewPrivate *priv; g_return_val_if_fail (GTK_IS_CELL_VIEW (cell_view), FALSE); priv = cell_view->priv; return priv->fit_model; }
/** * gtk_cell_view_get_draw_sensitive: * @cell_view: a #GtkCellView * * Gets whether @cell_view is configured to draw all of it's * cells in a sensitive state. * * Return value: whether @cell_view draws all of it's * cells in a sensitive state * * Since: 3.0 */ gboolean gtk_cell_view_get_draw_sensitive (GtkCellView *cell_view) { GtkCellViewPrivate *priv; g_return_val_if_fail (GTK_IS_CELL_VIEW (cell_view), FALSE); priv = cell_view->priv; return priv->draw_sensitive; }
void gtk_cell_view_set_value (GtkCellView *cell_view, GtkCellRenderer *renderer, gchar *property, GValue *value) { g_return_if_fail (GTK_IS_CELL_VIEW (cell_view)); g_return_if_fail (GTK_IS_CELL_RENDERER (renderer)); g_object_set_property (G_OBJECT (renderer), property, value); /* force resize and redraw */ gtk_widget_queue_resize (GTK_WIDGET (cell_view)); gtk_widget_queue_draw (GTK_WIDGET (cell_view)); }
void gtk_cell_view_set_values (GtkCellView *cell_view, GtkCellRenderer *renderer, ...) { va_list args; g_return_if_fail (GTK_IS_CELL_VIEW (cell_view)); g_return_if_fail (GTK_IS_CELL_RENDERER (renderer)); g_return_if_fail (gtk_cell_view_get_cell_info (cell_view, renderer)); va_start (args, renderer); gtk_cell_view_set_valuesv (cell_view, renderer, args); va_end (args); }
/** * gtk_cell_view_set_draw_sensitive: * @cell_view: a #GtkCellView * @draw_sensitive: whether to draw all cells in a sensitive state. * * Sets whether @cell_view should draw all of it's * cells in a sensitive state, this is used by #GtkComboBox menus * to ensure that rows with insensitive cells that contain * children appear sensitive in the parent menu item. * * Since: 3.0 */ void gtk_cell_view_set_draw_sensitive (GtkCellView *cell_view, gboolean draw_sensitive) { GtkCellViewPrivate *priv; g_return_if_fail (GTK_IS_CELL_VIEW (cell_view)); priv = cell_view->priv; if (priv->draw_sensitive != draw_sensitive) { priv->draw_sensitive = draw_sensitive; g_object_notify (G_OBJECT (cell_view), "draw-sensitive"); } }
static void gtk_cell_view_cell_layout_clear (GtkCellLayout *layout) { GtkCellView *cellview = GTK_CELL_VIEW (layout); g_return_if_fail (GTK_IS_CELL_VIEW (cellview)); while (cellview->priv->cell_list) { GtkCellViewCellInfo *info = (GtkCellViewCellInfo *)cellview->priv->cell_list->data; gtk_cell_view_cell_layout_clear_attributes (layout, info->cell); g_object_unref (G_OBJECT (info->cell)); g_free (info); cellview->priv->cell_list = g_list_delete_link (cellview->priv->cell_list, cellview->priv->cell_list); } }
static void gtk_cell_view_cell_layout_add_attribute (GtkCellLayout *layout, GtkCellRenderer *renderer, const gchar *attribute, gint column) { GtkCellViewCellInfo *info; GtkCellView *cellview = GTK_CELL_VIEW (layout); g_return_if_fail (GTK_IS_CELL_VIEW (cellview)); info = gtk_cell_view_get_cell_info (cellview, renderer); g_return_if_fail (info != NULL); info->attributes = g_slist_prepend (info->attributes, GINT_TO_POINTER (column)); info->attributes = g_slist_prepend (info->attributes, g_strdup (attribute)); }
static void qtcComboBoxClearBgndColor(GtkWidget *widget) { GList *children = gtk_container_get_children(GTK_CONTAINER(widget)); GList *child = children; for (;child;child=child->next) { GtkWidget *boxChild = (GtkWidget*)child->data; if (GTK_IS_CELL_VIEW(boxChild) && qtcComboBoxCellViewHasBgnd(boxChild)) { gtk_cell_view_set_background_color(GTK_CELL_VIEW(boxChild), 0L); } } if (children) { g_list_free(children); } }
/** * gtk_cell_view_set_fit_model: * @cell_view: a #GtkCellView * @fit_model: whether @cell_view should request space for the whole model. * * Sets whether @cell_view should request space to fit the entire #GtkTreeModel. * * This is used by #GtkComboBox to ensure that the cell view displayed on * the combo box's button always gets enough space and does not resize * when selection changes. * * Since: 3.0 */ void gtk_cell_view_set_fit_model (GtkCellView *cell_view, gboolean fit_model) { GtkCellViewPrivate *priv; g_return_if_fail (GTK_IS_CELL_VIEW (cell_view)); priv = cell_view->priv; if (priv->fit_model != fit_model) { priv->fit_model = fit_model; gtk_cell_area_context_reset (cell_view->priv->context); g_object_notify (G_OBJECT (cell_view), "fit-model"); } }
static gchar * get_text_from_label_widget (GtkWidget *label) { if (GTK_IS_LABEL (label)) return g_strdup (gtk_label_get_text (GTK_LABEL (label))); else if (GTK_IS_CELL_VIEW (label)) { GList *cells, *l; GtkTreeModel *model; GtkTreeIter iter; GtkTreePath *path; GtkCellArea *area; gchar *text; model = gtk_cell_view_get_model (GTK_CELL_VIEW (label)); path = gtk_cell_view_get_displayed_row (GTK_CELL_VIEW (label)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free (path); area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (label)); gtk_cell_area_apply_attributes (area, model, &iter, FALSE, FALSE); cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (label)); text = NULL; for (l = cells; l; l = l->next) { GtkCellRenderer *cell = l->data; if (GTK_IS_CELL_RENDERER_TEXT (cell)) { g_object_get (cell, "text", &text, NULL); break; } } g_list_free (cells); return text; } return NULL; }
static void gtk_cell_view_cell_layout_pack_end (GtkCellLayout *layout, GtkCellRenderer *renderer, gboolean expand) { GtkCellViewCellInfo *info; GtkCellView *cellview = GTK_CELL_VIEW (layout); g_return_if_fail (GTK_IS_CELL_VIEW (cellview)); g_return_if_fail (GTK_IS_CELL_RENDERER (renderer)); g_return_if_fail (!gtk_cell_view_get_cell_info (cellview, renderer)); g_object_ref (G_OBJECT (renderer)); gtk_object_sink (GTK_OBJECT (renderer)); info = g_new0 (GtkCellViewCellInfo, 1); info->cell = renderer; info->expand = expand ? TRUE : FALSE; info->pack = GTK_PACK_END; cellview->priv->cell_list = g_list_append (cellview->priv->cell_list, info); }
void gtk_cell_view_set_model (GtkCellView *cell_view, GtkTreeModel *model) { g_return_if_fail (GTK_IS_CELL_VIEW (cell_view)); g_return_if_fail (GTK_IS_TREE_MODEL (model)); if (cell_view->priv->model) { if (cell_view->priv->displayed_row) gtk_tree_row_reference_free (cell_view->priv->displayed_row); cell_view->priv->displayed_row = NULL; g_object_unref (G_OBJECT (cell_view->priv->model)); cell_view->priv->model = NULL; } cell_view->priv->model = model; if (cell_view->priv->model) g_object_ref (G_OBJECT (cell_view->priv->model)); }
/** * gtk_cell_view_set_displayed_row: * @cell_view: a #GtkCellView * @path: (allow-none): a #GtkTreePath or %NULL to unset. * * Sets the row of the model that is currently displayed * by the #GtkCellView. If the path is unset, then the * contents of the cellview "stick" at their last value; * this is not normally a desired result, but may be * a needed intermediate state if say, the model for * the #GtkCellView becomes temporarily empty. * * Since: 2.6 **/ void gtk_cell_view_set_displayed_row (GtkCellView *cell_view, GtkTreePath *path) { g_return_if_fail (GTK_IS_CELL_VIEW (cell_view)); g_return_if_fail (GTK_IS_TREE_MODEL (cell_view->priv->model)); if (cell_view->priv->displayed_row) gtk_tree_row_reference_free (cell_view->priv->displayed_row); if (path) { cell_view->priv->displayed_row = gtk_tree_row_reference_new (cell_view->priv->model, path); } else cell_view->priv->displayed_row = NULL; /* force resize and redraw */ gtk_widget_queue_resize (GTK_WIDGET (cell_view)); gtk_widget_queue_draw (GTK_WIDGET (cell_view)); }