void FastQSPWindow::linkClicked(const QUrl &url) {
  if(url.toString().contains("interaction"))
  {
    replaceHTML = true;
    newImage = "";
  }
  qDebug() << "Link clicked" << url.toString();
  if (url.toString().startsWith(QLatin1String("exec:"), Qt::CaseInsensitive)) {
    QString execStr;
    execStr = url.toString().remove(0, 5).trimmed().replace("%22", "\"");
    QSPExecString(execStr.toStdWString().c_str(), true);
  } else if (url.toString().startsWith(QLatin1String("obj:"),
                                       Qt::CaseInsensitive)) {
    bool ok = false;
    int number = 0;
    number = url.toString().remove(0, 4).trimmed().toInt(&ok);
    if (!ok) {
      qCritical() << "Unknown link format" << url.toString();
      return;
    }
    QSPSetSelObjectIndex(number, true);
  } else if (url.path() == QLatin1String("/api/closemsg")) {
    builder.hideMessage();
  } else if (url.toString().toLower() == QLatin1String("restart")) {
    restartGame();
  } else if (url.host() == QLatin1String("qspgame.local")) {
    QString path = url.path();
    path.remove(0, 1);
//    qDebug() << path;
    bool ok = false;
    int number;
    number = path.toUInt(&ok);
    if (ok) {
      QSPSetSelActionIndex(number - 1, true);
      QSPExecuteSelActionCode(true);
    } else {
      qWarning() << QLatin1String("Bad link path:") << path;
    }
  } else if (url.scheme() == QLatin1String("http") ||
             url.scheme() == QLatin1String("mailto")) {
    QDesktopServices::openUrl(url);
  } else {
    qWarning() << QLatin1String("Bad link:") << url.toString();
  }
  loadPage();
}
Пример #2
0
void *QSPThreadProc(void *ptr)
{
// (QSPEvent != QSP_EVT_EXIT)
  while (true) {
    //pthread_mutex_lock(&qsp_mutex);
    while (!qsp_events.empty()) {
      QspEvent ev = qsp_events.front();
      switch (ev.type) {
      case QSP_EVT_EXIT:
        return 0;
      case QSP_EVT_OPENGAME:
        if (!QSPLoadGameWorld(ev.p_str.c_str()))
          ShowError();
        else {
          chdir(GetQuestPath().c_str());
          QSPRestartGame(QSP_TRUE);
        }
        break;
      case QSP_EVT_RESTART:
        if (!QSPRestartGame(QSP_TRUE))
          ShowError();
        break;
      case QSP_EVT_SAVEGAME:
        if (!QSPSaveGame((QSP_CHAR *) ev.p_str.c_str(), QSP_FALSE))
          ShowError();
        break;
      case QSP_EVT_OPENSAVEDGAME:
        if (!QSPOpenSavedGame((QSP_CHAR *) ev.p_str.c_str(), QSP_TRUE))
          ShowError();
        break;
      case QSP_EVT_EXECSTRING:
        if (!QSPExecString((const QSP_CHAR *)ev.p_str.c_str(), QSP_TRUE))
          ShowError();
        else if(ev.p_str.find("OPENQST")!=ev.p_str.npos){
          chdir(GetQuestPath().c_str());
        }
        break;
      case QSP_EVT_EXECSELACTION:
        if (!QSPExecuteSelActionCode(QSP_TRUE))
          ShowError();
        break;
      case QSP_EVT_SETOBJINDEX:
        if (!QSPSetSelObjectIndex(ev.p_int, QSP_TRUE))
          ShowError();
        break;
      case QSP_EVT_SETUSERINPUT:
        QSPSetInputStrText(ev.p_str.c_str());
        break;
      case QSP_EVT_EXECUSERINPUT:
        if (!QSPExecUserInput(QSP_TRUE))
          ShowError();
        break;
      case QSP_EVT_DONEMENU:
        QSPSelectMenuItem(ev.p_int);
        break;
      default:
        usleep(500);
      }
      qsp_events.pop();
    }
    QSPEventProcessed = true;
    //pthread_mutex_unlock(&qsp_mutex);
    usleep(500);
  }
  return 0;
}