Blame gladeui/glade-property-shell.c

Packit 1e8aac
/*
Packit 1e8aac
 * Copyright (C) 2013 Tristan Van Berkom.
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
 * Authors:
Packit 1e8aac
 *   Tristan Van Berkom <tvb@gnome.org>
Packit 1e8aac
 */
Packit 1e8aac
Packit 1e8aac
#ifdef HAVE_CONFIG_H
Packit 1e8aac
#include <config.h>
Packit 1e8aac
#endif
Packit 1e8aac
Packit 1e8aac
#include <glib/gi18n-lib.h>
Packit 1e8aac
Packit 1e8aac
#include "glade.h"
Packit 1e8aac
#include "glade-widget.h"
Packit 1e8aac
#include "glade-popup.h"
Packit 1e8aac
#include "glade-editable.h"
Packit 1e8aac
#include "glade-property-shell.h"
Packit 1e8aac
#include "glade-marshallers.h"
Packit 1e8aac
Packit 1e8aac
/* GObjectClass */
Packit 1e8aac
static void      glade_property_shell_finalize          (GObject       *object);
Packit 1e8aac
static void      glade_property_shell_set_real_property (GObject       *object,
Packit 1e8aac
							 guint          prop_id,
Packit 1e8aac
							 const GValue  *value,
Packit 1e8aac
							 GParamSpec    *pspec);
Packit 1e8aac
static void      glade_property_shell_get_real_property (GObject       *object,
Packit 1e8aac
							 guint          prop_id,
Packit 1e8aac
							 GValue        *value,
Packit 1e8aac
							 GParamSpec    *pspec);
