Sectors/Linedefs modes: removed "Select Things in Selected Sectors" action.

Sectors mode: removed "Move Things in Selected Sectors" toolbar button.
Sectors mode: added "Synchronized Things Editing" menu item, action and toolbar button. When enabled, things dragging will be synchronized to sector dragging. Regular, Paint and Rectangular selection will also select things (holding Alt while selecting inverts this behavior). Deleting sectors will also delete selected things.
Linedefs mode: added "Synchronized Things Editing" menu item, action and toolbar button. When enabled, selected things will be dragged when dragging linedefs. Rectangular selection will also select things (holding Alt while selecting inverts this behavior).
Changed: selection info now always displays info about all types of map elements.
Fixed: .dbs containing only current map settings was created when trying to save unchanged map. 
Fixed, Visual mode, "Copy Texture" action: when "Use long texture names" option is disabled, texture name as stored in Sidedef should be used, not the 8-char texture name.
Updated documentation.
This commit is contained in:
MaxED 2015-11-03 08:54:56 +00:00
parent 217ca8379c
commit 17ac1c6db5
24 changed files with 332 additions and 322 deletions

View file

@ -15,7 +15,8 @@
<div id="contents"> <div id="contents">
<p>A Rectangular selection can now be started even when a map element is already highlighted. This means that you can now use it to select sectors, which are completely surrounded by other sectors.<br /> <p>A Rectangular selection can now be started even when a map element is already highlighted. This means that you can now use it to select sectors, which are completely surrounded by other sectors.<br />
Hold <strong>Shift</strong> to enable additive selection, hold <strong>Ctrl</strong> to enable subtractive selection, hold <strong>Ctrl-Shift</strong> to intersect with an existing selection.<br /> Hold <strong>Shift</strong> to enable additive selection, hold <strong>Ctrl</strong> to enable subtractive selection, hold <strong>Ctrl-Shift</strong> to intersect with an existing selection.<br />
Hold <strong>Alt</strong> in <strong>Sectors</strong> mode to select things inside of selected sectors. Hold <strong>Alt</strong> in <strong>Sectors </strong><strong> mode</strong> to (de)select things inside of (de)selected sectors when using regular, paint and rectangular selection. This behaviour is inverted when &quot;<strong>Syncronized Things Editing</strong>&quot; option is enabled.<br />
Hold <strong>Alt</strong> in<strong> Linedefs mode</strong> to (de)select things inside of rectangular selection marquee. This behaviour is inverted when &quot;<strong>Syncronized Things Editing</strong>&quot; option is enabled.</p>
<p>Current behaviour is indicated by the selection outline: additive selection uses the Highlight color, subtractive selection uses the inverted Highlight color. <p>Current behaviour is indicated by the selection outline: additive selection uses the Highlight color, subtractive selection uses the inverted Highlight color.
<p>The Rectangular selection mode in <strong>Sectors</strong> and <strong>Linedefs</strong> modes can be toggled between &quot;Select inside&quot; (classic behavior: only map elements which are fully inside selection will be affected) and &quot;Select touching&quot; (map elements which are partially inside selection will be also affected) using this button in the toolbar: <p>The Rectangular selection mode in <strong>Sectors</strong> and <strong>Linedefs</strong> modes can be toggled between &quot;Select inside&quot; (classic behavior: only map elements which are fully inside selection will be affected) and &quot;Select touching&quot; (map elements which are partially inside selection will be also affected) using this button in the toolbar:
<p><img src="selection_mode_btn.jpg" alt="" width="260" height="30" /><br /> <p><img src="selection_mode_btn.jpg" alt="" width="260" height="30" /><br />

View file

@ -96,14 +96,14 @@
<li>Camera position can be synchronized between Classic and Visual modes. <a href="all_modes/synch_camera.html">More info</a>.</li> <li>Camera position can be synchronized between Classic and Visual modes. <a href="all_modes/synch_camera.html">More info</a>.</li>
<li>You can use <a href="all_modes/colorpicker.html">Color Picker plugin </a> to edit dynamic light properties and sector's fog and tint colors in Classic and Visual modes.</li> <li>You can use <a href="all_modes/colorpicker.html">Color Picker plugin </a> to edit dynamic light properties and sector's fog and tint colors in Classic and Visual modes.</li>
<li>You can use <a href="all_modes/tagexplorer.html">Tag Explorer plugin</a> to view all tags and actions used in current map.</li> <li>You can use <a href="all_modes/tagexplorer.html">Tag Explorer plugin</a> to view all tags and actions used in current map.</li>
<li>You can paste only specific properties using &quot;<strong>Paste Properties Special</strong>&quot; action (available via keyboard shortcut, as &quot;Edit -&gt; Paste Properties Special...&quot; menu item and as a button on the Edit Mode toolbar). <li>You can paste only specific properties using &quot;<strong>Paste Properties Special</strong>&quot; action (available via keyboard shortcut, as &quot;<strong>Edit</strong> -&gt; <strong>Paste Properties Special...</strong>&quot; menu item and as a button on the Edit Mode toolbar).
<input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/> <input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/>
<div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"> <img src="all_modes/paste_properties_options.jpg" alt="" /></div> <div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"> <img src="all_modes/paste_properties_options.jpg" alt="" /></div>
</li> </li>
<li>You can apply <a href="all_modes/jitter.html">randomized transformations</a> to any map element.</li> <li>You can apply <a href="all_modes/jitter.html">randomized transformations</a> to any map element.</li>
<li>Image browser shows directory structure of Folder, PK3 and PK7 resources and can filter images by texture type and size. <a href="all_modes/texture_browser.html">More info</a>.</li> <li>Image browser shows directory structure of Folder, PK3 and PK7 resources and can filter images by texture type and size. <a href="all_modes/texture_browser.html">More info</a>.</li>
<li>Most controls of Edit Sector/Linedef/Thing forms now work in realtime (e.g. you can immediately see texture offset/scale/rotation changes while you are changing appropriate values). Action and Tag changes are still applied only after you press &quot;OK&quot; button.</li> <li>Most controls of Edit Sector/Linedef/Thing forms now work in realtime (e.g. you can immediately see texture offset/scale/rotation changes while you are changing appropriate values). Action and Tag changes are still applied only after you press &quot;OK&quot; button.</li>
<li><strong>[UDMF] </strong>All UDMF properties (except &quot;comment&quot;) can be edited using Edit Sector/Linedef/Thing/Vertex forms user interface.</li> <li><strong>[UDMF] </strong>All UDMF properties can be edited using Edit Sector/Linedef/Thing/Vertex windows user interface.</li>
<li>Thing Edit Form has &quot;Random angle&quot; checkbox.</li> <li>Thing Edit Form has &quot;Random angle&quot; checkbox.</li>
<li><strong>[UDMF] </strong>Sector, Linedef and Vertex info panels show additional info if a map is in UDMF format.</li> <li><strong>[UDMF] </strong>Sector, Linedef and Vertex info panels show additional info if a map is in UDMF format.</li>
</ul> </ul>
@ -118,7 +118,7 @@
<li><a href="classic_modes/selection.html"> </a>Thing sprites are rendered in classic modes.</li> <li><a href="classic_modes/selection.html"> </a>Thing sprites are rendered in classic modes.</li>
<li>You can assign custom color to any combination of linedef flags, actions and/or activation. <a href="classic_modes/linedef_color_presets.html">More info</a>.</li> <li>You can assign custom color to any combination of linedef flags, actions and/or activation. <a href="classic_modes/linedef_color_presets.html">More info</a>.</li>
<li><a href="classic_modes/selection.html"> Enhanced rectangular selection</a>.</li> <li><a href="classic_modes/selection.html"> Enhanced rectangular selection</a>.</li>
<li>New action: &quot;<strong>Go To Coordinates</strong>&quot;, available in <strong>View</strong> menu and by clicking on cursor coordinates in the lower-right corner of UI.</li> <li>New action: &quot;<strong>Go To Coordinates</strong>&quot;, available in the <strong>View</strong> menu and by clicking on cursor coordinates in the lower-right corner of UI.</li>
<li>You can use <strong>Paint selection </strong>action to select map elements easier.</li> <li>You can use <strong>Paint selection </strong>action to select map elements easier.</li>
<li><a href="classic_modes/mode_drawrect.html">Draw Rectangle mode</a>.</li> <li><a href="classic_modes/mode_drawrect.html">Draw Rectangle mode</a>.</li>
<li><a href="classic_modes/mode_drawellipse.html">Draw Ellipse mode</a>.</li> <li><a href="classic_modes/mode_drawellipse.html">Draw Ellipse mode</a>.</li>
@ -157,7 +157,8 @@
<h3><a name="sectors" id="sectors"></a>Sectors mode:</h3> <h3><a name="sectors" id="sectors"></a>Sectors mode:</h3>
<ul> <ul>
<li><strong>[UDMF]</strong> Sector Edit Form now has "<strong>Slopes</strong>" tab.</li> <li><strong>[UDMF]</strong> Sector Edit Form now has "<strong>Slopes</strong>" tab.</li>
<li>Things inside of selected Sectors can be moved when dragging Sectors. This toolbar button toggles this mode: <img src="sectors_mode/drag_things.jpg"/>. When enabled, all things inside of selected sectors will be dragged when dragging sectors. Otherwise, selected things will be dragged.</li> <li>Things selection, dragging and deletion can be syncronized with sectors selection, dragging and deletion by enabling <strong>Sectors -&gt; Syncronized Things Editing</strong> menu item / <strong>Syncronized Things Editing</strong> toolbar button.</li>
<li>Things can be (de)selected by holding the <strong>Alt</strong> key when (de)selecting sectors. <strong>Alt</strong> key behaviour is inverted when <strong>Syncronized Things Editing</strong> option is enabled.</li>
<li>Sector Tag and Effect can now be shown on top of sectors. You can use &quot;<strong>View Tags and Effects</strong>&quot; button to toggle this overlay. <li>Sector Tag and Effect can now be shown on top of sectors. You can use &quot;<strong>View Tags and Effects</strong>&quot; button to toggle this overlay.
<input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/> <input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/>
<div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"><img src="sectors_mode/toggle_effect_overlay.jpg" alt="" /></div> <div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"><img src="sectors_mode/toggle_effect_overlay.jpg" alt="" /></div>
@ -176,6 +177,7 @@
<li> <li>
<h3><a name="linedefs" id="linedefs"></a>Linedefs mode:</h3> <h3><a name="linedefs" id="linedefs"></a>Linedefs mode:</h3>
<ul> <ul>
<li>Things dragging can be syncronized with linedefs dragging by enabling <strong>Linedefs -&gt; Syncronized Things Transform</strong> menu item / <strong>Syncronized Things Transform</strong> toolbar button.</li>
<li><strong>[UDMF]</strong> New actions: &quot;<strong>Align Ceiling Texture to Back Side</strong>&quot;, &quot;<strong>Align Ceiling Texture to Front Side</strong>&quot;, &quot;<strong>Align Floor Texture to Back Side</strong>&quot; and &quot;<strong>Align Floor Texture to Front Side</strong>&quot; (available in <strong>Linedefs -&gt; Align Textures</strong> menu).</li> <li><strong>[UDMF]</strong> New actions: &quot;<strong>Align Ceiling Texture to Back Side</strong>&quot;, &quot;<strong>Align Ceiling Texture to Front Side</strong>&quot;, &quot;<strong>Align Floor Texture to Back Side</strong>&quot; and &quot;<strong>Align Floor Texture to Front Side</strong>&quot; (available in <strong>Linedefs -&gt; Align Textures</strong> menu).</li>
<li><strong>[UDMF]</strong> &quot;<strong>Make brightness gradient</strong>&quot; command is available in Linedefs mode.</li> <li><strong>[UDMF]</strong> &quot;<strong>Make brightness gradient</strong>&quot; command is available in Linedefs mode.</li>
<li><strong>[UDMF]</strong> Linedef info panel: relative UDMF light values are shown like this: <span class="style7">16</span> (<span class="style9">128</span>), which means &quot;<span class="style7">UDMF light value</span>&quot; (&quot;<span class="style9">total surface brightness</span>&quot;). Total surface brightness is UDMF light value + sector brightness.</li> <li><strong>[UDMF]</strong> Linedef info panel: relative UDMF light values are shown like this: <span class="style7">16</span> (<span class="style9">128</span>), which means &quot;<span class="style7">UDMF light value</span>&quot; (&quot;<span class="style9">total surface brightness</span>&quot;). Total surface brightness is UDMF light value + sector brightness.</li>
@ -193,7 +195,6 @@
</li> </li>
<li>You can clone selected/highlighted things by holding &quot;Shift&quot; before starting to drag them.</li> <li>You can clone selected/highlighted things by holding &quot;Shift&quot; before starting to drag them.</li>
<li>New action: &quot;<strong>Point Thing to cursor</strong>&quot;. <a href="things_mode/pointthing.html">More info</a>.</li> <li>New action: &quot;<strong>Point Thing to cursor</strong>&quot;. <a href="things_mode/pointthing.html">More info</a>.</li>
<li>New action: &quot;<strong>Select Things in Selected Sectors</strong>&quot; (Default key is Shift+T).</li>
<li>New action: &quot;<strong>Align Things To Linedef</strong>&quot;.</li> <li>New action: &quot;<strong>Align Things To Linedef</strong>&quot;.</li>
<li>Z-height of a thing can be changed in absolute and relative mode in Thing Edit form.</li> <li>Z-height of a thing can be changed in absolute and relative mode in Thing Edit form.</li>
<li>Thing's X and Y position can be edited in Edit Thing form.</li> <li>Thing's X and Y position can be edited in Edit Thing form.</li>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -17,6 +17,7 @@
#region ================== Namespaces #region ================== Namespaces
using System; using System;
using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Windows.Forms; using System.Windows.Forms;
using System.Reflection; using System.Reflection;
@ -136,7 +137,32 @@ namespace CodeImp.DoomBuilder.Editing
//mxd //mxd
public virtual void UpdateSelectionInfo() public virtual void UpdateSelectionInfo()
{ {
General.Interface.DisplayStatus(StatusType.Selection, string.Empty); // Collect info
List<string> info = new List<string>();
if(General.Map.Map.SelectedSectorsCount > 0)
info.Add(General.Map.Map.SelectedSectorsCount + (General.Map.Map.SelectedSectorsCount == 1 ? " sector" : " sectors"));
if(General.Map.Map.SelectedLinedefsCount > 0)
info.Add(General.Map.Map.SelectedLinedefsCount + (General.Map.Map.SelectedLinedefsCount == 1 ? " linedef" : " linedefs"));
if(General.Map.Map.SelectedVerticessCount > 0)
info.Add(General.Map.Map.SelectedVerticessCount + (General.Map.Map.SelectedVerticessCount == 1 ? " vertex" : " vertices"));
if(General.Map.Map.SelectedThingsCount > 0)
info.Add(General.Map.Map.SelectedThingsCount + (General.Map.Map.SelectedThingsCount == 1 ? " thing" : " things"));
// Display results
string result = string.Empty;
if(info.Count > 0)
{
result = string.Join(", ", info.ToArray());
int pos = result.LastIndexOf(",", StringComparison.Ordinal);
if(pos != -1) result = result.Remove(pos, 1).Insert(pos, " and");
result += " selected.";
}
General.Interface.DisplayStatus(StatusType.Selection, result);
} }
#endregion #endregion

