annotate Source/ComponentModel/Design/TypePicker.cs @ 4:f757da6161a1

!bug 100 + 2h fixed gregression
author cin
date Sun, 24 Aug 2014 17:57:42 +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.ComponentModel;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.ComponentModel.Design;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.ComponentModel.Design.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using System.Drawing;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using System.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using System.Windows.Forms;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using System.Windows.Forms.Design;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 namespace BLToolkit.ComponentModel.Design
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 [DesignTimeVisible(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 [ToolboxItem(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public partial class TypePicker : UserControl
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public TypePicker()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 InitializeComponent();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 if (!_size.IsEmpty)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 Size = _size;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 ITypeResolutionService _typeResolutionService;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 IWindowsFormsEditorService _windowsFormsEditorService;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 IServiceProvider _serviceProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 Type _resultType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 Predicate<Type> _filter;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 static Size _size;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 private T GetService<T>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 return (T)_serviceProvider.GetService(typeof(T));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 public Type PickType(IServiceProvider serviceProvider, Type type, Predicate<Type> filter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 _resultType = type;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 _filter = filter;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 _serviceProvider = serviceProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 _typeResolutionService = GetService<ITypeResolutionService>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 _windowsFormsEditorService = GetService<IWindowsFormsEditorService>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 InitUI ();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 AddTypes();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 if (_windowsFormsEditorService != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 _windowsFormsEditorService.DropDownControl(this);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 return _resultType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 private void InitUI()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 IUIService uiService = GetService<IUIService>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 if (uiService != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 object color = uiService.Styles["VsColorPanelHyperLink"];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 if (color is Color)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 addNewLinkLabel.LinkColor = (Color)color;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 color = uiService.Styles["VsColorPanelHyperLinkPressed"];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 if (color is Color)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 addNewLinkLabel.ActiveLinkColor = (Color)color;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 // Add None node.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 TreeNode node = new TypeNode("None");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 treeView.Nodes.Add(node);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 treeView.SelectedNode = node;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 private TypeNode GetTypeNode(DataSourceDescriptor ds)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 Type type = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 if (_typeResolutionService != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 type = _typeResolutionService.GetType(ds.TypeName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 if (type == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 type = Type.GetType(ds.TypeName, true);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 catch
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 if (_filter != null && _filter(type) == false)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 return new TypeNode(ds.Name, type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 private void AddGroup(DataSourceGroup group)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 TreeNode groupNode = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 foreach (DataSourceDescriptor d in group.DataSources)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 if (d == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 TypeNode node = GetTypeNode(d);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 if (node == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 if (group.IsDefault)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 treeView.Nodes.Add(node);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 if (groupNode == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 treeView.Nodes.Add(groupNode = new TreeNode(group.Name, 2, 2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 groupNode.Nodes.Add(node);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 if (_resultType == node.Type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 treeView.SelectedNode = node;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 private void AddTypes()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 DataSourceProviderService dspService = GetService<DataSourceProviderService>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 if (dspService == null || !dspService.SupportsAddNewDataSource)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 return;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 DataSourceGroupCollection dataSources = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 dataSources = dspService.GetDataSources();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 catch (Exception ex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 IUIService ui = GetService<IUIService>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 string message =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 "Cant retrieve Data Source Collection: " + ex.Message +
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 "\nCheck the 'Properties\\DataSources' folder of your project.";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 if (ui != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 ui.ShowError(ex, message);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 MessageBox.Show(this, message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 if (dataSources == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 return;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 foreach (DataSourceGroup group in dataSources)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 if (group != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 AddGroup(group);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 private void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 if (e.Node is TypeNode)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 _resultType = ((TypeNode)e.Node).Type;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 _windowsFormsEditorService.CloseDropDown();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 private void addNewLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 using (GetTypeDialog dlg = new GetTypeDialog(_serviceProvider, typeof (object), _filter))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 IUIService uiService = GetService<IUIService>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 IWin32Window owner = uiService == null? null: uiService.GetDialogOwnerWindow();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 DialogResult result = dlg.ShowDialog(owner);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 if (result == DialogResult.OK && dlg.ResultType != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 _resultType = dlg.ResultType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 SaveType(_resultType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 _windowsFormsEditorService.CloseDropDown();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 private void TypePicker_Resize(object sender, EventArgs e)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 _size = Size;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 private void SaveType(Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 DataSourceProviderService dspService = GetService<DataSourceProviderService>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 if (dspService == null || !dspService.SupportsAddNewDataSource)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 return;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 const string vs9TypeName = "Microsoft.VSDesigner.VSDesignerPackage.IGenericObjectDataSourcesService, Microsoft.VSDesigner, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 const string vs8TypeName = "Microsoft.VSDesigner.VSDesignerPackage.IGenericObjectDataSourcesService, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 Type serviceType = Type.GetType(vs9TypeName) ?? Type.GetType(vs8TypeName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 if (serviceType == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 return;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 object service = _serviceProvider.GetService(serviceType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 if (service == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 return;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 MethodInfo mi = serviceType.GetMethod("AddGenericObjectDataSource");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 mi.Invoke(service, new object[] { _serviceProvider, null, type });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 catch (Exception ex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 IUIService ui = GetService<IUIService>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 if (ui != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 ui.ShowError(ex);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 internal class TypeNode : TreeNode
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 public TypeNode(string name)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 : base(name, 0, 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 _isSelectable = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 public TypeNode(string name, Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 : this(name, type, true)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 public TypeNode(string name, Type type, bool isSelectable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 : base(name, 3, 3)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 _type = type;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 _isSelectable = isSelectable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 private bool _isSelectable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 public bool IsSelectable
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 get { return _isSelectable; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 set { _isSelectable = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 private readonly Type _type;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 public Type Type
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 get { return _type; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 class NewLink : LinkLabel
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276 protected override bool IsInputKey(Keys key)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 return key == Keys.Return? true: base.IsInputKey(key);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282 }