TODO feature: Delete symbols before/after selected

This commit is contained in:
Anton Mukhin
2025-05-20 14:05:42 +03:00
parent bbfccc2308
commit ca42d3819f
4 changed files with 99 additions and 31 deletions

View File

@@ -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;
}
}

View File

@@ -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<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];
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<dotWidth; i++) {
for (int i = 0; i < dotWidth; i++) {
x = pixelOffset + i * (cellSize + gap) - hScroll.Value;
if (gap > 0 && i != 0 && (i % 8) == 0) {
g.DrawLine(p, x - 1, pixelOffset - vScroll.Value, x - 1, h);
}
for (int j=0; j<dotHeight; j++) {
for (int j = 0; j < dotHeight; j++) {
y = pixelOffset + j * (cellSize + gap) - vScroll.Value;
if (gap > 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);
}
}
}

View File

@@ -20,6 +20,8 @@
<UseWindowsForms>true</UseWindowsForms>
<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
<ApplicationIcon>icon_64.ico</ApplicationIcon>
<AssemblyVersion>2.0.0.0</AssemblyVersion>
<FileVersion>2.0.0.0</FileVersion>
</PropertyGroup>
<ItemGroup>
<Content Include="icon.ico" />

View File

@@ -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