Datei: SimpleMappingTool/MainForm.cs
Last Commit (2ee4f7f)
1 | // |
2 | // Copyright (c) 2002-2025 Mirko Matytschak |
3 | // (www.netdataobjects.de) |
4 | // |
5 | // Author: Mirko Matytschak |
6 | // |
7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated |
8 | // documentation files (the "Software"), to deal in the Software without restriction, including without limitation |
9 | // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the |
10 | // Software, and to permit persons to whom the Software is furnished to do so, subject to the following |
11 | // conditions: |
12 | |
13 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions |
14 | // of the Software. |
15 | // |
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED |
17 | // TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
18 | // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF |
19 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
20 | // DEALINGS IN THE SOFTWARE. |
21 | |
22 | |
23 | using System; |
24 | using System.Reflection; |
25 | using System.IO; |
26 | using System.Text.RegularExpressions; |
27 | using System.Drawing; |
28 | using System.Collections; |
29 | using System.ComponentModel; |
30 | using System.Windows.Forms; |
31 | using NDO.Mapping; |
32 | |
33 | namespace SimpleMappingTool |
34 | { |
35 | ····/// <summary> |
36 | ····/// Zusammenfassung für MainForm. |
37 | ····/// </summary> |
38 | internal class MainForm : System. Windows. Forms. Form |
39 | ····{ |
40 | private System. ComponentModel. IContainer components; |
41 | private MainMenu mainMenu; |
42 | private MenuItem menuItem1; |
43 | private System. Windows. Forms. MenuItem menuOpen; |
44 | private System. Windows. Forms. MenuItem menuSave; |
45 | private System. Windows. Forms. MenuItem menuSaveAs; |
46 | |
47 | private bool saveOnClose = false; |
48 | |
49 | public MainForm( string[] args) |
50 | ········{ |
51 | ············try |
52 | ············{ |
53 | ················InitializeComponent(); |
54 | ScanArgs( args) ; |
55 | Application. Idle += new EventHandler( OnIdle) ; |
56 | ············} |
57 | ············catch (Exception ex) |
58 | ············{ |
59 | MessageBox. Show( ex. ToString( ) , "Mapping tool error") ; |
60 | ············} |
61 | ········} |
62 | |
63 | ········/// <summary> |
64 | ········/// Die verwendeten Ressourcen bereinigen. |
65 | ········/// </summary> |
66 | ········protected override void Dispose( bool disposing ) |
67 | ········{ |
68 | if( disposing ) |
69 | ············{ |
70 | ················if (components != null) |
71 | ················{ |
72 | ····················components.Dispose(); |
73 | ················} |
74 | ············} |
75 | ············base.Dispose( disposing ); |
76 | ········} |
77 | |
78 | ········#region Vom Windows Form-Designer generierter Code |
79 | ········/// <summary> |
80 | ········/// Erforderliche Methode für die Designerunterstützung. |
81 | ········/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. |
82 | ········/// </summary> |
83 | ········private void InitializeComponent() |
84 | ········{ |
85 | this. components = new System. ComponentModel. Container( ) ; |
86 | System. ComponentModel. ComponentResourceManager resources = new System. ComponentModel. ComponentResourceManager( typeof( MainForm) ) ; |
87 | this. allObjects = new System. Windows. Forms. TreeView( ) ; |
88 | this. imageList1 = new System. Windows. Forms. ImageList( this. components) ; |
89 | this. splitter1 = new System. Windows. Forms. Splitter( ) ; |
90 | this. propertyGrid1 = new System. Windows. Forms. PropertyGrid( ) ; |
91 | this. mainMenu = new System. Windows. Forms. MainMenu( this. components) ; |
92 | this. menuItem1 = new System. Windows. Forms. MenuItem( ) ; |
93 | this. menuOpen = new System. Windows. Forms. MenuItem( ) ; |
94 | this. menuSave = new System. Windows. Forms. MenuItem( ) ; |
95 | this. menuSaveAs = new System. Windows. Forms. MenuItem( ) ; |
96 | this. SuspendLayout( ) ; |
97 | ············// |
98 | ············// allObjects |
99 | ············// |
100 | this. allObjects. Dock = System. Windows. Forms. DockStyle. Left; |
101 | this. allObjects. ImageIndex = 0; |
102 | this. allObjects. ImageList = this. imageList1; |
103 | this. allObjects. Location = new System. Drawing. Point( 0, 0) ; |
104 | this. allObjects. Name = "allObjects"; |
105 | this. allObjects. SelectedImageIndex = 0; |
106 | this. allObjects. Size = new System. Drawing. Size( 387, 432) ; |
107 | this. allObjects. TabIndex = 0; |
108 | this. allObjects. MouseUp += new System. Windows. Forms. MouseEventHandler( this. allObjects_MouseUp) ; |
109 | this. allObjects. AfterSelect += new System. Windows. Forms. TreeViewEventHandler( this. allObjects_AfterSelect) ; |
110 | ············// |
111 | ············// imageList1 |
112 | ············// |
113 | this. imageList1. ImageStream = ( ( System. Windows. Forms. ImageListStreamer) ( resources. GetObject( "imageList1. ImageStream") ) ) ; |
114 | this. imageList1. TransparentColor = System. Drawing. Color. Transparent; |
115 | this. imageList1. Images. SetKeyName( 0, "") ; |
116 | this. imageList1. Images. SetKeyName( 1, "") ; |
117 | this. imageList1. Images. SetKeyName( 2, "") ; |
118 | this. imageList1. Images. SetKeyName( 3, "") ; |
119 | this. imageList1. Images. SetKeyName( 4, "") ; |
120 | this. imageList1. Images. SetKeyName( 5, "") ; |
121 | this. imageList1. Images. SetKeyName( 6, "") ; |
122 | this. imageList1. Images. SetKeyName( 7, "") ; |
123 | this. imageList1. Images. SetKeyName( 8, "") ; |
124 | this. imageList1. Images. SetKeyName( 9, "") ; |
125 | this. imageList1. Images. SetKeyName( 10, "") ; |
126 | this. imageList1. Images. SetKeyName( 11, "") ; |
127 | this. imageList1. Images. SetKeyName( 12, "") ; |
128 | this. imageList1. Images. SetKeyName( 13, "") ; |
129 | ············// |
130 | ············// splitter1 |
131 | ············// |
132 | this. splitter1. Location = new System. Drawing. Point( 387, 0) ; |
133 | this. splitter1. Name = "splitter1"; |
134 | this. splitter1. Size = new System. Drawing. Size( 2, 432) ; |
135 | this. splitter1. TabIndex = 1; |
136 | this. splitter1. TabStop = false; |
137 | ············// |
138 | ············// propertyGrid1 |
139 | ············// |
140 | this. propertyGrid1. Dock = System. Windows. Forms. DockStyle. Fill; |
141 | this. propertyGrid1. LineColor = System. Drawing. SystemColors. ScrollBar; |
142 | this. propertyGrid1. Location = new System. Drawing. Point( 389, 0) ; |
143 | this. propertyGrid1. Name = "propertyGrid1"; |
144 | this. propertyGrid1. Size = new System. Drawing. Size( 395, 432) ; |
145 | this. propertyGrid1. TabIndex = 2; |
146 | ············// |
147 | ············// mainMenu |
148 | ············// |
149 | this. mainMenu. MenuItems. AddRange( new System. Windows. Forms. MenuItem[] { |
150 | this. menuItem1} ) ; |
151 | ············// |
152 | // menuItem1 |
153 | ············// |
154 | this. menuItem1. Index = 0; |
155 | this. menuItem1. MenuItems. AddRange( new System. Windows. Forms. MenuItem[] { |
156 | this. menuOpen, |
157 | this. menuSave, |
158 | ············this.menuSaveAs}); |
159 | ············this.menuItem1.Text = "&File"; |
160 | ············// |
161 | ············// menuOpen |
162 | ············// |
163 | this. menuOpen. Index = 0; |
164 | this. menuOpen. Shortcut = System. Windows. Forms. Shortcut. CtrlO; |
165 | this. menuOpen. Text = "&Open. . . "; |
166 | this. menuOpen. Click += new System. EventHandler( this. menuOpen_Click) ; |
167 | ············// |
168 | ············// menuSave |
169 | ············// |
170 | this. menuSave. Index = 1; |
171 | this. menuSave. Shortcut = System. Windows. Forms. Shortcut. CtrlS; |
172 | this. menuSave. Text = "&Save"; |
173 | this. menuSave. Click += new System. EventHandler( this. menuSave_Click) ; |
174 | ············// |
175 | ············// menuSaveAs |
176 | ············// |
177 | this. menuSaveAs. Index = 2; |
178 | this. menuSaveAs. Text = "Save &as. . . "; |
179 | this. menuSaveAs. Click += new System. EventHandler( this. menuSaveAs_Click) ; |
180 | ············// |
181 | ············// MainForm |
182 | ············// |
183 | this. AutoScaleBaseSize = new System. Drawing. Size( 5, 13) ; |
184 | this. ClientSize = new System. Drawing. Size( 784, 432) ; |
185 | this. Controls. Add( this. propertyGrid1) ; |
186 | this. Controls. Add( this. splitter1) ; |
187 | this. Controls. Add( this. allObjects) ; |
188 | this. Icon = ( ( System. Drawing. Icon) ( resources. GetObject( "$this. Icon") ) ) ; |
189 | this. Menu = this. mainMenu; |
190 | this. Name = "MainForm"; |
191 | this. Text = "NDO Mapping Tool"; |
192 | this. Load += new System. EventHandler( this. MainForm_Load) ; |
193 | this. Closing += new System. ComponentModel. CancelEventHandler( this. MainForm_Closing) ; |
194 | this. ResumeLayout( false) ; |
195 | |
196 | ········} |
197 | ········#endregion |
198 | |
199 | ········/// <summary> |
200 | ········/// Der Haupteinstiegspunkt für die Anwendung. |
201 | ········/// </summary> |
202 | ········[STAThread] |
203 | static void Main( string[] args) |
204 | ········{ |
205 | Application. Run( new MainForm( args) ) ; |
206 | ········} |
207 | ········private System.Windows.Forms.Splitter splitter1; |
208 | ········private System.Windows.Forms.PropertyGrid propertyGrid1; |
209 | ········private System.Windows.Forms.TreeView allObjects; |
210 | |
211 | private System. Windows. Forms. ImageList imageList1; |
212 | ········NDOMapping mapping = null;············ |
213 | |
214 | |
215 | |
216 | ········private void LoadMapping(string fileName) |
217 | ········{ |
218 | ············allObjects.Nodes.Clear(); |
219 | ············try |
220 | ············{ |
221 | mapping = new NDOMapping( fileName) ; |
222 | ················PrepareRelations(); |
223 | ············} |
224 | ············catch (Exception ex) |
225 | ············{ |
226 | ················mapping = null; |
227 | ················this.Text = string.Empty; |
228 | #if DEBUG |
229 | MessageBox. Show( ex. ToString( ) , "Error") ; |
230 | #else |
231 | ················MessageBox.Show(ex.Message, "Error"); |
232 | #endif |
233 | ················return; |
234 | ············} |
235 | ············this.Text = fileName; |
236 | ············FillNodes(); |
237 | ········} |
238 | |
239 | |
240 | ········private void FillNodes() |
241 | ········{ |
242 | NDOMappingNode mn = new NDOMappingNode( this. mapping) ; |
243 | allObjects. Nodes. Add( mn) ; |
244 | ········} |
245 | |
246 | private void ScanArgs( string[] args) |
247 | ········{ |
248 | ············Regex regexm = new Regex(@"-m:(.*)"); |
249 | ············foreach (string arg in args) |
250 | ············{ |
251 | ················Match matchm = regexm.Match(arg); |
252 | ················if (matchm.Success) |
253 | ················{ |
254 | LoadMapping( matchm. Groups[1]. Value) ; |
255 | ····················saveOnClose = true; |
256 | ················} |
257 | ············} |
258 | ········} |
259 | |
260 | |
261 | private void MainForm_Load( object sender, System. EventArgs e) |
262 | ········{ |
263 | ············//ScanArgs(new string[] {@"-m:C:\Projekte\Persistenz\v4\TestEnhancerVersion4\PureBusinessClasses\NDOMapping.xml"}); |
264 | ········} |
265 | |
266 | private void allObjects_AfterSelect( object sender, System. Windows. Forms. TreeViewEventArgs e) |
267 | ········{ |
268 | NDOTreeNode tn = e. Node as NDOTreeNode; |
269 | ············if (tn != null) |
270 | ················this.propertyGrid1.SelectedObject = tn.Object; |
271 | ············else |
272 | ················this.propertyGrid1.SelectedObject = null; |
273 | ········} |
274 | |
275 | private void MainForm_Closing( object sender, System. ComponentModel. CancelEventArgs e) |
276 | ········{ |
277 | ············if (saveOnClose && mapping != null) |
278 | ················mapping.Save(); |
279 | ············else if (mapping != null && mapping.HasChanges) |
280 | ············{ |
281 | if ( MessageBox. Show( "Save changes?", "NDO Mapping Tool", MessageBoxButtons. YesNo, MessageBoxIcon. Question) == DialogResult. Yes) |
282 | ················{ |
283 | ····················mapping.Save(); |
284 | ················}················ |
285 | ············} |
286 | ········} |
287 | |
288 | private void menuOpen_Click( object sender, System. EventArgs e) |
289 | ········{ |
290 | ············if (mapping != null && mapping.HasChanges) |
291 | ············{ |
292 | if ( MessageBox. Show( "Save changes?", "Mapping Tool", MessageBoxButtons. YesNo) == DialogResult. Yes) |
293 | ················{ |
294 | ····················mapping.Save(); |
295 | ····················mapping = null; |
296 | ················} |
297 | ············} |
298 | |
299 | ············OpenFileDialog ofd = new OpenFileDialog(); |
300 | ············ofd.CheckFileExists = true; |
301 | ············ofd.DefaultExt = "xml"; |
302 | ············ofd.Multiselect = false; |
303 | ············ofd.Filter = "Mapping Files (*.xml)|*.xml"; |
304 | ············ofd.FileName = "NDOMapping.xml"; |
305 | ············if (ofd.ShowDialog() == DialogResult.Cancel) |
306 | ················return; |
307 | LoadMapping( ofd. FileName) ; |
308 | ········} |
309 | |
310 | |
311 | ········bool PrepareRelations() |
312 | ········{ |
313 | ············bool result = false; |
314 | ············foreach (Class cl in mapping.Classes) |
315 | ············{ |
316 | ················foreach (Relation r in cl.Relations) |
317 | ················{ |
318 | ····················// This computes the foreign relation, which is |
319 | ····················// needed to avoid a null pointer exception |
320 | ····················// while binding to the property grid. |
321 | ····················result = result || r.Bidirectional; |
322 | ················} |
323 | ············} |
324 | ············return result;··// Nobody reads this value, but we make shure, that the code won't get removed by the optimizer. |
325 | ········} |
326 | |
327 | |
328 | private void menuSave_Click( object sender, System. EventArgs e) |
329 | ········{ |
330 | ············mapping.Save(); |
331 | ········} |
332 | |
333 | private void menuSaveAs_Click( object sender, System. EventArgs e) |
334 | ········{ |
335 | ············SaveFileDialog sfd = new SaveFileDialog(); |
336 | if ( mapping != null && mapping. FileName != string. Empty) |
337 | sfd. InitialDirectory = Path. GetDirectoryName( mapping. FileName) ; |
338 | ············sfd.CheckFileExists = false; |
339 | ············sfd.DefaultExt = "xml"; |
340 | ············sfd.Filter = "Mapping Files (*.xml)|*.xml"; |
341 | ············sfd.FileName = "NDOMapping.xml"; |
342 | if ( sfd. ShowDialog( this) != DialogResult. OK) |
343 | ················return; |
344 | mapping. SaveAs( sfd. FileName) ; |
345 | ············this.Text = sfd.FileName; |
346 | ········} |
347 | |
348 | private void OnIdle( object sender, EventArgs e) |
349 | ········{ |
350 | ············menuSave.Enabled = mapping != null && mapping.HasChanges; |
351 | ············menuOpen.Enabled = !saveOnClose; |
352 | ········} |
353 | |
354 | #if DEBUG |
355 | private void MainForm_KeyPress( object sender, System. Windows. Forms. KeyPressEventArgs e) |
356 | ········{ |
357 | |
358 | ············if ((int) e.KeyChar == 27) |
359 | MessageBox. Show( "Escape") ; |
360 | ········} |
361 | #endif |
362 | |
363 | private void allObjects_MouseUp( object sender, System. Windows. Forms. MouseEventArgs e) |
364 | ········{ |
365 | ············ |
366 | ············if (e.Button == MouseButtons.Right) |
367 | ············{ |
368 | NDOTreeNode tn = this. allObjects. GetNodeAt( e. X, e. Y) as NDOTreeNode; |
369 | ················if (tn != null) |
370 | ················{ |
371 | ····················allObjects.SelectedNode = tn; |
372 | ContextMenu menu = tn. GetContextMenu( ) ; |
373 | if ( menu. MenuItems. Count > 0) |
374 | ························menu.Show(allObjects, new Point(e.X, e.Y)); |
375 | ····················this.propertyGrid1.SelectedObject = tn.Object; |
376 | ················} |
377 | ············} |
378 | ········} |
379 | |
380 | ····} |
381 | } |
382 |
New Commit (37eab6b)
1 | // |
2 | // Copyright (c) 2002-2025 Mirko Matytschak |
3 | // (www.netdataobjects.de) |
4 | // |
5 | // Author: Mirko Matytschak |
6 | // |
7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated |
8 | // documentation files (the "Software"), to deal in the Software without restriction, including without limitation |
9 | // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the |
10 | // Software, and to permit persons to whom the Software is furnished to do so, subject to the following |
11 | // conditions: |
12 | |
13 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions |
14 | // of the Software. |
15 | // |
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED |
17 | // TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
18 | // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF |
19 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
20 | // DEALINGS IN THE SOFTWARE. |
21 | |
22 | |
23 | using System; |
24 | using System.Reflection; |
25 | using System.IO; |
26 | using System.Text.RegularExpressions; |
27 | using System.Drawing; |
28 | using System.Collections; |
29 | using System.ComponentModel; |
30 | using System.Windows.Forms; |
31 | using NDO.Mapping; |
32 | |
33 | namespace SimpleMappingTool |
34 | { |
35 | ····/// <summary> |
36 | ····/// Zusammenfassung für MainForm. |
37 | ····/// </summary> |
38 | internal class MainForm : Form |
39 | ····{ |
40 | private IContainer components; |
41 | private MenuStrip mainMenu; |
42 | private ToolStripMenuItem fileToolStripMenuItem; |
43 | private ToolStripMenuItem menuOpen; |
44 | private ToolStripMenuItem menuSave; |
45 | private ToolStripMenuItem menuSaveAs; |
46 | ········private bool saveOnClose = false; |
47 | ········private Splitter splitter1; |
48 | ········private PropertyGrid propertyGrid1; |
49 | ········private TreeView allObjects; |
50 | ········private ImageList imageList1; |
51 | |
52 | NDOMapping? mapping = null; |
53 | |
54 | #pragma warning disable 8618 |
55 | ········public MainForm( string[] args ) |
56 | ········{ |
57 | ············try |
58 | ············{ |
59 | ················InitializeComponent(); |
60 | ScanArgs( args ) ; |
61 | Application. Idle += new EventHandler( OnIdle ) ; |
62 | ············} |
63 | ············catch (Exception ex) |
64 | ············{ |
65 | MessageBox. Show( ex. ToString( ) , "Mapping tool error" ) ; |
66 | ············} |
67 | ········} |
68 | #pragma warning restore 8618 |
69 | |
70 | ········/// <summary> |
71 | ········/// Die verwendeten Ressourcen bereinigen. |
72 | ········/// </summary> |
73 | ········protected override void Dispose( bool disposing ) |
74 | ········{ |
75 | if ( disposing) |
76 | ············{ |
77 | ················if (components != null) |
78 | ················{ |
79 | ····················components.Dispose(); |
80 | ················} |
81 | ············} |
82 | ············base.Dispose( disposing ); |
83 | ········} |
84 | |
85 | ········#region Vom Windows Form-Designer generierter Code |
86 | ········/// <summary> |
87 | ········/// Erforderliche Methode für die Designerunterstützung. |
88 | ········/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. |
89 | ········/// </summary> |
90 | ········private void InitializeComponent() |
91 | ········{ |
92 | components = new Container( ) ; |
93 | ComponentResourceManager resources = new ComponentResourceManager( typeof( MainForm) ) ; |
94 | allObjects = new TreeView( ) ; |
95 | imageList1 = new ImageList( components ) ; |
96 | splitter1 = new Splitter( ) ; |
97 | propertyGrid1 = new PropertyGrid( ) ; |
98 | mainMenu = new MenuStrip( ) ; |
99 | fileToolStripMenuItem = new ToolStripMenuItem( ) ; |
100 | menuOpen = new ToolStripMenuItem( ) ; |
101 | menuSave = new ToolStripMenuItem( ) ; |
102 | menuSaveAs = new ToolStripMenuItem( ) ; |
103 | mainMenu. SuspendLayout( ) ; |
104 | ············SuspendLayout(); |
105 | ············// |
106 | ············// allObjects |
107 | ············// |
108 | allObjects. Dock = DockStyle. Left; |
109 | allObjects. ImageIndex = 0; |
110 | allObjects. ImageList = imageList1; |
111 | allObjects. Location = new Point( 0, 24 ) ; |
112 | allObjects. Name = "allObjects"; |
113 | allObjects. SelectedImageIndex = 0; |
114 | allObjects. Size = new Size( 464, 408 ) ; |
115 | allObjects. TabIndex = 0; |
116 | allObjects. AfterSelect += allObjects_AfterSelect ; |
117 | allObjects. MouseUp += allObjects_MouseUp ; |
118 | ············// |
119 | ············// imageList1 |
120 | ············// |
121 | imageList1. ColorDepth = ColorDepth. Depth8Bit; |
122 | imageList1. ImageStream = ( ImageListStreamer) resources. GetObject( "imageList1. ImageStream" ) !; |
123 | imageList1. TransparentColor = Color. Transparent; |
124 | imageList1. Images. SetKeyName( 0, "" ) ; |
125 | imageList1. Images. SetKeyName( 1, "" ) ; |
126 | imageList1. Images. SetKeyName( 2, "" ) ; |
127 | imageList1. Images. SetKeyName( 3, "" ) ; |
128 | imageList1. Images. SetKeyName( 4, "" ) ; |
129 | imageList1. Images. SetKeyName( 5, "" ) ; |
130 | imageList1. Images. SetKeyName( 6, "" ) ; |
131 | imageList1. Images. SetKeyName( 7, "" ) ; |
132 | imageList1. Images. SetKeyName( 8, "" ) ; |
133 | imageList1. Images. SetKeyName( 9, "" ) ; |
134 | imageList1. Images. SetKeyName( 10, "" ) ; |
135 | imageList1. Images. SetKeyName( 11, "" ) ; |
136 | imageList1. Images. SetKeyName( 12, "" ) ; |
137 | ············imageList1.Images.SetKeyName( 13, "" ); |
138 | ············// |
139 | ············// splitter1 |
140 | ············// |
141 | splitter1. Location = new Point( 464, 24 ) ; |
142 | splitter1. Name = "splitter1"; |
143 | splitter1. Size = new Size( 3, 408 ) ; |
144 | splitter1. TabIndex = 1; |
145 | splitter1. TabStop = false; |
146 | ············// |
147 | ············// propertyGrid1 |
148 | ············// |
149 | propertyGrid1. Dock = DockStyle. Fill; |
150 | propertyGrid1. LineColor = SystemColors. ScrollBar; |
151 | propertyGrid1. Location = new Point( 467, 24 ) ; |
152 | propertyGrid1. Name = "propertyGrid1"; |
153 | propertyGrid1. Size = new Size( 317, 408 ) ; |
154 | propertyGrid1. TabIndex = 2; |
155 | ············// |
156 | ············// mainMenu |
157 | ············// |
158 | mainMenu. Items. AddRange( new ToolStripItem[] { fileToolStripMenuItem } ) ; |
159 | mainMenu. Location = new Point( 0, 0 ) ; |
160 | ············mainMenu.Name = "mainMenu"; |
161 | ············mainMenu.Size = new Size( 784, 24 ); |
162 | ············mainMenu.TabIndex = 0; |
163 | ············mainMenu.Text = "mainMenu"; |
164 | ············// |
165 | // fileToolStripMenuItem |
166 | ············// |
167 | fileToolStripMenuItem. DropDownItems. AddRange( new ToolStripItem[] { menuOpen, menuSave, menuSaveAs } ) ; |
168 | fileToolStripMenuItem. Name = "fileToolStripMenuItem"; |
169 | fileToolStripMenuItem. Size = new Size( 37, 20 ) ; |
170 | fileToolStripMenuItem. Text = "&File"; |
171 | ············// |
172 | ············// menuOpen |
173 | ············// |
174 | menuOpen. Name = "menuOpen"; |
175 | menuOpen. Size = new Size( 180, 22 ) ; |
176 | menuOpen. Text = "&Open"; |
177 | menuOpen. Click += menuOpen_Click ; |
178 | ············// |
179 | ············// menuSave |
180 | ············// |
181 | menuSave. Name = "menuSave"; |
182 | menuSave. Size = new Size( 180, 22 ) ; |
183 | menuSave. Text = "&Save"; |
184 | menuSave. Click += menuSave_Click ; |
185 | ············// |
186 | ············// menuSaveAs |
187 | ············// |
188 | menuSaveAs. Name = "menuSaveAs"; |
189 | menuSaveAs. Size = new Size( 180, 22 ) ; |
190 | menuSaveAs. Text = "Save &as. . . "; |
191 | ············menuSaveAs.Click +=··menuSaveAs_Click ; |
192 | ············// |
193 | ············// MainForm |
194 | ············// |
195 | AutoScaleBaseSize = new Size( 6, 16 ) ; |
196 | ClientSize = new Size( 784, 432 ) ; |
197 | Controls. Add( propertyGrid1 ) ; |
198 | Controls. Add( splitter1 ) ; |
199 | Controls. Add( allObjects ) ; |
200 | Controls. Add( mainMenu ) ; |
201 | Icon = ( Icon) resources. GetObject( "$this. Icon" ) !; |
202 | MainMenuStrip = mainMenu; |
203 | Name = "MainForm"; |
204 | Text = "NDO Mapping Tool"; |
205 | Closing += MainForm_Closing ; |
206 | Load += MainForm_Load ; |
207 | mainMenu. ResumeLayout( false ) ; |
208 | ············mainMenu.PerformLayout(); |
209 | ············ResumeLayout( false ); |
210 | ············PerformLayout(); |
211 | ········} |
212 | ········#endregion |
213 | |
214 | ········/// <summary> |
215 | ········/// Der Haupteinstiegspunkt für die Anwendung. |
216 | ········/// </summary> |
217 | ········[STAThread] |
218 | static void Main( string[] args ) |
219 | ········{ |
220 | Application. Run( new MainForm( args ) ) ; |
221 | ········} |
222 | |
223 | private void LoadMapping( string fileName ) |
224 | ········{ |
225 | ············allObjects.Nodes.Clear(); |
226 | ············try |
227 | ············{ |
228 | mapping = new NDOMapping( fileName ) ; |
229 | ················PrepareRelations(); |
230 | ············} |
231 | ············catch (Exception ex) |
232 | ············{ |
233 | ················mapping = null; |
234 | ················this.Text = string.Empty; |
235 | #if DEBUG |
236 | MessageBox. Show( ex. ToString( ) , "Error" ) ; |
237 | #else |
238 | ················MessageBox.Show(ex.Message, "Error"); |
239 | #endif |
240 | ················return; |
241 | ············} |
242 | ············this.Text = fileName; |
243 | ············if (mapping != null) |
244 | ················FillNodes(); |
245 | ········} |
246 | |
247 | |
248 | ········private void FillNodes() |
249 | ········{ |
250 | NDOMappingNode mn = new NDOMappingNode( this. mapping!) ; |
251 | allObjects. Nodes. Add( mn ) ; |
252 | ········} |
253 | |
254 | private void ScanArgs( string[] args ) |
255 | ········{ |
256 | ············Regex regexm = new Regex(@"-m:(.*)"); |
257 | ············foreach (string arg in args) |
258 | ············{ |
259 | ················Match matchm = regexm.Match(arg); |
260 | ················if (matchm.Success) |
261 | ················{ |
262 | LoadMapping( matchm. Groups[1]. Value ) ; |
263 | ····················saveOnClose = true; |
264 | ················} |
265 | ············} |
266 | ········} |
267 | |
268 | |
269 | private void MainForm_Load( object? sender, System. EventArgs e ) |
270 | ········{ |
271 | ········} |
272 | |
273 | private void allObjects_AfterSelect( object? sender, TreeViewEventArgs e ) |
274 | ········{ |
275 | var tn = e. Node as NDOTreeNode; |
276 | ············if (tn != null) |
277 | ················this.propertyGrid1.SelectedObject = tn.Object; |
278 | ············else |
279 | ················this.propertyGrid1.SelectedObject = null; |
280 | ········} |
281 | |
282 | private void MainForm_Closing( object? sender, System. ComponentModel. CancelEventArgs e ) |
283 | ········{ |
284 | ············if (saveOnClose && mapping != null) |
285 | ················mapping.Save(); |
286 | ············else if (mapping != null && mapping.HasChanges) |
287 | ············{ |
288 | if ( MessageBox. Show( "Save changes?", "NDO Mapping Tool", MessageBoxButtons. YesNo, MessageBoxIcon. Question ) == DialogResult. Yes) |
289 | ················{ |
290 | ····················mapping.Save(); |
291 | ················} |
292 | ············} |
293 | ········} |
294 | |
295 | private void menuOpen_Click( object? sender, System. EventArgs e ) |
296 | ········{ |
297 | ············if (mapping != null && mapping.HasChanges) |
298 | ············{ |
299 | if ( MessageBox. Show( "Save changes?", "Mapping Tool", MessageBoxButtons. YesNo ) == DialogResult. Yes) |
300 | ················{ |
301 | ····················mapping.Save(); |
302 | ····················mapping = null; |
303 | ················} |
304 | ············} |
305 | |
306 | ············OpenFileDialog ofd = new OpenFileDialog(); |
307 | ············ofd.CheckFileExists = true; |
308 | ············ofd.DefaultExt = "xml"; |
309 | ············ofd.Multiselect = false; |
310 | ············ofd.Filter = "Mapping Files (*.xml)|*.xml"; |
311 | ············ofd.FileName = "NDOMapping.xml"; |
312 | ············if (ofd.ShowDialog() == DialogResult.Cancel) |
313 | ················return; |
314 | LoadMapping( ofd. FileName ) ; |
315 | ········} |
316 | |
317 | |
318 | ········bool PrepareRelations() |
319 | ········{ |
320 | ············bool result = false; |
321 | ············if (mapping != null) |
322 | ············{ |
323 | ················foreach (Class cl in mapping.Classes) |
324 | ················{ |
325 | ····················foreach (Relation r in cl.Relations) |
326 | ····················{ |
327 | ························// This computes the foreign relation, which is |
328 | ························// needed to avoid a null pointer exception |
329 | ························// while binding to the property grid. |
330 | ························result = result || r.Bidirectional; |
331 | ····················} |
332 | ················} |
333 | ············} |
334 | |
335 | ············return result;··// Nobody reads this value, but we make shure, that the code won't get removed by the optimizer. |
336 | ········} |
337 | |
338 | |
339 | private void menuSave_Click( object? sender, System. EventArgs e ) |
340 | ········{ |
341 | ············if (mapping != null) |
342 | ················mapping.Save(); |
343 | ········} |
344 | |
345 | private void menuSaveAs_Click( object? sender, System. EventArgs e ) |
346 | ········{ |
347 | ············if (mapping != null) |
348 | ············{ |
349 | ················SaveFileDialog sfd = new SaveFileDialog(); |
350 | if ( mapping. FileName != string. Empty) |
351 | sfd. InitialDirectory = Path. GetDirectoryName( mapping. FileName ) ; |
352 | ················sfd.CheckFileExists = false; |
353 | ················sfd.DefaultExt = "xml"; |
354 | ················sfd.Filter = "Mapping Files (*.xml)|*.xml"; |
355 | ················sfd.FileName = "NDOMapping.xml"; |
356 | if ( sfd. ShowDialog( this ) != DialogResult. OK) |
357 | ····················return; |
358 | mapping. SaveAs( sfd. FileName ) ; |
359 | ················this.Text = sfd.FileName; |
360 | ············} |
361 | ········} |
362 | |
363 | private void OnIdle( object? sender, EventArgs e ) |
364 | ········{ |
365 | ············menuSave.Enabled = mapping != null && mapping.HasChanges; |
366 | ············menuOpen.Enabled = !saveOnClose; |
367 | ········} |
368 | |
369 | #if DEBUG |
370 | private void MainForm_KeyPress( object? sender, KeyPressEventArgs e ) |
371 | ········{ |
372 | |
373 | ············if ((int) e.KeyChar == 27) |
374 | MessageBox. Show( "Escape" ) ; |
375 | ········} |
376 | #endif |
377 | |
378 | private void allObjects_MouseUp( object? sender, MouseEventArgs e ) |
379 | ········{ |
380 | |
381 | ············if (e.Button == MouseButtons.Right) |
382 | ············{ |
383 | var tn = this. allObjects. GetNodeAt( e. X, e. Y) as NDOTreeNode; |
384 | ················if (tn != null) |
385 | ················{ |
386 | ····················allObjects.SelectedNode = tn; |
387 | var menu = tn. GetContextMenu( ) ; |
388 | if ( menu. Items. Count > 0) |
389 | ························menu.Show(allObjects, new Point(e.X, e.Y)); |
390 | ····················this.propertyGrid1.SelectedObject = tn.Object; |
391 | ················} |
392 | ············} |
393 | ········} |
394 | ····} |
395 | } |
396 |