示例#1
0
        private void expandDelegate(object startObj)
        {
            ViewerNode node = (ViewerNode)startObj;
            var        all  = node.AsDepthFirstEnumerable(x => x.ChildNodes); //this enumerable will only enumerate when accessed

            foreach (var viewerNode in all)
            {
                //call ChildNodes to expand them
                var ignore = viewerNode.ChildNodes;
                if (_thread != Thread.CurrentThread)
                {
                    break;
                }
            }
//            SystemSounds.Beep.Play();
//            foreach (var viewerNode in all)
//            {
//                var ignore = viewerNode.LineInfo;
            //call LineInfo to calculate them
//                if (_thread != Thread.CurrentThread)
//                {
//                    break;
//                }
//            }
//            SystemSounds.Beep.Play();
        }
示例#2
0
        /// <summary>
        /// Generates a test case
        /// </summary>
        /// <param name="inputFile">Path to input file to generate test case from</param>
        /// <param name="doc">XmlDocument containing data to generate test case from</param>
        /// <param name="schemaPath">Path to schema file</param>
        /// <returns>A StreamReader containing the test case</returns>
        public StreamReader GenerateTestCase(string inputFile, XmlDocument doc, string schemaPath)
        {
            ViewerNode rootNode = new ViewerNode(doc.DocumentElement);

            // Call the method overload
            return(GenerateTestCase(inputFile, rootNode, schemaPath));
        }
示例#3
0
        protected override void Execute(EditorFrame ef, TreeViewItem parameter, ViewerNode selectedNode, XmlDocument xmldoc, XmlNode node, XmlNode parentNode)
        {
            var comment = xmldoc.CreateComment(node.OuterXml);

            parentNode.ReplaceChild(comment, node);
            ef.XmlEditor.Text = xmldoc.ToUTF8String();
        }
示例#4
0
        protected override void Execute(EditorFrame ef)
        {
            TreeViewItem selected = ((TreeViewItem)ef._editorTree.tree.SelectedItem);
            ViewerNode   node     = (ViewerNode)selected.Tag;

            ef.SetSchemaInfo(node.SchemaInfo);
        }
示例#5
0
        private void treeResult_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e)
        {
            if (_treeResult.SelectedItem as TreeViewItem == null)
            {
                return;
            }

            TreeViewItem selected = ((TreeViewItem)_treeResult.SelectedItem);

            //expand on click
            selected.IsExpanded = true;

            if (selected.Tag != null)
            {
                if (selected.Tag is ViewerNode)
                {
                    ViewerNode vn = (ViewerNode)selected.Tag;
                    setCursor(vn.LineInfo, vn.Name);
                }
                else if (selected.Tag is XPathNavigator)
                {
                    XPathNavigator xpn = (XPathNavigator)selected.Tag;
                    IXmlLineInfo   li  = xpn as IXmlLineInfo;
                    if (li != null)
                    {
                        setCursor(li, xpn.Name);
                    }
                }
                else
                {
                    Debug.Fail("");
                }
            }
        }
示例#6
0
        protected override bool CanExecute(EditorFrame ef)
        {
            if (ef.XmlEditor == null)
            {
                return(false);
            }

            TreeViewItem selected = ((TreeViewItem)ef._editorTree.tree.SelectedItem);

            if (selected == null)
            {
                return(false);
            }
            if (selected.Tag == null)
            {
                return(false);
            }

            ViewerNode selectedNode = (ViewerNode)selected.Tag;
            XmlNode    node         = selectedNode.OriginalNode;

            if (node == null)
            {
                return(false);
            }
            if (node.OwnerDocument == null)
            {
                return(false);
            }

            return(true);
        }
示例#7
0
 public void SetNodeToExpand(ViewerNode node)
 {
     _thread = new Thread(expandDelegate)
     {
         IsBackground = true
     };
     _thread.Start(node);
 }
示例#8
0
        void tree_SelectionChanged(ViewerNode obj)
        {
            if (obj == null)
            {
                return;
            }

            highlightFragment(obj);
        }