View file

@ -991,7 +991,6 @@ namespace CodeImp.DoomBuilder
try try
{ {
string settingsfile = newfilepathname.Substring(0, newfilepathname.Length - 4) + ".dbs"; string settingsfile = newfilepathname.Substring(0, newfilepathname.Length - 4) + ".dbs";
if(File.Exists(settingsfile)) File.Delete(settingsfile);
options.WriteConfiguration(settingsfile); options.WriteConfiguration(settingsfile);
} }
catch(Exception e) catch(Exception e)

View file

@ -216,6 +216,69 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Interface.OnEditFormValuesChanged -= thingEditForm_OnValuesChanged; General.Interface.OnEditFormValuesChanged -= thingEditForm_OnValuesChanged;
} }
//mxd
protected static void DeleteThings(ICollection<Thing> things)
{
if(things.Count == 0) return;
General.Map.Map.BeginAddRemove(); //mxd
// Dispose selected things
foreach(Thing t in things)
{
//mxd. Do some path reconnecting shenanigans...
ThingTypeInfo info = General.Map.Data.GetThingInfo(t.Type);
string targetclass = string.Empty;
int targetarg = -1;
// Thing type can be changed in MAPINFO DoomEdNums block...
switch(info.ClassName.ToLowerInvariant())
{
case "interpolationpoint":
if(t.Tag != 0 && t.Args[3] != 0)
{
targetclass = "interpolationpoint";
targetarg = 3;
}
break;
case "patrolpoint":
if(t.Tag != 0 && t.Args[0] != 0)
{
targetclass = "patrolpoint";
targetarg = 0;
}
break;
}
// Try to reconnect path...
if(!string.IsNullOrEmpty(targetclass) && targetarg > -1)
{
General.Map.Map.EndAddRemove(); // We'll need to unlock the things array...
foreach(Thing other in General.Map.Map.Things)
{
if(other.Index == t.Index)
continue;
info = General.Map.Data.GetThingInfo(other.Type);
if(info.ClassName.ToLowerInvariant() == targetclass && other.Args[targetarg] == t.Tag)
{
other.Move(other.Position); //hacky way to call BeforePropsChange()...
other.Args[targetarg] = t.Args[targetarg];
break;
}
}
General.Map.Map.BeginAddRemove(); // We'll need to lock it again...
}
// Get rid of the thing
t.Dispose();
}
General.Map.Map.EndAddRemove(); //mxd
}
#endregion #endregion
#region ================== Events (mxd) #region ================== Events (mxd)
@ -328,32 +391,18 @@ namespace CodeImp.DoomBuilder.BuilderModes
} }
//mxd //mxd
[BeginAction("thingsselectinsectors")] [BeginAction("syncedthingedit")]
public void SelectThingsInSelectedSectors() public void ToggleSyncronizedThingsEdit()
{ {
bool convertselection = !(this is SectorsMode); BuilderPlug.Me.SyncronizeThingEdit = !BuilderPlug.Me.SyncronizeThingEdit;
if(convertselection) General.Map.Map.ConvertSelection(SelectionType.Sectors); General.Interface.DisplayStatus(StatusType.Info, (BuilderPlug.Me.SyncronizeThingEdit ?
"Things editing is SYNCRONIZED" :
"Things editing is not syncronized"));
if(General.Map.Map.SelectedSectorsCount == 0) // Update interface
{ BuilderPlug.Me.MenusForm.SyncronizeThingEditButton.Checked = BuilderPlug.Me.SyncronizeThingEdit;
General.Interface.DisplayStatus(StatusType.Warning, "This action requires a!"); BuilderPlug.Me.MenusForm.SyncronizeThingEditLinedefsItem.Checked = BuilderPlug.Me.SyncronizeThingEdit;
if(convertselection) General.Map.Map.ConvertSelection(SelectionType.Linedefs); BuilderPlug.Me.MenusForm.SyncronizeThingEditSectorsItem.Checked = BuilderPlug.Me.SyncronizeThingEdit;
return;
}
ICollection<Sector> sectors = General.Map.Map.GetSelectedSectors(true);
foreach(Thing t in General.Map.Map.Things)
{
t.DetermineSector();
if(!t.Selected && t.Sector != null && sectors.Contains(t.Sector)) t.Selected = true;
}
// Update info
if(convertselection) General.Map.Map.ConvertSelection(SelectionType.Linedefs);
UpdateSelectionInfo();
// Redraw screen
General.Interface.RedrawDisplay();
} }
#endregion #endregion

View file

