public void OpenFile(string filename) { foreach (string s in filename.Split('\n')) { var fn = s.Trim(); var ext = Path.GetExtension(fn).ToLower(); if (ext == Properties.Resources.ObjectExtension.ToLower() || ext == Properties.Resources.ColorExtension.ToLower()) { OpenItemFromPath(fn); } else if (ext == Properties.Resources.ProjectExtension.ToLower()) { AssemblyNodeVM res = null; foreach (AssemblyNodeVM p in Projects) { if (Path.GetFullPath(p.AbsolutePath).Equals(Path.GetFullPath(fn), StringComparison.OrdinalIgnoreCase)) { res = p; res.IsExpanded = true; break; } } if (res != null) { continue; } if (File.Exists(fn)) { OpenProject openProject = OpenProjectSerializer.AddOpenProject(Path.GetFileNameWithoutExtension(fn), Path.GetDirectoryName(fn)); loadProject(openProject); } } } }
private void AddAssemblyNode(AssemblyNodeVM newAssemblyNode) { if (newAssemblyNode != null) { newAssemblyNode.Children.CollectionChanged += Children_CollectionChanged; foreach (AssemblyNodeVM subChilds in newAssemblyNode.Children.OfType <AssemblyNodeVM>()) { AddAssemblyNode(subChilds); } } }
private void RemovedAssemblyNode(AssemblyNodeVM removedAssemblyNode) { if (removedAssemblyNode != null) { removedAssemblyNode.Children.CollectionChanged -= Children_CollectionChanged; CleanUpTabs(removedAssemblyNode); foreach (AssemblyNodeVM subChilds in removedAssemblyNode.Children.OfType <AssemblyNodeVM>()) { RemovedAssemblyNode(subChilds); } } }
private async void LoadProject(OpenProject newProject) { bool remove = true; string projectpath = Path.Combine(newProject.path, $"{newProject.name}.{Declares.ProjectExtension}"); if (File.Exists(projectpath)) { remove = false; AssemblyNodeVM node = null; try { AssemblyNode mainnode = new AssemblyNode(projectpath); // check if the file can be deserialized properly node = new AssemblyNodeVM(mainnode, OpenItem, RemoveNodeFromTabs, GetTab); if (node.BrokenFile || (node.Model as AssemblyNode).Obj.ColorListBroken) { remove = true; } } catch (Exception) { try { AssemblyNode restored = await AssemblyNodeVM.RestoreAssembly(projectpath); node = new AssemblyNodeVM(restored, OpenItem, RemoveNodeFromTabs, GetTab); } catch (FileNotFoundException) { remove = true; } catch { await Errorhandler.RaiseMessage(String.Format(_("The main project file of project {0} was damaged. An attempt to restore the file has been unsuccessful. \nThe project will be removed from the list of opened projects."), projectpath), _("Damaged File"), Errorhandler.MessageType.Error); remove = true; } } if (!remove) { Projects.Add(node); } } if (remove) { await Errorhandler.RaiseMessage(string.Format(_("Unable to load project {0}. It might have been moved or damaged. \nPlease re-add it at its current location.\n\nThe project has been removed from the list of opened projects."), newProject.name), _("Error"), Errorhandler.MessageType.Error); OpenProjectSerializer.RemoveOpenProject(newProject.id); } }
private void loadProject(OpenProject newProject) { bool remove = true; string projectpath = Path.Combine(newProject.path, $"{newProject.name}{Properties.Resources.ProjectExtension}"); if (File.Exists(projectpath)) { remove = false; AssemblyNodeVM node = null; try { AssemblyNode mainnode = new AssemblyNode(projectpath); // check if the file can be deserialized properly node = new AssemblyNodeVM(mainnode, OpenItem, RemoveNodeFromTabs, GetTab); } catch { try { AssemblyNode restored = AssemblyNodeVM.RestoreAssembly(projectpath); node = new AssemblyNodeVM(restored, OpenItem, RemoveNodeFromTabs, GetTab); } catch (FileNotFoundException) { remove = true; } catch { Errorhandler.RaiseMessage($"The main project file of project {projectpath} was damaged. An attempt to restore the file has been unsuccessful. \nThe project will be removed from the list of opened projects.", "Damaged File", Errorhandler.MessageType.Error); remove = true; } } if (!remove) { Projects.Add(node); } } if (remove) { Errorhandler.RaiseMessage($"Unable to load project {newProject.name}. It might have been moved or damaged. \nPlease re-add it at its current location.\n\nThe project has been removed from the list of opened projects.", "Error!", Errorhandler.MessageType.Error); OpenProjectSerializer.RemoveOpenProject(newProject.id); } }
private async void CleanUpTabs(AssemblyNodeVM removedNode) { foreach (DominoWrapperNodeVM item in removedNode.Children) { if (item is AssemblyNodeVM assemblyNodeVM) { CleanUpTabs(assemblyNodeVM); } else { List <UserControls.ViewModel.TabItem> toClose = Tabs.Where(x => x.Path == item.AbsolutePath).ToList(); foreach (var tabItem in toClose) { await RemoveItem(tabItem); } } } }