コード例 #1
0
 private void saveButton_Click(object sender, RoutedEventArgs e)
 {
     finalClose = true;
     this.Close();
     //Сериализовать объекты
     dataStorage.SerializeStruture();
     AddObjectsToStructure.DataStorage = null;
     MessageBox.Show("Данные сохранены", "Готово", MessageBoxButton.OK);
 }
コード例 #2
0
        public override int Execute(params string[] parameters)
        {
            try
            {
                Document doc = Application.ActiveDocument;
                DocumentSelectionSets selectionSets  = doc.SelectionSets;
                FolderItem            rootFolderItem = selectionSets.RootItem;
                List <FolderItem>     folders        = new List <FolderItem>();
                foreach (SavedItem item in rootFolderItem.Children)
                {
                    if (item is FolderItem)
                    {
                        folders.Add(item as FolderItem);
                    }
                }

                if (folders.Count == 0)
                {
                    WinForms.MessageBox.Show("Для работы этой команды необходимо наличие папок с сохраненными наборами выбора",
                                             "Отменено", WinForms.MessageBoxButtons.OK);
                    return(0);
                }

                string initialPath     = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                string initialFileName = "Проект";
                string docFileName     = doc.FileName;
                if (!String.IsNullOrEmpty(docFileName))
                {
                    initialPath     = Path.GetDirectoryName(docFileName);
                    initialFileName = Path.GetFileNameWithoutExtension(docFileName);
                }

                //Вывести окно для выбора корневой папки для формирования структуры
                SelectRootFolderWindow selectRootFolderWindow = new SelectRootFolderWindow(folders, true, initialPath);
                bool?result = selectRootFolderWindow.ShowDialog();
                if (result != null && result.Value)
                {
                    FolderItem rootFolder = selectRootFolderWindow.RootFolder;

                    //Запросить имя и путь создаваемого файла структуры
                    WinForms.SaveFileDialog saveFileDialog = new WinForms.SaveFileDialog();
                    saveFileDialog.InitialDirectory = initialPath;
                    saveFileDialog.Filter           = "st.xml files (*.st.xml)|*.st.xml";
                    saveFileDialog.FilterIndex      = 1;
                    saveFileDialog.RestoreDirectory = true;
                    if (!String.IsNullOrWhiteSpace(initialFileName))
                    {
                        saveFileDialog.FileName = initialFileName;
                    }
                    saveFileDialog.Title = "Укажите файл для создания структуры";

                    if (saveFileDialog.ShowDialog() == WinForms.DialogResult.OK)
                    {
                        string stFilename = saveFileDialog.FileName;
                        string name       = Path.GetFileName(stFilename);
                        string clFilename = Path.Combine(Path.GetDirectoryName(stFilename),
                                                         name.Substring(0, name.Length - 6) + "cl.xml");


                        Classifier classifier = null;
                        if (selectRootFolderWindow.ViewModel.ClassifierSamplePathVM.FileNameIsValid)
                        {
                            //Если был указан образец структуры, то десериализовать его
                            //и использовать как основу для для создаваемого классификатора
                            using (StreamReader sr = new StreamReader(
                                       selectRootFolderWindow.ViewModel.ClassifierSamplePathVM.FileName))
                            {
                                string serializedData = Common.Utils.RemoveInvalidXmlSubstrs(sr.ReadToEnd());

                                XmlSerializer xmlSerializer = new XmlSerializer(typeof(Classifier));
                                StringReader  stringReader  = new StringReader(serializedData);
                                classifier                   = (Classifier)xmlSerializer.Deserialize(stringReader);
                                classifier.ClassName         = classifier.Name;
                                classifier.DefaultClasses[0] = classifier.Name + "_DefaultFolder";
                                classifier.DefaultClasses[1] = classifier.Name + "_DefaultGeometry";
                            }
                        }
                        else
                        {
                            //пустой классификатор
                            classifier = new Classifier()
                            {
                                Name         = rootFolder.DisplayName,
                                ClassName    = rootFolder.DisplayName,
                                IsPrimary    = true,
                                DetailLevels = new List <string>()
                                {
                                    "Folder", "Geometry"
                                }
                            };
                            classifier.DefaultClasses[0] = rootFolder.DisplayName + "_DefaultFolder";
                            classifier.DefaultClasses[1] = rootFolder.DisplayName + "_DefaultGeometry";
                        }



                        //Создать пустую структуру
                        Structure structure = new Structure()
                        {
                            Name       = rootFolder.DisplayName,
                            Classifier = classifier.Name,
                            IsPrimary  = true,
                        };
                        //Создать StructureDataStorage
                        StructureDataStorage dataStorage = new StructureDataStorage(
                            doc, stFilename, clFilename, structure, classifier, true,
                            selectRootFolderWindow.SelectedCategories);

                        //Сформировать XML по структуре папок
                        //Каждая папка - объект без свойств
                        StructureFilling(null, rootFolder, dataStorage, doc);

                        dataStorage.SerializeStruture();
                        WinForms.MessageBox.Show("Данные сохранены", "Готово", WinForms.MessageBoxButtons.OK);
                    }
                }
            }
            catch (Exception ex)
            {
                CommonException(ex, "Ошибка при создании файлов структуры из наборов выбора");
            }



            return(0);
        }