commit ded2c99e48d3ef979485fc05521b1145580544ad Author: acidvegas Date: Fri Jun 2 14:49:13 2023 -0400 Initial commit diff --git a/.screens/preview.png b/.screens/preview.png new file mode 100644 index 0000000..0eb2729 Binary files /dev/null and b/.screens/preview.png differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..7964cd4 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +![](.screens/preview.png) + +###### Requirements +* [Microsoft .NET Framework Version 2.0 Redistributable](https://www.microsoft.com/en-us/download/details.aspx?id=6523) + +###### Mirrors +- [acid.vegas](https://acid.vegas/asciipumper) +- [SuperNETs](https://git.supernets.org/ircart/asciipumper) +- [GitHub](https://github.com/ircart/asciipumper) +- [GitLab](https://gitlab.com/ircart/asciipumper) + +###### Credits +* Lampiasis diff --git a/asciipumper/AsciiPumper.exe b/asciipumper/AsciiPumper.exe new file mode 100644 index 0000000..523960a Binary files /dev/null and b/asciipumper/AsciiPumper.exe differ diff --git a/asciipumper/AsciiPumper.exe.config b/asciipumper/AsciiPumper.exe.config new file mode 100644 index 0000000..3da825c --- /dev/null +++ b/asciipumper/AsciiPumper.exe.config @@ -0,0 +1,110 @@ + + + + +
+
+ + + + + + Consolas + + + False + + + True + + + False + + + 20 + + + 10 + + + Salmon + + + DimGray + + + 80 + + + 15 + + + 0 + + + 4 + + + 1 + + + 10 + + + True + + + + + asciipumper.txt + + + + + + + Consolas + + + 10 + + + True + + + False + + + False + + + 20 + + + 10 + + + OldLace + + + DarkGray + + + 80 + + + 15 + + + 0 + + + 4 + + + 1 + + + + \ No newline at end of file diff --git a/asciipumper/AsciiPumperSetup.msi b/asciipumper/AsciiPumperSetup.msi new file mode 100644 index 0000000..1836483 Binary files /dev/null and b/asciipumper/AsciiPumperSetup.msi differ diff --git a/asciipumper/MainIcon.ico b/asciipumper/MainIcon.ico new file mode 100644 index 0000000..52a2c3c Binary files /dev/null and b/asciipumper/MainIcon.ico differ diff --git a/asciipumper/setup.exe b/asciipumper/setup.exe new file mode 100644 index 0000000..9a8ae27 Binary files /dev/null and b/asciipumper/setup.exe differ diff --git a/source/AboutBox1.Designer.cs b/source/AboutBox1.Designer.cs new file mode 100644 index 0000000..fd13fcd --- /dev/null +++ b/source/AboutBox1.Designer.cs @@ -0,0 +1,187 @@ +namespace AsciiPumper +{ + partial class AboutBox1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox1)); + this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.logoPictureBox = new System.Windows.Forms.PictureBox(); + this.labelProductName = new System.Windows.Forms.Label(); + this.labelVersion = new System.Windows.Forms.Label(); + this.labelCopyright = new System.Windows.Forms.Label(); + this.labelCompanyName = new System.Windows.Forms.Label(); + this.textBoxDescription = new System.Windows.Forms.TextBox(); + this.okButton = new System.Windows.Forms.Button(); + this.tableLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); + this.SuspendLayout(); + // + // tableLayoutPanel + // + this.tableLayoutPanel.ColumnCount = 2; + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33F)); + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67F)); + this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0); + this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0); + this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1); + this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 2); + this.tableLayoutPanel.Controls.Add(this.labelCompanyName, 1, 3); + this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4); + this.tableLayoutPanel.Controls.Add(this.okButton, 1, 5); + this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel.Location = new System.Drawing.Point(9, 9); + this.tableLayoutPanel.Name = "tableLayoutPanel"; + this.tableLayoutPanel.RowCount = 6; + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); + this.tableLayoutPanel.Size = new System.Drawing.Size(694, 324); + this.tableLayoutPanel.TabIndex = 0; + // + // logoPictureBox + // + this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.logoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("logoPictureBox.Image"))); + this.logoPictureBox.Location = new System.Drawing.Point(3, 3); + this.logoPictureBox.Name = "logoPictureBox"; + this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 6); + this.logoPictureBox.Size = new System.Drawing.Size(223, 318); + this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.logoPictureBox.TabIndex = 12; + this.logoPictureBox.TabStop = false; + // + // labelProductName + // + this.labelProductName.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelProductName.Location = new System.Drawing.Point(235, 0); + this.labelProductName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelProductName.MaximumSize = new System.Drawing.Size(0, 17); + this.labelProductName.Name = "labelProductName"; + this.labelProductName.Size = new System.Drawing.Size(456, 17); + this.labelProductName.TabIndex = 19; + this.labelProductName.Text = "Product Name"; + this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // labelVersion + // + this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelVersion.Location = new System.Drawing.Point(235, 32); + this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelVersion.MaximumSize = new System.Drawing.Size(0, 17); + this.labelVersion.Name = "labelVersion"; + this.labelVersion.Size = new System.Drawing.Size(456, 17); + this.labelVersion.TabIndex = 0; + this.labelVersion.Text = "Version"; + this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // labelCopyright + // + this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelCopyright.Location = new System.Drawing.Point(235, 64); + this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 17); + this.labelCopyright.Name = "labelCopyright"; + this.labelCopyright.Size = new System.Drawing.Size(456, 17); + this.labelCopyright.TabIndex = 21; + this.labelCopyright.Text = "Copyright"; + this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // labelCompanyName + // + this.labelCompanyName.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelCompanyName.Location = new System.Drawing.Point(235, 96); + this.labelCompanyName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelCompanyName.MaximumSize = new System.Drawing.Size(0, 17); + this.labelCompanyName.Name = "labelCompanyName"; + this.labelCompanyName.Size = new System.Drawing.Size(456, 17); + this.labelCompanyName.TabIndex = 22; + this.labelCompanyName.Text = "Company Name"; + this.labelCompanyName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // textBoxDescription + // + this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBoxDescription.Location = new System.Drawing.Point(235, 131); + this.textBoxDescription.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3); + this.textBoxDescription.Multiline = true; + this.textBoxDescription.Name = "textBoxDescription"; + this.textBoxDescription.ReadOnly = true; + this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBoxDescription.Size = new System.Drawing.Size(456, 156); + this.textBoxDescription.TabIndex = 23; + this.textBoxDescription.TabStop = false; + this.textBoxDescription.Text = "Description"; + // + // okButton + // + this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.okButton.Location = new System.Drawing.Point(616, 298); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(75, 23); + this.okButton.TabIndex = 24; + this.okButton.Text = "&OK"; + // + // AboutBox1 + // + this.AcceptButton = this.okButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(712, 342); + this.Controls.Add(this.tableLayoutPanel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AboutBox1"; + this.Padding = new System.Windows.Forms.Padding(9); + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "About Ascii Pumper"; + this.Load += new System.EventHandler(this.AboutBox1_Load); + this.tableLayoutPanel.ResumeLayout(false); + this.tableLayoutPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; + private System.Windows.Forms.PictureBox logoPictureBox; + private System.Windows.Forms.Label labelProductName; + private System.Windows.Forms.Label labelVersion; + private System.Windows.Forms.Label labelCopyright; + private System.Windows.Forms.Label labelCompanyName; + private System.Windows.Forms.TextBox textBoxDescription; + private System.Windows.Forms.Button okButton; + } +} diff --git a/source/AboutBox1.cs b/source/AboutBox1.cs new file mode 100644 index 0000000..6804054 --- /dev/null +++ b/source/AboutBox1.cs @@ -0,0 +1,165 @@ +#region Copyright (c) 2007, PP4L Software +/************************************************************************************ + +Copyright 2007, PP4L Software +Author: Lampiasis + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +'***********************************************************************************/ +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; +using System.Reflection; + +namespace AsciiPumper +{ + partial class AboutBox1 : Form + { + public AboutBox1() + { + InitializeComponent(); + + // Initialize the AboutBox to display the product information from the assembly information. + // Change assembly information settings for your application through either: + // - Project->Properties->Application->Assembly Information + // - AssemblyInfo.cs + this.Text = String.Format("About {0}", AssemblyTitle); + //this.labelProductName.Text = AssemblyProduct; + this.labelProductName.Text = "Ascii Pumper"; + this.labelVersion.Text = String.Format("Version {0}", AssemblyVersion); + this.labelCopyright.Text = AssemblyCopyright; + this.labelCompanyName.Text = AssemblyCompany; + this.textBoxDescription.Text = AssemblyDescription + "\r\n\r\nya we pumpin'!\r\n\r\n"; + this.textBoxDescription.Text += @" +Thanks vap0r for asciipumper.txt, ramprat for bug reports and all the +pumpers for their input. + +http://code.google.com/p/asciipumper/ +Copyright (C) 2007 Lampiasis + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +"; + } + + #region Assembly Attribute Accessors + + public string AssemblyTitle + { + get + { + // Get all Title attributes on this assembly + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); + // If there is at least one Title attribute + if (attributes.Length > 0) + { + // Select the first one + AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; + // If it is not an empty string, return it + if (titleAttribute.Title != "") + return titleAttribute.Title; + } + // If there was no Title attribute, or if the Title attribute was the empty string, return the .exe name + return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); + } + } + + public string AssemblyVersion + { + get + { + return Assembly.GetExecutingAssembly().GetName().Version.ToString(); + } + } + + public string AssemblyDescription + { + get + { + // Get all Description attributes on this assembly + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); + // If there aren't any Description attributes, return an empty string + if (attributes.Length == 0) + return ""; + // If there is a Description attribute, return its value + return ((AssemblyDescriptionAttribute)attributes[0]).Description; + } + } + + public string AssemblyProduct + { + get + { + // Get all Product attributes on this assembly + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); + // If there aren't any Product attributes, return an empty string + if (attributes.Length == 0) + return ""; + // If there is a Product attribute, return its value + return ((AssemblyProductAttribute)attributes[0]).Product; + } + } + + public string AssemblyCopyright + { + get + { + // Get all Copyright attributes on this assembly + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); + // If there aren't any Copyright attributes, return an empty string + if (attributes.Length == 0) + return ""; + // If there is a Copyright attribute, return its value + return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; + } + } + + public string AssemblyCompany + { + get + { + // Get all Company attributes on this assembly + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); + // If there aren't any Company attributes, return an empty string + if (attributes.Length == 0) + return ""; + // If there is a Company attribute, return its value + return ((AssemblyCompanyAttribute)attributes[0]).Company; + } + } + #endregion + + private void AboutBox1_Load(object sender, EventArgs e) + { + + } + } +} diff --git a/source/AboutBox1.resx b/source/AboutBox1.resx new file mode 100644 index 0000000..3df4dcb --- /dev/null +++ b/source/AboutBox1.resx @@ -0,0 +1,610 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + AZ+4Ui+mkTlKAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/source/AsciiPumper.csproj b/source/AsciiPumper.csproj new file mode 100644 index 0000000..f2f7c8c --- /dev/null +++ b/source/AsciiPumper.csproj @@ -0,0 +1,190 @@ + + + Debug + AnyCPU + 9.0.20404 + 2.0 + {3F20CEF2-815A-43E2-9071-0D5462F245BF} + WinExe + Properties + AsciiPumper + AsciiPumper + 4DD6994A8DC8FB07112F22D88EE79355E4A1AEDB + AsciiPumper_TemporaryKey.pfx + true + true + false + Resources\MainIcon.ico + LocalIntranet + + + 2.0 + + + true + asciipumper.pfx + c:\temp\AsciiPumper\ + true + Disk + false + Foreground + 7 + Days + false + false + true + http://code.google.com/p/asciipumper/ + Ascii Pumper + PP4L + false + 1 + 1.1.0.%2a + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + AboutBox1.cs + + + + + UserControl + + + ColorSelector.cs + + + + + Form + + + MainForm.cs + + + Form + + + OptionsForm.cs + + + + UserControl + + + PaintCanvas.cs + + + + + Designer + AboutBox1.cs + + + Designer + ColorSelector.cs + + + Designer + MainForm.cs + + + Designer + OptionsForm.cs + + + Designer + PaintCanvas.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + Designer + PumpForm.cs + + + True + Resources.resx + True + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + Form + + + PumpForm.cs + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + + + \ No newline at end of file diff --git a/source/AsciiPumper.exe.config b/source/AsciiPumper.exe.config new file mode 100644 index 0000000..3da825c --- /dev/null +++ b/source/AsciiPumper.exe.config @@ -0,0 +1,110 @@ + + + + +
+
+ + + + + + Consolas + + + False + + + True + + + False + + + 20 + + + 10 + + + Salmon + + + DimGray + + + 80 + + + 15 + + + 0 + + + 4 + + + 1 + + + 10 + + + True + + + + + asciipumper.txt + + + + + + + Consolas + + + 10 + + + True + + + False + + + False + + + 20 + + + 10 + + + OldLace + + + DarkGray + + + 80 + + + 15 + + + 0 + + + 4 + + + 1 + + + + \ No newline at end of file diff --git a/source/CellInfo.cs b/source/CellInfo.cs new file mode 100644 index 0000000..0353dde --- /dev/null +++ b/source/CellInfo.cs @@ -0,0 +1,69 @@ +#region Copyright (c) 2007, PP4L Software +/************************************************************************************ + +Copyright 2007, PP4L Software +Author: Lampiasis + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +'***********************************************************************************/ +#endregion + + +using System; +using System.Collections.Generic; +using System.Text; + +namespace AsciiPumper +{ + public class CellInfo + { + public CellInfo() + { + Selected = false; + Character = ' '; + BackColor = 1; + ForeColor = 0; + } + + public CellInfo(char character, byte backcolor, byte forecolor) + { + Selected = false; + Character = character; + BackColor = backcolor; + ForeColor = forecolor; + } + + public bool Bold = false; + public bool Underlined = false; + + /// + /// Gets or sets the Selected. + /// + public bool Selected; + + + public char Character; + + + public byte BackColor; + + + + public byte ForeColor; + + + } +} diff --git a/source/ColorPalette.cs b/source/ColorPalette.cs new file mode 100644 index 0000000..c4fb0e9 --- /dev/null +++ b/source/ColorPalette.cs @@ -0,0 +1,99 @@ +#region Copyright (c) 2007, PP4L Software +/************************************************************************************ + +Copyright 2007, PP4L Software +Author: Lampiasis + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +'***********************************************************************************/ +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; + +namespace AsciiPumper +{ + public class ColorPalette : List + { + + public SolidBrush [] SolidBrushes = new SolidBrush[16]; + + /* + 0 white + 1 black + 2 blue (navy) + 3 green + 4 red + 5 brown (maroon) + 6 purple + 7 orange (olive) + 8 yellow + 9 lt.green (lime) + 10 teal (a kinda green/blue cyan) + 11 lt.cyan (cyan ?) (aqua) + 12 lt.blue (royal) + 13 pink (light purple) (fuchsia) + 14 grey + 15 lt.grey (silver) + */ + public ColorPalette() : base(16) + { + + + this.Add(Color.White); + this.Add(Color.Black); + this.Add(Color.FromArgb(0, 0, 127)); // this.Add(Color.Blue); + this.Add(Color.FromArgb(0, 147, 0)); // this.Add(Color.Green); + this.Add(Color.FromArgb(255, 0, 0)); // this.Add(Color.Red); + this.Add(Color.FromArgb(127, 0, 0)); // this.Add(Color.Brown); + this.Add(Color.FromArgb(156, 0, 156)); // this.Add(Color.Purple); + this.Add(Color.FromArgb(252, 127, 0)); // this.Add(Color.Orange); + this.Add(Color.FromArgb(255, 255, 0)); // this.Add( Color.Yellow); + this.Add(Color.FromArgb(0, 252, 0)); // this.Add( Color.LightGreen); + this.Add(Color.FromArgb(0, 147, 147)); // this.Add( Color.Teal); + this.Add(Color.FromArgb(0, 255, 255)); // this.Add( Color.LightCyan); + this.Add(Color.FromArgb(0, 0, 252)); // this.Add( Color.LightBlue); + this.Add(Color.FromArgb(255, 0, 255)); // this.Add( Color.Pink); + this.Add(Color.FromArgb(127, 127, 127)); // this.Add( Color.Gray); + this.Add(Color.FromArgb(210, 210, 210)); // this.Add(Color.LightGray); + + for(int i = 0; i < 16; i++) + SolidBrushes[i] = new SolidBrush(this[i]); + } + + public byte FindClosestColor(Color color) + { + byte smallestindex = 0; + int smallestdistance = int.MaxValue; + + for (byte i = 0; i < this.Count; i++) + { + + Color curcolor = this[i]; + int distance = (curcolor.R - color.R) * (curcolor.R - color.R) + (curcolor.G - color.G) * (curcolor.G - color.G) + (curcolor.B - color.B) * (curcolor.B - color.B); + if (distance < smallestdistance) + { + smallestdistance = distance; + smallestindex = i; + } + } + + return smallestindex; + } + } +} diff --git a/source/ColorSelector.Designer.cs b/source/ColorSelector.Designer.cs new file mode 100644 index 0000000..8965e58 --- /dev/null +++ b/source/ColorSelector.Designer.cs @@ -0,0 +1,317 @@ +namespace AsciiPumper +{ + partial class ColorSelector + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.colorLayoutPanel = new System.Windows.Forms.FlowLayoutPanel(); + this.color0 = new System.Windows.Forms.PictureBox(); + this.color1 = new System.Windows.Forms.PictureBox(); + this.color2 = new System.Windows.Forms.PictureBox(); + this.color3 = new System.Windows.Forms.PictureBox(); + this.color4 = new System.Windows.Forms.PictureBox(); + this.color5 = new System.Windows.Forms.PictureBox(); + this.color7 = new System.Windows.Forms.PictureBox(); + this.color8 = new System.Windows.Forms.PictureBox(); + this.color9 = new System.Windows.Forms.PictureBox(); + this.color10 = new System.Windows.Forms.PictureBox(); + this.color11 = new System.Windows.Forms.PictureBox(); + this.color12 = new System.Windows.Forms.PictureBox(); + this.color13 = new System.Windows.Forms.PictureBox(); + this.color14 = new System.Windows.Forms.PictureBox(); + this.color15 = new System.Windows.Forms.PictureBox(); + this.color6 = new System.Windows.Forms.PictureBox(); + this.colorLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.color0)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.color1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.color2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.color3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.color4)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.color5)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.color7)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.color8)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.color9)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.color10)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.color11)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.color12)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.color13)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.color14)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.color15)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.color6)).BeginInit(); + this.SuspendLayout(); + // + // colorLayoutPanel + // + this.colorLayoutPanel.Controls.Add(this.color0); + this.colorLayoutPanel.Controls.Add(this.color1); + this.colorLayoutPanel.Controls.Add(this.color2); + this.colorLayoutPanel.Controls.Add(this.color3); + this.colorLayoutPanel.Controls.Add(this.color4); + this.colorLayoutPanel.Controls.Add(this.color5); + this.colorLayoutPanel.Controls.Add(this.color6); + this.colorLayoutPanel.Controls.Add(this.color7); + this.colorLayoutPanel.Controls.Add(this.color8); + this.colorLayoutPanel.Controls.Add(this.color9); + this.colorLayoutPanel.Controls.Add(this.color10); + this.colorLayoutPanel.Controls.Add(this.color11); + this.colorLayoutPanel.Controls.Add(this.color12); + this.colorLayoutPanel.Controls.Add(this.color13); + this.colorLayoutPanel.Controls.Add(this.color14); + this.colorLayoutPanel.Controls.Add(this.color15); + this.colorLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.colorLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.colorLayoutPanel.Name = "colorLayoutPanel"; + this.colorLayoutPanel.Size = new System.Drawing.Size(208, 52); + this.colorLayoutPanel.TabIndex = 0; + // + // color0 + // + this.color0.BackColor = System.Drawing.Color.White; + this.color0.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.color0.Location = new System.Drawing.Point(3, 3); + this.color0.Name = "color0"; + this.color0.Size = new System.Drawing.Size(20, 20); + this.color0.TabIndex = 0; + this.color0.TabStop = false; + this.color0.MouseClick += new System.Windows.Forms.MouseEventHandler(this.color0_MouseClick); + // + // color1 + // + this.color1.BackColor = System.Drawing.Color.Black; + this.color1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.color1.Location = new System.Drawing.Point(29, 3); + this.color1.Name = "color1"; + this.color1.Size = new System.Drawing.Size(20, 20); + this.color1.TabIndex = 1; + this.color1.TabStop = false; + this.color1.Click += new System.EventHandler(this.color1_Click); + this.color1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.color1_MouseClick); + // + // color2 + // + this.color2.BackColor = System.Drawing.Color.Blue; + this.color2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.color2.Location = new System.Drawing.Point(55, 3); + this.color2.Name = "color2"; + this.color2.Size = new System.Drawing.Size(20, 20); + this.color2.TabIndex = 2; + this.color2.TabStop = false; + this.color2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.color2_MouseClick); + // + // color3 + // + this.color3.BackColor = System.Drawing.Color.Green; + this.color3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.color3.Location = new System.Drawing.Point(81, 3); + this.color3.Name = "color3"; + this.color3.Size = new System.Drawing.Size(20, 20); + this.color3.TabIndex = 3; + this.color3.TabStop = false; + this.color3.MouseClick += new System.Windows.Forms.MouseEventHandler(this.color3_MouseClick); + // + // color4 + // + this.color4.BackColor = System.Drawing.Color.Red; + this.color4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.color4.Location = new System.Drawing.Point(107, 3); + this.color4.Name = "color4"; + this.color4.Size = new System.Drawing.Size(20, 20); + this.color4.TabIndex = 4; + this.color4.TabStop = false; + this.color4.MouseClick += new System.Windows.Forms.MouseEventHandler(this.color4_MouseClick); + // + // color5 + // + this.color5.BackColor = System.Drawing.Color.Brown; + this.color5.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.color5.Location = new System.Drawing.Point(133, 3); + this.color5.Name = "color5"; + this.color5.Size = new System.Drawing.Size(20, 20); + this.color5.TabIndex = 5; + this.color5.TabStop = false; + this.color5.MouseClick += new System.Windows.Forms.MouseEventHandler(this.color5_MouseClick); + // + // color7 + // + this.color7.BackColor = System.Drawing.Color.Orange; + this.color7.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.color7.Location = new System.Drawing.Point(185, 3); + this.color7.Name = "color7"; + this.color7.Size = new System.Drawing.Size(20, 20); + this.color7.TabIndex = 6; + this.color7.TabStop = false; + this.color7.MouseClick += new System.Windows.Forms.MouseEventHandler(this.color7_MouseClick); + // + // color8 + // + this.color8.BackColor = System.Drawing.Color.Yellow; + this.color8.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.color8.Location = new System.Drawing.Point(3, 29); + this.color8.Name = "color8"; + this.color8.Size = new System.Drawing.Size(20, 20); + this.color8.TabIndex = 7; + this.color8.TabStop = false; + this.color8.MouseClick += new System.Windows.Forms.MouseEventHandler(this.color8_MouseClick); + // + // color9 + // + this.color9.BackColor = System.Drawing.Color.LightGreen; + this.color9.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.color9.Location = new System.Drawing.Point(29, 29); + this.color9.Name = "color9"; + this.color9.Size = new System.Drawing.Size(20, 20); + this.color9.TabIndex = 8; + this.color9.TabStop = false; + this.color9.MouseClick += new System.Windows.Forms.MouseEventHandler(this.color9_MouseClick); + // + // color10 + // + this.color10.BackColor = System.Drawing.Color.Teal; + this.color10.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.color10.Location = new System.Drawing.Point(55, 29); + this.color10.Name = "color10"; + this.color10.Size = new System.Drawing.Size(20, 20); + this.color10.TabIndex = 9; + this.color10.TabStop = false; + this.color10.MouseClick += new System.Windows.Forms.MouseEventHandler(this.color10_MouseClick); + // + // color11 + // + this.color11.BackColor = System.Drawing.Color.LightCyan; + this.color11.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.color11.Location = new System.Drawing.Point(81, 29); + this.color11.Name = "color11"; + this.color11.Size = new System.Drawing.Size(20, 20); + this.color11.TabIndex = 10; + this.color11.TabStop = false; + this.color11.Click += new System.EventHandler(this.color11_Click); + this.color11.MouseClick += new System.Windows.Forms.MouseEventHandler(this.color11_MouseClick); + // + // color12 + // + this.color12.BackColor = System.Drawing.Color.LightBlue; + this.color12.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.color12.Location = new System.Drawing.Point(107, 29); + this.color12.Name = "color12"; + this.color12.Size = new System.Drawing.Size(20, 20); + this.color12.TabIndex = 11; + this.color12.TabStop = false; + this.color12.MouseClick += new System.Windows.Forms.MouseEventHandler(this.color12_MouseClick); + // + // color13 + // + this.color13.BackColor = System.Drawing.Color.Pink; + this.color13.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.color13.Location = new System.Drawing.Point(133, 29); + this.color13.Name = "color13"; + this.color13.Size = new System.Drawing.Size(20, 20); + this.color13.TabIndex = 12; + this.color13.TabStop = false; + this.color13.MouseClick += new System.Windows.Forms.MouseEventHandler(this.color13_MouseClick); + // + // color14 + // + this.color14.BackColor = System.Drawing.Color.Gray; + this.color14.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.color14.Location = new System.Drawing.Point(159, 29); + this.color14.Name = "color14"; + this.color14.Size = new System.Drawing.Size(20, 20); + this.color14.TabIndex = 13; + this.color14.TabStop = false; + this.color14.MouseClick += new System.Windows.Forms.MouseEventHandler(this.color14_MouseClick); + // + // color15 + // + this.color15.BackColor = System.Drawing.Color.LightGray; + this.color15.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.color15.Location = new System.Drawing.Point(185, 29); + this.color15.Name = "color15"; + this.color15.Size = new System.Drawing.Size(20, 20); + this.color15.TabIndex = 14; + this.color15.TabStop = false; + this.color15.MouseClick += new System.Windows.Forms.MouseEventHandler(this.color15_MouseClick); + // + // color6 + // + this.color6.BackColor = System.Drawing.Color.Purple; + this.color6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.color6.Location = new System.Drawing.Point(159, 3); + this.color6.Name = "color6"; + this.color6.Size = new System.Drawing.Size(20, 20); + this.color6.TabIndex = 15; + this.color6.TabStop = false; + this.color6.MouseClick += new System.Windows.Forms.MouseEventHandler(this.color6_MouseClick); + // + // ColorSelector + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.colorLayoutPanel); + this.Name = "ColorSelector"; + this.Size = new System.Drawing.Size(208, 52); + this.colorLayoutPanel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.color0)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.color1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.color2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.color3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.color4)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.color5)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.color7)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.color8)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.color9)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.color10)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.color11)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.color12)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.color13)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.color14)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.color15)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.color6)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.FlowLayoutPanel colorLayoutPanel; + private System.Windows.Forms.PictureBox color0; + private System.Windows.Forms.PictureBox color1; + private System.Windows.Forms.PictureBox color2; + private System.Windows.Forms.PictureBox color3; + private System.Windows.Forms.PictureBox color4; + private System.Windows.Forms.PictureBox color5; + private System.Windows.Forms.PictureBox color7; + private System.Windows.Forms.PictureBox color8; + private System.Windows.Forms.PictureBox color9; + private System.Windows.Forms.PictureBox color10; + private System.Windows.Forms.PictureBox color11; + private System.Windows.Forms.PictureBox color12; + private System.Windows.Forms.PictureBox color13; + private System.Windows.Forms.PictureBox color14; + private System.Windows.Forms.PictureBox color15; + private System.Windows.Forms.PictureBox color6; + } +} diff --git a/source/ColorSelector.cs b/source/ColorSelector.cs new file mode 100644 index 0000000..99f9be6 --- /dev/null +++ b/source/ColorSelector.cs @@ -0,0 +1,191 @@ +#region Copyright (c) 2007, PP4L Software +/************************************************************************************ + +Copyright 2007, PP4L Software +Author: Lampiasis + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +'***********************************************************************************/ +#endregion + + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; + +namespace AsciiPumper +{ + public partial class ColorSelector : UserControl + { + public ColorSelector() + { + InitializeComponent(); + LoadColorPalette(new ColorPalette()); + } + + public void LoadColorPalette(ColorPalette colors) + { + m_Colors = colors; + color0.BackColor = colors[0]; + color1.BackColor = colors[1]; + color2.BackColor = colors[2]; + color3.BackColor = colors[3]; + color4.BackColor = colors[4]; + color5.BackColor = colors[5]; + color6.BackColor = colors[6]; + color7.BackColor = colors[7]; + color8.BackColor = colors[8]; + color9.BackColor = colors[9]; + color10.BackColor = colors[10]; + color11.BackColor = colors[11]; + color12.BackColor = colors[12]; + color13.BackColor = colors[13]; + color14.BackColor = colors[14]; + color15.BackColor = colors[15]; + } + + private ColorPalette m_Colors = new ColorPalette(); + + /// + /// Gets or sets the Colors. + /// + public ColorPalette Colors + { + get { return m_Colors; } + set { LoadColorPalette(value); } + } + + public class ButtonColorChangedEventArgs : EventArgs + { + public static readonly new ButtonColorChangedEventArgs Empty = new ButtonColorChangedEventArgs(0, new MouseEventArgs(MouseButtons.None, 1, 0, 0, 0)); + + public ButtonColorChangedEventArgs(byte colorindex, MouseEventArgs e ) + { + ColorIndex = colorindex; + MouseEvent = e; + } + + public MouseEventArgs MouseEvent; + public byte ColorIndex; + } + + public event EventHandler ButtonColorChanged; + + protected virtual void OnButtonColorChanged(ButtonColorChangedEventArgs e) + { + EventHandler handler = ButtonColorChanged; + if (handler != null) + { + handler(this, e); + } + } + + private void color0_MouseClick(object sender, MouseEventArgs e) + { + OnButtonColorChanged(new ButtonColorChangedEventArgs(0, e)); + + } + + private void color1_Click(object sender, EventArgs e) + { + + } + + private void color1_MouseClick(object sender, MouseEventArgs e) + { + OnButtonColorChanged(new ButtonColorChangedEventArgs(1, e)); + } + + private void color2_MouseClick(object sender, MouseEventArgs e) + { + OnButtonColorChanged(new ButtonColorChangedEventArgs(2, e)); + } + + private void color3_MouseClick(object sender, MouseEventArgs e) + { + OnButtonColorChanged(new ButtonColorChangedEventArgs(3, e)); + } + + private void color4_MouseClick(object sender, MouseEventArgs e) + { + OnButtonColorChanged(new ButtonColorChangedEventArgs(4, e)); + } + + private void color5_MouseClick(object sender, MouseEventArgs e) + { + OnButtonColorChanged(new ButtonColorChangedEventArgs(5, e)); + } + + private void color6_MouseClick(object sender, MouseEventArgs e) + { + OnButtonColorChanged(new ButtonColorChangedEventArgs(6, e)); + } + + private void color7_MouseClick(object sender, MouseEventArgs e) + { + OnButtonColorChanged(new ButtonColorChangedEventArgs(7, e)); + } + + private void color8_MouseClick(object sender, MouseEventArgs e) + { + OnButtonColorChanged(new ButtonColorChangedEventArgs(8, e)); + } + + private void color9_MouseClick(object sender, MouseEventArgs e) + { + OnButtonColorChanged(new ButtonColorChangedEventArgs(9, e)); + } + + private void color10_MouseClick(object sender, MouseEventArgs e) + { + OnButtonColorChanged(new ButtonColorChangedEventArgs(10, e)); + } + + private void color11_Click(object sender, EventArgs e) + { + + } + + private void color11_MouseClick(object sender, MouseEventArgs e) + { + OnButtonColorChanged(new ButtonColorChangedEventArgs(11, e)); + } + + private void color12_MouseClick(object sender, MouseEventArgs e) + { + OnButtonColorChanged(new ButtonColorChangedEventArgs(12, e)); + } + + private void color13_MouseClick(object sender, MouseEventArgs e) + { + OnButtonColorChanged(new ButtonColorChangedEventArgs(13, e)); + } + + private void color14_MouseClick(object sender, MouseEventArgs e) + { + OnButtonColorChanged(new ButtonColorChangedEventArgs(14, e)); + } + + private void color15_MouseClick(object sender, MouseEventArgs e) + { + OnButtonColorChanged(new ButtonColorChangedEventArgs(15, e)); + } + } +} diff --git a/source/ColorSelector.resx b/source/ColorSelector.resx new file mode 100644 index 0000000..ff31a6d --- /dev/null +++ b/source/ColorSelector.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/ImageImporter.cs b/source/ImageImporter.cs new file mode 100644 index 0000000..0ec1a01 --- /dev/null +++ b/source/ImageImporter.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace AsciiPumper +{ + public class ImageImporter + { + + } +} diff --git a/source/KeypressAction.cs b/source/KeypressAction.cs new file mode 100644 index 0000000..e9602bf --- /dev/null +++ b/source/KeypressAction.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace AsciiPumper +{ + public class KeypressAction : IUndoableAction + { + + private struct CharChangeInfo + { + public int x; + public int y; + public char origchar; + public char newchar; + + } + private List ChangedCharacters = new List(); + + public void AddCharacter(int x, int y, char origchar, char newchar) + { + foreach (CharChangeInfo info in ChangedCharacters) + { + if (info.x == x && info.y == y) + { + ChangedCharacters.Remove(info); + break; + } + } + CharChangeInfo newinfo = new CharChangeInfo(); + newinfo.x = x; + newinfo.y = y; + newinfo.origchar = origchar; + newinfo.newchar = newchar; + ChangedCharacters.Add(newinfo); + } + + #region IUndoableAction Members + + public void Undo(PaintCanvas canvas) + { + foreach (CharChangeInfo info in ChangedCharacters) + { + canvas.CellRows[info.y][info.x].Character = info.origchar; + } + canvas.CompleteRepaint(); + } + + public void Redo(PaintCanvas canvas) + { + foreach (CharChangeInfo info in ChangedCharacters) + { + canvas.CellRows[info.y][info.x].Character = info.newchar; + } + canvas.CompleteRepaint(); + } + + #endregion + } +} diff --git a/source/MainForm.Designer.cs b/source/MainForm.Designer.cs new file mode 100644 index 0000000..a620ec7 --- /dev/null +++ b/source/MainForm.Designer.cs @@ -0,0 +1,536 @@ +namespace AsciiPumper +{ + partial class MainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + this.fontDialog1 = new System.Windows.Forms.FontDialog(); + this.colorDialog1 = new System.Windows.Forms.ColorDialog(); + this.splitContainer = new System.Windows.Forms.SplitContainer(); + this.PaintPanel = new System.Windows.Forms.Panel(); + this.AsciiPaintCanvas = new AsciiPumper.PaintCanvas(); + this.txtWatermark = new System.Windows.Forms.TextBox(); + this.chkWatermark = new System.Windows.Forms.CheckBox(); + this.panel1 = new System.Windows.Forms.Panel(); + this.radioRemoveFormatting = new System.Windows.Forms.RadioButton(); + this.radioUnderline = new System.Windows.Forms.RadioButton(); + this.radioBold = new System.Windows.Forms.RadioButton(); + this.radioFill = new System.Windows.Forms.RadioButton(); + this.radioPaintBrush = new System.Windows.Forms.RadioButton(); + this.btnCopy = new System.Windows.Forms.Button(); + this.checkRMBfg = new System.Windows.Forms.CheckBox(); + this.colorRMB = new System.Windows.Forms.PictureBox(); + this.lblRMB = new System.Windows.Forms.Label(); + this.checkMMBfg = new System.Windows.Forms.CheckBox(); + this.colorMMB = new System.Windows.Forms.PictureBox(); + this.lblMMB = new System.Windows.Forms.Label(); + this.lblForeground = new System.Windows.Forms.Label(); + this.checkLMBfg = new System.Windows.Forms.CheckBox(); + this.colorLMB = new System.Windows.Forms.PictureBox(); + this.lblLeftMouseButton = new System.Windows.Forms.Label(); + this.colorSelector1 = new AsciiPumper.ColorSelector(); + this.numColumns = new System.Windows.Forms.NumericUpDown(); + this.lblColumns = new System.Windows.Forms.Label(); + this.numRows = new System.Windows.Forms.NumericUpDown(); + this.lblRows = new System.Windows.Forms.Label(); + this.saveFileDialog = new System.Windows.Forms.SaveFileDialog(); + this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.splitContainer.Panel1.SuspendLayout(); + this.splitContainer.Panel2.SuspendLayout(); + this.splitContainer.SuspendLayout(); + this.PaintPanel.SuspendLayout(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.colorRMB)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.colorMMB)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.colorLMB)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numColumns)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numRows)).BeginInit(); + this.SuspendLayout(); + // + // fontDialog1 + // + this.fontDialog1.FixedPitchOnly = true; + // + // splitContainer + // + this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer.Location = new System.Drawing.Point(0, 0); + this.splitContainer.Name = "splitContainer"; + // + // splitContainer.Panel1 + // + this.splitContainer.Panel1.Controls.Add(this.PaintPanel); + // + // splitContainer.Panel2 + // + this.splitContainer.Panel2.Controls.Add(this.txtWatermark); + this.splitContainer.Panel2.Controls.Add(this.chkWatermark); + this.splitContainer.Panel2.Controls.Add(this.panel1); + this.splitContainer.Panel2.Controls.Add(this.btnCopy); + this.splitContainer.Panel2.Controls.Add(this.checkRMBfg); + this.splitContainer.Panel2.Controls.Add(this.colorRMB); + this.splitContainer.Panel2.Controls.Add(this.lblRMB); + this.splitContainer.Panel2.Controls.Add(this.checkMMBfg); + this.splitContainer.Panel2.Controls.Add(this.colorMMB); + this.splitContainer.Panel2.Controls.Add(this.lblMMB); + this.splitContainer.Panel2.Controls.Add(this.lblForeground); + this.splitContainer.Panel2.Controls.Add(this.checkLMBfg); + this.splitContainer.Panel2.Controls.Add(this.colorLMB); + this.splitContainer.Panel2.Controls.Add(this.lblLeftMouseButton); + this.splitContainer.Panel2.Controls.Add(this.colorSelector1); + this.splitContainer.Panel2.Controls.Add(this.numColumns); + this.splitContainer.Panel2.Controls.Add(this.lblColumns); + this.splitContainer.Panel2.Controls.Add(this.numRows); + this.splitContainer.Panel2.Controls.Add(this.lblRows); + + this.splitContainer.Size = new System.Drawing.Size(978, 438); + this.splitContainer.Panel2MinSize = 220; + this.splitContainer.SplitterDistance = 751; + this.splitContainer.TabIndex = 2; + // + // PaintPanel + // + this.PaintPanel.AutoScroll = true; + this.PaintPanel.Controls.Add(this.AsciiPaintCanvas); + this.PaintPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.PaintPanel.Location = new System.Drawing.Point(0, 0); + this.PaintPanel.Name = "PaintPanel"; + this.PaintPanel.Size = new System.Drawing.Size(751, 438); + this.PaintPanel.TabIndex = 2; + // + // AsciiPaintCanvas + // + this.AsciiPaintCanvas.BackColor = System.Drawing.Color.White; + this.AsciiPaintCanvas.CausesValidation = false; + this.AsciiPaintCanvas.CellHeight = 20; + this.AsciiPaintCanvas.CellWidth = 10; + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.White); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.Black); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(127)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(147)))), ((int)(((byte)(0)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(127)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(156)))), ((int)(((byte)(0)))), ((int)(((byte)(156)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(127)))), ((int)(((byte)(0)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(0)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(252)))), ((int)(((byte)(0)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(147)))), ((int)(((byte)(147)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(252)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(0)))), ((int)(((byte)(255)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(127)))), ((int)(((byte)(127)))), ((int)(((byte)(127)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(210)))), ((int)(((byte)(210)))), ((int)(((byte)(210)))))); + this.AsciiPaintCanvas.Columns = 60; + this.AsciiPaintCanvas.DontRepaint = false; + this.AsciiPaintCanvas.Font = new System.Drawing.Font("Consolas", 10F); + this.AsciiPaintCanvas.HighlightColor = System.Drawing.Color.Salmon; + this.AsciiPaintCanvas.HighlightWidth = 2; + this.AsciiPaintCanvas.LeftMouseColor = ((byte)(0)); + this.AsciiPaintCanvas.LeftMouseIsForeground = false; + this.AsciiPaintCanvas.Location = new System.Drawing.Point(0, 0); + this.AsciiPaintCanvas.MiddleMouseColor = ((byte)(4)); + this.AsciiPaintCanvas.MiddleMouseIsForeground = true; + this.AsciiPaintCanvas.Modified = false; + this.AsciiPaintCanvas.MostRecentForegroundColor = ((byte)(4)); + this.AsciiPaintCanvas.Name = "AsciiPaintCanvas"; + this.AsciiPaintCanvas.PaintMode = AsciiPumper.PaintCanvas.PaintModes.PaintBrush; + this.AsciiPaintCanvas.RightMouseColor = ((byte)(1)); + this.AsciiPaintCanvas.RightMouseIsForeground = false; + this.AsciiPaintCanvas.Rows = 20; + this.AsciiPaintCanvas.SelectedCellPosition = new System.Drawing.Point(0, 0); + this.AsciiPaintCanvas.SeperatorColor = System.Drawing.Color.DimGray; + this.AsciiPaintCanvas.SeperatorWidth = 1; + this.AsciiPaintCanvas.Size = new System.Drawing.Size(600, 400); + this.AsciiPaintCanvas.TabIndex = 0; + // + // txtWatermark + // + this.txtWatermark.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtWatermark.Location = new System.Drawing.Point(2, 345); + this.txtWatermark.Name = "txtWatermark"; + this.txtWatermark.Size = new System.Drawing.Size(218, 22); + this.txtWatermark.TabIndex = 18; + this.txtWatermark.Text = "http://code.google.com/p/asciipumper/ "; + this.txtWatermark.Enter += new System.EventHandler(this.txtWatermark_Enter); + // + // chkWatermark + // + this.chkWatermark.AutoSize = true; + this.chkWatermark.Location = new System.Drawing.Point(3, 322); + this.chkWatermark.Name = "chkWatermark"; + this.chkWatermark.Size = new System.Drawing.Size(166, 17); + this.chkWatermark.TabIndex = 17; + this.chkWatermark.Text = "Hardspace with watermark:"; + this.chkWatermark.UseVisualStyleBackColor = true; + this.chkWatermark.CheckedChanged += new System.EventHandler(this.chkWatermark_CheckedChanged); + // + // panel1 + // + this.panel1.Controls.Add(this.radioRemoveFormatting); + this.panel1.Controls.Add(this.radioUnderline); + this.panel1.Controls.Add(this.radioBold); + this.panel1.Controls.Add(this.radioFill); + this.panel1.Controls.Add(this.radioPaintBrush); + this.panel1.Location = new System.Drawing.Point(3, 213); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(210, 73); + this.panel1.TabIndex = 16; + // + // radioRemoveFormatting + // + this.radioRemoveFormatting.AutoSize = true; + this.radioRemoveFormatting.Location = new System.Drawing.Point(4, 50); + this.radioRemoveFormatting.Name = "radioRemoveFormatting"; + this.radioRemoveFormatting.Size = new System.Drawing.Size(123, 17); + this.radioRemoveFormatting.TabIndex = 4; + this.radioRemoveFormatting.Text = "Remove formatting"; + this.radioRemoveFormatting.UseVisualStyleBackColor = true; + this.radioRemoveFormatting.CheckedChanged += new System.EventHandler(this.radioRemoveFormatting_CheckedChanged); + // + // radioUnderline + // + this.radioUnderline.AutoSize = true; + this.radioUnderline.Location = new System.Drawing.Point(118, 27); + this.radioUnderline.Name = "radioUnderline"; + this.radioUnderline.Size = new System.Drawing.Size(76, 17); + this.radioUnderline.TabIndex = 3; + this.radioUnderline.Text = "Underline"; + this.radioUnderline.UseVisualStyleBackColor = true; + this.radioUnderline.CheckedChanged += new System.EventHandler(this.radioUnderline_CheckedChanged); + // + // radioBold + // + this.radioBold.AutoSize = true; + this.radioBold.Location = new System.Drawing.Point(118, 4); + this.radioBold.Name = "radioBold"; + this.radioBold.Size = new System.Drawing.Size(49, 17); + this.radioBold.TabIndex = 2; + this.radioBold.Text = "Bold"; + this.radioBold.UseVisualStyleBackColor = true; + this.radioBold.CheckedChanged += new System.EventHandler(this.radioBold_CheckedChanged); + // + // radioFill + // + this.radioFill.AutoSize = true; + this.radioFill.Location = new System.Drawing.Point(4, 27); + this.radioFill.Name = "radioFill"; + this.radioFill.Size = new System.Drawing.Size(40, 17); + this.radioFill.TabIndex = 1; + this.radioFill.Text = "Fill"; + this.radioFill.UseVisualStyleBackColor = true; + this.radioFill.CheckedChanged += new System.EventHandler(this.radioFill_CheckedChanged); + // + // radioPaintBrush + // + this.radioPaintBrush.AutoSize = true; + this.radioPaintBrush.Checked = true; + this.radioPaintBrush.Location = new System.Drawing.Point(4, 4); + this.radioPaintBrush.Name = "radioPaintBrush"; + this.radioPaintBrush.Size = new System.Drawing.Size(84, 17); + this.radioPaintBrush.TabIndex = 0; + this.radioPaintBrush.TabStop = true; + this.radioPaintBrush.Text = "Paint brush"; + this.radioPaintBrush.UseVisualStyleBackColor = true; + this.radioPaintBrush.CheckedChanged += new System.EventHandler(this.radioPaintBrush_CheckedChanged); + // + // btnCopy + // + this.btnCopy.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.btnCopy.Location = new System.Drawing.Point(0, 292); + this.btnCopy.Name = "btnCopy"; + this.btnCopy.Size = new System.Drawing.Size(218, 23); + this.btnCopy.TabIndex = 15; + this.btnCopy.Text = "Copy art to clipboard"; + this.btnCopy.UseVisualStyleBackColor = true; + this.btnCopy.Click += new System.EventHandler(this.button1_Click); + // + // checkRMBfg + // + this.checkRMBfg.AutoSize = true; + this.checkRMBfg.Location = new System.Drawing.Point(164, 193); + this.checkRMBfg.Name = "checkRMBfg"; + this.checkRMBfg.Size = new System.Drawing.Size(15, 14); + this.checkRMBfg.TabIndex = 14; + this.checkRMBfg.UseVisualStyleBackColor = true; + this.checkRMBfg.CheckedChanged += new System.EventHandler(this.checkRMBfg_CheckedChanged); + // + // colorRMB + // + this.colorRMB.BackColor = System.Drawing.SystemColors.ControlDarkDark; + this.colorRMB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.colorRMB.Location = new System.Drawing.Point(121, 187); + this.colorRMB.Name = "colorRMB"; + this.colorRMB.Size = new System.Drawing.Size(20, 20); + this.colorRMB.TabIndex = 13; + this.colorRMB.TabStop = false; + // + // lblRMB + // + this.lblRMB.AutoSize = true; + this.lblRMB.Location = new System.Drawing.Point(1, 194); + this.lblRMB.Name = "lblRMB"; + this.lblRMB.Size = new System.Drawing.Size(115, 13); + this.lblRMB.TabIndex = 12; + this.lblRMB.Text = "Right Mouse Button:"; + // + // checkMMBfg + // + this.checkMMBfg.AutoSize = true; + this.checkMMBfg.Checked = true; + this.checkMMBfg.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkMMBfg.Location = new System.Drawing.Point(164, 167); + this.checkMMBfg.Name = "checkMMBfg"; + this.checkMMBfg.Size = new System.Drawing.Size(15, 14); + this.checkMMBfg.TabIndex = 11; + this.checkMMBfg.UseVisualStyleBackColor = true; + this.checkMMBfg.CheckedChanged += new System.EventHandler(this.checkMMBfg_CheckedChanged); + // + // colorMMB + // + this.colorMMB.BackColor = System.Drawing.SystemColors.ControlDarkDark; + this.colorMMB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.colorMMB.Location = new System.Drawing.Point(121, 161); + this.colorMMB.Name = "colorMMB"; + this.colorMMB.Size = new System.Drawing.Size(20, 20); + this.colorMMB.TabIndex = 10; + this.colorMMB.TabStop = false; + // + // lblMMB + // + this.lblMMB.AutoSize = true; + this.lblMMB.Location = new System.Drawing.Point(1, 168); + this.lblMMB.Name = "lblMMB"; + this.lblMMB.Size = new System.Drawing.Size(123, 13); + this.lblMMB.TabIndex = 9; + this.lblMMB.Text = "Middle Mouse Button:"; + // + // lblForeground + // + this.lblForeground.AutoSize = true; + this.lblForeground.Location = new System.Drawing.Point(140, 118); + this.lblForeground.Name = "lblForeground"; + this.lblForeground.Size = new System.Drawing.Size(74, 13); + this.lblForeground.TabIndex = 8; + this.lblForeground.Text = "Foreground?"; + // + // checkLMBfg + // + this.checkLMBfg.AutoSize = true; + this.checkLMBfg.Location = new System.Drawing.Point(164, 140); + this.checkLMBfg.Name = "checkLMBfg"; + this.checkLMBfg.Size = new System.Drawing.Size(15, 14); + this.checkLMBfg.TabIndex = 7; + this.checkLMBfg.UseVisualStyleBackColor = true; + this.checkLMBfg.CheckedChanged += new System.EventHandler(this.checkLMBfg_CheckedChanged); + // + // colorLMB + // + this.colorLMB.BackColor = System.Drawing.SystemColors.ControlDarkDark; + this.colorLMB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.colorLMB.Location = new System.Drawing.Point(121, 134); + this.colorLMB.Name = "colorLMB"; + this.colorLMB.Size = new System.Drawing.Size(20, 20); + this.colorLMB.TabIndex = 6; + this.colorLMB.TabStop = false; + // + // lblLeftMouseButton + // + this.lblLeftMouseButton.AutoSize = true; + this.lblLeftMouseButton.Location = new System.Drawing.Point(1, 141); + this.lblLeftMouseButton.Name = "lblLeftMouseButton"; + this.lblLeftMouseButton.Size = new System.Drawing.Size(106, 13); + this.lblLeftMouseButton.TabIndex = 5; + this.lblLeftMouseButton.Text = "Left Mouse Button:"; + // + // colorSelector1 + // + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.White); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.Black); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(127)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(147)))), ((int)(((byte)(0)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(127)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(156)))), ((int)(((byte)(0)))), ((int)(((byte)(156)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(127)))), ((int)(((byte)(0)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(0)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(252)))), ((int)(((byte)(0)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(147)))), ((int)(((byte)(147)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(252)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(0)))), ((int)(((byte)(255)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(127)))), ((int)(((byte)(127)))), ((int)(((byte)(127)))))); + new AsciiPumper.ColorPalette().Add(System.Drawing.Color.FromArgb(((int)(((byte)(210)))), ((int)(((byte)(210)))), ((int)(((byte)(210)))))); + this.colorSelector1.Location = new System.Drawing.Point(3, 51); + this.colorSelector1.Name = "colorSelector1"; + this.colorSelector1.Size = new System.Drawing.Size(209, 54); + this.colorSelector1.TabIndex = 4; + this.colorSelector1.ButtonColorChanged += new System.EventHandler(this.colorSelector1_ButtonColorChanged); + // + // numColumns + // + this.numColumns.Location = new System.Drawing.Point(106, 16); + this.numColumns.Maximum = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.numColumns.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numColumns.Name = "numColumns"; + this.numColumns.Size = new System.Drawing.Size(46, 22); + this.numColumns.TabIndex = 3; + this.numColumns.Value = new decimal(new int[] { + 80, + 0, + 0, + 0}); + this.numColumns.ValueChanged += new System.EventHandler(this.numColumns_ValueChanged); + // + // lblColumns + // + this.lblColumns.AutoSize = true; + this.lblColumns.Location = new System.Drawing.Point(103, 0); + this.lblColumns.Name = "lblColumns"; + this.lblColumns.Size = new System.Drawing.Size(55, 13); + this.lblColumns.TabIndex = 2; + this.lblColumns.Text = "Columns:"; + // + // numRows + // + this.numRows.Location = new System.Drawing.Point(44, 23); + this.numRows.Maximum = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.numRows.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numRows.Name = "numRows"; + this.numRows.Size = new System.Drawing.Size(46, 22); + this.numRows.TabIndex = 1; + this.numRows.Value = new decimal(new int[] { + 50, + 0, + 0, + 0}); + this.numRows.ValueChanged += new System.EventHandler(this.numRows_ValueChanged); + // + // lblRows + // + this.lblRows.AutoSize = true; + this.lblRows.Location = new System.Drawing.Point(6, 25); + this.lblRows.Name = "lblRows"; + this.lblRows.Size = new System.Drawing.Size(38, 13); + this.lblRows.TabIndex = 0; + this.lblRows.Text = "Rows:"; + // + // saveFileDialog + // + this.saveFileDialog.DefaultExt = "txt"; + this.saveFileDialog.Filter = "Text files|*.txt|All files|*.*"; + // + // openFileDialog + // + this.openFileDialog.DefaultExt = "txt"; + this.openFileDialog.Filter = "Text files|*.txt|All files|*.*"; + // + // MainForm + // + this.ClientSize = new System.Drawing.Size(978, 438); + this.Controls.Add(this.splitContainer); + this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "MainForm"; + this.Text = "Ascii Pumper"; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + this.Load += new System.EventHandler(this.MainForm_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); + this.Resize += new System.EventHandler(this.MainForm_Resize); + this.splitContainer.Panel1.ResumeLayout(false); + this.splitContainer.Panel2.ResumeLayout(false); + this.splitContainer.Panel2.PerformLayout(); + this.splitContainer.ResumeLayout(false); + this.PaintPanel.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.colorRMB)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.colorMMB)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.colorLMB)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numColumns)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numRows)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.FontDialog fontDialog1; + private System.Windows.Forms.ColorDialog colorDialog1; + private System.Windows.Forms.SplitContainer splitContainer; + private System.Windows.Forms.Panel PaintPanel; + private PaintCanvas AsciiPaintCanvas; + private System.Windows.Forms.NumericUpDown numColumns; + private System.Windows.Forms.Label lblColumns; + private System.Windows.Forms.NumericUpDown numRows; + private System.Windows.Forms.Label lblRows; + private ColorSelector colorSelector1; + private System.Windows.Forms.Label lblLeftMouseButton; + private System.Windows.Forms.PictureBox colorLMB; + private System.Windows.Forms.CheckBox checkRMBfg; + private System.Windows.Forms.PictureBox colorRMB; + private System.Windows.Forms.Label lblRMB; + private System.Windows.Forms.CheckBox checkMMBfg; + private System.Windows.Forms.PictureBox colorMMB; + private System.Windows.Forms.Label lblMMB; + private System.Windows.Forms.Label lblForeground; + private System.Windows.Forms.CheckBox checkLMBfg; + private System.Windows.Forms.Button btnCopy; + private System.Windows.Forms.SaveFileDialog saveFileDialog; + private System.Windows.Forms.OpenFileDialog openFileDialog; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.RadioButton radioFill; + private System.Windows.Forms.RadioButton radioPaintBrush; + private System.Windows.Forms.CheckBox chkWatermark; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.TextBox txtWatermark; + private System.Windows.Forms.RadioButton radioRemoveFormatting; + private System.Windows.Forms.RadioButton radioUnderline; + private System.Windows.Forms.RadioButton radioBold; + } +} + diff --git a/source/MainForm.cs b/source/MainForm.cs new file mode 100644 index 0000000..62cc086 --- /dev/null +++ b/source/MainForm.cs @@ -0,0 +1,575 @@ +#region Copyright (c) 2007, PP4L Software +/************************************************************************************ + +Copyright 2007, PP4L Software +Author: Lampiasis + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +'***********************************************************************************/ +#endregion + + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Reflection; +using System.Runtime; +using System.Diagnostics; +using System.IO; +using System.Drawing.Printing; + + +namespace AsciiPumper +{ + public partial class MainForm : Form + { + + public void Undo() + { + AsciiPaintCanvas.Undo(); + } + + public void Redo() + { + AsciiPaintCanvas.Redo(); + } + + public Stack UndoList + { + get { return AsciiPaintCanvas.UndoList; } + } + + public Stack RedoList + { + get { return AsciiPaintCanvas.RedoList; } + } + + private string m_FileName = "(Untitled)"; + + /// + /// Gets or sets the FileName. + /// + public string FileName + { + get { return m_FileName; } + set { m_FileName = value; this.Text = m_FileName + (m_FileModified ? "" : "*"); } + } + + private bool m_FileModified = false; + + /// + /// Gets or sets the FileModified. + /// + public bool FileModified + { + get { return m_FileModified; } + set { + m_FileModified = value; + if (value == true) + this.Text = m_FileName + "*"; + else + { + this.Text = m_FileName; + AsciiPaintCanvas.Modified = false; + } + } + } + + public void LoadStream(Stream stream) + { + m_LoadingFile = true; + + AsciiPaintCanvas.DontRepaint = true; + try + { + AsciiPaintCanvas.LoadStream(stream); + numColumns.Value = AsciiPaintCanvas.Columns; + numRows.Value = AsciiPaintCanvas.Rows; + m_LoadingFile = false; + } + finally + { + AsciiPaintCanvas.DontRepaint = false; + AsciiPaintCanvas.CompleteRepaint(); + + } + + } + + + + public MainForm() + { + InitializeComponent(); + //this.Icon = new Icon(typeof(MainForm), "MainIcon"); + + AsciiPaintCanvas.Columns = (int)numColumns.Value; + AsciiPaintCanvas.Rows = (int)numRows.Value; + ColorPalette pal = AsciiPaintCanvas.Colors; + colorLMB.BackColor = pal[AsciiPaintCanvas.LeftMouseColor]; + colorMMB.BackColor = pal[AsciiPaintCanvas.MiddleMouseColor]; + colorRMB.BackColor = pal[AsciiPaintCanvas.RightMouseColor]; + //AsciiPumper.Properties.Settings.Default. + + /*AsciiPaintCanvas.Font = new Font("Consolas", 10); + if (AsciiPaintCanvas.Font.Name != "Consolas") + AsciiPaintCanvas.Font = new Font("Fixedsys", 9); + */ + this.AsciiPaintCanvas.Font = new Font((string) Program.Settings["PaintFontName"] , (float) Program.Settings["PaintFontSize"]); + AsciiPaintCanvas.CellWidth = (int)Program.Settings["CellWidth"]; + AsciiPaintCanvas.CellHeight = (int)Program.Settings["CellHeight"]; + numColumns.Value = (int)Program.Settings["Columns"]; + numRows.Value = (int)Program.Settings["Rows"]; + ColorSelector.ButtonColorChangedEventArgs ea = new ColorSelector.ButtonColorChangedEventArgs((byte)Program.Settings["LMBColor"], new MouseEventArgs(MouseButtons.Left, 0, 0, 0, 0)); + this.colorSelector1_ButtonColorChanged(this, ea); + ea = new ColorSelector.ButtonColorChangedEventArgs((byte)Program.Settings["MMBColor"], new MouseEventArgs(MouseButtons.Middle, 0, 0, 0, 0)); + this.colorSelector1_ButtonColorChanged(this, ea); + ea = new ColorSelector.ButtonColorChangedEventArgs((byte)Program.Settings["RMBColor"], new MouseEventArgs(MouseButtons.Right, 0, 0, 0, 0)); + this.colorSelector1_ButtonColorChanged(this, ea); + + + this.checkLMBfg.Checked = Program.Settings.LMBIsForeground; + this.checkMMBfg.Checked = Program.Settings.MMBIsForeground; + this.checkRMBfg.Checked = Program.Settings.RMBIsForeground; + //P//rogram.Settings.PropertyChanged += new PropertyChangedEventHandler(Settings_PropertyChanged); + + this.chkWatermark.Checked = Program.Settings.ShouldWatermark; + + AsciiPaintCanvas.CanvasModified += new EventHandler(AsciiPaintCanvas_CanvasModified); + AsciiPaintCanvas.UndoChanged += new EventHandler(AsciiPaintCanvas_UndoChanged); + AsciiPaintCanvas.RedoChanged += new EventHandler(AsciiPaintCanvas_RedoChanged); + } + + void AsciiPaintCanvas_RedoChanged(object sender, PaintCanvas.RedoChangedEventArgs e) + { + OnRedoChanged(RedoChangedEventArgs.Empty); + } + + void AsciiPaintCanvas_UndoChanged(object sender, PaintCanvas.UndoChangedEventArgs e) + { + OnUndoChanged(UndoChangedEventArgs.Empty); + } + + public class UndoChangedEventArgs : EventArgs + { + public static readonly new UndoChangedEventArgs Empty = new UndoChangedEventArgs(); + } + + public event EventHandler UndoChanged; + + protected virtual void OnUndoChanged(UndoChangedEventArgs e) + { + EventHandler handler = UndoChanged; + if (handler != null) + { + handler(this, e); + } + } + + public class RedoChangedEventArgs : EventArgs + { + public static readonly new RedoChangedEventArgs Empty = new RedoChangedEventArgs(); + } + + public event EventHandler RedoChanged; + + protected virtual void OnRedoChanged(RedoChangedEventArgs e) + { + EventHandler handler = RedoChanged; + if (handler != null) + { + handler(this, e); + } + } + + void AsciiPaintCanvas_CanvasModified(object sender, PaintCanvas.CanvasModifiedEventArgs e) + { + FileModified = true; + } + + void Settings_PropertyChanged(object sender, PropertyChangedEventArgs e) + { + //AsciiPaintCanvas.CompleteRepaint(); + } + + private void MainForm_Load(object sender, EventArgs e) + { + + } + + private void numColumns_ValueChanged(object sender, EventArgs e) + { + if ( !this.m_LoadingFile ) + AsciiPaintCanvas.Columns = (int) numColumns.Value; + + } + + private void numRows_ValueChanged(object sender, EventArgs e) + { + if ( !this.m_LoadingFile ) + AsciiPaintCanvas.Rows = (int) numRows.Value; + } + + private void colorSelector1_ButtonColorChanged(object sender, ColorSelector.ButtonColorChangedEventArgs e) + { + switch (e.MouseEvent.Button) + { + + case MouseButtons.Left: + AsciiPaintCanvas.LeftMouseColor = e.ColorIndex; + colorLMB.BackColor = colorSelector1.Colors[e.ColorIndex]; + Program.Settings.LMBColor = e.ColorIndex; + break; + case MouseButtons.Middle: + AsciiPaintCanvas.MiddleMouseColor = e.ColorIndex; + colorMMB.BackColor = colorSelector1.Colors[e.ColorIndex]; + Program.Settings.MMBColor = e.ColorIndex; + break; + case MouseButtons.Right: + AsciiPaintCanvas.RightMouseColor = e.ColorIndex; + colorRMB.BackColor = colorSelector1.Colors[e.ColorIndex]; + Program.Settings.RMBColor = e.ColorIndex; + break; + default: + throw new Exception("Invalid mouse button color changed."); + } + } + + public const string WaterMark = "http://code.google.com/p/asciipumper/ "; + + public char WatermarkCharAtPos(int pos) + { + string watermark = txtWatermark.Text; + if (watermark == "") + watermark = WaterMark; + + return watermark[pos % watermark.Length]; + } + + private const char ColorControl = '\x0003'; + private const char UnderlineControl = '\x001F'; + private const char BoldControl = '\x0002'; + private const char PlainControl = '\x000F'; + private const char ReverseControl = '\x0016'; + + public string GetIRCString( bool watermark) + { + StringBuilder sb = new StringBuilder(); + CellInfo lastcell; + int rowcount = 0; + + + foreach (List row in AsciiPaintCanvas.CellRows) + { + rowcount++; + if (rowcount > AsciiPaintCanvas.Rows) + break; + + // something that will not be used normally so that color is always printed at beginning of line + lastcell = new CellInfo('z', 100, 100); + + int cellcount = 0; + + foreach (CellInfo cell in row) + { // FIXME: check for digits and use two digit color code. + cellcount++; + if (cellcount > AsciiPaintCanvas.Columns) + break; + if (lastcell.Bold != cell.Bold) + sb.Append(BoldControl); + if (lastcell.Underlined != cell.Underlined) + sb.Append(UnderlineControl); + if (cell.Character == ' ' && watermark) + { + cell.ForeColor = cell.BackColor; + char character = WatermarkCharAtPos(cellcount - 1); + if (lastcell.BackColor != cell.BackColor || lastcell.ForeColor != cell.BackColor) + { + if (cell.BackColor < 10 && char.IsDigit(character)) + sb.AppendFormat(ColorControl + "{0},0{1}{2}", cell.ForeColor, cell.BackColor, character); + else + sb.AppendFormat(ColorControl + "{0},{1}{2}", cell.ForeColor, cell.BackColor, character); + } + else + sb.Append(character); + } + else if (lastcell.BackColor != cell.BackColor) + { + if (char.IsDigit(cell.Character) || cell.Character == ',' ) + { + if (cell.BackColor < 10 && char.IsDigit(cell.Character)) + sb.AppendFormat(ColorControl + "{0},0{1}{2}", cell.ForeColor, cell.BackColor, cell.Character); + else + sb.AppendFormat(ColorControl + "{0},{1}{2}", cell.ForeColor, cell.BackColor, cell.Character); + } + else + sb.AppendFormat(ColorControl + "{0},{1}{2}", cell.ForeColor, cell.BackColor, cell.Character); + } + else if (lastcell.ForeColor != cell.ForeColor) + { + if (char.IsDigit(cell.Character)) + { + if (cell.ForeColor < 10 && char.IsDigit(cell.Character)) + sb.AppendFormat(ColorControl + "0{0}{1}", cell.ForeColor, cell.Character); + else + sb.AppendFormat(ColorControl + "{0}{1}", cell.ForeColor, cell.Character); + } + else if (cell.Character == ',') + { + if (cell.BackColor < 10 && char.IsDigit(cell.Character)) + sb.AppendFormat(ColorControl + "{0},0{1}{2}", cell.ForeColor, cell.BackColor, cell.Character); + else + sb.AppendFormat(ColorControl + "{0},{1}{2}", cell.ForeColor, cell.BackColor, cell.Character); + } + else + sb.AppendFormat(ColorControl + "{0}{1}", cell.ForeColor, cell.Character); + } + else + sb.Append(cell.Character); + lastcell = cell; + } + sb.Append("\r\n"); + } + return sb.ToString(); + } + + + private void button1_Click(object sender, EventArgs e) + { + + Cursor cur = Cursor.Current; + Cursor.Current = Cursors.WaitCursor; + try + { + Clipboard.SetText(GetIRCString(chkWatermark.Checked), TextDataFormat.Text); + } + finally + { + Cursor.Current = cur; + } + + } + + private void aboutToolStripMenuItem_Click(object sender, EventArgs e) + { + AboutBox1 about = new AboutBox1(); + about.ShowDialog(this); + } + + public void SaveDocument() + { + if ( File.Exists(m_FileName) ) + { + Stream stream = File.OpenWrite(m_FileName); + StreamWriter writer = new StreamWriter(stream); + writer.WriteLine(GetIRCString(false)); + + writer.Close(); + this.FileModified = false; + } + else + saveAsToolStripMenuItem_Click(this, EventArgs.Empty); + } + + private void MainForm_FormClosing(object sender, FormClosingEventArgs e) + { + if (AsciiPaintCanvas.Modified == true) + { + DialogResult res = MessageBox.Show(this, m_FileName + " has been modified. Would you like to save changes?", "Save changes?", MessageBoxButtons.YesNoCancel); + if (res == DialogResult.Yes) + { + if ( File.Exists(m_FileName) ) + { + Stream stream = File.OpenWrite(m_FileName); + StreamWriter writer = new StreamWriter(stream); + writer.WriteLine(GetIRCString(false)); + + writer.Close(); + this.m_FileModified = false; + } + else + saveAsToolStripMenuItem_Click(this, EventArgs.Empty); + } + else if (res == DialogResult.Cancel) + { + e.Cancel = true; + } + else if (res == DialogResult.No) + { + + } + } + + Program.Settings.PropertyChanged -= new PropertyChangedEventHandler(Settings_PropertyChanged); + + Program.Settings.LMBIsForeground = checkLMBfg.Checked; + Program.Settings.MMBIsForeground = checkMMBfg.Checked; + Program.Settings.RMBIsForeground = checkRMBfg.Checked; + + Program.Settings.ShouldWatermark = chkWatermark.Checked; + + Program.Settings.Save(); + } + + private void checkLMBfg_CheckedChanged(object sender, EventArgs e) + { + AsciiPaintCanvas.LeftMouseIsForeground = checkLMBfg.Checked; + + } + + private void checkMMBfg_CheckedChanged(object sender, EventArgs e) + { + AsciiPaintCanvas.MiddleMouseIsForeground = checkMMBfg.Checked; + } + + private void checkRMBfg_CheckedChanged(object sender, EventArgs e) + { + AsciiPaintCanvas.RightMouseIsForeground = checkRMBfg.Checked; + } + + private void linklabelVersion_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + ProcessStartInfo pi = new ProcessStartInfo("http://code.google.com/p/asciipumper/"); + Process.Start(pi); + } + + private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) + { + DialogResult res = saveFileDialog.ShowDialog(this); + if (res == DialogResult.OK) + { + Stream stream = saveFileDialog.OpenFile(); + FileName = saveFileDialog.FileName; + StreamWriter writer = new StreamWriter(stream); + writer.WriteLine(GetIRCString(false)); + + writer.Close(); + this.FileModified = false; + + } + } + + private bool m_LoadingFile = false; + + private void openToolStripMenuItem_Click(object sender, EventArgs e) + { + DialogResult res = openFileDialog.ShowDialog(this); + if (res == DialogResult.OK) + { + Cursor cur = Cursor.Current; + Cursor.Current = Cursors.WaitCursor; + try + { + m_LoadingFile = true; + Stream stream = openFileDialog.OpenFile(); + AsciiPaintCanvas.LoadStream(stream); + stream.Close(); + numColumns.Value = AsciiPaintCanvas.Columns; + numRows.Value = AsciiPaintCanvas.Rows; + m_LoadingFile = false; + } + finally + { + Cursor.Current = cur; + } + + + } + } + + private void optionsToolStripMenuItem_Click(object sender, EventArgs e) + { + + + } + + void form_SettingsSaved(object sender, OptionsForm.SettingsSavedEventArgs e) + { + AsciiPaintCanvas.CompleteRepaint(); + } + + public void RepaintCanvas() + { + AsciiPaintCanvas.CompleteRepaint(); + } + + private void exitToolStripMenuItem_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void radioPaintBrush_CheckedChanged(object sender, EventArgs e) + { + if (radioPaintBrush.Checked) + AsciiPaintCanvas.PaintMode = PaintCanvas.PaintModes.PaintBrush; + } + + private void radioFill_CheckedChanged(object sender, EventArgs e) + { + if (radioFill.Checked) + AsciiPaintCanvas.PaintMode = PaintCanvas.PaintModes.Fill; + } + + private void MainForm_Resize(object sender, EventArgs e) + { + + } + + private void chkWatermark_CheckedChanged(object sender, EventArgs e) + { + + } + + public void ImportImage(string filename) + { + AsciiPaintCanvas.ImportImage(filename); + numColumns.Value = AsciiPaintCanvas.Columns; + numRows.Value = AsciiPaintCanvas.Rows; + } + + private void txtWatermark_Enter(object sender, EventArgs e) + { + txtWatermark.SelectAll(); + } + + public void PrintToGraphicDevice(Graphics graphics, PrintPageEventArgs e) + { + AsciiPaintCanvas.PrintToGraphicDevice(graphics, e); + } + + private void radioBold_CheckedChanged(object sender, EventArgs e) + { + if (radioBold.Checked == true) + AsciiPaintCanvas.PaintMode = PaintCanvas.PaintModes.Bold; + } + + private void radioUnderline_CheckedChanged(object sender, EventArgs e) + { + if (radioUnderline.Checked == true) + AsciiPaintCanvas.PaintMode = PaintCanvas.PaintModes.Underline; + } + + private void radioRemoveFormatting_CheckedChanged(object sender, EventArgs e) + { + if (radioRemoveFormatting.Checked == true) + AsciiPaintCanvas.PaintMode = PaintCanvas.PaintModes.RemoveFormatting; + } + } +} \ No newline at end of file diff --git a/source/MainForm.resx b/source/MainForm.resx new file mode 100644 index 0000000..b501723 --- /dev/null +++ b/source/MainForm.resx @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 133, 17 + + + 254, 17 + + + 498, 17 + + + 631, 17 + + + + + AAABAAIAEBAQAAAABAAoAQAAJgAAACAgEAAAAAQA6AIAAE4BAAAoAAAAEAAAACAAAAABAAQAAAAAAIAA + AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ + AAAA//8A/wAAAP8A/wD//wAA////AACIiIgAAAAAAIiIiAAAAAAACZmQAAzMAAAJmZAAzMwAAAmZkADM + zAAACZmQAAzMAAAJmZAAAHAAAAmZkAAAcAAACZmQAAB3AAAJmZAAAAcAAAmZkAAABwAACZmQAAB3AAAA + mQAAB3AAAAAHAAB3AAAAAAd3d3AAAAAAAAAAAAAAwP8AAMD/AADh4wAA4cMAAOHDAADh4wAA4fcAAOH3 + AADh8wAA4fsAAOH7AADh8wAA8+cAAPvPAAD4HwAA//8AACgAAAAgAAAAQAAAAAEABAAAAAAAAAIAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAACIiIiIiIAAAAAAAAAAAAAACIiIiIgAAA + AAAAAAAAAAAAiIiIiIAAAAAAAAAAAAAAAAiIiIgAAAAAAAAAAAAAAAAAmZmQAAAAAAAAAAAAAAAAAJmZ + kAAAAADMwAAAAAAAAACZmZAAAAAMzMwAAAAAAAAAmZmQAAAAzMzMwAAAAAAAAJmZkAAAAMzMzMAAAAAA + AACZmZAAAADMzMzAAAAAAAAAmZmQAAAAzMzMwAAAAAAAAJmZkAAAAAzMzAAAAAAAAACZmZAAAAAMzMwA + AAAAAAAAmZmQAAAADMzMAAAAAAAAAJmZkAAAAAAHAAAAAAAAAACZmZAAAAAAB3AAAAAAAAAAmZmQAAAA + AABwAAAAAAAAAJmZkAAAAAAAcAAAAAAAAACZmZAAAAAAB3AAAAAAAAAAmZmQAAAAAAcAAAAAAAAAAJmZ + kAAAAAAHAAAAAAAAAACZmZAAAAAABwAAAAAAAAAAmZmQAAAAAAcAAAAAAAAAAJmZkAAAAAAHAAAAAAAA + AACZmZAAAAAAdwAAAAAAAAAACZkAAAAAB3AAAAAAAAAAAABwAAAAAAcAAAAAAAAAAAAAcAAAAAB3AAAA + AAAAAAAAAHcAAAAHcAAAAAAAAAAAAAAHd3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////+AD///wB + ///8Af///gP///8H////B/x//wf4P/8H8B//B/Af/wfwH/8H8B//B/g//wf4P/8H+D//B/7//wf+f/8H + /3//B/9//wf+f/8H/v//B/7//wf+//8H/v//B/7//wf8//+P+f//3/v//9/z///P5///4A///////w== + + + \ No newline at end of file diff --git a/source/OptionsForm.Designer.cs b/source/OptionsForm.Designer.cs new file mode 100644 index 0000000..c85d8c8 --- /dev/null +++ b/source/OptionsForm.Designer.cs @@ -0,0 +1,444 @@ +namespace AsciiPumper +{ + partial class OptionsForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.lbCategories = new System.Windows.Forms.ListBox(); + this.grpEditor = new System.Windows.Forms.GroupBox(); + this.tableEditor = new System.Windows.Forms.TableLayoutPanel(); + this.lblEditorFont = new System.Windows.Forms.Label(); + this.lblSampleText = new System.Windows.Forms.Label(); + this.btnEditorFont = new System.Windows.Forms.Button(); + this.lblCellWidth = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.lblPx1 = new System.Windows.Forms.Label(); + this.numCellWidth = new System.Windows.Forms.NumericUpDown(); + this.lblCellHeight = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.lblPx2 = new System.Windows.Forms.Label(); + this.numCellHeight = new System.Windows.Forms.NumericUpDown(); + this.lblSeperatorColor = new System.Windows.Forms.Label(); + this.panel3 = new System.Windows.Forms.Panel(); + this.btnSeperatorColor = new System.Windows.Forms.Button(); + this.colorSeperator = new System.Windows.Forms.PictureBox(); + this.lblHighlightColor = new System.Windows.Forms.Label(); + this.panel4 = new System.Windows.Forms.Panel(); + this.btnHighlightColor = new System.Windows.Forms.Button(); + this.colorHighlight = new System.Windows.Forms.PictureBox(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnApply = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.fontdlgEditorFont = new System.Windows.Forms.FontDialog(); + this.colordlgSeperator = new System.Windows.Forms.ColorDialog(); + this.colordlgHighlight = new System.Windows.Forms.ColorDialog(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.grpEditor.SuspendLayout(); + this.tableEditor.SuspendLayout(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numCellWidth)).BeginInit(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numCellHeight)).BeginInit(); + this.panel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.colorSeperator)).BeginInit(); + this.panel4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.colorHighlight)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.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.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.lbCategories); + this.splitContainer1.Panel1MinSize = 85; + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.grpEditor); + this.splitContainer1.Size = new System.Drawing.Size(508, 330); + this.splitContainer1.SplitterDistance = 95; + this.splitContainer1.SplitterWidth = 5; + this.splitContainer1.TabIndex = 0; + // + // lbCategories + // + this.lbCategories.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbCategories.FormattingEnabled = true; + this.lbCategories.ItemHeight = 17; + this.lbCategories.Items.AddRange(new object[] { + "Editor"}); + this.lbCategories.Location = new System.Drawing.Point(0, 0); + this.lbCategories.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.lbCategories.Name = "lbCategories"; + this.lbCategories.Size = new System.Drawing.Size(95, 327); + this.lbCategories.TabIndex = 0; + // + // grpEditor + // + this.grpEditor.Controls.Add(this.tableEditor); + this.grpEditor.Dock = System.Windows.Forms.DockStyle.Fill; + this.grpEditor.Location = new System.Drawing.Point(0, 0); + this.grpEditor.Name = "grpEditor"; + this.grpEditor.Size = new System.Drawing.Size(408, 330); + this.grpEditor.TabIndex = 1; + this.grpEditor.TabStop = false; + this.grpEditor.Text = "Editor"; + // + // tableEditor + // + this.tableEditor.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.tableEditor.ColumnCount = 3; + this.tableEditor.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 40.44586F)); + this.tableEditor.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 59.55414F)); + this.tableEditor.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 82F)); + this.tableEditor.Controls.Add(this.lblEditorFont, 0, 0); + this.tableEditor.Controls.Add(this.lblSampleText, 1, 0); + this.tableEditor.Controls.Add(this.btnEditorFont, 2, 0); + this.tableEditor.Controls.Add(this.lblCellWidth, 0, 1); + this.tableEditor.Controls.Add(this.panel1, 1, 1); + this.tableEditor.Controls.Add(this.lblCellHeight, 0, 2); + this.tableEditor.Controls.Add(this.panel2, 1, 2); + this.tableEditor.Controls.Add(this.lblSeperatorColor, 0, 3); + this.tableEditor.Controls.Add(this.panel3, 1, 3); + this.tableEditor.Controls.Add(this.lblHighlightColor, 0, 4); + this.tableEditor.Controls.Add(this.panel4, 1, 4); + this.tableEditor.Location = new System.Drawing.Point(6, 24); + this.tableEditor.Name = "tableEditor"; + this.tableEditor.RowCount = 6; + this.tableEditor.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 44.28571F)); + this.tableEditor.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 55.71429F)); + this.tableEditor.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); + this.tableEditor.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F)); + this.tableEditor.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F)); + this.tableEditor.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 134F)); + this.tableEditor.Size = new System.Drawing.Size(396, 300); + this.tableEditor.TabIndex = 0; + // + // lblEditorFont + // + this.lblEditorFont.AutoSize = true; + this.lblEditorFont.Location = new System.Drawing.Point(3, 0); + this.lblEditorFont.Name = "lblEditorFont"; + this.lblEditorFont.Size = new System.Drawing.Size(73, 17); + this.lblEditorFont.TabIndex = 0; + this.lblEditorFont.Text = "Editor font:"; + // + // lblSampleText + // + this.lblSampleText.AutoSize = true; + this.lblSampleText.Location = new System.Drawing.Point(130, 0); + this.lblSampleText.Name = "lblSampleText"; + this.lblSampleText.Size = new System.Drawing.Size(76, 17); + this.lblSampleText.TabIndex = 1; + this.lblSampleText.Text = "Sample text"; + // + // btnEditorFont + // + this.btnEditorFont.Location = new System.Drawing.Point(316, 3); + this.btnEditorFont.Name = "btnEditorFont"; + this.btnEditorFont.Size = new System.Drawing.Size(25, 23); + this.btnEditorFont.TabIndex = 2; + this.btnEditorFont.Text = "..."; + this.btnEditorFont.UseVisualStyleBackColor = true; + this.btnEditorFont.Click += new System.EventHandler(this.btnEditorFont_Click); + // + // lblCellWidth + // + this.lblCellWidth.AutoSize = true; + this.lblCellWidth.Location = new System.Drawing.Point(3, 29); + this.lblCellWidth.Name = "lblCellWidth"; + this.lblCellWidth.Size = new System.Drawing.Size(67, 17); + this.lblCellWidth.TabIndex = 3; + this.lblCellWidth.Text = "Cell width:"; + // + // panel1 + // + this.panel1.Controls.Add(this.lblPx1); + this.panel1.Controls.Add(this.numCellWidth); + this.panel1.Location = new System.Drawing.Point(130, 32); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(180, 30); + this.panel1.TabIndex = 4; + // + // lblPx1 + // + this.lblPx1.AutoSize = true; + this.lblPx1.Location = new System.Drawing.Point(85, 5); + this.lblPx1.Name = "lblPx1"; + this.lblPx1.Size = new System.Drawing.Size(22, 17); + this.lblPx1.TabIndex = 1; + this.lblPx1.Text = "px"; + // + // numCellWidth + // + this.numCellWidth.Location = new System.Drawing.Point(3, 3); + this.numCellWidth.Minimum = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.numCellWidth.Name = "numCellWidth"; + this.numCellWidth.Size = new System.Drawing.Size(76, 25); + this.numCellWidth.TabIndex = 0; + this.numCellWidth.Value = new decimal(new int[] { + 5, + 0, + 0, + 0}); + // + // lblCellHeight + // + this.lblCellHeight.AutoSize = true; + this.lblCellHeight.Location = new System.Drawing.Point(3, 65); + this.lblCellHeight.Name = "lblCellHeight"; + this.lblCellHeight.Size = new System.Drawing.Size(72, 17); + this.lblCellHeight.TabIndex = 5; + this.lblCellHeight.Text = "Cell height:"; + // + // panel2 + // + this.panel2.Controls.Add(this.lblPx2); + this.panel2.Controls.Add(this.numCellHeight); + this.panel2.Location = new System.Drawing.Point(130, 68); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(180, 24); + this.panel2.TabIndex = 6; + // + // lblPx2 + // + this.lblPx2.AutoSize = true; + this.lblPx2.Location = new System.Drawing.Point(85, 1); + this.lblPx2.Name = "lblPx2"; + this.lblPx2.Size = new System.Drawing.Size(22, 17); + this.lblPx2.TabIndex = 3; + this.lblPx2.Text = "px"; + // + // numCellHeight + // + this.numCellHeight.Location = new System.Drawing.Point(3, -1); + this.numCellHeight.Minimum = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.numCellHeight.Name = "numCellHeight"; + this.numCellHeight.Size = new System.Drawing.Size(76, 25); + this.numCellHeight.TabIndex = 2; + this.numCellHeight.Value = new decimal(new int[] { + 5, + 0, + 0, + 0}); + // + // lblSeperatorColor + // + this.lblSeperatorColor.AutoSize = true; + this.lblSeperatorColor.Location = new System.Drawing.Point(3, 95); + this.lblSeperatorColor.Name = "lblSeperatorColor"; + this.lblSeperatorColor.Size = new System.Drawing.Size(103, 17); + this.lblSeperatorColor.TabIndex = 7; + this.lblSeperatorColor.Text = "Seperator color:"; + // + // panel3 + // + this.panel3.Controls.Add(this.btnSeperatorColor); + this.panel3.Controls.Add(this.colorSeperator); + this.panel3.Location = new System.Drawing.Point(130, 98); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(180, 29); + this.panel3.TabIndex = 8; + // + // btnSeperatorColor + // + this.btnSeperatorColor.Location = new System.Drawing.Point(29, 3); + this.btnSeperatorColor.Name = "btnSeperatorColor"; + this.btnSeperatorColor.Size = new System.Drawing.Size(25, 23); + this.btnSeperatorColor.TabIndex = 3; + this.btnSeperatorColor.Text = "..."; + this.btnSeperatorColor.UseVisualStyleBackColor = true; + this.btnSeperatorColor.Click += new System.EventHandler(this.button1_Click); + // + // colorSeperator + // + this.colorSeperator.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.colorSeperator.Location = new System.Drawing.Point(3, 3); + this.colorSeperator.Name = "colorSeperator"; + this.colorSeperator.Size = new System.Drawing.Size(20, 20); + this.colorSeperator.TabIndex = 0; + this.colorSeperator.TabStop = false; + // + // lblHighlightColor + // + this.lblHighlightColor.AutoSize = true; + this.lblHighlightColor.Location = new System.Drawing.Point(3, 130); + this.lblHighlightColor.Name = "lblHighlightColor"; + this.lblHighlightColor.Size = new System.Drawing.Size(97, 17); + this.lblHighlightColor.TabIndex = 9; + this.lblHighlightColor.Text = "Highlight color:"; + // + // panel4 + // + this.panel4.Controls.Add(this.btnHighlightColor); + this.panel4.Controls.Add(this.colorHighlight); + this.panel4.Location = new System.Drawing.Point(130, 133); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(180, 29); + this.panel4.TabIndex = 10; + // + // btnHighlightColor + // + this.btnHighlightColor.Location = new System.Drawing.Point(29, 3); + this.btnHighlightColor.Name = "btnHighlightColor"; + this.btnHighlightColor.Size = new System.Drawing.Size(25, 23); + this.btnHighlightColor.TabIndex = 5; + this.btnHighlightColor.Text = "..."; + this.btnHighlightColor.UseVisualStyleBackColor = true; + this.btnHighlightColor.Click += new System.EventHandler(this.button1_Click_1); + // + // colorHighlight + // + this.colorHighlight.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.colorHighlight.Location = new System.Drawing.Point(3, 3); + this.colorHighlight.Name = "colorHighlight"; + this.colorHighlight.Size = new System.Drawing.Size(20, 20); + this.colorHighlight.TabIndex = 4; + this.colorHighlight.TabStop = false; + // + // btnOK + // + this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnOK.Location = new System.Drawing.Point(213, 338); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(91, 29); + this.btnOK.TabIndex = 1; + this.btnOK.Text = "&Ok"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnApply + // + this.btnApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnApply.Location = new System.Drawing.Point(310, 338); + this.btnApply.Name = "btnApply"; + this.btnApply.Size = new System.Drawing.Size(91, 29); + this.btnApply.TabIndex = 2; + this.btnApply.Text = "&Apply"; + this.btnApply.UseVisualStyleBackColor = true; + this.btnApply.Click += new System.EventHandler(this.btnApply_Click); + // + // btnCancel + // + this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnCancel.Location = new System.Drawing.Point(407, 338); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(91, 29); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "&Cancel"; + this.btnCancel.UseVisualStyleBackColor = true; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // OptionsForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(510, 379); + this.Controls.Add(this.btnCancel); + this.Controls.Add(this.btnApply); + this.Controls.Add(this.btnOK); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.Name = "OptionsForm"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Ascii Pumper Options"; + this.Load += new System.EventHandler(this.OptionsForm_Load); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.ResumeLayout(false); + this.grpEditor.ResumeLayout(false); + this.tableEditor.ResumeLayout(false); + this.tableEditor.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numCellWidth)).EndInit(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numCellHeight)).EndInit(); + this.panel3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.colorSeperator)).EndInit(); + this.panel4.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.colorHighlight)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.ListBox lbCategories; + private System.Windows.Forms.GroupBox grpEditor; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Button btnApply; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.TableLayoutPanel tableEditor; + private System.Windows.Forms.Label lblEditorFont; + private System.Windows.Forms.Label lblSampleText; + private System.Windows.Forms.Button btnEditorFont; + private System.Windows.Forms.FontDialog fontdlgEditorFont; + private System.Windows.Forms.Label lblCellWidth; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label lblPx1; + private System.Windows.Forms.NumericUpDown numCellWidth; + private System.Windows.Forms.Label lblCellHeight; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label lblPx2; + private System.Windows.Forms.NumericUpDown numCellHeight; + private System.Windows.Forms.Label lblSeperatorColor; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.PictureBox colorSeperator; + private System.Windows.Forms.Button btnSeperatorColor; + private System.Windows.Forms.ColorDialog colordlgSeperator; + private System.Windows.Forms.ColorDialog colordlgHighlight; + private System.Windows.Forms.Label lblHighlightColor; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.Button btnHighlightColor; + private System.Windows.Forms.PictureBox colorHighlight; + } +} \ No newline at end of file diff --git a/source/OptionsForm.cs b/source/OptionsForm.cs new file mode 100644 index 0000000..4090168 --- /dev/null +++ b/source/OptionsForm.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace AsciiPumper +{ + public partial class OptionsForm : Form + { + public OptionsForm() + { + InitializeComponent(); + fontdlgEditorFont.Font = new Font(Program.Settings.PaintFontName, Program.Settings.PaintFontSize); + lblSampleText.Font = new Font(Program.Settings.PaintFontName, Program.Settings.PaintFontSize); + colorSeperator.BackColor = Program.Settings.SeperatorColor; + colorHighlight.BackColor = Program.Settings.HighlightColor; + numCellHeight.Value = Program.Settings.CellHeight; + numCellWidth.Value = Program.Settings.CellWidth; + colordlgHighlight.Color = Program.Settings.HighlightColor; + colordlgSeperator.Color = Program.Settings.SeperatorColor; + + + } + + public class SettingsSavedEventArgs : EventArgs + { + public static readonly new SettingsSavedEventArgs Empty = new SettingsSavedEventArgs(); + } + + public event EventHandler SettingsSaved; + + protected virtual void OnSettingsSaved(SettingsSavedEventArgs e) + { + EventHandler handler = SettingsSaved; + if (handler != null) + { + handler(this, e); + } + } + + private void OptionsForm_Load(object sender, EventArgs e) + { + lbCategories.SelectedValue = "Editor"; + + } + + private void ApplySettings() + { + Cursor cur = Cursor.Current; + Cursor.Current = Cursors.WaitCursor; + try + { + if (fontdlgEditorFont.Font.Name != Program.Settings.PaintFontName) + { + Program.Settings.PaintFontName = fontdlgEditorFont.Font.Name; + } + if (fontdlgEditorFont.Font.Size != Program.Settings.PaintFontSize) + { + Program.Settings.PaintFontSize = fontdlgEditorFont.Font.Size; + } + if (colordlgHighlight.Color != Program.Settings.HighlightColor) + Program.Settings.HighlightColor = colordlgHighlight.Color; + if (colordlgSeperator.Color != Program.Settings.SeperatorColor) + Program.Settings.SeperatorColor = colordlgSeperator.Color; + if (numCellHeight.Value != Program.Settings.CellHeight) + Program.Settings.CellHeight = (int)numCellHeight.Value; + if (numCellWidth.Value != Program.Settings.CellWidth) + Program.Settings.CellWidth = (int) numCellWidth.Value; + + Program.Settings.Save(); + this.OnSettingsSaved(SettingsSavedEventArgs.Empty); + } + finally + { + Cursor.Current = cur; + } + + } + + private void btnOK_Click(object sender, EventArgs e) + { + ApplySettings(); + this.DialogResult = DialogResult.OK; + this.Close(); + + } + + private void btnApply_Click(object sender, EventArgs e) + { + ApplySettings(); + } + + private void btnCancel_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + this.Close(); + + } + + private void btnEditorFont_Click(object sender, EventArgs e) + { + DialogResult res = fontdlgEditorFont.ShowDialog(this); + if (res == DialogResult.OK) + { + lblSampleText.Font = fontdlgEditorFont.Font; + } + } + + private void button1_Click(object sender, EventArgs e) + { + DialogResult res = colordlgSeperator.ShowDialog(this); + if (res == DialogResult.OK) + colorSeperator.BackColor = colordlgSeperator.Color; + + } + + private void button1_Click_1(object sender, EventArgs e) + { + + DialogResult res = colordlgHighlight.ShowDialog(this); + if (res == DialogResult.OK) + colorHighlight.BackColor = colordlgHighlight.Color; + + } + } +} \ No newline at end of file diff --git a/source/OptionsForm.resx b/source/OptionsForm.resx new file mode 100644 index 0000000..8be422c --- /dev/null +++ b/source/OptionsForm.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 165, 17 + + + 286, 17 + + \ No newline at end of file diff --git a/source/PaintAction.cs b/source/PaintAction.cs new file mode 100644 index 0000000..98a76cd --- /dev/null +++ b/source/PaintAction.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; + +namespace AsciiPumper +{ + public class PaintAction : IUndoableAction + { + + public List PaintedPoints = new List(); + public byte OldPaintColor = 0; + public byte NewPaintColor = 1; + public bool IsForeground = false; + + public bool PointExists(Point point) + { + foreach (Point p in PaintedPoints) + { + if (p.X == point.X && p.Y == point.Y) + return true; + } + return false; + } + + #region IUndoableAction Members + public void Undo(PaintCanvas canvas) + { + foreach (Point p in PaintedPoints) + { + if (IsForeground) + canvas.CellRows[p.Y][p.X].ForeColor = OldPaintColor; + else + canvas.CellRows[p.Y][p.X].BackColor = OldPaintColor; + } + canvas.RepaintAll(); + } + + public void Redo(PaintCanvas canvas) + { + foreach (Point p in PaintedPoints) + { + if (IsForeground) + canvas.CellRows[p.Y][p.X].ForeColor = NewPaintColor; + else + canvas.CellRows[p.Y][p.X].BackColor = NewPaintColor; + } + canvas.RepaintAll(); + } + + #endregion + } +} diff --git a/source/PaintCanvas.Designer.cs b/source/PaintCanvas.Designer.cs new file mode 100644 index 0000000..ff30ccd --- /dev/null +++ b/source/PaintCanvas.Designer.cs @@ -0,0 +1,56 @@ +namespace AsciiPumper +{ + partial class PaintCanvas + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // PaintCanvas + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.DoubleBuffered = true; + this.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Name = "PaintCanvas"; + this.Size = new System.Drawing.Size(666, 413); + this.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.PaintCanvas_PreviewKeyDown); + this.Load += new System.EventHandler(this.PaintCanvas_Load); + this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.PaintCanvas_MouseDown); + this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.PaintCanvas_MouseMove); + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.PaintCanvas_KeyPress); + this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.PaintCanvas_MouseUp); + this.SizeChanged += new System.EventHandler(this.PaintCanvas_SizeChanged); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.PaintCanvas_KeyDown); + this.ResumeLayout(false); + + } + + #endregion + } +} diff --git a/source/PaintCanvas.cs b/source/PaintCanvas.cs new file mode 100644 index 0000000..6cecda7 --- /dev/null +++ b/source/PaintCanvas.cs @@ -0,0 +1,1265 @@ +#region Copyright (c) 2007, PP4L Software +/************************************************************************************ + +Copyright 2007, PP4L Software +Author: Lampiasis + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +'***********************************************************************************/ +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using System.IO; +using System.Text.RegularExpressions; +using System.Drawing.Printing; + + +namespace AsciiPumper +{ + public partial class PaintCanvas : UserControl + { + public PaintCanvas() + { + InitializeComponent(); + + CellRows = new List>(); + ResizeCellRows(); + + + UpdateSeperatorPen(); + PaintCanvas_SizeChanged(this, EventArgs.Empty); + PaintIntoBackground(); + Program.Settings.PropertyChanged += new PropertyChangedEventHandler(Settings_PropertyChanged); + + } + + + public Stack UndoList = new Stack(); + public Stack RedoList = new Stack(); + public IUndoableAction CurrentAction; + + private bool m_Modified; + + /// + /// Gets or sets the Modified. + /// + public bool Modified + { + get { return m_Modified; } + set + { + if (m_Modified != value) + { + if (value == true) + OnCanvasModified(CanvasModifiedEventArgs.Empty); + m_Modified = value; + } + } + } + + public class CanvasModifiedEventArgs : EventArgs + { + public static readonly new CanvasModifiedEventArgs Empty = new CanvasModifiedEventArgs(); + } + + public event EventHandler CanvasModified; + + protected virtual void OnCanvasModified(CanvasModifiedEventArgs e) + { + EventHandler handler = CanvasModified; + if (handler != null) + { + handler(this, e); + } + } + + public void CompleteRepaint() + { + this.PaintIntoBackground(); + this.Invalidate(); + } + + void Settings_PropertyChanged(object sender, PropertyChangedEventArgs e) + { + bool invalidate = false; + + if ( e.PropertyName == "PaintFontName" ) + { + this.Font = new Font((string) Program.Settings["PaintFontName"], (float) Program.Settings["PaintFontSize"]); + invalidate = true; + } + if (e.PropertyName == "PaintFontSize") + { + this.Font = new Font((string) Program.Settings["PaintFontName"], (float) Program.Settings["PaintFontSize"]); + invalidate = true; + } + if (e.PropertyName == "CellWidth") + { + this.CellWidth = Program.Settings.CellWidth; + invalidate = true; + } + if (e.PropertyName == "CellHeight") + { + this.CellHeight = Program.Settings.CellHeight; + invalidate = true; + } + if (e.PropertyName == "SeperatorColor") + this.SeperatorColor = Program.Settings.SeperatorColor; + if (e.PropertyName == "HighlightColor") + this.HighlightColor = Program.Settings.HighlightColor; + + if (invalidate) + { + // this.PaintIntoBackground(); + // this.Invalidate(); + } + } + + private void ResizeCellRows( ) + { + for (int rows = 0; rows < this.Rows; rows++) + { + if ( CellRows.Count < rows + 1 ) + CellRows.Add(new List(this.Columns)); + for (int cols = 0; cols < this.Columns; cols++) + { + if ( CellRows[rows].Count < cols + 1 ) + CellRows[rows].Add( new CellInfo() ); + } + } + } + + + private void PaintCanvas_Paint(object sender, PaintEventArgs e) + { +#if false + // test + Font consolas = new Font("Consolas", 18); + m_PaintBuffer.DrawString("Test", consolas, Brushes.BlueViolet, 10, consolas.Height); + SizeF size = m_PaintBuffer.MeasureString("Test", consolas); + m_PaintBuffer.DrawString(size.Width.ToString(), consolas, Brushes.Blue, size.Width + 10, consolas.Height); + // test + Font arial = new Font("Arial", 10); + m_PaintBuffer.DrawString("Test", arial, Brushes.BlueViolet, 10, 40); + size = m_PaintBuffer.MeasureString("Test", arial); + m_PaintBuffer.DrawString(size.Width.ToString(), arial, Brushes.Blue, size.Width + 10, 40); +#endif + } + + private Image m_PaintImage; + + private Graphics m_PaintBuffer; + + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + // PaintIntoBackground(); + e.Graphics.DrawImage(m_PaintImage, e.ClipRectangle, e.ClipRectangle, GraphicsUnit.Pixel); // DrawImageUnscaledAndClipped(m_PaintImage., e.ClipRectangle); + + + } + + public void PrintToGraphicDevice(Graphics graphics, PrintPageEventArgs e ) + { + Rectangle printRect = new Rectangle( + e.MarginBounds.Top, e.MarginBounds.Left , + Math.Min(m_PaintImage.Width, e.MarginBounds.Right - e.MarginBounds.Left), + Math.Min(m_PaintImage.Height, e.MarginBounds.Bottom - e.MarginBounds.Top) + ); + + graphics.DrawImage(m_PaintImage, printRect, new Rectangle(0, 0, m_PaintImage.Width, m_PaintImage.Height), GraphicsUnit.Pixel); + } + + private void ResizeByCellSize() + { + this.Height = /*(m_Rows * ( m_SeperatorWidth / 2)) +*/ (m_Rows * m_CellHeight); + this.Width = (m_Columns * (m_SeperatorWidth / 2)) + (m_Columns * m_CellWidth); + + } + + private Point m_SelectedCellPosition = new Point(0,0); + + /// + /// Gets or sets the SelectedCellPosition. + /// + public Point SelectedCellPosition + { + get { return m_SelectedCellPosition; } + set { RepaintSingleCell(m_SelectedCellPosition); m_SelectedCellPosition = value; RepaintSingleCell(m_SelectedCellPosition); } + } + + #region Highlight Properties and methods + private void UpdateHighlightPen() + { + m_HighlightPen = new Pen(m_HighlightColor, m_HighlightWidth); + + } + + private Pen m_HighlightPen = Pens.OldLace; + + private Color m_HighlightColor = Color.OldLace; + + /// + /// Gets or sets the HighlightColor. + /// + public Color HighlightColor + { + get { return m_HighlightColor; } + set { m_HighlightColor = value; UpdateHighlightPen(); PaintIntoBackground(); this.Invalidate(); } + } + + private int m_HighlightWidth = 2; + + /// + /// Gets or sets the HighlightWidth. + /// + public int HighlightWidth + { + get { return m_HighlightWidth; } + set { m_HighlightWidth = value; UpdateHighlightPen(); PaintIntoBackground(); this.Invalidate(); } + } + #endregion + + private int m_SeperatorWidth = 1; + + /// + /// Gets or sets the SeperatorWidth. + /// + public int SeperatorWidth + { + get { return m_SeperatorWidth; } + set { m_SeperatorWidth = value; UpdateSeperatorPen(); ResizeByCellSize(); PaintIntoBackground(); this.Invalidate(); } + } + + private int m_CellWidth = 5; + + /// + /// Gets or sets the CellWidth. + /// + public int CellWidth + { + get { return m_CellWidth; } + set { m_CellWidth = value; ResizeByCellSize(); PaintIntoBackground(); this.Invalidate(); } + } + + private int m_CellHeight = 10; + + /// + /// Gets or sets the CellHeight. + /// + public int CellHeight + { + get { return m_CellHeight; } + set { m_CellHeight = value; ResizeByCellSize(); PaintIntoBackground(); this.Invalidate(); } + } + + private int m_Columns = 60; + + /// + /// Gets or sets the Columns. + /// + public int Columns + { + get { return m_Columns; } + set { m_Columns = value; ResizeCellRows(); ResizeByCellSize(); PaintIntoBackground(); this.Invalidate(); } + } + + private int m_Rows = 20; + + /// + /// Gets or sets the Rows. + /// + public int Rows + { + get { return m_Rows; } + set { m_Rows = value; ResizeCellRows(); ResizeByCellSize(); PaintIntoBackground(); this.Invalidate(); } + } + + + private Color m_SeperatorColor = Color.DarkGray; + + /// + /// Gets or sets the SeperatorColor. + /// + public Color SeperatorColor + { + get { return m_SeperatorColor; } + set { m_SeperatorColor = value; UpdateSeperatorPen(); this.Invalidate(); } + } + + private Pen m_SeperatorPen; + + private void UpdateSeperatorPen() + { + m_SeperatorPen = new Pen(m_SeperatorColor, m_SeperatorWidth); + } + + private void RepaintSingleCell(Point cellpos) + { + if ( m_DontRepaint ) + return; + + if (cellpos.X < 0 || cellpos.Y < 0 || cellpos.Y >= CellRows.Count || cellpos.X >= CellRows[0].Count) + return; + + + + /* int max_x = cellpos.X + 1; + int max_y = cellpos.Y + 1; + for (cellpos.X--; cellpos.X < max_x; cellpos.X++) + { + for (cellpos.Y--; cellpos.Y < max_y; cellpos.Y++) + { + if (cellpos.Y < 0 || cellpos.X < 0) + continue; + */ + + CellInfo ci = CellRows[cellpos.Y][cellpos.X]; + //m_PaintBuffer.FillRectangle(new SolidBrush(this.BackColor), cellpos.X * m_CellWidth, cellpos.Y * m_CellHeight, m_CellWidth, m_CellHeight); + m_PaintBuffer.FillRectangle(this.Colors.SolidBrushes[ci.BackColor], cellpos.X * m_CellWidth, cellpos.Y * m_CellHeight, m_CellWidth, m_CellHeight); + if (CellRows[cellpos.Y][cellpos.X].Character != ' ') + { + FontStyle styles = new FontStyle(); + if (ci.Bold) + styles |= FontStyle.Bold; + if (ci.Underlined) + styles |= FontStyle.Underline; + Font font = new Font(this.Font, styles); + m_PaintBuffer.DrawString(ci.Character.ToString(), font,this.Colors.SolidBrushes[ci.ForeColor], cellpos.X * m_CellWidth, cellpos.Y * m_CellHeight); + + } + m_PaintBuffer.DrawLine(m_SeperatorPen, cellpos.X * m_CellWidth, (1 + cellpos.Y) * m_CellHeight, (1 + cellpos.X) * m_CellWidth, (1 + cellpos.Y) * m_CellHeight); + m_PaintBuffer.DrawLine(m_SeperatorPen, (1 + cellpos.X) * m_CellWidth, (cellpos.Y) * m_CellHeight, (1 + cellpos.X) * m_CellWidth, (1 + cellpos.Y) * m_CellHeight); + m_PaintBuffer.DrawLine(m_SeperatorPen, (cellpos.X) * m_CellWidth, (cellpos.Y) * m_CellHeight, (1 + cellpos.X) * m_CellWidth, (cellpos.Y) * m_CellHeight); + m_PaintBuffer.DrawLine(m_SeperatorPen, (cellpos.X) * m_CellWidth, (cellpos.Y) * m_CellHeight, (cellpos.X) * m_CellWidth, (1 + cellpos.Y) * m_CellHeight); + if (m_SelectedCellPosition.X == cellpos.X && m_SelectedCellPosition.Y == cellpos.Y) + { + m_PaintBuffer.DrawRectangle(m_HighlightPen, 1 + (m_SelectedCellPosition.X * (m_CellWidth + (m_SeperatorWidth / 2))), 1 + ( m_SelectedCellPosition.Y * (m_CellHeight + (m_SeperatorWidth / 2)) ), + m_CellWidth - 2, m_CellHeight - 2); + } + // } + //} + int xpos = (cellpos.X * m_CellWidth) - 5; + int ypos = (cellpos.Y * m_CellHeight) - 5; + if ( xpos < 0 ) + xpos = 0; + if ( ypos < 0 ) + ypos = 0; + this.Invalidate(new Rectangle(new Point(xpos, ypos), new Size(m_CellWidth + 5, m_CellHeight + 5))); + } + + private void PaintIntoBackground() + { + if ( m_DontRepaint ) + return; + //m_PaintBuffer.FillRectangle(new SolidBrush(this.BackColor), 0, 0, this.Width, this.Height); + + Font boldfont = new Font(this.Font, FontStyle.Bold); + Font underlinedfont = new Font(this.Font, FontStyle.Underline); + Font bold_underlined_font = new Font(this.Font, FontStyle.Underline | FontStyle.Bold); + + CellInfo ci; + for (int row = 0; row < m_Rows; row++) + { + for (int col = 0; col < m_Columns; col++) + { + ci = CellRows[row][col]; + m_PaintBuffer.FillRectangle(this.Colors.SolidBrushes[ci.BackColor], col * m_CellWidth, row * m_CellHeight, m_CellWidth, m_CellHeight); + if (CellRows[row][col].Character != ' ') + { + Font font; + if (ci.Bold && ci.Underlined) + font = bold_underlined_font; + else if (ci.Bold) + font = boldfont; + else if (ci.Underlined) + font = underlinedfont; + else + font = this.Font; + m_PaintBuffer.DrawString(ci.Character.ToString(), font, this.Colors.SolidBrushes[ci.ForeColor], col * m_CellWidth, row * m_CellHeight); + + } + } + } + for (int i = 0; i < m_Rows; i++) + { + int ypos = (m_SeperatorWidth / 2) + i * m_CellHeight; + m_PaintBuffer.DrawLine(m_SeperatorPen, 0, ypos, this.Width, ypos); + + } + for (int i = 0; i < m_Columns; i++) + { + int xpos = (m_SeperatorWidth / 2) + i * m_CellWidth; + m_PaintBuffer.DrawLine(m_SeperatorPen, xpos, 0, xpos, this.Height); + + } + + m_PaintBuffer.DrawRectangle(m_HighlightPen, m_SelectedCellPosition.X * (m_CellWidth + (m_SeperatorWidth / 2)), m_SelectedCellPosition.Y * (m_CellHeight + (m_SeperatorWidth / 2)), + m_CellWidth, m_CellHeight); + + +#if false + // test + Font consolas = new Font("Consolas", 18, GraphicsUnit.Pixel); + m_PaintBuffer.DrawString("Test", consolas, Brushes.BlueViolet, 10, 0); + SizeF size = m_PaintBuffer.MeasureString("Test", consolas); + m_PaintBuffer.DrawString(size.Width.ToString(), consolas, Brushes.Blue, size.Width + 10, 0); + m_PaintBuffer.DrawLine(new Pen(Brushes.AliceBlue), new Point(0, consolas.Height), new Point(this.Width, consolas.Height)); + // test + Font arial = new Font("Arial", 10, GraphicsUnit.Pixel); + + m_PaintBuffer.DrawString("Test", arial, Brushes.BlueViolet, 10, consolas.Height); + size = m_PaintBuffer.MeasureString("Test", arial); + m_PaintBuffer.DrawString(size.Width.ToString(), arial, Brushes.Blue, size.Width + 10, consolas.Height); + m_PaintBuffer.DrawLine(new Pen(Brushes.Peru), new Point(0, consolas.Height + arial.Height), new Point(this.Width, consolas.Height + arial.Height)); +#endif + } + + private void PaintCanvas_SizeChanged(object sender, EventArgs e) + { + m_PaintImage = new Bitmap(this.Width, this.Height, System.Drawing.Imaging.PixelFormat.Format16bppRgb565); //.Format32bppRgb); + m_PaintBuffer = Graphics.FromImage(m_PaintImage); + PaintIntoBackground(); + } + + public enum PaintModes + { + PaintBrush, + Fill, + Bold, + Underline, + RemoveFormatting + }; + + private PaintModes m_PaintMode; + + /// + /// Gets or sets the PaintMode. + /// + public PaintModes PaintMode + { + get { return m_PaintMode; } + set { m_PaintMode = value; } + } + + private void PaintCanvas_MouseDown(object sender, MouseEventArgs e) + { + if (CurrentAction is KeypressAction) + { + CurrentAction = null; + } + + if (CurrentAction == null) + { + if ( m_PaintMode == PaintModes.PaintBrush || m_PaintMode == PaintModes.Fill ) + CurrentAction = new PaintAction(); + } + SelectAppropriateCell(e.X, e.Y); + if (m_PaintMode == PaintModes.PaintBrush || m_PaintMode == PaintModes.Fill) + PaintCellByMouseArgs(this.m_SelectedCellPosition, e); + else if (m_PaintMode == PaintModes.Bold) + { + BoldSelectedCell(); + } + else if (m_PaintMode == PaintModes.Underline) + { + UnderlineSelectedCell(); + } + else if (m_PaintMode == PaintModes.RemoveFormatting) + { + RemoveFormattingSelectedCell(); + } + } + + private void RemoveFormattingSelectedCell() + { + SelectedCell.Underlined = false; + SelectedCell.Bold = false; + RepaintSingleCell(SelectedCellPosition); + } + + public void UnderlineSelectedCell() + { + SelectedCell.Underlined = true; + RepaintSingleCell(SelectedCellPosition); + } + + public void BoldSelectedCell() + { + SelectedCell.Bold = true; // (SelectedCell.Bold ? false : true); + RepaintSingleCell(SelectedCellPosition); + } + + private void StartFillCell( Point point, byte origcolor, byte color, bool foreground) + { + if (CurrentAction is PaintAction) + { + //CurrentAction = new PaintAction(); + ((PaintAction)CurrentAction).IsForeground = foreground; + ((PaintAction)CurrentAction).NewPaintColor = color; + ((PaintAction)CurrentAction).OldPaintColor = origcolor; + } + FillCell( point, origcolor, color, foreground); + if (CurrentAction is PaintAction) + { + AddUndoAction(CurrentAction); + CurrentAction = null; + } + } + + private void PaintCellByMouseArgs(Point point, MouseEventArgs e) + { + + + switch (e.Button) + { + case MouseButtons.Left: + if ( m_PaintMode == PaintModes.Fill ) + { + if ( m_LeftMouseIsForeground ) + StartFillCell(point, CellRows[point.Y][point.X].ForeColor, m_LeftMouseColor, m_LeftMouseIsForeground); + else + StartFillCell(point, CellRows[point.Y][point.X].BackColor, m_LeftMouseColor, m_LeftMouseIsForeground); + this.Invalidate(); + } + else + PaintCell(point, m_LeftMouseColor, m_LeftMouseIsForeground); + if (m_LeftMouseIsForeground) + this.MostRecentForegroundColor = m_LeftMouseColor; + break; + case MouseButtons.Right: + if (m_PaintMode == PaintModes.Fill) + { + if (m_RightMouseIsForeground) + StartFillCell(point, CellRows[point.Y][point.X].ForeColor, m_RightMouseColor, m_RightMouseIsForeground); + else + StartFillCell(point, CellRows[point.Y][point.X].BackColor, m_RightMouseColor, m_RightMouseIsForeground); + this.Invalidate(); + } + else + PaintCell(point, m_RightMouseColor, m_RightMouseIsForeground); + if (m_RightMouseIsForeground) + this.MostRecentForegroundColor = m_RightMouseColor; + break; + case MouseButtons.Middle: + if (m_PaintMode == PaintModes.Fill) + { + if (m_MiddleMouseIsForeground) + StartFillCell(point, CellRows[point.Y][point.X].ForeColor, m_MiddleMouseColor, m_MiddleMouseIsForeground); + else + StartFillCell(point, CellRows[point.Y][point.X].BackColor, m_MiddleMouseColor, m_MiddleMouseIsForeground); + this.Invalidate(); + } + else + PaintCell(point, m_MiddleMouseColor, m_MiddleMouseIsForeground); + if (m_MiddleMouseIsForeground) + this.MostRecentForegroundColor = m_MiddleMouseColor; + break; + default: + break; + } + } + + private bool m_DontRepaint = false; + + /// + /// Gets or sets the DontRepaint = false. + /// + public bool DontRepaint + { + get { return m_DontRepaint; } + set { m_DontRepaint = value; } + } + + private void FillCell(Point point, byte origcolor, byte color, bool foreground) + { + + Point curpoint = new Point(); + if (foreground) + { + if (CellRows[point.Y][point.X].ForeColor == color) + return; + CellRows[point.Y][point.X].ForeColor = color; + } + else + { + if (CellRows[point.Y][point.X].BackColor == color) + return; + CellRows[point.Y][point.X].BackColor = color; + } + + + + if (CurrentAction is PaintAction) + { + ((PaintAction)CurrentAction).PaintedPoints.Add(point); + } + + + RepaintSingleCell(point); + + + if (point.Y - 1 >= 0) // up + { + curpoint.Y = point.Y - 1; + curpoint.X = point.X; + if (foreground) + { + if (CellRows[curpoint.Y][curpoint.X].ForeColor == origcolor) + FillCell(curpoint, origcolor, color, foreground); + } + else + if (CellRows[curpoint.Y][curpoint.X].BackColor == origcolor) + FillCell(curpoint, origcolor, color, foreground); + } + if ( point.X + 1 < m_Columns ) // right + { + curpoint.Y = point.Y; + curpoint.X = point.X + 1; + if (foreground) + { + if (CellRows[curpoint.Y][curpoint.X].ForeColor == origcolor) + FillCell(curpoint, origcolor, color, foreground); + } + else + if (CellRows[curpoint.Y][curpoint.X].BackColor == origcolor) + FillCell(curpoint, origcolor, color, foreground); + } + + if (point.X - 1 >= 0) // left + { + curpoint.Y = point.Y; + curpoint.X = point.X - 1; + if (foreground) + { + if (CellRows[curpoint.Y][curpoint.X].ForeColor == origcolor) + FillCell(curpoint, origcolor, color, foreground); + } + else + if (CellRows[curpoint.Y][curpoint.X].BackColor == origcolor) + FillCell(curpoint, origcolor, color, foreground); + } + if (point.Y + 1 < m_Rows) // down + { + curpoint.Y = point.Y + 1; + curpoint.X = point.X; + if (foreground) + { + if (CellRows[curpoint.Y][curpoint.X].ForeColor == origcolor) + FillCell(curpoint, origcolor, color, foreground); + } + else + if (CellRows[curpoint.Y][curpoint.X].BackColor == origcolor) + FillCell(curpoint, origcolor, color, foreground); + } + + if ( m_Modified == false ) + Modified = true; + + + } + + private void PaintCell(Point point, byte color, bool foreground) + { + if (CurrentAction is PaintAction) + { + PaintAction act = (PaintAction)CurrentAction; + act.IsForeground = foreground; + act.NewPaintColor = color; + if (foreground) + act.OldPaintColor = CellRows[point.Y][point.X].ForeColor; + else + act.OldPaintColor = CellRows[point.Y][point.X].BackColor; + act.PaintedPoints.Add(new Point(point.X, point.Y)); + } + + + if ( foreground ) + CellRows[point.Y][point.X].ForeColor = color; + else + CellRows[point.Y][point.X].BackColor = color; + RepaintSingleCell(point); + + if (m_Modified == false) + Modified = true; + + + } + + private void PaintCanvas_MouseMove(object sender, MouseEventArgs e) + { + if (e.Button != MouseButtons.None ) + { + Point newpos = FindCellCoords(e.X, e.Y); + if ( newpos.X != SelectedCellPosition.X || newpos.Y != SelectedCellPosition.Y) + { + SelectAppropriateCell(e.X, e.Y); + if (m_PaintMode == PaintModes.Bold) + { + BoldSelectedCell(); + RepaintSingleCell(newpos); + } + else if (m_PaintMode == PaintModes.Underline) + { + UnderlineSelectedCell(); + RepaintSingleCell(newpos); + } + else if (m_PaintMode == PaintModes.RemoveFormatting) + { + RemoveFormattingSelectedCell(); + RepaintSingleCell(newpos); + } + else if (CurrentAction is PaintAction) + { + if (!((PaintAction)CurrentAction).PointExists(m_SelectedCellPosition)) + PaintCellByMouseArgs(this.m_SelectedCellPosition, e); + } + } + } + + } + + private Point FindCellCoords(int x, int y) + { + // Find the cell we need to highlight. + int xpos = x / this.m_CellWidth; + int ypos = y / this.m_CellHeight; + if (xpos < 0) + xpos = 0; + if (ypos < 0) + ypos = 0; + if (ypos >= CellRows.Count) + ypos = CellRows.Count - 1; + if (xpos >= CellRows[ypos].Count) + xpos = CellRows[ypos].Count - 1; + return new Point(xpos, ypos); + } + + private void SelectAppropriateCell(int x, int y) + { + Point oldpos = m_SelectedCellPosition; + + SelectedCellPosition = FindCellCoords(x, y); + + RepaintSingleCell(oldpos); + RepaintSingleCell(m_SelectedCellPosition); + } + + private ColorPalette m_Colors = new ColorPalette(); + + /// + /// Gets or sets the Colors. + /// + public ColorPalette Colors + { + get { return m_Colors; } + set { m_Colors = value; this.Invalidate(); } + } + + public List> CellRows; + + private byte m_LeftMouseColor = 0; + + /// + /// Gets or sets the LeftMouseColor . + /// + public byte LeftMouseColor + { + get { return m_LeftMouseColor ; } + set { m_LeftMouseColor = value; } + } + + private byte m_MiddleMouseColor = 4; + + /// + /// Gets or sets the MiddleMouseColor. + /// + public byte MiddleMouseColor + { + get { return m_MiddleMouseColor; } + set { m_MiddleMouseColor = value; } + } + + private byte m_RightMouseColor = 1; + + /// + /// Gets or sets the RightMouseColor. + /// + public byte RightMouseColor + { + get { return m_RightMouseColor; } + set { m_RightMouseColor = value; } + } + + private bool m_LeftMouseIsForeground = true; + + /// + /// Gets or sets the LeftMouseIsForeground. + /// + public bool LeftMouseIsForeground + { + get { return m_LeftMouseIsForeground; } + set { m_LeftMouseIsForeground = value; } + } + + private bool m_MiddleMouseIsForeground = false; + + /// + /// Gets or sets the MiddleMouseIsForeground. + /// + public bool MiddleMouseIsForeground + { + get { return m_MiddleMouseIsForeground; } + set { m_MiddleMouseIsForeground = value; } + } + + private bool m_RightMouseIsForeground = false; + + /// + /// Gets or sets the RightMouseIsForeground. + /// + public bool RightMouseIsForeground + { + get { return m_RightMouseIsForeground; } + set { m_RightMouseIsForeground = value; } + } + + public CellInfo SelectedCell + { + get { return CellRows[m_SelectedCellPosition.Y][m_SelectedCellPosition.X]; } + } + + + private void PaintCanvas_KeyPress(object sender, KeyPressEventArgs e) + { + e.Handled = true; + Point oldpos = m_SelectedCellPosition; + if (!char.IsControl((char)e.KeyChar) ) // && e.KeyChar != (char)Keys.Up && e.KeyChar != (char)Keys.Down && e.KeyChar != (char)Keys.Left && e.KeyChar != (char)Keys.Right && e.KeyChar != (char)Keys.Return) + { + AddCharacterChangeToKeypressAction(m_SelectedCellPosition.X, m_SelectedCellPosition.Y, SelectedCell.Character, (char)e.KeyChar); + SelectedCell.Character = (char)e.KeyChar; + SelectedCell.ForeColor = m_MostRecentForegroundColor; + + if (m_SelectedCellPosition.X + 1 < m_Columns) + m_SelectedCellPosition.X++; + else + { + m_SelectedCellPosition.X = 0; + m_SelectedCellPosition.Y++; + } + RepaintSingleCell(oldpos); + RepaintSingleCell(m_SelectedCellPosition); + + } + + } + + + private int ParseChar(char c) + { + return (int)(c - 0x30); + } + + private const char ColorControl = '\x0003'; + private const char UnderlineControl = '\x001F'; + private const char BoldControl = '\x0002'; + private const char PlainControl = '\x000F'; + private const char ReverseControl = '\x0016'; + + internal void LoadStream(System.IO.Stream stream) + { + + StreamReader reader = new StreamReader(stream); + + CellRows.Clear(); + CellRows = new List>(); + + + //int col = 0; + int row = 0; + while(reader.Peek() >= 0 ) + { + int bc = 100; + int fc = 100; + CellRows.Add(new List()); + string strline = reader.ReadLine(); + char[] str = strline.ToCharArray(); + bool bold = false; + bool underlined = false; + for(int i = 0; i < str.Length; i++) + { + + if (IsControlCode(str[i])) + { + if (str[i] == BoldControl) + { + bold = (bold ? false : true); + continue; + } + else if (str[i] == UnderlineControl) + { + underlined = (underlined ? false : true); + continue; + } + else if (str[i] == ReverseControl) + { + continue; + } + else if (str[i] == PlainControl) + { + bold = false; + underlined = false; + continue; + } + else if (str[i] == ColorControl) + { + //bc = 100; + fc = 100; + + + if (i + 1 == str.Length) + break; + i++; + + if (Char.IsDigit(str[i])) + { + // forecolor += str[i]; + fc = ParseChar(str[i]); + + if (i + 1 == str.Length) + break; + i++; + if (Char.IsDigit(str[i])) + { + fc = ((fc * 10)) + ParseChar(str[i]); + + if (i + 1 == str.Length) + break; + i++; + + } + + } + + if (fc > 15 && fc != 100) + fc = 0; + + if (str[i] == ',') + { + if (++i == str.Length) + break; + + if (Char.IsDigit(str[i])) + { + bc = ParseChar(str[i]); + if (++i == str.Length) + break; + + if (Char.IsDigit(str[i])) + { + bc = (bc * 10) + ParseChar(str[i]); + if (++i == str.Length) + break; + } + } + } + + if (bc > 15 && bc != 100) + bc = 1; + + + /*for (; i < str.Length && IsControlCode(str[i]); i++) + { + } + */ + + } + } + CellInfo ci = new CellInfo(); + ci.Character = str[i]; + if (fc != 100) + ci.ForeColor = (byte)fc; + if (bc != 100) + ci.BackColor = (byte)bc; + ci.Bold = bold; + ci.Underlined = underlined; + CellRows[row].Add(ci); + + + } + row++; + + } + + + // find longest row. + int longest = 0; + foreach (List cellrow in CellRows) + { + if (cellrow.Count > longest) + longest = cellrow.Count; + } + this.m_Columns = longest; + this.m_Rows = CellRows.Count; + ResizeCellRows(); + ResizeByCellSize(); + PaintIntoBackground(); + } + + private bool IsControlCode(char c) + { + return + c == '\x0003' || + c == '\x001F' || + c == '\x0002' || + c == '\x000F' || + c == '\x0016'; + } + + private void PaintCanvas_Load(object sender, EventArgs e) + { + this.Font = new Font(Program.Settings.PaintFontName, Program.Settings.PaintFontSize); + this.CellHeight = Program.Settings.CellHeight; + this.CellWidth = Program.Settings.CellWidth; + this.HighlightColor = Program.Settings.HighlightColor; + this.LeftMouseColor = Program.Settings.LMBColor; + this.LeftMouseIsForeground = Program.Settings.LMBIsForeground; + + this.RightMouseColor = Program.Settings.RMBColor; + this.RightMouseIsForeground = Program.Settings.RMBIsForeground; + this.MiddleMouseColor = Program.Settings.MMBColor; + this.MiddleMouseIsForeground = Program.Settings.MMBIsForeground; + this.SeperatorColor = Program.Settings.SeperatorColor; + this.HighlightColor = Program.Settings.HighlightColor; + + if (this.RightMouseIsForeground) + this.MostRecentForegroundColor = this.RightMouseColor; + if (this.MiddleMouseIsForeground) + this.MostRecentForegroundColor = this.MiddleMouseColor; + if (this.LeftMouseIsForeground) + this.MostRecentForegroundColor = this.LeftMouseColor; + + } + + private byte m_MostRecentForegroundColor = 0; + + /// + /// Gets or sets the MostRecentForegroundColor. + /// + public byte MostRecentForegroundColor + { + get { return m_MostRecentForegroundColor; } + set { m_MostRecentForegroundColor = value; } + } + + private void PaintCanvas_KeyDown(object sender, KeyEventArgs e) + { + + } + + public void ImportImage(string filename) + { + Bitmap bmp = new Bitmap(filename); + + this.Columns = bmp.Width * 2; + this.Rows = bmp.Height; + for (int y = 0; y < bmp.Height; y++) + { + for (int x = 0; x < bmp.Width * 2; x++) + { + byte newcolor = this.Colors.FindClosestColor(bmp.GetPixel(x/2, y)); + this.CellRows[y][x++].BackColor = newcolor; + this.CellRows[y][x].BackColor = newcolor; + } + } + this.PaintIntoBackground(); + this.Invalidate(); + } + + private void PaintCanvas_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) + { + //e.Handled = true; + bool repaint = false; + Point oldpos = m_SelectedCellPosition; + + if (e.KeyCode == Keys.Up) + { + if (m_SelectedCellPosition.Y > 0) + { + m_SelectedCellPosition.Y--; + } + repaint = true; + } + else if (e.KeyCode == Keys.Right) + { + if (m_SelectedCellPosition.X < CellRows[0].Count) + m_SelectedCellPosition.X++; + repaint = true; + } + else if (e.KeyCode == Keys.Down) + { + if (m_SelectedCellPosition.Y < CellRows.Count) + m_SelectedCellPosition.Y++; + repaint = true; + } + else if (e.KeyCode == Keys.Left) + { + if (m_SelectedCellPosition.X > 0) + m_SelectedCellPosition.X--; + repaint = true; + } + else if (e.KeyCode == Keys.Return) + { + if (m_SelectedCellPosition.Y < CellRows.Count) + m_SelectedCellPosition.Y++; + m_SelectedCellPosition.X = 0; + repaint = true; + } + else if (e.KeyCode == Keys.Back) + { + if (m_SelectedCellPosition.X > 0) + m_SelectedCellPosition.X--; + AddCharacterChangeToKeypressAction(m_SelectedCellPosition.X, m_SelectedCellPosition.Y, SelectedCell.Character, ' '); + SelectedCell.Character = ' '; + + repaint = true; + } + else if (e.KeyCode == Keys.Delete) + { + AddCharacterChangeToKeypressAction(m_SelectedCellPosition.X, m_SelectedCellPosition.Y, SelectedCell.Character, ' '); + SelectedCell.Character = ' '; + repaint = true; + } + + if (repaint) + { + RepaintSingleCell(oldpos); + RepaintSingleCell(m_SelectedCellPosition); + } + } + + public void AddCharacterChangeToKeypressAction(int x, int y, char origchar, char newchar) + { + if (CurrentAction == null) + { + CurrentAction = new KeypressAction(); + AddUndoAction(CurrentAction); + } + + if (CurrentAction is KeypressAction) + { + ((KeypressAction)CurrentAction).AddCharacter(x, y, origchar, newchar); + } + } + + public class UndoChangedEventArgs : EventArgs + { + public static readonly new UndoChangedEventArgs Empty = new UndoChangedEventArgs(); + } + + public event EventHandler UndoChanged; + + protected virtual void OnUndoChanged(UndoChangedEventArgs e) + { + EventHandler handler = UndoChanged; + if (handler != null) + { + handler(this, e); + } + } + + public class RedoChangedEventArgs : EventArgs + { + public static readonly new RedoChangedEventArgs Empty = new RedoChangedEventArgs(); + } + + public event EventHandler RedoChanged; + + protected virtual void OnRedoChanged(RedoChangedEventArgs e) + { + EventHandler handler = RedoChanged; + if (handler != null) + { + handler(this, e); + } + } + + public void AddUndoAction(IUndoableAction action) + { + UndoList.Push(action); + if (RedoList.Count > 0) + { + RedoList.Clear(); + OnRedoChanged(RedoChangedEventArgs.Empty); + } + OnUndoChanged(UndoChangedEventArgs.Empty); + } + + public void AddRedoAction(IUndoableAction action) + { + RedoList.Push(action); + OnRedoChanged(RedoChangedEventArgs.Empty); + } + + public void Undo() + { + if (UndoList.Count > 0) + { + IUndoableAction act = UndoList.Pop(); + act.Undo(this); + OnUndoChanged(UndoChangedEventArgs.Empty); + RedoList.Push(act); + OnRedoChanged(RedoChangedEventArgs.Empty); + } + } + + public void Redo() + { + if (RedoList.Count > 0) + { + IUndoableAction act = RedoList.Pop(); + act.Redo(this); + OnRedoChanged(RedoChangedEventArgs.Empty); + //UndoList.Clear(); + UndoList.Push(act); + OnUndoChanged(UndoChangedEventArgs.Empty); + } + } + + private void PaintCanvas_MouseUp(object sender, MouseEventArgs e) + { + if (CurrentAction is PaintAction) + { + AddUndoAction(CurrentAction); + CurrentAction = null; + + } + } + + public void RepaintAll() + { + this.PaintIntoBackground(); + this.Invalidate(); + } + } +} diff --git a/source/PaintCanvas.resx b/source/PaintCanvas.resx new file mode 100644 index 0000000..ff31a6d --- /dev/null +++ b/source/PaintCanvas.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Program.cs b/source/Program.cs new file mode 100644 index 0000000..febb2e6 --- /dev/null +++ b/source/Program.cs @@ -0,0 +1,45 @@ +#region Copyright (c) 2007, PP4L Software +/************************************************************************************ + +Copyright 2007, PP4L Software +Author: Lampiasis + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +'***********************************************************************************/ +#endregion + +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace AsciiPumper +{ + static class Program + { + public static AsciiPumper.Properties.Settings Settings = new AsciiPumper.Properties.Settings(); + + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new PumpForm()); //new MainForm()); + } + } +} \ No newline at end of file diff --git a/source/Properties/AssemblyInfo.cs b/source/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..84d695e --- /dev/null +++ b/source/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Ascii Pumper")] +[assembly: AssemblyDescription("Pumps up your IRC ascii art.")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("PP4L")] +[assembly: AssemblyProduct("AsciiPumper")] +[assembly: AssemblyCopyright("Copyright © Lampiasis 2007")] +[assembly: AssemblyTrademark("ya we pumpin")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("eb9df274-3e3c-4d3f-82de-890971e593b5")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.1.0.1")] +[assembly: AssemblyFileVersion("1.1.0.1")] diff --git a/source/Properties/Resources.Designer.cs b/source/Properties/Resources.Designer.cs new file mode 100644 index 0000000..b5e76b4 --- /dev/null +++ b/source/Properties/Resources.Designer.cs @@ -0,0 +1,70 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.1318 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AsciiPumper.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // 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", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AsciiPumper.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Icon MainIcon { + get { + object obj = ResourceManager.GetObject("MainIcon", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/source/Properties/Resources.resx b/source/Properties/Resources.resx new file mode 100644 index 0000000..06227d9 --- /dev/null +++ b/source/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\MainIcon.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/source/Properties/Settings.Designer.cs b/source/Properties/Settings.Designer.cs new file mode 100644 index 0000000..e070390 --- /dev/null +++ b/source/Properties/Settings.Designer.cs @@ -0,0 +1,220 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.1318 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AsciiPumper.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Consolas")] + public string PaintFontName { + get { + return ((string)(this["PaintFontName"])); + } + set { + this["PaintFontName"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool LMBIsForeground { + get { + return ((bool)(this["LMBIsForeground"])); + } + set { + this["LMBIsForeground"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool MMBIsForeground { + get { + return ((bool)(this["MMBIsForeground"])); + } + set { + this["MMBIsForeground"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool RMBIsForeground { + get { + return ((bool)(this["RMBIsForeground"])); + } + set { + this["RMBIsForeground"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("20")] + public int CellHeight { + get { + return ((int)(this["CellHeight"])); + } + set { + this["CellHeight"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("10")] + public int CellWidth { + get { + return ((int)(this["CellWidth"])); + } + set { + this["CellWidth"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Salmon")] + public global::System.Drawing.Color HighlightColor { + get { + return ((global::System.Drawing.Color)(this["HighlightColor"])); + } + set { + this["HighlightColor"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("DimGray")] + public global::System.Drawing.Color SeperatorColor { + get { + return ((global::System.Drawing.Color)(this["SeperatorColor"])); + } + set { + this["SeperatorColor"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("80")] + public int Columns { + get { + return ((int)(this["Columns"])); + } + set { + this["Columns"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("15")] + public int Rows { + get { + return ((int)(this["Rows"])); + } + set { + this["Rows"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0")] + public byte LMBColor { + get { + return ((byte)(this["LMBColor"])); + } + set { + this["LMBColor"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("4")] + public byte MMBColor { + get { + return ((byte)(this["MMBColor"])); + } + set { + this["MMBColor"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("1")] + public byte RMBColor { + get { + return ((byte)(this["RMBColor"])); + } + set { + this["RMBColor"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("10")] + public float PaintFontSize { + get { + return ((float)(this["PaintFontSize"])); + } + set { + this["PaintFontSize"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool ShouldWatermark { + get { + return ((bool)(this["ShouldWatermark"])); + } + set { + this["ShouldWatermark"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("\r\n\r\n asciipumper.txt\r\n")] + public global::System.Collections.Specialized.StringCollection RecentFiles { + get { + return ((global::System.Collections.Specialized.StringCollection)(this["RecentFiles"])); + } + set { + this["RecentFiles"] = value; + } + } + } +} diff --git a/source/PumpForm.Designer.cs b/source/PumpForm.Designer.cs new file mode 100644 index 0000000..d812669 --- /dev/null +++ b/source/PumpForm.Designer.cs @@ -0,0 +1,688 @@ +namespace AsciiPumper +{ + partial class PumpForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PumpForm)); + this.menuStrip = new System.Windows.Forms.MenuStrip(); + this.fileMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openRecentToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.recentFilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.printToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.printPreviewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.printSetupToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.undoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.redoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); + this.cutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.pasteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); + this.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.viewMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolBarToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.statusBarToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolsMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.imageImporterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.windowsMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.newWindowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.cascadeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tileVerticalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tileHorizontalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.closeAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.arrangeIconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.rEADMETXTToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.contentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.indexToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.searchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); + this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStrip = new System.Windows.Forms.ToolStrip(); + this.newToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.openToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.saveToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.printToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.printPreviewToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.helpToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripProgressBar1 = new System.Windows.Forms.ToolStripProgressBar(); + this.menuStrip.SuspendLayout(); + this.toolStrip.SuspendLayout(); + this.statusStrip.SuspendLayout(); + this.SuspendLayout(); + // + // menuStrip + // + this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileMenu, + this.editMenu, + this.viewMenu, + this.toolsMenu, + this.windowsMenu, + this.helpMenu}); + this.menuStrip.Location = new System.Drawing.Point(0, 0); + this.menuStrip.MdiWindowListItem = this.windowsMenu; + this.menuStrip.Name = "menuStrip"; + this.menuStrip.Size = new System.Drawing.Size(1008, 24); + this.menuStrip.TabIndex = 0; + this.menuStrip.Text = "MenuStrip"; + // + // fileMenu + // + this.fileMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripMenuItem, + this.openToolStripMenuItem, + this.openRecentToolStripMenuItem, + this.toolStripSeparator3, + this.saveToolStripMenuItem, + this.saveAsToolStripMenuItem, + this.toolStripSeparator4, + this.printToolStripMenuItem, + this.printPreviewToolStripMenuItem, + this.printSetupToolStripMenuItem, + this.toolStripSeparator5, + this.exitToolStripMenuItem}); + this.fileMenu.ImageTransparentColor = System.Drawing.SystemColors.ActiveBorder; + this.fileMenu.Name = "fileMenu"; + this.fileMenu.Size = new System.Drawing.Size(37, 20); + this.fileMenu.Text = "&File"; + // + // newToolStripMenuItem + // + this.newToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("newToolStripMenuItem.Image"))); + this.newToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black; + this.newToolStripMenuItem.Name = "newToolStripMenuItem"; + this.newToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); + this.newToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + this.newToolStripMenuItem.Text = "&New"; + this.newToolStripMenuItem.Click += new System.EventHandler(this.ShowNewForm); + // + // openToolStripMenuItem + // + this.openToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("openToolStripMenuItem.Image"))); + this.openToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black; + this.openToolStripMenuItem.Name = "openToolStripMenuItem"; + this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); + this.openToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + this.openToolStripMenuItem.Text = "&Open"; + this.openToolStripMenuItem.Click += new System.EventHandler(this.OpenFile); + // + // openRecentToolStripMenuItem + // + this.openRecentToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.recentFilesToolStripMenuItem}); + this.openRecentToolStripMenuItem.Name = "openRecentToolStripMenuItem"; + this.openRecentToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + this.openRecentToolStripMenuItem.Text = "Open &Recent"; + // + // recentFilesToolStripMenuItem + // + this.recentFilesToolStripMenuItem.Name = "recentFilesToolStripMenuItem"; + this.recentFilesToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.recentFilesToolStripMenuItem.Text = "recent files"; + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(143, 6); + // + // saveToolStripMenuItem + // + this.saveToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("saveToolStripMenuItem.Image"))); + this.saveToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black; + this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; + this.saveToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); + this.saveToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + this.saveToolStripMenuItem.Text = "&Save"; + this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); + // + // saveAsToolStripMenuItem + // + this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem"; + this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + this.saveAsToolStripMenuItem.Text = "Save &As"; + this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.SaveAsToolStripMenuItem_Click); + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(143, 6); + // + // printToolStripMenuItem + // + this.printToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("printToolStripMenuItem.Image"))); + this.printToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black; + this.printToolStripMenuItem.Name = "printToolStripMenuItem"; + this.printToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.P))); + this.printToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + this.printToolStripMenuItem.Text = "&Print"; + this.printToolStripMenuItem.Click += new System.EventHandler(this.printToolStripMenuItem_Click); + // + // printPreviewToolStripMenuItem + // + this.printPreviewToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("printPreviewToolStripMenuItem.Image"))); + this.printPreviewToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black; + this.printPreviewToolStripMenuItem.Name = "printPreviewToolStripMenuItem"; + this.printPreviewToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + this.printPreviewToolStripMenuItem.Text = "Print Pre&view"; + this.printPreviewToolStripMenuItem.Click += new System.EventHandler(this.printPreviewToolStripMenuItem_Click); + // + // printSetupToolStripMenuItem + // + this.printSetupToolStripMenuItem.Enabled = false; + this.printSetupToolStripMenuItem.Name = "printSetupToolStripMenuItem"; + this.printSetupToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + this.printSetupToolStripMenuItem.Text = "Print Setup"; + this.printSetupToolStripMenuItem.Visible = false; + this.printSetupToolStripMenuItem.Click += new System.EventHandler(this.printSetupToolStripMenuItem_Click); + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(143, 6); + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + this.exitToolStripMenuItem.Text = "E&xit"; + this.exitToolStripMenuItem.Click += new System.EventHandler(this.ExitToolsStripMenuItem_Click); + // + // editMenu + // + this.editMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.undoToolStripMenuItem, + this.redoToolStripMenuItem, + this.toolStripSeparator6, + this.cutToolStripMenuItem, + this.copyToolStripMenuItem, + this.pasteToolStripMenuItem, + this.toolStripSeparator7, + this.selectAllToolStripMenuItem}); + this.editMenu.Name = "editMenu"; + this.editMenu.Size = new System.Drawing.Size(39, 20); + this.editMenu.Text = "&Edit"; + // + // undoToolStripMenuItem + // + this.undoToolStripMenuItem.Enabled = false; + this.undoToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("undoToolStripMenuItem.Image"))); + this.undoToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black; + this.undoToolStripMenuItem.Name = "undoToolStripMenuItem"; + this.undoToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z))); + this.undoToolStripMenuItem.Size = new System.Drawing.Size(164, 22); + this.undoToolStripMenuItem.Text = "&Undo"; + this.undoToolStripMenuItem.Click += new System.EventHandler(this.undoToolStripMenuItem_Click); + // + // redoToolStripMenuItem + // + this.redoToolStripMenuItem.Enabled = false; + this.redoToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("redoToolStripMenuItem.Image"))); + this.redoToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black; + this.redoToolStripMenuItem.Name = "redoToolStripMenuItem"; + this.redoToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y))); + this.redoToolStripMenuItem.Size = new System.Drawing.Size(164, 22); + this.redoToolStripMenuItem.Text = "&Redo"; + this.redoToolStripMenuItem.Click += new System.EventHandler(this.redoToolStripMenuItem_Click); + // + // toolStripSeparator6 + // + this.toolStripSeparator6.Name = "toolStripSeparator6"; + this.toolStripSeparator6.Size = new System.Drawing.Size(161, 6); + this.toolStripSeparator6.Visible = false; + // + // cutToolStripMenuItem + // + this.cutToolStripMenuItem.Enabled = false; + this.cutToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("cutToolStripMenuItem.Image"))); + this.cutToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black; + this.cutToolStripMenuItem.Name = "cutToolStripMenuItem"; + this.cutToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X))); + this.cutToolStripMenuItem.Size = new System.Drawing.Size(164, 22); + this.cutToolStripMenuItem.Text = "Cu&t"; + this.cutToolStripMenuItem.Visible = false; + this.cutToolStripMenuItem.Click += new System.EventHandler(this.CutToolStripMenuItem_Click); + // + // copyToolStripMenuItem + // + this.copyToolStripMenuItem.Enabled = false; + this.copyToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("copyToolStripMenuItem.Image"))); + this.copyToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black; + this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; + this.copyToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C))); + this.copyToolStripMenuItem.Size = new System.Drawing.Size(164, 22); + this.copyToolStripMenuItem.Text = "&Copy"; + this.copyToolStripMenuItem.Visible = false; + this.copyToolStripMenuItem.Click += new System.EventHandler(this.CopyToolStripMenuItem_Click); + // + // pasteToolStripMenuItem + // + this.pasteToolStripMenuItem.Enabled = false; + this.pasteToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("pasteToolStripMenuItem.Image"))); + this.pasteToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black; + this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; + this.pasteToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V))); + this.pasteToolStripMenuItem.Size = new System.Drawing.Size(164, 22); + this.pasteToolStripMenuItem.Text = "&Paste"; + this.pasteToolStripMenuItem.Visible = false; + this.pasteToolStripMenuItem.Click += new System.EventHandler(this.PasteToolStripMenuItem_Click); + // + // toolStripSeparator7 + // + this.toolStripSeparator7.Name = "toolStripSeparator7"; + this.toolStripSeparator7.Size = new System.Drawing.Size(161, 6); + this.toolStripSeparator7.Visible = false; + // + // selectAllToolStripMenuItem + // + this.selectAllToolStripMenuItem.Enabled = false; + this.selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem"; + this.selectAllToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.A))); + this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(164, 22); + this.selectAllToolStripMenuItem.Text = "Select &All"; + this.selectAllToolStripMenuItem.Visible = false; + // + // viewMenu + // + this.viewMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolBarToolStripMenuItem, + this.statusBarToolStripMenuItem}); + this.viewMenu.Name = "viewMenu"; + this.viewMenu.Size = new System.Drawing.Size(44, 20); + this.viewMenu.Text = "&View"; + // + // toolBarToolStripMenuItem + // + this.toolBarToolStripMenuItem.Checked = true; + this.toolBarToolStripMenuItem.CheckOnClick = true; + this.toolBarToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; + this.toolBarToolStripMenuItem.Name = "toolBarToolStripMenuItem"; + this.toolBarToolStripMenuItem.Size = new System.Drawing.Size(126, 22); + this.toolBarToolStripMenuItem.Text = "&Toolbar"; + this.toolBarToolStripMenuItem.Click += new System.EventHandler(this.ToolBarToolStripMenuItem_Click); + // + // statusBarToolStripMenuItem + // + this.statusBarToolStripMenuItem.Checked = true; + this.statusBarToolStripMenuItem.CheckOnClick = true; + this.statusBarToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; + this.statusBarToolStripMenuItem.Name = "statusBarToolStripMenuItem"; + this.statusBarToolStripMenuItem.Size = new System.Drawing.Size(126, 22); + this.statusBarToolStripMenuItem.Text = "&Status Bar"; + this.statusBarToolStripMenuItem.Click += new System.EventHandler(this.StatusBarToolStripMenuItem_Click); + // + // toolsMenu + // + this.toolsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.optionsToolStripMenuItem, + this.imageImporterToolStripMenuItem}); + this.toolsMenu.Name = "toolsMenu"; + this.toolsMenu.Size = new System.Drawing.Size(48, 20); + this.toolsMenu.Text = "&Tools"; + // + // optionsToolStripMenuItem + // + this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem"; + this.optionsToolStripMenuItem.Size = new System.Drawing.Size(165, 22); + this.optionsToolStripMenuItem.Text = "&Options"; + this.optionsToolStripMenuItem.Click += new System.EventHandler(this.optionsToolStripMenuItem_Click); + // + // imageImporterToolStripMenuItem + // + this.imageImporterToolStripMenuItem.Name = "imageImporterToolStripMenuItem"; + this.imageImporterToolStripMenuItem.Size = new System.Drawing.Size(165, 22); + this.imageImporterToolStripMenuItem.Text = "Image importer..."; + this.imageImporterToolStripMenuItem.Click += new System.EventHandler(this.imageImporterToolStripMenuItem_Click); + // + // windowsMenu + // + this.windowsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newWindowToolStripMenuItem, + this.cascadeToolStripMenuItem, + this.tileVerticalToolStripMenuItem, + this.tileHorizontalToolStripMenuItem, + this.closeAllToolStripMenuItem, + this.arrangeIconsToolStripMenuItem}); + this.windowsMenu.Name = "windowsMenu"; + this.windowsMenu.Size = new System.Drawing.Size(68, 20); + this.windowsMenu.Text = "&Windows"; + // + // newWindowToolStripMenuItem + // + this.newWindowToolStripMenuItem.Name = "newWindowToolStripMenuItem"; + this.newWindowToolStripMenuItem.Size = new System.Drawing.Size(151, 22); + this.newWindowToolStripMenuItem.Text = "&New Window"; + this.newWindowToolStripMenuItem.Click += new System.EventHandler(this.ShowNewForm); + // + // cascadeToolStripMenuItem + // + this.cascadeToolStripMenuItem.Name = "cascadeToolStripMenuItem"; + this.cascadeToolStripMenuItem.Size = new System.Drawing.Size(151, 22); + this.cascadeToolStripMenuItem.Text = "&Cascade"; + this.cascadeToolStripMenuItem.Click += new System.EventHandler(this.CascadeToolStripMenuItem_Click); + // + // tileVerticalToolStripMenuItem + // + this.tileVerticalToolStripMenuItem.Name = "tileVerticalToolStripMenuItem"; + this.tileVerticalToolStripMenuItem.Size = new System.Drawing.Size(151, 22); + this.tileVerticalToolStripMenuItem.Text = "Tile &Vertical"; + this.tileVerticalToolStripMenuItem.Click += new System.EventHandler(this.TileVerticalToolStripMenuItem_Click); + // + // tileHorizontalToolStripMenuItem + // + this.tileHorizontalToolStripMenuItem.Name = "tileHorizontalToolStripMenuItem"; + this.tileHorizontalToolStripMenuItem.Size = new System.Drawing.Size(151, 22); + this.tileHorizontalToolStripMenuItem.Text = "Tile &Horizontal"; + this.tileHorizontalToolStripMenuItem.Click += new System.EventHandler(this.TileHorizontalToolStripMenuItem_Click); + // + // closeAllToolStripMenuItem + // + this.closeAllToolStripMenuItem.Name = "closeAllToolStripMenuItem"; + this.closeAllToolStripMenuItem.Size = new System.Drawing.Size(151, 22); + this.closeAllToolStripMenuItem.Text = "C&lose All"; + this.closeAllToolStripMenuItem.Click += new System.EventHandler(this.CloseAllToolStripMenuItem_Click); + // + // arrangeIconsToolStripMenuItem + // + this.arrangeIconsToolStripMenuItem.Name = "arrangeIconsToolStripMenuItem"; + this.arrangeIconsToolStripMenuItem.Size = new System.Drawing.Size(151, 22); + this.arrangeIconsToolStripMenuItem.Text = "&Arrange Icons"; + this.arrangeIconsToolStripMenuItem.Click += new System.EventHandler(this.ArrangeIconsToolStripMenuItem_Click); + // + // helpMenu + // + this.helpMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.rEADMETXTToolStripMenuItem, + this.contentsToolStripMenuItem, + this.indexToolStripMenuItem, + this.searchToolStripMenuItem, + this.toolStripSeparator8, + this.aboutToolStripMenuItem}); + this.helpMenu.Name = "helpMenu"; + this.helpMenu.Size = new System.Drawing.Size(44, 20); + this.helpMenu.Text = "&Help"; + // + // rEADMETXTToolStripMenuItem + // + this.rEADMETXTToolStripMenuItem.Name = "rEADMETXTToolStripMenuItem"; + this.rEADMETXTToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.rEADMETXTToolStripMenuItem.Text = "README.TXT"; + this.rEADMETXTToolStripMenuItem.Click += new System.EventHandler(this.rEADMETXTToolStripMenuItem_Click); + // + // contentsToolStripMenuItem + // + this.contentsToolStripMenuItem.Enabled = false; + this.contentsToolStripMenuItem.Name = "contentsToolStripMenuItem"; + this.contentsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F1))); + this.contentsToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.contentsToolStripMenuItem.Text = "&Contents"; + // + // indexToolStripMenuItem + // + this.indexToolStripMenuItem.Enabled = false; + this.indexToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("indexToolStripMenuItem.Image"))); + this.indexToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black; + this.indexToolStripMenuItem.Name = "indexToolStripMenuItem"; + this.indexToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.indexToolStripMenuItem.Text = "&Index"; + // + // searchToolStripMenuItem + // + this.searchToolStripMenuItem.Enabled = false; + this.searchToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("searchToolStripMenuItem.Image"))); + this.searchToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black; + this.searchToolStripMenuItem.Name = "searchToolStripMenuItem"; + this.searchToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.searchToolStripMenuItem.Text = "&Search"; + // + // toolStripSeparator8 + // + this.toolStripSeparator8.Name = "toolStripSeparator8"; + this.toolStripSeparator8.Size = new System.Drawing.Size(165, 6); + // + // aboutToolStripMenuItem + // + this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + this.aboutToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.aboutToolStripMenuItem.Text = "&About ..."; + this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); + // + // toolStrip + // + this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripButton, + this.openToolStripButton, + this.saveToolStripButton, + this.toolStripSeparator1, + this.printToolStripButton, + this.printPreviewToolStripButton, + this.toolStripSeparator2, + this.helpToolStripButton}); + this.toolStrip.Location = new System.Drawing.Point(0, 24); + this.toolStrip.Name = "toolStrip"; + this.toolStrip.Size = new System.Drawing.Size(1008, 25); + this.toolStrip.TabIndex = 1; + this.toolStrip.Text = "ToolStrip"; + // + // newToolStripButton + // + this.newToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.newToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("newToolStripButton.Image"))); + this.newToolStripButton.ImageTransparentColor = System.Drawing.Color.Black; + this.newToolStripButton.Name = "newToolStripButton"; + this.newToolStripButton.Size = new System.Drawing.Size(23, 22); + this.newToolStripButton.Text = "New"; + this.newToolStripButton.Click += new System.EventHandler(this.ShowNewForm); + // + // openToolStripButton + // + this.openToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.openToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("openToolStripButton.Image"))); + this.openToolStripButton.ImageTransparentColor = System.Drawing.Color.Black; + this.openToolStripButton.Name = "openToolStripButton"; + this.openToolStripButton.Size = new System.Drawing.Size(23, 22); + this.openToolStripButton.Text = "Open"; + this.openToolStripButton.Click += new System.EventHandler(this.OpenFile); + // + // saveToolStripButton + // + this.saveToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.saveToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("saveToolStripButton.Image"))); + this.saveToolStripButton.ImageTransparentColor = System.Drawing.Color.Black; + this.saveToolStripButton.Name = "saveToolStripButton"; + this.saveToolStripButton.Size = new System.Drawing.Size(23, 22); + this.saveToolStripButton.Text = "Save"; + this.saveToolStripButton.Click += new System.EventHandler(this.saveToolStripButton_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25); + // + // printToolStripButton + // + this.printToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.printToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("printToolStripButton.Image"))); + this.printToolStripButton.ImageTransparentColor = System.Drawing.Color.Black; + this.printToolStripButton.Name = "printToolStripButton"; + this.printToolStripButton.Size = new System.Drawing.Size(23, 22); + this.printToolStripButton.Text = "Print"; + this.printToolStripButton.Click += new System.EventHandler(this.printToolStripButton_Click); + // + // printPreviewToolStripButton + // + this.printPreviewToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.printPreviewToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("printPreviewToolStripButton.Image"))); + this.printPreviewToolStripButton.ImageTransparentColor = System.Drawing.Color.Black; + this.printPreviewToolStripButton.Name = "printPreviewToolStripButton"; + this.printPreviewToolStripButton.Size = new System.Drawing.Size(23, 22); + this.printPreviewToolStripButton.Text = "Print Preview"; + this.printPreviewToolStripButton.Click += new System.EventHandler(this.printPreviewToolStripButton_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25); + // + // helpToolStripButton + // + this.helpToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.helpToolStripButton.Enabled = false; + this.helpToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("helpToolStripButton.Image"))); + this.helpToolStripButton.ImageTransparentColor = System.Drawing.Color.Black; + this.helpToolStripButton.Name = "helpToolStripButton"; + this.helpToolStripButton.Size = new System.Drawing.Size(23, 22); + this.helpToolStripButton.Text = "Help"; + // + // statusStrip + // + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabel, + this.toolStripProgressBar1}); + this.statusStrip.Location = new System.Drawing.Point(0, 604); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(1008, 22); + this.statusStrip.TabIndex = 2; + this.statusStrip.Text = "StatusStrip"; + this.statusStrip.Visible = false; + // + // toolStripStatusLabel + // + this.toolStripStatusLabel.Name = "toolStripStatusLabel"; + this.toolStripStatusLabel.Size = new System.Drawing.Size(891, 17); + this.toolStripStatusLabel.Spring = true; + // + // toolStripProgressBar1 + // + this.toolStripProgressBar1.Name = "toolStripProgressBar1"; + this.toolStripProgressBar1.Size = new System.Drawing.Size(100, 16); + // + // PumpForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1008, 626); + this.Controls.Add(this.statusStrip); + this.Controls.Add(this.toolStrip); + this.Controls.Add(this.menuStrip); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.IsMdiContainer = true; + this.MainMenuStrip = this.menuStrip; + this.Name = "PumpForm"; + this.Text = "Ascii Pumper"; + this.Load += new System.EventHandler(this.PumpForm_Load); + this.MdiChildActivate += new System.EventHandler(this.PumpForm_MdiChildActivate); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.PumpForm_FormClosing); + this.menuStrip.ResumeLayout(false); + this.menuStrip.PerformLayout(); + this.toolStrip.ResumeLayout(false); + this.toolStrip.PerformLayout(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + #endregion + + + private System.Windows.Forms.MenuStrip menuStrip; + private System.Windows.Forms.ToolStrip toolStrip; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; + private System.Windows.Forms.ToolStripMenuItem printSetupToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel; + private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem tileHorizontalToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem fileMenu; + private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem saveAsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem printToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem printPreviewToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem editMenu; + private System.Windows.Forms.ToolStripMenuItem undoToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem redoToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem cutToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem pasteToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem viewMenu; + private System.Windows.Forms.ToolStripMenuItem toolBarToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem statusBarToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem toolsMenu; + private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem windowsMenu; + private System.Windows.Forms.ToolStripMenuItem newWindowToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem cascadeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem tileVerticalToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem closeAllToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem arrangeIconsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem helpMenu; + private System.Windows.Forms.ToolStripMenuItem contentsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem indexToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem searchToolStripMenuItem; + private System.Windows.Forms.ToolStripButton newToolStripButton; + private System.Windows.Forms.ToolStripButton openToolStripButton; + private System.Windows.Forms.ToolStripButton saveToolStripButton; + private System.Windows.Forms.ToolStripButton printToolStripButton; + private System.Windows.Forms.ToolStripButton printPreviewToolStripButton; + private System.Windows.Forms.ToolStripButton helpToolStripButton; + private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar1; + private System.Windows.Forms.ToolStripMenuItem imageImporterToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openRecentToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem recentFilesToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem rEADMETXTToolStripMenuItem; + } +} + + + diff --git a/source/PumpForm.cs b/source/PumpForm.cs new file mode 100644 index 0000000..d207b0e --- /dev/null +++ b/source/PumpForm.cs @@ -0,0 +1,474 @@ +#region Copyright (c) 2007, PP4L Software +/************************************************************************************ + +Copyright 2007, PP4L Software +Author: Lampiasis + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +'***********************************************************************************/ +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.IO; +using System.Net; +using System.Text.RegularExpressions; +using System.Reflection; +using System.Diagnostics; +using System.Threading; +using System.Drawing.Printing; + +namespace AsciiPumper +{ + public partial class PumpForm : Form + { + private int childFormNumber = 0; + + public PumpForm() + { + InitializeComponent(); + } + + private void ShowNewForm(object sender, EventArgs e) + { + // Create a new instance of the child form. + MainForm childForm = new MainForm(); + // Make it a child of this MDI form before showing it. + childForm.MdiParent = this; + //childForm.Text = "(Untitled)"; + childForm.FileName = "(Untitled " + ++childFormNumber + ")"; + childForm.FileModified = false; + childForm.UndoChanged += new EventHandler(childForm_UndoChanged); + childForm.RedoChanged += new EventHandler(childForm_RedoChanged); + childForm.Show(); + } + + void childForm_RedoChanged(object sender, MainForm.RedoChangedEventArgs e) + { + if (sender is MainForm) + { + MainForm form = (MainForm)sender; + + if (form.RedoList.Count > 0) + redoToolStripMenuItem.Enabled = true; + else + redoToolStripMenuItem.Enabled = false; + } + } + + void childForm_UndoChanged(object sender, MainForm.UndoChangedEventArgs e) + { + if (sender is MainForm) + { + MainForm form = (MainForm)sender; + + if (form.UndoList.Count > 0) + undoToolStripMenuItem.Enabled = true; + else + undoToolStripMenuItem.Enabled = false; + } + } + + private void OpenFile(object sender, EventArgs e) + { + OpenFileDialog openFileDialog = new OpenFileDialog(); + openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal); + openFileDialog.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*"; + if (openFileDialog.ShowDialog(this) == DialogResult.OK) + { + OpenFileByName(openFileDialog.FileName); + } + } + + private void OpenFileByName(string fn) + { + + Cursor cur = Cursor.Current; + Cursor.Current = Cursors.WaitCursor; + try + { + Stream stream = File.OpenRead(fn); + MainForm form = new MainForm(); + + form.LoadStream(stream); + + stream.Close(); + form.FileName = fn; + form.MdiParent = this; + form.FileModified = false; + form.UndoChanged += new EventHandler(childForm_UndoChanged); + form.RedoChanged += new EventHandler(childForm_RedoChanged); + form.Show(); + + } + finally + { + Cursor.Current = cur; + } + AddFileToRecentFiles(fn); + } + + private void SaveAsToolStripMenuItem_Click(object sender, EventArgs e) + { + if (this.ActiveMdiChild == null) + { + MessageBox.Show(this, "No files are loaded."); + return; + } + SaveFileDialog saveFileDialog = new SaveFileDialog(); + saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal); + saveFileDialog.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*"; + if (saveFileDialog.ShowDialog(this) == DialogResult.OK) + { + Stream stream = saveFileDialog.OpenFile(); + StreamWriter writer = new StreamWriter(stream); + if (this.ActiveMdiChild is MainForm) + { + ((MainForm)this.ActiveMdiChild).FileName = saveFileDialog.FileName; + ((MainForm)this.ActiveMdiChild).FileModified = false; + writer.Write(((MainForm)this.ActiveMdiChild).GetIRCString(false)); + writer.Close(); + } + + AddFileToRecentFiles(saveFileDialog.FileName); + } + } + + private void ExitToolsStripMenuItem_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void CutToolStripMenuItem_Click(object sender, EventArgs e) + { + // TODO: Use System.Windows.Forms.Clipboard to insert the selected text or images into the clipboard + } + + private void CopyToolStripMenuItem_Click(object sender, EventArgs e) + { + // TODO: Use System.Windows.Forms.Clipboard to insert the selected text or images into the clipboard + } + + private void PasteToolStripMenuItem_Click(object sender, EventArgs e) + { + // TODO: Use System.Windows.Forms.Clipboard.GetText() or System.Windows.Forms.GetData to retrieve information from the clipboard. + } + + private void ToolBarToolStripMenuItem_Click(object sender, EventArgs e) + { + toolStrip.Visible = toolBarToolStripMenuItem.Checked; + } + + private void StatusBarToolStripMenuItem_Click(object sender, EventArgs e) + { + statusStrip.Visible = statusBarToolStripMenuItem.Checked; + } + + private void CascadeToolStripMenuItem_Click(object sender, EventArgs e) + { + LayoutMdi(MdiLayout.Cascade); + } + + private void TileVerticalToolStripMenuItem_Click(object sender, EventArgs e) + { + LayoutMdi(MdiLayout.TileVertical); + } + + private void TileHorizontalToolStripMenuItem_Click(object sender, EventArgs e) + { + LayoutMdi(MdiLayout.TileHorizontal); + } + + private void ArrangeIconsToolStripMenuItem_Click(object sender, EventArgs e) + { + LayoutMdi(MdiLayout.ArrangeIcons); + } + + private void CloseAllToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Form childForm in MdiChildren) + { + childForm.Close(); + } + } + + private void aboutToolStripMenuItem_Click(object sender, EventArgs e) + { + (new AboutBox1()).ShowDialog(this); + } + + private void optionsToolStripMenuItem_Click(object sender, EventArgs e) + { + OptionsForm optionsform = new OptionsForm(); + optionsform.SettingsSaved += new EventHandler(optionsform_SettingsSaved); + optionsform.ShowDialog(this); + + } + + private void AddFileToRecentFiles(string fn) + { + Program.Settings.RecentFiles.Remove(fn); + Program.Settings.RecentFiles.Add(fn); + while (Program.Settings.RecentFiles.Count > 10) + { + Program.Settings.RecentFiles.RemoveAt(0); + } + ReloadRecentFiles(); + } + + void optionsform_SettingsSaved(object sender, OptionsForm.SettingsSavedEventArgs e) + { + foreach (Form form in this.MdiChildren) + { + if (form is MainForm) + { + ((MainForm)form).RepaintCanvas(); + } + + } + } + + private void ReloadRecentFiles() + { + openRecentToolStripMenuItem.DropDownItems.Clear(); + if (Program.Settings.RecentFiles == null) + { + Program.Settings.RecentFiles = new System.Collections.Specialized.StringCollection(); + } + for (int i = Program.Settings.RecentFiles.Count - 1; i >= 0; i--) + { + openRecentToolStripMenuItem.DropDownItems.Add(Program.Settings.RecentFiles[i], null, new EventHandler(OpenRecentHandler)); + } + + } + + private void PumpForm_Load(object sender, EventArgs e) + { + new Thread(new ThreadStart(this.CheckForNewVersion)).Start(); + + ReloadRecentFiles(); + + string[] args = Environment.GetCommandLineArgs(); + if ( args.Length > 1 ) + OpenFileByName(args[1]); + else + ShowNewForm(this, EventArgs.Empty); + } + + private void OpenRecentHandler(object sender, EventArgs e) + { + ToolStripMenuItem menu = (ToolStripMenuItem) sender; + + // see if file is open already + foreach (Form form in this.MdiChildren) + { + if (form is MainForm) + { + if (((MainForm)form).FileName == menu.Text) + { + form.Activate(); + return; + } + } + } + + // open file + OpenFileByName(menu.Text); + } + + private void CheckForNewVersion() + { + // this is really non-critical code so let's discard all exceptions and go on with life ok? + try + { + WebRequest request = WebRequest.Create("http://code.google.com/p/asciipumper"); + + // Get the response. + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + // Get the stream containing content returned by the server. + Stream dataStream = response.GetResponseStream(); + // Open the stream using a StreamReader for easy access. + StreamReader reader = new StreamReader(dataStream); + // Read the content. + string responseFromServer = reader.ReadToEnd(); + Regex versionregex = new Regex(@"Latest release version: (\d+)\.(\d+)\.(\d+)\.(\d+)", RegexOptions.Multiline); + MatchCollection matches = versionregex.Matches(responseFromServer); + if (matches.Count >= 1 && matches[0].Captures.Count >= 1) + { + int v1, v2, v3, v4; + v1 = int.Parse(matches[0].Groups[1].Value); + v2 = int.Parse(matches[0].Groups[2].Value); + v3 = int.Parse(matches[0].Groups[3].Value); + v4 = int.Parse(matches[0].Groups[4].Value); + + Version v = Assembly.GetExecutingAssembly().GetName().Version; + bool old = false; + if (v.Major < v1) + old = true; + if (v.Major == v1 && v.Minor < v2) + old = true; + if (v.Major == v1 && v.Minor == v2 && v.Build < v3) + old = true; + if (v.Major == v1 && v.Minor == v2 && v.Build == v3 && v.Revision < v4) + old = true; + + if (old) + { + DialogResult res = MessageBox.Show(string.Format("A new version of Ascii Pumper is available.\r\nYou have: {0}.\r\nLatest release: {1}.{2}.{3}.{4}.\r\n\r\nVisit homepage?", v.ToString(), v1, v2, v3, v4), "New Ascii Pumper version", MessageBoxButtons.YesNo); + if (res == DialogResult.Yes) + { + ProcessStartInfo pi = new ProcessStartInfo("http://code.google.com/p/asciipumper/"); + Process.Start(pi); + } + } + } + + } + catch (Exception e) + { + // this is really non-critical code so let's discard all exceptions and go on with life ok? + } + + + } + + private void saveToolStripButton_Click(object sender, EventArgs e) + { + if (this.ActiveMdiChild == null) + { + MessageBox.Show(this, "No files are loaded."); + return; + } + + if (this.ActiveMdiChild is MainForm) + { + ((MainForm)this.ActiveMdiChild).SaveDocument(); + AddFileToRecentFiles(((MainForm)this.ActiveMdiChild).FileName ); + } + + } + + private void saveToolStripMenuItem_Click(object sender, EventArgs e) + { + saveToolStripButton_Click(sender, e); + } + + private void imageImporterToolStripMenuItem_Click(object sender, EventArgs e) + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "Supported images (*.bmp, *.jpeg, *.jpg, *.png, *.gif)|*.bmp;*.jpeg;*.jpg;*.png;*.gif|Bitmaps (*.bmp)|*.bmp|GIFs (*.gif)|*.gif|JPEGs (*.jpg,*.jpeg)|*.jpeg;*.jpg|PNGs (*.png)|*.png|All Files (*.*)|*.*"; + DialogResult res = ofd.ShowDialog(this); + if (res == DialogResult.OK) + { + + // Create a new instance of the child form. + MainForm childForm = new MainForm(); + // Make it a child of this MDI form before showing it. + childForm.MdiParent = this; + //childForm.Text = "(Untitled)"; + childForm.FileName = "(Imported image " + ++childFormNumber + ")"; + childForm.FileModified = false; + childForm.Show(); + childForm.ImportImage(ofd.FileName); + + } + } + + private void printPreviewToolStripMenuItem_Click(object sender, EventArgs e) + { + PrintPreviewDialog previewdlg = new PrintPreviewDialog(); + previewdlg.Document = new System.Drawing.Printing.PrintDocument(); + previewdlg.Document.PrintPage += new PrintPageEventHandler(Document_PrintPage); + previewdlg.ShowDialog(this); + } + + void Document_PrintPage(object sender, PrintPageEventArgs e) + { + if (this.ActiveMdiChild is MainForm) + { + ((MainForm)this.ActiveMdiChild).PrintToGraphicDevice(e.Graphics, e); + } + } + + private void printToolStripButton_Click(object sender, EventArgs e) + { + PrintDialog printdlg = new PrintDialog(); + printdlg.Document = new PrintDocument(); + printdlg.Document.PrintPage += new PrintPageEventHandler(Document_PrintPage); + if (printdlg.ShowDialog(this) == DialogResult.OK) + printdlg.Document.Print(); + + } + + private void printPreviewToolStripButton_Click(object sender, EventArgs e) + { + printPreviewToolStripMenuItem_Click(sender, e); + } + + private void printSetupToolStripMenuItem_Click(object sender, EventArgs e) + { + + } + + private void printToolStripMenuItem_Click(object sender, EventArgs e) + { + printToolStripButton_Click(sender, e); + } + + private void redoToolStripMenuItem_Click(object sender, EventArgs e) + { + if (this.ActiveMdiChild is MainForm) + { + MainForm form = (MainForm)this.ActiveMdiChild; + + form.Redo(); + } + } + + private void undoToolStripMenuItem_Click(object sender, EventArgs e) + { + if (this.ActiveMdiChild is MainForm) + { + MainForm form = (MainForm)this.ActiveMdiChild; + + form.Undo(); + } + } + + private void PumpForm_FormClosing(object sender, FormClosingEventArgs e) + { + Program.Settings.Save(); + } + + private void rEADMETXTToolStripMenuItem_Click(object sender, EventArgs e) + { + ProcessStartInfo pi = new ProcessStartInfo( /*Assembly.GetExecutingAssembly().Location*/ "README.TXT"); + Process.Start(pi); + } + + private void PumpForm_MdiChildActivate(object sender, EventArgs e) + { + childForm_UndoChanged(this.ActiveMdiChild, MainForm.UndoChangedEventArgs.Empty); + childForm_RedoChanged(this.ActiveMdiChild, MainForm.RedoChangedEventArgs.Empty); + + } + } +} diff --git a/source/PumpForm.resx b/source/PumpForm.resx new file mode 100644 index 0000000..76c5709 --- /dev/null +++ b/source/PumpForm.resx @@ -0,0 +1,430 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 218, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQpJREFUOE+t021L + wlAUB3C/VH6H+hr5jSRfiPSiFiEDgwWGRhZm0EoQcQN7QoblWPNp6py6h3/cwWDkvde98MDhvrnndznn + cFOpfYVU7+J/lmoKipUWhGs5TO5bpJgVBfEB6aMMH7m6V5nAiVBB9UnhI+Jtmwlkz27C4iiprVyWm0zA + 9XwQJIKowLn0TAWCIIDtbGCM7BA4ODymD/O09EgF1hsPY8uBplt8IF+sbQGeH2BmrzEwF3jXxnwgd1Hd + ApyVC3OyRO9nis6HyQdIf/Egg5vOV+gbM3R7I7yqenIgPrjP/gTtt180Wt/Jgfjg1K8h5M4Ady9aMiDa + N+tkrjHaMbmwK/f1gUPnD9/19ZYU1J08AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAl9JREFUOE+9k1tI + E2AYhnfRRVcWaVEIRpaEXYiBIdVFSNJJUUqzwkgTylMHDMU2D206dXMnp650mNt0TZ1WlmFYIRSKRGip + o8S0LCgqxcxQydPT3EKTLPCmH96bn+99vvf7fn6B4H+cnGIzEq2Fy3ITeToraUojy+obnawjLF7lMJ0X + lpNlh6VIDUQlFyOoM2tYSo01sr92SUgrITxRRWh8gRPQ22VkYqTWoR/DFqYGDVhNKurN0iUhYQlqQuO0 + BMcWIaitUDM+XLXIPPOphClbElXlcipLczEUZ6EvyOSaUkSRLHUxtNqoYPyLcb7zrN1MrwhssUvqD8CN + MhnfP+odsefMTXUKh+5b82mwyLhdmYvVkI1FL8Gku8J1bTqlahE6hdCZplKfy+i7QuZiv2kRU1+lZuaN + BAaki/XWftefBj3J8DKRzpoILsaEIDDosvnWJ4f3Su5Uq2h7oHQW/T7CiyhoD2e6NYiJhwG8rvDh3Kn9 + TkCZVszXVxIGWjOotyiZ7RdDd5wT0BljNx5nui2EieZ9jDbuZqhuO5J4L04EujmXWaLOYKhLyE2zgo4n + 9iQ9SXbAGeg4yezTw0w+PshY0x6G6/34XO1Ne85qIoM88dvq4gTo8kV0N2dyy5wPfZnw3B732VEmW4IZ + exTASIM/g1YfPhi3YFO6Io7djO8294WnLMxLpdYkx3Y3gXaNYF5tyhU0y1ZyL2sVNelrMaS6c/XSRiIP + bcLf12MBoJGmoBGfJU8YTdqFY47FnI4I5MiBnezd5cMOHy+8Pd3x2ODGujUurHf9FX1Zv+kfxT8BMS7u + X4BvNFkAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAilJREFUOE+tk91L + k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz + V7TEoabYRDD49ju/6Pm1Mm/qB+fy8znPOef7qFT/4z17GgWVr30Zbd4lPHYvoLEhgvuOGdTWfIL9dgg3 + yqdQWjKBwoLXyMsdxYXzQSi9CeztAWqqV7HRW1ldgzGtF4fTnvBSBN7WRS6orPjyV57gyMIKdpufQ62W + YTnkEQL3o3kuKC35vK7gJ/w+vIg4kw8Fl6dxwNwkBM76WS64ZHv3h+BXeGQygm2SF9accaSmOIWg7m6Y + C7KzRmMEv8ODwTA2692Q5QBMJocQVFd95AL5TEARrAf3+D9gU2IDjhx9gaSkWiG4WTmN7i6wUwLHT76C + 5dgA3zYtjGamz6bOP+A+HLR0QpLsQnC1bBIdPrAMAE2ub+zuX1F+fY4vlRZGM2dmBBU4ObUdBkOFEFwp + HIenGXjoXGPBicKYnhNT5hM2pJ8r4p2TUxi83wO9vkwIbHljDAaq7kR5ZxJQSOK0EobezmJsag5y7jXs + NbZxWLvHBZ2uSAgolo57UD6bBASfzb+FN6F5hGaWcLHYjni9i8GNiN/1ANrEfCHIzBhmcy/zmbcaPNiy + Q0JLRz98XYPo7vNj4OUQ9pksUOvqkcDg7Zo6aDTWWMHpU/08npQwCgndmU5F26aF0czUlYrgnQnZQvAv + f/R3bGg6a0rM640AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAi5JREFUOE+tk+1P + klEYxlkf+39aW1utttpM1NJqwzIjnM5J0TAmBSHLCFNJ7cVaUqNH5gLdQxY4RkxrbDqDzBJdOt0SKLAg + TEDDeLl6nkPgSNz64L1d29nZ7ut3nfucw+HsdBltUxi0f4RpdGZb0SNubMtlDd67ffi3Nn4n4fGvYNA6 + gZJzV8GtvrLVhG1mlUqlEQxH4HB9IhqyO2Ewj8M140WVSE0MCibQW1z4/DWcB2fJq9E4ZheXQduchFyQ + rqXHwSrJ0L2BUB7d6piG0+1BZYMKx87LodG+wL0+62YKRecz0jzinCd0lpolB0IxzC+F0Guwo5Qvg7Kr + H0/oMZQyRuQYTW16qB8OgTK/wyOjA/qXb3GXsuH6HSPELVrwGztQXqNA8VkpTl+4iW6dBRKVFsXZId5+ + +gqRWHzL1NmNRDKF9XiCzOB7eB1fvkUhb6dQJ+1iEsgyCVQPTDC/+YDndhco02vc7xuGumcAsnYdRM09 + EFzuAK+hBccFchSdkeAis1cpvIGDJ0UZA2X3AHz+YMEEkbUNeAKr2A0O0S6KA764DSXVUuw5WpMxaO40 + YHpuCczccsWuf0QTmPOtYWw2TJotfw1O1CpwoEK4aaDUUND00vAG4wjH0vD/TGNxOYWJhV8Ynoyi37FC + yFkd4YlJcy5BvaQVsls6jE76yN3+j/IM2GNIVI9RUadEmeAauMwzLapqwmFeIw6duoT95ULsK6vHXm5t + jpyj78RP/gPgHTGb+rLlcwAAAABJRU5ErkJggg== + + + + + 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 + AElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAd1JREFUOE+lk99L + U2EYgP1TShlSXdt9RGpSYFB4UVCQRVe70KuuIsMgqxkLnG0Tc5ayzc70RKSLlJlraTJzrl+TlkFtMJVz + dDmnZ/a480mzLdgEX3juvvd5f3zfV1a235DHv6AjjYUFzuEgvfI77tpk9uTWkwvDMRTgastTjtY1lpZ4 + RsN5+ZmtP3T0vcLrD3O+qb20xDkyIwTeCEgfIBRVeeh4iTSh4h5XcPkUHo8omAeXBRfvx/K76pUDuQ42 + NjOoq2liiaQQFEZr/yJVV/yC3H7sbp841+3fxDSsclP6RXNPlL7XS/8JmqwJ5EmVIw1DAiGxZOfV515L + aSwqKRZiK3yKLmF/EReCNikjCM2vcMkU53DDcw6dHaCy/smOQJ93Pa3lKhvtEa5ZPvLAtZDXgfpbY/7n + Ov65VazSNIbTXbsCNZnm8/cEM19jBEI/GHv/jZbuneu90Z/EaIlz4V6EM7dmBVZpCkNd566g6uRlCmk2 + zwqBlh0voWjMRdcYDap43izzaCBARY25+BtpbJ0Ugn8r/+2g0/2W8hOm4oJz132kNrawDwaxeaaxPpsS + lfVki3OCg8fvFBfUGL3ZbbsElfUODKdsVNR2UF7dnk1u48Cx26Wf+Z4+034PbQPvwt9VHJdeuQAAAABJ + RU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAk9JREFUOE+1k1lI + lGEUhn/owm6KFuqqq4LoJooIqouMwixMmzASMzInYlRKRpk0HVJLU3Rym7RsjFwGNbdKlJQiERKHdg3H + aJFIjZwmaxbXyeLp/78YclovogMv5+Z7l3M4nyT9j+pqzabjagbNFSloo3bxR4+m6kJmoyL/AA5bDeO2 + Swz155GkCaQwS8d5gx5jVqKAj6BCnnI24nE1MOWoxVyqY2K0iqRoFU+7kzl5LJhk9XpsXYcYbVuONnL3 + zwIK2eOq40L2QXoseTjfFDPSr+eV5TAtZSqiI/ypSV3Go0KJ2P0/jNRQlS/cPc4rGFIjSdeFo48L40Rs + KDqNinh1MDERARRpVwiB8CB/3wS15QamnfVM201MDOdgfxKHtWqxQF/lInpK53Hf6CfICgI2rfUVMJuy + mbRXMDmYycSzo4w/3ouzdT4FlW3kmJo5da6eZIOZ+IwyolOMRCbk+gqUl2QwNmRkvF/D2INg3HfW8e76 + EkH2lmfmMw7XFIMjDsJiThMSpf8uUlaQhvN5Ju57gbg7V+NqX8pQpSSclSq/1iVgquugb8AmyLe6rewI + VX8TKclN4UPvcVwdq3DeWIi90Y+By5KI/WnmCx/dsvNbB30vbVh6XxMUEU+gTN62cw/+m7cgFZ1JxH43 + RiYv4H3TXIar52C9IKGVZ1ZiexNclBMUm9tp6bSKrmDjmpVIZ9MTxIF4t+ztGnlhs51vW14IcuPNHura + HvoKFKQdkS9MhTp0OyFbNwhlZdvKzF63X3WR4He1T9628uBv+OfP/BWTNfjZ3FJ2xwAAAABJRU5ErkJg + gg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAqRJREFUOE+Fk1tI + 01EYwOdr0HOJvfdm9FpPBZFQDyFBCb71ZoZooZiXMeetnJs6L9O8m2s6clNRN7VdtDmnS5uXleQQ3Zzm + XRMvYfz6b6KVZn3wceBwfr/zfecSIjojqurcbG98F21u7ogODhBlZFwPOWvtqfkAHEiXa5Wa2inUbyaR + SgdIT7fxX8kR7HCsUqJyYbGu8M7ko9c0i6bJjSTDfrboJNzRuYjNtk2/ZQurZYPenlV0unkaGieEigb/ + FJ2E29r9mE0bdHUt09q2SIsANmtnaaifRqVyI5ePkpk9eNjSSVin9wVBvd5Pk2aO+noPlZVTlJRMoFCM + kJMzzNMEE7FPDBzDLtd6sGdN0yxa7Rzq1zPU1kzT1OpD1rxOVNEekbItJJU+5CVjxDw2oGsdOBRomseR + K5zU1Hl4VfGZsmI3ysJxqrR+4jVQboEPc0J6obbvgAfZXlpMbqa9M4jEEisa7RgSaR+ygiFk+SO8zHNS + 3eghTg3aIZhf2CQ118jth1XBUe/Y4WackzylA9GzRAMziz6M5lGSU3oQi63BO89qWEJlJhhH8PCoNygp + qrUjVS8QHWNElJqupkDZzcKmn9llob9CM9KsPu7lrqEfPRQEIlBFQHDtbhmljSM09O8TerkU0Yv8QWHn + XiENmGzjrO1/xWL/RITYh+43wda3vSCcmGlkekk4C/MuF8Jyfr1MSWYfKWk9FBRb8fjnUHXOI2/fOa7A + Luwur3TgEeBx4TATitxERFadftopaSaeC6IO8xduJXykw7nP7g8wvPcSfqOAyXko7Vjh/FUl2Urz3/9G + mthMUnI3dS2TXIkyIq6eQWPbpdGyQ7xiknPhCmKT3tI/4vv351JVOMlX2ol+1EropSwuhqVy5345MpWV + wTF/EP4JaStxoteu5NMAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAtpJREFUOE+Vk1lP + k1EQhutC/CHGGBM1MWpc4oVLSFGhRogfFAREqVCQshSoRRAQSlFUSitQwqKtqChBEepH3IKCC4agxoi4 + YdSw1FTQCFpE5LEfF1aCXjhX55yced7MzDuzZH9ERrGIdGVyUjbXZ7Zsns8c2ei3cdnIV7ds0vNWnhMy + 68//086ZJS0ctIjY29q5/roLsa8Fe28uSWIMguEk0Rl2VJmnpwRmxAGTiMEm0tB9hYdfntIzNkBaYwGm + V1nEXVaw0VhEmKGDUH0NUbrq6RDdMQdZFgcVnWZanDZuDXfSNdpNj9tFfX8zMVYjcusz1lgaWVumQkgu + ZmdKuRciAfLsItZHRZT16rC9t2DvM1L+xE782XrUFUOEHXvL0nNBLDrjz/r8REISSryA1CNNVDjeYRBN + 7HuwjeTOALQ2PWm1nrKqLmEw16AvKibSHMfiUjmLjwQSpC7yApKMjVReGyOnshLFOTlbxVBU5WZKTzdz + o+0Og66PvHe6qL3YRESmhvkFfiiiDV6AJr8Bs8PNgVoXkXoV/pV70NbmcbW1DSl+TMCI+ycDwxNYai6w + ThPElshsL2DfoXqSy96gqfqO2txLYIbGM86j9H9w/U52fv7Bi/5xmtufExQRjm+o3guIyz1PfOFtok98 + Jco0TGj+XfYXGuj7MDSl7Pw04Un+TscLNxUNHWwXgtkgaL0AdU7dlEl2FzxEediJPLcTIV9L09VWBj95 + lAfGuf/SzZWuURJ02QQIu8jLSp3uBclhETo7IQfvsjTVyDJtOLHaFKrrHDS292C92EFCejbByh3UmcJp + siZSYkibDpEcpkwsZXOSGV9VPAq1ESE2B2HnbgIFJWHB27FoNzF4Ss7Pe1HYjqfMhEgOk0wizVkaldRt + qWFSzWEKX2IDVvA4eyV91g0MNQeTHrPt77vxr42TADH+y7mpW81evyUo/Vf9H0ACS5B1yxbit3bBVPIv + gLX/NgWpi8gAAAAASUVORK5CYII= + + + + 326, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQpJREFUOE+t021L + wlAUB3C/VH6H+hr5jSRfiPSiFiEDgwWGRhZm0EoQcQN7QoblWPNp6py6h3/cwWDkvde98MDhvrnndznn + cFOpfYVU7+J/lmoKipUWhGs5TO5bpJgVBfEB6aMMH7m6V5nAiVBB9UnhI+Jtmwlkz27C4iiprVyWm0zA + 9XwQJIKowLn0TAWCIIDtbGCM7BA4ODymD/O09EgF1hsPY8uBplt8IF+sbQGeH2BmrzEwF3jXxnwgd1Hd + ApyVC3OyRO9nis6HyQdIf/Egg5vOV+gbM3R7I7yqenIgPrjP/gTtt180Wt/Jgfjg1K8h5M4Ady9aMiDa + N+tkrjHaMbmwK/f1gUPnD9/19ZYU1J08AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAl9JREFUOE+9k1tI + E2AYhnfRRVcWaVEIRpaEXYiBIdVFSNJJUUqzwkgTylMHDMU2D206dXMnp650mNt0TZ1WlmFYIRSKRGip + o8S0LCgqxcxQydPT3EKTLPCmH96bn+99vvf7fn6B4H+cnGIzEq2Fy3ITeToraUojy+obnawjLF7lMJ0X + lpNlh6VIDUQlFyOoM2tYSo01sr92SUgrITxRRWh8gRPQ22VkYqTWoR/DFqYGDVhNKurN0iUhYQlqQuO0 + BMcWIaitUDM+XLXIPPOphClbElXlcipLczEUZ6EvyOSaUkSRLHUxtNqoYPyLcb7zrN1MrwhssUvqD8CN + MhnfP+odsefMTXUKh+5b82mwyLhdmYvVkI1FL8Gku8J1bTqlahE6hdCZplKfy+i7QuZiv2kRU1+lZuaN + BAaki/XWftefBj3J8DKRzpoILsaEIDDosvnWJ4f3Su5Uq2h7oHQW/T7CiyhoD2e6NYiJhwG8rvDh3Kn9 + TkCZVszXVxIGWjOotyiZ7RdDd5wT0BljNx5nui2EieZ9jDbuZqhuO5J4L04EujmXWaLOYKhLyE2zgo4n + 9iQ9SXbAGeg4yezTw0w+PshY0x6G6/34XO1Ne85qIoM88dvq4gTo8kV0N2dyy5wPfZnw3B732VEmW4IZ + exTASIM/g1YfPhi3YFO6Io7djO8294WnLMxLpdYkx3Y3gXaNYF5tyhU0y1ZyL2sVNelrMaS6c/XSRiIP + bcLf12MBoJGmoBGfJU8YTdqFY47FnI4I5MiBnezd5cMOHy+8Pd3x2ODGujUurHf9FX1Zv+kfxT8BMS7u + X4BvNFkAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAilJREFUOE+tk91L + k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz + V7TEoabYRDD49ju/6Pm1Mm/qB+fy8znPOef7qFT/4z17GgWVr30Zbd4lPHYvoLEhgvuOGdTWfIL9dgg3 + yqdQWjKBwoLXyMsdxYXzQSi9CeztAWqqV7HRW1ldgzGtF4fTnvBSBN7WRS6orPjyV57gyMIKdpufQ62W + YTnkEQL3o3kuKC35vK7gJ/w+vIg4kw8Fl6dxwNwkBM76WS64ZHv3h+BXeGQygm2SF9accaSmOIWg7m6Y + C7KzRmMEv8ODwTA2692Q5QBMJocQVFd95AL5TEARrAf3+D9gU2IDjhx9gaSkWiG4WTmN7i6wUwLHT76C + 5dgA3zYtjGamz6bOP+A+HLR0QpLsQnC1bBIdPrAMAE2ub+zuX1F+fY4vlRZGM2dmBBU4ObUdBkOFEFwp + HIenGXjoXGPBicKYnhNT5hM2pJ8r4p2TUxi83wO9vkwIbHljDAaq7kR5ZxJQSOK0EobezmJsag5y7jXs + NbZxWLvHBZ2uSAgolo57UD6bBASfzb+FN6F5hGaWcLHYjni9i8GNiN/1ANrEfCHIzBhmcy/zmbcaPNiy + Q0JLRz98XYPo7vNj4OUQ9pksUOvqkcDg7Zo6aDTWWMHpU/08npQwCgndmU5F26aF0czUlYrgnQnZQvAv + f/R3bGg6a0rM640AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAi5JREFUOE+tk+1P + klEYxlkf+39aW1utttpM1NJqwzIjnM5J0TAmBSHLCFNJ7cVaUqNH5gLdQxY4RkxrbDqDzBJdOt0SKLAg + TEDDeLl6nkPgSNz64L1d29nZ7ut3nfucw+HsdBltUxi0f4RpdGZb0SNubMtlDd67ffi3Nn4n4fGvYNA6 + gZJzV8GtvrLVhG1mlUqlEQxH4HB9IhqyO2Ewj8M140WVSE0MCibQW1z4/DWcB2fJq9E4ZheXQduchFyQ + rqXHwSrJ0L2BUB7d6piG0+1BZYMKx87LodG+wL0+62YKRecz0jzinCd0lpolB0IxzC+F0Guwo5Qvg7Kr + H0/oMZQyRuQYTW16qB8OgTK/wyOjA/qXb3GXsuH6HSPELVrwGztQXqNA8VkpTl+4iW6dBRKVFsXZId5+ + +gqRWHzL1NmNRDKF9XiCzOB7eB1fvkUhb6dQJ+1iEsgyCVQPTDC/+YDndhco02vc7xuGumcAsnYdRM09 + EFzuAK+hBccFchSdkeAis1cpvIGDJ0UZA2X3AHz+YMEEkbUNeAKr2A0O0S6KA764DSXVUuw5WpMxaO40 + YHpuCczccsWuf0QTmPOtYWw2TJotfw1O1CpwoEK4aaDUUND00vAG4wjH0vD/TGNxOYWJhV8Ynoyi37FC + yFkd4YlJcy5BvaQVsls6jE76yN3+j/IM2GNIVI9RUadEmeAauMwzLapqwmFeIw6duoT95ULsK6vHXm5t + jpyj78RP/gPgHTGb+rLlcwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAdVJREFUOE+t099L + U2Ecx3H/GemqiygrwpsIzESJqJzzx4VOnMQkKFToZjcZQf5oDd0SXa0m/sJjnJU5K5eb1oIig8nUiwah + brLUInG6zb3znLB2PNu68QtfHjjweX2f5+E8OTmHUaJnnoMtTPoZdH3G4fwgd9Y5UjhT9Qy/5WRRbXZk + 1D2XEeh0uJiY8WdHhl99yQiYn7yUw/ud9ij9Yx9VQDy2xdTMFJZHdm63mbhr6iS/RJf+Lp6KPgWwvb2F + OD7Oa880och3voUjOAQRnaGRKsMtNWITvArAPe3F5fbI3+IJ+BXdZWU9gdk2hLZarwa6BycVQJfNzvJq + 5G84/CPOwnIMp3eesspKNdDVN6EAOizdLK2uyZPDG4m98A6+hSgPR3xcLi1VA9JNp5YgOhFdbkIbe5NX + YrxfjPLi0yYNzUbKyssxtTQqkVQgmUzyNRjkXoeZ3oHnPPMGsAo+GpqMaLRXGbhfhWi9rkRSgZ1YgvWf + UfyBAA8sFvTXDNTU1lGhuYT55jlCj8+z+64ae/uNf8g+IK2ZuuVOK/UlJ5g15rFkPcuaU0OT/uKfo0ih + vAu6/3ZB0RX0xcd503yausKjaItPZX9k6X5baRf5x45QeCZXDv8Gd10kHhF4wJIAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAqRJREFUOE+Fk1tI + 01EYwOdr0HOJvfdm9FpPBZFQDyFBCb71ZoZooZiXMeetnJs6L9O8m2s6clNRN7VdtDmnS5uXleQQ3Zzm + XRMvYfz6b6KVZn3wceBwfr/zfecSIjojqurcbG98F21u7ogODhBlZFwPOWvtqfkAHEiXa5Wa2inUbyaR + SgdIT7fxX8kR7HCsUqJyYbGu8M7ko9c0i6bJjSTDfrboJNzRuYjNtk2/ZQurZYPenlV0unkaGieEigb/ + FJ2E29r9mE0bdHUt09q2SIsANmtnaaifRqVyI5ePkpk9eNjSSVin9wVBvd5Pk2aO+noPlZVTlJRMoFCM + kJMzzNMEE7FPDBzDLtd6sGdN0yxa7Rzq1zPU1kzT1OpD1rxOVNEekbItJJU+5CVjxDw2oGsdOBRomseR + K5zU1Hl4VfGZsmI3ysJxqrR+4jVQboEPc0J6obbvgAfZXlpMbqa9M4jEEisa7RgSaR+ygiFk+SO8zHNS + 3eghTg3aIZhf2CQ118jth1XBUe/Y4WackzylA9GzRAMziz6M5lGSU3oQi63BO89qWEJlJhhH8PCoNygp + qrUjVS8QHWNElJqupkDZzcKmn9llob9CM9KsPu7lrqEfPRQEIlBFQHDtbhmljSM09O8TerkU0Yv8QWHn + XiENmGzjrO1/xWL/RITYh+43wda3vSCcmGlkekk4C/MuF8Jyfr1MSWYfKWk9FBRb8fjnUHXOI2/fOa7A + Luwur3TgEeBx4TATitxERFadftopaSaeC6IO8xduJXykw7nP7g8wvPcSfqOAyXko7Vjh/FUl2Urz3/9G + mthMUnI3dS2TXIkyIq6eQWPbpdGyQ7xiknPhCmKT3tI/4vv351JVOMlX2ol+1EropSwuhqVy5345MpWV + wTF/EP4JaStxoteu5NMAAAAASUVORK5CYII= + + + + 17, 17 + + + 51 + + + + AAABAAIAEBAQAAAABAAoAQAAJgAAACAgEAAAAAQA6AIAAE4BAAAoAAAAEAAAACAAAAABAAQAAAAAAIAA + AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ + AAAA//8A/wAAAP8A/wD//wAA////AACIiIgAAAAAAIiIiAAAAAAACZmQAAzMAAAJmZAAzMwAAAmZkADM + zAAACZmQAAzMAAAJmZAAAHAAAAmZkAAAcAAACZmQAAB3AAAJmZAAAAcAAAmZkAAABwAACZmQAAB3AAAA + mQAAB3AAAAAHAAB3AAAAAAd3d3AAAAAAAAAAAAAAwP8AAMD/AADh4wAA4cMAAOHDAADh4wAA4fcAAOH3 + AADh8wAA4fsAAOH7AADh8wAA8+cAAPvPAAD4HwAA//8AACgAAAAgAAAAQAAAAAEABAAAAAAAAAIAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAACIiIiIiIAAAAAAAAAAAAAACIiIiIgAAA + AAAAAAAAAAAAiIiIiIAAAAAAAAAAAAAAAAiIiIgAAAAAAAAAAAAAAAAAmZmQAAAAAAAAAAAAAAAAAJmZ + kAAAAADMwAAAAAAAAACZmZAAAAAMzMwAAAAAAAAAmZmQAAAAzMzMwAAAAAAAAJmZkAAAAMzMzMAAAAAA + AACZmZAAAADMzMzAAAAAAAAAmZmQAAAAzMzMwAAAAAAAAJmZkAAAAAzMzAAAAAAAAACZmZAAAAAMzMwA + AAAAAAAAmZmQAAAADMzMAAAAAAAAAJmZkAAAAAAHAAAAAAAAAACZmZAAAAAAB3AAAAAAAAAAmZmQAAAA + AABwAAAAAAAAAJmZkAAAAAAAcAAAAAAAAACZmZAAAAAAB3AAAAAAAAAAmZmQAAAAAAcAAAAAAAAAAJmZ + kAAAAAAHAAAAAAAAAACZmZAAAAAABwAAAAAAAAAAmZmQAAAAAAcAAAAAAAAAAJmZkAAAAAAHAAAAAAAA + AACZmZAAAAAAdwAAAAAAAAAACZkAAAAAB3AAAAAAAAAAAABwAAAAAAcAAAAAAAAAAAAAcAAAAAB3AAAA + AAAAAAAAAHcAAAAHcAAAAAAAAAAAAAAHd3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////+AD///wB + ///8Af///gP///8H////B/x//wf4P/8H8B//B/Af/wfwH/8H8B//B/g//wf4P/8H+D//B/7//wf+f/8H + /3//B/9//wf+f/8H/v//B/7//wf+//8H/v//B/7//wf8//+P+f//3/v//9/z///P5///4A///////w== + + + \ No newline at end of file diff --git a/source/Settings.cs b/source/Settings.cs new file mode 100644 index 0000000..6c0009a --- /dev/null +++ b/source/Settings.cs @@ -0,0 +1,55 @@ +#region Copyright (c) 2007, PP4L Software +/************************************************************************************ + +Copyright 2007, PP4L Software +Author: Lampiasis + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +'***********************************************************************************/ +#endregion + +namespace AsciiPumper.Properties +{ + + + // This class allows you to handle specific events on the settings class: + // The SettingChanging event is raised before a setting's value is changed. + // The PropertyChanged event is raised after a setting's value is changed. + // The SettingsLoaded event is raised after the setting values are loaded. + // The SettingsSaving event is raised before the setting values are saved. + internal sealed partial class Settings { + + public Settings() { + // // To add event handlers for saving and changing settings, uncomment the lines below: + // + // this.SettingChanging += this.SettingChangingEventHandler; + // + // this.SettingsSaving += this.SettingsSavingEventHandler; + // + } + + private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { + // Add code to handle the SettingChangingEvent event here. + } + + private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { + // Add code to handle the SettingsSaving event here. + } + + + + } +} diff --git a/source/UndoableAction.cs b/source/UndoableAction.cs new file mode 100644 index 0000000..98380b6 --- /dev/null +++ b/source/UndoableAction.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace AsciiPumper +{ + public interface IUndoableAction + { + void Undo( PaintCanvas canvas); + void Redo( PaintCanvas canvas ); + + } +}