UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
UltragridWindow Class Reference

#include <ultragrid_window.hpp>

Inheritance diagram for UltragridWindow:
Inheritance graph
Collaboration diagram for UltragridWindow:
Collaboration graph

Public Slots

void about ()
 
void editArgs (const QString &text)
 
bool launchPreview ()
 
void loadSettings ()
 
void saveSettings ()
 
void setArgs ()
 
void showLog ()
 
void showSettings ()
 
void startStop ()
 
void updatePreview ()
 

Public Member Functions

 UltragridWindow (QWidget *parent=0)
 
void initializeUgOpts ()
 

Static Public Member Functions

static QString findUltragridExecutable ()
 

Protected Member Functions

void closeEvent (QCloseEvent *)
 

Private Slots

void enablePreview (bool)
 
void refresh ()
 

Private Member Functions

void checkPreview ()
 
void connectSignals ()
 
QStringList getOptionsForParam (QString param)
 
void launchQuery ()
 
void loadSettingsFile (const QString &filename)
 
void setupPreviewCallbacks ()
 
void start ()
 

Static Private Member Functions

static void schedulePreview (Option &, bool, void *)
 

Private Attributes

AvailableSettings availableSettings
 
ControlPort controlPort
 
QStringList launchArgs
 
LaunchManager launchMngr
 
LogWindow log
 
QLabel previewStatus
 
QTimer previewTimer
 
QLabel processStatus
 
RecvLossWidget receiverLoss
 
RecvReportWidget rtcpRr
 
Settings settings
 
SettingsUi settingsUi
 
SettingsWindow settingsWindow
 
Ui::UltragridWindow ui
 
QString ultragridExecutable
 
QLabel versionLabel
 

Detailed Description

Definition at line 22 of file ultragrid_window.hpp.

Constructor & Destructor Documentation

◆ UltragridWindow()

UltragridWindow::UltragridWindow ( QWidget * parent = 0)

Definition at line 95 of file ultragrid_window.cpp.

95 : QMainWindow(parent){
96 ui.setupUi(this);
97 //ui.terminal->setVisible(false);
98#ifdef DEBUG
99 ui.actionTest->setVisible(true);
100#endif //DEBUG
101
102 QString verString(GIT_CURRENT_SHA1 "/" GIT_CURRENT_BRANCH);
103
104 versionLabel.setText(QString("Ver: ") + verString);
105
107
108 ui.localPreviewBar->addWidget(&rtcpRr);
109 ui.localPreviewBar->setAlignment(&rtcpRr, Qt::AlignBottom);
110
111 ui.remotePreviewBar->addWidget(&receiverLoss);
112 ui.remotePreviewBar->setAlignment(&receiverLoss, Qt::AlignBottom);
113
114 ui.statusbar->addPermanentWidget(&versionLabel);
115
116 ui.vuMeter->setControlPort(&controlPort);
117 ui.vuMeter->setOnRightSide(true);
118 ui.vuMeterSend->setControlPort(&controlPort);
119 ui.vuMeterSend->setParsePrefix("stats ASEND");
120
121 using namespace std::placeholders;
122 controlPort.addLineCallback(std::bind(&BandwidthWidget::parseLine, ui.send_bandwidth, _1));
123}
void parseLine(std::string_view line)
void addLineCallback(LineCallback callback)
ControlPort controlPort
Ui::UltragridWindow ui
RecvLossWidget receiverLoss
RecvReportWidget rtcpRr
const char * parent
Definition settings.cpp:198

References ControlPort::addLineCallback(), controlPort, BandwidthWidget::parseLine(), receiverLoss, RecvLossWidget::reset(), rtcpRr, ui, and versionLabel.

Here is the call graph for this function:

Member Function Documentation

◆ about

void UltragridWindow::about ( )
slot

Definition at line 285 of file ultragrid_window.cpp.

