Blame gladeui/glade-builtins.c

Packit 1e8aac
/*
Packit 1e8aac
 * glade-clipboard.c - An object for handling Cut/Copy/Paste.
Packit 1e8aac
 *
Packit 1e8aac
 * Copyright (C) 2005 The GNOME Foundation.
Packit 1e8aac
 *
Packit 1e8aac
 * Author(s):
Packit 1e8aac
 *      Tristan Van Berkom <tvb@gnome.org>
Packit 1e8aac
 *
Packit 1e8aac
 * This program is free software; you can redistribute it and/or
Packit 1e8aac
 * modify it under the terms of the GNU General Public License
Packit 1e8aac
 * as published by the Free Software Foundation; either version 2
Packit 1e8aac
 * of the License, or (at your option) any later version.
Packit 1e8aac
 *
Packit 1e8aac
 * This program is distributed in the hope that it will be useful,
Packit 1e8aac
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 1e8aac
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 1e8aac
 * GNU General Public License for more details.
Packit 1e8aac
 *
Packit 1e8aac
 * You should have received a copy of the GNU General Public License
Packit 1e8aac
 * along with this program; if not, write to the Free Software
Packit 1e8aac
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
Packit 1e8aac
 * USA.
Packit 1e8aac
 */
Packit 1e8aac
Packit 1e8aac
#ifdef HAVE_CONFIG_H
Packit 1e8aac
#include <config.h>
Packit 1e8aac
#endif
Packit 1e8aac
Packit 1e8aac
#include <glib-object.h>
Packit 1e8aac
#include <glib/gi18n-lib.h>
Packit 1e8aac
#include <string.h>
Packit 1e8aac
#include "glade-builtins.h"
Packit 1e8aac
#include "glade-displayable-values.h"
Packit 1e8aac
Packit 1e8aac
Packit 1e8aac
struct _GladeParamSpecObjects
Packit 1e8aac
{
Packit 1e8aac
  GParamSpec parent_instance;
Packit 1e8aac
Packit 1e8aac
  GType type;                   /* Object or interface type accepted
Packit 1e8aac
                                 * in this object list.
Packit 1e8aac
                                 */
Packit 1e8aac
};
Packit 1e8aac
Packit 1e8aac
typedef struct _GladeStockItem
Packit 1e8aac
{
Packit 1e8aac
  gchar *value_name;
Packit 1e8aac
  gchar *value_nick;
Packit 1e8aac
  gchar *clean_name;
Packit 1e8aac
  gint value;
Packit 1e8aac
} GladeStockItem;
Packit 1e8aac
Packit 1e8aac
Packit 1e8aac
/************************************************************
Packit 1e8aac
 *      Auto-generate the enum type for stock properties    *
Packit 1e8aac
 ************************************************************/
Packit 1e8aac
Packit 1e8aac
/* Hard-coded list of stock images (and displayable translations) from gtk+ that are not stock "items" */
Packit 1e8aac
static const gchar *builtin_stock_images[] = {
Packit 1e8aac
  "gtk-dialog-authentication",  /* GTK_STOCK_DIALOG_AUTHENTICATION */
Packit 1e8aac
  "gtk-dnd",                    /* GTK_STOCK_DND */
Packit 1e8aac
  "gtk-dnd-multiple",           /* GTK_STOCK_DND_MULTIPLE */
Packit 1e8aac
  "gtk-color-picker",           /* GTK_STOCK_COLOR_PICKER */
Packit 1e8aac
  "gtk-directory",              /* GTK_STOCK_DIRECTORY */
Packit 1e8aac
  "gtk-file",                   /* GTK_STOCK_FILE */
Packit 1e8aac
  "gtk-missing-image"           /* GTK_STOCK_MISSING_IMAGE */
Packit 1e8aac
};
Packit 1e8aac
Packit 1e8aac
static const gchar *builtin_stock_displayables[] = {
Packit 1e8aac
  /* GTK_STOCK_DIALOG_AUTHENTICATION */
Packit 1e8aac
  N_("Authentication"),
Packit 1e8aac
  /* GTK_STOCK_DND */
Packit 1e8aac
  N_("Drag and Drop"),
Packit 1e8aac
  /* GTK_STOCK_DND_MULTIPLE */
Packit 1e8aac
  N_("Drag and Drop Multiple"),
Packit 1e8aac
  /* GTK_STOCK_COLOR_PICKER */
Packit 1e8aac
  N_("Color Picker"),
Packit 1e8aac
  /* GTK_STOCK_DIRECTORY */
Packit 1e8aac
  N_("Directory"),
Packit 1e8aac
  /* GTK_STOCK_FILE */
Packit 1e8aac
  N_("File"),
Packit 1e8aac
  /* GTK_STOCK_MISSING_IMAGE */
Packit 1e8aac
  N_("Missing Image")
Packit 1e8aac
};
Packit 1e8aac
Packit 1e8aac
static GSList *stock_prefixs = NULL;
Packit 1e8aac
static gboolean stock_prefixs_done = FALSE;
Packit 1e8aac
Packit 1e8aac
/* FIXME: func needs documentation
Packit 1e8aac
 */
