private void unloadedassemblymenu_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            if (e.ClickedItem.Name == "addtoproject")
            {
                NodeAssemblyData data = (NodeAssemblyData)objectview.SelectedNode.Tag;
                CurrentProject.AddManifest(data.AssemblyName);
                CurrentProject.Save(CurrentProjectFilename);
                data.Included   = true;
                data.Loaded     = true;
                data.Definition = LoadAssembly(data.AssemblyName);
                objectview.SelectedNode.ImageKey         = "accept.png";
                objectview.SelectedNode.SelectedImageKey = "accept.png";
                objectview.SelectedNode.Nodes.Clear();

                string realfilename = Path.Combine(CurrentProject.TargetDirectory, data.AssemblyName + ".dll");
                string origfilename = Path.Combine(CurrentProject.TargetDirectory, data.AssemblyName + "_Original.dll");
                if (!File.Exists(origfilename))
                {
                    CreateOriginal(realfilename, origfilename);
                }

                // Populate
                PopulateAssemblyNode(objectview.SelectedNode, data.Definition);
            }
        }
 private void loadedassemblymenu_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
 {
     if (e.ClickedItem.Name == "removefromproject")
     {
         NodeAssemblyData data = (NodeAssemblyData)objectview.SelectedNode.Tag;
         CurrentProject.RemoveManifest(data.AssemblyName);
         CurrentProject.Save(CurrentProjectFilename);
         data.Included   = false;
         data.Loaded     = false;
         data.Definition = null;
         if (objectview.SelectedNode.Tag == null)
         {
             objectview.SelectedNode.Parent.Nodes.Remove(objectview.SelectedNode);
         }
         else
         {
             objectview.SelectedNode.ImageKey         = "cross.png";
             objectview.SelectedNode.SelectedImageKey = "cross.png";
             objectview.SelectedNode.Nodes.Clear();
         }
     }
 }
 private void objectview_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
 {
     if (e.Button == System.Windows.Forms.MouseButtons.Right)
     {
         TreeNode node = e.Node;
         if (node != null)
         {
             if (node.Tag is NodeAssemblyData)
             {
                 NodeAssemblyData data = (NodeAssemblyData)node.Tag;
                 if (!data.Included)
                 {
                     unloadedassemblymenu.Show(objectview, e.X, e.Y);
                 }
                 else
                 {
                     loadedassemblymenu.Show(objectview, e.X, e.Y);
                 }
             }
             objectview.SelectedNode = node;
         }
     }
 }
