/** \brief Speical function to obtain the text assigned to the button widget. **/ Tcl_Obj *gnoclCgetButtonText ( Tcl_Interp *interp, GtkButton *button ) { Tcl_Obj *obj = NULL; if ( gtk_button_get_use_stock ( button ) ) { const char *st = gtk_button_get_label ( button ); if ( st == NULL ) { obj = Tcl_NewStringObj ( "", 0 ); } else { obj = Tcl_NewStringObj ( "%#", 2 ); Tcl_AppendObjToObj ( obj, gnoclGtkToStockName ( st ) ); } } else { GtkLabel *label = GTK_LABEL ( gnoclFindChild ( GTK_WIDGET ( button ), GTK_TYPE_LABEL ) ); Tcl_Obj *old = Tcl_NewStringObj ( gtk_label_get_label ( label ), -1 ); assert ( label ); if ( gtk_label_get_use_markup ( label ) ) { obj = Tcl_NewStringObj ( "%<", 2 ); Tcl_AppendObjToObj ( obj, old ); } else if ( gtk_label_get_use_underline ( label ) ) { obj = Tcl_NewStringObj ( "%_", 2 ); Tcl_AppendObjToObj ( obj, old ); } else { obj = old; } } return obj; }
/** set the widget label */ void XAP_UnixWidget::setLabel(const UT_UTF8String &val) { if (GTK_IS_BUTTON(m_widget)) { gtk_button_set_label(GTK_BUTTON(m_widget), val.utf8_str()); } else if (GTK_IS_LABEL(m_widget)) { if(!gtk_label_get_use_markup(GTK_LABEL(m_widget))) { gtk_label_set_text(GTK_LABEL(m_widget), val.utf8_str()); } else { std::string markup = UT_std_string_sprintf(m_data.c_str(), val.utf8_str()); gtk_label_set_label(GTK_LABEL(m_widget), markup.c_str()); } } else if (GTK_IS_WINDOW(m_widget)) { gtk_window_set_title(GTK_WINDOW(m_widget), val.utf8_str()); } else { UT_ASSERT_HARMLESS(UT_SHOULD_NOT_HAPPEN); } }
/* * Sets the properties of the widget. This is used for both applying the * properties changed in the property editor, and also for loading. */ void gb_label_set_standard_properties (GtkWidget * widget, GbWidgetSetArgData * data, const char *label_p, const char *use_underline_p, const char *use_markup_p, const char *justify_p, const char *wrap_p, const char *selectable_p, const char *xalign_p, const char *yalign_p, const char *xpad_p, const char *ypad_p, const char *focus_target_p) { gchar *label, *justify, *accel_target; const gchar *label_text; gfloat xalign, yalign; gint xpad, ypad, i; gboolean wrap, selectable, set_alignment = FALSE, set_padding = FALSE; gboolean use_underline, use_markup; gboolean set_label = FALSE; use_underline = gb_widget_input_bool (data, use_underline_p); if (data->apply) gtk_label_set_use_underline (GTK_LABEL (widget), use_underline); use_markup = gb_widget_input_bool (data, use_markup_p); if (data->apply) { set_label = TRUE; gtk_object_set_data (GTK_OBJECT (widget), use_markup_p, GINT_TO_POINTER (use_markup)); } label = gb_widget_input_text (data, label_p); if (data->apply) { set_label = TRUE; label_text = label; } else { label_text = gtk_label_get_label (GTK_LABEL (widget)); } if (set_label) { gboolean prev_use_markup; use_markup = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (widget), use_markup_p)); /* We try to parse the markup here, and if it isn't valid, we will turn use_markup off and show it as plain text. */ if (use_markup) { GError *error = NULL; gunichar accel_marker = 0; PangoAttrList *attrs = NULL; gunichar accel_char = 0; gchar *text = NULL; if (gtk_label_get_use_underline (GTK_LABEL (widget))) accel_marker = '_'; /* We check it is valid markup. If it isn't we will set "use_markup" to FALSE. Note that we don't need attrs, text, or accel_char but it seems to crash otherwise. */ if (!pango_parse_markup (label_text, -1, accel_marker, &attrs, &text, &accel_char, &error)) { use_markup = FALSE; g_error_free (error); } else { if (attrs) pango_attr_list_unref (attrs); g_free (text); } } /* If we are turning use_markup off, we want to do that before setting the text. If we are turning it on, we want to do it after. */ prev_use_markup = gtk_label_get_use_markup (GTK_LABEL (widget)); if (!use_markup && prev_use_markup) gtk_label_set_use_markup (GTK_LABEL (widget), use_markup); gtk_label_set_label (GTK_LABEL (widget), label_text); if (use_markup && !prev_use_markup) gtk_label_set_use_markup (GTK_LABEL (widget), use_markup); } if (data->action == GB_APPLYING) g_free (label); justify = gb_widget_input_choice (data, justify_p); if (data->apply) { for (i = 0; i < sizeof (GbJustifyValues) / sizeof (GbJustifyValues[0]); i++) { if (!strcmp (justify, GbJustifyChoices[i]) || !strcmp (justify, GbJustifySymbols[i])) { gtk_label_set_justify (GTK_LABEL (widget), GbJustifyValues[i]); break; } } } wrap = gb_widget_input_bool (data, wrap_p); if (data->apply) gtk_label_set_line_wrap (GTK_LABEL (widget), wrap); selectable = gb_widget_input_bool (data, selectable_p); if (data->apply) gtk_label_set_selectable (GTK_LABEL (widget), selectable); xalign = gb_widget_input_float (data, xalign_p); if (data->apply) set_alignment = TRUE; else xalign = GTK_MISC (widget)->xalign; yalign = gb_widget_input_float (data, yalign_p); if (data->apply) set_alignment = TRUE; else yalign = GTK_MISC (widget)->yalign; if (set_alignment) gtk_misc_set_alignment (GTK_MISC (widget), xalign, yalign); xpad = gb_widget_input_int (data, xpad_p); if (data->apply) set_padding = TRUE; else xpad = GTK_MISC (widget)->xpad; ypad = gb_widget_input_int (data, ypad_p); if (data->apply) set_padding = TRUE; else ypad = GTK_MISC (widget)->ypad; if (set_padding) gtk_misc_set_padding (GTK_MISC (widget), xpad, ypad); /* Labels not in buttons may have a focus target widget. */ accel_target = gb_widget_input_combo (data, focus_target_p); if (data->apply) { if (!gb_label_find_mnemonic_widget (widget)) { if (!strcmp (accel_target, _("Auto"))) accel_target = NULL; gtk_object_set_data_full (GTK_OBJECT (widget), focus_target_p, g_strdup (accel_target), accel_target ? g_free : NULL); } } }
Php::Value GtkLabel_::get_use_markup() { gboolean ret = gtk_label_get_use_markup (GTK_LABEL(instance)); return ret; }