From ca7a407eea6a188aa555ffc7b519c3bb4eeb5f03 Mon Sep 17 00:00:00 2001 From: emeric Date: Tue, 15 May 2018 13:30:41 +0200 Subject: [PATCH] Rerender the Settings view each time the internal path changes --- src/ui/SettingsView.cpp | 39 ++++++++++++++++++++++++++++----------- src/ui/SettingsView.hpp | 7 +++++-- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/ui/SettingsView.cpp b/src/ui/SettingsView.cpp index aa3b962e..54db2359 100644 --- a/src/ui/SettingsView.cpp +++ b/src/ui/SettingsView.cpp @@ -249,37 +249,54 @@ const Wt::WFormModel::Field SettingsModel::PasswordField = "password"; const Wt::WFormModel::Field SettingsModel::PasswordConfirmField = "password-confirm"; SettingsView::SettingsView() -: Wt::WTemplateFormView(Wt::WString::tr("Lms.Settings.template")) { + wApp->internalPathChanged().connect(std::bind([=] + { + refreshView(); + })); + + refreshView(); +} + +void +SettingsView::refreshView() +{ + if (!wApp->internalPathMatches("/settings")) + return; + + clear(); + + auto t = addNew(Wt::WString::tr("Lms.Settings.template")); + auto model = std::make_shared(); // Password auto password = std::make_unique(); password->setEchoMode(Wt::EchoMode::Password); - setFormWidget(SettingsModel::PasswordField, std::move(password)); + t->setFormWidget(SettingsModel::PasswordField, std::move(password)); // Password confirm auto passwordConfirm = std::make_unique(); passwordConfirm->setEchoMode(Wt::EchoMode::Password); - setFormWidget(SettingsModel::PasswordConfirmField, std::move(passwordConfirm)); + t->setFormWidget(SettingsModel::PasswordConfirmField, std::move(passwordConfirm)); // Bitrate auto bitrate = std::make_unique(); bitrate->setModel(model->bitrateModel()); - setFormWidget(SettingsModel::BitrateField, std::move(bitrate)); + t->setFormWidget(SettingsModel::BitrateField, std::move(bitrate)); // Encoding auto encoding = std::make_unique(); encoding->setModel(model->encodingModel()); - setFormWidget(SettingsModel::EncodingField, std::move(encoding)); + t->setFormWidget(SettingsModel::EncodingField, std::move(encoding)); // Buttons - Wt::WPushButton *saveBtn = bindWidget("apply-btn", std::make_unique(Wt::WString::tr("Lms.apply"))); - Wt::WPushButton *discardBtn = bindWidget("discard-btn", std::make_unique(Wt::WString::tr("Lms.discard"))); + Wt::WPushButton *saveBtn = t->bindWidget("apply-btn", std::make_unique(Wt::WString::tr("Lms.apply"))); + Wt::WPushButton *discardBtn = t->bindWidget("discard-btn", std::make_unique(Wt::WString::tr("Lms.discard"))); saveBtn->clicked().connect(std::bind([=] () { - updateModel(model.get()); + t->updateModel(model.get()); if (model->validate()) { @@ -288,17 +305,17 @@ SettingsView::SettingsView() } // Udate the view: Delete any validation message in the view, etc. - updateView(model.get()); + t->updateView(model.get()); })); discardBtn->clicked().connect(std::bind([=] () { model->loadData(); model->validate(); - updateView(model.get()); + t->updateView(model.get()); })); - updateView(model.get()); + t->updateView(model.get()); } } // namespace UserInterface diff --git a/src/ui/SettingsView.hpp b/src/ui/SettingsView.hpp index ac51a133..ff632fcd 100644 --- a/src/ui/SettingsView.hpp +++ b/src/ui/SettingsView.hpp @@ -19,14 +19,17 @@ #pragma once -#include +#include namespace UserInterface { -class SettingsView : public Wt::WTemplateFormView +class SettingsView : public Wt::WContainerWidget { public: SettingsView(); + + private: + void refreshView(); }; } // namespace UserInterface