1 /* gEDA - GPL Electronic Design Automation
2 * gschem - gEDA Schematic Capture
3 * Copyright (C) 1998-2009 Ales Hvezda
4 * Copyright (C) 1998-2009 gEDA Contributors (see ChangeLog for details)
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA
27 PROP_MULTIKEY_ACCEL
= 1,
31 static GObjectClass
*gschem_action_parent_class
= NULL
;
34 /*! \brief GObject finalise handler
36 * \par Function Description
37 * Just before the GschemAction GObject is finalized, free our
38 * allocated data, and then chain up to the parent's finalize handler.
40 * \param [in] widget The GObject being finalized.
42 static void gschem_action_finalize (GObject
*object
)
44 GschemAction
*action
= GSCHEM_ACTION (object
);
46 g_free (action
->multikey_accel
);
48 G_OBJECT_CLASS (gschem_action_parent_class
)->finalize (object
);
52 /*! \brief GObject property setter function
54 * \par Function Description
55 * Setter function for GschemAction's GObject properties,
56 * "settings-name" and "toplevel".
58 * \param [in] object The GObject whose properties we are setting
59 * \param [in] property_id The numeric id. under which the property was
60 * registered with g_object_class_install_property()
61 * \param [in] value The GValue the property is being set from
62 * \param [in] pspec A GParamSpec describing the property being set
64 static void gschem_action_set_property (GObject
*object
, guint property_id
, const GValue
*value
, GParamSpec
*pspec
)
66 GschemAction
*action
= GSCHEM_ACTION (object
);
69 case PROP_MULTIKEY_ACCEL
:
70 g_free (action
->multikey_accel
);
71 action
->multikey_accel
= g_strdup (g_value_get_string (value
));
74 G_OBJECT_WARN_INVALID_PROPERTY_ID (object
, property_id
, pspec
);
79 /*! \brief GObject property getter function
81 * \par Function Description
82 * Getter function for GschemAction's GObject properties,
83 * "settings-name" and "toplevel".
85 * \param [in] object The GObject whose properties we are getting
86 * \param [in] property_id The numeric id. under which the property was
87 * registered with g_object_class_install_property()
88 * \param [out] value The GValue in which to return the value of the property
89 * \param [in] pspec A GParamSpec describing the property being got
91 static void gschem_action_get_property (GObject
*object
, guint property_id
, GValue
*value
, GParamSpec
*pspec
)
93 GschemAction
*action
= GSCHEM_ACTION (object
);
96 case PROP_MULTIKEY_ACCEL
:
97 g_value_set_string (value
, action
->multikey_accel
);
100 G_OBJECT_WARN_INVALID_PROPERTY_ID (object
, property_id
, pspec
);
106 gschem_action_connect_proxy (GtkAction
*action
,
109 GschemAction
*gs_action
= GSCHEM_ACTION (action
);
112 /* Override the type of label widget used with the menu item */
113 if (GTK_IS_MENU_ITEM (proxy
)) {
116 label
= GTK_BIN (proxy
)->child
;
118 /* make sure label is a GschemAccelLabel */
119 if (label
&& !GSCHEM_IS_ACCEL_LABEL (label
)) {
120 gtk_container_remove (GTK_CONTAINER (proxy
), label
);
125 g_object_get (action
, "label", &label_string
, NULL
);
126 label
= g_object_new (GSCHEM_TYPE_ACCEL_LABEL
,
127 "use-underline", TRUE
,
131 "label", label_string
,
132 "accel-string", gs_action
->multikey_accel
,
137 /* Let the parent class do its work now we've fiddled with the label */
138 GTK_ACTION_CLASS (gschem_action_parent_class
)->connect_proxy (action
, proxy
);
142 /*! \brief GType class initialiser for GschemAction
144 * \par Function Description
145 * GType class initialiser for GschemAction. We override our parent
146 * virtual class methods as needed and register our GObject properties.
148 * \param [in] klass The GschemActionClass we are initialising
150 static void gschem_action_class_init (GschemActionClass
*klass
)
152 GObjectClass
*gobject_class
= G_OBJECT_CLASS (klass
);
153 GtkActionClass
*gtkaction_class
= GTK_ACTION_CLASS (klass
);
155 gtkaction_class
->connect_proxy
= gschem_action_connect_proxy
;
157 gobject_class
->finalize
= gschem_action_finalize
;
158 gobject_class
->set_property
= gschem_action_set_property
;
159 gobject_class
->get_property
= gschem_action_get_property
;
161 gschem_action_parent_class
= g_type_class_peek_parent (klass
);
163 g_object_class_install_property (
164 gobject_class
, PROP_MULTIKEY_ACCEL
,
165 g_param_spec_string ("multikey-accel",
173 /*! \brief Function to retrieve GschemAction's GType identifier.
175 * \par Function Description
176 * Function to retrieve GschemAction's GType identifier.
177 * Upon first call, this registers the GschemAction in the GType system.
178 * Subsequently it returns the saved value from its first execution.
180 * \return the GType identifier associated with GschemAction.
182 GType
gschem_action_get_type ()
184 static GType gschem_action_type
= 0;
186 if (!gschem_action_type
) {
187 static const GTypeInfo gschem_action_info
= {
188 sizeof(GschemActionClass
),
189 NULL
, /* base_init */
190 NULL
, /* base_finalize */
191 (GClassInitFunc
) gschem_action_class_init
,
192 NULL
, /* class_finalize */
193 NULL
, /* class_data */
194 sizeof(GschemAction
),
196 NULL
, /* instance_init */
199 gschem_action_type
= g_type_register_static (GTK_TYPE_ACTION
,
201 &gschem_action_info
, 0);
204 return gschem_action_type
;
208 /*! /brief Creates a new GschemAction object
210 * /par Function Descriptions
212 * Creates a new GschemAction object.
214 * /param [in] name A unique name for the action
215 * /param [in] label The label displayed in menu items and on buttons, or NULL
216 * /param [in] tooltip A tooltip for the action, or NULL
217 * /param [in] stock_id The stock icon to display in widgets representing the action, or NULL
218 * /param [in] multikey_accel The (potentially) multi-key accelerator used for this action
220 * /returns A new GschemAction
222 GschemAction
*gschem_action_new (const gchar
*name
,
224 const gchar
*tooltip
,
225 const gchar
*stock_id
,
226 const gchar
*multikey_accel
)
228 g_return_val_if_fail (name
!= NULL
, NULL
);
230 return g_object_new (GSCHEM_TYPE_ACTION
,
234 "stock-id", stock_id
,
235 "multikey-accel", multikey_accel
,