Exemple #1
0
void FileBrowser::onChangeCartridge(const string &path) {
  string filename;
  if(QDir(path).exists()) filename = resolveFilename(path);
  else filename = path;

  string info;
  string image = sprint(nall::basename(filename), ".png");
  string patch = sprint(filepath(nall::basename(filename), config().path.patch), ".ups");

  if(file::exists(filename)) {
    if(striend(filename, ".sfc")) {
      Cartridge::Information cartinfo;
      if(cartridge.information(filename, cartinfo)) {
        info << "<small><table>";
        info << "<tr><td><b>Title: </b></td><td>" << cartinfo.name << "</td></tr>";
        info << "<tr><td><b>Region: </b></td><td>" << cartinfo.region << "</td></tr>";
        info << "<tr><td><b>ROM: </b></td><td>" << cartinfo.romSize * 8 / 1024 / 1024 << "mbit</td></tr>";
        info << "<tr><td><b>RAM: </b></td><td>";
        cartinfo.ramSize ? info << cartinfo.ramSize * 8 / 1024 << "kbit</td></tr>" : info << "None</td></tr>";
        info << "</table></small>";
      }
    } else if(striend(filename, ".st")) {
      unsigned size = file::size(filename);
      info << "<small><table>";
      info << "<tr><td><b>ROM: </b></td><td>" << size * 8 / 1024 / 1024 << "mbit</td></tr>";
      info << "</table></small>";
    }
  }

  if(info == "") info = "<small><font color='#808080'>No preview available</font></small>";
  previewInfo->setText(info);
  previewImage->setStyleSheet(string() << "background: url('" << image << "') center left no-repeat;");
  previewApplyPatch->setVisible(file::exists(patch));
}
Exemple #2
0
string DiskBrowser::queryImageInformation() {
  string text;
  string filename;
  if(currentFilename(filename) == true) {
    if(striend(filename, ".sfc") || striend(filename, ".smc")) {
      unsigned size = file::size(filename);
      text << "<b>" << notdir(nall::basename(filename)) << "</b>";
      text << "<small><table cellspacing='5'>";
      text << "<tr><td><b>ROM size:</b></td><td>" << size * 8 / 1024 / 1024 << "mbit</td></tr>";
      text << "</table></small>";
    }
  }
  return text;
}
Exemple #3
0
Reader::Type Reader::detect(const char *fn, bool inspectheader) {
  file fp;
  if(!fp.open(fn, file::mode_read)) return Unknown;

  uint8_t p[8];
  memset(p, 0, sizeof p);
  fp.read(p, 8);
  fp.close();

  if(inspectheader == true) {
    //inspect file header to determine type
    if(p[0] == 0x1f && p[1] == 0x8b && p[2] == 0x08 && p[3] <= 0x1f) return GZIP;
    if(p[0] == 0x50 && p[1] == 0x4b && p[2] == 0x03 && p[3] == 0x04) return ZIP;
    if(p[0] == 0x4a && p[1] == 0x4d && p[2] == 0x41 && p[3] == 0x00 && p[4] == 0x4e) return JMA;
  } else {
    //check file extension to determine type
    if(striend(fn, ".gz")) return GZIP;
    if(striend(fn, ".zip") || striend(fn, ".z")) return ZIP;
    if(striend(fn, ".jma")) return JMA;
  }
  return Normal;
}
Exemple #4
0
string FileBrowser::resolveFilename(const string &path) {
  if(QDir(path).exists()) {
    string filter;
    if(striend(path, ".sfc")) filter = "*.sfc";
    if(striend(path, ".bs" )) filter = "*.bs";
    if(striend(path, ".st" )) filter = "*.st";
    if(striend(path, ".gb" )) filter = "*.gb";
    if(striend(path, ".sgb")) filter = "*.sgb";
    if(striend(path, ".gbc")) filter = "*.gbc";
    if(filter == "") return "";

    QDir directory(path);
    directory.setNameFilters(QStringList() << filter);
    QStringList list = directory.entryList(QDir::Files | QDir::NoDotAndDotDot);
    if(list.count() == 1) return string() << path << "/" << list[0].toUtf8().constData();
    return "";
  } else {
    return path;
  }
}
Exemple #5
0
void FileBrowser::onAcceptCartridge(const string &path) {
  string filename;
  if(QDir(path).exists()) {
    filename = resolveFilename(path);
  } else {
    filename = path;
  }

  if(file::exists(filename)) {
    close();
    config().path.current.cartridge = fileSystemModel->rootPath().toUtf8().constData();

    if(cartridgeMode == LoadDirect) {
      config().path.current.filter = filterBox->currentIndex();
      string filter = filterBox->currentText().toUtf8().constData();

      if(0);
      //file extension detection
      else if(striend(filename, ".sfc")) acceptNormal(filename);
      else if(striend(filename, ".bs"))  acceptBsx(filename);
      else if(striend(filename, ".st"))  acceptSufamiTurbo(filename);
      else if(striend(filename, ".gb"))  acceptSuperGameBoy(filename);
      else if(striend(filename, ".sgb")) acceptSuperGameBoy(filename);
      else if(striend(filename, ".gbc")) acceptSuperGameBoy(filename);
      //filter detection
      else if(strbegin(filter, "SNES cartridges")) acceptNormal(filename);
      else if(strbegin(filter, "BS-X cartridges")) acceptBsx(filename);
      else if(strbegin(filter, "Sufami Turbo cartridges")) acceptSufamiTurbo(filename);
      else if(strbegin(filter, "Game Boy cartridges")) acceptSuperGameBoy(filename);
      //fallback behavior
      else acceptNormal(filename);
    } else if(cartridgeMode == LoadBase) {
      loaderWindow->selectBaseCartridge(filename);
    } else if(cartridgeMode == LoadSlot1) {
      loaderWindow->selectSlot1Cartridge(filename);
    } else if(cartridgeMode == LoadSlot2) {
      loaderWindow->selectSlot2Cartridge(filename);
    }
  }
}