diff --git a/.screens/preview.png b/.screens/preview.png
Binary files differ.
diff --git a/README.md 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
Binary files differ.
diff --git a/asciipumper/AsciiPumper.exe.config b/asciipumper/AsciiPumper.exe.config
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+ <configSections>
+ <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+ <section name="AsciiPumper.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+ <section name="ColorPumper.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+ </sectionGroup>
+ </configSections>
+ <userSettings>
+ <AsciiPumper.Properties.Settings>
+ <setting name="PaintFontName" serializeAs="String">
+ <value>Consolas</value>
+ </setting>
+ <setting name="LMBIsForeground" serializeAs="String">
+ <value>False</value>
+ </setting>
+ <setting name="MMBIsForeground" serializeAs="String">
+ <value>True</value>
+ </setting>
+ <setting name="RMBIsForeground" serializeAs="String">
+ <value>False</value>
+ </setting>
+ <setting name="CellHeight" serializeAs="String">
+ <value>20</value>
+ </setting>
+ <setting name="CellWidth" serializeAs="String">
+ <value>10</value>
+ </setting>
+ <setting name="HighlightColor" serializeAs="String">
+ <value>Salmon</value>
+ </setting>
+ <setting name="SeperatorColor" serializeAs="String">
+ <value>DimGray</value>
+ </setting>
+ <setting name="Columns" serializeAs="String">
+ <value>80</value>
+ </setting>
+ <setting name="Rows" serializeAs="String">
+ <value>15</value>
+ </setting>
+ <setting name="LMBColor" serializeAs="String">
+ <value>0</value>
+ </setting>
+ <setting name="MMBColor" serializeAs="String">
+ <value>4</value>
+ </setting>
+ <setting name="RMBColor" serializeAs="String">
+ <value>1</value>
+ </setting>
+ <setting name="PaintFontSize" serializeAs="String">
+ <value>10</value>
+ </setting>
+ <setting name="ShouldWatermark" serializeAs="String">
+ <value>True</value>
+ </setting>
+ <setting name="RecentFiles" serializeAs="Xml">
+ <value>
+ <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <string>asciipumper.txt</string>
+ </ArrayOfString>
+ </value>
+ </setting>
+ </AsciiPumper.Properties.Settings>
+ <ColorPumper.Properties.Settings>
+ <setting name="PaintFontName" serializeAs="String">
+ <value>Consolas</value>
+ </setting>
+ <setting name="PaintFontSize" serializeAs="String">
+ <value>10</value>
+ </setting>
+ <setting name="LMBIsForeground" serializeAs="String">
+ <value>True</value>
+ </setting>
+ <setting name="MMBIsForeground" serializeAs="String">
+ <value>False</value>
+ </setting>
+ <setting name="RMBIsForeground" serializeAs="String">
+ <value>False</value>
+ </setting>
+ <setting name="CellHeight" serializeAs="String">
+ <value>20</value>
+ </setting>
+ <setting name="CellWidth" serializeAs="String">
+ <value>10</value>
+ </setting>
+ <setting name="HighlightColor" serializeAs="String">
+ <value>OldLace</value>
+ </setting>
+ <setting name="SeperatorColor" serializeAs="String">
+ <value>DarkGray</value>
+ </setting>
+ <setting name="Columns" serializeAs="String">
+ <value>80</value>
+ </setting>
+ <setting name="Rows" serializeAs="String">
+ <value>15</value>
+ </setting>
+ <setting name="LMBColor" serializeAs="String">
+ <value>0</value>
+ </setting>
+ <setting name="MMBColor" serializeAs="String">
+ <value>4</value>
+ </setting>
+ <setting name="RMBColor" serializeAs="String">
+ <value>1</value>
+ </setting>
+ </ColorPumper.Properties.Settings>
+ </userSettings>
+</configuration>
+\ No newline at end of file
diff --git a/asciipumper/AsciiPumperSetup.msi b/asciipumper/AsciiPumperSetup.msi
Binary files differ.
diff --git a/asciipumper/MainIcon.ico b/asciipumper/MainIcon.ico
Binary files differ.
diff --git a/asciipumper/setup.exe b/asciipumper/setup.exe
Binary files differ.
diff --git a/source/AboutBox1.Designer.cs b/source/AboutBox1.Designer.cs
@@ -0,0 +1,187 @@
+namespace AsciiPumper
+{
+ partial class AboutBox1
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ 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
@@ -0,0 +1,165 @@
+#region Copyright (c) 2007, PP4L Software
+/************************************************************************************
+
+Copyright 2007, PP4L Software
+Author: Lampiasis <lampiasis@dvolker.com>
+
+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 <lampiasis@dvolker.com>
+
+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
@@ -0,0 +1,610 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+ <data name="logoPictureBox.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ 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
+ AZ+4Ui+mkTlKAAAAAElFTkSuQmCC
+</value>
+ </data>
+</root>
+\ No newline at end of file
diff --git a/source/AsciiPumper.csproj b/source/AsciiPumper.csproj
@@ -0,0 +1,190 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.20404</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{3F20CEF2-815A-43E2-9071-0D5462F245BF}</ProjectGuid>
+ <OutputType>WinExe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>AsciiPumper</RootNamespace>
+ <AssemblyName>AsciiPumper</AssemblyName>
+ <ManifestCertificateThumbprint>4DD6994A8DC8FB07112F22D88EE79355E4A1AEDB</ManifestCertificateThumbprint>
+ <ManifestKeyFile>AsciiPumper_TemporaryKey.pfx</ManifestKeyFile>
+ <GenerateManifests>true</GenerateManifests>
+ <SignManifests>true</SignManifests>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <ApplicationIcon>Resources\MainIcon.ico</ApplicationIcon>
+ <TargetZone>LocalIntranet</TargetZone>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <OldToolsVersion>2.0</OldToolsVersion>
+ <UpgradeBackupLocation>
+ </UpgradeBackupLocation>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>asciipumper.pfx</AssemblyOriginatorKeyFile>
+ <PublishUrl>c:\temp\AsciiPumper\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <SupportUrl>http://code.google.com/p/asciipumper/</SupportUrl>
+ <ProductName>Ascii Pumper</ProductName>
+ <PublisherName>PP4L</PublisherName>
+ <CreateWebPageOnPublish>false</CreateWebPageOnPublish>
+ <ApplicationRevision>1</ApplicationRevision>
+ <ApplicationVersion>1.1.0.%2a</ApplicationVersion>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Deployment" />
+ <Reference Include="System.Drawing" />
+ <Reference Include="System.Windows.Forms" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="AboutBox1.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="AboutBox1.Designer.cs">
+ <DependentUpon>AboutBox1.cs</DependentUpon>
+ </Compile>
+ <Compile Include="CellInfo.cs" />
+ <Compile Include="ColorPalette.cs" />
+ <Compile Include="ColorSelector.cs">
+ <SubType>UserControl</SubType>
+ </Compile>
+ <Compile Include="ColorSelector.Designer.cs">
+ <DependentUpon>ColorSelector.cs</DependentUpon>
+ </Compile>
+ <Compile Include="ImageImporter.cs" />
+ <Compile Include="KeypressAction.cs" />
+ <Compile Include="MainForm.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="MainForm.Designer.cs">
+ <DependentUpon>MainForm.cs</DependentUpon>
+ </Compile>
+ <Compile Include="OptionsForm.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="OptionsForm.Designer.cs">
+ <DependentUpon>OptionsForm.cs</DependentUpon>
+ </Compile>
+ <Compile Include="PaintAction.cs" />
+ <Compile Include="PaintCanvas.cs">
+ <SubType>UserControl</SubType>
+ </Compile>
+ <Compile Include="PaintCanvas.Designer.cs">
+ <DependentUpon>PaintCanvas.cs</DependentUpon>
+ </Compile>
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <EmbeddedResource Include="AboutBox1.resx">
+ <SubType>Designer</SubType>
+ <DependentUpon>AboutBox1.cs</DependentUpon>
+ </EmbeddedResource>
+ <EmbeddedResource Include="ColorSelector.resx">
+ <SubType>Designer</SubType>
+ <DependentUpon>ColorSelector.cs</DependentUpon>
+ </EmbeddedResource>
+ <EmbeddedResource Include="MainForm.resx">
+ <SubType>Designer</SubType>
+ <DependentUpon>MainForm.cs</DependentUpon>
+ </EmbeddedResource>
+ <EmbeddedResource Include="OptionsForm.resx">
+ <SubType>Designer</SubType>
+ <DependentUpon>OptionsForm.cs</DependentUpon>
+ </EmbeddedResource>
+ <EmbeddedResource Include="PaintCanvas.resx">
+ <SubType>Designer</SubType>
+ <DependentUpon>PaintCanvas.cs</DependentUpon>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Properties\Resources.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ <EmbeddedResource Include="PumpForm.resx">
+ <SubType>Designer</SubType>
+ <DependentUpon>PumpForm.cs</DependentUpon>
+ </EmbeddedResource>
+ <Compile Include="Properties\Resources.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DependentUpon>Resources.resx</DependentUpon>
+ <DesignTime>True</DesignTime>
+ </Compile>
+ <None Include="app.config" />
+ <None Include="Properties\Settings.settings">
+ <Generator>SettingsSingleFileGenerator</Generator>
+ <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+ </None>
+ <Compile Include="Properties\Settings.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DependentUpon>Settings.settings</DependentUpon>
+ <DesignTimeSharedInput>True</DesignTimeSharedInput>
+ </Compile>
+ <Compile Include="PumpForm.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="PumpForm.Designer.cs">
+ <DependentUpon>PumpForm.cs</DependentUpon>
+ </Compile>
+ <Compile Include="Settings.cs" />
+ <Compile Include="UndoableAction.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="asciipumper.txt">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ <Content Include="license.txt">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ <Content Include="README.txt">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ <BaseApplicationManifest Include="Properties\app.manifest" />
+ <None Include="asciipumper.pfx" />
+ <None Include="Resources\MainIcon.ico" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project>
+\ No newline at end of file
diff --git a/source/AsciiPumper.exe.config b/source/AsciiPumper.exe.config
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+ <configSections>
+ <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+ <section name="AsciiPumper.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+ <section name="ColorPumper.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+ </sectionGroup>
+ </configSections>
+ <userSettings>
+ <AsciiPumper.Properties.Settings>
+ <setting name="PaintFontName" serializeAs="String">
+ <value>Consolas</value>
+ </setting>
+ <setting name="LMBIsForeground" serializeAs="String">
+ <value>False</value>
+ </setting>
+ <setting name="MMBIsForeground" serializeAs="String">
+ <value>True</value>
+ </setting>
+ <setting name="RMBIsForeground" serializeAs="String">
+ <value>False</value>
+ </setting>
+ <setting name="CellHeight" serializeAs="String">
+ <value>20</value>
+ </setting>
+ <setting name="CellWidth" serializeAs="String">
+ <value>10</value>
+ </setting>
+ <setting name="HighlightColor" serializeAs="String">
+ <value>Salmon</value>
+ </setting>
+ <setting name="SeperatorColor" serializeAs="String">
+ <value>DimGray</value>
+ </setting>
+ <setting name="Columns" serializeAs="String">
+ <value>80</value>
+ </setting>
+ <setting name="Rows" serializeAs="String">
+ <value>15</value>
+ </setting>
+ <setting name="LMBColor" serializeAs="String">
+ <value>0</value>
+ </setting>
+ <setting name="MMBColor" serializeAs="String">
+ <value>4</value>
+ </setting>
+ <setting name="RMBColor" serializeAs="String">
+ <value>1</value>
+ </setting>
+ <setting name="PaintFontSize" serializeAs="String">
+ <value>10</value>
+ </setting>
+ <setting name="ShouldWatermark" serializeAs="String">
+ <value>True</value>
+ </setting>
+ <setting name="RecentFiles" serializeAs="Xml">
+ <value>
+ <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <string>asciipumper.txt</string>
+ </ArrayOfString>
+ </value>
+ </setting>
+ </AsciiPumper.Properties.Settings>
+ <ColorPumper.Properties.Settings>
+ <setting name="PaintFontName" serializeAs="String">
+ <value>Consolas</value>
+ </setting>
+ <setting name="PaintFontSize" serializeAs="String">
+ <value>10</value>
+ </setting>
+ <setting name="LMBIsForeground" serializeAs="String">
+ <value>True</value>
+ </setting>
+ <setting name="MMBIsForeground" serializeAs="String">
+ <value>False</value>
+ </setting>
+ <setting name="RMBIsForeground" serializeAs="String">
+ <value>False</value>
+ </setting>
+ <setting name="CellHeight" serializeAs="String">
+ <value>20</value>
+ </setting>
+ <setting name="CellWidth" serializeAs="String">
+ <value>10</value>
+ </setting>
+ <setting name="HighlightColor" serializeAs="String">
+ <value>OldLace</value>
+ </setting>
+ <setting name="SeperatorColor" serializeAs="String">
+ <value>DarkGray</value>
+ </setting>
+ <setting name="Columns" serializeAs="String">
+ <value>80</value>
+ </setting>
+ <setting name="Rows" serializeAs="String">
+ <value>15</value>
+ </setting>
+ <setting name="LMBColor" serializeAs="String">
+ <value>0</value>
+ </setting>
+ <setting name="MMBColor" serializeAs="String">
+ <value>4</value>
+ </setting>
+ <setting name="RMBColor" serializeAs="String">
+ <value>1</value>
+ </setting>
+ </ColorPumper.Properties.Settings>
+ </userSettings>
+</configuration>
+\ No newline at end of file
diff --git a/source/CellInfo.cs b/source/CellInfo.cs
@@ -0,0 +1,69 @@
+#region Copyright (c) 2007, PP4L Software
+/************************************************************************************
+
+Copyright 2007, PP4L Software
+Author: Lampiasis <lampiasis@dvolker.com>
+
+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;
+
+ /// <summary>
+ /// Gets or sets the Selected.
+ /// </summary>
+ public bool Selected;
+
+
+ public char Character;
+
+
+ public byte BackColor;
+
+
+
+ public byte ForeColor;
+
+
+ }
+}
diff --git a/source/ColorPalette.cs b/source/ColorPalette.cs
@@ -0,0 +1,99 @@
+#region Copyright (c) 2007, PP4L Software
+/************************************************************************************
+
+Copyright 2007, PP4L Software
+Author: Lampiasis <lampiasis@dvolker.com>
+
+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<Color>
+ {
+
+ 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
@@ -0,0 +1,317 @@
+namespace AsciiPumper
+{
+ partial class ColorSelector
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.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
@@ -0,0 +1,191 @@
+#region Copyright (c) 2007, PP4L Software
+/************************************************************************************
+
+Copyright 2007, PP4L Software
+Author: Lampiasis <lampiasis@dvolker.com>
+
+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();
+
+ /// <summary>
+ /// Gets or sets the Colors.
+ /// </summary>
+ 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<ButtonColorChangedEventArgs> ButtonColorChanged;
+
+ protected virtual void OnButtonColorChanged(ButtonColorChangedEventArgs e)
+ {
+ EventHandler<ButtonColorChangedEventArgs> 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
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root>
+\ No newline at end of file
diff --git a/source/ImageImporter.cs 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
@@ -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<CharChangeInfo> ChangedCharacters = new List<CharChangeInfo>();
+
+ 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
@@ -0,0 +1,536 @@
+namespace AsciiPumper
+{
+ partial class MainForm
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.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<AsciiPumper.ColorSelector.ButtonColorChangedEventArgs>(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
@@ -0,0 +1,575 @@
+#region Copyright (c) 2007, PP4L Software
+/************************************************************************************
+
+Copyright 2007, PP4L Software
+Author: Lampiasis <lampiasis@dvolker.com>
+
+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<IUndoableAction> UndoList
+ {
+ get { return AsciiPaintCanvas.UndoList; }
+ }
+
+ public Stack<IUndoableAction> RedoList
+ {
+ get { return AsciiPaintCanvas.RedoList; }
+ }
+
+ private string m_FileName = "(Untitled)";
+
+ /// <summary>
+ /// Gets or sets the FileName.
+ /// </summary>
+ public string FileName
+ {
+ get { return m_FileName; }
+ set { m_FileName = value; this.Text = m_FileName + (m_FileModified ? "" : "*"); }
+ }
+
+ private bool m_FileModified = false;
+
+ /// <summary>
+ /// Gets or sets the FileModified.
+ /// </summary>
+ 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<PaintCanvas.CanvasModifiedEventArgs>(AsciiPaintCanvas_CanvasModified);
+ AsciiPaintCanvas.UndoChanged += new EventHandler<PaintCanvas.UndoChangedEventArgs>(AsciiPaintCanvas_UndoChanged);
+ AsciiPaintCanvas.RedoChanged += new EventHandler<PaintCanvas.RedoChangedEventArgs>(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<UndoChangedEventArgs> UndoChanged;
+
+ protected virtual void OnUndoChanged(UndoChangedEventArgs e)
+ {
+ EventHandler<UndoChangedEventArgs> handler = UndoChanged;
+ if (handler != null)
+ {
+ handler(this, e);
+ }
+ }
+
+ public class RedoChangedEventArgs : EventArgs
+ {
+ public static readonly new RedoChangedEventArgs Empty = new RedoChangedEventArgs();
+ }
+
+ public event EventHandler<RedoChangedEventArgs> RedoChanged;
+
+ protected virtual void OnRedoChanged(RedoChangedEventArgs e)
+ {
+ EventHandler<RedoChangedEventArgs> 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<CellInfo> 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
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <metadata name="fontDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 17</value>
+ </metadata>
+ <metadata name="colorDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>133, 17</value>
+ </metadata>
+ <metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>254, 17</value>
+ </metadata>
+ <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>498, 17</value>
+ </metadata>
+ <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>631, 17</value>
+ </metadata>
+ <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+ <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ 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==
+</value>
+ </data>
+</root>
+\ No newline at end of file
diff --git a/source/OptionsForm.Designer.cs b/source/OptionsForm.Designer.cs
@@ -0,0 +1,444 @@
+namespace AsciiPumper
+{
+ partial class OptionsForm
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.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
@@ -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<SettingsSavedEventArgs> SettingsSaved;
+
+ protected virtual void OnSettingsSaved(SettingsSavedEventArgs e)
+ {
+ EventHandler<SettingsSavedEventArgs> 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
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <metadata name="fontdlgEditorFont.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 17</value>
+ </metadata>
+ <metadata name="colordlgSeperator.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>165, 17</value>
+ </metadata>
+ <metadata name="colordlgHighlight.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>286, 17</value>
+ </metadata>
+</root>
+\ No newline at end of file
diff --git a/source/PaintAction.cs 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<Point> PaintedPoints = new List<Point>();
+ 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
@@ -0,0 +1,56 @@
+namespace AsciiPumper
+{
+ partial class PaintCanvas
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.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
@@ -0,0 +1,1265 @@
+#region Copyright (c) 2007, PP4L Software
+/************************************************************************************
+
+Copyright 2007, PP4L Software
+Author: Lampiasis <lampiasis@dvolker.com>
+
+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<List<CellInfo>>();
+ ResizeCellRows();
+
+
+ UpdateSeperatorPen();
+ PaintCanvas_SizeChanged(this, EventArgs.Empty);
+ PaintIntoBackground();
+ Program.Settings.PropertyChanged += new PropertyChangedEventHandler(Settings_PropertyChanged);
+
+ }
+
+
+ public Stack<IUndoableAction> UndoList = new Stack<IUndoableAction>();
+ public Stack<IUndoableAction> RedoList = new Stack<IUndoableAction>();
+ public IUndoableAction CurrentAction;
+
+ private bool m_Modified;
+
+ /// <summary>
+ /// Gets or sets the Modified.
+ /// </summary>
+ 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<CanvasModifiedEventArgs> CanvasModified;
+
+ protected virtual void OnCanvasModified(CanvasModifiedEventArgs e)
+ {
+ EventHandler<CanvasModifiedEventArgs> 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<CellInfo>(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);
+
+ /// <summary>
+ /// Gets or sets the SelectedCellPosition.
+ /// </summary>
+ 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;
+
+ /// <summary>
+ /// Gets or sets the HighlightColor.
+ /// </summary>
+ public Color HighlightColor
+ {
+ get { return m_HighlightColor; }
+ set { m_HighlightColor = value; UpdateHighlightPen(); PaintIntoBackground(); this.Invalidate(); }
+ }
+
+ private int m_HighlightWidth = 2;
+
+ /// <summary>
+ /// Gets or sets the HighlightWidth.
+ /// </summary>
+ public int HighlightWidth
+ {
+ get { return m_HighlightWidth; }
+ set { m_HighlightWidth = value; UpdateHighlightPen(); PaintIntoBackground(); this.Invalidate(); }
+ }
+ #endregion
+
+ private int m_SeperatorWidth = 1;
+
+ /// <summary>
+ /// Gets or sets the SeperatorWidth.
+ /// </summary>
+ public int SeperatorWidth
+ {
+ get { return m_SeperatorWidth; }
+ set { m_SeperatorWidth = value; UpdateSeperatorPen(); ResizeByCellSize(); PaintIntoBackground(); this.Invalidate(); }
+ }
+
+ private int m_CellWidth = 5;
+
+ /// <summary>
+ /// Gets or sets the CellWidth.
+ /// </summary>
+ public int CellWidth
+ {
+ get { return m_CellWidth; }
+ set { m_CellWidth = value; ResizeByCellSize(); PaintIntoBackground(); this.Invalidate(); }
+ }
+
+ private int m_CellHeight = 10;
+
+ /// <summary>
+ /// Gets or sets the CellHeight.
+ /// </summary>
+ public int CellHeight
+ {
+ get { return m_CellHeight; }
+ set { m_CellHeight = value; ResizeByCellSize(); PaintIntoBackground(); this.Invalidate(); }
+ }
+
+ private int m_Columns = 60;
+
+ /// <summary>
+ /// Gets or sets the Columns.
+ /// </summary>
+ public int Columns
+ {
+ get { return m_Columns; }
+ set { m_Columns = value; ResizeCellRows(); ResizeByCellSize(); PaintIntoBackground(); this.Invalidate(); }
+ }
+
+ private int m_Rows = 20;
+
+ /// <summary>
+ /// Gets or sets the Rows.
+ /// </summary>
+ public int Rows
+ {
+ get { return m_Rows; }
+ set { m_Rows = value; ResizeCellRows(); ResizeByCellSize(); PaintIntoBackground(); this.Invalidate(); }
+ }
+
+
+ private Color m_SeperatorColor = Color.DarkGray;
+
+ /// <summary>
+ /// Gets or sets the SeperatorColor.
+ /// </summary>
+ 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;
+
+ /// <summary>
+ /// Gets or sets the PaintMode.
+ /// </summary>
+ 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;
+
+ /// <summary>
+ /// Gets or sets the DontRepaint = false.
+ /// </summary>
+ 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();
+
+ /// <summary>
+ /// Gets or sets the Colors.
+ /// </summary>
+ public ColorPalette Colors
+ {
+ get { return m_Colors; }
+ set { m_Colors = value; this.Invalidate(); }
+ }
+
+ public List<List<CellInfo>> CellRows;
+
+ private byte m_LeftMouseColor = 0;
+
+ /// <summary>
+ /// Gets or sets the LeftMouseColor .
+ /// </summary>
+ public byte LeftMouseColor
+ {
+ get { return m_LeftMouseColor ; }
+ set { m_LeftMouseColor = value; }
+ }
+
+ private byte m_MiddleMouseColor = 4;
+
+ /// <summary>
+ /// Gets or sets the MiddleMouseColor.
+ /// </summary>
+ public byte MiddleMouseColor
+ {
+ get { return m_MiddleMouseColor; }
+ set { m_MiddleMouseColor = value; }
+ }
+
+ private byte m_RightMouseColor = 1;
+
+ /// <summary>
+ /// Gets or sets the RightMouseColor.
+ /// </summary>
+ public byte RightMouseColor
+ {
+ get { return m_RightMouseColor; }
+ set { m_RightMouseColor = value; }
+ }
+
+ private bool m_LeftMouseIsForeground = true;
+
+ /// <summary>
+ /// Gets or sets the LeftMouseIsForeground.
+ /// </summary>
+ public bool LeftMouseIsForeground
+ {
+ get { return m_LeftMouseIsForeground; }
+ set { m_LeftMouseIsForeground = value; }
+ }
+
+ private bool m_MiddleMouseIsForeground = false;
+
+ /// <summary>
+ /// Gets or sets the MiddleMouseIsForeground.
+ /// </summary>
+ public bool MiddleMouseIsForeground
+ {
+ get { return m_MiddleMouseIsForeground; }
+ set { m_MiddleMouseIsForeground = value; }
+ }
+
+ private bool m_RightMouseIsForeground = false;
+
+ /// <summary>
+ /// Gets or sets the RightMouseIsForeground.
+ /// </summary>
+ 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<List<CellInfo>>();
+
+
+ //int col = 0;
+ int row = 0;
+ while(reader.Peek() >= 0 )
+ {
+ int bc = 100;
+ int fc = 100;
+ CellRows.Add(new List<CellInfo>());
+ 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<CellInfo> 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;
+
+ /// <summary>
+ /// Gets or sets the MostRecentForegroundColor.
+ /// </summary>
+ 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<UndoChangedEventArgs> UndoChanged;
+
+ protected virtual void OnUndoChanged(UndoChangedEventArgs e)
+ {
+ EventHandler<UndoChangedEventArgs> handler = UndoChanged;
+ if (handler != null)
+ {
+ handler(this, e);
+ }
+ }
+
+ public class RedoChangedEventArgs : EventArgs
+ {
+ public static readonly new RedoChangedEventArgs Empty = new RedoChangedEventArgs();
+ }
+
+ public event EventHandler<RedoChangedEventArgs> RedoChanged;
+
+ protected virtual void OnRedoChanged(RedoChangedEventArgs e)
+ {
+ EventHandler<RedoChangedEventArgs> 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
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root>
+\ No newline at end of file
diff --git a/source/Program.cs b/source/Program.cs
@@ -0,0 +1,45 @@
+#region Copyright (c) 2007, PP4L Software
+/************************************************************************************
+
+Copyright 2007, PP4L Software
+Author: Lampiasis <lampiasis@dvolker.com>
+
+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();
+
+ /// <summary>
+ /// The main entry point for the application.
+ /// </summary>
+ [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
@@ -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 <lampiasis@dvolker.com> 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
@@ -0,0 +1,70 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 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.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace AsciiPumper.Properties {
+ using System;
+
+
+ /// <summary>
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ /// </summary>
+ // 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() {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ 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;
+ }
+ }
+
+ /// <summary>
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ 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
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+ <data name="MainIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\Resources\MainIcon.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+</root>
+\ No newline at end of file
diff --git a/source/Properties/Settings.Designer.cs b/source/Properties/Settings.Designer.cs
@@ -0,0 +1,220 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 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.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+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("<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<ArrayOfString xmlns:xsi=\"http://www.w3." +
+ "org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n <s" +
+ "tring>asciipumper.txt</string>\r\n</ArrayOfString>")]
+ 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
@@ -0,0 +1,688 @@
+namespace AsciiPumper
+{
+ partial class PumpForm
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ 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
@@ -0,0 +1,474 @@
+#region Copyright (c) 2007, PP4L Software
+/************************************************************************************
+
+Copyright 2007, PP4L Software
+Author: Lampiasis <lampiasis@dvolker.com>
+
+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<MainForm.UndoChangedEventArgs>(childForm_UndoChanged);
+ childForm.RedoChanged += new EventHandler<MainForm.RedoChangedEventArgs>(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<MainForm.UndoChangedEventArgs>(childForm_UndoChanged);
+ form.RedoChanged += new EventHandler<MainForm.RedoChangedEventArgs>(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.SettingsSavedEventArgs>(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
@@ -0,0 +1,430 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <metadata name="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>218, 17</value>
+ </metadata>
+ <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+ <data name="newToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQpJREFUOE+t021L
+ wlAUB3C/VH6H+hr5jSRfiPSiFiEDgwWGRhZm0EoQcQN7QoblWPNp6py6h3/cwWDkvde98MDhvrnndznn
+ cFOpfYVU7+J/lmoKipUWhGs5TO5bpJgVBfEB6aMMH7m6V5nAiVBB9UnhI+Jtmwlkz27C4iiprVyWm0zA
+ 9XwQJIKowLn0TAWCIIDtbGCM7BA4ODymD/O09EgF1hsPY8uBplt8IF+sbQGeH2BmrzEwF3jXxnwgd1Hd
+ ApyVC3OyRO9nis6HyQdIf/Egg5vOV+gbM3R7I7yqenIgPrjP/gTtt180Wt/Jgfjg1K8h5M4Ady9aMiDa
+ N+tkrjHaMbmwK/f1gUPnD9/19ZYU1J08AAAAAElFTkSuQmCC
+</value>
+ </data>
+ <data name="openToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ 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=
+</value>
+ </data>
+ <data name="saveToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ 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=
+</value>
+ </data>
+ <data name="printToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ 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==
+</value>
+ </data>
+ <data name="printPreviewToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ 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=
+</value>
+ </data>
+ <data name="undoToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAZlJREFUOE+1ktsr
+ w2EYx/0p7sidnIkWlmMsSQxzlrkxhxySOV4oM9qSHG+ctuVsLCmxG+5QcoOUhZxP++324zdKDit+ylvP
+ 3fP5vM/zfl8vr/88RqsL45LA6JrA1KaAWSyLXeBXd+rnBdzVNSvQanLSPO5kZPVN4FHSZblicvvN7oZ6
+ FlyUGO6I1WwTUWIjJN9KXP0xAzYPArexdfyS0Q2BZpNA76ILle4CuWaLqLI1gnKnia1YJixviozOOybE
+ vm9rVA9cUD74TOWwkyzdI+FFVkIL5kXY/NqsaLLhnzmGvO6Qlgnnd0Gh/pykthuyu5+pHb7BN8lAYI7p
+ vdFbpiWq3I689ogWswdBWvsZwdUnJLRdvU5SoDtFO3b7WaC2k6g9p92TILregazqgHD1FoF5K/grZ/BN
+ 7nsXBKvmiFRvoui4RtPv+DnKr1H5JBrE8Q8pNd7TLcb7q7/wsSm0eJ30zgcytDvSYJX+HlnFLqkdD6Q0
+ 7OOnGJImiG90iPAT8TV7BCgt0mD3Ckox1piaA4JyZqXDkh/qL8ALl3QQwQeUb4QAAAAASUVORK5CYII=
+</value>
+ </data>
+ <data name="redoToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAZNJREFUOE/Nkt8r
+ Q2EcxvenuMGSdsE2mptdGGYrU7NiZsoi5HdhyTY/VohdbKSxTdjM1mrKr6SEm7njSolQu9FaRue814/3
+ HFHr0CgXTj1X5/l+3ud9vq9I9Fdf9JwgckYQpgocE8zHWVjXWfyIzw1z8h8R2IMsJrZZOKMsRjcohCon
+ hBv2HhJUWx9R1roHheUAyp4ELB4GAz4WA/53yNYFgXLwWggMnRIYZp4hN66hsjcOmSnGS27eRRuFdHgZ
+ dFNIgPoqOhN82qxUjhAL1cgdCmvnoRs/5H/KTBGUGsMo1q2iYfaVT9K1wkBq3hcmcEQ4wD0K1C7kKW2f
+ BmnzNsQaN4Z9aRgXGGgm05A0bAoBUxSgsT9RsycLsLhPwIk7WT2ZgnzoAWLtkhDQv5xEvTONksZYFoAr
+ TEHvLDUfQKIP8sP5VXNCwMIOQbsnA9XwLe3BnWUQFPbdTg22S+hnXlBuOcm9968gRbTturFr1E2/QNl3
+ hRZX5vcgDqK13kDnZFAzlvw94COZxpFCE11bzif8LwxvxTcHtycxLyQAAAAASUVORK5CYII=
+</value>
+ </data>
+ <data name="cutToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAaNJREFUOE+V07tL
+ W2EcxnH/AgcHJ6GjWifxVrR4K81gokdOYpoSpcHEYGuJCDFqFNEajdeUGgmIWomCkMugB4cWiqVLK95A
+ xU1EBC+oOGq3rzkRnOTw+s6/5/Pw3lJSBBaJJTD2MBJRfjOzpDwG1PDh8Sndg1NiSHAuznhoEe/gdDJw
+ e/efmPILx2evGKCGJmciBGdjajlnF9c4W3tIT0sVByIra4wGw6xv7fLn7w7mDy3PA8LRH4xNLTARCtPR
+ H8AgW8Xb1S2MfAvj7gtgd/VS1/ARnV5+HqAiNpcPs60Nk3MIyeYTB6zDN1hGrjANHKP3bGDo2KbGu4+h
+ fRNdy09tyOK/5P34Dca+Q0qs3ymQA+hca0jdB7xNhIvr57UBs/8c89ApFc7lZLhAnkDv3kDqOqCyWSHf
+ +FUbqPOdIPcfUdmkkFc7lgRqE+3Vndu8soTIKf+kDRi/HCF59ii1x8k1PByc3v2P0sYo2a/tZLzI1gZq
+ unYpa4wl2kfJLHyXfDxljjgvS2xkFlnIk/zawJvmVQpNk2QVN5Bb1SN+dcJf9YnBe5GF6RjGCzzaAAAA
+ AElFTkSuQmCC
+</value>
+ </data>
+ <data name="copyToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ 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==
+</value>
+ </data>
+ <data name="pasteToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ 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==
+</value>
+ </data>
+ <data name="indexToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ 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=
+</value>
+ </data>
+ <data name="searchToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ 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=
+</value>
+ </data>
+ <metadata name="toolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>326, 17</value>
+ </metadata>
+ <data name="newToolStripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQpJREFUOE+t021L
+ wlAUB3C/VH6H+hr5jSRfiPSiFiEDgwWGRhZm0EoQcQN7QoblWPNp6py6h3/cwWDkvde98MDhvrnndznn
+ cFOpfYVU7+J/lmoKipUWhGs5TO5bpJgVBfEB6aMMH7m6V5nAiVBB9UnhI+Jtmwlkz27C4iiprVyWm0zA
+ 9XwQJIKowLn0TAWCIIDtbGCM7BA4ODymD/O09EgF1hsPY8uBplt8IF+sbQGeH2BmrzEwF3jXxnwgd1Hd
+ ApyVC3OyRO9nis6HyQdIf/Egg5vOV+gbM3R7I7yqenIgPrjP/gTtt180Wt/Jgfjg1K8h5M4Ady9aMiDa
+ N+tkrjHaMbmwK/f1gUPnD9/19ZYU1J08AAAAAElFTkSuQmCC
+</value>
+ </data>
+ <data name="openToolStripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ 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=
+</value>
+ </data>
+ <data name="saveToolStripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ 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=
+</value>
+ </data>
+ <data name="printToolStripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ 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==
+</value>
+ </data>
+ <data name="printPreviewToolStripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ 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=
+</value>
+ </data>
+ <data name="helpToolStripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ 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=
+</value>
+ </data>
+ <metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 17</value>
+ </metadata>
+ <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <value>51</value>
+ </metadata>
+ <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ 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==
+</value>
+ </data>
+</root>
+\ No newline at end of file
diff --git a/source/Settings.cs b/source/Settings.cs
@@ -0,0 +1,55 @@
+#region Copyright (c) 2007, PP4L Software
+/************************************************************************************
+
+Copyright 2007, PP4L Software
+Author: Lampiasis <lampiasis@dvolker.com>
+
+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
@@ -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 );
+
+ }
+}
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |