Newer
Older
Import / applications / HighwayDash / ports / Framework / DialogJson.cpp
/*
  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;
}