285 {
286 QMessageBox aboutBox(this);
287 aboutBox.setWindowTitle("About UltraGrid");
288 aboutBox.setTextFormat(Qt::RichText);
289 aboutBox.setText( "UltraGrid from CESNET is a software "
290 "implementation of high-quality low-latency video and audio transmissions using commodity PC and Mac hardware.<br><br>"
291 "More information can be found at <a href='http://www.ultragrid.cz'>http://www.ultragrid.cz</a><br><br>"
292 "Please read documents distributed with the product to find out current and former developers.<br><br>"
293 "UltraGrid uses <a href=\"http://ndi.video\">NDI&#174;</a>, NDI&#174; is a registered trademark of Vizrt NDI AB"
294 );
295 aboutBox.setStandardButtons(QMessageBox::Ok);
296 aboutBox.exec();
297}

Referenced by connectSignals().

◆ checkPreview()

void UltragridWindow::checkPreview ( )
private

Definition at line 239 of file ultragrid_window.cpp.

239 {
240 bool enable = true;
241 if(!availableSettings.isAvailable("multiplier", VIDEO_DISPLAY)
242 || !availableSettings.isAvailable("preview", VIDEO_DISPLAY))
243 {
244 enable = false;
245
246 QMessageBox warningBox(this);
247 warningBox.setWindowTitle("Preview disabled");
248 warningBox.setText("Preview is disabled, because UltraGrid was compiled"
249 " without preview and multiplier displays."
250 " Please build UltraGrid configured with the --enable-qt flag"
251 " to enable preview.");
252 warningBox.setStandardButtons(QMessageBox::Ok);
253 warningBox.setIcon(QMessageBox::Warning);
254 warningBox.exec();
255 }
256
257 QOpenGLContext ctx;
258 ctx.create();
259 QOpenGLFunctions_3_3_Core* funcs =
260#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
261 ctx.versionFunctions<QOpenGLFunctions_3_3_Core>();
262#else
263 QOpenGLVersionFunctionsFactory::get<QOpenGLFunctions_3_3_Core>(&ctx);
264#endif
265
266 if (!funcs) {
267 enable = false;
268
269 QMessageBox warningBox(this);
270 warningBox.setWindowTitle("Preview disabled");
271 warningBox.setText("OpenGL 3.3 is not supported, disabling preview.");
272 warningBox.setStandardButtons(QMessageBox::Ok);
273 warningBox.setIcon(QMessageBox::Warning);
274 warningBox.exec();
275 }
276
277 if(!enable){
278 ui.previewCheckBox->setChecked(false);
279 ui.previewCheckBox->setEnabled(false);
280
281 settings.getOption("preview").setValue("f");
282 }
283}
bool isAvailable(const std::string &name, SettingType type) const
virtual void setValue(const std::string &val, bool suppressCallback=false)
Definition settings.cpp:73
const Option & getOption(const std::string &opt) const
Definition settings.cpp:384
AvailableSettings availableSettings

References availableSettings, Settings::getOption(), AvailableSettings::isAvailable(), settings, Option::setValue(), and ui.

Here is the call graph for this function:

◆ closeEvent()

void UltragridWindow::closeEvent ( QCloseEvent * e)
protected

Definition at line 442 of file ultragrid_window.cpp.

442 {
444 QMessageBox sureMsg;
445 sureMsg.setIcon(QMessageBox::Question);
446 sureMsg.setText(tr("Are you sure?"));
447 sureMsg.setInformativeText(tr("UltraGrid is still running. Are you sure you want to exit?\n"));
448 sureMsg.setStandardButtons(QMessageBox::Cancel | QMessageBox::No | QMessageBox::Yes);
449 sureMsg.setDefaultButton(QMessageBox::No);
450
451 if(sureMsg.exec() != QMessageBox::Yes){
452 e->ignore();
453 return;
454 }
455 }
456
458
459 log.close();
460 settingsWindow.close();
461}
LaunchContext::Type getCurrentStatus() const
SettingsWindow settingsWindow
LaunchManager launchMngr

