diff options
Diffstat (limited to 'plugins/gtk+/glade-attributes.c')
-rw-r--r--[-rwxr-xr-x] | plugins/gtk+/glade-attributes.c | 1898 |
1 files changed, 946 insertions, 952 deletions
diff --git a/plugins/gtk+/glade-attributes.c b/plugins/gtk+/glade-attributes.c index 836b2ef9..1eecdbc1 100755..100644 --- a/plugins/gtk+/glade-attributes.c +++ b/plugins/gtk+/glade-attributes.c @@ -1,4 +1,3 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * glade-attributes.c - Editing support for pango attributes * @@ -36,65 +35,66 @@ #define GLADE_RESPONSE_CLEAR 42 static GList * -glade_attr_list_copy (GList *attrs) +glade_attr_list_copy (GList * attrs) { - GList *ret = NULL, *list; - GladeAttribute *attr, *dup_attr; + GList *ret = NULL, *list; + GladeAttribute *attr, *dup_attr; - for (list = attrs; list; list = list->next) - { - attr = list->data; + for (list = attrs; list; list = list->next) + { + attr = list->data; - dup_attr = g_new0 (GladeAttribute, 1); - dup_attr->type = attr->type; - dup_attr->start = attr->start; - dup_attr->end = attr->end; - g_value_init (&(dup_attr->value), G_VALUE_TYPE (&(attr->value))); - g_value_copy (&(attr->value), &(dup_attr->value)); + dup_attr = g_new0 (GladeAttribute, 1); + dup_attr->type = attr->type; + dup_attr->start = attr->start; + dup_attr->end = attr->end; + g_value_init (&(dup_attr->value), G_VALUE_TYPE (&(attr->value))); + g_value_copy (&(attr->value), &(dup_attr->value)); - ret = g_list_prepend (ret, dup_attr); - } + ret = g_list_prepend (ret, dup_attr); + } - return g_list_reverse (ret); + return g_list_reverse (ret); } void -glade_attr_list_free (GList *attrs) +glade_attr_list_free (GList * attrs) { - GList *list; - GladeAttribute *attr; + GList *list; + GladeAttribute *attr; - for (list = attrs; list; list = list->next) - { - attr = list->data; + for (list = attrs; list; list = list->next) + { + attr = list->data; - g_value_unset (&(attr->value)); - g_free (attr); - } - g_list_free (attrs); + g_value_unset (&(attr->value)); + g_free (attr); + } + g_list_free (attrs); } GType glade_attr_glist_get_type (void) { - static GType type_id = 0; - - if (!type_id) - type_id = g_boxed_type_register_static - ("GladeAttrGList", - (GBoxedCopyFunc) glade_attr_list_copy, - (GBoxedFreeFunc) glade_attr_list_free); - return type_id; + static GType type_id = 0; + + if (!type_id) + type_id = g_boxed_type_register_static + ("GladeAttrGList", + (GBoxedCopyFunc) glade_attr_list_copy, + (GBoxedFreeFunc) glade_attr_list_free); + return type_id; } /************************************************************** * GladeEditorProperty stuff here **************************************************************/ -typedef struct { - GladeEditorProperty parent_instance; +typedef struct +{ + GladeEditorProperty parent_instance; + + GtkTreeModel *model; - GtkTreeModel *model; - } GladeEPropAttrs; GLADE_MAKE_EPROP (GladeEPropAttrs, glade_eprop_attrs) @@ -103,1024 +103,1018 @@ GLADE_MAKE_EPROP (GladeEPropAttrs, glade_eprop_attrs) #define GLADE_IS_EPROP_ATTRS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLADE_TYPE_EPROP_ATTRS)) #define GLADE_IS_EPROP_ATTRS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_EPROP_ATTRS)) #define GLADE_EPROP_ATTRS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GLADE_EPROP_ATTRS, GladeEPropAttrsClass)) - -enum { - - /* Main Data */ - COLUMN_NAME, /* The title string for PangoAttrType */ - COLUMN_NAME_WEIGHT, /* For bold names */ - COLUMN_TYPE, /* The PangoAttrType */ - COLUMN_EDIT_TYPE, /* The AttrEditType (below) */ - COLUMN_VALUE, /* The value */ - COLUMN_START, /* attribute start value */ - COLUMN_END, /* attribute end value */ - - /* Editor renderer related */ - COLUMN_TOGGLE_ACTIVE, /* whether the toggle renderer is being used */ - COLUMN_TOGGLE_DOWN, /* whether the toggle should be displayed in "downstate" */ - - COLUMN_BUTTON_ACTIVE, /* whether the GladeCellRendererButton is to be used (to launch dialogs) */ - COLUMN_TEXT, /* text attribute value for all text derived renderers */ - COLUMN_TEXT_STYLE, /* whether to make italic */ - COLUMN_TEXT_FG, /* forground colour of the text */ - - COLUMN_COMBO_ACTIVE, /* whether the combobox renderer is being used */ - COLUMN_COMBO_MODEL, /* the model for the dropdown list */ - - COLUMN_SPIN_ACTIVE, /* whether the spin renderer is being used */ - COLUMN_SPIN_DIGITS, /* How many decimal points to show (used to edit float values) */ - - NUM_COLUMNS -}; - - -typedef enum { - EDIT_TOGGLE = 0, - EDIT_COMBO, - EDIT_SPIN, - EDIT_COLOR, - EDIT_INVALID -} AttrEditType; + enum + { + + /* Main Data */ + COLUMN_NAME, /* The title string for PangoAttrType */ + COLUMN_NAME_WEIGHT, /* For bold names */ + COLUMN_TYPE, /* The PangoAttrType */ + COLUMN_EDIT_TYPE, /* The AttrEditType (below) */ + COLUMN_VALUE, /* The value */ + COLUMN_START, /* attribute start value */ + COLUMN_END, /* attribute end value */ + + /* Editor renderer related */ + COLUMN_TOGGLE_ACTIVE, /* whether the toggle renderer is being used */ + COLUMN_TOGGLE_DOWN, /* whether the toggle should be displayed in "downstate" */ + + COLUMN_BUTTON_ACTIVE, /* whether the GladeCellRendererButton is to be used (to launch dialogs) */ + COLUMN_TEXT, /* text attribute value for all text derived renderers */ + COLUMN_TEXT_STYLE, /* whether to make italic */ + COLUMN_TEXT_FG, /* forground colour of the text */ + + COLUMN_COMBO_ACTIVE, /* whether the combobox renderer is being used */ + COLUMN_COMBO_MODEL, /* the model for the dropdown list */ + + COLUMN_SPIN_ACTIVE, /* whether the spin renderer is being used */ + COLUMN_SPIN_DIGITS, /* How many decimal points to show (used to edit float values) */ + + NUM_COLUMNS + }; + + + typedef enum + { + EDIT_TOGGLE = 0, + EDIT_COMBO, + EDIT_SPIN, + EDIT_COLOR, + EDIT_INVALID + } AttrEditType; #define ACTIVATE_COLUMN_FROM_TYPE(type) \ ((type) == EDIT_TOGGLE ? COLUMN_TOGGLE_ACTIVE : \ (type) == EDIT_SPIN ? COLUMN_SPIN_ACTIVE : \ (type) == EDIT_COMBO ? COLUMN_COMBO_ACTIVE: COLUMN_BUTTON_ACTIVE) -static GtkListStore * -get_enum_model_for_combo (PangoAttrType type) + static GtkListStore *get_enum_model_for_combo (PangoAttrType type) { - static GtkListStore *style_store = NULL, - *weight_store = NULL, *variant_store = NULL, - *stretch_store = NULL, *gravity_store = NULL, - *gravity_hint_store = NULL, *default_store = NULL; - - switch (type) - { - case PANGO_ATTR_STYLE: - if (!style_store) - style_store = glade_utils_liststore_from_enum_type (PANGO_TYPE_STYLE, TRUE); - return style_store; - - case PANGO_ATTR_WEIGHT: - if (!weight_store) - weight_store = glade_utils_liststore_from_enum_type (PANGO_TYPE_WEIGHT, TRUE); - return weight_store; - - case PANGO_ATTR_VARIANT: - if (!variant_store) - variant_store = glade_utils_liststore_from_enum_type (PANGO_TYPE_VARIANT, TRUE); - return variant_store; - - case PANGO_ATTR_STRETCH: - if (!stretch_store) - stretch_store = glade_utils_liststore_from_enum_type (PANGO_TYPE_STRETCH, TRUE); - return stretch_store; - - case PANGO_ATTR_GRAVITY: - if (!gravity_store) - gravity_store = glade_utils_liststore_from_enum_type (PANGO_TYPE_GRAVITY, TRUE); - return gravity_store; - - case PANGO_ATTR_GRAVITY_HINT: - if (!gravity_hint_store) - gravity_hint_store = glade_utils_liststore_from_enum_type (PANGO_TYPE_GRAVITY_HINT, TRUE); - return gravity_hint_store; - - default: - if (!default_store) - default_store = gtk_list_store_new (1, G_TYPE_STRING); - return default_store; - } + static GtkListStore *style_store = NULL, + *weight_store = NULL, *variant_store = NULL, + *stretch_store = NULL, *gravity_store = NULL, + *gravity_hint_store = NULL, *default_store = NULL; + + switch (type) + { + case PANGO_ATTR_STYLE: + if (!style_store) + style_store = + glade_utils_liststore_from_enum_type (PANGO_TYPE_STYLE, TRUE); + return style_store; + + case PANGO_ATTR_WEIGHT: + if (!weight_store) + weight_store = + glade_utils_liststore_from_enum_type (PANGO_TYPE_WEIGHT, TRUE); + return weight_store; + + case PANGO_ATTR_VARIANT: + if (!variant_store) + variant_store = + glade_utils_liststore_from_enum_type (PANGO_TYPE_VARIANT, TRUE); + return variant_store; + + case PANGO_ATTR_STRETCH: + if (!stretch_store) + stretch_store = + glade_utils_liststore_from_enum_type (PANGO_TYPE_STRETCH, TRUE); + return stretch_store; + + case PANGO_ATTR_GRAVITY: + if (!gravity_store) + gravity_store = + glade_utils_liststore_from_enum_type (PANGO_TYPE_GRAVITY, TRUE); + return gravity_store; + + case PANGO_ATTR_GRAVITY_HINT: + if (!gravity_hint_store) + gravity_hint_store = + glade_utils_liststore_from_enum_type (PANGO_TYPE_GRAVITY_HINT, + TRUE); + return gravity_hint_store; + + default: + if (!default_store) + default_store = gtk_list_store_new (1, G_TYPE_STRING); + return default_store; + } } static gboolean -append_empty_row (GtkListStore *store, - PangoAttrType type) +append_empty_row (GtkListStore * store, PangoAttrType type) { - const gchar *name = NULL; - GtkListStore *model = get_enum_model_for_combo (type); - GtkTreeIter iter; - AttrEditType edit_type = EDIT_INVALID; - - switch (type) - { - /* PangoAttrLanguage */ - case PANGO_ATTR_LANGUAGE: - - break; - /* PangoAttrInt */ - case PANGO_ATTR_STYLE: - edit_type = EDIT_COMBO; - name = C_("textattr", "Style"); - break; - case PANGO_ATTR_WEIGHT: - edit_type = EDIT_COMBO; - name = C_("textattr", "Weight"); - break; - case PANGO_ATTR_VARIANT: - edit_type = EDIT_COMBO; - name = C_("textattr", "Variant"); - break; - case PANGO_ATTR_STRETCH: - edit_type = EDIT_COMBO; - name = C_("textattr", "Stretch"); - break; - case PANGO_ATTR_UNDERLINE: - edit_type = EDIT_TOGGLE; - name = C_("textattr", "Underline"); - break; - case PANGO_ATTR_STRIKETHROUGH: - edit_type = EDIT_TOGGLE; - name = C_("textattr", "Strikethrough"); - break; - case PANGO_ATTR_GRAVITY: - edit_type = EDIT_COMBO; - name = C_("textattr", "Gravity"); - break; - case PANGO_ATTR_GRAVITY_HINT: - edit_type = EDIT_COMBO; - name = C_("textattr", "Gravity Hint"); - break; - - /* PangoAttrString */ - case PANGO_ATTR_FAMILY: - /* Use a simple editable text renderer ? */ - break; - - /* PangoAttrSize */ - case PANGO_ATTR_SIZE: - edit_type = EDIT_SPIN; - name = C_("textattr", "Size"); - break; - case PANGO_ATTR_ABSOLUTE_SIZE: - edit_type = EDIT_SPIN; - name = C_("textattr", "Absolute Size"); - break; - - /* PangoAttrColor */ - /* Colours need editors... */ - case PANGO_ATTR_FOREGROUND: - edit_type = EDIT_COLOR; - name = C_("textattr", "Foreground Color"); - break; - case PANGO_ATTR_BACKGROUND: - edit_type = EDIT_COLOR; - name = C_("textattr", "Background Color"); - break; - case PANGO_ATTR_UNDERLINE_COLOR: - edit_type = EDIT_COLOR; - name = C_("textattr", "Underline Color"); - break; - case PANGO_ATTR_STRIKETHROUGH_COLOR: - edit_type = EDIT_COLOR; - name = C_("textattr", "Strikethrough Color"); - break; - - /* PangoAttrShape */ - case PANGO_ATTR_SHAPE: - /* Unsupported for now */ - break; - /* PangoAttrFloat */ - case PANGO_ATTR_SCALE: - edit_type = EDIT_SPIN; - name = C_("textattr", "Scale"); - break; - - case PANGO_ATTR_INVALID: - case PANGO_ATTR_LETTER_SPACING: - case PANGO_ATTR_RISE: - case PANGO_ATTR_FALLBACK: - case PANGO_ATTR_FONT_DESC: - default: - break; - } - - if (name) - { - gtk_list_store_append (store, &iter); - - gtk_list_store_set (store, &iter, - COLUMN_TOGGLE_ACTIVE, FALSE, - COLUMN_SPIN_ACTIVE, FALSE, - COLUMN_COMBO_ACTIVE, FALSE, - COLUMN_BUTTON_ACTIVE, FALSE, - -1); - - gtk_list_store_set (store, &iter, - COLUMN_NAME, name, - COLUMN_TYPE, type, - COLUMN_EDIT_TYPE, edit_type, - COLUMN_NAME_WEIGHT, PANGO_WEIGHT_NORMAL, - COLUMN_TEXT, _("<Enter Value>"), - COLUMN_TEXT_STYLE, PANGO_STYLE_ITALIC, - COLUMN_TEXT_FG, "Grey", - COLUMN_COMBO_MODEL, model, - ACTIVATE_COLUMN_FROM_TYPE (edit_type), TRUE, - -1); - return TRUE; - } - return FALSE; + const gchar *name = NULL; + GtkListStore *model = get_enum_model_for_combo (type); + GtkTreeIter iter; + AttrEditType edit_type = EDIT_INVALID; + + switch (type) + { + /* PangoAttrLanguage */ + case PANGO_ATTR_LANGUAGE: + + break; + /* PangoAttrInt */ + case PANGO_ATTR_STYLE: + edit_type = EDIT_COMBO; + name = C_ ("textattr", "Style"); + break; + case PANGO_ATTR_WEIGHT: + edit_type = EDIT_COMBO; + name = C_ ("textattr", "Weight"); + break; + case PANGO_ATTR_VARIANT: + edit_type = EDIT_COMBO; + name = C_ ("textattr", "Variant"); + break; + case PANGO_ATTR_STRETCH: + edit_type = EDIT_COMBO; + name = C_ ("textattr", "Stretch"); + break; + case PANGO_ATTR_UNDERLINE: + edit_type = EDIT_TOGGLE; + name = C_ ("textattr", "Underline"); + break; + case PANGO_ATTR_STRIKETHROUGH: + edit_type = EDIT_TOGGLE; + name = C_ ("textattr", "Strikethrough"); + break; + case PANGO_ATTR_GRAVITY: + edit_type = EDIT_COMBO; + name = C_ ("textattr", "Gravity"); + break; + case PANGO_ATTR_GRAVITY_HINT: + edit_type = EDIT_COMBO; + name = C_ ("textattr", "Gravity Hint"); + break; + + /* PangoAttrString */ + case PANGO_ATTR_FAMILY: + /* Use a simple editable text renderer ? */ + break; + + /* PangoAttrSize */ + case PANGO_ATTR_SIZE: + edit_type = EDIT_SPIN; + name = C_ ("textattr", "Size"); + break; + case PANGO_ATTR_ABSOLUTE_SIZE: + edit_type = EDIT_SPIN; + name = C_ ("textattr", "Absolute Size"); + break; + + /* PangoAttrColor */ + /* Colours need editors... */ + case PANGO_ATTR_FOREGROUND: + edit_type = EDIT_COLOR; + name = C_ ("textattr", "Foreground Color"); + break; + case PANGO_ATTR_BACKGROUND: + edit_type = EDIT_COLOR; + name = C_ ("textattr", "Background Color"); + break; + case PANGO_ATTR_UNDERLINE_COLOR: + edit_type = EDIT_COLOR; + name = C_ ("textattr", "Underline Color"); + break; + case PANGO_ATTR_STRIKETHROUGH_COLOR: + edit_type = EDIT_COLOR; + name = C_ ("textattr", "Strikethrough Color"); + break; + + /* PangoAttrShape */ + case PANGO_ATTR_SHAPE: + /* Unsupported for now */ + break; + /* PangoAttrFloat */ + case PANGO_ATTR_SCALE: + edit_type = EDIT_SPIN; + name = C_ ("textattr", "Scale"); + break; + + case PANGO_ATTR_INVALID: + case PANGO_ATTR_LETTER_SPACING: + case PANGO_ATTR_RISE: + case PANGO_ATTR_FALLBACK: + case PANGO_ATTR_FONT_DESC: + default: + break; + } + + if (name) + { + gtk_list_store_append (store, &iter); + + gtk_list_store_set (store, &iter, + COLUMN_TOGGLE_ACTIVE, FALSE, + COLUMN_SPIN_ACTIVE, FALSE, + COLUMN_COMBO_ACTIVE, FALSE, + COLUMN_BUTTON_ACTIVE, FALSE, -1); + + gtk_list_store_set (store, &iter, + COLUMN_NAME, name, + COLUMN_TYPE, type, + COLUMN_EDIT_TYPE, edit_type, + COLUMN_NAME_WEIGHT, PANGO_WEIGHT_NORMAL, + COLUMN_TEXT, _("<Enter Value>"), + COLUMN_TEXT_STYLE, PANGO_STYLE_ITALIC, + COLUMN_TEXT_FG, "Grey", + COLUMN_COMBO_MODEL, model, + ACTIVATE_COLUMN_FROM_TYPE (edit_type), TRUE, -1); + return TRUE; + } + return FALSE; } static gboolean -is_empty_row (GtkTreeModel *model, - GtkTreeIter *iter) +is_empty_row (GtkTreeModel * model, GtkTreeIter * iter) { - PangoAttrType attr_type; - AttrEditType edit_type; - gboolean bval; - gchar *strval = NULL; - gboolean empty_row = FALSE; - - /* First get the basic values */ - gtk_tree_model_get (model, iter, - COLUMN_TYPE, &attr_type, - COLUMN_EDIT_TYPE, &edit_type, - COLUMN_TOGGLE_DOWN, &bval, - COLUMN_TEXT, &strval, - -1); - - /* Ignore all other types */ - switch (edit_type) - { - case EDIT_TOGGLE: - if (!bval) - empty_row = TRUE; - break; - case EDIT_COMBO: - if (!strval || !strcmp (strval, _("Unset")) || !strcmp (strval, _("<Enter Value>"))) - empty_row = TRUE; - break; - case EDIT_SPIN: - /* XXX Interesting... can we get the defaults ? what can we do to let the user - * unset the value ?? - */ - if (!strval || !strcmp (strval, "0") || !strcmp (strval, _("<Enter Value>"))) - empty_row = TRUE; - break; - case EDIT_COLOR: - if (!strval || strval[0] == '\0' || !strcmp (strval, _("<Enter Value>"))) - empty_row = TRUE; - break; - case EDIT_INVALID: - default: - break; - } - g_free (strval); - - return empty_row; + PangoAttrType attr_type; + AttrEditType edit_type; + gboolean bval; + gchar *strval = NULL; + gboolean empty_row = FALSE; + + /* First get the basic values */ + gtk_tree_model_get (model, iter, + COLUMN_TYPE, &attr_type, + COLUMN_EDIT_TYPE, &edit_type, + COLUMN_TOGGLE_DOWN, &bval, COLUMN_TEXT, &strval, -1); + + /* Ignore all other types */ + switch (edit_type) + { + case EDIT_TOGGLE: + if (!bval) + empty_row = TRUE; + break; + case EDIT_COMBO: + if (!strval || !strcmp (strval, _("Unset")) || + !strcmp (strval, _("<Enter Value>"))) + empty_row = TRUE; + break; + case EDIT_SPIN: + /* XXX Interesting... can we get the defaults ? what can we do to let the user + * unset the value ?? + */ + if (!strval || !strcmp (strval, "0") || + !strcmp (strval, _("<Enter Value>"))) + empty_row = TRUE; + break; + case EDIT_COLOR: + if (!strval || strval[0] == '\0' || + !strcmp (strval, _("<Enter Value>"))) + empty_row = TRUE; + break; + case EDIT_INVALID: + default: + break; + } + g_free (strval); + + return empty_row; } static GType type_from_attr_type (PangoAttrType type) { - GType gtype = 0; - - switch (type) - { - case PANGO_ATTR_LANGUAGE: - case PANGO_ATTR_FAMILY: - return G_TYPE_STRING; - - case PANGO_ATTR_STYLE: return PANGO_TYPE_STYLE; - case PANGO_ATTR_WEIGHT: return PANGO_TYPE_WEIGHT; - case PANGO_ATTR_VARIANT: return PANGO_TYPE_VARIANT; - case PANGO_ATTR_STRETCH: return PANGO_TYPE_STRETCH; - case PANGO_ATTR_GRAVITY: return PANGO_TYPE_GRAVITY; - case PANGO_ATTR_GRAVITY_HINT: return PANGO_TYPE_GRAVITY_HINT; - - case PANGO_ATTR_UNDERLINE: - case PANGO_ATTR_STRIKETHROUGH: - return G_TYPE_BOOLEAN; - - case PANGO_ATTR_SIZE: - case PANGO_ATTR_ABSOLUTE_SIZE: - return G_TYPE_INT; - - case PANGO_ATTR_SCALE: - return G_TYPE_DOUBLE; - - /* PangoAttrColor */ - case PANGO_ATTR_FOREGROUND: - case PANGO_ATTR_BACKGROUND: - case PANGO_ATTR_UNDERLINE_COLOR: - case PANGO_ATTR_STRIKETHROUGH_COLOR: - /* boxed colours */ - return GDK_TYPE_COLOR; - - /* PangoAttrShape */ - case PANGO_ATTR_SHAPE: - /* Unsupported for now */ - break; - - case PANGO_ATTR_INVALID: - case PANGO_ATTR_LETTER_SPACING: - case PANGO_ATTR_RISE: - case PANGO_ATTR_FALLBACK: - case PANGO_ATTR_FONT_DESC: - default: - break; - } - - - return gtype; + GType gtype = 0; + + switch (type) + { + case PANGO_ATTR_LANGUAGE: + case PANGO_ATTR_FAMILY: + return G_TYPE_STRING; + + case PANGO_ATTR_STYLE: + return PANGO_TYPE_STYLE; + case PANGO_ATTR_WEIGHT: + return PANGO_TYPE_WEIGHT; + case PANGO_ATTR_VARIANT: + return PANGO_TYPE_VARIANT; + case PANGO_ATTR_STRETCH: + return PANGO_TYPE_STRETCH; + case PANGO_ATTR_GRAVITY: + return PANGO_TYPE_GRAVITY; + case PANGO_ATTR_GRAVITY_HINT: + return PANGO_TYPE_GRAVITY_HINT; + + case PANGO_ATTR_UNDERLINE: + case PANGO_ATTR_STRIKETHROUGH: + return G_TYPE_BOOLEAN; + + case PANGO_ATTR_SIZE: + case PANGO_ATTR_ABSOLUTE_SIZE: + return G_TYPE_INT; + + case PANGO_ATTR_SCALE: + return G_TYPE_DOUBLE; + + /* PangoAttrColor */ + case PANGO_ATTR_FOREGROUND: + case PANGO_ATTR_BACKGROUND: + case PANGO_ATTR_UNDERLINE_COLOR: + case PANGO_ATTR_STRIKETHROUGH_COLOR: + /* boxed colours */ + return GDK_TYPE_COLOR; + + /* PangoAttrShape */ + case PANGO_ATTR_SHAPE: + /* Unsupported for now */ + break; + + case PANGO_ATTR_INVALID: + case PANGO_ATTR_LETTER_SPACING: + case PANGO_ATTR_RISE: + case PANGO_ATTR_FALLBACK: + case PANGO_ATTR_FONT_DESC: + default: + break; + } + + + return gtype; } gchar * -glade_gtk_string_from_attr (GladeAttribute *gattr) +glade_gtk_string_from_attr (GladeAttribute * gattr) { - gchar *ret = NULL; - gint ival; - gdouble fval; - GdkColor *color; - - switch (gattr->type) - { - case PANGO_ATTR_LANGUAGE: - case PANGO_ATTR_FAMILY: - ret = g_value_dup_string (&(gattr->value)); - break; - - case PANGO_ATTR_STYLE: - case PANGO_ATTR_WEIGHT: - case PANGO_ATTR_VARIANT: - case PANGO_ATTR_STRETCH: - case PANGO_ATTR_GRAVITY: - case PANGO_ATTR_GRAVITY_HINT: - - /* Enums ... */ - ival = g_value_get_enum (&(gattr->value)); - ret = glade_utils_enum_string_from_value (G_VALUE_TYPE (&(gattr->value)), ival); - break; - - - case PANGO_ATTR_UNDERLINE: - case PANGO_ATTR_STRIKETHROUGH: - /* Booleans */ - if (g_value_get_boolean (&(gattr->value))) - ret = g_strdup_printf ("True"); - else - ret = g_strdup_printf ("False"); - break; - - /* PangoAttrSize */ - case PANGO_ATTR_SIZE: - case PANGO_ATTR_ABSOLUTE_SIZE: - /* ints */ - ival = g_value_get_int (&(gattr->value)); - ret = g_strdup_printf ("%d", ival); - break; - - /* PangoAttrFloat */ - case PANGO_ATTR_SCALE: - /* doubles */ - fval = g_value_get_double (&(gattr->value)); - ret = g_strdup_printf ("%f", fval); - break; - - /* PangoAttrColor */ - case PANGO_ATTR_FOREGROUND: - case PANGO_ATTR_BACKGROUND: - case PANGO_ATTR_UNDERLINE_COLOR: - case PANGO_ATTR_STRIKETHROUGH_COLOR: - /* boxed colours */ - color = g_value_get_boxed (&(gattr->value)); - ret = gdk_color_to_string (color); - break; - - /* PangoAttrShape */ - case PANGO_ATTR_SHAPE: - /* Unsupported for now */ - break; - - case PANGO_ATTR_INVALID: - case PANGO_ATTR_LETTER_SPACING: - case PANGO_ATTR_RISE: - case PANGO_ATTR_FALLBACK: - case PANGO_ATTR_FONT_DESC: - default: - break; - } - - return ret; + gchar *ret = NULL; + gint ival; + gdouble fval; + GdkColor *color; + + switch (gattr->type) + { + case PANGO_ATTR_LANGUAGE: + case PANGO_ATTR_FAMILY: + ret = g_value_dup_string (&(gattr->value)); + break; + + case PANGO_ATTR_STYLE: + case PANGO_ATTR_WEIGHT: + case PANGO_ATTR_VARIANT: + case PANGO_ATTR_STRETCH: + case PANGO_ATTR_GRAVITY: + case PANGO_ATTR_GRAVITY_HINT: + + /* Enums ... */ + ival = g_value_get_enum (&(gattr->value)); + ret = + glade_utils_enum_string_from_value (G_VALUE_TYPE (&(gattr->value)), + ival); + break; + + + case PANGO_ATTR_UNDERLINE: + case PANGO_ATTR_STRIKETHROUGH: + /* Booleans */ + if (g_value_get_boolean (&(gattr->value))) + ret = g_strdup_printf ("True"); + else + ret = g_strdup_printf ("False"); + break; + + /* PangoAttrSize */ + case PANGO_ATTR_SIZE: + case PANGO_ATTR_ABSOLUTE_SIZE: + /* ints */ + ival = g_value_get_int (&(gattr->value)); + ret = g_strdup_printf ("%d", ival); + break; + + /* PangoAttrFloat */ + case PANGO_ATTR_SCALE: + /* doubles */ + fval = g_value_get_double (&(gattr->value)); + ret = g_strdup_printf ("%f", fval); + break; + + /* PangoAttrColor */ + case PANGO_ATTR_FOREGROUND: + case PANGO_ATTR_BACKGROUND: + case PANGO_ATTR_UNDERLINE_COLOR: + case PANGO_ATTR_STRIKETHROUGH_COLOR: + /* boxed colours */ + color = g_value_get_boxed (&(gattr->value)); + ret = gdk_color_to_string (color); + break; + + /* PangoAttrShape */ + case PANGO_ATTR_SHAPE: + /* Unsupported for now */ + break; + + case PANGO_ATTR_INVALID: + case PANGO_ATTR_LETTER_SPACING: + case PANGO_ATTR_RISE: + case PANGO_ATTR_FALLBACK: + case PANGO_ATTR_FONT_DESC: + default: + break; + } + + return ret; } static gint -enum_value_from_string (PangoAttrType type, const gchar *strval) +enum_value_from_string (PangoAttrType type, const gchar * strval) { - GEnumClass *enum_class; - GEnumValue *enum_value; - gint value = 0; - - enum_class = g_type_class_ref (type_from_attr_type (type)); - if ((enum_value = g_enum_get_value_by_nick (enum_class, strval)) != NULL) - value = enum_value->value; - else - g_critical ("Couldnt find enum value for %s, type %s", - strval, g_type_name (type_from_attr_type (type))); - - g_type_class_unref (enum_class); - - return value; + GEnumClass *enum_class; + GEnumValue *enum_value; + gint value = 0; + + enum_class = g_type_class_ref (type_from_attr_type (type)); + if ((enum_value = g_enum_get_value_by_nick (enum_class, strval)) != NULL) + value = enum_value->value; + else + g_critical ("Couldnt find enum value for %s, type %s", + strval, g_type_name (type_from_attr_type (type))); + + g_type_class_unref (enum_class); + + return value; } GladeAttribute * -glade_gtk_attribute_from_string (PangoAttrType type, - const gchar *strval) +glade_gtk_attribute_from_string (PangoAttrType type, const gchar * strval) { - GladeAttribute *gattr; - GdkColor color; - - gattr = g_new0 (GladeAttribute, 1); - gattr->type = type; - gattr->start = 0; - gattr->end = G_MAXUINT; - - switch (type) - { - case PANGO_ATTR_LANGUAGE: - case PANGO_ATTR_FAMILY: - case PANGO_ATTR_FONT_DESC: - g_value_init (&(gattr->value), G_TYPE_STRING); - g_value_set_string (&(gattr->value), strval); - break; - - case PANGO_ATTR_STYLE: - case PANGO_ATTR_WEIGHT: - case PANGO_ATTR_VARIANT: - case PANGO_ATTR_STRETCH: - case PANGO_ATTR_GRAVITY: - case PANGO_ATTR_GRAVITY_HINT: - - /* Enums ... */ - g_value_init (&(gattr->value), type_from_attr_type (type)); - g_value_set_enum (&(gattr->value), enum_value_from_string (type, strval)); - break; - - - case PANGO_ATTR_UNDERLINE: - case PANGO_ATTR_STRIKETHROUGH: - /* Booleans */ - g_value_init (&(gattr->value), G_TYPE_BOOLEAN); - g_value_set_boolean (&(gattr->value), TRUE); - break; - - /* PangoAttrSize */ - case PANGO_ATTR_SIZE: - case PANGO_ATTR_ABSOLUTE_SIZE: - /* ints */ - g_value_init (&(gattr->value), G_TYPE_INT); - g_value_set_int (&(gattr->value), strtol (strval, NULL, 10)); - break; - - /* PangoAttrFloat */ - case PANGO_ATTR_SCALE: - /* doubles */ - g_value_init (&(gattr->value), G_TYPE_DOUBLE); - g_value_set_double (&(gattr->value), strtod (strval, NULL)); - break; - - /* PangoAttrColor */ - case PANGO_ATTR_FOREGROUND: - case PANGO_ATTR_BACKGROUND: - case PANGO_ATTR_UNDERLINE_COLOR: - case PANGO_ATTR_STRIKETHROUGH_COLOR: - /* boxed colours */ - if (gdk_color_parse (strval, &color)) - { - g_value_init (&(gattr->value), GDK_TYPE_COLOR); - g_value_set_boxed (&(gattr->value), &color); - } - else - g_critical ("Unable to parse color attribute '%s'", strval); - - break; - - /* PangoAttrShape */ - case PANGO_ATTR_SHAPE: - /* Unsupported for now */ - break; - - case PANGO_ATTR_INVALID: - case PANGO_ATTR_LETTER_SPACING: - case PANGO_ATTR_RISE: - case PANGO_ATTR_FALLBACK: - default: - break; - } - - return gattr; + GladeAttribute *gattr; + GdkColor color; + + gattr = g_new0 (GladeAttribute, 1); + gattr->type = type; + gattr->start = 0; + gattr->end = G_MAXUINT; + + switch (type) + { + case PANGO_ATTR_LANGUAGE: + case PANGO_ATTR_FAMILY: + case PANGO_ATTR_FONT_DESC: + g_value_init (&(gattr->value), G_TYPE_STRING); + g_value_set_string (&(gattr->value), strval); + break; + + case PANGO_ATTR_STYLE: + case PANGO_ATTR_WEIGHT: + case PANGO_ATTR_VARIANT: + case PANGO_ATTR_STRETCH: + case PANGO_ATTR_GRAVITY: + case PANGO_ATTR_GRAVITY_HINT: + + /* Enums ... */ + g_value_init (&(gattr->value), type_from_attr_type (type)); + g_value_set_enum (&(gattr->value), + enum_value_from_string (type, strval)); + break; + + + case PANGO_ATTR_UNDERLINE: + case PANGO_ATTR_STRIKETHROUGH: + /* Booleans */ + g_value_init (&(gattr->value), G_TYPE_BOOLEAN); + g_value_set_boolean (&(gattr->value), TRUE); + break; + + /* PangoAttrSize */ + case PANGO_ATTR_SIZE: + case PANGO_ATTR_ABSOLUTE_SIZE: + /* ints */ + g_value_init (&(gattr->value), G_TYPE_INT); + g_value_set_int (&(gattr->value), strtol (strval, NULL, 10)); + break; + + /* PangoAttrFloat */ + case PANGO_ATTR_SCALE: + /* doubles */ + g_value_init (&(gattr->value), G_TYPE_DOUBLE); + g_value_set_double (&(gattr->value), strtod (strval, NULL)); + break; + + /* PangoAttrColor */ + case PANGO_ATTR_FOREGROUND: + case PANGO_ATTR_BACKGROUND: + case PANGO_ATTR_UNDERLINE_COLOR: + case PANGO_ATTR_STRIKETHROUGH_COLOR: + /* boxed colours */ + if (gdk_color_parse (strval, &color)) + { + g_value_init (&(gattr->value), GDK_TYPE_COLOR); + g_value_set_boxed (&(gattr->value), &color); + } + else + g_critical ("Unable to parse color attribute '%s'", strval); + + break; + + /* PangoAttrShape */ + case PANGO_ATTR_SHAPE: + /* Unsupported for now */ + break; + + case PANGO_ATTR_INVALID: + case PANGO_ATTR_LETTER_SPACING: + case PANGO_ATTR_RISE: + case PANGO_ATTR_FALLBACK: + default: + break; + } + + return gattr; } static void -sync_object (GladeEPropAttrs *eprop_attrs, - gboolean use_command) +sync_object (GladeEPropAttrs * eprop_attrs, gboolean use_command) { - GList *attributes = NULL; - GladeAttribute *gattr; - GtkTreeIter iter; - PangoAttrType type; - AttrEditType edit_type; - gchar *strval = NULL; - gboolean valid; - - valid = gtk_tree_model_iter_children (eprop_attrs->model, &iter, NULL); - - while (valid) - { - - if (!is_empty_row (eprop_attrs->model, &iter)) - { - gtk_tree_model_get (eprop_attrs->model, &iter, - COLUMN_TYPE, &type, - COLUMN_EDIT_TYPE, &edit_type, - COLUMN_TEXT, &strval, - -1); - - gattr = glade_gtk_attribute_from_string (type, (edit_type == EDIT_TOGGLE) ? "" : strval); - strval = (g_free (strval), NULL); - - attributes = g_list_prepend (attributes, gattr); - - } - valid = gtk_tree_model_iter_next (eprop_attrs->model, &iter); - } - - if (use_command) - { - GValue value = { 0, }; - - g_value_init (&value, GLADE_TYPE_ATTR_GLIST); - g_value_take_boxed (&value, g_list_reverse (attributes)); - glade_editor_property_commit (GLADE_EDITOR_PROPERTY (eprop_attrs), &value); - g_value_unset (&value); - } - else - { - glade_property_set (GLADE_EDITOR_PROPERTY (eprop_attrs)->property, - g_list_reverse (attributes)); - glade_attr_list_free (attributes); - } + GList *attributes = NULL; + GladeAttribute *gattr; + GtkTreeIter iter; + PangoAttrType type; + AttrEditType edit_type; + gchar *strval = NULL; + gboolean valid; + + valid = gtk_tree_model_iter_children (eprop_attrs->model, &iter, NULL); + + while (valid) + { + + if (!is_empty_row (eprop_attrs->model, &iter)) + { + gtk_tree_model_get (eprop_attrs->model, &iter, + COLUMN_TYPE, &type, + COLUMN_EDIT_TYPE, &edit_type, + COLUMN_TEXT, &strval, -1); + + gattr = + glade_gtk_attribute_from_string (type, + (edit_type == + EDIT_TOGGLE) ? "" : strval); + strval = (g_free (strval), NULL); + + attributes = g_list_prepend (attributes, gattr); + + } + valid = gtk_tree_model_iter_next (eprop_attrs->model, &iter); + } + + if (use_command) + { + GValue value = { 0, }; + + g_value_init (&value, GLADE_TYPE_ATTR_GLIST); + g_value_take_boxed (&value, g_list_reverse (attributes)); + glade_editor_property_commit (GLADE_EDITOR_PROPERTY (eprop_attrs), + &value); + g_value_unset (&value); + } + else + { + glade_property_set (GLADE_EDITOR_PROPERTY (eprop_attrs)->property, + g_list_reverse (attributes)); + glade_attr_list_free (attributes); + } } static GtkTreeIter * -get_row_by_type (GtkTreeModel *model, - PangoAttrType type) +get_row_by_type (GtkTreeModel * model, PangoAttrType type) { - GtkTreeIter iter, *ret_iter = NULL; - gboolean valid; - PangoAttrType iter_type; - - valid = gtk_tree_model_iter_children (model, &iter, NULL); - - while (valid) - { - gtk_tree_model_get (model, &iter, - COLUMN_TYPE, &iter_type, - -1); - - if (iter_type == type) - { - ret_iter = gtk_tree_iter_copy (&iter); - break; - } - valid = gtk_tree_model_iter_next (model, &iter); - } - return ret_iter; + GtkTreeIter iter, *ret_iter = NULL; + gboolean valid; + PangoAttrType iter_type; + + valid = gtk_tree_model_iter_children (model, &iter, NULL); + + while (valid) + { + gtk_tree_model_get (model, &iter, COLUMN_TYPE, &iter_type, -1); + + if (iter_type == type) + { + ret_iter = gtk_tree_iter_copy (&iter); + break; + } + valid = gtk_tree_model_iter_next (model, &iter); + } + return ret_iter; } static void -value_icon_activate (GtkCellRendererToggle *cell_renderer, - gchar *path, - GladeEPropAttrs *eprop_attrs) +value_icon_activate (GtkCellRendererToggle * cell_renderer, + gchar * path, GladeEPropAttrs * eprop_attrs) { - GtkWidget *dialog; - GtkWidget *colorsel; - GtkTreeIter iter; - PangoAttrType type; - AttrEditType edit_type; - GdkColor color; - gchar *text = NULL, *new_text; + GtkWidget *dialog; + GtkWidget *colorsel; + GtkTreeIter iter; + PangoAttrType type; + AttrEditType edit_type; + GdkColor color; + gchar *text = NULL, *new_text; - /* Find type etc */ - if (!gtk_tree_model_get_iter_from_string (eprop_attrs->model, &iter, path)) - return; + /* Find type etc */ + if (!gtk_tree_model_get_iter_from_string (eprop_attrs->model, &iter, path)) + return; - gtk_tree_model_get (eprop_attrs->model, &iter, - COLUMN_TEXT, &text, - COLUMN_TYPE, &type, - COLUMN_EDIT_TYPE, &edit_type, - -1); + gtk_tree_model_get (eprop_attrs->model, &iter, + COLUMN_TEXT, &text, + COLUMN_TYPE, &type, COLUMN_EDIT_TYPE, &edit_type, -1); - /* Launch dialog etc. */ - switch (edit_type) - { - case EDIT_COLOR: - dialog = gtk_color_selection_dialog_new (_("Select a color")); + /* Launch dialog etc. */ + switch (edit_type) + { + case EDIT_COLOR: + dialog = gtk_color_selection_dialog_new (_("Select a color")); - colorsel = gtk_color_selection_dialog_get_color_selection (GTK_COLOR_SELECTION_DIALOG (dialog)); + colorsel = + gtk_color_selection_dialog_get_color_selection + (GTK_COLOR_SELECTION_DIALOG (dialog)); - /* Get response etc... */ - if (text && gdk_color_parse (text, &color)) - gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorsel), &color); + /* Get response etc... */ + if (text && gdk_color_parse (text, &color)) + gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (colorsel), + &color); - gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_color_selection_get_current_color (GTK_COLOR_SELECTION (colorsel), &color); + gtk_color_selection_get_current_color (GTK_COLOR_SELECTION (colorsel), + &color); - new_text = gdk_color_to_string (&color); + new_text = gdk_color_to_string (&color); - gtk_list_store_set (GTK_LIST_STORE (eprop_attrs->model), &iter, - COLUMN_TEXT, new_text, - COLUMN_NAME_WEIGHT, PANGO_WEIGHT_BOLD, - COLUMN_TEXT_STYLE, PANGO_STYLE_NORMAL, - COLUMN_TEXT_FG, "Black", - -1); - g_free (new_text); + gtk_list_store_set (GTK_LIST_STORE (eprop_attrs->model), &iter, + COLUMN_TEXT, new_text, + COLUMN_NAME_WEIGHT, PANGO_WEIGHT_BOLD, + COLUMN_TEXT_STYLE, PANGO_STYLE_NORMAL, + COLUMN_TEXT_FG, "Black", -1); + g_free (new_text); - gtk_widget_destroy (dialog); - break; - default: - break; - } + gtk_widget_destroy (dialog); + break; + default: + break; + } - sync_object (eprop_attrs, FALSE); + sync_object (eprop_attrs, FALSE); - g_free (text); + g_free (text); } static void -value_toggled (GtkCellRendererToggle *cell_renderer, - gchar *path, - GladeEPropAttrs *eprop_attrs) +value_toggled (GtkCellRendererToggle * cell_renderer, + gchar * path, GladeEPropAttrs * eprop_attrs) { - gboolean active; - GtkTreeIter iter; - PangoAttrType type; + gboolean active; + GtkTreeIter iter; + PangoAttrType type; - if (!gtk_tree_model_get_iter_from_string (eprop_attrs->model, &iter, path)) - return; + if (!gtk_tree_model_get_iter_from_string (eprop_attrs->model, &iter, path)) + return; - gtk_tree_model_get (eprop_attrs->model, &iter, - COLUMN_TOGGLE_DOWN, &active, - COLUMN_TYPE, &type, - -1); + gtk_tree_model_get (eprop_attrs->model, &iter, + COLUMN_TOGGLE_DOWN, &active, COLUMN_TYPE, &type, -1); - gtk_list_store_set (GTK_LIST_STORE (eprop_attrs->model), &iter, - COLUMN_NAME_WEIGHT, PANGO_WEIGHT_BOLD, - COLUMN_TOGGLE_DOWN, !active, - -1); + gtk_list_store_set (GTK_LIST_STORE (eprop_attrs->model), &iter, + COLUMN_NAME_WEIGHT, PANGO_WEIGHT_BOLD, + COLUMN_TOGGLE_DOWN, !active, -1); - sync_object (eprop_attrs, FALSE); + sync_object (eprop_attrs, FALSE); } static void -value_combo_spin_edited (GtkCellRendererText *cell, - const gchar *path, - const gchar *new_text, - GladeEPropAttrs *eprop_attrs) +value_combo_spin_edited (GtkCellRendererText * cell, + const gchar * path, + const gchar * new_text, GladeEPropAttrs * eprop_attrs) { - GtkTreeIter iter; - PangoAttrType type; - - if (!gtk_tree_model_get_iter_from_string (eprop_attrs->model, &iter, path)) - return; - - gtk_tree_model_get (eprop_attrs->model, &iter, - COLUMN_TYPE, &type, - -1); - - /* Reset the column */ - if (new_text && strcmp (new_text, _("None")) == 0) - { - gtk_list_store_set (GTK_LIST_STORE (eprop_attrs->model), &iter, - COLUMN_TEXT, _("<Enter Value>"), - COLUMN_NAME_WEIGHT, PANGO_WEIGHT_NORMAL, - COLUMN_TEXT_STYLE, PANGO_STYLE_ITALIC, - COLUMN_TEXT_FG, "Grey", - -1); - } - else - gtk_list_store_set (GTK_LIST_STORE (eprop_attrs->model), &iter, - COLUMN_TEXT, new_text, - COLUMN_NAME_WEIGHT, PANGO_WEIGHT_BOLD, - COLUMN_TEXT_STYLE, PANGO_STYLE_NORMAL, - COLUMN_TEXT_FG, "Black", - -1); - - sync_object (eprop_attrs, FALSE); + GtkTreeIter iter; + PangoAttrType type; + + if (!gtk_tree_model_get_iter_from_string (eprop_attrs->model, &iter, path)) + return; + + gtk_tree_model_get (eprop_attrs->model, &iter, COLUMN_TYPE, &type, -1); + + /* Reset the column */ + if (new_text && strcmp (new_text, _("None")) == 0) + { + gtk_list_store_set (GTK_LIST_STORE (eprop_attrs->model), &iter, + COLUMN_TEXT, _("<Enter Value>"), + COLUMN_NAME_WEIGHT, PANGO_WEIGHT_NORMAL, + COLUMN_TEXT_STYLE, PANGO_STYLE_ITALIC, + COLUMN_TEXT_FG, "Grey", -1); + } + else + gtk_list_store_set (GTK_LIST_STORE (eprop_attrs->model), &iter, + COLUMN_TEXT, new_text, + COLUMN_NAME_WEIGHT, PANGO_WEIGHT_BOLD, + COLUMN_TEXT_STYLE, PANGO_STYLE_NORMAL, + COLUMN_TEXT_FG, "Black", -1); + + sync_object (eprop_attrs, FALSE); } static GtkWidget * -glade_eprop_attrs_view (GladeEditorProperty *eprop) +glade_eprop_attrs_view (GladeEditorProperty * eprop) { - GladeEPropAttrs *eprop_attrs = GLADE_EPROP_ATTRS (eprop); - GtkWidget *view_widget; - GtkCellRenderer *renderer; - GtkTreeViewColumn *column; - GtkAdjustment *adjustment; - - eprop_attrs->model = (GtkTreeModel *)gtk_list_store_new - (NUM_COLUMNS, - /* Main Data */ - G_TYPE_STRING, // COLUMN_NAME - G_TYPE_INT, // COLUMN_NAME_WEIGHT - G_TYPE_INT, // COLUMN_TYPE - G_TYPE_INT, // COLUMN_EDIT_TYPE - G_TYPE_POINTER, // COLUMN_VALUE - G_TYPE_UINT, // COLUMN_START - G_TYPE_UINT, // COLUMN_END - /* Editor renderer related */ - G_TYPE_BOOLEAN, // COLUMN_TOGGLE_ACTIVE - G_TYPE_BOOLEAN, // COLUMN_TOGGLE_DOWN - G_TYPE_BOOLEAN, // COLUMN_BUTTON_ACTIVE - G_TYPE_STRING, // COLUMN_TEXT - G_TYPE_INT, // COLUMN_TEXT_STYLE - G_TYPE_STRING, // COLUMN_TEXT_FG - G_TYPE_BOOLEAN, // COLUMN_COMBO_ACTIVE - GTK_TYPE_LIST_STORE, // COLUMN_COMBO_MODEL - G_TYPE_BOOLEAN, // COLUMN_SPIN_ACTIVE - G_TYPE_UINT); // COLUMN_SPIN_DIGITS - - view_widget = gtk_tree_view_new_with_model (eprop_attrs->model); - gtk_tree_view_set_show_expanders (GTK_TREE_VIEW (view_widget), FALSE); - gtk_tree_view_set_enable_search (GTK_TREE_VIEW (view_widget), FALSE); - - /********************* attribute name column *********************/ - renderer = gtk_cell_renderer_text_new (); - g_object_set (G_OBJECT (renderer), "editable", FALSE, NULL); - column = gtk_tree_view_column_new_with_attributes - (_("Attribute"), renderer, - "text", COLUMN_NAME, - "weight", COLUMN_NAME_WEIGHT, - NULL); - - gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE); - gtk_tree_view_append_column (GTK_TREE_VIEW (view_widget), column); - - /********************* attribute value column *********************/ - column = gtk_tree_view_column_new (); - gtk_tree_view_column_set_title (column, _("Value")); - - /* Toggle renderer */ - renderer = gtk_cell_renderer_toggle_new (); - gtk_tree_view_column_pack_start (column, renderer, FALSE); - gtk_tree_view_column_set_attributes (column, renderer, - "activatable", COLUMN_TOGGLE_ACTIVE, - "visible", COLUMN_TOGGLE_ACTIVE, - "active", COLUMN_TOGGLE_DOWN, - NULL); - g_signal_connect (G_OBJECT (renderer), "toggled", - G_CALLBACK (value_toggled), eprop); - - - /* Text renderer */ - renderer = gtk_cell_renderer_text_new (); - g_object_set (G_OBJECT (renderer), "editable", FALSE, NULL); - gtk_tree_view_column_pack_start (column, renderer, FALSE); - gtk_tree_view_column_set_attributes (column, renderer, - "editable", COLUMN_BUTTON_ACTIVE, - "visible", COLUMN_BUTTON_ACTIVE, - "text", COLUMN_TEXT, - "style", COLUMN_TEXT_STYLE, - "foreground", COLUMN_TEXT_FG, - NULL); - - /* Icon renderer */ - renderer = glade_cell_renderer_icon_new (); - g_object_set (G_OBJECT (renderer), - "icon-name", GTK_STOCK_EDIT, - NULL); - gtk_tree_view_column_pack_start (column, renderer, FALSE); - gtk_tree_view_column_set_attributes (column, renderer, - "activatable", COLUMN_BUTTON_ACTIVE, - "visible", COLUMN_BUTTON_ACTIVE, - NULL); - - g_signal_connect (G_OBJECT (renderer), "activate", - G_CALLBACK (value_icon_activate), eprop); - - /* Combo renderer */ - renderer = gtk_cell_renderer_combo_new (); - g_object_set (G_OBJECT (renderer), "text-column", 0, "has-entry", FALSE, NULL); - gtk_tree_view_column_pack_start (column, renderer, TRUE); - gtk_tree_view_column_set_attributes (column, renderer, - "editable", COLUMN_COMBO_ACTIVE, - "visible", COLUMN_COMBO_ACTIVE, - "model", COLUMN_COMBO_MODEL, - "text", COLUMN_TEXT, - "style", COLUMN_TEXT_STYLE, - "foreground", COLUMN_TEXT_FG, - NULL); - g_signal_connect (G_OBJECT (renderer), "edited", - G_CALLBACK (value_combo_spin_edited), eprop); - - - /* Spin renderer */ - renderer = gtk_cell_renderer_spin_new (); - adjustment = (GtkAdjustment *)gtk_adjustment_new (0, -G_MAXDOUBLE, G_MAXDOUBLE, 100, 100, 100); - g_object_set (G_OBJECT (renderer), "adjustment", adjustment, NULL); - gtk_tree_view_column_pack_start (column, renderer, TRUE); - gtk_tree_view_column_set_attributes (column, renderer, - "visible", COLUMN_SPIN_ACTIVE, - "editable", COLUMN_SPIN_ACTIVE, - "text", COLUMN_TEXT, - "style", COLUMN_TEXT_STYLE, - "foreground", COLUMN_TEXT_FG, - "digits", COLUMN_SPIN_DIGITS, - NULL); - g_signal_connect (G_OBJECT (renderer), "edited", - G_CALLBACK (value_combo_spin_edited), eprop); - - gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE); - gtk_tree_view_append_column (GTK_TREE_VIEW (view_widget), column); - - return view_widget; + GladeEPropAttrs *eprop_attrs = GLADE_EPROP_ATTRS (eprop); + GtkWidget *view_widget; + GtkCellRenderer *renderer; + GtkTreeViewColumn *column; + GtkAdjustment *adjustment; + + eprop_attrs->model = (GtkTreeModel *) gtk_list_store_new (NUM_COLUMNS, + /* Main Data */ + G_TYPE_STRING, // COLUMN_NAME + G_TYPE_INT, // COLUMN_NAME_WEIGHT + G_TYPE_INT, // COLUMN_TYPE + G_TYPE_INT, // COLUMN_EDIT_TYPE + G_TYPE_POINTER, // COLUMN_VALUE + G_TYPE_UINT, // COLUMN_START + G_TYPE_UINT, // COLUMN_END + /* Editor renderer related */ + G_TYPE_BOOLEAN, // COLUMN_TOGGLE_ACTIVE + G_TYPE_BOOLEAN, // COLUMN_TOGGLE_DOWN + G_TYPE_BOOLEAN, // COLUMN_BUTTON_ACTIVE + G_TYPE_STRING, // COLUMN_TEXT + G_TYPE_INT, // COLUMN_TEXT_STYLE + G_TYPE_STRING, // COLUMN_TEXT_FG + G_TYPE_BOOLEAN, // COLUMN_COMBO_ACTIVE + GTK_TYPE_LIST_STORE, // COLUMN_COMBO_MODEL + G_TYPE_BOOLEAN, // COLUMN_SPIN_ACTIVE + G_TYPE_UINT); // COLUMN_SPIN_DIGITS + + view_widget = gtk_tree_view_new_with_model (eprop_attrs->model); + gtk_tree_view_set_show_expanders (GTK_TREE_VIEW (view_widget), FALSE); + gtk_tree_view_set_enable_search (GTK_TREE_VIEW (view_widget), FALSE); + + /********************* attribute name column *********************/ + renderer = gtk_cell_renderer_text_new (); + g_object_set (G_OBJECT (renderer), "editable", FALSE, NULL); + column = gtk_tree_view_column_new_with_attributes + (_("Attribute"), renderer, + "text", COLUMN_NAME, "weight", COLUMN_NAME_WEIGHT, NULL); + + gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE); + gtk_tree_view_append_column (GTK_TREE_VIEW (view_widget), column); + + /********************* attribute value column *********************/ + column = gtk_tree_view_column_new (); + gtk_tree_view_column_set_title (column, _("Value")); + + /* Toggle renderer */ + renderer = gtk_cell_renderer_toggle_new (); + gtk_tree_view_column_pack_start (column, renderer, FALSE); + gtk_tree_view_column_set_attributes (column, renderer, + "activatable", COLUMN_TOGGLE_ACTIVE, + "visible", COLUMN_TOGGLE_ACTIVE, + "active", COLUMN_TOGGLE_DOWN, NULL); + g_signal_connect (G_OBJECT (renderer), "toggled", + G_CALLBACK (value_toggled), eprop); + + + /* Text renderer */ + renderer = gtk_cell_renderer_text_new (); + g_object_set (G_OBJECT (renderer), "editable", FALSE, NULL); + gtk_tree_view_column_pack_start (column, renderer, FALSE); + gtk_tree_view_column_set_attributes (column, renderer, + "editable", COLUMN_BUTTON_ACTIVE, + "visible", COLUMN_BUTTON_ACTIVE, + "text", COLUMN_TEXT, + "style", COLUMN_TEXT_STYLE, + "foreground", COLUMN_TEXT_FG, NULL); + + /* Icon renderer */ + renderer = glade_cell_renderer_icon_new (); + g_object_set (G_OBJECT (renderer), "icon-name", GTK_STOCK_EDIT, NULL); + gtk_tree_view_column_pack_start (column, renderer, FALSE); + gtk_tree_view_column_set_attributes (column, renderer, + "activatable", COLUMN_BUTTON_ACTIVE, + "visible", COLUMN_BUTTON_ACTIVE, NULL); + + g_signal_connect (G_OBJECT (renderer), "activate", + G_CALLBACK (value_icon_activate), eprop); + + /* Combo renderer */ + renderer = gtk_cell_renderer_combo_new (); + g_object_set (G_OBJECT (renderer), "text-column", 0, "has-entry", FALSE, + NULL); + gtk_tree_view_column_pack_start (column, renderer, TRUE); + gtk_tree_view_column_set_attributes (column, renderer, + "editable", COLUMN_COMBO_ACTIVE, + "visible", COLUMN_COMBO_ACTIVE, + "model", COLUMN_COMBO_MODEL, + "text", COLUMN_TEXT, + "style", COLUMN_TEXT_STYLE, + "foreground", COLUMN_TEXT_FG, NULL); + g_signal_connect (G_OBJECT (renderer), "edited", + G_CALLBACK (value_combo_spin_edited), eprop); + + + /* Spin renderer */ + renderer = gtk_cell_renderer_spin_new (); + adjustment = + (GtkAdjustment *) gtk_adjustment_new (0, -G_MAXDOUBLE, G_MAXDOUBLE, 100, + 100, 100); + g_object_set (G_OBJECT (renderer), "adjustment", adjustment, NULL); + gtk_tree_view_column_pack_start (column, renderer, TRUE); + gtk_tree_view_column_set_attributes (column, renderer, + "visible", COLUMN_SPIN_ACTIVE, + "editable", COLUMN_SPIN_ACTIVE, + "text", COLUMN_TEXT, + "style", COLUMN_TEXT_STYLE, + "foreground", COLUMN_TEXT_FG, + "digits", COLUMN_SPIN_DIGITS, NULL); + g_signal_connect (G_OBJECT (renderer), "edited", + G_CALLBACK (value_combo_spin_edited), eprop); + + gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE); + gtk_tree_view_append_column (GTK_TREE_VIEW (view_widget), column); + + return view_widget; } static void -glade_eprop_attrs_populate_view (GladeEditorProperty *eprop, - GtkTreeView *view) +glade_eprop_attrs_populate_view (GladeEditorProperty * eprop, + GtkTreeView * view) { - GList *attributes, *list; - GtkListStore *model = (GtkListStore *)gtk_tree_view_get_model (view); - GtkTreeIter *iter; - GladeAttribute *gattr; - gchar *text; - - attributes = g_value_get_boxed (eprop->property->value); - - append_empty_row (model, PANGO_ATTR_LANGUAGE); - append_empty_row (model, PANGO_ATTR_STYLE); - append_empty_row (model, PANGO_ATTR_WEIGHT); - append_empty_row (model, PANGO_ATTR_VARIANT); - append_empty_row (model, PANGO_ATTR_STRETCH); - append_empty_row (model, PANGO_ATTR_UNDERLINE); - append_empty_row (model, PANGO_ATTR_STRIKETHROUGH); - append_empty_row (model, PANGO_ATTR_GRAVITY); - append_empty_row (model, PANGO_ATTR_GRAVITY_HINT); - append_empty_row (model, PANGO_ATTR_FAMILY); - append_empty_row (model, PANGO_ATTR_SIZE); - append_empty_row (model, PANGO_ATTR_ABSOLUTE_SIZE); - append_empty_row (model, PANGO_ATTR_FOREGROUND); - append_empty_row (model, PANGO_ATTR_BACKGROUND); - append_empty_row (model, PANGO_ATTR_UNDERLINE_COLOR); - append_empty_row (model, PANGO_ATTR_STRIKETHROUGH_COLOR); - append_empty_row (model, PANGO_ATTR_SHAPE); - append_empty_row (model, PANGO_ATTR_SCALE); - - /* XXX Populate here ... - */ - for (list = attributes; list; list = list->next) - { - gattr = list->data; - - if ((iter = get_row_by_type (GTK_TREE_MODEL (model), gattr->type))) - { - text = glade_gtk_string_from_attr (gattr); - - gtk_list_store_set (GTK_LIST_STORE (model), iter, - COLUMN_NAME_WEIGHT, PANGO_WEIGHT_BOLD, - COLUMN_TEXT, text, - COLUMN_TEXT_STYLE, PANGO_STYLE_NORMAL, - COLUMN_TEXT_FG, "Black", - -1); - - if (gattr->type == PANGO_ATTR_UNDERLINE || - gattr->type == PANGO_ATTR_STRIKETHROUGH) - gtk_list_store_set (GTK_LIST_STORE (model), iter, - COLUMN_TOGGLE_DOWN, g_value_get_boolean (&(gattr->value)), - -1); - - g_free (text); - gtk_tree_iter_free (iter); - } - - } + GList *attributes, *list; + GtkListStore *model = (GtkListStore *) gtk_tree_view_get_model (view); + GtkTreeIter *iter; + GladeAttribute *gattr; + gchar *text; + + attributes = g_value_get_boxed (eprop->property->value); + + append_empty_row (model, PANGO_ATTR_LANGUAGE); + append_empty_row (model, PANGO_ATTR_STYLE); + append_empty_row (model, PANGO_ATTR_WEIGHT); + append_empty_row (model, PANGO_ATTR_VARIANT); + append_empty_row (model, PANGO_ATTR_STRETCH); + append_empty_row (model, PANGO_ATTR_UNDERLINE); + append_empty_row (model, PANGO_ATTR_STRIKETHROUGH); + append_empty_row (model, PANGO_ATTR_GRAVITY); + append_empty_row (model, PANGO_ATTR_GRAVITY_HINT); + append_empty_row (model, PANGO_ATTR_FAMILY); + append_empty_row (model, PANGO_ATTR_SIZE); + append_empty_row (model, PANGO_ATTR_ABSOLUTE_SIZE); + append_empty_row (model, PANGO_ATTR_FOREGROUND); + append_empty_row (model, PANGO_ATTR_BACKGROUND); + append_empty_row (model, PANGO_ATTR_UNDERLINE_COLOR); + append_empty_row (model, PANGO_ATTR_STRIKETHROUGH_COLOR); + append_empty_row (model, PANGO_ATTR_SHAPE); + append_empty_row (model, PANGO_ATTR_SCALE); + + /* XXX Populate here ... + */ + for (list = attributes; list; list = list->next) + { + gattr = list->data; + + if ((iter = get_row_by_type (GTK_TREE_MODEL (model), gattr->type))) + { + text = glade_gtk_string_from_attr (gattr); + + gtk_list_store_set (GTK_LIST_STORE (model), iter, + COLUMN_NAME_WEIGHT, PANGO_WEIGHT_BOLD, + COLUMN_TEXT, text, + COLUMN_TEXT_STYLE, PANGO_STYLE_NORMAL, + COLUMN_TEXT_FG, "Black", -1); + + if (gattr->type == PANGO_ATTR_UNDERLINE || + gattr->type == PANGO_ATTR_STRIKETHROUGH) + gtk_list_store_set (GTK_LIST_STORE (model), iter, + COLUMN_TOGGLE_DOWN, + g_value_get_boolean (&(gattr->value)), -1); + + g_free (text); + gtk_tree_iter_free (iter); + } + + } } static void -glade_eprop_attrs_show_dialog (GtkWidget *dialog_button, - GladeEditorProperty *eprop) +glade_eprop_attrs_show_dialog (GtkWidget * dialog_button, + GladeEditorProperty * eprop) { - GladeEPropAttrs *eprop_attrs = GLADE_EPROP_ATTRS (eprop); - GtkWidget *dialog, *parent, *vbox, *sw, *tree_view; - GladeProject *project; - GList *old_attributes; - gint res; - - project = glade_widget_get_project (eprop->property->widget); - parent = gtk_widget_get_toplevel (GTK_WIDGET (eprop)); - - - /* Keep a copy for commit time... */ - old_attributes = g_value_dup_boxed (eprop->property->value); - - dialog = gtk_dialog_new_with_buttons (_("Setup Text Attributes"), - GTK_WINDOW (parent), - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_STOCK_CLEAR, GLADE_RESPONSE_CLEAR, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OK, GTK_RESPONSE_OK, - NULL); - - vbox = gtk_vbox_new (FALSE, 6); - gtk_widget_show (vbox); - - gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); - - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), - vbox, TRUE, TRUE, 0); - - sw = gtk_scrolled_window_new (NULL, NULL); - gtk_widget_show (sw); - gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0); - gtk_widget_set_size_request (sw, 400, 200); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); - - tree_view = glade_eprop_attrs_view (eprop); - glade_eprop_attrs_populate_view (eprop, GTK_TREE_VIEW (tree_view)); - - gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view)); - - gtk_widget_show (tree_view); - gtk_container_add (GTK_CONTAINER (sw), tree_view); - - /* Run the dialog */ - res = gtk_dialog_run (GTK_DIALOG (dialog)); - if (res == GTK_RESPONSE_OK) - { - /* Update from old attributes so that there a property change - * sitting on the undo stack. - */ - glade_property_set (eprop->property, old_attributes); - sync_object (eprop_attrs, TRUE); - } - else if (res == GLADE_RESPONSE_CLEAR) - { - GValue value = { 0, }; - g_value_init (&value, GLADE_TYPE_ATTR_GLIST); - g_value_set_boxed (&value, NULL); - glade_editor_property_commit (eprop, &value); - g_value_unset (&value); - } - - /* Clean up ... - */ - gtk_widget_destroy (dialog); - - g_object_unref (G_OBJECT (eprop_attrs->model)); - eprop_attrs->model = NULL; - - glade_attr_list_free (old_attributes); + GladeEPropAttrs *eprop_attrs = GLADE_EPROP_ATTRS (eprop); + GtkWidget *dialog, *parent, *vbox, *sw, *tree_view; + GladeProject *project; + GList *old_attributes; + gint res; + + project = glade_widget_get_project (eprop->property->widget); + parent = gtk_widget_get_toplevel (GTK_WIDGET (eprop)); + + + /* Keep a copy for commit time... */ + old_attributes = g_value_dup_boxed (eprop->property->value); + + dialog = gtk_dialog_new_with_buttons (_("Setup Text Attributes"), + GTK_WINDOW (parent), + GTK_DIALOG_MODAL | + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_CLEAR, GLADE_RESPONSE_CLEAR, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); + + vbox = gtk_vbox_new (FALSE, 6); + gtk_widget_show (vbox); + + gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); + + gtk_box_pack_start (GTK_BOX + (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), vbox, + TRUE, TRUE, 0); + + sw = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (sw); + gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0); + gtk_widget_set_size_request (sw, 400, 200); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); + + tree_view = glade_eprop_attrs_view (eprop); + glade_eprop_attrs_populate_view (eprop, GTK_TREE_VIEW (tree_view)); + + gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view)); + + gtk_widget_show (tree_view); + gtk_container_add (GTK_CONTAINER (sw), tree_view); + + /* Run the dialog */ + res = gtk_dialog_run (GTK_DIALOG (dialog)); + if (res == GTK_RESPONSE_OK) + { + /* Update from old attributes so that there a property change + * sitting on the undo stack. + */ + glade_property_set (eprop->property, old_attributes); + sync_object (eprop_attrs, TRUE); + } + else if (res == GLADE_RESPONSE_CLEAR) + { + GValue value = { 0, }; + g_value_init (&value, GLADE_TYPE_ATTR_GLIST); + g_value_set_boxed (&value, NULL); + glade_editor_property_commit (eprop, &value); + g_value_unset (&value); + } + + /* Clean up ... + */ + gtk_widget_destroy (dialog); + + g_object_unref (G_OBJECT (eprop_attrs->model)); + eprop_attrs->model = NULL; + + glade_attr_list_free (old_attributes); } static void -glade_eprop_attrs_finalize (GObject *object) +glade_eprop_attrs_finalize (GObject * object) { - /* Chain up */ - GObjectClass *parent_class = g_type_class_peek_parent (G_OBJECT_GET_CLASS (object)); + /* Chain up */ + GObjectClass *parent_class = + g_type_class_peek_parent (G_OBJECT_GET_CLASS (object)); - G_OBJECT_CLASS (parent_class)->finalize (object); + G_OBJECT_CLASS (parent_class)->finalize (object); } static void -glade_eprop_attrs_load (GladeEditorProperty *eprop, - GladeProperty *property) +glade_eprop_attrs_load (GladeEditorProperty * eprop, GladeProperty * property) { - GladeEditorPropertyClass *parent_class = - g_type_class_peek_parent (G_OBJECT_GET_CLASS (eprop)); + GladeEditorPropertyClass *parent_class = + g_type_class_peek_parent (G_OBJECT_GET_CLASS (eprop)); - /* No displayable attributes in eprop, just a button. */ - parent_class->load (eprop, property); + /* No displayable attributes in eprop, just a button. */ + parent_class->load (eprop, property); } static GtkWidget * -glade_eprop_attrs_create_input (GladeEditorProperty *eprop) +glade_eprop_attrs_create_input (GladeEditorProperty * eprop) { - GtkWidget *hbox; - GtkWidget *button; + GtkWidget *hbox; + GtkWidget *button; - hbox = gtk_hbox_new (FALSE, 0); + hbox = gtk_hbox_new (FALSE, 0); - button = gtk_button_new_from_stock (GTK_STOCK_EDIT); - gtk_widget_show (button); - gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); + button = gtk_button_new_from_stock (GTK_STOCK_EDIT); + gtk_widget_show (button); + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); - g_signal_connect (G_OBJECT (button), "clicked", - G_CALLBACK (glade_eprop_attrs_show_dialog), - eprop); + g_signal_connect (G_OBJECT (button), "clicked", + G_CALLBACK (glade_eprop_attrs_show_dialog), eprop); - return hbox; + return hbox; } |