增加 代码队列显示逻辑

This commit is contained in:
jie65535 2021-01-18 00:12:57 +08:00
parent d4d5f586f1
commit c985adacc5
3 changed files with 66 additions and 28 deletions

View File

@ -20,6 +20,10 @@ namespace CodeMatrix
var codeMatrix = new UCCodeMatrix();
var codeQueue = new UCCodeQueue();
codeMatrix.HoverValueChangedEvent += (_, value) => codeQueue.HoverCode = value;
codeMatrix.CodeSelectedEvent += (_, value) => codeQueue.InputCode(value);
codeQueue.Location = new Point(codeMatrix.Size.Width, 0);
Controls.Add(codeMatrix);
Controls.Add(codeQueue);

View File

@ -15,8 +15,22 @@ namespace CodeMatrix
public byte[,] Matrix { get; set; }
public Point SelectPoint { get; private set; }
public Point CursorPoint { get; private set; }
public Point HoverPoint { get; private set; }
private Point _HoverPoint;
public Point HoverPoint
{
get => _HoverPoint;
set
{
_HoverPoint = value;
if (HoverPoint.X >= 0)
HoverValueChangedEvent?.Invoke(this, Matrix[HoverPoint.X, HoverPoint.Y]);
else
HoverValueChangedEvent?.Invoke(this, 0);
}
}
public RectangleF CodeMatrixRect { get; private set; }
public event EventHandler<byte> HoverValueChangedEvent;
public event EventHandler<byte> CodeSelectedEvent;
/// <summary>
/// 方向
@ -179,7 +193,6 @@ namespace CodeMatrix
HoverPoint = hoverPoint;
Invalidate();
}
}
}
else
@ -199,11 +212,11 @@ namespace CodeMatrix
{
SelectPoint = HoverPoint;
HoverPoint = new Point(-1, -1);
Matrix[SelectPoint.X, SelectPoint.Y] = 0;
_currDir = _currDir == Directions.Horizontal ? Directions.Vertical : Directions.Horizontal;
CodeSelectedEvent?.Invoke(this, Matrix[SelectPoint.X, SelectPoint.Y]);
Matrix[SelectPoint.X, SelectPoint.Y] = 0;
Invalidate();
}
base.OnMouseClick(e);
}
}

View File

@ -12,7 +12,16 @@ namespace CodeMatrix
{
public Size CellSize { get; private set; }
public Padding CellMargin { get; set; }
public byte HoverCode { get; set; }
private byte _HoverCode;
public byte HoverCode
{
get => _HoverCode;
set
{
_HoverCode = value;
Invalidate();
}
}
public int BufferSize { get; set; }
public int CurrIndex { get; private set; }
public byte[] Buffer { get; } = new byte[32];
@ -28,12 +37,8 @@ namespace CodeMatrix
CellSize = new Size(25, 25);
BufferSize = 7;
CurrIndex = 4;
HoverCode = 0x55;
Buffer[0] = 0xE9;
Buffer[1] = 0x55;
Buffer[2] = 0x1C;
Buffer[3] = 0xBD;
CurrIndex = 0;
HoverCode = 0;
}
private void InitComponent()
@ -57,34 +62,35 @@ namespace CodeMatrix
CellSize.Width-1,
CellSize.Height-1);
var cellOffsetWidth = CellSize.Width + CellMargin.Horizontal;
int index = 0;
for (; index < CurrIndex; index++)
for (int i = 0; i < CurrIndex && i < BufferSize; i++)
{
e.Graphics.DrawRectangle(Styles.Default.SelectedCellBorderPen, cellOffset);
var code = Buffer[index].ToString("X2");
var code = Buffer[i].ToString("X2");
var codeSize = e.Graphics.MeasureString(code, Font);
var codeOffset = new PointF((CellSize.Width-codeSize.Width)/2, (CellSize.Height-codeSize.Height)/2);
var codePoint = new PointF(codeOffset.X+cellOffset.X, codeOffset.Y+cellOffset.Y);
e.Graphics.DrawString(code, Font, Styles.Default.CodeBrush, codePoint);
cellOffset.X += cellOffsetWidth;
}
if (HoverCode > 0)
if (CurrIndex < BufferSize)
{
e.Graphics.DrawRectangle(Styles.Default.SelectCellBorderPen, cellOffset);
var code = HoverCode.ToString("X2");
var codeSize = e.Graphics.MeasureString(code, Font);
var codeOffset = new PointF((CellSize.Width-codeSize.Width)/2, (CellSize.Height-codeSize.Height)/2);
var codePoint = new PointF(codeOffset.X+cellOffset.X, codeOffset.Y+cellOffset.Y);
e.Graphics.DrawString(code, Font, Styles.Default.SelectBrush, codePoint);
cellOffset.X += cellOffsetWidth;
index++;
}
for (; index < BufferSize; index++)
{
e.Graphics.DrawRectangle(Styles.Default.EmptyCellBorderPen, cellOffset);
if (HoverCode > 0)
{
var code = HoverCode.ToString("X2");
var codeSize = e.Graphics.MeasureString(code, Font);
var codeOffset = new PointF((CellSize.Width-codeSize.Width)/2, (CellSize.Height-codeSize.Height)/2);
var codePoint = new PointF(codeOffset.X+cellOffset.X, codeOffset.Y+cellOffset.Y);
e.Graphics.DrawString(code, Font, Styles.Default.SelectBrush, codePoint);
}
cellOffset.X += cellOffsetWidth;
for (int i = CurrIndex+1; i < BufferSize; i++)
{
e.Graphics.DrawRectangle(Styles.Default.EmptyCellBorderPen, cellOffset);
cellOffset.X += cellOffsetWidth;
}
}
@ -92,5 +98,20 @@ namespace CodeMatrix
base.OnPaint(e);
}
public void InputCode(byte code)
{
if (CurrIndex < BufferSize)
{
Buffer[CurrIndex++] = code;
HoverCode = 0;
}
}
public void ClearBuffer()
{
CurrIndex = 0;
HoverCode = 0;
}
}
}