References LaunchManager::getCurrentStatus(), launchMngr, log, LaunchContext::Run, settingsWindow, and LaunchManager::stop().

Here is the call graph for this function:

◆ connectSignals()

void UltragridWindow::connectSignals ( )
private

Definition at line 463 of file ultragrid_window.cpp.

463 {
464 connect(ui.actionAbout_UltraGrid, SIGNAL(triggered()), this, SLOT(about()));
465 connect(ui.startButton, SIGNAL(clicked()), this, SLOT(startStop()));
466
467 connect(ui.arguments, SIGNAL(textChanged(const QString &)), this, SLOT(editArgs(const QString &)));
468 connect(ui.editCheckBox, SIGNAL(toggled(bool)), this, SLOT(setArgs()));
469 //connect(ui.actionRefresh, SIGNAL(triggered()), this, SLOT(queryOpts()));
470 connect(ui.actionShow_Terminal, SIGNAL(triggered()), this, SLOT(showLog()));
471 connect(ui.actionSettings, SIGNAL(triggered()), this, SLOT(showSettings()));
472 connect(ui.previewCheckBox, SIGNAL(toggled(bool)), this, SLOT(enablePreview(bool)));
473
474 connect(ui.actionRefresh, SIGNAL(triggered()), this, SLOT(refresh()));
475
476 connect(ui.actionSave, SIGNAL(triggered()), this, SLOT(saveSettings()));
477 connect(ui.actionLoad, SIGNAL(triggered()), this, SLOT(loadSettings()));
478
479 connect(&settingsWindow, SIGNAL(changed()), this, SLOT(setArgs()));
480 connect(&settingsUi, SIGNAL(changed()), this, SLOT(setArgs()));
481
482 connect(ui.fecToolBtn, SIGNAL(clicked()), this, SLOT(showSettings()));
483 connect(ui.fecToolBtn, SIGNAL(clicked()), &settingsWindow, SLOT(fecTab()));
484}
void editArgs(const QString &text)

References about(), editArgs(), enablePreview(), loadSettings(), refresh(), saveSettings(), setArgs(), settingsUi, settingsWindow, showLog(), showSettings(), startStop(), and ui.

Referenced by initializeUgOpts().

Here is the call graph for this function:

◆ editArgs

void UltragridWindow::editArgs ( const QString & text)
slot

Definition at line 427 of file ultragrid_window.cpp.

427 {
428 launchArgs = argStringToList(text);
429}

References launchArgs.

Referenced by connectSignals().

◆ enablePreview

void UltragridWindow::enablePreview ( bool enable)
privateslot

Definition at line 564 of file ultragrid_window.cpp.

564 {
565 if(enable)
567 else{
570 }
571 }
572}

References LaunchManager::getCurrentStatus(), launchMngr, LaunchContext::Preview, LaunchManager::stop(), and updatePreview().

Referenced by connectSignals().

Here is the call graph for this function:

◆ findUltragridExecutable()

QString UltragridWindow::findUltragridExecutable ( )
static

Definition at line 574 of file ultragrid_window.cpp.

574 {
575 QStringList args = QCoreApplication::arguments();
576 int index = args.indexOf("--with-uv");
577 if(index != -1 && args.size() >= index + 1) {
578 //found
579 return args.at(index + 1);
580 } else {
581#ifdef __APPLE__
582 CFBundleRef mainBundle = CFBundleGetMainBundle();
583 CFURLRef cfURL = CFBundleCopyBundleURL(mainBundle);
584 CFStringRef cfPath = CFURLCopyFileSystemPath(cfURL, kCFURLPOSIXPathStyle);
585 CFStringEncoding encodingMethod = CFStringGetSystemEncoding();
586 QString bundlePath(CFStringGetCStringPtr(cfPath, encodingMethod));
587 CFRelease(cfURL);
588 CFRelease(cfPath);
589 return bundlePath + "/Contents/MacOS/uv";
590#else
591 return QString("uv");
592#endif
593 }
594}

Referenced by initializeUgOpts(), and main().

