SXRMB2DMapScanConfiguration::SXRMB2DMapScanConfiguration(QObject *parent) : AMStepScanConfiguration(parent), SXRMBScanConfiguration() { timeOffset_ = 0.8; setName("2D Map"); setUserScanName("2D Map"); setEnergy(3000.0); exportAsAscii_ = false; AMScanAxisRegion *region = new AMScanAxisRegion; AMScanAxis *axis = new AMScanAxis(AMScanAxis::StepAxis, region); appendScanAxis(axis); region = new AMScanAxisRegion; axis = new AMScanAxis(AMScanAxis::StepAxis, region); appendScanAxis(axis); connect(scanAxisAt(0)->regionAt(0), SIGNAL(regionStartChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(0)->regionAt(0), SIGNAL(regionStepChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(0)->regionAt(0), SIGNAL(regionEndChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(0)->regionAt(0), SIGNAL(regionTimeChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(1)->regionAt(0), SIGNAL(regionStartChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(1)->regionAt(0), SIGNAL(regionStepChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(1)->regionAt(0), SIGNAL(regionEndChanged(AMNumber)), this, SLOT(computeTotalTime())); }
VESPERS2DScanConfiguration::VESPERS2DScanConfiguration(QObject *parent) : AMStepScanConfiguration(parent), VESPERSScanConfiguration() { setName("2D Map"); setUserScanName("2D Map"); dbObject_->setParent(this); setIncomingChoice(VESPERS::Imini); setFluorescenceDetector(VESPERS::SingleElement); setMotor(VESPERS::Motors(VESPERS::H | VESPERS::V)); setCCDDetector(VESPERS::NoCCD); setCCDFileName(""); setExportAsAscii(true); setExportSpectraSources(true); setExportSpectraInRows(true); setCloseFastShutter(true); setReturnToOriginalPosition(false); AMScanAxisRegion *region = new AMScanAxisRegion; AMScanAxis *axis = new AMScanAxis(AMScanAxis::StepAxis, region); appendScanAxis(axis); region = new AMScanAxisRegion; axis = new AMScanAxis(AMScanAxis::StepAxis, region); appendScanAxis(axis); connect(scanAxisAt(0)->regionAt(0), SIGNAL(regionStartChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(0)->regionAt(0), SIGNAL(regionStepChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(0)->regionAt(0), SIGNAL(regionEndChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(0)->regionAt(0), SIGNAL(regionTimeChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(1)->regionAt(0), SIGNAL(regionStartChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(1)->regionAt(0), SIGNAL(regionStepChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(1)->regionAt(0), SIGNAL(regionEndChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(dbObject_, SIGNAL(ccdDetectorChanged(int)), this, SLOT(computeTotalTime())); }
void AMGenericStepScanConfigurationView::onScanAxisAdded(AMScanAxis *axis) { if (configuration_->scanAxes().size() == 1){ connect(axisStart1_, SIGNAL(editingFinished()), this, SLOT(onStart1Changed())); connect(axisStep1_, SIGNAL(editingFinished()), this, SLOT(onStep1Changed())); connect(axisEnd1_, SIGNAL(editingFinished()), this, SLOT(onEnd1Changed())); connect(dwellTime_, SIGNAL(editingFinished()), this, SLOT(onDwellTimeChanged())); connect(axis->regionAt(0), SIGNAL(regionStartChanged(AMNumber)), this, SLOT(setStart1(AMNumber))); connect(axis->regionAt(0), SIGNAL(regionStepChanged(AMNumber)), this, SLOT(setStep1(AMNumber))); connect(axis->regionAt(0), SIGNAL(regionEndChanged(AMNumber)), this, SLOT(setEnd1(AMNumber))); connect(axis->regionAt(0), SIGNAL(regionTimeChanged(AMNumber)), this, SLOT(setDwellTime(AMNumber))); } else if (configuration_->scanAxes().size() == 2){ connect(axisStart2_, SIGNAL(editingFinished()), this, SLOT(onStart2Changed())); connect(axisStep2_, SIGNAL(editingFinished()), this, SLOT(onStep2Changed())); connect(axisEnd2_, SIGNAL(editingFinished()), this, SLOT(onEnd2Changed())); connect(axis->regionAt(0), SIGNAL(regionStartChanged(AMNumber)), this, SLOT(setStart2(AMNumber))); connect(axis->regionAt(0), SIGNAL(regionStepChanged(AMNumber)), this, SLOT(setStep2(AMNumber))); connect(axis->regionAt(0), SIGNAL(regionEndChanged(AMNumber)), this, SLOT(setEnd2(AMNumber))); } }
SXRMB2DMapScanConfiguration::SXRMB2DMapScanConfiguration(const SXRMB2DMapScanConfiguration &original) : AMStepScanConfiguration(original), SXRMBScanConfiguration(original) { setName(original.name()); setUserScanName(original.userScanName()); exportAsAscii_ = original.exportAsAscii(); connect(scanAxisAt(0)->regionAt(0), SIGNAL(regionStartChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(0)->regionAt(0), SIGNAL(regionStepChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(0)->regionAt(0), SIGNAL(regionEndChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(0)->regionAt(0), SIGNAL(regionTimeChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(1)->regionAt(0), SIGNAL(regionStartChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(1)->regionAt(0), SIGNAL(regionStepChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(1)->regionAt(0), SIGNAL(regionEndChanged(AMNumber)), this, SLOT(computeTotalTime())); }
void AMScanAxisRegion::setRegionStart(const AMNumber ®ionStart) { if (double(regionStart_) != double(regionStart)){ emit regionStartChanged(regionStart_ = regionStart); setModified(true); } }
VESPERS2DScanConfiguration::VESPERS2DScanConfiguration(const VESPERS2DScanConfiguration &original) : AMStepScanConfiguration(original), VESPERSScanConfiguration(original) { setName(original.name()); setUserScanName(original.name()); dbObject_->setParent(this); setExportAsAscii(original.exportAsAscii()); setExportSpectraSources(original.exportSpectraSources()); setExportSpectraInRows(original.exportSpectraInRows()); setCloseFastShutter(original.closeFastShutter()); setReturnToOriginalPosition(original.returnToOriginalPosition()); computeTotalTime(); connect(scanAxisAt(0)->regionAt(0), SIGNAL(regionStartChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(0)->regionAt(0), SIGNAL(regionStepChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(0)->regionAt(0), SIGNAL(regionEndChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(0)->regionAt(0), SIGNAL(regionTimeChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(1)->regionAt(0), SIGNAL(regionStartChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(1)->regionAt(0), SIGNAL(regionStepChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(scanAxisAt(1)->regionAt(0), SIGNAL(regionEndChanged(AMNumber)), this, SLOT(computeTotalTime())); connect(dbObject_, SIGNAL(ccdDetectorChanged(int)), this, SLOT(computeTotalTime())); }
VESPERS2DScanConfigurationView::VESPERS2DScanConfigurationView(VESPERS2DScanConfiguration *config, QWidget *parent) : VESPERSScanConfigurationView(parent) { configuration_ = config; AMTopFrame *frame = new AMTopFrame("VESPERS 2D Map Configuration"); // Setup the group box for setting the start and end points. QGroupBox *positionsBox = new QGroupBox("Positions"); hStart_ = createPositionDoubleSpinBox("H: ", " mm", configuration_->scanAxisAt(0)->regionAt(0)->regionStart(), 3); connect(hStart_, SIGNAL(editingFinished()), this, SLOT(onXStartChanged())); connect(configuration_->scanAxisAt(0)->regionAt(0), SIGNAL(regionStartChanged(AMNumber)), this, SLOT(setXAxisStart(AMNumber))); vStart_ = createPositionDoubleSpinBox("V: ", " mm", configuration_->scanAxisAt(1)->regionAt(0)->regionStart(), 3); connect(vStart_, SIGNAL(editingFinished()), this, SLOT(onYStartChanged())); connect(configuration_->scanAxisAt(1)->regionAt(0), SIGNAL(regionStartChanged(AMNumber)), this, SLOT(setYAxisStart(AMNumber))); QPushButton *startUseCurrentButton = new QPushButton("Use Current"); connect(startUseCurrentButton, SIGNAL(clicked()), this, SLOT(onSetStartPosition())); QHBoxLayout *startPointLayout = new QHBoxLayout; startPointLayout->addWidget(new QLabel("Start:")); startPointLayout->addWidget(hStart_); startPointLayout->addWidget(vStart_); startPointLayout->addWidget(startUseCurrentButton); hEnd_ = createPositionDoubleSpinBox("H: ", " mm", configuration_->scanAxisAt(0)->regionAt(0)->regionEnd(), 3); connect(hEnd_, SIGNAL(editingFinished()), this, SLOT(onXEndChanged())); connect(configuration_->scanAxisAt(0)->regionAt(0), SIGNAL(regionEndChanged(AMNumber)), this, SLOT(setXAxisEnd(AMNumber))); vEnd_ = createPositionDoubleSpinBox("V: ", " mm", configuration_->scanAxisAt(1)->regionAt(0)->regionEnd(), 3); connect(vEnd_, SIGNAL(editingFinished()), this, SLOT(onYEndChanged())); connect(configuration_->scanAxisAt(1)->regionAt(0), SIGNAL(regionEndChanged(AMNumber)), this, SLOT(setYAxisEnd(AMNumber))); QPushButton *endUseCurrentButton = new QPushButton("Use Current"); connect(endUseCurrentButton, SIGNAL(clicked()), this, SLOT(onSetEndPosition())); QHBoxLayout *endPointLayout = new QHBoxLayout; endPointLayout->addWidget(new QLabel("End:")); endPointLayout->addWidget(hEnd_); endPointLayout->addWidget(vEnd_); endPointLayout->addWidget(endUseCurrentButton); hStep_ = createPositionDoubleSpinBox("H: ", QString(" %1").arg(QString::fromUtf8("µm")), double(configuration_->scanAxisAt(0)->regionAt(0)->regionStep())*1000, 1); // xStep needs to be in mm. connect(hStep_, SIGNAL(editingFinished()), this, SLOT(onXStepChanged())); connect(configuration_->scanAxisAt(0)->regionAt(0), SIGNAL(regionStepChanged(AMNumber)), this, SLOT(setXAxisStep(AMNumber))); vStep_ = createPositionDoubleSpinBox("V: ", QString(" %1").arg(QString::fromUtf8("µm")), double(configuration_->scanAxisAt(1)->regionAt(0)->regionStep())*1000, 1); // yStep needs to be in mm. connect(vStep_, SIGNAL(editingFinished()), this, SLOT(onYStepChanged())); connect(configuration_->scanAxisAt(1)->regionAt(0), SIGNAL(regionStepChanged(AMNumber)), this, SLOT(setYAxisStep(AMNumber))); QHBoxLayout *stepSizeLayout = new QHBoxLayout; stepSizeLayout->addWidget(new QLabel("Step Size:")); stepSizeLayout->addWidget(hStep_); stepSizeLayout->addWidget(vStep_); stepSizeLayout->addStretch(); normalPosition_ = createPositionDoubleSpinBox("N: ", " mm", configuration_->normalPosition(), 3); connect(normalPosition_, SIGNAL(editingFinished()), this, SLOT(onNormalPositionChanged())); connect(configuration_->dbObject(), SIGNAL(normalPositionChanged(double)), normalPosition_, SLOT(setValue(double))); QPushButton *updateNormalPosition = new QPushButton("Set Normal"); connect(updateNormalPosition, SIGNAL(clicked()), this, SLOT(onSetNormalPosition())); QHBoxLayout *normalLayout = new QHBoxLayout; normalLayout->addWidget(new QLabel("Focus Position:")); normalLayout->addWidget(normalPosition_); normalLayout->addWidget(updateNormalPosition); mapInfo_ = new QLabel; updateMapInfo(); QVBoxLayout *positionsLayout = new QVBoxLayout; positionsLayout->addLayout(startPointLayout); positionsLayout->addLayout(endPointLayout); positionsLayout->addLayout(stepSizeLayout); positionsLayout->addLayout(normalLayout); positionsLayout->addWidget(mapInfo_); positionsBox->setLayout(positionsLayout); // Dwell time. dwellTime_ = createDwellTimeSpinBox(configuration_->scanAxisAt(0)->regionAt(0)->regionTime()); connect(dwellTime_, SIGNAL(editingFinished()), this, SLOT(onDwellTimeChanged())); connect(configuration_->scanAxisAt(0)->regionAt(0), SIGNAL(regionTimeChanged(AMNumber)), this, SLOT(setDwellTime(AMNumber))); connect(configuration_->scanAxisAt(0)->regionAt(0), SIGNAL(regionTimeChanged(AMNumber)), configuration_->scanAxisAt(1)->regionAt(0), SLOT(setRegionTime(AMNumber))); QHBoxLayout *timeLayout = new QHBoxLayout; timeLayout->addWidget(new QLabel("Dwell Time:")); timeLayout->addWidget(dwellTime_); // The estimated scan time. estimatedTime_ = new QLabel; connect(configuration_, SIGNAL(totalTimeChanged(double)), this, SLOT(onEstimatedTimeChanged())); onEstimatedTimeChanged(); QVBoxLayout *timeBoxLayout = new QVBoxLayout; timeBoxLayout->addLayout(timeLayout); timeBoxLayout->addWidget(estimatedTime_); QGroupBox *timeGroupBox = new QGroupBox("Time"); timeGroupBox->setLayout(timeBoxLayout); // CCD label. ccdText_ = new QLabel; ccdHelpText_ = new QLabel; ccdTextBox_ = new QGroupBox("CCD Detector Info"); QVBoxLayout *ccdTextLayout = new QVBoxLayout; ccdTextLayout->addWidget(ccdText_); ccdTextLayout->addWidget(ccdHelpText_); ccdTextBox_->setLayout(ccdTextLayout); ccdTextBox_->setVisible(configuration_->ccdDetector() != VESPERS::NoCCD); // Using the CCD. ccdComboBox_ = createCCDComboBox(); connect(ccdComboBox_, SIGNAL(currentIndexChanged(int)), this, SLOT(onCCDDetectorChanged(int))); connect(configuration_->dbObject(), SIGNAL(ccdDetectorChanged(int)), this, SLOT(updateCCDDetectorComboBox(int))); // The fluorescence detector setup fluorescenceDetectorComboBox_ = createFluorescenceComboBox(); connect(fluorescenceDetectorComboBox_, SIGNAL(currentIndexChanged(int)), this, SLOT(onFluorescenceChoiceChanged(int))); connect(configuration_->dbObject(), SIGNAL(fluorescenceDetectorChanged(int)), this, SLOT(updateFluorescenceDetectorComboBox(int))); // Ion chamber selection i0ComboBox_ = createIonChamberComboBox(); connect(i0ComboBox_, SIGNAL(currentIndexChanged(int)), this, SLOT(onI0Clicked(int))); connect(configuration_->dbObject(), SIGNAL(incomingChoiceChanged(int)), this, SLOT(updateI0ComboBox(int))); // Motor selection. motorSelectionComboBox_ = createMotorSelectionComboBox( QStringList() << "H & V" << "X & Z" << "Atto H & V" << "Atto X & Z" << "Big Beam X & Z", QList<int>() << (VESPERS::H | VESPERS::V) << (VESPERS::X | VESPERS::Z) << (VESPERS::AttoH | VESPERS::AttoV) << (VESPERS::AttoX | VESPERS::AttoZ) << (VESPERS::BigBeamX | VESPERS::BigBeamZ)); connect(motorSelectionComboBox_, SIGNAL(currentIndexChanged(int)), this, SLOT(onMotorChanged(int))); connect(configuration_->dbObject(), SIGNAL(motorChanged(int)), this, SLOT(updateMotorSelectionComboBox(int))); // Scan name selection scanName_ = createScanNameView(configuration_->name()); connect(scanName_, SIGNAL(editingFinished()), this, SLOT(onScanNameEdited())); connect(configuration_, SIGNAL(nameChanged(QString)), scanName_, SLOT(setText(QString))); // Only connecting this signal because it is the only CCD available currently. It would need some logic for switching which CCD it was actually connected to. connect(VESPERSBeamline::vespers()->vespersPilatusAreaDetector(), SIGNAL(ccdPathChanged(QString)), this, SLOT(onScanNameEdited())); onScanNameEdited(); QFormLayout *scanNameLayout = new QFormLayout; scanNameLayout->addRow("Scan Name:", scanName_); QGroupBox *scanNameGroupBox = new QGroupBox("Scan Name"); scanNameGroupBox->setLayout(scanNameLayout); // Label showing where the data will be saved. QLabel *exportPath = addExportPathLabel(); QGroupBox *timeOffsetBox = addTimeOffsetLabel(configuration_->timeOffset()); connect(timeOffset_, SIGNAL(valueChanged(double)), this, SLOT(setTimeOffset(double))); // Auto-export option. QGroupBox *autoExportGroupBox = addExporterOptionsView(QStringList() << "Ascii" << "SMAK", configuration_->exportSpectraSources(), configuration_->exportSpectraInRows()); connect(autoExportButtonGroup_, SIGNAL(buttonClicked(int)), this, SLOT(updateAutoExporter(int))); connect(autoExportSpectra_, SIGNAL(toggled(bool)), configuration_, SLOT(setExportSpectraSources(bool))); connect(autoExportSpectra_, SIGNAL(toggled(bool)), exportSpectraInRows_, SLOT(setEnabled(bool))); connect(exportSpectraInRows_, SIGNAL(toggled(bool)), this, SLOT(updateExportSpectraInRows(bool))); autoExportButtonGroup_->button(configuration_->exportAsAscii() ? 0 : 1)->click(); ccdComboBox_->setCurrentIndex(ccdComboBox_->findData(int(configuration_->ccdDetector()))); i0ComboBox_->setCurrentIndex((int)configuration_->incomingChoice()); fluorescenceDetectorComboBox_->setCurrentIndex((int)configuration_->fluorescenceDetector()); motorSelectionComboBox_->setCurrentIndex(motorSelectionComboBox_->findData(int(configuration_->motor()))); disableStandardFluorescenceOptions(); disableStandardXRDOptions(); disableStandardI0Options(); QFormLayout *detectorLayout = new QFormLayout; detectorLayout->addRow("XRF:", fluorescenceDetectorComboBox_); detectorLayout->addRow("XRD:", ccdComboBox_); detectorLayout->addRow("I0:", i0ComboBox_); detectorLayout->addRow("Stage:", motorSelectionComboBox_); QGroupBox *detectorGroupBox = new QGroupBox("Detectors"); detectorGroupBox->setLayout(detectorLayout); QGroupBox *afterScanBox = createAfterScanOptionsBox(configuration_->closeFastShutter(), configuration_->returnToOriginalPosition(), configuration_->cleanupScaler()); connect(closeFastShutterCheckBox_, SIGNAL(toggled(bool)), this, SLOT(setCloseFastShutter(bool))); connect(goToPositionCheckBox_, SIGNAL(toggled(bool)), this, SLOT(setReturnToOriginalPosition(bool))); connect(cleanupScalerCheckBox_, SIGNAL(toggled(bool)), this, SLOT(setCleanupScaler(bool))); // Setting up the layout. QGridLayout *contentsLayout = new QGridLayout; contentsLayout->addWidget(positionsBox, 0, 0, 2, 3); contentsLayout->addWidget(timeGroupBox, 2, 0, 1, 3); contentsLayout->addWidget(scanNameGroupBox, 3, 0, 1, 3); contentsLayout->addWidget(ccdTextBox_, 4, 0, 1, 3); contentsLayout->addWidget(timeOffsetBox, 5, 0, 1, 3); contentsLayout->addWidget(detectorGroupBox, 0, 3, 2, 1); contentsLayout->addWidget(autoExportGroupBox, 2, 3, 2, 1); contentsLayout->addWidget(afterScanBox, 4, 3, 1, 1); QHBoxLayout *squeezeContents = new QHBoxLayout; squeezeContents->addStretch(); squeezeContents->addLayout(contentsLayout); squeezeContents->addStretch(); QVBoxLayout *configViewLayout = new QVBoxLayout; configViewLayout->addWidget(frame); configViewLayout->addStretch(); configViewLayout->addLayout(squeezeContents); configViewLayout->addStretch(); configViewLayout->addWidget(exportPath, 0, Qt::AlignCenter); configViewLayout->addSpacing(30); setLayout(configViewLayout); }
IDEAS2DScanConfigurationView::IDEAS2DScanConfigurationView(IDEAS2DScanConfiguration *configuration, QWidget *parent) : AMScanConfigurationView(parent) { configuration_ = configuration; // 1st row: set the start position hStart_ = createPositionDoubleSpinBox("H: ", " mm", configuration_->scanAxisAt(0)->regionAt(0)->regionStart(), 3); connect(hStart_, SIGNAL(editingFinished()), this, SLOT(onXStartChanged())); connect(configuration_->scanAxisAt(0)->regionAt(0), SIGNAL(regionStartChanged(AMNumber)), this, SLOT(setXAxisStart(AMNumber))); vStart_ = createPositionDoubleSpinBox("V: ", " mm", configuration_->scanAxisAt(1)->regionAt(0)->regionStart(), 3); connect(vStart_, SIGNAL(editingFinished()), this, SLOT(onYStartChanged())); connect(configuration_->scanAxisAt(1)->regionAt(0), SIGNAL(regionStartChanged(AMNumber)), this, SLOT(setYAxisStart(AMNumber))); QPushButton *startUseCurrentButton = new QPushButton("Use Current"); connect(startUseCurrentButton, SIGNAL(clicked()), this, SLOT(onSetStartPosition())); // 2nd row: set the end position hEnd_ = createPositionDoubleSpinBox("H: ", " mm", configuration_->scanAxisAt(0)->regionAt(0)->regionEnd(), 3); connect(hEnd_, SIGNAL(editingFinished()), this, SLOT(onXEndChanged())); connect(configuration_->scanAxisAt(0)->regionAt(0), SIGNAL(regionEndChanged(AMNumber)), this, SLOT(setXAxisEnd(AMNumber))); vEnd_ = createPositionDoubleSpinBox("V: ", " mm", configuration_->scanAxisAt(1)->regionAt(0)->regionEnd(), 3); connect(vEnd_, SIGNAL(editingFinished()), this, SLOT(onYEndChanged())); connect(configuration_->scanAxisAt(1)->regionAt(0), SIGNAL(regionEndChanged(AMNumber)), this, SLOT(setYAxisEnd(AMNumber))); QPushButton *endUseCurrentButton = new QPushButton("Use Current"); connect(endUseCurrentButton, SIGNAL(clicked()), this, SLOT(onSetEndPosition())); // 3rd row: set the step size hStep_ = createPositionDoubleSpinBox("H: ", QString(" %1").arg(QString::fromUtf8("µm")), double(configuration_->scanAxisAt(0)->regionAt(0)->regionStep())*1000, 1); // xStep needs to be in mm. hStep_->setMinimum(0); connect(hStep_, SIGNAL(editingFinished()), this, SLOT(onXStepChanged())); connect(configuration_->scanAxisAt(0)->regionAt(0), SIGNAL(regionStepChanged(AMNumber)), this, SLOT(setXAxisStep(AMNumber))); vStep_ = createPositionDoubleSpinBox("V: ", QString(" %1").arg(QString::fromUtf8("µm")), double(configuration_->scanAxisAt(1)->regionAt(0)->regionStep())*1000, 1); // yStep needs to be in mm. vStep_->setMinimum(0); connect(vStep_, SIGNAL(editingFinished()), this, SLOT(onYStepChanged())); connect(configuration_->scanAxisAt(1)->regionAt(0), SIGNAL(regionStepChanged(AMNumber)), this, SLOT(setYAxisStep(AMNumber))); // the grid layout to hold the positions QGridLayout *positionGridLayout = new QGridLayout; positionGridLayout->addWidget(new QLabel("Start:"), 0, 0, 1, 2); positionGridLayout->addWidget(hStart_, 0, 2, 1, 2); positionGridLayout->addWidget(vStart_, 0, 4, 1, 2); positionGridLayout->addWidget(startUseCurrentButton, 0, 6, 1, 2); positionGridLayout->addWidget(new QLabel("End:"), 1, 0, 1, 2); positionGridLayout->addWidget(hEnd_, 1, 2, 1, 2); positionGridLayout->addWidget(vEnd_, 1, 4, 1, 2); positionGridLayout->addWidget(endUseCurrentButton, 1, 6, 1, 2); positionGridLayout->addWidget(new QLabel("Step Size:"), 2, 0, 1, 2); positionGridLayout->addWidget(hStep_, 2, 2, 1, 2); positionGridLayout->addWidget(vStep_, 2, 4, 1, 2); // the map information mapInfo_ = new QLabel; updateMapInfo(); // Setup the group box for setting the start and end points. QVBoxLayout *positionsLayout = new QVBoxLayout; positionsLayout->addLayout(positionGridLayout); positionsLayout->addWidget(mapInfo_); QGroupBox *positionsBox = new QGroupBox("Positions"); positionsBox->setLayout(positionsLayout); // Dwell time. dwellTime_ = createDwellTimeSpinBox(configuration_->scanAxisAt(0)->regionAt(0)->regionTime()); connect(dwellTime_, SIGNAL(editingFinished()), this, SLOT(onDwellTimeChanged())); connect(configuration_->scanAxisAt(0)->regionAt(0), SIGNAL(regionTimeChanged(AMNumber)), this, SLOT(setDwellTime(AMNumber))); connect(configuration_->scanAxisAt(0)->regionAt(0), SIGNAL(regionTimeChanged(AMNumber)), configuration_->scanAxisAt(1)->regionAt(0), SLOT(setRegionTime(AMNumber))); QHBoxLayout *timeLayout = new QHBoxLayout; timeLayout->addWidget(new QLabel("Dwell Time:")); timeLayout->addWidget(dwellTime_); // The estimated scan time. estimatedTime_ = new QLabel; connect(configuration_, SIGNAL(totalTimeChanged(double)), this, SLOT(onEstimatedTimeChanged())); onEstimatedTimeChanged(); // Setup the group box for time. QVBoxLayout *timeBoxLayout = new QVBoxLayout; timeBoxLayout->addLayout(timeLayout); timeBoxLayout->addWidget(estimatedTime_); QGroupBox *timeGroupBox = new QGroupBox("Time"); timeGroupBox->setLayout(timeBoxLayout); // Scan name selection scanName_ = createScanNameView(configuration_->userScanName()); connect(scanName_, SIGNAL(editingFinished()), this, SLOT(onScanNameEdited())); connect(configuration_, SIGNAL(nameChanged(QString)), scanName_, SLOT(setText(QString))); onScanNameEdited(); QFormLayout *scanNameLayout = new QFormLayout; scanNameLayout->addRow("Scan Name:", scanName_); QGroupBox *scanNameGroupBox = new QGroupBox("Scan Information"); scanNameGroupBox->setLayout(scanNameLayout); // BL energy setting scanEnergySpinBox_ = createEnergySpinBox("eV", 0, 15000, configuration_->energy()); scanEnergySettingWarningLabel_ = new QLabel("Settings do not match beamline."); scanEnergySettingWarningLabel_->setStyleSheet("QLabel {color: red}"); setScanEnergyFromBeamlineButton_ = new QPushButton("Set From Beamline"); connect(scanEnergySpinBox_, SIGNAL(editingFinished()), this, SLOT(onScanEnergySpinBoxEditingFinished())); connect(setScanEnergyFromBeamlineButton_, SIGNAL(clicked()), this, SLOT(onSetScanEnergyFromBeamlineButtonClicked())); connect(IDEASBeamline::ideas()->monoEnergyControl(), SIGNAL(valueChanged(double)), this, SLOT(onBeamlineEnergyChanged(double))); onScanEnergySpinBoxEditingFinished(); QFormLayout *scanEnergyFL = new QFormLayout(); scanEnergyFL->addRow("Energy", scanEnergySpinBox_); QVBoxLayout *beamlineSettingsGroupBoxVL = new QVBoxLayout(); beamlineSettingsGroupBoxVL->addLayout(scanEnergyFL); beamlineSettingsGroupBoxVL->addStretch(); beamlineSettingsGroupBoxVL->addWidget(scanEnergySettingWarningLabel_); beamlineSettingsGroupBoxVL->addWidget(setScanEnergyFromBeamlineButton_); beamlineSettingsGroupBox_ = new QGroupBox("Beamline Settings"); beamlineSettingsGroupBox_->setMinimumWidth(230); beamlineSettingsGroupBox_->setLayout(beamlineSettingsGroupBoxVL); // detector setting QGroupBox *detectorSettingGroupBox = createAndLayoutDetectorSettings(configuration_); // Error label. errorLabel_ = new QLabel; QFont font = this->font(); font.setPixelSize(16); font.setBold(true); QPalette palette = this->palette(); palette.setColor(QPalette::WindowText, Qt::red); errorLabel_->setFont(font); errorLabel_->setPalette(palette); // Setting up the layout. QGridLayout *contentsLayout = new QGridLayout; contentsLayout->addWidget(positionsBox, 0, 0, 2, 4); contentsLayout->addWidget(timeGroupBox, 2, 0, 1, 4); contentsLayout->addWidget(scanNameGroupBox, 3, 0, 1, 4); contentsLayout->addWidget(beamlineSettingsGroupBox_, 0, 4, 3, 2); contentsLayout->addWidget(detectorSettingGroupBox, 3, 4, 1, 2); contentsLayout->addWidget(errorLabel_, 4, 0, 2, 4); setLayout(contentsLayout); }