コード例 #1
0
        /// <summary>
        /// Выгрузка дерева
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void uploadTagTreeButton_Click(object sender, RoutedEventArgs e)
        {
            //Игнорируем, если документ не открыт
            if (!_isOpenXmlDocument)
            {
                return;
            }
            //Запрос на выгрузку дерева
            MessageBoxResult result = MessageBox.Show("Выгрузить дерево и сохранить изменения в Xml файле?", "Внимание!!!", MessageBoxButton.OKCancel);

            if (result == MessageBoxResult.OK)
            {
                this.tagStorage.SaveXmlDocument();
                //Выгрузка дерева в другом потоке
                Task.Factory.StartNew(() =>
                {
                    this.outTreeView.Dispatcher.Invoke(() => outTreeView.ItemsSource = null);
                });
                //Документ закрыт
                _isOpenXmlDocument = false;
                //Зануляем инстансы
                tagStorage = null;
                tagItem    = null;
            }
        }
コード例 #2
0
ファイル: TagStorage.cs プロジェクト: moozon/TagsWpfTest
 /// <summary>
 /// Переименовывает заданный тег
 /// </summary>
 /// <param _name="path">Путь переименовываемого тега</param>
 /// <param _name="newname">Новое имя тега</param>
 public void RenameTag(string path, string newName)
 {
     try
     {
         TagItem tagItem = new TagItem(_root.SelectSingleNode(path));
         tagItem.RenameTag(newName);
     }
     catch (Exception e)
     {
         throw new Exception(e.Message, e);
     }
 }
コード例 #3
0
ファイル: TagStorage.cs プロジェクト: moozon/TagsWpfTest
 /// <summary>
 /// Добавляет новый тег в конец списка дочерних тегов
 /// </summary>
 /// <param _name="path">Родительский тег в теле которого, будет создан новый</param>
 /// <param _name="name">Имя нового тега</param>
 /// <param _name="type">Тип нового тега</param>
 public void AddTag(string path, string name, string type)
 {
     try
     {
         TagItem tagItem = new TagItem(_root.SelectSingleNode(path));
         tagItem.AddChildTag(name);
     }
     catch (Exception e)
     {
         throw new Exception(e.Message, e);
     }
 }
コード例 #4
0
        //Methods

        /// <summary>
        /// Инициализация при загрузке окна
        /// </summary>
        private void Window_Loaded(object sender, EventArgs e)
        {
            //Пустой XML узел
            _emptyElement = new XmlDocument().DocumentElement;
            //Создание екземпляра для загрузки пустого дерева
            tagItem        = new TagItem(_emptyElement);
            _tagCollection = new ObservableCollection <TagItem>();
            this.Title     = "TreeView";
            //В качестве контента данных используем самих себя
            this.DataContext = this;
            //Загрузка пустого дерева в отдельном потоке
            Task.Factory.StartNew(() => outTreeView.Dispatcher.Invoke(() => outTreeView.ItemsSource = TagCollection));
        }
コード例 #5
0
 /// <summary>
 /// Загрузка дерева
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void loadTagTreeButton_Click(object sender, RoutedEventArgs e)
 {
     //Инстансыруем классы
     tagStorage = new TagStorage(_fileName);
     tagItem    = new TagItem(tagStorage.Root);
     //Создаем главную коллекцию
     CreateTagCollection(tagStorage.Root);
     //Привязываем коллекцию к TreeView в отдельном потоке
     Task.Factory.StartNew(() => outTreeView.Dispatcher.Invoke(() => outTreeView.ItemsSource = TagCollection));
     //Документ открыт, если все в порядке
     if (tagStorage.Root != null)
     {
         _isOpenXmlDocument = true;
     }
 }
コード例 #6
0
ファイル: TagStorage.cs プロジェクト: moozon/TagsWpfTest
        //Methods

        /// <summary>
        /// Рекурсивно перебирает все теги и выводит на экран их имена, пути, значения, типы, уровни вложенности
        /// </summary>
        /// <param _name="element">Тег с которого строится дерего и выводится на экран</param>
        private void PrintRec(XmlNode element)
        {
            if (element == null)        //Выход, если пустая ссылка
            {
                return;
            }
            TagItem tagItem = new TagItem(element);

            tagItem.Print();

            if (element.HasChildNodes)
            {
                foreach (XmlNode e in element.ChildNodes)
                {
                    PrintRec(e);
                }
            }
        }
