-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcamerasettings.cpp
More file actions
118 lines (99 loc) · 3.88 KB
/
Copy pathcamerasettings.cpp
File metadata and controls
118 lines (99 loc) · 3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include "camerasettings.h"
#include "qabstractbutton.h"
#include "qcheckbox.h"
#include "qcombobox.h"
#include "qglobal.h"
#include "qlabel.h"
#include "qnamespace.h"
#include "qobjectdefs.h"
#include "qslider.h"
#include "ui_camerasettings.h"
CameraSettings::CameraSettings(QDialog *parent)
: QDialog{parent}, ui(new Ui::CameraSettings) {
ui->setupUi(this);
connect(ui->buttonBox->buttons()[0], &QAbstractButton::clicked, this,
[this] { emit updateCameraSettings(settings); });
connect(ui->buttonBox->buttons()[2], &QAbstractButton::clicked, this,
[this] { emit updateCameraSettings(settings); });
connect(ui->servoSlider, &QSlider::sliderMoved, this, [this](int pos) {
ui->servoPositionLabel->setText(QString::number(pos));
emit updateServo(pos);
});
}
CameraSettings::~CameraSettings() { delete ui; }
void CameraSettings::recieveCameraSettings(QMap<QString, Setting> map) {
for (QMetaObject::Connection conn : conns)
disconnect(conn);
for (QSlider *slider : sliders)
delete slider;
for (QComboBox *combobox : comboboxes)
delete combobox;
for (QCheckBox *checkbox : checkboxes)
delete checkbox;
for (QLabel *label : labels)
delete label;
for (QLabel *label : valueLabels)
delete label;
for (QString k : map.keys()) {
if (map[k].menu.isEmpty()) {
QSlider *slider = new QSlider(Qt::Horizontal);
slider->setMaximum(map[k].maxValue);
slider->setMinimum(map[k].minValue);
slider->setSliderPosition(map[k].currentValue);
slider->setSingleStep(1);
slider->setMinimumWidth(70);
sliders.insert(k, slider);
conns.append(connect(slider, &QSlider::sliderMoved, this,
[this, k](int val) {
updateSetting(k, val);
updateValueLabel(k, val);
}));
} else {
QComboBox *combobox = new QComboBox(this);
for (QString menuItem : map[k].menu.keys()) {
combobox->addItem(menuItem, map[k].menu[menuItem]);
}
comboboxes.insert(k, combobox);
conns.append(connect(
combobox, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, [this, k, combobox](int val) {
updateSetting(k, combobox->itemData(val).toInt());
}));
}
}
int row = 0;
for (QString name : sliders.keys()) {
QLabel *label = new QLabel(name);
QLabel *valueLabel = new QLabel("0");
valueLabel->setMinimumWidth(50);
labels.insert(name, label);
valueLabels.insert(name, valueLabel);
ui->gridLayoutInner->addWidget(label, row, 0);
ui->gridLayoutInner->addWidget(sliders[name], row, 2);
ui->gridLayoutInner->addWidget(valueLabel, row, 1);
updateValueLabel(name, map[name].currentValue);
row++;
}
for (QString name : comboboxes.keys()) {
QLabel *label = new QLabel(name);
labels.insert(name, label);
ui->gridLayoutInner->addWidget(label, row, 0);
ui->gridLayoutInner->addWidget(comboboxes[name], row, 2);
row++;
}
for (QString name : checkboxes.keys()) {
QLabel *label = new QLabel(name);
labels.insert(name, label);
ui->gridLayoutInner->addWidget(label, row, 0);
ui->gridLayoutInner->addWidget(valueLabels[name], row, 1);
ui->gridLayoutInner->addWidget(comboboxes[name], row, 2);
row++;
updateValueLabel(name, map[name].currentValue);
}
}
void CameraSettings::updateSetting(QString name, int value) {
settings[name].currentValue = value;
}
void CameraSettings::updateValueLabel(QString name, int value) {
valueLabels[name]->setText(QString::number(value));
}