X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=gui%2FGtk2Gui.c;fp=gui%2FGtk2Gui.c;h=0000000000000000000000000000000000000000;hp=89da504f3ab1a6a2b596d9a629a6069ddfb8181d;hb=aa1fc44b4532dc68be2482730a275f8a3ba8a039;hpb=ef79bbde537d6b9c745a7d86cb9df1d04c35590d diff --git a/gui/Gtk2Gui.c b/gui/Gtk2Gui.c deleted file mode 100644 index 89da504f..00000000 --- a/gui/Gtk2Gui.c +++ /dev/null @@ -1,944 +0,0 @@ -/* Pcsx - Pc Psx Emulator - * Copyright (C) 1999-2002 Pcsx Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "Linux.h" - -#include "../libpcsxcore/plugins.h" -#include "../libpcsxcore/cheat.h" - -#include "MemcardDlg.h" -#include "ConfDlg.h" -#include "DebugMemory.h" -#include "AboutDlg.h" - -// Functions Callbacks -void OnFile_RunCd(); -void OnFile_RunBios(); -void OnFile_RunExe(); -void OnFile_RunImage(); -void OnEmu_Run(); -void OnEmu_Reset(); -void OnEmu_SwitchImage(); -void OnHelp_Help(); -void OnHelp_About(); -void OnDestroy(); -void OnFile_Exit(); - -void on_states_load(GtkWidget *widget, gpointer user_data); -void on_states_load_other(); -void on_states_save(GtkWidget *widget, gpointer user_data); -void on_states_save_other(); - -GtkWidget *Window = NULL; - -int destroy = 0; - -#define MAX_SLOTS 5 - -/* TODO - If MAX_SLOTS changes, need to find a way to automatically set all positions */ -int Slots[MAX_SLOTS] = { -1, -1, -1, -1, -1 }; - -void ResetMenuSlots(GladeXML *xml) { - GtkWidget *widget; - gchar *str; - int i; - - if (CdromId[0] == '\0') { - // disable state saving/loading if no CD is loaded - for (i = 0; i < MAX_SLOTS; i++) { - str = g_strdup_printf("GtkMenuItem_SaveSlot%d", i+1); - widget = glade_xml_get_widget(xml, str); - g_free(str); - - gtk_widget_set_sensitive(widget, FALSE); - - str = g_strdup_printf("GtkMenuItem_LoadSlot%d", i+1); - widget = glade_xml_get_widget(xml, str); - g_free(str); - - gtk_widget_set_sensitive(widget, FALSE); - } - - // also disable certain menu/toolbar items - widget = glade_xml_get_widget(xml, "other1"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "other2"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "run1"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "reset1"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "search1"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "SwitchImage"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "memorydump1"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "toolbutton_run"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "toolbutton_switchimage"); - gtk_widget_set_sensitive(widget, FALSE); - - widget = glade_xml_get_widget(xml, "statusbar"); - gtk_statusbar_pop(GTK_STATUSBAR(widget), 1); - gtk_statusbar_push(GTK_STATUSBAR(widget), 1, _("Ready")); - } - else { - for (i = 0; i < MAX_SLOTS; i++) { - str = g_strdup_printf("GtkMenuItem_LoadSlot%d", i+1); - widget = glade_xml_get_widget (xml, str); - g_free (str); - - if (Slots[i] == -1) - gtk_widget_set_sensitive(widget, FALSE); - else - gtk_widget_set_sensitive(widget, TRUE); - } - - widget = glade_xml_get_widget(xml, "plugins_bios"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "graphics1"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "sound1"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "cdrom1"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "pad1"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "net1"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "SwitchImage"); - gtk_widget_set_sensitive(widget, UsingIso()); - widget = glade_xml_get_widget(xml, "toolbutton_switchimage"); - gtk_widget_set_sensitive(widget, UsingIso()); - widget = glade_xml_get_widget(xml, "toolbutton_graphics"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "toolbutton_sound"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "toolbutton_cdrom"); - gtk_widget_set_sensitive(widget, FALSE); - widget = glade_xml_get_widget(xml, "toolbutton_controllers"); - gtk_widget_set_sensitive(widget, FALSE); - - widget = glade_xml_get_widget(xml, "statusbar"); - gtk_statusbar_pop(GTK_STATUSBAR(widget), 1); - gtk_statusbar_push(GTK_STATUSBAR(widget), 1, _("Emulation Paused.")); - } -} - -int match(const char *string, char *pattern) { - int status; - regex_t re; - - if (regcomp(&re, pattern, REG_EXTENDED | REG_NOSUB) != 0) { - return 0; - } - status = regexec(&re, string, (size_t) 0, NULL, 0); - regfree(&re); - if (status != 0) { - return 0; - } - - return 1; -} - -gchar* get_state_filename(int i) { - gchar *state_filename; - char SStateFile[64]; - char trimlabel[33]; - int j; - - strncpy(trimlabel, CdromLabel, 32); - trimlabel[32] = 0; - for (j = 31; j >= 0; j--) - if (trimlabel[j] == ' ') - trimlabel[j] = 0; - else - continue; - - sprintf(SStateFile, "%.32s-%.9s.%3.3d", trimlabel, CdromId, i); - state_filename = g_build_filename (getenv("HOME"), STATES_DIR, SStateFile, NULL); - - return state_filename; -} - -void UpdateMenuSlots() { - gchar *str; - int i; - - for (i = 0; i < MAX_SLOTS; i++) { - str = get_state_filename (i); - Slots[i] = CheckState(str); - g_free (str); - } -} - -void StartGui() { - GladeXML *xml; - GtkWidget *widget; - - /* If a plugin fails, the Window is not NULL, but is not initialised, - so the following causes a segfault - if (Window != NULL) { - gtk_window_present (GTK_WINDOW (Window)); - return; - }*/ - - xml = glade_xml_new(PACKAGE_DATA_DIR "pcsx.glade2", "MainWindow", NULL); - - if (!xml) { - g_warning("We could not load the interface!"); - return; - } - - Window = glade_xml_get_widget(xml, "MainWindow"); - gtk_window_set_title(GTK_WINDOW(Window), "PCSX"); - gtk_window_set_icon_from_file(GTK_WINDOW(Window), PIXMAPDIR "pcsx-icon.png", NULL); - gtk_window_set_default_icon_from_file(PIXMAPDIR "pcsx-icon.png", NULL); - ResetMenuSlots(xml); - - // Set up callbacks - g_signal_connect_data(GTK_OBJECT(Window), "delete-event", - GTK_SIGNAL_FUNC(OnDestroy), xml, (GClosureNotify)g_object_unref, G_CONNECT_AFTER); - - // File menu - widget = glade_xml_get_widget(xml, "RunCd"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(OnFile_RunCd), NULL, NULL, G_CONNECT_AFTER); - - widget = glade_xml_get_widget(xml, "RunBios"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(OnFile_RunBios), NULL, NULL, G_CONNECT_AFTER); - - widget = glade_xml_get_widget(xml, "RunExe"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(OnFile_RunExe), NULL, NULL, G_CONNECT_AFTER); - - widget = glade_xml_get_widget(xml, "RunImage"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(OnFile_RunImage), NULL, NULL, G_CONNECT_AFTER); - - widget = glade_xml_get_widget(xml, "exit2"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(OnFile_Exit), NULL, NULL, G_CONNECT_AFTER); - - // States - widget = glade_xml_get_widget(xml, "GtkMenuItem_LoadSlot1"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(on_states_load), (gpointer) 0, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "GtkMenuItem_LoadSlot2"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(on_states_load), (gpointer) 1, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "GtkMenuItem_LoadSlot3"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(on_states_load), (gpointer) 2, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "GtkMenuItem_LoadSlot4"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(on_states_load), (gpointer) 3, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "GtkMenuItem_LoadSlot5"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(on_states_load), (gpointer) 4, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "other1"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(on_states_load_other), NULL, NULL, G_CONNECT_AFTER); - - widget = glade_xml_get_widget(xml, "GtkMenuItem_SaveSlot1"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(on_states_save), (gpointer) 0, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "GtkMenuItem_SaveSlot2"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(on_states_save), (gpointer) 1, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "GtkMenuItem_SaveSlot3"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(on_states_save), (gpointer) 2, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "GtkMenuItem_SaveSlot4"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(on_states_save), (gpointer) 3, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "GtkMenuItem_SaveSlot5"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(on_states_save), (gpointer) 4, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "other2"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(on_states_save_other), NULL, NULL, G_CONNECT_AFTER); - - // Emulation menu - widget = glade_xml_get_widget(xml, "run1"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(OnEmu_Run), NULL, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "reset1"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(OnEmu_Reset), NULL, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "SwitchImage"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(OnEmu_SwitchImage), NULL, NULL, G_CONNECT_AFTER); - - // Configuration menu - widget = glade_xml_get_widget(xml, "plugins_bios"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(ConfigurePlugins), NULL, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "graphics1"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(OnConf_Graphics), NULL, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "sound1"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(OnConf_Sound), NULL, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "cdrom1"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(OnConf_CdRom), NULL, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "pad1"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(OnConf_Pad), NULL, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "cpu1"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(OnConf_Cpu), NULL, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "memory_cards1"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(OnConf_Mcds), NULL, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "net1"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(OnConf_Net), NULL, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "memorydump1"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(RunDebugMemoryDialog), NULL, NULL, G_CONNECT_AFTER); - - // Cheat menu - widget = glade_xml_get_widget(xml, "browse1"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(RunCheatListDialog), NULL, NULL, G_CONNECT_AFTER); - widget = glade_xml_get_widget(xml, "search1"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(RunCheatSearchDialog), NULL, NULL, G_CONNECT_AFTER); - - // Help menu - widget = glade_xml_get_widget(xml, "about_pcsx1"); - g_signal_connect_data(GTK_OBJECT(widget), "activate", - GTK_SIGNAL_FUNC(OnHelp_About), NULL, NULL, G_CONNECT_AFTER); - - // Toolbar - widget = glade_xml_get_widget(xml, "toolbutton_runcd"); - g_signal_connect_data(GTK_OBJECT(widget), "clicked", - GTK_SIGNAL_FUNC(OnFile_RunCd), NULL, NULL, G_CONNECT_AFTER); - - widget = glade_xml_get_widget(xml, "toolbutton_runimage"); - g_signal_connect_data(GTK_OBJECT(widget), "clicked", - GTK_SIGNAL_FUNC(OnFile_RunImage), NULL, NULL, G_CONNECT_AFTER); - - widget = glade_xml_get_widget(xml, "toolbutton_run"); - g_signal_connect_data(GTK_OBJECT(widget), "clicked", - GTK_SIGNAL_FUNC(OnEmu_Run), NULL, NULL, G_CONNECT_AFTER); - - widget = glade_xml_get_widget(xml, "toolbutton_switchimage"); - g_signal_connect_data(GTK_OBJECT(widget), "clicked", - GTK_SIGNAL_FUNC(OnEmu_SwitchImage), NULL, NULL, G_CONNECT_AFTER); - - widget = glade_xml_get_widget(xml, "toolbutton_memcards"); - g_signal_connect_data(GTK_OBJECT(widget), "clicked", - GTK_SIGNAL_FUNC(OnConf_Mcds), NULL, NULL, G_CONNECT_AFTER); - - widget = glade_xml_get_widget(xml, "toolbutton_graphics"); - g_signal_connect_data(GTK_OBJECT(widget), "clicked", - GTK_SIGNAL_FUNC(OnConf_Graphics), NULL, NULL, G_CONNECT_AFTER); - - widget = glade_xml_get_widget(xml, "toolbutton_sound"); - g_signal_connect_data(GTK_OBJECT(widget), "clicked", - GTK_SIGNAL_FUNC(OnConf_Sound), NULL, NULL, G_CONNECT_AFTER); - - widget = glade_xml_get_widget(xml, "toolbutton_cdrom"); - g_signal_connect_data(GTK_OBJECT(widget), "clicked", - GTK_SIGNAL_FUNC(OnConf_CdRom), NULL, NULL, G_CONNECT_AFTER); - - widget = glade_xml_get_widget(xml, "toolbutton_controllers"); - g_signal_connect_data(GTK_OBJECT(widget), "clicked", - GTK_SIGNAL_FUNC(OnConf_Pad), NULL, NULL, G_CONNECT_AFTER); - - gtk_main(); -} - -void OnDestroy() { - if (!destroy) OnFile_Exit(); -} - -void destroy_main_window () { - destroy = 1; - gtk_widget_destroy(Window); - Window = NULL; - destroy = 0; - gtk_main_quit(); - while (gtk_events_pending()) gtk_main_iteration(); -} - -void OnFile_RunExe() { - GtkWidget *file_chooser; - - if (plugins_configured() == FALSE) { - ConfigurePlugins(); - } else { - file_chooser = gtk_file_chooser_dialog_new(_("Select PSX EXE File"), - NULL, GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); - - // Add file filters - GtkFileFilter *exefilter = gtk_file_filter_new (); - gtk_file_filter_add_pattern (exefilter, "*.exe"); - gtk_file_filter_add_pattern (exefilter, "*.psx"); - gtk_file_filter_add_pattern (exefilter, "*.cpe"); - gtk_file_filter_add_pattern (exefilter, "*.EXE"); - gtk_file_filter_add_pattern (exefilter, "*.PSX"); - gtk_file_filter_add_pattern (exefilter, "*.CPE"); - gtk_file_filter_set_name (exefilter, _("PlayStation Executable Files")); - gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (file_chooser), exefilter); - GtkFileFilter *allfilter = gtk_file_filter_new (); - gtk_file_filter_add_pattern (allfilter, "*"); - gtk_file_filter_set_name (allfilter, _("All Files")); - gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (file_chooser), allfilter); - - // Set this to the config object and retain it - maybe LastUsedDir - gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(file_chooser), getenv("HOME")); - - if (gtk_dialog_run(GTK_DIALOG(file_chooser)) == GTK_RESPONSE_ACCEPT) { - gchar *file; - - /* TODO Need to validate the file */ - - file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser)); - - gtk_widget_destroy (file_chooser); - destroy_main_window(); - - SetIsoFile(NULL); - LoadPlugins(); - NetOpened = FALSE; - - if (OpenPlugins() == -1) { - g_free(file); - SysRunGui(); - } else { - SysReset(); - - if (Load(file) == 0) { - g_free(file); - psxCpu->Execute(); - } else { - g_free(file); - ClosePlugins(); - SysErrorMessage(_("Not a valid PSX file"), _("The file does not appear to be a valid Playstation executable")); - SysRunGui(); - } - } - } else - gtk_widget_destroy(file_chooser); - } -} - -void OnFile_RunCd() { - if (plugins_configured() == FALSE) { - ConfigurePlugins(); - return; - } - - destroy_main_window(); - - SetIsoFile(NULL); - LoadPlugins(); - NetOpened = FALSE; - - if (OpenPlugins() == -1) { - SysRunGui(); - return; - } - - SysReset(); - - if (CheckCdrom() == -1) { - /* Only check the CD if we are starting the console with a CD */ - ClosePlugins(); - SysErrorMessage (_("CD ROM failed"), _("The CD does not appear to be a valid Playstation CD")); - SysRunGui(); - return; - } - - // Read main executable directly from CDRom and start it - if (LoadCdrom() == -1) { - ClosePlugins(); - SysErrorMessage(_("Could not load CD-ROM!"), _("The CD-ROM could not be loaded")); - SysRunGui(); - } - - psxCpu->Execute(); -} - -void OnFile_RunBios() { - if (plugins_configured() == FALSE) { - ConfigurePlugins(); - return; - } - - if (strcmp(Config.Bios, "HLE") == 0) { - SysErrorMessage (_("Could not run BIOS"), _("Running BIOS is not supported with Internal HLE BIOS.")); - return; - } - - destroy_main_window(); - - SetIsoFile(NULL); - LoadPlugins(); - NetOpened = FALSE; - - if (OpenPlugins() == -1) { - SysRunGui(); - return; - } - - SysReset(); - - CdromId[0] = '\0'; - CdromLabel[0] = '\0'; - - psxCpu->Execute(); -} - -static gchar *Open_Iso_Proc() { - GtkWidget *chooser; - gchar *filename; - GtkFileFilter *psxfilter, *allfilter; - static char current_folder[MAXPATHLEN] = ""; - - chooser = gtk_file_chooser_dialog_new (_("Open PSX Disc Image File"), - NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OK, GTK_RESPONSE_OK, - NULL); - - if (current_folder[0] == '\0') { - strcpy(current_folder, getenv("HOME")); - } - - gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (chooser), current_folder); - - psxfilter = gtk_file_filter_new(); - gtk_file_filter_add_pattern(psxfilter, "*.bin"); - gtk_file_filter_add_pattern(psxfilter, "*.img"); - gtk_file_filter_add_pattern(psxfilter, "*.mdf"); - gtk_file_filter_add_pattern(psxfilter, "*.iso"); - gtk_file_filter_add_pattern(psxfilter, "*.BIN"); - gtk_file_filter_add_pattern(psxfilter, "*.IMG"); - gtk_file_filter_add_pattern(psxfilter, "*.MDF"); - gtk_file_filter_add_pattern(psxfilter, "*.ISO"); - gtk_file_filter_set_name(psxfilter, _("PSX Image Files (*.bin, *.img, *.mdf, *.iso)")); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (chooser), psxfilter); - - allfilter = gtk_file_filter_new(); - gtk_file_filter_add_pattern(allfilter, "*"); - gtk_file_filter_set_name(allfilter, _("All Files")); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (chooser), allfilter); - - if (gtk_dialog_run(GTK_DIALOG(chooser)) == GTK_RESPONSE_OK) { - gchar *path = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(chooser)); - strcpy(current_folder, path); - g_free(path); - filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (chooser)); - gtk_widget_destroy(GTK_WIDGET(chooser)); - while (gtk_events_pending()) gtk_main_iteration(); - return filename; - } else { - gtk_widget_destroy (GTK_WIDGET(chooser)); - while (gtk_events_pending()) gtk_main_iteration(); - return NULL; - } -} - -void OnFile_RunImage() { - gchar *filename; - - if (plugins_configured() == FALSE) { - ConfigurePlugins(); - return; - } - - filename = Open_Iso_Proc(); - if (filename == NULL) { - return; - } - - destroy_main_window(); - - SetIsoFile(filename); - g_free(filename); - - LoadPlugins(); - NetOpened = FALSE; - - if (OpenPlugins() == -1) { - SysRunGui(); - return; - } - - SysReset(); - - if (CheckCdrom() == -1) { - // Only check the CD if we are starting the console with a CD - ClosePlugins(); - SysErrorMessage (_("CD ROM failed"), _("The CD does not appear to be a valid Playstation CD")); - SysRunGui(); - return; - } - - // Read main executable directly from CDRom and start it - if (LoadCdrom() == -1) { - ClosePlugins(); - SysErrorMessage(_("Could not load CD-ROM!"), _("The CD-ROM could not be loaded")); - SysRunGui(); - } - - psxCpu->Execute(); -} - -void OnEmu_Run() { - if (plugins_configured() == FALSE) { - ConfigurePlugins(); - return; - } - - destroy_main_window(); - - if (OpenPlugins() == -1) { - SysRunGui(); - return; - } - - CheatSearchBackupMemory(); - psxCpu->Execute(); -} - -void OnEmu_Reset() { - if (plugins_configured() == FALSE) { - ConfigurePlugins(); - return; - } - - destroy_main_window(); - - if (OpenPlugins() == -1) { - SysRunGui(); - return; - } - - SysReset(); - - if (CheckCdrom() != -1) { - LoadCdrom(); - } - - psxCpu->Execute(); -} - -void OnEmu_SwitchImage() { - gchar *filename; - - if (plugins_configured() == FALSE) { - ConfigurePlugins(); - return; - } - - filename = Open_Iso_Proc(); - if (filename == NULL) { - return; - } - - destroy_main_window(); - - SetIsoFile(filename); - g_free(filename); - - if (OpenPlugins() == -1) { - SysRunGui(); - return; - } - - SetCdOpenCaseTime(time(NULL) + 2); - - CheatSearchBackupMemory(); - psxCpu->Execute(); -} - -void OnFile_Exit() { - DIR *dir; - struct dirent *ent; - void *Handle; - gchar *plugin = NULL; - gchar *dotdir; - - dotdir = g_build_filename(getenv("HOME"), PLUGINS_DIR, NULL); - - // with this the problem with plugins that are linked with the pthread - // library is solved - - dir = opendir(dotdir); - if (dir != NULL) { - while ((ent = readdir(dir)) != NULL) { - plugin = g_build_filename(dotdir, ent->d_name, NULL); - - if (strstr(plugin, ".so") == NULL && strstr(plugin, ".dylib") == NULL) - continue; - Handle = dlopen(plugin, RTLD_NOW); - if (Handle == NULL) - continue; - - g_free(plugin); - } - } - g_free(dotdir); - - bind_textdomain_codeset(PACKAGE_NAME, ""); - if (UseGui) - gtk_main_quit(); - SysClose(); - if (UseGui) - gtk_exit (0); - else - exit(0); -} - -void state_load(gchar *state_filename) { - int ret; - char Text[MAXPATHLEN + 20]; - FILE *fp; - - // check if the state file actually exists - fp = fopen(state_filename, "rb"); - if (fp == NULL) { - // file does not exist - return; - } - - fclose(fp); - - // If the window exists, then we are loading the state from within - // within the PCSX GUI. We need to initialise the plugins first - if (Window) { - destroy_main_window(); - - if (OpenPlugins() == -1) { - SysRunGui(); - return; - } - } - - ret = CheckState(state_filename); - - if (ret == 0) { - SysReset(); - ret = LoadState(state_filename); - } - - if (ret == 0) { - // Check the CD-ROM is valid - if (CheckCdrom() == -1) { - ClosePlugins(); - SysRunGui(); - return; - } - - sprintf(Text, _("Loaded state %s."), state_filename); - GPU_displayText(Text); - } else { - sprintf(Text, _("Error loading state %s!"), state_filename); - GPU_displayText(Text); - } -} - -void state_save(gchar *state_filename) { - char Text[MAXPATHLEN + 20]; - - GPU_updateLace(); - - if (SaveState(state_filename) == 0) - sprintf(Text, _("Saved state %s."), state_filename); - else - sprintf(Text, _("Error saving state %s!"), state_filename); - - GPU_displayText(Text); -} - -void on_states_load (GtkWidget *widget, gpointer user_data) { - gchar *state_filename; - gint state = (int)user_data; - - state_filename = get_state_filename(state); - - state_load(state_filename); - - g_free(state_filename); - - psxCpu->Execute(); -} - -void on_states_save (GtkWidget *widget, gpointer user_data) { - gchar *state_filename; - gint state = (int)user_data; - - state_filename = get_state_filename(state); - - state_save(state_filename); - - g_free(state_filename); -} - -void on_states_load_other() { - GtkWidget *file_chooser; - gchar *SStateFile; - - SStateFile = g_strconcat(getenv("HOME"), STATES_DIR, NULL); - - file_chooser = gtk_file_chooser_dialog_new(_("Select State File"), NULL, GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, - NULL); - gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (file_chooser), SStateFile); - g_free(SStateFile); - - if (gtk_dialog_run(GTK_DIALOG(file_chooser)) == GTK_RESPONSE_ACCEPT) { - gchar *filename; - - filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser)); - gtk_widget_destroy(file_chooser); - - state_load(filename); - - g_free(filename); - - psxCpu->Execute(); - } else - gtk_widget_destroy(file_chooser); -} - -void on_states_save_other() { - GtkWidget *file_chooser; - gchar *SStateFile; - - SStateFile = g_strconcat (getenv("HOME"), STATES_DIR, NULL); - - file_chooser = gtk_file_chooser_dialog_new(_("Select State File"), - NULL, GTK_FILE_CHOOSER_ACTION_SAVE, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_SAVE, GTK_RESPONSE_OK, - NULL); - gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(file_chooser), SStateFile); - g_free(SStateFile); - - if (gtk_dialog_run (GTK_DIALOG(file_chooser)) == GTK_RESPONSE_OK) { - gchar *filename; - - filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (file_chooser)); - gtk_widget_destroy(file_chooser); - - state_save(filename); - - g_free(filename); - } - else - gtk_widget_destroy(file_chooser); -} - -void OnHelp_About(GtkWidget *widget, gpointer user_data) { - RunAboutDialog(); -} - -void SysMessage(const char *fmt, ...) { - GtkWidget *Txt, *MsgDlg; - va_list list; - char msg[512]; - - va_start(list, fmt); - vsprintf(msg, fmt, list); - va_end(list); - - if (msg[strlen(msg) - 1] == '\n') - msg[strlen(msg) - 1] = 0; - - if (!UseGui) { - fprintf(stderr, "%s\n", msg); - return; - } - - MsgDlg = gtk_dialog_new_with_buttons(_("Notice"), NULL, - GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_NONE, NULL); - - gtk_window_set_position (GTK_WINDOW(MsgDlg), GTK_WIN_POS_CENTER); - - Txt = gtk_label_new (msg); - gtk_label_set_line_wrap(GTK_LABEL(Txt), TRUE); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(MsgDlg)->vbox), Txt); - - gtk_widget_show (Txt); - gtk_widget_show_all (MsgDlg); - gtk_dialog_run (GTK_DIALOG(MsgDlg)); - gtk_widget_destroy (MsgDlg); -} - -void SysErrorMessage(gchar *primary, gchar *secondary) { - GtkWidget *message_dialog; - if (!UseGui) - printf ("%s - %s\n", primary, secondary); - else { - message_dialog = gtk_message_dialog_new(NULL, - GTK_DIALOG_MODAL, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, - primary, - NULL); - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(message_dialog), - secondary); - - gtk_dialog_run(GTK_DIALOG(message_dialog)); - gtk_widget_destroy(message_dialog); - } -} - -void SysInfoMessage(gchar *primary, gchar *secondary) { - GtkWidget *message_dialog; - if (!UseGui) - printf ("%s - %s\n", primary, secondary); - else { - message_dialog = gtk_message_dialog_new(NULL, - GTK_DIALOG_MODAL, - GTK_MESSAGE_INFO, - GTK_BUTTONS_CLOSE, - primary, - NULL); - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(message_dialog), - secondary); - - gtk_dialog_run(GTK_DIALOG(message_dialog)); - gtk_widget_destroy(message_dialog); - } -}