static void real_set_value (GdauiEntryWrapper *mgwrap, const GValue *value) { GdauiEntryString *mgstr; GdaDataHandler *dh; PangoLayout *layout; gchar *text; g_return_if_fail (GDAUI_IS_ENTRY_STRING (mgwrap)); mgstr = GDAUI_ENTRY_STRING (mgwrap); GdauiEntryStringPrivate *priv = gdaui_entry_string_get_instance_private (mgstr); dh = gdaui_data_entry_get_handler (GDAUI_DATA_ENTRY (mgwrap)); /* do we need to go into multi line mode ? */ text = gda_data_handler_get_str_from_value (dh, value); layout = gtk_widget_create_pango_layout (GTK_WIDGET (mgwrap), text); if (pango_layout_get_line_count (layout) > 1) g_object_set (G_OBJECT (mgwrap), "multiline", TRUE, NULL); g_object_unref (G_OBJECT (layout)); /* fill the single line widget */ if (value) { if (gda_value_is_null ((GValue *) value)) gdaui_entry_set_text (GDAUI_ENTRY (priv->entry), NULL); else gdaui_entry_set_text (GDAUI_ENTRY (priv->entry), text); } else gdaui_entry_set_text (GDAUI_ENTRY (priv->entry), NULL); /* fill the multiline widget */ if (value) { if (gda_value_is_null ((GValue *) value) || !text) gtk_text_buffer_set_text (priv->buffer, "", -1); else gtk_text_buffer_set_text (priv->buffer, text, -1); } else gtk_text_buffer_set_text (priv->buffer, "", -1); g_free (text); }
static void gdaui_entry_wrapper_set_property (GObject *object, guint param_id, const GValue *value, GParamSpec *pspec) { GdauiEntryWrapper *wrapper = GDAUI_ENTRY_WRAPPER (object); if (wrapper->priv) { switch (param_id) { case PROP_SET_DEFAULT_IF_INVALID: { guint attrs; wrapper->priv->set_default_if_invalid = g_value_get_boolean (value); attrs = gdaui_data_entry_get_attributes (GDAUI_DATA_ENTRY (wrapper)); if (wrapper->priv->set_default_if_invalid && (attrs & GDA_VALUE_ATTR_DATA_NON_VALID)) { GValue *sane_value; GdaDataHandler *dh; GType type; check_correct_init (wrapper); dh = gdaui_data_entry_get_handler (GDAUI_DATA_ENTRY (wrapper)); type = gdaui_data_entry_get_value_type (GDAUI_DATA_ENTRY (wrapper)); sane_value = gda_data_handler_get_sane_init_value (dh, type); (*wrapper->priv->real_class->real_set_value) (wrapper, sane_value); if (sane_value) gda_value_free (sane_value); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); break; } } } }
static GValue * real_get_value (GdauiEntryWrapper *mgwrap) { GValue *value; GdauiEntryString *mgstr; GdaDataHandler *dh; g_return_val_if_fail (GDAUI_IS_ENTRY_STRING (mgwrap), NULL); mgstr = GDAUI_ENTRY_STRING (mgwrap); GdauiEntryStringPrivate *priv = gdaui_entry_string_get_instance_private (mgstr); dh = gdaui_data_entry_get_handler (GDAUI_DATA_ENTRY (mgwrap)); if (! priv->multiline) { gchar *cstr; cstr = gdaui_entry_get_text (GDAUI_ENTRY (priv->entry)); value = gda_data_handler_get_value_from_str (dh, cstr, gdaui_data_entry_get_value_type (GDAUI_DATA_ENTRY (mgwrap))); g_free (cstr); } else { GtkTextIter start, end; gchar *str; gtk_text_buffer_get_start_iter (priv->buffer, &start); gtk_text_buffer_get_end_iter (priv->buffer, &end); str = gtk_text_buffer_get_text (priv->buffer, &start, &end, FALSE); value = gda_data_handler_get_value_from_str (dh, str, gdaui_data_entry_get_value_type (GDAUI_DATA_ENTRY (mgwrap))); g_free (str); } if (!value) { /* in case the gda_data_handler_get_value_from_str() returned an error because the contents of the GtkEntry cannot be interpreted as a GValue */ value = gda_value_new_null (); } return value; }