diff --git a/McBitFont/Form1.Designer.cs b/McBitFont/Form1.Designer.cs index 3fc093c..5ff321b 100644 --- a/McBitFont/Form1.Designer.cs +++ b/McBitFont/Form1.Designer.cs @@ -62,6 +62,8 @@ prependSymbolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); appendSymbolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); removeSymbolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + removeBeforeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + removeAfterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); applyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ClearToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -461,7 +463,7 @@ // // editToolStripMenuItem // - editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { copyToolStripMenuItem, pasteToolStripMenuItem, prependSymbolToolStripMenuItem, appendSymbolToolStripMenuItem, removeSymbolToolStripMenuItem, applyToolStripMenuItem }); + editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { copyToolStripMenuItem, pasteToolStripMenuItem, prependSymbolToolStripMenuItem, appendSymbolToolStripMenuItem, removeSymbolToolStripMenuItem, removeBeforeToolStripMenuItem, removeAfterToolStripMenuItem, applyToolStripMenuItem }); editToolStripMenuItem.Name = "editToolStripMenuItem"; editToolStripMenuItem.Size = new System.Drawing.Size(39, 20); editToolStripMenuItem.Text = "Edit"; @@ -473,7 +475,7 @@ copyToolStripMenuItem.Name = "copyToolStripMenuItem"; copyToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+C"; copyToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C; - copyToolStripMenuItem.Size = new System.Drawing.Size(212, 22); + copyToolStripMenuItem.Size = new System.Drawing.Size(215, 22); copyToolStripMenuItem.Text = "Copy"; copyToolStripMenuItem.Click += copyToolStripMenuItem_Click; // @@ -484,7 +486,7 @@ pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; pasteToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+V"; pasteToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V; - pasteToolStripMenuItem.Size = new System.Drawing.Size(212, 22); + pasteToolStripMenuItem.Size = new System.Drawing.Size(215, 22); pasteToolStripMenuItem.Text = "Paste"; pasteToolStripMenuItem.Click += pasteToolStripMenuItem_Click; // @@ -495,7 +497,7 @@ prependSymbolToolStripMenuItem.Name = "prependSymbolToolStripMenuItem"; prependSymbolToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Ins"; prependSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Insert; - prependSymbolToolStripMenuItem.Size = new System.Drawing.Size(212, 22); + prependSymbolToolStripMenuItem.Size = new System.Drawing.Size(215, 22); prependSymbolToolStripMenuItem.Text = "Prepend symbol"; prependSymbolToolStripMenuItem.Click += prependSymbolToolStripMenuItem_Click; // @@ -506,7 +508,7 @@ appendSymbolToolStripMenuItem.Name = "appendSymbolToolStripMenuItem"; appendSymbolToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+End"; appendSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.End; - appendSymbolToolStripMenuItem.Size = new System.Drawing.Size(212, 22); + appendSymbolToolStripMenuItem.Size = new System.Drawing.Size(215, 22); appendSymbolToolStripMenuItem.Text = "Append symbol"; appendSymbolToolStripMenuItem.Click += prependSymbolToolStripMenuItem_Click; // @@ -517,17 +519,35 @@ removeSymbolToolStripMenuItem.Name = "removeSymbolToolStripMenuItem"; removeSymbolToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Del"; removeSymbolToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Delete; - removeSymbolToolStripMenuItem.Size = new System.Drawing.Size(212, 22); + removeSymbolToolStripMenuItem.Size = new System.Drawing.Size(215, 22); removeSymbolToolStripMenuItem.Text = "Remove symbol"; removeSymbolToolStripMenuItem.Click += removeSymbolToolStripMenuItem_Click; // + // removeBeforeToolStripMenuItem + // + removeBeforeToolStripMenuItem.Enabled = false; + removeBeforeToolStripMenuItem.Image = Properties.Resources.action_remove; + removeBeforeToolStripMenuItem.Name = "removeBeforeToolStripMenuItem"; + removeBeforeToolStripMenuItem.Size = new System.Drawing.Size(215, 22); + removeBeforeToolStripMenuItem.Text = "Remove all before selected"; + removeBeforeToolStripMenuItem.Click += removeBeforeToolStripMenuItem_Click; + // + // removeAfterToolStripMenuItem + // + removeAfterToolStripMenuItem.Enabled = false; + removeAfterToolStripMenuItem.Image = Properties.Resources.action_remove; + removeAfterToolStripMenuItem.Name = "removeAfterToolStripMenuItem"; + removeAfterToolStripMenuItem.Size = new System.Drawing.Size(215, 22); + removeAfterToolStripMenuItem.Text = "Remove all after selected"; + removeAfterToolStripMenuItem.Click += removeAfterToolStripMenuItem_Click; + // // applyToolStripMenuItem // applyToolStripMenuItem.Image = Properties.Resources.action_check; applyToolStripMenuItem.Name = "applyToolStripMenuItem"; applyToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Space"; applyToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Space; - applyToolStripMenuItem.Size = new System.Drawing.Size(212, 22); + applyToolStripMenuItem.Size = new System.Drawing.Size(215, 22); applyToolStripMenuItem.Text = "Apply"; applyToolStripMenuItem.Click += button2_Click; // @@ -786,6 +806,8 @@ private System.Windows.Forms.ToolStripMenuItem ClearToolStripMenuItem; private System.Windows.Forms.CheckBox chkLeftSide; private System.Windows.Forms.CheckBox chkTopSide; + private System.Windows.Forms.ToolStripMenuItem removeBeforeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem removeAfterToolStripMenuItem; } } diff --git a/McBitFont/Form1.cs b/McBitFont/Form1.cs index 4ce9f1a..51e5c21 100644 --- a/McBitFont/Form1.cs +++ b/McBitFont/Form1.cs @@ -56,7 +56,7 @@ namespace McBitFont { public bool monospaced = false; bool modified = false; bool prjModified = false; - public const string version = "1.7"; + public const string version = "2.0"; public string prjName = "Untitled"; public string prjFileName = ""; public int codepage = 1251; @@ -72,7 +72,7 @@ namespace McBitFont { private void Form1_Load(object sender, EventArgs e) { lblType.Text = monospaced ? "Monospaced" : "Variable width / Single"; - dotWidth = (int)nudX.Value; + dotWidth = (int)nudX.Value; dotHeight = (int)nudY.Value; gap = (cellSize < 5) ? 0 : 1; @@ -106,12 +106,12 @@ namespace McBitFont { [DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); - + public int MakeLong(short lowPart, short highPart) { return (int)(((ushort)lowPart) | (uint)(highPart << 16)); } - FrameMiniature copyFrame(FrameMiniature frame) { + FrameMiniature copyFrame(FrameMiniature frame) { var ff = new FrameMiniature(frame.code, frame.width, frame.height); Array.Copy(frame.data, ff.data, frame.data.Length); return ff; @@ -199,9 +199,9 @@ namespace McBitFont { ff.width = neww; ff.height = newh; t = new bool[neww, newh]; - for (int i=0; i= 0 && j+dj >= 0) t[i, j] = ff.data[i + di, j + dj]; + for (int i = 0; i < imax; i++) { + for (int j = 0; j < jmax; j++) { + if (i + di >= 0 && j + dj >= 0) t[i, j] = ff.data[i + di, j + dj]; } } ff.data = t; @@ -232,7 +232,7 @@ namespace McBitFont { hScroll.Minimum = 0; hScroll.Enabled = true; } - + if (h <= dotPanel.Height) { vScroll.Enabled = false; vScroll.Value = 0; @@ -347,7 +347,7 @@ namespace McBitFont { bool c; for (int i = 0; i < dotWidth; i++) { c = f.data[i, dotHeight - 1]; - for (int j = dotHeight-1; j >= 0; j--) { + for (int j = dotHeight - 1; j >= 0; j--) { if (j == 0) { f.data[i, j] = c; } else { @@ -448,7 +448,7 @@ namespace McBitFont { for (int i = 0; i < m.width; i++) { for (int j = 0; j < m.height; j++) { c = m.data[i, j] ? Color.Black : Color.White; - bmp.SetPixel(i+imin, j+jmin, c); + bmp.SetPixel(i + imin, j + jmin, c); } } var sizedBMP = new Bitmap(bmp, new Size(50, 50)); @@ -464,19 +464,19 @@ namespace McBitFont { Pen p = new Pen(Color.FromArgb(64, Color.Green)); int x, y; - for (int i=0; i 0 && i != 0 && (i % 8) == 0) { g.DrawLine(p, x - 1, pixelOffset - vScroll.Value, x - 1, h); } - for (int j=0; j 0 && i == 0 && j != 0 && (j % 8) == 0) { - g.DrawLine(p, pixelOffset - hScroll.Value, y-1, w, y-1); + g.DrawLine(p, pixelOffset - hScroll.Value, y - 1, w, y - 1); } if (f.data[i, j]) sb = sbb; else sb = sbw; - g.FillRectangle(sb, x, (baseline == j ? y+1 : y), cellSize, (baseline == j ? cellSize-1 : cellSize)); + g.FillRectangle(sb, x, (baseline == j ? y + 1 : y), cellSize, (baseline == j ? cellSize - 1 : cellSize)); } } @@ -545,7 +545,7 @@ namespace McBitFont { nudY.Value = newh; FrameMiniature newf; if (form.cbSingle.Checked) { - frames.Add( new FrameMiniature(0, neww, newh)); + frames.Add(new FrameMiniature(0, neww, newh)); //f = frames.Find(x => x.code == 0); append = "Single"; monospaced = false; @@ -557,20 +557,20 @@ namespace McBitFont { } else { if (form.cbNotPrintable.Checked) imin = 0; else if (form.cbLatin.Checked) imin = 32; - else imin = 128; + else imin = 128; if (form.cbExtended.Checked) imax = 255; else if (form.cbLatin.Checked) imax = 127; else imax = 31; } - + for (i = imin; i <= imax; i++) { newf = new FrameMiniature(i, neww, newh); if (form.cbFontBased.Checked) newf = fillFrame(newf, form.dlgFont.Font, (int)form.nudShiftX.Value, (int)form.nudShiftY.Value); frames.Add(newf); } - + monospaced = form.rbMono.Checked; } lblType.Text = monospaced ? "Monospaced" : "Variable width / Single"; @@ -579,7 +579,7 @@ namespace McBitFont { var s = ff.code.ToString().PadLeft(3, '0'); ilMiniatures.Images.Add(s, (Image)getMiniPictue(ff)); var sss = decodeSymbol(ff.code); - miniList.Items.Add(s, s+' '+append+sss, s); + miniList.Items.Add(s, s + ' ' + append + sss, s); } f = copyFrame(frames.First()); dotPanel.Refresh(); @@ -603,6 +603,8 @@ namespace McBitFont { checkModifiedFrame(); if (miniList.SelectedItems.Count == 0) { removeSymbolToolStripMenuItem.Enabled = false; + removeBeforeToolStripMenuItem.Enabled = false; + removeAfterToolStripMenuItem.Enabled = false; copyToolStripMenuItem.Enabled = false; pasteToolStripMenuItem.Enabled = false; return; @@ -622,6 +624,17 @@ namespace McBitFont { removeSymbolToolStripMenuItem.Enabled = false; } copyToolStripMenuItem.Enabled = true; + if (ff.Equals(frames.First())) { + removeBeforeToolStripMenuItem.Enabled = false; + removeAfterToolStripMenuItem.Enabled = true; + } else if (ff.Equals(frames.Last())) { + removeBeforeToolStripMenuItem.Enabled = true; + removeAfterToolStripMenuItem.Enabled = false; + } else { + removeBeforeToolStripMenuItem.Enabled = true; + removeAfterToolStripMenuItem.Enabled = true; + } + if (fbuffer) pasteToolStripMenuItem.Enabled = true; else pasteToolStripMenuItem.Enabled = false; } @@ -724,7 +737,7 @@ namespace McBitFont { ff = new FrameMiniature(frames.Last().code + 1, dotWidth, dotHeight); frames.Add(ff); } - + var s = ff.code.ToString().PadLeft(3, '0'); ilMiniatures.Images.Add(s, (Image)getMiniPictue(ff)); var sss = decodeSymbol(ff.code); @@ -755,11 +768,11 @@ namespace McBitFont { Array.Copy(fbuf.data, f.data, fbuf.data.Length); } else { var wmax = (fbuf.width > f.width) ? f.width : fbuf.width; - var hmax = (fbuf.height > f.height) ? f.height : fbuf.height; + var hmax = (fbuf.height > f.height) ? f.height : fbuf.height; for (int i = 0; i < wmax; i++) { for (int j = 0; j < hmax; j++) { - f.data[i,j] = fbuf.data[i,j]; + f.data[i, j] = fbuf.data[i, j]; } } } @@ -794,7 +807,7 @@ namespace McBitFont { checkModifiedFrame(); saveProject(prjFileName); } - + } private void btnClear_Click(object sender, EventArgs e) { @@ -817,5 +830,35 @@ namespace McBitFont { dotPanel.Refresh(); } + // Remove all before or after specified symbol + private void removeBA(bool before) { + if (miniList.SelectedItems.Count == 0) { + removeBeforeToolStripMenuItem.Enabled = false; + removeAfterToolStripMenuItem.Enabled = false; + return; + } + int step = before ? -1 : 1; + var sel = miniList.SelectedItems[0].ImageKey; + int code = Convert.ToInt32(sel); + int findex; + + while (miniList.Items.ContainsKey((code + step).ToString().PadLeft(3, '0'))) { + code += step; + findex = frames.FindIndex(x => x.code == code); + frames.RemoveAt(findex); + miniList.Items.RemoveByKey(code.ToString().PadLeft(3, '0')); + } + //dotPanel.Refresh(); + miniList.Refresh(); + prjModified = true; + } + + private void removeBeforeToolStripMenuItem_Click(object sender, EventArgs e) { + removeBA(true); + } + + private void removeAfterToolStripMenuItem_Click(object sender, EventArgs e) { + removeBA(false); + } } } diff --git a/McBitFont/McBitFont.csproj b/McBitFont/McBitFont.csproj index 9ea1967..be1b34e 100644 --- a/McBitFont/McBitFont.csproj +++ b/McBitFont/McBitFont.csproj @@ -20,6 +20,8 @@ true true icon_64.ico + 2.0.0.0 + 2.0.0.0 diff --git a/TODO.txt b/TODO.txt index 9044326..b52b3f5 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,8 +1,9 @@ Application: +V Migrate from .Net Framework 4.7 to .NET 9 Functionality: - Context menu in symbol navigator -- Delete symbols before/after selected +V Delete symbols before/after selected - Shift all symbols on code line (change symbol codes) - Specify starting code (extends the shift) - Ability to make monospaced font a variable width one