[glade] Added glade_command_set_project_license() and glade_command_set_project_resource_path() functions. I
- From: Juan Pablo Ugarte <jpu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glade] Added glade_command_set_project_license() and glade_command_set_project_resource_path() functions. I
- Date: Thu, 3 Oct 2013 20:36:21 +0000 (UTC)
commit 1e94c679ba2dcce731b1ac80ef81e2f932c6c733
Author: Juan Pablo Ugarte <juanpablougarte gmail com>
Date: Mon Jul 22 16:24:34 2013 -0300
Added glade_command_set_project_license() and glade_command_set_project_resource_path() functions.
Implemented them using a common GladeCommandProperty class with let you manipuate any GladeProject
property class
gladeui/glade-command.c | 445 +++++++++++++++++++++++++----------------------
gladeui/glade-command.h | 6 +
2 files changed, 241 insertions(+), 210 deletions(-)
---
diff --git a/gladeui/glade-command.c b/gladeui/glade-command.c
index 7b4a984..4ea5fc9 100644
--- a/gladeui/glade-command.c
+++ b/gladeui/glade-command.c
@@ -2663,260 +2663,319 @@ glade_command_set_project_target (GladeProject *project,
/******************************************************************************
*
- * This command sets the translation domain of a GladeProject
+ * This command sets can set different properties of a GladeProject
*
*****************************************************************************/
+typedef gchar *(*DescriptionNewFunc) (GladeCommand *);
+
typedef struct
{
GladeCommand parent;
- gchar *new_domain;
- gchar *old_domain;
-} GladeCommandDomain;
-GLADE_MAKE_COMMAND (GladeCommandDomain, glade_command_domain);
-#define GLADE_COMMAND_DOMAIN_TYPE (glade_command_domain_get_type ())
-#define GLADE_COMMAND_DOMAIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GLADE_COMMAND_DOMAIN_TYPE,
GladeCommandDomain))
-#define GLADE_COMMAND_DOMAIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GLADE_COMMAND_DOMAIN_TYPE,
GladeCommandDomainClass))
-#define GLADE_IS_COMMAND_DOMAIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GLADE_COMMAND_DOMAIN_TYPE))
-#define GLADE_IS_COMMAND_DOMAIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GLADE_COMMAND_DOMAIN_TYPE))
+ const gchar *property_id; /* Intern string */
+ DescriptionNewFunc description_new; /* Used to update command description */
+ GValue old_value;
+ GValue new_value;
+} GladeCommandProperty;
+
+GLADE_MAKE_COMMAND (GladeCommandProperty, glade_command_property);
+#define GLADE_COMMAND_PROPERTY_TYPE (glade_command_property_get_type ())
+#define GLADE_COMMAND_PROPERTY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GLADE_COMMAND_PROPERTY_TYPE,
GladeCommandProperty))
+#define GLADE_COMMAND_PROPERTY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k),
GLADE_COMMAND_PROPERTY_TYPE, GladeCommandPropertyClass))
+#define GLADE_IS_COMMAND_PROPERTY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GLADE_COMMAND_PROPERTY_TYPE))
+#define GLADE_IS_COMMAND_PROPERTY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GLADE_COMMAND_PROPERTY_TYPE))
+/* Return true if a == b, this could be exported in glade_utils */
static gboolean
-glade_command_domain_execute (GladeCommand *cmd)
+glade_command_property_compare (GValue *a, GValue *b)
{
- GladeCommandDomain *me = (GladeCommandDomain *) cmd;
+ if (G_VALUE_TYPE (a) != G_VALUE_TYPE (b))
+ {
+ g_warning ("Comparing a %s with a %s type is not supported",
+ G_VALUE_TYPE_NAME (a), G_VALUE_TYPE_NAME (b));
+ return FALSE;
+ }
- glade_project_set_translation_domain (cmd->priv->project, me->new_domain);
+ if (G_VALUE_HOLDS_STRING (a))
+ return g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0;
+ else if (G_VALUE_HOLDS_OBJECT (a))
+ return g_value_get_object (a) == g_value_get_object (b);
+ else if (G_VALUE_HOLDS_BOOLEAN (a))
+ return g_value_get_boolean (a) == g_value_get_boolean (b);
+ else if (G_VALUE_HOLDS_CHAR (a))
+ return g_value_get_schar (a) == g_value_get_schar (b);
+ else if (G_VALUE_HOLDS_DOUBLE (a))
+ return g_value_get_double (a) == g_value_get_double (b);
+ else if (G_VALUE_HOLDS_ENUM (a))
+ return g_value_get_enum (a) == g_value_get_enum (b);
+ else if (G_VALUE_HOLDS_FLAGS (a))
+ return g_value_get_flags (a) == g_value_get_flags (b);
+ else if (G_VALUE_HOLDS_FLOAT (a))
+ return g_value_get_float (a) == g_value_get_float (b);
+ else if (G_VALUE_HOLDS_GTYPE (a))
+ return g_value_get_gtype (a) == g_value_get_gtype (b);
+ else if (G_VALUE_HOLDS_INT (a))
+ return g_value_get_int (a) == g_value_get_int (b);
+ else if (G_VALUE_HOLDS_INT64 (a))
+ return g_value_get_int64 (a) == g_value_get_int64 (b);
+ else if (G_VALUE_HOLDS_LONG (a))
+ return g_value_get_long (a) == g_value_get_long (b);
+ else if (G_VALUE_HOLDS_POINTER (a))
+ return g_value_get_pointer (a) == g_value_get_pointer (b);
+ else if (G_VALUE_HOLDS_UCHAR (a))
+ return g_value_get_uchar (a) == g_value_get_uchar (b);
+ else if (G_VALUE_HOLDS_UINT (a))
+ return g_value_get_uint (a) == g_value_get_uint (b);
+ else if (G_VALUE_HOLDS_UINT64 (a))
+ return g_value_get_uint64 (a) == g_value_get_uint64 (b);
+ else if (G_VALUE_HOLDS_ULONG (a))
+ return g_value_get_ulong (a) == g_value_get_ulong (b);
+
+ g_warning ("%s type not supported", G_VALUE_TYPE_NAME (a));
+ return FALSE;
+}
+static gboolean
+glade_command_property_execute (GladeCommand *cmd)
+{
+ GladeCommandProperty *me = (GladeCommandProperty *) cmd;
+ g_object_set_property (G_OBJECT (cmd->priv->project), me->property_id, &me->new_value);
return TRUE;
}
static gboolean
-glade_command_domain_undo (GladeCommand *cmd)
+glade_command_property_undo (GladeCommand *cmd)
{
- GladeCommandDomain *me = (GladeCommandDomain *) cmd;
-
- glade_project_set_translation_domain (cmd->priv->project, me->old_domain);
-
+ GladeCommandProperty *me = (GladeCommandProperty *) cmd;
+ g_object_set_property (G_OBJECT (cmd->priv->project), me->property_id, &me->old_value);
return TRUE;
}
static void
-glade_command_domain_finalize (GObject *obj)
+glade_command_property_finalize (GObject *obj)
{
- GladeCommandDomain *me = (GladeCommandDomain *) obj;
+ GladeCommandProperty *me = (GladeCommandProperty *) obj;
- g_free (me->new_domain);
- g_free (me->old_domain);
+ /* NOTE: we do not free me->property_id because it is an intern string */
+ g_value_unset (&me->new_value);
+ g_value_unset (&me->old_value);
glade_command_finalize (obj);
}
static gboolean
-glade_command_domain_unifies (GladeCommand *this_cmd, GladeCommand *other_cmd)
+glade_command_property_unifies (GladeCommand *this_cmd, GladeCommand *other_cmd)
{
- GladeCommandDomain *me;
-
/* Do we unify with self ? */
if (!other_cmd)
{
- if (GLADE_IS_COMMAND_DOMAIN (this_cmd))
+ if (GLADE_IS_COMMAND_PROPERTY (this_cmd))
{
- me = (GladeCommandDomain *) this_cmd;
-
- return g_strcmp0 (me->new_domain, me->old_domain) == 0;
+ GladeCommandProperty *me = (GladeCommandProperty *) this_cmd;
+ return glade_command_property_compare (&me->new_value, &me->old_value);
}
- return FALSE;
+ else
+ return FALSE;
}
- if (GLADE_IS_COMMAND_DOMAIN (this_cmd) &&
- GLADE_IS_COMMAND_DOMAIN (other_cmd))
+ if (GLADE_IS_COMMAND_PROPERTY (this_cmd) && GLADE_IS_COMMAND_PROPERTY (other_cmd))
{
- return TRUE;
+ GladeCommandProperty *this = (GladeCommandProperty *) this_cmd;
+ GladeCommandProperty *other = (GladeCommandProperty *) other_cmd;
+
+ /* Intern strings can be compared by comparind the pointers */
+ return this->property_id == other->property_id;
}
return FALSE;
}
static void
-glade_command_domain_collapse (GladeCommand *this_cmd, GladeCommand *other_cmd)
+glade_command_property_update_description (GladeCommand *cmd)
+{
+ GladeCommandProperty *me = (GladeCommandProperty *) cmd;
+
+ g_free (cmd->priv->description);
+
+ if (me->description_new)
+ cmd->priv->description = me->description_new (cmd);
+ else
+ cmd->priv->description = g_strdup_printf (_("Setting project's %s property"),
+ me->property_id);
+}
+
+static void
+glade_command_property_collapse (GladeCommand *this_cmd, GladeCommand *other_cmd)
{
- GladeCommandDomain *this;
- GladeCommandDomain *other;
+ GladeCommandProperty *this;
+ GladeCommandProperty *other;
- g_return_if_fail (GLADE_IS_COMMAND_DOMAIN (this_cmd) &&
- GLADE_IS_COMMAND_DOMAIN (other_cmd));
+ g_return_if_fail (GLADE_IS_COMMAND_PROPERTY (this_cmd) &&
+ GLADE_IS_COMMAND_PROPERTY (other_cmd));
- this = GLADE_COMMAND_DOMAIN (this_cmd);
- other = GLADE_COMMAND_DOMAIN (other_cmd);
+ this = GLADE_COMMAND_PROPERTY (this_cmd);
+ other = GLADE_COMMAND_PROPERTY (other_cmd);
- g_free (this->new_domain);
- this->new_domain = g_strdup (other->new_domain);
+ g_return_if_fail (this->property_id == other->property_id);
- g_free (this_cmd->priv->description);
- this_cmd->priv->description =
- g_strdup_printf (_("Setting translation domain to '%s'"),
- this->new_domain);
+ g_value_copy (&other->new_value, &this->new_value);
+
+ glade_command_property_update_description (this_cmd);
}
/**
- * glade_command_set_project_domain:
+ * glade_command_set_project_property:
* @project: A #GladeProject
- * @domain: The translation domain for @project
+ * @description_new: function to create the command description.
+ * @property_id: property this command should use
+ * @new_value: the value to set @property_id
*
- * Sets @domain as the translation domain for @project.
+ * Sets @new_value as the @property_id property for @project.
*/
-void
-glade_command_set_project_domain (GladeProject *project,
- const gchar *domain)
+static void
+glade_command_set_project_property (GladeProject *project,
+ DescriptionNewFunc description_new,
+ const gchar *property_id,
+ GValue *new_value)
{
- GladeCommandDomain *me;
- const gchar *old_domain;
-
- g_return_if_fail (GLADE_IS_PROJECT (project));
-
- old_domain = glade_project_get_translation_domain (project);
+ GladeCommandProperty *me;
+ GValue old_value = G_VALUE_INIT;
- /* Do nothing if nothing has changed */
- if (g_strcmp0 (domain, old_domain) == 0)
- return;
+ g_value_init (&old_value, G_VALUE_TYPE (new_value));
+ g_object_get_property (G_OBJECT (project), property_id, &old_value);
+
+ if (glade_command_property_compare (&old_value, new_value))
+ {
+ g_value_unset (&old_value);
+ return;
+ }
- /* load up the command */
- me = g_object_new (GLADE_COMMAND_DOMAIN_TYPE, NULL);
+ me = g_object_new (GLADE_COMMAND_PROPERTY_TYPE, NULL);
GLADE_COMMAND (me)->priv->project = project;
- me->new_domain = g_strdup (domain);
- me->old_domain = g_strdup (old_domain);
+ me->description_new = description_new;
+ me->property_id = g_intern_static_string (property_id);
- GLADE_COMMAND (me)->priv->description =
- g_strdup_printf (_("Setting translation domain to '%s'"),
- me->new_domain);
+ /* move the old value to the comand struct */
+ me->old_value = old_value;
+
+ /* set new value */
+ g_value_init (&me->new_value, G_VALUE_TYPE (new_value));
+ g_value_copy (new_value, &me->new_value);
+ glade_command_property_update_description (GLADE_COMMAND (me));
+
glade_command_check_group (GLADE_COMMAND (me));
/* execute the command and push it on the stack if successful
* this sets the actual policy
*/
- if (glade_command_domain_execute (GLADE_COMMAND (me)))
+ if (glade_command_property_execute (GLADE_COMMAND (me)))
glade_project_push_undo (GLADE_COMMAND (me)->priv->project, GLADE_COMMAND (me));
else
g_object_unref (G_OBJECT (me));
}
-/******************************************************************************
- *
- * This command sets the template object in a GtkBuilder file
- *
- *****************************************************************************/
-
-typedef struct
-{
- GladeCommand parent;
- GladeWidget *old_template;
- GladeWidget *new_template;
-} GladeCommandTemplate;
-
-
-GLADE_MAKE_COMMAND (GladeCommandTemplate, glade_command_template);
-#define GLADE_COMMAND_TEMPLATE_TYPE (glade_command_template_get_type ())
-#define GLADE_COMMAND_TEMPLATE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o),
GLADE_COMMAND_TEMPLATE_TYPE, GladeCommandTemplate))
-#define GLADE_COMMAND_TEMPLATE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k),
GLADE_COMMAND_TEMPLATE_TYPE, GladeCommandTemplateClass))
-#define GLADE_IS_COMMAND_TEMPLATE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o),
GLADE_COMMAND_TEMPLATE_TYPE))
-#define GLADE_IS_COMMAND_TEMPLATE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GLADE_COMMAND_TEMPLATE_TYPE))
-
-static gboolean
-glade_command_template_execute (GladeCommand *cmd)
+/**
+ * glade_command_set_project_license:
+ * @project: A #GladeProject
+ * @license: License of @project
+ *
+ * Sets the license agreement for @project. It will be saved in the xml as comment.
+ */
+void
+glade_command_set_project_license (GladeProject *project, const gchar *license)
{
- GladeCommandTemplate *me = (GladeCommandTemplate *) cmd;
-
- glade_project_set_template (cmd->priv->project, me->new_template);
+ GValue new_value = G_VALUE_INIT;
+
+ g_return_if_fail (GLADE_IS_PROJECT (project));
+
+ g_value_init (&new_value, G_TYPE_STRING);
+ g_value_set_string (&new_value, license);
+
+ glade_command_set_project_property (project, NULL, "license", &new_value);
- return TRUE;
+ g_value_unset (&new_value);
}
-static gboolean
-glade_command_template_undo (GladeCommand *cmd)
+static gchar *
+gcp_resource_path_description_new (GladeCommand *cmd)
{
- GladeCommandTemplate *me = (GladeCommandTemplate *) cmd;
+ GladeCommandProperty *me = (GladeCommandProperty *) cmd;
- glade_project_set_template (cmd->priv->project, me->old_template);
-
- return TRUE;
+ return g_strdup_printf (_("Setting resource path to '%s'"),
+ g_value_get_string (&me->new_value));
}
-static void
-glade_command_template_finalize (GObject *obj)
+/**
+ * glade_command_set_project_resource_path:
+ * @project: A #GladeProject
+ * @path: path to load resources from.
+ *
+ * Sets a resource path @project.
+ */
+void
+glade_command_set_project_resource_path (GladeProject *project, const gchar *path)
{
- GladeCommandTemplate *me = (GladeCommandTemplate *) obj;
-
- if (me->new_template)
- g_object_unref (me->new_template);
-
- if (me->old_template)
- g_object_unref (me->old_template);
-
- glade_command_finalize (obj);
+ GValue new_value = G_VALUE_INIT;
+
+ g_return_if_fail (GLADE_IS_PROJECT (project));
+
+ g_value_init (&new_value, G_TYPE_STRING);
+ g_value_set_string (&new_value, path);
+
+ glade_command_set_project_property (project, gcp_resource_path_description_new,
+ "resource-path", &new_value);
+ g_value_unset (&new_value);
}
-static gboolean
-glade_command_template_unifies (GladeCommand *this_cmd, GladeCommand *other_cmd)
+static gchar *
+gcp_domain_description_new (GladeCommand *cmd)
{
- GladeCommandTemplate *me;
-
- /* Do we unify with self ? */
- if (!other_cmd)
- {
- if (GLADE_IS_COMMAND_TEMPLATE (this_cmd))
- {
- me = (GladeCommandTemplate *) this_cmd;
-
- return me->old_template == me->new_template;
- }
- return FALSE;
- }
+ GladeCommandProperty *me = (GladeCommandProperty *) cmd;
- if (GLADE_IS_COMMAND_TEMPLATE (this_cmd) &&
- GLADE_IS_COMMAND_TEMPLATE (other_cmd))
- {
- return TRUE;
- }
-
- return FALSE;
+ return g_strdup_printf (_("Setting translation domain to '%s'"),
+ g_value_get_string (&me->new_value));
}
-static void
-glade_command_template_collapse (GladeCommand *this_cmd, GladeCommand *other_cmd)
+/**
+ * glade_command_set_project_domain:
+ * @project: A #GladeProject
+ * @domain: The translation domain for @project
+ *
+ * Sets @domain as the translation domain for @project.
+ */
+void
+glade_command_set_project_domain (GladeProject *project,
+ const gchar *domain)
{
- GladeCommandTemplate *this;
- GladeCommandTemplate *other;
-
- g_return_if_fail (GLADE_IS_COMMAND_TEMPLATE (this_cmd) &&
- GLADE_IS_COMMAND_TEMPLATE (other_cmd));
-
- this = GLADE_COMMAND_TEMPLATE (this_cmd);
- other = GLADE_COMMAND_TEMPLATE (other_cmd);
-
- if (this->new_template)
- g_object_unref (this->new_template);
-
- this->new_template = other->new_template;
-
- if (this->new_template)
- g_object_ref (this->new_template);
+ GValue new_value = G_VALUE_INIT;
+
+ g_return_if_fail (GLADE_IS_PROJECT (project));
+
+ g_value_init (&new_value, G_TYPE_STRING);
+ g_value_set_string (&new_value, domain);
+
+ glade_command_set_project_property (project, gcp_domain_description_new,
+ "translation-domain", &new_value);
+ g_value_unset (&new_value);
+}
- if (this->new_template == NULL && this->old_template != NULL)
- {
- g_free (this_cmd->priv->description);
- this_cmd->priv->description =
- g_strdup_printf (_("Unsetting widget '%s' as template"),
- glade_widget_get_name (this->old_template));
- }
- else if (this->new_template != NULL)
- {
- g_free (this_cmd->priv->description);
- this_cmd->priv->description =
- g_strdup_printf (_("Setting widget '%s' as template"),
- glade_widget_get_name (this->new_template));
- }
+static gchar *
+gcp_template_description_new (GladeCommand *cmd)
+{
+ GladeCommandProperty *me = (GladeCommandProperty *) cmd;
+ GObject *new_template = g_value_get_object (&me->new_value);
+ GObject *old_template = g_value_get_object (&me->old_value);
+
+ if (new_template == NULL && old_template != NULL)
+ return g_strdup_printf (_("Unsetting widget '%s' as template"),
+ glade_widget_get_name (GLADE_WIDGET (old_template)));
+ else if (new_template != NULL)
+ return g_strdup_printf (_("Setting widget '%s' as template"),
+ glade_widget_get_name (GLADE_WIDGET (new_template)));
+ else
+ return g_strdup (_("Unsetting template"));
}
/**
@@ -2930,48 +2989,14 @@ void
glade_command_set_project_template (GladeProject *project,
GladeWidget *widget)
{
- GladeCommandTemplate *me;
- GladeWidget *old_template;
-
+ GValue new_value = G_VALUE_INIT;
+
g_return_if_fail (GLADE_IS_PROJECT (project));
- g_return_if_fail (widget == NULL || GLADE_IS_WIDGET (widget));
-
- old_template = glade_project_get_template (project);
-
- if (widget == old_template)
- {
- /* Just do nothing if there's nothing to do */
- return;
- }
-
- /* load up the command */
- me = g_object_new (GLADE_COMMAND_TEMPLATE_TYPE, NULL);
- GLADE_COMMAND (me)->priv->project = project;
-
- if (old_template)
- me->old_template = g_object_ref (old_template);
-
- if (widget)
- {
- me->new_template = g_object_ref (widget);
-
- GLADE_COMMAND (me)->priv->description =
- g_strdup_printf (_("Setting widget '%s' as template"),
- glade_widget_get_name (widget));
- }
- else
- GLADE_COMMAND (me)->priv->description =
- g_strdup_printf (_("Unsetting widget '%s' as template"),
- glade_widget_get_name (me->old_template));
-
- glade_command_check_group (GLADE_COMMAND (me));
-
- /* execute the command and push it on the stack if successful
- * this sets the actual policy
- */
- if (glade_command_template_execute (GLADE_COMMAND (me)))
- glade_project_push_undo (GLADE_COMMAND (me)->priv->project, GLADE_COMMAND (me));
- else
- g_object_unref (G_OBJECT (me));
+
+ g_value_init (&new_value, G_TYPE_OBJECT);
+ g_value_set_object (&new_value, widget);
+
+ glade_command_set_project_property (project, gcp_template_description_new,
+ "template", &new_value);
+ g_value_unset (&new_value);
}
-
diff --git a/gladeui/glade-command.h b/gladeui/glade-command.h
index 8fb6705..35ac236 100644
--- a/gladeui/glade-command.h
+++ b/gladeui/glade-command.h
@@ -91,6 +91,12 @@ void glade_command_set_project_domain (GladeProject *project,
void glade_command_set_project_template(GladeProject *project,
GladeWidget *widget);
+void glade_command_set_project_license (GladeProject *project,
+ const gchar *license);
+
+void glade_command_set_project_resource_path (GladeProject *project,
+ const gchar *path);
+
/************************** properties *********************************/
void glade_command_set_property_enabled(GladeProperty *property,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]