DotNet 4.8.1 build of DotNetBar
This commit is contained in:
@@ -0,0 +1,210 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing.Design;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Windows.Forms.Design;
|
||||
|
||||
namespace DevComponents.Charts.Design
|
||||
{
|
||||
#region FlagsEnumUIEditor
|
||||
|
||||
public class FlagsEnumUIEditor : UITypeEditor
|
||||
{
|
||||
private FlagsCheckedListBox _FlagCb;
|
||||
|
||||
public FlagsEnumUIEditor()
|
||||
{
|
||||
_FlagCb = new FlagsCheckedListBox();
|
||||
}
|
||||
|
||||
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
|
||||
{
|
||||
return (UITypeEditorEditStyle.DropDown);
|
||||
}
|
||||
|
||||
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
|
||||
{
|
||||
if (context != null && context.Instance != null && provider != null)
|
||||
{
|
||||
IWindowsFormsEditorService edSvc =
|
||||
(IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
|
||||
|
||||
if (edSvc != null)
|
||||
{
|
||||
Enum e = (Enum)Convert.ChangeType(value, context.PropertyDescriptor.PropertyType);
|
||||
|
||||
_FlagCb.Value = e;
|
||||
edSvc.DropDownControl(_FlagCb);
|
||||
|
||||
return (_FlagCb.Value);
|
||||
}
|
||||
}
|
||||
|
||||
return (base.EditValue(provider, value));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public class FlagsCheckedListBox : CheckedListBox
|
||||
{
|
||||
private Type _Type;
|
||||
private Enum _Value;
|
||||
private bool _UpdatingStates;
|
||||
|
||||
public FlagsCheckedListBox()
|
||||
{
|
||||
CheckOnClick = true;
|
||||
BorderStyle = BorderStyle.None;
|
||||
}
|
||||
|
||||
#region Public properties
|
||||
|
||||
#region Value
|
||||
|
||||
public Enum Value
|
||||
{
|
||||
get
|
||||
{
|
||||
return (_Value);
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_Value = value;
|
||||
_Type = value.GetType();
|
||||
|
||||
InitializeCheckedListBox();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
#region InitializeCheckedListBox
|
||||
|
||||
private void InitializeCheckedListBox()
|
||||
{
|
||||
Items.Clear();
|
||||
|
||||
foreach (string name in Enum.GetNames(_Type))
|
||||
{
|
||||
object o = Enum.Parse(_Type, name);
|
||||
uint value = (uint)Convert.ChangeType(o, typeof(uint));
|
||||
|
||||
FlagsCheckedListBoxItem item = new FlagsCheckedListBoxItem(value, name);
|
||||
|
||||
Items.Add(item);
|
||||
}
|
||||
|
||||
SetCheckedItems();
|
||||
}
|
||||
|
||||
#region OnItemCheck
|
||||
|
||||
protected override void OnItemCheck(ItemCheckEventArgs e)
|
||||
{
|
||||
base.OnItemCheck(e);
|
||||
|
||||
if (_UpdatingStates == false)
|
||||
{
|
||||
FlagsCheckedListBoxItem item = Items[e.Index] as FlagsCheckedListBoxItem;
|
||||
|
||||
uint sum;
|
||||
|
||||
if (e.NewValue == CheckState.Checked &&
|
||||
(item.Value == 0 || item.Text.Equals("None")))
|
||||
{
|
||||
sum = item.Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
sum = CalculateCheckedSum();
|
||||
|
||||
if (e.NewValue == CheckState.Checked)
|
||||
sum += item.Value;
|
||||
else
|
||||
sum -= item.Value;
|
||||
}
|
||||
|
||||
_Value = (Enum)(Enum.ToObject(_Type, sum));
|
||||
|
||||
SetCheckedItems();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region SetCheckedItems
|
||||
|
||||
private void SetCheckedItems()
|
||||
{
|
||||
_UpdatingStates = true;
|
||||
|
||||
int value = (int)Convert.ChangeType(_Value, typeof(int));
|
||||
|
||||
for (int i = 0; i < Items.Count; i++)
|
||||
{
|
||||
FlagsCheckedListBoxItem item = Items[i] as FlagsCheckedListBoxItem;
|
||||
|
||||
if (item.Value == 0)
|
||||
SetItemChecked(i, value == 0);
|
||||
|
||||
else if (item.Text.Equals("None"))
|
||||
SetItemChecked(i, value == item.Value);
|
||||
|
||||
else
|
||||
SetItemChecked(i, ((item.Value & value) == item.Value));
|
||||
}
|
||||
|
||||
_UpdatingStates = false;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
#region CalculateCheckedSum
|
||||
|
||||
private uint CalculateCheckedSum()
|
||||
{
|
||||
uint sum = 0;
|
||||
|
||||
for (int i = 0; i < Items.Count; i++)
|
||||
{
|
||||
FlagsCheckedListBoxItem item = Items[i] as FlagsCheckedListBoxItem;
|
||||
|
||||
if (GetItemChecked(i))
|
||||
sum |= item.Value;
|
||||
}
|
||||
|
||||
return (sum);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
#region FlagsCheckedListBoxItem
|
||||
|
||||
public class FlagsCheckedListBoxItem
|
||||
{
|
||||
public uint Value;
|
||||
public string Text;
|
||||
|
||||
public FlagsCheckedListBoxItem(uint value, string text)
|
||||
{
|
||||
Value = value;
|
||||
Text = text;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return (Text);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
Reference in New Issue
Block a user