コード例 #7
0
        /// <summary>
        /// Удаление тега
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MenuItem_Click_2(object sender, RoutedEventArgs e)
        {
            MessageBoxResult result = MessageBox.Show("Удалить выбранную ветвь?", "Внимание!!!", MessageBoxButton.OKCancel);

            if (result == MessageBoxResult.OK)
            {
                TagItem selectedTag = (TagItem)outTreeView.SelectedItem;
                //Выбранный тег принадлежит главной колекции
                if (_tagCollection.Contains(selectedTag))
                {
                    //Очищаем главную коллецию
                    this.TagCollection.Remove(selectedTag);
                    //Формирование полного пути тега
                    string xPathName = CreateXPathName(selectedTag.tag);
                    //Если тип Текст, то изменяем строку пути используем перегрузку метода удаления тега из дерева
                    if (!_isText)
                    {
                        tagStorage.RemoveTag(xPathName);
                    }
                    else
                    {
                        xPathName = xPathName.TrimEnd(@"#text".ToCharArray());
                        tagStorage.RemoveTypedTag(xPathName, "");
                    }
                    if (_isText)
                    {
                        _isText = false;
                    }
                    _isChanged = true;
                }
                //Тег принадлежит Виртуальному дереву
                else
                {   //Если добавленный тег
                    if (selectedTag.isNewTag)
                    {
                        //Удаляем из шаблона дерева
                        tagStorage.RemoveNewTag(selectedTag.Name);
                        //Находим родительский контейнер выбранного тега в TreeView
                        TagItem selectedTreeViewItemParent2 = (TagItem)ItemsControl.ItemsControlFromItemContainer(_selectedTreeViewItem).DataContext;
                        //Удаляем выбранный тег
                        selectedTreeViewItemParent2.ChildCollection.Remove(selectedTag);
                        return;
                    }
                    //Формирование полного пути тега
                    string xPathName = CreateXPathName(selectedTag.tag);
                    //Аналогичное описание в ифе
                    if (!_isText)
                    {
                        tagStorage.RemoveTag(xPathName);
                    }
                    else
                    {
                        xPathName = xPathName.TrimEnd(@"#text".ToCharArray());
                        tagStorage.RemoveTypedTag(xPathName, "");
                    }
                    if (_isText)
                    {
                        _isText = false;
                    }
                    TagItem selectedTreeViewItemParent = (TagItem)ItemsControl.ItemsControlFromItemContainer(_selectedTreeViewItem).DataContext;
                    selectedTreeViewItemParent.ChildCollection.Remove(selectedTag);
                    _isChanged = true;
                }
            }
        }
コード例 #8
0
        /// <summary>
        /// Переименование тега
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MenuItem_Click_1(object sender, RoutedEventArgs e)
        {
            //Окно для ввода нового имени
            var renameWindow = new RenameWindow();

            renameWindow.ShowDialog();
            //Сохраняем новое имя в переменную
            string newName = renameWindow.NewName;

            //проверка на пустую строку имени
            if (string.IsNullOrWhiteSpace(newName))
            {
                MessageBox.Show("Введите имя");
                return;
            }
            //Выбранный тег в TreeView
            TagItem selectedTag = (TagItem)outTreeView.SelectedItem;

            //Выбранный тег принадлежит главной колекции
            if (this.TagCollection.Contains(selectedTag))
            {
                //Находим тег который нужно переименовать
                foreach (TagItem tag in TagCollection)
                {
                    if (tag == selectedTag)
                    {
                        //Изменяем имя
                        tag.Name = newName;
                        //Обновляем щаблон дерева
                        string xPathName = CreateXPathName(selectedTag.tag);
                        if (!_isText)
                        {
                            tagStorage.RenameTag(xPathName, newName);
                        }
                        else
                        {
                            tagStorage.RenameTag(xPathName, newName);
                        }
                        //Бмли изменения
                        _isChanged = true;
                        //ВЫходим их цикла при нахождении
                        return;
                    }
                }
            }
            //Тег принадлежит Виртуальному дереву
            else
            {
                TagItem selectedTreeViewItemParent = (TagItem)ItemsControl.ItemsControlFromItemContainer(_selectedTreeViewItem).DataContext;
                foreach (TagItem tag in selectedTreeViewItemParent.ChildCollection)
                {
                    if (tag == selectedTag)
                    {
                        tag.Name   = newName;
                        _isChanged = true;
                        string xPathName = CreateXPathName(selectedTag.tag);
                        //xPathName = xPathName.TrimEnd
                        if (!_isText)
                        {
                            tagStorage.RenameTag(xPathName, newName);
                        }
                        else
                        {
                            //xPathName = xPathName.TrimEnd(@"#text".ToCharArray());
                            tagStorage.RenameTag(xPathName, newName);
                        }
                        return;
                    }
                }
            }
            //Дерево изменено
            _isChanged = true;
        }
コード例 #9
0
        /// <summary>
        /// Добавление тега
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MenuItem_Click(object sender, RoutedEventArgs e)
        {
            //Окна для ввода имени и типа нового тега
            var newTagWindow = new NewTagWindow();

            newTagWindow.ShowDialog();
            //Записываем двнные в переменные
            string newName = newTagWindow.NewName;
            string newType = newTagWindow.NewType;

            //Проверка на Null
            if (string.IsNullOrWhiteSpace(newName))
            {
                MessageBox.Show("Введите имя");
                return;
            }
            //Проверка на корректность введенного типа
            bool isValidType = false;

            foreach (string type in Enum.GetNames(typeof(XmlNodeType)))
            {
                if (newType == type)
                {
                    isValidType = true;
                }
            }
            //Уведомление, если тип введен не правильно
            if (!isValidType)
            {
                MessageBox.Show("Неверно указан тип. Повторите попытку", "Внимание!!!");
                return;
            }
            else
            {
                //Выделенный тег
                TagItem selectedTag = (TagItem)outTreeView.SelectedItem;
                //Принадлежит главной коллекции
                if (_tagCollection.Contains(selectedTag))
                {
                    //Поиск в коллекции
                    foreach (TagItem tag in this._tagCollection)
                    {
                        if (tag == selectedTag)
                        {
                            //Добавление нового тега в локальную коллекцию тега
                            selectedTag.ChildCollection.Add(new TagItem(newName, newType));
                        }
                    }
                    //Изменения
                    _isChanged = true;
                }
                //Тег принадлежит Виртуальному дереву
                else
                {
                    //Добавление нового тега в локальную коллекцию тега
                    selectedTag.ChildCollection.Add(new TagItem(newName, newType));
                    TagItem selectedTreeViewItemParent2 = (TagItem)ItemsControl.ItemsControlFromItemContainer(_selectedTreeViewItem).DataContext;
                    selectedTreeViewItemParent2.GetChildByName(selectedTag.Name).AppendChild(tagStorage.xmlDoc.CreateElement(newName));
                    //Изменнеия
                    _isChanged = true;
                }
            }
        }