#include using namespace Upp; #define LAYOUTFILE #include class MyApp : public WithMyAppLayout { public: typedef MyApp CLASSNAME; void Load(); void Save(); MyApp(); }; void MyApp::Load() { Value v = ParseJSON(LoadFile(ConfigFile("data.json"))); for(Ctrl *q = GetFirstChild(); q; q = q->GetNext()) if(dynamic_cast(q)) *q <<= v[q->GetLayoutId()]; // If missing in JSON, sets Null, which is OK } void MyApp::Save() { Json json; for(Ctrl *q = GetFirstChild(); q; q = q->GetNext()) if(dynamic_cast(q)) { String id = q->GetLayoutId(); if(id.GetCount()) json(id, ~*q); } SaveFile(ConfigFile("data.json"), json); } MyApp::MyApp() { CtrlLayoutOKCancel(*this, "Window title"); } GUI_APP_MAIN { MyApp app; app.Load(); if(app.Execute() == IDOK) app.Save(); }