d9a90f44f3
This change brings translation support to the tsMuxeR GUI. We have a Russian translation available so far, thanks to @abakum. The last selected translation is saved in the settings file and restored at the application's next startup. The currently used language is selectable by a combo box in the lower left corner of the window.
107 lines
2.9 KiB
C++
107 lines
2.9 KiB
C++
#include "muxForm.h"
|
|
|
|
#include <QCloseEvent>
|
|
#include <QProcess>
|
|
|
|
#include "ui_muxForm.h"
|
|
|
|
const static int MAX_ERRORS_CNT = 10000;
|
|
|
|
MuxForm::MuxForm(QWidget *parent) : QDialog(parent, Qt::WindowMaximizeButtonHint), ui(new Ui_muxForm), muxProcess(0)
|
|
{
|
|
ui->setupUi(this);
|
|
connect(ui->progressBar, &QProgressBar::valueChanged, this, &MuxForm::onProgressChanged);
|
|
connect(ui->abortBtn, &QPushButton::clicked, this, &MuxForm::onAbort);
|
|
connect(ui->okBtn, &QPushButton::clicked, this, &MuxForm::close);
|
|
}
|
|
|
|
void MuxForm::closeEvent(QCloseEvent *event)
|
|
{
|
|
onAbort();
|
|
event->accept();
|
|
}
|
|
|
|
void MuxForm::changeEvent(QEvent *event)
|
|
{
|
|
if (event->type() == QEvent::LanguageChange)
|
|
{
|
|
ui->retranslateUi(this);
|
|
}
|
|
QDialog::changeEvent(event);
|
|
}
|
|
|
|
void MuxForm::prepare(const QString &label)
|
|
{
|
|
muxProcess = 0;
|
|
errCnt = 0;
|
|
setWindowTitle(label);
|
|
ui->muxLabel->setText(label + '.');
|
|
ui->progressBar->setValue(0);
|
|
ui->stdoutText->clear();
|
|
ui->stderrText->clear();
|
|
ui->abortBtn->setEnabled(true);
|
|
ui->okBtn->setEnabled(false);
|
|
}
|
|
|
|
void MuxForm::onProgressChanged()
|
|
{
|
|
ui->progressLabel->setText(QObject::tr("Progress: ") + QString::number(ui->progressBar->value() / 10.0, 'f', 1) +
|
|
'%');
|
|
}
|
|
|
|
void MuxForm::setProgress(int value) { ui->progressBar->setValue(value); }
|
|
|
|
void MuxForm::addStdOutLine(const QString &line)
|
|
{
|
|
ui->stdoutText->append(line);
|
|
QTextCursor c = ui->stdoutText->textCursor();
|
|
c.movePosition(QTextCursor::End);
|
|
ui->stdoutText->setTextCursor(c);
|
|
}
|
|
|
|
void MuxForm::addStdErrLine(const QString &line)
|
|
{
|
|
if (errCnt >= MAX_ERRORS_CNT)
|
|
return;
|
|
ui->stderrText->append(line);
|
|
errCnt = ui->stderrText->document()->blockCount();
|
|
if (errCnt >= MAX_ERRORS_CNT)
|
|
{
|
|
ui->stderrText->append("---------------------------------------");
|
|
ui->stderrText->append(QObject::tr("Too many errors! tsMuxeR is terminated."));
|
|
onAbort();
|
|
}
|
|
QTextCursor c = ui->stderrText->textCursor();
|
|
c.movePosition(QTextCursor::End);
|
|
ui->stderrText->setTextCursor(c);
|
|
}
|
|
|
|
void MuxForm::muxFinished(int exitCode, const QString &)
|
|
{
|
|
if (muxProcess && ui->abortBtn->isEnabled())
|
|
{
|
|
if (exitCode == 0)
|
|
setWindowTitle(QObject::tr("tsMuxeR successfully finished"));
|
|
else
|
|
setWindowTitle(QObject::tr("tsMuxeR finished with error code %1").arg(exitCode));
|
|
ui->muxLabel->setText(windowTitle() + '.');
|
|
ui->abortBtn->setEnabled(false);
|
|
ui->okBtn->setEnabled(true);
|
|
}
|
|
}
|
|
|
|
void MuxForm::onAbort()
|
|
{
|
|
if (muxProcess == nullptr)
|
|
return;
|
|
ui->abortBtn->setEnabled(false);
|
|
ui->okBtn->setEnabled(true);
|
|
setWindowTitle(QObject::tr("terminating tsMuxeR..."));
|
|
muxProcess->kill();
|
|
muxProcess->waitForFinished();
|
|
setWindowTitle(QObject::tr("tsMuxeR is terminated"));
|
|
muxProcess = nullptr;
|
|
}
|
|
|
|
void MuxForm::setProcess(QProcess *proc) { muxProcess = proc; }
|