示例#9
0
        protected override void Execute(EditorFrame ef, TreeViewItem parameter, ViewerNode selectedNode, XmlDocument xmldoc, XmlNode node, XmlNode parentNode)
        {
            string newName = InputBox.Show(Application.Current.MainWindow, "Rename", "New name of the node", node.Name);

            if (newName != null)
            {
                RenameNode(xmldoc, node, node.NamespaceURI, newName);
                ef.XmlEditor.Text = xmldoc.ToUTF8String();
            }
        }
示例#10
0
        public TreeViewItem SelectNodeBasedOnCursor(TextLocation loc)
        {
            ItemCollection items = _tree.Items;

            Debug.Assert(items.Count <= 1);
            if (items.Count != 1)
            {
                return(null);
            }

            LazyTreeViewItem root = (LazyTreeViewItem)_tree.Items[0];
            IEnumerable <LazyTreeViewItem> allChilds = root.AsDepthFirstEnumerable(
                x => {
                x.Expand();
                return(x.Items.Cast <LazyTreeViewItem>());
            }
                );

            TreeViewItem match = null;

            foreach (LazyTreeViewItem child in allChilds)
            {
                if (child.Tag != null)
                {
                    ViewerNode   node     = (ViewerNode)child.Tag;
                    IXmlLineInfo lineInfo = node.LineInfo;
                    if (lineInfo != null)
                    {
                        if (lineInfo.LineNumber == loc.Line && lineInfo.LinePosition <= loc.Column)
                        {
                            //last one counts
                            match = child;
                        }
                        if (lineInfo.LineNumber > loc.Line || (lineInfo.LineNumber == loc.Line && lineInfo.LinePosition > loc.Column))
                        {
                            break;
                        }
                    }
                }
            }

            if (match != null)
            {
                _tree.SelectedItemChanged -= tree_SelectedItemChanged;
                match.IsSelected           = true;
                match.BringIntoView();
                _tree.SelectedItemChanged += tree_SelectedItemChanged;
            }
            return(match);
        }
示例#11
0
        protected override void Execute(EditorFrame ef)
        {
            TreeViewItem selected = ((TreeViewItem)ef._editorTree.tree.SelectedItem);

            if (selected == null)
            {
                return;
            }

            if (selected.Tag != null)
            {
                ViewerNode selectedNode = (ViewerNode)selected.Tag;
                Clipboard.SetText(selectedNode.XPath);
            }
        }
示例#12
0
        private void highlightFragment(ViewerNode selectedNode)
        {
            if (SelectionChanged == null)
            {
                return;
            }

            //show fragment in fragment view
            if (selectedNode == null)
            {
                SelectionChanged(null);
            }
            else
            {
                SelectionChanged(selectedNode);
            }
        }
示例#13
0
        private void tree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e)
        {
            if (_tree.SelectedItem == null)
            {
                return;
            }

            TreeViewItem selected = ((TreeViewItem)_tree.SelectedItem);

            //expand on click
            selected.IsExpanded = true;

            if (selected.Tag != null)
            {
                ViewerNode selectedNode = (ViewerNode)((TreeViewItem)_tree.SelectedItem).Tag;
                highlightFragment(selectedNode);
            }
        }
示例#14
0
        private void highlightFragment(ViewerNode selectedNode)
        {
            if (_editor == null)
            {
                return;
            }

            //show fragment in fragment view
            if (selectedNode == null)
            {
                _editor.SetFragmentText("");
            }
            else
            {
                StringBuilder sb = new StringBuilder();

                XmlWriterSettings settings = new XmlWriterSettings
                {
                    ConformanceLevel = ConformanceLevel.Auto,
                    Indent           = true
                };

                using (XmlWriter w = XmlWriter.Create(sb, settings))
                {
                    selectedNode.OriginalNode.WriteTo(w);
                }

                _editor.SetFragmentText(sb.ToString());
            }

            //select node in editor
            if (selectedNode != null)
            {
                IXmlLineInfo lineInfo = selectedNode.LineInfo;
                if (lineInfo != null)
                {
                    var offset = _editor.XmlEditor.Document.GetOffset(lineInfo.LineNumber, lineInfo.LinePosition);
                    _editor.XmlEditor.Select(offset, selectedNode.Name.Length);
                    Debug.Assert(_editor.XmlEditor.SelectedText == selectedNode.Name);
                    _editor.XmlEditor.ScrollTo(lineInfo.LineNumber, lineInfo.LinePosition);
                }
            }
        }
