GitLab repository storage has been migrated to hashed layout. Please contact Infrastructure team if you notice any issues with repositories or hooks.

Commit 62be2fff authored by Sven Neumann's avatar Sven Neumann Committed by Sven Neumann

small cleanup.

2002-12-01  Sven Neumann  <sven@gimp.org>

	* app/config/gimpconfig-blurbs.h: small cleanup.

	* app/config/gimpconfig-serialize.[ch]: export more functionality.

	* app/config/gimpconfig-dump.c: added some code to dump a
	commented version of the system-wide gimprc with default values.

2002-12-01  Sven Neumann  <neo@wintermute>

	* libgimp/Makefile.am (IGNORE_HFILES): ignore gimpmiscui.h.
parent acb7bac0
2002-12-01 Sven Neumann <sven@gimp.org>
* app/config/gimpconfig-blurbs.h: small cleanup.
* app/config/gimpconfig-serialize.[ch]: export more functionality.
* app/config/gimpconfig-dump.c: added some code to dump a
commented version of the system-wide gimprc with default values.
2002-12-01 Sven Neumann <sven@gimp.org>
* app/core/core-types.h: prefix PIXELS and POINTS with GIMP
......
......@@ -171,9 +171,7 @@
#define DEFAULT_UNIT_BLURB \
"Set the default unit for new images and for the File/New dialog. " \
"This units will be used for coordinate display when not in dot-for-dot " \
"mode. The default unit can be one of inches , millimeters, points or " \
"picas or the identifier of one of the units defined in your user units " \
"database."
"mode."
#define DEFAULT_XRESOLUTION_BLURB \
"Set the default horizontal resolution for new images and for the " \
......@@ -185,9 +183,7 @@
#define DEFAULT_RESOLUTION_UNIT_BLURB \
"Set the units for the display of the default resolution in the " \
"File/New dialog. The default resolution units can be one of inches, " \
"millimeters, points or picas or the identifier of one of the units " \
"defined in your user unit database. The default is inches."
"File/New dialog."
#define MONITOR_XRESOLUTION_BLURB \
"Set the monitor's horizontal resolution, in dots per inch. If set to " \
......@@ -226,7 +222,8 @@
"%h image height in pixels\n" \
"%H image height in real-world units\n" \
"%u unit symbol\n" \
"%U unit abbreviation\n"
"%U unit abbreviation\n\n"
#define IMAGE_STATUS_FORMAT_BLURB \
"Set the text to appear in image window status bars. See image-title-format " \
......
......@@ -23,6 +23,9 @@
#include "stdlib.h"
#include "string.h"
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <glib-object.h>
......@@ -32,24 +35,44 @@
#include "config-types.h"
#include "gimpconfig.h"
#include "gimpconfig-params.h"
#include "gimpconfig-serialize.h"
#include "gimpconfig-types.h"
#include "gimprc.h"
static gint dump_system_gimprc (void);
static gchar * dump_get_comment (GParamSpec *param_spec);
int
main (int argc,
char *argv[])
{
GObject *rc;
g_type_init ();
if (argc > 1)
{
if (strcmp (argv[1], "--system-gimprc") == 0)
{
return dump_system_gimprc ();
}
else
{
g_printerr ("%s -- GimpConfig dump utility\n\n", argv[0]);
g_printerr ("Options:\n"
" --system-gimprc create a commented system gimprc\n");
return EXIT_FAILURE;
}
}
rc = g_object_new (GIMP_TYPE_RC, NULL);
g_print ("# Dump of the GIMP default configuration\n\n");
gimp_config_serialize_properties (rc, 1, 0);
g_print ("\n");
g_object_unref (rc);
......@@ -58,6 +81,192 @@ main (int argc,
}
static gint
dump_system_gimprc (void)
{
GObjectClass *klass;
GParamSpec **property_specs;
GObject *rc;
GString *str;
guint n_property_specs;
guint i;
str = g_string_new
("# This is the system-wide gimprc file. Any change made in this file\n"
"# will affect all users of this system, provided that they are not\n"
"# overriding the default values in their personal gimprc file.\n"
"#\n"
"# Lines that start with a '#' are comments.\n"
"# Blank lines are ignored.\n"
"\n"
"# The variable gimp_dir is set to either the interned value\n"
"# @gimpdir@ or the environment variable GIMP_DIRECTORY. If\n"
"# the path in GIMP_DIRECTORY is relative, it is considered\n"
"# relative to your home directory.\n"
"\n"
"(prefix \"@prefix@\"\n"
"(exec_prefix \"@exec_prefix@\")\n"
"(gimp_data_dir \"@gimpdatadir@\")\n"
"(gimp_plugin_dir \"@gimpplugindir@\")\n"
"\n");
write (1, str->str, str->len);
rc = g_object_new (GIMP_TYPE_RC, NULL);
klass = G_OBJECT_GET_CLASS (rc);
property_specs = g_object_class_list_properties (klass, &n_property_specs);
for (i = 0; i < n_property_specs; i++)
{
GParamSpec *prop_spec = property_specs[i];
gchar *comment;
if (! (prop_spec->flags & GIMP_PARAM_SERIALIZE))
continue;
g_string_assign (str, "");
comment = dump_get_comment (prop_spec);
if (comment)
{
gimp_config_serialize_comment (str, comment);
g_free (comment);
g_string_append (str, "#\n");
}
g_string_append (str, "# ");
if (gimp_config_serialize_property (rc, prop_spec, str, TRUE))
{
g_string_append (str, "\n");
write (1, str->str, str->len);
}
else if (prop_spec->value_type != G_TYPE_STRING)
{
g_warning ("couldn't serialize property %s::%s of type %s",
g_type_name (G_TYPE_FROM_INSTANCE (rc)),
prop_spec->name,
g_type_name (prop_spec->value_type));
}
}
g_free (property_specs);
g_object_unref (rc);
g_string_free (str, TRUE);
return EXIT_SUCCESS;
}
static gchar *
dump_get_comment (GParamSpec *param_spec)
{
GType type;
const gchar *blurb;
const gchar *values = NULL;
blurb = g_param_spec_get_blurb (param_spec);
if (!blurb)
{
g_warning ("FIXME: Property '%s' has no blurb.", param_spec->name);
blurb = param_spec->name;
}
type = param_spec->value_type;
if (g_type_is_a (type, GIMP_TYPE_COLOR))
{
values = "The color is specified as a list of doubles (r g b a).";
}
else if (g_type_is_a (type, GIMP_TYPE_MEMSIZE))
{
values =
"The integer size can contain a suffix of 'B', 'K', 'M' or 'G' which "
"makes GIMP interpret the size as being specified in bytes, kilobytes, "
"megabytes or gigabytes. If no suffix is specified the size defaults "
"to being specified in kilobytes.";
}
else if (g_type_is_a (type, GIMP_TYPE_PATH))
{
values = "This is a colon-separated list of directories to search.";
}
else if (g_type_is_a (type, GIMP_TYPE_UNIT))
{
values =
"The unit can be one inches, millimeters, points or picas plus "
"those in your user units database.";
}
else
{
switch (G_TYPE_FUNDAMENTAL (type))
{
case G_TYPE_BOOLEAN:
values = "Possible values are yes and no.";
break;
case G_TYPE_INT:
case G_TYPE_UINT:
case G_TYPE_LONG:
case G_TYPE_ULONG:
values = "This is an integer value.";
break;
case G_TYPE_FLOAT:
case G_TYPE_DOUBLE:
values = "This is a float value.";
break;
case G_TYPE_STRING:
values = "This is a string value.";
break;
case G_TYPE_ENUM:
{
GEnumClass *enum_class;
GEnumValue *enum_value;
GString *str;
gint i;
enum_class = g_type_class_peek (type);
str = g_string_new (blurb);
g_string_append (str, " Possible values are ");
for (i = 0, enum_value = enum_class->values;
i < enum_class->n_values;
i++, enum_value++)
{
g_string_append (str, enum_value->value_nick);
switch (enum_class->n_values - i)
{
case 1:
g_string_append_c (str, '.');
break;
case 2:
g_string_append (str, " and ");
break;
default:
g_string_append (str, ", ");
break;
}
}
return g_string_free (str, FALSE);
}
break;
default:
break;
}
}
if (!values)
g_warning ("FIXME: Can't tell anything about a %s.", g_type_name (type));
return g_strdup_printf ("%s %s", blurb, values);
}
/* some dummy funcs so we can properly link this beast */
const gchar *
......
......@@ -43,15 +43,9 @@
#include "gimpconfig-utils.h"
static gboolean gimp_config_serialize_property (GObject *object,
GParamSpec *param_spec,
GString *str,
gboolean escaped);
static void gimp_config_serialize_comment (GString *str,
const gchar *comment);
static void serialize_unknown_token (const gchar *key,
const gchar *value,
gpointer data);
static void serialize_unknown_token (const gchar *key,
const gchar *value,
gpointer data);
/**
......@@ -71,7 +65,6 @@ gimp_config_serialize_properties (GObject *object,
guint n_property_specs;
guint i;
GString *str;
gboolean property_written = FALSE;
g_return_val_if_fail (G_IS_OBJECT (object), FALSE);
......@@ -86,33 +79,19 @@ gimp_config_serialize_properties (GObject *object,
for (i = 0; i < n_property_specs; i++)
{
GParamSpec *prop_spec;
const gchar *blurb;
prop_spec = property_specs[i];
GParamSpec *prop_spec = property_specs[i];
if (! (prop_spec->flags & GIMP_PARAM_SERIALIZE))
continue;
if (property_written)
g_string_assign (str, "\n");
else
g_string_assign (str, "");
if ((blurb = g_param_spec_get_blurb (prop_spec)) != NULL)
gimp_config_serialize_comment (str, blurb);
gimp_config_string_indent (str, indent_level);
g_string_append_printf (str, "(%s ", prop_spec->name);
if (gimp_config_serialize_property (object, prop_spec, str, TRUE))
{
g_string_append (str, ")\n");
property_written = TRUE;
{
if (write (fd, str->str, str->len) == -1)
return FALSE;
g_string_assign (str, "\n");
}
else if (prop_spec->value_type != G_TYPE_STRING)
{
......@@ -120,6 +99,8 @@ gimp_config_serialize_properties (GObject *object,
g_type_name (G_TYPE_FROM_INSTANCE (object)),
prop_spec->name,
g_type_name (prop_spec->value_type));
g_string_assign (str, "");
}
}
......@@ -168,7 +149,6 @@ gimp_config_serialize_changed_properties (GObject *new,
for (list = diff; list; list = g_list_next (list))
{
GParamSpec *prop_spec;
const gchar *blurb;
GValue new_value = { 0, };
prop_spec = (GParamSpec *) list->data;
......@@ -182,9 +162,6 @@ gimp_config_serialize_changed_properties (GObject *new,
else
g_string_assign (str, "");
if ((blurb = g_param_spec_get_blurb (prop_spec)) != NULL)
gimp_config_serialize_comment (str, blurb);
gimp_config_string_indent (str, indent_level);
g_string_append_printf (str, "(%s ", prop_spec->name);
......@@ -214,6 +191,75 @@ gimp_config_serialize_changed_properties (GObject *new,
return TRUE;
}
gboolean
gimp_config_serialize_property (GObject *object,
GParamSpec *param_spec,
GString *str,
gboolean escaped)
{
GTypeClass *owner_class;
GimpConfigInterface *config_iface;
GimpConfigInterface *parent_iface;
GValue value = { 0, };
if (! (param_spec->flags & GIMP_PARAM_SERIALIZE))
return FALSE;
g_string_append_printf (str, "(%s ", param_spec->name);
g_value_init (&value, param_spec->value_type);
g_object_get_property (object, param_spec->name, &value);
owner_class = g_type_class_peek (param_spec->owner_type);
config_iface = g_type_interface_peek (owner_class,
GIMP_TYPE_CONFIG_INTERFACE);
/* We must call deserialize_property() *only* if the *exact* class
* which implements it is param_spec->owner_type's class.
*
* Therefore, we ask param_spec->owner_type's immediate parent class
* for it's GimpConfigInterface and check if we get a different pointer.
*
* (if the pointers are the same, param_spec->owner_type's
* GimpConfigInterface is inherited from one of it's parent classes
* and thus not able to handle param_spec->owner_type's properties).
*/
if (config_iface)
{
GTypeClass *owner_parent_class;
owner_parent_class = g_type_class_peek_parent (owner_class),
parent_iface = g_type_interface_peek (owner_parent_class,
GIMP_TYPE_CONFIG_INTERFACE);
}
if (config_iface &&
config_iface != parent_iface && /* see comment above */
config_iface->serialize_property)
{
if (! config_iface->serialize_property (object,
param_spec->param_id,
(const GValue *) &value,
param_spec,
str))
return FALSE;
}
else
{
if (! gimp_config_serialize_value (&value, str, escaped))
return FALSE;
}
g_value_unset (&value);
g_string_append (str, ")\n");
return TRUE;
}
/**
* gimp_config_serialize_value:
* @value: a #GValue.
......@@ -329,7 +375,8 @@ gimp_config_serialize_value (const GValue *value,
{
g_string_append (str, " ");
if (! gimp_config_serialize_value (g_value_array_get_nth (array, i),
if (! gimp_config_serialize_value (g_value_array_get_nth (array,
i),
str, escaped))
return FALSE;
}
......@@ -382,68 +429,7 @@ gimp_config_serialize_unknown_tokens (GObject *object,
return (write (fd, str->str, str->len) != -1);
}
static gboolean
gimp_config_serialize_property (GObject *object,
GParamSpec *param_spec,
GString *str,
gboolean escaped)
{
GTypeClass *owner_class;
GimpConfigInterface *gimp_config_iface;
GimpConfigInterface *parent_iface;
GValue value = { 0, };
gboolean retval;
g_value_init (&value, param_spec->value_type);
g_object_get_property (object, param_spec->name, &value);
owner_class = g_type_class_peek (param_spec->owner_type);
gimp_config_iface = g_type_interface_peek (owner_class,
GIMP_TYPE_CONFIG_INTERFACE);
/* We must call deserialize_property() *only* if the *exact* class
* which implements it is param_spec->owner_type's class.
*
* Therefore, we ask param_spec->owner_type's immediate parent class
* for it's GimpConfigInterface and check if we get a different pointer.
*
* (if the pointers are the same, param_spec->owner_type's
* GimpConfigInterface is inherited from one of it's parent classes
* and thus not able to handle param_spec->owner_type's properties).
*/
if (gimp_config_iface)
{
GTypeClass *owner_parent_class;
owner_parent_class = g_type_class_peek_parent (owner_class),
parent_iface = g_type_interface_peek (owner_parent_class,
GIMP_TYPE_CONFIG_INTERFACE);
}
if (gimp_config_iface &&
gimp_config_iface != parent_iface && /* see comment above */
gimp_config_iface->serialize_property &&
gimp_config_iface->serialize_property (object,
param_spec->param_id,
(const GValue *) &value,
param_spec,
str))
{
retval = TRUE;
}
else
{
retval = gimp_config_serialize_value (&value, str, escaped);
}
g_value_unset (&value);
return retval;
}
static void
void
gimp_config_serialize_comment (GString *str,
const gchar *comment)
{
......@@ -474,8 +460,6 @@ gimp_config_serialize_comment (GString *str,
comment += i;
len -= i;
}
g_string_append_printf (str, "#\n");
}
static void
......
......@@ -33,8 +33,15 @@ gboolean gimp_config_serialize_changed_properties (GObject *new,
gboolean gimp_config_serialize_unknown_tokens (GObject *object,
gint fd,
gint indent_level);
gboolean gimp_config_serialize_property (GObject *object,
GParamSpec *param_spec,
GString *str,
gboolean escaped);
gboolean gimp_config_serialize_value (const GValue *value,
GString *str,
gboolean escaped);
void gimp_config_serialize_comment (GString *str,
const gchar *comment);
#endif /* __GIMP_CONFIG_SERIALIZE_H__ */
......@@ -43,15 +43,9 @@
#include "gimpconfig-utils.h"
static gboolean gimp_config_serialize_property (GObject *object,
GParamSpec *param_spec,
GString *str,
gboolean escaped);
static void gimp_config_serialize_comment (GString *str,
const gchar *comment);
static void serialize_unknown_token (const gchar *key,
const gchar *value,
gpointer data);
static void serialize_unknown_token (const gchar *key,
const gchar *value,
gpointer data);
/**
......@@ -71,7 +65,6 @@ gimp_config_serialize_properties (GObject *object,
guint n_property_specs;
guint i;
GString *str;
gboolean property_written = FALSE;
g_return_val_if_fail (G_IS_OBJECT (object), FALSE);
......@@ -86,33 +79,19 @@ gimp_config_serialize_properties (GObject *object,
for (i = 0; i < n_property_specs; i++)
{
GParamSpec *prop_spec;
const gchar *blurb;
prop_spec = property_specs[i];
GParamSpec *prop_spec = property_specs[i];
if (! (prop_spec->flags & GIMP_PARAM_SERIALIZE))
continue;
if (property_written)
g_string_assign (str, "\n");
else
g_string_assign (str, "");
if ((blurb = g_param_spec_get_blurb (prop_spec)) != NULL)
gimp_config_serialize_comment (str, blurb);
gimp_config_string_indent (str, indent_level);
g_string_append_printf (str, "(%s ", prop_spec->name);
if (gimp_config_serialize_property (object, prop_spec, str, TRUE))
{
g_string_append (str, ")\n");
property_written = TRUE;
{
if (write (fd, str->str, str->len) == -1)
return FALSE;
g_string_assign (str, "\n");
}
else if (prop_spec->value_type != G_TYPE_STRING)
{
......@@ -120,6 +99,8 @@ gimp_config_serialize_properties (GObject *object,
g_type_name (G_TYPE_FROM_INSTANCE (object)),
prop_spec->name,
g_type_name (prop_spec->value_type));
g_string_assign (str, "");
}
}
......@@ -168,7 +149,6 @@ gimp_config_serialize_changed_properties (GObject *new,
for (list = diff; list; list = g_list_next (list))
{
GParamSpec *prop_spec;
const gchar *blurb;
GValue new_value = { 0, };
prop_spec = (GParamSpec *) list->data;
......@@ -182,9 +162,6 @@ gimp_config_serialize_changed_properties (GObject *new,
else
g_string_assign (str, "");
if ((blurb = g_param_spec_get_blurb (prop_spec)) != NULL)
gimp_config_serialize_comment (str, blurb);
gimp_config_string_indent (str, indent_level);
g_string_append_printf (str, "(%s ", prop_spec->name);
......@@ -214,6 +191,75 @@ gimp_config_serialize_changed_properties (GObject *new,
return TRUE;
}
gboolean
gimp_config_serialize_property (GObject *object,
GParamSpec *param_spec,
GString *str,
gboolean escaped)
{
GTypeClass *owner_class;
GimpConfigInterface *config_iface;
GimpConfigInterface *parent_iface;
GValue value = { 0, };
if (! (param_spec->flags & GIMP_PARAM_SERIALIZE))
return FALSE;
g_string_append_printf (str, "(%s ", param_spec->name);
g_value_init (&value, param_spec->value_type);
g_object_get_property (object, param_spec->name, &value);
owner_class = g_type_class_peek (param_spec->owner_type);
config_iface = g_type_interface_peek (owner_class,
GIMP_TYPE_CONFIG_INTERFACE);
/* We must call deserialize_property() *only* if the *exact* class
* which implements it is param_spec->owner_type's class.
*
* Therefore, we ask param_spec->owner_type's immediate parent class
* for it's GimpConfigInterface and check if we get a different pointer.
*
* (if the pointers are the same, param_spec->owner_type's
* GimpConfigInterface is inherited from one of it's parent classes
* and thus not able to handle param_spec->owner_type's properties).
*/
if (config_iface)
{
GTypeClass *owner_parent_class;