void REIXSXASScanConfigurationView::setupUi()
{
	setWindowTitle("Form");

	// mono groupBox layout
	QFormLayout *monoGroupBoxFormLayout = new QFormLayout();
	monoGroupBoxFormLayout->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
	monoGroupBoxFormLayout->setLabelAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter);

	applyGratingBox_ = new QCheckBox("Grating");
	gratingBox_ = new QComboBox();
	monoGroupBoxFormLayout->setWidget(0, QFormLayout::LabelRole, applyGratingBox_);
	monoGroupBoxFormLayout->setWidget(0, QFormLayout::FieldRole, gratingBox_);

	applyMirrorBox_ = new QCheckBox("Mirror");
	mirrorBox_ = new QComboBox();
	monoGroupBoxFormLayout->setWidget(1, QFormLayout::LabelRole, applyMirrorBox_);
	monoGroupBoxFormLayout->setWidget(1, QFormLayout::FieldRole, mirrorBox_);

	applySlitWidthBox_ = new QCheckBox("Slit Width");
	slitWidthBox_ = createDoubleSpinBox(0, -500, 500, " um", 1, 5);
	monoGroupBoxFormLayout->setWidget(2, QFormLayout::LabelRole, applySlitWidthBox_);
	monoGroupBoxFormLayout->setWidget(2, QFormLayout::FieldRole, slitWidthBox_);

	monoGroupBoxFormLayout->setItem(3, QFormLayout::FieldRole, new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding));

	estimatedTimeLabel_ = new QLabel("0 s");
	monoGroupBoxFormLayout->setWidget(4, QFormLayout::LabelRole, new QLabel("Estimated time:"));
	monoGroupBoxFormLayout->setWidget(4, QFormLayout::FieldRole, estimatedTimeLabel_);

	totalPointsLabel_ = new QLabel("0");
	monoGroupBoxFormLayout->setWidget(5, QFormLayout::LabelRole, new QLabel("Total points:"));
	monoGroupBoxFormLayout->setWidget(5, QFormLayout::FieldRole, totalPointsLabel_);


	// polarization groupBox layout
	QFormLayout *polarizationGroupBoxFormLayout = new QFormLayout();

	applyPolarizationBox_ = new QCheckBox("Polarization");
	polarizationBox_ = new QComboBox();
	polarizationGroupBoxFormLayout->setWidget(0, QFormLayout::LabelRole, applyPolarizationBox_);
	polarizationGroupBoxFormLayout->setWidget(0, QFormLayout::FieldRole, polarizationBox_);

	polarizationAngleBox_ = createDoubleSpinBox(0, -180, 180, " deg", 1, 10);
	polarizationGroupBoxFormLayout->setWidget(1, QFormLayout::LabelRole, new QLabel("Angle"));
	polarizationGroupBoxFormLayout->setWidget(1, QFormLayout::FieldRole, polarizationAngleBox_);

	// scan metal info layout
	QFormLayout *scanMetaInfoFormLayout = new QFormLayout();
	scanMetaInfoFormLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);

	nameEdit_ = new QLineEdit();
	scanMetaInfoFormLayout->setWidget(0, QFormLayout::LabelRole, new QLabel("Name"));
	scanMetaInfoFormLayout->setWidget(0, QFormLayout::FieldRole, nameEdit_);

	sampleSelector_ = new AMSamplePre2013Selector(AMDatabase::database("user"));
	scanMetaInfoFormLayout->setWidget(1, QFormLayout::LabelRole, new QLabel("Sample"));
	scanMetaInfoFormLayout->setWidget(1, QFormLayout::FieldRole, sampleSelector_);

	namedAutomaticallyBox_ = new QCheckBox("from current sample");
	scanMetaInfoFormLayout->setWidget(2, QFormLayout::LabelRole, new QLabel("Set automatically"));
	scanMetaInfoFormLayout->setWidget(2, QFormLayout::FieldRole, namedAutomaticallyBox_);


	// layout the components
	topFrame_ = new AMTopFrame("Setup XAS Scan", QIcon(":/utilities-system-monitor.png"));

	QGroupBox *monoGroupBox = new QGroupBox("Monochromator");
	monoGroupBox->setLayout(monoGroupBoxFormLayout);

	QGroupBox *polarizationGroupBox = new QGroupBox("Polarization");
	polarizationGroupBox->setLayout(polarizationGroupBoxFormLayout);

	QGroupBox *scanMetaInfoGroupBox = new QGroupBox("Scan Meta-Information");
	scanMetaInfoGroupBox->setLayout(scanMetaInfoFormLayout);

	QHBoxLayout *horizontalLayout = new QHBoxLayout();
	horizontalLayout->addWidget(monoGroupBox);
	horizontalLayout->addItem(new QSpacerItem(0, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));
	horizontalLayout->addWidget(polarizationGroupBox);
	horizontalLayout->addItem(new QSpacerItem(0, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));
	horizontalLayout->addWidget(scanMetaInfoGroupBox);

	QVBoxLayout *innerVLayout = new QVBoxLayout();
	innerVLayout->setSpacing(0);
	innerVLayout->setContentsMargins(12, 12, 12, 12);
	innerVLayout->addLayout(horizontalLayout);
	innerVLayout->insertWidget(0, new AMStepScanAxisView("Region Configuration", config_));
	innerVLayout->addStretch();

	QVBoxLayout *outerVLayout = new QVBoxLayout();
	outerVLayout->insertWidget(0, topFrame_);
	outerVLayout->setContentsMargins(0, 0, 0, 0);
	outerVLayout->addLayout(innerVLayout);
	setLayout(outerVLayout);

}