#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; }