PylonRecorder/camconfig.cpp

141 lines
4.4 KiB
C++

#include "camconfig.h"
#include "mylogger.h"
#include "util.h"
CamConfigurator::CamConfigurator(Pylon::DeviceInfoList &deviceList, QWidget *parent) :
deviceList(deviceList), QDialog(parent), preview(nullptr) {
qDebug() << "CamConfig constructor";
mode_combo = new QComboBox(this);
mode_combo->addItem("camera mode");
mode_combo->addItem("single camera");
if (deviceList.size() > 1){
mode_combo->addItem("stereo camera");
}
connect(mode_combo, SIGNAL(currentIndexChanged(int)), SLOT(modeChanged(int)));
device_combo = new QComboBox(this);
for (auto d : deviceList) {
device_combo->addItem(QString(d.GetFullName().c_str()));
}
connect(device_combo, SIGNAL(currentIndexChanged(int)), SLOT(primaryDeviceChanged(int)));
// orientation_combo = new QComboBox(this);
// orientation_combo->addItem("Vertical");
// orientation_combo->addItem("Horizontal");
// orientation_combo->setEnabled(false);
// connect(orientation_combo, SIGNAL(currentIndexChanged(int)), SLOT(orientationChanged(int)));
QWidget *header = new QWidget(this);
QGridLayout *grid = new QGridLayout(header);
grid->addWidget(new QLabel("Recording mode:", this), 0, 0);
grid->addWidget(mode_combo, 0, 1);
grid->addWidget(new QLabel("Primary device:", this), 1, 0);
grid->addWidget(device_combo, 1, 1);
header->setLayout(grid);
QVBoxLayout *vbox = new QVBoxLayout(this);
vbox->addWidget(header);
stack = new QStackedWidget(this);
stack->addWidget(new QLabel("CameraSetup, select mode!"));
stack->setCurrentIndex(0);
vbox->addWidget(stack);
buttonbox = new QDialogButtonBox(QDialogButtonBox::Ok
| QDialogButtonBox::Cancel);
connect(buttonbox, &QDialogButtonBox::accepted, this, &QDialog::accept);
connect(buttonbox, &QDialogButtonBox::rejected, this, &QDialog::reject);
vbox->addWidget(buttonbox);
qDebug() << "CamConfig constructor done!";
}
CameraSetup* CamConfigurator::singleCameraView() {
qInfo() << "Create Single Camera configuration!";
if (preview != nullptr) {
delete preview;
preview = nullptr;
}
preview = new SingleCamera(this);
return preview;
}
CameraSetup* CamConfigurator::stereoCameraView() {
qInfo() << "Create stereoCameraConfiguration";
if (preview != nullptr) {
delete preview;
preview = nullptr;
}
preview = new DualCamera(this);
return preview;
}
void CamConfigurator::modeChanged(int idx) {
qDebug() << "Mode changed!";
stack->setCurrentIndex(0);
if (stack->count() > 1 && preview != nullptr) {
qDebug() << "removing previous widget from stack";
stack->removeWidget(preview);
delete preview;
preview == nullptr;
}
if (idx == 1) {
qDebug() << "Mode changed to single camera mode";
qDebug() << "add new single camera preview";
preview = singleCameraView();
stack->addWidget(preview);
stack->setCurrentIndex(1);
QString device = device_combo->currentText();
preview->setPrimaryCamera(device);
mode_combo->setEnabled(false);
} else if (idx == 2) {
qDebug() << "Mode changed to dual camera mode";
preview = stereoCameraView();
stack->addWidget(preview);
stack->setCurrentIndex(1);
QString device1 = device_combo->currentText();
preview->setPrimaryCamera(device1);
int i = device_combo->currentIndex();
if (i > 1) {
i = 1;
}
QString device2 = device_combo->itemText(1 - i);
preview->setSecondaryCamera(device2);
mode_combo->setEnabled(false);
} else {
qDebug() << "Mode changed mode selection";
stack->setCurrentIndex(0);
}
}
// void CamConfigurator::orientationChanged(int idx) {
// }
void CamConfigurator::primaryDeviceChanged(int idx) {
qDebug() << "Primary device changed!";
if (mode_combo->currentText() == "single camera") { // single camera setting
QString devicename = device_combo->currentText();
preview->setPrimaryCamera(devicename);
} else if (mode_combo->currentText() == "stereo camera") { // stereo camera setting
preview->switchArrangement();
}
}
CameraLayout CamConfigurator::layout(){
CameraLayout l;
qDebug() << "Request layout";
return preview->cameraLayout();
}
CamConfigurator::~CamConfigurator()
{
qDebug() << "CamConfig Destructor";
delete preview;
}