Cogs.Core
GuiManager.cpp
1#include "Serialization/JsonParser.h"
2#include "Resources/AssetDefinition.h"
3#include "GuiManager.h"
4
5#include "Context.h"
6
7#include "Resources/ResourceStore.h"
8
9Cogs::Core::GuiManager::~GuiManager()
10{
11}
12
13void Cogs::Core::GuiManager::initialize()
14{
15}
16
17Cogs::Core::GuiDocumentHandle Cogs::Core::GuiManager::load(const StringView & source, ResourceId /*resourceId*/)
18{
19 auto loadInfo = createLoadInfo();
20
21 loadInfo->resourcePath = source.to_string();
22
23 return loadResource(loadInfo);
24}
25
27{
28 auto guiDocument = get(loadInfo->handle);
29
30 auto masterContent = context->resourceStore->getResourceContentString("Gui/Css/Master.css", ResourceStoreFlags::NoCachedContent);
31
32 if (masterContent.empty()) {
33 guiDocument->setFailedLoad();
34 setProcessed(loadInfo);
35 return;
36 }
37
38 guiDocument->htmlContext.load_master_stylesheet(masterContent.c_str());
39 guiDocument->htmlContent = context->resourceStore->getResourceContentString(loadInfo->resourcePath, ResourceStoreFlags::NoCachedContent);
40
41 setProcessed(loadInfo);
42}
43
44bool Cogs::Core::GuiManager::doesManage(DefaultValueType valueType)
45{
46 return valueType == DefaultValueType::Gui;
47}
48
49void Cogs::Core::GuiManager::applyFieldValue(void* object, const Reflection::Field* field, const FieldValue& fieldValue)
50{
51 assert(fieldValue.type == DefaultValueType::Gui);
52
53 ResourceHandleBase guiDoc;
54 if (fieldValue.value.front() == '$') {
55 guiDoc = getByName(fieldValue.value.substr(1));
56 }
57 else {
58 guiDoc = load(fieldValue.value, NoResourceId);
59 }
60 auto * ptr = field->getPtr<ResourceHandleBase>(object);
61 *ptr = guiDoc;
62}
63
64void Cogs::Core::GuiManager::readSource(Context* /*ctx*/, ResourceDefinition& definition, const void* jsonResourcePtr)
65{
66 const auto & jsonResource = *(const rapidjson::Value*)jsonResourcePtr;
67
68 const auto & source = jsonResource["source"];
69
70 std::string srcString(source.GetString(), source.GetStringLength());
71
72 auto guiDocument = load(srcString, NoResourceId);
73 guiDocument->setName(definition.name);
74}
void handleLoad(GuiLoadInfo *loadInfo) override
Handler for resource loading.
Definition: GuiManager.cpp:26
Field definition describing a single data member of a data structure.
Definition: Field.h:68
FieldValueType * getPtr(void *container) const
Get a pointer to this field on the given container.
Definition: Field.h:112
@ NoCachedContent
Never use cached data.
DefaultValueType
Defines value types for default values.
std::string resourcePath
Resource path. Used to locate resource.
ResourceHandleBase handle
Handle to resource structure for holding actual resource data.