Add browser actions and toolbar
[projects/chimara/chimara.git] / player / browser.c
index 4646eefddbb2169d1914916c9f20822631bf9e79..f63404d2afc99503e2f9a6b8d2cc9d1d453bd6ac 100644 (file)
@@ -1,12 +1,43 @@
+/*
+ * Copyright (C) 2008, 2009, 2010, 2011 Philip Chimento and Marijn van Vliet.
+ * All rights reserved.
+ *
+ * Chimara is free software copyrighted by Philip Chimento and Marijn van Vliet.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither of the names Philip Chimento or Marijn van Vliet, nor the name of
+ *    any other contributor may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
 #include <glib-object.h>
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
 #include "browser.h"
 #include "app.h"
-#include "error.h"
+#include "util.h"
 
 typedef struct _ChimaraBrowserPrivate {
-       int dummy;
+       GtkActionGroup *action_group;
 } ChimaraBrowserPrivate;
 
 #define CHIMARA_BROWSER_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), CHIMARA_TYPE_BROWSER, ChimaraBrowserPrivate))
@@ -14,9 +45,23 @@ typedef struct _ChimaraBrowserPrivate {
 
 G_DEFINE_TYPE(ChimaraBrowser, chimara_browser, GTK_TYPE_WINDOW);
 
+/* CALLBACKS */
+
+static gboolean
+on_browser_delete_event(GtkWidget *browser, GdkEvent *event)
+{
+       gtk_main_quit();
+       return TRUE;
+}
+
+/* TYPE SYSTEM */
+
 static void
 chimara_browser_finalize(GObject *self)
 {
+       CHIMARA_BROWSER_USE_PRIVATE;
+       g_object_unref(priv->action_group);
+
        /* Chain up */
        G_OBJECT_CLASS(chimara_browser_parent_class)->finalize(self);
 }
@@ -26,13 +71,7 @@ chimara_browser_class_init(ChimaraBrowserClass *klass)
 {
        /* Override methods of parent classes */
        GObjectClass *object_class = G_OBJECT_CLASS(klass);
-       //object_class->set_property = chimara_if_set_property;
-       //object_class->get_property = chimara_if_get_property;
        object_class->finalize = chimara_browser_finalize;
-       
-       /* Signals */
-
-       /* Properties */
 
        /* Private data */
        g_type_class_add_private(klass, sizeof(ChimaraBrowserPrivate));
@@ -41,34 +80,43 @@ chimara_browser_class_init(ChimaraBrowserClass *klass)
 static void
 chimara_browser_init(ChimaraBrowser *self)
 {
+       CHIMARA_BROWSER_USE_PRIVATE;
        ChimaraApp *theapp = chimara_app_get();
-       GError *error = NULL;
 
        /* Set own properties */
        g_object_set(self,
                "title", _("Chimara"),
                NULL);
 
-       GtkUIManager *uimanager = gtk_ui_manager_new();
-       if( !gtk_ui_manager_add_ui_from_file(uimanager, PACKAGE_DATA_DIR "/browser.menus", &error) ) {
-#ifdef DEBUG
-               g_error_free(error);
-               error = NULL;
-               if( !gtk_ui_manager_add_ui_from_file(uimanager, PACKAGE_SRC_DIR "/browser.menus", &error) ) {
-#endif /* DEBUG */
-                       error_dialog(NULL, error, "Error while building interface: ");
-                       return;
-#ifdef DEBUG
-               }
-#endif /* DEBUG */
-       }
-
-       gtk_ui_manager_insert_action_group(uimanager, chimara_app_get_action_group(theapp), 0);
+       /* Build user interface */
+       char *object_ids[] = {
+               "browser_group",
+               NULL
+       };
+       GtkBuilder *builder = new_builder_with_objects(object_ids);
+
+       priv->action_group = GTK_ACTION_GROUP(load_object(builder, "browser_group"));
+       g_object_ref(priv->action_group);
+
+       GtkUIManager *uimanager = new_ui_manager("browser.menus");
+
+       gtk_ui_manager_insert_action_group(uimanager, priv->action_group, 0);
+       gtk_ui_manager_insert_action_group(uimanager, chimara_app_get_action_group(theapp), 1);
        GtkWidget *menubar = gtk_ui_manager_get_widget(uimanager, "/browser_menu");
-       gtk_container_add(GTK_CONTAINER(self), menubar);
+       GtkWidget *toolbar = gtk_ui_manager_get_widget(uimanager, "/browser_toolbar");
+       GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+       gtk_container_add(GTK_CONTAINER(self), vbox);
+       gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
+
+       g_signal_connect(self, "delete-event", G_CALLBACK(on_browser_delete_event), NULL);
+
+       g_object_unref(uimanager);
+       g_object_unref(builder);
 }
 
 /* PUBLIC FUNCTIONS */
+
 GtkWidget *
 chimara_browser_new(void)
 {
@@ -77,3 +125,29 @@ chimara_browser_new(void)
                NULL));
 }
 
+/* GLADE CALLBACKS */
+
+void
+action_add_file(GtkAction *action, ChimaraBrowser *browser)
+{
+}
+
+void
+action_add_watched_folder(GtkAction *action, ChimaraBrowser *browser)
+{
+}
+
+void
+action_remove_file(GtkAction *action, ChimaraBrowser *browser)
+{
+}
+
+void
+action_play(GtkAction *action, ChimaraBrowser *browser)
+{
+}
+
+void
+action_more_info(GtkAction *action, ChimaraBrowser *browser)
+{
+}