Skip to content

Commit

Permalink
GUI: Implement SettingsDialog -> core::Settings
Browse files Browse the repository at this point in the history
The MainWindow now can utilize
the SettingsDialog to configure the analysis.

Issue #134
Closes #134
  • Loading branch information
rakhimov committed Jun 17, 2017
1 parent f41dcb9 commit 78318c3
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 8 deletions.
5 changes: 3 additions & 2 deletions gui/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,9 @@ MainWindow::MainWindow(QWidget *parent)
});

connect(ui->actionSettings, &QAction::triggered, this, [this] {
SettingsDialog dialog(this);
dialog.exec();
SettingsDialog dialog(m_settings, this);
if (dialog.exec() == QDialog::Accepted)
m_settings = dialog.settings();
});

deactivateZoom();
Expand Down
85 changes: 80 additions & 5 deletions gui/settingsdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,92 @@
#include "settingsdialog.h"
#include "ui_settingsdialog.h"

#include "src/error.h"

#include "guiassert.h"

namespace scram {
namespace gui {

SettingsDialog::SettingsDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::SettingsDialog)
SettingsDialog::SettingsDialog(const core::Settings &initSettings,
QWidget *parent)
: QDialog(parent), ui(new Ui::SettingsDialog)
{
ui->setupUi(this);
setupState(initSettings);
setupConnections();
}

SettingsDialog::~SettingsDialog() = default;

core::Settings SettingsDialog::settings() const
{
core::Settings result;
try {
if (ui->bdd->isChecked()) {
result.algorithm(core::Algorithm::kBdd);
} else if (ui->zbdd->isChecked()) {
result.algorithm(core::Algorithm::kZbdd);
} else {
GUI_ASSERT(ui->mocus->isChecked(), result);
result.algorithm(core::Algorithm::kMocus);
}

result.prime_implicants(ui->primeImplicants->isChecked());

if (ui->approximationsBox->isChecked() == false) {
result.approximation(core::Approximation::kNone);
} else if (ui->rareEvent->isChecked()) {
result.approximation(core::Approximation::kRareEvent);
} else {
GUI_ASSERT(ui->mcub->isChecked(), result);
result.approximation(core::Approximation::kMcub);
}

result.limit_order(ui->productOrder->value());
result.mission_time(ui->missionTime->value());
} catch (Error& err) {
GUI_ASSERT(false && err.what(), result);
}
return result;
}

void SettingsDialog::setupState(const core::Settings &initSettings)
{
ui->primeImplicants->setChecked(initSettings.prime_implicants());
ui->probability->setChecked(initSettings.probability_analysis());
ui->importance->setChecked(initSettings.importance_analysis());
ui->missionTime->setValue(initSettings.mission_time());
ui->productOrder->setValue(initSettings.limit_order());

switch (initSettings.algorithm()) {
case core::Algorithm::kBdd:
ui->bdd->setChecked(true);
break;
case core::Algorithm::kZbdd:
ui->zbdd->setChecked(true);
break;
case core::Algorithm::kMocus:
ui->mocus->setChecked(true);
break;
}

ui->approximationsBox->setChecked(true);
switch (initSettings.approximation()) {
case core::Approximation::kNone:
ui->approximationsBox->setChecked(false);
break;
case core::Approximation::kRareEvent:
ui->rareEvent->setChecked(true);
break;
case core::Approximation::kMcub:
ui->mcub->setChecked(true);
break;
}
}

void SettingsDialog::setupConnections()
{
connect(ui->probability, &QAbstractButton::toggled, [this](bool checked) {
if (!checked)
ui->importance->setChecked(false);
Expand Down Expand Up @@ -57,7 +134,5 @@ SettingsDialog::SettingsDialog(QWidget *parent) :
});
}

SettingsDialog::~SettingsDialog() = default;

} // namespace gui
} // namespace scram
12 changes: 11 additions & 1 deletion gui/settingsdialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@

#include <QDialog>

#include "src/settings.h"

namespace Ui {
class SettingsDialog;
}
Expand All @@ -34,10 +36,18 @@ class SettingsDialog : public QDialog
Q_OBJECT

public:
explicit SettingsDialog(QWidget *parent = nullptr);
/// @param[in] initSettings The initial settings to setup the dialog.
explicit SettingsDialog(const core::Settings &initSettings,
QWidget *parent = nullptr);
~SettingsDialog();

/// @returns Analysis settings derived from the dialog state.
core::Settings settings() const;

private:
void setupState(const core::Settings &initSettings);
void setupConnections();

std::unique_ptr<Ui::SettingsDialog> ui;
};

Expand Down

0 comments on commit 78318c3

Please sign in to comment.