110 lines
2.8 KiB
C#
110 lines
2.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
|
|
namespace UIControl
|
|
{
|
|
[TypeConverterAttribute(typeof(ExpandableObjectConverter))]
|
|
public class PinInfo
|
|
{
|
|
public int PinIndex { get; set; }
|
|
public Boolean PinLevel { get; set; }
|
|
public Boolean Output { get; set; }
|
|
public eValueDirection ValueDirection { get; set; }
|
|
public Boolean Value
|
|
{
|
|
get
|
|
{
|
|
if (PinLevel == false) return !Raw;
|
|
else return Raw;
|
|
}
|
|
}
|
|
|
|
private Boolean _raw = false;
|
|
public Boolean Raw
|
|
{
|
|
get { return _raw; }
|
|
set
|
|
{
|
|
Boolean changed = _raw != value;
|
|
_raw = value;
|
|
if (changed && ValueChanged != null)
|
|
{
|
|
ValueChanged(this, new EventArgs());
|
|
}
|
|
}
|
|
}
|
|
public PinInfo(Boolean isOutput = false)
|
|
{
|
|
_raw = false;
|
|
PinIndex = -1;
|
|
PinLevel = true;
|
|
Output = isOutput;
|
|
ValueDirection = eValueDirection.input;
|
|
}
|
|
|
|
public event EventHandler ValueChanged;
|
|
}
|
|
|
|
|
|
public enum eValueDirection
|
|
{
|
|
input = 0,
|
|
output,
|
|
}
|
|
public abstract partial class CtlBase : Control
|
|
{
|
|
Boolean bRemakeRect ;
|
|
|
|
|
|
public List<PinInfo> PinList;
|
|
public CtlBase()
|
|
{
|
|
InitializeComponent();
|
|
|
|
// Set Optimized Double Buffer to reduce flickering
|
|
this.SetStyle(ControlStyles.UserPaint, true);
|
|
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
|
|
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
|
|
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
|
|
this.SetStyle(ControlStyles.ContainerControl, false);
|
|
this.SetStyle(ControlStyles.Selectable, true);
|
|
PinList = new List<PinInfo>();
|
|
bRemakeRect = true;
|
|
this.Resize += Loader_Resize;
|
|
}
|
|
|
|
public abstract void MakeRect();
|
|
public abstract void UpdateValue();
|
|
protected void SetPinCount(int iCnt)
|
|
{
|
|
this.PinList = new List<PinInfo>(iCnt);
|
|
|
|
for (int i = 0; i < iCnt; i++)
|
|
PinList.Add(new PinInfo());
|
|
|
|
}
|
|
|
|
void Loader_Resize(object sender, EventArgs e)
|
|
{
|
|
bRemakeRect = true;
|
|
}
|
|
|
|
protected override void OnPaint(PaintEventArgs pe)
|
|
{
|
|
if (bRemakeRect)
|
|
{
|
|
MakeRect();
|
|
bRemakeRect = false;
|
|
}
|
|
|
|
base.OnPaint(pe);
|
|
}
|
|
}
|
|
}
|