diff --git a/Source/Core/Builder.csproj b/Source/Core/Builder.csproj index 05b101ce..e63f973a 100644 --- a/Source/Core/Builder.csproj +++ b/Source/Core/Builder.csproj @@ -753,6 +753,7 @@ TagStatisticsForm.cs + @@ -852,6 +853,7 @@ + diff --git a/Source/Core/Builder.sln b/Source/Core/Builder.sln index a5d81e62..e0838665 100644 --- a/Source/Core/Builder.sln +++ b/Source/Core/Builder.sln @@ -16,8 +16,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BuilderEffects", "..\Plugin {818B3D10-F791-4C3F-9AF5-BB2D0079B63C} = {818B3D10-F791-4C3F-9AF5-BB2D0079B63C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommentsPanel", "..\Plugins\CommentsPanel\CommentsPanel.csproj", "{58BD8A5B-1B48-435D-8473-A92F27D06C49}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -90,16 +88,6 @@ Global {B859BE0F-A992-476D-A642-FA8EFE94AAA5}.Release|Mixed Platforms.Build.0 = Release|Any CPU {B859BE0F-A992-476D-A642-FA8EFE94AAA5}.Release|x86.ActiveCfg = Release|x86 {B859BE0F-A992-476D-A642-FA8EFE94AAA5}.Release|x86.Build.0 = Release|x86 - {58BD8A5B-1B48-435D-8473-A92F27D06C49}.Debug|Any CPU.ActiveCfg = Debug|x86 - {58BD8A5B-1B48-435D-8473-A92F27D06C49}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {58BD8A5B-1B48-435D-8473-A92F27D06C49}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {58BD8A5B-1B48-435D-8473-A92F27D06C49}.Debug|x86.ActiveCfg = Debug|x86 - {58BD8A5B-1B48-435D-8473-A92F27D06C49}.Debug|x86.Build.0 = Debug|x86 - {58BD8A5B-1B48-435D-8473-A92F27D06C49}.Release|Any CPU.ActiveCfg = Release|x86 - {58BD8A5B-1B48-435D-8473-A92F27D06C49}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {58BD8A5B-1B48-435D-8473-A92F27D06C49}.Release|Mixed Platforms.Build.0 = Release|x86 - {58BD8A5B-1B48-435D-8473-A92F27D06C49}.Release|x86.ActiveCfg = Release|x86 - {58BD8A5B-1B48-435D-8473-A92F27D06C49}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Source/Core/Compilers/AccCompiler.cs b/Source/Core/Compilers/AccCompiler.cs index f29b611a..c25156b0 100644 --- a/Source/Core/Compilers/AccCompiler.cs +++ b/Source/Core/Compilers/AccCompiler.cs @@ -78,13 +78,15 @@ namespace CodeImp.DoomBuilder.Compilers int line = 0; string sourcedir = Path.GetDirectoryName(sourcefile); + //xabis // Copy includes from the resources into the compiler's folder, preserving relative pathing and naming foreach (string include in General.Map.ScriptIncludes) { //grab the script text from the resources MemoryStream s = General.Map.Data.LoadFile(include); + if (s != null) { //pull the pk3 or directory sub folder out if applicable - FileInfo fi = new FileInfo(this.tempdir.FullName + @"\" + include); + FileInfo fi = new FileInfo(Path.Combine(this.tempdir.FullName, include)); //do not allow files to be overwritten, either accidentally or maliciously if (!fi.Exists) { diff --git a/Source/Core/General/MapManager.cs b/Source/Core/General/MapManager.cs index ec1a81c8..d63c5b40 100644 --- a/Source/Core/General/MapManager.cs +++ b/Source/Core/General/MapManager.cs @@ -1103,13 +1103,13 @@ namespace CodeImp.DoomBuilder { private void AddSelectionToGroup(int groupindex) { General.Interface.SetCursor(Cursors.WaitCursor); - // Make undo - undoredo.CreateUndo("Assign to group " + groupindex); + // Make undo. mxd: group assignment is not recorded + //undoredo.CreateUndo("Assign to group " + (groupindex + 1)); // Make selection - map.AddSelectionToGroup(0x01 << groupindex); + map.AddSelectionToGroup(groupindex); //mxd. switched groupmask to groupindex - General.Interface.DisplayStatus(StatusType.Action, "Assigned selection to group " + groupindex); + General.Interface.DisplayStatus(StatusType.Action, "Assigned selection to group " + (groupindex + 1)); General.Interface.SetCursor(Cursors.Default); } @@ -1123,10 +1123,21 @@ namespace CodeImp.DoomBuilder { map.SelectThingsByGroup(groupmask); // Redraw to show selection - General.Interface.DisplayStatus(StatusType.Action, "Selected group " + groupindex); + General.Interface.DisplayStatus(StatusType.Action, "Selected group " + (groupindex + 1)); General.Interface.RedrawDisplay(); } + //mxd. This clears a group + private void ClearGroup(int groupindex) { + General.Interface.SetCursor(Cursors.WaitCursor); + + // Clear group + map.ClearGroup(0x01 << groupindex, groupindex); + + General.Interface.DisplayStatus(StatusType.Action, "Cleared group " + (groupindex + 1)); + General.Interface.SetCursor(Cursors.Default); + } + // Select actions [BeginAction("selectgroup1")] internal void SelectGroup1() { SelectGroup(0); } @@ -1171,6 +1182,28 @@ namespace CodeImp.DoomBuilder { [BeginAction("assigngroup10")] internal void AssignGroup10() { AddSelectionToGroup(9); } + //mxd. Clear actions + [BeginAction("cleargroup1")] + internal void ClearGroup1() { ClearGroup(0); } + [BeginAction("cleargroup2")] + internal void ClearGroup2() { ClearGroup(1); } + [BeginAction("cleargroup3")] + internal void ClearGroup3() { ClearGroup(2); } + [BeginAction("cleargroup4")] + internal void ClearGroup4() { ClearGroup(3); } + [BeginAction("cleargroup5")] + internal void ClearGroup5() { ClearGroup(4); } + [BeginAction("cleargroup6")] + internal void ClearGroup6() { ClearGroup(5); } + [BeginAction("cleargroup7")] + internal void ClearGroup7() { ClearGroup(6); } + [BeginAction("cleargroup8")] + internal void ClearGroup8() { ClearGroup(7); } + [BeginAction("cleargroup9")] + internal void ClearGroup9() { ClearGroup(8); } + [BeginAction("cleargroup10")] + internal void ClearGroup10() { ClearGroup(9); } + #endregion #region ================== Script Editing diff --git a/Source/Core/Map/GroupInfo.cs b/Source/Core/Map/GroupInfo.cs new file mode 100644 index 00000000..61ad6f67 --- /dev/null +++ b/Source/Core/Map/GroupInfo.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CodeImp.DoomBuilder.Map +{ + public class GroupInfo + { + private int numSectors; + private int numLines; + private int numVerts; + private int numThings; + + public GroupInfo(int numSectors, int numLines, int numVerts, int numThings) { + this.numSectors = numSectors; + this.numLines = numLines; + this.numVerts = numVerts; + this.numThings = numThings; + } + + public override string ToString() { + string result = string.Empty; + if(numSectors > 0) result = numSectors + (numSectors > 1 ? " sectors" : " sector"); + + if(numLines > 0){ + if(string.IsNullOrEmpty(result)) + result = numLines + (numLines > 1 ? " lines" : " line"); + else + result += ", " + numLines + (numLines > 1 ? " lines" : " line"); + } + + if(numVerts > 0){ + if(string.IsNullOrEmpty(result)) + result = numVerts + (numVerts > 1 ? " vertices" : " vertex"); + else + result += ", " + numLines + (numVerts > 1 ? " vertices" : " vertex"); + } + + if(numThings > 0){ + if(string.IsNullOrEmpty(result)) + result = numThings + (numThings > 1 ? " things" : " thing"); + else + result += ", " + numThings + (numThings > 1 ? " things" : " thing"); + } + + return result; + } + + internal void Append(int numSectors, int numLines, int numVerts, int numThings) { + this.numSectors += numSectors; + this.numLines += numLines; + this.numVerts += numVerts; + this.numThings += numThings; + } + } +} diff --git a/Source/Core/Map/MapSet.cs b/Source/Core/Map/MapSet.cs index 8e118e1f..ceb6c9eb 100644 --- a/Source/Core/Map/MapSet.cs +++ b/Source/Core/Map/MapSet.cs @@ -84,6 +84,7 @@ namespace CodeImp.DoomBuilder.Map //mxd private Sector[] newSectors; + private GroupInfo[] groupInfos; // Behavior private int freezearrays; @@ -165,7 +166,9 @@ namespace CodeImp.DoomBuilder.Map internal bool AutoRemove { get { return autoremove; } set { autoremove = value; } } - public Sector[] NewSectors { get { return newSectors; } } + public Sector[] NewSectors { get { return newSectors; } } //mxd + + public GroupInfo[] GroupInfos { get { return groupInfos; } } //mxd #endregion @@ -188,6 +191,7 @@ namespace CodeImp.DoomBuilder.Map lastsectorindex = 0; autoremove = true; newSectors = new Sector[0]; //mxd + groupInfos = new GroupInfo[10]; //mxd // We have no destructor GC.SuppressFinalize(this); @@ -210,6 +214,7 @@ namespace CodeImp.DoomBuilder.Map lastsectorindex = 0; autoremove = true; newSectors = new Sector[0]; //mxd + groupInfos = new GroupInfo[10]; //mxd // Deserialize Deserialize(stream); @@ -260,6 +265,7 @@ namespace CodeImp.DoomBuilder.Map sel_things = null; indexholes = null; newSectors = null; //mxd + groupInfos = null; //mxd // Done isdisposed = true; @@ -1352,19 +1358,75 @@ namespace CodeImp.DoomBuilder.Map } /// This adds the current selection to the specified selection group. - public void AddSelectionToGroup(int groupmask) + //mxd. switched groupmask to groupindex + public void AddSelectionToGroup(int groupindex) { + //mxd + int numSectors = 0; + int numLines = 0; + int numVerts = 0; + int numThings = 0; + int groupmask = 0x01 << groupindex; + + foreach(SelectableElement e in vertices) { + if(e.Selected) { + numVerts++;//mxd + e.AddToGroup(groupmask); + } + } + + foreach(SelectableElement e in linedefs) { + if(e.Selected) { + numLines++;//mxd + e.AddToGroup(groupmask); + } + } + + foreach(SelectableElement e in sectors) { + if(e.Selected) { + numSectors++;//mxd + e.AddToGroup(groupmask); + } + } + + foreach(SelectableElement e in things) { + if(e.Selected) { + numThings++;//mxd + e.AddToGroup(groupmask); + } + } + + //mxd + if(numSectors > 0 || numLines > 0 || numThings > 0 || numVerts > 0) { + if(groupInfos[groupindex] != null) + groupInfos[groupindex].Append(numSectors, numLines, numVerts, numThings); + else + groupInfos[groupindex] = new GroupInfo(numSectors, numLines, numVerts, numThings); + } + } + + //mxd + public void ClearGroup(int groupmask, int groupindex) { foreach(SelectableElement e in vertices) - if(e.Selected) e.AddToGroup(groupmask); - + e.RemoveFromGroup(groupmask); + foreach(SelectableElement e in linedefs) - if(e.Selected) e.AddToGroup(groupmask); - + e.RemoveFromGroup(groupmask); + foreach(SelectableElement e in sectors) - if(e.Selected) e.AddToGroup(groupmask); - + e.RemoveFromGroup(groupmask); + foreach(SelectableElement e in things) - if(e.Selected) e.AddToGroup(groupmask); + e.RemoveFromGroup(groupmask); + + groupInfos[groupindex] = null; + } + + //mxd + public bool HaveSelectionGroups() { + foreach(GroupInfo info in groupInfos) + if(info != null) return true; + return false; } #endregion diff --git a/Source/Core/Properties/Resources.Designer.cs b/Source/Core/Properties/Resources.Designer.cs index 21a638ec..28ba43b1 100644 --- a/Source/Core/Properties/Resources.Designer.cs +++ b/Source/Core/Properties/Resources.Designer.cs @@ -88,6 +88,13 @@ namespace CodeImp.DoomBuilder.Properties { } } + internal static System.Drawing.Bitmap Check { + get { + object obj = ResourceManager.GetObject("Check", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap CLogo { get { object obj = ResourceManager.GetObject("CLogo", resourceCulture); diff --git a/Source/Core/Properties/Resources.resx b/Source/Core/Properties/Resources.resx index 07c36662..0f350b19 100644 --- a/Source/Core/Properties/Resources.resx +++ b/Source/Core/Properties/Resources.resx @@ -373,4 +373,7 @@ ..\Resources\TagStatistics.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Check.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Source/Core/Resources/Actions.cfg b/Source/Core/Resources/Actions.cfg index bcd29435..5dbae211 100644 --- a/Source/Core/Resources/Actions.cfg +++ b/Source/Core/Resources/Actions.cfg @@ -727,6 +727,126 @@ assigngroup10 allowscroll = false; } +//mxd +cleargroup1 +{ + title = "Clear Group 1"; + category = "selecting"; + description = "Clears group 1"; + allowkeys = true; + allowmouse = true; + allowscroll = false; + default = 196657; //Ctrl-Shift-1 +} + +//mxd +cleargroup2 +{ + title = "Clear Group 2"; + category = "selecting"; + description = "Clears group 2"; + allowkeys = true; + allowmouse = true; + allowscroll = false; + default = 196659; +} + +//mxd +cleargroup3 +{ + title = "Clear Group 3"; + category = "selecting"; + description = "Clears group 3"; + allowkeys = true; + allowmouse = true; + allowscroll = false; + default = 196660; +} + +//mxd +cleargroup4 +{ + title = "Clear Group 4"; + category = "selecting"; + description = "Clears group 4"; + allowkeys = true; + allowmouse = true; + allowscroll = false; + default = 196661; +} + +//mxd +cleargroup5 +{ + title = "Clear Group 5"; + category = "selecting"; + description = "Clears group 5"; + allowkeys = true; + allowmouse = true; + allowscroll = false; + default = 196662; +} + +//mxd +cleargroup6 +{ + title = "Clear Group 6"; + category = "selecting"; + description = "Clears group 6"; + allowkeys = true; + allowmouse = true; + allowscroll = false; + default = 196663; +} + +//mxd +cleargroup7 +{ + title = "Clear Group 7"; + category = "selecting"; + description = "Clears group 7"; + allowkeys = true; + allowmouse = true; + allowscroll = false; + default = 196664; +} + +//mxd +cleargroup8 +{ + title = "Clear Group 8"; + category = "selecting"; + description = "Clears group 8"; + allowkeys = true; + allowmouse = true; + allowscroll = false; + default = 196665; +} + +//mxd +cleargroup9 +{ + title = "Clear Group 9"; + category = "selecting"; + description = "Clears group 9"; + allowkeys = true; + allowmouse = true; + allowscroll = false; + default = 196656; +} + +//mxd +cleargroup10 +{ + title = "Clear Group 10"; + category = "selecting"; + description = "Clears group 10"; + allowkeys = true; + allowmouse = true; + allowscroll = false; + default = 196658; +} + openscripteditor { title = "Script Editor"; @@ -781,10 +901,12 @@ visualselect { title = "Select"; category = "visual"; - description = "Selects the highlighted item."; + description = "Selects the highlighted item. Hold Shift to select adjacent surfaces with the same texture. Hold Ctrl to adjacent surfaces with the same height"; allowkeys = true; allowmouse = true; allowscroll = false; + disregardcontrol = true; + disregardshift = true; } visualedit diff --git a/Source/Core/Resources/Check.png b/Source/Core/Resources/Check.png new file mode 100644 index 00000000..819a3eec Binary files /dev/null and b/Source/Core/Resources/Check.png differ diff --git a/Source/Core/Windows/MainForm.Designer.cs b/Source/Core/Windows/MainForm.Designer.cs index 6e5f91a4..f6b54224 100644 --- a/Source/Core/Windows/MainForm.Designer.cs +++ b/Source/Core/Windows/MainForm.Designer.cs @@ -72,9 +72,44 @@ namespace CodeImp.DoomBuilder.Windows this.itemgridinc = new System.Windows.Forms.ToolStripMenuItem(); this.itemgriddec = new System.Windows.Forms.ToolStripMenuItem(); this.itemgridsetup = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.addToGroup = new System.Windows.Forms.ToolStripMenuItem(); + this.addGroup1 = new System.Windows.Forms.ToolStripMenuItem(); + this.addGroup2 = new System.Windows.Forms.ToolStripMenuItem(); + this.addGroup3 = new System.Windows.Forms.ToolStripMenuItem(); + this.addGroup4 = new System.Windows.Forms.ToolStripMenuItem(); + this.addGroup5 = new System.Windows.Forms.ToolStripMenuItem(); + this.addGroup6 = new System.Windows.Forms.ToolStripMenuItem(); + this.addGroup7 = new System.Windows.Forms.ToolStripMenuItem(); + this.addGroup8 = new System.Windows.Forms.ToolStripMenuItem(); + this.addGroup9 = new System.Windows.Forms.ToolStripMenuItem(); + this.addGroup10 = new System.Windows.Forms.ToolStripMenuItem(); + this.selectGroup = new System.Windows.Forms.ToolStripMenuItem(); + this.selectGroup1 = new System.Windows.Forms.ToolStripMenuItem(); + this.selectGroup2 = new System.Windows.Forms.ToolStripMenuItem(); + this.selectGroup3 = new System.Windows.Forms.ToolStripMenuItem(); + this.selectGroup4 = new System.Windows.Forms.ToolStripMenuItem(); + this.selectGroup5 = new System.Windows.Forms.ToolStripMenuItem(); + this.selectGroup6 = new System.Windows.Forms.ToolStripMenuItem(); + this.selectGroup7 = new System.Windows.Forms.ToolStripMenuItem(); + this.selectGroup8 = new System.Windows.Forms.ToolStripMenuItem(); + this.selectGroup9 = new System.Windows.Forms.ToolStripMenuItem(); + this.selectGroup10 = new System.Windows.Forms.ToolStripMenuItem(); + this.clearGroup = new System.Windows.Forms.ToolStripMenuItem(); + this.clearGroup1 = new System.Windows.Forms.ToolStripMenuItem(); + this.clearGroup2 = new System.Windows.Forms.ToolStripMenuItem(); + this.clearGroup3 = new System.Windows.Forms.ToolStripMenuItem(); + this.clearGroup4 = new System.Windows.Forms.ToolStripMenuItem(); + this.clearGroup5 = new System.Windows.Forms.ToolStripMenuItem(); + this.clearGroup6 = new System.Windows.Forms.ToolStripMenuItem(); + this.clearGroup7 = new System.Windows.Forms.ToolStripMenuItem(); + this.clearGroup8 = new System.Windows.Forms.ToolStripMenuItem(); + this.clearGroup9 = new System.Windows.Forms.ToolStripMenuItem(); + this.clearGroup10 = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); this.itemSetCurrentTextures = new System.Windows.Forms.ToolStripMenuItem(); this.itemmapoptions = new System.Windows.Forms.ToolStripMenuItem(); + this.itemviewusedtags = new System.Windows.Forms.ToolStripMenuItem(); this.menuview = new System.Windows.Forms.ToolStripMenuItem(); this.itemthingsfilter = new System.Windows.Forms.ToolStripMenuItem(); this.seperatorviewthings = new System.Windows.Forms.ToolStripSeparator(); @@ -194,7 +229,17 @@ namespace CodeImp.DoomBuilder.Windows this.dockersspace = new System.Windows.Forms.Panel(); this.dockerspanel = new CodeImp.DoomBuilder.Controls.DockersControl(); this.dockerscollapser = new System.Windows.Forms.Timer(this.components); - this.itemviewusedtags = new System.Windows.Forms.ToolStripMenuItem(); + this.toolbarContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.toggleFile = new System.Windows.Forms.ToolStripMenuItem(); + this.toggleScript = new System.Windows.Forms.ToolStripMenuItem(); + this.toggleUndo = new System.Windows.Forms.ToolStripMenuItem(); + this.toggleCopy = new System.Windows.Forms.ToolStripMenuItem(); + this.togglePrefabs = new System.Windows.Forms.ToolStripMenuItem(); + this.toggleFilter = new System.Windows.Forms.ToolStripMenuItem(); + this.toggleViewModes = new System.Windows.Forms.ToolStripMenuItem(); + this.toggleGeometry = new System.Windows.Forms.ToolStripMenuItem(); + this.toggleTesting = new System.Windows.Forms.ToolStripMenuItem(); + this.toggleRendering = new System.Windows.Forms.ToolStripMenuItem(); toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator(); toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator(); @@ -205,6 +250,7 @@ namespace CodeImp.DoomBuilder.Windows this.toolbar.SuspendLayout(); this.statusbar.SuspendLayout(); this.panelinfo.SuspendLayout(); + this.toolbarContextMenu.SuspendLayout(); this.SuspendLayout(); // // toolStripSeparator1 @@ -257,13 +303,13 @@ namespace CodeImp.DoomBuilder.Windows // this.seperatoreditgrid.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3); this.seperatoreditgrid.Name = "seperatoreditgrid"; - this.seperatoreditgrid.Size = new System.Drawing.Size(186, 6); + this.seperatoreditgrid.Size = new System.Drawing.Size(194, 6); // // seperatoreditcopypaste // this.seperatoreditcopypaste.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3); this.seperatoreditcopypaste.Name = "seperatoreditcopypaste"; - this.seperatoreditcopypaste.Size = new System.Drawing.Size(186, 6); + this.seperatoreditcopypaste.Size = new System.Drawing.Size(194, 6); // // seperatorfile // @@ -431,6 +477,10 @@ namespace CodeImp.DoomBuilder.Windows this.itemgridinc, this.itemgriddec, this.itemgridsetup, + this.toolStripSeparator5, + this.addToGroup, + this.selectGroup, + this.clearGroup, this.toolStripSeparator4, this.itemSetCurrentTextures, this.seperatoreditgrid, @@ -439,12 +489,13 @@ namespace CodeImp.DoomBuilder.Windows this.menuedit.Name = "menuedit"; this.menuedit.Size = new System.Drawing.Size(39, 20); this.menuedit.Text = "&Edit"; + this.menuedit.DropDownOpening += new System.EventHandler(this.menuedit_DropDownOpening); // // itemundo // this.itemundo.Image = global::CodeImp.DoomBuilder.Properties.Resources.Undo; this.itemundo.Name = "itemundo"; - this.itemundo.Size = new System.Drawing.Size(189, 22); + this.itemundo.Size = new System.Drawing.Size(197, 22); this.itemundo.Tag = "builder_undo"; this.itemundo.Text = "&Undo"; this.itemundo.Click += new System.EventHandler(this.InvokeTaggedAction); @@ -453,7 +504,7 @@ namespace CodeImp.DoomBuilder.Windows // this.itemredo.Image = global::CodeImp.DoomBuilder.Properties.Resources.Redo; this.itemredo.Name = "itemredo"; - this.itemredo.Size = new System.Drawing.Size(189, 22); + this.itemredo.Size = new System.Drawing.Size(197, 22); this.itemredo.Tag = "builder_redo"; this.itemredo.Text = "&Redo"; this.itemredo.Click += new System.EventHandler(this.InvokeTaggedAction); @@ -462,13 +513,13 @@ namespace CodeImp.DoomBuilder.Windows // this.seperatoreditundo.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3); this.seperatoreditundo.Name = "seperatoreditundo"; - this.seperatoreditundo.Size = new System.Drawing.Size(186, 6); + this.seperatoreditundo.Size = new System.Drawing.Size(194, 6); // // itemcut // this.itemcut.Image = global::CodeImp.DoomBuilder.Properties.Resources.Cut; this.itemcut.Name = "itemcut"; - this.itemcut.Size = new System.Drawing.Size(189, 22); + this.itemcut.Size = new System.Drawing.Size(197, 22); this.itemcut.Tag = "builder_cutselection"; this.itemcut.Text = "Cu&t"; this.itemcut.Click += new System.EventHandler(this.InvokeTaggedAction); @@ -477,7 +528,7 @@ namespace CodeImp.DoomBuilder.Windows // this.itemcopy.Image = global::CodeImp.DoomBuilder.Properties.Resources.Copy; this.itemcopy.Name = "itemcopy"; - this.itemcopy.Size = new System.Drawing.Size(189, 22); + this.itemcopy.Size = new System.Drawing.Size(197, 22); this.itemcopy.Tag = "builder_copyselection"; this.itemcopy.Text = "&Copy"; this.itemcopy.Click += new System.EventHandler(this.InvokeTaggedAction); @@ -486,7 +537,7 @@ namespace CodeImp.DoomBuilder.Windows // this.itempaste.Image = global::CodeImp.DoomBuilder.Properties.Resources.Paste; this.itempaste.Name = "itempaste"; - this.itempaste.Size = new System.Drawing.Size(189, 22); + this.itempaste.Size = new System.Drawing.Size(197, 22); this.itempaste.Tag = "builder_pasteselection"; this.itempaste.Text = "&Paste"; this.itempaste.Click += new System.EventHandler(this.InvokeTaggedAction); @@ -495,7 +546,7 @@ namespace CodeImp.DoomBuilder.Windows // this.itempastespecial.Image = global::CodeImp.DoomBuilder.Properties.Resources.PasteSpecial; this.itempastespecial.Name = "itempastespecial"; - this.itempastespecial.Size = new System.Drawing.Size(189, 22); + this.itempastespecial.Size = new System.Drawing.Size(197, 22); this.itempastespecial.Tag = "builder_pasteselectionspecial"; this.itempastespecial.Text = "Paste Special..."; this.itempastespecial.Click += new System.EventHandler(this.InvokeTaggedAction); @@ -506,7 +557,7 @@ namespace CodeImp.DoomBuilder.Windows this.itemsnaptogrid.CheckState = System.Windows.Forms.CheckState.Checked; this.itemsnaptogrid.Image = global::CodeImp.DoomBuilder.Properties.Resources.Grid4; this.itemsnaptogrid.Name = "itemsnaptogrid"; - this.itemsnaptogrid.Size = new System.Drawing.Size(189, 22); + this.itemsnaptogrid.Size = new System.Drawing.Size(197, 22); this.itemsnaptogrid.Tag = "builder_togglesnap"; this.itemsnaptogrid.Text = "&Snap to Grid"; this.itemsnaptogrid.Click += new System.EventHandler(this.InvokeTaggedAction); @@ -517,7 +568,7 @@ namespace CodeImp.DoomBuilder.Windows this.itemautomerge.CheckState = System.Windows.Forms.CheckState.Checked; this.itemautomerge.Image = global::CodeImp.DoomBuilder.Properties.Resources.mergegeometry2; this.itemautomerge.Name = "itemautomerge"; - this.itemautomerge.Size = new System.Drawing.Size(189, 22); + this.itemautomerge.Size = new System.Drawing.Size(197, 22); this.itemautomerge.Tag = "builder_toggleautomerge"; this.itemautomerge.Text = "&Merge Geometry"; this.itemautomerge.Click += new System.EventHandler(this.InvokeTaggedAction); @@ -526,12 +577,12 @@ namespace CodeImp.DoomBuilder.Windows // this.seperatoreditgeometry.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3); this.seperatoreditgeometry.Name = "seperatoreditgeometry"; - this.seperatoreditgeometry.Size = new System.Drawing.Size(186, 6); + this.seperatoreditgeometry.Size = new System.Drawing.Size(194, 6); // // itemgridinc // this.itemgridinc.Name = "itemgridinc"; - this.itemgridinc.Size = new System.Drawing.Size(189, 22); + this.itemgridinc.Size = new System.Drawing.Size(197, 22); this.itemgridinc.Tag = "builder_griddec"; this.itemgridinc.Text = "&Increase Grid"; this.itemgridinc.Click += new System.EventHandler(this.InvokeTaggedAction); @@ -539,7 +590,7 @@ namespace CodeImp.DoomBuilder.Windows // itemgriddec // this.itemgriddec.Name = "itemgriddec"; - this.itemgriddec.Size = new System.Drawing.Size(189, 22); + this.itemgriddec.Size = new System.Drawing.Size(197, 22); this.itemgriddec.Tag = "builder_gridinc"; this.itemgriddec.Text = "&Decrease Grid"; this.itemgriddec.Click += new System.EventHandler(this.InvokeTaggedAction); @@ -548,20 +599,319 @@ namespace CodeImp.DoomBuilder.Windows // this.itemgridsetup.Image = global::CodeImp.DoomBuilder.Properties.Resources.Grid2; this.itemgridsetup.Name = "itemgridsetup"; - this.itemgridsetup.Size = new System.Drawing.Size(189, 22); + this.itemgridsetup.Size = new System.Drawing.Size(197, 22); this.itemgridsetup.Tag = "builder_gridsetup"; this.itemgridsetup.Text = "&Grid Setup..."; this.itemgridsetup.Click += new System.EventHandler(this.InvokeTaggedAction); // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(194, 6); + // + // addToGroup + // + this.addToGroup.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.addGroup1, + this.addGroup2, + this.addGroup3, + this.addGroup4, + this.addGroup5, + this.addGroup6, + this.addGroup7, + this.addGroup8, + this.addGroup9, + this.addGroup10}); + this.addToGroup.Name = "addToGroup"; + this.addToGroup.Size = new System.Drawing.Size(197, 22); + this.addToGroup.Text = "Add Selection to Group"; + this.addToGroup.DropDownOpening += new System.EventHandler(this.addToGroup_DropDownOpening); + // + // addGroup1 + // + this.addGroup1.Name = "addGroup1"; + this.addGroup1.Size = new System.Drawing.Size(253, 22); + this.addGroup1.Tag = "builder_assigngroup1"; + this.addGroup1.Text = "1: 100 sectors, 12 vertices, 5 things"; + this.addGroup1.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // addGroup2 + // + this.addGroup2.Name = "addGroup2"; + this.addGroup2.Size = new System.Drawing.Size(253, 22); + this.addGroup2.Tag = "builder_assigngroup2"; + this.addGroup2.Text = "2:"; + this.addGroup2.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // addGroup3 + // + this.addGroup3.Name = "addGroup3"; + this.addGroup3.Size = new System.Drawing.Size(253, 22); + this.addGroup3.Tag = "builder_assigngroup3"; + this.addGroup3.Text = "3:"; + this.addGroup3.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // addGroup4 + // + this.addGroup4.Name = "addGroup4"; + this.addGroup4.Size = new System.Drawing.Size(253, 22); + this.addGroup4.Tag = "builder_assigngroup4"; + this.addGroup4.Text = "4:"; + this.addGroup4.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // addGroup5 + // + this.addGroup5.Name = "addGroup5"; + this.addGroup5.Size = new System.Drawing.Size(253, 22); + this.addGroup5.Tag = "builder_assigngroup5"; + this.addGroup5.Text = "5:"; + this.addGroup5.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // addGroup6 + // + this.addGroup6.Name = "addGroup6"; + this.addGroup6.Size = new System.Drawing.Size(253, 22); + this.addGroup6.Tag = "builder_assigngroup6"; + this.addGroup6.Text = "6:"; + this.addGroup6.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // addGroup7 + // + this.addGroup7.Name = "addGroup7"; + this.addGroup7.Size = new System.Drawing.Size(253, 22); + this.addGroup7.Tag = "builder_assigngroup7"; + this.addGroup7.Text = "7:"; + this.addGroup7.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // addGroup8 + // + this.addGroup8.Name = "addGroup8"; + this.addGroup8.Size = new System.Drawing.Size(253, 22); + this.addGroup8.Tag = "builder_assigngroup8"; + this.addGroup8.Text = "8:"; + this.addGroup8.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // addGroup9 + // + this.addGroup9.Name = "addGroup9"; + this.addGroup9.Size = new System.Drawing.Size(253, 22); + this.addGroup9.Tag = "builder_assigngroup9"; + this.addGroup9.Text = "9:"; + this.addGroup9.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // addGroup10 + // + this.addGroup10.Name = "addGroup10"; + this.addGroup10.Size = new System.Drawing.Size(253, 22); + this.addGroup10.Tag = "builder_assigngroup10"; + this.addGroup10.Text = "10:"; + this.addGroup10.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // selectGroup + // + this.selectGroup.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.selectGroup1, + this.selectGroup2, + this.selectGroup3, + this.selectGroup4, + this.selectGroup5, + this.selectGroup6, + this.selectGroup7, + this.selectGroup8, + this.selectGroup9, + this.selectGroup10}); + this.selectGroup.Name = "selectGroup"; + this.selectGroup.Size = new System.Drawing.Size(197, 22); + this.selectGroup.Text = "Select Group"; + this.selectGroup.DropDownOpening += new System.EventHandler(this.selectGroup_DropDownOpening); + // + // selectGroup1 + // + this.selectGroup1.Name = "selectGroup1"; + this.selectGroup1.Size = new System.Drawing.Size(89, 22); + this.selectGroup1.Tag = "builder_selectgroup1"; + this.selectGroup1.Text = "1:"; + this.selectGroup1.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // selectGroup2 + // + this.selectGroup2.Name = "selectGroup2"; + this.selectGroup2.Size = new System.Drawing.Size(89, 22); + this.selectGroup2.Tag = "builder_selectgroup2"; + this.selectGroup2.Text = "2:"; + this.selectGroup2.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // selectGroup3 + // + this.selectGroup3.Name = "selectGroup3"; + this.selectGroup3.Size = new System.Drawing.Size(89, 22); + this.selectGroup3.Tag = "builder_selectgroup3"; + this.selectGroup3.Text = "3:"; + this.selectGroup3.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // selectGroup4 + // + this.selectGroup4.Name = "selectGroup4"; + this.selectGroup4.Size = new System.Drawing.Size(89, 22); + this.selectGroup4.Tag = "builder_selectgroup4"; + this.selectGroup4.Text = "4:"; + this.selectGroup4.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // selectGroup5 + // + this.selectGroup5.Name = "selectGroup5"; + this.selectGroup5.Size = new System.Drawing.Size(89, 22); + this.selectGroup5.Tag = "builder_selectgroup5"; + this.selectGroup5.Text = "5:"; + this.selectGroup5.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // selectGroup6 + // + this.selectGroup6.Name = "selectGroup6"; + this.selectGroup6.Size = new System.Drawing.Size(89, 22); + this.selectGroup6.Tag = "builder_selectgroup6"; + this.selectGroup6.Text = "6:"; + this.selectGroup6.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // selectGroup7 + // + this.selectGroup7.Name = "selectGroup7"; + this.selectGroup7.Size = new System.Drawing.Size(89, 22); + this.selectGroup7.Tag = "builder_selectgroup7"; + this.selectGroup7.Text = "7:"; + this.selectGroup7.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // selectGroup8 + // + this.selectGroup8.Name = "selectGroup8"; + this.selectGroup8.Size = new System.Drawing.Size(89, 22); + this.selectGroup8.Tag = "builder_selectgroup8"; + this.selectGroup8.Text = "8:"; + this.selectGroup8.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // selectGroup9 + // + this.selectGroup9.Name = "selectGroup9"; + this.selectGroup9.Size = new System.Drawing.Size(89, 22); + this.selectGroup9.Tag = "builder_selectgroup9"; + this.selectGroup9.Text = "9:"; + this.selectGroup9.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // selectGroup10 + // + this.selectGroup10.Name = "selectGroup10"; + this.selectGroup10.Size = new System.Drawing.Size(89, 22); + this.selectGroup10.Tag = "builder_selectgroup10"; + this.selectGroup10.Text = "10:"; + this.selectGroup10.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // clearGroup + // + this.clearGroup.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.clearGroup1, + this.clearGroup2, + this.clearGroup3, + this.clearGroup4, + this.clearGroup5, + this.clearGroup6, + this.clearGroup7, + this.clearGroup8, + this.clearGroup9, + this.clearGroup10}); + this.clearGroup.Name = "clearGroup"; + this.clearGroup.Size = new System.Drawing.Size(197, 22); + this.clearGroup.Text = "Clear Group"; + this.clearGroup.DropDownOpening += new System.EventHandler(this.selectGroup_DropDownOpening); + // + // clearGroup1 + // + this.clearGroup1.Name = "clearGroup1"; + this.clearGroup1.Size = new System.Drawing.Size(89, 22); + this.clearGroup1.Tag = "builder_cleargroup1"; + this.clearGroup1.Text = "1:"; + this.clearGroup1.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // clearGroup2 + // + this.clearGroup2.Name = "clearGroup2"; + this.clearGroup2.Size = new System.Drawing.Size(89, 22); + this.clearGroup2.Tag = "builder_cleargroup2"; + this.clearGroup2.Text = "2:"; + this.clearGroup2.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // clearGroup3 + // + this.clearGroup3.Name = "clearGroup3"; + this.clearGroup3.Size = new System.Drawing.Size(89, 22); + this.clearGroup3.Tag = "builder_cleargroup3"; + this.clearGroup3.Text = "3:"; + this.clearGroup3.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // clearGroup4 + // + this.clearGroup4.Name = "clearGroup4"; + this.clearGroup4.Size = new System.Drawing.Size(89, 22); + this.clearGroup4.Tag = "builder_cleargroup4"; + this.clearGroup4.Text = "4:"; + this.clearGroup4.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // clearGroup5 + // + this.clearGroup5.Name = "clearGroup5"; + this.clearGroup5.Size = new System.Drawing.Size(89, 22); + this.clearGroup5.Tag = "builder_cleargroup5"; + this.clearGroup5.Text = "5:"; + this.clearGroup5.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // clearGroup6 + // + this.clearGroup6.Name = "clearGroup6"; + this.clearGroup6.Size = new System.Drawing.Size(89, 22); + this.clearGroup6.Tag = "builder_cleargroup6"; + this.clearGroup6.Text = "6:"; + this.clearGroup6.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // clearGroup7 + // + this.clearGroup7.Name = "clearGroup7"; + this.clearGroup7.Size = new System.Drawing.Size(89, 22); + this.clearGroup7.Tag = "builder_cleargroup7"; + this.clearGroup7.Text = "7:"; + this.clearGroup7.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // clearGroup8 + // + this.clearGroup8.Name = "clearGroup8"; + this.clearGroup8.Size = new System.Drawing.Size(89, 22); + this.clearGroup8.Tag = "builder_cleargroup8"; + this.clearGroup8.Text = "8:"; + this.clearGroup8.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // clearGroup9 + // + this.clearGroup9.Name = "clearGroup9"; + this.clearGroup9.Size = new System.Drawing.Size(89, 22); + this.clearGroup9.Tag = "builder_cleargroup9"; + this.clearGroup9.Text = "9:"; + this.clearGroup9.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // clearGroup10 + // + this.clearGroup10.Name = "clearGroup10"; + this.clearGroup10.Size = new System.Drawing.Size(89, 22); + this.clearGroup10.Tag = "builder_cleargroup10"; + this.clearGroup10.Text = "10:"; + this.clearGroup10.Click += new System.EventHandler(this.InvokeTaggedAction); + // // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; - this.toolStripSeparator4.Size = new System.Drawing.Size(186, 6); + this.toolStripSeparator4.Size = new System.Drawing.Size(194, 6); // // itemSetCurrentTextures // this.itemSetCurrentTextures.Name = "itemSetCurrentTextures"; - this.itemSetCurrentTextures.Size = new System.Drawing.Size(189, 22); + this.itemSetCurrentTextures.Size = new System.Drawing.Size(197, 22); this.itemSetCurrentTextures.Tag = "builder_setcurrenttextures"; this.itemSetCurrentTextures.Text = "Set Current &Textures..."; this.itemSetCurrentTextures.Click += new System.EventHandler(this.InvokeTaggedAction); @@ -570,11 +920,20 @@ namespace CodeImp.DoomBuilder.Windows // this.itemmapoptions.Image = global::CodeImp.DoomBuilder.Properties.Resources.Properties; this.itemmapoptions.Name = "itemmapoptions"; - this.itemmapoptions.Size = new System.Drawing.Size(189, 22); + this.itemmapoptions.Size = new System.Drawing.Size(197, 22); this.itemmapoptions.Tag = "builder_mapoptions"; this.itemmapoptions.Text = "Map &Options...."; this.itemmapoptions.Click += new System.EventHandler(this.InvokeTaggedAction); // + // itemviewusedtags + // + this.itemviewusedtags.Image = global::CodeImp.DoomBuilder.Properties.Resources.TagStatistics; + this.itemviewusedtags.Name = "itemviewusedtags"; + this.itemviewusedtags.Size = new System.Drawing.Size(197, 22); + this.itemviewusedtags.Tag = "builder_viewusedtags"; + this.itemviewusedtags.Text = "View Used Tags..."; + this.itemviewusedtags.Click += new System.EventHandler(this.InvokeTaggedAction); + // // menuview // this.menuview.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -667,7 +1026,7 @@ namespace CodeImp.DoomBuilder.Windows // item2zoom200 // this.item2zoom200.Name = "item2zoom200"; - this.item2zoom200.Size = new System.Drawing.Size(152, 22); + this.item2zoom200.Size = new System.Drawing.Size(102, 22); this.item2zoom200.Tag = "200"; this.item2zoom200.Text = "200%"; this.item2zoom200.Click += new System.EventHandler(this.itemzoomto_Click); @@ -675,7 +1034,7 @@ namespace CodeImp.DoomBuilder.Windows // item2zoom100 // this.item2zoom100.Name = "item2zoom100"; - this.item2zoom100.Size = new System.Drawing.Size(152, 22); + this.item2zoom100.Size = new System.Drawing.Size(102, 22); this.item2zoom100.Tag = "100"; this.item2zoom100.Text = "100%"; this.item2zoom100.Click += new System.EventHandler(this.itemzoomto_Click); @@ -683,7 +1042,7 @@ namespace CodeImp.DoomBuilder.Windows // item2zoom50 // this.item2zoom50.Name = "item2zoom50"; - this.item2zoom50.Size = new System.Drawing.Size(152, 22); + this.item2zoom50.Size = new System.Drawing.Size(102, 22); this.item2zoom50.Tag = "50"; this.item2zoom50.Text = "50%"; this.item2zoom50.Click += new System.EventHandler(this.itemzoomto_Click); @@ -691,7 +1050,7 @@ namespace CodeImp.DoomBuilder.Windows // item2zoom25 // this.item2zoom25.Name = "item2zoom25"; - this.item2zoom25.Size = new System.Drawing.Size(152, 22); + this.item2zoom25.Size = new System.Drawing.Size(102, 22); this.item2zoom25.Tag = "25"; this.item2zoom25.Text = "25%"; this.item2zoom25.Click += new System.EventHandler(this.itemzoomto_Click); @@ -699,7 +1058,7 @@ namespace CodeImp.DoomBuilder.Windows // item2zoom10 // this.item2zoom10.Name = "item2zoom10"; - this.item2zoom10.Size = new System.Drawing.Size(152, 22); + this.item2zoom10.Size = new System.Drawing.Size(102, 22); this.item2zoom10.Tag = "10"; this.item2zoom10.Text = "10%"; this.item2zoom10.Click += new System.EventHandler(this.itemzoomto_Click); @@ -707,7 +1066,7 @@ namespace CodeImp.DoomBuilder.Windows // item2zoom5 // this.item2zoom5.Name = "item2zoom5"; - this.item2zoom5.Size = new System.Drawing.Size(152, 22); + this.item2zoom5.Size = new System.Drawing.Size(102, 22); this.item2zoom5.Tag = "5"; this.item2zoom5.Text = "5%"; this.item2zoom5.Click += new System.EventHandler(this.itemzoomto_Click); @@ -935,6 +1294,7 @@ namespace CodeImp.DoomBuilder.Windows // toolbar // this.toolbar.AutoSize = false; + this.toolbar.ContextMenuStrip = this.toolbarContextMenu; this.toolbar.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; this.toolbar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.buttonnewmap, @@ -1791,14 +2151,93 @@ namespace CodeImp.DoomBuilder.Windows this.dockerscollapser.Interval = 200; this.dockerscollapser.Tick += new System.EventHandler(this.dockerscollapser_Tick); // - // itemviewusedtags + // toolbarContextMenu // - this.itemviewusedtags.Image = global::CodeImp.DoomBuilder.Properties.Resources.TagStatistics; - this.itemviewusedtags.Name = "itemviewusedtags"; - this.itemviewusedtags.Size = new System.Drawing.Size(189, 22); - this.itemviewusedtags.Tag = "builder_viewusedtags"; - this.itemviewusedtags.Text = "View Used Tags..."; - this.itemviewusedtags.Click += new System.EventHandler(this.InvokeTaggedAction); + this.toolbarContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toggleFile, + this.toggleScript, + this.toggleUndo, + this.toggleCopy, + this.togglePrefabs, + this.toggleFilter, + this.toggleViewModes, + this.toggleGeometry, + this.toggleTesting, + this.toggleRendering}); + this.toolbarContextMenu.Name = "toolbarContextMenu"; + this.toolbarContextMenu.Size = new System.Drawing.Size(174, 246); + this.toolbarContextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.toolbarContextMenu_Opening); + this.toolbarContextMenu.Closing += new System.Windows.Forms.ToolStripDropDownClosingEventHandler(this.toolbarContextMenu_Closing); + // + // toggleNew + // + this.toggleFile.Name = "toggleNew"; + this.toggleFile.Size = new System.Drawing.Size(173, 22); + this.toggleFile.Text = "New / Open / Save"; + this.toggleFile.Click += new System.EventHandler(this.toggleFile_Click); + // + // toggleScript + // + this.toggleScript.Name = "toggleScript"; + this.toggleScript.Size = new System.Drawing.Size(173, 22); + this.toggleScript.Text = "Script Editor"; + this.toggleScript.Click += new System.EventHandler(this.toggleScript_Click); + // + // toggleUndo + // + this.toggleUndo.Name = "toggleUndo"; + this.toggleUndo.Size = new System.Drawing.Size(173, 22); + this.toggleUndo.Text = "Undo / Redo"; + this.toggleUndo.Click += new System.EventHandler(this.toggleUndo_Click); + // + // togglePaste + // + this.toggleCopy.Name = "togglePaste"; + this.toggleCopy.Size = new System.Drawing.Size(173, 22); + this.toggleCopy.Text = "Cut / Copy / Paste"; + this.toggleCopy.Click += new System.EventHandler(this.toggleCopy_Click); + // + // togglePrefabs + // + this.togglePrefabs.Name = "togglePrefabs"; + this.togglePrefabs.Size = new System.Drawing.Size(173, 22); + this.togglePrefabs.Text = "Prefabs"; + this.togglePrefabs.Click += new System.EventHandler(this.togglePrefabs_Click); + // + // toggleFilters + // + this.toggleFilter.Name = "toggleFilters"; + this.toggleFilter.Size = new System.Drawing.Size(173, 22); + this.toggleFilter.Text = "Things Filter"; + this.toggleFilter.Click += new System.EventHandler(this.toggleFilter_Click); + // + // toggleViewModes + // + this.toggleViewModes.Name = "toggleViewModes"; + this.toggleViewModes.Size = new System.Drawing.Size(173, 22); + this.toggleViewModes.Text = "View Modes"; + this.toggleViewModes.Click += new System.EventHandler(this.toggleViewModes_Click); + // + // toggleSnap + // + this.toggleGeometry.Name = "toggleSnap"; + this.toggleGeometry.Size = new System.Drawing.Size(173, 22); + this.toggleGeometry.Text = "Snap / Merge"; + this.toggleGeometry.Click += new System.EventHandler(this.toggleGeometry_Click); + // + // toggleTesting + // + this.toggleTesting.Name = "toggleTesting"; + this.toggleTesting.Size = new System.Drawing.Size(173, 22); + this.toggleTesting.Text = "Testing"; + this.toggleTesting.Click += new System.EventHandler(this.toggleTesting_Click); + // + // toggleRendering + // + this.toggleRendering.Name = "toggleRendering"; + this.toggleRendering.Size = new System.Drawing.Size(173, 22); + this.toggleRendering.Text = "Rendering"; + this.toggleRendering.Click += new System.EventHandler(this.toggleRendering_Click); // // MainForm // @@ -1837,6 +2276,7 @@ namespace CodeImp.DoomBuilder.Windows this.statusbar.PerformLayout(); this.panelinfo.ResumeLayout(false); this.panelinfo.PerformLayout(); + this.toolbarContextMenu.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -2003,5 +2443,50 @@ namespace CodeImp.DoomBuilder.Windows private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; private System.Windows.Forms.ToolStripMenuItem itemSetCurrentTextures; private System.Windows.Forms.ToolStripMenuItem itemviewusedtags; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripMenuItem addToGroup; + private System.Windows.Forms.ToolStripMenuItem selectGroup; + private System.Windows.Forms.ToolStripMenuItem addGroup1; + private System.Windows.Forms.ToolStripMenuItem addGroup2; + private System.Windows.Forms.ToolStripMenuItem addGroup3; + private System.Windows.Forms.ToolStripMenuItem addGroup4; + private System.Windows.Forms.ToolStripMenuItem addGroup5; + private System.Windows.Forms.ToolStripMenuItem addGroup6; + private System.Windows.Forms.ToolStripMenuItem addGroup7; + private System.Windows.Forms.ToolStripMenuItem addGroup8; + private System.Windows.Forms.ToolStripMenuItem addGroup9; + private System.Windows.Forms.ToolStripMenuItem addGroup10; + private System.Windows.Forms.ToolStripMenuItem selectGroup1; + private System.Windows.Forms.ToolStripMenuItem selectGroup2; + private System.Windows.Forms.ToolStripMenuItem selectGroup3; + private System.Windows.Forms.ToolStripMenuItem selectGroup4; + private System.Windows.Forms.ToolStripMenuItem selectGroup5; + private System.Windows.Forms.ToolStripMenuItem selectGroup6; + private System.Windows.Forms.ToolStripMenuItem selectGroup7; + private System.Windows.Forms.ToolStripMenuItem selectGroup8; + private System.Windows.Forms.ToolStripMenuItem selectGroup9; + private System.Windows.Forms.ToolStripMenuItem selectGroup10; + private System.Windows.Forms.ToolStripMenuItem clearGroup; + private System.Windows.Forms.ToolStripMenuItem clearGroup1; + private System.Windows.Forms.ToolStripMenuItem clearGroup2; + private System.Windows.Forms.ToolStripMenuItem clearGroup3; + private System.Windows.Forms.ToolStripMenuItem clearGroup4; + private System.Windows.Forms.ToolStripMenuItem clearGroup5; + private System.Windows.Forms.ToolStripMenuItem clearGroup6; + private System.Windows.Forms.ToolStripMenuItem clearGroup7; + private System.Windows.Forms.ToolStripMenuItem clearGroup8; + private System.Windows.Forms.ToolStripMenuItem clearGroup9; + private System.Windows.Forms.ToolStripMenuItem clearGroup10; + private System.Windows.Forms.ContextMenuStrip toolbarContextMenu; + private System.Windows.Forms.ToolStripMenuItem toggleFile; + private System.Windows.Forms.ToolStripMenuItem toggleScript; + private System.Windows.Forms.ToolStripMenuItem toggleUndo; + private System.Windows.Forms.ToolStripMenuItem toggleCopy; + private System.Windows.Forms.ToolStripMenuItem togglePrefabs; + private System.Windows.Forms.ToolStripMenuItem toggleFilter; + private System.Windows.Forms.ToolStripMenuItem toggleViewModes; + private System.Windows.Forms.ToolStripMenuItem toggleGeometry; + private System.Windows.Forms.ToolStripMenuItem toggleTesting; + private System.Windows.Forms.ToolStripMenuItem toggleRendering; } } \ No newline at end of file diff --git a/Source/Core/Windows/MainForm.cs b/Source/Core/Windows/MainForm.cs index 3da6bf6c..296a6c5c 100644 --- a/Source/Core/Windows/MainForm.cs +++ b/Source/Core/Windows/MainForm.cs @@ -143,6 +143,7 @@ namespace CodeImp.DoomBuilder.Windows private EventHandler buttonvisiblechangedhandler; private bool preventupdateseperators; private bool updatingfilters; + private bool toolbarContextMenuShiftPressed; //mxd // Statusbar private StatusInfo status; @@ -220,6 +221,8 @@ namespace CodeImp.DoomBuilder.Windows buttonvisiblechangedhandler = new EventHandler(ToolbarButtonVisibleChanged); //mxd display.OnKeyReleased += new KeyEventHandler(display_OnKeyReleased); + toolbarContextMenu.KeyDown += new KeyEventHandler(toolbarContextMenu_KeyDown); + toolbarContextMenu.KeyUp += new KeyEventHandler(toolbarContextMenu_KeyUp); // Bind any methods General.Actions.BindMethods(this); @@ -1685,6 +1688,8 @@ namespace CodeImp.DoomBuilder.Windows buttontoggleanimatedlight.Visible = General.Settings.GZToolbarGZDoom; buttontogglefx.Visible = General.Settings.GZToolbarGZDoom; buttontogglefog.Visible = General.Settings.GZToolbarGZDoom; + buttontoggleeventlines.Visible = General.Settings.GZToolbarGZDoom; + buttontogglevisualvertices.Visible = General.Settings.GZToolbarGZDoom; separatorgzmodes.Visible = General.Settings.GZToolbarGZDoom; @@ -1847,6 +1852,115 @@ namespace CodeImp.DoomBuilder.Windows #endregion + #region Toolbar context menu (mxd) + + private void toolbarContextMenu_Opening(object sender, CancelEventArgs e) { + toggleFile.Image = General.Settings.ToolbarFile ? Resources.Check : null; + toggleScript.Image = General.Settings.ToolbarScript ? Resources.Check : null; + toggleUndo.Image = General.Settings.ToolbarUndo ? Resources.Check : null; + toggleCopy.Image = General.Settings.ToolbarCopy ? Resources.Check : null; + togglePrefabs.Image = General.Settings.ToolbarPrefabs ? Resources.Check : null; + toggleFilter.Image = General.Settings.ToolbarFilter ? Resources.Check : null; + toggleViewModes.Image = General.Settings.ToolbarViewModes ? Resources.Check : null; + toggleGeometry.Image = General.Settings.ToolbarGeometry ? Resources.Check : null; + toggleTesting.Image = General.Settings.ToolbarTesting ? Resources.Check : null; + toggleRendering.Image = General.Settings.GZToolbarGZDoom ? Resources.Check : null; + } + + private void toolbarContextMenu_Closing(object sender, ToolStripDropDownClosingEventArgs e) { + e.Cancel = toolbarContextMenuShiftPressed; + } + + private void toolbarContextMenu_KeyDown(object sender, KeyEventArgs e) { + toolbarContextMenuShiftPressed = e.KeyCode == Keys.ShiftKey; + } + + private void toolbarContextMenu_KeyUp(object sender, KeyEventArgs e) { + toolbarContextMenuShiftPressed = !(e.KeyCode == Keys.ShiftKey); + } + + private void toggleFile_Click(object sender, EventArgs e) { + General.Settings.ToolbarFile = !General.Settings.ToolbarFile; + UpdateToolbar(); + + if(toolbarContextMenuShiftPressed) + toggleFile.Image = General.Settings.ToolbarFile ? Resources.Check : null; + } + + private void toggleScript_Click(object sender, EventArgs e) { + General.Settings.ToolbarScript = !General.Settings.ToolbarScript; + UpdateToolbar(); + + if(toolbarContextMenuShiftPressed) + toggleScript.Image = General.Settings.ToolbarScript ? Resources.Check : null; + } + + private void toggleUndo_Click(object sender, EventArgs e) { + General.Settings.ToolbarUndo = !General.Settings.ToolbarUndo; + UpdateToolbar(); + + if(toolbarContextMenuShiftPressed) + toggleUndo.Image = General.Settings.ToolbarUndo ? Resources.Check : null; + } + + private void toggleCopy_Click(object sender, EventArgs e) { + General.Settings.ToolbarCopy = !General.Settings.ToolbarCopy; + UpdateToolbar(); + + if(toolbarContextMenuShiftPressed) + toggleCopy.Image = General.Settings.ToolbarCopy ? Resources.Check : null; + } + + private void togglePrefabs_Click(object sender, EventArgs e) { + General.Settings.ToolbarPrefabs = !General.Settings.ToolbarPrefabs; + UpdateToolbar(); + + if(toolbarContextMenuShiftPressed) + togglePrefabs.Image = General.Settings.ToolbarPrefabs ? Resources.Check : null; + } + + private void toggleFilter_Click(object sender, EventArgs e) { + General.Settings.ToolbarFilter = !General.Settings.ToolbarFilter; + UpdateToolbar(); + + if(toolbarContextMenuShiftPressed) + toggleFilter.Image = General.Settings.ToolbarFilter ? Resources.Check : null; + } + + private void toggleViewModes_Click(object sender, EventArgs e) { + General.Settings.ToolbarViewModes = !General.Settings.ToolbarViewModes; + UpdateToolbar(); + + if(toolbarContextMenuShiftPressed) + toggleViewModes.Image = General.Settings.ToolbarViewModes ? Resources.Check : null; + } + + private void toggleGeometry_Click(object sender, EventArgs e) { + General.Settings.ToolbarGeometry = !General.Settings.ToolbarGeometry; + UpdateToolbar(); + + if(toolbarContextMenuShiftPressed) + toggleGeometry.Image = General.Settings.ToolbarGeometry ? Resources.Check : null; + } + + private void toggleTesting_Click(object sender, EventArgs e) { + General.Settings.ToolbarTesting = !General.Settings.ToolbarTesting; + UpdateToolbar(); + + if(toolbarContextMenuShiftPressed) + toggleTesting.Image = General.Settings.ToolbarTesting ? Resources.Check : null; + } + + private void toggleRendering_Click(object sender, EventArgs e) { + General.Settings.GZToolbarGZDoom = !General.Settings.GZToolbarGZDoom; + UpdateToolbar(); + + if(toolbarContextMenuShiftPressed) + toggleRendering.Image = General.Settings.GZToolbarGZDoom ? Resources.Check : null; + } + + #endregion + #region ================== Menus // This adds a menu to the menus bar @@ -2173,6 +2287,9 @@ namespace CodeImp.DoomBuilder.Windows itemgriddec.Enabled = (General.Map != null); itemSetCurrentTextures.Enabled = (General.Map != null); //mxd itemviewusedtags.Enabled = (General.Map != null); //mxd + addToGroup.Enabled = (General.Map != null); //mxd + selectGroup.Enabled = (General.Map != null); //mxd + clearGroup.Enabled = (General.Map != null); //mxd // Determine undo description if(itemundo.Enabled) @@ -2198,6 +2315,34 @@ namespace CodeImp.DoomBuilder.Windows buttonpaste.Enabled = itempaste.Enabled; } + //mxd + private void addToGroup_DropDownOpening(object sender, EventArgs e) { + for(int i = 0; i < addToGroup.DropDown.Items.Count; i++) + addToGroup.DropDown.Items[i].Text = (i + 1) + ": " + (General.Map.Map.GroupInfos[i] == null ? " Empty" : General.Map.Map.GroupInfos[i].ToString()); + } + + //mxd + private void selectGroup_DropDownOpening(object sender, EventArgs e) { + ToolStripMenuItem menu = sender as ToolStripMenuItem; + + for(int i = 0; i < menu.DropDown.Items.Count; i++) { + if(General.Map.Map.GroupInfos[i] == null) { + menu.DropDown.Items[i].Visible = false; + } else { + menu.DropDown.Items[i].Visible = true; + menu.DropDown.Items[i].Text = (i + 1) + ": " + General.Map.Map.GroupInfos[i].ToString(); + } + } + } + + //mxd + private void menuedit_DropDownOpening(object sender, EventArgs e) { + if(General.Map == null) return; + bool haveGroups = General.Map.Map.HaveSelectionGroups(); + selectGroup.Enabled = haveGroups; + clearGroup.Enabled = haveGroups; + } + // Action to toggle snap to grid [BeginAction("togglesnap")] internal void ToggleSnapToGrid() diff --git a/Source/Core/Windows/MainForm.resx b/Source/Core/Windows/MainForm.resx index 85f43d09..18bfd3ae 100644 --- a/Source/Core/Windows/MainForm.resx +++ b/Source/Core/Windows/MainForm.resx @@ -147,6 +147,9 @@ 241, 17 + + 159, 56 + diff --git a/Source/Core/Windows/PreferencesForm.Designer.cs b/Source/Core/Windows/PreferencesForm.Designer.cs index 10a2ddfd..6f6a6a5b 100644 --- a/Source/Core/Windows/PreferencesForm.Designer.cs +++ b/Source/Core/Windows/PreferencesForm.Designer.cs @@ -812,9 +812,9 @@ namespace CodeImp.DoomBuilder.Windows this.toolbar_gzdoom.AutoSize = true; this.toolbar_gzdoom.Location = new System.Drawing.Point(188, 137); this.toolbar_gzdoom.Name = "toolbar_gzdoom"; - this.toolbar_gzdoom.Size = new System.Drawing.Size(104, 18); + this.toolbar_gzdoom.Size = new System.Drawing.Size(75, 18); this.toolbar_gzdoom.TabIndex = 50; - this.toolbar_gzdoom.Text = "GZDoom toolbar"; + this.toolbar_gzdoom.Text = "Rendering"; this.toolbar_gzdoom.UseVisualStyleBackColor = true; // // toolbar_file diff --git a/Source/Core/Windows/PreferencesForm.cs b/Source/Core/Windows/PreferencesForm.cs index c360b51e..2338fdd2 100644 --- a/Source/Core/Windows/PreferencesForm.cs +++ b/Source/Core/Windows/PreferencesForm.cs @@ -236,6 +236,7 @@ namespace CodeImp.DoomBuilder.Windows General.Settings.ToolbarViewModes = toolbar_viewmodes.Checked; General.Settings.ToolbarGeometry = toolbar_geometry.Checked; General.Settings.ToolbarTesting = toolbar_testing.Checked; + General.Settings.GZToolbarGZDoom = toolbar_gzdoom.Checked; //mxd General.Settings.ShowTextureSizes = showtexturesizes.Checked; // Script font size @@ -278,7 +279,6 @@ namespace CodeImp.DoomBuilder.Windows //mxd General.Settings.GZSynchCameras = cbSynchCameras.Checked; - General.Settings.GZToolbarGZDoom = toolbar_gzdoom.Checked; General.Settings.GZMaxDynamicLights = tbDynLightCount.Value; General.Settings.GZDynamicLightRadius = ((float)tbDynLightSize.Value / 10.0f); General.Settings.GZDynamicLightIntensity = ((float)tbDynLightIntensity.Value / 10.0f); diff --git a/Source/Core/Windows/PreferencesForm.resx b/Source/Core/Windows/PreferencesForm.resx index 983bf1dc..d68fbbd5 100644 --- a/Source/Core/Windows/PreferencesForm.resx +++ b/Source/Core/Windows/PreferencesForm.resx @@ -144,7 +144,4 @@ False - - 17, 17 - \ No newline at end of file diff --git a/Source/Plugins/BuilderEffects/BuilderEffects.csproj b/Source/Plugins/BuilderEffects/BuilderEffects.csproj index a81f01c3..c9bda242 100644 --- a/Source/Plugins/BuilderEffects/BuilderEffects.csproj +++ b/Source/Plugins/BuilderEffects/BuilderEffects.csproj @@ -55,6 +55,7 @@ + Component diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs index af496dd5..c8804181 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs @@ -100,6 +100,7 @@ namespace CodeImp.DoomBuilder.BuilderModes // This changes the height protected abstract void ChangeHeight(int amount); + public virtual void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { } //mxd // This swaps triangles so that the plane faces the other way protected void SwapTriangleVertices(WorldVertex[] verts) @@ -200,6 +201,11 @@ namespace CodeImp.DoomBuilder.BuilderModes vs.UpdateSectorGeometry(false); } } + + //mxd + public virtual bool IsSelected() { + return selected; + } #endregion diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs index ab172610..c10e4090 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs @@ -396,6 +396,102 @@ namespace CodeImp.DoomBuilder.BuilderModes } } + + protected void selectNeighbours(string texture, bool select, bool withSameTexture, bool withSameHeight) { + if(!withSameTexture && !withSameHeight) + return; + + if(select && !selected) { + selected = true; + mode.AddSelectedObject(this); + } else if(!select && selected) { + selected = false; + mode.RemoveSelectedObject(this); + } + + //select + List connectedLines = new List(); + + foreach(Linedef line in Sidedef.Line.Start.Linedefs) { + if(line.Index == Sidedef.Line.Index) + continue; + connectedLines.Add(line); + } + foreach(Linedef line in Sidedef.Line.End.Linedefs) { + if(line.Index == Sidedef.Line.Index) + continue; + if(!connectedLines.Contains(line)) + connectedLines.Add(line); + } + + foreach(Linedef line in connectedLines) { + bool addFrontTop = false; + bool addFrontMiddle = false; + bool addFrontBottom = false; + bool addBackTop = false; + bool addBackMiddle = false; + bool addBackBottom = false; + + if(withSameTexture) { + if(line.Front != null) { + if(line.Front.HighTexture == texture) + addFrontTop = true; + + if(line.Front.MiddleTexture == texture) + addFrontMiddle = true; + + if(line.Front.LowTexture == texture) + addFrontBottom = true; + } + + if(line.Back != null) { + if(line.Back.HighTexture == texture) + addBackTop = true; + + if(line.Back.MiddleTexture == texture) + addBackMiddle = true; + + if(line.Back.LowTexture == texture) + addBackBottom = true; + } + } + + if(withSameHeight) { + if(line.Front != null && line.Front.Sector.FloorHeight == Sidedef.Sector.FloorHeight && line.Front.Sector.CeilHeight == Sidedef.Sector.CeilHeight) { + addFrontTop = withSameTexture ? addFrontTop : true; + addFrontMiddle = withSameTexture ? addFrontMiddle : true; + addFrontBottom = withSameTexture ? addFrontBottom : true; + } else { + addFrontTop = false; + addFrontMiddle = false; + addFrontBottom = false; + } + + if(line.Back != null && line.Back.Sector.FloorHeight == Sidedef.Sector.FloorHeight && line.Back.Sector.CeilHeight == Sidedef.Sector.CeilHeight) { + addBackTop = withSameTexture ? addBackTop : true; + addBackMiddle = withSameTexture ? addBackMiddle : true; + addBackBottom = withSameTexture ? addBackBottom : true; + } else { + addBackTop = false; + addBackMiddle = false; + addBackBottom = false; + } + } + + //select front? + if(addFrontTop || addFrontMiddle || addFrontBottom) + mode.SelectSideParts(line.Front, addFrontTop, addFrontMiddle, addFrontBottom, select, withSameTexture, withSameHeight); + + //select back? + if(addBackTop || addBackMiddle || addBackBottom) + mode.SelectSideParts(line.Back, addBackTop, addBackMiddle, addBackBottom, select, withSameTexture, withSameHeight); + } + } + + //mxd + public virtual bool IsSelected() { + return selected; + } #endregion @@ -409,6 +505,7 @@ namespace CodeImp.DoomBuilder.BuilderModes protected abstract void SetTextureOffsetY(int y); protected abstract void MoveTextureOffset(Point xy); protected abstract Point GetTextureOffset(); + public virtual void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { } //mxd // Insert middle texture public virtual void OnInsert() @@ -1000,7 +1097,7 @@ namespace CodeImp.DoomBuilder.BuilderModes VisualSidedefParts parts = Sector.GetSidedefParts(Sidedef); parts.SetupAllParts(); } - + #endregion } } diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs index 128e6c4a..396dc28a 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs @@ -578,6 +578,31 @@ namespace CodeImp.DoomBuilder.BuilderModes return translatedCoords; } + + //mxd + internal void SelectSideParts(Sidedef side, bool toggleTop, bool toggleMid, bool toggleBottom, bool select, bool withSameTexture, bool withSameHeight) { + BaseVisualSector vs = GetVisualSector(side.Sector) as BaseVisualSector; + + if(toggleTop && vs.Sides[side].upper != null && + ((select && !vs.Sides[side].upper.Selected) || (!select && vs.Sides[side].upper.Selected))) { + vs.Sides[side].upper.SelectNeighbours(select, withSameTexture, withSameHeight); + } + + if(toggleMid && vs.Sides[side].middlesingle != null && + ((select && !vs.Sides[side].middlesingle.Selected) || (!select && vs.Sides[side].middlesingle.Selected))) { + vs.Sides[side].middlesingle.SelectNeighbours(select, withSameTexture, withSameHeight); + } + + if(toggleMid && vs.Sides[side].middledouble != null && + ((select && !vs.Sides[side].middledouble.Selected) || (!select && vs.Sides[side].middledouble.Selected))) { + vs.Sides[side].middledouble.SelectNeighbours(select, withSameTexture, withSameHeight); + } + + if(toggleBottom && vs.Sides[side].lower != null && + ((select && !vs.Sides[side].lower.Selected) || (!select && vs.Sides[side].lower.Selected))) { + vs.Sides[side].lower.SelectNeighbours(select, withSameTexture, withSameHeight); + } + } #endregion @@ -1530,7 +1555,18 @@ namespace CodeImp.DoomBuilder.BuilderModes public void EndSelect() { //PreActionNoChange(); - GetTargetEventReceiver(true).OnSelectEnd(); + IVisualEventReceiver target = GetTargetEventReceiver(true); + target.OnSelectEnd(); + + //mxd + if((General.Interface.ShiftState || General.Interface.CtrlState) && selectedobjects.Count > 0) { + IVisualEventReceiver[] selection = new IVisualEventReceiver[selectedobjects.Count]; + selectedobjects.CopyTo(selection); + + foreach(IVisualEventReceiver obj in selection) + obj.SelectNeighbours(target.IsSelected(), General.Interface.ShiftState, General.Interface.CtrlState); + } + Renderer.ShowSelection = true; Renderer.ShowHighlight = true; PostAction(); diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs index 387c4e3e..4588e899 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs @@ -433,6 +433,11 @@ namespace CodeImp.DoomBuilder.BuilderModes u_ray = (tnear > 0.0f) ? tnear : tfar; return true; } + + //mxd + public virtual bool IsSelected() { + return selected; + } #endregion @@ -460,6 +465,7 @@ namespace CodeImp.DoomBuilder.BuilderModes public virtual void ApplyTexture(string texture) { } public virtual void ApplyUpperUnpegged(bool set) { } public virtual void ApplyLowerUnpegged(bool set) { } + public virtual void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { } //mxd // Return texture name public virtual string GetTextureName() { return ""; } diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs index b0fd380f..70c2d21b 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs @@ -104,6 +104,11 @@ namespace CodeImp.DoomBuilder.BuilderModes return height; } + //mxd + public virtual bool IsSelected() { + return selected; + } + #region ================== Object picking // This performs a fast test in object picking @@ -219,6 +224,7 @@ namespace CodeImp.DoomBuilder.BuilderModes public virtual void ApplyUpperUnpegged(bool set) { } public virtual void ApplyLowerUnpegged(bool set) { } public virtual string GetTextureName() { return ""; } + public virtual void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { } //mxd #endregion diff --git a/Source/Plugins/BuilderModes/VisualModes/IVisualEventReceiver.cs b/Source/Plugins/BuilderModes/VisualModes/IVisualEventReceiver.cs index c7149068..ed5d7318 100644 --- a/Source/Plugins/BuilderModes/VisualModes/IVisualEventReceiver.cs +++ b/Source/Plugins/BuilderModes/VisualModes/IVisualEventReceiver.cs @@ -70,5 +70,7 @@ namespace CodeImp.DoomBuilder.BuilderModes // Other methods string GetTextureName(); + void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight); //mxd + bool IsSelected(); //mxd } } diff --git a/Source/Plugins/BuilderModes/VisualModes/NullVisualEventReceiver.cs b/Source/Plugins/BuilderModes/VisualModes/NullVisualEventReceiver.cs index 6c009e0c..eb955843 100644 --- a/Source/Plugins/BuilderModes/VisualModes/NullVisualEventReceiver.cs +++ b/Source/Plugins/BuilderModes/VisualModes/NullVisualEventReceiver.cs @@ -151,5 +151,8 @@ namespace CodeImp.DoomBuilder.BuilderModes { return ""; } + + public void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { } //mxd + public bool IsSelected() { return false; } //mxd } } diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs b/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs index 673c75d6..a2570185 100644 --- a/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs @@ -329,6 +329,45 @@ namespace CodeImp.DoomBuilder.BuilderModes level.sector.SetCeilTexture(texturename); General.Map.Data.UpdateUsedTextures(); } + + //mxd + public override void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { + if(!withSameTexture && !withSameHeight) return; + + if(select && !selected) { + selected = true; + mode.AddSelectedObject(this); + } else if(!select && selected) { + selected = false; + mode.RemoveSelectedObject(this); + } + + List neighbours = new List(); + + //collect neighbour sectors + foreach(Sidedef side in level.sector.Sidedefs) { + if(side.Other != null && side.Other.Sector != level.sector && !neighbours.Contains(side.Other.Sector)) { + bool add = false; + + if(withSameTexture && side.Other.Sector.CeilTexture == level.sector.CeilTexture) { + add = true; + } + + if(withSameHeight) { + add = ((withSameTexture && add) || !withSameTexture) && side.Other.Sector.CeilHeight == level.sector.CeilHeight; + } + + if(add) neighbours.Add(side.Other.Sector); + } + } + + //(de)select neighbour sectors + foreach(Sector s in neighbours) { + BaseVisualSector vs = mode.GetVisualSector(s) as BaseVisualSector; + if((select && !vs.Ceiling.Selected) || (!select && vs.Ceiling.Selected)) + vs.Ceiling.SelectNeighbours(select, withSameTexture, withSameHeight); + } + } #endregion } diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs b/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs index cba5e77d..7fd29166 100644 --- a/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs @@ -293,6 +293,43 @@ namespace CodeImp.DoomBuilder.BuilderModes level.sector.SetFloorTexture(texturename); General.Map.Data.UpdateUsedTextures(); } + + //mxd + public override void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { + if(!withSameTexture && !withSameHeight) return; + + if(select && !selected) { + selected = true; + mode.AddSelectedObject(this); + }else if(!select && selected){ + selected = false; + mode.RemoveSelectedObject(this); + } + + List neighbours = new List(); + + //collect neighbour sectors + foreach(Sidedef side in level.sector.Sidedefs) { + if(side.Other != null && side.Other.Sector != level.sector && !neighbours.Contains(side.Other.Sector)) { + bool add = false; + + if(withSameTexture && side.Other.Sector.FloorTexture == level.sector.FloorTexture) + add = true; + + if(withSameHeight) + add = ((withSameTexture && add) || !withSameTexture) && side.Other.Sector.FloorHeight == level.sector.FloorHeight; + + if(add) neighbours.Add(side.Other.Sector); + } + } + + //(de)select neighbour sectors + foreach(Sector s in neighbours){ + BaseVisualSector vs = mode.GetVisualSector(s) as BaseVisualSector; + if((select && !vs.Floor.Selected) || (!select && vs.Floor.Selected)) + vs.Floor.SelectNeighbours(select, withSameTexture, withSameHeight); + } + } #endregion } diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualLower.cs b/Source/Plugins/BuilderModes/VisualModes/VisualLower.cs index 67a715fe..65dbbe86 100644 --- a/Source/Plugins/BuilderModes/VisualModes/VisualLower.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualLower.cs @@ -284,6 +284,11 @@ namespace CodeImp.DoomBuilder.BuilderModes //rebuild sector Sector.UpdateSectorGeometry(false); } + + //mxd + public override void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { + selectNeighbours(Sidedef.LowTexture, select, withSameTexture, withSameHeight); + } #endregion } diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualMiddleDouble.cs b/Source/Plugins/BuilderModes/VisualModes/VisualMiddleDouble.cs index 7c6476af..410ae117 100644 --- a/Source/Plugins/BuilderModes/VisualModes/VisualMiddleDouble.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualMiddleDouble.cs @@ -329,6 +329,11 @@ namespace CodeImp.DoomBuilder.BuilderModes //rebuild sector Sector.UpdateSectorGeometry(false); } + + //mxd + public override void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { + selectNeighbours(Sidedef.MiddleTexture, select, withSameTexture, withSameHeight); + } #endregion } diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualMiddleSingle.cs b/Source/Plugins/BuilderModes/VisualModes/VisualMiddleSingle.cs index f658c7bc..2953b3b6 100644 --- a/Source/Plugins/BuilderModes/VisualModes/VisualMiddleSingle.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualMiddleSingle.cs @@ -280,6 +280,11 @@ namespace CodeImp.DoomBuilder.BuilderModes //rebuild sector Sector.UpdateSectorGeometry(false); } + + //mxd + public override void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { + selectNeighbours(Sidedef.MiddleTexture, select, withSameTexture, withSameHeight); + } #endregion } diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualUpper.cs b/Source/Plugins/BuilderModes/VisualModes/VisualUpper.cs index f958a8b6..1666d826 100644 --- a/Source/Plugins/BuilderModes/VisualModes/VisualUpper.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualUpper.cs @@ -283,6 +283,11 @@ namespace CodeImp.DoomBuilder.BuilderModes //rebuild sector Sector.UpdateSectorGeometry(false); } + + //mxd + public override void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { + selectNeighbours(Sidedef.HighTexture, select, withSameTexture, withSameHeight); + } #endregion }