◆ getOptionsForParam()

QStringList UltragridWindow::getOptionsForParam ( QString param)
private

◆ initializeUgOpts()

void UltragridWindow::initializeUgOpts ( )

Definition at line 58 of file ultragrid_window.cpp.

58 {
60
61 previewTimer.setSingleShot(true);
62 connect(&previewTimer, SIGNAL(timeout()), this, SLOT(updatePreview()));
64
68
70
71 setArgs();
72
73 ui.displayPreview->setKey("ug_preview_disp_unix" + settings.getSessRndKey());
74 ui.displayPreview->start();
75 ui.capturePreview->setKey("ug_preview_cap_unix" + settings.getSessRndKey());
76 ui.capturePreview->start();
77
78 QStringList args = QCoreApplication::arguments();
79 int index = args.indexOf("--config");
80 if(index != -1 && args.size() >= index + 1) {
81 QString filename = args.at(index + 1);
82 loadSettingsFile(filename);
83 }
84
86
88
89 previewStatus.setText("Preview: Stopped");
90 processStatus.setText("UG: Stopped");
91 ui.statusbar->addWidget(&processStatus);
92 ui.statusbar->addWidget(&previewStatus);
93}
const std::string & getSessRndKey() const
Definition settings.hpp:117
void initMainWin(Ui::UltragridWindow *ui)
void init(Settings *settings, AvailableSettings *availableSettings)
void init(SettingsUi *settingsUi)
void loadSettingsFile(const QString &filename)
static QString findUltragridExecutable()

References availableSettings, connectSignals(), findUltragridExecutable(), Settings::getSessRndKey(), SettingsUi::init(), SettingsWindow::init(), SettingsUi::initMainWin(), launchQuery(), loadSettingsFile(), previewStatus, previewTimer, processStatus, setArgs(), settings, settingsUi, settingsWindow, setupPreviewCallbacks(), ui, ultragridExecutable, and updatePreview().

Referenced by main().

Here is the call graph for this function:

◆ launchPreview

bool UltragridWindow::launchPreview ( )
slot

Definition at line 391 of file ultragrid_window.cpp.

391 {
392 if(!ui.previewCheckBox->isEnabled()
393 || !ui.previewCheckBox->isChecked())
394 {
395 return false;
396 }
397
398 auto ctx = std::make_unique<LaunchContext>();
399 ctx->args = argStringToList(settings.getPreviewParams());
400 ctx->executablePath = ultragridExecutable;
402
403#ifdef DEBUG
404 log.write("Preview: " + argListToString(ctx->args) + "\n\n");
405#endif
406
407 connect(&ctx->process, &QProcess::started,
408 [=]() { previewStatus.setText("Preview: Running"); });
409
410 connect(ctx.get(), &LaunchContext::processTerminated,
411 [=](int ec, QProcess::ExitStatus es, bool requested)
412 {
413 if(!requested && (es == QProcess::ExitStatus::CrashExit || ec != 0)){
414 previewStatus.setText("Preview: Crashed");
415 } else {
416 previewStatus.setText("Preview: Stopped");
417 }
418 });
419
420 connect(ctx.get(), &LaunchContext::processOutputLine,
421 [=](std::string_view sv) { controlPort.parseLine(sv); });
422
423 launchMngr.launch(std::move(ctx));
424 return true;
425}
void processOutputLine(std::string_view sv)
void processTerminated(int code, QProcess::ExitStatus es, bool wasRequested)
void launch(std::unique_ptr< LaunchContext > &&ctx)
void write(const QString &str)
std::string getPreviewParams() const
Definition settings.cpp:349

References Settings::getPreviewParams(), log, LaunchContext::Preview, LaunchContext::processTerminated(), settings, ui, ultragridExecutable, and LogWindow::write().

Referenced by updatePreview().

Here is the call graph for this function:

◆ launchQuery()

void UltragridWindow::launchQuery ( )
private

Definition at line 125 of file ultragrid_window.cpp.

