Rev 53 | Rev 71 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#include "SMPreferenceDialog.h"
#include "ui_SMPreferenceDialog.h"
#include "OpenGLContext.h"
#include "Camera.h"
#include "Algorithm.h"
using namespace std;
SMPreferenceDialog::SMPreferenceDialog(QWidget *parent) : QDialog(parent), ui(new Ui::SMPreferenceDialog) {
ui->setupUi(this);
// Query projectors
vector<ScreenInfo> screenList = OpenGLContext::GetScreenInfo();
for(unsigned int i=0; i<screenList.size(); i++){
QString screenString = QString("Screen %1: %2x%3").arg(i).arg(screenList[i].resX).arg(screenList[i].resY);
ui->projectorComboBox->addItem(screenString, i);
}
// Add LC3000 option
#ifdef WITH_LC3000API
ui->projectorComboBox->addItem("LC3000 API", -2);
#endif
// Add LC4500 option
#ifdef WITH_LC4500API
ui->projectorComboBox->addItem("LC4500 API", -3);
#endif
// Query cameras
vector< vector<CameraInfo> > interfaceCameraList = Camera::GetInterfaceCameraList();
for(unsigned int i=0; i<interfaceCameraList.size(); i++){
vector<CameraInfo> cameraList = interfaceCameraList[i];
for(unsigned int j=0; j<cameraList.size(); j++){
QString cameraString = QString("%1: %2 # %3").arg(cameraList[j].vendor.c_str()).arg(cameraList[j].model.c_str()).arg(cameraList[j].serialNumber);
ui->camera0ComboBox->addItem(cameraString, QPoint(i, j));
ui->camera1ComboBox->addItem(cameraString, QPoint(i, j));
}
}
// List pattern modes
ui->patternModeComboBox->addItem("Gray Coding", "CodecGrayCode");
ui->patternModeComboBox->addItem("2x3 Pattern Phase Shift", "CodecPhaseShift2x3");
// Set all elements to current application settings
unsigned int patternModeIndex = ui->patternModeComboBox->findData(settings.value("pattern/mode"));
ui->patternModeComboBox->setCurrentIndex(patternModeIndex);
CodingDir codingDir = (CodingDir)settings.value("pattern/direction", CodingDirHorizontal).toInt();
ui->patternHorizontalCheckBox->setChecked(codingDir & CodingDirHorizontal);
ui->patternVerticalCheckBox->setChecked(codingDir & CodingDirVertical);
int projectorIndex = ui->projectorComboBox->findData(settings.value("projector/screenNumber"));
ui->projectorComboBox->setCurrentIndex(projectorIndex);
ui->diamondPatternCheckBox->setChecked(settings.value("projector/diamondPattern").toBool());
QPoint camera0InterfaceSetting = QPoint(settings.value("camera0/interfaceNumber").toInt(), settings.value("camera0/cameraNumber").toInt());
unsigned int camera0Index = ui->camera0ComboBox->findData(camera0InterfaceSetting);
ui->camera0ComboBox->setCurrentIndex(camera0Index);
QPoint camera1InterfaceSetting = QPoint(settings.value("camera1/interfaceNumber").toInt(), settings.value("camera1/cameraNumber").toInt());
unsigned int camera1Index = ui->camera1ComboBox->findData(camera1InterfaceSetting);
ui->camera1ComboBox->setCurrentIndex(camera1Index);
float shutter = settings.value("camera/shutter", 16.666).toFloat();
ui->shutterDoubleSpinBox->setValue(shutter);
QString triggerMode = settings.value("trigger/mode","software").toString();
if(triggerMode == "hardware"){
ui->triggerHardwareRadioButton->setChecked(true);
on_triggerHardwareRadioButton_clicked();
} else {
ui->triggerSoftwareRadioButton->setChecked(true);
on_triggerSoftwareRadioButton_clicked();
}
unsigned int shift = settings.value("trigger/shift",0).toInt();
ui->shiftSpinBox->setValue(shift);
unsigned int delay = settings.value("trigger/delay",120).toInt();
ui->delaySpinBox->setValue(delay);
}
SMPreferenceDialog::~SMPreferenceDialog(){
delete ui;
}
void SMPreferenceDialog::on_buttonBox_accepted(){
// Save settings
// Pattern mode
QString patternMode = ui->patternModeComboBox->itemData(ui->patternModeComboBox->currentIndex()).toString();
settings.setValue("pattern/mode", patternMode);
// Pattern direction
bool patternHorizontal = ui->patternHorizontalCheckBox->isChecked();
bool patternVertical = ui->patternVerticalCheckBox->isChecked();
CodingDir dir = CodingDirNone;
if(patternHorizontal && patternVertical)
dir = CodingDirBoth;
else if(patternHorizontal)
dir = CodingDirHorizontal;
else if(patternVertical)
dir = CodingDirVertical;
settings.setValue("pattern/direction", dir);
// Projector
int proj = ui->projectorComboBox->itemData(ui->projectorComboBox->currentIndex()).toInt();
settings.setValue("projector/screenNumber", proj);
bool diamondPattern = ui->diamondPatternCheckBox->isChecked();
settings.setValue("projector/diamondPattern", diamondPattern);
vector<ScreenInfo> screenList = OpenGLContext::GetScreenInfo();
settings.setValue("projector/resX", screenList[proj].resX);
settings.setValue("projector/resY", screenList[proj].resY);
//bool verticalBaseline = ui->verticalBaselineCheckbox->isChecked();
//settings.setValue("projector/verticalBaseline", verticalBaseline);
// Cameras
QPoint cam0 = ui->camera0ComboBox->itemData(ui->camera0ComboBox->currentIndex()).toPoint();
settings.setValue("camera0/interfaceNumber", cam0.x());
settings.setValue("camera0/cameraNumber", cam0.y());
QPoint cam1 = ui->camera1ComboBox->itemData(ui->camera1ComboBox->currentIndex()).toPoint();
settings.setValue("camera1/interfaceNumber", cam1.x());
settings.setValue("camera1/cameraNumber", cam1.y());
float shutter = ui->shutterDoubleSpinBox->value();
settings.setValue("camera/shutter", shutter);
// Trigger mode
if(ui->triggerHardwareRadioButton->isChecked())
settings.setValue("trigger/mode", "hardware");
else
settings.setValue("trigger/mode", "software");
unsigned int shift = ui->shiftSpinBox->value();
settings.setValue("trigger/shift", shift);
unsigned int delay = ui->delaySpinBox->value();
settings.setValue("trigger/delay", delay);
}
void SMPreferenceDialog::on_triggerHardwareRadioButton_clicked(){
ui->shiftLabel->setEnabled(true);
ui->shiftSpinBox->setEnabled(true);
ui->delayLabel->setEnabled(false);
ui->delaySpinBox->setEnabled(false);
ui->delayMsLabel->setEnabled(false);
}
void SMPreferenceDialog::on_triggerSoftwareRadioButton_clicked(){
ui->shiftLabel->setEnabled(false);
ui->shiftSpinBox->setEnabled(false);
ui->delayLabel->setEnabled(true);
ui->delaySpinBox->setEnabled(true);
ui->delayMsLabel->setEnabled(true);
}
void SMPreferenceDialog::on_patternHorizontalCheckBox_clicked(){
if(!ui->patternHorizontalCheckBox->isChecked())
ui->patternVerticalCheckBox->setChecked(true);
}
void SMPreferenceDialog::on_patternVerticalCheckBox_clicked(){
if(!ui->patternVerticalCheckBox->isChecked())
ui->patternHorizontalCheckBox->setChecked(true);
}