Index: addons/katebuild-plugin/plugin_katebuild.h =================================================================== --- addons/katebuild-plugin/plugin_katebuild.h +++ addons/katebuild-plugin/plugin_katebuild.h @@ -130,7 +130,7 @@ bool checkLocal(const QUrl &dir); void clearBuildResults(); - void displayBuildResult(const QString &message, KTextEditor::Message::MessageType level); + void postMessage(const QString &message, KTextEditor::Message::MessageType type); KTextEditor::MainWindow *m_win; QWidget *m_toolView; @@ -142,6 +142,7 @@ QString m_stdOut; QString m_stdErr; QString m_currentlyBuildingTarget; + bool m_hideViewOnSuccess = false; bool m_buildCancelled; int m_displayModeBeforeBuild; QString m_make_dir; Index: addons/katebuild-plugin/plugin_katebuild.cpp =================================================================== --- addons/katebuild-plugin/plugin_katebuild.cpp +++ addons/katebuild-plugin/plugin_katebuild.cpp @@ -492,7 +492,6 @@ m_buildUi.u_tabWidget->setCurrentIndex(1); m_displayModeBeforeBuild = m_buildUi.displayModeSlider->value(); m_buildUi.displayModeSlider->setValue(0); - m_win->showToolView(m_toolView); // set working directory m_make_dir = dir; @@ -584,30 +583,35 @@ /******************************************************************/ bool KateBuildView::buildCurrentTarget() { - if (m_proc.state() != QProcess::NotRunning) { - displayBuildResult(i18n("Already building..."), KTextEditor::Message::Warning); + if (m_proc.state() == QProcess::Running) { + m_win->showToolView(m_toolView); + if (!m_infoMessage) { + postMessage(i18n("Building target is still in progress..."), KTextEditor::Message::Information); + } return false; } QFileInfo docFInfo = docUrl().toLocalFile(); // docUrl() saves the current document QModelIndex ind = m_targetsUi->targetsView->currentIndex(); m_previousIndex = ind; if (!ind.isValid()) { - KMessageBox::sorry(nullptr, i18n("No target available for building.")); + postMessage(i18n("No target available for building."), KTextEditor::Message::Error); return false; } QString buildCmd = m_targetsUi->targetsModel.command(ind); QString cmdName = m_targetsUi->targetsModel.cmdName(ind); QString workDir = m_targetsUi->targetsModel.workDir(ind); QString targetSet = m_targetsUi->targetsModel.targetName(ind); + // This looks (no, is!) bad but seems to work so far, improvements are welcome + m_hideViewOnSuccess = (cmdName == i18n("Build")); QString dir = workDir; if (workDir.isEmpty()) { dir = docFInfo.absolutePath(); if (dir.isEmpty()) { - KMessageBox::sorry(nullptr, i18n("There is no local file or directory specified for building.")); + postMessage(i18n("There is no local file or directory specified for building."), KTextEditor::Message::Error); return false; } } @@ -632,17 +636,33 @@ QString msg = i18n("Building target %1 ...", m_currentlyBuildingTarget); m_buildUi.buildStatusLabel->setText(msg); m_buildUi.buildStatusLabel2->setText(msg); + postMessage(i18n("Building target..."), KTextEditor::Message::Information); return startProcess(dir, buildCmd); } /******************************************************************/ -void KateBuildView::displayBuildResult(const QString &msg, KTextEditor::Message::MessageType level) +void KateBuildView::postMessage(const QString &msg, KTextEditor::Message::MessageType type) { KTextEditor::View *kv = m_win->activeView(); if (!kv) return; + QString msgType; + switch (type) { + // FIXME How about a function in KTextEditor::Message to get these translated message type names? + case KTextEditor::Message::Positive: + case KTextEditor::Message::Information: + msgType = i18n("Info"); + break; + case KTextEditor::Message::Warning: + msgType = i18n("Warning"); + break; + case KTextEditor::Message::Error: + msgType = i18n("Error"); + break; + } delete m_infoMessage; - m_infoMessage = new KTextEditor::Message(xi18nc("@info", "Make Results:%1", msg), level); + // FIXME Add a minimum width to the message box, looks sometimes too titchy + m_infoMessage = new KTextEditor::Message(xi18nc("@info", "Make %1%2", msgType, msg), type); m_infoMessage->setWordWrap(true); m_infoMessage->setPosition(KTextEditor::Message::BottomInView); m_infoMessage->setAutoHide(5000); @@ -686,21 +706,23 @@ msgs << i18np("Found one warning.", "Found %1 warnings.", m_numWarnings); buildStatus = i18n("Building %1 had warnings.", m_currentlyBuildingTarget); } - displayBuildResult(msgs.join(QLatin1Char('\n')), m_numErrors ? KTextEditor::Message::Error : KTextEditor::Message::Warning); + postMessage(msgs.join(QLatin1Char('\n')), m_numErrors ? KTextEditor::Message::Error : KTextEditor::Message::Warning); } else if (exitCode != 0) { - displayBuildResult(i18n("Build failed."), KTextEditor::Message::Warning); + postMessage(i18n("Build failed."), KTextEditor::Message::Error); } else { - displayBuildResult(i18n("Build completed without problems."), KTextEditor::Message::Positive); + postMessage(i18n("Build completed without problems."), KTextEditor::Message::Positive); + if (m_hideViewOnSuccess) { + m_win->hideToolView(m_toolView); + } } if (!m_buildCancelled) { m_buildUi.buildStatusLabel->setText(buildStatus); m_buildUi.buildStatusLabel2->setText(buildStatus); m_buildCancelled = false; } - } @@ -723,6 +745,18 @@ m_buildUi.plainTextEdit->appendPlainText(line); //qDebug() << line; + // FIXME I would like to show a progess info on the ToolView tab, but + // I didn't find in the apis a hint how to address these + QRegExp rx = QRegExp(QStringLiteral("^\\[([\\s\\d\\%]+)\\]")); + if (line.contains(rx)) { + // QString name = fetchPluginName(); + // setTabCaption(QStringLiteral("%1 - %2").arg(rx.cap(1)).arg(name)); + qDebug() << QStringLiteral("%1 - done").arg(rx.cap(1)); + // Or is perhaps an animated icon available in the KDE store for a progress info? + // BTW I also tried to show the progress with postMessage, but that looks + // in all ways bad + } + if (m_newDirDetector.match(line).hasMatch()) { //qDebug() << "Enter/Exit dir found"; int open = line.indexOf(QLatin1Char('`'));