コード例 #1
0
        protected override bool OnSave(Metadata.SaveContext context, TextBlock block, ref bool skipSave, out string error)
        {
            if (!base.OnSave(context, block, ref skipSave, out error))
            {
                return(false);
            }

            return(true);
        }
コード例 #2
0
        //static Component LoadComponentFromTextBlockInternal( Metadata.LoadContext overrideContextObject, TextBlock block, string loadedFromFile,
        //Resource.Instance createdByResource, bool? componentSetEnabled, bool componentCreateHierarchyController, out string error )

        //public static Component LoadComponentFromTextBlock( Resource.Instance createdByResource, Metadata.LoadContext overrideContextObject,
        //	bool? componentSetEnabled, bool componentCreateHierarchyController, out string error )
        //{
        //	var block = createdByResource.Owner.LoadedBlock;
        //	var loadedFromFile = createdByResource.Owner.Name;
        //	return LoadComponentFromTextBlockInternal( createdByResource, block, loadedFromFile, overrideContextObject, componentSetEnabled,
        //		componentCreateHierarchyController, out error );
        //}

        //public static Component LoadComponentFromTextBlock( TextBlock block, string loadedFromFile, Metadata.LoadContext overrideContextObject,
        //	bool? componentSetEnabled, bool componentCreateHierarchyController, out string error )
        //{
        //	return LoadComponentFromTextBlockInternal( null, block, loadedFromFile, overrideContextObject, componentSetEnabled,
        //		componentCreateHierarchyController, out error );
        //}

        //public static Component LoadComponentFromTextBlockXX( Resource.Instance ins, Metadata.LoadContext overrideContextObject,
        //bool? componentSetEnabled, bool componentCreateHierarchyController, out string error )
        ////public static Component LoadComponentFromTextBlock( TextBlock block, string loadedFromFile, Metadata.LoadContext overrideContextObject,
        ////	out string error )
        //{
        //	var block = ins.Owner.LoadedBlock;
        //	var loadedFromFile = ins.Owner.Name;

        //	loadedFromFile = VirtualPathUtils.NormalizePath( loadedFromFile );

        //	Metadata.LoadContext context = overrideContextObject;
        //	if( context == null )
        //		context = new Metadata.LoadContext();
        //	context.virtualFileName = loadedFromFile;

        //	error = "";

        //	if( block.Children.Count != 1 )
        //	{
        //		//!!!!
        //		Log.Fatal( "impl" );
        //	}

        //	TextBlock componentBlock = block.Children[ 0 ];
        //	if( componentBlock.Name != ".component" )
        //	{
        //		//!!!!
        //		Log.Fatal( "impl" );
        //	}

        //	if( string.IsNullOrEmpty( componentBlock.Data ) )
        //	{
        //		//!!!!
        //		Log.Fatal( "impl" );
        //	}

        //	Metadata.TypeInfo type = MetadataManager.GetType( componentBlock.Data );
        //	if( type == null )
        //	{
        //		//!!!!
        //		Log.Fatal( "impl" );
        //	}

        //	var component = (Component)type.InvokeInstance( null );

        //	xx xx;
        //	//set ResultObject for resource instance
        //	ins.ResultObject = component;

        //	//create disabled hierarchy controller
        //	if( componentCreateHierarchyController )
        //		ComponentUtils.CreateHierarchyControllerForRootComponent( component, ins, false );//, true );

        //	//create context, init tree structure of components
        //	context.rootComponentItem = new Metadata.LoadContext.ComponentItem();
        //	context.rootComponentItem.textBlock = componentBlock;
        //	LoadContext_InitComponentItemsRecursive( context.rootComponentItem );


        //	xx xx;
        //	//processing
        //	bool changed;
        //	do
        //	{
        //		LoadContext_ProcessNotCompiledComponentItems( context, out changed );
        //	} while( changed );

        //	if( !context.rootComponentItem.loaded )
        //	{
        //		//!!!!
        //		Log.Fatal( "impl" );
        //	}

        //	xx xx;//сортировать компоненты где-то



        //	if( componentSetEnabled != null )
        //		component.Enabled = componentSetEnabled.Value;

        //	//enable hierarchy controller
        //	if( component.HierarchyController != null )
        //		component.HierarchyController.HierarchyEnabled = true;


        //	xx xx;//всё в этом методе



        //	//!!!!_LoadComponentFromTextBlockInternal

        //	string error4;
        //	if( !component._LoadHierarchy( context, componentBlock, out error4 ) )
        //	{
        //		//!!!!
        //		Log.Fatal( "impl" );

        //		//!!!!!?
        //		component = null;
        //	}

        //	xx xx;

        //	string error3;
        //	if( !component._LoadFromTextBlock( context, componentBlock, out error3 ) )
        //	{
        //		//!!!!
        //		Log.Fatal( "impl" );

        //		//!!!!!?
        //		component = null;
        //	}

        //	return component;
        //}

        //!!!!такой метод полезен или открыть Component._Save
        //public static bool SaveComponentToTextBlock( Component component, string realFileName, Component.SaveContext overrideContextObject,
        //	out string error )
        //{
        //}

        public static bool SaveComponentToFile(Component component, string realFileName, Metadata.SaveContext overrideContextObject, out string error)
        {
            realFileName = VirtualPathUtility.NormalizePath(realFileName);

            Metadata.SaveContext context = overrideContextObject;
            if (context == null)
            {
                context = new Metadata.SaveContext();
            }
            context.realFileName = realFileName;

            component.HierarchyController?.ProcessDelayedOperations();

            //!!!!было
            //map.fileName = virtualFileName;

            string realDirectoryName = Path.GetDirectoryName(realFileName);

            if (!Directory.Exists(realDirectoryName))
            {
                try
                {
                    Directory.CreateDirectory(realDirectoryName);
                }
                catch
                {
                    error = string.Format("Unable to create directory \"{0}\".", realDirectoryName);
                    return(false);
                }
            }

            TextBlock rootBlock = new TextBlock();

            //!!!!!".createdBy"
            //mapBlock.SetAttribute( ".engineVersion", EngineVersionInformation.Version );

            //!!!!_SaveToTextBlockInternal

            component._SaveToTextBlock(context, rootBlock, out _, out error);
            if (!string.IsNullOrEmpty(error))
            {
                return(false);
            }

            try
            {
                using (StreamWriter writer = new StreamWriter(realFileName))
                {
                    writer.Write(rootBlock.DumpToString());
                }
            }
            catch
            {
                error = string.Format("Unable to save file \"{0}\".", realFileName);
                return(false);
            }

            //Map.Instance.savedRealFileDirectory = Map.Instance.GetRealFileDirectory();

            error = "";
            return(true);
        }
コード例 #3
0
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        public static bool _SaveToTextBlockInternal(Component component, Metadata.SaveContext context, TextBlock parentBlock, out bool skipSave, out string error)
        {
            return(component._SaveToTextBlock(context, parentBlock, out skipSave, out error));
        }