gtk: add import/export memory menu items (#391)

GTK: Add import/export memory menu items
This commit is contained in:
prg318 2020-10-29 20:59:07 +00:00 committed by GitHub
parent 64da66f37b
commit cec553f4b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 126 additions and 0 deletions

View File

@ -139,6 +139,8 @@ static void OpenNdsDialog(GSimpleAction *action, GVariant *parameter, gpointer u
static void OpenRecent(GSimpleAction *action, GVariant *parameter, gpointer user_data); static void OpenRecent(GSimpleAction *action, GVariant *parameter, gpointer user_data);
static void SaveStateDialog(GSimpleAction *action, GVariant *parameter, gpointer user_data); static void SaveStateDialog(GSimpleAction *action, GVariant *parameter, gpointer user_data);
static void LoadStateDialog(GSimpleAction *action, GVariant *parameter, gpointer user_data); static void LoadStateDialog(GSimpleAction *action, GVariant *parameter, gpointer user_data);
static void ExportBackupMemoryDialog(GSimpleAction *action, GVariant *parameter, gpointer user_data);
static void ImportBackupMemoryDialog(GSimpleAction *action, GVariant *parameter, gpointer user_data);
void Launch(GSimpleAction *action, GVariant *parameter, gpointer user_data); void Launch(GSimpleAction *action, GVariant *parameter, gpointer user_data);
void Pause(GSimpleAction *action, GVariant *parameter, gpointer user_data); void Pause(GSimpleAction *action, GVariant *parameter, gpointer user_data);
static void ResetSaveStateTimes(); static void ResetSaveStateTimes();
@ -368,6 +370,16 @@ static const char *menu_builder =
" </section>" " </section>"
" <section>" " <section>"
" <item>" " <item>"
" <attribute name='label' translatable='yes'>_Import backup memory…</attribute>"
" <attribute name='action'>app.importbackup</attribute>"
" </item>"
" <item>"
" <attribute name='label' translatable='yes'>_Export backup memory…</attribute>"
" <attribute name='action'>app.exportbackup</attribute>"
" </item>"
" </section>"
" <section>"
" <item>"
" <attribute name='label' translatable='yes'>Record movie _to…</attribute>" " <attribute name='label' translatable='yes'>Record movie _to…</attribute>"
" <attribute name='action'>app.record_movie_to</attribute>" " <attribute name='action'>app.record_movie_to</attribute>"
" </item>" " </item>"
@ -1049,6 +1061,8 @@ static const GActionEntry app_entries[] = {
{ "loadstatefrom", LoadStateDialog }, { "loadstatefrom", LoadStateDialog },
{ "savestate", MenuSave, "u" }, { "savestate", MenuSave, "u" },
{ "loadstate", MenuLoad, "u" }, { "loadstate", MenuLoad, "u" },
{ "importbackup", ImportBackupMemoryDialog },
{ "exportbackup", ExportBackupMemoryDialog },
{ "recordmovie", RecordMovieDialog }, { "recordmovie", RecordMovieDialog },
{ "playmovie", PlayMovieDialog }, { "playmovie", PlayMovieDialog },
{ "stopmovie", StopMovie }, { "stopmovie", StopMovie },
@ -1630,6 +1644,8 @@ void Launch(GSimpleAction *action, GVariant *parameter, gpointer user_data)
g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(pApp), "run")), FALSE); g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(pApp), "run")), FALSE);
g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(pApp), "reset")), TRUE); g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(pApp), "reset")), TRUE);
g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(pApp), "printscreen")), TRUE); g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(pApp), "printscreen")), TRUE);
g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(pApp), "exportbackup")), TRUE);
g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(pApp), "importbackup")), TRUE);
//pause = gtk_bin_get_child(GTK_BIN(gtk_ui_manager_get_widget(ui_manager, "/ToolBar/pause"))); //pause = gtk_bin_get_child(GTK_BIN(gtk_ui_manager_get_widget(ui_manager, "/ToolBar/pause")));
//gtk_widget_grab_focus(pause); //gtk_widget_grab_focus(pause);
@ -1779,6 +1795,114 @@ static void PlayMovieDialog(GSimpleAction *action, GVariant *parameter, gpointer
g_object_unref(pFileSelection); g_object_unref(pFileSelection);
} }
static void ImportBackupMemoryDialog(GSimpleAction *action, GVariant *parameter, gpointer user_data)
{
GtkFileFilter *pFilter_raw, *pFilter_ar, *pFilter_any;
GtkFileChooserNative *pFileSelection;
if (desmume_running())
Pause(NULL, NULL, NULL);
pFilter_raw = gtk_file_filter_new();
gtk_file_filter_add_pattern(pFilter_raw, "*.sav");
gtk_file_filter_set_name(pFilter_raw, "Raw/No$GBA Save format (*.sav)");
pFilter_ar = gtk_file_filter_new();
gtk_file_filter_add_pattern(pFilter_ar, "*.duc");
gtk_file_filter_add_pattern(pFilter_ar, "*.dss");
gtk_file_filter_set_name(pFilter_ar, "Action Replay DS Save (*.duc,*.dss)");
pFilter_any = gtk_file_filter_new();
gtk_file_filter_add_pattern(pFilter_any, "*.sav");
gtk_file_filter_add_pattern(pFilter_any, "*.duc");
gtk_file_filter_add_pattern(pFilter_any, "*.dss");
gtk_file_filter_set_name(pFilter_any, "All supported types");
/* Creating the selection window */
pFileSelection = gtk_file_chooser_native_new("Import Backup Memory From ...",
GTK_WINDOW(pWindow),
GTK_FILE_CHOOSER_ACTION_OPEN,
"_Open", "_Cancel");
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_raw);
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_ar);
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_any);
/* Showing the window */
int response = gtk_native_dialog_run(GTK_NATIVE_DIALOG(pFileSelection));
if (response == GTK_RESPONSE_ACCEPT) {
GFile *file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(pFileSelection));
gchar *sPath = g_file_get_path(file);
if(MMU_new.backupDevice.importData(sPath) == false ) {
GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pWindow),
GTK_DIALOG_MODAL,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK,
"Unable to import:\n%s", sPath);
gtk_dialog_run(GTK_DIALOG(pDialog));
gtk_widget_destroy(pDialog);
}
g_free(sPath);
}
g_object_unref(pFileSelection);
Launch(NULL, NULL, NULL);
}
static void ExportBackupMemoryDialog(GSimpleAction *action, GVariant *parameter, gpointer user_data)
{
GtkFileFilter *pFilter_raw, *pFilter_ar, *pFilter_any;
GtkFileChooserNative *pFileSelection;
if (desmume_running())
Pause(NULL, NULL, NULL);
pFilter_raw = gtk_file_filter_new();
gtk_file_filter_add_pattern(pFilter_raw, "*.sav");
gtk_file_filter_set_name(pFilter_raw, "Raw/No$GBA Save format (*.sav)");
pFilter_any = gtk_file_filter_new();
gtk_file_filter_add_pattern(pFilter_any, "*.sav");
gtk_file_filter_set_name(pFilter_any, "All supported types");
/* Creating the selection window */
pFileSelection = gtk_file_chooser_native_new("Export Backup Memory To ...",
GTK_WINDOW(pWindow),
GTK_FILE_CHOOSER_ACTION_SAVE,
"_Save", "_Cancel");
gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (pFileSelection), TRUE);
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_raw);
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_any);
/* Showing the window */
int response = gtk_native_dialog_run(GTK_NATIVE_DIALOG(pFileSelection));
if (response == GTK_RESPONSE_ACCEPT) {
GFile *file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(pFileSelection));
gchar *sPath = g_file_get_path(file);
if(! g_str_has_suffix(sPath, ".sav"))
{
sPath = g_strjoin(NULL, sPath, ".sav", NULL);
}
if(MMU_new.backupDevice.exportData(sPath) == false ) {
GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pWindow),
GTK_DIALOG_MODAL,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK,
"Unable to export:\n%s", sPath);
gtk_dialog_run(GTK_DIALOG(pDialog));
gtk_widget_destroy(pDialog);
}
g_free(sPath);
}
g_object_unref(pFileSelection);
Launch(NULL, NULL, NULL);
}
static void SaveStateDialog(GSimpleAction *action, GVariant *parameter, gpointer user_data) static void SaveStateDialog(GSimpleAction *action, GVariant *parameter, gpointer user_data)
{ {
GtkFileFilter *pFilter_ds, *pFilter_any; GtkFileFilter *pFilter_ds, *pFilter_any;
@ -4213,6 +4337,8 @@ common_gtk_main(GApplication *app, gpointer user_data)
g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(app), "printscreen")), FALSE); g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(app), "printscreen")), FALSE);
g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(app), "cheatlist")), FALSE); g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(app), "cheatlist")), FALSE);
g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(app), "cheatsearch")), FALSE); g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(app), "cheatsearch")), FALSE);
g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(app), "importbackup")), FALSE);
g_simple_action_set_enabled(G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(app), "exportbackup")), FALSE);
nds_screen.gap_size = config.view_gap ? GAP_SIZE : 0; nds_screen.gap_size = config.view_gap ? GAP_SIZE : 0;