1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
// ************************************************************************************************
//
// BornAgain: simulate and fit reflection and scattering
//
//! @file GUI/View/Fit/FitSessionWidget.cpp
//! @brief Implements class FitSessionWidget.
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2018
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************************************
#include "GUI/View/Fit/FitSessionWidget.h"
#include "Base/Util/Assert.h"
#include "GUI/Model/Job/JobItem.h"
#include "GUI/View/Base/mainwindow_constants.h"
#include "GUI/View/Fit/FitParameterWidget.h"
#include "GUI/View/Fit/FitSessionController.h"
#include "GUI/View/FitControl/FitEditor.h"
#include "GUI/View/FitControl/MinimizerEditor.h"
#include <QSettings>
#include <QVBoxLayout>
FitSessionWidget::FitSessionWidget(QWidget* parent)
: QWidget(parent)
, m_tab_widget(new QTabWidget(this))
, m_control_widget(new FitEditor)
, m_fit_parameters_widget(new FitParameterWidget)
, m_minimizer_settings_widget(new MinimizerEditor)
, m_session_controller(nullptr)
{
auto* layout = new QVBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
m_tab_widget->addTab(m_fit_parameters_widget, "Fit Parameters");
m_tab_widget->addTab(m_minimizer_settings_widget, "Minimizer");
layout->addWidget(m_tab_widget);
layout->addWidget(m_control_widget);
connect(m_control_widget, &FitEditor::updFromTreePushed, m_fit_parameters_widget,
&FitParameterWidget::updateView);
applySettings();
}
FitSessionWidget::~FitSessionWidget()
{
saveSettings();
}
void FitSessionWidget::setJobItem(JobItem* job_item)
{
ASSERT(job_item);
m_fit_parameters_widget->setJobItem(job_item);
m_minimizer_settings_widget->setJobItem(job_item);
m_control_widget->setJobItem(job_item);
}
void FitSessionWidget::setModelTuningWidget(ParameterTuningWidget* tuningWidget)
{
ASSERT(m_fit_parameters_widget);
ASSERT(tuningWidget);
m_fit_parameters_widget->setParameterTuningWidget(tuningWidget);
}
void FitSessionWidget::setSessionController(FitSessionController* sessionController)
{
m_session_controller = sessionController;
if (!m_session_controller)
return;
connect(m_session_controller, &FitSessionController::fittingError, this,
&FitSessionWidget::onFittingError, Qt::UniqueConnection);
connect(m_session_controller, &QObject::destroyed, this,
&FitSessionWidget::onControllerDestroyed, Qt::UniqueConnection);
connect(m_control_widget, &FitEditor::startFittingPushed, m_session_controller,
&FitSessionController::onStartFittingRequest, Qt::UniqueConnection);
connect(m_control_widget, &FitEditor::stopFittingPushed, m_session_controller,
&FitSessionController::onStopFittingRequest, Qt::UniqueConnection);
connect(m_control_widget, &FitEditor::updFromTreePushed, m_session_controller,
&FitSessionController::updateStartValuesFromTree, Qt::UniqueConnection);
}
void FitSessionWidget::onFittingError(const QString& text)
{
m_control_widget->onFittingError(text);
}
void FitSessionWidget::applySettings()
{
QSettings settings;
if (settings.childGroups().contains(GUI::Style::S_FIT_SESSION_WIDGET)) {
settings.beginGroup(GUI::Style::S_FIT_SESSION_WIDGET);
m_tab_widget->setCurrentIndex(
settings.value(GUI::Style::S_FIT_SESSION_WIDGET_CURRENT_TAB).toInt());
settings.endGroup();
}
}
void FitSessionWidget::saveSettings()
{
QSettings settings;
settings.beginGroup(GUI::Style::S_FIT_SESSION_WIDGET);
settings.setValue(GUI::Style::S_FIT_SESSION_WIDGET_CURRENT_TAB, m_tab_widget->currentIndex());
settings.endGroup();
settings.sync();
}
void FitSessionWidget::onControllerDestroyed()
{
m_session_controller = nullptr;
}
|