static void write_xml_textbox (Textbox *textbox, parseXmlContext *ctxt) { xmlNodePtr node_textbox; gchar *str; Coords pos; g_return_if_fail (textbox != NULL); if (!IS_TEXTBOX (textbox)) return; // Create a node for the textbox. node_textbox = xmlNewChild (ctxt->node_textboxes, ctxt->ns, BAD_CAST "textbox", NULL); if (!node_textbox) { g_warning ("Failed during save of text box.\n"); return; } item_data_get_pos (ITEM_DATA (textbox), &pos); str = g_strdup_printf ("(%g %g)", pos.x, pos.y); xmlNewChild (node_textbox, ctxt->ns, BAD_CAST "position", BAD_CAST str); g_free (str); str = textbox_get_text (textbox); xmlNewChild (node_textbox, ctxt->ns, BAD_CAST "text", BAD_CAST str); }
// Create a SheetItem from an ItemData object. This is a bit ugly. // It could be beautified by having a method that creates the item. // E.g. sheet_item->new_from_data (data); SheetItem * sheet_item_factory_create_sheet_item (Sheet *sheet, ItemData *data) { SheetItem *item; g_return_val_if_fail (data != NULL, NULL); g_return_val_if_fail (IS_ITEM_DATA (data), NULL); g_return_val_if_fail (sheet != NULL, NULL); g_return_val_if_fail (IS_SHEET (sheet), NULL); item = NULL; // Pick the right model. if (IS_PART (data)) { NG_DEBUG ("sheet_item_factory_create_sheet_item part\n\n"); item = SHEET_ITEM (part_item_new (sheet, PART (data))); } else if (IS_WIRE (data)) { NG_DEBUG ("sheet_item_factory_create_sheet_item wire\n\n"); item = SHEET_ITEM (wire_item_new (sheet, WIRE (data))); } else if (IS_TEXTBOX (data)) { NG_DEBUG ("sheet_item_factory_create_sheet_item text\n\n"); item = SHEET_ITEM (textbox_item_new (sheet, TEXTBOX (data))); } else g_warning ("Unknown Item type."); return item; }
char * textbox_get_font (Textbox *textbox) { g_return_val_if_fail (textbox != NULL, NULL); g_return_val_if_fail (IS_TEXTBOX (textbox), NULL); return textbox->priv->font; }
static void textbox_item_paste (Sheet *sheet, ItemData *data) { g_return_if_fail (sheet != NULL); g_return_if_fail (IS_SHEET (sheet)); g_return_if_fail (data != NULL); g_return_if_fail (IS_TEXTBOX (data)); sheet_add_ghost_item (sheet, data); }
static void textbox_unregister (ItemData *data) { NodeStore *store; g_return_if_fail (IS_TEXTBOX (data)); store = item_data_get_store (data); node_store_remove_textbox (store, TEXTBOX (data)); }
static void textbox_copy (ItemData *dest, ItemData *src) { Textbox *dest_textbox, *src_textbox; g_return_if_fail (dest != NULL); g_return_if_fail (IS_TEXTBOX (dest)); g_return_if_fail (src != NULL); g_return_if_fail (IS_TEXTBOX (src)); if (parent_class->copy != NULL) parent_class->copy (dest, src); dest_textbox = TEXTBOX (dest); src_textbox = TEXTBOX (src); dest_textbox->priv->text = src_textbox->priv->text; dest_textbox->priv->font = src_textbox->priv->font; }
static int textbox_register (ItemData *data) { NodeStore *store; g_return_val_if_fail (IS_TEXTBOX (data), 0); store = item_data_get_store (data); node_store_add_textbox (store, TEXTBOX (data)); return 0; }
void textbox_set_text (Textbox *textbox, const char *text) { g_return_if_fail (textbox != NULL); g_return_if_fail (IS_TEXTBOX (textbox)); g_free (textbox->priv->text); textbox->priv->text = g_strdup (text); textbox_update_bbox (textbox); g_signal_emit_by_name (G_OBJECT(textbox), "text_changed", text); }
static void textbox_flip (ItemData *data, gboolean horizontal, SheetPos *center) { double affine[6]; ArtPoint src, dst; Textbox *textbox; TextboxPriv *priv; SheetPos b1, b2; SheetPos textbox_center, delta; g_return_if_fail (data != NULL); g_return_if_fail (IS_TEXTBOX (data)); textbox = TEXTBOX (data); if (center) { item_data_get_absolute_bbox (ITEM_DATA (textbox), &b1, &b2); textbox_center.x = b1.x + (b2.x - b1.x) / 2; textbox_center.y = b1.y + (b2.y - b1.y) / 2; } priv = textbox->priv; if (horizontal) art_affine_scale (affine, -1, 1); else art_affine_scale (affine, 1, -1); /* * Let the views (canvas items) know about the rotation. */ g_signal_emit_by_name(G_OBJECT (textbox), "flipped", horizontal); if (center) { SheetPos textbox_pos; item_data_get_pos (ITEM_DATA (textbox), &textbox_pos); src.x = textbox_center.x - center->x; src.y = textbox_center.y - center->y; art_affine_point (&dst, &src, affine); delta.x = -src.x + dst.x; delta.y = -src.y + dst.y; item_data_move (ITEM_DATA (textbox), &delta); } }
void textbox_set_font (Textbox *textbox, char *font) { g_return_if_fail (textbox != NULL); g_return_if_fail (IS_TEXTBOX (textbox)); g_free (textbox->priv->font); if (font == NULL) textbox->priv->font = g_strdup (TEXTBOX_DEFAULT_FONT); else textbox->priv->font = g_strdup (font); textbox_update_bbox (textbox); g_signal_emit_by_name(G_OBJECT (textbox), "font_changed", textbox->priv->font); }
static ItemData * textbox_clone (ItemData *src) { Textbox *src_textbox, *new_textbox; ItemDataClass *id_class; g_return_val_if_fail (src != NULL, NULL); g_return_val_if_fail (IS_TEXTBOX (src), NULL); id_class = ITEM_DATA_CLASS(G_OBJECT_GET_CLASS(src)); if (id_class->copy == NULL) return NULL; src_textbox = TEXTBOX(src); new_textbox = TEXTBOX(g_object_new(TYPE_TEXTBOX, NULL)); id_class->copy (ITEM_DATA (new_textbox), src); return ITEM_DATA (new_textbox); }