/*
To test, compile with:
g++ -std=c++11 DialogJson.cpp Dialog.cpp ResourceLoader.cpp HttpClient.cpp Log.cpp -o test3 -pthread
*/
#include "Dialog.h"
#include "ResourceLoader.h"
#include "rapidjson/document.h"
//#include "rapidjson/writer.h"
//#include "rapidjson/stringbuffer.h"
#include <iostream>
using namespace rapidjson;
void DialogRedirect(Dialog* caller, std::string redirect)
{
if (redirect == "close") {
caller->close();
} else if (redirect == "MainMenu") {
} else if (redirect == "Settings") {
} else if (redirect == "Options") {
} else if (redirect == "Blah") {
}
printf("redirecting to %s\n", redirect.c_str());
}
Dialog *LoadDialogFromJson(const Document& jsonDoc)
{
Dialog* newDialog = new Dialog();
const Value& dialogs = jsonDoc["dialogs"];
const Value& controls = dialogs[0]["controls"];
if (controls.IsArray()) {
for (size_t i = 0; i < controls.Size(); i++) { // for (const Value& control : controls) {
const Value& control = controls[i];
std::string childType = control["type"].GetString();
int x = control["x"].GetInt();
int y = control["y"].GetInt();
if (childType == "Label") {
std::string param1 = control["text"].GetString();
printf("adding label : %i %i %s\n", x, y, param1.c_str());
newDialog->m_controls.push_back(new Label(x, y, param1.c_str()));
} else if (childType == "Button") {
std::string param1 = control["text"].GetString();
std::string param2 = control["redirect"].GetString();
newDialog->m_controls.push_back(new Button(x, y, param1.c_str(), [newDialog,param2](){ DialogRedirect(newDialog,param2); } ) );
} else if (childType == "ToolButton") {
int param1 = control["icon"].GetInt();
std::string param2 = control["redirect"].GetString();
newDialog->m_controls.push_back(new ToolButton(x, y, param1, [newDialog,param2](){ DialogRedirect(newDialog,param2); } ) );
}
}
}
return newDialog;
}
void SystemLogger(const char* a_tag, const char* a_fmt, va_list a_args)
{
printf("[%s] ", a_tag);
vprintf(a_fmt, a_args);
printf("\n");
}
int main(int argc, char* argv[])
{
Document jsonDoc;
Resource* res = LoadFile("ui.json", true);
if (!jsonDoc.Parse((char*)res->data.data()).HasParseError()) {
Dialog *jsonScreen = LoadDialogFromJson(jsonDoc);
} else {
printf("json parse error of ui json\n");
}
return 0;
}