125 {
126 auto ctx = std::make_unique<LaunchContext>();
127 ctx->executablePath = ultragridExecutable;
128 ctx->args = QStringList() << "--capabilities";
129 ctx->type = LaunchContext::Type::Query;
130
131 struct QueryData : public LaunchContext::ExtraData{
132 QLabel queryMsg = QLabel("Querying UltraGrid capabilities...");
133
134 bool safeMode = false;
135 std::string currentQuery;
136
137 std::vector<std::string> safeModeQueue;
138 std::vector<std::string> safeModeFails;
139 };
140
141 ctx->extraData = std::make_unique<QueryData>();
142 auto extraPtr = static_cast<QueryData *>(ctx->extraData.get());
143
144 ui.statusbar->addWidget(&extraPtr->queryMsg);
146
147 connect(&ctx->process, &QProcess::started,
148 [=]()
149 {
150 ui.startButton->setEnabled(false);
151 ui.startButton->setText("Querying...");
152 });
153
154 connect(ctx.get(), &LaunchContext::processTerminated,
155 [=](int ec, QProcess::ExitStatus es, bool requested)
156 {
157 ui.startButton->setEnabled(true);
158 ui.startButton->setText("Start");
159
160 if(!requested && (es == QProcess::ExitStatus::CrashExit || ec != 0)){
161 if(!extraPtr->safeMode){
162 extraPtr->safeMode = true;
163 ui.statusbar->showMessage("Capabilities querying in safe mode...");
164 for(int i = 0; i < SettingType::SETTING_TYPE_COUNT; i++){
165 SettingType type = static_cast<SettingType>(i);
166 for(const auto& mod : availableSettings.getAvailableSettings(type)){
167 std::string item = settingTypeToStr(type);
168 item += ":";
169 item += mod;
170 extraPtr->safeModeQueue.push_back(std::move(item));
171 }
172 }
173 extraPtr->safeModeQueue.emplace_back("noprobe");
174 availableSettings.queryBegin();
175 } else {
176 extraPtr->safeModeFails.push_back(extraPtr->currentQuery);
177 }
178 }
179
180 if(extraPtr->safeMode && !extraPtr->safeModeQueue.empty()){
181 auto next_ctx = launchMngr.extractCurrentCtx();
182
183 auto modToQuery = std::move(extraPtr->safeModeQueue.back());
184 extraPtr->safeModeQueue.pop_back();
185
186 extraPtr->currentQuery = "--capabilities=" + modToQuery;
187
188 next_ctx->args = QStringList()
189 << QString::fromStdString(extraPtr->currentQuery);
190
191 availableSettings.queryBeginPass();
192 launchMngr.reLaunch(std::move(next_ctx));
193
194 return;
195 }
196
197 if(extraPtr->safeMode && !extraPtr->safeModeFails.empty()){
198 QMessageBox msgBox;
199 std::string msg = "Ultragrid crashed when querying the following modules."
200 " Some options may be missing as a result.\n";
201
202 for(const auto& i : extraPtr->safeModeFails){
203 msg += "\n";
204 msg += i;
205 }
206 msgBox.setText(QString::fromStdString(msg));
207 msgBox.setIcon(QMessageBox::Warning);
208 msgBox.exec();
209 }
210
214 checkPreview();
216 });
217
218 connect(ctx.get(), &LaunchContext::processOutputLine,
219 [=](std::string_view line) { availableSettings.queryLine(line); });
220
221 launchMngr.launch(std::move(ctx));
222}
void populateSettingsFromCapabilities(AvailableSettings *availSettings)
Definition settings.cpp:518
void refreshAll()

References availableSettings, LaunchContext::processTerminated(), LaunchContext::Query, AvailableSettings::queryBegin(), ui, and ultragridExecutable.

Referenced by initializeUgOpts(), and refresh().

Here is the call graph for this function:

◆ loadSettings

void UltragridWindow::loadSettings ( )
slot

Definition at line 548 of file ultragrid_window.cpp.

