This commit is contained in:
vczh
2015-12-24 03:53:29 -08:00
parent fc1ce78bad
commit e4b89340bd
7 changed files with 28 additions and 11 deletions
+4 -3
View File
@@ -43434,7 +43434,7 @@ GuiResourceFolder
} }
} }
void GuiResourceFolder::InitializeResourceFolder(GuiResourcePrecompileContext& context) void GuiResourceFolder::InitializeResourceFolder(GuiResourceInitializeContext& context)
{ {
FOREACH(Ptr<GuiResourceItem>, item, items.Values()) FOREACH(Ptr<GuiResourceItem>, item, items.Values())
{ {
@@ -43744,7 +43744,7 @@ GuiResource
} }
} }
void GuiResource::Initialize() void GuiResource::Initialize(GuiResourceUsage usage)
{ {
auto precompiledFolder = GetFolder(L"Precompiled"); auto precompiledFolder = GetFolder(L"Precompiled");
if (!precompiledFolder) if (!precompiledFolder)
@@ -43753,10 +43753,11 @@ GuiResource
return; return;
} }
GuiResourcePrecompileContext context; GuiResourceInitializeContext context;
context.rootResource = this; context.rootResource = this;
context.resolver = new GuiResourcePathResolver(this, workingDirectory); context.resolver = new GuiResourcePathResolver(this, workingDirectory);
context.targetFolder = precompiledFolder; context.targetFolder = precompiledFolder;
context.usage = usage;
vint maxPass = GetResourceResolverManager()->GetMaxInitializePassIndex(); vint maxPass = GetResourceResolverManager()->GetMaxInitializePassIndex();
for (vint i = 0; i <= maxPass; i++) for (vint i = 0; i <= maxPass; i++)
+16 -3
View File
@@ -3363,6 +3363,7 @@ Resource Structure
class DocumentModel; class DocumentModel;
class GuiResourcePathResolver; class GuiResourcePathResolver;
struct GuiResourcePrecompileContext; struct GuiResourcePrecompileContext;
struct GuiResourceInitializeContext;
/// <summary>Resource item.</summary> /// <summary>Resource item.</summary>
class GuiResourceItem : public GuiResourceNodeBase, public Description<GuiResourceItem> class GuiResourceItem : public GuiResourceNodeBase, public Description<GuiResourceItem>
@@ -3430,7 +3431,7 @@ Resource Structure
void LoadResourceFolderFromBinary(DelayLoadingList& delayLoadings, stream::internal::Reader& reader, collections::List<WString>& typeNames, collections::List<WString>& errors); void LoadResourceFolderFromBinary(DelayLoadingList& delayLoadings, stream::internal::Reader& reader, collections::List<WString>& typeNames, collections::List<WString>& errors);
void SaveResourceFolderToBinary(stream::internal::Writer& writer, collections::List<WString>& typeNames); void SaveResourceFolderToBinary(stream::internal::Writer& writer, collections::List<WString>& typeNames);
void PrecompileResourceFolder(GuiResourcePrecompileContext& context, collections::List<WString>& errors); void PrecompileResourceFolder(GuiResourcePrecompileContext& context, collections::List<WString>& errors);
void InitializeResourceFolder(GuiResourcePrecompileContext& context); void InitializeResourceFolder(GuiResourceInitializeContext& context);
public: public:
/// <summary>Create a resource folder.</summary> /// <summary>Create a resource folder.</summary>
GuiResourceFolder(); GuiResourceFolder();
@@ -3494,6 +3495,12 @@ Resource Structure
Resource Resource
***********************************************************************/ ***********************************************************************/
enum class GuiResourceUsage
{
DevelopmentTool,
Application,
};
/// <summary>Resource. A resource is a root resource folder that does not have a name.</summary> /// <summary>Resource. A resource is a root resource folder that does not have a name.</summary>
class GuiResource : public GuiResourceFolder, public Description<GuiResource> class GuiResource : public GuiResourceFolder, public Description<GuiResource>
{ {
@@ -3542,7 +3549,7 @@ Resource
void Precompile(collections::List<WString>& errors); void Precompile(collections::List<WString>& errors);
/// <summary>Initialize a precompiled resource.</summary> /// <summary>Initialize a precompiled resource.</summary>
void Initialize(); void Initialize(GuiResourceUsage usage);
/// <summary>Get a contained document model using a path like "Packages\Application\Name". If the path does not exists or the type does not match, an exception will be thrown.</summary> /// <summary>Get a contained document model using a path like "Packages\Application\Name". If the path does not exists or the type does not match, an exception will be thrown.</summary>
/// <returns>The containd resource object.</returns> /// <returns>The containd resource object.</returns>
@@ -3689,6 +3696,12 @@ Resource Type Resolver
virtual void Precompile(Ptr<GuiResourceItem> resource, GuiResourcePrecompileContext& context, collections::List<WString>& errors) = 0; virtual void Precompile(Ptr<GuiResourceItem> resource, GuiResourcePrecompileContext& context, collections::List<WString>& errors) = 0;
}; };
/// <summary>Provide a context for resource initializing</summary>
struct GuiResourceInitializeContext : GuiResourcePrecompileContext
{
GuiResourceUsage usage;
};
/// <summary> /// <summary>
/// Represents a precompiler for resources of a specified type. /// Represents a precompiler for resources of a specified type.
/// Current resources that needs precompiling: /// Current resources that needs precompiling:
@@ -3706,7 +3719,7 @@ Resource Type Resolver
/// <param name="resource">The resource to initializer.</param> /// <param name="resource">The resource to initializer.</param>
/// <param name="context">The context for initializing.</param> /// <param name="context">The context for initializing.</param>
/// <param name="errors">All collected errors during loading a resource.</param> /// <param name="errors">All collected errors during loading a resource.</param>
virtual void Initialize(Ptr<GuiResourceItem> resource, GuiResourcePrecompileContext& context) = 0; virtual void Initialize(Ptr<GuiResourceItem> resource, GuiResourceInitializeContext& context) = 0;
}; };
/// <summary>Represents a symbol type for loading a resource without a preload type.</summary> /// <summary>Represents a symbol type for loading a resource without a preload type.</summary>
+7 -4
View File
@@ -977,12 +977,12 @@ GuiInstanceLoaderManager
return GlobalStringKey::Empty; return GlobalStringKey::Empty;
} }
bool SetResource(const WString& name, Ptr<GuiResource> resource)override bool SetResource(const WString& name, Ptr<GuiResource> resource, GuiResourceUsage usage)override
{ {
vint index = resources.Keys().IndexOf(name); vint index = resources.Keys().IndexOf(name);
if (index != -1) return false; if (index != -1) return false;
resource->Initialize(); resource->Initialize(usage);
resources.Add(name, resource); resources.Add(name, resource);
GetClassesInResource(resource, resource); GetClassesInResource(resource, resource);
return true; return true;
@@ -1588,7 +1588,7 @@ Compiled Workflow Type Resolver (Script)
return 2; return 2;
} }
void Initialize(Ptr<GuiResourceItem> resource, GuiResourcePrecompileContext& context)override void Initialize(Ptr<GuiResourceItem> resource, GuiResourceInitializeContext& context)override
{ {
if (auto compiled = resource->GetContent().Cast<GuiInstanceCompiledWorkflow>()) if (auto compiled = resource->GetContent().Cast<GuiInstanceCompiledWorkflow>())
{ {
@@ -1597,7 +1597,10 @@ Compiled Workflow Type Resolver (Script)
case 0: case 0:
if (compiled->type == GuiInstanceCompiledWorkflow::ViewModel) if (compiled->type == GuiInstanceCompiledWorkflow::ViewModel)
{ {
compiled->Initialize(false); if (context.usage == GuiResourceUsage::DevelopmentTool)
{
compiled->Initialize(false);
}
} }
break; break;
case 1: case 1:
+1 -1
View File
@@ -589,7 +589,7 @@ Instance Loader Manager
virtual description::ITypeDescriptor* GetTypeDescriptorForType(GlobalStringKey typeName) = 0; virtual description::ITypeDescriptor* GetTypeDescriptorForType(GlobalStringKey typeName) = 0;
virtual void GetVirtualTypes(collections::List<GlobalStringKey>& typeNames) = 0; virtual void GetVirtualTypes(collections::List<GlobalStringKey>& typeNames) = 0;
virtual GlobalStringKey GetParentTypeForVirtualType(GlobalStringKey virtualType) = 0; virtual GlobalStringKey GetParentTypeForVirtualType(GlobalStringKey virtualType) = 0;
virtual bool SetResource(const WString& name, Ptr<GuiResource> resource) = 0; virtual bool SetResource(const WString& name, Ptr<GuiResource> resource, GuiResourceUsage usage = GuiResourceUsage::Application) = 0;
virtual Ptr<GuiResource> GetResource(const WString& name) = 0; virtual Ptr<GuiResource> GetResource(const WString& name) = 0;
virtual Ptr<GuiInstanceConstructorResult> RunInstanceConstructor(const WString& classFullName, description::Value instance) = 0; virtual Ptr<GuiInstanceConstructorResult> RunInstanceConstructor(const WString& classFullName, description::Value instance) = 0;
}; };
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.