From dc090349e584a5057e53ac0000be6947520f0399 Mon Sep 17 00:00:00 2001 From: Soloman N Date: Wed, 15 Aug 2018 17:34:55 -0400 Subject: [PATCH] Revisions to PR - Removed changes to white space and comments. - Replaced *ArchetypeDef properties to use members where necessary. - Removed reference to windows forms from CodeWalker.Core. Replaced messagebox with exceptions. - Added trycatch to CreateMloEntity when creating entities. - Changed vector4 initialization to use extension method in YmapFile.cs - Fixed AllArchetypes array initialization in AddArchetype() method. - Fixed unused try-catch method in RemoveArchetype() method. --- CodeWalker.Core/CodeWalker.Core.csproj | 1 - .../GameFiles/FileTypes/YmapFile.cs | 4 +- .../GameFiles/FileTypes/YtypFile.cs | 36 +- .../GameFiles/MetaTypes/Archetype.cs | 42 +- CodeWalker.csproj | 9 - .../Panels/EditProjectYtypPanel.Designer.cs | 120 ----- Project/Panels/EditProjectYtypPanel.cs | 267 ----------- Project/Panels/EditProjectYtypPanel.resx | 427 ------------------ Project/Panels/ProjectExplorerPanel.cs | 14 +- Project/ProjectForm.cs | 44 +- WorldForm.cs | 10 +- WorldInfoForm.cs | 2 +- 12 files changed, 65 insertions(+), 911 deletions(-) delete mode 100644 Project/Panels/EditProjectYtypPanel.Designer.cs delete mode 100644 Project/Panels/EditProjectYtypPanel.cs delete mode 100644 Project/Panels/EditProjectYtypPanel.resx diff --git a/CodeWalker.Core/CodeWalker.Core.csproj b/CodeWalker.Core/CodeWalker.Core.csproj index 0ab3e3a..3e40522 100644 --- a/CodeWalker.Core/CodeWalker.Core.csproj +++ b/CodeWalker.Core/CodeWalker.Core.csproj @@ -39,7 +39,6 @@ - diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs index ffed210..0ea68a3 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs @@ -1373,7 +1373,7 @@ namespace CodeWalker.GameFiles { Quaternion inv = Quaternion.Normalize(Quaternion.Invert(ori)); Orientation = ori; - _CEntityDef.rotation = new Vector4(inv.X, inv.Y, inv.Z, inv.W); + _CEntityDef.rotation = inv.ToVector4(); } if (MloInstance != null) @@ -1393,7 +1393,7 @@ namespace CodeWalker.GameFiles { Quaternion ori = Quaternion.Normalize(Quaternion.Invert(inv)); Orientation = ori; - _CEntityDef.rotation = new Vector4(inv.X, inv.Y, inv.Z, inv.W); + _CEntityDef.rotation = inv.ToVector4(); if (MloInstance != null) { diff --git a/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs index c691d32..7160363 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs @@ -1,7 +1,10 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; +using System.Text; +using System.Threading.Tasks; namespace CodeWalker.GameFiles { @@ -22,7 +25,9 @@ namespace CodeWalker.GameFiles public CMapTypes CMapTypes { get { return _CMapTypes; } set { _CMapTypes = value; } } public Archetype[] AllArchetypes { get; set; } + public MetaWrapper[] Extensions { get; set; } + public CCompositeEntityType[] CompositeEntityTypes { get; set; } @@ -76,7 +81,7 @@ namespace CodeWalker.GameFiles switch (arch) { case TimeArchetype t: - ptrs[i] = mb.AddItemPtr(MetaName.CTimeArchetypeDef, t.TimeArchetypeDef); + ptrs[i] = mb.AddItemPtr(MetaName.CTimeArchetypeDef, t._TimeArchetypeDef); break; case MloArchetype m: try @@ -94,7 +99,7 @@ namespace CodeWalker.GameFiles ptrs[i] = mb.AddItemPtr(MetaName.CMloArchetypeDef, m._MloArchetypeDef); break; case Archetype a: - ptrs[i] = mb.AddItemPtr(MetaName.CBaseArchetypeDef, a.BaseArchetypeDef); + ptrs[i] = mb.AddItemPtr(MetaName.CBaseArchetypeDef, a._BaseArchetypeDef); break; } } @@ -156,7 +161,7 @@ namespace CodeWalker.GameFiles //direct load from a raw, compressed ytyp file (openIV-compatible format) RpfFile.LoadResourceFile(this, data, 2); - + Loaded = true; } @@ -346,10 +351,8 @@ namespace CodeWalker.GameFiles public void AddArchetype(Archetype archetype) { if (AllArchetypes == null) - { - AllArchetypes = new[] { archetype }; - return; - } + AllArchetypes = new Archetype[0]; + List archetypes = AllArchetypes.ToList(); archetype.Ytyp = this; archetypes.Add(archetype); @@ -369,20 +372,13 @@ namespace CodeWalker.GameFiles public bool RemoveArchetype(Archetype archetype) { - try + List archetypes = AllArchetypes.ToList(); + if (archetypes.Remove(archetype)) { - List archetypes = AllArchetypes.ToList(); - if (archetypes.Remove(archetype)) - { - AllArchetypes = archetypes.ToArray(); - return true; - } - return false; - } - catch - { - return false; + AllArchetypes = archetypes.ToArray(); + return true; } + return false; } } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs b/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs index ef883a0..a3afb4b 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs @@ -1,8 +1,10 @@ using SharpDX; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; -using System.Windows.Forms; +using System.Text; +using System.Threading.Tasks; namespace CodeWalker.GameFiles { @@ -12,7 +14,7 @@ namespace CodeWalker.GameFiles public virtual MetaName Type => MetaName.CBaseArchetypeDef; public CBaseArchetypeDef _BaseArchetypeDef; - public CBaseArchetypeDef BaseArchetypeDef { get { return _BaseArchetypeDef; } set { _BaseArchetypeDef = value; } } + public CBaseArchetypeDef BaseArchetypeDef => _BaseArchetypeDef; // for browsing. public MetaHash Hash { get; set; } public YtypFile Ytyp { get; set; } @@ -47,7 +49,7 @@ namespace CodeWalker.GameFiles protected void InitVars(ref CBaseArchetypeDef arch) { - BaseArchetypeDef = arch; + _BaseArchetypeDef = arch; Hash = arch.assetName; if (Hash.Hash == 0) Hash = arch.name; DrawableDict = arch.drawableDictionary; @@ -81,13 +83,8 @@ namespace CodeWalker.GameFiles public class TimeArchetype : Archetype { public override MetaName Type => MetaName.CTimeArchetypeDef; - public CTimeArchetypeDef _TimeArchetypeDef; - public CTimeArchetypeDef TimeArchetypeDef { get { return _TimeArchetypeDef; } set { _TimeArchetypeDef = value; } } - - public CTimeArchetypeDefData _TimeArchetypeDefData; - public CTimeArchetypeDefData TimeArchetypeDefData { get { return _TimeArchetypeDefData; } set { _TimeArchetypeDefData = value; } } - + public CTimeArchetypeDef TimeArchetypeDef => _TimeArchetypeDef; // for browsing. public uint TimeFlags { get; set; } public bool[] ActiveHours { get; set; } @@ -99,11 +96,9 @@ namespace CodeWalker.GameFiles { Ytyp = ytyp; InitVars(ref arch._BaseArchetypeDef); + _TimeArchetypeDef = arch; - TimeArchetypeDef = arch; - TimeArchetypeDefData = arch.TimeArchetypeDef; - - TimeFlags = _TimeArchetypeDefData.timeFlags; + TimeFlags = arch.TimeArchetypeDef.timeFlags; ActiveHours = new bool[24]; ActiveHoursText = new string[24]; for (int i = 0; i < 24; i++) @@ -131,11 +126,10 @@ namespace CodeWalker.GameFiles { public override MetaName Type => MetaName.CMloArchetypeDef; - public CMloArchetypeDefData _MloArchetypeDefData; - public CMloArchetypeDefData MloArchetypeDefData { get { return _MloArchetypeDefData; } set { _MloArchetypeDefData = value; } } + public CMloArchetypeDef MloArchetypeDef => _MloArchetypeDef; // for browsing. public CMloArchetypeDef _MloArchetypeDef; - public CMloArchetypeDef MloArchetypeDef { get { return _MloArchetypeDef; } set { _MloArchetypeDef = value; } } + public CMloArchetypeDefData _MloArchetypeDefData; public MCEntityDef[] entities { get; set; } public MCMloRoomDef[] rooms { get; set; } @@ -150,26 +144,25 @@ namespace CodeWalker.GameFiles { Ytyp = ytyp; InitVars(ref arch._BaseArchetypeDef); - MloArchetypeDef = arch; - MloArchetypeDefData = arch.MloArchetypeDef; + _MloArchetypeDef = arch; + _MloArchetypeDefData = arch.MloArchetypeDef; } - public void AddEntity(YmapEntityDef ent, int roomIndex) + public bool AddEntity(YmapEntityDef ent, int roomIndex) { if (InstancedEntities == null) InstancedEntities = new List(); if (InstancedEntities.Contains(ent)) - return; + { + throw new ArgumentException($"Entity {ent.Name} is already contained in {Name}."); + } InstancedEntities.Add(ent); - MCEntityDef entDef = entities.FirstOrDefault(x => x.EntityInstance == ent); - if (entDef != null) return; if (roomIndex > rooms.Length) { - MessageBox.Show($@"Room index {roomIndex} does not exist in {Name}."); - return; + throw new ArgumentOutOfRangeException($"Room index {roomIndex} exceeds the amount of rooms in {Name}."); } MCEntityDef mcEntityDef; @@ -191,6 +184,7 @@ namespace CodeWalker.GameFiles var attachedObjs = rooms[roomIndex].AttachedObjects?.ToList() ?? new List(); attachedObjs.Add((uint)ent.Index); rooms[roomIndex].AttachedObjects = attachedObjs.ToArray(); + return true; } public bool RemoveEntity(YmapEntityDef ent) diff --git a/CodeWalker.csproj b/CodeWalker.csproj index aab68bc..fb342ed 100644 --- a/CodeWalker.csproj +++ b/CodeWalker.csproj @@ -292,12 +292,6 @@ - - Form - - - EditProjectYtypPanel.cs - Form @@ -590,9 +584,6 @@ MenuForm.cs - - EditProjectYtypPanel.cs - EditProjectPanel.cs diff --git a/Project/Panels/EditProjectYtypPanel.Designer.cs b/Project/Panels/EditProjectYtypPanel.Designer.cs deleted file mode 100644 index ce5cc3d..0000000 --- a/Project/Panels/EditProjectYtypPanel.Designer.cs +++ /dev/null @@ -1,120 +0,0 @@ -namespace CodeWalker.Project.Panels -{ - partial class EditProjectYtypPanel - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditProjectYtypPanel)); - this.label162 = new System.Windows.Forms.Label(); - this.ProjectManifestGenerateButton = new System.Windows.Forms.Button(); - this.ProjectManifestTextBox = new FastColoredTextBoxNS.FastColoredTextBox(); - ((System.ComponentModel.ISupportInitialize)(this.ProjectManifestTextBox)).BeginInit(); - this.SuspendLayout(); - // - // label162 - // - this.label162.AutoSize = true; - this.label162.Location = new System.Drawing.Point(96, 7); - this.label162.Name = "label162"; - this.label162.Size = new System.Drawing.Size(73, 13); - this.label162.TabIndex = 5; - this.label162.Text = "XML for *.ytyp"; - // - // ProjectManifestGenerateButton - // - this.ProjectManifestGenerateButton.Location = new System.Drawing.Point(3, 2); - this.ProjectManifestGenerateButton.Name = "ProjectManifestGenerateButton"; - this.ProjectManifestGenerateButton.Size = new System.Drawing.Size(75, 23); - this.ProjectManifestGenerateButton.TabIndex = 4; - this.ProjectManifestGenerateButton.Text = "Generate"; - this.ProjectManifestGenerateButton.UseVisualStyleBackColor = true; - this.ProjectManifestGenerateButton.Click += new System.EventHandler(this.ProjectManifestGenerateButton_Click); - // - // ProjectManifestTextBox - // - this.ProjectManifestTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ProjectManifestTextBox.AutoCompleteBracketsList = new char[] { - '(', - ')', - '{', - '}', - '[', - ']', - '\"', - '\"', - '\'', - '\''}; - this.ProjectManifestTextBox.AutoIndentCharsPatterns = ""; - this.ProjectManifestTextBox.AutoScrollMinSize = new System.Drawing.Size(27, 14); - this.ProjectManifestTextBox.BackBrush = null; - this.ProjectManifestTextBox.CharHeight = 14; - this.ProjectManifestTextBox.CharWidth = 8; - this.ProjectManifestTextBox.CommentPrefix = null; - this.ProjectManifestTextBox.Cursor = System.Windows.Forms.Cursors.IBeam; - this.ProjectManifestTextBox.DisabledColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); - this.ProjectManifestTextBox.IsReplaceMode = false; - this.ProjectManifestTextBox.Language = FastColoredTextBoxNS.Language.XML; - this.ProjectManifestTextBox.LeftBracket = '<'; - this.ProjectManifestTextBox.LeftBracket2 = '('; - this.ProjectManifestTextBox.Location = new System.Drawing.Point(0, 31); - this.ProjectManifestTextBox.Name = "ProjectManifestTextBox"; - this.ProjectManifestTextBox.Paddings = new System.Windows.Forms.Padding(0); - this.ProjectManifestTextBox.RightBracket = '>'; - this.ProjectManifestTextBox.RightBracket2 = ')'; - this.ProjectManifestTextBox.SelectionColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(255))))); - this.ProjectManifestTextBox.ServiceColors = ((FastColoredTextBoxNS.ServiceColors)(resources.GetObject("ProjectManifestTextBox.ServiceColors"))); - this.ProjectManifestTextBox.Size = new System.Drawing.Size(605, 420); - this.ProjectManifestTextBox.TabIndex = 3; - this.ProjectManifestTextBox.Zoom = 100; - // - // EditProjectYtypPanel - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(605, 451); - this.Controls.Add(this.label162); - this.Controls.Add(this.ProjectManifestGenerateButton); - this.Controls.Add(this.ProjectManifestTextBox); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "EditProjectYtypPanel"; - this.Text = "Ytyp"; - ((System.ComponentModel.ISupportInitialize)(this.ProjectManifestTextBox)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label label162; - private System.Windows.Forms.Button ProjectManifestGenerateButton; - private FastColoredTextBoxNS.FastColoredTextBox ProjectManifestTextBox; - } -} \ No newline at end of file diff --git a/Project/Panels/EditProjectYtypPanel.cs b/Project/Panels/EditProjectYtypPanel.cs deleted file mode 100644 index 9143ce4..0000000 --- a/Project/Panels/EditProjectYtypPanel.cs +++ /dev/null @@ -1,267 +0,0 @@ -using CodeWalker.GameFiles; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using WeifenLuo.WinFormsUI.Docking; - -namespace CodeWalker.Project.Panels -{ - public partial class EditProjectYtypPanel : ProjectPanel - { - public ProjectForm ProjectForm { get; set; } - public ProjectFile CurrentProjectFile { get; set; } - - public EditProjectYtypPanel(ProjectForm projectForm) - { - ProjectForm = projectForm; - InitializeComponent(); - Tag = "*.ymf"; - } - - public override void SetTheme(ThemeBase theme) - { - base.SetTheme(theme); - - var txtback = SystemColors.Window; - var indback = Color.WhiteSmoke; - - if (theme is VS2015DarkTheme) - { - txtback = theme.ColorPalette.MainWindowActive.Background; - indback = theme.ColorPalette.MainWindowActive.Background; - } - - ProjectManifestTextBox.BackColor = txtback; - ProjectManifestTextBox.IndentBackColor = indback; - - } - - - public void SetProject(ProjectFile project) - { - //TODO: include _manifest.ymf in project and load/save - - CurrentProjectFile = project; - - GenerateProjectManifest(); - } - - - - - private void GenerateProjectManifest() - { - List archetypes = new List(); - if (CurrentProjectFile.YmapFiles.Count <= 0) - { - OpenFileDialog ofd = new OpenFileDialog - { - Filter = @"Ydr Files (*.ydr)|*ydr" - }; - - if (ofd.ShowDialog(this) != DialogResult.OK) - return; - - foreach (string file in ofd.FileNames) - { - byte[] data = File.ReadAllBytes(file); - YdrFile ydrFile = new YdrFile(); - RpfFile.LoadResourceFile(ydrFile, data, 2); - Archetype archetype = new Archetype(); - string entityName = Path.GetFileNameWithoutExtension(file); - archetype._BaseArchetypeDef.assetName = JenkHash.GenHash(entityName); - archetype._BaseArchetypeDef.name = JenkHash.GenHash(entityName); - archetype.BSCenter = ydrFile.Drawable.BoundingCenter; - archetype.BBMax = ydrFile.Drawable.BoundingBoxMax.XYZ(); - archetype.BBMin = ydrFile.Drawable.BoundingBoxMin.XYZ(); - archetype.BSRadius = ydrFile.Drawable.BoundingSphereRadius; - archetype.LodDist = archetype.BSRadius * 10f; - archetype._BaseArchetypeDef.hdTextureDist = 15f; - archetype._BaseArchetypeDef.flags = 32; - archetypes.Add(archetype); - } - } - - var sb = new StringBuilder(); - - sb.AppendLine(""); - sb.AppendLine(""); - sb.AppendLine("\t"); - sb.AppendLine("\t"); - foreach (Archetype archetype in archetypes) - { - sb.AppendLine($"\t\t"); - sb.AppendLine($"\t\t\t"); - sb.AppendLine($"\t\t\t"); - sb.AppendLine($"\t\t\t"); - sb.AppendLine($"\t\t\t"); - sb.AppendLine($"\t\t\t"); - sb.AppendLine($"\t\t\t"); - sb.AppendLine($"\t\t\t"); - sb.AppendLine($"\t\t\t"); - sb.AppendLine($"\t\t\t{archetype.Name}"); - sb.AppendLine($"\t\t\t{archetype.Name}"); - sb.AppendLine($"\t\t\t"); - sb.AppendLine($"\t\t\t"); - sb.AppendLine($"\t\t\t{archetype.Name}"); - sb.AppendLine($"\t\t\t{MetaName.ASSET_TYPE_DRAWABLE}"); - sb.AppendLine($"\t\t\t{archetype.AssetName}"); - sb.AppendLine("\t\t\t"); - sb.AppendLine("\t\t"); - } - sb.AppendLine("\t"); - sb.AppendLine("\tENTER_NAME_HERE"); - sb.AppendLine("\t"); - sb.AppendLine("\t"); - sb.AppendLine(""); - //sb.AppendLine(""); - //sb.AppendLine(" "); - //sb.AppendLine(" "); - //sb.AppendLine(" "); - - - //var getYtypName = new Func((ytyp) => - //{ - // var ytypname = ytyp?.RpfFileEntry?.NameLower; - // if (ytyp != null) - // { - // if (string.IsNullOrEmpty(ytypname)) - // { - // ytypname = ytyp.RpfFileEntry?.Name?.ToLowerInvariant(); - // if (ytypname == null) ytypname = ""; - // } - // if (ytypname.EndsWith(".ytyp")) - // { - // ytypname = ytypname.Substring(0, ytypname.Length - 5); - // } - // } - // return ytypname; - //}); - - - //if ((CurrentProjectFile != null) && (CurrentProjectFile.YmapFiles.Count > 0)) - //{ - // sb.AppendLine(" "); - // foreach (var ymap in CurrentProjectFile.YmapFiles) - // { - // var ymapname = ymap.RpfFileEntry?.NameLower; - // if (string.IsNullOrEmpty(ymapname)) - // { - // ymapname = ymap.Name.ToLowerInvariant(); - // } - // if (ymapname.EndsWith(".ymap")) - // { - // ymapname = ymapname.Substring(0, ymapname.Length - 5); - // } - - // mapdeps.Clear(); - // if (ymap.AllEntities != null) - // { - // foreach (var ent in ymap.AllEntities) - // { - // var ytyp = ent.Archetype?.Ytyp; - // var ytypname = getYtypName(ytyp); - // if (ytyp != null) - // { - // mapdeps[ytypname] = ytyp; - // } - - // if (ent.IsMlo) - // { - // if (ent.MloInstance?.Entities != null) - // { - // Dictionary typdepdict; - // if (!typdeps.TryGetValue(ytypname, out typdepdict)) - // { - // typdepdict = new Dictionary(); - // typdeps[ytypname] = typdepdict; - // } - // foreach (var ient in ent.MloInstance.Entities) - // { - // var iytyp = ient.Archetype?.Ytyp; - // var iytypname = getYtypName(iytyp); - // if ((iytyp != null) && (iytypname != ytypname)) - // { - // typdepdict[iytypname] = iytyp; - // } - // } - // } - // } - - // } - // } - // if (ymap.GrassInstanceBatches != null) - // { - // foreach (var batch in ymap.GrassInstanceBatches) - // { - // var ytyp = batch.Archetype?.Ytyp; - // var ytypname = getYtypName(ytyp); - // if (ytyp != null) - // { - // mapdeps[ytypname] = ytyp; - // } - // } - // } - - // sb.AppendLine(" "); - // sb.AppendLine(" " + ymapname + ""); - // sb.AppendLine(" "); - // sb.AppendLine(" "); - // foreach (var kvp in mapdeps) - // { - // sb.AppendLine(" " + kvp.Key + ""); - // } - // sb.AppendLine(" "); - // sb.AppendLine(" "); - // } - // sb.AppendLine(" "); - //} - //else - //{ - // sb.AppendLine(" "); - //} - - //if (typdeps.Count > 0) - //{ - // sb.AppendLine(" "); - // foreach (var kvp1 in typdeps) - // { - // sb.AppendLine(" "); - // sb.AppendLine(" " + kvp1.Key + ""); - // sb.AppendLine(" INTERIOR_DATA"); - // sb.AppendLine(" "); - // foreach (var kvp2 in kvp1.Value) - // { - // sb.AppendLine(" " + kvp2.Key + ""); - // } - // sb.AppendLine(" "); - // sb.AppendLine(" "); - // } - // sb.AppendLine(" "); - //} - //else - //{ - // sb.AppendLine(" "); - //} - - //sb.AppendLine(" "); - //sb.AppendLine(""); - - ProjectManifestTextBox.Text = sb.ToString(); - Text = "*.ytyp*"; - } - - private void ProjectManifestGenerateButton_Click(object sender, EventArgs e) - { - CurrentProjectFile = ProjectForm.CurrentProjectFile; - GenerateProjectManifest(); - } - } -} diff --git a/Project/Panels/EditProjectYtypPanel.resx b/Project/Panels/EditProjectYtypPanel.resx deleted file mode 100644 index 538e8fc..0000000 --- a/Project/Panels/EditProjectYtypPanel.resx +++ /dev/null @@ -1,427 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdGYXN0Q29sb3JlZFRleHRCb3gsIFZlcnNpb249Mi4xNi4yMS4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWZiOGFhMTJiOTk0ZWY2MWIMAwAAAFFTeXN0 - ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu - PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACJGYXN0Q29sb3JlZFRleHRCb3hOUy5TZXJ2aWNlQ29sb3JzBgAA - ACg8Q29sbGFwc2VNYXJrZXJGb3JlQ29sb3I+a19fQmFja2luZ0ZpZWxkKDxDb2xsYXBzZU1hcmtlckJh - Y2tDb2xvcj5rX19CYWNraW5nRmllbGQqPENvbGxhcHNlTWFya2VyQm9yZGVyQ29sb3I+a19fQmFja2lu - Z0ZpZWxkJjxFeHBhbmRNYXJrZXJGb3JlQ29sb3I+a19fQmFja2luZ0ZpZWxkJjxFeHBhbmRNYXJrZXJC - YWNrQ29sb3I+a19fQmFja2luZ0ZpZWxkKDxFeHBhbmRNYXJrZXJCb3JkZXJDb2xvcj5rX19CYWNraW5n - RmllbGQEBAQEBAQUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAA - ABRTeXN0ZW0uRHJhd2luZy5Db2xvcgMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAFFN5c3RlbS5E - cmF3aW5nLkNvbG9yAwAAABRTeXN0ZW0uRHJhd2luZy5Db2xvcgMAAAACAAAABfz///8UU3lzdGVtLkRy - YXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAACgAAAAAA - AAAAlgABAAH7/////P///woAAAAAAAAAAKQAAQAB+v////z///8KAAAAAAAAAACWAAEAAfn////8//// - CgAAAAAAAAAAjQABAAH4/////P///woAAAAAAAAAAKQAAQAB9/////z///8KAAAAAAAAAACWAAEACw== - - - - - - AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA - 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 - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA - APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 - P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA - AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA - AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// - /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO - 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// - /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA - AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc - skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU - 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq - +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz - /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR - p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm - +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB - AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ - /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ - +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd - 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ - 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok - 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ - 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ - +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ - +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA - AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ - 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O - 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ - 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ - 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ - +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA - AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu - GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ - AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ - UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR - 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA - /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w - AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ - 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ - 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ - 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA - AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ - 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ - AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ - 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ - +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ - +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ - /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L - z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq - IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ - mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ - 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ - 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD - AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ - /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY - z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ - +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 - ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ - 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ - 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ - 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo - UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 - AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K - FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH - BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr - 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn - CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV - Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau - LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ - +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 - yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ - 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// - mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ - 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH - en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J - AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ - +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ - 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA - AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 - y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ - 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ - +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz - WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ - 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ - 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 - uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// - AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA - /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ - +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ - +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ - AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ - 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH - 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ - 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH - AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX - 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ - 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ - 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA - GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA - AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ - +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ - +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ - 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ - 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ - AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ - y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA - /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ - 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA - /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ - 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ - /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA - AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 - Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ - /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA - /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp - Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ - 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ - yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx - KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA - AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ - +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo - 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ - QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ - /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA - /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ - 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA - AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA - /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ - /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ - /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// - //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA - H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A - A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA - /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A - AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf - AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 - AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// - ///////gD/////////Af//////////////8= - - - \ No newline at end of file diff --git a/Project/Panels/ProjectExplorerPanel.cs b/Project/Panels/ProjectExplorerPanel.cs index ce49f2d..588d73b 100644 --- a/Project/Panels/ProjectExplorerPanel.cs +++ b/Project/Panels/ProjectExplorerPanel.cs @@ -694,6 +694,12 @@ namespace CodeWalker.Project.Panels + + + + + + private TreeNode GetChildTreeNode(TreeNode node, string name) { if (node == null) return null; @@ -1003,14 +1009,11 @@ namespace CodeWalker.Project.Panels + public void DeselectNode() { ProjectTreeView.SelectedNode = null; } - - - - public void TrySelectEntityTreeNode(YmapEntityDef ent) { TreeNode entnode = FindEntityTreeNode(ent); @@ -1500,6 +1503,8 @@ namespace CodeWalker.Project.Panels + + public event ProjectExplorerItemSelectHandler OnItemSelected; public event ProjectExplorerItemActivateHandler OnItemActivated; @@ -1516,6 +1521,7 @@ namespace CodeWalker.Project.Panels OnItemActivated?.Invoke(ProjectTreeView.SelectedNode.Tag); } } + private void ProjectTreeView_BeforeCollapse(object sender, TreeViewCancelEventArgs e) { //if (e.Node.Tag != CurrentProjectFile) return; //disabling doubleclick expand/collapse only for project node diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index 7dc68d9..0e81432 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -313,13 +313,6 @@ namespace CodeWalker.Project (panel) => { panel.SetProject(CurrentProjectFile); }, //updateFunc (panel) => { return true; }); //findFunc } - private void ShowEditProjectYtypPanel(bool promote) - { - ShowPanel(promote, - () => { return new EditProjectYtypPanel(this); }, //createFunc - (panel) => { panel.SetProject(CurrentProjectFile); }, //updateFunc - (panel) => { return true; }); //findFunc - } private void ShowEditYmapPanel(bool promote) { ShowPanel(promote, @@ -2194,22 +2187,27 @@ namespace CodeWalker.Project MCEntityDef ment = new MCEntityDef(ref cent, mloArch); YmapEntityDef outEnt; - if (WorldForm != null) + try { - lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + // Add the entity to the mlo instance and archetype. + outEnt = mloInstance.CreateEntity(mloInstance.Owner, mloArch, ment, createindex, roomIndex); + } + } + else { - // Add the entity to the mlo instance and archetype. outEnt = mloInstance.CreateEntity(mloInstance.Owner, mloArch, ment, createindex, roomIndex); } } - else + catch(Exception e) { - outEnt = mloInstance.CreateEntity(mloInstance.Owner, mloArch, ment, createindex, roomIndex); + MessageBox.Show(this, e.Message, "Create MLO Entity Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; } - // Something failed? - if (outEnt == null) return; - mloInstance.AddEntity(outEnt); outEnt.SetArchetype(GameFileCache.GetArchetype(cent.archetypeName)); @@ -2233,18 +2231,6 @@ namespace CodeWalker.Project return true; } - int idx = CurrentEntity.Index; - for (int i = idx + 1; i < mloArchetype.entities.Length; i++) - { - var ent = mloArchetype.entities[i].EntityInstance; - if (ent == null) continue; // should not happen but just in case... - if (ent._CEntityDef.numChildren != 0) - { - MessageBox.Show("There are other entities present in this mlo entity that have children. Deleting this entity is not currently supported by CodeWalker."); - return true; - } - } - if (MessageBox.Show("Are you sure you want to delete this entity?\n" + CurrentEntity._CEntityDef.archetypeName.ToString() + "\n" + CurrentEntity.Position.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) { return true; @@ -6022,10 +6008,6 @@ namespace CodeWalker.Project RemoveScenarioFromProject(); } - private void YtypGeneratorToolStripMenuItem_Click(object sender, EventArgs e) - { - ShowEditProjectYtypPanel(false); - } private void ToolsManifestGeneratorMenu_Click(object sender, EventArgs e) { ShowEditProjectManifestPanel(false); diff --git a/WorldForm.cs b/WorldForm.cs index 29349f6..356d2e2 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -2332,7 +2332,7 @@ namespace CodeWalker if (mraytrn.Intersects(ref bbox, out hitdist)) { if ((j == 0) && (gbbcount > 1)) continue;//ignore a model hit - //bool firsthit = (mousehit.YmapEntityDef == null); + //bool firsthit = (mousehit.EntityDef == null); if (hitdist > 0.0f) //firsthit || //ignore when inside the box { bool nearer = ((hitdist < CurMouseHit.HitDist) && (hitdist < ghitdist)); @@ -2435,14 +2435,14 @@ namespace CodeWalker // bbox.Maximum = gbox.AABB_Min.XYZ(); // if (mraytrn.Intersects(ref bbox, out hitdist)) //test geom box // { - // bool firsthit = (mousehit.YmapEntityDef == null); + // bool firsthit = (mousehit.EntityDef == null); // if (firsthit || (hitdist > 0.0f)) //ignore when inside the box.. // { // bool nearer = (hitdist < mousehit.HitDist); //closer than the last.. // if (nearer) // { // mousehit.HitDist = (hitdist > 0.0f) ? hitdist : mousehit.HitDist; - // mousehit.YmapEntityDef = entity; + // mousehit.EntityDef = entity; // mousehit.Archetype = arche; // mousehit.Drawable = drawable; // mousehit.CamRel = camrel; @@ -3573,7 +3573,7 @@ namespace CodeWalker private void SetSelectionUI(MapSelection item) { SelectionNameTextBox.Text = item.GetNameString("Nothing selected"); - //SelEntityPropertyGrid.SelectedObject = item.YmapEntityDef; + //SelEntityPropertyGrid.SelectedObject = item.EntityDef; SelArchetypePropertyGrid.SelectedObject = item.Archetype; SelDrawablePropertyGrid.SelectedObject = item.Drawable; @@ -3731,7 +3731,7 @@ namespace CodeWalker } - //var ent = SelectedItem.YmapEntityDef; + //var ent = SelectedItem.EntityDef; //ToolbarDeleteEntityButton.Enabled = false; ////ToolbarAddEntityButton.Enabled = false; //ToolbarCopyButton.Enabled = (ent != null); diff --git a/WorldInfoForm.cs b/WorldInfoForm.cs index cd2b9e9..0c5a47a 100644 --- a/WorldInfoForm.cs +++ b/WorldInfoForm.cs @@ -66,7 +66,7 @@ namespace CodeWalker SelectionItems = multiItems; SelectionNameTextBox.Text = item.GetNameString("Nothing selected"); - //SelEntityPropertyGrid.SelectedObject = item.YmapEntityDef; + //SelEntityPropertyGrid.SelectedObject = item.EntityDef; SelArchetypePropertyGrid.SelectedObject = item.Archetype; SelDrawablePropertyGrid.SelectedObject = item.Drawable; SelDrawableModelPropertyGrid.SelectedObject = null;