Added, all drawing modes: added "Continuous drawing" option (available in the top mode menu / Draw Grid panel for the Draw Grid mode). When enabled, drawing mode will not be switched to previously active mode after finishing drawing a shape.

Fixed, general interlace: in some cases "Show Editable Vertices in Visual Mode" top toolbar button showed up when using Doom/Hexen map formats.
Fixed(?), Classic modes: probably fixed an rare issue when map element dragging was not starting when supposed to.
This commit is contained in:
MaxED 2016-02-17 22:23:18 +00:00 committed by spherallic
parent 13644cdca9
commit 11ee6e7fbf
22 changed files with 852 additions and 355 deletions

View file

@ -565,6 +565,10 @@ namespace CodeImp.DoomBuilder.Editing
// Save mouse down position
mousedownpos = mousepos;
mousedownmappos = mousemappos;
//mxd. Looks like in some cases (very detailed maps / slow CPUs) OnMouseUp is not fired
// This is my attempt at fixing this...
if(e.Button == mousedragging) mousedragging = MouseButtons.None;
// Let the base class know
base.OnMouseDown(e);

View file

@ -2048,7 +2048,7 @@ namespace CodeImp.DoomBuilder.Windows
buttontogglefog.Visible = General.Settings.GZToolbarGZDoom && maploaded;
buttontogglesky.Visible = maploaded && (General.Settings.GZToolbarGZDoom || General.Map.SRB2);
buttontoggleeventlines.Visible = General.Settings.GZToolbarGZDoom && maploaded;
buttontogglevisualvertices.Visible = General.Settings.GZToolbarGZDoom && maploaded;
buttontogglevisualvertices.Visible = General.Settings.GZToolbarGZDoom && maploaded && General.Map.UDMF;
separatorgzmodes.Visible = General.Settings.GZToolbarGZDoom && maploaded;
//mxd. Show/hide additional panels

View file

@ -361,6 +361,12 @@
<Compile Include="Interface\DrawGridOptionsPanel.Designer.cs">
<DependentUpon>DrawGridOptionsPanel.cs</DependentUpon>
</Compile>
<Compile Include="Interface\DrawLineOptionsPanel.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Interface\DrawLineOptionsPanel.Designer.cs">
<DependentUpon>DrawLineOptionsPanel.cs</DependentUpon>
</Compile>
<Compile Include="Interface\DrawRectangleOptionsPanel.cs">
<SubType>UserControl</SubType>
</Compile>
@ -563,6 +569,9 @@
<EmbeddedResource Include="Resources\DrawGeometryMode.png" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Interface\DrawLineOptionsPanel.resx">
<DependentUpon>DrawLineOptionsPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Interface\FilterSelectedThingsForm.resx">
<DependentUpon>FilterSelectedThingsForm.cs</DependentUpon>
</EmbeddedResource>
@ -635,6 +644,9 @@
<ItemGroup>
<EmbeddedResource Include="Resources\InsertThingsRadiallyMode.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Repeat.png" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

View file

@ -31,12 +31,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
private readonly HintLabel hintlabel;
private Curve curve;
private static int segmentLength = 32;
private static int segmentlength = 32;
private const int MIN_SEGMENT_LENGTH = 1;
private const int MAX_SEGMENT_LENGTH = 4096; //just some arbitrary number
//interface
private readonly DrawCurveOptionsPanel panel;
// Interface
private DrawCurveOptionsPanel panel;
#endregion
@ -46,10 +46,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
{
hintlabel = new HintLabel(General.Colors.InfoLine);
labeluseoffset = false;
//Options docker
panel = new DrawCurveOptionsPanel(MIN_SEGMENT_LENGTH, MAX_SEGMENT_LENGTH);
panel.OnValueChanged += OptionsPanelOnValueChanged;
}
public override void Dispose()
@ -102,7 +98,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
List<Vector2D> verts = new List<Vector2D>();
for(int i = 0; i < points.Count; i++) verts.Add(points[i].pos);
if(curp.pos != verts[verts.Count-1]) verts.Add(curp.pos);
curve = CurveTools.CurveThroughPoints(verts, 0.5f, 0.75f, segmentLength);
curve = CurveTools.CurveThroughPoints(verts, 0.5f, 0.75f, segmentlength);
// Render lines
for(int i = 1; i < curve.Shape.Count; i++)
@ -151,7 +147,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
Vector2D start = new Vector2D(mousemappos.x + (32 / renderer.Scale), mousemappos.y - (16 / renderer.Scale));
Vector2D end = new Vector2D(mousemappos.x + (96 / renderer.Scale), mousemappos.y);
hintlabel.Move(start, end);
hintlabel.Text = "SEG LEN: " + segmentLength;
hintlabel.Text = "SEG LEN: " + segmentlength;
renderer.RenderText(hintlabel.TextLabel);
// Done
@ -171,7 +167,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
base.OnEngage();
//setup settings panel
panel.SegmentLength = segmentLength;
panel.SegmentLength = segmentlength;
panel.Register();
}
@ -245,55 +241,62 @@ namespace CodeImp.DoomBuilder.BuilderModes
}
// Make the drawing
if(!Tools.DrawLines(verts, true, BuilderPlug.Me.AutoAlignTextureOffsetsOnCreate)) //mxd
if(Tools.DrawLines(verts, true, BuilderPlug.Me.AutoAlignTextureOffsetsOnCreate)) //mxd
{
// Snap to map format accuracy
General.Map.Map.SnapAllToAccuracy();
// Clear selection
General.Map.Map.ClearAllSelected();
// Update cached values
General.Map.Map.Update();
// Edit new sectors?
List<Sector> newsectors = General.Map.Map.GetMarkedSectors(true);
if(BuilderPlug.Me.EditNewSector && (newsectors.Count > 0))
General.Interface.ShowEditSectors(newsectors);
// Update the used textures
General.Map.Data.UpdateUsedTextures();
//mxd
General.Map.Renderer2D.UpdateExtraFloorFlag();
// Map is changed
General.Map.IsChanged = true;
}
else
{
// Drawing failed
// NOTE: I have to call this twice, because the first time only cancels this volatile mode
General.Map.UndoRedo.WithdrawUndo();
General.Map.UndoRedo.WithdrawUndo();
return;
}
// Snap to map format accuracy
General.Map.Map.SnapAllToAccuracy();
// Clear selection
General.Map.Map.ClearAllSelected();
// Update cached values
General.Map.Map.Update();
// Edit new sectors?
List<Sector> newsectors = General.Map.Map.GetMarkedSectors(true);
if(BuilderPlug.Me.EditNewSector && (newsectors.Count > 0))
General.Interface.ShowEditSectors(newsectors);
// Update the used textures
General.Map.Data.UpdateUsedTextures();
//mxd
General.Map.Renderer2D.UpdateExtraFloorFlag();
// Map is changed
General.Map.IsChanged = true;
}
// Done
Cursor.Current = Cursors.Default;
// Return to original mode
General.Editing.ChangeMode(General.Editing.PreviousStableMode.Name);
}
if(continuousdrawing)
{
// Reset settings
points.Clear();
labels.Clear();
public override void OnDisengage()
{
base.OnDisengage();
panel.Unregister();
// Redraw display
General.Interface.RedrawDisplay();
}
else
{
// Return to original mode
General.Editing.ChangeMode(General.Editing.PreviousStableMode.Name);
}
}
private void OptionsPanelOnValueChanged(object sender, EventArgs eventArgs)
{
segmentLength = panel.SegmentLength;
segmentlength = panel.SegmentLength;
Update();
}
@ -304,18 +307,42 @@ namespace CodeImp.DoomBuilder.BuilderModes
#endregion
#region ================== mxd. Settings panel
protected override void SetupInterface()
{
// Add options docker
panel = new DrawCurveOptionsPanel(MIN_SEGMENT_LENGTH, MAX_SEGMENT_LENGTH);
panel.OnValueChanged += OptionsPanelOnValueChanged;
panel.OnContinuousDrawingChanged += OnContinuousDrawingChanged;
panel.ContinuousDrawing = General.Settings.ReadPluginSetting("drawcurvemode_continuousdrawing", false);
}
protected override void AddInterface()
{
panel.Register();
}
protected override void RemoveInterface()
{
General.Settings.WritePluginSetting("drawcurvemode_continuousdrawing", panel.ContinuousDrawing);
panel.Unregister();
}
#endregion
#region ================== Actions
[BeginAction("increasesubdivlevel")]
protected virtual void IncreaseSubdivLevel()
{
if(segmentLength < MAX_SEGMENT_LENGTH)
if(segmentlength < MAX_SEGMENT_LENGTH)
{
int increment = Math.Max(MIN_SEGMENT_LENGTH, segmentLength / 32 * 16);
segmentLength += increment;
int increment = Math.Max(MIN_SEGMENT_LENGTH, segmentlength / 32 * 16);
segmentlength += increment;
if(segmentLength > MAX_SEGMENT_LENGTH) segmentLength = MAX_SEGMENT_LENGTH;
panel.SegmentLength = segmentLength;
if(segmentlength > MAX_SEGMENT_LENGTH) segmentlength = MAX_SEGMENT_LENGTH;
panel.SegmentLength = segmentlength;
Update();
}
}
@ -323,13 +350,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
[BeginAction("decreasesubdivlevel")]
protected virtual void DecreaseSubdivLevel()
{
if(segmentLength > MIN_SEGMENT_LENGTH)
if(segmentlength > MIN_SEGMENT_LENGTH)
{
int increment = Math.Max(MIN_SEGMENT_LENGTH, segmentLength / 32 * 16);
segmentLength -= increment;
int increment = Math.Max(MIN_SEGMENT_LENGTH, segmentlength / 32 * 16);
segmentlength -= increment;
if(segmentLength < MIN_SEGMENT_LENGTH) segmentLength = MIN_SEGMENT_LENGTH;
panel.SegmentLength = segmentLength;
if(segmentlength < MIN_SEGMENT_LENGTH) segmentlength = MIN_SEGMENT_LENGTH;
panel.SegmentLength = segmentlength;
Update();
}
}

View file

@ -21,7 +21,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
{
#region ================== Variables
//interface
// Interface
private DrawEllipseOptionsPanel panel;
#endregion
@ -30,8 +30,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
public DrawEllipseMode()
{
undoName = "Ellipse draw";
shapeName = "ellipse";
undoname = "Ellipse draw";
shapename = "ellipse";
usefourcardinaldirections = true;
}
@ -41,27 +41,30 @@ namespace CodeImp.DoomBuilder.BuilderModes
override protected void SetupInterface()
{
maxSubdivisions = 512;
minSubdivisions = 6;
maxsubdivisions = 512;
minsubdivisions = 6;
//Add options docker
panel = new DrawEllipseOptionsPanel();
panel.MaxSubdivisions = maxSubdivisions;
panel.MinSubdivisions = minSubdivisions;
panel.MaxSubdivisions = maxsubdivisions;
panel.MinSubdivisions = minsubdivisions;
panel.MinSpikiness = (int)General.Map.FormatInterface.MinCoordinate;
panel.MaxSpikiness = (int)General.Map.FormatInterface.MaxCoordinate;
panel.OnValueChanged += OptionsPanelOnValueChanged;
panel.OnContinuousDrawingChanged += OnContinuousDrawingChanged;
panel.ContinuousDrawing = General.Settings.ReadPluginSetting("drawellipsemode_continuousdrawing", false);
}
override protected void AddInterface()
{
panel.Register();
bevelWidth = panel.Spikiness;
bevelwidth = panel.Spikiness;
subdivisions = panel.Subdivisions;
}
override protected void RemoveInterface()
{
General.Settings.WritePluginSetting("drawellipsemode_continuousdrawing", panel.ContinuousDrawing);
panel.Unregister();
}
@ -78,13 +81,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(pEnd.x == pStart.x || pEnd.y == pStart.y) return new[] { pStart, pEnd };
//got shape
if(bevelWidth < 0)
if(bevelwidth < 0)
{
currentBevelWidth = -Math.Min(Math.Abs(bevelWidth), Math.Min(width, height) / 2) + 1;
currentbevelwidth = -Math.Min(Math.Abs(bevelwidth), Math.Min(width, height) / 2) + 1;
}
else
{
currentBevelWidth = bevelWidth;
currentbevelwidth = bevelwidth;
}
Vector2D[] shape = new Vector2D[subdivisions + 1];
@ -102,8 +105,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
int px, py;
if(doBevel)
{
px = (int)(center.x - (float)Math.Sin(curAngle) * (hw + currentBevelWidth));
py = (int)(center.y - (float)Math.Cos(curAngle) * (hh + currentBevelWidth));
px = (int)(center.x - (float)Math.Sin(curAngle) * (hw + currentbevelwidth));
py = (int)(center.y - (float)Math.Cos(curAngle) * (hh + currentbevelwidth));
}
else
{
@ -121,7 +124,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
protected override string GetHintText()
{
return "BVL: " + bevelWidth + "; VERTS: " + subdivisions;
return "BVL: " + bevelwidth + "; VERTS: " + subdivisions;
}
#endregion
@ -130,8 +133,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
private void OptionsPanelOnValueChanged(object sender, EventArgs eventArgs)
{
bevelWidth = panel.Spikiness;
subdivisions = Math.Min(maxSubdivisions, panel.Subdivisions);
bevelwidth = panel.Spikiness;
subdivisions = Math.Min(maxsubdivisions, panel.Subdivisions);
Update();
}
@ -146,7 +149,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
override protected void IncreaseSubdivLevel()
{
if(maxSubdivisions - subdivisions > 1)
if(maxsubdivisions - subdivisions > 1)
{
subdivisions += 2;
panel.Subdivisions = subdivisions;
@ -156,7 +159,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
override protected void DecreaseSubdivLevel()
{
if(subdivisions - minSubdivisions > 1)
if(subdivisions - minsubdivisions > 1)
{
subdivisions -= 2;
panel.Subdivisions = subdivisions;
@ -166,20 +169,20 @@ namespace CodeImp.DoomBuilder.BuilderModes
protected override void IncreaseBevel()
{
if(points.Count < 2 || currentBevelWidth == bevelWidth || bevelWidth < 0)
if(points.Count < 2 || currentbevelwidth == bevelwidth || bevelwidth < 0)
{
bevelWidth = Math.Min(bevelWidth + General.Map.Grid.GridSize, panel.MaxSpikiness);
panel.Spikiness = bevelWidth;
bevelwidth = Math.Min(bevelwidth + General.Map.Grid.GridSize, panel.MaxSpikiness);
panel.Spikiness = bevelwidth;
Update();
}
}
protected override void DecreaseBevel()
{
if(bevelWidth > 0 || currentBevelWidth <= bevelWidth + 1)
if(bevelwidth > 0 || currentbevelwidth <= bevelwidth + 1)
{
bevelWidth = Math.Max(bevelWidth - General.Map.Grid.GridSize, panel.MinSpikiness);
panel.Spikiness = bevelWidth;
bevelwidth = Math.Max(bevelwidth - General.Map.Grid.GridSize, panel.MinSpikiness);
panel.Spikiness = bevelwidth;
Update();
}
}

View file

@ -65,10 +65,14 @@ namespace CodeImp.DoomBuilder.BuilderModes
protected bool snaptonearest; // CTRL to enable
protected bool snaptocardinaldirection; //mxd. ALT-SHIFT to enable
protected static bool usefourcardinaldirections;
protected bool continuousdrawing; //mxd. Restart after finishing drawing?
//mxd. Labels display style
protected bool labelshowangle = true;
protected bool labeluseoffset = true;
//mxd. Interface
private DrawLineOptionsPanel panel;
#endregion
@ -88,6 +92,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// No selection in this mode
General.Map.Map.ClearAllSelected();
General.Map.Map.ClearAllMarks(false);
//mxd
SetupInterface();
// We have no destructor
GC.SuppressFinalize(this);
@ -446,6 +453,29 @@ namespace CodeImp.DoomBuilder.BuilderModes
#endregion
#region ================== mxd. Settings panel
protected virtual void SetupInterface()
{
//Add options docker
panel = new DrawLineOptionsPanel();
panel.OnContinuousDrawingChanged += OnContinuousDrawingChanged;
panel.ContinuousDrawing = General.Settings.ReadPluginSetting("drawlinesmode_continuousdrawing", false);
}
protected virtual void AddInterface()
{
panel.Register();
}
protected virtual void RemoveInterface()
{
General.Settings.WritePluginSetting("drawlinesmode_continuousdrawing", panel.ContinuousDrawing);
panel.Unregister();
}
#endregion
#region ================== Events
public override void OnHelp()
@ -458,6 +488,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
{
base.OnEngage();
EnableAutoPanning();
AddInterface(); //mxd
renderer.SetPresentation(Presentation.Standard);
// Set cursor
@ -467,6 +498,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Disengaging
public override void OnDisengage()
{
RemoveInterface(); //mxd
base.OnDisengage();
DisableAutoPanning();
}
@ -474,6 +506,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Cancelled
public override void OnCancel()
{
//mxd. Cannot leave this way when continuous drawing is enabled
if(continuousdrawing) return;
// Cancel base class
base.OnCancel();
@ -505,44 +540,57 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Interface.DisplayStatus(StatusType.Action, "Created " + a + word + " drawing.");
// Make the drawing
if(!Tools.DrawLines(points, true, BuilderPlug.Me.AutoAlignTextureOffsetsOnCreate)) //mxd
if(Tools.DrawLines(points, true, BuilderPlug.Me.AutoAlignTextureOffsetsOnCreate)) //mxd
{
// Snap to map format accuracy
General.Map.Map.SnapAllToAccuracy();
// Clear selection
General.Map.Map.ClearAllSelected();
// Update cached values
General.Map.Map.Update();
// Edit new sectors?
List<Sector> newsectors = General.Map.Map.GetMarkedSectors(true);
if(BuilderPlug.Me.EditNewSector && (newsectors.Count > 0))
General.Interface.ShowEditSectors(newsectors);
// Update the used textures
General.Map.Data.UpdateUsedTextures();
//mxd
General.Map.Renderer2D.UpdateExtraFloorFlag();
// Map is changed
General.Map.IsChanged = true;
}
else
{
// Drawing failed
// NOTE: I have to call this twice, because the first time only cancels this volatile mode
General.Map.UndoRedo.WithdrawUndo();
General.Map.UndoRedo.WithdrawUndo();
return;
}
// Snap to map format accuracy
General.Map.Map.SnapAllToAccuracy();
// Clear selection
General.Map.Map.ClearAllSelected();
// Update cached values
General.Map.Map.Update();
// Edit new sectors?
List<Sector> newsectors = General.Map.Map.GetMarkedSectors(true);
if(BuilderPlug.Me.EditNewSector && (newsectors.Count > 0))
General.Interface.ShowEditSectors(newsectors);
// Update the used textures
General.Map.Data.UpdateUsedTextures();
//mxd
General.Map.Renderer2D.UpdateExtraFloorFlag();
// Map is changed
General.Map.IsChanged = true;
}
// Done
Cursor.Current = Cursors.Default;
// Return to original mode
General.Editing.ChangeMode(General.Editing.PreviousStableMode.Name);
if(continuousdrawing)
{
//mxd. Reset settings
points.Clear();
labels.Clear();
//mxd. Redraw display
General.Interface.RedrawDisplay();
}
else
{
// Return to original mode
General.Editing.ChangeMode(General.Editing.PreviousStableMode.Name);
}
}
// This redraws the display
@ -595,6 +643,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
(snaptonearest != (General.Interface.CtrlState ^ General.Interface.AutoMerge)) ||
(snaptocardinaldirection != (General.Interface.AltState && General.Interface.ShiftState))) Update();
}
//mxd
protected void OnContinuousDrawingChanged(object value, EventArgs e)
{
continuousdrawing = (bool)value;
}
#endregion

View file

@ -65,40 +65,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
#region ================== Events
public override void OnEngage()
{
base.OnEngage();
// Create and setup settings panel
panel = new DrawGridOptionsPanel();
panel.MaxHorizontalSlices = (int)General.Map.FormatInterface.MaxCoordinate;
panel.MaxVerticalSlices = (int) General.Map.FormatInterface.MaxCoordinate;
panel.Triangulate = triangulate;
panel.LockToGrid = gridlock;
panel.HorizontalSlices = horizontalSlices - 1;
panel.VerticalSlices = verticalSlices - 1;
panel.HorizontalInterpolationMode = horizontalinterpolation;
panel.VerticalInterpolationMode = verticalinterpolation;
panel.OnValueChanged += OptionsPanelOnValueChanged;
panel.OnGridLockChanged += OptionsPanelOnOnGridLockChanged;
// Add docker
docker = new Docker("drawgrid", "Draw Grid", panel);
General.Interface.AddDocker(docker);
General.Interface.SelectDocker(docker);
}
public override void OnDisengage()
{
base.OnDisengage();
// Remove docker
General.Interface.RemoveDocker(docker);
panel.Dispose();
panel = null;
}
override public void OnAccept()
{
Cursor.Current = Cursors.AppStarting;
@ -120,46 +86,59 @@ namespace CodeImp.DoomBuilder.BuilderModes
List<Sector> newsectors = new List<Sector>();
foreach(DrawnVertex[] shape in gridpoints)
{
if(!Tools.DrawLines(shape, true, BuilderPlug.Me.AutoAlignTextureOffsetsOnCreate))
if(Tools.DrawLines(shape, true, BuilderPlug.Me.AutoAlignTextureOffsetsOnCreate))
{
// Update cached values after each step...
General.Map.Map.Update();
newsectors.AddRange(General.Map.Map.GetMarkedSectors(true));
// Snap to map format accuracy
General.Map.Map.SnapAllToAccuracy();
// Clear selection
General.Map.Map.ClearAllSelected();
// Edit new sectors?
if(BuilderPlug.Me.EditNewSector && (newsectors.Count > 0))
General.Interface.ShowEditSectors(newsectors);
// Update the used textures
General.Map.Data.UpdateUsedTextures();
//mxd
General.Map.Renderer2D.UpdateExtraFloorFlag();
// Map is changed
General.Map.IsChanged = true;
}
else
{
// Drawing failed
// NOTE: I have to call this twice, because the first time only cancels this volatile mode
General.Map.UndoRedo.WithdrawUndo();
General.Map.UndoRedo.WithdrawUndo();
return;
}
// Update cached values after each step...
General.Map.Map.Update();
newsectors.AddRange(General.Map.Map.GetMarkedSectors(true));
}
// Snap to map format accuracy
General.Map.Map.SnapAllToAccuracy();
// Clear selection
General.Map.Map.ClearAllSelected();
// Edit new sectors?
if(BuilderPlug.Me.EditNewSector && (newsectors.Count > 0))
General.Interface.ShowEditSectors(newsectors);
// Update the used textures
General.Map.Data.UpdateUsedTextures();
//mxd
General.Map.Renderer2D.UpdateExtraFloorFlag();
// Map is changed
General.Map.IsChanged = true;
}
// Done
Cursor.Current = Cursors.Default;
// Return to original mode
General.Editing.ChangeMode(General.Editing.PreviousStableMode.Name);
if(continuousdrawing)
{
// Reset settings
points.Clear();
labels.Clear();
// Redraw display
General.Interface.RedrawDisplay();
}
else
{
// Return to original mode
General.Editing.ChangeMode(General.Editing.PreviousStableMode.Name);
}
}
private void OptionsPanelOnValueChanged(object sender, EventArgs eventArgs)
@ -473,6 +452,48 @@ namespace CodeImp.DoomBuilder.BuilderModes
#endregion
#region ================== Settings panel
protected override void SetupInterface()
{
// Create and setup settings panel
panel = new DrawGridOptionsPanel();
panel.MaxHorizontalSlices = (int)General.Map.FormatInterface.MaxCoordinate;
panel.MaxVerticalSlices = (int)General.Map.FormatInterface.MaxCoordinate;
panel.Triangulate = triangulate;
panel.LockToGrid = gridlock;
panel.HorizontalSlices = horizontalSlices - 1;
panel.VerticalSlices = verticalSlices - 1;
panel.HorizontalInterpolationMode = horizontalinterpolation;
panel.VerticalInterpolationMode = verticalinterpolation;
panel.OnValueChanged += OptionsPanelOnValueChanged;
panel.OnGridLockChanged += OptionsPanelOnOnGridLockChanged;
panel.OnContinuousDrawingChanged += OnContinuousDrawingChanged;
panel.ContinuousDrawing = General.Settings.ReadPluginSetting("drawgridmode_continuousdrawing", false);
}
protected override void AddInterface()
{
// Add docker
docker = new Docker("drawgrid", "Draw Grid", panel);
General.Interface.AddDocker(docker);
General.Interface.SelectDocker(docker);
}
protected override void RemoveInterface()
{
General.Settings.WritePluginSetting("drawgridmode_continuousdrawing", panel.ContinuousDrawing);
// Remove docker
General.Interface.RemoveDocker(docker);
panel.Dispose();
panel = null;
}
#endregion
#region ================== Actions
[BeginAction("increasebevel")]

View file

@ -30,22 +30,22 @@ namespace CodeImp.DoomBuilder.BuilderModes
#region ================== Variables
protected HintLabel hintlabel;
protected int bevelWidth;
protected int currentBevelWidth;
protected int bevelwidth;
protected int currentbevelwidth;
protected int subdivisions;
protected int maxSubdivisions;
protected int minSubdivisions;
protected int maxsubdivisions;
protected int minsubdivisions;
protected string undoName = "Rectangle draw";
protected string shapeName = "rectangle";
protected string undoname = "Rectangle draw";
protected string shapename = "rectangle";
protected Vector2D start;
protected Vector2D end;
protected int width;
protected int height;
//interface
// Interface
private DrawRectangleOptionsPanel panel;
#endregion
@ -56,7 +56,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
{
snaptogrid = true;
usefourcardinaldirections = true;
SetupInterface();
}
public override void Dispose()
@ -76,28 +75,31 @@ namespace CodeImp.DoomBuilder.BuilderModes
#region ================== Settings panel
protected virtual void SetupInterface()
protected override void SetupInterface()
{
maxSubdivisions = 16;
maxsubdivisions = 16;
//Add options docker
panel = new DrawRectangleOptionsPanel();
panel.MaxSubdivisions = maxSubdivisions;
panel.MinSubdivisions = minSubdivisions;
panel.MaxSubdivisions = maxsubdivisions;
panel.MinSubdivisions = minsubdivisions;
panel.MaxBevelWidth = (int)General.Map.FormatInterface.MaxCoordinate;
panel.MinBevelWidth = (int)General.Map.FormatInterface.MinCoordinate;
panel.OnValueChanged += OptionsPanelOnValueChanged;
panel.OnContinuousDrawingChanged += OnContinuousDrawingChanged;
panel.ContinuousDrawing = General.Settings.ReadPluginSetting("drawrectanglemode_continuousdrawing", false);
}
protected virtual void AddInterface()
protected override void AddInterface()
{
panel.Register();
bevelWidth = panel.BevelWidth;
bevelwidth = panel.BevelWidth;
subdivisions = panel.Subdivisions;
}
protected virtual void RemoveInterface()
protected override void RemoveInterface()
{
General.Settings.WritePluginSetting("drawrectanglemode_continuousdrawing", panel.ContinuousDrawing);
panel.Unregister();
}
@ -178,47 +180,47 @@ namespace CodeImp.DoomBuilder.BuilderModes
//no shape
if(pStart == pEnd)
{
currentBevelWidth = 0;
currentbevelwidth = 0;
return new Vector2D[0];
}
//line
if(pEnd.x == pStart.x || pEnd.y == pStart.y)
{
currentBevelWidth = 0;
currentbevelwidth = 0;
return new[] { pStart, pEnd };
}
//no corners
if(bevelWidth == 0)
if(bevelwidth == 0)
{
currentBevelWidth = 0;
currentbevelwidth = 0;
return new[] { pStart, new Vector2D((int)pStart.x, (int)pEnd.y), pEnd, new Vector2D((int)pEnd.x, (int)pStart.y), pStart };
}
//got corners. TODO: check point order
bool reverse = false;
currentBevelWidth = Math.Min(Math.Abs(bevelWidth), Math.Min(width, height) / 2);
currentbevelwidth = Math.Min(Math.Abs(bevelwidth), Math.Min(width, height) / 2);
if(bevelWidth < 0)
if(bevelwidth < 0)
{
currentBevelWidth *= -1;
currentbevelwidth *= -1;
reverse = true;
}
List<Vector2D> shape = new List<Vector2D>();
//top-left corner
shape.AddRange(GetCornerPoints(pStart, currentBevelWidth, currentBevelWidth, !reverse));
shape.AddRange(GetCornerPoints(pStart, currentbevelwidth, currentbevelwidth, !reverse));
//top-right corner
shape.AddRange(GetCornerPoints(new Vector2D(pEnd.x, pStart.y), -currentBevelWidth, currentBevelWidth, reverse));
shape.AddRange(GetCornerPoints(new Vector2D(pEnd.x, pStart.y), -currentbevelwidth, currentbevelwidth, reverse));
//bottom-right corner
shape.AddRange(GetCornerPoints(pEnd, -currentBevelWidth, -currentBevelWidth, !reverse));
shape.AddRange(GetCornerPoints(pEnd, -currentbevelwidth, -currentbevelwidth, !reverse));
//bottom-left corner
shape.AddRange(GetCornerPoints(new Vector2D(pStart.x, pEnd.y), currentBevelWidth, -currentBevelWidth, reverse));
shape.AddRange(GetCornerPoints(new Vector2D(pStart.x, pEnd.y), currentbevelwidth, -currentbevelwidth, reverse));
//closing point
shape.Add(shape[0]);
@ -229,7 +231,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
private Vector2D[] GetCornerPoints(Vector2D startPoint, int bevel_width, int bevel_height, bool reverse)
{
Vector2D[] points;
Vector2D center = (bevelWidth > 0 ? new Vector2D(startPoint.x + bevel_width, startPoint.y + bevel_height) : startPoint);
Vector2D center = (bevelwidth > 0 ? new Vector2D(startPoint.x + bevel_width, startPoint.y + bevel_height) : startPoint);
float curAngle = Angle2D.PI;
int steps = subdivisions + 2;
@ -248,7 +250,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
protected virtual string GetHintText()
{
return "BVL: " + bevelWidth + "; SUB: " + subdivisions;
return "BVL: " + bevelwidth + "; SUB: " + subdivisions;
}
//update top-left and bottom-right points, which define drawing shape
@ -330,18 +332,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
#endregion
#region ================== Events
public override void OnEngage()
{
base.OnEngage();
AddInterface();
}
public override void OnDisengage()
{
RemoveInterface();
base.OnDisengage();
}
override public void OnAccept()
{
@ -352,54 +342,67 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(points.Count > 4 || points.Count == 2)
{
// Make undo for the draw
General.Map.UndoRedo.CreateUndo(undoName);
General.Map.UndoRedo.CreateUndo(undoname);
// Make an analysis and show info
string[] adjectives = new[] { "gloomy", "sad", "unhappy", "lonely", "troubled", "depressed", "heartsick", "glum", "pessimistic", "bitter", "downcast" }; // aaand my english vocabulary ends here :)
string word = adjectives[new Random().Next(adjectives.Length - 1)];
string a = (word[0] == 'u' ? "an " : "a ");
General.Interface.DisplayStatus(StatusType.Action, "Created " + a + word + " " + shapeName + ".");
General.Interface.DisplayStatus(StatusType.Action, "Created " + a + word + " " + shapename + ".");
// Make the drawing
if(!Tools.DrawLines(points, true, BuilderPlug.Me.AutoAlignTextureOffsetsOnCreate))
if(Tools.DrawLines(points, true, BuilderPlug.Me.AutoAlignTextureOffsetsOnCreate))
{
// Snap to map format accuracy
General.Map.Map.SnapAllToAccuracy();
// Clear selection
General.Map.Map.ClearAllSelected();
// Update cached values
General.Map.Map.Update();
// Edit new sectors?
List<Sector> newsectors = General.Map.Map.GetMarkedSectors(true);
if(BuilderPlug.Me.EditNewSector && (newsectors.Count > 0))
General.Interface.ShowEditSectors(newsectors);
// Update the used textures
General.Map.Data.UpdateUsedTextures();
//mxd
General.Map.Renderer2D.UpdateExtraFloorFlag();
// Map is changed
General.Map.IsChanged = true;
}
else
{
// Drawing failed
// NOTE: I have to call this twice, because the first time only cancels this volatile mode
General.Map.UndoRedo.WithdrawUndo();
General.Map.UndoRedo.WithdrawUndo();
return;
}
// Snap to map format accuracy
General.Map.Map.SnapAllToAccuracy();
// Clear selection
General.Map.Map.ClearAllSelected();
// Update cached values
General.Map.Map.Update();
// Edit new sectors?
List<Sector> newsectors = General.Map.Map.GetMarkedSectors(true);
if(BuilderPlug.Me.EditNewSector && (newsectors.Count > 0))
General.Interface.ShowEditSectors(newsectors);
// Update the used textures
General.Map.Data.UpdateUsedTextures();
//mxd
General.Map.Renderer2D.UpdateExtraFloorFlag();
// Map is changed
General.Map.IsChanged = true;
}
// Done
Cursor.Current = Cursors.Default;
// Return to original mode
General.Editing.ChangeMode(General.Editing.PreviousStableMode.Name);
if(continuousdrawing)
{
// Reset settings
points.Clear();
labels.Clear();
// Redraw display
General.Interface.RedrawDisplay();
}
else
{
// Return to original mode
General.Editing.ChangeMode(General.Editing.PreviousStableMode.Name);
}
}
public override void OnHelp()
@ -409,7 +412,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
private void OptionsPanelOnValueChanged(object sender, EventArgs eventArgs)
{
bevelWidth = panel.BevelWidth;
bevelwidth = panel.BevelWidth;
subdivisions = panel.Subdivisions;
Update();
}
@ -421,7 +424,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
[BeginAction("increasesubdivlevel")]
protected virtual void IncreaseSubdivLevel()
{
if(subdivisions < maxSubdivisions)
if(subdivisions < maxsubdivisions)
{
subdivisions++;
panel.Subdivisions = subdivisions;
@ -432,7 +435,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
[BeginAction("decreasesubdivlevel")]
protected virtual void DecreaseSubdivLevel()
{
if(subdivisions > minSubdivisions)
if(subdivisions > minsubdivisions)
{
subdivisions--;
panel.Subdivisions = subdivisions;
@ -443,10 +446,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
[BeginAction("increasebevel")]
protected virtual void IncreaseBevel()
{
if(points.Count < 2 || currentBevelWidth == bevelWidth || bevelWidth < 0)
if(points.Count < 2 || currentbevelwidth == bevelwidth || bevelwidth < 0)
{
bevelWidth = Math.Min(bevelWidth + General.Map.Grid.GridSize, panel.MaxBevelWidth);
panel.BevelWidth = bevelWidth;
bevelwidth = Math.Min(bevelwidth + General.Map.Grid.GridSize, panel.MaxBevelWidth);
panel.BevelWidth = bevelwidth;
Update();
}
}
@ -454,10 +457,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
[BeginAction("decreasebevel")]
protected virtual void DecreaseBevel()
{
if(currentBevelWidth == bevelWidth || bevelWidth > 0)
if(currentbevelwidth == bevelwidth || bevelwidth > 0)
{
bevelWidth = Math.Max(bevelWidth - General.Map.Grid.GridSize, panel.MinBevelWidth);
panel.BevelWidth = bevelWidth;
bevelwidth = Math.Max(bevelwidth - General.Map.Grid.GridSize, panel.MinBevelWidth);
panel.BevelWidth = bevelwidth;
Update();
}
}

View file

@ -32,26 +32,29 @@
this.seglabel = new System.Windows.Forms.ToolStripLabel();
this.seglen = new CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown();
this.reset = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.continuousdrawing = new System.Windows.Forms.ToolStripButton();
this.toolstrip.SuspendLayout();
this.SuspendLayout();
//
// toolstrip
//
this.toolstrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.continuousdrawing,
this.toolStripSeparator1,
this.seglabel,
this.seglen,
this.reset});
this.toolstrip.Location = new System.Drawing.Point(0, 0);
this.toolstrip.Name = "toolstrip";
this.toolstrip.Size = new System.Drawing.Size(249, 25);
this.toolstrip.Size = new System.Drawing.Size(320, 25);
this.toolstrip.TabIndex = 7;
this.toolstrip.Text = "toolStrip1";
//
// seglabel
//
this.seglabel.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Gear;
this.seglabel.Name = "seglabel";
this.seglabel.Size = new System.Drawing.Size(113, 22);
this.seglabel.Size = new System.Drawing.Size(97, 22);
this.seglabel.Text = "Segment Length:";
//
// seglen
@ -69,7 +72,7 @@
0,
0});
this.seglen.Name = "seglen";
this.seglen.Size = new System.Drawing.Size(56, 20);
this.seglen.Size = new System.Drawing.Size(56, 23);
this.seglen.Text = "0";
this.seglen.Value = new decimal(new int[] {
0,
@ -84,17 +87,32 @@
this.reset.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Reset;
this.reset.ImageTransparentColor = System.Drawing.Color.Magenta;
this.reset.Name = "reset";
this.reset.Size = new System.Drawing.Size(23, 22);
this.reset.Size = new System.Drawing.Size(23, 20);
this.reset.Text = "Reset";
this.reset.Click += new System.EventHandler(this.reset_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
//
// continuousdrawing
//
this.continuousdrawing.CheckOnClick = true;
this.continuousdrawing.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Repeat;
this.continuousdrawing.ImageTransparentColor = System.Drawing.Color.Magenta;
this.continuousdrawing.Name = "continuousdrawing";
this.continuousdrawing.Size = new System.Drawing.Size(135, 22);
this.continuousdrawing.Text = "Continuous drawing";
this.continuousdrawing.CheckedChanged += new System.EventHandler(this.continuousdrawing_CheckedChanged);
//
// DrawCurveOptionsPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.Controls.Add(this.toolstrip);
this.Name = "DrawCurveOptionsPanel";
this.Size = new System.Drawing.Size(249, 60);
this.Size = new System.Drawing.Size(320, 60);
this.toolstrip.ResumeLayout(false);
this.toolstrip.PerformLayout();
this.ResumeLayout(false);
@ -108,6 +126,8 @@
internal CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown seglen;
private System.Windows.Forms.ToolStrip toolstrip;
private System.Windows.Forms.ToolStripButton reset;
private System.Windows.Forms.ToolStripButton continuousdrawing;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
}
}

View file

@ -6,9 +6,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
internal partial class DrawCurveOptionsPanel : UserControl
{
public event EventHandler OnValueChanged;
private bool blockEvents;
public event EventHandler OnContinuousDrawingChanged;
private bool blockevents;
public int SegmentLength { get { return (int)seglen.Value; } set { blockEvents = true; seglen.Value = value; blockEvents = false; } }
public int SegmentLength { get { return (int)seglen.Value; } set { blockevents = true; seglen.Value = value; blockevents = false; } }
public bool ContinuousDrawing { get { return continuousdrawing.Checked; } set { continuousdrawing.Checked = value; } }
public DrawCurveOptionsPanel(int minLength, int maxLength)
{
@ -22,6 +24,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
public void Register()
{
General.Interface.AddButton(continuousdrawing);
General.Interface.AddButton(toolStripSeparator1);
General.Interface.AddButton(seglabel);
General.Interface.AddButton(seglen);
General.Interface.AddButton(reset);
@ -32,16 +36,23 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Interface.RemoveButton(reset);
General.Interface.RemoveButton(seglen);
General.Interface.RemoveButton(seglabel);
General.Interface.RemoveButton(toolStripSeparator1);
General.Interface.RemoveButton(continuousdrawing);
}
private void seglen_ValueChanged(object sender, EventArgs e)
{
if(!blockEvents && OnValueChanged != null) OnValueChanged(this, EventArgs.Empty);
if(!blockevents && OnValueChanged != null) OnValueChanged(this, EventArgs.Empty);
}
private void reset_Click(object sender, EventArgs e)
{
seglen.Value = seglen.Minimum;
}
private void continuousdrawing_CheckedChanged(object sender, EventArgs e)
{
if(OnContinuousDrawingChanged != null) OnContinuousDrawingChanged(continuousdrawing.Checked, EventArgs.Empty);
}
}
}

View file

@ -29,6 +29,8 @@
private void InitializeComponent()
{
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.continuousdrawing = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.subdivslabel = new System.Windows.Forms.ToolStripLabel();
this.subdivs = new CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown();
this.spikinesslabel = new System.Windows.Forms.ToolStripLabel();
@ -40,6 +42,8 @@
// toolStrip1
//
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.continuousdrawing,
this.toolStripSeparator1,
this.subdivslabel,
this.subdivs,
this.spikinesslabel,
@ -51,11 +55,25 @@
this.toolStrip1.TabIndex = 6;
this.toolStrip1.Text = "toolStrip1";
//
// continuousdrawing
//
this.continuousdrawing.CheckOnClick = true;
this.continuousdrawing.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Repeat;
this.continuousdrawing.ImageTransparentColor = System.Drawing.Color.Magenta;
this.continuousdrawing.Name = "continuousdrawing";
this.continuousdrawing.Size = new System.Drawing.Size(135, 22);
this.continuousdrawing.Text = "Continuous drawing";
this.continuousdrawing.CheckedChanged += new System.EventHandler(this.continuousdrawing_CheckedChanged);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
//
// subdivslabel
//
this.subdivslabel.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Gear;
this.subdivslabel.Name = "subdivslabel";
this.subdivslabel.Size = new System.Drawing.Size(53, 22);
this.subdivslabel.Size = new System.Drawing.Size(37, 22);
this.subdivslabel.Text = "Sides:";
//
// subdivs
@ -102,7 +120,7 @@
0,
0});
this.spikiness.Name = "spikiness";
this.spikiness.Size = new System.Drawing.Size(56, 20);
this.spikiness.Size = new System.Drawing.Size(56, 23);
this.spikiness.Text = "0";
this.spikiness.Value = new decimal(new int[] {
0,
@ -116,7 +134,7 @@
this.reset.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Reset;
this.reset.ImageTransparentColor = System.Drawing.Color.Magenta;
this.reset.Name = "reset";
this.reset.Size = new System.Drawing.Size(23, 22);
this.reset.Size = new System.Drawing.Size(23, 20);
this.reset.Text = "Reset";
this.reset.Click += new System.EventHandler(this.reset_Click);
//
@ -142,5 +160,7 @@
private System.Windows.Forms.ToolStripLabel spikinesslabel;
private CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown spikiness;
private System.Windows.Forms.ToolStripButton reset;
private System.Windows.Forms.ToolStripButton continuousdrawing;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
}
}

View file

@ -6,17 +6,19 @@ namespace CodeImp.DoomBuilder.BuilderModes
internal partial class DrawEllipseOptionsPanel : UserControl
{
public event EventHandler OnValueChanged;
private bool blockEvents;
public event EventHandler OnContinuousDrawingChanged;
private bool blockevents;
private static int aquityValue;
private static int subdivsValue = 8;
private static int aquityvalue;
private static int subdivsvalue = 8;
public int Spikiness { get { return (int)spikiness.Value; } set { blockEvents = true; spikiness.Value = value; blockEvents = false; } }
public int Subdivisions { get { return (int)subdivs.Value; } set { blockEvents = true; subdivs.Value = value; blockEvents = false; } }
public int Spikiness { get { return (int)spikiness.Value; } set { blockevents = true; spikiness.Value = value; blockevents = false; } }
public int Subdivisions { get { return (int)subdivs.Value; } set { blockevents = true; subdivs.Value = value; blockevents = false; } }
public int MaxSubdivisions { get { return (int)subdivs.Maximum; } set { subdivs.Maximum = value; } }
public int MinSubdivisions { get { return (int)subdivs.Minimum; } set { subdivs.Minimum = value; } }
public int MaxSpikiness { get { return (int)spikiness.Maximum; } set { spikiness.Maximum = value; } }
public int MinSpikiness { get { return (int)spikiness.Minimum; } set { spikiness.Minimum = value; } }
public bool ContinuousDrawing { get { return continuousdrawing.Checked; } set { continuousdrawing.Checked = value; } }
public DrawEllipseOptionsPanel()
{
@ -25,11 +27,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
public void Register()
{
spikiness.Value = aquityValue;
subdivs.Value = subdivsValue;
spikiness.Value = aquityvalue;
subdivs.Value = subdivsvalue;
spikiness.ValueChanged += ValueChanged;
subdivs.ValueChanged += ValueChanged;
General.Interface.AddButton(continuousdrawing);
General.Interface.AddButton(toolStripSeparator1);
General.Interface.AddButton(subdivslabel);
General.Interface.AddButton(subdivs);
General.Interface.AddButton(spikinesslabel);
@ -44,21 +48,28 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Interface.RemoveButton(spikinesslabel);
General.Interface.RemoveButton(subdivs);
General.Interface.RemoveButton(subdivslabel);
General.Interface.RemoveButton(toolStripSeparator1);
General.Interface.RemoveButton(continuousdrawing);
}
private void ValueChanged(object sender, EventArgs e)
{
aquityValue = (int)spikiness.Value;
subdivsValue = (int)subdivs.Value;
if(!blockEvents && OnValueChanged != null) OnValueChanged(this, EventArgs.Empty);
aquityvalue = (int)spikiness.Value;
subdivsvalue = (int)subdivs.Value;
if(!blockevents && OnValueChanged != null) OnValueChanged(this, EventArgs.Empty);
}
private void reset_Click(object sender, EventArgs e)
{
blockEvents = true;
blockevents = true;
spikiness.Value = 0;
blockEvents = false;
blockevents = false;
subdivs.Value = subdivs.Minimum;
}
private void continuousdrawing_CheckedChanged(object sender, EventArgs e)
{
if(OnContinuousDrawingChanged != null) OnContinuousDrawingChanged(continuousdrawing.Checked, EventArgs.Empty);
}
}
}

View file

@ -41,10 +41,13 @@
this.interphmode = new System.Windows.Forms.ComboBox();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.groupBox3 = new System.Windows.Forms.GroupBox();
this.continuousdrawing = new System.Windows.Forms.CheckBox();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.slicesV)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.slicesH)).BeginInit();
this.groupBox2.SuspendLayout();
this.groupBox3.SuspendLayout();
this.SuspendLayout();
//
// groupBox1
@ -190,10 +193,34 @@
this.label4.TabIndex = 15;
this.label4.Text = "Horizontal";
//
// groupBox3
//
this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox3.Controls.Add(this.continuousdrawing);
this.groupBox3.Location = new System.Drawing.Point(3, 225);
this.groupBox3.Name = "groupBox3";
this.groupBox3.Size = new System.Drawing.Size(200, 55);
this.groupBox3.TabIndex = 11;
this.groupBox3.TabStop = false;
this.groupBox3.Text = "Additional options";
//
// continuousdrawing
//
this.continuousdrawing.AutoSize = true;
this.continuousdrawing.Location = new System.Drawing.Point(20, 24);
this.continuousdrawing.Name = "continuousdrawing";
this.continuousdrawing.Size = new System.Drawing.Size(119, 17);
this.continuousdrawing.TabIndex = 15;
this.continuousdrawing.Text = "Continuous drawing";
this.continuousdrawing.UseVisualStyleBackColor = true;
this.continuousdrawing.CheckedChanged += new System.EventHandler(this.continuousdrawing_CheckedChanged);
//
// DrawGridOptionsPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.Controls.Add(this.groupBox3);
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.groupBox1);
this.Name = "DrawGridOptionsPanel";
@ -204,6 +231,8 @@
((System.ComponentModel.ISupportInitialize)(this.slicesH)).EndInit();
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.groupBox3.ResumeLayout(false);
this.groupBox3.PerformLayout();
this.ResumeLayout(false);
}
@ -223,5 +252,7 @@
private System.Windows.Forms.ComboBox interphmode;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.GroupBox groupBox3;
private System.Windows.Forms.CheckBox continuousdrawing;
}
}

View file

@ -8,6 +8,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
{
public event EventHandler OnValueChanged;
public event EventHandler OnGridLockChanged;
public event EventHandler OnContinuousDrawingChanged;
private bool blockevents;
public bool Triangulate { get { return triangulate.Checked; } set { blockevents = true; triangulate.Checked = value; blockevents = false; } }
@ -16,6 +17,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
public int MaxHorizontalSlices { get { return (int)slicesH.Maximum; } set { slicesH.Maximum = value; } }
public int VerticalSlices { get { return (int)slicesV.Value; } set { blockevents = true; slicesV.Value = value; blockevents = false; } }
public int MaxVerticalSlices { get { return (int)slicesV.Maximum; } set { slicesV.Maximum = value; } }
public bool ContinuousDrawing { get { return continuousdrawing.Checked; } set { continuousdrawing.Checked = value; } }
public InterpolationTools.Mode HorizontalInterpolationMode
{
get { return gridlock.Checked ? InterpolationTools.Mode.LINEAR : (InterpolationTools.Mode)interphmode.SelectedIndex; }
@ -68,5 +70,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(OnValueChanged != null) OnValueChanged(this, EventArgs.Empty);
}
private void continuousdrawing_CheckedChanged(object sender, EventArgs e)
{
if(OnContinuousDrawingChanged != null) OnContinuousDrawingChanged(continuousdrawing.Checked, EventArgs.Empty);
}
}
}

View file

@ -0,0 +1,75 @@
namespace CodeImp.DoomBuilder.BuilderModes
{
partial class DrawLineOptionsPanel
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if(disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.continuousdrawing = new System.Windows.Forms.ToolStripButton();
this.toolStrip1.SuspendLayout();
this.SuspendLayout();
//
// toolStrip1
//
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.continuousdrawing});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(200, 25);
this.toolStrip1.TabIndex = 8;
this.toolStrip1.Text = "toolStrip1";
//
// continuousdrawing
//
this.continuousdrawing.CheckOnClick = true;
this.continuousdrawing.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Repeat;
this.continuousdrawing.ImageTransparentColor = System.Drawing.Color.Magenta;
this.continuousdrawing.Name = "continuousdrawing";
this.continuousdrawing.Size = new System.Drawing.Size(135, 22);
this.continuousdrawing.Text = "Continuous drawing";
this.continuousdrawing.CheckedChanged += new System.EventHandler(this.continuousdrawing_CheckedChanged);
//
// DrawLineOptionsPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.toolStrip1);
this.Name = "DrawLineOptionsPanel";
this.Size = new System.Drawing.Size(200, 60);
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton continuousdrawing;
}
}

View file

@ -0,0 +1,32 @@
using System;
using System.Windows.Forms;
namespace CodeImp.DoomBuilder.BuilderModes
{
internal partial class DrawLineOptionsPanel : UserControl
{
public event EventHandler OnContinuousDrawingChanged;
public bool ContinuousDrawing { get { return continuousdrawing.Checked; } set { continuousdrawing.Checked = value; } }
public DrawLineOptionsPanel()
{
InitializeComponent();
}
public void Register()
{
General.Interface.AddButton(continuousdrawing);
}
public void Unregister()
{
General.Interface.RemoveButton(continuousdrawing);
}
private void continuousdrawing_CheckedChanged(object sender, EventArgs e)
{
if(OnContinuousDrawingChanged != null) OnContinuousDrawingChanged(continuousdrawing.Checked, EventArgs.Empty);
}
}
}

View file

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View file

@ -29,10 +29,12 @@
private void InitializeComponent()
{
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.radiuslabel = new System.Windows.Forms.ToolStripLabel();
this.radius = new CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown();
this.subdivslabel = new System.Windows.Forms.ToolStripLabel();
this.subdivs = new CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown();
this.continuousdrawing = new System.Windows.Forms.ToolStripButton();
this.reset = new System.Windows.Forms.ToolStripButton();
this.toolStrip1.SuspendLayout();
this.SuspendLayout();
@ -40,6 +42,8 @@
// toolStrip1
//
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.continuousdrawing,
this.toolStripSeparator1,
this.radiuslabel,
this.radius,
this.subdivslabel,
@ -47,15 +51,19 @@
this.reset});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(380, 25);
this.toolStrip1.Size = new System.Drawing.Size(488, 25);
this.toolStrip1.TabIndex = 7;
this.toolStrip1.Text = "toolStrip1";
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
//
// radiuslabel
//
this.radiuslabel.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Gear;
this.radiuslabel.Name = "radiuslabel";
this.radiuslabel.Size = new System.Drawing.Size(92, 22);
this.radiuslabel.Size = new System.Drawing.Size(76, 22);
this.radiuslabel.Text = "Bevel Radius:";
//
// radius
@ -112,6 +120,16 @@
0});
this.subdivs.ValueChanged += new System.EventHandler(this.ValueChanged);
//
// continuousdrawing
//
this.continuousdrawing.CheckOnClick = true;
this.continuousdrawing.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Repeat;
this.continuousdrawing.ImageTransparentColor = System.Drawing.Color.Magenta;
this.continuousdrawing.Name = "continuousdrawing";
this.continuousdrawing.Size = new System.Drawing.Size(135, 22);
this.continuousdrawing.Text = "Continuous drawing";
this.continuousdrawing.CheckedChanged += new System.EventHandler(this.continuousdrawing_CheckedChanged);
//
// reset
//
this.reset.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
@ -128,7 +146,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.Controls.Add(this.toolStrip1);
this.Name = "DrawRectangleOptionsPanel";
this.Size = new System.Drawing.Size(380, 60);
this.Size = new System.Drawing.Size(488, 60);
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.ResumeLayout(false);
@ -144,5 +162,7 @@
private System.Windows.Forms.ToolStripLabel subdivslabel;
private CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown subdivs;
private System.Windows.Forms.ToolStripButton reset;
private System.Windows.Forms.ToolStripButton continuousdrawing;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
}
}

View file

@ -6,17 +6,19 @@ namespace CodeImp.DoomBuilder.BuilderModes
internal partial class DrawRectangleOptionsPanel : UserControl
{
public event EventHandler OnValueChanged;
private bool blockEvents;
public event EventHandler OnContinuousDrawingChanged;
private bool blockevents;
private static int radiusValue;
private static int subdivsValue;
public int BevelWidth { get { return (int)radius.Value; } set { blockEvents = true; radius.Value = value; blockEvents = false; } }
public int BevelWidth { get { return (int)radius.Value; } set { blockevents = true; radius.Value = value; blockevents = false; } }
public int MaxBevelWidth { get { return (int)radius.Maximum; } set { radius.Maximum = value; } }
public int MinBevelWidth { get { return (int)radius.Minimum; } set { radius.Minimum = value; } }
public int Subdivisions { get { return (int)subdivs.Value; } set { blockEvents = true; subdivs.Value = value; blockEvents = false; } }
public int Subdivisions { get { return (int)subdivs.Value; } set { blockevents = true; subdivs.Value = value; blockevents = false; } }
public int MaxSubdivisions { get { return (int)subdivs.Maximum; } set { subdivs.Maximum = value; } }
public int MinSubdivisions { get { return (int)subdivs.Minimum; } set { subdivs.Minimum = value; } }
public bool ContinuousDrawing { get { return continuousdrawing.Checked; } set { continuousdrawing.Checked = value; } }
public DrawRectangleOptionsPanel()
{
@ -30,6 +32,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
radius.ValueChanged += ValueChanged;
subdivs.ValueChanged += ValueChanged;
General.Interface.AddButton(continuousdrawing);
General.Interface.AddButton(toolStripSeparator1);
General.Interface.AddButton(radiuslabel);
General.Interface.AddButton(radius);
General.Interface.AddButton(subdivslabel);
@ -44,22 +48,28 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Interface.RemoveButton(subdivslabel);
General.Interface.RemoveButton(radius);
General.Interface.RemoveButton(radiuslabel);
General.Interface.RemoveButton(toolStripSeparator1);
General.Interface.RemoveButton(continuousdrawing);
}
private void ValueChanged(object sender, EventArgs e)
{
radiusValue = (int)radius.Value;
subdivsValue = (int)subdivs.Value;
if(!blockEvents && OnValueChanged != null) OnValueChanged(this, EventArgs.Empty);
if(!blockevents && OnValueChanged != null) OnValueChanged(this, EventArgs.Empty);
}
private void reset_Click(object sender, EventArgs e)
{
blockEvents = true;
blockevents = true;
radius.Value = 0;
blockEvents = false;
blockevents = false;
subdivs.Value = 0;
}
private void continuousdrawing_CheckedChanged(object sender, EventArgs e)
{
if(OnContinuousDrawingChanged != null) OnContinuousDrawingChanged(continuousdrawing.Checked, EventArgs.Empty);
}
}
}

View file

@ -1,10 +1,10 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
@ -13,13 +13,13 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
/// <summary>
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
@ -33,7 +33,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
@ -47,8 +47,8 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
@ -61,7 +61,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap AlignThings {
get {
@ -71,7 +71,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Angle {
get {
@ -81,7 +81,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap BrightnessGradient {
get {
@ -91,7 +91,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap CeilingAlign {
get {
@ -101,7 +101,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap CeilsGradient {
get {
@ -111,7 +111,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap ColorPick {
get {
@ -121,7 +121,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Copy {
get {
@ -131,7 +131,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap CopyProperties {
get {
@ -141,7 +141,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap CurveLines {
get {
@ -151,7 +151,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Door {
get {
@ -161,7 +161,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap DrawCurveMode {
get {
@ -171,7 +171,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap DrawEllipseMode {
get {
@ -181,7 +181,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap DrawGeometryMode {
get {
@ -191,7 +191,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap DrawGridMode {
get {
@ -201,7 +201,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap DrawRectangleMode {
get {
@ -211,7 +211,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap FilterThings {
get {
@ -221,7 +221,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Flip {
get {
@ -231,7 +231,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap FlipSelectionH {
get {
@ -241,7 +241,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap FlipSelectionV {
get {
@ -251,7 +251,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap FloorAlign {
get {
@ -261,7 +261,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap FloorsGradient {
get {
@ -271,7 +271,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Folder {
get {
@ -281,7 +281,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Gear {
get {
@ -291,7 +291,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Hide {
get {
@ -301,7 +301,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap HideAll {
get {
@ -311,7 +311,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap InsertThingsRadiallyMode {
get {
@ -321,7 +321,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Join {
get {
@ -331,7 +331,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap List {
get {
@ -341,7 +341,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap List_Images {
get {
@ -351,7 +351,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Merge {
get {
@ -361,7 +361,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap PasteProperties {
get {
@ -371,7 +371,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap PastePropertiesOptions {
get {
@ -381,7 +381,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap PlaceThings {
get {
@ -391,7 +391,17 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Repeat {
get {
object obj = ResourceManager.GetObject("Repeat", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Reset {
get {
@ -401,7 +411,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Save {
get {
@ -411,7 +421,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap SelectThingsInSectors {
get {
@ -421,7 +431,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap SelectTouching {
get {
@ -431,7 +441,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Show {
get {
@ -441,7 +451,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Show2 {
get {
@ -451,7 +461,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Show3 {
get {
@ -461,7 +471,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Similar {
get {
@ -471,7 +481,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Text {
get {
@ -481,7 +491,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap TextureLock {
get {
@ -491,7 +501,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap ThingPointAtCursor {
get {
@ -501,7 +511,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap treeview {
get {
@ -511,7 +521,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap ViewSelectionEffects {
get {
@ -521,7 +531,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap ViewSelectionIndex {
get {
@ -531,7 +541,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap VisualModeGZ {
get {

View file

@ -118,9 +118,6 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Join" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Join.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="FloorAlign" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\FloorAlign.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -139,9 +136,6 @@
<data name="ViewSelectionEffects" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ViewSelectionEffects.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Gear" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Gear.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="HideAll" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\HideAll.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -196,12 +190,12 @@
<data name="ThingPointAtCursor" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ThingPointAtCursor.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="PlaceThings" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\PlaceThings.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Text" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Text.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Show" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Show.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="BrightnessGradient" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\BrightnessGradient.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -217,8 +211,8 @@
<data name="Reset" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Reset.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Show" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Show.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="Join" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Join.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ViewSelectionIndex" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ViewSelectionIndex.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -229,6 +223,9 @@
<data name="Show2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Show2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Folder" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Folder.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ColorPick" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ColorPick.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -238,8 +235,8 @@
<data name="FlipSelectionH" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\FlipSelectionH.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Folder" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Folder.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="PlaceThings" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\PlaceThings.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Angle" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Angle.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -262,4 +259,10 @@
<data name="InsertThingsRadiallyMode" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\InsertThingsRadiallyMode.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Gear" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Gear.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Repeat" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Repeat.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 B