static SheetObjectView * gnm_soi_new_view (SheetObject *so, SheetObjectViewContainer *container) { SheetObjectImage *soi = SHEET_OBJECT_IMAGE (so); GocItem *item = NULL; GdkPixbuf *pixbuf, *placeholder = NULL; pixbuf = soi_get_pixbuf (soi, 1.); if (pixbuf == NULL) { placeholder = gtk_icon_theme_load_icon ( gtk_icon_theme_get_default (), "unknown_image", 100, 0, NULL); pixbuf = gdk_pixbuf_copy (placeholder); } item = goc_item_new ( gnm_pane_object_group (GNM_PANE (container)), so_image_goc_view_get_type (), NULL); goc_item_hide (goc_item_new (GOC_GROUP (item), GOC_TYPE_PIXBUF, "pixbuf", pixbuf, NULL)); g_object_unref (G_OBJECT (pixbuf)); if (placeholder) g_object_set_data (G_OBJECT (item), "tile", placeholder); return gnm_pane_object_register (so, item, TRUE); }
static SheetObjectView * gnm_soi_new_view (SheetObject *so, SheetObjectViewContainer *container) { SheetObjectImage *soi = SHEET_OBJECT_IMAGE (so); GocItem *item = NULL; item = goc_item_new ( gnm_pane_object_group (GNM_PANE (container)), so_image_goc_view_get_type (), NULL); if (soi->image) { goc_item_hide (goc_item_new (GOC_GROUP (item), GOC_TYPE_IMAGE, "image", soi->image, "crop-bottom", soi->crop_bottom, "crop-left", soi->crop_left, "crop-right", soi->crop_right, "crop-top", soi->crop_top, NULL)); } else { GdkPixbuf *placeholder = go_gdk_pixbuf_load_from_file ("res:gnm:pixmaps/unknown_image.png"); GdkPixbuf *pixbuf = gdk_pixbuf_copy (placeholder); goc_item_hide (goc_item_new (GOC_GROUP (item), GOC_TYPE_PIXBUF, "pixbuf", pixbuf, NULL)); g_object_unref (pixbuf); g_object_set_data (G_OBJECT (item), "tile", placeholder); } return gnm_pane_object_register (so, item, TRUE); }
/** * gnm_cell_combo_view_new: * @so: #SheetObject * @type: #GType * @container: SheetObjectViewContainer (a GnmPane) * * Create and register an in cell combo to pick from an autofilter list. **/ SheetObjectView * gnm_cell_combo_view_new (SheetObject *so, GType type, SheetObjectViewContainer *container) { GnmPane *pane = GNM_PANE (container); GtkWidget *view_widget = gtk_button_new (); GocItem *ccombo = goc_item_new (pane->object_views, type, NULL); goc_item_new (GOC_GROUP (ccombo), GOC_TYPE_WIDGET, "widget", view_widget, NULL); gtk_widget_set_can_focus (view_widget, FALSE); gtk_container_add (GTK_CONTAINER (view_widget), ccombo_create_arrow (GNM_CCOMBO_VIEW (ccombo), so)); g_signal_connect_swapped (view_widget, "pressed", G_CALLBACK (cb_ccombo_button_pressed), ccombo); gtk_widget_show_all (view_widget); return gnm_pane_object_register (so, ccombo, FALSE); }
static SheetObjectView * gnm_so_path_new_view (SheetObject *so, SheetObjectViewContainer *container) { GnmSOPath *sop = GNM_SO_PATH (so); GnmSOPathView *item; /* FIXME: this is unsafe if the paths change after the view is created, * but this can't occur for now */ unsigned i; if (sop->path == NULL && sop->paths == NULL) return NULL; item = (GnmSOPathView *) goc_item_new ( gnm_pane_object_group (GNM_PANE (container)), so_path_goc_view_get_type (), NULL); if (sop->path) item->path = goc_item_new (GOC_GROUP (item), GOC_TYPE_PATH, "closed", TRUE, "fill-rule", TRUE, NULL); else { item->paths = g_ptr_array_sized_new (sop->paths->len); g_ptr_array_set_free_func (item->paths, g_object_unref); for (i = 0; i < sop->paths->len; i++) g_ptr_array_add (item->paths, goc_item_new (GOC_GROUP (item), GOC_TYPE_PATH, "closed", TRUE, "fill-rule", TRUE, NULL)); } cb_gnm_so_path_changed (sop, NULL, item); g_signal_connect_object (sop, "notify::style", G_CALLBACK (cb_gnm_so_path_changed), item, 0); return gnm_pane_object_register (so, GOC_ITEM (item), TRUE); }
static void cb_gnm_so_path_changed (GnmSOPath const *sop, G_GNUC_UNUSED GParamSpec *pspec, GnmSOPathView *group) { GList *ptr = GOC_GROUP (group)->children; for (; ptr && ptr->data; ptr = ptr->next) if (GOC_IS_PATH (ptr->data)) cb_gnm_so_path_style_changed (GOC_ITEM (ptr->data), sop); if (sop->text != NULL && *sop->text != 0) { /* set a font, a very bad solution, but will do until we move to GOString */ PangoFontDescription *desc = pango_font_description_from_string ("Sans 10"); GOStyle *style; if (group->text == NULL) { double x0, y0, x1, y1; if (group->path) goc_item_get_bounds (group->path, &x0, &y0, &x1, &y1); else { unsigned i; double mx, my, Mx, My; x0 = y0 = G_MAXDOUBLE; x1 = y1 = -G_MAXDOUBLE; for (i = 0; i < group->paths->len; i++) { goc_item_get_bounds (GOC_ITEM (g_ptr_array_index (group->paths, i)), &mx, &my, &Mx, &My); if (mx < x0) x0 = mx; if (my < y0) y0 = my; if (Mx > x1) x1 = Mx; if (My > y1) y1 = My; } } x1 -= x0 + sop->margin_pts.left + sop->margin_pts.right; y1 -= y0 + sop->margin_pts.top + sop->margin_pts.bottom; x0 += x1 / 2. + sop->margin_pts.left; y0 += y1 / 2. + sop->margin_pts.top; x1 = MAX (x1, DBL_MIN); y1 = MAX (y1, DBL_MIN); group->text = goc_item_new (GOC_GROUP (group), GOC_TYPE_TEXT, "anchor", GO_ANCHOR_CENTER, "clip", TRUE, "x", x0, "y", y0, "clip-height", y1, "clip-width", x1, "wrap-width", x1, "attributes", sop->markup, NULL); } style = go_styled_object_get_style (GO_STYLED_OBJECT (group->text)); go_style_set_font_desc (style, desc); goc_item_set (group->text, "text", sop->text, "attributes", sop->markup, NULL); } else if (group->text != NULL) { g_object_unref (group->text); group->text = NULL; } }