Made ChimaraPlayer class
[projects/chimara/chimara.git] / player / main.c
index bd007b4ee128b0a7966822a37c547ca98c7b7c85..efecdab3134e0305a7e05f87951866568841d4cb 100644 (file)
 #include <libchimara/chimara-if.h>
 
 #include "preferences.h"
+#include "player.h"
+
 
-/* Static global pointers to widgets */
-static GtkUIManager *uimanager = NULL;
-static GtkWidget *window = NULL;
-static GtkWidget *glk = NULL;
 
 /* Global global pointers */
 GtkBuilder *builder = NULL;
 GtkWidget *aboutwindow = NULL;
 GtkWidget *prefswindow = NULL;
-GtkWidget *toolbar = NULL;
+
 GSettings *prefs_settings = NULL;
 GSettings *state_settings = NULL;
 
-GObject *
+static GObject *
 load_object(const gchar *name)
 {
        GObject *retval;
@@ -75,32 +73,12 @@ load_object(const gchar *name)
        return retval;
 }
 
-static void
-change_window_title(ChimaraGlk *glk, GParamSpec *pspec, GtkWindow *window)
-{
-       gchar *program_name, *story_name, *title;
-       g_object_get(glk, "program-name", &program_name, "story-name", &story_name, NULL);
-       if(!program_name) {
-               gtk_window_set_title(window, "Chimara");
-               return;
-       }
-       else if(!story_name)
-               title = g_strdup_printf("%s - Chimara", program_name);
-       else
-               title = g_strdup_printf("%s - %s - Chimara", program_name, story_name);
-               
-       g_free(program_name);
-       g_free(story_name);
-       gtk_window_set_title(window, title);
-       g_free(title);
-}
-
 static void
 create_window(void)
 {
        GError *error = NULL;
 
-       builder = gtk_builder_new();
+       builder = gtk_builder_new();
        if( !gtk_builder_add_from_file(builder, PACKAGE_DATA_DIR "/chimara.ui", &error) ) {
 #ifdef DEBUG
                g_error_free(error);
@@ -114,17 +92,8 @@ create_window(void)
 #endif /* DEBUG */
        }
 
-       window = GTK_WIDGET(load_object("chimara"));
        aboutwindow = GTK_WIDGET(load_object("aboutwindow"));
        prefswindow = GTK_WIDGET(load_object("prefswindow"));
-       GtkActionGroup *actiongroup = GTK_ACTION_GROUP(load_object("actiongroup"));
-
-       /* Set the default value of the "View/Toolbar" menu item upon creation of a
-        new window to the "show-toolbar-default" setting, but bind the setting
-        one-way only - we don't want toolbars to disappear suddenly */
-       GtkToggleAction *toolbar_action = GTK_TOGGLE_ACTION(load_object("toolbar"));
-       gtk_toggle_action_set_active(toolbar_action, g_settings_get_boolean(state_settings, "show-toolbar-default"));
-       g_settings_bind(state_settings, "show-toolbar-default", toolbar_action, "active", G_SETTINGS_BIND_SET);
 
        const gchar **ptr;
        GtkRecentFilter *filter = gtk_recent_filter_new();
@@ -139,73 +108,8 @@ create_window(void)
        GtkRecentChooser *recent = GTK_RECENT_CHOOSER(load_object("recent"));
        gtk_recent_chooser_add_filter(recent, filter);
 
-       uimanager = gtk_ui_manager_new();
-       if( !gtk_ui_manager_add_ui_from_file(uimanager, PACKAGE_DATA_DIR "/chimara.menus", &error) ) {
-#ifdef DEBUG
-               g_error_free(error);
-               error = NULL;
-               if( !gtk_ui_manager_add_ui_from_file(uimanager, PACKAGE_SRC_DIR "/chimara.menus", &error) ) {
-#endif /* DEBUG */
-                       error_dialog(NULL, error, "Error while building interface: ");
-                       return;
-#ifdef DEBUG
-               }
-#endif /* DEBUG */
-       }
-
-       glk = chimara_if_new();
-       g_object_set(glk,
-           "ignore-errors", TRUE,
-           /*"interpreter-number", CHIMARA_IF_ZMACHINE_TANDY_COLOR,*/
-           NULL);
-       if( !chimara_glk_set_css_from_file(CHIMARA_GLK(glk), PACKAGE_DATA_DIR "/style.css", &error) ) {
-#ifdef DEBUG
-               g_error_free(error);
-               error = NULL;
-               if( !chimara_glk_set_css_from_file(CHIMARA_GLK(glk), PACKAGE_SRC_DIR "/style.css", &error) ) {
-#endif /* DEBUG */
-                       error_dialog(NULL, error, "Couldn't open CSS file: ");
-                       return;
-#ifdef DEBUG
-               }
-#endif /* DEBUG */
-       }
-       
-       /* DON'T UNCOMMENT THIS your eyes will burn
-        but it is a good test of programmatically altering just one style
-       chimara_glk_set_css_from_string(CHIMARA_GLK(glk),
-           "buffer.normal { font-family: 'Comic Sans MS'; }");*/
-       
-       GtkBox *vbox = GTK_BOX( gtk_builder_get_object(builder, "vbox") );                      
-       if(vbox == NULL)
-       {
-               error_dialog(NULL, NULL, "Could not find vbox");
-               return;
-       }
-
-       gtk_ui_manager_insert_action_group(uimanager, actiongroup, 0);
-       GtkWidget *menubar = gtk_ui_manager_get_widget(uimanager, "/menubar");
-       toolbar = gtk_ui_manager_get_widget(uimanager, "/toolbar");
-       gtk_widget_set_no_show_all(toolbar, TRUE);
-       if(gtk_toggle_action_get_active(toolbar_action))
-               gtk_widget_show(toolbar);
-       else
-               gtk_widget_hide(toolbar);
-
-       /* Connect the accelerators */
-       GtkAccelGroup *accels = gtk_ui_manager_get_accel_group(uimanager);
-       gtk_window_add_accel_group(GTK_WINDOW(window), accels);
-
-       gtk_box_pack_end(vbox, glk, TRUE, TRUE, 0);
-       gtk_box_pack_start(vbox, menubar, FALSE, FALSE, 0);
-       gtk_box_pack_start(vbox, toolbar, FALSE, FALSE, 0);
-       
-       gtk_builder_connect_signals(builder, glk);
-       g_signal_connect(glk, "notify::program-name", G_CALLBACK(change_window_title), window);
-       g_signal_connect(glk, "notify::story-name", G_CALLBACK(change_window_title), window);
-       
        /* Create preferences window */
-       preferences_create(CHIMARA_GLK(glk));
+       preferences_create();
 }
 
 int
