annotate Demo/WinForms/Controls/EnumSelector.cs @ 3:1ef98bd70424

!bug 100 +3h Исправление проблемы BLToolkit + mono 3.4
author cin
date Fri, 22 Aug 2014 17:34:46 +0400
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Collections;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.ComponentModel;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Windows.Forms;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using System.Drawing.Design;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.ComponentModel;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using System.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 namespace BLToolkit.Demo.Controls
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 public partial class EnumSelector : GroupBox
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public EnumSelector()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 InitializeComponent();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 public EnumSelector(IContainer container)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 container.Add(this);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 InitializeComponent();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 [RefreshProperties(RefreshProperties.Repaint)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 [Category("Data")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 [Bindable(true)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 public object Value
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 get
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 foreach (RadioButton r in _controls.Keys)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 if (r.Checked)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 return Enum.Parse(_valueType, (string)_controls[r]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 return -1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 set
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 if (value != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 string s = value.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 foreach (DictionaryEntry de in _controls)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 RadioButton r = (RadioButton)de.Key;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 if (r.Checked != (de.Value.ToString() == s))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 r.Checked = !r.Checked;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 const FieldAttributes EnumField = FieldAttributes.Public | FieldAttributes.Static | FieldAttributes.Literal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 private Hashtable _controls = new Hashtable();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 private Type _valueType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 [RefreshProperties(RefreshProperties.Repaint)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 [DefaultValue(null)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 [Category("Data")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 [TypeConverter(typeof(TypeTypeConverter))]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 [Editor(typeof(EnumEditor), typeof(UITypeEditor))]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 public Type ValueType
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 get { return _valueType; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 set
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 _valueType = value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 foreach (Control c in _controls.Keys)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 Controls.Remove(c);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 FieldInfo[] fields = _valueType.GetFields();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 foreach (FieldInfo fi in fields)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 if ((fi.Attributes & EnumField) == EnumField)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 RadioButton r = new RadioButton();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 Controls.Add(r);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 _controls.Add(r, fi.Name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 r.Text = fi.Name;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 r.Name = fi.Name + "RadioButton";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 r.TabIndex = _controls.Count;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 r.AutoSize = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 r.Location = new System.Drawing.Point(10, 23 * _controls.Count - 4);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 r.UseVisualStyleBackColor = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 class EnumEditor : ComponentModel.Design.TypeEditor
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 protected override bool FilterTypeList(Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 return type.IsPublic && type.IsEnum;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 }