@ -60,7 +60,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
protected ICollection<Thing> unselectedthings; //mxd protected ICollection<Thing> unselectedthings; //mxd
// List of things, which should be moved // List of things, which should be moved
protected ICollection<Thing> thingstodrag; //mxd private ICollection<Thing> thingstodrag; //mxd
//mxd. List of sectors //mxd. List of sectors
private List<Sector> selectedsectors; private List<Sector> selectedsectors;
@ -133,7 +133,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Make list of selected vertices and things // Make list of selected vertices and things
selectedverts = General.Map.Map.GetMarkedVertices(true); selectedverts = General.Map.Map.GetMarkedVertices(true);
selectedthings = General.Map.Map.GetSelectedThings(true); //mxd selectedthings = General.Map.Map.GetSelectedThings(true); //mxd
thingstodrag = GetThingsToDrag(); //mxd thingstodrag = (BuilderPlug.Me.SyncronizeThingEdit ? selectedthings : new List<Thing>()); //mxd
// Make list of non-selected vertices and things // Make list of non-selected vertices and things
// Non-selected vertices will be used for snapping to nearest items // Non-selected vertices will be used for snapping to nearest items
@ -210,12 +210,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
Cursor.Current = Cursors.Default; Cursor.Current = Cursors.Default;
} }
//mxd
protected virtual ICollection<Thing> GetThingsToDrag()
{
return selectedthings;
}
// This moves the selected geometry relatively // This moves the selected geometry relatively
// Returns true when geometry has actually moved // Returns true when geometry has actually moved
private bool MoveGeometryRelative(Vector2D offset, bool snapgrid, bool snapgridincrement, bool snapnearest, bool snapcardinal) private bool MoveGeometryRelative(Vector2D offset, bool snapgrid, bool snapgridincrement, bool snapnearest, bool snapcardinal)

View file

@ -188,25 +188,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
} }
} }
//mxd
protected override ICollection<Thing> GetThingsToDrag()
{
if (BuilderPlug.Me.DragThingsInSectorsMode)
{
thingstodrag = new List<Thing>();
foreach (Thing t in General.Map.ThingsFilter.VisibleThings)
{
t.DetermineSector();
if (selectedsectors.Contains(t.Sector)) thingstodrag.Add(t);
}
return thingstodrag;
}
return base.GetThingsToDrag();
}
#endregion #endregion
} }
} }

View file

@ -333,10 +333,14 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Interface.AddButton(BuilderPlug.Me.MenusForm.MakeGradientBrightness); General.Interface.AddButton(BuilderPlug.Me.MenusForm.MakeGradientBrightness);
General.Interface.AddButton(BuilderPlug.Me.MenusForm.GradientInterpolationMenu); General.Interface.AddButton(BuilderPlug.Me.MenusForm.GradientInterpolationMenu);
} }
General.Interface.AddButton(BuilderPlug.Me.MenusForm.MarqueSelectTouching); //mxd
General.Interface.AddButton(BuilderPlug.Me.MenusForm.CurveLinedefs); General.Interface.AddButton(BuilderPlug.Me.MenusForm.CurveLinedefs);
General.Interface.AddButton(BuilderPlug.Me.MenusForm.MarqueSelectTouching); //mxd
General.Interface.AddButton(BuilderPlug.Me.MenusForm.SyncronizeThingEditButton); //mxd
if(General.Map.UDMF) General.Interface.AddButton(BuilderPlug.Me.MenusForm.TextureOffsetLock, ToolbarSection.Geometry); //mxd if(General.Map.UDMF) General.Interface.AddButton(BuilderPlug.Me.MenusForm.TextureOffsetLock, ToolbarSection.Geometry); //mxd
//mxd. Update the tooltip
BuilderPlug.Me.MenusForm.SyncronizeThingEditButton.ToolTipText = "Synchronized Things Editing" + Environment.NewLine + BuilderPlug.Me.MenusForm.SyncronizeThingEditLinedefsItem.ToolTipText;
// Convert geometry selection to linedefs selection // Convert geometry selection to linedefs selection
General.Map.Map.ConvertSelection(SelectionType.Linedefs); General.Map.Map.ConvertSelection(SelectionType.Linedefs);
UpdateSelectionInfo(); //mxd UpdateSelectionInfo(); //mxd
@ -357,8 +361,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.MakeGradientBrightness); General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.MakeGradientBrightness);
General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.GradientInterpolationMenu); General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.GradientInterpolationMenu);
} }
General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.MarqueSelectTouching); //mxd
General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.CurveLinedefs); General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.CurveLinedefs);
General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.MarqueSelectTouching); //mxd
General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.SyncronizeThingEditButton); //mxd
if(General.Map.UDMF) General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.TextureOffsetLock); //mxd if(General.Map.UDMF) General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.TextureOffsetLock); //mxd
// Going to EditSelectionMode? // Going to EditSelectionMode?
@ -780,26 +785,47 @@ namespace CodeImp.DoomBuilder.BuilderModes
}; };
//mxd //mxd
bool selectthings = (marqueSelectionIncludesThings ^ BuilderPlug.Me.SyncronizeThingEdit);
switch(marqueSelectionMode) switch(marqueSelectionMode)
{ {
case MarqueSelectionMode.SELECT: case MarqueSelectionMode.SELECT:
foreach(Linedef l in General.Map.Map.Linedefs) foreach(Linedef l in General.Map.Map.Linedefs)
l.Selected = IsInSelectionRect(l, selectionOutline); l.Selected = IsInSelectionRect(l, selectionOutline);
if(selectthings)
{
foreach(Thing t in General.Map.ThingsFilter.VisibleThings)
t.Selected = selectionrect.Contains(t.Position.x, t.Position.y);
}
break; break;
case MarqueSelectionMode.ADD: case MarqueSelectionMode.ADD:
foreach(Linedef l in General.Map.Map.Linedefs) foreach(Linedef l in General.Map.Map.Linedefs)
l.Selected |= IsInSelectionRect(l, selectionOutline); l.Selected |= IsInSelectionRect(l, selectionOutline);
if(selectthings)
{
foreach(Thing t in General.Map.ThingsFilter.VisibleThings)
t.Selected |= selectionrect.Contains(t.Position.x, t.Position.y);
}
break; break;
case MarqueSelectionMode.SUBTRACT: case MarqueSelectionMode.SUBTRACT:
foreach(Linedef l in General.Map.Map.Linedefs) foreach(Linedef l in General.Map.Map.Linedefs)
if(IsInSelectionRect(l, selectionOutline)) l.Selected = false; if(IsInSelectionRect(l, selectionOutline)) l.Selected = false;
if(selectthings)
{
foreach(Thing t in General.Map.ThingsFilter.VisibleThings)
if(selectionrect.Contains(t.Position.x, t.Position.y)) t.Selected = false;
}
break; break;
default: default:
foreach(Linedef l in General.Map.Map.Linedefs) foreach(Linedef l in General.Map.Map.Linedefs)
if(!IsInSelectionRect(l, selectionOutline)) l.Selected = false; if(!IsInSelectionRect(l, selectionOutline)) l.Selected = false;
if(selectthings)
{
foreach(Thing t in General.Map.ThingsFilter.VisibleThings)
if(!selectionrect.Contains(t.Position.x, t.Position.y)) t.Selected = false;
}
break; break;
} }
@ -848,15 +874,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
return base.OnCopyBegin(); return base.OnCopyBegin();
} }
//mxd
public override void UpdateSelectionInfo()
{
if(General.Map.Map.SelectedLinedefsCount > 0)
General.Interface.DisplayStatus(StatusType.Selection, General.Map.Map.SelectedLinedefsCount + (General.Map.Map.SelectedLinedefsCount == 1 ? " linedef" : " linedefs") + " selected.");
else
General.Interface.DisplayStatus(StatusType.Selection, string.Empty);
}
//mxd //mxd
private void RenderComment(Linedef l) private void RenderComment(Linedef l)
{ {

View file

@ -525,7 +525,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
} }
//mxd. Also (de)select things? //mxd. Also (de)select things?
if (General.Interface.AltState) if(General.Interface.AltState ^ BuilderPlug.Me.SyncronizeThingEdit)
{ {
foreach(Thing t in General.Map.ThingsFilter.VisibleThings) foreach(Thing t in General.Map.ThingsFilter.VisibleThings)
{ {
@ -649,12 +649,30 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Interface.AddButton(BuilderPlug.Me.MenusForm.MakeGradientCeilings); General.Interface.AddButton(BuilderPlug.Me.MenusForm.MakeGradientCeilings);
General.Interface.AddButton(BuilderPlug.Me.MenusForm.SeparatorSectors3); //mxd General.Interface.AddButton(BuilderPlug.Me.MenusForm.SeparatorSectors3); //mxd
General.Interface.AddButton(BuilderPlug.Me.MenusForm.MarqueSelectTouching); //mxd General.Interface.AddButton(BuilderPlug.Me.MenusForm.MarqueSelectTouching); //mxd
General.Interface.AddButton(BuilderPlug.Me.MenusForm.DragThingsInSelectedSectors); //mxd General.Interface.AddButton(BuilderPlug.Me.MenusForm.SyncronizeThingEditButton); //mxd
if(General.Map.UDMF) General.Interface.AddButton(BuilderPlug.Me.MenusForm.TextureOffsetLock, ToolbarSection.Geometry); //mxd if(General.Map.UDMF) General.Interface.AddButton(BuilderPlug.Me.MenusForm.TextureOffsetLock, ToolbarSection.Geometry); //mxd
// Convert geometry selection to sectors only // Convert geometry selection to sectors only
General.Map.Map.ConvertSelection(SelectionType.Sectors); General.Map.Map.ConvertSelection(SelectionType.Sectors);
//mxd. Update the tooltip
BuilderPlug.Me.MenusForm.SyncronizeThingEditButton.ToolTipText = "Synchronized Things Editing" + Environment.NewLine + BuilderPlug.Me.MenusForm.SyncronizeThingEditSectorsItem.ToolTipText;
//mxd. Select things as well?
if(BuilderPlug.Me.SyncronizeThingEdit)
{
ICollection<Sector> sectors = General.Map.Map.GetSelectedSectors(true);
if(sectors.Count > 0)
{
foreach(Thing t in General.Map.Map.Things)
{
t.DetermineSector();
if(!t.Selected && t.Sector != null && sectors.Contains(t.Sector))
t.Selected = true;
}
}
}
// Make text labels for sectors // Make text labels for sectors
SetupLabels(); SetupLabels();
@ -686,7 +704,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.MakeGradientCeilings); General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.MakeGradientCeilings);
General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.SeparatorSectors3); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.SeparatorSectors3); //mxd
General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.MarqueSelectTouching); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.MarqueSelectTouching); //mxd
General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.DragThingsInSelectedSectors); //mxd General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.SyncronizeThingEditButton); //mxd
if(General.Map.UDMF) General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.TextureOffsetLock); //mxd if(General.Map.UDMF) General.Interface.RemoveButton(BuilderPlug.Me.MenusForm.TextureOffsetLock); //mxd
// Keep only sectors selected // Keep only sectors selected
@ -804,13 +822,23 @@ namespace CodeImp.DoomBuilder.BuilderModes
renderer.Present(); renderer.Present();
//mxd. Thing selection state may've changed //mxd. Thing selection state may've changed
if(General.Interface.AltState) General.Interface.RedrawDisplay(); if(General.Interface.AltState ^ BuilderPlug.Me.SyncronizeThingEdit) General.Interface.RedrawDisplay();
} }
else if(BuilderPlug.Me.AutoClearSelection && General.Map.Map.SelectedSectorsCount > 0) //mxd else if(BuilderPlug.Me.AutoClearSelection && (General.Map.Map.SelectedSectorsCount > 0 || (BuilderPlug.Me.SyncronizeThingEdit && General.Map.Map.SelectedThingsCount > 0))) //mxd
{ {
General.Map.Map.ClearSelectedLinedefs(); if(General.Map.Map.SelectedSectorsCount > 0)
General.Map.Map.ClearSelectedSectors(); {
UpdateOverlaySurfaces(); //mxd General.Map.Map.ClearSelectedLinedefs();
General.Map.Map.ClearSelectedSectors();
UpdateOverlaySurfaces(); //mxd
}
//mxd
if(BuilderPlug.Me.SyncronizeThingEdit && General.Map.Map.SelectedThingsCount > 0)
{
General.Map.Map.ClearSelectedThings();
}
General.Interface.RedrawDisplay(); General.Interface.RedrawDisplay();
} }
@ -1156,25 +1184,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
switch(marqueSelectionMode) switch(marqueSelectionMode)
{ {
case MarqueSelectionMode.SELECT: case MarqueSelectionMode.SELECT:
bool select;
foreach(Sector s in General.Map.Map.Sectors) foreach(Sector s in General.Map.Map.Sectors)
{ {
select = IsInSelectionRect(s, selectionOutline); bool select = IsInSelectionRect(s, selectionOutline);
if(select && !s.Selected) SelectSector(s, true, false); if(select && !s.Selected) SelectSector(s, true, false);
else if(!select && s.Selected) SelectSector(s, false, false); else if(!select && s.Selected) SelectSector(s, false, false);
} }
if (marqueSelectionIncludesThings)
{
ICollection<Sector> selected = General.Map.Map.GetSelectedSectors(true);
foreach (Thing t in General.Map.ThingsFilter.VisibleThings)
{
t.DetermineSector();
if(t.Sector == null) continue;
t.Selected = selectionrect.Contains(t.Position.x, t.Position.y) && selected.Contains(t.Sector);
}
}
break; break;
case MarqueSelectionMode.ADD: case MarqueSelectionMode.ADD:
@ -1183,17 +1198,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(!s.Selected && IsInSelectionRect(s, selectionOutline)) if(!s.Selected && IsInSelectionRect(s, selectionOutline))
SelectSector(s, true, false); SelectSector(s, true, false);
} }
if (marqueSelectionIncludesThings)
{
ICollection<Sector> selected = General.Map.Map.GetSelectedSectors(true);
foreach (Thing t in General.Map.ThingsFilter.VisibleThings)
{
t.DetermineSector();
if(t.Sector == null) continue;
t.Selected |= selectionrect.Contains(t.Position.x, t.Position.y) && selected.Contains(t.Sector);
}
}
break; break;
case MarqueSelectionMode.SUBTRACT: case MarqueSelectionMode.SUBTRACT:
@ -1203,11 +1207,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(IsInSelectionRect(s, selectionOutline)) if(IsInSelectionRect(s, selectionOutline))
SelectSector(s, false, false); SelectSector(s, false, false);
} }
if (marqueSelectionIncludesThings)
{
foreach (Thing t in General.Map.ThingsFilter.VisibleThings)
if (selectionrect.Contains(t.Position.x, t.Position.y)) t.Selected = false;
}
break; break;
default: //should be Intersect default: //should be Intersect
@ -1217,11 +1216,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(!IsInSelectionRect(s, selectionOutline)) if(!IsInSelectionRect(s, selectionOutline))
SelectSector(s, false, false); SelectSector(s, false, false);
} }
if (marqueSelectionIncludesThings)
{
foreach(Thing t in General.Map.ThingsFilter.VisibleThings)
if(!selectionrect.Contains(t.Position.x, t.Position.y)) t.Selected = false;
}
break; break;
} }
@ -1320,20 +1314,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
base.OnRedoEnd(); //mxd base.OnRedoEnd(); //mxd
} }
//mxd
public override void UpdateSelectionInfo()
{
List<string> info = new List<string>();
if(General.Map.Map.SelectedSectorsCount > 0)
info.Add(General.Map.Map.SelectedSectorsCount + (General.Map.Map.SelectedSectorsCount == 1 ? " sector" : " sectors"));
if(General.Map.Map.SelectedThingsCount > 0)
info.Add(General.Map.Map.SelectedThingsCount + (General.Map.Map.SelectedThingsCount == 1 ? " thing" : " things"));
General.Interface.DisplayStatus(StatusType.Selection, (info.Count > 0 ? string.Join(" and ", info.ToArray()) + " selected." : string.Empty));
}
//mxd //mxd
private void RenderComment(Sector s) private void RenderComment(Sector s)
{ {
@ -1641,29 +1621,61 @@ namespace CodeImp.DoomBuilder.BuilderModes
[BeginAction("deleteitem", BaseAction = true)] [BeginAction("deleteitem", BaseAction = true)]
public void DeleteItem() public void DeleteItem()
{ {
//mxd. Make list of selected things
List<Thing> selectedthings = (BuilderPlug.Me.SyncronizeThingEdit ? new List<Thing>(General.Map.Map.GetSelectedThings(true)) : new List<Thing>());
// Make list of selected sectors // Make list of selected sectors
List<Sector> selected = new List<Sector>(General.Map.Map.GetSelectedSectors(true)); List<Sector> selectedsectors = new List<Sector>(General.Map.Map.GetSelectedSectors(true));
if((selected.Count == 0) && (highlighted != null) && !highlighted.IsDisposed) selected.Add(highlighted); if((selectedsectors.Count == 0) && (highlighted != null) && !highlighted.IsDisposed)
{
selectedsectors.Add(highlighted);
//mxd. Add things?
if(BuilderPlug.Me.SyncronizeThingEdit)
{
foreach(Thing t in General.Map.ThingsFilter.VisibleThings)
{
if(t.Sector == null) t.DetermineSector();
if(t.Sector == highlighted) selectedthings.Add(t);
}
}
}
if(selectedsectors.Count == 0 && selectedthings.Count == 0) return; //mxd
//mxd. Create undo info text
List<string> info = new List<string>();
//mxd. Create linedef info text
if(selectedsectors.Count > 1)
info.Add(selectedsectors.Count + " sectors");
else
info.Add("a sector");
//mxd. Create things info text
if(selectedthings.Count > 1)
info.Add(selectedthings.Count + " things");
else
info.Add("a thing");
//mxd. Make undo
string rest = string.Join(" and ", info.ToArray());
General.Map.UndoRedo.CreateUndo("Delete " + rest);
General.Interface.DisplayStatus(StatusType.Action, "Deleted " + rest + ".");
//mxd. Delete things
if(selectedthings.Count > 0)
{
DeleteThings(selectedthings);
General.Map.ThingsFilter.Update();
}
// Anything to do? // Anything to do?
if(selected.Count > 0) if(selectedsectors.Count > 0)
{ {
// Make undo
if(selected.Count > 1)
{
General.Map.UndoRedo.CreateUndo("Delete " + selected.Count + " sectors");
General.Interface.DisplayStatus(StatusType.Action, "Deleted " + selected.Count + " sectors.");
}
else
{
General.Map.UndoRedo.CreateUndo("Delete sector");
General.Interface.DisplayStatus(StatusType.Action, "Deleted sector.");
}
General.Map.Map.BeginAddRemove(); //mxd General.Map.Map.BeginAddRemove(); //mxd
// Dispose selected sectors // Dispose selected sectors
foreach(Sector s in selected) foreach(Sector s in selectedsectors)
{ {
//mxd. Get all the linedefs //mxd. Get all the linedefs
List<Linedef> lines = new List<Linedef>(s.Sidedefs.Count); List<Linedef> lines = new List<Linedef>(s.Sidedefs.Count);
@ -1713,7 +1725,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
} }
General.Map.Map.EndAddRemove(); //mxd General.Map.Map.EndAddRemove(); //mxd
}
if(selectedthings.Count > 0 || selectedsectors.Count > 0)
{
// Update cache values // Update cache values
General.Map.IsChanged = true; General.Map.IsChanged = true;
General.Map.Map.Update(); General.Map.Map.Update();

View file

@ -740,15 +740,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
return base.OnCopyBegin(); return base.OnCopyBegin();
} }
//mxd
public override void UpdateSelectionInfo()
{
if(General.Map.Map.SelectedThingsCount > 0)
General.Interface.DisplayStatus(StatusType.Selection, General.Map.Map.SelectedThingsCount + (General.Map.Map.SelectedThingsCount == 1 ? " thing" : " things") + " selected.");
else
General.Interface.DisplayStatus(StatusType.Selection, string.Empty);
}
//mxd //mxd
private void RenderComment(Thing t) private void RenderComment(Thing t)
{ {
@ -1007,61 +998,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Interface.DisplayStatus(StatusType.Action, "Deleted a thing."); General.Interface.DisplayStatus(StatusType.Action, "Deleted a thing.");
} }
General.Map.Map.BeginAddRemove(); //mxd DeleteThings(selected); //mxd
// Dispose selected things
foreach(Thing t in selected)
{
//mxd. Do some path reconnecting shenanigans...
ThingTypeInfo info = General.Map.Data.GetThingInfo(t.Type);
string targetclass = string.Empty;
int targetarg = -1;
// Thing type can be changed in MAPINFO DoomEdNums block...
switch (info.ClassName.ToLowerInvariant())
{
case "interpolationpoint":
if(t.Tag != 0 && t.Args[3] != 0)
{
targetclass = "interpolationpoint";
targetarg = 3;
}
break;
case "patrolpoint":
if(t.Tag != 0 && t.Args[0] != 0)
{
targetclass = "patrolpoint";
targetarg = 0;
}
break;
}
// Try to reconnect path...
if(!string.IsNullOrEmpty(targetclass) && targetarg > -1)
{
General.Map.Map.EndAddRemove(); // We'll need to unlock the things array...
foreach(Thing other in General.Map.Map.Things)
{
if(other.Index == t.Index) continue;
info = General.Map.Data.GetThingInfo(other.Type);
if(info.ClassName.ToLowerInvariant() == targetclass && other.Args[targetarg] == t.Tag)
{
other.Move(other.Position); //hacky way to call BeforePropsChange()...
other.Args[targetarg] = t.Args[targetarg];
break;
}
}
General.Map.Map.BeginAddRemove(); // We'll need to lock it again...
}
// Get rid of the thing
t.Dispose();
}
General.Map.Map.EndAddRemove(); //mxd
// Update cache values // Update cache values
General.Map.IsChanged = true; General.Map.IsChanged = true;

View file

@ -694,15 +694,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
return base.OnCopyBegin(); return base.OnCopyBegin();
} }
//mxd
public override void UpdateSelectionInfo()
{
if(General.Map.Map.SelectedVerticessCount > 0)
General.Interface.DisplayStatus(StatusType.Selection, General.Map.Map.SelectedVerticessCount + (General.Map.Map.SelectedVerticessCount == 1 ? " vertex" : " vertices") + " selected.");
else
General.Interface.DisplayStatus(StatusType.Selection, string.Empty);
}
#endregion #endregion
#region ================== Actions #region ================== Actions

View file

@ -128,7 +128,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
private bool marqueSelectTouching; //mxd. Select elements partially/fully inside of marque selection? private bool marqueSelectTouching; //mxd. Select elements partially/fully inside of marque selection?
private bool syncSelection; //mxd. Sync selection between Visual and Classic modes. private bool syncSelection; //mxd. Sync selection between Visual and Classic modes.
private bool lockSectorTextureOffsetsWhileDragging; //mxd private bool lockSectorTextureOffsetsWhileDragging; //mxd
private bool dragThingsInSectorsMode; //mxd private bool syncthingedit; //mxd
#endregion #endregion
@ -188,7 +188,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
public bool MarqueSelectTouching { get { return marqueSelectTouching; } set { marqueSelectTouching = value; } } //mxd public bool MarqueSelectTouching { get { return marqueSelectTouching; } set { marqueSelectTouching = value; } } //mxd
public bool SyncSelection { get { return syncSelection; } set { syncSelection = value; } } //mxd public bool SyncSelection { get { return syncSelection; } set { syncSelection = value; } } //mxd
public bool LockSectorTextureOffsetsWhileDragging { get { return lockSectorTextureOffsetsWhileDragging; } internal set { lockSectorTextureOffsetsWhileDragging = value; } } //mxd public bool LockSectorTextureOffsetsWhileDragging { get { return lockSectorTextureOffsetsWhileDragging; } internal set { lockSectorTextureOffsetsWhileDragging = value; } } //mxd
public bool DragThingsInSectorsMode { get { return dragThingsInSectorsMode; } internal set { dragThingsInSectorsMode = value; } } //mxd public bool SyncronizeThingEdit { get { return syncthingedit; } internal set { syncthingedit = value; } } //mxd
//mxd. "Make Door" action persistent settings //mxd. "Make Door" action persistent settings
internal MakeDoorSettings MakeDoor; internal MakeDoorSettings MakeDoor;
@ -214,7 +214,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
menusform = new MenusForm(); menusform = new MenusForm();
menusform.Register(); menusform.Register();
menusform.TextureOffsetLock.Checked = lockSectorTextureOffsetsWhileDragging; //mxd menusform.TextureOffsetLock.Checked = lockSectorTextureOffsetsWhileDragging; //mxd
menusform.DragThingsInSelectedSectors.Checked = dragThingsInSectorsMode; //mxd menusform.SyncronizeThingEditButton.Checked = syncthingedit; //mxd
menusform.SyncronizeThingEditSectorsItem.Checked = syncthingedit; //mxd
menusform.SyncronizeThingEditLinedefsItem.Checked = syncthingedit; //mxd
// Load Undo\Redo docker // Load Undo\Redo docker
undoredopanel = new UndoRedoPanel(); undoredopanel = new UndoRedoPanel();
@ -297,7 +299,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
lockSectorTextureOffsetsWhileDragging = General.Settings.ReadPluginSetting("locktextureoffsets", false); //mxd lockSectorTextureOffsetsWhileDragging = General.Settings.ReadPluginSetting("locktextureoffsets", false); //mxd
viewselectionnumbers = General.Settings.ReadPluginSetting("viewselectionnumbers", true); viewselectionnumbers = General.Settings.ReadPluginSetting("viewselectionnumbers", true);
viewselectioneffects = General.Settings.ReadPluginSetting("viewselectioneffects", true); //mxd viewselectioneffects = General.Settings.ReadPluginSetting("viewselectioneffects", true); //mxd
dragThingsInSectorsMode = General.Settings.ReadPluginSetting("dragthingsinsectorsmode", true); //mxd syncthingedit = General.Settings.ReadPluginSetting("syncthingedit", true); //mxd
} }
//mxd. Save settings, which can be changed via UI //mxd. Save settings, which can be changed via UI
@ -306,7 +308,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Settings.WritePluginSetting("locktextureoffsets", lockSectorTextureOffsetsWhileDragging); General.Settings.WritePluginSetting("locktextureoffsets", lockSectorTextureOffsetsWhileDragging);
General.Settings.WritePluginSetting("viewselectionnumbers", viewselectionnumbers); General.Settings.WritePluginSetting("viewselectionnumbers", viewselectionnumbers);
General.Settings.WritePluginSetting("viewselectioneffects", viewselectioneffects); General.Settings.WritePluginSetting("viewselectioneffects", viewselectioneffects);
General.Settings.WritePluginSetting("dragthingsinsectorsmode", dragThingsInSectorsMode); General.Settings.WritePluginSetting("syncthingedit", syncthingedit);
} }
//mxd. These should be reset when changing maps //mxd. These should be reset when changing maps

View file

@ -28,10 +28,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MenusForm));
this.menustrip = new System.Windows.Forms.MenuStrip(); this.menustrip = new System.Windows.Forms.MenuStrip();
this.linedefsmenu = new System.Windows.Forms.ToolStripMenuItem(); this.linedefsmenu = new System.Windows.Forms.ToolStripMenuItem();
this.placethingsl = new System.Windows.Forms.ToolStripMenuItem(); this.placethingsl = new System.Windows.Forms.ToolStripMenuItem();
this.selectInSectorsItem3 = new System.Windows.Forms.ToolStripMenuItem(); this.syncthingeditlinedefsitem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.selectsinglesideditem = new System.Windows.Forms.ToolStripMenuItem(); this.selectsinglesideditem = new System.Windows.Forms.ToolStripMenuItem();
this.selectdoublesideditem = new System.Windows.Forms.ToolStripMenuItem(); this.selectdoublesideditem = new System.Windows.Forms.ToolStripMenuItem();
@ -52,7 +53,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
this.selectSimilarLinesItem = new System.Windows.Forms.ToolStripMenuItem(); this.selectSimilarLinesItem = new System.Windows.Forms.ToolStripMenuItem();
this.sectorsmenu = new System.Windows.Forms.ToolStripMenuItem(); this.sectorsmenu = new System.Windows.Forms.ToolStripMenuItem();
this.placethingss = new System.Windows.Forms.ToolStripMenuItem(); this.placethingss = new System.Windows.Forms.ToolStripMenuItem();
this.selectInSectorsItem2 = new System.Windows.Forms.ToolStripMenuItem(); this.syncthingeditsectorsitem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.joinsectorsitem = new System.Windows.Forms.ToolStripMenuItem(); this.joinsectorsitem = new System.Windows.Forms.ToolStripMenuItem();
this.mergesectorsitem = new System.Windows.Forms.ToolStripMenuItem(); this.mergesectorsitem = new System.Windows.Forms.ToolStripMenuItem();
@ -95,7 +96,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
this.gradientInterpolationMenu = new System.Windows.Forms.ToolStripComboBox(); this.gradientInterpolationMenu = new System.Windows.Forms.ToolStripComboBox();
this.separatorsectors3 = new System.Windows.Forms.ToolStripSeparator(); this.separatorsectors3 = new System.Windows.Forms.ToolStripSeparator();
this.buttonMarqueSelectTouching = new System.Windows.Forms.ToolStripButton(); this.buttonMarqueSelectTouching = new System.Windows.Forms.ToolStripButton();
this.buttonDragThingsInSelectedSectors = new System.Windows.Forms.ToolStripButton(); this.syncthingteditbutton = new System.Windows.Forms.ToolStripButton();
this.buttonAlignThingsToWall = new System.Windows.Forms.ToolStripButton(); this.buttonAlignThingsToWall = new System.Windows.Forms.ToolStripButton();
this.buttonTextureOffsetLock = new System.Windows.Forms.ToolStripButton(); this.buttonTextureOffsetLock = new System.Windows.Forms.ToolStripButton();
this.fileMenuStrip = new System.Windows.Forms.MenuStrip(); this.fileMenuStrip = new System.Windows.Forms.MenuStrip();
@ -128,7 +129,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
// //
this.linedefsmenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.linedefsmenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.placethingsl, this.placethingsl,
this.selectInSectorsItem3, this.syncthingeditlinedefsitem,
this.toolStripSeparator2, this.toolStripSeparator2,
this.selectsinglesideditem, this.selectsinglesideditem,
this.selectdoublesideditem, this.selectdoublesideditem,
@ -153,36 +154,41 @@ namespace CodeImp.DoomBuilder.BuilderModes
// //
this.placethingsl.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.PlaceThings; this.placethingsl.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.PlaceThings;
this.placethingsl.Name = "placethingsl"; this.placethingsl.Name = "placethingsl";
this.placethingsl.Size = new System.Drawing.Size(245, 22); this.placethingsl.Size = new System.Drawing.Size(224, 22);
this.placethingsl.Tag = "placethings"; this.placethingsl.Tag = "placethings";
this.placethingsl.Text = "&Place Things..."; this.placethingsl.Text = "&Place Things...";
this.placethingsl.Click += new System.EventHandler(this.InvokeTaggedAction); this.placethingsl.Click += new System.EventHandler(this.InvokeTaggedAction);
// //
// selectInSectorsItem3 // syncthingeditlinedefsitem
// //
this.selectInSectorsItem3.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.SelectThingsInSectors; this.syncthingeditlinedefsitem.CheckOnClick = true;
this.selectInSectorsItem3.Name = "selectInSectorsItem3"; this.syncthingeditlinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.SelectThingsInSectors;
this.selectInSectorsItem3.Size = new System.Drawing.Size(245, 22); this.syncthingeditlinedefsitem.Name = "syncthingeditlinedefsitem";
this.selectInSectorsItem3.Tag = "thingsselectinsectors"; this.syncthingeditlinedefsitem.Size = new System.Drawing.Size(224, 22);
this.selectInSectorsItem3.Text = "&Select Things in Selected Sectors"; this.syncthingeditlinedefsitem.Tag = "syncedthingedit";
this.syncthingeditlinedefsitem.Text = "&Synchronized Things Editing";
this.syncthingeditlinedefsitem.ToolTipText = "When enabled, selected things will be dragged when dragging linedefs.\r\nRectangula" +
"r selection will also select things (holding Alt while selecting \r\ninverts this " +
"behaviour).";
this.syncthingeditlinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction);
// //
// toolStripSeparator2 // toolStripSeparator2
// //
this.toolStripSeparator2.Name = "toolStripSeparator2"; this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(242, 6); this.toolStripSeparator2.Size = new System.Drawing.Size(221, 6);
// //
// selectsinglesideditem // selectsinglesideditem
// //
this.selectsinglesideditem.Name = "selectsinglesideditem"; this.selectsinglesideditem.Name = "selectsinglesideditem";
this.selectsinglesideditem.Size = new System.Drawing.Size(245, 22); this.selectsinglesideditem.Size = new System.Drawing.Size(224, 22);
this.selectsinglesideditem.Tag = "selectsinglesided"; this.selectsinglesideditem.Tag = "selectsinglesided";
this.selectsinglesideditem.Text = "Select &Single-sided only"; this.selectsinglesideditem.Text = "Select S&ingle-sided only";
this.selectsinglesideditem.Click += new System.EventHandler(this.InvokeTaggedAction); this.selectsinglesideditem.Click += new System.EventHandler(this.InvokeTaggedAction);
// //
// selectdoublesideditem // selectdoublesideditem
// //
this.selectdoublesideditem.Name = "selectdoublesideditem"; this.selectdoublesideditem.Name = "selectdoublesideditem";
this.selectdoublesideditem.Size = new System.Drawing.Size(245, 22); this.selectdoublesideditem.Size = new System.Drawing.Size(224, 22);
this.selectdoublesideditem.Tag = "selectdoublesided"; this.selectdoublesideditem.Tag = "selectdoublesided";
this.selectdoublesideditem.Text = "Select &Double-sided only"; this.selectdoublesideditem.Text = "Select &Double-sided only";
this.selectdoublesideditem.Click += new System.EventHandler(this.InvokeTaggedAction); this.selectdoublesideditem.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -190,13 +196,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
// toolStripMenuItem4 // toolStripMenuItem4
// //
this.toolStripMenuItem4.Name = "toolStripMenuItem4"; this.toolStripMenuItem4.Name = "toolStripMenuItem4";
this.toolStripMenuItem4.Size = new System.Drawing.Size(242, 6); this.toolStripMenuItem4.Size = new System.Drawing.Size(221, 6);
// //
// fliplinedefsitem // fliplinedefsitem
// //
this.fliplinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip; this.fliplinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip;
this.fliplinedefsitem.Name = "fliplinedefsitem"; this.fliplinedefsitem.Name = "fliplinedefsitem";
this.fliplinedefsitem.Size = new System.Drawing.Size(245, 22); this.fliplinedefsitem.Size = new System.Drawing.Size(224, 22);
this.fliplinedefsitem.Tag = "fliplinedefs"; this.fliplinedefsitem.Tag = "fliplinedefs";
this.fliplinedefsitem.Text = "&Flip Linedefs"; this.fliplinedefsitem.Text = "&Flip Linedefs";
this.fliplinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); this.fliplinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -205,7 +211,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
// //
this.flipsidedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip; this.flipsidedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip;
this.flipsidedefsitem.Name = "flipsidedefsitem"; this.flipsidedefsitem.Name = "flipsidedefsitem";
this.flipsidedefsitem.Size = new System.Drawing.Size(245, 22); this.flipsidedefsitem.Size = new System.Drawing.Size(224, 22);
this.flipsidedefsitem.Tag = "flipsidedefs"; this.flipsidedefsitem.Tag = "flipsidedefs";
this.flipsidedefsitem.Text = "F&lip Sidedefs"; this.flipsidedefsitem.Text = "F&lip Sidedefs";
this.flipsidedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); this.flipsidedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -213,13 +219,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
// toolStripMenuItem1 // toolStripMenuItem1
// //
this.toolStripMenuItem1.Name = "toolStripMenuItem1"; this.toolStripMenuItem1.Name = "toolStripMenuItem1";
this.toolStripMenuItem1.Size = new System.Drawing.Size(242, 6); this.toolStripMenuItem1.Size = new System.Drawing.Size(221, 6);
// //
// curvelinedefsitem // curvelinedefsitem
// //
this.curvelinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.CurveLines; this.curvelinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.CurveLines;
this.curvelinedefsitem.Name = "curvelinedefsitem"; this.curvelinedefsitem.Name = "curvelinedefsitem";
this.curvelinedefsitem.Size = new System.Drawing.Size(245, 22); this.curvelinedefsitem.Size = new System.Drawing.Size(224, 22);
this.curvelinedefsitem.Tag = "curvelinesmode"; this.curvelinedefsitem.Tag = "curvelinesmode";
this.curvelinedefsitem.Text = "&Curve Linedefs..."; this.curvelinedefsitem.Text = "&Curve Linedefs...";
this.curvelinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); this.curvelinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -227,12 +233,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
// toolStripMenuItem3 // toolStripMenuItem3
// //
this.toolStripMenuItem3.Name = "toolStripMenuItem3"; this.toolStripMenuItem3.Name = "toolStripMenuItem3";
this.toolStripMenuItem3.Size = new System.Drawing.Size(242, 6); this.toolStripMenuItem3.Size = new System.Drawing.Size(221, 6);
// //
// splitlinedefsitem // splitlinedefsitem
// //
this.splitlinedefsitem.Name = "splitlinedefsitem"; this.splitlinedefsitem.Name = "splitlinedefsitem";
this.splitlinedefsitem.Size = new System.Drawing.Size(245, 22); this.splitlinedefsitem.Size = new System.Drawing.Size(224, 22);
this.splitlinedefsitem.Tag = "splitlinedefs"; this.splitlinedefsitem.Tag = "splitlinedefs";
this.splitlinedefsitem.Text = "S&plit Linedefs"; this.splitlinedefsitem.Text = "S&plit Linedefs";
this.splitlinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); this.splitlinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -240,7 +246,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
// updatelightfogitem // updatelightfogitem
// //
this.updatelightfogitem.Name = "updatelightfogitem"; this.updatelightfogitem.Name = "updatelightfogitem";
this.updatelightfogitem.Size = new System.Drawing.Size(245, 22); this.updatelightfogitem.Size = new System.Drawing.Size(224, 22);
this.updatelightfogitem.Tag = "applylightfogflag"; this.updatelightfogitem.Tag = "applylightfogflag";
this.updatelightfogitem.Text = "&Update \'lightfog\' flag"; this.updatelightfogitem.Text = "&Update \'lightfog\' flag";
this.updatelightfogitem.Click += new System.EventHandler(this.InvokeTaggedAction); this.updatelightfogitem.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -253,7 +259,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
this.alignCeilingToFrontItem, this.alignCeilingToFrontItem,
this.alignCeilingToBackItem}); this.alignCeilingToBackItem});
this.aligntexturesitem.Name = "aligntexturesitem"; this.aligntexturesitem.Name = "aligntexturesitem";
this.aligntexturesitem.Size = new System.Drawing.Size(245, 22); this.aligntexturesitem.Size = new System.Drawing.Size(224, 22);
this.aligntexturesitem.Text = "&Align Textures"; this.aligntexturesitem.Text = "&Align Textures";
// //
// alignFloorToFrontItem // alignFloorToFrontItem
@ -291,13 +297,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
// toolStripSeparator5 // toolStripSeparator5
// //
this.toolStripSeparator5.Name = "toolStripSeparator5"; this.toolStripSeparator5.Name = "toolStripSeparator5";
this.toolStripSeparator5.Size = new System.Drawing.Size(242, 6); this.toolStripSeparator5.Size = new System.Drawing.Size(221, 6);
// //
// selectSimilarLinesItem // selectSimilarLinesItem
// //
this.selectSimilarLinesItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; this.selectSimilarLinesItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar;
this.selectSimilarLinesItem.Name = "selectSimilarLinesItem"; this.selectSimilarLinesItem.Name = "selectSimilarLinesItem";
this.selectSimilarLinesItem.Size = new System.Drawing.Size(245, 22); this.selectSimilarLinesItem.Size = new System.Drawing.Size(224, 22);
this.selectSimilarLinesItem.Tag = "selectsimilar"; this.selectSimilarLinesItem.Tag = "selectsimilar";
this.selectSimilarLinesItem.Text = "Select Similar..."; this.selectSimilarLinesItem.Text = "Select Similar...";
this.selectSimilarLinesItem.Click += new System.EventHandler(this.InvokeTaggedAction); this.selectSimilarLinesItem.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -306,7 +312,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
// //
this.sectorsmenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.sectorsmenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.placethingss, this.placethingss,
this.selectInSectorsItem2, this.syncthingeditsectorsitem,
this.toolStripSeparator1, this.toolStripSeparator1,
this.joinsectorsitem, this.joinsectorsitem,
this.mergesectorsitem, this.mergesectorsitem,
@ -325,30 +331,32 @@ namespace CodeImp.DoomBuilder.BuilderModes
// //
this.placethingss.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.PlaceThings; this.placethingss.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.PlaceThings;
this.placethingss.Name = "placethingss"; this.placethingss.Name = "placethingss";
this.placethingss.Size = new System.Drawing.Size(245, 22); this.placethingss.Size = new System.Drawing.Size(224, 22);
this.placethingss.Tag = "placethings"; this.placethingss.Tag = "placethings";
this.placethingss.Text = "&Place Things..."; this.placethingss.Text = "&Place Things...";
this.placethingss.Click += new System.EventHandler(this.InvokeTaggedAction); this.placethingss.Click += new System.EventHandler(this.InvokeTaggedAction);
// //
// selectInSectorsItem2 // syncthingeditsectorsitem
// //
this.selectInSectorsItem2.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.SelectThingsInSectors; this.syncthingeditsectorsitem.CheckOnClick = true;
this.selectInSectorsItem2.Name = "selectInSectorsItem2"; this.syncthingeditsectorsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.SelectThingsInSectors;
this.selectInSectorsItem2.Size = new System.Drawing.Size(245, 22); this.syncthingeditsectorsitem.Name = "syncthingeditsectorsitem";
this.selectInSectorsItem2.Tag = "thingsselectinsectors"; this.syncthingeditsectorsitem.Size = new System.Drawing.Size(224, 22);
this.selectInSectorsItem2.Text = "&Select Things in Selected Sectors"; this.syncthingeditsectorsitem.Tag = "syncedthingedit";
this.selectInSectorsItem2.Click += new System.EventHandler(this.InvokeTaggedAction); this.syncthingeditsectorsitem.Text = "&Synchronized Things Editing";
this.syncthingeditsectorsitem.ToolTipText = resources.GetString("syncthingeditsectorsitem.ToolTipText");
this.syncthingeditsectorsitem.Click += new System.EventHandler(this.InvokeTaggedAction);
// //
// toolStripSeparator1 // toolStripSeparator1
// //
this.toolStripSeparator1.Name = "toolStripSeparator1"; this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(242, 6); this.toolStripSeparator1.Size = new System.Drawing.Size(221, 6);
// //
// joinsectorsitem // joinsectorsitem
// //
this.joinsectorsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Join; this.joinsectorsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Join;
this.joinsectorsitem.Name = "joinsectorsitem"; this.joinsectorsitem.Name = "joinsectorsitem";
this.joinsectorsitem.Size = new System.Drawing.Size(245, 22); this.joinsectorsitem.Size = new System.Drawing.Size(224, 22);
this.joinsectorsitem.Tag = "joinsectors"; this.joinsectorsitem.Tag = "joinsectors";
this.joinsectorsitem.Text = "&Join Sectors"; this.joinsectorsitem.Text = "&Join Sectors";
this.joinsectorsitem.Click += new System.EventHandler(this.InvokeTaggedAction); this.joinsectorsitem.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -357,7 +365,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
// //
this.mergesectorsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Merge; this.mergesectorsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Merge;
this.mergesectorsitem.Name = "mergesectorsitem"; this.mergesectorsitem.Name = "mergesectorsitem";
this.mergesectorsitem.Size = new System.Drawing.Size(245, 22); this.mergesectorsitem.Size = new System.Drawing.Size(224, 22);
this.mergesectorsitem.Tag = "mergesectors"; this.mergesectorsitem.Tag = "mergesectors";
this.mergesectorsitem.Text = "&Merge Sectors"; this.mergesectorsitem.Text = "&Merge Sectors";
this.mergesectorsitem.Click += new System.EventHandler(this.InvokeTaggedAction); this.mergesectorsitem.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -365,13 +373,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
// toolStripMenuItem2 // toolStripMenuItem2
// //
this.toolStripMenuItem2.Name = "toolStripMenuItem2"; this.toolStripMenuItem2.Name = "toolStripMenuItem2";
this.toolStripMenuItem2.Size = new System.Drawing.Size(242, 6); this.toolStripMenuItem2.Size = new System.Drawing.Size(221, 6);
// //
// flipsectorlinedefsitem // flipsectorlinedefsitem
// //
this.flipsectorlinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip; this.flipsectorlinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip;
this.flipsectorlinedefsitem.Name = "flipsectorlinedefsitem"; this.flipsectorlinedefsitem.Name = "flipsectorlinedefsitem";
this.flipsectorlinedefsitem.Size = new System.Drawing.Size(245, 22); this.flipsectorlinedefsitem.Size = new System.Drawing.Size(224, 22);
this.flipsectorlinedefsitem.Tag = "fliplinedefs"; this.flipsectorlinedefsitem.Tag = "fliplinedefs";
this.flipsectorlinedefsitem.Text = "&Flip Linedefs"; this.flipsectorlinedefsitem.Text = "&Flip Linedefs";
this.flipsectorlinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); this.flipsectorlinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -379,13 +387,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
// toolStripSeparator8 // toolStripSeparator8
// //
this.toolStripSeparator8.Name = "toolStripSeparator8"; this.toolStripSeparator8.Name = "toolStripSeparator8";
this.toolStripSeparator8.Size = new System.Drawing.Size(242, 6); this.toolStripSeparator8.Size = new System.Drawing.Size(221, 6);
// //
// makedooritem // makedooritem
// //
this.makedooritem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Door; this.makedooritem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Door;
this.makedooritem.Name = "makedooritem"; this.makedooritem.Name = "makedooritem";
this.makedooritem.Size = new System.Drawing.Size(245, 22); this.makedooritem.Size = new System.Drawing.Size(224, 22);
this.makedooritem.Tag = "makedoor"; this.makedooritem.Tag = "makedoor";
this.makedooritem.Text = "Make &Door"; this.makedooritem.Text = "Make &Door";
this.makedooritem.Click += new System.EventHandler(this.InvokeTaggedAction); this.makedooritem.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -393,14 +401,14 @@ namespace CodeImp.DoomBuilder.BuilderModes
// toolStripSeparator4 // toolStripSeparator4
// //
this.toolStripSeparator4.Name = "toolStripSeparator4"; this.toolStripSeparator4.Name = "toolStripSeparator4";
this.toolStripSeparator4.Size = new System.Drawing.Size(242, 6); this.toolStripSeparator4.Size = new System.Drawing.Size(221, 6);
this.toolStripSeparator4.Visible = false; this.toolStripSeparator4.Visible = false;
// //
// selectSimilarSectors // selectSimilarSectors
// //
this.selectSimilarSectors.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; this.selectSimilarSectors.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar;
this.selectSimilarSectors.Name = "selectSimilarSectors"; this.selectSimilarSectors.Name = "selectSimilarSectors";
this.selectSimilarSectors.Size = new System.Drawing.Size(245, 22); this.selectSimilarSectors.Size = new System.Drawing.Size(224, 22);
this.selectSimilarSectors.Tag = "selectsimilar"; this.selectSimilarSectors.Tag = "selectsimilar";
this.selectSimilarSectors.Text = "Select Similar..."; this.selectSimilarSectors.Text = "Select Similar...";
this.selectSimilarSectors.Click += new System.EventHandler(this.InvokeTaggedAction); this.selectSimilarSectors.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -539,7 +547,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
this.gradientInterpolationMenu, this.gradientInterpolationMenu,
this.separatorsectors3, this.separatorsectors3,
this.buttonMarqueSelectTouching, this.buttonMarqueSelectTouching,
this.buttonDragThingsInSelectedSectors, this.syncthingteditbutton,
this.buttonAlignThingsToWall, this.buttonAlignThingsToWall,
this.buttonTextureOffsetLock}); this.buttonTextureOffsetLock});
this.manualstrip.Location = new System.Drawing.Point(0, 73); this.manualstrip.Location = new System.Drawing.Point(0, 73);
@ -734,18 +742,17 @@ namespace CodeImp.DoomBuilder.BuilderModes
""; "";
this.buttonMarqueSelectTouching.Click += new System.EventHandler(this.buttonMarqueSelectTouching_Click); this.buttonMarqueSelectTouching.Click += new System.EventHandler(this.buttonMarqueSelectTouching_Click);
// //
// buttonDragThingsInSelectedSectors // syncthingteditbutton
// //
this.buttonDragThingsInSelectedSectors.CheckOnClick = true; this.syncthingteditbutton.CheckOnClick = true;
this.buttonDragThingsInSelectedSectors.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this.syncthingteditbutton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.buttonDragThingsInSelectedSectors.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.MoveThingsInSectors; this.syncthingteditbutton.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.SelectThingsInSectors;
this.buttonDragThingsInSelectedSectors.ImageTransparentColor = System.Drawing.Color.Magenta; this.syncthingteditbutton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.buttonDragThingsInSelectedSectors.Name = "buttonDragThingsInSelectedSectors"; this.syncthingteditbutton.Name = "syncthingteditbutton";
this.buttonDragThingsInSelectedSectors.Size = new System.Drawing.Size(23, 22); this.syncthingteditbutton.Size = new System.Drawing.Size(23, 22);
this.buttonDragThingsInSelectedSectors.Text = "Move Things in Selected Sectors"; this.syncthingteditbutton.Tag = "syncedthingedit";
this.buttonDragThingsInSelectedSectors.ToolTipText = "When enabled, all things inside of selected sectors \r\nwill be dragged when draggi" + this.syncthingteditbutton.Text = "Synchronized Things Editing";
"ng sectors.\r\nOtherwise, selected things will be dragged."; this.syncthingteditbutton.Click += new System.EventHandler(this.InvokeTaggedAction);
this.buttonDragThingsInSelectedSectors.Click += new System.EventHandler(this.buttonDragThingsInSelectedSectors_Click);
// //
// buttonAlignThingsToWall // buttonAlignThingsToWall
// //
@ -918,8 +925,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
private System.Windows.Forms.ToolStripMenuItem placethingss; private System.Windows.Forms.ToolStripMenuItem placethingss;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripButton buttonselectioneffects; private System.Windows.Forms.ToolStripButton buttonselectioneffects;
private System.Windows.Forms.ToolStripMenuItem selectInSectorsItem3; private System.Windows.Forms.ToolStripMenuItem syncthingeditlinedefsitem;
private System.Windows.Forms.ToolStripMenuItem selectInSectorsItem2; private System.Windows.Forms.ToolStripMenuItem syncthingeditsectorsitem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
private System.Windows.Forms.ToolStripButton buttonMakeDoor; private System.Windows.Forms.ToolStripButton buttonMakeDoor;
private System.Windows.Forms.ToolStripMenuItem makedooritem; private System.Windows.Forms.ToolStripMenuItem makedooritem;
@ -938,7 +945,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
private System.Windows.Forms.ToolStripMenuItem selectSimilarVertsItem; private System.Windows.Forms.ToolStripMenuItem selectSimilarVertsItem;
private System.Windows.Forms.ToolStripMenuItem flipsectorlinedefsitem; private System.Windows.Forms.ToolStripMenuItem flipsectorlinedefsitem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; private System.Windows.Forms.ToolStripSeparator toolStripSeparator8;
private System.Windows.Forms.ToolStripButton buttonDragThingsInSelectedSectors; private System.Windows.Forms.ToolStripButton syncthingteditbutton;
private System.Windows.Forms.ToolStripComboBox gradientInterpolationMenu; private System.Windows.Forms.ToolStripComboBox gradientInterpolationMenu;
private System.Windows.Forms.ToolStripSeparator separatorsectors2; private System.Windows.Forms.ToolStripSeparator separatorsectors2;
private System.Windows.Forms.ToolStripSeparator separatorsectors3; private System.Windows.Forms.ToolStripSeparator separatorsectors3;

View file

@ -85,7 +85,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
public ToolStripButton MarqueSelectTouching { get { return buttonMarqueSelectTouching; } } //mxd public ToolStripButton MarqueSelectTouching { get { return buttonMarqueSelectTouching; } } //mxd
public ToolStripButton AlignThingsToWall { get { return buttonAlignThingsToWall; } } //mxd public ToolStripButton AlignThingsToWall { get { return buttonAlignThingsToWall; } } //mxd
public ToolStripButton TextureOffsetLock { get { return buttonTextureOffsetLock; } } //mxd public ToolStripButton TextureOffsetLock { get { return buttonTextureOffsetLock; } } //mxd
public ToolStripButton DragThingsInSelectedSectors { get { return buttonDragThingsInSelectedSectors; } } //mxd public ToolStripButton SyncronizeThingEditButton { get { return syncthingteditbutton; } } //mxd
public ToolStripMenuItem SyncronizeThingEditSectorsItem { get { return syncthingeditsectorsitem; } } //mxd
public ToolStripMenuItem SyncronizeThingEditLinedefsItem { get { return syncthingeditlinedefsitem; } } //mxd
public ToolStripButton MakeDoor { get { return buttonMakeDoor; } } //mxd public ToolStripButton MakeDoor { get { return buttonMakeDoor; } } //mxd
#endregion #endregion
@ -268,15 +270,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Interface.FocusDisplay(); General.Interface.FocusDisplay();
} }
//mxd
private void buttonDragThingsInSelectedSectors_Click(object sender, EventArgs e)
{
BuilderPlug.Me.DragThingsInSectorsMode = buttonDragThingsInSelectedSectors.Checked;
General.Interface.DisplayStatus(StatusType.Info, (buttonDragThingsInSelectedSectors.Checked ?
"Drag things in selected sectors" :
"Don't drag things in selected sectors"));
}
#endregion #endregion
} }
} }

View file

@ -123,6 +123,12 @@
<metadata name="menustrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="menustrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value> <value>17, 17</value>
</metadata> </metadata>
<data name="syncthingeditsectorsitem.ToolTipText" xml:space="preserve">
<value>When enabled, things dragging will be synchronized to sector dragging.
Regular, Paint and Rectangular selection will also select things
(holding Alt while selecting inverts this behaviour).
Deleting sectors will also delete selected things.</value>
</data>
<metadata name="globalstrip.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="globalstrip.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value> <value>True</value>
</metadata> </metadata>

View file

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:2.0.50727.5485 // Runtime Version:2.0.50727.5466
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
@ -263,13 +263,6 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
} }
} }
internal static System.Drawing.Bitmap MoveThingsInSectors {
get {
object obj = ResourceManager.GetObject("MoveThingsInSectors", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap PasteProperties { internal static System.Drawing.Bitmap PasteProperties {
get { get {
object obj = ResourceManager.GetObject("PasteProperties", resourceCulture); object obj = ResourceManager.GetObject("PasteProperties", resourceCulture);

View file

@ -190,9 +190,6 @@
<data name="SelectTouching" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="SelectTouching" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\SelectTouching.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\SelectTouching.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="MoveThingsInSectors" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\MoveThingsInSectors.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Merge" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="Merge" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Merge.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\Merge.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>

View file

@ -428,15 +428,15 @@ thinglookatcursor
} }
//mxd //mxd
thingsselectinsectors syncedthingedit
{ {
title = "Select Things in Selected Sectors"; title = "Synchronized Things Editing";
category = "things"; category = "sectors";
description = "Selects Things in Selected Sectors."; description = "When enabled, things selection/dragging will be synchronized to sector selection/dragging in Sectors mode. Selected things will be dragged when dragging linedefs in Linedefs mode. Deleting sectors will delete selected things in Sectors mode.";
allowkeys = true; allowkeys = true;
allowmouse = true; allowmouse = true;
allowscroll = false; allowscroll = false;
default = 65620; //Shift-T default = 65620; //Shift-T
} }
makesectormode makesectormode

View file

@ -44,6 +44,7 @@ group multiselection
"Hold <b>Shift</b> to toggle additive selection" "Hold <b>Shift</b> to toggle additive selection"
"Hold <b>Ctrl</b> to enable subtractive selection" "Hold <b>Ctrl</b> to enable subtractive selection"
"Hold <b>Ctrl-Shift</b> to intersect the new selection with already existing one" "Hold <b>Ctrl-Shift</b> to intersect the new selection with already existing one"
"Hold <b>Alt</b> to enable things (de)selection"
class SectorsMode class SectorsMode
@ -68,7 +69,7 @@ group multiselection
"Hold <b>Shift</b> to toggle additive selection" "Hold <b>Shift</b> to toggle additive selection"
"Hold <b>Ctrl</b> to enable subtractive selection" "Hold <b>Ctrl</b> to enable subtractive selection"
"Hold <b>Ctrl-Shift</b> to intersect the new selection with already existing one" "Hold <b>Ctrl-Shift</b> to intersect the new selection with already existing one"
"Hold <b>Alt</b> to select things inside of selected sectors" "Hold <b>Alt</b> to enable things (de)selection"
class ThingsMode class ThingsMode
@ -78,7 +79,6 @@ group general
"Hold <k>builder_classicedit</k> to drag selected or highlighted things" "Hold <k>builder_classicedit</k> to drag selected or highlighted things"
"Hold <b>Shift-</b><k>builder_classicedit</k> to clone-drag selected or highlighted things" "Hold <b>Shift-</b><k>builder_classicedit</k> to clone-drag selected or highlighted things"
"Hold <k>builder_classicselect</k> and drag to use rectangular selection" "Hold <k>builder_classicselect</k> and drag to use rectangular selection"
"Press <k>buildermodes_thingsselectinsectors</k> to select things in selected sectors"
"Press <k>builder_clearselection</k> to clear selection" "Press <k>builder_clearselection</k> to clear selection"
"Press <k>builder_deleteitem</k> to delete selected thing(s)" "Press <k>builder_deleteitem</k> to delete selected thing(s)"
"Press <k>builder_classicedit</k> to edit properties of current selection" "Press <k>builder_classicedit</k> to edit properties of current selection"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 561 B

View file

@ -753,8 +753,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Copy texture // Copy texture
public virtual void OnCopyTexture() public virtual void OnCopyTexture()
{ {
if(Texture == null) return; //mxd //mxd. When UseLongTextureNames is disabled, use texture name as stored in Sidedef, otherwise use full name.
string texturename = ((!General.Map.Options.UseLongTextureNames && Texture.UsedInMap) ? Texture.ShortName : GetTextureName()); //mxd string texturename = ((General.Map.Options.UseLongTextureNames && Texture != null && Texture.UsedInMap) ? Texture.FullName : GetTextureName());
BuilderPlug.Me.CopiedFlat = texturename; BuilderPlug.Me.CopiedFlat = texturename;
if(General.Map.Config.MixTexturesFlats) BuilderPlug.Me.CopiedTexture = texturename; if(General.Map.Config.MixTexturesFlats) BuilderPlug.Me.CopiedTexture = texturename;
mode.SetActionResult("Copied flat '" + texturename + "'."); mode.SetActionResult("Copied flat '" + texturename + "'.");

View file

@ -1196,8 +1196,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Copy texture // Copy texture
public virtual void OnCopyTexture() public virtual void OnCopyTexture()
{ {
if(Texture == null) return; //mxd //mxd. When UseLongTextureNames is disabled, use texture name as stored in Sidedef, otherwise use full name.
string texturename = ((!General.Map.Options.UseLongTextureNames && Texture.UsedInMap) ? Texture.ShortName : GetTextureName()); //mxd string texturename = ((General.Map.Options.UseLongTextureNames && Texture != null && Texture.UsedInMap) ? Texture.FullName : GetTextureName());
BuilderPlug.Me.CopiedTexture = texturename; BuilderPlug.Me.CopiedTexture = texturename;
if(General.Map.Config.MixTexturesFlats) BuilderPlug.Me.CopiedFlat = texturename; if(General.Map.Config.MixTexturesFlats) BuilderPlug.Me.CopiedFlat = texturename;
mode.SetActionResult("Copied texture '" + texturename + "'."); mode.SetActionResult("Copied texture '" + texturename + "'.");

View file

@ -643,6 +643,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
//mxd //mxd
public override void UpdateSelectionInfo() public override void UpdateSelectionInfo()
{ {
// Collect info
int numWalls = 0; int numWalls = 0;
int numFloors = 0; int numFloors = 0;
int numCeilings = 0; int numCeilings = 0;
@ -668,17 +669,17 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(numThings > 0) results.Add(numThings + (numThings > 1 ? " things" : " thing")); if(numThings > 0) results.Add(numThings + (numThings > 1 ? " things" : " thing"));
if(numVerts > 0) results.Add(numVerts + (numVerts > 1 ? " vertices" : " vertex")); if(numVerts > 0) results.Add(numVerts + (numVerts > 1 ? " vertices" : " vertex"));
if(results.Count == 0) // Display results
string result = string.Empty;
if(results.Count > 0)
{ {
General.Interface.DisplayStatus(StatusType.Selection, string.Empty); result = string.Join(", ", results.ToArray());
} int pos = result.LastIndexOf(",", StringComparison.Ordinal);
else
{
string result = string.Join(", ", results.ToArray());
int pos = result.LastIndexOf(",");
if(pos != -1) result = result.Remove(pos, 1).Insert(pos, " and"); if(pos != -1) result = result.Remove(pos, 1).Insert(pos, " and");
General.Interface.DisplayStatus(StatusType.Selection, result + " selected."); result += " selected.";
} }
General.Interface.DisplayStatus(StatusType.Selection, result);
} }
//mxd //mxd