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

#include <settings_ui.hpp>

Inheritance diagram for SettingsUi:
Inheritance graph
Collaboration diagram for SettingsUi:
Collaboration graph

Signals

void changed ()
 

Public Member Functions

void init (Settings *settings, AvailableSettings *availableSettings)
 
void initMainWin (Ui::UltragridWindow *ui)
 
void initSettingsWin (Ui::Settings *ui)
 
void refreshAll ()
 

Private Slots

void buildCodecOptControls (const Codec &codec)
 
void buildSettingsCodecList ()
 
void settingsCodecSelected (QListWidgetItem *curr, QListWidgetItem *prev)
 
void settingsDeviceSelected (QListWidgetItem *curr, QListWidgetItem *prev)
 
void test ()
 

Private Member Functions

void addCallbacks ()
 
void addControl (WidgetUi *widget)
 
void addDeviceTabs ()
 
void buildDeviceOptControls (const Device &dev, DeviceOptTab &tab)
 
void buildSettingsDeviceList (QListWidget *list, SettingType type)
 
void fillFormOptions (ControlForm &form, std::string_view keyPrefix, const std::vector< CapabOpt > &opts)
 

Static Private Member Functions

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

Private Attributes

AvailableSettings * availableSettings = nullptr
 
std::vector< std::unique_ptr< WidgetUi > > codecControls
 
std::map< SettingType, DeviceOptTab > deviceTabs
 
std::vector< std::unique_ptr< WidgetUi > > displayControls
 
Ui::UltragridWindow * mainWin = nullptr
 
Settings * settings = nullptr
 
Ui::Settings * settingsWin = nullptr
 
std::vector< std::unique_ptr< WidgetUi > > uiControls
 

Detailed Description

Definition at line 44 of file settings_ui.hpp.

Member Function Documentation

◆ addCallbacks()

void SettingsUi::addCallbacks ( )
private

Definition at line 134 of file settings_ui.cpp.