548 {
549 QFileDialog fileDialog(this);
550 fileDialog.setFileMode(QFileDialog::ExistingFile);
551 fileDialog.setNameFilter(tr("Json (*.json)"));
552
553 QStringList fileNames;
554 if (fileDialog.exec())
555 fileNames = fileDialog.selectedFiles();
556
557 if(fileNames.empty())
558 return;
559
560 loadSettingsFile(fileNames.first());
561
562}

References loadSettingsFile().

Referenced by connectSignals().

Here is the call graph for this function:

◆ loadSettingsFile()

void UltragridWindow::loadSettingsFile ( const QString & filename)
private

Definition at line 524 of file ultragrid_window.cpp.

524 {
525 QFile inFile(filename);
526
527 if (!inFile.open(QIODevice::ReadOnly)) {
528 qWarning("Couldn't open save file.");
529 return;
530 }
531
532 QByteArray saveData = inFile.readAll();
533
534 QJsonDocument saveDoc = QJsonDocument::fromJson(saveData);
535 QJsonObject saveObj = saveDoc.object();
536
537 for(const QString &key : saveObj.keys()){
538 if(saveObj[key].isString()){
539 settings.getOption(key.toStdString())
540 .setValue(saveObj[key].toString().toStdString(), true);
541 }
542 }
543
545 setArgs();
546}
void changedAll()
Definition settings.cpp:437
const char * key
Definition cineform.cpp:125

References Settings::changedAll(), Settings::getOption(), key, setArgs(), settings, and Option::setValue().

Referenced by initializeUgOpts(), and loadSettings().

Here is the call graph for this function:

◆ refresh

void UltragridWindow::refresh ( )
privateslot

Definition at line 224 of file ultragrid_window.cpp.

224 {
225 launchQuery();
226}

References launchQuery().

Referenced by connectSignals().

Here is the call graph for this function:

◆ saveSettings

void UltragridWindow::saveSettings ( )
slot

Definition at line 496 of file ultragrid_window.cpp.

496 {
497 const auto &optMap = settings.getOptionMap();
498
499 QString filename = QFileDialog::getSaveFileName(this, "Save Settings", "", "Json (*.json)");
500 if(!filename.endsWith(QString(".json"))){
501 filename.append(QString(".json"));
502 }
503
504 QFile outFile(filename);
505
506 if (!outFile.open(QIODevice::WriteOnly)) {
507 qWarning("Couldn't open save file.");
508 return;
509 }
510
511 QJsonObject jsonObj;
512
513 for(const auto &keyValPair : optMap){
514 jsonObj[QString::fromStdString(keyValPair.first)] =
515 QString::fromStdString(keyValPair.second->getValue());
516 }
517
518 QJsonDocument jsonDoc(jsonObj);
519
520 outFile.write(jsonDoc.toJson());
521
522}
const std::map< std::string, std::unique_ptr< Option > > & getOptionMap() const
Definition settings.cpp:393

References Settings::getOptionMap(), and settings.

Referenced by connectSignals().

Here is the call graph for this function:

◆ schedulePreview()

void UltragridWindow::schedulePreview ( Option & ,
bool ,
void * opaque )
staticprivate

Definition at line 376 of file ultragrid_window.cpp.

376 {
377 UltragridWindow *obj = static_cast<UltragridWindow *>(opaque);
378 obj->previewTimer.start(200);
379}

References previewTimer.

Referenced by setupPreviewCallbacks().

◆ setArgs

void UltragridWindow::setArgs ( )
slot

Definition at line 431 of file ultragrid_window.cpp.

431 {
432 QString args = QString::fromStdString(settings.getLaunchParams());
433
434 launchArgs = argStringToList(args);
435
436#ifdef DEBUG
437 log.write("set args: " + args + "\n");
438#endif
439 ui.arguments->setText(args);
440}
std::string getLaunchParams() const
Definition settings.cpp:299

References Settings::getLaunchParams(), launchArgs, log, settings, ui, and LogWindow::write().

