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())
{
@@ -43744,7 +43744,7 @@ GuiResource
}
}
void GuiResource::Initialize()
void GuiResource::Initialize(GuiResourceUsage usage)
{
auto precompiledFolder = GetFolder(L"Precompiled");
if (!precompiledFolder)
@@ -43753,10 +43753,11 @@ GuiResource
return;
}
GuiResourcePrecompileContext context;
GuiResourceInitializeContext context;
context.rootResource = this;
context.resolver = new GuiResourcePathResolver(this, workingDirectory);
context.targetFolder = precompiledFolder;
context.usage = usage;
vint maxPass = GetResourceResolverManager()->GetMaxInitializePassIndex();
for (vint i = 0; i <= maxPass; i++)
+16 -3
View File
@@ -3363,6 +3363,7 @@ Resource Structure
class DocumentModel;
class GuiResourcePathResolver;
struct GuiResourcePrecompileContext;
struct GuiResourceInitializeContext;
/// <summary>Resource item.</summary>
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 SaveResourceFolderToBinary(stream::internal::Writer& writer, collections::List<WString>& typeNames);
void PrecompileResourceFolder(GuiResourcePrecompileContext& context, collections::List<WString>& errors);
void InitializeResourceFolder(GuiResourcePrecompileContext& context);
void InitializeResourceFolder(GuiResourceInitializeContext& context);
public:
/// <summary>Create a resource folder.</summary>
GuiResourceFolder();
@@ -3493,6 +3494,12 @@ Resource Structure
/***********************************************************************
Resource
***********************************************************************/
enum class GuiResourceUsage
{
DevelopmentTool,
Application,
};
/// <summary>Resource. A resource is a root resource folder that does not have a name.</summary>
class GuiResource : public GuiResourceFolder, public Description<GuiResource>
@@ -3542,7 +3549,7 @@ Resource
void Precompile(collections::List<WString>& errors);
/// <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>
/// <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;
};
/// <summary>Provide a context for resource initializing</summary>
struct GuiResourceInitializeContext : GuiResourcePrecompileContext
{
GuiResourceUsage usage;
};
/// <summary>
/// Represents a precompiler for resources of a specified type.
/// Current resources that needs precompiling:
@@ -3706,7 +3719,7 @@ Resource Type Resolver
/// <param name="resource">The resource to initializer.</param>
/// <param name="context">The context for initializing.</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>
+7 -4
View File
@@ -977,12 +977,12 @@ GuiInstanceLoaderManager
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);
if (index != -1) return false;
resource->Initialize();
resource->Initialize(usage);
resources.Add(name, resource);
GetClassesInResource(resource, resource);
return true;
@@ -1588,7 +1588,7 @@ Compiled Workflow Type Resolver (Script)
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>())
{
@@ -1597,7 +1597,10 @@ Compiled Workflow Type Resolver (Script)
case 0:
if (compiled->type == GuiInstanceCompiledWorkflow::ViewModel)
{
compiled->Initialize(false);
if (context.usage == GuiResourceUsage::DevelopmentTool)
{
compiled->Initialize(false);
}
}
break;
case 1:
+1 -1
View File
@@ -589,7 +589,7 @@ Instance Loader Manager
virtual description::ITypeDescriptor* GetTypeDescriptorForType(GlobalStringKey typeName) = 0;
virtual void GetVirtualTypes(collections::List<GlobalStringKey>& typeNames) = 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<GuiInstanceConstructorResult> RunInstanceConstructor(const WString& classFullName, description::Value instance) = 0;
};
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.