| 1022 | } |
| 1023 | |
| 1024 | void MainWindow::compileSolutionChecker(const QString& checker) |
| 1025 | { |
| 1026 | if (!requireMiniZinc()) { |
| 1027 | return; |
| 1028 | } |
| 1029 | |
| 1030 | QFileInfo fi(checker); |
| 1031 | |
| 1032 | QSettings settings; |
| 1033 | settings.beginGroup("ide"); |
| 1034 | bool printCommand = settings.value("printCommand", false).toBool(); |
| 1035 | settings.endGroup(); |
| 1036 | |
| 1037 | auto proc = new MznProcess(this); |
| 1038 | QStringList args; |
| 1039 | args << "--compile-solution-checker" |
| 1040 | << checker; |
| 1041 | connect(this, &MainWindow::terminating, proc, [=] () { |
| 1042 | proc->terminate(); |
| 1043 | proc->deleteLater(); |
| 1044 | }); |
| 1045 | connect(ui->actionStop, &QAction::triggered, proc, [=] () { |
| 1046 | ui->actionStop->setDisabled(true); |
| 1047 | proc->stop(); |
| 1048 | ui->outputWidget->addText("Stopped."); |
| 1049 | }); |
| 1050 | connect(proc, &MznProcess::success, [=] (bool cancelled) { |
| 1051 | if (!cancelled) { |
| 1052 | openCompiledFzn(checker.left(checker.size() - 4)); |
| 1053 | } |
| 1054 | procFinished(0, proc->elapsedTime()); |
| 1055 | ui->outputWidget->endExecution(0, proc->elapsedTime()); |
| 1056 | }); |
| 1057 | connect(proc, &MznProcess::errorOutput, this, &MainWindow::on_minizincError); |
| 1058 | connect(proc, &MznProcess::warningOutput, this, &MainWindow::on_minizincError); |
| 1059 | connect(proc, &MznProcess::outputStdError, this, [=] (const QString& d) { |
| 1060 | QTextCharFormat f; |
| 1061 | f.setForeground(IDE::instance()->themeManager->current().commentColor.get(darkMode)); |
| 1062 | ui->outputWidget->addText(d, f, "Standard Error"); |
| 1063 | }); |
| 1064 | connect(proc, &MznProcess::finished, [=] () { |
| 1065 | proc->deleteLater(); |
| 1066 | }); |
| 1067 | connect(proc, &MznProcess::failure, [=](int exitCode, MznProcess::FailureType e) { |
| 1068 | if (e == MznProcess::FailedToStart) { |
| 1069 | QMessageBox::critical(this, "MiniZinc IDE", "Failed to start MiniZinc. Check your path settings."); |
| 1070 | exitCode = 0; |
| 1071 | } else if (e != MznProcess::NonZeroExit) { |
| 1072 | QMetaEnum metaEnum = QMetaEnum::fromType<MznProcess::FailureType>(); |
| 1073 | QMessageBox::critical(this, "MiniZinc IDE", "Unknown error while executing MiniZinc: " + QString(metaEnum.valueToKey(e))); |
| 1074 | } |
| 1075 | ui->outputWidget->endExecution(0, proc->elapsedTime()); |
| 1076 | procFinished(exitCode, proc->elapsedTime()); |
| 1077 | }); |
| 1078 | connect(proc, &MznProcess::timeUpdated, this, &MainWindow::statusTimerEvent); |
| 1079 | updateUiProcessRunning(true); |
| 1080 | ui->outputWidget->startExecution(QString("Compiling %1").arg(fi.fileName())); |
| 1081 | proc->start(args, fi.canonicalPath()); |
nothing calls this directly
no test coverage detected