Example #4
0
        private void PopulateInitialTree()
        {
            // Set status
            statuslabel.Text = "Loading project...";
            statuslabel.Invalidate();

            // Add project settings
            TreeNode projectsettings = new TreeNode("Project Settings");
            projectsettings.ImageKey = "cog_edit.png";
            projectsettings.SelectedImageKey = "cog_edit.png";
            projectsettings.Tag = "Project Settings";
            objectview.Nodes.Add(projectsettings);

            // Add hooks
            TreeNode hooks = new TreeNode("Hooks");
            hooks.ImageKey = "lightning.png";
            hooks.SelectedImageKey = "lightning.png";
            objectview.Nodes.Add(hooks);
            foreach (var hook in CurrentProject.Manifests.SelectMany((m) => m.Hooks))
            {
                TreeNode hooknode = new TreeNode(hook.Name);
                if (hook.Flagged)
                {
                    hooknode.ImageKey = "script_error.png";
                    hooknode.SelectedImageKey = "script_error.png";
                }
                else
                {
                    hooknode.ImageKey = "script_lightning.png";
                    hooknode.SelectedImageKey = "script_lightning.png";
                }
                hooknode.Tag = hook;
                hooks.Nodes.Add(hooknode);
            }

            // Add assemblies
            TreeNode assemblies = new TreeNode("Assemblies");
            assemblies.ImageKey = "folder.png";
            assemblies.SelectedImageKey = "folder.png";
            objectview.Nodes.Add(assemblies);
            List<TreeNode> assemblynodes = new List<TreeNode>();
            var files = Directory.GetFiles(CurrentProject.TargetDirectory).Where(f => f.EndsWith(".dll") || (f.EndsWith(".exe") && !Path.GetFileName(f).StartsWith(typeof(Program).Assembly.GetName().Name)));
            foreach (string file in files)
            {
                // Check if it's an original dll
                if (!IsFileOriginal(file))
                {

                    // See if it has a manifest
                    string assemblyname = Path.GetFileNameWithoutExtension(file);
                    string assemblyfile = Path.GetFileName(file);
                    if (CurrentProject.Manifests.Any((x) => x.AssemblyName == assemblyfile))
                    {
                        // Get the manifest
                        // Manifest manifest = CurrentProject.Manifests.Single((x) => x.AssemblyName == assemblyname);

                        // Load the assembly
                        NodeAssemblyData data = new NodeAssemblyData();
                        data.Included = true;
                        data.AssemblyName = assemblyfile;
                        data.Loaded = true;
                        data.Definition = LoadAssembly(assemblyfile);

                        // Create a node for it
                        TreeNode assembly = new TreeNode(assemblyname);
                        if (data.Definition == null)
                        {
                            assembly.ImageKey = "error.png";
                            assembly.SelectedImageKey = "error.png";
                        }
                        else
                        {
                            assembly.ImageKey = "accept.png";
                            assembly.SelectedImageKey = "accept.png";
                        }
                        assembly.Tag = data;
                        assemblynodes.Add(assembly);

                        // Populate
                        if (data.Definition != null)
                            PopulateAssemblyNode(assembly, data.Definition);
                    }
                    else
                    {
                        // Nope, just make an empty node for it
                        TreeNode assembly = new TreeNode(assemblyname);
                        assembly.ImageKey = "cross.png";
                        assembly.SelectedImageKey = "cross.png";
                        assembly.Tag = new NodeAssemblyData() { Included = false, AssemblyName = assemblyfile };
                        assemblynodes.Add(assembly);
                    }
                }
            }

            // Sort
            assemblynodes.Sort((a, b) =>
            {
                return Comparer<string>.Default.Compare(a.ImageKey, b.ImageKey);
            });

            // Add
            for (int i = 0; i < assemblynodes.Count; i++)
                assemblies.Nodes.Add(assemblynodes[i]);

            // Set status
            statuslabel.Text = "";
        }
        private void PopulateInitialTree()
        {
            // Set status
            statuslabel.Text = "Loading project...";
            statuslabel.Invalidate();

            // Add project settings
            TreeNode projectsettings = new TreeNode("Project Settings");

            projectsettings.ImageKey         = "cog_edit.png";
            projectsettings.SelectedImageKey = "cog_edit.png";
            projectsettings.Tag = "Project Settings";
            objectview.Nodes.Add(projectsettings);

            // Add hooks
            TreeNode hooks = new TreeNode("Hooks");

            hooks.ImageKey         = "lightning.png";
            hooks.SelectedImageKey = "lightning.png";
            objectview.Nodes.Add(hooks);
            foreach (var hook in CurrentProject.Manifests.SelectMany((m) => m.Hooks))
            {
                TreeNode hooknode = new TreeNode(hook.Name);
                if (hook.Flagged)
                {
                    hooknode.ImageKey         = "script_error.png";
                    hooknode.SelectedImageKey = "script_error.png";
                }
                else
                {
                    hooknode.ImageKey         = "script_lightning.png";
                    hooknode.SelectedImageKey = "script_lightning.png";
                }
                hooknode.Tag = hook;
                hooks.Nodes.Add(hooknode);
            }

            // Add assemblies
            TreeNode assemblies = new TreeNode("Assemblies");

            assemblies.ImageKey         = "folder.png";
            assemblies.SelectedImageKey = "folder.png";
            objectview.Nodes.Add(assemblies);
            List <TreeNode> assemblynodes = new List <TreeNode>();

            foreach (string file in Directory.EnumerateFiles(CurrentProject.TargetDirectory, "*.dll"))
            {
                // Check if it's an original dll
                if (!IsFileOriginal(file))
                {
                    // See if it has a manifest
                    string assemblyname = Path.GetFileNameWithoutExtension(file);
                    if (CurrentProject.Manifests.Any((x) => x.AssemblyName == assemblyname))
                    {
                        // Get the manifest
                        Manifest manifest = CurrentProject.Manifests.Single((x) => x.AssemblyName == assemblyname);

                        // Load the assembly
                        NodeAssemblyData data = new NodeAssemblyData();
                        data.Included     = true;
                        data.AssemblyName = assemblyname;
                        data.Loaded       = true;
                        data.Definition   = LoadAssembly(assemblyname);

                        // Create a node for it
                        TreeNode assembly = new TreeNode(assemblyname);
                        if (data.Definition == null)
                        {
                            assembly.ImageKey         = "error.png";
                            assembly.SelectedImageKey = "error.png";
                        }
                        else
                        {
                            assembly.ImageKey         = "accept.png";
                            assembly.SelectedImageKey = "accept.png";
                        }
                        assembly.Tag = data;
                        assemblynodes.Add(assembly);

                        // Populate
                        if (data.Definition != null)
                        {
                            PopulateAssemblyNode(assembly, data.Definition);
                        }
                    }
                    else
                    {
                        // Nope, just make an empty node for it
                        TreeNode assembly = new TreeNode(assemblyname);
                        assembly.ImageKey         = "cross.png";
                        assembly.SelectedImageKey = "cross.png";
                        assembly.Tag = new NodeAssemblyData()
                        {
                            Included = false, AssemblyName = assemblyname
                        };
                        assemblynodes.Add(assembly);
                    }
                }
            }

            // Sort
            assemblynodes.Sort((a, b) =>
            {
                return(Comparer <string> .Default.Compare(a.ImageKey, b.ImageKey));
            });

            // Add
            for (int i = 0; i < assemblynodes.Count; i++)
            {
                assemblies.Nodes.Add(assemblynodes[i]);
            }

            // Set status
            statuslabel.Text = "";
        }