diff --git a/AeroWizard/AeroWizard/AeroWizard.csproj b/AeroWizard/AeroWizard/AeroWizard.csproj
new file mode 100644
index 0000000..bd694de
--- /dev/null
+++ b/AeroWizard/AeroWizard/AeroWizard.csproj
@@ -0,0 +1,258 @@
+
+
+
+ Debug
+ AnyCPU
+ 9.0.30729
+ 2.0
+ {199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}
+ Library
+ Properties
+ AeroWizard
+ AeroWizard
+ v4.0
+ 512
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 3.5
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+
+
+
+
+ true
+ full
+ false
+
+
+ bin\Debug\
+ prompt
+ 4
+ AllRules.ruleset
+ AnyCPU
+ false
+
+
+ pdbonly
+ true
+ TRACE;
+ bin\$(Configuration)\$(TargetFrameworkVersion)
+ prompt
+ 4
+ bin\Release\$(TargetFrameworkVersion)\AeroWizard.XML
+ AllRules.ruleset
+ false
+
+
+
+
+ $(DefineConstants)$(TargetFrameworkVersion.Replace("v", "NET").Replace(".", "")),
+ $(DefineConstants.Remove($(DefineConstants.LastIndexOf(", NET"))))$(TargetFrameworkVersion.Replace("v", "NET").Replace(".", "")),
+
+ $(DefineConstants.Remove($(DefineConstants.LastIndexOf(", "))))
+
+
+ false
+
+
+
+
+
+
+ Resources\WizardHat.ico
+
+
+
+ ..\..\packages\Newtonsoft.Json.12.0.1\lib\net40\Newtonsoft.Json.dll
+ True
+
+
+
+ ..\..\packages\System.Data.SQLite.Core.1.0.110.0\lib\net40\System.Data.SQLite.dll
+ True
+
+
+
+
+
+
+
+
+
+ Component
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Component
+
+
+ Component
+
+
+
+
+ Component
+
+
+
+ Component
+
+
+ Component
+
+
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ Component
+
+
+ Component
+
+
+ WizardControl.cs
+
+
+
+ Component
+
+
+ WizardPage.cs
+
+
+ StepWizardControl.cs
+
+
+
+ WizardControl.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ true
+
+
+ False
+ Windows Installer 3.1
+ true
+
+
+
+
+ {ee86e933-d883-4b18-80eb-0fba55ec67c6}
+ ScoutBase.Core
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ this.Ver = Version.Parse(FileVersionInfo.GetVersionInfo(this.AssemblyPath).FileVersion).ToString(3);
+
+
+
+
+
+
+
+
+
+
+ Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".
+
+
+
+
\ No newline at end of file
diff --git a/AeroWizard/AeroWizard/AeroWizard.sln b/AeroWizard/AeroWizard/AeroWizard.sln
new file mode 100644
index 0000000..4615668
--- /dev/null
+++ b/AeroWizard/AeroWizard/AeroWizard.sln
@@ -0,0 +1,64 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AeroWizard", "AeroWizard.csproj", "{199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWizard", "TestWizard\TestWizard.csproj", "{EAA3C12F-D499-476C-9500-524EAEE3373A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AeroWizardTemplates", "AeroWizardTemplates\AeroWizardTemplates.csproj", "{438228D8-C9EB-41DC-A7C9-9A0C3D8EEAAA}"
+ ProjectSection(ProjectDependencies) = postProject
+ {199C12C4-3EEF-4D08-BAC3-F2A62BCF969C} = {199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AeroWizardItemTemplate", "AeroWizardItemTemplate\AeroWizardItemTemplate.csproj", "{BE2F5D91-AB68-432F-A94D-E68F05071324}"
+ ProjectSection(ProjectDependencies) = postProject
+ {199C12C4-3EEF-4D08-BAC3-F2A62BCF969C} = {199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomWizardItemTemplate", "CustomWizardItemTemplate\CustomWizardItemTemplate.csproj", "{D8029003-7A3F-4840-B441-E15D6E2BAFC2}"
+ ProjectSection(ProjectDependencies) = postProject
+ {199C12C4-3EEF-4D08-BAC3-F2A62BCF969C} = {199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wizard97ItemTemplate", "Wizard97ItemTemplate\Wizard97ItemTemplate.csproj", "{D127643F-69AA-4C4C-A624-7754289E798C}"
+ ProjectSection(ProjectDependencies) = postProject
+ {199C12C4-3EEF-4D08-BAC3-F2A62BCF969C} = {199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {199C12C4-3EEF-4D08-BAC3-F2A62BCF969C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EAA3C12F-D499-476C-9500-524EAEE3373A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EAA3C12F-D499-476C-9500-524EAEE3373A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EAA3C12F-D499-476C-9500-524EAEE3373A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EAA3C12F-D499-476C-9500-524EAEE3373A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {438228D8-C9EB-41DC-A7C9-9A0C3D8EEAAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {438228D8-C9EB-41DC-A7C9-9A0C3D8EEAAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {438228D8-C9EB-41DC-A7C9-9A0C3D8EEAAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {438228D8-C9EB-41DC-A7C9-9A0C3D8EEAAA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BE2F5D91-AB68-432F-A94D-E68F05071324}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BE2F5D91-AB68-432F-A94D-E68F05071324}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BE2F5D91-AB68-432F-A94D-E68F05071324}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BE2F5D91-AB68-432F-A94D-E68F05071324}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D8029003-7A3F-4840-B441-E15D6E2BAFC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D8029003-7A3F-4840-B441-E15D6E2BAFC2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D8029003-7A3F-4840-B441-E15D6E2BAFC2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D8029003-7A3F-4840-B441-E15D6E2BAFC2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D127643F-69AA-4C4C-A624-7754289E798C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D127643F-69AA-4C4C-A624-7754289E798C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D127643F-69AA-4C4C-A624-7754289E798C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D127643F-69AA-4C4C-A624-7754289E798C}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/AeroWizard/AeroWizard/AeroWizardHelp/AeroWizardHelp.shfbproj b/AeroWizard/AeroWizard/AeroWizardHelp/AeroWizardHelp.shfbproj
new file mode 100644
index 0000000..2822a14
--- /dev/null
+++ b/AeroWizard/AeroWizard/AeroWizardHelp/AeroWizardHelp.shfbproj
@@ -0,0 +1,142 @@
+
+
+
+
+ Debug
+ AnyCPU
+ 2.0
+ {d62d015e-12be-42d0-a62c-997aae54d654}
+ 2015.6.5.0
+
+ AeroWizardHelp
+ AeroWizardHelp
+ AeroWizardHelp
+
+ .\Help\
+ AeroWizard
+ en-US
+
+
+
+
+
+
+
+
+
+ {@TokenFiles}
+
+
+
+
+
+ {@HelpFormatOutputPaths}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {@SyntaxFilters}
+
+
+
+
+
+
+
+
+
+
+
+ The Microsoft.Win32.DesktopWindowManager namespace includes the DesktopWindowManager class and an extender control which allows the manipulation of the Desktop Window Manager and encapsulates API calls to that end. The DWM controls the glass effect on windows and painting on those affected surfaces.
+ The AeroWizard namespace provides the classes and components necessary for the creation of wizards.
+
+ Extensions to the VisualStyles classes native to .NET that accomodate the AEROWIZARD tag.
+
+
+
+
+
+
+
+
+ OnlyWarningsAndErrors
+ MSHelpViewer
+ False
+ .NET Framework 4.0
+ True
+ False
+ False
+ True
+ C#, Visual Basic, Managed C++
+ Blank
+ Wizard .NET Library Help
+ True
+ VS2013
+ False
+ Guid
+ Wizard .NET Library
+ ©%3b 2015 Codeplex Community. All rights reserved.
+ http://aerowizard.codeplex.com/license
+ AboveNamespaces
+ VisualStudio12
+ -1
+ 100
+ 100
+ -1
+
+
+ Msdn
+ 100
+ VS
+ SAK
+ SAK
+ SAK
+ SAK
+ The Wizard project provides components allowing for the simple creation of Aero Wizards %28new wizard format in Vista and later%29 and other wizards which strictly follow Microsoft guidelines and use Visual Styles to pull specific settings from the system.
+ Attributes, InheritedMembers, InheritedFrameworkMembers, Protected, SealedProtected
+
+
+
+ 2
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AeroWizard/AeroWizard/AeroWizardItemTemplate/AeroWizardItemTemplate.Designer.cs b/AeroWizard/AeroWizard/AeroWizardItemTemplate/AeroWizardItemTemplate.Designer.cs
new file mode 100644
index 0000000..f0bcba5
--- /dev/null
+++ b/AeroWizard/AeroWizard/AeroWizardItemTemplate/AeroWizardItemTemplate.Designer.cs
@@ -0,0 +1,69 @@
+namespace $rootnamespace$
+{
+ partial class $safeitemname$
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.wizardControl1 = new AeroWizard.WizardControl();
+ this.wizardPage1 = new AeroWizard.WizardPage();
+ ((System.ComponentModel.ISupportInitialize)(this.wizardControl1)).BeginInit();
+ this.SuspendLayout();
+ //
+ // wizardControl1
+ //
+ this.wizardControl1.Location = new System.Drawing.Point(0, 0);
+ this.wizardControl1.Name = "wizardControl1";
+ this.wizardControl1.Pages.Add(this.wizardPage1);
+ this.wizardControl1.Size = new System.Drawing.Size(574, 415);
+ this.wizardControl1.TabIndex = 0;
+ //
+ // wizardPage1
+ //
+ this.wizardPage1.Name = "wizardPage1";
+ this.wizardPage1.Size = new System.Drawing.Size(527, 260);
+ this.wizardPage1.TabIndex = 0;
+ this.wizardPage1.Text = "Page Title";
+ //
+ // $safeitemname$
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(574, 415);
+ this.Controls.Add(this.wizardControl1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.Name = "$safeitemname$";
+ ((System.ComponentModel.ISupportInitialize)(this.wizardControl1)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private AeroWizard.WizardControl wizardControl1;
+ private AeroWizard.WizardPage wizardPage1;
+ }
+}
\ No newline at end of file
diff --git a/AeroWizard/AeroWizard/AeroWizardItemTemplate/AeroWizardItemTemplate.cs b/AeroWizard/AeroWizard/AeroWizardItemTemplate/AeroWizardItemTemplate.cs
new file mode 100644
index 0000000..93981e0
--- /dev/null
+++ b/AeroWizard/AeroWizard/AeroWizardItemTemplate/AeroWizardItemTemplate.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Windows.Forms;
+
+namespace $rootnamespace$
+{
+ public partial class $safeitemname$ : Form
+ {
+ public $safeitemname$()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/AeroWizard/AeroWizard/AeroWizardItemTemplate/AeroWizardItemTemplate.csproj b/AeroWizard/AeroWizard/AeroWizardItemTemplate/AeroWizardItemTemplate.csproj
new file mode 100644
index 0000000..1742c80
--- /dev/null
+++ b/AeroWizard/AeroWizard/AeroWizardItemTemplate/AeroWizardItemTemplate.csproj
@@ -0,0 +1,129 @@
+
+
+
+ 14.0
+ 11.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+ 12.0
+ SAK
+ SAK
+ SAK
+ SAK
+
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+ Client
+
+
+
+ Debug
+ AnyCPU
+ {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {BE2F5D91-AB68-432F-A94D-E68F05071324}
+ Library
+ Properties
+ AeroWizardItemTemplate
+ AeroWizardItemTemplate
+ v4.0
+ 512
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+ AeroWizardItemTemplate.cs
+
+
+
+
+
+ Windows Forms
+ Designer
+
+
+
+
+ AeroWizardItemTemplate.cs
+
+
+
+
+
+
+
+ False
+ Microsoft .NET Framework 4.5 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AeroWizard/AeroWizard/AeroWizardItemTemplate/AeroWizardItemTemplate.resx b/AeroWizard/AeroWizard/AeroWizardItemTemplate/AeroWizardItemTemplate.resx
new file mode 100644
index 0000000..7080a7d
--- /dev/null
+++ b/AeroWizard/AeroWizard/AeroWizardItemTemplate/AeroWizardItemTemplate.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/AeroWizard/AeroWizard/AeroWizardItemTemplate/AeroWizardItemTemplate.vstemplate b/AeroWizard/AeroWizard/AeroWizardItemTemplate/AeroWizardItemTemplate.vstemplate
new file mode 100644
index 0000000..7ad3251
--- /dev/null
+++ b/AeroWizard/AeroWizard/AeroWizardItemTemplate/AeroWizardItemTemplate.vstemplate
@@ -0,0 +1,46 @@
+
+
+
+ AeroWizard.cs
+ AeroWizard Control
+ Windows Form hosting a WizardControl to create an Aero style wizard
+ CSharp
+ true
+ 1
+ 2.0
+ 100
+ WizardControlTemplate.ico
+ __PreviewImage.PNG
+
+
+
+
+ System
+
+
+ System.Design
+
+
+ System.Drawing
+
+
+ System.Windows.Forms
+
+
+ AeroWizard
+
+
+ AeroWizardItemTemplate.cs
+ AeroWizardItemTemplate.Designer.cs
+ AeroWizardItemTemplate.resx
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AeroWizard/AeroWizard/AeroWizardItemTemplate/Properties/AssemblyInfo.cs b/AeroWizard/AeroWizard/AeroWizardItemTemplate/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..ad7b7d0
--- /dev/null
+++ b/AeroWizard/AeroWizard/AeroWizardItemTemplate/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("AeroWizardItemTemplate")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("AeroWizardItemTemplate")]
+[assembly: AssemblyCopyright("Copyright © 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("b944454d-35f5-4278-a467-a2fdbb9ce699")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/AeroWizard/AeroWizard/AeroWizardItemTemplate/WizardControlTemplate.ico b/AeroWizard/AeroWizard/AeroWizardItemTemplate/WizardControlTemplate.ico
new file mode 100644
index 0000000..1137925
Binary files /dev/null and b/AeroWizard/AeroWizard/AeroWizardItemTemplate/WizardControlTemplate.ico differ
diff --git a/AeroWizard/AeroWizard/AeroWizardItemTemplate/__PreviewImage.PNG b/AeroWizard/AeroWizard/AeroWizardItemTemplate/__PreviewImage.PNG
new file mode 100644
index 0000000..6503e7b
Binary files /dev/null and b/AeroWizard/AeroWizard/AeroWizardItemTemplate/__PreviewImage.PNG differ
diff --git a/AeroWizard/AeroWizard/AeroWizardTemplates/AeroWizardTemplates.csproj b/AeroWizard/AeroWizard/AeroWizardTemplates/AeroWizardTemplates.csproj
new file mode 100644
index 0000000..cedc6a4
--- /dev/null
+++ b/AeroWizard/AeroWizard/AeroWizardTemplates/AeroWizardTemplates.csproj
@@ -0,0 +1,151 @@
+
+
+
+ 14.0
+ 11.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+ 12.0
+ SAK
+ SAK
+ SAK
+ SAK
+
+
+ Client
+ false
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ true
+
+
+
+ Debug
+ AnyCPU
+ 2.0
+ {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {438228D8-C9EB-41DC-A7C9-9A0C3D8EEAAA}
+ Library
+ Properties
+ AeroWizardTemplates
+ AeroWizardTemplates
+ v4.0
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ false
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+ false
+ False
+
+
+
+
+
+
+ Always
+ true
+
+
+ true
+
+
+ Designer
+
+
+
+
+ Always
+ true
+
+
+ Always
+ true
+
+
+
+
+ False
+ Microsoft .NET Framework 4.5 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+ {BE2F5D91-AB68-432F-A94D-E68F05071324}
+ AeroWizardItemTemplate
+ ItemTemplatesA
+ false
+ TemplateProjectOutputGroup%3b
+
+
+ {D8029003-7A3F-4840-B441-E15D6E2BAFC2}
+ CustomWizardItemTemplate
+ ItemTemplatesB
+ false
+ TemplateProjectOutputGroup%3b
+
+
+ {d127643f-69aa-4c4c-a624-7754289e798c}
+ Wizard97ItemTemplate
+ ItemTemplatesC
+ false
+ TemplateProjectOutputGroup%3b
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AeroWizard/AeroWizard/AeroWizardTemplates/License.txt b/AeroWizard/AeroWizard/AeroWizardTemplates/License.txt
new file mode 100644
index 0000000..e8e68ae
--- /dev/null
+++ b/AeroWizard/AeroWizard/AeroWizardTemplates/License.txt
@@ -0,0 +1,9 @@
+The MIT License (MIT)
+
+Copyright (c) 2012-2014 David Hall
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/AeroWizard/AeroWizard/AeroWizardTemplates/Properties/AssemblyInfo.cs b/AeroWizard/AeroWizard/AeroWizardTemplates/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..015b608
--- /dev/null
+++ b/AeroWizard/AeroWizard/AeroWizardTemplates/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("AeroWizardTemplates")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("AeroWizardTemplates")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/AeroWizard/AeroWizard/AeroWizardTemplates/WizardControlTemplate.ico b/AeroWizard/AeroWizard/AeroWizardTemplates/WizardControlTemplate.ico
new file mode 100644
index 0000000..06dd979
Binary files /dev/null and b/AeroWizard/AeroWizard/AeroWizardTemplates/WizardControlTemplate.ico differ
diff --git a/AeroWizard/AeroWizard/AeroWizardTemplates/__PreviewImage.PNG b/AeroWizard/AeroWizard/AeroWizardTemplates/__PreviewImage.PNG
new file mode 100644
index 0000000..6503e7b
Binary files /dev/null and b/AeroWizard/AeroWizard/AeroWizardTemplates/__PreviewImage.PNG differ
diff --git a/AeroWizard/AeroWizard/AeroWizardTemplates/source.extension.vsixmanifest b/AeroWizard/AeroWizard/AeroWizardTemplates/source.extension.vsixmanifest
new file mode 100644
index 0000000..3fd900a
--- /dev/null
+++ b/AeroWizard/AeroWizard/AeroWizardTemplates/source.extension.vsixmanifest
@@ -0,0 +1,28 @@
+
+
+
+
+ Windows Forms Wizard Templates
+ Library for creating wizards for Windows Forms
+ https://aerowizard.codeplex.com/
+ License.txt
+ http://aerowizard.codeplex.com/documentation
+ https://aerowizard.codeplex.com/SourceControl/list/changesets
+ WizardControlTemplate.ico
+ __PreviewImage.PNG
+ winforms;wizard;aero
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AeroWizard/AeroWizard/ControlExtension.cs b/AeroWizard/AeroWizard/ControlExtension.cs
new file mode 100644
index 0000000..326ceb7
--- /dev/null
+++ b/AeroWizard/AeroWizard/ControlExtension.cs
@@ -0,0 +1,98 @@
+
+namespace System.Windows.Forms
+{
+ static class ControlExtension
+ {
+ ///
+ /// Performs an action on a control after its handle has been created. If the control's handle has already been created, the action is executed immediately.
+ ///
+ /// This control.
+ /// The action to execute.
+ public static void CallWhenHandleValid(this Control ctrl, Action action)
+ {
+ if (ctrl.IsHandleCreated)
+ {
+ action(ctrl);
+ }
+ else
+ {
+ LayoutEventHandler handler = null;
+ handler = (sender, e) =>
+ {
+ if (ctrl.IsHandleCreated)
+ {
+ ctrl.Layout -= handler;
+ action(ctrl);
+ }
+ };
+ ctrl.Layout += handler;
+ }
+ }
+
+ ///
+ /// Gets the control in the list of parents of type T.
+ ///
+ /// The based of the parent control to retrieve.
+ /// This control.
+ /// The parent control matching T or null if not found.
+ [Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+ public static T GetParent(this Control ctrl) where T : Control, new()
+ {
+ Control p = ctrl.Parent;
+ while (p != null & !(p is T))
+ p = p.Parent;
+ return p as T;
+ }
+
+ ///
+ /// Gets the top-most control in the list of parents of type T.
+ ///
+ /// The based of the parent control to retrieve.
+ /// This control.
+ /// The top-most parent control matching T or null if not found.
+ public static T GetTopMostParent(this Control ctrl) where T : Control, new()
+ {
+ var stack = new System.Collections.Generic.Stack();
+ Control p = ctrl.Parent;
+ while (p != null)
+ {
+ stack.Push(p);
+ p = p.Parent;
+ }
+ while (stack.Count > 0)
+ if ((p = stack.Pop()) is T)
+ return p as T;
+ return null;
+ }
+
+ ///
+ /// Gets the right to left property.
+ ///
+ /// This control.
+ /// Culture defined direction of text for this control.
+ public static RightToLeft GetRightToLeftProperty(this Control ctrl)
+ {
+ if (ctrl.RightToLeft == RightToLeft.Inherit)
+ return GetRightToLeftProperty(ctrl.Parent);
+ return ctrl.RightToLeft;
+ }
+
+ ///
+ /// Determines whether this control is in design mode.
+ ///
+ /// This control.
+ /// true if in design mode; otherwise, false.
+ public static bool IsDesignMode(this Control ctrl)
+ {
+ Control p = ctrl;
+ while (p != null)
+ {
+ var site = p.Site;
+ if (site != null && site.DesignMode)
+ return true;
+ p = p.Parent;
+ }
+ return false;
+ }
+ }
+}
diff --git a/AeroWizard/AeroWizard/CustomWizardItemTemplate/CustomWizardItemTemplate.Designer.cs b/AeroWizard/AeroWizard/CustomWizardItemTemplate/CustomWizardItemTemplate.Designer.cs
new file mode 100644
index 0000000..05c5ae2
--- /dev/null
+++ b/AeroWizard/AeroWizard/CustomWizardItemTemplate/CustomWizardItemTemplate.Designer.cs
@@ -0,0 +1,130 @@
+namespace $rootnamespace$
+{
+ partial class $safeitemname$
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.backBtn = new System.Windows.Forms.Button();
+ this.cancelBtn = new System.Windows.Forms.Button();
+ this.nextBtn = new System.Windows.Forms.Button();
+ this.wizardPageContainer1 = new AeroWizard.WizardPageContainer();
+ this.wizardPage1 = new AeroWizard.WizardPage();
+ this.headingControl = new System.Windows.Forms.Label();
+ ((System.ComponentModel.ISupportInitialize)(this.wizardPageContainer1)).BeginInit();
+ this.wizardPageContainer1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // backBtn
+ //
+ this.backBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.backBtn.Location = new System.Drawing.Point(93, 204);
+ this.backBtn.Name = "backBtn";
+ this.backBtn.Size = new System.Drawing.Size(75, 23);
+ this.backBtn.TabIndex = 1;
+ this.backBtn.Text = "&Back";
+ //
+ // cancelBtn
+ //
+ this.cancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.cancelBtn.Location = new System.Drawing.Point(255, 204);
+ this.cancelBtn.Name = "cancelBtn";
+ this.cancelBtn.Size = new System.Drawing.Size(75, 23);
+ this.cancelBtn.TabIndex = 1;
+ this.cancelBtn.Text = "&Cancel";
+ //
+ // nextBtn
+ //
+ this.nextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.nextBtn.Location = new System.Drawing.Point(174, 204);
+ this.nextBtn.Name = "nextBtn";
+ this.nextBtn.Size = new System.Drawing.Size(75, 23);
+ this.nextBtn.TabIndex = 1;
+ this.nextBtn.Text = "&Next";
+ //
+ // wizardPageContainer1
+ //
+ this.wizardPageContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.wizardPageContainer1.BackButton = this.backBtn;
+ this.wizardPageContainer1.CancelButton = this.cancelBtn;
+ this.wizardPageContainer1.Controls.Add(this.wizardPage1);
+ this.wizardPageContainer1.Location = new System.Drawing.Point(12, 25);
+ this.wizardPageContainer1.Name = "wizardPageContainer1";
+ this.wizardPageContainer1.NextButton = this.nextBtn;
+ this.wizardPageContainer1.Pages.Add(this.wizardPage1);
+ this.wizardPageContainer1.Size = new System.Drawing.Size(318, 173);
+ this.wizardPageContainer1.TabIndex = 2;
+ this.wizardPageContainer1.Cancelling += new System.ComponentModel.CancelEventHandler(this.wizardPageContainer1_Cancelling);
+ this.wizardPageContainer1.Finished += new System.EventHandler(this.wizardPageContainer1_Finished);
+ this.wizardPageContainer1.SelectedPageChanged += new System.EventHandler(this.wizardPageContainer1_SelectedPageChanged);
+ //
+ // wizardPage1
+ //
+ this.wizardPage1.Name = "wizardPage1";
+ this.wizardPage1.Size = new System.Drawing.Size(318, 173);
+ this.wizardPage1.TabIndex = 0;
+ this.wizardPage1.Text = "Page 1";
+ //
+ // headingControl
+ //
+ this.headingControl.AutoSize = true;
+ this.headingControl.Location = new System.Drawing.Point(9, 9);
+ this.headingControl.Name = "headingControl";
+ this.headingControl.Size = new System.Drawing.Size(59, 13);
+ this.headingControl.TabIndex = 3;
+ this.headingControl.Text = "";
+ //
+ // $safeitemname$
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(342, 239);
+ this.Controls.Add(this.headingControl);
+ this.Controls.Add(this.wizardPageContainer1);
+ this.Controls.Add(this.cancelBtn);
+ this.Controls.Add(this.nextBtn);
+ this.Controls.Add(this.backBtn);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+ this.Name = "$safeitemname$";
+ ((System.ComponentModel.ISupportInitialize)(this.wizardPageContainer1)).EndInit();
+ this.wizardPageContainer1.ResumeLayout(false);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button backBtn;
+ private System.Windows.Forms.Button cancelBtn;
+ private System.Windows.Forms.Button nextBtn;
+ private AeroWizard.WizardPageContainer wizardPageContainer1;
+ private AeroWizard.WizardPage wizardPage1;
+ private System.Windows.Forms.Label headingControl;
+ }
+}
\ No newline at end of file
diff --git a/AeroWizard/AeroWizard/CustomWizardItemTemplate/CustomWizardItemTemplate.cs b/AeroWizard/AeroWizard/CustomWizardItemTemplate/CustomWizardItemTemplate.cs
new file mode 100644
index 0000000..fb95a5b
--- /dev/null
+++ b/AeroWizard/AeroWizard/CustomWizardItemTemplate/CustomWizardItemTemplate.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Windows.Forms;
+
+namespace $rootnamespace$
+{
+ public partial class $safeitemname$ : Form
+ {
+ public $safeitemname$()
+ {
+ InitializeComponent();
+ }
+
+ private void wizardPageContainer1_Cancelling(object sender, System.ComponentModel.CancelEventArgs e)
+ {
+ this.Close();
+ }
+
+ private void wizardPageContainer1_Finished(object sender, EventArgs e)
+ {
+ this.Close();
+ }
+
+ private void wizardPageContainer1_SelectedPageChanged(object sender, EventArgs e)
+ {
+ headingControl.Text = wizardPageContainer1.SelectedPage.Text;
+ }
+ }
+}
diff --git a/AeroWizard/AeroWizard/CustomWizardItemTemplate/CustomWizardItemTemplate.csproj b/AeroWizard/AeroWizard/CustomWizardItemTemplate/CustomWizardItemTemplate.csproj
new file mode 100644
index 0000000..1edf669
--- /dev/null
+++ b/AeroWizard/AeroWizard/CustomWizardItemTemplate/CustomWizardItemTemplate.csproj
@@ -0,0 +1,129 @@
+
+
+
+ 14.0
+ 11.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+ 12.0
+ SAK
+ SAK
+ SAK
+ SAK
+
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+ Client
+
+
+
+ Debug
+ AnyCPU
+ {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {D8029003-7A3F-4840-B441-E15D6E2BAFC2}
+ Library
+ Properties
+ CustomWizardItemTemplate
+ CustomWizardItemTemplate
+ v4.0
+ 512
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+ CustomWizardItemTemplate.cs
+
+
+
+
+
+ Windows Forms
+ Designer
+
+
+
+
+ CustomWizardItemTemplate.cs
+
+
+
+
+
+
+
+ False
+ Microsoft .NET Framework 4.5 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AeroWizard/AeroWizard/CustomWizardItemTemplate/CustomWizardItemTemplate.resx b/AeroWizard/AeroWizard/CustomWizardItemTemplate/CustomWizardItemTemplate.resx
new file mode 100644
index 0000000..7080a7d
--- /dev/null
+++ b/AeroWizard/AeroWizard/CustomWizardItemTemplate/CustomWizardItemTemplate.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/AeroWizard/AeroWizard/CustomWizardItemTemplate/CustomWizardItemTemplate.vstemplate b/AeroWizard/AeroWizard/CustomWizardItemTemplate/CustomWizardItemTemplate.vstemplate
new file mode 100644
index 0000000..5ef4d3e
--- /dev/null
+++ b/AeroWizard/AeroWizard/CustomWizardItemTemplate/CustomWizardItemTemplate.vstemplate
@@ -0,0 +1,46 @@
+
+
+
+ CustomWizard.cs
+ Custom Wizard Control
+ Windows Form hosting controls that allow it to behave as a custom wizard.
+ CSharp
+ true
+ 1
+ 2.0
+ 100
+ WizardControlTemplate.ico
+ __PreviewImage.PNG
+
+
+
+
+ System
+
+
+ System.Design
+
+
+ System.Drawing
+
+
+ System.Windows.Forms
+
+
+ AeroWizard
+
+
+ CustomWizardItemTemplate.cs
+ CustomWizardItemTemplate.Designer.cs
+ CustomWizardItemTemplate.resx
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AeroWizard/AeroWizard/CustomWizardItemTemplate/Properties/AssemblyInfo.cs b/AeroWizard/AeroWizard/CustomWizardItemTemplate/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..8a8e2ac
--- /dev/null
+++ b/AeroWizard/AeroWizard/CustomWizardItemTemplate/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("CustomWizardItemTemplate")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("CustomWizardItemTemplate")]
+[assembly: AssemblyCopyright("Copyright © 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("26d5a2d9-ef16-4d09-a4f5-1b401d26db14")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/AeroWizard/AeroWizard/CustomWizardItemTemplate/WizardControlTemplate.ico b/AeroWizard/AeroWizard/CustomWizardItemTemplate/WizardControlTemplate.ico
new file mode 100644
index 0000000..1137925
Binary files /dev/null and b/AeroWizard/AeroWizard/CustomWizardItemTemplate/WizardControlTemplate.ico differ
diff --git a/AeroWizard/AeroWizard/CustomWizardItemTemplate/__PreviewImage.PNG b/AeroWizard/AeroWizard/CustomWizardItemTemplate/__PreviewImage.PNG
new file mode 100644
index 0000000..ea998d3
Binary files /dev/null and b/AeroWizard/AeroWizard/CustomWizardItemTemplate/__PreviewImage.PNG differ
diff --git a/AeroWizard/AeroWizard/EventedList.cs b/AeroWizard/AeroWizard/EventedList.cs
new file mode 100644
index 0000000..521815e
--- /dev/null
+++ b/AeroWizard/AeroWizard/EventedList.cs
@@ -0,0 +1,1410 @@
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+
+namespace System.Collections.Generic
+{
+ ///
+ /// A generic list that provides event for changes to the list.
+ ///
+ /// Type for the list.
+ [Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
+ [Serializable]
+ public class EventedList : IList, IList
+ {
+ // Fields
+ private const int _defaultCapacity = 4;
+
+ private static T[] _emptyArray = new T[0];
+
+ private T[] _items;
+ private int _size;
+ [NonSerialized]
+ private object _syncRoot;
+ private int _version;
+
+ ///
+ /// Initializes a new instance of the class that is empty and has the default initial capacity.
+ ///
+ public EventedList()
+ {
+ _items = EventedList._emptyArray;
+ }
+
+ ///
+ /// Initializes a new instance of the class that contains elements copied from the specified collection and has sufficient capacity to accommodate the number of elements copied.
+ ///
+ /// The collection whose elements are copied to the new list.
+ /// is null.
+ [Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
+ public EventedList(IEnumerable collection)
+ {
+ if (collection == null)
+ {
+ throw new ArgumentNullException(nameof(collection));
+ }
+ ICollection is2 = collection as ICollection;
+ if (is2 != null)
+ {
+ int count = is2.Count;
+ _items = new T[count];
+ is2.CopyTo(_items, 0);
+ _size = count;
+ }
+ else
+ {
+ _size = 0;
+ _items = new T[4];
+ using (IEnumerator enumerator = collection.GetEnumerator())
+ {
+ while (enumerator.MoveNext())
+ {
+ Add(enumerator.Current);
+ }
+ }
+ }
+ }
+
+ ///
+ /// Initializes a new instance of the class that is empty and has the default initial capacity.
+ ///
+ /// The number of elements that the new list can initially store.
+ /// is less than 0.
+ public EventedList(int capacity)
+ {
+ if (capacity < 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(capacity));
+ }
+ _items = new T[capacity];
+ }
+
+ ///
+ /// Occurs when an item has been added.
+ ///
+ public event EventHandler> ItemAdded;
+
+ ///
+ /// Occurs when an item has changed.
+ ///
+ public event EventHandler> ItemChanged;
+
+ ///
+ /// Occurs when an item has been deleted.
+ ///
+ public event EventHandler> ItemDeleted;
+
+ ///
+ /// Occurs when the list has been reset.
+ ///
+ public event EventHandler> Reset;
+
+ ///
+ /// Gets or sets the total number of elements the internal data structure can hold without resizing.
+ ///
+ ///
+ /// The number of elements that the can contain before resizing is required.
+ ///
+ /// Capacity is set to a value that is less than .
+ public int Capacity
+ {
+ get
+ {
+ return _items.Length;
+ }
+ set
+ {
+ if (value != _items.Length)
+ {
+ if (value < _size)
+ {
+ throw new ArgumentOutOfRangeException("value");
+ }
+ if (value > 0)
+ {
+ T[] destinationArray = new T[value];
+ if (_size > 0)
+ {
+ Array.Copy(_items, 0, destinationArray, 0, _size);
+ }
+ _items = destinationArray;
+ }
+ else
+ {
+ _items = EventedList._emptyArray;
+ }
+ }
+ }
+ }
+
+ ///
+ /// Gets the number of elements contained in the .
+ ///
+ ///
+ /// The number of elements contained in the .
+ ///
+ public int Count => _size;
+
+ ///
+ /// Gets a value indicating whether access to the is synchronized (thread safe).
+ ///
+ bool ICollection.IsSynchronized => false;
+
+ ///
+ /// Gets an object that can be used to synchronize access to the .
+ ///
+ object ICollection.SyncRoot
+ {
+ get
+ {
+ if (_syncRoot == null)
+ {
+ System.Threading.Interlocked.CompareExchange(ref _syncRoot, new object(), null);
+ }
+ return _syncRoot;
+ }
+ }
+
+ ///
+ /// Gets a value indicating whether the is read-only.
+ ///
+ bool ICollection.IsReadOnly => false;
+
+ ///
+ /// Gets a value indicating whether the has a fixed size.
+ ///
+ bool IList.IsFixedSize => false;
+
+ ///
+ /// Gets a value indicating whether the is read-only.
+ ///
+ bool IList.IsReadOnly => false;
+
+ ///
+ /// Gets or sets the at the specified index.
+ ///
+ /// The index.
+ /// The element at the specified index.
+ object IList.this[int index]
+ {
+ get
+ {
+ return this[index];
+ }
+ set
+ {
+ EventedList.VerifyValueType(value);
+ this[index] = (T)value;
+ }
+ }
+
+ ///
+ /// Gets or sets the element at the specified index.
+ ///
+ /// The element at the specified index.
+ /// The zero-based index of the element to get or set.
+ /// is less than 0.
+ public T this[int index]
+ {
+ get
+ {
+ if (index >= _size)
+ {
+ throw new ArgumentOutOfRangeException(nameof(index));
+ }
+ return _items[index];
+ }
+ set
+ {
+ if (index >= _size)
+ {
+ throw new ArgumentOutOfRangeException(nameof(index));
+ }
+ T oldValue = _items[index];
+ _items[index] = value;
+ _version++;
+ OnItemChanged(index, oldValue, value);
+ }
+ }
+
+ ///
+ /// Adds an item to the .
+ ///
+ /// The object to add to the .
+ /// The is read-only.
+ public void Add(T item)
+ {
+ if (_size == _items.Length)
+ {
+ EnsureCapacity(_size + 1);
+ }
+ _items[_size++] = item;
+ _version++;
+ OnItemAdded(_size, item);
+ }
+
+ ///
+ /// Adds the range.
+ ///
+ /// The collection.
+ public void AddRange(IEnumerable collection)
+ {
+ InsertRange(_size, collection);
+ }
+
+ ///
+ /// Returns a read-only wrapper for the current collection.
+ ///
+ /// A that acts as a read-only wrapper around the current .
+ public ReadOnlyCollection AsReadOnly() => new ReadOnlyCollection(this);
+
+ ///
+ /// Searches the entire sorted for an element using the default comparer and returns the zero-based index of the element.
+ ///
+ /// The object to locate. The value can be null for reference types.
+ /// The zero-based index of in the sorted , if is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item or, if there is no larger element, the bitwise complement of .
+ public int BinarySearch(T item) => BinarySearch(0, Count, item, null);
+
+ ///
+ /// Searches the entire sorted for an element using the specified comparer and returns the zero-based index of the element.
+ ///
+ /// The object to locate. The value can be null for reference types.
+ /// The implementation to use when comparing elements, or null to use the default comparer .
+ /// The zero-based index of in the sorted , if is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item or, if there is no larger element, the bitwise complement of .
+ public int BinarySearch(T item, IComparer comparer) => BinarySearch(0, Count, item, comparer);
+
+ ///
+ /// Searches a range of elements in the sorted for an element using the specified comparer and returns the zero-based index of the element.
+ ///
+ /// The zero-based starting index of the range to search.
+ /// The length of the range to search.
+ /// The object to locate. The value can be null for reference types.
+ /// The implementation to use when comparing elements, or null to use the default comparer .
+ /// The zero-based index of in the sorted , if is found; otherwise, a negative number that is the bitwise complement of the index of the next element that is larger than item or, if there is no larger element, the bitwise complement of .
+ /// is less than 0. -or- is less than 0.
+ /// and do not denote a valid range in the .
+ public int BinarySearch(int index, int count, T item, IComparer comparer)
+ {
+ if ((index < 0) || (count < 0))
+ {
+ throw new ArgumentOutOfRangeException((index < 0) ? "index" : "count");
+ }
+ if ((_size - index) < count)
+ {
+ throw new ArgumentException($"{nameof(index)} and {nameof(count)} do not denote a valid range in the {nameof(EventedList)}.");
+ }
+ return Array.BinarySearch(_items, index, count, item, comparer);
+ }
+
+ ///
+ /// Removes all items from the .
+ ///
+ /// The is read-only.
+ public void Clear()
+ {
+ Array.Clear(_items, 0, _size);
+ _size = 0;
+ _version++;
+ OnReset();
+ }
+
+ ///
+ /// Determines whether the contains a specific value.
+ ///
+ /// The object to locate in the .
+ ///
+ /// true if is found in the ; otherwise, false.
+ ///
+ public bool Contains(T item)
+ {
+ if (item == null)
+ {
+ for (int j = 0; j < _size; j++)
+ {
+ if (_items[j] == null)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+ EqualityComparer comparer = EqualityComparer.Default;
+ for (int i = 0; i < _size; i++)
+ {
+ if (comparer.Equals(_items[i], item))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ ///
+ /// Converts the elements in the current to another type, and returns a list containing the converted elements.
+ ///
+ /// The type of the elements of the target array.
+ /// A delegate that converts each element from one type to another type.
+ /// A of the target type containing the converted elements from the current .
+ /// is null.
+ public EventedList ConvertAll(Converter converter)
+ {
+ if (converter == null)
+ {
+ throw new ArgumentNullException(nameof(converter));
+ }
+ EventedList list = new EventedList(_size);
+ for (int i = 0; i < _size; i++)
+ {
+ list._items[i] = converter(_items[i]);
+ }
+ list._size = _size;
+ return list;
+ }
+
+ ///
+ /// Copies the entire to a compatible one-dimensional array, starting at the beginning of the target array.
+ ///
+ /// The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing.
+ public void CopyTo(T[] array)
+ {
+ CopyTo(array, 0);
+ }
+
+ ///
+ /// Copies the elements of the to an , starting at a particular index.
+ ///
+ /// The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing.
+ /// The zero-based index in at which copying begins.
+ /// is null.
+ /// is less than 0.
+ /// is multidimensional. -or- is equal to or greater than the length of .-or-The number of elements in the source is greater than the available space from to the end of the destination .-or-Type T cannot be cast automatically to the type of the destination .
+ public void CopyTo(T[] array, int arrayIndex)
+ {
+ Array.Copy(_items, 0, array, arrayIndex, _size);
+ }
+
+ ///
+ /// Copies a range of elements from the to an , starting at a particular index.
+ ///
+ /// The zero-based index in the source at which copying begins.
+ /// The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing.
+ /// The zero-based index in at which copying begins.
+ /// The number of elements to copy.
+ /// is null.
+ /// is less than 0.
+ /// is multidimensional. -or- is equal to or greater than the length of .-or-The number of elements in the source is greater than the available space from to the end of the destination .-or-Type T cannot be cast automatically to the type of the destination .
+ public void CopyTo(int index, T[] array, int arrayIndex, int count)
+ {
+ if ((_size - index) < count)
+ {
+ throw new ArgumentException($"{nameof(array)} is multidimensional. -or- {nameof(arrayIndex)} is equal to or greater than the length of {nameof(array)}. -or- The number of elements in the source list is greater than the available space from {nameof(arrayIndex)} to the end of the destination {nameof(array)}. -or- Type {nameof(T)} cannot be cast automatically to the type of the destination {nameof(array)}.");
+ }
+ Array.Copy(_items, index, array, arrayIndex, count);
+ }
+
+ ///
+ /// Determines whether the contains elements that match the conditions defined by the specified predicate.
+ ///
+ /// The delegate that defines the conditions of the elements to search for.
+ /// true if the contains one or more elements that match the conditions defined by the specified predicate; otherwise, false.
+ public bool Exists(Predicate match) => (FindIndex(match) != -1);
+
+ ///
+ /// Searches for an element that matches the conditions defined by the specified predicate, and returns the first occurrence within the entire .
+ ///
+ /// The delegate that defines the conditions of the elements to search for.
+ /// The first element that matches the conditions defined by the specified predicate, if found; otherwise, the default value for type .
+ public T Find(Predicate match)
+ {
+ if (match == null)
+ {
+ throw new ArgumentNullException(nameof(match));
+ }
+ for (int i = 0; i < _size; i++)
+ {
+ if (match(_items[i]))
+ {
+ return _items[i];
+ }
+ }
+ return default(T);
+ }
+
+ ///
+ /// Retrieves all the elements that match the conditions defined by the specified predicate.
+ ///
+ /// The delegate that defines the conditions of the elements to search for.
+ /// A containing all the elements that match the conditions defined by the specified predicate, if found; otherwise, an empty .
+ public EventedList FindAll(Predicate match)
+ {
+ if (match == null)
+ {
+ throw new ArgumentNullException(nameof(match));
+ }
+ EventedList list = new EventedList();
+ for (int i = 0; i < _size; i++)
+ {
+ if (match(_items[i]))
+ {
+ list.Add(_items[i]);
+ }
+ }
+ return list;
+ }
+
+ ///
+ /// Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the entire .
+ ///
+ /// The delegate that defines the conditions of the elements to search for.
+ /// The zero-based index of the first occurrence of an element that matches the conditions defined by , if found; otherwise, 1.
+ /// is null.
+ public int FindIndex(Predicate match) => FindIndex(0, _size, match);
+
+ ///
+ /// Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the that extends from the specified index to the last element.
+ ///
+ /// The zero-based starting index of the search.
+ /// The delegate that defines the conditions of the elements to search for.
+ /// The zero-based index of the first occurrence of an element that matches the conditions defined by , if found; otherwise, 1.
+ ///
+ /// is outside the range of valid indexes for the .
+ ///
+ /// is null.
+ public int FindIndex(int startIndex, Predicate match) => FindIndex(startIndex, _size - startIndex, match);
+
+ ///
+ /// Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the that starts at the specified index and contains the specified number of elements.
+ ///
+ /// The zero-based starting index of the search.
+ /// The number of elements in the section to search.
+ /// The delegate that defines the conditions of the elements to search for.
+ /// The zero-based index of the first occurrence of an element that matches the conditions defined by , if found; otherwise, 1.
+ ///
+ /// is outside the range of valid indexes for the .
+ /// -or-
+ /// is less than 0.
+ /// -or-
+ /// and do not specify a valid section in the .
+ ///
+ /// is null.
+ public int FindIndex(int startIndex, int count, Predicate match)
+ {
+ if (startIndex > _size)
+ {
+ throw new ArgumentOutOfRangeException(nameof(startIndex));
+ }
+ if ((count < 0) || (startIndex > (_size - count)))
+ {
+ throw new ArgumentOutOfRangeException(nameof(count));
+ }
+ if (match == null)
+ {
+ throw new ArgumentNullException(nameof(match));
+ }
+ int num = startIndex + count;
+ for (int i = startIndex; i < num; i++)
+ {
+ if (match(_items[i]))
+ {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ ///
+ /// Searches for an element that matches the conditions defined by the specified predicate, and returns the last occurrence within the entire .
+ ///
+ /// The delegate that defines the conditions of the elements to search for.
+ /// The last element that matches the conditions defined by the specified predicate, if found; otherwise, the default value for type .
+ public T FindLast(Predicate match)
+ {
+ if (match == null)
+ {
+ throw new ArgumentNullException(nameof(match));
+ }
+ for (int i = _size - 1; i >= 0; i--)
+ {
+ if (match(_items[i]))
+ {
+ return _items[i];
+ }
+ }
+ return default(T);
+ }
+
+ ///
+ /// Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the entire .
+ ///
+ /// The delegate that defines the conditions of the elements to search for.
+ /// The zero-based index of the last occurrence of an element that matches the conditions defined by , if found; otherwise, 1.
+ /// is null.
+ public int FindLastIndex(Predicate match) => FindLastIndex(_size - 1, _size, match);
+
+ ///
+ /// Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the range of elements in the that extends from the specified index to the last element.
+ ///
+ /// The zero-based starting index of the search.
+ /// The delegate that defines the conditions of the elements to search for.
+ /// The zero-based index of the last occurrence of an element that matches the conditions defined by , if found; otherwise, 1.
+ ///
+ /// is outside the range of valid indexes for the .
+ ///
+ /// is null.
+ public int FindLastIndex(int startIndex, Predicate match) => FindLastIndex(startIndex, startIndex + 1, match);
+
+ ///
+ /// Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the range of elements in the that starts at the specified index and contains the specified number of elements.
+ ///
+ /// The zero-based starting index of the search.
+ /// The number of elements in the section to search.
+ /// The delegate that defines the conditions of the elements to search for.
+ /// The zero-based index of the last occurrence of an element that matches the conditions defined by , if found; otherwise, 1.
+ ///
+ /// is outside the range of valid indexes for the .
+ /// -or-
+ /// is less than 0.
+ /// -or-
+ /// and do not specify a valid section in the .
+ ///
+ /// is null.
+ public int FindLastIndex(int startIndex, int count, Predicate match)
+ {
+ if (match == null)
+ {
+ throw new ArgumentNullException(nameof(match));
+ }
+ if (_size == 0)
+ {
+ if (startIndex != -1)
+ {
+ throw new ArgumentOutOfRangeException(nameof(startIndex));
+ }
+ }
+ else if (startIndex >= _size)
+ {
+ throw new ArgumentOutOfRangeException(nameof(startIndex));
+ }
+ if ((count < 0) || (((startIndex - count) + 1) < 0))
+ {
+ throw new ArgumentOutOfRangeException(nameof(count));
+ }
+ int num = startIndex - count;
+ for (int i = startIndex; i > num; i--)
+ {
+ if (match(_items[i]))
+ {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ ///
+ /// Performs the specified action on each element of the .
+ ///
+ /// The delegate to perform on each element of the .
+ public void ForEach(Action action)
+ {
+ if (action == null)
+ {
+ throw new ArgumentNullException(nameof(action));
+ }
+ for (int i = 0; i < _size; i++)
+ {
+ action(_items[i]);
+ }
+ }
+
+ ///
+ /// Returns an enumerator that iterates through the .
+ ///
+ /// A for the .
+ public EventedList.Enumerator GetEnumerator() => new EventedList.Enumerator((EventedList)this);
+
+ ///
+ /// Creates a shallow copy of a range of elements in the source .
+ ///
+ /// The zero-based index at which the range starts.
+ /// The number of elements in the range.
+ /// A shallow copy of a range of elements in the source .
+ public EventedList GetRange(int index, int count)
+ {
+ if ((index < 0) || (count < 0))
+ {
+ throw new ArgumentOutOfRangeException((index < 0) ? nameof(index) : nameof(count));
+ }
+ if ((_size - index) < count)
+ {
+ throw new ArgumentException($"{nameof(index)} and {nameof(count)} do not denote a valid range of elements in the {nameof(EventedList)}.");
+ }
+ EventedList list = new EventedList(count);
+ Array.Copy(_items, index, list._items, 0, count);
+ list._size = count;
+ return list;
+ }
+
+ ///
+ /// Copies the elements of the ICollection to an Array, starting at a particular Array index.
+ ///
+ /// The array.
+ /// Index of the array.
+ /// Destination array cannot be null or multidimensional.
+ void ICollection.CopyTo(Array array, int arrayIndex)
+ {
+ if (array?.Rank != 1)
+ throw new ArgumentException("Destination array cannot be null or multidimensional.", nameof(array));
+ try
+ {
+ Array.Copy(_items, 0, array, arrayIndex, _size);
+ }
+ catch (ArrayTypeMismatchException e)
+ {
+ throw new ArgumentException("Type mismatch", e);
+ }
+ }
+
+ ///
+ /// Returns an enumerator that iterates through a collection.
+ ///
+ ///
+ /// An object that can be used to iterate through the collection.
+ ///
+ IEnumerator IEnumerable.GetEnumerator() => new EventedList.Enumerator((EventedList)this);
+
+ ///
+ /// Returns an enumerator that iterates through the collection.
+ ///
+ ///
+ /// A that can be used to iterate through the collection.
+ ///
+ IEnumerator IEnumerable.GetEnumerator() => new EventedList.Enumerator((EventedList)this);
+
+ ///
+ /// Adds an item to the IList.
+ ///
+ /// The item.
+ ///
+ int IList.Add(object item)
+ {
+ EventedList.VerifyValueType(item);
+ Add((T)item);
+ return (Count - 1);
+ }
+
+ ///
+ /// Determines whether the IList contains a specific value.
+ ///
+ /// The item.
+ ///
+ /// true if contains the specified item; otherwise, false.
+ ///
+ bool IList.Contains(object item) => (EventedList.IsCompatibleObject(item) && Contains((T)item));
+
+ ///
+ /// Determines the index of a specific item in the IList.
+ ///
+ /// The item.
+ ///
+ int IList.IndexOf(object item)
+ {
+ if (EventedList.IsCompatibleObject(item))
+ {
+ return IndexOf((T)item);
+ }
+ return -1;
+ }
+
+ ///
+ /// Inserts an item to the IList at the specified index.
+ ///
+ /// The index.
+ /// The item.
+ void IList.Insert(int index, object item)
+ {
+ EventedList.VerifyValueType(item);
+ Insert(index, (T)item);
+ }
+
+ ///
+ /// Removes the first occurrence of a specific object from the IList.
+ ///
+ /// The item.
+ void IList.Remove(object item)
+ {
+ if (EventedList.IsCompatibleObject(item))
+ {
+ Remove((T)item);
+ }
+ }
+
+ ///
+ /// Searches for the specified object and returns the zero-based index of the first occurrence within the entire .
+ ///
+ /// The object to locate in the . The value can be null for reference types.
+ ///
+ /// The index of if found in the list; otherwise, -1.
+ ///
+ public int IndexOf(T item) => Array.IndexOf(_items, item, 0, _size);
+
+ ///
+ /// Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the that starts at the specified index.
+ ///
+ /// The object to locate in the . The value can be null for reference types.
+ /// The zero-based starting index of the search. 0 (zero) is valid in an empty list.
+ /// The zero-based of the first occurrence of within the range of elements in the that starts at , if found; otherwise, 1.
+ ///
+ /// is outside the range of valid indexes for the .
+ ///
+ public int IndexOf(T item, int index)
+ {
+ if (index > _size)
+ {
+ throw new ArgumentOutOfRangeException(nameof(index));
+ }
+ return Array.IndexOf(_items, item, index, _size - index);
+ }
+
+ ///
+ /// Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the that starts at the specified index and contains the specified number of elements.
+ ///
+ /// The object to locate in the . The value can be null for reference types.
+ /// The zero-based starting index of the search. 0 (zero) is valid in an empty list.
+ /// The number of elements in the section to search.
+ /// The zero-based of the first occurrence of within the range of elements in the that starts at and contains number of elements, if found; otherwise, 1.
+ ///
+ /// is outside the range of valid indexes for the .
+ /// -or-
+ /// is less than 0.
+ /// -or-
+ /// and do not specify a valid section in the .
+ ///
+ public int IndexOf(T item, int index, int count)
+ {
+ if (index > _size)
+ {
+ throw new ArgumentOutOfRangeException(nameof(index));
+ }
+ if ((count < 0) || (index > (_size - count)))
+ {
+ throw new ArgumentOutOfRangeException(nameof(count));
+ }
+ return Array.IndexOf(_items, item, index, count);
+ }
+
+ ///
+ /// Inserts an item to the at the specified index.
+ ///
+ /// The zero-based index at which should be inserted.
+ /// The object to insert into the .
+ /// is not a valid index in the .
+ /// The is read-only.
+ public void Insert(int index, T item)
+ {
+ if (index > _size)
+ {
+ throw new ArgumentOutOfRangeException(nameof(index));
+ }
+ if (_size == _items.Length)
+ {
+ EnsureCapacity(_size + 1);
+ }
+ if (index < _size)
+ {
+ Array.Copy(_items, index, _items, index + 1, _size - index);
+ }
+ _items[index] = item;
+ _size++;
+ _version++;
+ OnItemAdded(index, item);
+ }
+
+ ///
+ /// Inserts the elements of a collection into the at the specified index.
+ ///
+ /// The zero-based index at which the new elements should be inserted.
+ /// The collection whose elements should be inserted into the . The collection itself cannot be null, but it can contain elements that are null, if type is a reference type.
+ public void InsertRange(int index, IEnumerable collection)
+ {
+ if (collection == null)
+ {
+ throw new ArgumentNullException(nameof(collection));
+ }
+ if (index > _size)
+ {
+ throw new ArgumentOutOfRangeException(nameof(index));
+ }
+ ICollection is2 = collection as ICollection;
+ if (is2 != null)
+ {
+ int count = is2.Count;
+ if (count > 0)
+ {
+ EnsureCapacity(_size + count);
+ if (index < _size)
+ {
+ Array.Copy(_items, index, _items, index + count, _size - index);
+ }
+ if (this == is2)
+ {
+ Array.Copy(_items, 0, _items, index, index);
+ Array.Copy(_items, (int)(index + count), _items, (int)(index * 2), (int)(_size - index));
+ }
+ else
+ {
+ T[] array = new T[count];
+ is2.CopyTo(array, 0);
+ array.CopyTo(_items, index);
+ }
+ _size += count;
+ for (int i = index; i < index + count; i++)
+ OnItemAdded(i, _items[i]);
+ }
+ }
+ else
+ {
+ using (IEnumerator enumerator = collection.GetEnumerator())
+ {
+ while (enumerator.MoveNext())
+ {
+ Insert(index++, enumerator.Current);
+ }
+ }
+ }
+ _version++;
+ }
+
+ ///
+ /// Searches for the specified object and returns the zero-based index of the last occurrence within the entire .
+ ///
+ /// The object to locate in the . The value can be null for reference types.
+ ///
+ /// The index of if found in the list; otherwise, -1.
+ ///
+ public int LastIndexOf(T item) => LastIndexOf(item, _size - 1, _size);
+
+ ///
+ /// Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the that starts at the specified index.
+ ///
+ /// The object to locate in the . The value can be null for reference types.
+ /// The zero-based starting index of the search. 0 (zero) is valid in an empty list.
+ /// The zero-based of the last occurrence of within the range of elements in the that starts at , if found; otherwise, 1.
+ ///
+ /// is outside the range of valid indexes for the .
+ ///
+ public int LastIndexOf(T item, int index)
+ {
+ if (index >= _size)
+ {
+ throw new ArgumentOutOfRangeException(nameof(index));
+ }
+ return LastIndexOf(item, index, index + 1);
+ }
+
+ ///
+ /// Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the that starts at the specified index and contains the specified number of elements.
+ ///
+ /// The object to locate in the . The value can be null for reference types.
+ /// The zero-based starting index of the search. 0 (zero) is valid in an empty list.
+ /// The number of elements in the section to search.
+ /// The zero-based of the last occurrence of within the range of elements in the that starts at and contains number of elements, if found; otherwise, 1.
+ ///
+ /// is outside the range of valid indexes for the .
+ /// -or-
+ /// is less than 0.
+ /// -or-
+ /// and do not specify a valid section in the .
+ ///
+ public int LastIndexOf(T item, int index, int count)
+ {
+ if (_size == 0)
+ {
+ return -1;
+ }
+ if ((index < 0) || (count < 0))
+ {
+ throw new ArgumentOutOfRangeException((index < 0) ? "index" : "count");
+ }
+ if ((index >= _size) || (count > (index + 1)))
+ {
+ throw new ArgumentOutOfRangeException((index >= _size) ? "index" : "count");
+ }
+ return Array.LastIndexOf(_items, item, index, count);
+ }
+
+ ///
+ /// Removes the first occurrence of a specific object from the .
+ ///
+ /// The object to remove from the .
+ ///
+ /// true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original .
+ ///
+ /// The is read-only.
+ public bool Remove(T item)
+ {
+ int index = IndexOf(item);
+ if (index >= 0)
+ {
+ RemoveAt(index);
+ return true;
+ }
+ return false;
+ }
+
+ ///
+ /// Removes all the elements that match the conditions defined by the specified predicate.
+ ///
+ /// The delegate that defines the conditions of the elements to remove.
+ /// The number of elements removed from the .
+ public int RemoveAll(Predicate match)
+ {
+ if (match == null)
+ {
+ throw new ArgumentNullException(nameof(match));
+ }
+ int index = 0;
+ while ((index < _size) && !match(_items[index]))
+ {
+ index++;
+ }
+ if (index >= _size)
+ {
+ return 0;
+ }
+ int num2 = index + 1;
+ while (num2 < _size)
+ {
+ while ((num2 < _size) && match(_items[num2]))
+ {
+ num2++;
+ }
+ if (num2 < _size)
+ {
+ T oldVal = _items[index + 1];
+ _items[index++] = _items[num2++];
+ OnItemDeleted(index, oldVal);
+ }
+ }
+ Array.Clear(_items, index, _size - index);
+ int num3 = _size - index;
+ _size = index;
+ _version++;
+ return num3;
+ }
+
+ ///
+ /// Removes the item at the specified index.
+ ///
+ /// The zero-based index of the item to remove.
+ /// is not a valid index in the .
+ /// The is read-only.
+ public void RemoveAt(int index)
+ {
+ if (index >= _size)
+ {
+ throw new ArgumentOutOfRangeException(nameof(index));
+ }
+ _size--;
+ T oldVal = _items[index];
+ if (index < _size)
+ {
+ Array.Copy(_items, index + 1, _items, index, _size - index);
+ }
+ _items[_size] = default(T);
+ _version++;
+ OnItemDeleted(index, oldVal);
+ }
+
+ ///
+ /// Removes a range of elements from the .
+ ///
+ /// The zero-based starting index of the range of elements to remove.
+ /// The number of elements to remove.
+ public void RemoveRange(int index, int count)
+ {
+ if ((index < 0) || (count < 0))
+ {
+ throw new ArgumentOutOfRangeException((index < 0) ? "index" : "count");
+ }
+ if ((_size - index) < count)
+ {
+ throw new ArgumentException($"{nameof(index)} and {nameof(count)} do not denote a valid range of elements in the {nameof(EventedList)}.");
+ }
+ if (count > 0)
+ {
+ _size -= count;
+ T[] array = new T[count];
+ Array.Copy(_items, index, array, 0, count);
+ if (index < _size)
+ {
+ Array.Copy(_items, index + count, _items, index, _size - index);
+ }
+ Array.Clear(_items, _size, count);
+ _version++;
+ for (int i = index; i < index + count; i++)
+ OnItemDeleted(i, array[i - index]);
+ }
+ }
+
+ ///
+ /// Reverses the order of the elements in the entire .
+ ///
+ public void Reverse()
+ {
+ Reverse(0, Count);
+ }
+
+ ///
+ /// Reverses the order of the elements in the specified range.
+ ///
+ /// The zero-based starting index of the range of elements to reverse.
+ /// The number of elements to reverse.
+ public void Reverse(int index, int count)
+ {
+ if ((index < 0) || (count < 0))
+ {
+ throw new ArgumentOutOfRangeException((index < 0) ? "index" : "count");
+ }
+ if ((_size - index) < count)
+ {
+ throw new ArgumentException($"{nameof(index)} and {nameof(count)} do not denote a valid range of elements in the {nameof(EventedList)}.");
+ }
+ Array.Reverse(_items, index, count);
+ _version++;
+ }
+
+ ///
+ /// Sorts the elements in the entire using the default comparer.
+ ///
+ public void Sort()
+ {
+ Sort(0, Count, null);
+ }
+
+ ///
+ /// Sorts the elements in the entire using the specified comparer.
+ ///
+ /// The implementation to use when comparing elements, or null to use the default comparer .
+ public void Sort(IComparer comparer)
+ {
+ Sort(0, Count, comparer);
+ }
+
+ ///
+ /// Sorts the elements in a range of elements in using the specified comparer.
+ ///
+ /// The zero-based starting index of the range of elements to sort.
+ /// The number of elements to sort.
+ /// The implementation to use when comparing elements, or null to use the default comparer .
+ public void Sort(int index, int count, IComparer comparer)
+ {
+ if ((index < 0) || (count < 0))
+ {
+ throw new ArgumentOutOfRangeException((index < 0) ? "index" : "count");
+ }
+ if ((_size - index) < count)
+ {
+ throw new ArgumentException($"{nameof(index)} and {nameof(count)} do not denote a valid range of elements in the {nameof(EventedList)}.");
+ }
+ Array.Sort(_items, index, count, comparer);
+ _version++;
+ }
+
+ ///
+ /// Copies the elements of the to a new array.
+ ///
+ /// An array containing copies of the elements of the .
+ public T[] ToArray()
+ {
+ T[] destinationArray = new T[_size];
+ Array.Copy(_items, 0, destinationArray, 0, _size);
+ return destinationArray;
+ }
+
+ ///
+ /// Sets the capacity to the actual number of elements in the , if that number is less than a threshold value.
+ ///
+ public void TrimExcess()
+ {
+ int num = (int)(_items.Length * 0.9);
+ if (_size < num)
+ {
+ Capacity = _size;
+ }
+ }
+
+ ///
+ /// Determines whether every element in the matches the conditions defined by the specified predicate.
+ ///
+ /// The delegate that defines the conditions to check against the elements.
+ /// true if every element in the matches the conditions defined by the specified predicate; otherwise, false. If the list has no elements, the return value is true.
+ public bool TrueForAll(Predicate match)
+ {
+ if (match == null)
+ {
+ throw new ArgumentNullException(nameof(match));
+ }
+ for (int i = 0; i < _size; i++)
+ {
+ if (!match(_items[i]))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ ///
+ /// Raises the event.
+ ///
+ /// The index of the added item.
+ /// The value of the added item.
+ protected virtual void OnItemAdded(int index, T value)
+ {
+ EventHandler> h = ItemAdded;
+ if (h != null)
+ h(this, new EventedList.ListChangedEventArgs(ListChangedType.ItemAdded, value, index));
+ }
+
+ ///
+ /// Raises the event.
+ ///
+ /// The index of the changed item.
+ /// The previous value of the changed item.
+ /// The new value of the changed item.
+ protected virtual void OnItemChanged(int index, T oldValue, T newValue)
+ {
+ EventHandler> h = ItemChanged;
+ if (h != null)
+ h(this, new EventedList.ListChangedEventArgs(ListChangedType.ItemChanged, newValue, index, oldValue));
+ }
+
+ ///
+ /// Raises the event.
+ ///
+ /// The index of the deleted item.
+ /// The value of the deleted item.
+ protected virtual void OnItemDeleted(int index, T value)
+ {
+ EventHandler> h = ItemDeleted;
+ if (h != null)
+ h(this, new EventedList.ListChangedEventArgs(ListChangedType.ItemDeleted, value, index));
+ }
+
+ ///
+ /// Raises the event.
+ ///
+ protected virtual void OnReset()
+ {
+ EventHandler> h = Reset;
+ if (h != null)
+ h(this, new EventedList.ListChangedEventArgs(ListChangedType.Reset));
+ }
+
+ ///
+ /// Determines whether the specified object is compatible with this list's item type.
+ ///
+ /// The value.
+ ///
+ /// true if the specified object is compatible with this list's item type; otherwise, false.
+ ///
+ private static bool IsCompatibleObject(object value)
+ {
+ if (!(value is T) && ((value != null) || typeof(T).IsValueType))
+ {
+ return false;
+ }
+ return true;
+ }
+
+ ///
+ /// Verifies the type of the value.
+ ///
+ /// The value.
+ private static void VerifyValueType(object value)
+ {
+ if (!EventedList.IsCompatibleObject(value))
+ {
+ throw new ArgumentException("Incompatible type.", nameof(value));
+ }
+ }
+
+ ///
+ /// Ensures the capacity.
+ ///
+ /// The min.
+ private void EnsureCapacity(int min)
+ {
+ if (_items.Length < min)
+ {
+ int num = (_items.Length == 0) ? 4 : (_items.Length * 2);
+ if (num < min)
+ {
+ num = min;
+ }
+ Capacity = num;
+ }
+ }
+
+ ///
+ /// Enumerates over the .
+ ///
+ [Serializable,
+ System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
+ public struct Enumerator : IEnumerator, IDisposable, IEnumerator
+ {
+ private EventedList list;
+ private int index;
+ private int version;
+ private T current;
+
+ ///
+ /// Initializes a new instance of the struct.
+ ///
+ /// The list.
+ internal Enumerator(EventedList list)
+ {
+ this.list = list;
+ index = 0;
+ version = list._version;
+ current = default(T);
+ }
+
+ ///
+ /// Gets the element at the current position of the enumerator.
+ ///
+ /// The current element.
+ public T Current => current;
+
+ ///
+ /// Gets the element at the current position of the enumerator.
+ ///
+ /// The current element.
+ object IEnumerator.Current
+ {
+ get
+ {
+ if ((index == 0) || (index == (list._size + 1)))
+ {
+ throw new InvalidOperationException();
+ }
+ return Current;
+ }
+ }
+
+ ///
+ /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+ ///
+ public void Dispose()
+ {
+ }
+
+ ///
+ /// Sets the enumerator to its initial position, which is before the first element in the collection.
+ ///
+ /// The collection was modified after the enumerator was created.
+ void IEnumerator.Reset()
+ {
+ if (version != list._version)
+ {
+ throw new InvalidOperationException();
+ }
+ index = 0;
+ current = default(T);
+ }
+
+ ///
+ /// Advances the enumerator to the next element of the collection.
+ ///
+ ///
+ /// true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection.
+ ///
+ /// The collection was modified after the enumerator was created.
+ public bool MoveNext()
+ {
+ if (version != list._version)
+ {
+ throw new InvalidOperationException();
+ }
+ if (index < list._size)
+ {
+ current = list._items[index];
+ index++;
+ return true;
+ }
+ index = list._size + 1;
+ current = default(T);
+ return false;
+ }
+ }
+
+ ///
+ /// An structure passed to events generated by an .
+ ///
+ ///
+#pragma warning disable 693
+ [Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
+ public class ListChangedEventArgs : EventArgs
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The type of change.
+ public ListChangedEventArgs(ListChangedType type)
+ {
+ ItemIndex = -1;
+ ListChangedType = type;
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The type of change.
+ /// The item that has changed.
+ /// Index of the changed item.
+ public ListChangedEventArgs(ListChangedType type, T item, int itemIndex)
+ {
+ Item = item;
+ ItemIndex = itemIndex;
+ ListChangedType = type;
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The type of change.
+ /// The item that has changed.
+ /// Index of the changed item.
+ /// The old item when an item has changed.
+ public ListChangedEventArgs(ListChangedType type, T item, int itemIndex, T oldItem)
+ : this(type, item, itemIndex)
+ {
+ OldItem = oldItem;
+ }
+
+ ///
+ /// Gets the item that has changed.
+ ///
+ /// The item.
+ public T Item { get; }
+
+ ///
+ /// Gets the index of the item.
+ ///
+ /// The index of the item.
+ public int ItemIndex { get; }
+
+ ///
+ /// Gets the type of change for the list.
+ ///
+ /// The type of change for the list.
+ public ListChangedType ListChangedType { get; }
+
+ ///
+ /// Gets the item's previous value.
+ ///
+ /// The old item.
+ public T OldItem { get; }
+ }
+#pragma warning restore 693
+ }
+}
\ No newline at end of file
diff --git a/AeroWizard/AeroWizard/ExtensionAttributeFor.NET_2.0.cs b/AeroWizard/AeroWizard/ExtensionAttributeFor.NET_2.0.cs
new file mode 100644
index 0000000..4757f1c
--- /dev/null
+++ b/AeroWizard/AeroWizard/ExtensionAttributeFor.NET_2.0.cs
@@ -0,0 +1,9 @@
+namespace System.Runtime.CompilerServices
+{
+ ///
+ /// Attribute allowing extenders to be used with .NET Framework 2.0.
+ ///
+ internal sealed class ExtensionAttribute : Attribute
+ {
+ }
+}
\ No newline at end of file
diff --git a/AeroWizard/AeroWizard/FixVSIX.ps1 b/AeroWizard/AeroWizard/FixVSIX.ps1
new file mode 100644
index 0000000..8996dd0
--- /dev/null
+++ b/AeroWizard/AeroWizard/FixVSIX.ps1
@@ -0,0 +1,6 @@
+# Load vsix tools
+. "C:\Users\dahall\Documents\Visual Studio 2010\Projects\VsixTools2.ps1"
+# Set the version number of 'MyPackage' and fix the zip issue for uploading to the gallery.
+$vsixPath = "C:\Users\dahall\Documents\Visual Studio 2010\Projects\AeroWizard\AeroWizardTemplates\bin\Release\AeroWizardTemplates.vsix"
+Vsix-SetVersion -VsixPath $vsixPath -Version "2.0.3"
+Vsix-FixInvalidMultipleFiles -VsixPath $vsixPath
\ No newline at end of file
diff --git a/AeroWizard/AeroWizard/GenericDesigner.cs b/AeroWizard/AeroWizard/GenericDesigner.cs
new file mode 100644
index 0000000..4799caa
--- /dev/null
+++ b/AeroWizard/AeroWizard/GenericDesigner.cs
@@ -0,0 +1,779 @@
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.ComponentModel.Design;
+using System.Windows.Forms.Design;
+using System.Windows.Forms.Design.Behavior;
+
+namespace System.ComponentModel.Design
+{
+ internal static class ComponentDesignerExtension
+ {
+ public const System.Reflection.BindingFlags AllInstBind = System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance;
+
+ public static object EditValue(this ComponentDesigner designer, object objectToChange, string propName)
+ {
+ PropertyDescriptor prop = TypeDescriptor.GetProperties(objectToChange)[propName];
+ EditorServiceContext context = new EditorServiceContext(designer, prop);
+ var editor = prop.GetEditor(typeof(System.Drawing.Design.UITypeEditor)) as System.Drawing.Design.UITypeEditor;
+ object curVal = prop.GetValue(objectToChange);
+ object newVal = editor.EditValue(context, context, curVal);
+ if (newVal != curVal)
+ try { prop.SetValue(objectToChange, newVal); }
+ catch (CheckoutException) { }
+ return newVal;
+ }
+
+ public static List GetAllAttributedActionItems(this DesignerActionList actionList)
+ {
+ var fullAIList = new List();
+ foreach (var mbr in actionList.GetType().GetMethods(AllInstBind))
+ {
+ foreach (IActionGetItem attr in mbr.GetCustomAttributes(typeof(DesignerActionMethodAttribute), false))
+ {
+ if (mbr.ReturnType == typeof(void) && mbr.GetParameters().Length == 0)
+ fullAIList.Add(attr.GetItem(actionList, mbr));
+ else
+ throw new FormatException("DesignerActionMethodAttribute must be applied to a method returning void and having no parameters.");
+ }
+ }
+ foreach (var mbr in actionList.GetType().GetProperties(AllInstBind))
+ {
+ foreach (IActionGetItem attr in mbr.GetCustomAttributes(typeof(DesignerActionPropertyAttribute), false))
+ fullAIList.Add(attr.GetItem(actionList, mbr));
+ }
+ fullAIList.Sort(CompareItems);
+ return fullAIList;
+ }
+
+ public static DesignerVerbCollection GetAttributedVerbs(this ComponentDesigner designer)
+ {
+ var verbs = new DesignerVerbCollection();
+ foreach (var m in designer.GetType().GetMethods(AllInstBind))
+ {
+ foreach (DesignerVerbAttribute attr in m.GetCustomAttributes(typeof(DesignerVerbAttribute), true))
+ {
+ verbs.Add(attr.GetDesignerVerb(designer, m));
+ }
+ }
+ return verbs;
+ }
+
+ public static DesignerActionItemCollection GetFilteredActionItems(this DesignerActionList actionList, List fullAIList)
+ {
+ DesignerActionItemCollection col = new DesignerActionItemCollection();
+ fullAIList.ForEach(ai => { if (CheckCondition(actionList, ai)) { col.Add(ai); } });
+
+ // Add header items for displayed items
+ int i = 0; string cat = null;
+ while (i < col.Count)
+ {
+ string curCat = col[i].Category;
+ if (string.Compare(curCat, cat, true, Globalization.CultureInfo.CurrentCulture) != 0)
+ {
+ col.Insert(i++, new DesignerActionHeaderItem(curCat));
+ cat = curCat;
+ }
+ i++;
+ }
+
+ return col;
+ }
+
+ public static IDictionary> GetRedirectedProperties(this ComponentDesigner d)
+ {
+ var ret = new Dictionary>();
+ foreach (var prop in d.GetType().GetProperties(AllInstBind))
+ {
+ foreach (RedirectedDesignerPropertyAttribute attr in prop.GetCustomAttributes(typeof(RedirectedDesignerPropertyAttribute), false))
+ {
+ List attributes;
+ if (attr.ApplyOtherAttributes)
+ {
+ attributes = new List(Array.ConvertAll