134 {
135 settings->getOption("audio.compress").addOnChangeCallback(
137
140
143}
void audioCompressionCallback(Option &opt, bool suboption, void *opaque)
void addOnChangeCallback(Callback callback)
Definition settings.cpp:107
const Option & getOption(const std::string &opt) const
Definition settings.cpp:384
static void refreshAllCallback(Option &, bool, void *)
Settings * settings
Ui::UltragridWindow * mainWin
static void vuMeterCallback(Option &opt, bool, void *opaque)

References Option::addOnChangeCallback(), audioCompressionCallback(), Settings::getOption(), mainWin, refreshAllCallback(), settings, and vuMeterCallback().

Referenced by initMainWin().

Here is the call graph for this function:

◆ addControl()

void SettingsUi::addControl ( WidgetUi * widget)
private

Definition at line 16 of file settings_ui.cpp.

16 {
17 uiControls.emplace_back(widget);
18
19 connect(widget, &WidgetUi::changed, this, &SettingsUi::changed);
20}
std::vector< std::unique_ptr< WidgetUi > > uiControls
void changed()
void changed()

References changed(), WidgetUi::changed(), and uiControls.

Referenced by initMainWin(), and initSettingsWin().

Here is the call graph for this function:

◆ addDeviceTabs()

void SettingsUi::addDeviceTabs ( )
private

Definition at line 184 of file settings_ui.cpp.

184 {
185 struct{
186 const char *label;
188 const char *keyPrefix;
189 } tabs[] = {
190 {"Audio playback", AUDIO_PLAYBACK, "audio.playback"},
191 {"Audio capture", AUDIO_SRC, "audio.source"},
192 {"Display", VIDEO_DISPLAY, "video.display"},
193 {"Capture", VIDEO_SRC, "video.source"},
194 };
195
196 deviceTabs.clear();
197
198 for(const auto& i : tabs){
199 DeviceOptTab tab;
200 tab.keyPrefix = i.keyPrefix;
201 tab.page = std::make_unique<QWidget>();
202 auto layout = new QHBoxLayout();
203 tab.page->setLayout(layout);
204
205 tab.listWidget = new QListWidget();
206 layout->addWidget(tab.listWidget, 1);
207 tab.scrollArea = new QScrollArea();
208 layout->addWidget(tab.scrollArea, 3);
209
210 tab.listWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
211 tab.scrollArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
212
214
215 if(tab.listWidget->count() == 0){
216 continue;
217 }
218
219 connect(tab.listWidget, &QListWidget::currentItemChanged,
221
222 settingsWin->tabWidget->insertTab(0, tab.page.get(), i.label);
223 deviceTabs.emplace(i.type, std::move(tab));
224 }
225}
Ui::Settings * settingsWin
std::map< SettingType, DeviceOptTab > deviceTabs
void buildSettingsDeviceList(QListWidget *list, SettingType type)
void settingsDeviceSelected(QListWidgetItem *curr, QListWidgetItem *prev)
Option::OptType type
Definition settings.cpp:194
std::unique_ptr< QWidget > page
std::string keyPrefix
QScrollArea * scrollArea
QListWidget * listWidget
const char * label
Definition cineform.cpp:124

References buildSettingsDeviceList(), deviceTabs, DeviceOptTab::keyPrefix, label, DeviceOptTab::listWidget, DeviceOptTab::page, DeviceOptTab::scrollArea, settingsDeviceSelected(), settingsWin, and type.

Referenced by initSettingsWin(), and refreshAll().

Here is the call graph for this function:

◆ buildCodecOptControls

void SettingsUi::buildCodecOptControls ( const Codec & codec)
privateslot

Definition at line 287 of file settings_ui.cpp.

287 {
288 ControlForm form;
289
290 QComboBox *encoderCombo = new QComboBox();
291 form.formLayout->addRow("Encoder", encoderCombo);
292
293 WidgetUi *encoderComboUi = new ComboBoxUi(encoderCombo,
294 settings,
295 "video.compress." + codec.module_name + ".codec." + codec.name + ".encoder",
296 std::bind(getCodecEncoders, codec));
297
298 form.uiControls.emplace_back(encoderComboUi);
299 connect(encoderComboUi, &WidgetUi::changed, this, &SettingsUi::changed);
300
301 for(const auto& compMod : availableSettings->getVideoCompressModules()){
302 if(compMod.name == codec.module_name){
303 fillFormOptions(form, "video.compress." + compMod.name + ".", compMod.opts);
304 }
305 }
306
307 codecControls = std::move(form.uiControls);
308 settingsWin->codecOptScroll->setWidget(form.uiContainer.release());
309}
const std::vector< CompressModule > & getVideoCompressModules() const
AvailableSettings * availableSettings
void fillFormOptions(ControlForm &form, std::string_view keyPrefix, const std::vector< CapabOpt > &opts)
std::vector< std::unique_ptr< WidgetUi > > codecControls
std::vector< std::unique_ptr< WidgetUi > > uiControls
QFormLayout * formLayout
std::unique_ptr< QWidget > uiContainer
std::string name
std::vector< SettingItem > getCodecEncoders(const Codec &codec)

References availableSettings, changed(), WidgetUi::changed(), codecControls, fillFormOptions(), ControlForm::formLayout, getCodecEncoders(), AvailableSettings::getVideoCompressModules(), codec::name, settings, settingsWin, ControlForm::uiContainer, and ControlForm::uiControls.

Referenced by settingsCodecSelected().

Here is the call graph for this function:

◆ buildDeviceOptControls()

void SettingsUi::buildDeviceOptControls ( const Device & dev,
DeviceOptTab & tab )
private

Definition at line 311 of file settings_ui.cpp.

311 {
312 ControlForm form;
313
314 std::string optPrefix = tab.keyPrefix + "." + dev.type + ".device." + dev.deviceOpt + ".";
315 fillFormOptions(form, optPrefix, dev.opts);
316
317 tab.uiControls = std::move(form.uiControls);
318 tab.scrollArea->setWidget(form.uiContainer.release());
319}
std::string type
std::vector< CapabOpt > opts
std::string deviceOpt
std::vector< std::unique_ptr< WidgetUi > > uiControls

References Device::deviceOpt, fillFormOptions(), DeviceOptTab::keyPrefix, Device::opts, DeviceOptTab::scrollArea, Device::type, ControlForm::uiContainer, ControlForm::uiControls, and DeviceOptTab::uiControls.

Referenced by settingsDeviceSelected().

Here is the call graph for this function:

◆ buildSettingsCodecList

void SettingsUi::buildSettingsCodecList ( )
privateslot

Definition at line 229 of file settings_ui.cpp.

229 {
230 if(!settingsWin)
231 return;
232
233 QListWidget *list = settingsWin->codecList;
234 list->clear();
235
236 for(const auto& codec : availableSettings->getVideoCompressCodecs()){
237 QListWidgetItem *item = new QListWidgetItem(list);
238 item->setText(QString::fromStdString(codec.name));
239 item->setData(Qt::UserRole, QVariant::fromValue(codec));
240
241 list->addItem(item);
242 }
243}
const std::vector< Codec > & getVideoCompressCodecs() const
Definition hd-rum.c:27

References availableSettings, AvailableSettings::getVideoCompressCodecs(), codec::name, and settingsWin.

Referenced by initSettingsWin(), and refreshAll().

Here is the call graph for this function:

◆ buildSettingsDeviceList()

void SettingsUi::buildSettingsDeviceList ( QListWidget * list,
SettingType type )
private

Definition at line 247 of file settings_ui.cpp.

247 {
248 if(!settingsWin)
249 return;
250
251 list->clear();
252
253 for(const auto& dev : availableSettings->getDevices(type)){
254 if(dev.opts.empty())
255 continue;
256
257 QListWidgetItem *item = new QListWidgetItem(list);
258
259 item->setText(QString::fromStdString(dev.name));
260 item->setData(Qt::UserRole, QVariant::fromValue(dev));
261
262 list->addItem(item);
263 }
264}
const std::vector< Device > & getDevices(SettingType type) const

References availableSettings, AvailableSettings::getDevices(), settingsWin, and type.

Referenced by addDeviceTabs().

Here is the call graph for this function:

◆ changed

void SettingsUi::changed ( )
signal

◆ fillFormOptions()

void SettingsUi::fillFormOptions ( ControlForm & form,
std::string_view keyPrefix,
const std::vector< CapabOpt > & opts )
private

Definition at line 321 of file settings_ui.cpp.

324{
325 for(const auto& modOpt : opts){
326 QLabel *label = new QLabel(QString::fromStdString(modOpt.displayName));
327 QWidget *field = nullptr;
328 WidgetUi *widgetUi = nullptr;
329 std::string optKey = std::string(keyPrefix) + modOpt.key;
330 if(modOpt.booleanOpt){
331 QCheckBox *checkBox = new QCheckBox();
332 field = checkBox;
333
334 widgetUi = new CheckboxUi(checkBox,
335 settings,
336 optKey);
337 } else {
338 QLineEdit *lineEdit = new QLineEdit();
339 field = lineEdit;
340
341 widgetUi = new LineEditUi(lineEdit,
342 settings,
343 optKey);
344 }
345 label->setToolTip(QString::fromStdString(modOpt.displayDesc));
346 field->setToolTip(QString::fromStdString(modOpt.displayDesc));
347
348 form.formLayout->addRow(label, field);
349
350 form.uiControls.emplace_back(widgetUi);
351 connect(widgetUi, &WidgetUi::changed, this, &SettingsUi::changed);
352 }
353}

References changed(), WidgetUi::changed(), ControlForm::formLayout, label, settings, and ControlForm::uiControls.

Referenced by buildCodecOptControls(), and buildDeviceOptControls().

Here is the call graph for this function:

◆ init()

void SettingsUi::init ( Settings * settings,
AvailableSettings * availableSettings )

Definition at line 11 of file settings_ui.cpp.

11 {
12 this->settings = settings;
13 this->availableSettings = availableSettings;
14}

References availableSettings, and settings.

Referenced by UltragridWindow::initializeUgOpts().

◆ initMainWin()

void SettingsUi::initMainWin ( Ui::UltragridWindow * ui)

Definition at line 22 of file settings_ui.cpp.

22 {
23 mainWin = ui;
24
26#ifdef DEBUG
27 connect(mainWin->actionTest, SIGNAL(triggered()), this, SLOT(test()));
28#endif
29
30 addControl(new CheckboxUi(ui->fECCheckBox, settings, "network.fec.enabled"));
31 addControl(new CheckboxUi(ui->previewCheckBox, settings, "preview"));
33 new LineEditUi(ui->networkDestinationEdit, settings, "network.destination")
34 );
35 addControl(new ActionCheckableUi(ui->actionVuMeter, settings, "vuMeter"));
36 addControl(new ActionCheckableUi(ui->actionUse_hw_acceleration,
38 "decode.hwaccel"));
39
41 new ComboBoxUi(ui->videoSourceComboBox,
43 "video.source",
45 );
46
47 LineEditUi *videoBitrate = new LineEditUi(ui->videoBitrateEdit,
49 "");
50 addControl(videoBitrate);
51
52 std::unique_ptr<VideoBitrateCallbackData> vidBitrateCallData(new VideoBitrateCallbackData());
53
54 vidBitrateCallData->availSettings = availableSettings;
55 vidBitrateCallData->lineEditUi = videoBitrate;
56 vidBitrateCallData->label = mainWin->videoBitrateLabel;
57
58 auto extraPtr = vidBitrateCallData.get();
59 videoBitrate->registerCustomCallback("video.compress",
61 std::move(vidBitrateCallData));
62
63
65 new ComboBoxUi(ui->videoCompressionComboBox,
67 "video.compress",
69 );
70
72 new ComboBoxUi(ui->videoDisplayComboBox,
74 "video.display",
76 );
77
78 ComboBoxUi *videoModeCombo = new ComboBoxUi(ui->videoModeComboBox,
80 "",
82 videoModeCombo->registerCallback("video.source");
83 addControl(videoModeCombo);
84
86 new ComboBoxUi(ui->audioCompressionComboBox,
88 "audio.compress",
90 );
91
92 ComboBoxUi *audioSrc = new ComboBoxUi(ui->audioSourceComboBox,
94 "audio.source",
95 std::bind(getAudioSrc, availableSettings));
96 audioSrc->registerCallback("video.source");
97 addControl(audioSrc);
98
99 ComboBoxUi *audioPlayback = new ComboBoxUi(ui->audioPlaybackComboBox,
100 settings,
101 "audio.playback",
103 audioPlayback->registerCallback("video.display");
104 addControl(audioPlayback);
105
106 addControl(new LineEditUi(ui->audioBitrateEdit,
107 settings,
108 "audio.compress.bitrate"));
109
110 addControl(new SpinBoxUi(ui->audioChannelsSpinBox,
111 settings,
112 "audio.source.channels"));
113
114 addControl(new LineEditUi(ui->portLineEdit, settings, "network.port"));
115}
std::vector< SettingItem > getAudioCompress(AvailableSettings *availSettings)
Definition audio_opts.cpp:8
std::vector< SettingItem > getAudioPlayback(AvailableSettings *availSettings)
std::vector< SettingItem > getAudioSrc(AvailableSettings *availSettings)
void addControl(WidgetUi *widget)
void addCallbacks()
void registerCallback(const std::string &option)
Definition widget_ui.cpp:49
void registerCustomCallback(const std::string &option, Option::Callback callback, std::unique_ptr< ExtraCallbackData > &&extraDataPtr=nullptr)
Definition widget_ui.cpp:25
std::vector< SettingItem > getVideoDisplay(AvailableSettings *availSettings)
std::vector< SettingItem > getVideoSrc(AvailableSettings *availSettings)
Definition video_opts.cpp:8
std::vector< SettingItem > getVideoModes(AvailableSettings *availSettings)
void videoCompressBitrateCallback(Option &opt, bool suboption, void *opaque)
std::vector< SettingItem > getVideoCompress(AvailableSettings *availSettings)

References addCallbacks(), addControl(), availableSettings, getAudioCompress(), getAudioPlayback(), getAudioSrc(), getVideoCompress(), getVideoDisplay(), getVideoModes(), getVideoSrc(), mainWin, WidgetUi::registerCallback(), WidgetUi::registerCustomCallback(), settings, test(), and videoCompressBitrateCallback().

Referenced by UltragridWindow::initializeUgOpts().

Here is the call graph for this function:

◆ initSettingsWin()

void SettingsUi::initSettingsWin ( Ui::Settings * ui)

Definition at line 149 of file settings_ui.cpp.

149 {
150 settingsWin = ui;
151
152 addControl(new LineEditUi(ui->basePort, settings, "network.port"));
153 addControl(new LineEditUi(ui->controlPort, settings, "network.control_port"));
154 addControl(new CheckboxUi(ui->controlPortRandom, settings, "network.control_port.random"));
155 addControl(new CheckboxUi(ui->fecAutoCheck, settings, "network.fec.auto"));
156 addControl(new GroupBoxUi(ui->fecGroupBox, settings, "network.fec.enabled"));
157 addControl(new SpinBoxUi(ui->multSpin, settings, "network.fec.mult.factor"));
158 addControl(new SpinBoxUi(ui->ldgmK, settings, "network.fec.ldgm.k"));
159 addControl(new SpinBoxUi(ui->ldgmM, settings, "network.fec.ldgm.m"));
160 addControl(new SpinBoxUi(ui->ldgmC, settings, "network.fec.ldgm.c"));
161 addControl(new SpinBoxUi(ui->rsK, settings, "network.fec.rs.k"));
162 addControl(new SpinBoxUi(ui->rsN, settings, "network.fec.rs.n"));
163 addControl(new RadioButtonUi(ui->fecNoneRadio, "", settings, "network.fec.type"));
164 addControl(new RadioButtonUi(ui->fecMultRadio, "mult", settings, "network.fec.type"));
165 addControl(new RadioButtonUi(ui->fecLdgmRadio, "ldgm", settings, "network.fec.type"));
166 addControl(new RadioButtonUi(ui->fecRsRadio, "rs", settings, "network.fec.type"));
167 addControl(new RadioButtonUi(ui->ldgmSimpCpuRadio, "CPU", settings, "network.fec.ldgm.device"));
168 addControl(new RadioButtonUi(ui->ldgmSimpGpuRadio, "GPU", settings, "network.fec.ldgm.device"));
169 addControl(new RadioButtonUi(ui->ldgmCpuRadio, "CPU", settings, "network.fec.ldgm.device"));
170 addControl(new RadioButtonUi(ui->ldgmGpuRadio, "GPU", settings, "network.fec.ldgm.device"));
171 addControl(new CheckboxUi(ui->decodeAccelCheck, settings, "decode.hwaccel"));
172 addControl(new CheckboxUi(ui->errorsFatalBox, settings, "errors_fatal"));
173 addControl(new LineEditUi(ui->encryptionLineEdit, settings, "encryption"));
174 addControl(new LineEditUi(ui->extraOptsLineEdit, settings, "extraOpts"));
175 addControl(new CheckboxUi(ui->advModeCheck, settings, "advanced"));
176
178
180 connect(settingsWin->codecList, &QListWidget::currentItemChanged,
182}
void buildSettingsCodecList()
void settingsCodecSelected(QListWidgetItem *curr, QListWidgetItem *prev)
void addDeviceTabs()

References addControl(), addDeviceTabs(), buildSettingsCodecList(), settings, settingsCodecSelected(), and settingsWin.

Referenced by SettingsWindow::init().

Here is the call graph for this function:

◆ refreshAll()

void SettingsUi::refreshAll ( )

Definition at line 117 of file settings_ui.cpp.

117 {
118 for(auto &i : uiControls){
119 i->refresh();
120 }
123}

References addDeviceTabs(), buildSettingsCodecList(), and uiControls.

Referenced by refreshAllCallback().

Here is the call graph for this function:

◆ refreshAllCallback()

void SettingsUi::refreshAllCallback ( Option & ,
bool ,
void * opaque )
staticprivate

Definition at line 125 of file settings_ui.cpp.

125 {
126 static_cast<SettingsUi *>(opaque)->refreshAll();
127}
void refreshAll()

References refreshAll().

Referenced by addCallbacks().

Here is the call graph for this function:

◆ settingsCodecSelected

void SettingsUi::settingsCodecSelected ( QListWidgetItem * curr,
QListWidgetItem * prev )
privateslot

Definition at line 266 of file settings_ui.cpp.

266 {
267 if(!curr){
268 codecControls.clear();
269 return;
270 }
271
272 const auto &codec = curr->data(Qt::UserRole).value<Codec>();
273
275}
void buildCodecOptControls(const Codec &codec)

References buildCodecOptControls(), and codecControls.

Referenced by initSettingsWin().

Here is the call graph for this function:

◆ settingsDeviceSelected

void SettingsUi::settingsDeviceSelected ( QListWidgetItem * curr,
QListWidgetItem * prev )
privateslot

Definition at line 277 of file settings_ui.cpp.

277 {
278 if(!curr){
279 return;
280 }
281
282 const auto &dev = curr->data(Qt::UserRole).value<Device>();
283
284 buildDeviceOptControls(dev, deviceTabs.at(dev.settingType));
285}
void buildDeviceOptControls(const Device &dev, DeviceOptTab &tab)

References buildDeviceOptControls(), and deviceTabs.

Referenced by addDeviceTabs().

Here is the call graph for this function:

◆ test

void SettingsUi::test ( )
privateslot

Definition at line 145 of file settings_ui.cpp.

145 {
146 printf("%s\n", settings->getLaunchParams().c_str());
147}
std::string getLaunchParams() const
Definition settings.cpp:299

References Settings::getLaunchParams(), and settings.

Referenced by initMainWin().

Here is the call graph for this function:

Member Data Documentation

◆ availableSettings

AvailableSettings* SettingsUi::availableSettings = nullptr
private

◆ codecControls

std::vector<std::unique_ptr<WidgetUi> > SettingsUi::codecControls
private

Definition at line 61 of file settings_ui.hpp.

Referenced by buildCodecOptControls(), and settingsCodecSelected().

◆ deviceTabs

std::map<SettingType, DeviceOptTab> SettingsUi::deviceTabs
private

Definition at line 64 of file settings_ui.hpp.

Referenced by addDeviceTabs(), and settingsDeviceSelected().

◆ displayControls

std::vector<std::unique_ptr<WidgetUi> > SettingsUi::displayControls
private

Definition at line 62 of file settings_ui.hpp.

◆ mainWin

Ui::UltragridWindow* SettingsUi::mainWin = nullptr
private

Definition at line 55 of file settings_ui.hpp.

Referenced by addCallbacks(), and initMainWin().

◆ settings

Settings* SettingsUi::settings = nullptr
private

◆ settingsWin

Ui::Settings* SettingsUi::settingsWin = nullptr
private

◆ uiControls

std::vector<std::unique_ptr<WidgetUi> > SettingsUi::uiControls
private

Definition at line 60 of file settings_ui.hpp.

Referenced by addControl(), and refreshAll().


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