Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 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);
     }
 }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
 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);
         }
     }
 }
Ejemplo n.º 5
0
        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();
            }
        }