From ba93485172d7032c6a820b45ebc72a14f354dbb7 Mon Sep 17 00:00:00 2001 From: Raphael Assenat Date: Mon, 26 Oct 2015 08:31:40 -0400 Subject: [PATCH] Mempak open --- tool/gcn64cfg.glade | 11 ++++++++ tool/gcn64ctl_gui.h | 2 ++ tool/gcn64ctl_gui_mpkedit.c | 56 ++++++++++++++++++++++++++++++++----- 3 files changed, 62 insertions(+), 7 deletions(-) diff --git a/tool/gcn64cfg.glade b/tool/gcn64cfg.glade index 6beea42..5565dd4 100644 --- a/tool/gcn64cfg.glade +++ b/tool/gcn64cfg.glade @@ -87,6 +87,17 @@ Author: Raphaël Assénat False gtk-missing-image + + + *.mpk + *.n64 + + + + + *.note + + diff --git a/tool/gcn64ctl_gui.h b/tool/gcn64ctl_gui.h index ba0bdc0..52658ed 100644 --- a/tool/gcn64ctl_gui.h +++ b/tool/gcn64ctl_gui.h @@ -8,6 +8,8 @@ #define GET_ELEMENT(TYPE, ELEMENT) (TYPE *)gtk_builder_get_object(app->builder, #ELEMENT) #define GET_UI_ELEMENT(TYPE, ELEMENT) TYPE *ELEMENT = GET_ELEMENT(TYPE, ELEMENT) +void errorPopop(struct application *app, const char *message); + struct application { GtkBuilder *builder; GtkWindow *mainwindow; diff --git a/tool/gcn64ctl_gui_mpkedit.c b/tool/gcn64ctl_gui_mpkedit.c index b734206..a08c5a8 100644 --- a/tool/gcn64ctl_gui_mpkedit.c +++ b/tool/gcn64ctl_gui_mpkedit.c @@ -19,9 +19,11 @@ struct mpkedit_data *mpkedit_new(struct application *app) return NULL; } -// mpke->mpk = mempak_new(); - mpke->mpk = mempak_loadFromFile("/home/raph/0Dream/programming/multiuse_pcbX/gc_n64_usb-v3/tmp/perfect_dark_b.N64"); - + mpke->mpk = mempak_new(); + if (!mpke->mpk) { + free(mpke); + return NULL; + } return mpke; } @@ -33,6 +35,16 @@ void mpkedit_free(struct mpkedit_data *mpke) } } +void mpke_replaceMpk(struct application *app, mempak_structure_t *mpk) +{ + if (app->mpke->mpk) { + mempak_free(app->mpke->mpk); + } + + app->mpke->mpk = mpk; + mpke_syncModel(app); +} + void mpke_syncModel(struct application *app) { GET_UI_ELEMENT(GtkListStore, n64_notes); @@ -78,14 +90,44 @@ G_MODULE_EXPORT void mpke_new(GtkWidget *win, gpointer data) { struct application *app = data; - mempak_free(app->mpke->mpk); - app->mpke->mpk = mempak_new(); - - mpke_syncModel(app); + mpke_replaceMpk(app, mempak_new()); } G_MODULE_EXPORT void mpke_open(GtkWidget *win, gpointer data) { + struct application *app = data; + GtkWidget *dialog; + GET_UI_ELEMENT(GtkWindow, n64_mempak_window_editor); + GET_UI_ELEMENT(GtkFileFilter, n64_mempak_filter); + GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN; + int res; + + dialog = gtk_file_chooser_dialog_new("Load N64 mempak image", + n64_mempak_window_editor, + action, + "_Cancel", + GTK_RESPONSE_CANCEL, + "_Open", + GTK_RESPONSE_ACCEPT, + NULL); + + gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), n64_mempak_filter); + res = gtk_dialog_run (GTK_DIALOG(dialog)); + if (res == GTK_RESPONSE_ACCEPT) { + char *filename; + GtkFileChooser *chooser = GTK_FILE_CHOOSER(dialog); + mempak_structure_t *mpk; + + filename = gtk_file_chooser_get_filename(chooser); + mpk = mempak_loadFromFile(filename); + if (mpk) { + mpke_replaceMpk(app, mpk); + } else { + errorPopop(app, "Failed to load mempak"); + } + } + + gtk_widget_destroy(dialog); } G_MODULE_EXPORT void mpke_saveas(GtkWidget *win, gpointer data)