Referenced by connectSignals(), initializeUgOpts(), and loadSettingsFile().

Here is the call graph for this function:

◆ setupPreviewCallbacks()

void UltragridWindow::setupPreviewCallbacks ( )
private

Definition at line 228 of file ultragrid_window.cpp.

228 {
229 const char * const opts[] = {
230 "video.source", "audio.source", "audio.source.channels", "encryption", "extraOpts"
231 };
232
233 for(const auto &i : opts){
236 }
237}
void addOnChangeCallback(Callback callback)
Definition settings.cpp:107
static void schedulePreview(Option &, bool, void *)

References Option::addOnChangeCallback(), Settings::getOption(), schedulePreview(), and settings.

Referenced by initializeUgOpts().

Here is the call graph for this function:

◆ showLog

void UltragridWindow::showLog ( )
slot

Definition at line 486 of file ultragrid_window.cpp.

486 {
487 log.show();
488 log.raise();
489}

References log.

Referenced by connectSignals().

◆ showSettings

void UltragridWindow::showSettings ( )
slot

Definition at line 491 of file ultragrid_window.cpp.

491 {
492 settingsWindow.show();
493 settingsWindow.raise();
494}

References settingsWindow.

Referenced by connectSignals().

◆ start()

void UltragridWindow::start ( )
private

Definition at line 310 of file ultragrid_window.cpp.

310 {
311 log.write("Command args: " + argListToString(launchArgs) + "\n\n");
312 auto ctx = std::make_unique<LaunchContext>();
313 ctx->executablePath = ultragridExecutable;
314 ctx->args = launchArgs;
315 ctx->type = LaunchContext::Type::Run;
316
317 connect(&ctx->process, &QProcess::started,
318 [=]()
319 {
320 ui.startButton->setText("Stop");
321 ui.startButton->setEnabled(true);
322 processStatus.setText("UG: Running");
323 ui.actionRefresh->setEnabled(false);
324 });
325
326 connect(ctx.get(), &LaunchContext::processTerminated,
327 [=](int ec, QProcess::ExitStatus es, bool requested)
328 {
329 ui.startButton->setText("Start");
330 ui.startButton->setEnabled(true);
331 ui.actionRefresh->setEnabled(true);
332 receiverLoss.reset();
333 rtcpRr.reset();
334 ui.send_bandwidth->reset();
335
336 if(!requested && (es == QProcess::ExitStatus::CrashExit || ec != 0)){
337 processStatus.setText("UG: Crashed");
338
339 log.write("Process exited with code: " + QString::number(ec) + "\n\n");
340 QMessageBox msgBox(this);
341 msgBox.setIcon(QMessageBox::Critical);
342 msgBox.setWindowTitle("UltraGrid error!");
343 msgBox.setText("Ultragrid has exited with an error! If you need help, please send an email "
344 "to ultragrid-dev@cesnet.cz with log attached.");
345 QPushButton *showLogBtn = msgBox.addButton(tr("Show log"), QMessageBox::ActionRole);
346 msgBox.addButton(tr("Dismiss"), QMessageBox::RejectRole);
347 msgBox.exec();
348
349 if(msgBox.clickedButton() == showLogBtn){
350 showLog();
351 }
352
353 } else {
354 processStatus.setText("UG: Stopped");
355 launchPreview();
356 }
357 });
358
359 connect(ctx.get(), &LaunchContext::processOutputRead,
360 [=](QString str) { log.write(str); });
361
362 connect(ctx.get(), &LaunchContext::processOutputLine,
363 [=](std::string_view sv)
364 {
365 rtcpRr.parseLine(sv);
366 controlPort.parseLine(sv);
367 receiverLoss.parseLine(sv);
368 });
369
370 ui.startButton->setText("Starting...");
371 processStatus.setText("UG: Starting");
372 ui.startButton->setEnabled(false);
373 launchMngr.launch(std::move(ctx));
374}
void processOutputRead(QString str)

