Datei: NDOPackage/ConfigurationDialog.cs

Last Commit (e424d5f)
1 //
2 // Copyright (c) 2002-2019 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.Linq;
25 using System.IO;
26 using System.Windows.Forms;
27 using MessageBox = System.Windows.Forms.MessageBox;
28 using Project = EnvDTE.Project;
29 using System.Diagnostics;
30 using Microsoft.VisualStudio.ComponentModelHost;
31 using NuGet.VisualStudio;
32 using NDO.UISupport;
33 using System.Drawing;
 
34
35 #pragma warning disable VSTHRD010 // Invoke single-threaded types on Main thread
36
37 namespace NDOVsPackage
38 {
39 ····/// <summary>
40 ····/// Summary description for ConfigurationDialog.
41 ····/// </summary>
42 ····internal class ConfigurationDialog : System.Windows.Forms.Form
43 ····{
44 ········private System.ComponentModel.IContainer components;
45
46 ········private Project project;
47 ········private System.Windows.Forms.ToolTip toolTip1;
48 ········private TabControl tabControl;
49 ········private TabPage tabPageGeneral;
50 ········private TextBox txtTargetMappingFileName;
51 ········private Label label1;
52 ········private CheckBox chkVerboseMode;
53 ········private TextBox txtSchemaVersion;
54 ········private Label label5;
55 ········private Button btnNewDatabase;
56 ········private Button btnSaveAs;
57 ········private Button btnPresetApp;
58 ········private TextBox txtDbOwner;
59 ········private TextBox txtConnectionString;
60 ········private Label label3;
61 ········private GroupBox groupBox1;
62 ········private CheckBox chkDropExistingElements;
63 ········private CheckBox chkGenerateFkConstraints;
64 ········private CheckBox chkIncludeTypecodes;
65 ········private RadioButton radioDefaultEncoding;
66 ········private RadioButton radioUtf8Encoding;
67 ········private Label label4;
68 ········private ComboBox cbSqlDialect;
69 ········private CheckBox chkGenerateSQLScript;
70 ········private CheckBox chkUseTimeStamps;
71 ········private CheckBox chkChangeEvents;
72 ········private Label label2;
73 ········private Button btnConnString;
74 ········private Button btnOK;
75 ········private Button btnPresetLibrary;
76 ········private Button btnCancel;
77 ········private CheckBox chkMappingNew;
78 ········private CheckBox chkActivateEnhancer;
79 ········private CheckBox chkActivateAddIn;
80 ········private TabPage tabPageAssemblies;
81 ········private Label label6;
82 ········private CheckedListBox chlbAssemblies;
83 ········private ProjectDescription projectDescription;
84 ········private Button btnInstallProvider;
85 ········private NDOReference[] references;
86
87 ········public ConfigurationDialog(Project project, ProjectDescription projectDescription)
88 ········{
89 ············try
90 ············{
91 ················this.project = project;
92 ················this.projectDescription = projectDescription;
93 ················this.projectDescription.BuildReferences();
94 ················this.projectDescription.FixDllState();
95 ················InitializeComponent();
96 if ( Screen. FromControl( this ) . Bounds. Width >= 2600)
97 Font = new Font( "Segoe UI", 11f, FontStyle. Regular, GraphicsUnit. Point, 0 ) ;
 
 
 
 
98 ················var lbAssemblies = (ListBox)this.chlbAssemblies;
99 ················this.references = projectDescription.References.Values.ToArray();
100 ················lbAssemblies.DataSource = this.references;
101 ················lbAssemblies.DisplayMember = nameof( NDOReference.Name );
102 ················lbAssemblies.ValueMember = nameof( NDOReference.CheckState );
103 ················int i = 0;
104 ················foreach (var item in this.references)
105 ················{
106 ····················this.chlbAssemblies.SetItemCheckState( i++, item.CheckState );
107 ················}
108 ············}
109 ············catch (Exception ex)
110 ············{
111 ················Debug.WriteLine( ex.ToString() );
112 ············}
113 ········}
114
115 ········void CheckEnabledStateForLoadProviderButton()
116 ········{
117 ············string providerName = this.cbSqlDialect.Text;
118
119 ············if (string.IsNullOrEmpty( providerName ))
120 ············{
121 ················this.btnInstallProvider.Enabled = false;
122 ················return;
123 ············}
124
125 ············if (IsProviderInstalled(providerName))
126 ············{
127 ················this.btnInstallProvider.Enabled = false;
128 ················return;
129 ············}
130
131 ············this.btnInstallProvider.Enabled = true;
132 ········}
133
134 ········bool IsProviderInstalled(string providerName)
135 ········{
136 ············IComponentModel componentModel;
137 ············var installerService = GetInstallerService( out componentModel );
138
139 ············string packageName = $"ndo.{providerName.ToLower()}";
140 ············return installerService.IsPackageInstalled( this.project, packageName );
141 ········}
142
143 ········/// <summary>
144 ········/// Clean up any resources being used.
145 ········/// </summary>
146 ········protected override void Dispose( bool disposing )
147 ········{
148 ············if( disposing )
149 ············{
150 ················if(components != null)
151 ················{
152 ····················components.Dispose();
153 ················}
154 ············}
155 ············base.Dispose( disposing );
156 ········}
157
158 ········#region Windows Form Designer generated code
159 ········/// <summary>
160 ········/// Required method for Designer support - do not modify
161 ········/// the contents of this method with the code editor.
162 ········/// </summary>
163 ········private void InitializeComponent()
164 ········{
165 ············this.components = new System.ComponentModel.Container();
166 ············System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigurationDialog));
167 ············this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
168 ············this.chkVerboseMode = new System.Windows.Forms.CheckBox();
169 ············this.btnNewDatabase = new System.Windows.Forms.Button();
170 ············this.btnSaveAs = new System.Windows.Forms.Button();
171 ············this.btnPresetApp = new System.Windows.Forms.Button();
172 ············this.txtDbOwner = new System.Windows.Forms.TextBox();
173 ············this.txtConnectionString = new System.Windows.Forms.TextBox();
174 ············this.chkDropExistingElements = new System.Windows.Forms.CheckBox();
175 ············this.chkGenerateFkConstraints = new System.Windows.Forms.CheckBox();
176 ············this.chkIncludeTypecodes = new System.Windows.Forms.CheckBox();
177 ············this.radioDefaultEncoding = new System.Windows.Forms.RadioButton();
178 ············this.radioUtf8Encoding = new System.Windows.Forms.RadioButton();
179 ············this.cbSqlDialect = new System.Windows.Forms.ComboBox();
180 ············this.chkGenerateSQLScript = new System.Windows.Forms.CheckBox();
181 ············this.chkUseTimeStamps = new System.Windows.Forms.CheckBox();
182 ············this.chkChangeEvents = new System.Windows.Forms.CheckBox();
183 ············this.btnConnString = new System.Windows.Forms.Button();
184 ············this.btnPresetLibrary = new System.Windows.Forms.Button();
185 ············this.chkMappingNew = new System.Windows.Forms.CheckBox();
186 ············this.chkActivateEnhancer = new System.Windows.Forms.CheckBox();
187 ············this.chkActivateAddIn = new System.Windows.Forms.CheckBox();
188 ············this.tabControl = new System.Windows.Forms.TabControl();
189 ············this.tabPageGeneral = new System.Windows.Forms.TabPage();
190 ············this.txtTargetMappingFileName = new System.Windows.Forms.TextBox();
191 ············this.label1 = new System.Windows.Forms.Label();
192 ············this.txtSchemaVersion = new System.Windows.Forms.TextBox();
193 ············this.label5 = new System.Windows.Forms.Label();
194 ············this.label3 = new System.Windows.Forms.Label();
195 ············this.groupBox1 = new System.Windows.Forms.GroupBox();
196 ············this.btnInstallProvider = new System.Windows.Forms.Button();
197 ············this.label4 = new System.Windows.Forms.Label();
198 ············this.label2 = new System.Windows.Forms.Label();
199 ············this.tabPageAssemblies = new System.Windows.Forms.TabPage();
200 ············this.label6 = new System.Windows.Forms.Label();
201 ············this.chlbAssemblies = new System.Windows.Forms.CheckedListBox();
202 ············this.btnOK = new System.Windows.Forms.Button();
203 ············this.btnCancel = new System.Windows.Forms.Button();
204 ············this.tabControl.SuspendLayout();
205 ············this.tabPageGeneral.SuspendLayout();
206 ············this.groupBox1.SuspendLayout();
207 ············this.tabPageAssemblies.SuspendLayout();
208 ············this.SuspendLayout();
209 ············//
210 ············// chkVerboseMode
211 ············//
212 ············this.chkVerboseMode.Location = new System.Drawing.Point(21, 72);
213 ············this.chkVerboseMode.Name = "chkVerboseMode";
214 ············this.chkVerboseMode.Size = new System.Drawing.Size(238, 21);
215 ············this.chkVerboseMode.TabIndex = 51;
216 ············this.chkVerboseMode.Text = "Add-in Verbose Mode";
217 ············this.toolTip1.SetToolTip(this.chkVerboseMode, "Causes the Add-in and the Enhancer to show more information for debugging purpose" +
218 ········"s.");
219 ············//
220 ············// btnNewDatabase
221 ············//
222 ············this.btnNewDatabase.Location = new System.Drawing.Point(583, 313);
223 ············this.btnNewDatabase.Name = "btnNewDatabase";
224 ············this.btnNewDatabase.Size = new System.Drawing.Size(42, 21);
225 ············this.btnNewDatabase.TabIndex = 48;
226 ············this.btnNewDatabase.Text = "New";
227 ············this.toolTip1.SetToolTip(this.btnNewDatabase, "Create new database");
228 ············this.btnNewDatabase.Click += new System.EventHandler(this.btnNewDatabase_Click);
229 ············//
230 ············// btnSaveAs
231 ············//
232 ············this.btnSaveAs.DialogResult = System.Windows.Forms.DialogResult.OK;
233 ············this.btnSaveAs.Location = new System.Drawing.Point(249, 385);
234 ············this.btnSaveAs.Name = "btnSaveAs";
235 ············this.btnSaveAs.Size = new System.Drawing.Size(100, 39);
236 ············this.btnSaveAs.TabIndex = 47;
237 ············this.btnSaveAs.Text = "Save as...";
238 ············this.toolTip1.SetToolTip(this.btnSaveAs, "Save the options to be used in unattended builds with the stand-alone enhancer.");
239 ············this.btnSaveAs.Click += new System.EventHandler(this.btnSaveAs_Click);
240 ············//
241 ············// btnPresetApp
242 ············//
243 ············this.btnPresetApp.Location = new System.Drawing.Point(135, 385);
244 ············this.btnPresetApp.Name = "btnPresetApp";
245 ············this.btnPresetApp.Size = new System.Drawing.Size(100, 39);
246 ············this.btnPresetApp.TabIndex = 46;
247 ············this.btnPresetApp.Text = "Preset for Application";
248 ············this.toolTip1.SetToolTip(this.btnPresetApp, "Selects all settings used for applications which don\'t contain but reference pers" +
249 ········"istent types.");
250 ············this.btnPresetApp.Click += new System.EventHandler(this.btnPresetApp_Click);
251 ············//
252 ············// txtDbOwner
253 ············//
254 ············this.txtDbOwner.Location = new System.Drawing.Point(145, 126);
255 ············this.txtDbOwner.Name = "txtDbOwner";
256 ············this.txtDbOwner.Size = new System.Drawing.Size(160, 20);
257 ············this.txtDbOwner.TabIndex = 45;
258 ············this.toolTip1.SetToolTip(this.txtDbOwner, "Enter an owner name, if you like your tables to be written like owner.tablename.");
259 ············//
260 ············// txtConnectionString
261 ············//
262 ············this.txtConnectionString.Location = new System.Drawing.Point(18, 313);
263 ············this.txtConnectionString.Name = "txtConnectionString";
264 ············this.txtConnectionString.Size = new System.Drawing.Size(514, 20);
265 ············this.txtConnectionString.TabIndex = 39;
266 ············this.toolTip1.SetToolTip(this.txtConnectionString, "This string will be copied into the mapping file, if there doesn\'t exist a valid " +
267 ········"connection string. Otherwise it will be ignored.");
268 ············//
269 ············// chkDropExistingElements
270 ············//
271 ············this.chkDropExistingElements.Location = new System.Drawing.Point(13, 202);
272 ············this.chkDropExistingElements.Name = "chkDropExistingElements";
273 ············this.chkDropExistingElements.Size = new System.Drawing.Size(235, 21);
274 ············this.chkDropExistingElements.TabIndex = 24;
275 ············this.chkDropExistingElements.Text = "Insert Drop Statements in the Script";
276 ············this.toolTip1.SetToolTip(this.chkDropExistingElements, "If checked, NDO generates instructions to remove existing tables and constraints." +
277 ········"");
278 ············//
279 ············// chkGenerateFkConstraints
280 ············//
281 ············this.chkGenerateFkConstraints.Location = new System.Drawing.Point(13, 152);
282 ············this.chkGenerateFkConstraints.Name = "chkGenerateFkConstraints";
283 ············this.chkGenerateFkConstraints.Size = new System.Drawing.Size(235, 21);
284 ············this.chkGenerateFkConstraints.TabIndex = 23;
285 ············this.chkGenerateFkConstraints.Text = "Generate Foreign Key Constraints";
286 ············this.toolTip1.SetToolTip(this.chkGenerateFkConstraints, "If checked, NDO generates foreign key constraints for the relations in the databa" +
287 ········"se.");
288 ············//
289 ············// chkIncludeTypecodes
290 ············//
291 ············this.chkIncludeTypecodes.Location = new System.Drawing.Point(13, 177);
292 ············this.chkIncludeTypecodes.Name = "chkIncludeTypecodes";
293 ············this.chkIncludeTypecodes.Size = new System.Drawing.Size(235, 21);
294 ············this.chkIncludeTypecodes.TabIndex = 22;
295 ············this.chkIncludeTypecodes.Text = "Include Typecodes in the Script";
296 ············this.toolTip1.SetToolTip(this.chkIncludeTypecodes, "If checked, NDO generates instructions to build an additional table with the type" +
297 ········" code information.");
298 ············//
299 ············// radioDefaultEncoding
300 ············//
301 ············this.radioDefaultEncoding.Location = new System.Drawing.Point(13, 121);
302 ············this.radioDefaultEncoding.Name = "radioDefaultEncoding";
303 ············this.radioDefaultEncoding.Size = new System.Drawing.Size(140, 20);
304 ············this.radioDefaultEncoding.TabIndex = 21;
305 ············this.radioDefaultEncoding.Text = "Default Encoding";
306 ············this.toolTip1.SetToolTip(this.radioDefaultEncoding, "Check this option, if the script files should use windows encoding.");
307 ············//
308 ············// radioUtf8Encoding
309 ············//
310 ············this.radioUtf8Encoding.Checked = true;
311 ············this.radioUtf8Encoding.Location = new System.Drawing.Point(13, 99);
312 ············this.radioUtf8Encoding.Name = "radioUtf8Encoding";
313 ············this.radioUtf8Encoding.Size = new System.Drawing.Size(140, 21);
314 ············this.radioUtf8Encoding.TabIndex = 20;
315 ············this.radioUtf8Encoding.TabStop = true;
316 ············this.radioUtf8Encoding.Text = "UTF-8 Encoding";
317 ············this.toolTip1.SetToolTip(this.radioUtf8Encoding, "Check this option, if the script files should be UTF-8 encoded.");
318 ············//
319 ············// cbSqlDialect
320 ············//
321 ············this.cbSqlDialect.Location = new System.Drawing.Point(13, 70);
322 ············this.cbSqlDialect.Name = "cbSqlDialect";
323 ············this.cbSqlDialect.Size = new System.Drawing.Size(220, 21);
324 ············this.cbSqlDialect.TabIndex = 18;
325 ············this.toolTip1.SetToolTip(this.cbSqlDialect, "Choose an available NDO provider.");
326 ············this.cbSqlDialect.SelectedIndexChanged += new System.EventHandler(this.cbSqlDialect_SelectedIndexChanged);
327 ············//
328 ············// chkGenerateSQLScript
329 ············//
330 ············this.chkGenerateSQLScript.Location = new System.Drawing.Point(13, 21);
331 ············this.chkGenerateSQLScript.Name = "chkGenerateSQLScript";
332 ············this.chkGenerateSQLScript.Size = new System.Drawing.Size(187, 21);
333 ············this.chkGenerateSQLScript.TabIndex = 13;
334 ············this.chkGenerateSQLScript.Text = "Generate SQL Script";
335 ············this.toolTip1.SetToolTip(this.chkGenerateSQLScript, "If checked, NDO will create a script with DDL code, which can be used to construc" +
336 ········"t a database structure.");
337 ············this.chkGenerateSQLScript.CheckedChanged += new System.EventHandler(this.chkGenerateSQLScript_CheckedChanged);
338 ············//
339 ············// chkUseTimeStamps
340 ············//
341 ············this.chkUseTimeStamps.Location = new System.Drawing.Point(21, 153);
342 ············this.chkUseTimeStamps.Name = "chkUseTimeStamps";
343 ············this.chkUseTimeStamps.Size = new System.Drawing.Size(302, 20);
344 ············this.chkUseTimeStamps.TabIndex = 42;
345 ············this.chkUseTimeStamps.Text = "Generate Time Stamp Columns for each class";
346 ············this.toolTip1.SetToolTip(this.chkUseTimeStamps, "Check this option, if all tables should be protected by collistion detection.");
347 ············//
348 ············// chkChangeEvents
349 ············//
350 ············this.chkChangeEvents.Location = new System.Drawing.Point(21, 179);
351 ············this.chkChangeEvents.Name = "chkChangeEvents";
352 ············this.chkChangeEvents.Size = new System.Drawing.Size(302, 21);
353 ············this.chkChangeEvents.TabIndex = 41;
354 ············this.chkChangeEvents.Text = "Generate change events with Add Accessor";
355 ············this.toolTip1.SetToolTip(this.chkChangeEvents, "Check this option, if you intend to bind the UI directly to the accessor properti" +
356 ········"es of your persistent classes.");
357 ············//
358 ············// btnConnString
359 ············//
360 ············this.btnConnString.Location = new System.Drawing.Point(538, 313);
361 ············this.btnConnString.Name = "btnConnString";
362 ············this.btnConnString.Size = new System.Drawing.Size(42, 21);
363 ············this.btnConnString.TabIndex = 38;
364 ············this.btnConnString.Text = "...";
365 ············this.toolTip1.SetToolTip(this.btnConnString, "Enter existing database connection");
366 ············this.btnConnString.Click += new System.EventHandler(this.btnConnString_Click);
367 ············//
368 ············// btnPresetLibrary
369 ············//
370 ············this.btnPresetLibrary.Location = new System.Drawing.Point(21, 385);
371 ············this.btnPresetLibrary.Name = "btnPresetLibrary";
372 ············this.btnPresetLibrary.Size = new System.Drawing.Size(100, 39);
373 ············this.btnPresetLibrary.TabIndex = 36;
374 ············this.btnPresetLibrary.Text = "Preset for Library";
375 ············this.toolTip1.SetToolTip(this.btnPresetLibrary, "Selects all settings necessary for projects containing persistent types.");
376 ············this.btnPresetLibrary.Click += new System.EventHandler(this.btnPresetLibrary_Click);
377 ············//
378 ············// chkMappingNew
379 ············//
380 ············this.chkMappingNew.Location = new System.Drawing.Point(21, 99);
381 ············this.chkMappingNew.Name = "chkMappingNew";
382 ············this.chkMappingNew.Size = new System.Drawing.Size(272, 21);
383 ············this.chkMappingNew.TabIndex = 34;
384 ············this.chkMappingNew.Text = "Always Generate a new mapping File";
385 ············this.toolTip1.SetToolTip(this.chkMappingNew, "Choose this options, if NDO should discard and rebuild all mapping information.");
386 ············//
387 ············// chkActivateEnhancer
388 ············//
389 ············this.chkActivateEnhancer.Location = new System.Drawing.Point(21, 46);
390 ············this.chkActivateEnhancer.Name = "chkActivateEnhancer";
391 ············this.chkActivateEnhancer.Size = new System.Drawing.Size(188, 20);
392 ············this.chkActivateEnhancer.TabIndex = 33;
393 ············this.chkActivateEnhancer.Text = "Activate enhancer";
394 ············this.toolTip1.SetToolTip(this.chkActivateEnhancer, "Choose this option, if your project contains persistent types.");
395 ············//
396 ············// chkActivateAddIn
397 ············//
398 ············this.chkActivateAddIn.Location = new System.Drawing.Point(21, 19);
399 ············this.chkActivateAddIn.Name = "chkActivateAddIn";
400 ············this.chkActivateAddIn.Size = new System.Drawing.Size(188, 21);
401 ············this.chkActivateAddIn.TabIndex = 32;
402 ············this.chkActivateAddIn.Text = "Activate NDO AddIn";
403 ············this.toolTip1.SetToolTip(this.chkActivateAddIn, "Choose this options, if your project contains or references persistent types.");
404 ············this.chkActivateAddIn.Click += new System.EventHandler(this.chkActivateAddIn_CheckedChanged);
405 ············//
406 ············// tabControl
407 ············//
408 ············this.tabControl.Controls.Add(this.tabPageGeneral);
409 ············this.tabControl.Controls.Add(this.tabPageAssemblies);
410 ············this.tabControl.Dock = System.Windows.Forms.DockStyle.Top;
411 ············this.tabControl.Location = new System.Drawing.Point(0, 0);
412 ············this.tabControl.Name = "tabControl";
413 ············this.tabControl.SelectedIndex = 0;
414 ············this.tabControl.Size = new System.Drawing.Size(661, 374);
415 ············this.tabControl.TabIndex = 0;
416 ············//
417 ············// tabPageGeneral
418 ············//
419 ············this.tabPageGeneral.Controls.Add(this.txtTargetMappingFileName);
420 ············this.tabPageGeneral.Controls.Add(this.label1);
421 ············this.tabPageGeneral.Controls.Add(this.chkVerboseMode);
422 ············this.tabPageGeneral.Controls.Add(this.txtSchemaVersion);
423 ············this.tabPageGeneral.Controls.Add(this.label5);
424 ············this.tabPageGeneral.Controls.Add(this.btnNewDatabase);
425 ············this.tabPageGeneral.Controls.Add(this.txtDbOwner);
426 ············this.tabPageGeneral.Controls.Add(this.txtConnectionString);
427 ············this.tabPageGeneral.Controls.Add(this.label3);
428 ············this.tabPageGeneral.Controls.Add(this.groupBox1);
429 ············this.tabPageGeneral.Controls.Add(this.chkUseTimeStamps);
430 ············this.tabPageGeneral.Controls.Add(this.chkChangeEvents);
431 ············this.tabPageGeneral.Controls.Add(this.label2);
432 ············this.tabPageGeneral.Controls.Add(this.btnConnString);
433 ············this.tabPageGeneral.Controls.Add(this.chkMappingNew);
434 ············this.tabPageGeneral.Controls.Add(this.chkActivateEnhancer);
435 ············this.tabPageGeneral.Controls.Add(this.chkActivateAddIn);
436 ············this.tabPageGeneral.Location = new System.Drawing.Point(4, 22);
437 ············this.tabPageGeneral.Name = "tabPageGeneral";
438 ············this.tabPageGeneral.Padding = new System.Windows.Forms.Padding(3);
439 ············this.tabPageGeneral.Size = new System.Drawing.Size(653, 348);
440 ············this.tabPageGeneral.TabIndex = 0;
441 ············this.tabPageGeneral.Text = "General";
442 ············this.tabPageGeneral.UseVisualStyleBackColor = true;
443 ············//
444 ············// txtTargetMappingFileName
445 ············//
446 ············this.txtTargetMappingFileName.Location = new System.Drawing.Point(145, 245);
447 ············this.txtTargetMappingFileName.Name = "txtTargetMappingFileName";
448 ············this.txtTargetMappingFileName.Size = new System.Drawing.Size(160, 20);
449 ············this.txtTargetMappingFileName.TabIndex = 53;
450 ············//
451 ············// label1
452 ············//
453 ············this.label1.Location = new System.Drawing.Point(18, 246);
454 ············this.label1.Name = "label1";
455 ············this.label1.Size = new System.Drawing.Size(121, 21);
456 ············this.label1.TabIndex = 52;
457 ············this.label1.Text = "Mapping File Name";
458 ············//
459 ············// txtSchemaVersion
460 ············//
461 ············this.txtSchemaVersion.Location = new System.Drawing.Point(145, 219);
462 ············this.txtSchemaVersion.Name = "txtSchemaVersion";
463 ············this.txtSchemaVersion.Size = new System.Drawing.Size(160, 20);
464 ············this.txtSchemaVersion.TabIndex = 50;
465 ············//
466 ············// label5
467 ············//
468 ············this.label5.Location = new System.Drawing.Point(18, 220);
469 ············this.label5.Name = "label5";
470 ············this.label5.Size = new System.Drawing.Size(121, 21);
471 ············this.label5.TabIndex = 49;
472 ············this.label5.Text = "Schema Version";
473 ············//
474 ············// label3
475 ············//
476 ············this.label3.Location = new System.Drawing.Point(18, 128);
477 ············this.label3.Name = "label3";
478 ············this.label3.Size = new System.Drawing.Size(127, 21);
479 ············this.label3.TabIndex = 44;
480 ············this.label3.Text = "Owner / Schema Name";
481 ············//
482 ············// groupBox1
483 ············//
484 ············this.groupBox1.Controls.Add(this.btnInstallProvider);
485 ············this.groupBox1.Controls.Add(this.chkDropExistingElements);
486 ············this.groupBox1.Controls.Add(this.chkGenerateFkConstraints);
487 ············this.groupBox1.Controls.Add(this.chkIncludeTypecodes);
488 ············this.groupBox1.Controls.Add(this.radioDefaultEncoding);
489 ············this.groupBox1.Controls.Add(this.radioUtf8Encoding);
490 ············this.groupBox1.Controls.Add(this.label4);
491 ············this.groupBox1.Controls.Add(this.cbSqlDialect);
492 ············this.groupBox1.Controls.Add(this.chkGenerateSQLScript);
493 ············this.groupBox1.Location = new System.Drawing.Point(343, 21);
494 ············this.groupBox1.Name = "groupBox1";
495 ············this.groupBox1.Size = new System.Drawing.Size(265, 244);
496 ············this.groupBox1.TabIndex = 43;
497 ············this.groupBox1.TabStop = false;
498 ············this.groupBox1.Text = " SQL ";
499 ············//
500 ············// btnInstallProvider
501 ············//
502 ············this.btnInstallProvider.Location = new System.Drawing.Point(142, 102);
503 ············this.btnInstallProvider.Name = "btnInstallProvider";
504 ············this.btnInstallProvider.Size = new System.Drawing.Size(91, 22);
505 ············this.btnInstallProvider.TabIndex = 25;
506 ············this.btnInstallProvider.Text = "Install Provider";
507 ············this.btnInstallProvider.UseVisualStyleBackColor = true;
508 ············this.btnInstallProvider.Click += new System.EventHandler(this.btnInstallProvider_Click);
509 ············//
510 ············// label4
511 ············//
512 ············this.label4.Location = new System.Drawing.Point(13, 50);
513 ············this.label4.Name = "label4";
514 ············this.label4.Size = new System.Drawing.Size(200, 17);
515 ············this.label4.TabIndex = 19;
516 ············this.label4.Text = "SQL Dialect";
517 ············//
518 ············// label2
519 ············//
520 ············this.label2.Location = new System.Drawing.Point(18, 292);
521 ············this.label2.Name = "label2";
522 ············this.label2.Size = new System.Drawing.Size(360, 21);
523 ············this.label2.TabIndex = 40;
524 ············this.label2.Text = "Default Connection String";
525 ············//
526 ············// tabPageAssemblies
527 ············//
528 ············this.tabPageAssemblies.Controls.Add(this.label6);
529 ············this.tabPageAssemblies.Controls.Add(this.chlbAssemblies);
530 ············this.tabPageAssemblies.Location = new System.Drawing.Point(4, 22);
531 ············this.tabPageAssemblies.Name = "tabPageAssemblies";
532 ············this.tabPageAssemblies.Padding = new System.Windows.Forms.Padding(3);
533 ············this.tabPageAssemblies.Size = new System.Drawing.Size(653, 348);
534 ············this.tabPageAssemblies.TabIndex = 1;
535 ············this.tabPageAssemblies.Text = "Assemblies";
536 ············this.tabPageAssemblies.UseVisualStyleBackColor = true;
537 ············//
538 ············// label6
539 ············//
540 ············this.label6.AutoSize = true;
541 ············this.label6.Location = new System.Drawing.Point(10, 12);
542 ············this.label6.Name = "label6";
543 ············this.label6.Size = new System.Drawing.Size(328, 13);
544 ············this.label6.TabIndex = 1;
545 ············this.label6.Text = "Choose Assemblies which should be analyzed by the NDOEnhancer";
546 ············//
547 ············// chlbAssemblies
548 ············//
549 ············this.chlbAssemblies.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
550 ············| System.Windows.Forms.AnchorStyles.Left)
551 ············| System.Windows.Forms.AnchorStyles.Right)));
552 ············this.chlbAssemblies.FormattingEnabled = true;
553 ············this.chlbAssemblies.Location = new System.Drawing.Point(10, 39);
554 ············this.chlbAssemblies.Name = "chlbAssemblies";
555 ············this.chlbAssemblies.Size = new System.Drawing.Size(631, 289);
556 ············this.chlbAssemblies.TabIndex = 0;
557 ············this.chlbAssemblies.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.chlbAssemblies_ItemCheck);
558 ············//
559 ············// btnOK
560 ············//
561 ············this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
562 ············this.btnOK.Location = new System.Drawing.Point(363, 385);
563 ············this.btnOK.Name = "btnOK";
564 ············this.btnOK.Size = new System.Drawing.Size(100, 39);
565 ············this.btnOK.TabIndex = 37;
566 ············this.btnOK.Text = "OK";
567 ············this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
568 ············//
569 ············// btnCancel
570 ············//
571 ············this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
572 ············this.btnCancel.Location = new System.Drawing.Point(477, 385);
573 ············this.btnCancel.Name = "btnCancel";
574 ············this.btnCancel.Size = new System.Drawing.Size(100, 39);
575 ············this.btnCancel.TabIndex = 35;
576 ············this.btnCancel.Text = "Cancel";
577 ············//
578 ············// ConfigurationDialog
579 ············//
580 ············this.AutoScaleMode = AutoScaleMode.Font;
581 ············this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
582 ············this.CancelButton = this.btnCancel;
583 ············this.ClientSize = new System.Drawing.Size(661, 439);
584 ············this.Controls.Add(this.btnSaveAs);
585 ············this.Controls.Add(this.btnPresetApp);
586 ············this.Controls.Add(this.btnOK);
587 ············this.Controls.Add(this.btnPresetLibrary);
588 ············this.Controls.Add(this.btnCancel);
589 ············this.Controls.Add(this.tabControl);
590 ············this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
591 ············this.Name = "ConfigurationDialog";
592 ············this.Text = "NDO Configuration";
593 ············this.Load += new System.EventHandler(this.ConfigurationDialog_Load);
594 ············this.tabControl.ResumeLayout(false);
595 ············this.tabPageGeneral.ResumeLayout(false);
596 ············this.tabPageGeneral.PerformLayout();
597 ············this.groupBox1.ResumeLayout(false);
598 ············this.tabPageAssemblies.ResumeLayout(false);
599 ············this.tabPageAssemblies.PerformLayout();
600 ············this.ResumeLayout(false);
601
602 ········}
603 ········#endregion
604
605 ········private void chkActivateAddIn_CheckedChanged(object sender, System.EventArgs e)
606 ········{
607 ············EnableAddin(this.chkActivateAddIn.Checked);
608 ········}
609
610
611 ········void EnableAddin(bool enabled)
612 ········{
613 ············if (project.Kind == "{E24C65DC-7377-472b-9ABA-BC803B73C61A}")
614 ················chkActivateEnhancer.Enabled = false;
615 ············else
616 ················chkActivateEnhancer.Enabled = enabled;
617 ········}
618
619 ········private void ConfigurationDialog_Load(object sender, System.EventArgs e)
620 ········{
621 ············try
622 ············{
623 ················ConfigurationOptions options = new ConfigurationOptions(project);
624 ················this.Text = "NDO Configuration - " + project.Name;
625 ················chkIncludeTypecodes.Checked = options.IncludeTypecodes;
626 ················chkDropExistingElements.Checked = options.DropExistingElements;
627 ················chkGenerateFkConstraints.Checked = options.GenerateConstraints;
628 ················chkVerboseMode.Checked = options.VerboseMode;
629 ················chkChangeEvents.Checked = options.GenerateChangeEvents;
630 ················chkActivateAddIn.Checked = options.EnableAddIn;
631 ················chkActivateEnhancer.Checked = options.EnableEnhancer;
632 ················chkMappingNew.Checked = options.NewMapping;
633 ················if (chkActivateAddIn.Checked == false)
634 ····················EnableAddin(false);
635 ················chkGenerateSQLScript.Checked = options.GenerateSQL;
636 ················txtSchemaVersion.Text = options.SchemaVersion;
637 ················if (string.IsNullOrEmpty(txtSchemaVersion.Text))
638 ····················txtSchemaVersion.Text = "1.0";
639 ················this.chkUseTimeStamps.Checked = options.UseTimeStamps;
640 ················int i = 0;
641 ················this.cbSqlDialect.Items.Clear();
642 ················int currentDialectIndex = -1;
643
644 ················foreach (string s in NdoUIProviderFactory.Instance.Keys)
645 ················{
646 ····················this.cbSqlDialect.Items.Add( s );
647 ····················if (options.SQLScriptLanguage == s)
648 ························currentDialectIndex = i;
649 ····················i++;
650 ················}
651 ················if (currentDialectIndex > -1)
652 ····················cbSqlDialect.SelectedIndex = currentDialectIndex;
653
654 ················// Must be initialized after changing the cbSqlDialect index
655 ················txtConnectionString.Text = options.DefaultConnection;
656 ················txtTargetMappingFileName.Text = options.TargetMappingFileName;
657 ················txtDbOwner.Text = options.DatabaseOwner;
658 ················chkActivateAddIn_CheckedChanged(null, EventArgs.Empty);
659 ················chkGenerateSQLScript_CheckedChanged(null, EventArgs.Empty);
660 ················if (options.Utf8Encoding)
661 ····················radioUtf8Encoding.Checked = true;
662 ················else
663 ····················radioDefaultEncoding.Checked = true;
664 ················if (project.Kind == "{E24C65DC-7377-472b-9ABA-BC803B73C61A}")
665 ····················this.chkActivateEnhancer.Enabled = false;
666
667 ················CheckEnabledStateForLoadProviderButton();
668 ············}
669 ············catch (Exception ex)
670 ············{
671 #if !DEBUG
672 ················MessageBox.Show(ex.Message, "NDO Configuration");
673 #else
674 ················MessageBox.Show(ex.ToString(), "NDO Configuration");
675 #endif
676 ············}
677 ········}
678
679 ········private void btnPresetLibrary_Click(object sender, System.EventArgs e)
680 ········{
681 //············ConfigurationOptions options = new ConfigurationOptions( project );
682 ············try
683 ············{
684 ················EnableCheckBoxes();
685
686 ················this.chkVerboseMode.Checked = false;
687 ················this.chkActivateAddIn.Checked = true;
688 ················this.chkActivateEnhancer.Checked = true;
689 ················this.chkMappingNew.Checked = false;
690 ················this.chkChangeEvents.Checked = false;
691 ················this.chkIncludeTypecodes.Checked = false;
692 ················this.chkGenerateFkConstraints.Checked = false;
693 ················this.chkDropExistingElements.Checked = false;
694 ················this.chkUseTimeStamps.Checked = false;····
695 ················this.txtDbOwner.Text = "";
696 ················this.chkGenerateSQLScript.Checked = false;
697 ················this.txtSchemaVersion.Text = "";
698 ············}
699 ············catch (Exception ex)
700 ············{
701 ················ShowError(ex);
702 ············}
703 ········}
704
705
706 ········private void btnOK_Click(object sender, System.EventArgs e)
707 ········{
708 ············try
709 ············{
710 ················ConfigurationOptions options = new ConfigurationOptions( project );
711
712 ················string connType = options.SQLScriptLanguage;
713 ················string connName = options.DefaultConnection;
714 ················WriteBack(options);
715 ················if (options.SQLScriptLanguage != connType || options.DefaultConnection != connName)
716 ················{
717 ····················string mappingFileName = this.project.MappingFilePath();
718 ····················if (mappingFileName != null)
719 ····················{
720 ························NDOMapping mapping = new NDOMapping(mappingFileName);
721 ························bool connectionExists = false;
722 ························foreach (Connection conn in mapping.Connections)
723 ························{
724 ····························if (conn.Type == options.SQLScriptLanguage && conn.Name == options.DefaultConnection)
725 ····························{
726 ································connectionExists = true;
727 ································break;
728 ····························}
729 ························}
730 ························if (!connectionExists)
731 ························{
732 ····························if (MessageBox.Show("The database connection settings have been changed. Should NDO change the connection settings in the mapping file " + Path.GetFileName(mappingFileName) + " too?", "NDO Configuration", MessageBoxButtons.YesNo) == DialogResult.Yes)
733 ····························{
734 ································Connection conn = null;
735 ································if (mapping.Connections.Count() == 1)
736 ································{
737 ····································conn = (Connection)mapping.Connections.FirstOrDefault();
738 ································}
739 ································else
740 ································{
741 ····································conn = mapping.NewConnection(String.Empty, String.Empty);
742 ····································MessageBox.Show("Added a connection with the ID " + conn.ID, "NDO Configuration");
743 ································}
744 ································conn.Type = options.SQLScriptLanguage;
745 ································conn.Name = options.DefaultConnection;
746 ································mapping.Save();
747 ····························}
748 ························}
749 ····················}
750 ················}
751
752 ················if ( options.EnableAddIn )
753 ················{
754 ····················GeneratePackageReference();
755 ················}
756
757 ················ThreadHelper.JoinableTaskFactory.Run( async () => await options.SaveAsync( this.projectDescription ) );
758 ················
759 ············}
760 ············catch (Exception ex)
761 ············{
762 #if DEBUG
763 ················MessageBox.Show( "The following error occured while saving your options: " + ex.ToString(), "NDO Add-in" );
764 #else
765 ················MessageBox.Show("The following error occured while saving your options: " + ex.Message, "NDO Add-in");
766 #endif
767 ············}
768 ········}
769
770
771 ········void GeneratePackageReference()
772 ········{
773 ············try
774 ············{
775 ················IComponentModel componentModel;
776 ················var installerService = GetInstallerService( out componentModel );
777
778 ················if (!installerService.IsPackageInstalled( this.project, "ndo.dll" ))
779 ················{
780 ····················var installer = componentModel.GetService<IVsPackageInstaller>();
781 ····················// The newest version of NDO will be v5.x at the time, this package is released.
782 ····················// NDO5 needs the NDO.build package in all use cases.
783 ····················// If the enhancer is not to be used, uninstalling ndo.build is sufficient
784 ····················// because it will only be reinstalled if the NDO.dll package is missing.
785 ····················installer.InstallPackage( null, this.project, "NDO.dll", (string)null, false );
786 ····················installer.InstallPackage( null, this.project, "NDO.build", (string) null, false );
787 ················}
788 ············}
789 ············catch (Exception ex)
790 ············{
791 ················MessageBox.Show( "Error while installing the ndo.dll package: " + ex.ToString() );
792 ············}
793 ········}
794
795 ········private static IVsPackageInstallerServices GetInstallerService( out IComponentModel componentModel )
796 ········{
797 ············componentModel = (IComponentModel)Package.GetGlobalService( typeof( SComponentModel ) );
798 ············var installerService = componentModel.GetService<IVsPackageInstallerServices>();
799 ············return installerService;
800 ········}
801
802 ········void ShowError(Exception ex)
803 ········{
804 ············MessageBox.Show("The following error occured: " + ex.Message, "NDO Add-in");
805 ········}
806
807 ········private void btnConnString_Click(object sender, System.EventArgs e)
808 ········{
809 ············try
810 ············{
811 ················string connType = cbSqlDialect.Text;
812 ················if (connType == string.Empty)
813 ····················connType = "SqlServer";
814 ················var provider = NdoUIProviderFactory.Instance[connType];
815 ················if (provider == null)
816 ················{
817 ····················MessageBox.Show("Can't find a NDO UI provider for the sql dialect " + connType);
818 ····················return;
819 ················}
820
821 ················string temp = this.txtConnectionString.Text;
822 ················NdoDialogResult r = provider.ShowConnectionDialog(ref temp);
823 ················if (r == NdoDialogResult.Cancel)
824 ····················return;
825 ················this.txtConnectionString.Text = temp;
826 ············}
827 ············catch (Exception ex)
828 ············{
829 ················ShowError(ex);
830 ············}
831 ········}
832
833
834 ········private void chkGenerateSQLScript_CheckedChanged(object sender, System.EventArgs e)
835 ········{
836 ············bool genSql = this.chkGenerateSQLScript.Checked;
837
838 ············this.cbSqlDialect.Enabled = genSql;
839 ············this.chkIncludeTypecodes.Enabled = genSql;
840 ············this.chkDropExistingElements.Enabled = genSql;
841 ············this.chkGenerateFkConstraints.Enabled = genSql;
842 ············this.radioUtf8Encoding.Enabled = genSql;
843 ············this.radioDefaultEncoding.Enabled = genSql;
844 ········}
845
846 ········private void EnableCheckBoxes()
847 ········{
848 ············foreach(Control c in this.Controls)
849 ············{
850 ················CheckBox cb = c as CheckBox;
851 ················if (c == null)
852 ····················continue;
853 ················c.Enabled = true;
854 ············}
855 ············if (this.project.Kind == "{E24C65DC-7377-472b-9ABA-BC803B73C61A}")
856 ················this.chkActivateEnhancer.Enabled = false;
857 ········}
858
859 ········private void btnPresetApp_Click(object sender, System.EventArgs e)
860 ········{
861 ············try
862 ············{
863 ················EnableCheckBoxes();
864 ················this.chkVerboseMode.Checked = false;
865 ················this.chkActivateAddIn.Checked = true;
866 ················this.chkActivateEnhancer.Checked = false;
867 ················this.chkMappingNew.Checked = false;
868 ················this.chkGenerateSQLScript.Checked = true;
869 ················this.chkChangeEvents.Checked = false;
870 ················this.chkIncludeTypecodes.Checked = false;
871 ················this.chkDropExistingElements.Checked = false;
872 ················this.chkGenerateFkConstraints.Checked = false;
873 ················this.txtConnectionString.Text = "";
874 ················this.chkUseTimeStamps.Checked = false;
875 ················this.txtDbOwner.Text = "";
876 ················this.txtSchemaVersion.Text = "1.0";
877 ················if (this.txtConnectionString.Text == string.Empty)
878 ····················this.btnConnString_Click(null, null);
879 ············}
880 ············catch (Exception ex)
881 ············{
882 ················ShowError(ex);
883 ············}
884 ········}
885
886 //········private void MakeNode(string name, object value, XmlNode parentNode, XmlDocument doc)
887 //········{
888 //············XmlElement el = doc.CreateElement(name);
889 //············parentNode.AppendChild(el);
890 //············if (value != null)
891 //················el.InnerText = value.ToString();
892 //········}
893
894 ········void WriteBack(ConfigurationOptions options)
895 ········{
896 ············options.EnableAddIn = chkActivateAddIn.Checked;
897 ············options.EnableEnhancer = chkActivateEnhancer.Checked;
898 ············options.IncludeTypecodes = chkIncludeTypecodes.Checked;
899 ············options.GenerateConstraints = chkGenerateFkConstraints.Checked;
900 ············options.DropExistingElements = chkDropExistingElements.Checked;
901 ············options.VerboseMode = chkVerboseMode.Checked;
902 ············options.NewMapping = chkMappingNew.Checked;
903 ············options.GenerateSQL = chkGenerateSQLScript.Checked;
904 ············options.DefaultConnection = txtConnectionString.Text;
905 ············options.TargetMappingFileName = txtTargetMappingFileName.Text;
906 ············options.GenerateChangeEvents = chkChangeEvents.Checked;
907 ············options.UseTimeStamps = chkUseTimeStamps.Checked;
908 ············options.SQLScriptLanguage = this.cbSqlDialect.Text;
909 ············options.DatabaseOwner = this.txtDbOwner.Text;
910 ············options.Utf8Encoding = this.radioUtf8Encoding.Checked;
911 ············options.SchemaVersion = this.txtSchemaVersion.Text;
912 ········}
913
914 ········private void btnSaveAs_Click(object sender, System.EventArgs e)
915 ········{
916 ············try
917 ············{
918 ················string projDir = Path.GetDirectoryName(project.FullName);
919 ················SaveFileDialog sfd = new SaveFileDialog();
920 ················sfd.CheckFileExists = false;
921 ················sfd.DefaultExt = "xml";
922 ················sfd.Filter = "NDO Configuration Files (*.ndoproj)|*.ndoproj";
923 ················sfd.FileName = "EnhancerParameters.ndoproj";
924 ················sfd.InitialDirectory = projDir;
925 ················if (sfd.ShowDialog(this) != DialogResult.OK)
926 ····················return;
927
928 ················ConfigurationOptions options = new ConfigurationOptions(project);················
929 ················WriteBack(options);
930 ················options.SaveAs(sfd.FileName, this.projectDescription);
931 ············}
932 ············catch (Exception ex)
933 ············{
934 ················ShowError(ex);
935 ············}········
936 ········}
937
938 ········private void cbSqlDialect_SelectedIndexChanged(object sender, System.EventArgs e)
939 ········{
940 ············this.txtConnectionString.Text = string.Empty;
941 ············CheckEnabledStateForLoadProviderButton();
942 ········}
943
944 ········private void btnNewDatabase_Click(object sender, System.EventArgs e)
945 ········{
946 ············string connType = cbSqlDialect.Text;
947 ············if (connType == string.Empty)
948 ················connType = "SqlServer";
949 ············IDbUISupport provider = NdoUIProviderFactory.Instance[connType];
950 ············if (provider == null)
951 ············{
952 ················MessageBox.Show("Can't find a NDO UI provider for the sql dialect " + connType);
953 ················return;
954 ············}
955 ············object necessaryData = null;
956 ············try
957 ············{
958 ················if (provider.ShowCreateDbDialog(ref necessaryData) == NdoDialogResult.Cancel)
959 ····················return;
960 ················this.txtConnectionString.Text = provider.CreateDatabase(necessaryData);
961 ············}
962 ············catch (Exception ex)
963 ············{
964 #if !DEBUG
965 ················MessageBox.Show("Can't construct the database: " + ex.Message);
966 #else
967 ················MessageBox.Show("Can't construct the database: " + ex.ToString());
968 #endif
969 ············}
970 ········}
971
972 ········private void chlbAssemblies_ItemCheck( object sender, ItemCheckEventArgs e )
973 ········{
974 ············this.references[e.Index].CheckState = e.NewValue;
975 ········}
976
977 ········private void btnInstallProvider_Click( object sender, EventArgs e )
978 ········{
979 ············try
980 ············{
981 ················string providerName = this.cbSqlDialect.Text;
982
983 ················if (string.IsNullOrEmpty( providerName ))
984 ················{
985 ····················MessageBox.Show( "Please choose a provider" );
986 ····················return;
987 ················}
988
989 ················IComponentModel componentModel;
990 ················var installerService = GetInstallerService( out componentModel );
991
992 ················string packageName = $"ndo.{providerName.ToLower()}";
993 ················if (!installerService.IsPackageInstalled( this.project, packageName ))
994 ················{
995 ····················var installer = componentModel.GetService<IVsPackageInstaller>();
996 ····················installer.InstallPackage( null, this.project, packageName, (string)null, false );
997 ················}
998
999 ················this.btnInstallProvider.Enabled = false;
1000 ············}
1001 ············catch (Exception ex)
1002 ············{
1003 ················MessageBox.Show( "Error while installing the ndo.dll package: " + ex.ToString() );
1004 ············}
1005 ········}
1006 ····}
1007 }
1008
1009 #pragma warning restore VSTHRD010 // Invoke single-threaded types on Main thread
1010
New Commit (5192672)
1 //
2 // Copyright (c) 2002-2019 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.Linq;
25 using System.IO;
26 using System.Windows.Forms;
27 using MessageBox = System.Windows.Forms.MessageBox;
28 using Project = EnvDTE.Project;
29 using System.Diagnostics;
30 using Microsoft.VisualStudio.ComponentModelHost;
31 using NuGet.VisualStudio;
32 using NDO.UISupport;
33 using System.Drawing;
34 using WinForms.FontSize;
35
36 #pragma warning disable VSTHRD010 // Invoke single-threaded types on Main thread
37
38 namespace NDOVsPackage
39 {
40 ····/// <summary>
41 ····/// Summary description for ConfigurationDialog.
42 ····/// </summary>
43 ····internal class ConfigurationDialog : System.Windows.Forms.Form
44 ····{
45 ········private System.ComponentModel.IContainer components;
46
47 ········private Project project;
48 ········private System.Windows.Forms.ToolTip toolTip1;
49 ········private TabControl tabControl;
50 ········private TabPage tabPageGeneral;
51 ········private TextBox txtTargetMappingFileName;
52 ········private Label label1;
53 ········private CheckBox chkVerboseMode;
54 ········private TextBox txtSchemaVersion;
55 ········private Label label5;
56 ········private Button btnNewDatabase;
57 ········private Button btnSaveAs;
58 ········private Button btnPresetApp;
59 ········private TextBox txtDbOwner;
60 ········private TextBox txtConnectionString;
61 ········private Label label3;
62 ········private GroupBox groupBox1;
63 ········private CheckBox chkDropExistingElements;
64 ········private CheckBox chkGenerateFkConstraints;
65 ········private CheckBox chkIncludeTypecodes;
66 ········private RadioButton radioDefaultEncoding;
67 ········private RadioButton radioUtf8Encoding;
68 ········private Label label4;
69 ········private ComboBox cbSqlDialect;
70 ········private CheckBox chkGenerateSQLScript;
71 ········private CheckBox chkUseTimeStamps;
72 ········private CheckBox chkChangeEvents;
73 ········private Label label2;
74 ········private Button btnConnString;
75 ········private Button btnOK;
76 ········private Button btnPresetLibrary;
77 ········private Button btnCancel;
78 ········private CheckBox chkMappingNew;
79 ········private CheckBox chkActivateEnhancer;
80 ········private CheckBox chkActivateAddIn;
81 ········private TabPage tabPageAssemblies;
82 ········private Label label6;
83 ········private CheckedListBox chlbAssemblies;
84 ········private ProjectDescription projectDescription;
85 ········private Button btnInstallProvider;
86 ········private NDOReference[] references;
87
88 ········public ConfigurationDialog(Project project, ProjectDescription projectDescription)
89 ········{
90 ············try
91 ············{
92 ················this.project = project;
93 ················this.projectDescription = projectDescription;
94 ················this.projectDescription.BuildReferences();
95 ················this.projectDescription.FixDllState();
96 ················InitializeComponent();
97
98 // Calculate the new font size after InitializeComponent
99 ················var newFontSize = FontCalculator.Calculate(Screen.FromControl(this), Font.Size);
100 ················if (newFontSize > Font.Size)
101 ····················Font = new Font( Font.FontFamily, newFontSize, FontStyle.Regular, GraphicsUnit.Point, 0 );
102
103 ················var lbAssemblies = (ListBox)this.chlbAssemblies;
104 ················this.references = projectDescription.References.Values.ToArray();
105 ················lbAssemblies.DataSource = this.references;
106 ················lbAssemblies.DisplayMember = nameof( NDOReference.Name );
107 ················lbAssemblies.ValueMember = nameof( NDOReference.CheckState );
108 ················int i = 0;
109 ················foreach (var item in this.references)
110 ················{
111 ····················this.chlbAssemblies.SetItemCheckState( i++, item.CheckState );
112 ················}
113 ············}
114 ············catch (Exception ex)
115 ············{
116 ················Debug.WriteLine( ex.ToString() );
117 ············}
118 ········}
119
120 ········void CheckEnabledStateForLoadProviderButton()
121 ········{
122 ············string providerName = this.cbSqlDialect.Text;
123
124 ············if (string.IsNullOrEmpty( providerName ))
125 ············{
126 ················this.btnInstallProvider.Enabled = false;
127 ················return;
128 ············}
129
130 ············if (IsProviderInstalled(providerName))
131 ············{
132 ················this.btnInstallProvider.Enabled = false;
133 ················return;
134 ············}
135
136 ············this.btnInstallProvider.Enabled = true;
137 ········}
138
139 ········bool IsProviderInstalled(string providerName)
140 ········{
141 ············IComponentModel componentModel;
142 ············var installerService = GetInstallerService( out componentModel );
143
144 ············string packageName = $"ndo.{providerName.ToLower()}";
145 ············return installerService.IsPackageInstalled( this.project, packageName );
146 ········}
147
148 ········/// <summary>
149 ········/// Clean up any resources being used.
150 ········/// </summary>
151 ········protected override void Dispose( bool disposing )
152 ········{
153 ············if( disposing )
154 ············{
155 ················if(components != null)
156 ················{
157 ····················components.Dispose();
158 ················}
159 ············}
160 ············base.Dispose( disposing );
161 ········}
162
163 ········#region Windows Form Designer generated code
164 ········/// <summary>
165 ········/// Required method for Designer support - do not modify
166 ········/// the contents of this method with the code editor.
167 ········/// </summary>
168 ········private void InitializeComponent()
169 ········{
170 ············this.components = new System.ComponentModel.Container();
171 ············System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigurationDialog));
172 ············this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
173 ············this.chkVerboseMode = new System.Windows.Forms.CheckBox();
174 ············this.btnNewDatabase = new System.Windows.Forms.Button();
175 ············this.btnSaveAs = new System.Windows.Forms.Button();
176 ············this.btnPresetApp = new System.Windows.Forms.Button();
177 ············this.txtDbOwner = new System.Windows.Forms.TextBox();
178 ············this.txtConnectionString = new System.Windows.Forms.TextBox();
179 ············this.chkDropExistingElements = new System.Windows.Forms.CheckBox();
180 ············this.chkGenerateFkConstraints = new System.Windows.Forms.CheckBox();
181 ············this.chkIncludeTypecodes = new System.Windows.Forms.CheckBox();
182 ············this.radioDefaultEncoding = new System.Windows.Forms.RadioButton();
183 ············this.radioUtf8Encoding = new System.Windows.Forms.RadioButton();
184 ············this.cbSqlDialect = new System.Windows.Forms.ComboBox();
185 ············this.chkGenerateSQLScript = new System.Windows.Forms.CheckBox();
186 ············this.chkUseTimeStamps = new System.Windows.Forms.CheckBox();
187 ············this.chkChangeEvents = new System.Windows.Forms.CheckBox();
188 ············this.btnConnString = new System.Windows.Forms.Button();
189 ············this.btnPresetLibrary = new System.Windows.Forms.Button();
190 ············this.chkMappingNew = new System.Windows.Forms.CheckBox();
191 ············this.chkActivateEnhancer = new System.Windows.Forms.CheckBox();
192 ············this.chkActivateAddIn = new System.Windows.Forms.CheckBox();
193 ············this.tabControl = new System.Windows.Forms.TabControl();
194 ············this.tabPageGeneral = new System.Windows.Forms.TabPage();
195 ············this.txtTargetMappingFileName = new System.Windows.Forms.TextBox();
196 ············this.label1 = new System.Windows.Forms.Label();
197 ············this.txtSchemaVersion = new System.Windows.Forms.TextBox();
198 ············this.label5 = new System.Windows.Forms.Label();
199 ············this.label3 = new System.Windows.Forms.Label();
200 ············this.groupBox1 = new System.Windows.Forms.GroupBox();
201 ············this.btnInstallProvider = new System.Windows.Forms.Button();
202 ············this.label4 = new System.Windows.Forms.Label();
203 ············this.label2 = new System.Windows.Forms.Label();
204 ············this.tabPageAssemblies = new System.Windows.Forms.TabPage();
205 ············this.label6 = new System.Windows.Forms.Label();
206 ············this.chlbAssemblies = new System.Windows.Forms.CheckedListBox();
207 ············this.btnOK = new System.Windows.Forms.Button();
208 ············this.btnCancel = new System.Windows.Forms.Button();
209 ············this.tabControl.SuspendLayout();
210 ············this.tabPageGeneral.SuspendLayout();
211 ············this.groupBox1.SuspendLayout();
212 ············this.tabPageAssemblies.SuspendLayout();
213 ············this.SuspendLayout();
214 ············//
215 ············// chkVerboseMode
216 ············//
217 ············this.chkVerboseMode.Location = new System.Drawing.Point(21, 72);
218 ············this.chkVerboseMode.Name = "chkVerboseMode";
219 ············this.chkVerboseMode.Size = new System.Drawing.Size(238, 21);
220 ············this.chkVerboseMode.TabIndex = 51;
221 ············this.chkVerboseMode.Text = "Add-in Verbose Mode";
222 ············this.toolTip1.SetToolTip(this.chkVerboseMode, "Causes the Add-in and the Enhancer to show more information for debugging purpose" +
223 ········"s.");
224 ············//
225 ············// btnNewDatabase
226 ············//
227 ············this.btnNewDatabase.Location = new System.Drawing.Point(583, 313);
228 ············this.btnNewDatabase.Name = "btnNewDatabase";
229 ············this.btnNewDatabase.Size = new System.Drawing.Size(42, 21);
230 ············this.btnNewDatabase.TabIndex = 48;
231 ············this.btnNewDatabase.Text = "New";
232 ············this.toolTip1.SetToolTip(this.btnNewDatabase, "Create new database");
233 ············this.btnNewDatabase.Click += new System.EventHandler(this.btnNewDatabase_Click);
234 ············//
235 ············// btnSaveAs
236 ············//
237 ············this.btnSaveAs.DialogResult = System.Windows.Forms.DialogResult.OK;
238 ············this.btnSaveAs.Location = new System.Drawing.Point(249, 385);
239 ············this.btnSaveAs.Name = "btnSaveAs";
240 ············this.btnSaveAs.Size = new System.Drawing.Size(100, 39);
241 ············this.btnSaveAs.TabIndex = 47;
242 ············this.btnSaveAs.Text = "Save as...";
243 ············this.toolTip1.SetToolTip(this.btnSaveAs, "Save the options to be used in unattended builds with the stand-alone enhancer.");
244 ············this.btnSaveAs.Click += new System.EventHandler(this.btnSaveAs_Click);
245 ············//
246 ············// btnPresetApp
247 ············//
248 ············this.btnPresetApp.Location = new System.Drawing.Point(135, 385);
249 ············this.btnPresetApp.Name = "btnPresetApp";
250 ············this.btnPresetApp.Size = new System.Drawing.Size(100, 39);
251 ············this.btnPresetApp.TabIndex = 46;
252 ············this.btnPresetApp.Text = "Preset for Application";
253 ············this.toolTip1.SetToolTip(this.btnPresetApp, "Selects all settings used for applications which don\'t contain but reference pers" +
254 ········"istent types.");
255 ············this.btnPresetApp.Click += new System.EventHandler(this.btnPresetApp_Click);
256 ············//
257 ············// txtDbOwner
258 ············//
259 ············this.txtDbOwner.Location = new System.Drawing.Point(145, 126);
260 ············this.txtDbOwner.Name = "txtDbOwner";
261 ············this.txtDbOwner.Size = new System.Drawing.Size(160, 20);
262 ············this.txtDbOwner.TabIndex = 45;
263 ············this.toolTip1.SetToolTip(this.txtDbOwner, "Enter an owner name, if you like your tables to be written like owner.tablename.");
264 ············//
265 ············// txtConnectionString
266 ············//
267 ············this.txtConnectionString.Location = new System.Drawing.Point(18, 313);
268 ············this.txtConnectionString.Name = "txtConnectionString";
269 ············this.txtConnectionString.Size = new System.Drawing.Size(514, 20);
270 ············this.txtConnectionString.TabIndex = 39;
271 ············this.toolTip1.SetToolTip(this.txtConnectionString, "This string will be copied into the mapping file, if there doesn\'t exist a valid " +
272 ········"connection string. Otherwise it will be ignored.");
273 ············//
274 ············// chkDropExistingElements
275 ············//
276 ············this.chkDropExistingElements.Location = new System.Drawing.Point(13, 202);
277 ············this.chkDropExistingElements.Name = "chkDropExistingElements";
278 ············this.chkDropExistingElements.Size = new System.Drawing.Size(235, 21);
279 ············this.chkDropExistingElements.TabIndex = 24;
280 ············this.chkDropExistingElements.Text = "Insert Drop Statements in the Script";
281 ············this.toolTip1.SetToolTip(this.chkDropExistingElements, "If checked, NDO generates instructions to remove existing tables and constraints." +
282 ········"");
283 ············//
284 ············// chkGenerateFkConstraints
285 ············//
286 ············this.chkGenerateFkConstraints.Location = new System.Drawing.Point(13, 152);
287 ············this.chkGenerateFkConstraints.Name = "chkGenerateFkConstraints";
288 ············this.chkGenerateFkConstraints.Size = new System.Drawing.Size(235, 21);
289 ············this.chkGenerateFkConstraints.TabIndex = 23;
290 ············this.chkGenerateFkConstraints.Text = "Generate Foreign Key Constraints";
291 ············this.toolTip1.SetToolTip(this.chkGenerateFkConstraints, "If checked, NDO generates foreign key constraints for the relations in the databa" +
292 ········"se.");
293 ············//
294 ············// chkIncludeTypecodes
295 ············//
296 ············this.chkIncludeTypecodes.Location = new System.Drawing.Point(13, 177);
297 ············this.chkIncludeTypecodes.Name = "chkIncludeTypecodes";
298 ············this.chkIncludeTypecodes.Size = new System.Drawing.Size(235, 21);
299 ············this.chkIncludeTypecodes.TabIndex = 22;
300 ············this.chkIncludeTypecodes.Text = "Include Typecodes in the Script";
301 ············this.toolTip1.SetToolTip(this.chkIncludeTypecodes, "If checked, NDO generates instructions to build an additional table with the type" +
302 ········" code information.");
303 ············//
304 ············// radioDefaultEncoding
305 ············//
306 ············this.radioDefaultEncoding.Location = new System.Drawing.Point(13, 121);
307 ············this.radioDefaultEncoding.Name = "radioDefaultEncoding";
308 ············this.radioDefaultEncoding.Size = new System.Drawing.Size(140, 20);
309 ············this.radioDefaultEncoding.TabIndex = 21;
310 ············this.radioDefaultEncoding.Text = "Default Encoding";
311 ············this.toolTip1.SetToolTip(this.radioDefaultEncoding, "Check this option, if the script files should use windows encoding.");
312 ············//
313 ············// radioUtf8Encoding
314 ············//
315 ············this.radioUtf8Encoding.Checked = true;
316 ············this.radioUtf8Encoding.Location = new System.Drawing.Point(13, 99);
317 ············this.radioUtf8Encoding.Name = "radioUtf8Encoding";
318 ············this.radioUtf8Encoding.Size = new System.Drawing.Size(140, 21);
319 ············this.radioUtf8Encoding.TabIndex = 20;
320 ············this.radioUtf8Encoding.TabStop = true;
321 ············this.radioUtf8Encoding.Text = "UTF-8 Encoding";
322 ············this.toolTip1.SetToolTip(this.radioUtf8Encoding, "Check this option, if the script files should be UTF-8 encoded.");
323 ············//
324 ············// cbSqlDialect
325 ············//
326 ············this.cbSqlDialect.Location = new System.Drawing.Point(13, 70);
327 ············this.cbSqlDialect.Name = "cbSqlDialect";
328 ············this.cbSqlDialect.Size = new System.Drawing.Size(220, 21);
329 ············this.cbSqlDialect.TabIndex = 18;
330 ············this.toolTip1.SetToolTip(this.cbSqlDialect, "Choose an available NDO provider.");
331 ············this.cbSqlDialect.SelectedIndexChanged += new System.EventHandler(this.cbSqlDialect_SelectedIndexChanged);
332 ············//
333 ············// chkGenerateSQLScript
334 ············//
335 ············this.chkGenerateSQLScript.Location = new System.Drawing.Point(13, 21);
336 ············this.chkGenerateSQLScript.Name = "chkGenerateSQLScript";
337 ············this.chkGenerateSQLScript.Size = new System.Drawing.Size(187, 21);
338 ············this.chkGenerateSQLScript.TabIndex = 13;
339 ············this.chkGenerateSQLScript.Text = "Generate SQL Script";
340 ············this.toolTip1.SetToolTip(this.chkGenerateSQLScript, "If checked, NDO will create a script with DDL code, which can be used to construc" +
341 ········"t a database structure.");
342 ············this.chkGenerateSQLScript.CheckedChanged += new System.EventHandler(this.chkGenerateSQLScript_CheckedChanged);
343 ············//
344 ············// chkUseTimeStamps
345 ············//
346 ············this.chkUseTimeStamps.Location = new System.Drawing.Point(21, 153);
347 ············this.chkUseTimeStamps.Name = "chkUseTimeStamps";
348 ············this.chkUseTimeStamps.Size = new System.Drawing.Size(302, 20);
349 ············this.chkUseTimeStamps.TabIndex = 42;
350 ············this.chkUseTimeStamps.Text = "Generate Time Stamp Columns for each class";
351 ············this.toolTip1.SetToolTip(this.chkUseTimeStamps, "Check this option, if all tables should be protected by collistion detection.");
352 ············//
353 ············// chkChangeEvents
354 ············//
355 ············this.chkChangeEvents.Location = new System.Drawing.Point(21, 179);
356 ············this.chkChangeEvents.Name = "chkChangeEvents";
357 ············this.chkChangeEvents.Size = new System.Drawing.Size(302, 21);
358 ············this.chkChangeEvents.TabIndex = 41;
359 ············this.chkChangeEvents.Text = "Generate change events with Add Accessor";
360 ············this.toolTip1.SetToolTip(this.chkChangeEvents, "Check this option, if you intend to bind the UI directly to the accessor properti" +
361 ········"es of your persistent classes.");
362 ············//
363 ············// btnConnString
364 ············//
365 ············this.btnConnString.Location = new System.Drawing.Point(538, 313);
366 ············this.btnConnString.Name = "btnConnString";
367 ············this.btnConnString.Size = new System.Drawing.Size(42, 21);
368 ············this.btnConnString.TabIndex = 38;
369 ············this.btnConnString.Text = "...";
370 ············this.toolTip1.SetToolTip(this.btnConnString, "Enter existing database connection");
371 ············this.btnConnString.Click += new System.EventHandler(this.btnConnString_Click);
372 ············//
373 ············// btnPresetLibrary
374 ············//
375 ············this.btnPresetLibrary.Location = new System.Drawing.Point(21, 385);
376 ············this.btnPresetLibrary.Name = "btnPresetLibrary";
377 ············this.btnPresetLibrary.Size = new System.Drawing.Size(100, 39);
378 ············this.btnPresetLibrary.TabIndex = 36;
379 ············this.btnPresetLibrary.Text = "Preset for Library";
380 ············this.toolTip1.SetToolTip(this.btnPresetLibrary, "Selects all settings necessary for projects containing persistent types.");
381 ············this.btnPresetLibrary.Click += new System.EventHandler(this.btnPresetLibrary_Click);
382 ············//
383 ············// chkMappingNew
384 ············//
385 ············this.chkMappingNew.Location = new System.Drawing.Point(21, 99);
386 ············this.chkMappingNew.Name = "chkMappingNew";
387 ············this.chkMappingNew.Size = new System.Drawing.Size(272, 21);
388 ············this.chkMappingNew.TabIndex = 34;
389 ············this.chkMappingNew.Text = "Always Generate a new mapping File";
390 ············this.toolTip1.SetToolTip(this.chkMappingNew, "Choose this options, if NDO should discard and rebuild all mapping information.");
391 ············//
392 ············// chkActivateEnhancer
393 ············//
394 ············this.chkActivateEnhancer.Location = new System.Drawing.Point(21, 46);
395 ············this.chkActivateEnhancer.Name = "chkActivateEnhancer";
396 ············this.chkActivateEnhancer.Size = new System.Drawing.Size(188, 20);
397 ············this.chkActivateEnhancer.TabIndex = 33;
398 ············this.chkActivateEnhancer.Text = "Activate enhancer";
399 ············this.toolTip1.SetToolTip(this.chkActivateEnhancer, "Choose this option, if your project contains persistent types.");
400 ············//
401 ············// chkActivateAddIn
402 ············//
403 ············this.chkActivateAddIn.Location = new System.Drawing.Point(21, 19);
404 ············this.chkActivateAddIn.Name = "chkActivateAddIn";
405 ············this.chkActivateAddIn.Size = new System.Drawing.Size(188, 21);
406 ············this.chkActivateAddIn.TabIndex = 32;
407 ············this.chkActivateAddIn.Text = "Activate NDO AddIn";
408 ············this.toolTip1.SetToolTip(this.chkActivateAddIn, "Choose this options, if your project contains or references persistent types.");
409 ············this.chkActivateAddIn.Click += new System.EventHandler(this.chkActivateAddIn_CheckedChanged);
410 ············//
411 ············// tabControl
412 ············//
413 ············this.tabControl.Controls.Add(this.tabPageGeneral);
414 ············this.tabControl.Controls.Add(this.tabPageAssemblies);
415 ············this.tabControl.Dock = System.Windows.Forms.DockStyle.Top;
416 ············this.tabControl.Location = new System.Drawing.Point(0, 0);
417 ············this.tabControl.Name = "tabControl";
418 ············this.tabControl.SelectedIndex = 0;
419 ············this.tabControl.Size = new System.Drawing.Size(661, 374);
420 ············this.tabControl.TabIndex = 0;
421 ············//
422 ············// tabPageGeneral
423 ············//
424 ············this.tabPageGeneral.Controls.Add(this.txtTargetMappingFileName);
425 ············this.tabPageGeneral.Controls.Add(this.label1);
426 ············this.tabPageGeneral.Controls.Add(this.chkVerboseMode);
427 ············this.tabPageGeneral.Controls.Add(this.txtSchemaVersion);
428 ············this.tabPageGeneral.Controls.Add(this.label5);
429 ············this.tabPageGeneral.Controls.Add(this.btnNewDatabase);
430 ············this.tabPageGeneral.Controls.Add(this.txtDbOwner);
431 ············this.tabPageGeneral.Controls.Add(this.txtConnectionString);
432 ············this.tabPageGeneral.Controls.Add(this.label3);
433 ············this.tabPageGeneral.Controls.Add(this.groupBox1);
434 ············this.tabPageGeneral.Controls.Add(this.chkUseTimeStamps);
435 ············this.tabPageGeneral.Controls.Add(this.chkChangeEvents);
436 ············this.tabPageGeneral.Controls.Add(this.label2);
437 ············this.tabPageGeneral.Controls.Add(this.btnConnString);
438 ············this.tabPageGeneral.Controls.Add(this.chkMappingNew);
439 ············this.tabPageGeneral.Controls.Add(this.chkActivateEnhancer);
440 ············this.tabPageGeneral.Controls.Add(this.chkActivateAddIn);
441 ············this.tabPageGeneral.Location = new System.Drawing.Point(4, 22);
442 ············this.tabPageGeneral.Name = "tabPageGeneral";
443 ············this.tabPageGeneral.Padding = new System.Windows.Forms.Padding(3);
444 ············this.tabPageGeneral.Size = new System.Drawing.Size(653, 348);
445 ············this.tabPageGeneral.TabIndex = 0;
446 ············this.tabPageGeneral.Text = "General";
447 ············this.tabPageGeneral.UseVisualStyleBackColor = true;
448 ············//
449 ············// txtTargetMappingFileName
450 ············//
451 ············this.txtTargetMappingFileName.Location = new System.Drawing.Point(145, 245);
452 ············this.txtTargetMappingFileName.Name = "txtTargetMappingFileName";
453 ············this.txtTargetMappingFileName.Size = new System.Drawing.Size(160, 20);
454 ············this.txtTargetMappingFileName.TabIndex = 53;
455 ············//
456 ············// label1
457 ············//
458 ············this.label1.Location = new System.Drawing.Point(18, 246);
459 ············this.label1.Name = "label1";
460 ············this.label1.Size = new System.Drawing.Size(121, 21);
461 ············this.label1.TabIndex = 52;
462 ············this.label1.Text = "Mapping File Name";
463 ············//
464 ············// txtSchemaVersion
465 ············//
466 ············this.txtSchemaVersion.Location = new System.Drawing.Point(145, 219);
467 ············this.txtSchemaVersion.Name = "txtSchemaVersion";
468 ············this.txtSchemaVersion.Size = new System.Drawing.Size(160, 20);
469 ············this.txtSchemaVersion.TabIndex = 50;
470 ············//
471 ············// label5
472 ············//
473 ············this.label5.Location = new System.Drawing.Point(18, 220);
474 ············this.label5.Name = "label5";
475 ············this.label5.Size = new System.Drawing.Size(121, 21);
476 ············this.label5.TabIndex = 49;
477 ············this.label5.Text = "Schema Version";
478 ············//
479 ············// label3
480 ············//
481 ············this.label3.Location = new System.Drawing.Point(18, 128);
482 ············this.label3.Name = "label3";
483 ············this.label3.Size = new System.Drawing.Size(127, 21);
484 ············this.label3.TabIndex = 44;
485 ············this.label3.Text = "Owner / Schema Name";
486 ············//
487 ············// groupBox1
488 ············//
489 ············this.groupBox1.Controls.Add(this.btnInstallProvider);
490 ············this.groupBox1.Controls.Add(this.chkDropExistingElements);
491 ············this.groupBox1.Controls.Add(this.chkGenerateFkConstraints);
492 ············this.groupBox1.Controls.Add(this.chkIncludeTypecodes);
493 ············this.groupBox1.Controls.Add(this.radioDefaultEncoding);
494 ············this.groupBox1.Controls.Add(this.radioUtf8Encoding);
495 ············this.groupBox1.Controls.Add(this.label4);
496 ············this.groupBox1.Controls.Add(this.cbSqlDialect);
497 ············this.groupBox1.Controls.Add(this.chkGenerateSQLScript);
498 ············this.groupBox1.Location = new System.Drawing.Point(343, 21);
499 ············this.groupBox1.Name = "groupBox1";
500 ············this.groupBox1.Size = new System.Drawing.Size(265, 244);
501 ············this.groupBox1.TabIndex = 43;
502 ············this.groupBox1.TabStop = false;
503 ············this.groupBox1.Text = " SQL ";
504 ············//
505 ············// btnInstallProvider
506 ············//
507 ············this.btnInstallProvider.Location = new System.Drawing.Point(142, 102);
508 ············this.btnInstallProvider.Name = "btnInstallProvider";
509 ············this.btnInstallProvider.Size = new System.Drawing.Size(91, 22);
510 ············this.btnInstallProvider.TabIndex = 25;
511 ············this.btnInstallProvider.Text = "Install Provider";
512 ············this.btnInstallProvider.UseVisualStyleBackColor = true;
513 ············this.btnInstallProvider.Click += new System.EventHandler(this.btnInstallProvider_Click);
514 ············//
515 ············// label4
516 ············//
517 ············this.label4.Location = new System.Drawing.Point(13, 50);
518 ············this.label4.Name = "label4";
519 ············this.label4.Size = new System.Drawing.Size(200, 17);
520 ············this.label4.TabIndex = 19;
521 ············this.label4.Text = "SQL Dialect";
522 ············//
523 ············// label2
524 ············//
525 ············this.label2.Location = new System.Drawing.Point(18, 292);
526 ············this.label2.Name = "label2";
527 ············this.label2.Size = new System.Drawing.Size(360, 21);
528 ············this.label2.TabIndex = 40;
529 ············this.label2.Text = "Default Connection String";
530 ············//
531 ············// tabPageAssemblies
532 ············//
533 ············this.tabPageAssemblies.Controls.Add(this.label6);
534 ············this.tabPageAssemblies.Controls.Add(this.chlbAssemblies);
535 ············this.tabPageAssemblies.Location = new System.Drawing.Point(4, 22);
536 ············this.tabPageAssemblies.Name = "tabPageAssemblies";
537 ············this.tabPageAssemblies.Padding = new System.Windows.Forms.Padding(3);
538 ············this.tabPageAssemblies.Size = new System.Drawing.Size(653, 348);
539 ············this.tabPageAssemblies.TabIndex = 1;
540 ············this.tabPageAssemblies.Text = "Assemblies";
541 ············this.tabPageAssemblies.UseVisualStyleBackColor = true;
542 ············//
543 ············// label6
544 ············//
545 ············this.label6.AutoSize = true;
546 ············this.label6.Location = new System.Drawing.Point(10, 12);
547 ············this.label6.Name = "label6";
548 ············this.label6.Size = new System.Drawing.Size(328, 13);
549 ············this.label6.TabIndex = 1;
550 ············this.label6.Text = "Choose Assemblies which should be analyzed by the NDOEnhancer";
551 ············//
552 ············// chlbAssemblies
553 ············//
554 ············this.chlbAssemblies.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
555 ············| System.Windows.Forms.AnchorStyles.Left)
556 ············| System.Windows.Forms.AnchorStyles.Right)));
557 ············this.chlbAssemblies.FormattingEnabled = true;
558 ············this.chlbAssemblies.Location = new System.Drawing.Point(10, 39);
559 ············this.chlbAssemblies.Name = "chlbAssemblies";
560 ············this.chlbAssemblies.Size = new System.Drawing.Size(631, 289);
561 ············this.chlbAssemblies.TabIndex = 0;
562 ············this.chlbAssemblies.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.chlbAssemblies_ItemCheck);
563 ············//
564 ············// btnOK
565 ············//
566 ············this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
567 ············this.btnOK.Location = new System.Drawing.Point(363, 385);
568 ············this.btnOK.Name = "btnOK";
569 ············this.btnOK.Size = new System.Drawing.Size(100, 39);
570 ············this.btnOK.TabIndex = 37;
571 ············this.btnOK.Text = "OK";
572 ············this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
573 ············//
574 ············// btnCancel
575 ············//
576 ············this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
577 ············this.btnCancel.Location = new System.Drawing.Point(477, 385);
578 ············this.btnCancel.Name = "btnCancel";
579 ············this.btnCancel.Size = new System.Drawing.Size(100, 39);
580 ············this.btnCancel.TabIndex = 35;
581 ············this.btnCancel.Text = "Cancel";
582 ············//
583 ············// ConfigurationDialog
584 ············//
585 ············this.AutoScaleMode = AutoScaleMode.Font;
586 ············this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
587 ············this.CancelButton = this.btnCancel;
588 ············this.ClientSize = new System.Drawing.Size(661, 439);
589 ············this.Controls.Add(this.btnSaveAs);
590 ············this.Controls.Add(this.btnPresetApp);
591 ············this.Controls.Add(this.btnOK);
592 ············this.Controls.Add(this.btnPresetLibrary);
593 ············this.Controls.Add(this.btnCancel);
594 ············this.Controls.Add(this.tabControl);
595 ············this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
596 ············this.Name = "ConfigurationDialog";
597 ············this.Text = "NDO Configuration";
598 ············this.Load += new System.EventHandler(this.ConfigurationDialog_Load);
599 ············this.tabControl.ResumeLayout(false);
600 ············this.tabPageGeneral.ResumeLayout(false);
601 ············this.tabPageGeneral.PerformLayout();
602 ············this.groupBox1.ResumeLayout(false);
603 ············this.tabPageAssemblies.ResumeLayout(false);
604 ············this.tabPageAssemblies.PerformLayout();
605 ············this.ResumeLayout(false);
606
607 ········}
608 ········#endregion
609
610 ········private void chkActivateAddIn_CheckedChanged(object sender, System.EventArgs e)
611 ········{
612 ············EnableAddin(this.chkActivateAddIn.Checked);
613 ········}
614
615
616 ········void EnableAddin(bool enabled)
617 ········{
618 ············if (project.Kind == "{E24C65DC-7377-472b-9ABA-BC803B73C61A}")
619 ················chkActivateEnhancer.Enabled = false;
620 ············else
621 ················chkActivateEnhancer.Enabled = enabled;
622 ········}
623
624 ········private void ConfigurationDialog_Load(object sender, System.EventArgs e)
625 ········{
626 ············try
627 ············{
628 ················ConfigurationOptions options = new ConfigurationOptions(project);
629 ················this.Text = "NDO Configuration - " + project.Name;
630 ················chkIncludeTypecodes.Checked = options.IncludeTypecodes;
631 ················chkDropExistingElements.Checked = options.DropExistingElements;
632 ················chkGenerateFkConstraints.Checked = options.GenerateConstraints;
633 ················chkVerboseMode.Checked = options.VerboseMode;
634 ················chkChangeEvents.Checked = options.GenerateChangeEvents;
635 ················chkActivateAddIn.Checked = options.EnableAddIn;
636 ················chkActivateEnhancer.Checked = options.EnableEnhancer;
637 ················chkMappingNew.Checked = options.NewMapping;
638 ················if (chkActivateAddIn.Checked == false)
639 ····················EnableAddin(false);
640 ················chkGenerateSQLScript.Checked = options.GenerateSQL;
641 ················txtSchemaVersion.Text = options.SchemaVersion;
642 ················if (string.IsNullOrEmpty(txtSchemaVersion.Text))
643 ····················txtSchemaVersion.Text = "1.0";
644 ················this.chkUseTimeStamps.Checked = options.UseTimeStamps;
645 ················int i = 0;
646 ················this.cbSqlDialect.Items.Clear();
647 ················int currentDialectIndex = -1;
648
649 ················foreach (string s in NdoUIProviderFactory.Instance.Keys)
650 ················{
651 ····················this.cbSqlDialect.Items.Add( s );
652 ····················if (options.SQLScriptLanguage == s)
653 ························currentDialectIndex = i;
654 ····················i++;
655 ················}
656 ················if (currentDialectIndex > -1)
657 ····················cbSqlDialect.SelectedIndex = currentDialectIndex;
658
659 ················// Must be initialized after changing the cbSqlDialect index
660 ················txtConnectionString.Text = options.DefaultConnection;
661 ················txtTargetMappingFileName.Text = options.TargetMappingFileName;
662 ················txtDbOwner.Text = options.DatabaseOwner;
663 ················chkActivateAddIn_CheckedChanged(null, EventArgs.Empty);
664 ················chkGenerateSQLScript_CheckedChanged(null, EventArgs.Empty);
665 ················if (options.Utf8Encoding)
666 ····················radioUtf8Encoding.Checked = true;
667 ················else
668 ····················radioDefaultEncoding.Checked = true;
669 ················if (project.Kind == "{E24C65DC-7377-472b-9ABA-BC803B73C61A}")
670 ····················this.chkActivateEnhancer.Enabled = false;
671
672 ················CheckEnabledStateForLoadProviderButton();
673 ············}
674 ············catch (Exception ex)
675 ············{
676 #if !DEBUG
677 ················MessageBox.Show(ex.Message, "NDO Configuration");
678 #else
679 ················MessageBox.Show(ex.ToString(), "NDO Configuration");
680 #endif
681 ············}
682 ········}
683
684 ········private void btnPresetLibrary_Click(object sender, System.EventArgs e)
685 ········{
686 //············ConfigurationOptions options = new ConfigurationOptions( project );
687 ············try
688 ············{
689 ················EnableCheckBoxes();
690
691 ················this.chkVerboseMode.Checked = false;
692 ················this.chkActivateAddIn.Checked = true;
693 ················this.chkActivateEnhancer.Checked = true;
694 ················this.chkMappingNew.Checked = false;
695 ················this.chkChangeEvents.Checked = false;
696 ················this.chkIncludeTypecodes.Checked = false;
697 ················this.chkGenerateFkConstraints.Checked = false;
698 ················this.chkDropExistingElements.Checked = false;
699 ················this.chkUseTimeStamps.Checked = false;····
700 ················this.txtDbOwner.Text = "";
701 ················this.chkGenerateSQLScript.Checked = false;
702 ················this.txtSchemaVersion.Text = "";
703 ············}
704 ············catch (Exception ex)
705 ············{
706 ················ShowError(ex);
707 ············}
708 ········}
709
710
711 ········private void btnOK_Click(object sender, System.EventArgs e)
712 ········{
713 ············try
714 ············{
715 ················ConfigurationOptions options = new ConfigurationOptions( project );
716
717 ················string connType = options.SQLScriptLanguage;
718 ················string connName = options.DefaultConnection;
719 ················WriteBack(options);
720 ················if (options.SQLScriptLanguage != connType || options.DefaultConnection != connName)
721 ················{
722 ····················string mappingFileName = this.project.MappingFilePath();
723 ····················if (mappingFileName != null)
724 ····················{
725 ························NDOMapping mapping = new NDOMapping(mappingFileName);
726 ························bool connectionExists = false;
727 ························foreach (Connection conn in mapping.Connections)
728 ························{
729 ····························if (conn.Type == options.SQLScriptLanguage && conn.Name == options.DefaultConnection)
730 ····························{
731 ································connectionExists = true;
732 ································break;
733 ····························}
734 ························}
735 ························if (!connectionExists)
736 ························{
737 ····························if (MessageBox.Show("The database connection settings have been changed. Should NDO change the connection settings in the mapping file " + Path.GetFileName(mappingFileName) + " too?", "NDO Configuration", MessageBoxButtons.YesNo) == DialogResult.Yes)
738 ····························{
739 ································Connection conn = null;
740 ································if (mapping.Connections.Count() == 1)
741 ································{
742 ····································conn = (Connection)mapping.Connections.FirstOrDefault();
743 ································}
744 ································else
745 ································{
746 ····································conn = mapping.NewConnection(String.Empty, String.Empty);
747 ····································MessageBox.Show("Added a connection with the ID " + conn.ID, "NDO Configuration");
748 ································}
749 ································conn.Type = options.SQLScriptLanguage;
750 ································conn.Name = options.DefaultConnection;
751 ································mapping.Save();
752 ····························}
753 ························}
754 ····················}
755 ················}
756
757 ················if ( options.EnableAddIn )
758 ················{
759 ····················GeneratePackageReference();
760 ················}
761
762 ················ThreadHelper.JoinableTaskFactory.Run( async () => await options.SaveAsync( this.projectDescription ) );
763 ················
764 ············}
765 ············catch (Exception ex)
766 ············{
767 #if DEBUG
768 ················MessageBox.Show( "The following error occured while saving your options: " + ex.ToString(), "NDO Add-in" );
769 #else
770 ················MessageBox.Show("The following error occured while saving your options: " + ex.Message, "NDO Add-in");
771 #endif
772 ············}
773 ········}
774
775
776 ········void GeneratePackageReference()
777 ········{
778 ············try
779 ············{
780 ················IComponentModel componentModel;
781 ················var installerService = GetInstallerService( out componentModel );
782
783 ················if (!installerService.IsPackageInstalled( this.project, "ndo.dll" ))
784 ················{
785 ····················var installer = componentModel.GetService<IVsPackageInstaller>();
786 ····················// The newest version of NDO will be v5.x at the time, this package is released.
787 ····················// NDO5 needs the NDO.build package in all use cases.
788 ····················// If the enhancer is not to be used, uninstalling ndo.build is sufficient
789 ····················// because it will only be reinstalled if the NDO.dll package is missing.
790 ····················installer.InstallPackage( null, this.project, "NDO.dll", (string)null, false );
791 ····················installer.InstallPackage( null, this.project, "NDO.build", (string) null, false );
792 ················}
793 ············}
794 ············catch (Exception ex)
795 ············{
796 ················MessageBox.Show( "Error while installing the ndo.dll package: " + ex.ToString() );
797 ············}
798 ········}
799
800 ········private static IVsPackageInstallerServices GetInstallerService( out IComponentModel componentModel )
801 ········{
802 ············componentModel = (IComponentModel)Package.GetGlobalService( typeof( SComponentModel ) );
803 ············var installerService = componentModel.GetService<IVsPackageInstallerServices>();
804 ············return installerService;
805 ········}
806
807 ········void ShowError(Exception ex)
808 ········{
809 ············MessageBox.Show("The following error occured: " + ex.Message, "NDO Add-in");
810 ········}
811
812 ········private void btnConnString_Click(object sender, System.EventArgs e)
813 ········{
814 ············try
815 ············{
816 ················string connType = cbSqlDialect.Text;
817 ················if (connType == string.Empty)
818 ····················connType = "SqlServer";
819 ················var provider = NdoUIProviderFactory.Instance[connType];
820 ················if (provider == null)
821 ················{
822 ····················MessageBox.Show("Can't find a NDO UI provider for the sql dialect " + connType);
823 ····················return;
824 ················}
825
826 ················string temp = this.txtConnectionString.Text;
827 ················NdoDialogResult r = provider.ShowConnectionDialog(ref temp);
828 ················if (r == NdoDialogResult.Cancel)
829 ····················return;
830 ················this.txtConnectionString.Text = temp;
831 ············}
832 ············catch (Exception ex)
833 ············{
834 ················ShowError(ex);
835 ············}
836 ········}
837
838
839 ········private void chkGenerateSQLScript_CheckedChanged(object sender, System.EventArgs e)
840 ········{
841 ············bool genSql = this.chkGenerateSQLScript.Checked;
842
843 ············this.cbSqlDialect.Enabled = genSql;
844 ············this.chkIncludeTypecodes.Enabled = genSql;
845 ············this.chkDropExistingElements.Enabled = genSql;
846 ············this.chkGenerateFkConstraints.Enabled = genSql;
847 ············this.radioUtf8Encoding.Enabled = genSql;
848 ············this.radioDefaultEncoding.Enabled = genSql;
849 ········}
850
851 ········private void EnableCheckBoxes()
852 ········{
853 ············foreach(Control c in this.Controls)
854 ············{
855 ················CheckBox cb = c as CheckBox;
856 ················if (c == null)
857 ····················continue;
858 ················c.Enabled = true;
859 ············}
860 ············if (this.project.Kind == "{E24C65DC-7377-472b-9ABA-BC803B73C61A}")
861 ················this.chkActivateEnhancer.Enabled = false;
862 ········}
863
864 ········private void btnPresetApp_Click(object sender, System.EventArgs e)
865 ········{
866 ············try
867 ············{
868 ················EnableCheckBoxes();
869 ················this.chkVerboseMode.Checked = false;
870 ················this.chkActivateAddIn.Checked = true;
871 ················this.chkActivateEnhancer.Checked = false;
872 ················this.chkMappingNew.Checked = false;
873 ················this.chkGenerateSQLScript.Checked = true;
874 ················this.chkChangeEvents.Checked = false;
875 ················this.chkIncludeTypecodes.Checked = false;
876 ················this.chkDropExistingElements.Checked = false;
877 ················this.chkGenerateFkConstraints.Checked = false;
878 ················this.txtConnectionString.Text = "";
879 ················this.chkUseTimeStamps.Checked = false;
880 ················this.txtDbOwner.Text = "";
881 ················this.txtSchemaVersion.Text = "1.0";
882 ················if (this.txtConnectionString.Text == string.Empty)
883 ····················this.btnConnString_Click(null, null);
884 ············}
885 ············catch (Exception ex)
886 ············{
887 ················ShowError(ex);
888 ············}
889 ········}
890
891 //········private void MakeNode(string name, object value, XmlNode parentNode, XmlDocument doc)
892 //········{
893 //············XmlElement el = doc.CreateElement(name);
894 //············parentNode.AppendChild(el);
895 //············if (value != null)
896 //················el.InnerText = value.ToString();
897 //········}
898
899 ········void WriteBack(ConfigurationOptions options)
900 ········{
901 ············options.EnableAddIn = chkActivateAddIn.Checked;
902 ············options.EnableEnhancer = chkActivateEnhancer.Checked;
903 ············options.IncludeTypecodes = chkIncludeTypecodes.Checked;
904 ············options.GenerateConstraints = chkGenerateFkConstraints.Checked;
905 ············options.DropExistingElements = chkDropExistingElements.Checked;
906 ············options.VerboseMode = chkVerboseMode.Checked;
907 ············options.NewMapping = chkMappingNew.Checked;
908 ············options.GenerateSQL = chkGenerateSQLScript.Checked;
909 ············options.DefaultConnection = txtConnectionString.Text;
910 ············options.TargetMappingFileName = txtTargetMappingFileName.Text;
911 ············options.GenerateChangeEvents = chkChangeEvents.Checked;
912 ············options.UseTimeStamps = chkUseTimeStamps.Checked;
913 ············options.SQLScriptLanguage = this.cbSqlDialect.Text;
914 ············options.DatabaseOwner = this.txtDbOwner.Text;
915 ············options.Utf8Encoding = this.radioUtf8Encoding.Checked;
916 ············options.SchemaVersion = this.txtSchemaVersion.Text;
917 ········}
918
919 ········private void btnSaveAs_Click(object sender, System.EventArgs e)
920 ········{
921 ············try
922 ············{
923 ················string projDir = Path.GetDirectoryName(project.FullName);
924 ················SaveFileDialog sfd = new SaveFileDialog();
925 ················sfd.CheckFileExists = false;
926 ················sfd.DefaultExt = "xml";
927 ················sfd.Filter = "NDO Configuration Files (*.ndoproj)|*.ndoproj";
928 ················sfd.FileName = "EnhancerParameters.ndoproj";
929 ················sfd.InitialDirectory = projDir;
930 ················if (sfd.ShowDialog(this) != DialogResult.OK)
931 ····················return;
932
933 ················ConfigurationOptions options = new ConfigurationOptions(project);················
934 ················WriteBack(options);
935 ················options.SaveAs(sfd.FileName, this.projectDescription);
936 ············}
937 ············catch (Exception ex)
938 ············{
939 ················ShowError(ex);
940 ············}········
941 ········}
942
943 ········private void cbSqlDialect_SelectedIndexChanged(object sender, System.EventArgs e)
944 ········{
945 ············this.txtConnectionString.Text = string.Empty;
946 ············CheckEnabledStateForLoadProviderButton();
947 ········}
948
949 ········private void btnNewDatabase_Click(object sender, System.EventArgs e)
950 ········{
951 ············string connType = cbSqlDialect.Text;
952 ············if (connType == string.Empty)
953 ················connType = "SqlServer";
954 ············IDbUISupport provider = NdoUIProviderFactory.Instance[connType];
955 ············if (provider == null)
956 ············{
957 ················MessageBox.Show("Can't find a NDO UI provider for the sql dialect " + connType);
958 ················return;
959 ············}
960 ············object necessaryData = null;
961 ············try
962 ············{
963 ················if (provider.ShowCreateDbDialog(ref necessaryData) == NdoDialogResult.Cancel)
964 ····················return;
965 ················this.txtConnectionString.Text = provider.CreateDatabase(necessaryData);
966 ············}
967 ············catch (Exception ex)
968 ············{
969 #if !DEBUG
970 ················MessageBox.Show("Can't construct the database: " + ex.Message);
971 #else
972 ················MessageBox.Show("Can't construct the database: " + ex.ToString());
973 #endif
974 ············}
975 ········}
976
977 ········private void chlbAssemblies_ItemCheck( object sender, ItemCheckEventArgs e )
978 ········{
979 ············this.references[e.Index].CheckState = e.NewValue;
980 ········}
981
982 ········private void btnInstallProvider_Click( object sender, EventArgs e )
983 ········{
984 ············try
985 ············{
986 ················string providerName = this.cbSqlDialect.Text;
987
988 ················if (string.IsNullOrEmpty( providerName ))
989 ················{
990 ····················MessageBox.Show( "Please choose a provider" );
991 ····················return;
992 ················}
993
994 ················IComponentModel componentModel;
995 ················var installerService = GetInstallerService( out componentModel );
996
997 ················string packageName = $"ndo.{providerName.ToLower()}";
998 ················if (!installerService.IsPackageInstalled( this.project, packageName ))
999 ················{
1000 ····················var installer = componentModel.GetService<IVsPackageInstaller>();
1001 ····················installer.InstallPackage( null, this.project, packageName, (string)null, false );
1002 ················}
1003
1004 ················this.btnInstallProvider.Enabled = false;
1005 ············}
1006 ············catch (Exception ex)
1007 ············{
1008 ················MessageBox.Show( "Error while installing the ndo.dll package: " + ex.ToString() );
1009 ············}
1010 ········}
1011 ····}
1012 }
1013
1014 #pragma warning restore VSTHRD010 // Invoke single-threaded types on Main thread
1015