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(); }
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; }