References launchArgs, log, LaunchContext::processTerminated(), LaunchContext::Run, ultragridExecutable, and LogWindow::write().

Referenced by main(), and startStop().

Here is the call graph for this function:

◆ startStop

void UltragridWindow::startStop ( )
slot

Definition at line 299 of file ultragrid_window.cpp.

299 {
301 ui.startButton->setText("Stopping...");
302 processStatus.setText("UG: Stopping");
303 ui.startButton->setEnabled(false);
305 } else {
306 start();
307 }
308}

References LaunchManager::getCurrentStatus(), launchMngr, processStatus, LaunchContext::Run, start(), LaunchManager::stop(), and ui.

Referenced by connectSignals().

Here is the call graph for this function:

◆ updatePreview

void UltragridWindow::updatePreview ( )
slot

Definition at line 381 of file ultragrid_window.cpp.

381 {
384 {
385 return;
386 }
387
389}

References LaunchManager::getCurrentStatus(), launchMngr, launchPreview(), LaunchContext::Query, and LaunchContext::Run.

Referenced by enablePreview(), and initializeUgOpts().

Here is the call graph for this function:

Member Data Documentation

◆ availableSettings

AvailableSettings UltragridWindow::availableSettings
private

Definition at line 51 of file ultragrid_window.hpp.

Referenced by checkPreview(), initializeUgOpts(), and launchQuery().

◆ controlPort

ControlPort UltragridWindow::controlPort
private

Definition at line 70 of file ultragrid_window.hpp.

Referenced by UltragridWindow().

◆ launchArgs

QStringList UltragridWindow::launchArgs
private

Definition at line 53 of file ultragrid_window.hpp.

Referenced by editArgs(), setArgs(), and start().

◆ launchMngr

LaunchManager UltragridWindow::launchMngr
private

Definition at line 72 of file ultragrid_window.hpp.

Referenced by closeEvent(), enablePreview(), startStop(), and updatePreview().

◆ log

LogWindow UltragridWindow::log
private

Definition at line 55 of file ultragrid_window.hpp.

Referenced by closeEvent(), launchPreview(), setArgs(), showLog(), and start().

◆ previewStatus

QLabel UltragridWindow::previewStatus
private

Definition at line 63 of file ultragrid_window.hpp.

Referenced by initializeUgOpts().

◆ previewTimer

QTimer UltragridWindow::previewTimer
private

Definition at line 58 of file ultragrid_window.hpp.

Referenced by initializeUgOpts(), and schedulePreview().

◆ processStatus

QLabel UltragridWindow::processStatus
private

Definition at line 62 of file ultragrid_window.hpp.

Referenced by initializeUgOpts(), and startStop().

◆ receiverLoss

RecvLossWidget UltragridWindow::receiverLoss
private

Definition at line 66 of file ultragrid_window.hpp.

Referenced by UltragridWindow().

◆ rtcpRr

RecvReportWidget UltragridWindow::rtcpRr
private

Definition at line 65 of file ultragrid_window.hpp.

Referenced by UltragridWindow().

◆ settings

Settings UltragridWindow::settings
private

◆ settingsUi

SettingsUi UltragridWindow::settingsUi
private

Definition at line 60 of file ultragrid_window.hpp.

Referenced by connectSignals(), and initializeUgOpts().

◆ settingsWindow

SettingsWindow UltragridWindow::settingsWindow
private

Definition at line 56 of file ultragrid_window.hpp.

Referenced by closeEvent(), connectSignals(), initializeUgOpts(), and showSettings().

◆ ui

Ui::UltragridWindow UltragridWindow::ui
private

◆ ultragridExecutable

QString UltragridWindow::ultragridExecutable
private

Definition at line 49 of file ultragrid_window.hpp.

Referenced by initializeUgOpts(), launchPreview(), launchQuery(), and start().

◆ versionLabel

QLabel UltragridWindow::versionLabel
private

Definition at line 68 of file ultragrid_window.hpp.

Referenced by UltragridWindow().


The documentation for this class was generated from the following files: