From 9b2834818decfa91cf43e01e762fc4e39d353d6e Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Wed, 25 Jan 2023 15:19:51 +0100 Subject: [PATCH] JOBS: remember z-lock and slider range --- GUI/Model/Job/JobItem.cpp | 41 +++++------------ GUI/Model/Job/JobItem.h | 16 ++++--- GUI/View/Fit/ParameterTuningDelegate.cpp | 4 +- GUI/View/Fit/ParameterTuningDelegate.h | 2 +- GUI/View/Fit/ParameterTuningWidget.cpp | 3 +- GUI/View/Fit/ParameterTuningWidget.h | 2 +- GUI/View/Fit/SliderSettingsWidget.cpp | 53 ++++++++++++++++++---- GUI/View/Fit/SliderSettingsWidget.h | 18 +++++--- GUI/View/Instrument/InstrumentListView.cpp | 2 +- GUI/View/SampleDesigner/SampleListView.cpp | 2 +- 10 files changed, 84 insertions(+), 59 deletions(-) diff --git a/GUI/Model/Job/JobItem.cpp b/GUI/Model/Job/JobItem.cpp index 900655dcb9b..b6f7c31c6f5 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 7955206cebd..6f14787b288 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 9e0f640642f..56d7d295460 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 5f75ecaaf1c..9a4b66a70fb 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 ef46aa5027e..e5f6867659a 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 826d3f25d5a..3e8a08899d0 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 90214b63194..f7e43da2d42 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 70bbb2d4cbf..6d35b2d1fb4 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 85a9c67fde7..f1d3b7f9e41 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 9dbb429fa86..22a9c6c4f60 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]); -- GitLab