#include "PtrCollectionFormDelegate.h" #include "model/TestDboObject.h" #include "QuerySelectionBox.h" #include PtrCollectionFormDelegate::PtrCollectionFormDelegate(Wt::Dbo::Session& session) : session_(session) { } std::unique_ptr PtrCollectionFormDelegate::createFormWidget() { Wt::Dbo::Transaction t(session_); auto model = std::make_shared>>(); model->setQuery(session_.find()); model->addColumn("id", "ID"); return std::make_unique>>(model); } void PtrCollectionFormDelegate::updateModelValue(Wt::WFormModel *model, Wt::WFormModel::Field field, Wt::WFormWidget *edit) { auto box = dynamic_cast> *>(edit); if (box) { model->setValue(field, box->selectedItems()); } else { Wt::log("error") << "PtrCollectionFormDelegate" << ": " << "Could not cast edit to QuerySelectionBox!"; } } void PtrCollectionFormDelegate::updateViewValue(Wt::WFormModel *model, Wt::WFormModel::Field field, Wt::WFormWidget *edit) { auto box = dynamic_cast> *>(edit); if (box) { Wt::cpp17::any v = model->value(field); try { std::vector> values = Wt::cpp17::any_cast>>(v); box->selectItems(values); } catch (std::exception& e) { Wt::log("error") << "PtrCollectionFormDelegate" << ": " << "Could not convert value to TestDboPtr vector: " << e.what(); } } else { Wt::log("error") << "PtrCollectionFormDelegate" << ": " << "Could not cast edit to QuerySelectionBox!"; } }