2 * Copyright (C) 2008, 2009, 2010, 2011 Philip Chimento and Marijn van Vliet.
5 * Chimara is free software copyrighted by Philip Chimento and Marijn van Vliet.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
10 * 1. Redistributions of source code must retain the above copyright notice,
11 * this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright notice,
13 * this list of conditions and the following disclaimer in the documentation
14 * and/or other materials provided with the distribution.
15 * 3. Neither of the names Philip Chimento or Marijn van Vliet, nor the name of
16 * any other contributor may be used to endorse or promote products derived
17 * from this software without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
32 #include <glib-object.h>
33 #include <glib/gi18n.h>
39 typedef struct _ChimaraBrowserPrivate {
40 GtkActionGroup *action_group;
41 } ChimaraBrowserPrivate;
43 #define CHIMARA_BROWSER_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), CHIMARA_TYPE_BROWSER, ChimaraBrowserPrivate))
44 #define CHIMARA_BROWSER_USE_PRIVATE ChimaraBrowserPrivate *priv = CHIMARA_BROWSER_PRIVATE(self)
46 G_DEFINE_TYPE(ChimaraBrowser, chimara_browser, GTK_TYPE_WINDOW);
51 on_browser_delete_event(GtkWidget *browser, GdkEvent *event)
60 chimara_browser_finalize(GObject *self)
62 CHIMARA_BROWSER_USE_PRIVATE;
63 g_object_unref(priv->action_group);
66 G_OBJECT_CLASS(chimara_browser_parent_class)->finalize(self);
70 chimara_browser_class_init(ChimaraBrowserClass *klass)
72 /* Override methods of parent classes */
73 GObjectClass *object_class = G_OBJECT_CLASS(klass);
74 object_class->finalize = chimara_browser_finalize;
77 g_type_class_add_private(klass, sizeof(ChimaraBrowserPrivate));
81 chimara_browser_init(ChimaraBrowser *self)
83 CHIMARA_BROWSER_USE_PRIVATE;
84 ChimaraApp *theapp = chimara_app_get();
86 /* Set own properties */
88 "title", _("Chimara"),
91 /* Build user interface */
92 char *object_ids[] = {
96 GtkBuilder *builder = new_builder_with_objects(object_ids);
98 priv->action_group = GTK_ACTION_GROUP(load_object(builder, "browser_group"));
99 g_object_ref(priv->action_group);
101 GtkUIManager *uimanager = new_ui_manager("browser.menus");
103 gtk_ui_manager_insert_action_group(uimanager, priv->action_group, 0);
104 gtk_ui_manager_insert_action_group(uimanager, chimara_app_get_action_group(theapp), 1);
105 GtkWidget *menubar = gtk_ui_manager_get_widget(uimanager, "/browser_menu");
106 GtkWidget *toolbar = gtk_ui_manager_get_widget(uimanager, "/browser_toolbar");
107 GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
108 gtk_container_add(GTK_CONTAINER(self), vbox);
109 gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);
110 gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
112 g_signal_connect(self, "delete-event", G_CALLBACK(on_browser_delete_event), NULL);
114 g_object_unref(uimanager);
115 g_object_unref(builder);
118 /* PUBLIC FUNCTIONS */
121 chimara_browser_new(void)
123 return GTK_WIDGET(g_object_new(CHIMARA_TYPE_BROWSER,
124 "type", GTK_WINDOW_TOPLEVEL,
128 /* GLADE CALLBACKS */
131 action_add_file(GtkAction *action, ChimaraBrowser *browser)
136 action_add_watched_folder(GtkAction *action, ChimaraBrowser *browser)
141 action_remove_file(GtkAction *action, ChimaraBrowser *browser)
146 action_play(GtkAction *action, ChimaraBrowser *browser)
151 action_more_info(GtkAction *action, ChimaraBrowser *browser)