|
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 |
}
|