From fc60991d85ca83cd99463dfb9568502694616a1d Mon Sep 17 00:00:00 2001 From: Anton Mukhin Date: Thu, 11 May 2023 13:50:59 +0300 Subject: [PATCH] Working on export --- McBitFont/Export.Designer.cs | 34 +++--- McBitFont/Export.cs | 106 ++++++++++++++-- McBitFont/Form1.Designer.cs | 51 ++++++-- McBitFont/Form1.cs | 13 ++ McBitFont/McBitFont.csproj | 28 +++++ McBitFont/New.Designer.cs | 4 +- McBitFont/Properties/Resources.Designer.cs | 133 +++++++++++++++++---- McBitFont/Properties/Resources.resx | 41 ++++++- McBitFont/Resources/action_add.png | Bin 0 -> 318 bytes McBitFont/Resources/action_remove.png | Bin 0 -> 201 bytes McBitFont/Resources/arrow_back.png | Bin 0 -> 422 bytes McBitFont/Resources/arrow_down.png | Bin 0 -> 412 bytes McBitFont/Resources/arrow_next.png | Bin 0 -> 420 bytes McBitFont/Resources/arrow_top.png | Bin 0 -> 386 bytes McBitFont/Resources/file.png | Bin 0 -> 263 bytes McBitFont/Resources/folder_open.png | Bin 0 -> 389 bytes McBitFont/Resources/save.png | Bin 0 -> 353 bytes icons/action_add.png | Bin 0 -> 318 bytes icons/action_check.png | Bin 0 -> 371 bytes icons/action_delete.png | Bin 0 -> 388 bytes icons/action_remove.png | Bin 0 -> 201 bytes icons/application.png | Bin 0 -> 233 bytes icons/arrow_back.png | Bin 0 -> 422 bytes icons/arrow_down.png | Bin 0 -> 412 bytes icons/arrow_next.png | Bin 0 -> 420 bytes icons/arrow_top.png | Bin 0 -> 386 bytes icons/comments.png | Bin 0 -> 279 bytes icons/download.png | Bin 0 -> 3137 bytes icons/file.png | Bin 0 -> 263 bytes icons/folder.png | Bin 0 -> 360 bytes icons/folder_files.png | Bin 0 -> 407 bytes icons/folder_open.png | Bin 0 -> 389 bytes icons/letter.png | Bin 0 -> 330 bytes icons/letter_open.png | Bin 0 -> 405 bytes icons/login.png | Bin 0 -> 379 bytes icons/maximize.png | Bin 0 -> 413 bytes icons/minimize.png | Bin 0 -> 381 bytes icons/reply.png | Bin 0 -> 382 bytes icons/rss.png | Bin 0 -> 539 bytes icons/save.png | Bin 0 -> 353 bytes icons/search.png | Bin 0 -> 539 bytes icons/time.png | Bin 0 -> 427 bytes icons/user.png | Bin 0 -> 552 bytes 43 files changed, 344 insertions(+), 66 deletions(-) create mode 100644 McBitFont/Resources/action_add.png create mode 100644 McBitFont/Resources/action_remove.png create mode 100644 McBitFont/Resources/arrow_back.png create mode 100644 McBitFont/Resources/arrow_down.png create mode 100644 McBitFont/Resources/arrow_next.png create mode 100644 McBitFont/Resources/arrow_top.png create mode 100644 McBitFont/Resources/file.png create mode 100644 McBitFont/Resources/folder_open.png create mode 100644 McBitFont/Resources/save.png create mode 100644 icons/action_add.png create mode 100644 icons/action_check.png create mode 100644 icons/action_delete.png create mode 100644 icons/action_remove.png create mode 100644 icons/application.png create mode 100644 icons/arrow_back.png create mode 100644 icons/arrow_down.png create mode 100644 icons/arrow_next.png create mode 100644 icons/arrow_top.png create mode 100644 icons/comments.png create mode 100644 icons/download.png create mode 100644 icons/file.png create mode 100644 icons/folder.png create mode 100644 icons/folder_files.png create mode 100644 icons/folder_open.png create mode 100644 icons/letter.png create mode 100644 icons/letter_open.png create mode 100644 icons/login.png create mode 100644 icons/maximize.png create mode 100644 icons/minimize.png create mode 100644 icons/reply.png create mode 100644 icons/rss.png create mode 100644 icons/save.png create mode 100644 icons/search.png create mode 100644 icons/time.png create mode 100644 icons/user.png diff --git a/McBitFont/Export.Designer.cs b/McBitFont/Export.Designer.cs index 772f7d4..8c138c2 100644 --- a/McBitFont/Export.Designer.cs +++ b/McBitFont/Export.Designer.cs @@ -29,6 +29,7 @@ this.cbHDir = new System.Windows.Forms.ComboBox(); this.cbOrder = new System.Windows.Forms.ComboBox(); this.gbOptions = new System.Windows.Forms.GroupBox(); + this.cbZeroes = new System.Windows.Forms.CheckBox(); this.cbHeader = new System.Windows.Forms.CheckBox(); this.cbComments = new System.Windows.Forms.CheckBox(); this.gbNumbers = new System.Windows.Forms.GroupBox(); @@ -42,7 +43,6 @@ this.cbFormat = new System.Windows.Forms.ComboBox(); this.btnGenerate = new System.Windows.Forms.Button(); this.btnClose = new System.Windows.Forms.Button(); - this.cbZeroes = new System.Windows.Forms.CheckBox(); this.gbScan.SuspendLayout(); this.gbOptions.SuspendLayout(); this.gbNumbers.SuspendLayout(); @@ -58,15 +58,13 @@ | System.Windows.Forms.AnchorStyles.Right))); this.txtOutput.AutoWordSelection = true; this.txtOutput.DetectUrls = false; - this.txtOutput.Font = new System.Drawing.Font("Lucida Console", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.txtOutput.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.txtOutput.HideSelection = false; this.txtOutput.Location = new System.Drawing.Point(151, 12); this.txtOutput.Name = "txtOutput"; - this.txtOutput.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; this.txtOutput.Size = new System.Drawing.Size(529, 507); this.txtOutput.TabIndex = 0; - this.txtOutput.Text = "// Comment.\nusing System;\n\npublic class Stuff : Form { \n public static void Main(" + - "String args) {\n }\n}\n\n\nTest\n123123\nCode code code\n\nAAAsdasdasd\n!"; + this.txtOutput.Text = ""; // // gbScan // @@ -129,6 +127,18 @@ this.gbOptions.TabStop = false; this.gbOptions.Text = "Options"; // + // cbZeroes + // + this.cbZeroes.AutoSize = true; + this.cbZeroes.Checked = true; + this.cbZeroes.CheckState = System.Windows.Forms.CheckState.Checked; + this.cbZeroes.Location = new System.Drawing.Point(6, 65); + this.cbZeroes.Name = "cbZeroes"; + this.cbZeroes.Size = new System.Drawing.Size(98, 17); + this.cbZeroes.TabIndex = 2; + this.cbZeroes.Text = "Leading zeroes"; + this.cbZeroes.UseVisualStyleBackColor = true; + // // cbHeader // this.cbHeader.AutoSize = true; @@ -140,6 +150,7 @@ this.cbHeader.TabIndex = 1; this.cbHeader.Text = "Meta header"; this.cbHeader.UseVisualStyleBackColor = true; + this.cbHeader.CheckedChanged += new System.EventHandler(this.cbFormat_SelectedIndexChanged); // // cbComments // @@ -274,6 +285,7 @@ this.cbFormat.Name = "cbFormat"; this.cbFormat.Size = new System.Drawing.Size(121, 21); this.cbFormat.TabIndex = 6; + this.cbFormat.SelectedIndexChanged += new System.EventHandler(this.cbFormat_SelectedIndexChanged); // // btnGenerate // @@ -295,18 +307,6 @@ this.btnClose.Text = "Close"; this.btnClose.UseVisualStyleBackColor = true; // - // cbZeroes - // - this.cbZeroes.AutoSize = true; - this.cbZeroes.Checked = true; - this.cbZeroes.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbZeroes.Location = new System.Drawing.Point(6, 65); - this.cbZeroes.Name = "cbZeroes"; - this.cbZeroes.Size = new System.Drawing.Size(98, 17); - this.cbZeroes.TabIndex = 2; - this.cbZeroes.Text = "Leading zeroes"; - this.cbZeroes.UseVisualStyleBackColor = true; - // // Export // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); diff --git a/McBitFont/Export.cs b/McBitFont/Export.cs index b993b25..94f9fcb 100644 --- a/McBitFont/Export.cs +++ b/McBitFont/Export.cs @@ -14,6 +14,9 @@ namespace McBitFont { private MainForm mainForm; + //private List comments = new List(); + private Dictionary comments = new Dictionary(); + public Export(object sender) { InitializeComponent(); @@ -28,6 +31,31 @@ namespace McBitFont { cb.SelectedIndex = 0; } } + comments.Add("header", + "// File generated by McBitFont " + MainForm.version + "\n" + + "// made by Anton Mukhin (mcfly@mcflyer.ru)\n" + + "//\n" + + "//\n" + ); + comments.Add("scan_order", "// Scan order: "); + comments.Add("scan_hdir", "// Horizontal direction: "); + comments.Add("scan_vdir", "// Vertical direction: "); + + comments.Add("num_bit_order", "// Bit order: "); + comments.Add("num_base", "// Numbers base: "); + comments.Add("num_size", "// Numbers size: "); + + comments.Add("text_format", "// Text format: "); + comments.Add("text_lines", "// Numbers per line: "); + + comments.Add("font_header_map", + "// Font header map:\n" + + "// width; // Font width in pixels\n" + + "// height; // Font height in pixels\n" + + "// space; // Font space in pixels\n" + + "// first; // First character code\n" + + "// last; // Last character code\n" + ); } private void cbOrder_SelectedIndexChanged(object sender, EventArgs e) { @@ -49,29 +77,38 @@ namespace McBitFont { Regex r = new Regex("([ \\t{}():;])"); string[] tokens = r.Split(line); + string[] keywords = { "const", "array", "char", "byte" }; + string[] datatypes = { "uint8_t", "uint16_t", "uint32_t" }; foreach (string token in tokens) { // Set the tokens default color and font. txtOutput.SelectionColor = Color.Black; - txtOutput.SelectionFont = new Font("Lucida Console", (float)9.75, FontStyle.Regular); + txtOutput.SelectionFont = new Font("Courier New", (float)9.75, FontStyle.Regular); // Check for a comment. if (token == "//" || token.StartsWith("//")) { // Find the start of the comment and then extract the whole comment. int index = line.IndexOf("//"); string comment = line.Substring(index, line.Length - index); - txtOutput.SelectionColor = Color.Green; - txtOutput.SelectionFont = new Font("Lucida Console", (float)9.75, FontStyle.Italic); + txtOutput.SelectionColor = Color.FromArgb(0xFF, 0x3F, 0x7F, 0x5F); + txtOutput.SelectionFont = new Font("Courier New", (float)9.75, FontStyle.Regular); txtOutput.SelectedText = comment; break; } // Check whether the token is a keyword. - string[] keywords = { "public", "void", "using", "static", "class", "array", "char", "uint8_t", "uint16_t", "uint32_t", "byte" }; for (int i = 0; i < keywords.Length; i++) { if (keywords[i] == token) { // Apply alternative color and font to highlight keyword. - txtOutput.SelectionColor = Color.Blue; - txtOutput.SelectionFont = new Font("Lucida Console", (float)9.75, FontStyle.Bold); + txtOutput.SelectionColor = Color.FromArgb(0xFF, 0x7F, 0x00, 0x55); + txtOutput.SelectionFont = new Font("Courier New", (float)9.75, FontStyle.Bold); + break; + } + } + for (int i = 0; i < datatypes.Length; i++) { + if (datatypes[i] == token) { + // Apply alternative color and font to highlight data type. + txtOutput.SelectionColor = Color.FromArgb(0xFF, 0x00, 0x50, 0x32); ; + txtOutput.SelectionFont = new Font("Courier New", (float)9.75, FontStyle.Regular); break; } } @@ -87,8 +124,32 @@ namespace McBitFont { } private void btnGenerate_Click(object sender, EventArgs e) { + //string output = ""; txtOutput.Clear(); - + bool com = cbComments.Checked; + bool hdr = cbHeader.Checked; + int lines = cbLines.SelectedIndex; + + if (com) { + //Header comments + txtOutput.AppendText(comments["header"]); + txtOutput.AppendText(comments["scan_order"] + cbOrder.Text + "\n"); + txtOutput.AppendText(comments["scan_hdir"] + cbHDir.Text + "\n"); + txtOutput.AppendText(comments["scan_vdir"] + cbVDir.Text + "\n\n"); + + txtOutput.AppendText(comments["num_bit_order"] + cbBitOrder.Text + "\n"); + txtOutput.AppendText(comments["num_base"] + cbNumBase.Text + "\n"); + txtOutput.AppendText(comments["num_size"] + cbNumSize.Text + "\n\n"); + + txtOutput.AppendText(comments["text_format"] + cbFormat.Text + "\n"); + txtOutput.AppendText(comments["text_lines"] + cbLines.Text + "\n\n"); + + if (hdr) { + // comment about meta header map + txtOutput.AppendText(comments["font_header_map"] + "\n\n"); + } + } + int imin, jmin, imax, jmax, idir, jdir; if (cbOrder.SelectedIndex == 0) { if (cbHDir.SelectedIndex == 0) { @@ -140,15 +201,19 @@ namespace McBitFont { ushort bits = 8; + string dataType = "uint8_t"; switch (cbNumSize.SelectedIndex) { case 0: bits = 8; + dataType = "uint8_t"; break; case 1: bits = 16; + dataType = "uint16_t"; break; case 2: bits = 32; + dataType = "uint32_t"; break; } @@ -174,13 +239,23 @@ namespace McBitFont { break; } + //Array definition + txtOutput.AppendText("const " + dataType + " " + mainForm.prjName + "[] = {\n"); + + if (com) txtOutput.AppendText(" // Data:\n"); foreach ( MainForm.FrameMiniature f in mainForm.frames) { // For each frame string str; uint b = 0; - int t, x, y; + int t, x, y; // t - calculated bit number; x - actual x; y - actual y + + if (com && lines != 1) { + // Comments enabled and other than "1 symbol per line" selected + // Print a symbol comment before its data + txtOutput.AppendText(" // " + f.code.ToString() + " --> \n"); + } for (int i = imin; i != imax; i += idir) { - str = ""; + str = " "; for (int j = jmin; j != jmax; j += jdir) { if (jdir < 0) t = jmin - j; else t = j; @@ -203,7 +278,7 @@ namespace McBitFont { } if (((t + 1) % bits == 0) || j + jdir == jmax) { - if (str.Length > 0) str += " "; + if (str.Length > 2) str += " "; pref = (!cbZeroes.Checked && ((b < 10 && nbase == 16) || (b < 2 && nbase == 2))) ? "" : prefix; str += pref + Convert.ToString(b, nbase).PadLeft(pad, '0') + ','; } @@ -213,9 +288,20 @@ namespace McBitFont { } txtOutput.AppendText(Environment.NewLine); } + // Close array definition + txtOutput.AppendText("};\n"); txtOutput.SelectAll(); ParseText(); + txtOutput.SelectionStart = 0; + txtOutput.ScrollToCaret(); + } + + private void cbFormat_SelectedIndexChanged(object sender, EventArgs e) { + if (cbFormat.SelectedIndex == 1 && cbHeader.Checked) { + MessageBox.Show("Cannot pack the font meta header into 2D array!\nChoose 1D array or disable the meta header.\n(Setting array format to 1D array)", "No header in 2D array!", MessageBoxButtons.OK, MessageBoxIcon.Information); + cbFormat.SelectedIndex = 0; + } } } } diff --git a/McBitFont/Form1.Designer.cs b/McBitFont/Form1.Designer.cs index 225c1c1..e0eef10 100644 --- a/McBitFont/Form1.Designer.cs +++ b/McBitFont/Form1.Designer.cs @@ -68,6 +68,8 @@ this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.dlgSave = new System.Windows.Forms.SaveFileDialog(); this.dlgOpen = new System.Windows.Forms.OpenFileDialog(); + this.applyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ((System.ComponentModel.ISupportInitialize)(this.nudX)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.nudY)).BeginInit(); this.panel1.SuspendLayout(); @@ -403,6 +405,7 @@ // // newToolStripMenuItem // + this.newToolStripMenuItem.Image = global::McBitFont.Properties.Resources.file; this.newToolStripMenuItem.Name = "newToolStripMenuItem"; this.newToolStripMenuItem.Size = new System.Drawing.Size(112, 22); this.newToolStripMenuItem.Text = "New"; @@ -410,6 +413,7 @@ // // openToolStripMenuItem // + this.openToolStripMenuItem.Image = global::McBitFont.Properties.Resources.folder_open; this.openToolStripMenuItem.Name = "openToolStripMenuItem"; this.openToolStripMenuItem.Size = new System.Drawing.Size(112, 22); this.openToolStripMenuItem.Text = "Open"; @@ -417,6 +421,7 @@ // // saveToolStripMenuItem // + this.saveToolStripMenuItem.Image = global::McBitFont.Properties.Resources.save; this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; this.saveToolStripMenuItem.Size = new System.Drawing.Size(112, 22); this.saveToolStripMenuItem.Text = "Save as"; @@ -433,7 +438,8 @@ // this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.addSymbolToolStripMenuItem, - this.removeSymbolToolStripMenuItem}); + this.removeSymbolToolStripMenuItem, + this.applyToolStripMenuItem}); this.editToolStripMenuItem.Name = "editToolStripMenuItem"; this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20); this.editToolStripMenuItem.Text = "Edit"; @@ -441,15 +447,17 @@ // addSymbolToolStripMenuItem // this.addSymbolToolStripMenuItem.Enabled = false; + this.addSymbolToolStripMenuItem.Image = global::McBitFont.Properties.Resources.action_add; this.addSymbolToolStripMenuItem.Name = "addSymbolToolStripMenuItem"; - this.addSymbolToolStripMenuItem.Size = new System.Drawing.Size(159, 22); + this.addSymbolToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.addSymbolToolStripMenuItem.Text = "Add symbol"; // // removeSymbolToolStripMenuItem // this.removeSymbolToolStripMenuItem.Enabled = false; + this.removeSymbolToolStripMenuItem.Image = global::McBitFont.Properties.Resources.action_remove; this.removeSymbolToolStripMenuItem.Name = "removeSymbolToolStripMenuItem"; - this.removeSymbolToolStripMenuItem.Size = new System.Drawing.Size(159, 22); + this.removeSymbolToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.removeSymbolToolStripMenuItem.Text = "Remove symbol"; // // toolsToolStripMenuItem @@ -461,57 +469,62 @@ this.shiftRightToolStripMenuItem, this.invertToolStripMenuItem, this.mirrorXToolStripMenuItem, - this.mirrorYToolStripMenuItem}); + this.mirrorYToolStripMenuItem, + this.exportToolStripMenuItem}); this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem"; this.toolsToolStripMenuItem.Size = new System.Drawing.Size(46, 20); this.toolsToolStripMenuItem.Text = "Tools"; // // shiftUpToolStripMenuItem // + this.shiftUpToolStripMenuItem.Image = global::McBitFont.Properties.Resources.arrow_top; this.shiftUpToolStripMenuItem.Name = "shiftUpToolStripMenuItem"; - this.shiftUpToolStripMenuItem.Size = new System.Drawing.Size(132, 22); + this.shiftUpToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.shiftUpToolStripMenuItem.Text = "Shift Up"; this.shiftUpToolStripMenuItem.Click += new System.EventHandler(this.btnShiftUp_Click); // // shiftDownToolStripMenuItem // + this.shiftDownToolStripMenuItem.Image = global::McBitFont.Properties.Resources.arrow_down; this.shiftDownToolStripMenuItem.Name = "shiftDownToolStripMenuItem"; - this.shiftDownToolStripMenuItem.Size = new System.Drawing.Size(132, 22); + this.shiftDownToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.shiftDownToolStripMenuItem.Text = "Shift Down"; this.shiftDownToolStripMenuItem.Click += new System.EventHandler(this.btnShiftDown_Click); // // shiftLeftToolStripMenuItem // + this.shiftLeftToolStripMenuItem.Image = global::McBitFont.Properties.Resources.arrow_back; this.shiftLeftToolStripMenuItem.Name = "shiftLeftToolStripMenuItem"; - this.shiftLeftToolStripMenuItem.Size = new System.Drawing.Size(132, 22); + this.shiftLeftToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.shiftLeftToolStripMenuItem.Text = "Shift left"; this.shiftLeftToolStripMenuItem.Click += new System.EventHandler(this.btnShiftLeft_Click); // // shiftRightToolStripMenuItem // + this.shiftRightToolStripMenuItem.Image = global::McBitFont.Properties.Resources.arrow_next; this.shiftRightToolStripMenuItem.Name = "shiftRightToolStripMenuItem"; - this.shiftRightToolStripMenuItem.Size = new System.Drawing.Size(132, 22); + this.shiftRightToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.shiftRightToolStripMenuItem.Text = "Shift Right"; this.shiftRightToolStripMenuItem.Click += new System.EventHandler(this.btnShiftRight_Click); // // invertToolStripMenuItem // this.invertToolStripMenuItem.Name = "invertToolStripMenuItem"; - this.invertToolStripMenuItem.Size = new System.Drawing.Size(132, 22); + this.invertToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.invertToolStripMenuItem.Text = "Invert"; this.invertToolStripMenuItem.Click += new System.EventHandler(this.btnInvert_Click); // // mirrorXToolStripMenuItem // this.mirrorXToolStripMenuItem.Name = "mirrorXToolStripMenuItem"; - this.mirrorXToolStripMenuItem.Size = new System.Drawing.Size(132, 22); + this.mirrorXToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.mirrorXToolStripMenuItem.Text = "Mirror X"; this.mirrorXToolStripMenuItem.Click += new System.EventHandler(this.btnMirrorX_Click); // // mirrorYToolStripMenuItem // this.mirrorYToolStripMenuItem.Name = "mirrorYToolStripMenuItem"; - this.mirrorYToolStripMenuItem.Size = new System.Drawing.Size(132, 22); + this.mirrorYToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.mirrorYToolStripMenuItem.Text = "Mirror Y"; this.mirrorYToolStripMenuItem.Click += new System.EventHandler(this.btnMirrorY_Click); // @@ -532,6 +545,20 @@ this.dlgOpen.DefaultExt = "mbf"; this.dlgOpen.Filter = "McBitFont files|*.mbf|All files|*.*"; // + // applyToolStripMenuItem + // + this.applyToolStripMenuItem.Name = "applyToolStripMenuItem"; + this.applyToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.applyToolStripMenuItem.Text = "Apply"; + this.applyToolStripMenuItem.Click += new System.EventHandler(this.button2_Click); + // + // exportToolStripMenuItem + // + this.exportToolStripMenuItem.Name = "exportToolStripMenuItem"; + this.exportToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.exportToolStripMenuItem.Text = "Export"; + this.exportToolStripMenuItem.Click += new System.EventHandler(this.button1_Click); + // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -616,6 +643,8 @@ private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; private System.Windows.Forms.SaveFileDialog dlgSave; private System.Windows.Forms.OpenFileDialog dlgOpen; + private System.Windows.Forms.ToolStripMenuItem applyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exportToolStripMenuItem; } } diff --git a/McBitFont/Form1.cs b/McBitFont/Form1.cs index 9a5ffae..28307a2 100644 --- a/McBitFont/Form1.cs +++ b/McBitFont/Form1.cs @@ -48,6 +48,8 @@ namespace McBitFont { bool monospaced = false; bool modified = false; bool prjModified = false; + public const string version = "1.0"; + public string prjName = "Untitled"; public MainForm() { InitializeComponent(); @@ -75,6 +77,8 @@ namespace McBitFont { f = copyFrame(frames.Find(x => x.code == 0)); ListViewItem_SetSpacing(miniList, 50 + 2, 50 + 22); + + this.Text = "McBitFont " + version + " - " + prjName; } [DllImport("user32.dll")] @@ -488,6 +492,9 @@ namespace McBitFont { dotPanel.Refresh(); miniList.Refresh(); form.Dispose(); + + prjName = "Untitled"; + this.Text = "McBitFont " + version + " - " + prjName; } } @@ -522,6 +529,8 @@ namespace McBitFont { ms.Close(); } prjModified = false; + prjName = Path.GetFileNameWithoutExtension(dlgSave.FileName); + this.Text = "McBitFont " + version + " - " + prjName; } } @@ -542,6 +551,7 @@ namespace McBitFont { fs.Close(); } monospaced = sav.monospaced; + lblType.Text = monospaced ? "Monospaced" : "Variable width / Single"; frames = sav.frames; miniList.Items.Clear(); ilMiniatures.Images.Clear(); @@ -562,6 +572,9 @@ namespace McBitFont { miniList.Refresh(); modified = false; prjModified = false; + + prjName = Path.GetFileNameWithoutExtension(dlgOpen.FileName); + this.Text = "McBitFont " + version + " - " + prjName; } } diff --git a/McBitFont/McBitFont.csproj b/McBitFont/McBitFont.csproj index 5b56f4a..b8b4ffb 100644 --- a/McBitFont/McBitFont.csproj +++ b/McBitFont/McBitFont.csproj @@ -83,6 +83,7 @@ True Resources.resx + True SettingsSingleFileGenerator @@ -97,5 +98,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/McBitFont/New.Designer.cs b/McBitFont/New.Designer.cs index 27d0c49..60537f8 100644 --- a/McBitFont/New.Designer.cs +++ b/McBitFont/New.Designer.cs @@ -114,10 +114,10 @@ this.rbMono.Checked = true; this.rbMono.Location = new System.Drawing.Point(30, 71); this.rbMono.Name = "rbMono"; - this.rbMono.Size = new System.Drawing.Size(81, 17); + this.rbMono.Size = new System.Drawing.Size(87, 17); this.rbMono.TabIndex = 4; this.rbMono.TabStop = true; - this.rbMono.Text = "Monospace"; + this.rbMono.Text = "Monospaced"; this.rbMono.UseVisualStyleBackColor = true; // // rbVar diff --git a/McBitFont/Properties/Resources.Designer.cs b/McBitFont/Properties/Resources.Designer.cs index 1abb47c..e1c0540 100644 --- a/McBitFont/Properties/Resources.Designer.cs +++ b/McBitFont/Properties/Resources.Designer.cs @@ -1,53 +1,54 @@ //------------------------------------------------------------------------------ // -// Этот код создан программным средством. -// Версия среды выполнения: 4.0.30319.42000 +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 // -// Изменения в этом файле могут привести к неправильному поведению и будут утрачены, если -// код создан повторно. +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. // //------------------------------------------------------------------------------ namespace McBitFont.Properties { - - + using System; + + /// - /// Класс ресурсов со строгим типом для поиска локализованных строк и пр. + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. /// - // Этот класс был автоматически создан при помощи StronglyTypedResourceBuilder - // класс с помощью таких средств, как ResGen или Visual Studio. - // Для добавления или удаления члена измените файл .ResX, а затем перезапустите ResGen - // с параметром /str или заново постройте свой VS-проект. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { - + 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() { } - + /// - /// Возврат кэшированного экземпляра ResourceManager, используемого этим классом. + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { - if ((resourceMan == null)) { + if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("McBitFont.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } - + /// - /// Переопределяет свойство CurrentUICulture текущего потока для всех - /// подстановки ресурсов с помощью этого класса ресурсов со строгим типом. + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { @@ -58,5 +59,95 @@ namespace McBitFont.Properties { resourceCulture = value; } } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap action_add { + get { + object obj = ResourceManager.GetObject("action_add", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap action_remove { + get { + object obj = ResourceManager.GetObject("action_remove", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrow_back { + get { + object obj = ResourceManager.GetObject("arrow_back", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrow_down { + get { + object obj = ResourceManager.GetObject("arrow_down", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrow_next { + get { + object obj = ResourceManager.GetObject("arrow_next", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrow_top { + get { + object obj = ResourceManager.GetObject("arrow_top", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap file { + get { + object obj = ResourceManager.GetObject("file", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap folder_open { + get { + object obj = ResourceManager.GetObject("folder_open", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap save { + get { + object obj = ResourceManager.GetObject("save", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/McBitFont/Properties/Resources.resx b/McBitFont/Properties/Resources.resx index af7dbeb..73dfd4b 100644 --- a/McBitFont/Properties/Resources.resx +++ b/McBitFont/Properties/Resources.resx @@ -46,7 +46,7 @@ mimetype: application/x-microsoft.net.object.binary.base64 value : The object must be serialized with - : System.Serialization.Formatters.Binary.BinaryFormatter + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : and then encoded with base64 encoding. mimetype: application/x-microsoft.net.object.soap.base64 @@ -60,6 +60,7 @@ : and then encoded with base64 encoding. --> + @@ -68,9 +69,10 @@ - + + @@ -85,9 +87,10 @@ - + + @@ -109,9 +112,37 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\action_add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\action_remove.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrow_back.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrow_down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrow_next.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrow_top.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\file.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\folder_open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\save.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/McBitFont/Resources/action_add.png b/McBitFont/Resources/action_add.png new file mode 100644 index 0000000000000000000000000000000000000000..f098f02e04c445d8fe7d4dd68feb13c8b7370f64 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i<@@N{tuskoK&=l_3uX4M8(ml@}e zX|?AVDero6GDL-WL*}{Sq=W>ftluA}Hzpoq+>qE~5!=8UQ|UiPd`5xipMS>>eE7?M zMD&Q%2YF6o17jy1!IZ;#{qI`;$Eoq~tZ{h!k8$aKrrf%pa~mH@Pe@BoOK_O>`_t^k z#Q#8>4jfK+Z~Vru=38$^21{fA{*L}?J{>lLqCJjZZ%Z?>L_c9}lkB;%NYHZ6|K=oy z>1vBE9lZZvMI|-IAza|#zdut;m?iA(56%~VAT;Hfn;IJzqeBBDgT+~giAVS8&jtF8 N!PC{xWt~$(69Cl+eZc?# literal 0 HcmV?d00001 diff --git a/McBitFont/Resources/action_remove.png b/McBitFont/Resources/action_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa647aab8a536e05fb383badce04451895ee612 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i&c^;-{-=8rv@3slFa#fN!9xw|Jy>+$ z;@WIz{kGF$6R7o7xUYiOhN+ygvM$S+9jJlHvqLKF2eZ49k+ z^eC6YDM*qW1SG{zD9&iDSu+to&Pjt5k~Chyf41}HF2tIV_BLinSw8{{0FE14^`F29 Ql>h($07*qoM6N<$f{J~y$^ZZW literal 0 HcmV?d00001 diff --git a/McBitFont/Resources/arrow_down.png b/McBitFont/Resources/arrow_down.png new file mode 100644 index 0000000000000000000000000000000000000000..2ca023159820309baf36c78c7fa33393b104b182 GIT binary patch literal 412 zcmV;N0b~A&P)veFg4)70mVY?K8FA7LJSOCK=-UX4v|n$ zVPN?EkAXp)gMs1PHHcV{IRnG{p9~DFpBWgMogiTXcEPT@3=BtKGBDi!#K7Qg3{lL= z1TlaU>PcID28L6w85oYef~dy`gJ<6$P8R26V31N|V0iT%5)Lek5dNii3=A*7L)3C$ z2}DMYHw^z@3IG-TKn)~xzQ_mEbb%ZTj6li%k9ly1xa=3qM8$-rh7qLb?|)2;O*5`^ zz^L$*;XkhoLg4cg?3(c3chA+Pv818*yV0iY8fg#fY zyCKL1{D)y+n1B@?zR1Av=@$dTO`uC2ePLjTvBoq676$*lOc)qgk&OEXRQB}`&lAJP O0000J^mK6yskpUd@?FlO3Ouc$@0uSi zzPzLB_e&zopr0Q$jT^8f$< literal 0 HcmV?d00001 diff --git a/McBitFont/Resources/folder_open.png b/McBitFont/Resources/folder_open.png new file mode 100644 index 0000000000000000000000000000000000000000..c874458a000c6f215a8bfb33a7acf4d1b40f00ac GIT binary patch literal 389 zcmV;00eb$4P)W&G6{-0S0yv6}VwI!QUS!YFJ>5f4{#o zNIDe*!{ZHp1O9vlt9i7(2%ILs27qkm5?5nj`0D&Cn`Ie{tv86z}0 j85sZn|Ia`P00=MuAMRy4je^e900000NkvXXu0mjf$poP0 literal 0 HcmV?d00001 diff --git a/McBitFont/Resources/save.png b/McBitFont/Resources/save.png new file mode 100644 index 0000000000000000000000000000000000000000..8eaba5185a3d8659fd9e31ee3f4cd050d03bce74 GIT binary patch literal 353 zcmV-n0iOPeP)ftluA}Hzpoq+>qE~5!=8UQ|UiPd`5xipMS>>eE7?M zMD&Q%2YF6o17jy1!IZ;#{qI`;$Eoq~tZ{h!k8$aKrrf%pa~mH@Pe@BoOK_O>`_t^k z#Q#8>4jfK+Z~Vru=38$^21{fA{*L}?J{>lLqCJjZZ%Z?>L_c9}lkB;%NYHZ6|K=oy z>1vBE9lZZvMI|-IAza|#zdut;m?iA(56%~VAT;Hfn;IJzqeBBDgT+~giAVS8&jtF8 N!PC{xWt~$(69Cl+eZc?# literal 0 HcmV?d00001 diff --git a/icons/action_check.png b/icons/action_check.png new file mode 100644 index 0000000000000000000000000000000000000000..42aea42e0b485fb1e94b6b6f5f502ee874adfb1a GIT binary patch literal 371 zcmV-(0gV2MP)>?2R#kb20&wiYPYrSR)aKJMY#RdQb7y#^4bnA~= R^i2Q&002ovPDHLkV1j%llrR7Q literal 0 HcmV?d00001 diff --git a/icons/action_delete.png b/icons/action_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..d51dc29cddd44efc3b3e9999dfc4d33cf6ea1402 GIT binary patch literal 388 zcmV-~0ek+5P)M)%YQ?)Pzut%&tpzVb#LINha*h z%)a?O93sLmGQf{w09=!Va^Dx)4ODiHF&x|i>m`nfHXEWWBiij~?|Gzr;@sGTuZa<{ zFQ21k!02ueNYvR3m`sqbR^sYL5pcT!r<06bui>Vt!{?z<&f_7!MFCV5+~rcvlgxNTt^hP}s}g;fDrV-=$m8<}-F3w1WK i>MS&v__x3DDZl`ILf0f4;*sS500005TH>^v#V8yMs3C$F0*cr0R9 z$;tesAyvSuy&-BV+ dXKY|#X3(EfFgGKby$|RN22WQ%mvv4FO#q&XR@wjn literal 0 HcmV?d00001 diff --git a/icons/arrow_back.png b/icons/arrow_back.png new file mode 100644 index 0000000000000000000000000000000000000000..4b2b1ff23edac205bccd199bc8209b9443095c68 GIT binary patch literal 422 zcmV;X0a^ZuP)&c^;-{-=8rv@3slFa#fN!9xw|Jy>+$ z;@WIz{kGF$6R7o7xUYiOhN+ygvM$S+9jJlHvqLKF2eZ49k+ z^eC6YDM*qW1SG{zD9&iDSu+to&Pjt5k~Chyf41}HF2tIV_BLinSw8{{0FE14^`F29 Ql>h($07*qoM6N<$f{J~y$^ZZW literal 0 HcmV?d00001 diff --git a/icons/arrow_down.png b/icons/arrow_down.png new file mode 100644 index 0000000000000000000000000000000000000000..2ca023159820309baf36c78c7fa33393b104b182 GIT binary patch literal 412 zcmV;N0b~A&P)veFg4)70mVY?K8FA7LJSOCK=-UX4v|n$ zVPN?EkAXp)gMs1PHHcV{IRnG{p9~DFpBWgMogiTXcEPT@3=BtKGBDi!#K7Qg3{lL= z1TlaU>PcID28L6w85oYef~dy`gJ<6$P8R26V31N|V0iT%5)Lek5dNii3=A*7L)3C$ z2}DMYHw^z@3IG-TKn)~xzQ_mEbb%ZTj6li%k9ly1xa=3qM8$-rh7qLb?|)2;O*5`^ zz^L$*;XkhoLg4cg?3(c3chA+Pv818*yV0iY8fg#fY zyCKL1{D)y+n1B@?zR1Av=@$dTO`uC2ePLjTvBoq676$*lOc)qgk&OEXRQB}`&lAJP O0000hnps(nUu8OF;_EWaaM`pu zhHqmppQzHf?CI3;{tvT&#?o&Z|BVx+omTvF-BBsGce=vod++`8>J3ipuX=b^{?66t b21bSpXITZ`);)OxbTosftDnm{r-UW|S;KFJ literal 0 HcmV?d00001 diff --git a/icons/download.png b/icons/download.png new file mode 100644 index 0000000000000000000000000000000000000000..67e0ac4033480ac0a0d2d0d0aeb892a557ecaf5d GIT binary patch literal 3137 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 bJop^|2Nu1xw#y&_00000NkvXXu0mjf#LCd4 literal 0 HcmV?d00001 diff --git a/icons/file.png b/icons/file.png new file mode 100644 index 0000000000000000000000000000000000000000..4f138b60a578ea0c99d154c57fb88c86fe825682 GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i>J^mK6yskpUd@?FlO3Ouc$@0uSi zzPzLB_e&zopr0Q$jT^8f$< literal 0 HcmV?d00001 diff --git a/icons/folder.png b/icons/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..eb4fa1c1be03d8817cc56967e11394a959a08a30 GIT binary patch literal 360 zcmV-u0hj)XP)RyE2pjPCJBm6M zxTzrU>my+U{(M7G2QlF9PpAR!i7?Yy&5&ELBs{( zKg>X6e0Trm|2MZT5S8+nSUDMh>fw2U@&Et-43q$X00RKclWb09IIklB0000^@RCwBA zywfMo00jRTPyr(Y0iay?08F!hG%IJHM3KBZ)%-s(hQJJ9VEFM0o7{gKdKfVc`1%0V zc@dLw+IV+GE{f|Q27GzIFlqaLVqDDN4a8fSix~2d4FGA*%gZCmfJu|Eg#i#;xpIZ! z-O)~h1_W^51&7b0xhojul8+$_kovflK__`CK?6V*>1Zi4JX#zG4hy&e|Ni}F`1j`r zVL$x)#lZ0AE2bCz{rku8@AntN2K@QP!0_t>76bnNW%&2=6JZ1X0&V~G7Sn*gKm+~~ zW56GvD}Vk)HNb%VG|&r*K<|AfY`|}z3x0k>7{JOW#ULc7%OD^xPh1%M1%<(H6c;e^ zJ=*a9{5@r&5|RSTU4}=G5P5>}|9|3=FfITPU;uWPa*^1o3{L<6002ovPDHLkV1i#a BtN8!` literal 0 HcmV?d00001 diff --git a/icons/folder_open.png b/icons/folder_open.png new file mode 100644 index 0000000000000000000000000000000000000000..c874458a000c6f215a8bfb33a7acf4d1b40f00ac GIT binary patch literal 389 zcmV;00eb$4P)W&G6{-0S0yv6}VwI!QUS!YFJ>5f4{#o zNIDe*!{ZHp1O9vlt9i7(2%ILs27qkm5?5nj`0D&Cn`Ie{tv86z}0 j85sZn|Ia`P00=MuAMRy4je^e900000NkvXXu0mjf$poP0 literal 0 HcmV?d00001 diff --git a/icons/letter.png b/icons/letter.png new file mode 100644 index 0000000000000000000000000000000000000000..a8a0ea2184d4193af104a7ebc7f2dadb67b1eb72 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i>Z@pN$vskn6{_%@%jgNTgpeStU* z!A|)PH|tyd+2qm5!_9>RCwB? zQcX*RKomWOn`qU_g&#c3t*DpXbkVXbQYX)l4;>wP z(Sf7fd(J)F8MV?hg%AQm}Y$A0%#Nr)vkcTJJwN1FZ$kZ&4$_?bfu|U;eW75w#KGY??-Y>De zx4-cQ)oMAugD8sd_Hc))#;>H0{!u_(*9gN9_39Sy-HIksSH8|a2_P4X1?kf` zz4y)rkU<@jTfTn3i^nD+@&xQK-e6!X)J?uU}hv#{aFIVt>hD}fb zZQIU@uIn1LbwC`)D2f7q1?SZ7D5b=I@GZaqM;rXJ_WtXf00000NkvXXu0mjfH)yyi literal 0 HcmV?d00001 diff --git a/icons/login.png b/icons/login.png new file mode 100644 index 0000000000000000000000000000000000000000..aca45672280040c0b5d2b8cdca79401abd24aaca GIT binary patch literal 379 zcmV->0fhdEP)_n(R0xTGQ`ui23spdY|&!<`x|09dzH{cI; zg}B5SVX*)Ud0`bZF#qkHQz#0N#gStKYye2JhC?6&Dd5I|^huH)nm`@AI1*^~u(C;MQ1)ykQIGut&*g3=@7?!!deZ`&*hyfVsfD!-@ ZU;yFG0AQ*GJU0LU002ovPDHLkV1iUhnVbLs literal 0 HcmV?d00001 diff --git a/icons/maximize.png b/icons/maximize.png new file mode 100644 index 0000000000000000000000000000000000000000..e573171969dbed93d1d04a4bf7b7c506d88bcdec GIT binary patch literal 413 zcmV;O0b>4%P)v8DTCkpUv>U)RlqZ?>|gUFgJp9F#(C5 zJq!#dQz3?c4FK8vm7Rg%7f|!ZUl0v2pTXE5nw^<}fsd7e;UADA^atV+umK?3ZS@ff zVVWjbKn%$}j%pAHpSuci1w0JC{Dw&U`;Sok8|t0USmZDQ@zZaJ#6KjPe*A^V!M(+R zP=jFrOwmF+ge1&>SvCl9ZT*g*8qPxxl@s0SF>6 z4EXv7HKdWf@cj>F)M9wyJ5(`p2*V5jr4M9r3v8DTCkpUv>U)RlqZ?>|gUFgJp9F#(C5 zJq!#dQz3?c4FK8vm7Rg%7f|!ZUl0v2pTXE5nw^<}fsd7e;UADA^atV+umK?3ZS@ff zku{;Pk;Kkjg}4G9248+dB>w%!Z2+c4>V*ph`=!5>mO8w4CrjMsKxNY_rC~D=m`j)I1?;+ z{`m*NfBz#eING49S(qRRi3?~YKO003MpFJE!oa`^RLBO!tjq{D8xs4<4YZ_8mCQsg b00=Mu)nK?_flI_F00000NkvXXu0mjf7igDA literal 0 HcmV?d00001 diff --git a/icons/reply.png b/icons/reply.png new file mode 100644 index 0000000000000000000000000000000000000000..98009be19f6f195eca939b43f4b5a09bef880662 GIT binary patch literal 382 zcmV-^0fGLBP)JZU27JKmjy;U|A4)TV$ps4-m>7r${~6k985l}(kqu&C!KdR8M>d4kfoLds z_kn@o^&18T4`&939eY7yj4Z_1TvAd3X7u#*FqFuMGcde-1(#$ZR`cV>j~Q%jZ5eu= zykuZFe;FPQOn5bC27qk^X@2(X8H2gGIm9J8I*f!|@ZYR(Hv_|u7Yrp~(hMtCt^{ia z83vC5JO;ouGkkr_!0_!6Ly7Za49%xh4q`O`Lo>toXAGydZo;q`TQuU;Z1-a-R=+Zl zYcpmTkf9lD05EX==WG%sOEXFsn1%E+O!0fofRb5=F<{lIRSaQaVNh>OWn>@`FoLo( cB>*760L_1l^Gte(w*UYD07*qoM6N<$f>hO!MgRZ+ literal 0 HcmV?d00001 diff --git a/icons/rss.png b/icons/rss.png new file mode 100644 index 0000000000000000000000000000000000000000..1baa6ff12ec0aa24a96e923dd8295667fdf3e325 GIT binary patch literal 539 zcmV+$0_6RPP);@z;~dQKd|vqyC%32G?|I(md*A=_e=e`)^?G@aSd5RyZZ*_vku?3= zmI5#?>t)Rl`RQd>k5=)Fb{YXSi|JegJqpfu)Y_RA*#9p};Z`D&;B&S4$8!pfL0Ifl z_Ok%%VlJh!sdrMV+61SJ*a^R;GBW6 zdgzf^_-$9d%trW-4D-^7E0-#4LcR}x!Vbu5g=-H?e20C9ai^xm@4!7)DOVDhJ8V9+$gF(Pa(rFApr-hB+4Q%}ypn;(<* d-sgNHzyPv7i4BrSJ2?OV002ovPDHLkV1i2}^1A>4 literal 0 HcmV?d00001 diff --git a/icons/save.png b/icons/save.png new file mode 100644 index 0000000000000000000000000000000000000000..8eaba5185a3d8659fd9e31ee3f4cd050d03bce74 GIT binary patch literal 353 zcmV-n0iOPeP)7j0Q5}SdnPm3aJTJeQ`Ohdq2w1j$261$a28%_2)hQ_W#S{xLz6TMX z1T+WW>6C}1Dp05Z2NytU*&bp7`0?Tdpwi|=NB25uT{6JU( zhP3YtiUfEp0{3~~@|n&>b2%McGe`1L)Ik*(@Bjg~^nUv9qqU2G24(V79}~bI)hW|= z(?tjESRtH>%!bcYhrNgmIwWXn=`Q#0_$pJnpg}Z8{%Rm;8&v>1Sv}mI@1dR5Q(%mGeOXi-V=y&hbfegVOsEzR} z=$o^MuH7oOgJcANkS1q=cRBTRfx18~OwAkvE*~k|1AQy@1yTMq%E1kK?5}$rvb|tJ z8k)mHLf&M0Vn;;hS4i1%-7AeqgqN&rU%EC&{RS@(-XtyWqurty zz@jir13_w#4Pb&L5|H59`w%DN!)t(Q{{DyPK}iSZvw@*1&cHCm5`WUo0wyM=R}2g% zQz7Yq2|1~P0y6U`1H;CLn9&CkOFs%x1G61xQvM~vz<@1_vA@BSl&O-L$N>NW1^`wo V;|z4qO}GF6002ovPDHLkV1io!s?Pub literal 0 HcmV?d00001 diff --git a/icons/user.png b/icons/user.png new file mode 100644 index 0000000000000000000000000000000000000000..5602677b17c6f4b3ebd3029806be34c4d2977cd3 GIT binary patch literal 552 zcmV+@0@wYCP)sGgKm>5s6N#AW=w8L?TM!qV?+{ zT%6_X&$rLauDjgbE@6_%?97|_?0Yk#NGVY(xsx?nxZW@Oss1^%r&kq3h*As4Zl%kC zmYylZQyqA|*zx_o<&zLZt^G6Gw!sA?yC?CPyF}a2qVHFpR|(&sq}Q8cQs&R3G;>mV z7KPlvvQKgUyds~qE<`k6fLJp4))IiQ06QPVBP0wk?gLw|(*p_MSwV3r{u_Y14dV%L z4Jsn5#t7g5j_zwy*T~%sRGb50yv& z7taq*qd`j{t~H}ht*04l@F3uNCT#HzLlm%gepChV0lQc0GTwTFgq9?2MoeuaKmrOO zBq3aCq~jG~5yTQY?AKl_4y-8UMatYB!gAkWIC*?HPk6T