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);
             }
         }
     }
 }
예제 #2
0
 private void AddAssemblyNode(AssemblyNodeVM newAssemblyNode)
 {
     if (newAssemblyNode != null)
     {
         newAssemblyNode.Children.CollectionChanged += Children_CollectionChanged;
         foreach (AssemblyNodeVM subChilds in newAssemblyNode.Children.OfType <AssemblyNodeVM>())
         {
             AddAssemblyNode(subChilds);
         }
     }
 }
예제 #3
0
 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);
         }
     }
 }
예제 #4
0
        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);
            }
        }
예제 #6
0
 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);
             }
         }
     }
 }