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 "ui-sidebar.h"
27 #include <glib/gi18n.h>
28 #include <libgnomeprint/gnome-font.h>
31 #include "object-editor.h"
36 /*============================================================================*/
37 /* Private macros and constants. */
38 /*============================================================================*/
40 #define DEFAULT_SIDEBAR_WIDTH 320
42 /*============================================================================*/
44 /*============================================================================*/
46 static GObjectClass *parent_class;
48 static gchar* doc_verbs [] = {
49 "/commands/PropertyEditor",
54 /*============================================================================*/
55 /* Local function prototypes */
56 /*============================================================================*/
58 static void gl_ui_sidebar_class_init (glUISidebarClass *class);
59 static void gl_ui_sidebar_instance_init (glUISidebar *sidebar);
60 static void gl_ui_sidebar_finalize (GObject *object);
62 static void gl_ui_sidebar_construct (glUISidebar *sidebar,
63 BonoboUIComponent *ui_component);
65 static void selection_changed_cb (glView *view,
66 glUISidebar *sidebar);
70 /****************************************************************************/
71 /* Boilerplate Object stuff. */
72 /****************************************************************************/
74 gl_ui_sidebar_get_type (void)
76 static GType type = 0;
79 static const GTypeInfo info = {
80 sizeof (glUISidebarClass),
83 (GClassInitFunc) gl_ui_sidebar_class_init,
88 (GInstanceInitFunc) gl_ui_sidebar_instance_init,
92 type = g_type_register_static (GTK_TYPE_VBOX,
93 "glUISidebar", &info, 0);
100 gl_ui_sidebar_class_init (glUISidebarClass *class)
102 GObjectClass *object_class = (GObjectClass *) class;
104 gl_debug (DEBUG_UI, "START");
106 parent_class = g_type_class_peek_parent (class);
108 object_class->finalize = gl_ui_sidebar_finalize;
110 gl_debug (DEBUG_UI, "END");
114 gl_ui_sidebar_instance_init (glUISidebar *sidebar)
116 gl_debug (DEBUG_UI, "START");
118 sidebar->view = NULL;
120 gl_debug (DEBUG_UI, "END");
124 gl_ui_sidebar_finalize (GObject *object)
126 glUISidebar *sidebar;
128 gl_debug (DEBUG_UI, "START");
130 g_return_if_fail (object != NULL);
131 g_return_if_fail (GL_IS_UI_SIDEBAR (object));
133 sidebar = GL_UI_SIDEBAR (object);
136 g_object_unref (G_OBJECT(sidebar->view));
140 G_OBJECT_CLASS (parent_class)->finalize (object);
142 gl_debug (DEBUG_UI, "END");
145 /****************************************************************************/
146 /* Create a NEW sidebar. */
147 /****************************************************************************/
149 gl_ui_sidebar_new (BonoboUIComponent *ui_component)
151 glUISidebar *sidebar;
153 gl_debug (DEBUG_UI, "START");
155 sidebar = g_object_new (gl_ui_sidebar_get_type (), NULL);
157 gtk_widget_set_size_request (GTK_WIDGET (sidebar), DEFAULT_SIDEBAR_WIDTH, -1);
159 gl_ui_sidebar_construct (sidebar, ui_component);
161 gl_debug (DEBUG_UI, "END");
163 return G_OBJECT(sidebar);
166 /******************************************************************************/
167 /* Initialize property toolbar. */
168 /******************************************************************************/
170 gl_ui_sidebar_construct (glUISidebar *sidebar,
171 BonoboUIComponent *ui_component)
173 gl_debug (DEBUG_UI, "START");
175 sidebar->ui_component = ui_component;
177 gl_ui_util_insert_widget (ui_component,
178 GTK_WIDGET (sidebar),
179 "/PropertySidebar/PropertyEditor");
181 sidebar->empty_child = gl_object_editor_new (GL_STOCK_PROPERTIES,
182 _("Object properties"),
183 GL_OBJECT_EDITOR_EMPTY,
186 sidebar->child = gtk_widget_ref (sidebar->empty_child);
187 gtk_widget_show (sidebar->child);
188 gtk_container_add (GTK_CONTAINER(sidebar), sidebar->child);
190 gl_ui_util_set_verb_list_sensitive (ui_component, doc_verbs, FALSE);
192 gl_debug (DEBUG_UI, "END");
195 /****************************************************************************/
196 /* Set view associated with sidebar. */
197 /****************************************************************************/
199 gl_ui_sidebar_set_view (glUISidebar *sidebar,
202 gl_debug (DEBUG_UI, "START");
204 g_return_if_fail (view && GL_IS_VIEW (view));
206 gl_ui_util_set_verb_list_sensitive (sidebar->ui_component, doc_verbs, TRUE);
208 sidebar->view = GL_VIEW (g_object_ref (G_OBJECT (view)));
210 g_signal_connect (G_OBJECT(view), "selection_changed",
211 G_CALLBACK(selection_changed_cb), sidebar);
213 gl_debug (DEBUG_UI, "END");
216 /*---------------------------------------------------------------------------*/
217 /* PRIVATE. View "selection state changed" callback. */
218 /*---------------------------------------------------------------------------*/
220 selection_changed_cb (glView *view,
221 glUISidebar *sidebar)
223 gl_debug (DEBUG_UI, "START");
225 g_return_if_fail (view && GL_IS_VIEW (view));
226 g_return_if_fail (sidebar && GL_IS_UI_SIDEBAR (sidebar));
228 gtk_container_remove (GTK_CONTAINER(sidebar), sidebar->child);
230 if (gl_view_is_selection_empty (view) || !gl_view_is_selection_atomic (view)) {
232 sidebar->child = gtk_widget_ref (sidebar->empty_child);
236 sidebar->child = gtk_widget_ref (gl_view_get_editor (view));
240 gtk_widget_show (sidebar->child);
242 gtk_container_add (GTK_CONTAINER(sidebar), sidebar->child);
244 gtk_box_pack_start (GTK_BOX(sidebar), sidebar->child, TRUE, TRUE, 0);
247 gl_debug (DEBUG_UI, "END");