|
Packit |
1e8aac |
/*
|
|
Packit |
1e8aac |
* glade-attributes.c - Editing support for pango attributes
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Copyright (C) 2008 Tristan Van Berkom
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* Author(s):
|
|
Packit |
1e8aac |
* Tristan Van Berkom <tvb@gnome.org>
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* This library is free software; you can redistribute it and/or modify it
|
|
Packit |
1e8aac |
* under the terms of the GNU Lesser General Public License as
|
|
Packit |
1e8aac |
* published by the Free Software Foundation; either version 2.1 of
|
|
Packit |
1e8aac |
* the License, or (at your option) any later version.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* This library is distributed in the hope that it will be useful, but
|
|
Packit |
1e8aac |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
1e8aac |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
1e8aac |
* Lesser General Public License for more details.
|
|
Packit |
1e8aac |
*
|
|
Packit |
1e8aac |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
1e8aac |
* License along with this program; if not, write to the Free Software
|
|
Packit |
1e8aac |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#include <config.h>
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#include <string.h>
|
|
Packit |
1e8aac |
#include <stdlib.h>
|
|
Packit |
1e8aac |
#include <gtk/gtk.h>
|
|
Packit |
1e8aac |
#include <gladeui/glade.h>
|
|
Packit |
1e8aac |
#include <glib/gi18n-lib.h>
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#include "glade-attributes.h"
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#define GLADE_RESPONSE_CLEAR 42
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static GList *
|
|
Packit |
1e8aac |
glade_attr_list_copy (GList *attrs)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GList *ret = NULL, *list;
|
|
Packit |
1e8aac |
GladeAttribute *attr, *dup_attr;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (list = attrs; list; list = list->next)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
attr = list->data;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
dup_attr = g_new0 (GladeAttribute, 1);
|
|
Packit |
1e8aac |
dup_attr->type = attr->type;
|
|
Packit |
1e8aac |
dup_attr->start = attr->start;
|
|
Packit |
1e8aac |
dup_attr->end = attr->end;
|
|
Packit |
1e8aac |
g_value_init (&(dup_attr->value), G_VALUE_TYPE (&(attr->value)));
|
|
Packit |
1e8aac |
g_value_copy (&(attr->value), &(dup_attr->value));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
ret = g_list_prepend (ret, dup_attr);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return g_list_reverse (ret);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
void
|
|
Packit |
1e8aac |
glade_attr_list_free (GList *attrs)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GList *list;
|
|
Packit |
1e8aac |
GladeAttribute *attr;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (list = attrs; list; list = list->next)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
attr = list->data;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_value_unset (&(attr->value));
|
|
Packit |
1e8aac |
g_free (attr);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
g_list_free (attrs);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GType
|
|
Packit |
1e8aac |
glade_attr_glist_get_type (void)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
static GType type_id = 0;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!type_id)
|
|
Packit |
1e8aac |
type_id = g_boxed_type_register_static
|
|
Packit |
1e8aac |
("GladeAttrGList",
|
|
Packit |
1e8aac |
(GBoxedCopyFunc) glade_attr_list_copy,
|
|
Packit |
1e8aac |
(GBoxedFreeFunc) glade_attr_list_free);
|
|
Packit |
1e8aac |
return type_id;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/**************************************************************
|
|
Packit |
1e8aac |
* GladeEditorProperty stuff here
|
|
Packit |
1e8aac |
**************************************************************/
|
|
Packit |
1e8aac |
typedef struct
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeEditorProperty parent_instance;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GtkTreeModel *model;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
} GladeEPropAttrs;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GLADE_MAKE_EPROP (GladeEPropAttrs, glade_eprop_attrs)
|
|
Packit |
1e8aac |
#define GLADE_EPROP_ATTRS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLADE_TYPE_EPROP_ATTRS, GladeEPropAttrs))
|
|
Packit |
1e8aac |
#define GLADE_EPROP_ATTRS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GLADE_TYPE_EPROP_ATTRS, GladeEPropAttrsClass))
|
|
Packit |
1e8aac |
#define GLADE_IS_EPROP_ATTRS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLADE_TYPE_EPROP_ATTRS))
|
|
Packit |
1e8aac |
#define GLADE_IS_EPROP_ATTRS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_EPROP_ATTRS))
|
|
Packit |
1e8aac |
#define GLADE_EPROP_ATTRS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GLADE_EPROP_ATTRS, GladeEPropAttrsClass))
|
|
Packit |
1e8aac |
enum
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Main Data */
|
|
Packit |
1e8aac |
COLUMN_NAME, /* The title string for PangoAttrType */
|
|
Packit |
1e8aac |
COLUMN_NAME_WEIGHT, /* For bold names */
|
|
Packit |
1e8aac |
COLUMN_TYPE, /* The PangoAttrType */
|
|
Packit |
1e8aac |
COLUMN_EDIT_TYPE, /* The AttrEditType (below) */
|
|
Packit |
1e8aac |
COLUMN_VALUE, /* The value */
|
|
Packit |
1e8aac |
COLUMN_START, /* attribute start value */
|
|
Packit |
1e8aac |
COLUMN_END, /* attribute end value */
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Editor renderer related */
|
|
Packit |
1e8aac |
COLUMN_TOGGLE_ACTIVE, /* whether the toggle renderer is being used */
|
|
Packit |
1e8aac |
COLUMN_TOGGLE_DOWN, /* whether the toggle should be displayed in "downstate" */
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
COLUMN_BUTTON_ACTIVE, /* whether the GladeCellRendererButton is to be used (to launch dialogs) */
|
|
Packit |
1e8aac |
COLUMN_TEXT, /* text attribute value for all text derived renderers */
|
|
Packit |
1e8aac |
COLUMN_TEXT_STYLE, /* whether to make italic */
|
|
Packit |
1e8aac |
COLUMN_TEXT_FG, /* forground colour of the text */
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
COLUMN_COMBO_ACTIVE, /* whether the combobox renderer is being used */
|
|
Packit |
1e8aac |
COLUMN_COMBO_MODEL, /* the model for the dropdown list */
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
COLUMN_SPIN_ACTIVE, /* whether the spin renderer is being used */
|
|
Packit |
1e8aac |
COLUMN_SPIN_DIGITS, /* How many decimal points to show (used to edit float values) */
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
NUM_COLUMNS
|
|
Packit |
1e8aac |
};
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
typedef enum
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
EDIT_TOGGLE = 0,
|
|
Packit |
1e8aac |
EDIT_COMBO,
|
|
Packit |
1e8aac |
EDIT_SPIN,
|
|
Packit |
1e8aac |
EDIT_COLOR,
|
|
Packit |
1e8aac |
EDIT_FONT,
|
|
Packit |
1e8aac |
EDIT_INVALID
|
|
Packit |
1e8aac |
} AttrEditType;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#define ACTIVATE_COLUMN_FROM_TYPE(type) \
|
|
Packit |
1e8aac |
((type) == EDIT_TOGGLE ? COLUMN_TOGGLE_ACTIVE : \
|
|
Packit |
1e8aac |
(type) == EDIT_SPIN ? COLUMN_SPIN_ACTIVE : \
|
|
Packit |
1e8aac |
(type) == EDIT_COMBO ? COLUMN_COMBO_ACTIVE: COLUMN_BUTTON_ACTIVE)
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static GtkListStore *
|
|
Packit |
1e8aac |
get_enum_model_for_combo (PangoAttrType type)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
static GtkListStore *style_store = NULL,
|
|
Packit |
1e8aac |
*weight_store = NULL, *variant_store = NULL,
|
|
Packit |
1e8aac |
*stretch_store = NULL, *gravity_store = NULL,
|
|
Packit |
1e8aac |
*gravity_hint_store = NULL, *default_store = NULL;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
switch (type)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
case PANGO_ATTR_STYLE:
|
|
Packit |
1e8aac |
if (!style_store)
|
|
Packit |
1e8aac |
style_store =
|
|
Packit |
1e8aac |
glade_utils_liststore_from_enum_type (PANGO_TYPE_STYLE, TRUE);
|
|
Packit |
1e8aac |
return style_store;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_WEIGHT:
|
|
Packit |
1e8aac |
if (!weight_store)
|
|
Packit |
1e8aac |
weight_store =
|
|
Packit |
1e8aac |
glade_utils_liststore_from_enum_type (PANGO_TYPE_WEIGHT, TRUE);
|
|
Packit |
1e8aac |
return weight_store;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_VARIANT:
|
|
Packit |
1e8aac |
if (!variant_store)
|
|
Packit |
1e8aac |
variant_store =
|
|
Packit |
1e8aac |
glade_utils_liststore_from_enum_type (PANGO_TYPE_VARIANT, TRUE);
|
|
Packit |
1e8aac |
return variant_store;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_STRETCH:
|
|
Packit |
1e8aac |
if (!stretch_store)
|
|
Packit |
1e8aac |
stretch_store =
|
|
Packit |
1e8aac |
glade_utils_liststore_from_enum_type (PANGO_TYPE_STRETCH, TRUE);
|
|
Packit |
1e8aac |
return stretch_store;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_GRAVITY:
|
|
Packit |
1e8aac |
if (!gravity_store)
|
|
Packit |
1e8aac |
gravity_store =
|
|
Packit |
1e8aac |
glade_utils_liststore_from_enum_type (PANGO_TYPE_GRAVITY, TRUE);
|
|
Packit |
1e8aac |
return gravity_store;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_GRAVITY_HINT:
|
|
Packit |
1e8aac |
if (!gravity_hint_store)
|
|
Packit |
1e8aac |
gravity_hint_store =
|
|
Packit |
1e8aac |
glade_utils_liststore_from_enum_type (PANGO_TYPE_GRAVITY_HINT,
|
|
Packit |
1e8aac |
TRUE);
|
|
Packit |
1e8aac |
return gravity_hint_store;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
default:
|
|
Packit |
1e8aac |
if (!default_store)
|
|
Packit |
1e8aac |
default_store = gtk_list_store_new (1, G_TYPE_STRING);
|
|
Packit |
1e8aac |
return default_store;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static gboolean
|
|
Packit |
1e8aac |
append_empty_row (GtkListStore *store, PangoAttrType type)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
const gchar *name = NULL;
|
|
Packit |
1e8aac |
guint spin_digits = 0;
|
|
Packit |
1e8aac |
GtkListStore *model = get_enum_model_for_combo (type);
|
|
Packit |
1e8aac |
GtkTreeIter iter;
|
|
Packit |
1e8aac |
AttrEditType edit_type = EDIT_INVALID;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
switch (type)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
/* PangoAttrLanguage */
|
|
Packit |
1e8aac |
case PANGO_ATTR_LANGUAGE:
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
/* PangoAttrInt */
|
|
Packit |
1e8aac |
case PANGO_ATTR_STYLE:
|
|
Packit |
1e8aac |
edit_type = EDIT_COMBO;
|
|
Packit |
1e8aac |
name = C_ ("textattr", "Style");
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PANGO_ATTR_WEIGHT:
|
|
Packit |
1e8aac |
edit_type = EDIT_COMBO;
|
|
Packit |
1e8aac |
name = C_ ("textattr", "Weight");
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PANGO_ATTR_VARIANT:
|
|
Packit |
1e8aac |
edit_type = EDIT_COMBO;
|
|
Packit |
1e8aac |
name = C_ ("textattr", "Variant");
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PANGO_ATTR_STRETCH:
|
|
Packit |
1e8aac |
edit_type = EDIT_COMBO;
|
|
Packit |
1e8aac |
name = C_ ("textattr", "Stretch");
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PANGO_ATTR_UNDERLINE:
|
|
Packit |
1e8aac |
edit_type = EDIT_TOGGLE;
|
|
Packit |
1e8aac |
name = C_ ("textattr", "Underline");
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PANGO_ATTR_STRIKETHROUGH:
|
|
Packit |
1e8aac |
edit_type = EDIT_TOGGLE;
|
|
Packit |
1e8aac |
name = C_ ("textattr", "Strikethrough");
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PANGO_ATTR_GRAVITY:
|
|
Packit |
1e8aac |
edit_type = EDIT_COMBO;
|
|
Packit |
1e8aac |
name = C_ ("textattr", "Gravity");
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PANGO_ATTR_GRAVITY_HINT:
|
|
Packit |
1e8aac |
edit_type = EDIT_COMBO;
|
|
Packit |
1e8aac |
name = C_ ("textattr", "Gravity Hint");
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* PangoAttrString */
|
|
Packit |
1e8aac |
case PANGO_ATTR_FAMILY:
|
|
Packit |
1e8aac |
/* Use a simple editable text renderer ? */
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* PangoAttrSize */
|
|
Packit |
1e8aac |
case PANGO_ATTR_SIZE:
|
|
Packit |
1e8aac |
edit_type = EDIT_SPIN;
|
|
Packit |
1e8aac |
name = C_ ("textattr", "Size");
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PANGO_ATTR_ABSOLUTE_SIZE:
|
|
Packit |
1e8aac |
edit_type = EDIT_SPIN;
|
|
Packit |
1e8aac |
name = C_ ("textattr", "Absolute Size");
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* PangoAttrColor */
|
|
Packit |
1e8aac |
/* Colours need editors... */
|
|
Packit |
1e8aac |
case PANGO_ATTR_FOREGROUND:
|
|
Packit |
1e8aac |
edit_type = EDIT_COLOR;
|
|
Packit |
1e8aac |
name = C_ ("textattr", "Foreground Color");
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PANGO_ATTR_BACKGROUND:
|
|
Packit |
1e8aac |
edit_type = EDIT_COLOR;
|
|
Packit |
1e8aac |
name = C_ ("textattr", "Background Color");
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PANGO_ATTR_UNDERLINE_COLOR:
|
|
Packit |
1e8aac |
edit_type = EDIT_COLOR;
|
|
Packit |
1e8aac |
name = C_ ("textattr", "Underline Color");
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case PANGO_ATTR_STRIKETHROUGH_COLOR:
|
|
Packit |
1e8aac |
edit_type = EDIT_COLOR;
|
|
Packit |
1e8aac |
name = C_ ("textattr", "Strikethrough Color");
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* PangoAttrShape */
|
|
Packit |
1e8aac |
case PANGO_ATTR_SHAPE:
|
|
Packit |
1e8aac |
/* Unsupported for now */
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
/* PangoAttrFloat */
|
|
Packit |
1e8aac |
case PANGO_ATTR_SCALE:
|
|
Packit |
1e8aac |
edit_type = EDIT_SPIN;
|
|
Packit |
1e8aac |
name = C_ ("textattr", "Scale");
|
|
Packit |
1e8aac |
spin_digits = 3;
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_FONT_DESC:
|
|
Packit |
1e8aac |
edit_type = EDIT_FONT;
|
|
Packit |
1e8aac |
name = C_ ("textattr", "Font Description");
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_INVALID:
|
|
Packit |
1e8aac |
case PANGO_ATTR_LETTER_SPACING:
|
|
Packit |
1e8aac |
case PANGO_ATTR_RISE:
|
|
Packit |
1e8aac |
case PANGO_ATTR_FALLBACK:
|
|
Packit |
1e8aac |
default:
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (name)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gtk_list_store_append (store, &iter);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_list_store_set (store, &iter,
|
|
Packit |
1e8aac |
COLUMN_TOGGLE_ACTIVE, FALSE,
|
|
Packit |
1e8aac |
COLUMN_SPIN_ACTIVE, FALSE,
|
|
Packit |
1e8aac |
COLUMN_COMBO_ACTIVE, FALSE,
|
|
Packit |
1e8aac |
COLUMN_BUTTON_ACTIVE, FALSE, -1);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_list_store_set (store, &iter,
|
|
Packit |
1e8aac |
COLUMN_NAME, name,
|
|
Packit |
1e8aac |
COLUMN_TYPE, type,
|
|
Packit |
1e8aac |
COLUMN_EDIT_TYPE, edit_type,
|
|
Packit |
1e8aac |
COLUMN_NAME_WEIGHT, PANGO_WEIGHT_NORMAL,
|
|
Packit |
1e8aac |
COLUMN_TEXT, _("<Enter Value>"),
|
|
Packit |
1e8aac |
COLUMN_TEXT_STYLE, PANGO_STYLE_ITALIC,
|
|
Packit |
1e8aac |
COLUMN_TEXT_FG, "Grey",
|
|
Packit |
1e8aac |
COLUMN_COMBO_MODEL, model,
|
|
Packit |
1e8aac |
COLUMN_SPIN_DIGITS, spin_digits,
|
|
Packit |
1e8aac |
ACTIVATE_COLUMN_FROM_TYPE (edit_type), TRUE, -1);
|
|
Packit |
1e8aac |
return TRUE;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
return FALSE;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static gboolean
|
|
Packit |
1e8aac |
is_empty_row (GtkTreeModel *model, GtkTreeIter *iter)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
PangoAttrType attr_type;
|
|
Packit |
1e8aac |
AttrEditType edit_type;
|
|
Packit |
1e8aac |
gboolean bval;
|
|
Packit |
1e8aac |
gchar *strval = NULL;
|
|
Packit |
1e8aac |
gboolean empty_row = FALSE;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* First get the basic values */
|
|
Packit |
1e8aac |
gtk_tree_model_get (model, iter,
|
|
Packit |
1e8aac |
COLUMN_TYPE, &attr_type,
|
|
Packit |
1e8aac |
COLUMN_EDIT_TYPE, &edit_type,
|
|
Packit |
1e8aac |
COLUMN_TOGGLE_DOWN, &bval, COLUMN_TEXT, &strval, -1);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Ignore all other types */
|
|
Packit |
1e8aac |
switch (edit_type)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
case EDIT_TOGGLE:
|
|
Packit |
1e8aac |
if (!bval)
|
|
Packit |
1e8aac |
empty_row = TRUE;
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case EDIT_COMBO:
|
|
Packit |
1e8aac |
if (!strval || !strcmp (strval, _("Unset")) ||
|
|
Packit |
1e8aac |
!strcmp (strval, _("<Enter Value>")))
|
|
Packit |
1e8aac |
empty_row = TRUE;
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case EDIT_SPIN:
|
|
Packit |
1e8aac |
/* XXX Interesting... can we get the defaults ? what can we do to let the user
|
|
Packit |
1e8aac |
* unset the value ??
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
if (!strval || !strcmp (strval, "0") ||
|
|
Packit |
1e8aac |
!strcmp (strval, _("<Enter Value>")))
|
|
Packit |
1e8aac |
empty_row = TRUE;
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case EDIT_COLOR:
|
|
Packit |
1e8aac |
case EDIT_FONT:
|
|
Packit |
1e8aac |
if (!strval || strval[0] == '\0' ||
|
|
Packit |
1e8aac |
!strcmp (strval, _("<Enter Value>")))
|
|
Packit |
1e8aac |
empty_row = TRUE;
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
case EDIT_INVALID:
|
|
Packit |
1e8aac |
default:
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
g_free (strval);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return empty_row;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static GType
|
|
Packit |
1e8aac |
type_from_attr_type (PangoAttrType type)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GType gtype = 0;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
switch (type)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
case PANGO_ATTR_LANGUAGE:
|
|
Packit |
1e8aac |
case PANGO_ATTR_FAMILY:
|
|
Packit |
1e8aac |
case PANGO_ATTR_FONT_DESC:
|
|
Packit |
1e8aac |
return G_TYPE_STRING;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_STYLE:
|
|
Packit |
1e8aac |
return PANGO_TYPE_STYLE;
|
|
Packit |
1e8aac |
case PANGO_ATTR_WEIGHT:
|
|
Packit |
1e8aac |
return PANGO_TYPE_WEIGHT;
|
|
Packit |
1e8aac |
case PANGO_ATTR_VARIANT:
|
|
Packit |
1e8aac |
return PANGO_TYPE_VARIANT;
|
|
Packit |
1e8aac |
case PANGO_ATTR_STRETCH:
|
|
Packit |
1e8aac |
return PANGO_TYPE_STRETCH;
|
|
Packit |
1e8aac |
case PANGO_ATTR_GRAVITY:
|
|
Packit |
1e8aac |
return PANGO_TYPE_GRAVITY;
|
|
Packit |
1e8aac |
case PANGO_ATTR_GRAVITY_HINT:
|
|
Packit |
1e8aac |
return PANGO_TYPE_GRAVITY_HINT;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_UNDERLINE:
|
|
Packit |
1e8aac |
case PANGO_ATTR_STRIKETHROUGH:
|
|
Packit |
1e8aac |
return G_TYPE_BOOLEAN;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_SIZE:
|
|
Packit |
1e8aac |
case PANGO_ATTR_ABSOLUTE_SIZE:
|
|
Packit |
1e8aac |
return G_TYPE_INT;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_SCALE:
|
|
Packit |
1e8aac |
return G_TYPE_DOUBLE;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* PangoAttrColor */
|
|
Packit |
1e8aac |
case PANGO_ATTR_FOREGROUND:
|
|
Packit |
1e8aac |
case PANGO_ATTR_BACKGROUND:
|
|
Packit |
1e8aac |
case PANGO_ATTR_UNDERLINE_COLOR:
|
|
Packit |
1e8aac |
case PANGO_ATTR_STRIKETHROUGH_COLOR:
|
|
Packit |
1e8aac |
/* boxed colours */
|
|
Packit |
1e8aac |
return GDK_TYPE_COLOR;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* PangoAttrShape */
|
|
Packit |
1e8aac |
case PANGO_ATTR_SHAPE:
|
|
Packit |
1e8aac |
/* Unsupported for now */
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_INVALID:
|
|
Packit |
1e8aac |
case PANGO_ATTR_LETTER_SPACING:
|
|
Packit |
1e8aac |
case PANGO_ATTR_RISE:
|
|
Packit |
1e8aac |
case PANGO_ATTR_FALLBACK:
|
|
Packit |
1e8aac |
default:
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return gtype;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gchar *
|
|
Packit |
1e8aac |
glade_gtk_string_from_attr (GladeAttribute *gattr)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gchar *ret = NULL;
|
|
Packit |
1e8aac |
gint ival;
|
|
Packit |
1e8aac |
gdouble fval;
|
|
Packit |
1e8aac |
GdkColor *color;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
switch (gattr->type)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
case PANGO_ATTR_LANGUAGE:
|
|
Packit |
1e8aac |
case PANGO_ATTR_FAMILY:
|
|
Packit |
1e8aac |
case PANGO_ATTR_FONT_DESC:
|
|
Packit |
1e8aac |
ret = g_value_dup_string (&(gattr->value));
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_STYLE:
|
|
Packit |
1e8aac |
case PANGO_ATTR_WEIGHT:
|
|
Packit |
1e8aac |
case PANGO_ATTR_VARIANT:
|
|
Packit |
1e8aac |
case PANGO_ATTR_STRETCH:
|
|
Packit |
1e8aac |
case PANGO_ATTR_GRAVITY:
|
|
Packit |
1e8aac |
case PANGO_ATTR_GRAVITY_HINT:
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Enums ... */
|
|
Packit |
1e8aac |
ival = g_value_get_enum (&(gattr->value));
|
|
Packit |
1e8aac |
ret =
|
|
Packit |
1e8aac |
glade_utils_enum_string_from_value (G_VALUE_TYPE (&(gattr->value)),
|
|
Packit |
1e8aac |
ival);
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_UNDERLINE:
|
|
Packit |
1e8aac |
case PANGO_ATTR_STRIKETHROUGH:
|
|
Packit |
1e8aac |
/* Booleans */
|
|
Packit |
1e8aac |
if (g_value_get_boolean (&(gattr->value)))
|
|
Packit |
1e8aac |
ret = g_strdup_printf ("True");
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
ret = g_strdup_printf ("False");
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* PangoAttrSize */
|
|
Packit |
1e8aac |
case PANGO_ATTR_SIZE:
|
|
Packit |
1e8aac |
case PANGO_ATTR_ABSOLUTE_SIZE:
|
|
Packit |
1e8aac |
/* ints */
|
|
Packit |
1e8aac |
ival = g_value_get_int (&(gattr->value));
|
|
Packit |
1e8aac |
ret = g_strdup_printf ("%d", ival);
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* PangoAttrFloat */
|
|
Packit |
1e8aac |
case PANGO_ATTR_SCALE: {
|
|
Packit |
1e8aac |
/* doubles */
|
|
Packit |
1e8aac |
gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
fval = g_value_get_double (&(gattr->value));
|
|
Packit |
1e8aac |
ret = g_strdup (g_ascii_dtostr (buf, sizeof (buf), fval));
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
/* PangoAttrColor */
|
|
Packit |
1e8aac |
case PANGO_ATTR_FOREGROUND:
|
|
Packit |
1e8aac |
case PANGO_ATTR_BACKGROUND:
|
|
Packit |
1e8aac |
case PANGO_ATTR_UNDERLINE_COLOR:
|
|
Packit |
1e8aac |
case PANGO_ATTR_STRIKETHROUGH_COLOR:
|
|
Packit |
1e8aac |
/* boxed colours */
|
|
Packit |
1e8aac |
color = g_value_get_boxed (&(gattr->value));
|
|
Packit |
1e8aac |
ret = gdk_color_to_string (color);
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* PangoAttrShape */
|
|
Packit |
1e8aac |
case PANGO_ATTR_SHAPE:
|
|
Packit |
1e8aac |
/* Unsupported for now */
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_INVALID:
|
|
Packit |
1e8aac |
case PANGO_ATTR_LETTER_SPACING:
|
|
Packit |
1e8aac |
case PANGO_ATTR_RISE:
|
|
Packit |
1e8aac |
case PANGO_ATTR_FALLBACK:
|
|
Packit |
1e8aac |
default:
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return ret;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
GladeAttribute *
|
|
Packit |
1e8aac |
glade_gtk_attribute_from_string (PangoAttrType type, const gchar *strval)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeAttribute *gattr;
|
|
Packit |
1e8aac |
GdkColor color;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gattr = g_new0 (GladeAttribute, 1);
|
|
Packit |
1e8aac |
gattr->type = type;
|
|
Packit |
1e8aac |
gattr->start = 0;
|
|
Packit |
1e8aac |
gattr->end = G_MAXUINT;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
switch (type)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
case PANGO_ATTR_LANGUAGE:
|
|
Packit |
1e8aac |
case PANGO_ATTR_FAMILY:
|
|
Packit |
1e8aac |
case PANGO_ATTR_FONT_DESC:
|
|
Packit |
1e8aac |
g_value_init (&(gattr->value), G_TYPE_STRING);
|
|
Packit |
1e8aac |
g_value_set_string (&(gattr->value), strval);
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_STYLE:
|
|
Packit |
1e8aac |
case PANGO_ATTR_WEIGHT:
|
|
Packit |
1e8aac |
case PANGO_ATTR_VARIANT:
|
|
Packit |
1e8aac |
case PANGO_ATTR_STRETCH:
|
|
Packit |
1e8aac |
case PANGO_ATTR_GRAVITY:
|
|
Packit |
1e8aac |
case PANGO_ATTR_GRAVITY_HINT:
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Enums ... */
|
|
Packit |
1e8aac |
g_value_init (&(gattr->value), type_from_attr_type (type));
|
|
Packit |
1e8aac |
g_value_set_enum (&(gattr->value),
|
|
Packit |
1e8aac |
glade_utils_enum_value_from_string (type_from_attr_type (type), strval));
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_UNDERLINE:
|
|
Packit |
1e8aac |
case PANGO_ATTR_STRIKETHROUGH:
|
|
Packit |
1e8aac |
/* Booleans */
|
|
Packit |
1e8aac |
g_value_init (&(gattr->value), G_TYPE_BOOLEAN);
|
|
Packit |
1e8aac |
g_value_set_boolean (&(gattr->value), TRUE);
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* PangoAttrSize */
|
|
Packit |
1e8aac |
case PANGO_ATTR_SIZE:
|
|
Packit |
1e8aac |
case PANGO_ATTR_ABSOLUTE_SIZE:
|
|
Packit |
1e8aac |
/* ints */
|
|
Packit |
1e8aac |
g_value_init (&(gattr->value), G_TYPE_INT);
|
|
Packit |
1e8aac |
g_value_set_int (&(gattr->value), strtol (strval, NULL, 10));
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* PangoAttrFloat */
|
|
Packit |
1e8aac |
case PANGO_ATTR_SCALE:
|
|
Packit |
1e8aac |
/* doubles */
|
|
Packit |
1e8aac |
g_value_init (&(gattr->value), G_TYPE_DOUBLE);
|
|
Packit |
1e8aac |
g_value_set_double (&(gattr->value), g_ascii_strtod (strval, NULL));
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* PangoAttrColor */
|
|
Packit |
1e8aac |
case PANGO_ATTR_FOREGROUND:
|
|
Packit |
1e8aac |
case PANGO_ATTR_BACKGROUND:
|
|
Packit |
1e8aac |
case PANGO_ATTR_UNDERLINE_COLOR:
|
|
Packit |
1e8aac |
case PANGO_ATTR_STRIKETHROUGH_COLOR:
|
|
Packit |
1e8aac |
/* boxed colours */
|
|
Packit |
1e8aac |
if (gdk_color_parse (strval, &color))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_value_init (&(gattr->value), GDK_TYPE_COLOR);
|
|
Packit |
1e8aac |
g_value_set_boxed (&(gattr->value), &color;;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
g_critical ("Unable to parse color attribute '%s'", strval);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* PangoAttrShape */
|
|
Packit |
1e8aac |
case PANGO_ATTR_SHAPE:
|
|
Packit |
1e8aac |
/* Unsupported for now */
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case PANGO_ATTR_INVALID:
|
|
Packit |
1e8aac |
case PANGO_ATTR_LETTER_SPACING:
|
|
Packit |
1e8aac |
case PANGO_ATTR_RISE:
|
|
Packit |
1e8aac |
case PANGO_ATTR_FALLBACK:
|
|
Packit |
1e8aac |
default:
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return gattr;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
sync_object (GladeEPropAttrs *eprop_attrs, gboolean use_command)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GList *attributes = NULL;
|
|
Packit |
1e8aac |
GladeAttribute *gattr;
|
|
Packit |
1e8aac |
GtkTreeIter iter;
|
|
Packit |
1e8aac |
PangoAttrType type;
|
|
Packit |
1e8aac |
AttrEditType edit_type;
|
|
Packit |
1e8aac |
gchar *strval = NULL;
|
|
Packit |
1e8aac |
gboolean valid;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
valid = gtk_tree_model_iter_children (eprop_attrs->model, &iter, NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
while (valid)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (!is_empty_row (eprop_attrs->model, &iter))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gtk_tree_model_get (eprop_attrs->model, &iter,
|
|
Packit |
1e8aac |
COLUMN_TYPE, &type,
|
|
Packit |
1e8aac |
COLUMN_EDIT_TYPE, &edit_type,
|
|
Packit |
1e8aac |
COLUMN_TEXT, &strval, -1);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gattr =
|
|
Packit |
1e8aac |
glade_gtk_attribute_from_string (type,
|
|
Packit |
1e8aac |
(edit_type ==
|
|
Packit |
1e8aac |
EDIT_TOGGLE) ? "" : strval);
|
|
Packit |
1e8aac |
strval = (g_free (strval), NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
attributes = g_list_prepend (attributes, gattr);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
valid = gtk_tree_model_iter_next (eprop_attrs->model, &iter);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (use_command)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GValue value = { 0, };
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_value_init (&value, GLADE_TYPE_ATTR_GLIST);
|
|
Packit |
1e8aac |
g_value_take_boxed (&value, g_list_reverse (attributes));
|
|
Packit |
1e8aac |
glade_editor_property_commit (GLADE_EDITOR_PROPERTY (eprop_attrs),
|
|
Packit |
1e8aac |
&value);
|
|
Packit |
1e8aac |
g_value_unset (&value);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeProperty *property =
|
|
Packit |
1e8aac |
glade_editor_property_get_property (GLADE_EDITOR_PROPERTY (eprop_attrs));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_property_set (property, g_list_reverse (attributes));
|
|
Packit |
1e8aac |
glade_attr_list_free (attributes);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static GtkTreeIter *
|
|
Packit |
1e8aac |
get_row_by_type (GtkTreeModel *model, PangoAttrType type)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GtkTreeIter iter, *ret_iter = NULL;
|
|
Packit |
1e8aac |
gboolean valid;
|
|
Packit |
1e8aac |
PangoAttrType iter_type;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
valid = gtk_tree_model_iter_children (model, &iter, NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
while (valid)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gtk_tree_model_get (model, &iter, COLUMN_TYPE, &iter_type, -1);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (iter_type == type)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
ret_iter = gtk_tree_iter_copy (&iter);
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
valid = gtk_tree_model_iter_next (model, &iter);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
return ret_iter;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
value_icon_activate (GtkCellRendererToggle *cell_renderer,
|
|
Packit |
1e8aac |
gchar *path,
|
|
Packit |
1e8aac |
GladeEPropAttrs *eprop_attrs)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GtkWidget *dialog;
|
|
Packit |
1e8aac |
GtkTreeIter iter;
|
|
Packit |
1e8aac |
PangoAttrType type;
|
|
Packit |
1e8aac |
AttrEditType edit_type;
|
|
Packit |
1e8aac |
GdkRGBA color = {0,};
|
|
Packit |
1e8aac |
gchar *text = NULL, *new_text;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Find type etc */
|
|
Packit |
1e8aac |
if (!gtk_tree_model_get_iter_from_string (eprop_attrs->model, &iter, path))
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_tree_model_get (eprop_attrs->model, &iter,
|
|
Packit |
1e8aac |
COLUMN_TEXT, &text,
|
|
Packit |
1e8aac |
COLUMN_TYPE, &type,
|
|
Packit |
1e8aac |
COLUMN_EDIT_TYPE, &edit_type, -1);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Launch dialog etc. */
|
|
Packit |
1e8aac |
switch (edit_type)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
case EDIT_COLOR:
|
|
Packit |
1e8aac |
dialog = gtk_color_chooser_dialog_new (_("Select a color"),
|
|
Packit |
1e8aac |
GTK_WINDOW (glade_app_get_window ()));
|
|
Packit |
1e8aac |
/* Get response etc... */
|
|
Packit |
1e8aac |
if (text && gdk_rgba_parse (&color, text))
|
|
Packit |
1e8aac |
gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (dialog), &color;;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (dialog), &color;;
|
|
Packit |
1e8aac |
/* Use GdkColor string format */
|
|
Packit |
1e8aac |
if (((guint8)(color.red * 0xFF)) * 0x101 == (guint16)(color.red * 0xFFFF) &&
|
|
Packit |
1e8aac |
((guint8)(color.green * 0xFF)) * 0x101 == (guint16)(color.green * 0xFFFF) &&
|
|
Packit |
1e8aac |
((guint8)(color.blue * 0xFF)) * 0x101 == (guint16)(color.blue * 0xFFFF))
|
|
Packit |
1e8aac |
new_text = g_strdup_printf ("#%02X%02X%02X",
|
|
Packit |
1e8aac |
(guint8)(color.red * 0xFF),
|
|
Packit |
1e8aac |
(guint8)(color.green * 0xFF),
|
|
Packit |
1e8aac |
(guint8)(color.blue * 0xFF));
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
new_text = g_strdup_printf ("#%04X%04X%04X",
|
|
Packit |
1e8aac |
(guint16)(color.red * 0xFFFF),
|
|
Packit |
1e8aac |
(guint16)(color.green * 0xFFFF),
|
|
Packit |
1e8aac |
(guint16)(color.blue * 0xFFFF));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_list_store_set (GTK_LIST_STORE (eprop_attrs->model), &iter,
|
|
Packit |
1e8aac |
COLUMN_TEXT, new_text,
|
|
Packit |
1e8aac |
COLUMN_NAME_WEIGHT, PANGO_WEIGHT_BOLD,
|
|
Packit |
1e8aac |
COLUMN_TEXT_STYLE, PANGO_STYLE_NORMAL,
|
|
Packit |
1e8aac |
COLUMN_TEXT_FG, "Black", -1);
|
|
Packit |
1e8aac |
g_free (new_text);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_widget_destroy (dialog);
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
case EDIT_FONT:
|
|
Packit |
1e8aac |
dialog = gtk_font_chooser_dialog_new (_("Select a font"),
|
|
Packit |
1e8aac |
GTK_WINDOW (glade_app_get_window ()));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Get response etc... */
|
|
Packit |
1e8aac |
if (text)
|
|
Packit |
1e8aac |
gtk_font_chooser_set_font (GTK_FONT_CHOOSER (dialog), text);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
new_text = gtk_font_chooser_get_font (GTK_FONT_CHOOSER (dialog));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_list_store_set (GTK_LIST_STORE (eprop_attrs->model), &iter,
|
|
Packit |
1e8aac |
COLUMN_TEXT, new_text,
|
|
Packit |
1e8aac |
COLUMN_NAME_WEIGHT, PANGO_WEIGHT_BOLD,
|
|
Packit |
1e8aac |
COLUMN_TEXT_STYLE, PANGO_STYLE_NORMAL,
|
|
Packit |
1e8aac |
COLUMN_TEXT_FG, "Black", -1);
|
|
Packit |
1e8aac |
g_free (new_text);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
gtk_widget_destroy (dialog);
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
default:
|
|
Packit |
1e8aac |
break;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
sync_object (eprop_attrs, FALSE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_free (text);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
value_toggled (GtkCellRendererToggle *cell_renderer,
|
|
Packit |
1e8aac |
gchar *path,
|
|
Packit |
1e8aac |
GladeEPropAttrs *eprop_attrs)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gboolean active;
|
|
Packit |
1e8aac |
GtkTreeIter iter;
|
|
Packit |
1e8aac |
PangoAttrType type;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!gtk_tree_model_get_iter_from_string (eprop_attrs->model, &iter, path))
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_tree_model_get (eprop_attrs->model, &iter,
|
|
Packit |
1e8aac |
COLUMN_TOGGLE_DOWN, &active, COLUMN_TYPE, &type, -1);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_list_store_set (GTK_LIST_STORE (eprop_attrs->model), &iter,
|
|
Packit |
1e8aac |
COLUMN_NAME_WEIGHT, PANGO_WEIGHT_BOLD,
|
|
Packit |
1e8aac |
COLUMN_TOGGLE_DOWN, !active, -1);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
sync_object (eprop_attrs, FALSE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
value_combo_spin_edited (GtkCellRendererText *cell,
|
|
Packit |
1e8aac |
const gchar *path,
|
|
Packit |
1e8aac |
const gchar *new_text,
|
|
Packit |
1e8aac |
GladeEPropAttrs *eprop_attrs)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GtkTreeIter iter;
|
|
Packit |
1e8aac |
PangoAttrType type;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (!gtk_tree_model_get_iter_from_string (eprop_attrs->model, &iter, path))
|
|
Packit |
1e8aac |
return;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_tree_model_get (eprop_attrs->model, &iter, COLUMN_TYPE, &type, -1);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Reset the column */
|
|
Packit |
1e8aac |
if (new_text && (*new_text == '\0' || strcmp (new_text, _("None")) == 0))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gtk_list_store_set (GTK_LIST_STORE (eprop_attrs->model), &iter,
|
|
Packit |
1e8aac |
COLUMN_TEXT, _("<Enter Value>"),
|
|
Packit |
1e8aac |
COLUMN_NAME_WEIGHT, PANGO_WEIGHT_NORMAL,
|
|
Packit |
1e8aac |
COLUMN_TEXT_STYLE, PANGO_STYLE_ITALIC,
|
|
Packit |
1e8aac |
COLUMN_TEXT_FG, "Grey", -1);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else
|
|
Packit |
1e8aac |
gtk_list_store_set (GTK_LIST_STORE (eprop_attrs->model), &iter,
|
|
Packit |
1e8aac |
COLUMN_TEXT, new_text,
|
|
Packit |
1e8aac |
COLUMN_NAME_WEIGHT, PANGO_WEIGHT_BOLD,
|
|
Packit |
1e8aac |
COLUMN_TEXT_STYLE, PANGO_STYLE_NORMAL,
|
|
Packit |
1e8aac |
COLUMN_TEXT_FG, "Black", -1);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
sync_object (eprop_attrs, FALSE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
value_combo_spin_editing_started (GtkCellRenderer *cell,
|
|
Packit |
1e8aac |
GtkCellEditable *editable,
|
|
Packit |
1e8aac |
const gchar *path)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (GTK_IS_SPIN_BUTTON (editable))
|
|
Packit |
1e8aac |
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (editable), TRUE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static GtkWidget *
|
|
Packit |
1e8aac |
glade_eprop_attrs_view (GladeEditorProperty *eprop)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeEPropAttrs *eprop_attrs = GLADE_EPROP_ATTRS (eprop);
|
|
Packit |
1e8aac |
GtkWidget *view_widget;
|
|
Packit |
1e8aac |
GtkCellRenderer *renderer;
|
|
Packit |
1e8aac |
GtkTreeViewColumn *column;
|
|
Packit |
1e8aac |
GtkAdjustment *adjustment;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
eprop_attrs->model = (GtkTreeModel *)
|
|
Packit |
1e8aac |
gtk_list_store_new (NUM_COLUMNS,
|
|
Packit |
1e8aac |
/* Main Data */
|
|
Packit |
1e8aac |
G_TYPE_STRING, // COLUMN_NAME
|
|
Packit |
1e8aac |
G_TYPE_INT, // COLUMN_NAME_WEIGHT
|
|
Packit |
1e8aac |
G_TYPE_INT, // COLUMN_TYPE
|
|
Packit |
1e8aac |
G_TYPE_INT, // COLUMN_EDIT_TYPE
|
|
Packit |
1e8aac |
G_TYPE_POINTER, // COLUMN_VALUE
|
|
Packit |
1e8aac |
G_TYPE_UINT, // COLUMN_START
|
|
Packit |
1e8aac |
G_TYPE_UINT, // COLUMN_END
|
|
Packit |
1e8aac |
/* Editor renderer related */
|
|
Packit |
1e8aac |
G_TYPE_BOOLEAN, // COLUMN_TOGGLE_ACTIVE
|
|
Packit |
1e8aac |
G_TYPE_BOOLEAN, // COLUMN_TOGGLE_DOWN
|
|
Packit |
1e8aac |
G_TYPE_BOOLEAN, // COLUMN_BUTTON_ACTIVE
|
|
Packit |
1e8aac |
G_TYPE_STRING, // COLUMN_TEXT
|
|
Packit |
1e8aac |
G_TYPE_INT, // COLUMN_TEXT_STYLE
|
|
Packit |
1e8aac |
G_TYPE_STRING, // COLUMN_TEXT_FG
|
|
Packit |
1e8aac |
G_TYPE_BOOLEAN, // COLUMN_COMBO_ACTIVE
|
|
Packit |
1e8aac |
GTK_TYPE_LIST_STORE, // COLUMN_COMBO_MODEL
|
|
Packit |
1e8aac |
G_TYPE_BOOLEAN, // COLUMN_SPIN_ACTIVE
|
|
Packit |
1e8aac |
G_TYPE_UINT); // COLUMN_SPIN_DIGITS
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
view_widget = gtk_tree_view_new_with_model (eprop_attrs->model);
|
|
Packit |
1e8aac |
gtk_tree_view_set_show_expanders (GTK_TREE_VIEW (view_widget), FALSE);
|
|
Packit |
1e8aac |
gtk_tree_view_set_enable_search (GTK_TREE_VIEW (view_widget), FALSE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/********************* attribute name column *********************/
|
|
Packit |
1e8aac |
renderer = gtk_cell_renderer_text_new ();
|
|
Packit |
1e8aac |
g_object_set (G_OBJECT (renderer), "editable", FALSE, NULL);
|
|
Packit |
1e8aac |
column = gtk_tree_view_column_new_with_attributes
|
|
Packit |
1e8aac |
(_("Attribute"), renderer,
|
|
Packit |
1e8aac |
"text", COLUMN_NAME, "weight", COLUMN_NAME_WEIGHT, NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE);
|
|
Packit |
1e8aac |
gtk_tree_view_append_column (GTK_TREE_VIEW (view_widget), column);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/********************* attribute value column *********************/
|
|
Packit |
1e8aac |
column = gtk_tree_view_column_new ();
|
|
Packit |
1e8aac |
gtk_tree_view_column_set_title (column, _("Value"));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Toggle renderer */
|
|
Packit |
1e8aac |
renderer = gtk_cell_renderer_toggle_new ();
|
|
Packit |
1e8aac |
gtk_tree_view_column_pack_start (column, renderer, FALSE);
|
|
Packit |
1e8aac |
gtk_tree_view_column_set_attributes (column, renderer,
|
|
Packit |
1e8aac |
"activatable", COLUMN_TOGGLE_ACTIVE,
|
|
Packit |
1e8aac |
"visible", COLUMN_TOGGLE_ACTIVE,
|
|
Packit |
1e8aac |
"active", COLUMN_TOGGLE_DOWN, NULL);
|
|
Packit |
1e8aac |
g_signal_connect (G_OBJECT (renderer), "toggled",
|
|
Packit |
1e8aac |
G_CALLBACK (value_toggled), eprop);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Text renderer */
|
|
Packit |
1e8aac |
renderer = gtk_cell_renderer_text_new ();
|
|
Packit |
1e8aac |
g_object_set (G_OBJECT (renderer), "editable", FALSE, NULL);
|
|
Packit |
1e8aac |
gtk_tree_view_column_pack_start (column, renderer, FALSE);
|
|
Packit |
1e8aac |
gtk_tree_view_column_set_attributes (column, renderer,
|
|
Packit |
1e8aac |
"editable", COLUMN_BUTTON_ACTIVE,
|
|
Packit |
1e8aac |
"visible", COLUMN_BUTTON_ACTIVE,
|
|
Packit |
1e8aac |
"text", COLUMN_TEXT,
|
|
Packit |
1e8aac |
"style", COLUMN_TEXT_STYLE,
|
|
Packit |
1e8aac |
"foreground", COLUMN_TEXT_FG, NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Icon renderer */
|
|
Packit |
1e8aac |
renderer = glade_cell_renderer_icon_new ();
|
|
Packit |
1e8aac |
g_object_set (G_OBJECT (renderer), "icon-name", "gtk-edit", NULL);
|
|
Packit |
1e8aac |
gtk_tree_view_column_pack_start (column, renderer, FALSE);
|
|
Packit |
1e8aac |
gtk_tree_view_column_set_attributes (column, renderer,
|
|
Packit |
1e8aac |
"activatable", COLUMN_BUTTON_ACTIVE,
|
|
Packit |
1e8aac |
"visible", COLUMN_BUTTON_ACTIVE, NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_signal_connect (G_OBJECT (renderer), "activate",
|
|
Packit |
1e8aac |
G_CALLBACK (value_icon_activate), eprop);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Combo renderer */
|
|
Packit |
1e8aac |
renderer = gtk_cell_renderer_combo_new ();
|
|
Packit |
1e8aac |
g_object_set (G_OBJECT (renderer), "text-column", 0, "has-entry", FALSE,
|
|
Packit |
1e8aac |
NULL);
|
|
Packit |
1e8aac |
gtk_tree_view_column_pack_start (column, renderer, TRUE);
|
|
Packit |
1e8aac |
gtk_tree_view_column_set_attributes (column, renderer,
|
|
Packit |
1e8aac |
"editable", COLUMN_COMBO_ACTIVE,
|
|
Packit |
1e8aac |
"visible", COLUMN_COMBO_ACTIVE,
|
|
Packit |
1e8aac |
"model", COLUMN_COMBO_MODEL,
|
|
Packit |
1e8aac |
"text", COLUMN_TEXT,
|
|
Packit |
1e8aac |
"style", COLUMN_TEXT_STYLE,
|
|
Packit |
1e8aac |
"foreground", COLUMN_TEXT_FG, NULL);
|
|
Packit |
1e8aac |
g_signal_connect (G_OBJECT (renderer), "edited",
|
|
Packit |
1e8aac |
G_CALLBACK (value_combo_spin_edited), eprop);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Spin renderer */
|
|
Packit |
1e8aac |
renderer = gtk_cell_renderer_spin_new ();
|
|
Packit |
1e8aac |
adjustment =
|
|
Packit |
1e8aac |
(GtkAdjustment *) gtk_adjustment_new (0, -G_MAXDOUBLE, G_MAXDOUBLE, 100,
|
|
Packit |
1e8aac |
100, 100);
|
|
Packit |
1e8aac |
g_object_set (G_OBJECT (renderer), "adjustment", adjustment, NULL);
|
|
Packit |
1e8aac |
gtk_tree_view_column_pack_start (column, renderer, TRUE);
|
|
Packit |
1e8aac |
gtk_tree_view_column_set_attributes (column, renderer,
|
|
Packit |
1e8aac |
"visible", COLUMN_SPIN_ACTIVE,
|
|
Packit |
1e8aac |
"editable", COLUMN_SPIN_ACTIVE,
|
|
Packit |
1e8aac |
"text", COLUMN_TEXT,
|
|
Packit |
1e8aac |
"style", COLUMN_TEXT_STYLE,
|
|
Packit |
1e8aac |
"foreground", COLUMN_TEXT_FG,
|
|
Packit |
1e8aac |
"digits", COLUMN_SPIN_DIGITS, NULL);
|
|
Packit |
1e8aac |
g_signal_connect (G_OBJECT (renderer), "edited",
|
|
Packit |
1e8aac |
G_CALLBACK (value_combo_spin_edited), eprop);
|
|
Packit |
1e8aac |
g_signal_connect (G_OBJECT (renderer), "editing-started",
|
|
Packit |
1e8aac |
G_CALLBACK (value_combo_spin_editing_started), NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE);
|
|
Packit |
1e8aac |
gtk_tree_view_append_column (GTK_TREE_VIEW (view_widget), column);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return view_widget;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_eprop_attrs_populate_view (GladeEditorProperty *eprop, GtkTreeView *view)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GList *attributes, *list;
|
|
Packit |
1e8aac |
GtkListStore *model = (GtkListStore *) gtk_tree_view_get_model (view);
|
|
Packit |
1e8aac |
GtkTreeIter *iter;
|
|
Packit |
1e8aac |
GladeAttribute *gattr;
|
|
Packit |
1e8aac |
GladeProperty *property;
|
|
Packit |
1e8aac |
gchar *text;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
property = glade_editor_property_get_property (eprop);
|
|
Packit |
1e8aac |
attributes = g_value_get_boxed (glade_property_inline_value (property));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_FONT_DESC);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_STYLE);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_WEIGHT);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_VARIANT);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_LANGUAGE);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_STRETCH);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_SCALE);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_UNDERLINE);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_STRIKETHROUGH);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_FOREGROUND);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_BACKGROUND);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_UNDERLINE_COLOR);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_STRIKETHROUGH_COLOR);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_GRAVITY);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_GRAVITY_HINT);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_SIZE);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_ABSOLUTE_SIZE);
|
|
Packit |
1e8aac |
append_empty_row (model, PANGO_ATTR_SHAPE);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* XXX Populate here ...
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
for (list = attributes; list; list = list->next)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gattr = list->data;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if ((iter = get_row_by_type (GTK_TREE_MODEL (model), gattr->type)))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
text = glade_gtk_string_from_attr (gattr);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_list_store_set (GTK_LIST_STORE (model), iter,
|
|
Packit |
1e8aac |
COLUMN_NAME_WEIGHT, PANGO_WEIGHT_BOLD,
|
|
Packit |
1e8aac |
COLUMN_TEXT, text,
|
|
Packit |
1e8aac |
COLUMN_TEXT_STYLE, PANGO_STYLE_NORMAL,
|
|
Packit |
1e8aac |
COLUMN_TEXT_FG, "Black", -1);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (gattr->type == PANGO_ATTR_UNDERLINE ||
|
|
Packit |
1e8aac |
gattr->type == PANGO_ATTR_STRIKETHROUGH)
|
|
Packit |
1e8aac |
gtk_list_store_set (GTK_LIST_STORE (model), iter,
|
|
Packit |
1e8aac |
COLUMN_TOGGLE_DOWN,
|
|
Packit |
1e8aac |
g_value_get_boolean (&(gattr->value)), -1);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_free (text);
|
|
Packit |
1e8aac |
gtk_tree_iter_free (iter);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_eprop_attrs_show_dialog (GtkWidget *dialog_button,
|
|
Packit |
1e8aac |
GladeEditorProperty *eprop)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeEPropAttrs *eprop_attrs = GLADE_EPROP_ATTRS (eprop);
|
|
Packit |
1e8aac |
GtkWidget *dialog, *parent, *vbox, *sw, *tree_view;
|
|
Packit |
1e8aac |
GladeProperty *property;
|
|
Packit |
1e8aac |
GList *old_attributes;
|
|
Packit |
1e8aac |
gint res;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
property = glade_editor_property_get_property (eprop);
|
|
Packit |
1e8aac |
parent = gtk_widget_get_toplevel (GTK_WIDGET (eprop));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Keep a copy for commit time... */
|
|
Packit |
1e8aac |
old_attributes = g_value_dup_boxed (glade_property_inline_value (property));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
dialog = gtk_dialog_new_with_buttons (_("Setup Text Attributes"),
|
|
Packit |
1e8aac |
GTK_WINDOW (parent),
|
|
Packit |
1e8aac |
GTK_DIALOG_MODAL |
|
|
Packit |
1e8aac |
GTK_DIALOG_DESTROY_WITH_PARENT,
|
|
Packit |
1e8aac |
_("C_lear"), GLADE_RESPONSE_CLEAR,
|
|
Packit |
1e8aac |
_("_Cancel"), GTK_RESPONSE_CANCEL,
|
|
Packit |
1e8aac |
_("_OK"), GTK_RESPONSE_OK, NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
|
|
Packit |
1e8aac |
gtk_widget_show (vbox);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_box_pack_start (GTK_BOX
|
|
Packit |
1e8aac |
(gtk_dialog_get_content_area (GTK_DIALOG (dialog))), vbox,
|
|
Packit |
1e8aac |
TRUE, TRUE, 0);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
sw = gtk_scrolled_window_new (NULL, NULL);
|
|
Packit |
1e8aac |
gtk_widget_show (sw);
|
|
Packit |
1e8aac |
gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
|
|
Packit |
1e8aac |
gtk_widget_set_size_request (sw, 400, 200);
|
|
Packit |
1e8aac |
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
|
Packit |
1e8aac |
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
|
Packit |
1e8aac |
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
tree_view = glade_eprop_attrs_view (eprop);
|
|
Packit |
1e8aac |
glade_eprop_attrs_populate_view (eprop, GTK_TREE_VIEW (tree_view));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_tree_view_expand_all (GTK_TREE_VIEW (tree_view));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_widget_show (tree_view);
|
|
Packit |
1e8aac |
gtk_container_add (GTK_CONTAINER (sw), tree_view);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Run the dialog */
|
|
Packit |
1e8aac |
res = gtk_dialog_run (GTK_DIALOG (dialog));
|
|
Packit |
1e8aac |
if (res == GTK_RESPONSE_OK)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
/* Update from old attributes so that there a property change
|
|
Packit |
1e8aac |
* sitting on the undo stack.
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
glade_property_set (property, old_attributes);
|
|
Packit |
1e8aac |
sync_object (eprop_attrs, TRUE);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
else if (res == GLADE_RESPONSE_CLEAR)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GValue value = { 0, };
|
|
Packit |
1e8aac |
g_value_init (&value, GLADE_TYPE_ATTR_GLIST);
|
|
Packit |
1e8aac |
g_value_set_boxed (&value, NULL);
|
|
Packit |
1e8aac |
glade_editor_property_commit (eprop, &value);
|
|
Packit |
1e8aac |
g_value_unset (&value);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Clean up ...
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
gtk_widget_destroy (dialog);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_object_unref (G_OBJECT (eprop_attrs->model));
|
|
Packit |
1e8aac |
eprop_attrs->model = NULL;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_attr_list_free (old_attributes);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_eprop_attrs_finalize (GObject *object)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
/* Chain up */
|
|
Packit |
1e8aac |
GObjectClass *parent_class =
|
|
Packit |
1e8aac |
g_type_class_peek_parent (G_OBJECT_GET_CLASS (object));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
G_OBJECT_CLASS (parent_class)->finalize (object);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
glade_eprop_attrs_load (GladeEditorProperty *eprop, GladeProperty *property)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeEditorPropertyClass *parent_class =
|
|
Packit |
1e8aac |
g_type_class_peek_parent (G_OBJECT_GET_CLASS (eprop));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* No displayable attributes in eprop, just a button. */
|
|
Packit |
1e8aac |
parent_class->load (eprop, property);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static GtkWidget *
|
|
Packit |
1e8aac |
glade_eprop_attrs_create_input (GladeEditorProperty *eprop)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GtkWidget *hbox;
|
|
Packit |
1e8aac |
GtkWidget *button;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
button = gtk_button_new_with_label (_("Edit Attributes"));
|
|
Packit |
1e8aac |
gtk_widget_set_hexpand (button, TRUE);
|
|
Packit |
1e8aac |
gtk_widget_show (button);
|
|
Packit |
1e8aac |
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_signal_connect (G_OBJECT (button), "clicked",
|
|
Packit |
1e8aac |
G_CALLBACK (glade_eprop_attrs_show_dialog), eprop);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return hbox;
|
|
Packit |
1e8aac |
}
|