#include "main_window.hpp" #include "fusion_model.hpp" #include "qt_adapter.hpp" #include "meta_types.hpp" #include "fusion_outputter.hpp" #include "form.hpp" #include #include struct Data { const std::string name; std::string gender; uint32_t number; const double ratio1; double ratio2; bool boolean; }; BOOST_FUSION_ADAPT_STRUCT( Data, (const std::string, name) (std::string, gender) (uint32_t, number) (const double, ratio1) (double,ratio2) (bool, boolean) ) struct DataModel : public FusionModel> { std::vector model; DataModel() : FusionModel(model) {} void add_data(Data d) { call_on_observers(&FusionModelObserver::append_row_begin); model.push_back(d); call_on_observers(&FusionModelObserver::append_row_end); } }; struct DataMapping : public FusionModel> { std::map model; DataMapping() : FusionModel(model) {} void add_data(std::string key, Data value) { call_on_observers(&FusionModelObserver::append_row_begin); data.emplace(key, value); call_on_observers(&FusionModelObserver::append_row_end); } }; struct CustomDataModelWidget : public WidgetType::type { CustomDataModelWidget(std::shared_ptr model) : WidgetType::type(model) {} }; int main() { Data d1{"Jan", "Male", 1, 3.333, 0.333, true}; Data d2{"Piet", "Male",2, 1.5, 0.5, false}; Data d3{"Klaas", "Confused", 3, 0.1337, 0.0337, false}; auto model = std::make_shared(); model->add_data(d1); model->add_data(d2); model->add_data(d3); auto mapping = std::make_shared(); mapping->add_data("number1", d1); mapping->add_data("number2", d2); mapping->add_data("number3", d3); MainWindow w; auto widget1 = make_qt_widget(model); auto widget2 = make_qt_widget(model); auto widget3 = make_qt_widget(mapping); auto widget4 = make_qt_widget(model); w.add_widget(widget1.get()); w.add_widget(widget2.get()); w.add_widget(widget3.get()); w.add_widget(widget4.get()); int ret = w.show_and_run(); std::cout << "model: " << std::endl << model->data << std::endl; std::cout << "mapping: " << std::endl << mapping->data << std::endl; return ret; }