Exemplo n.º 1
0
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;
    }
  }
}
Exemplo n.º 2
0
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;
    }
  }
}
Exemplo n.º 3
0
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"));
    }
}
Exemplo n.º 4
0
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());
    }
}
Exemplo n.º 5
0
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);
}
Exemplo n.º 6
0
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();
        }
    }
}