gtk: add import/export memory menu items (#391)
GTK: Add import/export memory menu items
This commit is contained in:
parent
64da66f37b
commit
cec553f4b9
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue