private void ProjectService_ProjectOpened(Project project) { Items.Clear(); Items.Add(new ProjectItemViewModel { Id = project.Id, Title = $"Project '{project.Name}'", Type = ProjectItemType.Project }); foreach (var m in project.Modules) { var moduleItem = new ProjectItemViewModel { Id = Guid.NewGuid(), Title = m.Name, Type = ProjectItemType.Module }; Items.Add(moduleItem); RecursiveAppendProjectItems(moduleItem, Path.GetDirectoryName(_projectService.ProjectFilePath)); } ProjectName = project.Name; ProjectIsLoaded = true; OnPropertyChanged(nameof(ProjectIsLoaded)); }
private void ProjectService_ProjectItemChanged(ProjectItemChangedArgs args) { if (args.ItemType == ProjectItemType.Module && args.Change == ProjectItemChange.Rename) { foreach (var i in Items) { if (i.Title == args.ItemNameOld) { i.Title = args.ItemName; } } } if (args.ItemType == ProjectItemType.Folder) { if (args.Change == ProjectItemChange.Create) { var parentItem = GetItemRecursive(Items, args.ParentSubPath.Split('\\'), 0); var folderItem = new ProjectItemViewModel { Id = Guid.NewGuid(), Type = ProjectItemType.Folder, Title = args.ItemName, Parent = parentItem, }; InsertFolderAlphabetically(parentItem.SubItems, folderItem); } else if (args.Change == ProjectItemChange.Rename) { var parentItem = GetItemRecursive(Items, args.ParentSubPath.Split('\\'), 0); var folderItem = parentItem.SubItems.FirstOrDefault(o => o.Title == args.ItemNameOld); parentItem.SubItems.Remove(folderItem); folderItem.Title = args.ItemName; InsertFolderAlphabetically(parentItem.SubItems, folderItem); } } if ((args.ItemType == ProjectItemType.Page || args.ItemType == ProjectItemType.Layout || args.ItemType == ProjectItemType.Workflow)) { if (args.Change == ProjectItemChange.Create) { var parentItem = GetItemRecursive(Items, args.ParentSubPath.Split('\\'), 0); var documentItem = new ProjectItemViewModel { Id = Guid.NewGuid(), Type = args.ItemType, Title = args.ItemName, Parent = parentItem, }; InsertDocumentAlphabetically(parentItem.SubItems, documentItem); } else if (args.Change == ProjectItemChange.Delete) { var parentItem = GetItemRecursive(Items, args.ParentSubPath.Split('\\'), 0); var documentItem = parentItem.SubItems.FirstOrDefault(o => o.Title == args.ItemName && o.Type == args.ItemType); parentItem.SubItems.Remove(documentItem); } else if (args.Change == ProjectItemChange.Rename) { var parentItem = GetItemRecursive(Items, args.ParentSubPath.Split('\\'), 0); var documentItem = parentItem.SubItems.FirstOrDefault(o => o.Title == args.ItemNameOld && o.Type == args.ItemType); parentItem.SubItems.Remove(documentItem); documentItem.Title = args.ItemName; InsertFolderAlphabetically(parentItem.SubItems, documentItem); } } }
private void RecursiveAppendProjectItems(ProjectItemViewModel currentItem, string parentPath) { var currentPath = Path.Combine(parentPath, currentItem.Title); if (currentItem.SubItems == null) { currentItem.SubItems = new ObservableCollection <IProjectItemViewModel>(); } // Alle Ordner darstellen foreach (var dirName in Directory.GetDirectories(currentPath).Select(dir => { var info = new DirectoryInfo(dir); return(info.Name); }).OrderBy(dirName => dirName)) { var folderItem = new ProjectItemViewModel { Id = Guid.NewGuid(), Type = ProjectItemType.Folder, Title = dirName, Parent = currentItem, }; currentItem.SubItems.Add(folderItem); RecursiveAppendProjectItems(folderItem, currentPath); } // Alle Dateien die zum Projekt gehören foreach (var file in Directory.GetFiles(currentPath).Select(o => Path.GetFileName(o)).OrderBy(fileName => fileName)) { if (file.EndsWith(Constants.ProjectItemFileExtensions.Page)) { currentItem.SubItems.Add(new ProjectItemViewModel { Id = Guid.NewGuid(), Type = ProjectItemType.Page, Title = file.Split('.')[0], Parent = currentItem, }); } if (file.EndsWith(Constants.ProjectItemFileExtensions.Layout)) { currentItem.SubItems.Add(new ProjectItemViewModel { Id = Guid.NewGuid(), Type = ProjectItemType.Layout, Title = file.Split('.')[0], Parent = currentItem, }); } if (file.EndsWith(Constants.ProjectItemFileExtensions.Workflow)) { currentItem.SubItems.Add(new ProjectItemViewModel { Id = Guid.NewGuid(), Type = ProjectItemType.Workflow, Title = file.Split('.')[0], Parent = currentItem, }); } } }