Packit 1e8aac
void
Packit 1e8aac
glade_standard_stock_append_prefix (const gchar * prefix)
Packit 1e8aac
{
Packit 1e8aac
  if (stock_prefixs_done)
Packit 1e8aac
    {
Packit 1e8aac
      g_warning
Packit 1e8aac
          ("glade_standard_stock_append_prefix should be used in catalog init-function");
Packit 1e8aac
      return;
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  stock_prefixs = g_slist_append (stock_prefixs, g_strdup (prefix));
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static GladeStockItem *
Packit 1e8aac
new_from_values (const gchar * name, const gchar * nick, gint value)
Packit 1e8aac
{
Packit 1e8aac
  GladeStockItem *new_gsi = NULL;
Packit 1e8aac
  gchar *clean_name;
Packit 1e8aac
  size_t len = 0;
Packit 1e8aac
  guint i = 0;
Packit 1e8aac
  guint j = 0;
Packit 1e8aac
Packit 1e8aac
  new_gsi = (GladeStockItem *) g_malloc0 (sizeof (GladeStockItem));
Packit 1e8aac
Packit 1e8aac
  new_gsi->value_name = g_strdup (name);
Packit 1e8aac
  new_gsi->value_nick = g_strdup (nick);
Packit 1e8aac
  new_gsi->value = value;
Packit 1e8aac
Packit 1e8aac
Packit 1e8aac
  clean_name = g_strdup (name);
Packit 1e8aac
  len = strlen (clean_name);
Packit 1e8aac
Packit 1e8aac
  while (i + j <= len)
Packit 1e8aac
    {
Packit 1e8aac
      if (clean_name[i + j] == '_')
Packit 1e8aac
        j++;
Packit 1e8aac
Packit 1e8aac
      clean_name[i] = clean_name[i + j];
Packit 1e8aac
      i++;
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  new_gsi->clean_name = g_utf8_collate_key (clean_name, i - j);
Packit 1e8aac
Packit 1e8aac
  g_free (clean_name);
Packit 1e8aac
Packit 1e8aac
  return new_gsi;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
Packit 1e8aac
static gint
Packit 1e8aac
compare_two_gsi (gconstpointer a, gconstpointer b)
Packit 1e8aac
{
Packit 1e8aac
  GladeStockItem *gsi1 = (GladeStockItem *) a;
Packit 1e8aac
  GladeStockItem *gsi2 = (GladeStockItem *) b;
Packit 1e8aac
Packit 1e8aac
  return strcmp (gsi1->clean_name, gsi2->clean_name);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static GArray *
Packit 1e8aac
list_stock_items (gboolean include_images)
Packit 1e8aac
{
Packit 1e8aac
  GtkStockItem item;
Packit 1e8aac
  GSList *l = NULL, *stock_list = NULL, *p = NULL;
Packit 1e8aac
  gchar *stock_id = NULL, *prefix = NULL;
Packit 1e8aac
  gint stock_enum = 0, i = 0;
Packit 1e8aac
  GEnumValue value;
Packit 1e8aac
  GArray *values = NULL;
Packit 1e8aac
  GladeStockItem *gsi;
Packit 1e8aac
  GSList *gsi_list = NULL;
Packit 1e8aac
  GSList *gsi_list_list = NULL;
Packit 1e8aac
Packit 1e8aac
  if (gdk_display_get_default () == NULL)
Packit 1e8aac
    {
Packit 1e8aac
      values = g_array_sized_new (TRUE, TRUE, sizeof (GEnumValue), 1);
Packit 1e8aac
Packit 1e8aac
      value.value = 0;
Packit 1e8aac
      value.value_name = "dummy";
Packit 1e8aac
      value.value_nick = "Dummy";
Packit 1e8aac
      g_array_append_val (values, value);
Packit 1e8aac
Packit 1e8aac
      return values;
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
Packit 1e8aac
  stock_list = g_slist_reverse (gtk_stock_list_ids ());
Packit 1e8aac
G_GNUC_END_IGNORE_DEPRECATIONS
Packit 1e8aac
Packit 1e8aac
  values = g_array_sized_new (TRUE, TRUE, sizeof (GEnumValue),
Packit 1e8aac
                              g_slist_length (stock_list));
Packit 1e8aac
Packit 1e8aac
  /* We want gtk+ stock items to appear first */
Packit 1e8aac
  if ((stock_prefixs && strcmp (stock_prefixs->data, "gtk-")) ||
Packit 1e8aac
      stock_prefixs == NULL)
Packit 1e8aac
    stock_prefixs = g_slist_prepend (stock_prefixs, g_strdup ("gtk-"));
Packit 1e8aac
Packit 1e8aac
  for (p = stock_prefixs; p; p = g_slist_next (p))
Packit 1e8aac
    {
Packit 1e8aac
      prefix = p->data;
Packit 1e8aac
Packit 1e8aac
      for (l = stock_list; l; l = g_slist_next (l))
Packit 1e8aac
        {
Packit 1e8aac
          stock_id = l->data;
Packit 1e8aac
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
Packit 1e8aac
          if (g_str_has_prefix (stock_id, prefix) == FALSE ||
Packit 1e8aac
              gtk_stock_lookup (stock_id, &item) == FALSE)
Packit 1e8aac
            continue;
Packit 1e8aac
G_GNUC_END_IGNORE_DEPRECATIONS
Packit 1e8aac
Packit 1e8aac
          gsi = new_from_values (item.label, stock_id, stock_enum++);
Packit 1e8aac
          gsi_list =
Packit 1e8aac
              g_slist_insert_sorted (gsi_list, gsi,
Packit 1e8aac
                                     (GCompareFunc) compare_two_gsi);
Packit 1e8aac
        }
Packit 1e8aac
Packit 1e8aac
      gsi_list_list = g_slist_append (gsi_list_list, gsi_list);
Packit 1e8aac
      gsi_list = NULL;
Packit 1e8aac
Packit 1e8aac
      /* Images are appended after the gtk+ group of items */
Packit 1e8aac
      if (include_images && !strcmp (prefix, "gtk-"))
Packit 1e8aac
        {
Packit 1e8aac
          for (i = 0; i < G_N_ELEMENTS (builtin_stock_images); i++)
Packit 1e8aac
            {
Packit 1e8aac
              gsi =
Packit 1e8aac
                  new_from_values (builtin_stock_images[i],
Packit 1e8aac
                                   builtin_stock_images[i], stock_enum++);
Packit 1e8aac
              gsi_list =
Packit 1e8aac
                  g_slist_insert_sorted (gsi_list, gsi,
Packit 1e8aac
                                         (GCompareFunc) compare_two_gsi);
Packit 1e8aac
            }
Packit 1e8aac
          gsi_list_list = g_slist_append (gsi_list_list, gsi_list);
Packit 1e8aac
          gsi_list = NULL;
Packit 1e8aac
        }
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  for (p = gsi_list_list; p; p = g_slist_next (p))
Packit 1e8aac
    {
Packit 1e8aac
Packit 1e8aac
      for (l = (GSList *) p->data; l; l = g_slist_next (l))
Packit 1e8aac
        {
Packit 1e8aac
          gsi = (GladeStockItem *) l->data;
Packit 1e8aac
          value.value = gsi->value;
Packit 1e8aac
          value.value_name = g_strdup (gsi->value_name);
Packit 1e8aac
          value.value_nick = g_strdup (gsi->value_nick);
Packit 1e8aac
          values = g_array_append_val (values, value);
Packit 1e8aac
Packit 1e8aac
          g_free (gsi->value_nick);
Packit 1e8aac
          g_free (gsi->value_name);
Packit 1e8aac
          g_free (gsi->clean_name);
Packit 1e8aac
          g_free (gsi);
Packit 1e8aac
        }
Packit 1e8aac
      g_slist_free ((GSList *) p->data);
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  g_slist_free (gsi_list_list);
Packit 1e8aac
Packit 1e8aac
  stock_prefixs_done = TRUE;
Packit 1e8aac
  g_slist_free (stock_list);
Packit 1e8aac
Packit 1e8aac
  return values;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static gchar *
Packit 1e8aac
clean_stock_name (const gchar * name)
Packit 1e8aac
{
Packit 1e8aac
  gchar *clean_name, *str;
Packit 1e8aac
  size_t len = 0;
Packit 1e8aac
  guint i = 0;
Packit 1e8aac
  guint j = 0;
Packit 1e8aac
Packit 1e8aac
  g_assert (name && name[0]);
Packit 1e8aac
Packit 1e8aac
  str = g_strdup (name);
Packit 1e8aac
  len = strlen (str);
Packit 1e8aac
Packit 1e8aac
  while (i + j <= len)
Packit 1e8aac
    {
Packit 1e8aac
      if (str[i + j] == '_')
Packit 1e8aac
        j++;
Packit 1e8aac
Packit 1e8aac
      str[i] = str[i + j];
Packit 1e8aac
      i++;
Packit 1e8aac
    }
Packit 1e8aac
  clean_name = g_strndup (str, i - j);
Packit 1e8aac
  g_free (str);
Packit 1e8aac
Packit 1e8aac
  return clean_name;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
GType
Packit 1e8aac
glade_standard_stock_get_type (void)
Packit 1e8aac
{
Packit 1e8aac
  static GType etype = 0;
Packit 1e8aac
Packit 1e8aac
  if (etype == 0)
Packit 1e8aac
    {
Packit 1e8aac
      GArray *values = list_stock_items (FALSE);
Packit 1e8aac
      gint i, n_values = values->len;
Packit 1e8aac
      GEnumValue *enum_values = (GEnumValue *) values->data;
Packit 1e8aac
      GtkStockItem item;
Packit 1e8aac
Packit 1e8aac
      etype = g_enum_register_static ("GladeStock",
Packit 1e8aac
                                      (GEnumValue *) g_array_free (values,
Packit 1e8aac
                                                                   FALSE));
Packit 1e8aac
Packit 1e8aac
      /* Register displayable by GType, i.e. after the types been created. */
Packit 1e8aac
      for (i = 0; i < n_values; i++)
Packit 1e8aac
        {
Packit 1e8aac
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
Packit 1e8aac
          gboolean valid_item = gtk_stock_lookup (enum_values[i].value_nick, &item);
Packit 1e8aac
G_GNUC_END_IGNORE_DEPRECATIONS
Packit 1e8aac
Packit 1e8aac
          if (valid_item)
Packit 1e8aac
            {
Packit 1e8aac
              gchar *clean_name = clean_stock_name (item.label);
Packit 1e8aac
Packit 1e8aac
	      if (!glade_get_displayable_value (etype, enum_values[i].value_nick))
Packit 1e8aac
		glade_register_translated_value (etype, enum_values[i].value_nick, clean_name);
Packit 1e8aac
              g_free (clean_name);
Packit 1e8aac
            }
Packit 1e8aac
        }
Packit 1e8aac
    }
Packit 1e8aac
  return etype;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
Packit 1e8aac
GType
Packit 1e8aac
glade_standard_stock_image_get_type (void)
Packit 1e8aac
{
Packit 1e8aac
  static GType etype = 0;
Packit 1e8aac
Packit 1e8aac
  if (etype == 0)
Packit 1e8aac
    {
Packit 1e8aac
      GArray *values = list_stock_items (TRUE);
Packit 1e8aac
      gint i, n_values = values->len;
Packit 1e8aac
      GEnumValue *enum_values = (GEnumValue *) values->data;
Packit 1e8aac
      GtkStockItem item;
Packit 1e8aac
Packit 1e8aac
      etype = g_enum_register_static ("GladeStockImage",
Packit 1e8aac
                                      (GEnumValue *) g_array_free (values,
Packit 1e8aac
                                                                   FALSE));
Packit 1e8aac
Packit 1e8aac
      /* Register displayable by GType, i.e. after the types been created. */
Packit 1e8aac
      for (i = 0; i < n_values; i++)
Packit 1e8aac
        {
Packit 1e8aac
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
Packit 1e8aac
          gboolean valid_item = gtk_stock_lookup (enum_values[i].value_nick, &item);
Packit 1e8aac
G_GNUC_END_IGNORE_DEPRECATIONS
Packit 1e8aac
          if (valid_item)
Packit 1e8aac
            {
Packit 1e8aac
              gchar *clean_name = clean_stock_name (item.label);
Packit 1e8aac
Packit 1e8aac
              /* These are translated, we just cut out the mnemonic underscores */
Packit 1e8aac
	      if (!glade_get_displayable_value (etype, enum_values[i].value_nick))
Packit 1e8aac
		glade_register_translated_value (etype, enum_values[i].value_nick, clean_name);
Packit 1e8aac
              g_free (clean_name);
Packit 1e8aac
            }
Packit 1e8aac
        }
Packit 1e8aac
Packit 1e8aac
      for (i = 0; i < G_N_ELEMENTS (builtin_stock_images); i++)
Packit 1e8aac
        {
Packit 1e8aac
          /* these ones are translated from glade */
Packit 1e8aac
	  if (!glade_get_displayable_value (etype, builtin_stock_images[i]))
Packit 1e8aac
	    glade_register_displayable_value (etype,
Packit 1e8aac
					      builtin_stock_images[i],
Packit 1e8aac
					      GETTEXT_PACKAGE,
Packit 1e8aac
					      builtin_stock_displayables[i]);
Packit 1e8aac
        }
Packit 1e8aac
    }
Packit 1e8aac
  return etype;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
GParamSpec *
Packit 1e8aac
glade_standard_stock_spec (void)
Packit 1e8aac
{
Packit 1e8aac
  return g_param_spec_enum ("stock", _("Stock"),
Packit 1e8aac
                            _("A builtin stock item"),
Packit 1e8aac
                            GLADE_TYPE_STOCK, 0, G_PARAM_READWRITE);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
GParamSpec *
Packit 1e8aac
glade_standard_stock_image_spec (void)
Packit 1e8aac
{
Packit 1e8aac
  return g_param_spec_enum ("stock-image", _("Stock Image"),
Packit 1e8aac
                            _("A builtin stock image"),
Packit 1e8aac
                            GLADE_TYPE_STOCK_IMAGE, 0, G_PARAM_READWRITE);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/****************************************************************
Packit 1e8aac
 *  A GList boxed type used by GladeParamSpecObjects and        *
Packit 1e8aac
 *  GladeParamSpecAccel (which is now in the glade-gtk backend) *
Packit 1e8aac
 ****************************************************************/
Packit 1e8aac
GType
Packit 1e8aac
glade_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
        ("GladeGList",
Packit 1e8aac
         (GBoxedCopyFunc) g_list_copy, (GBoxedFreeFunc) g_list_free);
Packit 1e8aac
  return type_id;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/****************************************************************
Packit 1e8aac
 *  Built-in GladeParamSpecObjects for object list properties   *
Packit 1e8aac
 *  (Used as a pspec to desctibe an AtkRelationSet, but can     *
Packit 1e8aac
 *  for any object list property)                               *
Packit 1e8aac
 ****************************************************************/
Packit 1e8aac
static void
Packit 1e8aac
param_objects_init (GParamSpec * pspec)
Packit 1e8aac
{
Packit 1e8aac
  GladeParamSpecObjects *ospec = GLADE_PARAM_SPEC_OBJECTS (pspec);
Packit 1e8aac
  ospec->type = G_TYPE_OBJECT;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
param_objects_set_default (GParamSpec * pspec, GValue * value)
Packit 1e8aac
{
Packit 1e8aac
  if (value->data[0].v_pointer != NULL)
Packit 1e8aac
    {
Packit 1e8aac
      g_free (value->data[0].v_pointer);
Packit 1e8aac
    }
Packit 1e8aac
  value->data[0].v_pointer = NULL;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static gboolean
Packit 1e8aac
param_objects_validate (GParamSpec * pspec, GValue * value)
Packit 1e8aac
{
Packit 1e8aac
  GladeParamSpecObjects *ospec = GLADE_PARAM_SPEC_OBJECTS (pspec);
Packit 1e8aac
  GList *objects, *list, *toremove = NULL;
Packit 1e8aac
  GObject *object;
Packit 1e8aac
Packit 1e8aac
  objects = value->data[0].v_pointer;
Packit 1e8aac
Packit 1e8aac
  for (list = objects; list; list = list->next)
Packit 1e8aac
    {
Packit 1e8aac
      object = list->data;
Packit 1e8aac
Packit 1e8aac
      if (!(G_OBJECT_TYPE (object) == ospec->type ||
Packit 1e8aac
	    g_type_is_a (G_OBJECT_TYPE (object), ospec->type)))
Packit 1e8aac
        toremove = g_list_prepend (toremove, object);
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  for (list = toremove; list; list = list->next)
Packit 1e8aac
    {
Packit 1e8aac
      object = list->data;
Packit 1e8aac
      objects = g_list_remove (objects, object);
Packit 1e8aac
    }
Packit 1e8aac
  if (toremove)
Packit 1e8aac
    g_list_free (toremove);
Packit 1e8aac
Packit 1e8aac
  value->data[0].v_pointer = objects;
Packit 1e8aac
Packit 1e8aac
  return toremove != NULL;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static gint
Packit 1e8aac
param_objects_values_cmp (GParamSpec * pspec,
Packit 1e8aac
                          const GValue * value1, const GValue * value2)
Packit 1e8aac
{
Packit 1e8aac
  guint8 *p1 = value1->data[0].v_pointer;
Packit 1e8aac
  guint8 *p2 = value2->data[0].v_pointer;
Packit 1e8aac
Packit 1e8aac
  /* not much to compare here, try to at least provide stable lesser/greater result */
Packit 1e8aac
Packit 1e8aac
  return p1 < p2 ? -1 : p1 > p2;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
GType
Packit 1e8aac
glade_param_objects_get_type (void)
Packit 1e8aac
{
Packit 1e8aac
  static GType objects_type = 0;
Packit 1e8aac
Packit 1e8aac
  if (objects_type == 0)
Packit 1e8aac
    {
Packit 1e8aac
      static /* const */ GParamSpecTypeInfo pspec_info = {
Packit 1e8aac
        sizeof (GladeParamSpecObjects), /* instance_size */
Packit 1e8aac
        16,                     /* n_preallocs */
Packit 1e8aac
        param_objects_init,     /* instance_init */
Packit 1e8aac
        0xdeadbeef,             /* value_type, assigned further down */
Packit 1e8aac
        NULL,                   /* finalize */
Packit 1e8aac
        param_objects_set_default,      /* value_set_default */
Packit 1e8aac
        param_objects_validate, /* value_validate */
Packit 1e8aac
        param_objects_values_cmp,       /* values_cmp */
Packit 1e8aac
      };
Packit 1e8aac
      pspec_info.value_type = GLADE_TYPE_GLIST;
Packit 1e8aac
Packit 1e8aac
      objects_type = g_param_type_register_static
Packit 1e8aac
          ("GladeParamObjects", &pspec_info);
Packit 1e8aac
    }
Packit 1e8aac
  return objects_type;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
GParamSpec *
Packit 1e8aac
glade_param_spec_objects (const gchar * name,
Packit 1e8aac
                          const gchar * nick,
Packit 1e8aac
                          const gchar * blurb,
Packit 1e8aac
                          GType accepted_type, GParamFlags flags)
Packit 1e8aac
{
Packit 1e8aac
  GladeParamSpecObjects *pspec;
Packit 1e8aac
Packit 1e8aac
  pspec = g_param_spec_internal (GLADE_TYPE_PARAM_OBJECTS,
Packit 1e8aac
                                 name, nick, blurb, flags);
Packit 1e8aac
Packit 1e8aac
  pspec->type = accepted_type;
Packit 1e8aac
  return G_PARAM_SPEC (pspec);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_param_spec_objects_set_type (GladeParamSpecObjects * pspec, GType type)
Packit 1e8aac
{
Packit 1e8aac
  pspec->type = type;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
GType
Packit 1e8aac
glade_param_spec_objects_get_type (GladeParamSpecObjects * pspec)
Packit 1e8aac
{
Packit 1e8aac
  return pspec->type;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/* This was developed for the purpose of holding a list
Packit 1e8aac
 * of 'targets' in an AtkRelation (we are setting it up
Packit 1e8aac
 * as a property)
Packit 1e8aac
 */
Packit 1e8aac
GParamSpec *
Packit 1e8aac
glade_standard_objects_spec (void)
Packit 1e8aac
{
Packit 1e8aac
  return glade_param_spec_objects ("objects", _("Objects"),
Packit 1e8aac
                                   _("A list of objects"),
Packit 1e8aac
                                   G_TYPE_OBJECT, G_PARAM_READWRITE);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/* Pixbuf Type */
Packit 1e8aac
GParamSpec *
Packit 1e8aac
glade_standard_pixbuf_spec (void)
Packit 1e8aac
{
Packit 1e8aac
  return g_param_spec_object ("pixbuf", _("Image File Name"),
Packit 1e8aac
                              _("Enter a filename, relative path or full path to "
Packit 1e8aac
				"load the image"), GDK_TYPE_PIXBUF,
Packit 1e8aac
                              G_PARAM_READWRITE);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/* GdkColor */
Packit 1e8aac
GParamSpec *
Packit 1e8aac
glade_standard_gdkcolor_spec (void)
Packit 1e8aac
{
Packit 1e8aac
  return g_param_spec_boxed ("gdkcolor", _("Color"),
Packit 1e8aac
                             _("A GDK color value"), GDK_TYPE_COLOR,
Packit 1e8aac
                             G_PARAM_READWRITE);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/****************************************************************
Packit 1e8aac
 *                    Basic types follow                        *
Packit 1e8aac
 ****************************************************************/
Packit 1e8aac
GParamSpec *
Packit 1e8aac
glade_standard_int_spec (void)
Packit 1e8aac
{
Packit 1e8aac
  return g_param_spec_int ("int", "Integer",
Packit 1e8aac
                           "An integer value",
Packit 1e8aac
                           G_MININT, G_MAXINT, 0, G_PARAM_READWRITE);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
GParamSpec *
Packit 1e8aac
glade_standard_uint_spec (void)
Packit 1e8aac
{
Packit 1e8aac
  return g_param_spec_uint ("uint", "Unsigned Integer",
Packit 1e8aac
                            "An unsigned integer value",
Packit 1e8aac
                            0, G_MAXUINT, 0, G_PARAM_READWRITE);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
GParamSpec *
Packit 1e8aac
glade_standard_string_spec (void)
Packit 1e8aac
{
Packit 1e8aac
  return g_param_spec_string ("string", _("String"),
Packit 1e8aac
                              _("An entry"), "", G_PARAM_READWRITE);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
GParamSpec *
Packit 1e8aac
glade_standard_strv_spec (void)
Packit 1e8aac
{
Packit 1e8aac
  return g_param_spec_boxed ("strv", "Strv",
Packit 1e8aac
                             "String array", G_TYPE_STRV, G_PARAM_READWRITE);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
GParamSpec *
Packit 1e8aac
glade_standard_float_spec (void)
Packit 1e8aac
{
Packit 1e8aac
  return g_param_spec_float ("float", "Float",
Packit 1e8aac
                             "A floating point entry",
Packit 1e8aac
                             0.0F, G_MAXFLOAT, 0.0F, G_PARAM_READWRITE);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
GParamSpec *
Packit 1e8aac
glade_standard_boolean_spec (void)
Packit 1e8aac
{
Packit 1e8aac
  return g_param_spec_boolean ("boolean", "Boolean",
Packit 1e8aac
                               "A boolean value", FALSE, G_PARAM_READWRITE);
Packit 1e8aac
}