private DocumentMeta AddNewDocument(HeliosObject profileObject) { DocumentMeta meta = FindDocumentMeta(profileObject); if (meta != null) { meta.document.IsSelected = true; return(meta); } HeliosEditorDocument editor = CreateDocumentEditor(profileObject); if (editor != null) { LayoutDocument document = new LayoutDocument(); document.Title = editor.Title; document.IsSelected = true; document.ContentId = HeliosSerializer.GetReferenceName(profileObject); document.Content = CreateDocumentContent(editor); DocumentPane.Children.Add(document); document.Closed += Document_Closed; meta = AddDocumentMeta(profileObject, document, editor); profileObject.PropertyChanged += DocumentObject_PropertyChanged; } return(meta); }
void LayoutSerializer_LayoutSerializationCallback(object sender, LayoutSerializationCallbackEventArgs e) { if (Profile != null && e.Model is LayoutDocument) { HeliosObject profileObject = HeliosSerializer.ResolveReferenceName(Profile, e.Model.ContentId); HeliosEditorDocument editor = CreateDocumentEditor(profileObject); profileObject.PropertyChanged += DocumentObject_PropertyChanged; e.Content = CreateDocumentContent(editor); e.Model.Closed += Document_Closed; AddDocumentMeta(profileObject, (LayoutDocument)e.Model, editor); } }
void DocumentObject_PropertyChanged(object sender, PropertyChangedEventArgs e) { DocumentMeta meta = FindDocumentMeta(sender as HeliosObject); if (meta == null) { throw new InvalidOperationException("Property Changed closed called for a profile object not found in meta data."); } if (e.PropertyName.Equals("Name")) { meta.document.Title = meta.editor.Title; meta.document.ContentId = "doc:" + HeliosSerializer.GetReferenceName(meta.hobj); } }
void LayoutSerializer_LayoutSerializationCallback(object sender, LayoutSerializationCallbackEventArgs e) { if (Profile != null && e.Model is LayoutDocument) { HeliosObject profileObject = HeliosSerializer.ResolveReferenceName(Profile, e.Model.ContentId); if (profileObject != null) { HeliosEditorDocument editor = CreateDocumentEditor(profileObject); profileObject.PropertyChanged += DocumentObject_PropertyChanged; e.Content = CreateDocumentContent(editor); //DocumentPane.Children.Add((LayoutDocument)e.Model); e.Model.Closed += Document_Closed; AddDocumentMeta(profileObject, (LayoutDocument)e.Model, editor); } else { ConfigManager.LogManager.LogDebug("Layout Serializer: Unable to resolve Layout Document " + e.Model.ContentId); } } }
private DocumentMeta AddNewDocument(HeliosObject profileObject) { DocumentMeta meta = FindDocumentMeta(profileObject); if (meta != null) { meta.document.IsSelected = true; return(meta); } HeliosEditorDocument editor = CreateDocumentEditor(profileObject); if (editor != null) { LayoutDocument document = new LayoutDocument(); document.Title = editor.Title; document.IsSelected = true; document.ContentId = HeliosSerializer.GetReferenceName(profileObject); document.Content = CreateDocumentContent(editor); // Since a new LayoutRoot object is created upon de-serialization, the Child LayoutDocumentPane no longer belongs to the LayoutRoot // therefore the LayoutDocumentPane 'DocumentPane' must be referred to dynamically // change added by yzfanimal LayoutDocumentPane DocumentPane = this.DockManager.Layout.Descendents().OfType <LayoutDocumentPane>().FirstOrDefault(); if (DocumentPane != null) { DocumentPane.Children.Add(document); } document.Closed += Document_Closed; meta = AddDocumentMeta(profileObject, document, editor); profileObject.PropertyChanged += DocumentObject_PropertyChanged; } return(meta); }
private static void SerializeBindings(HeliosSerializer serializer, HeliosVisual control, XmlWriter xmlWriter, HeliosBindingCollection serializedBindings) { serializer.SerializeBindings(control.InputBindings, xmlWriter, serializedBindings); serializer.SerializeBindings(control.OutputBindings, xmlWriter, serializedBindings); foreach (HeliosVisual child in control.Children) { SerializeBindings(serializer, child, xmlWriter, serializedBindings); } }
private static void CopySelection(HeliosVisualContainer root, HeliosVisualCollection controls) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; // Loop through controls and add them in the proper visual order for serialization to the copy buffer. HeliosVisualCollection copiedControls = new HeliosVisualCollection(); foreach (HeliosVisual visual in root.Children) { if (controls.Contains(visual)) { copiedControls.Add(visual); } } StringBuilder sb = new StringBuilder(); XmlWriter xmlWriter = XmlWriter.Create(sb, settings); xmlWriter.WriteStartElement("HeliosCopyBuffer"); xmlWriter.WriteElementString("CopyRoot", HeliosSerializer.GetVisualPath(root)); HeliosSerializer serializer = new HeliosSerializer(null); serializer.SerializeControls(copiedControls, xmlWriter); HeliosBindingCollection serializedBindings = new HeliosBindingCollection(); xmlWriter.WriteStartElement("Bindings"); foreach (HeliosVisual control in copiedControls) { SerializeBindings(serializer, control, xmlWriter, serializedBindings); } xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); xmlWriter.Close(); SetClipboard("Helios.Visuals", sb.ToString()); }
private static void Paste_Executed(object target, ExecutedRoutedEventArgs e) { HeliosVisualContainerEditor editor = target as HeliosVisualContainerEditor; if (editor != null && Clipboard.ContainsData("Helios.Visuals")) { XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true; settings.IgnoreWhitespace = true; settings.CloseInput = true; StringReader reader = new StringReader(Clipboard.GetText()); XmlReader xmlReader = XmlReader.Create(reader, settings); HeliosSerializer serialzier = new HeliosSerializer(editor.Dispatcher); ConfigManager.UndoManager.StartBatch(); xmlReader.ReadStartElement("HeliosCopyBuffer"); string copyRoot = xmlReader.ReadElementString("CopyRoot"); HeliosVisualCollection newControls = new HeliosVisualCollection(); serialzier.DeserializeControls(newControls, xmlReader); List<HeliosVisual> localObjects = new List<HeliosVisual>(); foreach (HeliosVisual control in newControls) { localObjects.Add(control); } HeliosBindingCollection bindings = serialzier.DeserializeBindings(editor.VisualContainer, copyRoot, localObjects, xmlReader); xmlReader.ReadEndElement(); newControls.Clear(); if (localObjects.Count > 0) { editor.SelectedItems.Clear(); foreach (HeliosVisual control in localObjects) { if (control.Left + control.Width > editor.VisualContainer.Width) { control.Left = Math.Max(0d, editor.VisualContainer.Width - control.DisplayRectangle.Width); } if (control.Top + control.Height > editor.VisualContainer.Height) { control.Top = Math.Max(0d, editor.VisualContainer.Height - control.DisplayRectangle.Height); } control.Name = editor.VisualContainer.Children.GetUniqueName(control); editor.VisualContainer.Children.Add(control); ConfigManager.UndoManager.AddUndoItem(new ControlAddUndoEvent(editor.VisualContainer, control)); editor.SelectedItems.Add(control); } foreach (HeliosBinding binding in bindings) { ConfigManager.UndoManager.AddUndoItem(new BindingAddUndoEvent(binding)); binding.Trigger.Source.OutputBindings.Add(binding); binding.Action.Target.InputBindings.Add(binding); } } ConfigManager.UndoManager.CloseBatch(); xmlReader.Close(); } }