void SessionPrivate::buildDescription( SessionInfo& info ) { QString description = generateDescription( info ); info.description = description; info.config->group( QString() ).writeEntry( Session::cfgSessionDescriptionEntry, description ); info.config->sync(); }
void SyncProcess::startQProcess(QProcess& process) { const QString command = generateFullCommand(); if (command.isEmpty()) throw SyncProcessException("Cannot start process '" + generateDescription() + "'. The full command is '" + command + "'."); if (!mStdInFile.isEmpty()) process.setStandardInputFile(mStdInFile); process.setProcessEnvironment(generateFullEnvironment()); mDiagnosticInfo += QObject::tr("Starting process '%1'\n").arg(generateDescription()); process.setWorkingDirectory(mWorkingDirectory); process.start(command, generateFullArguments()); process.waitForStarted(); if (process.state() != QProcess::Running) throw SyncProcessException("Starting process '" + generateDescription() + "' failed. The process is not in a running state."); }
void SyncProcess::run() { mDiagnosticInfo = ""; QProcess process(this); mDiagnosticInfo += QObject::tr("Starting process '%1'\n").arg(generateDescription()); startQProcess(process); mRunning = true; while (!process.waitForFinished(mPollInterval)) { // pump the event queue, mainly because the user might want to cancel QAbstractEventDispatcher::instance(thread())->processEvents(QEventLoop::AllEvents); if (wasCancelRequested()) { mDiagnosticInfo += QObject::tr("Cancel was requested! Sending terminate signal to the process...\n"); // TODO: On Windows we have to kill immediately, terminate() posts WM_CLOSE // but oscap doesn't have any event loop running. process.terminate(); break; } } if (wasCancelRequested()) { unsigned int termWaited = 0; while (!process.waitForFinished(mPollInterval)) { QAbstractEventDispatcher::instance(thread())->processEvents(QEventLoop::AllEvents); termWaited += mPollInterval; if (termWaited > mTermLimit) { mDiagnosticInfo += QObject::tr("Process had to be killed! Didn't terminate after %1 msec of waiting.\n").arg(termWaited); process.kill(); break; } } } mRunning = false; mStdOutContents = QString::fromLocal8Bit(process.readAllStandardOutput()); mStdErrContents = QString::fromLocal8Bit(process.readAllStandardError()); // TODO: We are duplicating data here! mDiagnosticInfo += "stdout:\n===============================\n" + QString(mStdOutContents) + QString("\n"); mDiagnosticInfo += "stderr:\n===============================\n" + QString(mStdErrContents) + QString("\n"); mExitCode = process.exitCode(); }
/** * @brief OknoBazaru::wyswietlOpisDlaBazaru Wyświetla opis przedmiotu z listy dostępnych na bazarze. * @param element dane wpisu, który został wybrany */ void MarketWindow::displayMarketItem(const QModelIndex& element) { playerItemList->setCurrentRow(-1); const Item *item = wares_.at(element.row()); equipButton->setVisible(false); buyButton->setVisible(true); buyButton->setText(buyText); buyButton->setEnabled(player_->gold() >= item->value()); generateDescription(item, player_, itemDescriptionWidget); }
/** * @brief OknoTawerny::wyswietlOpisDlaWlasnych Wyświetla opis dla wykonywanego zadania. * @param element dane zaznaczonego elementu */ void TavernWindow::displayPlayerQuest(const QModelIndex &index) { availableQuestsWidget->setCurrentRow(-1); Quest *quest = player_->quest(index.row()); lastDisplayedQuest = quest; showDestinationButton->setEnabled(true); acceptQuestButton->setEnabled(!questRejected); acceptQuestButton->setText(abandonText); generateDescription(quest, questDescriptionWidget); }
/** * @brief OknoBazaru::wyswietlOpisDlaGracza Wyświetla opis przedmiotu z listy posiadanych przez gracza * @param element dane wpisu, który został wybrany. */ void MarketWindow::displayPlayerItem(const QModelIndex &index) { wareList->setCurrentRow(-1); buyButton->setText(sellText); buyButton->setVisible(true); buyButton->setEnabled(true); const Item *item = player_->equipment()->backpack().at(index.row()); equipButton->setVisible(true); if (isEquipped(item, player_)) equipButton->setText(unequipText); else equipButton->setText(equipText); equipButton->setEnabled(isPermitted(item, player_)); generateDescription(item, player_, itemDescriptionWidget); }
/** * @brief OknoBazaru::zaloz Odpowiednio zakłada lub zdejmuje aktualnie zaznaczony przedmiot z listy przedmiotów gracza */ void MarketWindow::equip() { const QList <const Item *> backpack = player_->equipment()->backpack(); const Item *item = backpack.at(playerItemList->currentRow()); if (equipButton->text() == unequipText) //NOTE do I really want string comparision? Maybe boolean flag? unequipItem(item, player_); else equipItem(item, player_); generateDescription(item, player_, itemDescriptionWidget); playerWindow_->update(); if (isEquipped(item, player_)) equipButton->setText(unequipText); else equipButton->setText(equipText); }
/** * @brief OknoTawerny::wyswietlOpisDlaMozliwych Wyświetla opis dla zadania oferowanego. * @param element dane zaznaczonego elementu */ void TavernWindow::displayAvailableQuest(const QModelIndex &index) { currentQuestsWidget->setCurrentRow(-1); Quest *quest = availableQuests_->at(index.row()); lastDisplayedQuest = quest; showDestinationButton->setEnabled(true); bool playerHasMaxQuests = player_->quests()->size() == MaximumNumberOfQuestsTaken; bool alreadyTaken; for (Quest *q : *player_->quests()) if (quest->id() == q->id()) alreadyTaken = true; acceptQuestButton->setEnabled(!playerHasMaxQuests && !alreadyTaken); acceptQuestButton->setText(acceptText); generateDescription(quest, questDescriptionWidget); }
QDialog* SyncProcess::runWithDialog(QWidget* widgetParent, const QString& title, bool showCancelButton, bool closeAfterFinished, bool modal) { ProcessProgressDialog* dialog = new ProcessProgressDialog(widgetParent); dialog->setModal(modal); QObject::connect( dialog, SIGNAL(rejected()), this, SLOT(cancel()) ); dialog->setWindowTitle(title); dialog->show(); mDiagnosticInfo = ""; QProcess process(this); process.setProcessChannelMode(QProcess::MergedChannels); mDiagnosticInfo += QObject::tr("Starting process '%1'\n").arg(generateDescription()); startQProcess(process); mRunning = true; while (!process.waitForFinished(mPollInterval)) { // pump the event queue, mainly because the user might want to cancel QAbstractEventDispatcher::instance(thread())->processEvents(QEventLoop::AllEvents); readAllChannelsIntoDialog(process, *dialog); if (wasCancelRequested()) { mDiagnosticInfo += QObject::tr("Cancel was requested! Sending terminate signal to the process...\n"); // TODO: On Windows we have to kill immediately, terminate() posts WM_CLOSE // but oscap doesn't have any event loop running. process.terminate(); break; } } if (wasCancelRequested()) { unsigned int termWaited = 0; while (!process.waitForFinished(mPollInterval)) { QAbstractEventDispatcher::instance(thread())->processEvents(QEventLoop::AllEvents); termWaited += mPollInterval; if (termWaited > mTermLimit) { mDiagnosticInfo += QObject::tr("Process had to be killed! Didn't terminate after %1 msec of waiting.\n").arg(termWaited); process.kill(); break; } } } readAllChannelsIntoDialog(process, *dialog); mRunning = false; mStdOutContents = process.readAllStandardOutput(); mStdErrContents = process.readAllStandardError(); // TODO: We are duplicating data here! mDiagnosticInfo += "stdout:\n===============================\n" + QString(mStdOutContents) + QString("\n"); mDiagnosticInfo += "stderr:\n===============================\n" + QString(mStdErrContents) + QString("\n"); mExitCode = process.exitCode(); dialog->notifyDone(); if (closeAfterFinished) dialog->done(QDialog::Accepted); return dialog; }
JID::JID(String localPart, String domainPart, String resourcePart) : localPart(localPart), domainPart(domainPart), resourcePart(resourcePart), description(generateDescription(localPart, domainPart, resourcePart)) { /* Nothing to do here */ }