##// END OF EJS Templates
Fix bug when creating two variables crash the app. ...
Fix bug when creating two variables crash the app. Variable as now invalid range and cache range at creation

File last commit:

r468:4682fc2670df
r756:a7f60f6512e6
Show More
SqpSettingsDialog.cpp
66 lines | 1.9 KiB | text/x-c | CppLexer
/ gui / src / Settings / SqpSettingsDialog.cpp
#include "Settings/SqpSettingsDialog.h"
#include "ui_SqpSettingsDialog.h"
namespace {
/**
* Performs a bind operation on widgets that can be binded to SciQlop settings
* @param widgets
* @param bind the bind operation
* @sa ISqpSettingsBindable
*/
template <typename BindMethod>
void processBind(const QStackedWidget &widgets, BindMethod bind)
{
auto count = widgets.count();
for (auto i = 0; i < count; ++i) {
// Performs operation if widget is an ISqpSettingsBindable
if (auto sqpSettingsWidget = dynamic_cast<ISqpSettingsBindable *>(widgets.widget(i))) {
bind(*sqpSettingsWidget);
}
}
}
} // namespace
SqpSettingsDialog::SqpSettingsDialog(QWidget *parent)
: QDialog{parent}, ui{new Ui::SqpSettingsDialog}
{
ui->setupUi(this);
// Connection to change the current page to the selection of an entry in the list
connect(ui->listWidget, &QListWidget::currentRowChanged, ui->stackedWidget,
&QStackedWidget::setCurrentIndex);
}
SqpSettingsDialog::~SqpSettingsDialog() noexcept
{
delete ui;
}
void SqpSettingsDialog::loadSettings()
{
// Performs load on all widgets that can be binded to SciQlop settings
processBind(*ui->stackedWidget,
[](ISqpSettingsBindable &bindable) { bindable.loadSettings(); });
}
void SqpSettingsDialog::saveSettings() const
{
// Performs save on all widgets that can be binded to SciQlop settings
processBind(*ui->stackedWidget,
[](ISqpSettingsBindable &bindable) { bindable.saveSettings(); });
}
void SqpSettingsDialog::registerWidget(const QString &name, QWidget *widget) noexcept
{
auto newItem = new QListWidgetItem{ui->listWidget};
newItem->setText(name);
ui->stackedWidget->addWidget(widget);
// Selects widget if it's the first in the dialog
if (ui->listWidget->count() == 1) {
ui->listWidget->setCurrentItem(newItem);
}
}