Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/application/LayoutReviewWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,7 @@ LayoutReviewWidget::LayoutReviewWidget(
: QWidget(parent),
projectName_(projectName),
importResult_(importResult),
openProjectHandler_(std::move(openProjectHandler)),
approvalHandler_(std::move(approvalHandler)) {
auto* layout = new QVBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
Expand All @@ -404,7 +405,8 @@ LayoutReviewWidget::LayoutReviewWidget(

shell_->setTools({"Project", "Tool"});
shell_->setSaveProjectHandler(std::move(saveProjectHandler));
shell_->setOpenProjectHandler(std::move(openProjectHandler));
shell_->setOpenProjectHandler(openProjectHandler_);
shell_->setBackHandler(openProjectHandler_);
shell_->setCanvas(preview_);
shell_->setReviewPanel(reviewPanel);

Expand Down
1 change: 1 addition & 0 deletions src/application/LayoutReviewWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ class LayoutReviewWidget : public QWidget {

QString projectName_{};
safecrowd::domain::ImportResult importResult_{};
std::function<void()> openProjectHandler_{};
std::function<void(const safecrowd::domain::ImportResult&)> approvalHandler_{};
std::vector<safecrowd::domain::FacilityLayout2D> undoHistory_{};
WorkspaceShell* shell_{nullptr};
Expand Down
18 changes: 18 additions & 0 deletions src/application/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ void MainWindow::saveCurrentProject() {
void MainWindow::showLayoutReview(const ProjectMetadata& metadata) {
currentProject_ = metadata;
hasCurrentProject_ = true;
lastApprovedImportResult_.reset();

auto importResult = metadata.isBuiltInDemo()
? makeDemoImportResult()
Expand All @@ -177,6 +178,13 @@ void MainWindow::showLayoutReview(const ProjectMetadata& metadata) {

applySavedReviewState(metadata, &importResult);

showLayoutReview(metadata, std::move(importResult));
}

void MainWindow::showLayoutReview(const ProjectMetadata& metadata, safecrowd::domain::ImportResult importResult) {
currentProject_ = metadata;
hasCurrentProject_ = true;

setCentralWidget(new LayoutReviewWidget(
metadata.name,
importResult,
Expand All @@ -189,6 +197,7 @@ void MainWindow::showLayoutReview(const ProjectMetadata& metadata) {
showProjectNavigator();
},
[this](const safecrowd::domain::ImportResult& approvedImportResult) {
lastApprovedImportResult_ = approvedImportResult;
showScenarioAuthoring(approvedImportResult);
},
this));
Expand All @@ -200,6 +209,8 @@ void MainWindow::showScenarioAuthoring(const safecrowd::domain::ImportResult& im
return;
}

lastApprovedImportResult_ = importResult;

setCentralWidget(new ScenarioAuthoringWidget(
currentProject_.name,
*importResult.layout,
Expand All @@ -211,6 +222,13 @@ void MainWindow::showScenarioAuthoring(const safecrowd::domain::ImportResult& im
currentProject_ = {};
showProjectNavigator();
},
[this]() {
if (lastApprovedImportResult_.has_value()) {
showLayoutReview(currentProject_, *lastApprovedImportResult_);
} else {
showLayoutReview(currentProject_);
}
},
this));
}

Expand Down
4 changes: 4 additions & 0 deletions src/application/MainWindow.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#pragma once

#include <optional>

#include <QMainWindow>

#include "application/ProjectMetadata.h"
Expand All @@ -26,11 +28,13 @@ class MainWindow : public QMainWindow {
void openProject(const ProjectMetadata& metadata);
void saveCurrentProject();
void showLayoutReview(const ProjectMetadata& metadata);
void showLayoutReview(const ProjectMetadata& metadata, safecrowd::domain::ImportResult importResult);
void showScenarioAuthoring(const safecrowd::domain::ImportResult& importResult);

safecrowd::domain::SafeCrowdDomain& domain_;
ProjectMetadata currentProject_{};
bool hasCurrentProject_{false};
std::optional<safecrowd::domain::ImportResult> lastApprovedImportResult_{};
};

} // namespace safecrowd::application
8 changes: 7 additions & 1 deletion src/application/ScenarioAuthoringWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -246,12 +246,14 @@ ScenarioAuthoringWidget::ScenarioAuthoringWidget(
const safecrowd::domain::FacilityLayout2D& layout,
std::function<void()> saveProjectHandler,
std::function<void()> openProjectHandler,
std::function<void()> backToLayoutReviewHandler,
QWidget* parent)
: QWidget(parent),
projectName_(projectName),
layout_(layout),
saveProjectHandler_(std::move(saveProjectHandler)),
openProjectHandler_(std::move(openProjectHandler)) {
openProjectHandler_(std::move(openProjectHandler)),
backToLayoutReviewHandler_(std::move(backToLayoutReviewHandler)) {
initializeUi(true);
}

Expand All @@ -261,12 +263,14 @@ ScenarioAuthoringWidget::ScenarioAuthoringWidget(
InitialState initialState,
std::function<void()> saveProjectHandler,
std::function<void()> openProjectHandler,
std::function<void()> backToLayoutReviewHandler,
QWidget* parent)
: QWidget(parent),
projectName_(projectName),
layout_(layout),
saveProjectHandler_(std::move(saveProjectHandler)),
openProjectHandler_(std::move(openProjectHandler)),
backToLayoutReviewHandler_(std::move(backToLayoutReviewHandler)),
scenarios_(std::move(initialState.scenarios)),
currentScenarioIndex_(initialState.currentScenarioIndex),
navigationView_(initialState.navigationView),
Expand All @@ -283,6 +287,7 @@ void ScenarioAuthoringWidget::initializeUi(bool promptForScenario) {
shell_->setTools({"Project"});
shell_->setSaveProjectHandler(saveProjectHandler_);
shell_->setOpenProjectHandler(openProjectHandler_);
shell_->setBackHandler(backToLayoutReviewHandler_);
shell_->setTopBarTrailingWidget(createTopBarTogglePanel());
refreshRightPanel();
rootLayout->addWidget(shell_);
Expand Down Expand Up @@ -541,6 +546,7 @@ void ScenarioAuthoringWidget::runFirstStagedBaselineScenario() {
scenario->draft,
saveProjectHandler_,
openProjectHandler_,
backToLayoutReviewHandler_,
this);
rootLayout->replaceWidget(shell_, runWidget);
shell_->hide();
Expand Down
3 changes: 3 additions & 0 deletions src/application/ScenarioAuthoringWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class ScenarioAuthoringWidget : public QWidget {
const safecrowd::domain::FacilityLayout2D& layout,
std::function<void()> saveProjectHandler,
std::function<void()> openProjectHandler,
std::function<void()> backToLayoutReviewHandler,
QWidget* parent = nullptr);

enum class NavigationView {
Expand Down Expand Up @@ -62,6 +63,7 @@ class ScenarioAuthoringWidget : public QWidget {
InitialState initialState,
std::function<void()> saveProjectHandler,
std::function<void()> openProjectHandler,
std::function<void()> backToLayoutReviewHandler,
QWidget* parent = nullptr);

private:
Expand Down Expand Up @@ -92,6 +94,7 @@ class ScenarioAuthoringWidget : public QWidget {
safecrowd::domain::FacilityLayout2D layout_{};
std::function<void()> saveProjectHandler_{};
std::function<void()> openProjectHandler_{};
std::function<void()> backToLayoutReviewHandler_{};
std::vector<ScenarioState> scenarios_{};
int currentScenarioIndex_{-1};
NavigationView navigationView_{NavigationView::Layout};
Expand Down
9 changes: 8 additions & 1 deletion src/application/ScenarioResultWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,7 @@ ScenarioResultWidget::ScenarioResultWidget(
safecrowd::domain::ScenarioRiskSnapshot risk,
std::function<void()> saveProjectHandler,
std::function<void()> openProjectHandler,
std::function<void()> backToLayoutReviewHandler,
QWidget* parent)
: QWidget(parent),
projectName_(std::move(projectName)),
Expand All @@ -344,7 +345,8 @@ ScenarioResultWidget::ScenarioResultWidget(
frame_(std::move(frame)),
risk_(std::move(risk)),
saveProjectHandler_(std::move(saveProjectHandler)),
openProjectHandler_(std::move(openProjectHandler)) {
openProjectHandler_(std::move(openProjectHandler)),
backToLayoutReviewHandler_(std::move(backToLayoutReviewHandler)) {
auto* rootLayout = new QVBoxLayout(this);
rootLayout->setContentsMargins(0, 0, 0, 0);
rootLayout->setSpacing(0);
Expand All @@ -358,6 +360,9 @@ ScenarioResultWidget::ScenarioResultWidget(
shell_->setTools({"Project"});
shell_->setSaveProjectHandler(saveProjectHandler_);
shell_->setOpenProjectHandler(openProjectHandler_);
shell_->setBackHandler([this]() {
navigateToAuthoring(true);
});

auto* canvas = new SimulationCanvasWidget(layout_, shell_);
canvas->setFrame(frame_);
Expand Down Expand Up @@ -406,6 +411,7 @@ void ScenarioResultWidget::rerunScenario() {
scenario_,
saveProjectHandler_,
openProjectHandler_,
backToLayoutReviewHandler_,
this);

rootLayout->replaceWidget(shell_, runWidget);
Expand Down Expand Up @@ -434,6 +440,7 @@ void ScenarioResultWidget::navigateToAuthoring(bool showRunPanel) {
std::move(initial),
saveProjectHandler_,
openProjectHandler_,
backToLayoutReviewHandler_,
this);

rootLayout->replaceWidget(shell_, authoringWidget);
Expand Down
2 changes: 2 additions & 0 deletions src/application/ScenarioResultWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class ScenarioResultWidget : public QWidget {
safecrowd::domain::ScenarioRiskSnapshot risk,
std::function<void()> saveProjectHandler,
std::function<void()> openProjectHandler,
std::function<void()> backToLayoutReviewHandler,
QWidget* parent = nullptr);

private:
Expand All @@ -37,6 +38,7 @@ class ScenarioResultWidget : public QWidget {
safecrowd::domain::ScenarioRiskSnapshot risk_{};
std::function<void()> saveProjectHandler_{};
std::function<void()> openProjectHandler_{};
std::function<void()> backToLayoutReviewHandler_{};
WorkspaceShell* shell_{nullptr};
};

Expand Down
40 changes: 8 additions & 32 deletions src/application/ScenarioRunWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -168,14 +168,16 @@ ScenarioRunWidget::ScenarioRunWidget(
const safecrowd::domain::ScenarioDraft& scenario,
std::function<void()> saveProjectHandler,
std::function<void()> openProjectHandler,
std::function<void()> backToLayoutReviewHandler,
QWidget* parent)
: QWidget(parent),
projectName_(projectName),
layout_(layout),
scenario_(scenario),
runner_(layout_, scenario_),
saveProjectHandler_(std::move(saveProjectHandler)),
openProjectHandler_(std::move(openProjectHandler)) {
openProjectHandler_(std::move(openProjectHandler)),
backToLayoutReviewHandler_(std::move(backToLayoutReviewHandler)) {
auto* rootLayout = new QVBoxLayout(this);
rootLayout->setContentsMargins(0, 0, 0, 0);
rootLayout->setSpacing(0);
Expand All @@ -189,13 +191,15 @@ ScenarioRunWidget::ScenarioRunWidget(
shell_->setTools({"Project"});
shell_->setSaveProjectHandler(saveProjectHandler_);
shell_->setOpenProjectHandler(openProjectHandler_);
shell_->setBackHandler([this]() {
returnToAuthoring();
});
canvas_ = new SimulationCanvasWidget(layout_, shell_);
canvas_->setFrame(runner_.frame());
shell_->setCanvas(canvas_);
shell_->setReviewPanel(createRunPanel());
shell_->setReviewPanelVisible(true);
rootLayout->addWidget(shell_);
addBackToAuthoringButton();

timer_ = new QTimer(this);
timer_->setInterval(33);
Expand Down Expand Up @@ -282,36 +286,6 @@ QWidget* ScenarioRunWidget::createRunPanel() {
return panel;
}

void ScenarioRunWidget::addBackToAuthoringButton() {
if (canvas_ == nullptr) {
return;
}

auto* button = new QPushButton("<", canvas_);
button->setToolTip("Back to scenario editor");
button->setAccessibleName("Back to scenario editor");
button->setFixedSize(40, 36);
button->move(16, 16);
button->raise();
button->setStyleSheet(
"QPushButton {"
" background: rgba(255, 255, 255, 232);"
" border: 1px solid #c9d5e2;"
" border-radius: 10px;"
" color: #16202b;"
" font-size: 18px;"
" font-weight: 700;"
" padding-bottom: 2px;"
"}"
"QPushButton:hover {"
" background: #eef3f8;"
" border-color: #b8c6d6;"
"}");
connect(button, &QPushButton::clicked, this, [this]() {
returnToAuthoring();
});
}

void ScenarioRunWidget::returnToAuthoring() {
if (timer_ != nullptr) {
timer_->stop();
Expand All @@ -334,6 +308,7 @@ void ScenarioRunWidget::returnToAuthoring() {
std::move(initial),
saveProjectHandler_,
openProjectHandler_,
backToLayoutReviewHandler_,
this);

rootLayout->replaceWidget(shell_, authoringWidget);
Expand Down Expand Up @@ -450,6 +425,7 @@ void ScenarioRunWidget::showResults() {
openProjectHandler_();
}
},
backToLayoutReviewHandler_,
this);
rootLayout->replaceWidget(shell_, resultWidget);
shell_->hide();
Expand Down
3 changes: 2 additions & 1 deletion src/application/ScenarioRunWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ class ScenarioRunWidget : public QWidget {
const safecrowd::domain::ScenarioDraft& scenario,
std::function<void()> saveProjectHandler,
std::function<void()> openProjectHandler,
std::function<void()> backToLayoutReviewHandler,
QWidget* parent = nullptr);

private:
QWidget* createRunPanel();
void addBackToAuthoringButton();
void returnToAuthoring();
void refreshStatus();
void showResults();
Expand All @@ -44,6 +44,7 @@ class ScenarioRunWidget : public QWidget {
safecrowd::domain::ScenarioSimulationRunner runner_{};
std::function<void()> saveProjectHandler_{};
std::function<void()> openProjectHandler_{};
std::function<void()> backToLayoutReviewHandler_{};
WorkspaceShell* shell_{nullptr};
SimulationCanvasWidget* canvas_{nullptr};
QTimer* timer_{nullptr};
Expand Down
Loading
Loading