2 * (GLABELS) Label and Business Card Creation program for GNOME
4 * ui-sidebar.c: Object property sidebar
6 * Copyright (C) 2003 Jim Evins <evins@snaught.com>.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #include <libgnomeprint/gnome-font.h>
27 #include "ui-sidebar.h"
29 #include "object-editor.h"
34 /*============================================================================*/
35 /* Private macros and constants. */
36 /*============================================================================*/
38 #define DEFAULT_SIDEBAR_WIDTH 320
40 /*============================================================================*/
42 /*============================================================================*/
44 static GObjectClass *parent_class;
46 static gchar* doc_verbs [] = {
47 "/commands/PropertyEditor",
52 /*============================================================================*/
53 /* Local function prototypes */
54 /*============================================================================*/
56 static void gl_ui_sidebar_class_init (glUISidebarClass *class);
57 static void gl_ui_sidebar_instance_init (glUISidebar *sidebar);
58 static void gl_ui_sidebar_finalize (GObject *object);
60 static void gl_ui_sidebar_construct (glUISidebar *sidebar,
61 BonoboUIComponent *ui_component);
63 static void selection_changed_cb (glView *view,
64 glUISidebar *sidebar);
68 /****************************************************************************/
69 /* Boilerplate Object stuff. */
70 /****************************************************************************/
72 gl_ui_sidebar_get_type (void)
74 static GType type = 0;
77 static const GTypeInfo info = {
78 sizeof (glUISidebarClass),
81 (GClassInitFunc) gl_ui_sidebar_class_init,
86 (GInstanceInitFunc) gl_ui_sidebar_instance_init,
90 type = g_type_register_static (GTK_TYPE_VBOX,
91 "glUISidebar", &info, 0);
98 gl_ui_sidebar_class_init (glUISidebarClass *class)
100 GObjectClass *object_class = (GObjectClass *) class;
102 gl_debug (DEBUG_UI, "START");
104 parent_class = g_type_class_peek_parent (class);
106 object_class->finalize = gl_ui_sidebar_finalize;
108 gl_debug (DEBUG_UI, "END");
112 gl_ui_sidebar_instance_init (glUISidebar *sidebar)
114 gl_debug (DEBUG_UI, "START");
116 sidebar->view = NULL;
118 gl_debug (DEBUG_UI, "END");
122 gl_ui_sidebar_finalize (GObject *object)
124 glUISidebar *sidebar;
126 gl_debug (DEBUG_UI, "START");
128 g_return_if_fail (object != NULL);
129 g_return_if_fail (GL_IS_UI_SIDEBAR (object));
131 sidebar = GL_UI_SIDEBAR (object);
134 g_object_unref (G_OBJECT(sidebar->view));
138 G_OBJECT_CLASS (parent_class)->finalize (object);
140 gl_debug (DEBUG_UI, "END");
143 /****************************************************************************/
144 /* Create a NEW sidebar. */
145 /****************************************************************************/
147 gl_ui_sidebar_new (BonoboUIComponent *ui_component)
149 glUISidebar *sidebar;
151 gl_debug (DEBUG_UI, "START");
153 sidebar = g_object_new (gl_ui_sidebar_get_type (), NULL);
155 gtk_widget_set_size_request (GTK_WIDGET (sidebar), DEFAULT_SIDEBAR_WIDTH, -1);
157 gl_ui_sidebar_construct (sidebar, ui_component);
159 gl_debug (DEBUG_UI, "END");
161 return G_OBJECT(sidebar);
164 /******************************************************************************/
165 /* Initialize property toolbar. */
166 /******************************************************************************/
168 gl_ui_sidebar_construct (glUISidebar *sidebar,
169 BonoboUIComponent *ui_component)
171 gl_debug (DEBUG_UI, "START");
173 sidebar->ui_component = ui_component;
175 gl_ui_util_insert_widget (ui_component,
176 GTK_WIDGET (sidebar),
177 "/PropertySidebar/PropertyEditor");
179 sidebar->empty_child = gl_object_editor_new (GL_STOCK_PROPERTIES,
180 _("Object properties"),
181 GL_OBJECT_EDITOR_EMPTY,
184 sidebar->child = gtk_widget_ref (sidebar->empty_child);
185 gtk_widget_show (sidebar->child);
186 gtk_container_add (GTK_CONTAINER(sidebar), sidebar->child);
188 gl_ui_util_set_verb_list_sensitive (ui_component, doc_verbs, FALSE);
190 gl_debug (DEBUG_UI, "END");
193 /****************************************************************************/
194 /* Set view associated with sidebar. */
195 /****************************************************************************/
197 gl_ui_sidebar_set_view (glUISidebar *sidebar,
200 gl_debug (DEBUG_UI, "START");
202 g_return_if_fail (view && GL_IS_VIEW (view));
204 gl_ui_util_set_verb_list_sensitive (sidebar->ui_component, doc_verbs, TRUE);
206 sidebar->view = GL_VIEW (g_object_ref (G_OBJECT (view)));
208 g_signal_connect (G_OBJECT(view), "selection_changed",
209 G_CALLBACK(selection_changed_cb), sidebar);
211 gl_debug (DEBUG_UI, "END");
214 /*---------------------------------------------------------------------------*/
215 /* PRIVATE. View "selection state changed" callback. */
216 /*---------------------------------------------------------------------------*/
218 selection_changed_cb (glView *view,
219 glUISidebar *sidebar)
221 gl_debug (DEBUG_UI, "START");
223 g_return_if_fail (view && GL_IS_VIEW (view));
224 g_return_if_fail (sidebar && GL_IS_UI_SIDEBAR (sidebar));
226 gtk_container_remove (GTK_CONTAINER(sidebar), sidebar->child);
228 if (gl_view_is_selection_empty (view) || !gl_view_is_selection_atomic (view)) {
230 sidebar->child = gtk_widget_ref (sidebar->empty_child);
234 sidebar->child = gtk_widget_ref (gl_view_get_editor (view));
238 gtk_widget_show (sidebar->child);
240 gtk_container_add (GTK_CONTAINER(sidebar), sidebar->child);
242 gtk_box_pack_start (GTK_BOX(sidebar), sidebar->child, TRUE, TRUE, 0);
245 gl_debug (DEBUG_UI, "END");