1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- using System;
- using System.Windows.Forms;
- using FastReport.Utils;
- namespace FastReport.Controls
- {
- internal class FlagsControl : CheckedListBox
- {
- private Type enumType;
- private bool allowMultipleFlags;
- public Enum Flags
- {
- get
- {
- string s = "";
- foreach (object o in CheckedItems)
- {
- s += (string)o + ", ";
- }
- if (s != "")
- {
- s = s.Remove(s.Length - 2);
- return (Enum)Enum.Parse(enumType, s);
- }
- return (Enum)Enum.ToObject(enumType, 0);
- }
- set
- {
- enumType = value.GetType();
- string[] names = Enum.GetNames(enumType);
- Array values = Enum.GetValues(enumType);
- int enumValue = (int)Enum.ToObject(enumType, value);
- float maxWidth = 0;
- for (int i = 0; i < names.Length; i++)
- {
- int val = (int)values.GetValue(i);
- if (val != 0 && (val & 3) != 3)
- {
- Items.Add(names[i]);
- SetItemChecked(Items.Count - 1, (enumValue & val) != 0);
- float itemWidth = DrawUtils.MeasureString(names[i]).Width;
- if (itemWidth > maxWidth)
- maxWidth = itemWidth;
- }
- }
- Width = (int)maxWidth + this.LogicalToDevice(20);
- Height = Items.Count * ItemHeight + this.LogicalToDevice(4);
- }
- }
- internal bool AllowMultipleFlags
- {
- get { return allowMultipleFlags; }
- set { allowMultipleFlags = value; }
- }
- protected override void OnItemCheck(ItemCheckEventArgs ice)
- {
- base.OnItemCheck(ice);
- if (!allowMultipleFlags && ice.NewValue == CheckState.Checked)
- {
- foreach (int i in CheckedIndices)
- SetItemChecked(i, false);
- }
- }
- public FlagsControl()
- {
- BorderStyle = BorderStyle.None;
- CheckOnClick = true;
- allowMultipleFlags = true;
- }
- }
- }
|