Commit 357743fc authored by Tristan Van Berkom's avatar Tristan Van Berkom

Added glade_command_set_properties_list().


	* src/glade-command.[ch]: Added glade_command_set_properties_list().

	* src/glade-editor.[ch]: Added reset dialog, used property_class->visible_lines
	  instead of GladeParams

	* src/glade-project-window.c: Minor GUI touchups.

	* src/glade-property-class.[ch], src/glade.h: Implemented visible_lines tag loading,
	  touched up comments.

	* src/glade-property.[ch]: Added glade_property_get_default()

	* src/glade-signal-editor.c: Removed the search box from the non-searchable treeview.

	* src/glade-xml-utils.c: fixed up allocator confusions a bit.

	* widgets/gtk+.xml: Made GtkLabel's label property multi-lined.
parent ca4ca128
2005-08-01 Tristan Van Berkom <tvb@gnome.org>
* src/glade-command.[ch]: Added glade_command_set_properties_list().
* src/glade-editor.[ch]: Added reset dialog, used property_class->visible_lines
instead of GladeParams
* src/glade-project-window.c: Minor GUI touchups.
* src/glade-property-class.[ch], src/glade.h: Implemented visible_lines tag loading,
touched up comments.
* src/glade-property.[ch]: Added glade_property_get_default()
* src/glade-signal-editor.c: Removed the search box from the non-searchable treeview.
* src/glade-xml-utils.c: fixed up allocator confusions a bit.
* widgets/gtk+.xml: Made GtkLabel's label property multi-lined.
2005-08-31 Tristan Van Berkom <tvb@gnome.org>
* TODO: Added note about TODO list not being maintained, please
......
......@@ -284,11 +284,6 @@ glade_command_push_undo (GladeProject *project, GladeCommand *cmd)
/* create a new GladeCommandSetProperty class. Objects of this class will
* encapsulate a "set property" operation */
typedef struct {
GladeProperty *property;
GValue *new_value;
GValue *old_value;
} SetPropData;
typedef struct {
GladeCommand parent;
......@@ -325,7 +320,7 @@ glade_command_set_property_execute (GladeCommand *cmd)
for (l = me->sdata; l; l = l->next)
{
GValue new_value = { 0, };
SetPropData *sdata = l->data;
GCSetPropData *sdata = l->data;
g_value_init (&new_value, G_VALUE_TYPE (sdata->new_value));
g_value_copy (sdata->new_value, &new_value);
......@@ -358,7 +353,7 @@ glade_command_set_property_finalize (GObject *obj)
for (l = me->sdata; l; l = l->next)
{
SetPropData *sdata = l->data;
GCSetPropData *sdata = l->data;
if (sdata->property)
g_object_unref (G_OBJECT (sdata->property));
......@@ -390,8 +385,8 @@ glade_command_set_property_unifies (GladeCommand *this, GladeCommand *other)
return (g_list_length (cmd1->sdata) == 1 &&
g_list_length (cmd2->sdata) == 1 &&
((SetPropData *)cmd1->sdata->data)->property ==
((SetPropData *)cmd2->sdata->data)->property);
((GCSetPropData *)cmd1->sdata->data)->property ==
((GCSetPropData *)cmd2->sdata->data)->property);
}
return FALSE;
}
......@@ -414,7 +409,7 @@ glade_command_set_property_collapse (GladeCommand *this, GladeCommand *other)
static gchar *
glade_command_set_property_description (GladeCommandSetProperty *me)
{
SetPropData *sdata;
GCSetPropData *sdata;
gchar *description = NULL;
gchar *value_name;
......@@ -445,33 +440,61 @@ glade_command_set_property_description (GladeCommandSetProperty *me)
void
glade_command_set_properties (GladeProperty *property, const GValue *old_value, const GValue *new_value, ...)
glade_command_set_properties_list (GladeProject *project, GList *props)
{
GladeCommandSetProperty *me;
GladeCommand *cmd;
SetPropData *sdata;
GCSetPropData *sdata;
GList *list;
g_return_if_fail (GLADE_IS_PROJECT (project));
g_return_if_fail (props);
me = (GladeCommandSetProperty*) g_object_new (GLADE_COMMAND_SET_PROPERTY_TYPE, NULL);
cmd = GLADE_COMMAND (me);
/* Ref all props */
for (list = props; list; list = list->next)
{
sdata = list->data;
g_object_ref (G_OBJECT (sdata->property));
}
me->sdata = props;
cmd->description = glade_command_set_property_description (me);
g_assert (cmd->description);
/* Push onto undo stack only if it executes successfully. */
if (glade_command_set_property_execute (GLADE_COMMAND (me)))
glade_command_push_undo (GLADE_PROJECT (project),
GLADE_COMMAND (me));
else
/* No leaks on my shift! */
g_object_unref (G_OBJECT (me));
}
void
glade_command_set_properties (GladeProperty *property, const GValue *old_value, const GValue *new_value, ...)
{
GCSetPropData *sdata;
GladeProperty *prop;
GValue *ovalue, *nvalue;
GList *list = NULL;
va_list vl;
g_return_if_fail (GLADE_IS_PROPERTY (property));
g_return_if_fail (G_IS_VALUE (old_value));
g_return_if_fail (G_IS_VALUE (new_value));
g_return_if_fail (G_VALUE_TYPE (new_value) == G_VALUE_TYPE (old_value));
me = (GladeCommandSetProperty*) g_object_new (GLADE_COMMAND_SET_PROPERTY_TYPE, NULL);
cmd = GLADE_COMMAND (me);
/* Add first set */
sdata = g_new (SetPropData, 1);
sdata->property = g_object_ref (G_OBJECT (property));
sdata = g_new (GCSetPropData, 1);
sdata->property = property;
sdata->old_value = g_new0 (GValue, 1);
sdata->new_value = g_new0 (GValue, 1);
g_value_init (sdata->old_value, G_VALUE_TYPE (old_value));
g_value_init (sdata->new_value, G_VALUE_TYPE (new_value));
g_value_copy (old_value, sdata->old_value);
g_value_copy (new_value, sdata->new_value);
me->sdata = g_list_prepend (me->sdata, sdata);
list = g_list_prepend (list, sdata);
va_start (vl, new_value);
while ((prop = va_arg (vl, GladeProperty *)) != NULL)
......@@ -483,7 +506,7 @@ glade_command_set_properties (GladeProperty *property, const GValue *old_value,
g_assert (G_IS_VALUE (ovalue));
g_assert (G_IS_VALUE (nvalue));
sdata = g_new (SetPropData, 1);
sdata = g_new (GCSetPropData, 1);
sdata->property = g_object_ref (G_OBJECT (prop));
sdata->old_value = g_new0 (GValue, 1);
sdata->new_value = g_new0 (GValue, 1);
......@@ -491,20 +514,11 @@ glade_command_set_properties (GladeProperty *property, const GValue *old_value,
g_value_init (sdata->new_value, G_VALUE_TYPE (nvalue));
g_value_copy (ovalue, sdata->old_value);
g_value_copy (nvalue, sdata->new_value);
me->sdata = g_list_prepend (me->sdata, sdata);
list = g_list_prepend (list, sdata);
}
va_end (vl);
cmd->description = glade_command_set_property_description (me);
g_assert (cmd->description);
/* Push onto undo stack only if it executes successfully. */
if (glade_command_set_property_execute (GLADE_COMMAND (me)))
glade_command_push_undo (GLADE_PROJECT (property->widget->project),
GLADE_COMMAND (me));
else
/* No leaks on my shift! */
g_object_unref (G_OBJECT (me));
glade_command_set_properties_list (property->widget->project, list);
}
void
......
......@@ -19,9 +19,15 @@ G_BEGIN_DECLS
#define GLADE_IS_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_COMMAND))
#define GLADE_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GLADE_TYPE_COMMAND, GladeCommandClass))
typedef struct _GladeCommand GladeCommand;
typedef struct _GladeCommand GladeCommand;
typedef struct _GladeCommandClass GladeCommandClass;
typedef struct _GCSetPropData GCSetPropData;
struct _GCSetPropData {
GladeProperty *property;
GValue *new_value;
GValue *old_value;
};
struct _GladeCommand
{
......@@ -53,6 +59,9 @@ LIBGLADEUI_API void glade_command_set_properties(GladeProperty *prop
const GValue *old_value,
const GValue *new_value, ...);
LIBGLADEUI_API void glade_command_set_properties_list (GladeProject *project,
GList *props); // list of GCSetPropData
LIBGLADEUI_API void glade_command_set_name (GladeWidget *glade_widget, const gchar *name);
LIBGLADEUI_API void glade_command_delete (GList *widgets);
......
This diff is collapsed.
......@@ -194,6 +194,8 @@ struct _GladeEditorProperty
GtkWidget *eventbox; /* Keep a hold of this for tooltips */
GtkWidget *item_label; /* control visual label state manually */
GtkWidget *text_entry; /* Keep a hold of either the entry or textview. */
};
LIBGLADEUI_API GType glade_editor_get_type (void);
......
......@@ -749,7 +749,8 @@ gpw_create_editor (GladeProjectWindow *gpw)
gtk_window_set_title (gpw->priv->editor_window, _("Properties"));
gtk_window_move (gpw->priv->editor_window, 350, 0);
gtk_container_add (GTK_CONTAINER (gpw->priv->editor_window), GTK_WIDGET (glade_app_get_editor (GLADE_APP(gpw))));
gtk_container_add (GTK_CONTAINER (gpw->priv->editor_window),
GTK_WIDGET (glade_app_get_editor (GLADE_APP(gpw))));
/* Delete event, don't destroy it */
g_signal_connect (G_OBJECT (gpw->priv->editor_window), "delete_event",
......@@ -812,12 +813,26 @@ gpw_create_widget_tree_contents (GladeProjectWindow *gpw)
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (view),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (view), GTK_SHADOW_IN);
gtk_container_set_border_width (GTK_CONTAINER (view), GLADE_GENERIC_BORDER_WIDTH);
/* Add control buttons to the treeview. */
hbox = gtk_hbox_new (TRUE, 0);
hbox = gtk_hbutton_box_new ();
vbox = gtk_vbox_new (FALSE, 0);
expand = gtk_button_new_with_label (_("Expand all"));
collapse = gtk_button_new_with_label (_("Collapse all"));
gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_START);
expand = gtk_button_new_with_mnemonic (_("E_xpand all"));
gtk_container_set_border_width (GTK_CONTAINER (expand),
GLADE_GENERIC_BORDER_WIDTH);
collapse = gtk_button_new_with_mnemonic (_("_Collapse all"));
gtk_container_set_border_width (GTK_CONTAINER (collapse),
GLADE_GENERIC_BORDER_WIDTH);
gtk_box_pack_start (GTK_BOX (hbox), expand, FALSE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (hbox), collapse, FALSE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (view), TRUE, TRUE, 0);
......@@ -948,9 +963,11 @@ gpw_toggle_clipboard_cb (GtkAction *action, GladeProjectWindow *gpw)
static void gpw_about_cb (GtkAction *action, GladeProjectWindow *gpw)
{
gchar *authors[] =
{ "Joaquin Cuenca Abela",
{ "Joaquin Cuenca Abela <e98cuenc@yahoo.com>",
"Chema Celorio <chema@ximian.com>",
"Paolo Borelli <pborelli@katamail.com>",
"Archit Baweja <bighead@users.sourceforge.net>",
"Shane Butler <shane_b@operamail.com>",
"Tristan Van Berkom <tvb@gnome.org>",
NULL };
......@@ -1050,9 +1067,9 @@ static const gchar *ui_info =
static GtkActionEntry entries[] = {
{ "FileMenu", NULL, "_File" },
{ "EditMenu", NULL, "Edit" },
{ "ViewMenu", NULL, "View" },
{ "ProjectMenu", NULL, "Project" },
{ "EditMenu", NULL, "_Edit" },
{ "ViewMenu", NULL, "_View" },
{ "ProjectMenu", NULL, "_Project" },
{ "HelpMenu", NULL, "_Help" },
/* FileMenu */
......@@ -1279,7 +1296,7 @@ glade_project_window_create (GladeProjectWindow *gpw)
app = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_move (GTK_WINDOW (app), 0, 0);
gtk_window_set_default_size (GTK_WINDOW (app), 280, 220);
gtk_window_set_default_size (GTK_WINDOW (app), 300, 450);
filename = g_build_filename (glade_icon_dir, "glade-3.png", NULL);
gtk_window_set_default_icon_from_file (filename, NULL);
g_free (filename);
......
......@@ -882,7 +882,10 @@ glade_property_class_update_from_node (GladeXmlNode *node,
g_type_class_unref(fclass);
}
/* Visible lines */
glade_xml_get_value_int (node, GLADE_TAG_VISIBLE_LINES, &class->visible_lines);
/* Get the Parameters */
child = glade_xml_search_child (node, GLADE_TAG_PARAMETERS);
if (child)
......@@ -895,12 +898,12 @@ glade_property_class_update_from_node (GladeXmlNode *node,
class->translatable = glade_xml_get_property_boolean (node, GLADE_TAG_TRANSLATABLE, TRUE);
/* common, optional, etc */
class->common = glade_xml_get_property_boolean (node, GLADE_TAG_COMMON, class->common);
class->optional = glade_xml_get_property_boolean (node, GLADE_TAG_OPTIONAL, class->optional);
class->query = glade_xml_get_property_boolean (node, GLADE_TAG_QUERY, class->query);
class->save = glade_xml_get_property_boolean (node, GLADE_TAG_SAVE, class->save);
class->visible = glade_xml_get_property_boolean (node, GLADE_TAG_VISIBLE, class->visible);
class->ignore = glade_xml_get_property_boolean (node, GLADE_TAG_IGNORE, class->ignore);
class->common = glade_xml_get_property_boolean (node, GLADE_TAG_COMMON, class->common);
class->optional = glade_xml_get_property_boolean (node, GLADE_TAG_OPTIONAL, class->optional);
class->query = glade_xml_get_property_boolean (node, GLADE_TAG_QUERY, class->query);
class->save = glade_xml_get_property_boolean (node, GLADE_TAG_SAVE, class->save);
class->visible = glade_xml_get_property_boolean (node, GLADE_TAG_VISIBLE, class->visible);
class->ignore = glade_xml_get_property_boolean (node, GLADE_TAG_IGNORE, class->ignore);
if (class->optional)
class->optional_default =
......
......@@ -4,84 +4,9 @@
G_BEGIN_DECLS
/* The GladeProperty object describes a settable parameter of a widget.
* All entries that the user can change in the first page of the GladeEditor
* make are a GladeProperty (except for the widget name)
* GladeProperties can be of any type of GladePropertyType
Sample xml
Integer Type : (float is very similar)
<Property>
<Type>Integer</Type>
<Name>Border Width</Name>
<Tooltip>The width of the border arround the container</Tooltip>
<GtkArg>border</GtkArg>
<Parameters>
<Parameter Key="Min" Value="0"/>
<Parameter Key="Max" Value="10000"/>
<Parameter Key="Default" Value="0"/>
<Parameter Key="StepIncrement" Value="1"/>
<Parameter Key="PageIncrement" Value="10"/>
<Parameter Key="ClibmRate" Value="1"/>
</Parameters>
</Property>
Text Type :
<Property>
<Type>Text</Type>
<Name>Title</Name>
<Tooltip>The title of the window</Tooltip>
<GtkArg>title</GtkArg>
<Parameters>
<Parameter Key="VisibleLines" Value="1"/>
<Parameter Key="Default" Value=""/>
</Parameters>
</Property>
Boolean Type :
<Property>
<Type>Boolean</Type>
<Name>Grow</Name>
<Tooltip>If the window can be enlarged</Tooltip>
<GtkArg>fixme</GtkArg>
<Parameters>
<Parameter Key="Default" Value="True"/>
</Parameters>
</Property>
Enum Type :
<Property>
<Type>Choice</Type>
<Name>Position</Name>
<Tooltip>The initial position of the window</Tooltip>
<GtkArg>fixme</GtkArg>
<Parameters>
<Parameter Key="Default" Value="GTK_WIN_POS_NONE"/>
</Parameters>
<Enums>
<Enum>String Equiv</Enum>
<Choices>
<Choice>
<Name>None</Name>
<Symbol>GTK_WIN_POS_NONE</Symbol>
</Choice>
<Choice>
<Name>Center</Name>
<Symbol>GTK_WIN_POS_CENTER</Symbol>
</Choice>
<Choice>
<Name>Mouse</Name>
<Symbol>GTK_WIN_POS_MOUSE</Symbol>
</Choice>
</Choices>
</Property>
/* The GladePropertyClass structure parameters of a GladeProperty.
* All entries in the GladeEditor are GladeProperties (except signals)
* All GladeProperties are associated with a GParamSpec.
*/
#define GLADE_PROPERTY_CLASS(gpc) ((GladePropertyClass *) gpc)
......@@ -146,6 +71,10 @@ struct _GladePropertyClass
* UI.
*/
gint visible_lines; /* When this pspec calls for a text editor, how many
* lines should be visible in the editor.
*/
/* These three are the master switches for the glade-file output,
* property editor availability & live object updates in the glade environment.
*/
......@@ -181,6 +110,11 @@ struct _GladePropertyClass
* we need to implement it inside glade. This is a pointer
* to the function that can get this property. The functions
* to work arround these problems are inside glade-gtk.c
*
* Note that since glade knows what the property values are
* at all times regardless of the objects copy, this is currently
* only used to obtain the values of packing properties that are
* set by the said object's parent at "container_add" time.
*/
void (*get_function) (GObject *object,
GValue *value);
......
......@@ -182,6 +182,14 @@ glade_property_get_value_impl (GladeProperty *property, GValue *value)
g_value_copy (property->value, value);
}
static void
glade_property_get_default_impl (GladeProperty *property, GValue *value)
{
g_value_init (value, property->class->pspec->value_type);
g_value_copy (property->class->def, value);
}
static void
glade_property_sync_impl (GladeProperty *property)
{
......@@ -444,6 +452,7 @@ glade_property_klass_init (GladePropertyKlass *prop_class)
prop_class->def = glade_property_default_impl;
prop_class->set_value = glade_property_set_value_impl;
prop_class->get_value = glade_property_get_value_impl;
prop_class->get_default = glade_property_get_default_impl;
prop_class->sync = glade_property_sync_impl;
prop_class->write = glade_property_write_impl;
prop_class->get_tooltip = glade_property_get_tooltip_impl;
......@@ -733,6 +742,21 @@ glade_property_get_value (GladeProperty *property, GValue *value)
GLADE_PROPERTY_GET_KLASS (property)->get_value (property, value);
}
/**
* glade_property_get_default:
* @property: a #GladeProperty
* @value: a #GValue
*
* TODO: write me
*/
void
glade_property_get_default (GladeProperty *property, GValue *value)
{
g_return_if_fail (GLADE_IS_PROPERTY (property));
g_return_if_fail (value != NULL);
GLADE_PROPERTY_GET_KLASS (property)->get_default (property, value);
}
/**
* glade_property_get_va_list:
* @property: a #GladeProperty
......
......@@ -13,7 +13,6 @@ G_BEGIN_DECLS
typedef struct _GladePropertyKlass GladePropertyKlass;
/* A GladeProperty is an instance of a GladePropertyClass.
* There will be one GladePropertyClass for "GtkLabel->label" but one
* GladeProperty for each GtkLabel in the GladeProject.
......@@ -71,6 +70,7 @@ struct _GladePropertyKlass
gboolean (* def) (GladeProperty *);
void (* set_value) (GladeProperty *, const GValue *);
void (* get_value) (GladeProperty *, GValue *);
void (* get_default) (GladeProperty *, GValue *);
void (* sync) (GladeProperty *);
gboolean (* write) (GladeProperty *, GladeInterface *, GArray *);
G_CONST_RETURN gchar * (* get_tooltip) (GladeProperty *);
......@@ -96,6 +96,8 @@ LIBGLADEUI_API void glade_property_set (Gla
...);
LIBGLADEUI_API void glade_property_get_value (GladeProperty *property,
GValue *value);
LIBGLADEUI_API void glade_property_get_default (GladeProperty *property,
GValue *value);
LIBGLADEUI_API void glade_property_get_va_list (GladeProperty *property,
va_list vl);
LIBGLADEUI_API void glade_property_get (GladeProperty *property,
......
......@@ -514,6 +514,8 @@ glade_signal_editor_construct_signals_list (GladeSignalEditor *editor)
model = GTK_TREE_MODEL (editor->model);
view_widget = gtk_tree_view_new_with_model (model);
g_object_set (G_OBJECT (view_widget), "enable-search", FALSE, NULL);
view = GTK_TREE_VIEW (view_widget);
/* the view now holds a reference, we can get rid of our own */
......
......@@ -47,6 +47,16 @@ struct _GladeXmlContext {
(strcmp ( ((xmlNodePtr)node)->name, "comment") == 0)) { \
node = ((xmlNodePtr)node)->next; continue ; };
static gchar *
claim_string (xmlChar *string)
{
gchar *ret;
ret = g_strdup (string);
xmlFree (string);
return ret;
}
/**
* glade_xml_set_value:
* @node_in: a #GladeXmlNode
......@@ -81,15 +91,10 @@ glade_xml_set_value (GladeXmlNode *node_in, const char *name, const char *val)
gchar *
glade_xml_get_content (GladeXmlNode *node_in)
{
xmlNodePtr node = (xmlNodePtr) node_in;
gchar *ret;
char *val;
xmlNodePtr node = (xmlNodePtr) node_in;
xmlChar *val = xmlNodeGetContent(node);
val = xmlNodeGetContent(node);
ret = g_strdup (val);
xmlFree (val);
return ret;
return claim_string (val);
}
/**
......@@ -115,27 +120,14 @@ glade_xml_set_content (GladeXmlNode *node_in, const gchar *content)
* (taken from gnumeric )
*
*/
static char *
static gchar *
glade_xml_get_value (xmlNodePtr node, const char *name)
{
char *ret, *val;
xmlNodePtr child;
for (child = node->children; child; child = child->next)
{
if (!strcmp (child->name, name))
{
/*
* !!! Inefficient, but ...
*/
val = xmlNodeGetContent(child);
if (val != NULL) {
ret = g_strdup (val);
xmlFree (val);
return ret;
}
}
}
return claim_string (xmlNodeGetContent(child));
return NULL;
}
......@@ -251,21 +243,18 @@ gchar *
glade_xml_get_value_string (GladeXmlNode *node_in, const char *name)
{
xmlNodePtr node = (xmlNodePtr) node_in;
return glade_xml_get_value (node, name);
return claim_string (glade_xml_get_value (node, name));
}
static char *
glade_xml_get_property (xmlNodePtr node, const char *name)
{
char *ret, *val;
xmlChar *val;
val = xmlGetProp (node, name);
val = (char *) xmlGetProp (node, name);
if (val)
{
ret = g_strdup (val);
xmlFree (val);
return ret;
}
return claim_string (val);
return NULL;
}
......
......@@ -52,7 +52,6 @@ typedef struct _GladeProject GladeProject;
#define GLADE_TAG_TRUE "True"
#define GLADE_TAG_YES "Yes"
#define GLADE_TAG_NO "No"
#define GLADE_TAG_VISIBLE_LINES "VisibleLines"
#define GLADE_ENUM_DATA_TAG "GladeEnumDataTag"
#define GLADE_TAG_IN_PALETTE "InPalette"
......@@ -130,11 +129,13 @@ typedef struct _GladeProject GladeProject;
#define GLADE_TAG_SAVE "save"
#define GLADE_TAG_EDITABLE "editable"
#define GLADE_TAG_IGNORE "ignore"
#define GLADE_TAG_VISIBLE_LINES "visible-lines"
#define GLADE_NUMERICAL_STEP_INCREMENT 1
#define GLADE_FLOATING_STEP_INCREMENT 0.01F
#define GLADE_NUMERICAL_PAGE_INCREMENT 10
#define GLADE_NUMERICAL_PAGE_SIZE 1
#define GLADE_GENERIC_BORDER_WIDTH 8
LIBGLADEUI_API gboolean glade_verbose;
......
......@@ -248,9 +248,11 @@
<glade-widget-class name="GtkLabel" generic-name="label" title="Label">
<properties>
<property id="selectable" ignore="True"/>
<property id="label" default="label"/>
<property id="pattern" default=""/>
<property id="max-width-chars" name="Maximun Width"/>
<property id="label" default="label">
<visible-lines>2</visible-lines>
</property>
<property id="justify">
<displayable-values>
<value id="GTK_JUSTIFY_LEFT" name="Left"/>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment