mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2025-01-31 04:40:55 +00:00
Internal: added a debug console.
This commit is contained in:
parent
2b7eee8d1a
commit
66f75ec7c4
14 changed files with 880 additions and 41 deletions
|
@ -683,6 +683,12 @@
|
|||
<Compile Include="Config\PasteOptions.cs" />
|
||||
<Compile Include="Config\ThingsFlagsCompare.cs" />
|
||||
<Compile Include="Controls\ButtonsNumericTextboxDesigner.cs" />
|
||||
<Compile Include="Controls\DebugConsole.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Controls\DebugConsole.designer.cs">
|
||||
<DependentUpon>DebugConsole.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Controls\Docker.cs" />
|
||||
<Compile Include="Controls\DockersControl.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
|
@ -746,6 +752,7 @@
|
|||
<Compile Include="General\CRC.cs" />
|
||||
<Compile Include="General\ErrorItem.cs" />
|
||||
<Compile Include="General\ErrorLogger.cs" />
|
||||
<Compile Include="General\MurmurHash2.cs" />
|
||||
<Compile Include="General\SavePurpose.cs" />
|
||||
<Compile Include="Geometry\CurveTools.cs" />
|
||||
<Compile Include="GZBuilder\Controls\AngleControl.cs">
|
||||
|
@ -936,6 +943,9 @@
|
|||
<Compile Include="ZDoom\DecorateParser.cs" />
|
||||
<Compile Include="ZDoom\StateStructure.cs" />
|
||||
<Compile Include="Editing\EditingManager.cs" />
|
||||
<EmbeddedResource Include="Controls\DebugConsole.resx">
|
||||
<DependentUpon>DebugConsole.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Controls\DockersControl.resx">
|
||||
<DependentUpon>DockersControl.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
|
@ -996,6 +1006,7 @@
|
|||
<None Include="Resources\ClearTextures.png" />
|
||||
<None Include="Resources\Cursor.png" />
|
||||
<None Include="Resources\Brightness.png" />
|
||||
<None Include="Resources\Clear.png" />
|
||||
<Content Include="Resources\DB2.ico" />
|
||||
<None Include="Resources\GZDB2.ico" />
|
||||
<None Include="Resources\fog.png" />
|
||||
|
@ -1018,6 +1029,7 @@
|
|||
<Content Include="Resources\Model.png" />
|
||||
<None Include="Resources\ModelDisabled.png" />
|
||||
<Content Include="Resources\Model_selected.png" />
|
||||
<None Include="Resources\WordWrap.png" />
|
||||
<None Include="Resources\ThingCategory.png" />
|
||||
<None Include="Resources\ScreenshotActiveWindow.png" />
|
||||
<None Include="Resources\Screenshot.png" />
|
||||
|
|
259
Source/Core/Controls/DebugConsole.cs
Normal file
259
Source/Core/Controls/DebugConsole.cs
Normal file
|
@ -0,0 +1,259 @@
|
|||
#region ================== Namespaces
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
#endregion
|
||||
|
||||
namespace CodeImp.DoomBuilder
|
||||
{
|
||||
#region ================== Enums
|
||||
|
||||
[Flags]
|
||||
public enum DebugMessageType
|
||||
{
|
||||
Log = 1,
|
||||
Info = 2,
|
||||
Warning = 4,
|
||||
Error = 8,
|
||||
Special = 16,
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public partial class DebugConsole : UserControl
|
||||
{
|
||||
#region ================== Variables
|
||||
|
||||
private static readonly List<KeyValuePair<DebugMessageType, string>> messages = new List<KeyValuePair<DebugMessageType, string>>(1000);
|
||||
private DebugMessageType filters;
|
||||
|
||||
//Colors
|
||||
private readonly Dictionary<DebugMessageType, Color> textcolors;
|
||||
private readonly Dictionary<DebugMessageType, string> textheaders;
|
||||
|
||||
private static int charcount;
|
||||
private const int MAX_CHARS = short.MaxValue;
|
||||
private static long starttime = -1;
|
||||
private static DebugConsole me;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Properties
|
||||
|
||||
public bool AlwaysOnTop { get { return alwaysontop.Checked; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Constructor
|
||||
|
||||
public DebugConsole()
|
||||
{
|
||||
InitializeComponent();
|
||||
me = this;
|
||||
|
||||
// Setup filters
|
||||
foreach (ToolStripMenuItem item in filterselector.DropDownItems)
|
||||
{
|
||||
UpdateFilters(item);
|
||||
}
|
||||
|
||||
// Setup colors
|
||||
textcolors = new Dictionary<DebugMessageType, Color> {
|
||||
{ DebugMessageType.Log, SystemColors.WindowText },
|
||||
{ DebugMessageType.Info, Color.DarkGreen },
|
||||
{ DebugMessageType.Warning, Color.DarkOrange },
|
||||
{ DebugMessageType.Error, Color.DarkRed },
|
||||
{ DebugMessageType.Special, Color.DarkMagenta }
|
||||
};
|
||||
|
||||
// Setup headers
|
||||
textheaders = new Dictionary<DebugMessageType, string> {
|
||||
{ DebugMessageType.Log, string.Empty},
|
||||
{ DebugMessageType.Info, string.Empty},
|
||||
{ DebugMessageType.Warning, "Warning: "},
|
||||
{ DebugMessageType.Error, "ERROR: "},
|
||||
{ DebugMessageType.Special, string.Empty}
|
||||
};
|
||||
|
||||
// Word wrap?
|
||||
wordwrap.Checked = console.WordWrap;
|
||||
|
||||
// Pending messages?
|
||||
if (messages.Count > 0) UpdateMessages();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Methods
|
||||
|
||||
public static void Write(string text)
|
||||
{
|
||||
Write(DebugMessageType.Info, text);
|
||||
}
|
||||
|
||||
public static void WriteLine(string text)
|
||||
{
|
||||
Write(DebugMessageType.Info, text + Environment.NewLine);
|
||||
}
|
||||
|
||||
public static void Write(DebugMessageType type, string text)
|
||||
{
|
||||
if(me != null && me.InvokeRequired)
|
||||
{
|
||||
me.Invoke(new Action<DebugMessageType, string>(Write), new object[] { type, text });
|
||||
}
|
||||
else
|
||||
{
|
||||
messages.Add(new KeyValuePair<DebugMessageType, string>(type, text));
|
||||
if(me != null && (me.filters & type) == type)
|
||||
{
|
||||
me.AddMessage(type, text, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void WriteLine(DebugMessageType type, string text)
|
||||
{
|
||||
Write(type, text + Environment.NewLine);
|
||||
}
|
||||
|
||||
public static void Clear()
|
||||
{
|
||||
if (me != null && me.InvokeRequired)
|
||||
{
|
||||
me.Invoke(new Action(Clear));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (me != null) me.console.Clear();
|
||||
messages.Clear();
|
||||
charcount = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static void StartTimer()
|
||||
{
|
||||
starttime = SlimDX.Configuration.Timer.ElapsedMilliseconds;
|
||||
}
|
||||
|
||||
public static void StopTimer(string message)
|
||||
{
|
||||
if (starttime == -1)
|
||||
{
|
||||
Write(DebugMessageType.Warning, "Call General.Console.StartTimer before General.Console.StopTimer!");
|
||||
}
|
||||
else
|
||||
{
|
||||
long endtime = SlimDX.Configuration.Timer.ElapsedMilliseconds;
|
||||
|
||||
if (message.Contains("%"))
|
||||
message = message.Replace("&", (endtime - starttime) + " ms.");
|
||||
else
|
||||
message = message.TrimEnd() + " " + (endtime - starttime) + " ms.";
|
||||
|
||||
Write(DebugMessageType.Special, message);
|
||||
}
|
||||
|
||||
starttime = -1;
|
||||
}
|
||||
|
||||
private void AddMessage(DebugMessageType type, string text, bool scroll)
|
||||
{
|
||||
text = textheaders[type] + text;
|
||||
bool updatemessages = false;
|
||||
|
||||
while (charcount + text.Length > MAX_CHARS)
|
||||
{
|
||||
charcount -= messages[0].Value.Length;
|
||||
messages.RemoveAt(0);
|
||||
updatemessages = true;
|
||||
}
|
||||
|
||||
if(updatemessages) UpdateMessages();
|
||||
charcount += text.Length;
|
||||
|
||||
console.SelectionStart = console.TextLength;
|
||||
console.SelectionColor = textcolors[type];
|
||||
console.AppendText(text);
|
||||
if(scroll && autoscroll.Checked) console.ScrollToCaret();
|
||||
}
|
||||
|
||||
private void UpdateFilters(ToolStripMenuItem item)
|
||||
{
|
||||
DebugMessageType flag = (DebugMessageType)(int)item.Tag;
|
||||
if(item.Checked)
|
||||
{
|
||||
filters |= flag;
|
||||
}
|
||||
else
|
||||
{
|
||||
filters &= ~flag;
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateMessages()
|
||||
{
|
||||
console.Clear();
|
||||
charcount = 0;
|
||||
|
||||
console.SuspendLayout();
|
||||
foreach (KeyValuePair<DebugMessageType, string> pair in messages)
|
||||
{
|
||||
if((filters & pair.Key) == pair.Key && CheckTextFilter(pair.Value, searchbox.Text))
|
||||
{
|
||||
AddMessage(pair.Key, pair.Value, false);
|
||||
}
|
||||
}
|
||||
|
||||
console.ResumeLayout();
|
||||
console.ScrollToCaret();
|
||||
}
|
||||
|
||||
// Should we display this message?
|
||||
private bool CheckTextFilter(string text, string filter)
|
||||
{
|
||||
if (string.IsNullOrEmpty(filter) || filter.Length < 3) return true;
|
||||
return text.ToUpperInvariant().Contains(filter.ToUpperInvariant());
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Events
|
||||
|
||||
private void clearall_Click(object sender, EventArgs e)
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
|
||||
private void filters_Click(object sender, EventArgs e)
|
||||
{
|
||||
UpdateFilters(sender as ToolStripMenuItem);
|
||||
UpdateMessages();
|
||||
}
|
||||
|
||||
private void wordwrap_Click(object sender, EventArgs e)
|
||||
{
|
||||
console.WordWrap = wordwrap.Checked;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== Search events
|
||||
|
||||
private void searchclear_Click(object sender, EventArgs e)
|
||||
{
|
||||
searchbox.Clear();
|
||||
}
|
||||
|
||||
private void searchbox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
if(string.IsNullOrEmpty(searchbox.Text) || searchbox.Text.Length > 2) UpdateMessages();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
263
Source/Core/Controls/DebugConsole.designer.cs
generated
Normal file
263
Source/Core/Controls/DebugConsole.designer.cs
generated
Normal file
|
@ -0,0 +1,263 @@
|
|||
namespace CodeImp.DoomBuilder
|
||||
{
|
||||
partial class DebugConsole
|
||||
{
|
||||
/// <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.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel();
|
||||
this.searchbox = new System.Windows.Forms.ToolStripTextBox();
|
||||
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.autoscroll = new CodeImp.DoomBuilder.Controls.ToolStripCheckBox();
|
||||
this.console = new System.Windows.Forms.RichTextBox();
|
||||
this.clearall = new System.Windows.Forms.ToolStripButton();
|
||||
this.wordwrap = new System.Windows.Forms.ToolStripButton();
|
||||
this.filterselector = new System.Windows.Forms.ToolStripDropDownButton();
|
||||
this.filterlog = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.filterinfo = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.filterwarning = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.filtererrors = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.filterspecial = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.searchclear = new System.Windows.Forms.ToolStripButton();
|
||||
this.alwaysontop = new System.Windows.Forms.ToolStripButton();
|
||||
this.toolStrip1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// toolStrip1
|
||||
//
|
||||
this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
|
||||
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.clearall,
|
||||
this.toolStripSeparator3,
|
||||
this.wordwrap,
|
||||
this.filterselector,
|
||||
this.toolStripSeparator1,
|
||||
this.toolStripLabel1,
|
||||
this.searchbox,
|
||||
this.searchclear,
|
||||
this.toolStripSeparator2,
|
||||
this.alwaysontop,
|
||||
this.autoscroll});
|
||||
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
|
||||
this.toolStrip1.Name = "toolStrip1";
|
||||
this.toolStrip1.Size = new System.Drawing.Size(800, 25);
|
||||
this.toolStrip1.TabIndex = 0;
|
||||
this.toolStrip1.Text = "toolStrip1";
|
||||
//
|
||||
// toolStripSeparator3
|
||||
//
|
||||
this.toolStripSeparator3.Name = "toolStripSeparator3";
|
||||
this.toolStripSeparator3.Size = new System.Drawing.Size(6, 25);
|
||||
//
|
||||
// toolStripSeparator1
|
||||
//
|
||||
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
||||
this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
|
||||
//
|
||||
// toolStripLabel1
|
||||
//
|
||||
this.toolStripLabel1.Name = "toolStripLabel1";
|
||||
this.toolStripLabel1.Size = new System.Drawing.Size(39, 22);
|
||||
this.toolStripLabel1.Text = "Filter: ";
|
||||
//
|
||||
// searchbox
|
||||
//
|
||||
this.searchbox.Name = "searchbox";
|
||||
this.searchbox.Size = new System.Drawing.Size(100, 25);
|
||||
this.searchbox.TextChanged += new System.EventHandler(this.searchbox_TextChanged);
|
||||
//
|
||||
// toolStripSeparator2
|
||||
//
|
||||
this.toolStripSeparator2.Name = "toolStripSeparator2";
|
||||
this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);
|
||||
//
|
||||
// autoscroll
|
||||
//
|
||||
this.autoscroll.Checked = true;
|
||||
this.autoscroll.Margin = new System.Windows.Forms.Padding(3, 3, 0, 2);
|
||||
this.autoscroll.Name = "autoscroll";
|
||||
this.autoscroll.Size = new System.Drawing.Size(84, 20);
|
||||
this.autoscroll.Text = "Auto Scroll";
|
||||
//
|
||||
// console
|
||||
//
|
||||
this.console.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.console.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.console.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.console.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
|
||||
this.console.Location = new System.Drawing.Point(0, 25);
|
||||
this.console.Name = "console";
|
||||
this.console.ReadOnly = true;
|
||||
this.console.Size = new System.Drawing.Size(800, 125);
|
||||
this.console.TabIndex = 1;
|
||||
this.console.Text = "";
|
||||
//
|
||||
// clearall
|
||||
//
|
||||
this.clearall.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
||||
this.clearall.Image = global::CodeImp.DoomBuilder.Properties.Resources.Clear;
|
||||
this.clearall.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.clearall.Name = "clearall";
|
||||
this.clearall.Size = new System.Drawing.Size(23, 22);
|
||||
this.clearall.Text = "Clear All";
|
||||
this.clearall.Click += new System.EventHandler(this.clearall_Click);
|
||||
//
|
||||
// wordwrap
|
||||
//
|
||||
this.wordwrap.CheckOnClick = true;
|
||||
this.wordwrap.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
||||
this.wordwrap.Image = global::CodeImp.DoomBuilder.Properties.Resources.WordWrap;
|
||||
this.wordwrap.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.wordwrap.Name = "wordwrap";
|
||||
this.wordwrap.Size = new System.Drawing.Size(23, 22);
|
||||
this.wordwrap.Text = "Word Wrap";
|
||||
this.wordwrap.Click += new System.EventHandler(this.wordwrap_Click);
|
||||
//
|
||||
// filterselector
|
||||
//
|
||||
this.filterselector.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
||||
this.filterselector.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.filterlog,
|
||||
this.filterinfo,
|
||||
this.filterwarning,
|
||||
this.filtererrors,
|
||||
this.filterspecial});
|
||||
this.filterselector.Image = global::CodeImp.DoomBuilder.Properties.Resources.Filter;
|
||||
this.filterselector.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.filterselector.Name = "filterselector";
|
||||
this.filterselector.Size = new System.Drawing.Size(29, 22);
|
||||
this.filterselector.Text = "Displayed Message Types";
|
||||
//
|
||||
// filterlog
|
||||
//
|
||||
this.filterlog.CheckOnClick = true;
|
||||
this.filterlog.Name = "filterlog";
|
||||
this.filterlog.Size = new System.Drawing.Size(124, 22);
|
||||
this.filterlog.Tag = 1;
|
||||
this.filterlog.Text = "Log";
|
||||
this.filterlog.Click += new System.EventHandler(this.filters_Click);
|
||||
//
|
||||
// filterinfo
|
||||
//
|
||||
this.filterinfo.Checked = true;
|
||||
this.filterinfo.CheckOnClick = true;
|
||||
this.filterinfo.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.filterinfo.Name = "filterinfo";
|
||||
this.filterinfo.Size = new System.Drawing.Size(124, 22);
|
||||
this.filterinfo.Tag = 2;
|
||||
this.filterinfo.Text = "Info";
|
||||
this.filterinfo.Click += new System.EventHandler(this.filters_Click);
|
||||
//
|
||||
// filterwarning
|
||||
//
|
||||
this.filterwarning.Checked = true;
|
||||
this.filterwarning.CheckOnClick = true;
|
||||
this.filterwarning.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.filterwarning.Name = "filterwarning";
|
||||
this.filterwarning.Size = new System.Drawing.Size(124, 22);
|
||||
this.filterwarning.Tag = 4;
|
||||
this.filterwarning.Text = "Warnings";
|
||||
this.filterwarning.Click += new System.EventHandler(this.filters_Click);
|
||||
//
|
||||
// filtererrors
|
||||
//
|
||||
this.filtererrors.Checked = true;
|
||||
this.filtererrors.CheckOnClick = true;
|
||||
this.filtererrors.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.filtererrors.Name = "filtererrors";
|
||||
this.filtererrors.Size = new System.Drawing.Size(124, 22);
|
||||
this.filtererrors.Tag = 8;
|
||||
this.filtererrors.Text = "Errors";
|
||||
this.filtererrors.Click += new System.EventHandler(this.filters_Click);
|
||||
//
|
||||
// filterspecial
|
||||
//
|
||||
this.filterspecial.Checked = true;
|
||||
this.filterspecial.CheckOnClick = true;
|
||||
this.filterspecial.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.filterspecial.Name = "filterspecial";
|
||||
this.filterspecial.Size = new System.Drawing.Size(124, 22);
|
||||
this.filterspecial.Tag = 16;
|
||||
this.filterspecial.Text = "Special";
|
||||
this.filterspecial.Click += new System.EventHandler(this.filters_Click);
|
||||
//
|
||||
// searchclear
|
||||
//
|
||||
this.searchclear.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
||||
this.searchclear.Image = global::CodeImp.DoomBuilder.Properties.Resources.SearchClear;
|
||||
this.searchclear.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.searchclear.Name = "searchclear";
|
||||
this.searchclear.Size = new System.Drawing.Size(23, 22);
|
||||
this.searchclear.Text = "Clear Filter";
|
||||
this.searchclear.Click += new System.EventHandler(this.searchclear_Click);
|
||||
//
|
||||
// alwaysontop
|
||||
//
|
||||
this.alwaysontop.CheckOnClick = true;
|
||||
this.alwaysontop.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
||||
this.alwaysontop.Image = global::CodeImp.DoomBuilder.Properties.Resources.Pin;
|
||||
this.alwaysontop.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.alwaysontop.Name = "alwaysontop";
|
||||
this.alwaysontop.Size = new System.Drawing.Size(23, 22);
|
||||
this.alwaysontop.Text = "Stay on Top";
|
||||
//
|
||||
// DebugConsole
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||
this.Controls.Add(this.console);
|
||||
this.Controls.Add(this.toolStrip1);
|
||||
this.Name = "DebugConsole";
|
||||
this.Size = new System.Drawing.Size(800, 150);
|
||||
this.toolStrip1.ResumeLayout(false);
|
||||
this.toolStrip1.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.ToolStrip toolStrip1;
|
||||
private System.Windows.Forms.ToolStripButton clearall;
|
||||
private System.Windows.Forms.ToolStripDropDownButton filterselector;
|
||||
private System.Windows.Forms.ToolStripMenuItem filterlog;
|
||||
private System.Windows.Forms.ToolStripMenuItem filterwarning;
|
||||
private System.Windows.Forms.ToolStripMenuItem filtererrors;
|
||||
private System.Windows.Forms.ToolStripMenuItem filterspecial;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||
private System.Windows.Forms.ToolStripLabel toolStripLabel1;
|
||||
private System.Windows.Forms.ToolStripTextBox searchbox;
|
||||
private System.Windows.Forms.ToolStripButton searchclear;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
||||
private System.Windows.Forms.ToolStripMenuItem filterinfo;
|
||||
private System.Windows.Forms.ToolStripButton wordwrap;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
|
||||
private System.Windows.Forms.RichTextBox console;
|
||||
private System.Windows.Forms.ToolStripButton alwaysontop;
|
||||
private CodeImp.DoomBuilder.Controls.ToolStripCheckBox autoscroll;
|
||||
}
|
||||
}
|
123
Source/Core/Controls/DebugConsole.resx
Normal file
123
Source/Core/Controls/DebugConsole.resx
Normal 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>
|
|
@ -1621,8 +1621,9 @@ namespace CodeImp.DoomBuilder
|
|||
public static void WriteLogLine(string line)
|
||||
{
|
||||
#if DEBUG
|
||||
// Output to console
|
||||
// Output to consoles
|
||||
Console.WriteLine(line);
|
||||
DebugConsole.WriteLine(DebugMessageType.Log, line); //mxd
|
||||
#endif
|
||||
// Write to log file
|
||||
try { File.AppendAllText(logfile, line + Environment.NewLine); }
|
||||
|
@ -1633,8 +1634,9 @@ namespace CodeImp.DoomBuilder
|
|||
public static void WriteLog(string text)
|
||||
{
|
||||
#if DEBUG
|
||||
// Output to console
|
||||
// Output to consoles
|
||||
Console.Write(text);
|
||||
DebugConsole.Write(DebugMessageType.Log, text);
|
||||
#endif
|
||||
|
||||
// Write to log file
|
||||
|
|
109
Source/Core/General/MurmurHash2.cs
Normal file
109
Source/Core/General/MurmurHash2.cs
Normal file
|
@ -0,0 +1,109 @@
|
|||
#region ============== License
|
||||
|
||||
/***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is HashTableHashing.MurmurHash2.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Davy Landman.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2009
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace CodeImp.DoomBuilder
|
||||
{
|
||||
internal static class MurmurHash2
|
||||
{
|
||||
private const UInt32 m = 0x5bd1e995;
|
||||
private const Int32 r = 24;
|
||||
|
||||
public static UInt32 Hash(string data)
|
||||
{
|
||||
return Hash(Encoding.ASCII.GetBytes(data), 0xc58f1a7b);
|
||||
}
|
||||
|
||||
private static unsafe UInt32 Hash(Byte[] data, UInt32 seed)
|
||||
{
|
||||
Int32 length = data.Length;
|
||||
if(length == 0) return 0;
|
||||
|
||||
UInt32 h = seed ^ (UInt32)length;
|
||||
Int32 remainingBytes = length & 3; // mod 4
|
||||
Int32 numberOfLoops = length >> 2; // div 4
|
||||
|
||||
fixed(byte* firstByte = &(data[0]))
|
||||
{
|
||||
UInt32* realData = (UInt32*)firstByte;
|
||||
while(numberOfLoops != 0)
|
||||
{
|
||||
UInt32 k = *realData;
|
||||
k *= m;
|
||||
k ^= k >> r;
|
||||
k *= m;
|
||||
|
||||
h *= m;
|
||||
h ^= k;
|
||||
numberOfLoops--;
|
||||
realData++;
|
||||
}
|
||||
|
||||
switch(remainingBytes)
|
||||
{
|
||||
case 3:
|
||||
h ^= (UInt16)(*realData);
|
||||
h ^= ((UInt32)(*(((Byte*)(realData)) + 2))) << 16;
|
||||
h *= m;
|
||||
break;
|
||||
case 2:
|
||||
h ^= (UInt16)(*realData);
|
||||
h *= m;
|
||||
break;
|
||||
case 1:
|
||||
h ^= *((Byte*)realData);
|
||||
h *= m;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Do a few final mixes of the hash to ensure the last few
|
||||
// bytes are well-incorporated.
|
||||
h ^= h >> 13;
|
||||
h *= m;
|
||||
h ^= h >> 15;
|
||||
|
||||
return h;
|
||||
}
|
||||
}
|
||||
}
|
14
Source/Core/Properties/Resources.Designer.cs
generated
14
Source/Core/Properties/Resources.Designer.cs
generated
|
@ -102,6 +102,13 @@ namespace CodeImp.DoomBuilder.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap Clear {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("Clear", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap ClearTextures {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("ClearTextures", resourceCulture);
|
||||
|
@ -816,6 +823,13 @@ namespace CodeImp.DoomBuilder.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap WordWrap {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("WordWrap", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap Zoom {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("Zoom", resourceCulture);
|
||||
|
|
|
@ -121,15 +121,15 @@
|
|||
<data name="Zoom" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Zoom.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Clear" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Clear.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Cut" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Cut.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ArrowUp" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ArrowUp.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ClearTextures" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ClearTextures.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Keyboard" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Keyboard.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
|
@ -172,8 +172,8 @@
|
|||
<data name="Grid4" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Grid4.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Status10" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Status10.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="MixedThings" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\MixedThings.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Marine" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Marine.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
|
@ -202,8 +202,8 @@
|
|||
<data name="ThingStatistics" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ThingStatistics.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Grid2_arrowup" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Grid2_arrowup.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="Redo" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Redo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Grid2" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Grid2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
|
@ -274,6 +274,9 @@
|
|||
<data name="treeview" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\treeview.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Status1" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Status1.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="PasteSpecial" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\PasteSpecial.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
|
@ -298,6 +301,9 @@
|
|||
<data name="InfoLine" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\InfoLine.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Status10" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Status10.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="MissingTexture" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\MissingTexture.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
|
@ -343,8 +349,11 @@
|
|||
<data name="Script2" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Script2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Redo" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Redo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="ClearTextures" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ClearTextures.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Status2" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Status2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Prefab" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Prefab.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
|
@ -364,8 +373,8 @@
|
|||
<data name="Status12" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Status12.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Status2" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Status2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="Light_animate" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Light_animate.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Link" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Link.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
|
@ -391,8 +400,8 @@
|
|||
<data name="ViewTextureFloor" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ViewTextureFloor.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Light_animate" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Light_animate.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="Grid2_arrowup" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Grid2_arrowup.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Pin" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Pin.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
|
@ -427,8 +436,8 @@
|
|||
<data name="Status11" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Status11.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Status1" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Status1.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="ScreenshotActiveWindow" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ScreenshotActiveWindow.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="WarningLarge" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\WarningLarge.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
|
@ -442,10 +451,7 @@
|
|||
<data name="Check" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Check.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ScreenshotActiveWindow" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ScreenshotActiveWindow.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="MixedThings" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\MixedThings.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="WordWrap" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\WordWrap.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
BIN
Source/Core/Resources/Clear.png
Normal file
BIN
Source/Core/Resources/Clear.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 706 B |
BIN
Source/Core/Resources/WordWrap.png
Normal file
BIN
Source/Core/Resources/WordWrap.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
|
@ -416,38 +416,46 @@ namespace CodeImp.DoomBuilder.VisualModes
|
|||
|
||||
//mxd
|
||||
[BeginAction("movethingleft", BaseAction = true)]
|
||||
protected void moveSelectedThingsLeft() {
|
||||
moveSelectedThings(new Vector2D(0f, -General.Map.Grid.GridSize), false);
|
||||
protected void MoveSelectedThingsLeft()
|
||||
{
|
||||
MoveSelectedThings(new Vector2D(0f, -General.Map.Grid.GridSize), false);
|
||||
}
|
||||
//mxd
|
||||
[BeginAction("movethingright", BaseAction = true)]
|
||||
protected void moveSelectedThingsRight() {
|
||||
moveSelectedThings(new Vector2D(0f, General.Map.Grid.GridSize), false);
|
||||
protected void MoveSelectedThingsRight()
|
||||
{
|
||||
MoveSelectedThings(new Vector2D(0f, General.Map.Grid.GridSize), false);
|
||||
}
|
||||
//mxd
|
||||
[BeginAction("movethingfwd", BaseAction = true)]
|
||||
protected void moveSelectedThingsForward() {
|
||||
moveSelectedThings(new Vector2D(-General.Map.Grid.GridSize, 0f), false);
|
||||
protected void MoveSelectedThingsForward()
|
||||
{
|
||||
MoveSelectedThings(new Vector2D(-General.Map.Grid.GridSize, 0f), false);
|
||||
}
|
||||
//mxd
|
||||
[BeginAction("movethingback", BaseAction = true)]
|
||||
protected void moveSelectedThingsBackward() {
|
||||
moveSelectedThings(new Vector2D(General.Map.Grid.GridSize, 0f), false);
|
||||
protected void MoveSelectedThingsBackward()
|
||||
{
|
||||
MoveSelectedThings(new Vector2D(General.Map.Grid.GridSize, 0f), false);
|
||||
}
|
||||
|
||||
//mxd
|
||||
[BeginAction("placethingatcursor", BaseAction = true)]
|
||||
protected void placeThingAtCursor() {
|
||||
protected void PlaceThingAtCursor()
|
||||
{
|
||||
Vector2D hitpos = GetHitPosition();
|
||||
if (!hitpos.IsFinite()) {
|
||||
if (!hitpos.IsFinite())
|
||||
{
|
||||
General.Interface.DisplayStatus(StatusType.Warning, "Cannot place Thing here");
|
||||
return;
|
||||
}
|
||||
|
||||
moveSelectedThings(new Vector2D((float)Math.Round(hitpos.x), (float)Math.Round(hitpos.y)), true);
|
||||
MoveSelectedThings(new Vector2D((float)Math.Round(hitpos.x), (float)Math.Round(hitpos.y)), true);
|
||||
}
|
||||
|
||||
//mxd.
|
||||
public Vector2D GetHitPosition() {
|
||||
public Vector2D GetHitPosition()
|
||||
{
|
||||
Vector3D start = General.Map.VisualCamera.Position;
|
||||
Vector3D delta = General.Map.VisualCamera.Target - General.Map.VisualCamera.Position;
|
||||
delta = delta.GetFixedLength(General.Settings.ViewDistance * 0.98f);
|
||||
|
@ -456,12 +464,14 @@ namespace CodeImp.DoomBuilder.VisualModes
|
|||
if (target.picked == null) return new Vector2D(float.NaN, float.NaN);
|
||||
|
||||
//now find where exactly did we hit
|
||||
if (target.picked is VisualGeometry) {
|
||||
if (target.picked is VisualGeometry)
|
||||
{
|
||||
VisualGeometry vg = target.picked as VisualGeometry;
|
||||
return getIntersection(start, start + delta, new Vector3D(vg.BoundingBox[0].X, vg.BoundingBox[0].Y, vg.BoundingBox[0].Z), new Vector3D(vg.Vertices[0].nx, vg.Vertices[0].ny, vg.Vertices[0].nz));
|
||||
}
|
||||
|
||||
if (target.picked is VisualThing) {
|
||||
if (target.picked is VisualThing)
|
||||
{
|
||||
VisualThing vt = target.picked as VisualThing;
|
||||
return getIntersection(start, start + delta, new Vector3D(vt.BoundingBox[0].X, vt.BoundingBox[0].Y, vt.BoundingBox[0].Z), D3DDevice.V3D(vt.Center - vt.PositionV3));
|
||||
}
|
||||
|
@ -477,7 +487,7 @@ namespace CodeImp.DoomBuilder.VisualModes
|
|||
}
|
||||
|
||||
//mxd. Should move selected things in specified direction
|
||||
protected abstract void moveSelectedThings(Vector2D direction, bool absolutePosition);
|
||||
protected virtual void MoveSelectedThings(Vector2D direction, bool absolutePosition) { }
|
||||
|
||||
#endregion
|
||||
|
||||
|
|
17
Source/Core/Windows/MainForm.Designer.cs
generated
17
Source/Core/Windows/MainForm.Designer.cs
generated
|
@ -228,6 +228,7 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
this.linedefinfo = new CodeImp.DoomBuilder.Controls.LinedefInfoPanel();
|
||||
this.thinginfo = new CodeImp.DoomBuilder.Controls.ThingInfoPanel();
|
||||
this.sectorinfo = new CodeImp.DoomBuilder.Controls.SectorInfoPanel();
|
||||
this.console = new CodeImp.DoomBuilder.DebugConsole();
|
||||
this.redrawtimer = new System.Windows.Forms.Timer(this.components);
|
||||
this.display = new RenderTargetControl();
|
||||
this.processor = new System.Windows.Forms.Timer(this.components);
|
||||
|
@ -363,7 +364,7 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
this.menuhelp});
|
||||
this.menumain.Location = new System.Drawing.Point(0, 0);
|
||||
this.menumain.Name = "menumain";
|
||||
this.menumain.Size = new System.Drawing.Size(420, 24);
|
||||
this.menumain.Size = new System.Drawing.Size(328, 24);
|
||||
this.menumain.TabIndex = 0;
|
||||
//
|
||||
// menufile
|
||||
|
@ -2009,6 +2010,7 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
this.panelinfo.Controls.Add(this.labelcollapsedinfo);
|
||||
this.panelinfo.Controls.Add(this.modename);
|
||||
this.panelinfo.Controls.Add(this.buttontoggleinfo);
|
||||
this.panelinfo.Controls.Add(this.console);
|
||||
this.panelinfo.Controls.Add(this.vertexinfo);
|
||||
this.panelinfo.Controls.Add(this.linedefinfo);
|
||||
this.panelinfo.Controls.Add(this.thinginfo);
|
||||
|
@ -2125,6 +2127,16 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
this.sectorinfo.TabIndex = 2;
|
||||
this.sectorinfo.Visible = false;
|
||||
//
|
||||
// console
|
||||
//
|
||||
this.console.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.console.Location = new System.Drawing.Point(3, 3);
|
||||
this.console.Name = "console";
|
||||
this.console.Size = new System.Drawing.Size(851, 98);
|
||||
this.console.TabIndex = 10;
|
||||
//
|
||||
// redrawtimer
|
||||
//
|
||||
this.redrawtimer.Interval = 1;
|
||||
|
@ -2239,7 +2251,7 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
this.KeyPreview = true;
|
||||
this.MainMenuStrip = this.menumain;
|
||||
this.Name = "MainForm";
|
||||
this.Opacity = 0;
|
||||
this.Opacity = 1;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
|
||||
this.Text = "GZDoom Builder";
|
||||
this.Deactivate += new System.EventHandler(this.MainForm_Deactivate);
|
||||
|
@ -2470,5 +2482,6 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
private ToolStripMenuItem modelsdontshow;
|
||||
private ToolStripMenuItem modelsshowselection;
|
||||
private ToolStripMenuItem modelsshowall;
|
||||
private DebugConsole console;
|
||||
}
|
||||
}
|
|
@ -256,6 +256,13 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
blinkTimer = new System.Timers.Timer {Interval = 500};
|
||||
blinkTimer.Elapsed += blinkTimer_Elapsed;
|
||||
|
||||
//mxd. Debug Console
|
||||
#if DEBUG
|
||||
modename.Visible = false;
|
||||
#else
|
||||
console.Visible = false;
|
||||
#endif
|
||||
|
||||
//mxd. Hints
|
||||
hintsPanel = new HintsPanel();
|
||||
hintsDocker = new Docker("hints", "Help", hintsPanel);
|
||||
|
@ -3092,6 +3099,9 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
if(sectorinfo.Visible) sectorinfo.Hide();
|
||||
if(thinginfo.Visible) thinginfo.Hide();
|
||||
modename.Visible = false;
|
||||
#if DEBUG
|
||||
console.Visible = false; //mxd
|
||||
#endif
|
||||
statistics.Visible = false; //mxd
|
||||
labelcollapsedinfo.Visible = true;
|
||||
itemtoggleinfo.Checked = false;
|
||||
|
@ -3143,7 +3153,11 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
if(thinginfo.Visible) thinginfo.Hide();
|
||||
labelcollapsedinfo.Text = modename.Text;
|
||||
labelcollapsedinfo.Refresh();
|
||||
#if DEBUG
|
||||
console.Visible = true;
|
||||
#else
|
||||
modename.Visible = showModeName;
|
||||
#endif
|
||||
modename.Refresh();
|
||||
statistics.Visible = showModeName; //mxd
|
||||
|
||||
|
@ -3211,6 +3225,9 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
|
||||
lastinfoobject = l;
|
||||
modename.Visible = false;
|
||||
#if DEBUG
|
||||
console.Visible = console.AlwaysOnTop; //mxd
|
||||
#endif
|
||||
statistics.Visible = false; //mxd
|
||||
if(vertexinfo.Visible) vertexinfo.Hide();
|
||||
if(sectorinfo.Visible) sectorinfo.Hide();
|
||||
|
@ -3241,6 +3258,9 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
|
||||
lastinfoobject = v;
|
||||
modename.Visible = false;
|
||||
#if DEBUG
|
||||
console.Visible = console.AlwaysOnTop; //mxd
|
||||
#endif
|
||||
statistics.Visible = false; //mxd
|
||||
if (linedefinfo.Visible) linedefinfo.Hide();
|
||||
if (sectorinfo.Visible) sectorinfo.Hide();
|
||||
|
@ -3264,6 +3284,9 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
|
||||
lastinfoobject = s;
|
||||
modename.Visible = false;
|
||||
#if DEBUG
|
||||
console.Visible = console.AlwaysOnTop; //mxd
|
||||
#endif
|
||||
statistics.Visible = false; //mxd
|
||||
if (linedefinfo.Visible) linedefinfo.Hide();
|
||||
if (vertexinfo.Visible) vertexinfo.Hide();
|
||||
|
@ -3295,6 +3318,9 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
|
||||
lastinfoobject = t;
|
||||
modename.Visible = false;
|
||||
#if DEBUG
|
||||
console.Visible = console.AlwaysOnTop; //mxd
|
||||
#endif
|
||||
statistics.Visible = false; //mxd
|
||||
if(linedefinfo.Visible) linedefinfo.Hide();
|
||||
if(vertexinfo.Visible) vertexinfo.Hide();
|
||||
|
|
|
@ -519,7 +519,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
|||
}
|
||||
|
||||
//mxd
|
||||
protected override void moveSelectedThings(Vector2D direction, bool absolutePosition) {
|
||||
protected override void MoveSelectedThings(Vector2D direction, bool absolutePosition)
|
||||
{
|
||||
List<VisualThing> visualThings = GetSelectedVisualThings(true);
|
||||
if (visualThings.Count == 0) return;
|
||||
|
||||
|
@ -531,7 +532,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
|||
|
||||
//move things...
|
||||
Vector3D[] translatedCoords = translateCoordinates(coords, direction, absolutePosition);
|
||||
for (int i = 0; i < visualThings.Count; i++) {
|
||||
for (int i = 0; i < visualThings.Count; i++)
|
||||
{
|
||||
BaseVisualThing t = visualThings[i] as BaseVisualThing;
|
||||
t.OnMove(translatedCoords[i]);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue