void Window::vOnFileScreenCapture() { std::string sCaptureDir = m_poDirConfig->sGetKey("captures"); Gtk::FileChooserDialog oDialog(*this, _("Save screenshot"), Gtk::FILE_CHOOSER_ACTION_SAVE); oDialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); oDialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_OK); if (sCaptureDir == "") { oDialog.set_current_folder(Glib::path_get_dirname(m_sRomFile)); } else { oDialog.set_current_folder(sCaptureDir); oDialog.add_shortcut_folder(sCaptureDir); } oDialog.set_current_name(sCutSuffix(Glib::path_get_basename(m_sRomFile))); Gtk::FileFilter oPngFilter; oPngFilter.set_name(_("PNG image")); oPngFilter.add_pattern("*.[pP][nN][gG]"); oDialog.add_filter(oPngFilter); while (oDialog.run() == Gtk::RESPONSE_OK) { Glib::ustring sFile = oDialog.get_filename(); Glib::ustring sExt = ".png"; if (! bHasSuffix(sFile, sExt, false)) { sFile += sExt; } if (Glib::file_test(sFile, Glib::FILE_TEST_EXISTS)) { Gtk::MessageDialog oConfirmDialog(*this, _("File already exists. Overwrite it?"), false, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_YES_NO); if (oConfirmDialog.run() != Gtk::RESPONSE_YES) { continue; } } if (m_stEmulator.emuWritePNG(sFile.c_str())) { break; } } }
void Window::vOnFileSave() { Glib::ustring sSaveDir = m_poDirConfig->sGetKey("saves"); Gtk::FileChooserDialog oDialog(*this, _("Save game"), Gtk::FILE_CHOOSER_ACTION_SAVE); oDialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); oDialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_OK); if (sSaveDir == "") { oDialog.set_current_folder(Glib::path_get_dirname(m_sRomFile)); } else { oDialog.set_current_folder(sSaveDir); oDialog.add_shortcut_folder(sSaveDir); } oDialog.set_current_name(sCutSuffix(Glib::path_get_basename(m_sRomFile))); Gtk::FileFilter oSaveFilter; oSaveFilter.set_name(_("VisualBoyAdvance save game")); oSaveFilter.add_pattern("*.[sS][gG][mM]"); oDialog.add_filter(oSaveFilter); while (oDialog.run() == Gtk::RESPONSE_OK) { Glib::ustring sFile = oDialog.get_filename(); if (! bHasSuffix(sFile, ".sgm", false)) { sFile += ".sgm"; } if (Glib::file_test(sFile, Glib::FILE_TEST_EXISTS)) { Gtk::MessageDialog oConfirmDialog(*this, _("File already exists. Overwrite it?"), false, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_YES_NO); if (oConfirmDialog.run() != Gtk::RESPONSE_YES) { continue; } } if (m_stEmulator.emuWriteState(sFile.c_str())) { break; } } }
void Window::vSaveBattery() { std::string sBattery; std::string sDir = m_poDirConfig->sGetKey("batteries"); if (sDir == "") { sDir = m_sUserDataDir; } sBattery = sDir + "/" + sCutSuffix(Glib::path_get_basename(m_sRomFile)) + ".sav"; if (m_stEmulator.emuWriteBattery(sBattery.c_str())) { systemScreenMessage(_("Saved battery")); } }
void Window::vSaveCheats() { std::string sCheats; std::string sDir = m_poDirConfig->sGetKey("cheats"); if (sDir == "") { sDir = m_sUserDataDir; } sCheats = sDir + "/" + sCutSuffix(Glib::path_get_basename(m_sRomFile)) + ".clt"; if (m_eCartridge == CartridgeGB) { gbCheatsSaveCheatList(sCheats.c_str()); } else if (m_eCartridge == CartridgeGBA) { cheatsSaveCheatList(sCheats.c_str()); } }
void Window::vCaptureScreen(int _iNum) { std::string sBaseName; std::string sDir = m_poDirConfig->sGetKey("captures"); if (sDir == "") { sDir = m_sUserDataDir; } sBaseName = sDir + "/" + sCutSuffix(Glib::path_get_basename(m_sRomFile)); char* csFile = g_strdup_printf("%s_%02d.png", sBaseName.c_str(), _iNum); m_stEmulator.emuWritePNG(csFile); g_free(csFile); }
void Window::vUpdateGameSlots() { if (m_eCartridge == CartridgeNone) { std::string sDateTime = _("----/--/-- --:--:--"); for (int i = 0; i < 10; i++) { char csPrefix[10]; snprintf(csPrefix, sizeof(csPrefix), "%2d ", i + 1); Gtk::Label* poLabel; poLabel = dynamic_cast<Gtk::Label*>(m_apoLoadGameItem[i]->get_child()); poLabel->set_text(csPrefix + sDateTime); m_apoLoadGameItem[i]->set_sensitive(false); poLabel = dynamic_cast<Gtk::Label*>(m_apoSaveGameItem[i]->get_child()); poLabel->set_text(csPrefix + sDateTime); m_apoSaveGameItem[i]->set_sensitive(false); m_astGameSlot[i].m_bEmpty = true; } } else { std::string sFileBase; std::string sDir = m_poDirConfig->sGetKey("saves"); if (sDir == "") { sDir = m_sUserDataDir; } sFileBase = sDir + "/" + sCutSuffix(Glib::path_get_basename(m_sRomFile)); const char* csDateFormat = _("%Y/%m/%d %H:%M:%S"); for (int i = 0; i < 10; i++) { char csPrefix[10]; snprintf(csPrefix, sizeof(csPrefix), "%2d ", i + 1); char csSlot[10]; snprintf(csSlot, sizeof(csSlot), "%d", i + 1); m_astGameSlot[i].m_sFile = sFileBase + csSlot + ".sgm"; std::string sDateTime; struct stat stStat; if (stat(m_astGameSlot[i].m_sFile.c_str(), &stStat) == -1) { sDateTime = _("----/--/-- --:--:--"); m_astGameSlot[i].m_bEmpty = true; } else { char csDateTime[30]; strftime(csDateTime, sizeof(csDateTime), csDateFormat, localtime(&stStat.st_mtime)); sDateTime = csDateTime; m_astGameSlot[i].m_bEmpty = false; m_astGameSlot[i].m_uiTime = stStat.st_mtime; } Gtk::Label* poLabel; poLabel = dynamic_cast<Gtk::Label*>(m_apoLoadGameItem[i]->get_child()); poLabel->set_text(csPrefix + sDateTime); m_apoLoadGameItem[i]->set_sensitive(!m_astGameSlot[i].m_bEmpty); poLabel = dynamic_cast<Gtk::Label*>(m_apoSaveGameItem[i]->get_child()); poLabel->set_text(csPrefix + sDateTime); m_apoSaveGameItem[i]->set_sensitive(); } } }