Changeset 15117 for stable/HeuristicLab.Data.Views/3.3/EnumValueView.cs
- Timestamp:
- 07/03/17 23:04:37 (7 years ago)
- Location:
- stable
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
stable
- Property svn:mergeinfo changed
/trunk/sources merged: 14597,15009-15010
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Data.Views
- Property svn:mergeinfo changed
/trunk/sources/HeuristicLab.Data.Views merged: 14597,15009-15010
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Data.Views/3.3
- Property svn:mergeinfo changed
/trunk/sources/HeuristicLab.Data.Views/3.3 merged: 14597,15009-15010
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Data.Views/3.3/EnumValueView.cs
r14186 r15117 21 21 22 22 using System; 23 using System.Windows.Forms; 23 24 using HeuristicLab.Core.Views; 24 25 using HeuristicLab.MainForm; … … 42 43 } 43 44 45 static EnumValueView() { 46 if (!typeof(T).IsEnum) 47 throw new InvalidOperationException("Generic type " + typeof(T).Name + " is not an enum."); 48 } 49 44 50 public EnumValueView() { 45 51 InitializeComponent(); 52 this.Caption = typeof(T).Name + " View"; 53 46 54 valueComboBox.DataSource = Enum.GetValues(typeof(T)); 47 this.Name = typeof(T).Name + "EnumView"; 55 foreach (T flag in Enum.GetValues(typeof(T))) 56 flagsListView.Items.Add(new ListViewItem(flag.ToString()) { Tag = flag }); 57 columnHeader.Width = -1; 58 59 bool isFlags = Attribute.IsDefined(typeof(T), typeof(FlagsAttribute)); 60 if (isFlags) valueLabel.Text = "Flags:"; 61 valueComboBox.Visible = !isFlags; 62 flagsListView.Visible = isFlags; 48 63 } 49 64 public EnumValueView(EnumValue<T> content) … … 64 79 protected override void OnContentChanged() { 65 80 base.OnContentChanged(); 66 if (Content == null) 67 valueComboBox.Enabled = false; 68 else 81 if (Content == null) { 82 valueComboBox.SelectedIndex = -1; 83 foreach (ListViewItem item in flagsListView.Items) 84 item.Checked = false; 85 } else { 69 86 valueComboBox.SelectedItem = Content.Value; 87 foreach (ListViewItem item in flagsListView.Items) { 88 var flag = (Enum)item.Tag; 89 item.Checked = ((Enum)(object)Content.Value).HasFlag(flag); 90 } 91 } 70 92 } 71 93 72 94 protected override void SetEnabledStateOfControls() { 73 95 base.SetEnabledStateOfControls(); 74 if (Content == null) valueComboBox.Enabled = false; 75 else valueComboBox.Enabled = !ReadOnly; 96 if (Content == null) { 97 valueComboBox.Enabled = false; 98 flagsListView.Enabled = false; 99 } else { 100 valueComboBox.Enabled = !ReadOnly; 101 flagsListView.Enabled = !ReadOnly; 102 } 76 103 } 77 104 … … 79 106 if (InvokeRequired) 80 107 Invoke(new EventHandler(Content_ValueChanged), sender, e); 81 else 108 else { 82 109 valueComboBox.SelectedItem = Content.Value; 110 foreach (ListViewItem item in flagsListView.Items) { 111 var flag = (Enum)item.Tag; 112 item.Checked = ((Enum)(object)Content.Value).HasFlag(flag); 113 } 114 } 83 115 } 84 116 … … 87 119 Content.Value = (T)valueComboBox.SelectedItem; 88 120 } 121 122 private void flagsListView_ItemChecked(object sender, ItemCheckedEventArgs e) { 123 var flag = (T)e.Item.Tag; 124 if ((Content != null) && !Content.ReadOnly) 125 Content.Value = ((Enum)(object)Content.Value).SetFlag(flag, e.Item.Checked); 126 } 127 } 128 129 internal static class EnumHelper { 130 //https://stackoverflow.com/a/21581418 131 public static T SetFlag<T>(this Enum value, T flag, bool set) { 132 var baseType = Enum.GetUnderlyingType(value.GetType()); 133 dynamic valueAsBase = Convert.ChangeType(value, baseType); 134 dynamic flagAsBase = Convert.ChangeType(flag, baseType); 135 if (set) 136 valueAsBase |= flagAsBase; 137 else 138 valueAsBase &= ~flagAsBase; 139 return (T)valueAsBase; 140 } 89 141 } 90 142 }
Note: See TracChangeset
for help on using the changeset viewer.