UInt32 bitFieldExcludeMask;
Type enumType;
bool enumTypeIsBitsfield, forceRadioButton;
- string rbStyle, iconsPrefix, iconsExtension;
+ string itemStyle, iconsPrefix, iconsExtension;
#endregion
#region public properties
}
}
/// <summary>
- /// Enum values are presented with RadioButton controls. Here you may specify a template to use
+ /// Enum values are presented with RadioButton or CheckBox controls. Here you may specify a template to use
/// for the radio buttons.
/// </summary>
- [DefaultValue (null)]
+ [DefaultValue (null)][Obsolete("Use ItemStyle instead")]
public string RadioButtonStyle {
- get => rbStyle;
+ get => itemStyle;
set {
- if (rbStyle == value)
+ if (itemStyle == value)
return;
- rbStyle = value;
+ itemStyle = value;
forceRefresh ();
- NotifyValueChangedAuto (rbStyle);
+ NotifyValueChangedAuto (itemStyle);
+ }
+ }
+ /// <summary>
+ /// Enum values are presented with RadioButton or CheckBox controls. Here you may specify a template to use
+ /// for the radio buttons.
+ /// </summary>
+ [DefaultValue (null)]
+ public string ItemStyle {
+ get => itemStyle;
+ set {
+ if (itemStyle == value)
+ return;
+ itemStyle = value;
+ forceRefresh ();
+ NotifyValueChangedAuto (itemStyle);
}
}
/// <summary>
}
}
/// <summary>
- /// use to define the colors of the 3d border
+ /// Current Selected Value(s).
/// </summary>
[DefaultValue(null)]
public virtual Enum EnumValue {
if (enumValue == value)
return;
- enumValue = value;
+ enumValue = value;
if (enumValue != null) {
if (enumType != enumValue.GetType ()) {
enumValueContainer.ClearChildren ();
- enumType = enumValue.GetType ();
-
+ enumType = enumValue.GetType ();
+
enumTypeIsBitsfield = enumType.CustomAttributes.Any (ca => ca.AttributeType == typeof(FlagsAttribute));
- if (enumTypeIsBitsfield) {
- IML.Instantiator iTor = IFace.CreateITorFromIMLFragment ($"<CheckBox Style='{rbStyle}'/>");
- UInt32 currentValue = Convert.ToUInt32 (EnumValue);
+ if (enumTypeIsBitsfield && !forceRadioButton) {
+ IML.Instantiator iTor = IFace.CreateITorFromIMLFragment ($"<CheckBox Style='{itemStyle}'/>");
+ UInt32 currentValue = Convert.ToUInt32 (EnumValue);
currentValue &= ~bitFieldExcludeMask;
enumValue = (Enum)Enum.ToObject(enumType, currentValue);
CheckBox rb = iTor.CreateInstance<CheckBox> ();
rb.Caption = en.ToString();
rb.LogicalParent = this;
- rb.Tag = $"{iconsPrefix}{en}{IconsExtension}";
+ rb.Tag = $"{iconsPrefix}{en}{IconsExtension}";
rb.Tooltip = $"0x{eni:x8}";
if (eni == 0) {
rb.IsChecked = currentValue == 0;
rb.Checked += (sender, e) => EnumValue = (Enum)Enum.ToObject(enumType, 0);
- } else {
+ } else {
rb.IsChecked = currentValue == 0 ? false : EnumValue.HasFlag (en);
rb.Checked += onChecked;
rb.Unchecked += onUnchecked;
}
/*rb.Checked += (sender, e) => (((CheckBox)sender).LogicalParent as EnumSelector).EnumValue = (Enum)(object)
- (Convert.ToUInt32 ((((CheckBox)sender).LogicalParent as EnumSelector).EnumValue) | Convert.ToUInt32 (en));
+ (Convert.ToUInt32 ((((CheckBox)sender).LogicalParent as EnumSelector).EnumValue) | Convert.ToUInt32 (en));
rb.Unchecked += (sender, e) => (((CheckBox)sender).LogicalParent as EnumSelector).EnumValue = (Enum)(object)
(Convert.ToUInt32 ((((CheckBox)sender).LogicalParent as EnumSelector).EnumValue) & ~Convert.ToUInt32 (en)); */
}
} else {
- IML.Instantiator iTor = IFace.CreateITorFromIMLFragment ($"<RadioButton Style='{rbStyle}'/>");
+ IML.Instantiator iTor = IFace.CreateITorFromIMLFragment ($"<RadioButton Style='{itemStyle}'/>");
foreach (var en in enumType.GetEnumValues ()) {
+ if (enumTypeIsBitsfield) {
+ UInt32 eni = Convert.ToUInt32 (en);
+ if ((eni & bitFieldExcludeMask) != 0)
+ continue;
+ }
RadioButton rb = iTor.CreateInstance<RadioButton> ();
rb.Caption = en.ToString();
rb.LogicalParent = this;
rb.Tag = $"{iconsPrefix}{en}{IconsExtension}";
- if (enumValue == en)
- rb.IsChecked = true;
+ if (enumValue.Equals (en))
+ rb.IsChecked = true;
rb.Checked += (sender, e) => (((RadioButton)sender).LogicalParent as EnumSelector).EnumValue = (Enum)en;
enumValueContainer.AddChild (rb);
}
}
-
- } else if (enumTypeIsBitsfield) {
- UInt32 currentValue = Convert.ToUInt32 (EnumValue);
+
+ } else if (enumTypeIsBitsfield && !forceRadioButton) {
+ UInt32 currentValue = Convert.ToUInt32 (EnumValue);
currentValue &= ~bitFieldExcludeMask;
enumValue = (Enum)Enum.ToObject(enumType, currentValue);
forceRefresh();
}
}
- void onChecked (object sender, EventArgs e) {
+ void onChecked (object sender, EventArgs e) {
Enum en =(Enum)Enum.Parse (enumType, (sender as CheckBox).Caption);
UInt32 newVal = Convert.ToUInt32 (en);
if (newVal == 0)
- EnumValue = (Enum)Enum.ToObject(enumType, 0);
+ EnumValue = (Enum)Enum.ToObject(enumType, 0);
else
- EnumValue = (Enum)Enum.ToObject(enumType, newVal | Convert.ToUInt32 (EnumValue));
+ EnumValue = (Enum)Enum.ToObject(enumType, newVal | Convert.ToUInt32 (EnumValue));
}
- void onUnchecked (object sender, EventArgs e) {
+ void onUnchecked (object sender, EventArgs e) {
Enum en =(Enum)Enum.Parse (enumType, (sender as CheckBox).Caption);
- EnumValue = (Enum)Enum.ToObject(enumType, Convert.ToUInt32 (EnumValue) & ~Convert.ToUInt32 (en));
+ EnumValue = (Enum)Enum.ToObject(enumType, Convert.ToUInt32 (EnumValue) & ~Convert.ToUInt32 (en));
}
//force refresh to use new template if values are already displayed
string _icon;
bool resizable;
bool movable;
- bool modal;
+ bool modal;
bool alwaysOnTop = false;
Rectangle savedBounds;
bool wasResizable;
-
+
Status currentState, allowedStates;
protected Direction currentDirection = Direction.None;
get => allowedStates;
set {
if (allowedStates == value)
- return;
+ return;
allowedStates = value;
NotifyValueChangedAuto (allowedStates);
[DefaultValue("Normal")]
public Status CurrentState {
get => currentState;
- set {
+ set {
Status newState = value;
if (!allowedStates.HasFlag (newState)) {
if (allowedStates.HasFlag (Status.Normal))
if (currentState == Status.Normal) {
savedBounds = LastPaintedSlot;
wasResizable = Resizable;
- }
+ }
currentState = value;
NotifyValueChangedAuto (currentState);
case Status.Minimized:
Width = 200;
Height = 20;
- Resizable = false;
+ Resizable = false;
CMDNormalize.CanExecute = allowedStates.HasFlag (Status.Normal);
CMDMinimize.CanExecute = false;
CMDMaximize.CanExecute = allowedStates.HasFlag (Status.Maximized);
}
/*public Command CMDMinimize = new Command ("Minimize", (sender) =>
{(sender as Window).CurrentState = Status.Minimized;}, "#Crow.Icons.minimize.svg", false);
- public Command CMDMaximize = new Command ("Maximize", (sender) =>
+ public Command CMDMaximize = new Command ("Maximize", (sender) =>
{(sender as Window).CurrentState = Status.Maximized;}, "#Crow.Icons.maximize.svg", false);
- public Command CMDNormalize = new Command ("Normalize", (sender) =>
+ public Command CMDNormalize = new Command ("Normalize", (sender) =>
{(sender as Window).CurrentState = Status.Normal;}, "#Crow.Icons.normalize.svg", false);
- public Command CMDClose = new Command ("Close", (sender) =>
+ public Command CMDClose = new Command ("Close", (sender) =>
{(sender as Window).close ();}, "#Crow.Icons.exit2.svg", true);*/
sizingHandle.MouseDown += setResizeOn;
sizingHandle.MouseUp += setResizeOff;
}
-
- if (moveHandle != null) {
- moveHandle.MouseDown += setMoveOn;
+
+ if (moveHandle != null) {
+ moveHandle.MouseDown += setMoveOn;
moveHandle.MouseUp += setMoveOff;
}
}
sizingHandle.MouseDown -= setResizeOn;
sizingHandle.MouseUp -= setResizeOff;
}
-
- if (moveHandle != null) {
- moveHandle.MouseDown -= setMoveOn;
+
+ if (moveHandle != null) {
+ moveHandle.MouseDown -= setMoveOn;
moveHandle.MouseUp -= setMoveOff;
}
moveHandle = null;
_icon = value;
NotifyValueChangedAuto (_icon);
}
- }
+ }
[DefaultValue(true)]
public bool Resizable {
get => resizable;
}
[DefaultValue(false)]
public bool Modal {
- get => modal;
+ get => modal;
set {
if (modal == value)
return;
}
[DefaultValue(false)]
public bool AlwaysOnTop {
- get => modal ? true : alwaysOnTop;
+ get => modal ? true : alwaysOnTop;
set {
if (alwaysOnTop == value)
return;
-
+
alwaysOnTop = value;
if (AlwaysOnTop && Parent != null)
currentHeight = this.Slot.Height;
if (move) {
- this.Left = currentLeft + XDelta;
+ this.Left = currentLeft + XDelta;
this.Top = currentTop + YDelta;
return;
}
this.Height = currentHeight + YDelta;
this.Width = currentWidth + XDelta;
break;
- }
+ }
//}
}
protected void onMinimized (){
lock (IFace.LayoutMutex) {
if (IsNormal)
-
+
}
Minimize.Raise (this, null);