diff --git a/GUI/Model/Job/JobItem.cpp b/GUI/Model/Job/JobItem.cpp index 900655dcb9b67ca68bc45386a063b58a085d989c..b6f7c31c6f5902776dd7b1a07335c41442b3e747 100644 --- a/GUI/Model/Job/JobItem.cpp +++ b/GUI/Model/Job/JobItem.cpp @@ -48,6 +48,7 @@ const QString Name("Name"); const QString Identifier("Id"); const QString Comments("Comments"); const QString PresentationType("PresentationType"); +const QString SliderRange("SliderRange"); const QString Activity("Activity"); const QString Duration("Duration"); const QString BeginTime("Begin"); @@ -72,16 +73,6 @@ JobItem::JobItem() JobItem::~JobItem() = default; -QString JobItem::identifier() const -{ - return m_identifier; -} - -void JobItem::setIdentifier(const QString& identifier) -{ - m_identifier = identifier; -} - QString JobItem::jobName() const { return m_name; @@ -210,26 +201,6 @@ bool JobItem::runInBackground() const return simulationOptionsItem().runInBackground(); } -QString JobItem::presentationType() const -{ - return m_presentationType; -} - -void JobItem::setPresentationType(const QString& type) -{ - m_presentationType = type; -} - -QString JobItem::activity() const -{ - return m_activity; -} - -void JobItem::setActivity(const QString& activity) -{ - m_activity = activity; -} - bool JobItem::isSpecularJob() const { return instrumentItem()->is<SpecularInstrumentItem>(); @@ -482,6 +453,11 @@ void JobItem::writeTo(QXmlStreamWriter* w, const QString& projectDir) const XML::writeAttribute(w, XML::Attrib::value, m_presentationType); w->writeEndElement(); + // slider range + w->writeStartElement(Tag::SliderRange); + XML::writeAttribute(w, XML::Attrib::value, m_sliderRange); + w->writeEndElement(); + // begin time w->writeStartElement(Tag::BeginTime); XML::writeAttribute(w, XML::Attrib::value, m_beginTime.toString(Qt::ISODateWithMs)); @@ -575,6 +551,11 @@ void JobItem::readFrom(QXmlStreamReader* r, const QString& projectDir, XML::readAttribute(r, XML::Attrib::value, &m_presentationType); XML::gotoEndElementOfTag(r, tag); + // slider range + } else if (tag == Tag::SliderRange) { + XML::readAttribute(r, XML::Attrib::value, &m_sliderRange); + XML::gotoEndElementOfTag(r, tag); + // comments } else if (tag == Tag::Comments) { XML::readAttribute(r, XML::Attrib::value, &m_comments); diff --git a/GUI/Model/Job/JobItem.h b/GUI/Model/Job/JobItem.h index 7955206cebdc104e2175163ee885d881b47ac9fb..6f14787b28876833daac7ab034069cb4938c8f9d 100644 --- a/GUI/Model/Job/JobItem.h +++ b/GUI/Model/Job/JobItem.h @@ -46,8 +46,8 @@ public: // job properties - QString identifier() const; - void setIdentifier(const QString& identifier); + QString identifier() const { return m_identifier; } + void setIdentifier(const QString& identifier) { m_identifier = identifier; } QString jobName() const; void setJobName(const QString& name); @@ -81,11 +81,14 @@ public: bool runImmediately() const; bool runInBackground() const; - QString presentationType() const; - void setPresentationType(const QString& type); + QString presentationType() const { return m_presentationType; } + void setPresentationType(const QString& type) { m_presentationType = type; } - QString activity() const; - void setActivity(const QString& activity); + QString activity() const { return m_activity; } + void setActivity(const QString& activity) { m_activity = activity; } + + int sliderRange() const { return m_sliderRange; } + void setSliderRange(int range) { m_sliderRange = range; } bool isSpecularJob() const; bool isIntensityJob() const; @@ -159,6 +162,7 @@ private: QString m_comments; QString m_activity; QString m_presentationType; + int m_sliderRange = 100; QDateTime m_beginTime; QDateTime m_endTime; int m_progress; diff --git a/GUI/View/Fit/ParameterTuningDelegate.cpp b/GUI/View/Fit/ParameterTuningDelegate.cpp index 9e0f640642f9db9dbb67f56ee507cfd4d26c8dcb..56d7d29546066242eaa7145d9be984bb0cb835a9 100644 --- a/GUI/View/Fit/ParameterTuningDelegate.cpp +++ b/GUI/View/Fit/ParameterTuningDelegate.cpp @@ -253,9 +253,9 @@ void ParameterTuningDelegate::emitSignals(double value) gProjectDocument.value()->setModified(); } -void ParameterTuningDelegate::setSliderRangeFactor(double value) +void ParameterTuningDelegate::setSliderRangeFactor(int value) { - m_tuning_info.setRangeFactor(value); + m_tuning_info.setRangeFactor(double(value)); } void ParameterTuningDelegate::setReadOnly(bool isReadOnly) diff --git a/GUI/View/Fit/ParameterTuningDelegate.h b/GUI/View/Fit/ParameterTuningDelegate.h index 5f75ecaaf1c48faf072b2652079d83128b878ce3..9a4b66a70fb7c02e3729ddfd6d6e734f1cbafe1d 100644 --- a/GUI/View/Fit/ParameterTuningDelegate.h +++ b/GUI/View/Fit/ParameterTuningDelegate.h @@ -59,7 +59,7 @@ public: void setEditorData(QWidget* editor, const QModelIndex& index) const override; void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const override; - void setSliderRangeFactor(double value); + void setSliderRangeFactor(int value); void setValueColumn(int valueColumn) { m_valueColumn = valueColumn; } diff --git a/GUI/View/Fit/ParameterTuningWidget.cpp b/GUI/View/Fit/ParameterTuningWidget.cpp index ef46aa5027e66b655be384f447c2ea495b892fcf..e5f6867659a7da252b0beb345dcf62488fedd5b0 100644 --- a/GUI/View/Fit/ParameterTuningWidget.cpp +++ b/GUI/View/Fit/ParameterTuningWidget.cpp @@ -73,6 +73,7 @@ ParameterTuningWidget::ParameterTuningWidget(QWidget* parent) void ParameterTuningWidget::setJobOrRealItem(JobRealBase* job_item) { DataAccessWidget::setJobOrRealItem(job_item); + m_sliderSettingsWidget->setJobOrRealItem(job_item); m_jobModel = dynamic_cast<JobModel*>(jobItem()->model()); updateParameterModel(); @@ -113,7 +114,7 @@ void ParameterTuningWidget::onCurrentLinkChanged(ParameterItem* item) m_jobModel->runJob(jobItem()); } -void ParameterTuningWidget::onSliderRangeChanged(double value) +void ParameterTuningWidget::onSliderRangeChanged(int value) { m_delegate->setSliderRangeFactor(value); } diff --git a/GUI/View/Fit/ParameterTuningWidget.h b/GUI/View/Fit/ParameterTuningWidget.h index 826d3f25d5ae13bf9eb97562dce83c1f9b17d76b..3e8a08899d0c77cea1ead81647e87403638cddb9 100644 --- a/GUI/View/Fit/ParameterTuningWidget.h +++ b/GUI/View/Fit/ParameterTuningWidget.h @@ -45,7 +45,7 @@ signals: public slots: void onCurrentLinkChanged(ParameterItem* item); - void onSliderRangeChanged(double value); + void onSliderRangeChanged(int value); void onLockZValueChanged(bool value); void restoreModelsOfCurrentJobItem(); void makeSelected(ParameterItem* item); diff --git a/GUI/View/Fit/SliderSettingsWidget.cpp b/GUI/View/Fit/SliderSettingsWidget.cpp index 90214b63194ec93eaf2a11de592e8990164e5acc..f7e43da2d42664860e0b4355a307f61ca06d256a 100644 --- a/GUI/View/Fit/SliderSettingsWidget.cpp +++ b/GUI/View/Fit/SliderSettingsWidget.cpp @@ -12,18 +12,16 @@ // // ************************************************************************************************ -#include "GUI/View/Fit/SliderSettingsWidget.h" +#include "GUI/Model/Data/IntensityDataItem.h" #include "GUI/Model/Project/ProjectDocument.h" -#include <QCheckBox> +#include "GUI/View/Fit/SliderSettingsWidget.h" #include <QGroupBox> #include <QHBoxLayout> #include <QLabel> -#include <QRadioButton> #include <QVBoxLayout> SliderSettingsWidget::SliderSettingsWidget(QWidget* parent) - : QWidget(parent) - , m_currentSliderRange(100.0) + : DataAccessWidget(parent) , m_radio1(nullptr) , m_radio2(nullptr) , m_radio3(nullptr) @@ -70,16 +68,27 @@ SliderSettingsWidget::SliderSettingsWidget(QWidget* parent) setLayout(hbox); } +void SliderSettingsWidget::setJobOrRealItem(JobRealBase* job_item) +{ + DataAccessWidget::setJobOrRealItem(job_item); + + initSlider(); + initZlock(); +} + void SliderSettingsWidget::rangeChanged() { + if (!jobItem()) + return; + if (m_radio1->isChecked()) - m_currentSliderRange = 10.0; + jobItem()->setSliderRange(10); else if (m_radio2->isChecked()) - m_currentSliderRange = 100.0; + jobItem()->setSliderRange(100); else if (m_radio3->isChecked()) - m_currentSliderRange = 1000.0; + jobItem()->setSliderRange(1000); - emit sliderRangeFactorChanged(m_currentSliderRange); + emit sliderRangeFactorChanged(jobItem()->sliderRange()); gProjectDocument.value()->setModified(); } @@ -91,3 +100,29 @@ void SliderSettingsWidget::onLockZChanged(int state) emit lockzChanged(true); gProjectDocument.value()->setModified(); } + +void SliderSettingsWidget::initSlider() +{ + if (!jobItem()) + return; + + if (jobItem()->sliderRange() == 10) + m_radio1->setChecked(true); + else if (jobItem()->sliderRange() == 1000) + m_radio3->setChecked(true); + else { + if(jobItem()->sliderRange() != 100) + jobItem()->setSliderRange(100); + m_radio2->setChecked(true); + } + emit sliderRangeFactorChanged(jobItem()->sliderRange()); +} + +void SliderSettingsWidget::initZlock() +{ + if (!jobItem()) + return; + + if (auto* intensityItem = jobItem()->intensityDataItem()) + m_lockzCheckBox->setChecked(intensityItem->isZaxisLocked()); +} diff --git a/GUI/View/Fit/SliderSettingsWidget.h b/GUI/View/Fit/SliderSettingsWidget.h index 70bbb2d4cbfdf75bb0808c99ad6d8b87a0513380..6d35b2d1fb418e6efd7b2ba05fd3ca3f3b386efd 100644 --- a/GUI/View/Fit/SliderSettingsWidget.h +++ b/GUI/View/Fit/SliderSettingsWidget.h @@ -15,19 +15,20 @@ #ifndef BORNAGAIN_GUI_VIEW_FIT_SLIDERSETTINGSWIDGET_H #define BORNAGAIN_GUI_VIEW_FIT_SLIDERSETTINGSWIDGET_H -#include <QWidget> +#include "GUI/View/Common/DataAccessWidget.h" +#include <QCheckBox> +#include <QRadioButton> -class QRadioButton; -class QCheckBox; - -class SliderSettingsWidget : public QWidget { +class SliderSettingsWidget : public DataAccessWidget { Q_OBJECT public: SliderSettingsWidget(QWidget* parent = nullptr); + void setJobOrRealItem(JobRealBase* job_item) override; + signals: - void sliderRangeFactorChanged(double value); + void sliderRangeFactorChanged(int value); void lockzChanged(bool value); private slots: @@ -35,7 +36,10 @@ private slots: void onLockZChanged(int state); private: - double m_currentSliderRange; + void initSlider(); + void initZlock(); + +private: QRadioButton* m_radio1; QRadioButton* m_radio2; QRadioButton* m_radio3; diff --git a/GUI/View/Instrument/InstrumentListView.cpp b/GUI/View/Instrument/InstrumentListView.cpp index 85a9c67fde7ef397d5f9c4e34db5cb703f8fe162..f1d3b7f9e417b1916f49b550b508951d7f4c8375 100644 --- a/GUI/View/Instrument/InstrumentListView.cpp +++ b/GUI/View/Instrument/InstrumentListView.cpp @@ -284,7 +284,7 @@ void InstrumentListView::ensureItemSelected() void InstrumentListView::restoreSelection() { int lastUsed = m_document->instrumentModel()->selectedIndex(); - if (lastUsed >=0 && lastUsed < m_model->rowCount()) { + if (lastUsed >= 0 && lastUsed < m_model->rowCount()) { QModelIndex lastUsedIndex = m_model->index(lastUsed, 0, QModelIndex()); m_listView->selectionModel()->select(lastUsedIndex, QItemSelectionModel::ClearAndSelect); } else diff --git a/GUI/View/SampleDesigner/SampleListView.cpp b/GUI/View/SampleDesigner/SampleListView.cpp index 9dbb429fa8622f86e6b355a222b9b7f719446698..22a9c6c4f60d4578cec08ac1aebca80f6b9871e9 100644 --- a/GUI/View/SampleDesigner/SampleListView.cpp +++ b/GUI/View/SampleDesigner/SampleListView.cpp @@ -215,7 +215,7 @@ void SampleListView::onCurrentChanged(const QModelIndex& index) void SampleListView::restoreSelection() { int lastUsed = m_document->sampleModel()->selectedIndex(); - if (lastUsed >=0 && lastUsed < m_model->rowCount()) { + if (lastUsed >= 0 && lastUsed < m_model->rowCount()) { QModelIndex lastUsedIndex = m_model->index(lastUsed, 0, QModelIndex()); selectionModel()->select(lastUsedIndex, QItemSelectionModel::ClearAndSelect); setCurrentSample(m_document->sampleModel()->sampleItems()[lastUsed]);