Packit 1e8aac
Packit 1e8aac
/* GladeEditableIface */
Packit 1e8aac
static void      glade_property_shell_editable_init     (GladeEditableIface *iface);
Packit 1e8aac
Packit 1e8aac
struct _GladePropertyShellPrivate
Packit 1e8aac
{
Packit 1e8aac
  /* Current State */
Packit 1e8aac
  GladeWidgetAdaptor  *adaptor;
Packit 1e8aac
  GladeEditorProperty *property_editor;
Packit 1e8aac
  gulong               pre_commit_id;
Packit 1e8aac
  gulong               post_commit_id;
Packit 1e8aac
Packit 1e8aac
  /* Properties, used to load the internal editor */
Packit 1e8aac
  GType                editor_type;
Packit 1e8aac
  gchar               *property_name;
Packit 1e8aac
  gchar               *custom_text;
Packit 1e8aac
  guint                packing : 1;
Packit 1e8aac
  guint                use_command : 1;
Packit 1e8aac
  guint                disable_check : 1;
Packit 1e8aac
};
Packit 1e8aac
Packit 1e8aac
enum {
Packit 1e8aac
  PROP_0,
Packit 1e8aac
  PROP_PROPERTY_NAME,
Packit 1e8aac
  PROP_PACKING,
Packit 1e8aac
  PROP_USE_COMMAND,
Packit 1e8aac
  PROP_EDITOR_TYPE,
Packit 1e8aac
  PROP_CUSTOM_TEXT,
Packit 1e8aac
  PROP_DISABLE_CHECK
Packit 1e8aac
};
Packit 1e8aac
Packit 1e8aac
enum
Packit 1e8aac
{
Packit 1e8aac
  PRE_COMMIT,
Packit 1e8aac
  POST_COMMIT,
Packit 1e8aac
  LAST_SIGNAL
Packit 1e8aac
};
Packit 1e8aac
Packit 1e8aac
static guint glade_property_shell_signals[LAST_SIGNAL] = { 0, };
Packit 1e8aac
Packit 1e8aac
static GladeEditableIface *parent_editable_iface;
Packit 1e8aac
Packit 1e8aac
G_DEFINE_TYPE_WITH_CODE (GladePropertyShell, glade_property_shell, GTK_TYPE_BOX,
Packit 1e8aac
                         G_ADD_PRIVATE (GladePropertyShell)
Packit 1e8aac
			 G_IMPLEMENT_INTERFACE (GLADE_TYPE_EDITABLE,
Packit 1e8aac
                                                glade_property_shell_editable_init));
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_shell_init (GladePropertyShell *shell)
Packit 1e8aac
{
Packit 1e8aac
  shell->priv = glade_property_shell_get_instance_private (shell);
Packit 1e8aac
Packit 1e8aac
  shell->priv->packing = FALSE;
Packit 1e8aac
  shell->priv->use_command = TRUE;
Packit 1e8aac
  shell->priv->disable_check = FALSE;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_shell_class_init (GladePropertyShellClass *klass)
Packit 1e8aac
{
Packit 1e8aac
  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
Packit 1e8aac
  
Packit 1e8aac
  gobject_class->finalize = glade_property_shell_finalize;
Packit 1e8aac
  gobject_class->set_property = glade_property_shell_set_real_property;
Packit 1e8aac
  gobject_class->get_property = glade_property_shell_get_real_property;
Packit 1e8aac
Packit 1e8aac
  g_object_class_install_property
Packit 1e8aac
      (gobject_class, PROP_PROPERTY_NAME,
Packit 1e8aac
       g_param_spec_string ("property-name", _("Property Name"),
Packit 1e8aac
			    _("The property name to use when loading by widget"),
Packit 1e8aac
			    NULL, G_PARAM_READWRITE));
Packit 1e8aac
Packit 1e8aac
  g_object_class_install_property
Packit 1e8aac
      (gobject_class, PROP_PACKING,
Packit 1e8aac
       g_param_spec_boolean ("packing", _("Packing"),
Packit 1e8aac
			     _("Whether the property to load is a packing property or not"),
Packit 1e8aac
			     FALSE, G_PARAM_READWRITE));
Packit 1e8aac
Packit 1e8aac
  g_object_class_install_property
Packit 1e8aac
      (gobject_class, PROP_USE_COMMAND,
Packit 1e8aac
       g_param_spec_boolean ("use-command", _("Use Command"),
Packit 1e8aac
			     _("Whether to use the GladeCommand API when modifying properties"),
Packit 1e8aac
			     TRUE, G_PARAM_READWRITE));
Packit 1e8aac
Packit 1e8aac
  g_object_class_install_property
Packit 1e8aac
      (gobject_class, PROP_EDITOR_TYPE,
Packit 1e8aac
       g_param_spec_string ("editor-type", _("Editor Property Type Name"),
Packit 1e8aac
			    _("Specify the actual editor property type name to use for this shell"),
Packit 1e8aac
			    NULL, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
Packit 1e8aac
Packit 1e8aac
  g_object_class_install_property
Packit 1e8aac
      (gobject_class, PROP_CUSTOM_TEXT,
Packit 1e8aac
       g_param_spec_string ("custom-text", _("Custom Text"),
Packit 1e8aac
			    _("Custom Text to display in the property label"),
Packit 1e8aac
			    NULL, G_PARAM_READWRITE));
Packit 1e8aac
  
Packit 1e8aac
  g_object_class_install_property
Packit 1e8aac
      (gobject_class, PROP_DISABLE_CHECK,
Packit 1e8aac
       g_param_spec_boolean ("disable-check", _("Disable Check"),
Packit 1e8aac
			     _("Whether to explicitly disable the check button"),
Packit 1e8aac
			     FALSE, G_PARAM_READWRITE));
Packit 1e8aac
  
Packit 1e8aac
  /**
Packit 1e8aac
   * GladePropertyShell::pre-commit:
Packit 1e8aac
   * @gladeeditorproperty: the #GladeEditorProperty which changed value
Packit 1e8aac
   * @arg1: the new #GValue to commit.
Packit 1e8aac
   *
Packit 1e8aac
   * Emitted before a property's value is committed, can be useful to serialize
Packit 1e8aac
   * commands before a property's commit command from custom editors.
Packit 1e8aac
   */
Packit 1e8aac
  glade_property_shell_signals[PRE_COMMIT] =
Packit 1e8aac
      g_signal_new ("pre-commit",
Packit 1e8aac
                    G_TYPE_FROM_CLASS (gobject_class),
Packit 1e8aac
                    G_SIGNAL_RUN_LAST,
Packit 1e8aac
                    0, NULL, NULL,
Packit 1e8aac
                    _glade_marshal_VOID__POINTER,
Packit 1e8aac
                    G_TYPE_NONE, 1, G_TYPE_POINTER);
Packit 1e8aac
Packit 1e8aac
  /**
Packit 1e8aac
   * GladePropertyShell::post-commit:
Packit 1e8aac
   * @gladeeditorproperty: the #GladeEditorProperty which changed value
Packit 1e8aac
   * @arg1: the new #GValue to commit.
Packit 1e8aac
   *
Packit 1e8aac
   * Emitted after a property's value is committed, can be useful to serialize
Packit 1e8aac
   * commands after a property's commit command from custom editors.
Packit 1e8aac
   */
Packit 1e8aac
  glade_property_shell_signals[POST_COMMIT] =
Packit 1e8aac
      g_signal_new ("post-commit",
Packit 1e8aac
                    G_TYPE_FROM_CLASS (gobject_class),
Packit 1e8aac
                    G_SIGNAL_RUN_LAST,
Packit 1e8aac
                    0, NULL, NULL,
Packit 1e8aac
                    _glade_marshal_VOID__POINTER,
Packit 1e8aac
                    G_TYPE_NONE, 1, G_TYPE_POINTER);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
Packit 1e8aac
/***********************************************************
Packit 1e8aac
 *                     GObjectClass                        *
Packit 1e8aac
 ***********************************************************/
Packit 1e8aac
static void
Packit 1e8aac
glade_property_shell_finalize (GObject *object)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyShell *shell = GLADE_PROPERTY_SHELL (object);
Packit 1e8aac
Packit 1e8aac
  g_free (shell->priv->property_name);
Packit 1e8aac
  g_free (shell->priv->custom_text);
Packit 1e8aac
Packit 1e8aac
  G_OBJECT_CLASS (glade_property_shell_parent_class)->finalize (object);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_shell_set_real_property (GObject      *object,
Packit 1e8aac
					guint         prop_id,
Packit 1e8aac
					const GValue *value,
Packit 1e8aac
					GParamSpec   *pspec)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyShell *shell = GLADE_PROPERTY_SHELL (object);
Packit 1e8aac
  GladePropertyShellPrivate *priv = shell->priv;
Packit 1e8aac
  const gchar *type_name = NULL;
Packit 1e8aac
  GType type = 0;
Packit 1e8aac
Packit 1e8aac
  switch (prop_id)
Packit 1e8aac
    {
Packit 1e8aac
    case PROP_PROPERTY_NAME:
Packit 1e8aac
      glade_property_shell_set_property_name (shell, g_value_get_string (value));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_PACKING:
Packit 1e8aac
      glade_property_shell_set_packing (shell, g_value_get_boolean (value));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_USE_COMMAND:
Packit 1e8aac
      glade_property_shell_set_use_command (shell, g_value_get_boolean (value));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_EDITOR_TYPE:
Packit 1e8aac
      type_name = g_value_get_string (value);
Packit 1e8aac
Packit 1e8aac
      if (type_name)
Packit 1e8aac
	type = glade_util_get_type_from_name (type_name, FALSE);
Packit 1e8aac
Packit 1e8aac
      if (type > 0 && !g_type_is_a (type, GLADE_TYPE_EDITOR_PROPERTY))
Packit 1e8aac
	g_warning ("Editor type '%s' is not a GladeEditorProperty", type_name);
Packit 1e8aac
      else
Packit 1e8aac
	priv->editor_type = type;
Packit 1e8aac
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_CUSTOM_TEXT:
Packit 1e8aac
      glade_property_shell_set_custom_text (shell, g_value_get_string (value));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_DISABLE_CHECK:
Packit 1e8aac
      glade_property_shell_set_disable_check (shell, g_value_get_boolean (value));
Packit 1e8aac
      break;
Packit 1e8aac
    default:
Packit 1e8aac
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit 1e8aac
      break;
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_shell_get_real_property (GObject    *object,
Packit 1e8aac
					guint       prop_id,
Packit 1e8aac
					GValue     *value,
Packit 1e8aac
					GParamSpec *pspec)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyShell *shell = GLADE_PROPERTY_SHELL (object);
Packit 1e8aac
Packit 1e8aac
  switch (prop_id)
Packit 1e8aac
    {
Packit 1e8aac
    case PROP_PROPERTY_NAME:
Packit 1e8aac
      g_value_set_string (value, glade_property_shell_get_property_name (shell));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_PACKING:
Packit 1e8aac
      g_value_set_boolean (value, glade_property_shell_get_packing (shell));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_USE_COMMAND:
Packit 1e8aac
      g_value_set_boolean (value, glade_property_shell_get_use_command (shell));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_CUSTOM_TEXT:
Packit 1e8aac
      g_value_set_string (value, glade_property_shell_get_custom_text (shell));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_DISABLE_CHECK:
Packit 1e8aac
      g_value_set_boolean (value, glade_property_shell_get_disable_check (shell));
Packit 1e8aac
      break;
Packit 1e8aac
    default:
Packit 1e8aac
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit 1e8aac
      break;
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/*******************************************************************************
Packit 1e8aac
 *                            GladeEditableIface                               *                               
Packit 1e8aac
 *******************************************************************************/
Packit 1e8aac
static void
Packit 1e8aac
propagate_pre_commit (GladeEditorProperty *property,
Packit 1e8aac
		      GValue              *value,
Packit 1e8aac
		      GladePropertyShell  *shell)
Packit 1e8aac
{
Packit 1e8aac
  g_signal_emit (G_OBJECT (shell), glade_property_shell_signals[PRE_COMMIT], 0, value);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
propagate_post_commit (GladeEditorProperty *property,
Packit 1e8aac
		       GValue              *value,
Packit 1e8aac
		       GladePropertyShell  *shell)
Packit 1e8aac
{
Packit 1e8aac
  g_signal_emit (G_OBJECT (shell), glade_property_shell_signals[POST_COMMIT], 0, value);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_shell_set_eprop (GladePropertyShell  *shell,
Packit 1e8aac
				GladeEditorProperty *eprop)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyShellPrivate *priv = shell->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->property_editor != eprop)
Packit 1e8aac
    {
Packit 1e8aac
      if (priv->property_editor)
Packit 1e8aac
	{
Packit 1e8aac
	  g_signal_handler_disconnect (priv->property_editor, priv->pre_commit_id);
Packit 1e8aac
	  g_signal_handler_disconnect (priv->property_editor, priv->post_commit_id);
Packit 1e8aac
	  priv->pre_commit_id = 0;
Packit 1e8aac
	  priv->post_commit_id = 0;
Packit 1e8aac
Packit 1e8aac
	  gtk_widget_destroy (GTK_WIDGET (priv->property_editor));
Packit 1e8aac
	}
Packit 1e8aac
Packit 1e8aac
      priv->property_editor = eprop;
Packit 1e8aac
Packit 1e8aac
      if (priv->property_editor)
Packit 1e8aac
	{
Packit 1e8aac
	  glade_editor_property_set_custom_text (priv->property_editor, priv->custom_text);
Packit 1e8aac
          glade_editor_property_set_disable_check (priv->property_editor, priv->disable_check);
Packit 1e8aac
            
Packit 1e8aac
	  priv->pre_commit_id = g_signal_connect (priv->property_editor, "commit",
Packit 1e8aac
						  G_CALLBACK (propagate_pre_commit), shell);
Packit 1e8aac
	  priv->post_commit_id = g_signal_connect_after (priv->property_editor, "commit",
Packit 1e8aac
							 G_CALLBACK (propagate_post_commit), shell);
Packit 1e8aac
Packit 1e8aac
	  gtk_container_add (GTK_CONTAINER (shell), GTK_WIDGET (priv->property_editor));
Packit 1e8aac
	}
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_shell_load (GladeEditable *editable,
Packit 1e8aac
			   GladeWidget   *widget)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyShell *shell = GLADE_PROPERTY_SHELL (editable);
Packit 1e8aac
  GladePropertyShellPrivate *priv;
Packit 1e8aac
Packit 1e8aac
  /* Chain up to default implementation */
Packit 1e8aac
  parent_editable_iface->load (editable, widget);
Packit 1e8aac
Packit 1e8aac
  g_return_if_fail (shell->priv->property_name != NULL);
Packit 1e8aac
Packit 1e8aac
  priv = shell->priv;
Packit 1e8aac
Packit 1e8aac
  if (widget)
Packit 1e8aac
    {
Packit 1e8aac
      GladeWidgetAdaptor *adaptor = NULL;
Packit 1e8aac
Packit 1e8aac
      /* Use the parent adaptor if we're a packing property */
Packit 1e8aac
      if (priv->packing)
Packit 1e8aac
	{
Packit 1e8aac
	  GladeWidget *parent = glade_widget_get_parent (widget);
Packit 1e8aac
Packit 1e8aac
	  if (parent)
Packit 1e8aac
	    adaptor = glade_widget_get_adaptor (parent);
Packit 1e8aac
	}
Packit 1e8aac
      else
Packit 1e8aac
	adaptor = glade_widget_get_adaptor (widget);
Packit 1e8aac
Packit 1e8aac
      /* Need to rebuild the internal editor */
Packit 1e8aac
      if (priv->adaptor != adaptor)
Packit 1e8aac
	{
Packit 1e8aac
	  GladePropertyClass *pclass = NULL;
Packit 1e8aac
	  GladeEditorProperty *eprop = NULL;
Packit 1e8aac
Packit 1e8aac
	  priv->adaptor = adaptor;
Packit 1e8aac
Packit 1e8aac
	  if (adaptor)
Packit 1e8aac
	    {
Packit 1e8aac
	      if (priv->packing)
Packit 1e8aac
		pclass = glade_widget_adaptor_get_pack_property_class (priv->adaptor,
Packit 1e8aac
								       priv->property_name);
Packit 1e8aac
	      else
Packit 1e8aac
		pclass = glade_widget_adaptor_get_property_class (priv->adaptor,
Packit 1e8aac
								  priv->property_name);
Packit 1e8aac
	    }
Packit 1e8aac
Packit 1e8aac
	  /* Be forgiving, allow usage of properties that wont work, so that
Packit 1e8aac
	   * some editors can include properties for subclasses, and hide
Packit 1e8aac
	   * those properties if they're not applicable
Packit 1e8aac
	   */
Packit 1e8aac
	  if (pclass == NULL)
Packit 1e8aac
	    {
Packit 1e8aac
	      priv->property_editor = NULL;
Packit 1e8aac
	    }
Packit 1e8aac
	  /* Construct custom editor property if specified */
Packit 1e8aac
	  else if (g_type_is_a (priv->editor_type, GLADE_TYPE_EDITOR_PROPERTY))
Packit 1e8aac
	    {
Packit 1e8aac
	      eprop = g_object_new (priv->editor_type,
Packit 1e8aac
				    "property-class", pclass,
Packit 1e8aac
				    "use-command", priv->use_command,
Packit 1e8aac
				    NULL);
Packit 1e8aac
	    }
Packit 1e8aac
	  else
Packit 1e8aac
	    {
Packit 1e8aac
	      /* Let the adaptor create one */
Packit 1e8aac
	      eprop = glade_widget_adaptor_create_eprop_by_name (priv->adaptor,
Packit 1e8aac
								 priv->property_name,
Packit 1e8aac
								 priv->packing,
Packit 1e8aac
								 priv->use_command);
Packit 1e8aac
	    }
Packit 1e8aac
Packit 1e8aac
	  glade_property_shell_set_eprop (shell, eprop);
Packit 1e8aac
	}
Packit 1e8aac
Packit 1e8aac
      /* If we have an editor for the right adaptor, load it */
Packit 1e8aac
      if (priv->property_editor)
Packit 1e8aac
	glade_editable_load (GLADE_EDITABLE (priv->property_editor), widget);
Packit 1e8aac
    }
Packit 1e8aac
  else if (priv->property_editor)
Packit 1e8aac
    glade_editable_load (GLADE_EDITABLE (priv->property_editor), NULL);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_shell_set_show_name (GladeEditable *editable, gboolean show_name)
Packit 1e8aac
{
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_shell_editable_init (GladeEditableIface *iface)
Packit 1e8aac
{
Packit 1e8aac
  parent_editable_iface = g_type_default_interface_peek (GLADE_TYPE_EDITABLE);
Packit 1e8aac
Packit 1e8aac
  iface->load = glade_property_shell_load;
Packit 1e8aac
  iface->set_show_name = glade_property_shell_set_show_name;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/***********************************************************
Packit 1e8aac
 *                            API                          *
Packit 1e8aac
 ***********************************************************/
Packit 1e8aac
GtkWidget *
Packit 1e8aac
glade_property_shell_new (void)
Packit 1e8aac
{
Packit 1e8aac
  return g_object_new (GLADE_TYPE_PROPERTY_SHELL, NULL);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_property_shell_set_property_name (GladePropertyShell *shell,
Packit 1e8aac
					const gchar        *property_name)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyShellPrivate *priv;
Packit 1e8aac
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PROPERTY_SHELL (shell));
Packit 1e8aac
Packit 1e8aac
  priv = shell->priv;
Packit 1e8aac
Packit 1e8aac
  if (g_strcmp0 (priv->property_name, property_name) != 0)
Packit 1e8aac
    {
Packit 1e8aac
      g_free (priv->property_name);
Packit 1e8aac
      priv->property_name = g_strdup (property_name);
Packit 1e8aac
Packit 1e8aac
      g_object_notify (G_OBJECT (shell), "property-name");
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
const gchar *
Packit 1e8aac
glade_property_shell_get_property_name (GladePropertyShell *shell)
Packit 1e8aac
{
Packit 1e8aac
  g_return_val_if_fail (GLADE_IS_PROPERTY_SHELL (shell), NULL);
Packit 1e8aac
Packit 1e8aac
  return shell->priv->property_name;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_property_shell_set_custom_text (GladePropertyShell *shell,
Packit 1e8aac
				      const gchar        *custom_text)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyShellPrivate *priv;
Packit 1e8aac
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PROPERTY_SHELL (shell));
Packit 1e8aac
Packit 1e8aac
  priv = shell->priv;
Packit 1e8aac
Packit 1e8aac
  if (g_strcmp0 (priv->custom_text, custom_text) != 0)
Packit 1e8aac
    {
Packit 1e8aac
      g_free (priv->custom_text);
Packit 1e8aac
      priv->custom_text = g_strdup (custom_text);
Packit 1e8aac
Packit 1e8aac
      if (priv->property_editor)
Packit 1e8aac
	glade_editor_property_set_custom_text (priv->property_editor, custom_text);
Packit 1e8aac
Packit 1e8aac
      g_object_notify (G_OBJECT (shell), "custom-text");
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
const gchar *
Packit 1e8aac
glade_property_shell_get_custom_text (GladePropertyShell *shell)
Packit 1e8aac
{
Packit 1e8aac
  g_return_val_if_fail (GLADE_IS_PROPERTY_SHELL (shell), NULL);
Packit 1e8aac
Packit 1e8aac
  return shell->priv->custom_text;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_property_shell_set_packing (GladePropertyShell *shell,
Packit 1e8aac
				  gboolean            packing)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyShellPrivate *priv;
Packit 1e8aac
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PROPERTY_SHELL (shell));
Packit 1e8aac
Packit 1e8aac
  priv = shell->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->packing != packing)
Packit 1e8aac
    {
Packit 1e8aac
      priv->packing = packing;
Packit 1e8aac
Packit 1e8aac
      g_object_notify (G_OBJECT (shell), "packing");
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
gboolean
Packit 1e8aac
glade_property_shell_get_packing (GladePropertyShell *shell)
Packit 1e8aac
{
Packit 1e8aac
  g_return_val_if_fail (GLADE_IS_PROPERTY_SHELL (shell), FALSE);
Packit 1e8aac
Packit 1e8aac
  return shell->priv->packing;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_property_shell_set_use_command (GladePropertyShell *shell,
Packit 1e8aac
				      gboolean            use_command)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyShellPrivate *priv;
Packit 1e8aac
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PROPERTY_SHELL (shell));
Packit 1e8aac
Packit 1e8aac
  priv = shell->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->use_command != use_command)
Packit 1e8aac
    {
Packit 1e8aac
      priv->use_command = use_command;
Packit 1e8aac
Packit 1e8aac
      g_object_notify (G_OBJECT (shell), "use-command");
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
gboolean
Packit 1e8aac
glade_property_shell_get_use_command (GladePropertyShell *shell)
Packit 1e8aac
{
Packit 1e8aac
  g_return_val_if_fail (GLADE_IS_PROPERTY_SHELL (shell), FALSE);
Packit 1e8aac
Packit 1e8aac
  return shell->priv->use_command;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_property_shell_set_disable_check (GladePropertyShell *shell,
Packit 1e8aac
                                        gboolean            disable_check)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyShellPrivate *priv;
Packit 1e8aac
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PROPERTY_SHELL (shell));
Packit 1e8aac
Packit 1e8aac
  priv = shell->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->disable_check != disable_check)
Packit 1e8aac
    {
Packit 1e8aac
      priv->disable_check = disable_check;
Packit 1e8aac
Packit 1e8aac
      if (priv->property_editor)
Packit 1e8aac
	g_object_set (priv->property_editor, "disable-check", disable_check, NULL);
Packit 1e8aac
Packit 1e8aac
      g_object_notify (G_OBJECT (shell), "disable-check");
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
gboolean
Packit 1e8aac
glade_property_shell_get_disable_check (GladePropertyShell *shell)
Packit 1e8aac
{
Packit 1e8aac
  g_return_val_if_fail (GLADE_IS_PROPERTY_SHELL (shell), FALSE);
Packit 1e8aac
Packit 1e8aac
  return shell->priv->disable_check;
Packit 1e8aac
}