示例#15
0
        private void selectNodeBasedOnCursor()
        {
            _updateSelectedBasedOnCursorNeccessary = false;

            try
            {
                Cursor = Cursors.Wait;
                var          loc          = _editor.XmlEditor.TextArea.Caret.Location;
                TreeViewItem selectedItem = tree.SelectNodeBasedOnCursor(loc);
                if (selectedItem != null)
                {
                    ViewerNode node = (ViewerNode)selectedItem.Tag;
                    _editor.SetSchemaInfo(node.SchemaInfo);
                }
            }
            finally
            {
                Cursor = null;
            }
        }
示例#16
0
        public void Update(XSDocument xsdoc)
        {
            _lastXmlUsedInUpdate = new XSDocument(xsdoc.Xml, xsdoc.XsdFile);

            _tree.Items.Clear();
            Cursor = Cursors.Wait;

            _lblUpdateInProgress.Visibility = Visibility.Visible;
            _tree.Visibility = Visibility.Collapsed;

            try
            {
                _rootNode = new ViewerNode(xsdoc);
                _backgroundExpander.SetNodeToExpand(_rootNode);
                if (_filter != null)
                {
                    _tree.Background = Brushes.LightYellow;
                    _tree.Items.Add(TreeViewHelper.BuildTreeView(_rootNode,
                                                                 x =>
                                                                 !((ViewerNode)x.Tag).OriginalNode.OuterXml.Contains(_filter, StringComparison.CurrentCultureIgnoreCase)));
                }
                else
                {
                    _tree.Background = Brushes.White;
                    _tree.Items.Add(TreeViewHelper.BuildTreeView(_rootNode));
                }
                ((TreeViewItem)_tree.Items[0]).IsExpanded = true;
            }
            catch (Exception)
            {
                _tree.Items.Clear();
            }
            finally
            {
                _lblUpdateInProgress.Visibility = Visibility.Collapsed;
                _tree.Visibility = Visibility.Visible;
                Cursor           = null;
            }
        }