@@ -244,28 +148,23 @@ main(int argc, char *argv[])
        g_free(keyfile);
 
        create_window();
-       gtk_widget_show_all(window);
 
-       g_object_unref( G_OBJECT(uimanager) );
+       GtkWidget *window = chimara_player_new();
+       gtk_widget_show_all(window);
 
-       if(argc == 3) {
-               g_object_set(glk, "graphics-file", argv[2], NULL);
-       }
-       if(argc >= 2) {
-               if( !chimara_if_run_game(CHIMARA_IF(glk), argv[1], &error) ) {
-                       error_dialog(GTK_WINDOW(window), error, "Error starting Glk library: ");
-                       return 1;
-               }
-       }
+       //if(argc == 3) {
+       //      g_object_set(glk, "graphics-file", argv[2], NULL);
+       //}
+       //if(argc >= 2) {
+       //      if( !chimara_if_run_game(CHIMARA_IF(glk), argv[1], &error) ) {
+       //              error_dialog(GTK_WINDOW(window), error, "Error starting Glk library: ");
+       //              return 1;
+       //      }
+       //}
 
     gdk_threads_enter();
        gtk_main();
        gdk_threads_leave();
 
-       chimara_glk_stop(CHIMARA_GLK(glk));
-       chimara_glk_wait(CHIMARA_GLK(glk));
-
-       g_object_unref( G_OBJECT(builder) );
-
        return 0;
 }