private static IEditor RestoreEditorStructure( TransferContentTreeNode content, Externalizer externalizer, IControllerFactory factory ) { var editor = RestoreEditorOnly(content, externalizer, factory); var container = editor.Controller as IContainerController; if (container == null) { return(editor); } var tmpParent = default(object); if (externalizer.ExtendedData.ContainsKey(EditorConsts.RestoreEditorStructureParentModel)) { tmpParent = externalizer.ExtendedData[EditorConsts.RestoreEditorStructureParentModel]; } externalizer.ExtendedData[EditorConsts.RestoreEditorStructureParentModel] = editor.Model; foreach (var childContent in content.Children) { var childEditor = RestoreEditorStructure(childContent, externalizer, factory); if (container.CanContainChild(childEditor.Controller.ModelDescriptor)) { editor.AddChildEditor(childEditor); container.InsertChild(childEditor.Model, container.ChildCount); } } if (tmpParent != null) { externalizer.ExtendedData[EditorConsts.RestoreEditorStructureParentModel] = tmpParent; } return(editor); }
// ------------------------------ // private // ------------------------------ /// <summary> /// prototypeのFigureを複製してmodelCloneをModelとする複製を返す. /// 子孫は複製しない. /// </summary> //private static Editor CloneEditorOnly(IEditor prototype, object modelClone) { // var clone = new Editor(); // var ctrlClone = prototype.Site.ControllerFactory.CreateController(modelClone); // var figClone = prototype.Figure.CloneFigureOnly(); // foreach (var childfig in prototype.Figure.Children) { // /// editor parts figure (= editor figureでないfigure)のみ追加 // if (childfig.GetRole() != EditorConsts.EditorFigureFigureRole) { // figClone.Children.Add(childfig.CloneFigure(null)); // } // } // clone.Model = modelClone; // clone._Figure = figClone; // clone._Controller = ctrlClone; // ctrlClone.ConfigureEditor(clone); // return clone; //} private static TransferContentTreeNode CreateTransferContentNode(IEditor editor, Externalizer externalizer) { var content = CreateTransferContentOnly(editor, externalizer); var ret = new TransferContentTreeNode(content); foreach (var child in editor.Children) { ret.Children.Add(CreateTransferContentNode(child, externalizer)); } return(ret); }
private static IEditor RestoreEditorOnly( TransferContentTreeNode content, Externalizer externalizer, IControllerFactory factory ) { /// var type = content.Value.Item1; // restoreには使わない var modelMem = content.Value.ModelMemento; var figMem = content.Value.FigureMemento; var model = externalizer.Load(modelMem); var fig = externalizer.Load(figMem) as IFigure; var ret = CreateEditorWithFigure(model, fig, factory); if (content.Value.Initializer != null) { content.Value.Initializer(ret, content.Value.TransferInitArgs); } return(ret); }
public TransferContentTree(TransferContentTreeNode root) : base(root) { }