示例#17
0
        protected override void Execute(EditorFrame ef)
        {
            try
            {
                TreeViewItem selected = ((TreeViewItem)ef._editorTree.tree.SelectedItem);

                if (selected.Tag != null)
                {
                    ViewerNode  selectedNode = (ViewerNode)selected.Tag;
                    XmlDocument xmldoc       = selectedNode.OriginalNode.OwnerDocument;
                    XmlNode     node         = selectedNode.OriginalNode;

                    Debug.Assert(xmldoc != null, "Checked in CanExecute");

                    Execute(ef, xmldoc, node);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(Application.Current.MainWindow, "Error: " + e.Message, "Error", MessageBoxButton.OK,
                                MessageBoxImage.Error);
            }
        }
示例#18
0
        protected override bool CanExecute(EditorFrame ef)
        {
            if (ef.XmlEditor == null)
            {
                return(false);
            }

            TreeViewItem selected = ((TreeViewItem)ef._editorTree.tree.SelectedItem);

            if (selected == null)
            {
                return(false);
            }
            if (selected.Tag == null)
            {
                return(false);
            }

            ViewerNode selectedNode = (ViewerNode)selected.Tag;
            XmlNode    node         = selectedNode.OriginalNode;

            if (node == null)
            {
                return(false);
            }
            if (node.OwnerDocument == null)
            {
                return(false);
            }
            if (node.ParentNode == null)
            {
                //info: there are no correct Linepositions for attributes
                return(false);
            }

            return(true);
        }
示例#19
0
        protected override void Execute(EditorFrame ef)
        {
            TreeViewItem selected = ((TreeViewItem)ef._editorTree.tree.SelectedItem);
            ViewerNode   node     = (ViewerNode)selected.Tag;
            IXmlLineInfo lineInfo = node.LineInfo;

            if (lineInfo != null)
            {
                int lineNum = lineInfo.LineNumber;
                int linePos = lineInfo.LinePosition;

                string outerXml = node.OriginalNode.OuterXml;

                int offset = ef.XmlEditor.Document.GetOffset(lineNum, linePos);
                offset -= 1;

                outerXml = outerXml.Replace("\n", "\r\n");

                int length = Math.Min(outerXml.Length, ef.XmlEditor.Text.Length);

                ef.XmlEditor.Select(offset, length);
                ef.XmlEditor.Focus();
            }
        }
示例#20
0
 protected abstract void Execute(EditorFrame ef, TreeViewItem treeViewItem, ViewerNode selectedNode, XmlDocument xmldoc, XmlNode node, XmlNode parentNode);
示例#21
0
        /// <summary>
        /// Generates a test case
        /// </summary>
        /// <param name="inputFile">Path to input file to generate test case from</param>
        /// <param name="rootNode">RootNode to generate test case data from</param>
        /// <param name="schemaPath">Path to schema file</param>
        /// <returns>A StreamReader containing the test case</returns>
        public StreamReader GenerateTestCase(string fileName, ViewerNode rootNode, string schemaPath)
        {
            try
            {
                _xpathIndex = 0;
                FileInfo      currentFile = new FileInfo(fileName);
                MemoryStream  stream      = new MemoryStream();
                XmlTextWriter xWriter     = new XmlTextWriter(stream, Encoding.UTF8);
                xWriter.Formatting = Formatting.Indented;

                string testName = currentFile.Name.Replace(" ", "_");
                if (testName.ToLower().EndsWith(".xml"))
                {
                    testName = testName.Substring(0, testName.Length - 4);
                }

                testName += "_Test";

                // Write the XML Header
                xWriter.WriteStartDocument();
                // Write version/date and url comment
                xWriter.WriteComment(string.Format("Generated with DanSharp XmlViewer v{0}.{1}.{2} on {3} {4}", Assembly.GetEntryAssembly().GetName().Version.Major, Assembly.GetEntryAssembly().GetName().Version.Minor, Assembly.GetEntryAssembly().GetName().Version.Build, DateTime.Now.ToShortDateString(), DateTime.Now.ToShortTimeString()));
                xWriter.WriteComment("http://dansharpxmlviewer.codeplex.com");
                // Write original filename comment
                xWriter.WriteComment(string.Format("Original Xml file: {0}", fileName));
                // Open the TestCase element
                xWriter.WriteStartElement("TestCase");
                // Write attributes for TestCase
                xWriter.WriteAttributeString("testName", testName);
                // Write an empty TestSetup element
                xWriter.WriteStartElement("TestSetup");
                xWriter.WriteEndElement();
                // Open the TestExecution element
                xWriter.WriteStartElement("TestExecution");
                xWriter.WriteComment("Start: Test " + testName);
                // Open the TestStep element for file copying
                xWriter.WriteStartElement("TestStep");
                // Write attributes for TestStep
                xWriter.WriteAttributeString("assemblyPath", "");
                xWriter.WriteAttributeString("typeName", "Microsoft.Services.BizTalkApplicationFramework.BizUnit.FileCreateStep");
                // Open the SourcePath element
                xWriter.WriteStartElement("SourcePath");
                // Write the current file path as the source file
                xWriter.WriteValue(fileName);
                // Close the SourcePath element
                xWriter.WriteEndElement();
                // Open the CreationPath element
                xWriter.WriteStartElement("CreationPath");
                // Write the current file path (with "Copy_" at the front of th file name) as the creation file
                xWriter.WriteValue(currentFile.DirectoryName + "\\Copy_" + currentFile.Name);
                // Close the CreationPath element
                xWriter.WriteEndElement();
                // Close the TestStep element for file copying
                xWriter.WriteEndElement();

                // Open the TestStep element for validation
                xWriter.WriteStartElement("TestStep");
                // Write attributes for TestStep
                xWriter.WriteAttributeString("assemblyPath", "");
                xWriter.WriteAttributeString("typeName", "Microsoft.Services.BizTalkApplicationFramework.BizUnit.FileValidateStep");
                // Open the Timeout element
                xWriter.WriteStartElement("Timeout");
                // Write 10000 as the value
                xWriter.WriteValue("10000");
                // Close the Timeout element
                xWriter.WriteEndElement();
                // Open the Directory element
                xWriter.WriteStartElement("Directory");
                // Write the current file path
                xWriter.WriteValue(currentFile.DirectoryName);
                // Close the Directory element
                xWriter.WriteEndElement();
                // Open the SearchPattern element
                xWriter.WriteStartElement("SearchPattern");
                // Write "Copy_*.xml" as the value
                xWriter.WriteValue("Out_Copy_" + currentFile.Name);
                // Close the SearchPattern element
                xWriter.WriteEndElement();
                // Open the DeleteFile element
                xWriter.WriteStartElement("DeleteFile");
                // Write true as the value
                xWriter.WriteValue("true");
                // Close the DeleteFile element
                xWriter.WriteEndElement();
                // Open the ValidationStep element
                xWriter.WriteStartElement("ValidationStep");
                // Write attributes for ValidationStep
                xWriter.WriteAttributeString("assemblyPath", "");
                xWriter.WriteAttributeString("typeName", "Microsoft.Services.BizTalkApplicationFramework.BizUnit.XmlValidationStepEx");
                // Open the XmlSchemaPath element
                xWriter.WriteStartElement("XmlSchemaPath");
                // Write a schema name as the value
                if (string.IsNullOrEmpty(schemaPath))
                {
                    schemaPath = fileName.Replace(".xml", ".xsd");
                }
                xWriter.WriteValue(schemaPath);
                // Close the XmlSchemaPath element
                xWriter.WriteEndElement();
                // Open the XmlSchemaNameSpace element
                xWriter.WriteStartElement("XmlSchemaNameSpace");
                // Write the namespace of the root node
                xWriter.WriteValue(rootNode.Namespace);
                // Close the XmlSchemaNameSpace element
                xWriter.WriteEndElement();
                // Open the XPathList element
                xWriter.WriteStartElement("XPathList");
                // Write a list of XPaths generated from the current ViewerNode
                WriteXPathListItems(xWriter, rootNode);
                // Close the XPathList element
                xWriter.WriteEndElement();
                // Close the ValidationStep element
                xWriter.WriteEndElement();
                // Close the TestStep element for validation
                xWriter.WriteEndElement();

                xWriter.WriteComment("End: Test " + testName);
                // Close the TestExecution element
                xWriter.WriteEndElement();

                // Write an empty TestCleanup element
                xWriter.WriteComment("Test cleanup: test cases should always leave the system in the state they found it");
                xWriter.WriteStartElement("TestCleanup");
                xWriter.WriteEndElement();

                // Close the TestCase element
                xWriter.WriteEndElement();
                // Close the document
                xWriter.WriteEndDocument();
                // Flush what's written to the stream
                xWriter.Flush();
                // Reset the stream for reading
                stream.Position = 0;
                // Convert the stream to a string and store in the text box
                return(new StreamReader(stream, Encoding.UTF8));
            }
            catch (Exception ex)
            {
                throw new ApplicationException("An error occurred creating the Test Case: " + ex.Message, ex);
            }
        }
示例#22
0
 /// <summary>
 /// Writes tests for all nodes under the given root node
 /// </summary>
 /// <param name="xWriter">XmlWriter to write tests to</param>
 /// <param name="rootNode">RootNode to start writing from</param>
 private void WriteXPathListItems(XmlTextWriter xWriter, ViewerNode rootNode)
 {
     // Find all elements and attributes in the document which have a value, and write them
     _xpathIndex = 0;
     WriteXPathListItemsRec(xWriter, rootNode);
 }
示例#23
0
        /// <summary>
        /// Writes out a test for the current node
        /// </summary>
        /// <param name="xWriter">XmlWriter to write test to</param>
        /// <param name="node">Node to write test for</param>
        private void WriteXPathListItemsRec(XmlTextWriter xWriter, ViewerNode node)
        {
            // Check if this node has a value
            if (!string.IsNullOrEmpty(node.Value))
            {
                // Check the type of node
                if (node.NodeType == NodeType.Element)
                {
                    // Add comment
                    xWriter.WriteComment(string.Format(CultureInfo.CurrentUICulture, " {0}: Element {1} must equal '{2}'", ++_xpathIndex, node.LocalName, node.Value));
                    // Open the XPathList element
                    xWriter.WriteStartElement("XPathValidation");
                    // Write attributes for XPathValidation
                    xWriter.WriteAttributeString("query", node.XPath);
                    // Write node value
                    xWriter.WriteValue(node.Value);
                    // Close the XPathList element
                    xWriter.WriteEndElement();
                }
                else if ((node.NodeType == NodeType.Attribute) && (node.AttributeType == AttributeType.None))
                {
                    // Add comment
                    xWriter.WriteComment(string.Format(CultureInfo.CurrentUICulture, " {0}: Attribute {1} must equal '{2}'", ++_xpathIndex, node.LocalName, node.Value));
                    // Open the XPathList element
                    xWriter.WriteStartElement("XPathValidation");
                    // Write attributes for XPathValidation
                    xWriter.WriteAttributeString("query", node.XPath);
                    // Write node value
                    xWriter.WriteValue(node.Value);
                    // Close the XPathList element
                    xWriter.WriteEndElement();
                }
            }

            // Process attributes for this node
            for (int attrIndex = 0; attrIndex < node.Attributes.Count; attrIndex++)
            {
                WriteXPathListItemsRec(xWriter, node.Attributes[attrIndex]);
            }

            List <string>     processedChildNodes = new List <string>();
            List <XPathQuery> nodeCountXPathQuery = new List <XPathQuery>();

            // Process child elements for this node
            for (int childIndex = 0; childIndex < node.ChildNodes.Count; childIndex++)
            {
                WriteXPathListItemsRec(xWriter, node.ChildNodes[childIndex]);
                // Check if we've processed this node as a repeatign node
                if (!processedChildNodes.Contains(node.ChildNodes[childIndex].Name))
                {
                    // Check if this node is a repeating node
                    if (node.ChildNodes[childIndex].OccurrenceIndex > -1)
                    {
                        // Get the count of the number of times this node repeats
                        int nodeCount = node.GetCountOfRepeatingChildNodes(node.ChildNodes[childIndex]);
                        if (nodeCount > 0)
                        {
                            // Create an xpath statement to verify the count of these nodes
                            string     nodeCountXPath = string.Format(CultureInfo.CurrentUICulture, "count({0}{1})", node.XPath, node.ChildNodes[childIndex].NonRecurringNodePath, nodeCount);
                            XPathQuery query          = new XPathQuery(node.ChildNodes[childIndex].LocalName, nodeCountXPath, nodeCount.ToString());
                            // Add the xpath query to a list
                            nodeCountXPathQuery.Add(query);
                        }
                    }
                    // Add the node to the list of processed nodes
                    processedChildNodes.Add(node.ChildNodes[childIndex].Name);
                }
            }

            // Process any Node Count statements
            if (nodeCountXPathQuery.Count > 0)
            {
                for (int queryIndex = 0; queryIndex < nodeCountXPathQuery.Count; queryIndex++)
                {
                    // Add comment
                    xWriter.WriteComment(string.Format(CultureInfo.CurrentUICulture, " {0}: Count of Element {1} must equal '{2}'", ++_xpathIndex, nodeCountXPathQuery[queryIndex].Name, nodeCountXPathQuery[queryIndex].Value));
                    // Open the XPathList element
                    xWriter.WriteStartElement("XPathValidation");
                    // Write attributes for XPathValidation
                    xWriter.WriteAttributeString("query", nodeCountXPathQuery[queryIndex].Query);
                    // Write node value
                    xWriter.WriteValue(nodeCountXPathQuery[queryIndex].Value);
                    // Close the XPathList element
                    xWriter.WriteEndElement();
                }
            }
        }
示例#24
0
        private void displayNavigator(XPathNodeIterator xpi)
        {
            if ((xpi != null) && (xpi.Count > 0))
            {
                for (bool hasNext = xpi.MoveNext(); hasNext; hasNext = xpi.MoveNext())
                {
                    // IXmlLineInfo lineInfo = xpi.Current as IXmlLineInfo;

                    switch (xpi.Current.NodeType)
                    {
                    case XPathNodeType.Text:
                    {
                        TreeViewItem node = new TreeViewItem();
                        node.Header     = xpi.Current.Value;
                        node.Foreground = Brushes.Brown;
                        node.ToolTip    = "(Nodeset/Text)";
                        _treeResult.Items.Add(node);
                        break;
                    }

                    case XPathNodeType.Attribute:
                    {
                        TreeViewItem node = new TreeViewItem();
                        node.Header     = "@" + xpi.Current.Name + ": " + xpi.Current.Value;
                        node.Foreground = Brushes.Brown;
                        node.ToolTip    = "(Nodeset/Attribute)";
                        node.Tag        = xpi.Current.Clone();
                        _treeResult.Items.Add(node);
                        break;
                    }

                    case XPathNodeType.Element:
                    {
                        var          document = new XSDocument(xpi.Current.OuterXml);
                        ViewerNode   vNode    = new ViewerNode(document);
                        TreeViewItem tvi      = TreeViewHelper.BuildTreeView(vNode);

                        //expand all to lazy-load all subitems
                        tvi.ExpandSubtree();
                        //now we can change the tags of all subitems
                        setTag(tvi, xpi.Current.Clone());
                        //collapse them again
                        var allChilds = tvi.AsDepthFirstEnumerable(
                            x => x.Items.Cast <TreeViewItem>());
                        foreach (TreeViewItem treeViewItem in allChilds)
                        {
                            treeViewItem.IsExpanded = false;
                        }

                        _treeResult.Items.Add(tvi);
                        break;
                    }
                    }
                    if (string.IsNullOrEmpty(_editorUserControl1.Text))
                    {
                        _editorUserControl1.Text = xpi.Current.OuterXml;
                    }
                    else
                    {
                        _editorUserControl1.Text = _editorUserControl1.Text + "\r\n" + xpi.Current.OuterXml;
                    }
                }
            }
            else
            {
                _treeResult.Items.Add("Nothing found.");
                _editorUserControl1.Text = "";
            }
        }
示例#25
0
 protected override void Execute(EditorFrame ef, TreeViewItem parameter, ViewerNode selectedNode, XmlDocument xmldoc, XmlNode node, XmlNode parentNode)
 {
     ef.XmlEditor.Text = NodeMover.MoveUp(node);
     ef._editorTree.Update();
     ef._editorTree.tree.ExpandAll();
 }
示例#26
0
        private void moveItem(TreeViewItem sourceItem, TreeViewItem targetItem)
        {
            ViewerNode source = (ViewerNode)sourceItem.Tag;
            ViewerNode target = (ViewerNode)targetItem.Tag;

            if (source == target)
            {
                return;
            }

            TaskDialogResult res = TaskDialog.Show(
                new TaskDialogOptions
            {
                AllowDialogCancellation = true,
                Owner           = Application.Current.MainWindow,
                Title           = "Move node",
                MainInstruction = "Where do you like to drop to source node?",
                Content         = "Source: " + source + "\nTarget: " + target,
                CommandButtons  = new[] { "Make child", "Insert before", "Insert after", "Cancel" },
                MainIcon        = VistaTaskDialogIcon.Information,
                ExpandedInfo    = "Source: " + source.XPath + "\nTarget: " + target.XPath
            });

            try
            {
                string newXml = null;
                switch (res.CommandButtonResult)
                {
                case 0:     //make child
                    newXml = NodeMover.Move(source.OriginalNode, target.OriginalNode);
                    break;

                case 1:     //insert before
                    newXml = NodeMover.InsertBefore(source.OriginalNode, target.OriginalNode);
                    break;

                case 2:     //insert after
                    newXml = NodeMover.InsertAfter(source.OriginalNode, target.OriginalNode);
                    break;

                case 3:     //cancel
                    break;

                case null:     //cancel by closing window
                    break;

                default:
                    Debug.Fail("");
                    break;
                }

                if (newXml != null)
                {
                    Update(new XSDocument(newXml));
                    if (XmlChanged != null)
                    {
                        XmlChanged(newXml);
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(Application.Current.MainWindow, e.Message, "Error",
                                MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }