diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin.sln b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin.sln new file mode 100644 index 000000000..d6d1f14a8 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin.sln @@ -0,0 +1,42 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AsposeVisualStudioPlugin", "AsposeVisualStudioPlugin\AsposeVisualStudioPlugin.csproj", "{54C786E5-FD14-4036-92AE-E9F25B71534B}" +EndProject +Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Installer", "Installer\Installer.wixproj", "{CE553C9B-6E0B-4BEA-B242-17F294FDDE7F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {54C786E5-FD14-4036-92AE-E9F25B71534B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {54C786E5-FD14-4036-92AE-E9F25B71534B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {54C786E5-FD14-4036-92AE-E9F25B71534B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {54C786E5-FD14-4036-92AE-E9F25B71534B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {54C786E5-FD14-4036-92AE-E9F25B71534B}.Debug|x86.ActiveCfg = Debug|Any CPU + {54C786E5-FD14-4036-92AE-E9F25B71534B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {54C786E5-FD14-4036-92AE-E9F25B71534B}.Release|Any CPU.Build.0 = Release|Any CPU + {54C786E5-FD14-4036-92AE-E9F25B71534B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {54C786E5-FD14-4036-92AE-E9F25B71534B}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {54C786E5-FD14-4036-92AE-E9F25B71534B}.Release|x86.ActiveCfg = Release|Any CPU + {CE553C9B-6E0B-4BEA-B242-17F294FDDE7F}.Debug|Any CPU.ActiveCfg = Debug|x86 + {CE553C9B-6E0B-4BEA-B242-17F294FDDE7F}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {CE553C9B-6E0B-4BEA-B242-17F294FDDE7F}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {CE553C9B-6E0B-4BEA-B242-17F294FDDE7F}.Debug|x86.ActiveCfg = Debug|x86 + {CE553C9B-6E0B-4BEA-B242-17F294FDDE7F}.Debug|x86.Build.0 = Debug|x86 + {CE553C9B-6E0B-4BEA-B242-17F294FDDE7F}.Release|Any CPU.ActiveCfg = Release|x86 + {CE553C9B-6E0B-4BEA-B242-17F294FDDE7F}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {CE553C9B-6E0B-4BEA-B242-17F294FDDE7F}.Release|Mixed Platforms.Build.0 = Release|x86 + {CE553C9B-6E0B-4BEA-B242-17F294FDDE7F}.Release|x86.ActiveCfg = Release|x86 + {CE553C9B-6E0B-4BEA-B242-17F294FDDE7F}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin.suo b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin.suo new file mode 100644 index 000000000..a2f6a86ca Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin.suo differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin.v11.suo b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin.v11.suo new file mode 100644 index 000000000..788497d2c Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin.v11.suo differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeVisualStudioPlugin.csproj b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeVisualStudioPlugin.csproj new file mode 100644 index 000000000..3b7fb7bd8 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeVisualStudioPlugin.csproj @@ -0,0 +1,240 @@ + + + + Debug + AnyCPU + 8.0.30424 + 2.0 + {54C786E5-FD14-4036-92AE-E9F25B71534B} + Library + + + false + AsposeVisualStudioPluginForWords + .\bin\ + v4.0 + + + + true + false + ..\..\obj\ + ..\out\ + false + DEBUG;TRACE + 4 + false + false + AsposeVisualStudioPlugin.xml + false + x86 + + + false + true + ..\..\obj\ + ..\..\bin\Debug\ + false + TRACE + 4 + false + false + AsposeVisualStudioPlugin.xml + + + AsposeVisualStudioPluginWords + + + false + + + OnBuildSuccess + + + AsposeWordsVSPlugin.pfx + + + aspose.ico + + + + + + + + False + + + ..\libs\ICSharpCode.SharpZipLib.dll + + + ..\libs\Ionic.Zip.dll + + + + False + ..\libs\GIT\NGit.dll + + + ..\libs\GIT\NSch.dll + + + ..\libs\GIT\Sharpen.dll + + + + + + + + + + + + True + + + True + + + + + Code + + + Code + + + + + + + + + + + + + Form + + + ComponentWizardPage.cs + + + Form + + + SampleWizardPage.cs + + + True + True + Resources.resx + + + True + True + Settings.settings + + + + + + + {80CC9F66-E7D8-4DDD-85B6-D9E6CD0E93E2} + 8 + 0 + 0 + primary + False + False + + + {1A31287A-4D7D-413E-8E32-3B374931BD89} + 8 + 0 + 0 + primary + False + False + + + {1CBA492E-7263-47BB-87FE-639000619B15} + 8 + 0 + 0 + primary + False + False + + + {00020430-0000-0000-C000-000000000046} + 2 + 0 + 0 + primary + False + False + + + + + + Always + + + + + + + + + Designer + + + + + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + ComponentWizardPage.cs + Designer + + + SampleWizardPage.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + + + + + copy E:\Aspose.VisualStudioPluginForWords\Source\out\AsposeVisualStudioPluginForWords.dll E:\Aspose.VisualStudioPluginForWords\Source\out\AsposeVisualStudioPluginForWords5.dll +copy E:\Aspose.VisualStudioPluginForWords\Source\out\AsposeVisualStudioPluginForWords.dll E:\Aspose.VisualStudioPluginForWords\Source\out\AsposeVisualStudioPluginForWords8.dll +copy E:\Aspose.VisualStudioPluginForWords\Source\out\AsposeVisualStudioPluginForWords.dll E:\Aspose.VisualStudioPluginForWords\Source\out\AsposeVisualStudioPluginForWords12.dll +copy E:\Aspose.VisualStudioPluginForWords\Source\out\AsposeVisualStudioPluginForWords.dll E:\Aspose.VisualStudioPluginForWords\Source\out\AsposeVisualStudioPluginForWords13.dll + + + + + + + + + + + \ No newline at end of file diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeVisualStudioPlugin.csproj.user b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeVisualStudioPlugin.csproj.user new file mode 100644 index 000000000..a569b0859 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeVisualStudioPlugin.csproj.user @@ -0,0 +1,18 @@ + + + + C:\Program Files %28x86%29\Microsoft Visual Studio 11.0\Common7\IDE\ + C:\Program Files %28x86%29\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe + /resetaddin AsposeVisualStudioPluginWords.Connect + Program + + + C:\Program Files %28x86%29\Microsoft Visual Studio 11.0\Common7\IDE\ + C:\Program Files %28x86%29\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe + /resetaddin AsposeVisualStudioPlugin.Connect + Program + + + ShowAllFiles + + \ No newline at end of file diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeVisualStudioPlugin.xml b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeVisualStudioPlugin.xml new file mode 100644 index 000000000..7a0db1220 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeVisualStudioPlugin.xml @@ -0,0 +1,306 @@ + + + + AsposeVisualStudioPluginForWords + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Serialization/Deserialization of objects to/from XML + + + + + + Reads xml and loads object in document format. + + Path of xml file + + + + + Loads an object from an XML file , supplying extra data types. + + File path to load. + Extra data types . + Object loaded from an XML file. + + + + Saves an object to an XML file . + + Serializable object to be saved to file. + Path of the file to save the object to. + + + + Saves an object to an XML file in . + + Serializable object to be saved to file. + Path of the file to save the object to. + Extra data types to enable serialization of custom types within the object. + + + + Unzip files + + + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + @return + + + + + + + + + + + + + @return the _name + + + @param _name the _name to set + + + @return the _selected + + + @param _selected the _selected to set + + + @return the _downloaded + + + @param _downloaded the _downloaded to set + + + @return the _currentVersion + + + @param _currentVersion the _currentVersion to set + + + @return the _downloadUrl + + + @param _downloadUrl the _downloadUrl to set + + + @return the _latestVersion + + + @param _latestVersion the _latestVersion to set + + + @return the _latestRelease + + + @param _latestRelease the _latestRelease to set + + + @return the _changeLog + + + @param _changeLog the _changeLog to set + + + @return the _downloadFileName + + + @param _downloadFileName the _downloadFileName to set + + + + @param _remoteExamplesRepository + + + diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeVisualStudioPluginWords.AddIn b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeVisualStudioPluginWords.AddIn new file mode 100644 index 000000000..05789f4f6 Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeVisualStudioPluginWords.AddIn differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeVisualStudioPluginWords.xml b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeVisualStudioPluginWords.xml new file mode 100644 index 000000000..7a0db1220 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeVisualStudioPluginWords.xml @@ -0,0 +1,306 @@ + + + + AsposeVisualStudioPluginForWords + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Serialization/Deserialization of objects to/from XML + + + + + + Reads xml and loads object in document format. + + Path of xml file + + + + + Loads an object from an XML file , supplying extra data types. + + File path to load. + Extra data types . + Object loaded from an XML file. + + + + Saves an object to an XML file . + + Serializable object to be saved to file. + Path of the file to save the object to. + + + + Saves an object to an XML file in . + + Serializable object to be saved to file. + Path of the file to save the object to. + Extra data types to enable serialization of custom types within the object. + + + + Unzip files + + + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + Looks up a localized resource of type System.Drawing.Bitmap. + + + + + @return + + + + + + + + + + + + + @return the _name + + + @param _name the _name to set + + + @return the _selected + + + @param _selected the _selected to set + + + @return the _downloaded + + + @param _downloaded the _downloaded to set + + + @return the _currentVersion + + + @param _currentVersion the _currentVersion to set + + + @return the _downloadUrl + + + @param _downloadUrl the _downloadUrl to set + + + @return the _latestVersion + + + @param _latestVersion the _latestVersion to set + + + @return the _latestRelease + + + @param _latestRelease the _latestRelease to set + + + @return the _changeLog + + + @param _changeLog the _changeLog to set + + + @return the _downloadFileName + + + @param _downloadFileName the _downloadFileName to set + + + + @param _remoteExamplesRepository + + + diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeWordsVSPlugin.pfx b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeWordsVSPlugin.pfx new file mode 100644 index 000000000..825987d98 Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AsposeWordsVSPlugin.pfx differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AssemblyInfo.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AssemblyInfo.cs new file mode 100644 index 000000000..c62c20d0d --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/AssemblyInfo.cs @@ -0,0 +1,51 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// 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("Aspose .NET Visual Studio Plugin for Aspose.Words Examples")] +[assembly: AssemblyDescription("Explore Aspose.Words for .NET Examples using Visual Studio Plugin")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Aspose Pty Limited")] +[assembly: AssemblyProduct("Aspose.Words for .NET")] +[assembly: AssemblyCopyright("Aspose Pty Limited 2001 - 2015")] +[assembly: AssemblyTrademark("Aspose")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Revision +// Build Number +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified - the assembly cannot be signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. +// (*) If the key file and a key name attributes are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP - that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the file is installed into the CSP and used. +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Config Files/AsposeVisualStudioPlugin.vsz b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Config Files/AsposeVisualStudioPlugin.vsz new file mode 100644 index 000000000..1d65dbc95 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Config Files/AsposeVisualStudioPlugin.vsz @@ -0,0 +1,7 @@ +VSWIZARD 8.0 +Wizard=AsposeVisualStudioPlugin.AsposeProjectWizard +Param=Param 1 +Param=Param 2 + + + diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Config Files/AsposeWizard.vsdir b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Config Files/AsposeWizard.vsdir new file mode 100644 index 000000000..352b74f7b --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Config Files/AsposeWizard.vsdir @@ -0,0 +1 @@ +AsposeVisualStudioPlugin.vsz||Aspose Sample Project Wizard|70|Downloads and configure Aspose sample projects||4548| |AsposeProjectWizard \ No newline at end of file diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Config Files/info.txt b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Config Files/info.txt new file mode 100644 index 000000000..1747f1bde --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Config Files/info.txt @@ -0,0 +1 @@ +http://msdn.microsoft.com/en-us/library/7k3w6w59.aspx \ No newline at end of file diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Connect.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Connect.cs new file mode 100644 index 000000000..eb864c3e3 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Connect.cs @@ -0,0 +1,197 @@ +using System; +using Extensibility; +using EnvDTE; +using EnvDTE80; +using Microsoft.VisualStudio.CommandBars; +using System.Resources; +using System.Reflection; +using System.Globalization; +using AsposeVisualStudioPluginWords.GUI; +using AsposeVisualStudioPluginWords.Properties; +using Microsoft.VisualStudio.CommandBars; + +namespace AsposeVisualStudioPluginWords +{ + public class Connect : Extensibility.IDTExtensibility2, IDTCommandTarget + { + // Constants for command properties + private const string ASPOSE_MENU_NAME = "MenuAsposeVSPlugin"; + private const string ASPOSE_MENU_CAPTION = "Aspose"; + private const string ASPOSE_MENU_TOOLTIP = "Download and run Aspose .NET API Examples"; + + private const string WORDS_COMMAND_NAME = "AsposeWordsVSPlugin"; + private const string WORDS_COMMAND_CAPTION = "New Aspose.Words Example Project"; + private const string WORDS_COMMAND_TOOLTIP = "Download and run Aspose.Words for .NET API Examples"; + + // Variables for IDE and add-in instances + private DTE2 applicationObject; + private EnvDTE.AddIn addInInstance; + + public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, + object addInInst, ref System.Array custom) + { + try + { + applicationObject = (DTE2)application; + addInInstance = (EnvDTE.AddIn)addInInst; + + switch (connectMode) + { + case ext_ConnectMode.ext_cm_UISetup: + + // Initialize the UI of the add-in + AddPermanentUI(); + break; + + case ext_ConnectMode.ext_cm_Startup: + + // The add-in was marked to load on startup + // Do nothing at this point because the IDE may not be fully initialized + // Visual Studio will call OnStartupComplete when fully initialized + break; + + case ext_ConnectMode.ext_cm_AfterStartup: + + // The add-in was loaded by hand after startup using the Add-In Manager + // Initialize it in the same way that when is loaded on startup + InitializeAddIn(); + break; + } + } + catch (System.Exception e) + { + System.Windows.Forms.MessageBox.Show(e.ToString()); + } + } + + public void OnStartupComplete(ref System.Array custom) + { + InitializeAddIn(); + } + + private void InitializeAddIn() + { + // Initialize non-UI add-in + } + + private void AddPermanentUI() + { + object[] contextGUIDS = new object[] { }; + Commands2 commands = (Commands2)applicationObject.Commands; + + Microsoft.VisualStudio.CommandBars.CommandBar menuBarCommandBar = + ((Microsoft.VisualStudio.CommandBars.CommandBars) + applicationObject.CommandBars)["MenuBar"]; + + //Find the Tools command bar on the MenuBar command bar: + CommandBarControl toolsControl = menuBarCommandBar.Controls["File"]; + CommandBarPopup toolsPopup = (CommandBarPopup)toolsControl; + CommandBar oBar = null; + CommandBarButton oBtn = null; + //This try/catch block can be duplicated if you wish to add multiple commands + // to be handled by your Add-in, just make sure you also update the + // QueryStatus/Exec method to include the new command names. + try + { + //User Code Start + //searhing if submenu already exists + for (int iloop = 1; iloop <= toolsPopup.CommandBar.Controls.Count; iloop++) + { + if (toolsPopup.CommandBar.Controls[iloop].Caption == ASPOSE_MENU_CAPTION) + { + oBar = ((CommandBarPopup)toolsPopup.CommandBar.Controls[iloop]).CommandBar; + foreach (CommandBarButton cmdbtn in oBar.Controls) + { + if (cmdbtn.Caption == WORDS_COMMAND_CAPTION) + { + oBtn = cmdbtn; + } + } + break; + } + } + + //if required submenu doesn't exist create a new one + if (oBar == null) + oBar = (CommandBar)commands.AddCommandBar(ASPOSE_MENU_CAPTION, + vsCommandBarType.vsCommandBarTypeMenu, toolsPopup.CommandBar, 1); + + if (oBtn == null) + { + //Add a command to the Commands collection: + Command myCommand = commands.AddNamedCommand2(addInInstance, WORDS_COMMAND_NAME, + WORDS_COMMAND_CAPTION, WORDS_COMMAND_TOOLTIP, false, Resources.pnglogosmall, ref contextGUIDS, + (int)vsCommandStatus.vsCommandStatusSupported + (int)vsCommandStatus.vsCommandStatusEnabled, + (int)vsCommandStyle.vsCommandStylePictAndText, vsCommandControlType.vsCommandControlTypeButton); + + //Add a control for the command to the tools menu: + if ((myCommand != null) && (toolsPopup != null)) + myCommand.AddControl(oBar, 1); + + } + + //User Code End + } + catch (System.ArgumentException) + { + // If we are here, then the exception is probably + // because a command with that name already exists. + // If so there is no need to recreate the command and we can + // safely ignore the exception. + } + } + + public void OnDisconnection(Extensibility.ext_DisconnectMode RemoveMode, ref System.Array custom) + { + } + + public void OnBeginShutdown(ref System.Array custom) + { + } + + public void OnAddInsUpdate(ref System.Array custom) + { + } + + public void Exec(string cmdName, vsCommandExecOption executeOption, ref object varIn, + ref object varOut, ref bool handled) + { + try + { + handled = false; + + if ((executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)) + { + if (cmdName == addInInstance.ProgID + "." + WORDS_COMMAND_NAME) + { + SampleWizardPage page = new SampleWizardPage(applicationObject); + if (page != null && !page.IsDisposed) page.ShowDialog(); + handled = true; + return; + } + } + } + catch (Exception) { } + + } + + + public void QueryStatus(string cmdName, vsCommandStatusTextWanted neededText, + ref vsCommandStatus statusOption, ref object commandText) + { + if (neededText == vsCommandStatusTextWanted.vsCommandStatusTextWantedNone) + { + if (cmdName == addInInstance.ProgID + "." + WORDS_COMMAND_NAME) + { + statusOption = (vsCommandStatus)(vsCommandStatus.vsCommandStatusEnabled | vsCommandStatus.vsCommandStatusSupported); + return; + } + else + { + statusOption = vsCommandStatus.vsCommandStatusUnsupported; + return; + } + } + } + } +} diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/AsposeComponent.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/AsposeComponent.cs new file mode 100644 index 000000000..d71b25076 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/AsposeComponent.cs @@ -0,0 +1,256 @@ +// Copyright (c) Aspose 2002-2014. All Rights Reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AsposeVisualStudioPluginWords.Core +{ + /// + /// + /// + public class AsposeComponent + { + private string _name; + + public string Name + { + get { return _name; } + set { _name = value; } + } + private bool _selected; + + public bool Selected + { + get { return _selected; } + set { _selected = value; } + } + private string _downloadUrl; + + public string DownloadUrl + { + get { return _downloadUrl; } + set { _downloadUrl = value; } + } + private string _downloadFileName; + + public string DownloadFileName + { + get { return _downloadFileName; } + set { _downloadFileName = value; } + } + private bool _downloaded; + + public bool Downloaded + { + get { return _downloaded; } + set { _downloaded = value; } + } + private string _currentVersion; + + public string CurrentVersion + { + get { return _currentVersion; } + set { _currentVersion = value; } + } + private string _latestVersion; + + public string LatestVersion + { + get { return _latestVersion; } + set { _latestVersion = value; } + } + private bool _latestRelease; + + public bool LatestRelease + { + get { return _latestRelease; } + set { _latestRelease = value; } + } + private string _changeLog; + + public string ChangeLog + { + get { return _changeLog; } + set { _changeLog = value; } + } + private string _remoteExamplesRepository; + + public string RemoteExamplesRepository + { + get { return _remoteExamplesRepository; } + set { _remoteExamplesRepository = value; } + } + + + /// + /// + /// + public void AsposeJavaComponent() + { + _selected = false; + _downloaded = false; + _latestRelease = false; + } + /** + * @return the _name + */ + public string get_name() + { + return _name; + } + + /** + * @param _name the _name to set + */ + public void set_name(string _name) + { + this._name = _name; + } + + /** + * @return the _selected + */ + public bool is_selected() + { + return _selected; + } + + /** + * @param _selected the _selected to set + */ + public void set_selected(bool _selected) + { + this._selected = _selected; + } + + + /** + * @return the _downloaded + */ + public bool is_downloaded() + { + return _downloaded; + } + + /** + * @param _downloaded the _downloaded to set + */ + public void set_downloaded(bool _downloaded) + { + this._downloaded = _downloaded; + } + + /** + * @return the _currentVersion + */ + public string get_currentVersion() + { + return _currentVersion; + } + + /** + * @param _currentVersion the _currentVersion to set + */ + public void set_currentVersion(string _currentVersion) + { + this._currentVersion = _currentVersion; + } + + /** + * @return the _downloadUrl + */ + public string get_downloadUrl() + { + return _downloadUrl; + } + + /** + * @param _downloadUrl the _downloadUrl to set + */ + public void set_downloadUrl(string _downloadUrl) + { + this._downloadUrl = _downloadUrl; + } + + /** + * @return the _latestVersion + */ + public string get_latestVersion() + { + return _latestVersion; + } + + /** + * @param _latestVersion the _latestVersion to set + */ + public void set_latestVersion(string _latestVersion) + { + this._latestVersion = _latestVersion; + } + + /** + * @return the _latestRelease + */ + public bool is_latestRelease() + { + return _latestRelease; + } + + /** + * @param _latestRelease the _latestRelease to set + */ + public void set_latestRelease(bool _latestRelease) + { + this._latestRelease = _latestRelease; + } + + /** + * @return the _changeLog + */ + public string get_changeLog() + { + return _changeLog; + } + + /** + * @param _changeLog the _changeLog to set + */ + public void set_changeLog(string _changeLog) + { + this._changeLog = _changeLog; + } + + /** + * @return the _downloadFileName + */ + public string get_downloadFileName() + { + return _downloadFileName; + } + + /** + * @param _downloadFileName the _downloadFileName to set + */ + public void set_downloadFileName(string _downloadFileName) + { + this._downloadFileName = _downloadFileName; + } + public string get_remoteExamplesRepository() + { + return _remoteExamplesRepository; + } + + /** + * + * @param _remoteExamplesRepository + */ + public void set_remoteExamplesRepository(string _remoteExamplesRepository) + { + this._remoteExamplesRepository = _remoteExamplesRepository; + } + + } +} diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/AsposeComponents.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/AsposeComponents.cs new file mode 100644 index 000000000..dee48a1f8 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/AsposeComponents.cs @@ -0,0 +1,27 @@ +// Copyright (c) Aspose 2002-2014. All Rights Reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Collections; + +namespace AsposeVisualStudioPluginWords.Core +{ + public class AsposeComponents + { + public static Dictionary list = new Dictionary(); + public AsposeComponents() + { + list.Clear(); + + AsposeComponent asposeWords = new AsposeComponent(); + asposeWords.set_downloadUrl(""); + asposeWords.set_downloadFileName("aspose.words.zip"); + asposeWords.set_name(Constants.ASPOSE_COMPONENT); + asposeWords.set_remoteExamplesRepository("https://github.com/asposewords/Aspose_Words_NET.git"); + list.Add(Constants.ASPOSE_COMPONENT, asposeWords); + } + } +} diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/AsposeComponentsManager.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/AsposeComponentsManager.cs new file mode 100644 index 000000000..63da330a6 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/AsposeComponentsManager.cs @@ -0,0 +1,178 @@ +// Copyright (c) Aspose 2002-2014. All Rights Reserved. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net.Sockets; +using System.Text; +using System.Threading.Tasks; +using AsposeVisualStudioPluginWords.GUI; + +namespace AsposeVisualStudioPluginWords.Core +{ + public class AsposeComponentsManager + { + ComponentWizardPage _pageOne = null; + public AsposeComponentsManager(ComponentWizardPage page) + { + _pageOne = page; + } + + /** + * + * @return + */ + public bool downloadComponents() + { + if (!isIneternetConnected()) + { + _pageOne.showMessage(Constants.INTERNET_CONNECTION_REQUIRED_MESSAGE_TITLE, Constants.INTERNET_CONNECTION_REQUIRED_MESSAGE, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning); + return false; + } + + foreach (AsposeComponent component in AsposeComponents.list.Values) + { + if (component.is_selected()) + { + GlobalData.SelectedComponent = component.get_name(); + + if (libraryAlreadyExists(component.get_downloadFileName())) + { + component.set_currentVersion(readVersion(component)); + if (readVersion(component).CompareTo(component.get_latestVersion()) == 0) + { + component.set_downloaded(true); + } + else + { + addToDownloadList(component, component.get_downloadUrl(), component.get_downloadFileName()); + } + } + else + { + addToDownloadList(component, component.get_downloadUrl(), component.get_downloadFileName()); + } + } + } + + return true; + } + + public static string readVersion(AsposeComponent component) + { + string localPath = getLibaryDownloadPath() + component.get_name() + ".ver"; + string line = string.Empty; + + try + { + return System.IO.File.ReadAllText(localPath); + } + catch (Exception) { } + return line; + } + + public void storeReleaseNotes(AsposeComponent component) + { + string localPath = getLibaryDownloadPath() + component.get_name() + ".htm"; + try + { + System.IO.File.WriteAllText(localPath, component.get_changeLog()); + } + catch (FileNotFoundException e) + { + + } + catch (Exception e) + { + + } + + } + + public static void storeVersion(AsposeComponent component) + { + string localPath = getLibaryDownloadPath() + component.get_name() + ".ver"; + try + { + System.IO.File.WriteAllText(localPath, component.get_latestVersion()); + } + catch (FileNotFoundException e) + { + + } + catch (Exception e) + { + + } + + } + + public static bool libraryAlreadyExists(string libFileName) + { + return System.IO.File.Exists(getLibaryDownloadPath() + libFileName.Replace(".zip", "") + "\\lib\\net40\\" + libFileName.Replace(".zip", ".dll")); + } + + public static void addToDownloadList(AsposeComponent component, string urlStr, string outputFile) + { + AsyncDownload asyncDownload = new AsyncDownload(); + asyncDownload.Url = urlStr; + asyncDownload.LocalPath = getLibaryDownloadPath() + outputFile; + asyncDownload.Component = component; + AsyncDownloadList.list.Add(asyncDownload); + } + + public static string removeExtention(string filePath) + { + return Path.GetFileNameWithoutExtension(filePath); + } + + public static bool isIneternetConnected() + { + try + { + System.Net.IPHostEntry ipHostEntry = System.Net.Dns.GetHostEntry("www.google.com"); + } + catch (SocketException) + { + return false; + } + return true; + } + + public static string getLibaryDownloadPath() + { + + string path = ""; + path = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); + path = path + "/aspose/dotnet/libraries/"; + + if (!Directory.Exists(path)) + Directory.CreateDirectory(path); + return path; + + } + + public static string getAsposeHomePath() + { + string path = ""; + path = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); + path = path + "/aspose/dotnet/"; + return path; + } + + public static void unZipFile(string zipFile, string outputFolder) + { + try + { + if (Directory.Exists(outputFolder)) + { + Directory.Delete(outputFolder, true); + } + } + catch { } + ZipUtilities zipUtilities = new ZipUtilities(); + zipUtilities.ExtractZipFile(zipFile, outputFolder); + } + } +} diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/AsyncDownload.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/AsyncDownload.cs new file mode 100644 index 000000000..1c72c4d5e --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/AsyncDownload.cs @@ -0,0 +1,35 @@ +// Copyright (c) Aspose 2002-2014. All Rights Reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AsposeVisualStudioPluginWords.Core +{ + public class AsyncDownload + { + AsposeComponent _component; + + public AsposeComponent Component + { + get { return _component; } + set { _component = value; } + } + private string _url; + + public string Url + { + get { return _url; } + set { _url = value; } + } + private string _localPath; + + public string LocalPath + { + get { return _localPath; } + set { _localPath = value; } + } + } +} diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/AsyncDownloadList.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/AsyncDownloadList.cs new file mode 100644 index 000000000..4ad4efe6a --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/AsyncDownloadList.cs @@ -0,0 +1,22 @@ +// Copyright (c) Aspose 2002-2014. All Rights Reserved. + +using System; +using System.Collections.Generic; +using System.Collections; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AsposeVisualStudioPluginWords.Core +{ + + public class AsyncDownloadList + { + public static List list = new List(); + + public AsyncDownloadList() + { + list.Clear(); + } + } +} diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/Constants.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/Constants.cs new file mode 100644 index 000000000..c7e00d5c2 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/Constants.cs @@ -0,0 +1,168 @@ +// Copyright (c) Aspose 2002-2014. All Rights Reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace AsposeVisualStudioPluginWords.Core +{ + public class Constants + { + //Aspose .NET components + public static string ASPOSE_COMPONENT = "Aspose.Words"; + + public static string WEBSERVICE_ENDPOINT = "http://community.aspose.com/community/SecureServices/AsposeDownloads.asmx"; + + //Project + public static string NATURE_ID_JDT = "org.eclipse.jdt.core.javanature"; + public static string ORG_ECLIPSE_JDT_LAUNCHING_CONTAINER = "org.eclipse.jdt.launching.JRE_CONTAINER"; + public static string NATURE_ID = "com.aspose.ecplugin.projectNature"; + public static string ORG_ECLIPSE_JDT_CORE_JAVA_BUILDER = "org.eclipse.jdt.core.javabuilder"; + public static string SRC_FOLDER = "src"; + public static string LIB_FOLDER = "lib"; + public static string BIN_FOLDER = "bin"; + public static string ASPOSE_JAVA_COMP_LINK_OPN_CMD = "cmd /c start http://www.aspose.com"; + public static string INTERNTE_CONNNECTIVITY_PING_URL = "java.sun.com"; + + //Messages UI text + public static string FIRST_PAGE_NAME = "Aspose Project Wizard"; + public static string FIRST_PAGE_TITLE = "Aspose New Project"; + public static string FIRST_PAGE_DESCRIPTION = "Create Aspose New Project"; + public static string WIZARD_NAME = "Aspose new project"; + public static string IS_COMPONENT_SELECTED = "Please select one or more products to continue"; + public static string INTERNET_CONNECTION_REQUIRED_MESSAGE_TITLE = "Internet connectivity"; + public static string INTERNET_CONNECTION_REQUIRED_MESSAGE = "Internet connectivity is required to download Aspose libraries"; + public static string ASPOSE_JAVA_COMP_LINK_TEXT = "Visit Aspose for more details."; + public static string NEW_VERSION_MESSAGE_TITLE = "New version available"; + public static string NEW_VERSION_MESSAGE = "New version is available, do you want to download it? browser is opened with release notes"; + + //New file messages + public static string EXAMPLES_NOT_AVAILABLE_MESSAGE = "This component does not have examples yet, We will add examples soon"; + public static string EXAMPLES_DOWNLOAD_REQUIRED = "Example needs to be downloaded, continue to download?"; + public static string EXAMPLES_INTERNET_CONNECTION_REQUIRED_MESSAGE = "Internet connectivity is required to download examples"; + //advertise + public static string ASPOSE_ALL_COMPONENTS_TEXT = "» Generate reports using mail merge" + + "\n» Excel Reporting - Build dynamic Excel reports on the fly" + + "\n» Create Excel dashboards, incorporating charts and pivot tables" + + "\n» High-fidelity Excel rendering and printing" + + "\n» Create new PDF documents using the product API" + + "\n» Transform an XML document into PDF format" + + "\n» Convert an Image file into PDF format" + + "\n» Create new slides or clone existing slides from templates" + + "\n» Add, remove, replace or extract text from PDF files" + + "\n» Add, remove, replace or extract images from PDF files" + + "\n» Convert a PDF file to an image" + + "\n» Generate barcode images and save to stream or image file" + + "\n» Recognize barcodes from stream or image file" + + "\n» Render Windows metafiles (WMF) to images" + + "\n» Convert Windows metafiles (WMF) to other graphics formats" + + "\n» Convert 3D FBX (ASCII, Binary) and STL (ASCII, Binary) file formats"; + + public static string ASPOSE_CELLS_FEATURE_TEXT = + "Aspose.Cells for .NET is an Excel® " + + "\nspreadsheet reporting component that" + + "\n enables Java applications to create " + + "\nand manage Excel® spreadsheets without" + + "\n using Microsoft Excel®. Aspose.Cells " + + "\nfor .NET is an incredibly feature rich " + + "\ncomponent that offers much more than " + + "\njust basic data export functions."; + public static string ASPOSE_WORDS_FEATURE_TEXT = + "Aspose.Words for .NET is an advanced " + + "\nclass library for .NET that enables " + + "\nyou to perform a great range of document" + + "\n processing tasks directly within your " + + "\nJava applications." + + "\nAspose.Words for .NET supports DOC, OOXML," + + "\n RTF, HTML and OpenDocument formats. With" + + "\n Aspose.Words you can generate, modify, and" + + "\n convert documents without using Microsoft Word."; + public static string ASPOSE_PDF_FEATURE_TEXT = + "Aspose.Pdf for .NET is a PDF document " + + "\ncreation component that enables your " + + "\n.NET applications to read, write and " + + "\nmanipulate PDF documents without using " + + "\nAdobe Acrobat."; + public static string ASPOSE_SLIDES_FEATURE_TEXT = + "Aspose.Slides for .NET is a unique " + + "\nPowerPoint management component that" + + "\n enables .NET applications to read, " + + "\nwrite and manipulate PowerPoint documents" + + "\n without using Microsoft PowerPoint." + + "\nAspose.Slides for .NET supports formats " + + "\nincluding PPT, PPS, POT and PresentationML" + + "\n (OOXML, PPTX). "; + public static string ASPOSE_DIAGRAM_FEATURE_TEXT = + "Aspose.Diagram, as a pure .NET alternate for " + + "\nMS Visio Object Model provides much better " + + "\nperformance and ease of use to manipulate " + + "\ndiagrams and conversions into accepted " + + "\nformats. Aspose.Diagram also leverages " + + "\nadvanced functionality provided by Visio " + + "\nservices to manipulate Visio documents at " + + "\nserver."; + public static string ASPOSE_BARCODE_FEATURE_TEXT = + "Aspose.BarCode for .NET is a robust and reliable " + + "\nbarcode generation and recognition component, " + + "\nwritten in .NET, it allows developers to quickly" + + "\n and easily add barcode generation and recognition" + + "\n functionality to their .NET applications." + ; + public static string ASPOSE_TASKS_FEATURE_TEXT = + "Aspose.Tasks for .NET is a powerful .NET project " + + "\nmanagement class library. It enables .NET " + + "\napplications to read Microsoft Project® documents ." + + "\nin MPP and XML formats, and write project " + + "\neffectively managing metafiles. It allows your " + + "\n.NET applications to quickly and easily display " + + "\ndocuments in XML format without using Microsoft Project®" + + "\nsupport for metafile conversions."; + public static string ASPOSE_EMAIL_FEATURE_TEXT = + "Aspose.Email for .NET is a .NET class library " + + "\nthat enables .NET applications to read and " + + "\nwrite Outlook MSG files without Microsoft " + + "\nOutlook. It provides classes to read and update" + + "\n MSG files, add/remove attachments and recipients," + + "\n update subject, body and other MSG file properties."; + public static string ASPOSE_OCR_FEATURE_TEXT = + "Aspose.OCR for .NET is a character recognition " + + "\ncomponent built to allow developers to add OCR" + + "\n functionality in their .NET applications. " + + "\nAspose.OCR provides simple set of classes that" + + "\n allow developers to recognize characters from " + + "\nthe images."; + public static string ASPOSE_IMAGING_FEATURE_TEXT = + "Aspose.Imaging for .NET is an imaging library" + + "\n that lets developers create, edit, draw or" + + "\n convert images in their .NET applications " + + "\nwith ease and performance. It offers broad " + + "\nspectrum of traditional image processing " + + "\noperations as well as most demanded features " + + "\nthat makes it most widely used imaging engine."; + public static string ASPOSE_NOTE_FEATURE_TEXT = + "Aspose.Note for .NET is a class library" + + "\n for working with Microsoft Office OneNote files." + + "\n It allows developers to work with .one files " + + "\n in C#, VB.NET, ASP.NET web applications, web services " + + "\n and Windows applications. It makes it possible to " + + "\n open files and manipulate the elements of OneNote books, " + + "\n from text, images and properties to more complex elements, " + + "\n and then export to PNG, GIF, JPEG, BMP or PDF formats. "; + + public static string ASPOSE_3D_FEATURE_TEXT = + "Aspose.3D for .NET is a class library" + + "\n FBX (ASCII, Binary) and STL (ASCII, Binary) file formats." + + "\n developers can easily create, read, convert, modify " + + "\n and control the substance of these 3D document formats" + + "\n Create a 3D Scene" + + "\n Creating a Mesh Surface" + + "\n Add mesh Geometry to the 3D Scene" + + "\n Set up Normal or UV on the Graphic Objects" + + "\n Apply Transformation to a Node" + + "\n Node Hierarchy in the 3D Scene Document" + + "\n Share Mesh's Geometry Data between Multiple Nodes" + + "\n Render an Animation Object" + + "\n Apply Materials to 3D Objects"; + } +} diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/GitHelper.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/GitHelper.cs new file mode 100644 index 000000000..07a9b7c0c --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/GitHelper.cs @@ -0,0 +1,78 @@ +// Copyright (c) Aspose 2002-2014. All Rights Reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.IO; +using NGit.Api; + +namespace AsposeVisualStudioPluginWords.Core +{ + public class GitHelper + { + + /// + /// + /// + /// + /// + + public static string CloneOrCheckOutRepo(AsposeComponent component) + { + string repUrl = component.get_remoteExamplesRepository(); + string localFolder = getLocalRepositoryPath(component); + string error = string.Empty; + + checkAndCreateFolder(getLocalRepositoryPath(component)); + + try + { + CloneCommand clone = Git.CloneRepository(); + clone.SetURI(repUrl); + clone.SetDirectory(localFolder); + + Git repo = clone.Call(); + //writer.Close(); + repo.GetRepository().Close(); + } + catch (Exception ex) + { + + try + { + var git = Git.Open(localFolder); + //var repository = git.GetRepository(); + //PullCommand pullCommand = git.Pull(); + //pullCommand.Call(); + //repository.Close(); + + var reset = git.Reset().SetMode(ResetCommand.ResetType.HARD).SetRef("origin/master").Call(); + + } + catch (Exception ex2) + { + + error = ex2.Message; + } + + error = ex.Message; + } + + return error; + } + + private static void checkAndCreateFolder(String folderPath) + { + if (!Directory.Exists(folderPath)) + Directory.CreateDirectory(folderPath); + } + + public static string getLocalRepositoryPath(AsposeComponent component) + { + return AsposeComponentsManager.getAsposeHomePath() + "gitrepos" + "/" + component.get_name(); + } + + } +} diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/GlobalData.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/GlobalData.cs new file mode 100644 index 000000000..b7cef270d --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/GlobalData.cs @@ -0,0 +1,18 @@ +// Copyright (c) Aspose 2002-2014. All Rights Reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.ComponentModel; + +namespace AsposeVisualStudioPluginWords.Core +{ + public class GlobalData + { + public static bool isComponentFormAborted = false; + public static bool isAutoOpened = true; + public static string SelectedComponent = string.Empty; + public static BackgroundWorker backgroundWorker; + } +} diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/TreeNodeData.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/TreeNodeData.cs new file mode 100644 index 000000000..6b796a398 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/TreeNodeData.cs @@ -0,0 +1,28 @@ +// Copyright (c) Aspose 2002-2014. All Rights Reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AsposeVisualStudioPluginWords.Core +{ + public class TreeNodeData + { + string _path; + + public string Path + { + get { return _path; } + set { _path = value; } + } + Example _example; + + public Example Example + { + get { return _example; } + set { _example = value; } + } + } +} diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/ZipUtilities.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/ZipUtilities.cs new file mode 100644 index 000000000..03ec4b9e5 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Core/ZipUtilities.cs @@ -0,0 +1,43 @@ +// Copyright (c) Aspose 2002-2014. All Rights Reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO; +using Ionic.Zip; +namespace AsposeVisualStudioPluginWords.Core +{ + public class ZipUtilities + { + + + /// + /// Unzip files + /// + /// + /// + public Boolean ExtractZipFile(string zipFilePath, string pathToExtract) + { + try + { + var options = new ReadOptions { StatusMessageWriter = System.Console.Out }; + using (ZipFile zip = ZipFile.Read(zipFilePath, options)) + { + // This call to ExtractAll() assumes: + // - none of the entries are password-protected. + // - want to extract all entries to current working directory + // - none of the files in the zip already exist in the directory; + // if they do, the method will throw. + zip.ExtractAll(pathToExtract); + } + } + catch (Exception) + { + return false; + } + return true; + } + + } +} diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/ComponentWizardPage.Designer.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/ComponentWizardPage.Designer.cs new file mode 100644 index 000000000..b5c10decb --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/ComponentWizardPage.Designer.cs @@ -0,0 +1,230 @@ +using AsposeVisualStudioPluginWords.Core; +namespace AsposeVisualStudioPluginWords.GUI +{ + partial class ComponentWizardPage + { + /// + /// 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.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ComponentWizardPage)); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.label1 = new System.Windows.Forms.Label(); + this.groupBoxCommonUses = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.linkLabelAspose = new System.Windows.Forms.LinkLabel(); + this.progressBar = new System.Windows.Forms.ProgressBar(); + this.toolStripStatusMessage = new System.Windows.Forms.Label(); + this.AbortButton = new System.Windows.Forms.Button(); + this.ContinueButton = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.tableLayoutPanel2.SuspendLayout(); + this.groupBoxCommonUses.SuspendLayout(); + this.SuspendLayout(); + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel2.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("tableLayoutPanel2.BackgroundImage"))); + this.tableLayoutPanel2.ColumnCount = 1; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 584F)); + this.tableLayoutPanel2.Controls.Add(this.label1, 0, 0); + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 80F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 80F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 80F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 80F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(584, 76); + this.tableLayoutPanel2.TabIndex = 4; + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label1.BackColor = System.Drawing.Color.Transparent; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(3, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(578, 74); + this.label1.TabIndex = 1; + this.label1.Text = "Explore Aspose.Words .NET API Examples"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // groupBoxCommonUses + // + this.groupBoxCommonUses.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxCommonUses.Controls.Add(this.tableLayoutPanel1); + this.groupBoxCommonUses.Controls.Add(this.linkLabelAspose); + this.groupBoxCommonUses.Location = new System.Drawing.Point(12, 136); + this.groupBoxCommonUses.Name = "groupBoxCommonUses"; + this.groupBoxCommonUses.Size = new System.Drawing.Size(560, 275); + this.groupBoxCommonUses.TabIndex = 1; + this.groupBoxCommonUses.TabStop = false; + this.groupBoxCommonUses.Text = "Common Uses:"; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.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.tableLayoutPanel1.BackgroundImage = global::AsposeVisualStudioPluginWords.Properties.Resources.aspose_words; + this.tableLayoutPanel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 584F)); + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 16); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 228F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 228F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 228F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 228F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(554, 197); + this.tableLayoutPanel1.TabIndex = 5; + // + // linkLabelAspose + // + this.linkLabelAspose.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.linkLabelAspose.AutoSize = true; + this.linkLabelAspose.LinkArea = new System.Windows.Forms.LinkArea(6, 6); + this.linkLabelAspose.Location = new System.Drawing.Point(12, 255); + this.linkLabelAspose.Name = "linkLabelAspose"; + this.linkLabelAspose.Size = new System.Drawing.Size(151, 17); + this.linkLabelAspose.TabIndex = 1; + this.linkLabelAspose.TabStop = true; + this.linkLabelAspose.Text = "Visit Aspose for more details."; + this.linkLabelAspose.UseCompatibleTextRendering = true; + this.linkLabelAspose.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelAspose_LinkClicked); + // + // progressBar + // + this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.progressBar.Location = new System.Drawing.Point(12, 102); + this.progressBar.Name = "progressBar"; + this.progressBar.Size = new System.Drawing.Size(560, 28); + this.progressBar.TabIndex = 3; + // + // toolStripStatusMessage + // + this.toolStripStatusMessage.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.toolStripStatusMessage.AutoSize = true; + this.toolStripStatusMessage.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.toolStripStatusMessage.Location = new System.Drawing.Point(10, 85); + this.toolStripStatusMessage.Name = "toolStripStatusMessage"; + this.toolStripStatusMessage.Size = new System.Drawing.Size(102, 13); + this.toolStripStatusMessage.TabIndex = 4; + this.toolStripStatusMessage.Text = "fetching API info"; + // + // AbortButton + // + this.AbortButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.AbortButton.Location = new System.Drawing.Point(485, 434); + this.AbortButton.Name = "AbortButton"; + this.AbortButton.Size = new System.Drawing.Size(75, 23); + this.AbortButton.TabIndex = 7; + this.AbortButton.Text = "Abort"; + this.AbortButton.UseVisualStyleBackColor = true; + this.AbortButton.Click += new System.EventHandler(this.AbortButton_Click); + // + // ContinueButton + // + this.ContinueButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ContinueButton.Location = new System.Drawing.Point(372, 434); + this.ContinueButton.Name = "ContinueButton"; + this.ContinueButton.Size = new System.Drawing.Size(75, 23); + this.ContinueButton.TabIndex = 6; + this.ContinueButton.Text = "Continue"; + this.ContinueButton.UseVisualStyleBackColor = true; + this.ContinueButton.Click += new System.EventHandler(this.ContinueButton_Click); + // + // panel1 + // + this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel1.Location = new System.Drawing.Point(0, 418); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(585, 1); + this.panel1.TabIndex = 5; + // + // timer1 + // + this.timer1.Interval = 200; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // ComponentWizardPage + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(584, 472); + this.ControlBox = false; + this.Controls.Add(this.AbortButton); + this.Controls.Add(this.ContinueButton); + this.Controls.Add(this.panel1); + this.Controls.Add(this.tableLayoutPanel2); + this.Controls.Add(this.toolStripStatusMessage); + this.Controls.Add(this.progressBar); + this.Controls.Add(this.groupBoxCommonUses); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(590, 500); + this.MinimizeBox = false; + this.Name = "ComponentWizardPage"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Aspose Visual Studio Plugin"; + this.tableLayoutPanel2.ResumeLayout(false); + this.groupBoxCommonUses.ResumeLayout(false); + this.groupBoxCommonUses.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBoxCommonUses; + private System.Windows.Forms.LinkLabel linkLabelAspose; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ProgressBar progressBar; + private System.Windows.Forms.Label toolStripStatusMessage; + private System.Windows.Forms.Button AbortButton; + private System.Windows.Forms.Button ContinueButton; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Timer timer1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + } +} \ No newline at end of file diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/ComponentWizardPage.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/ComponentWizardPage.cs new file mode 100644 index 000000000..f0612c9b3 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/ComponentWizardPage.cs @@ -0,0 +1,439 @@ +// Copyright (c) Aspose 2002-2014. All Rights Reserved. + +using System; +using System.Diagnostics; +using System.Globalization; +using System.Linq; +using System.Runtime.InteropServices; +using System.ComponentModel.Design; +using Microsoft.Win32; +using Microsoft.VisualStudio; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Net; +using System.Text.RegularExpressions; +using System.Windows.Forms; +using AsposeVisualStudioPluginWords.Core; +using EnvDTE80; + +namespace AsposeVisualStudioPluginWords.GUI +{ + public partial class ComponentWizardPage : Form + { + Task progressTask; + private bool examplesNotAvailable = false; + private bool downloadTaskCompleted = false; + //AsyncDownloadList downloadList = new AsyncDownloadList(); + AsyncDownload asyncActiveDownload = null; + private DTE2 _application = null; + public ComponentWizardPage() + { + InitializeComponent(); + AsyncDownloadList.list.Clear(); + AsposeComponents components = new AsposeComponents(); + + if (!GlobalData.isAutoOpened) + { + AbortButton.Text = "Close"; + } + + GlobalData.SelectedComponent = null; + ContinueButton_Click(new object(), new EventArgs()); + + + } + + public ComponentWizardPage(DTE2 application) + { + _application = application; + InitializeComponent(); + + AsyncDownloadList.list.Clear(); + AsposeComponents components = new AsposeComponents(); + + if (!GlobalData.isAutoOpened) + { + AbortButton.Text = "Close"; + } + + GlobalData.SelectedComponent = null; + ContinueButton_Click(new object(), new EventArgs()); + + + } + private void performPostFinish() + { + AbortButton.Enabled = true; + + AsposeComponent component; + AsposeComponents.list.TryGetValue(Constants.ASPOSE_COMPONENT, out component); + checkAndUpdateRepo(component); + } + + private bool performFinish() + { + ContinueButton.Enabled = false; + processComponents(); + + if (!AsposeComponentsManager.isIneternetConnected()) + { + this.showMessage(Constants.INTERNET_CONNECTION_REQUIRED_MESSAGE_TITLE, Constants.INTERNET_CONNECTION_REQUIRED_MESSAGE, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning); + return false; + } + + GlobalData.backgroundWorker = new BackgroundWorker(); + GlobalData.backgroundWorker.WorkerReportsProgress = true; + GlobalData.backgroundWorker.WorkerSupportsCancellation = true; + + GlobalData.backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork); + GlobalData.backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged); + GlobalData.backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted); + GlobalData.backgroundWorker.RunWorkerAsync(); + + return true; + } + + private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) + { + try + { + UpdateProgress(1); + int total = 10; + int index = 0; + + AsposeComponentsManager comManager = new AsposeComponentsManager(this); + foreach (AsposeComponent component in AsposeComponents.list.Values) + { + if (component.is_selected()) + { + GlobalData.SelectedComponent = component.get_name(); + + if (AsposeComponentsManager.libraryAlreadyExists(component.get_downloadFileName())) + { + component.set_downloaded(true); + } + else + { + AsposeComponentsManager.addToDownloadList(component, component.get_downloadUrl(), component.get_downloadFileName()); + } + } + + decimal percentage = ((decimal)(index + 1) / (decimal)total) * 100; + UpdateProgress(Convert.ToInt32(percentage)); + + index++; + } + + UpdateProgress(100); + UpdateText("All operations completed"); + } + catch (Exception) { } + } + + private void UpdateText(string textToUpdate) + { + if (GlobalData.backgroundWorker != null) + { + toolStripStatusMessage.BeginInvoke(new TaskDescriptionCallback(this.TaskDescriptionLabel), + new object[] { textToUpdate }); + } + } + + private void UpdateProgress(int progressValue) + { + if (GlobalData.backgroundWorker != null) + { + progressBar.BeginInvoke(new UpdateCurrentProgressBarCallback(this.UpdateCurrentProgressBar), new object[] { progressValue }); + } + } + + private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) + { + if (e.ProgressPercentage == 0) + progressBar.Value = 1; + else + progressBar.Value = e.ProgressPercentage; + } + + private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + processDownloadList(); + } + + + public delegate void TaskDescriptionCallback(string value); + private void TaskDescriptionLabel(string value) + { + toolStripStatusMessage.Text = value; + } + + public delegate void UpdateCurrentProgressBarCallback(int value); + private void UpdateCurrentProgressBar(int value) + { + if (value < 0) value = 0; + if (value > 100) value = 100; + + progressBar.Value = value; + } + + + private void processDownloadList() + { + if (AsyncDownloadList.list.Count > 0) + { + asyncActiveDownload = AsyncDownloadList.list[0]; + AsyncDownloadList.list.Remove(asyncActiveDownload); + downloadFileFromWeb(asyncActiveDownload.Url, asyncActiveDownload.LocalPath); + toolStripStatusMessage.Text = "Downloading " + asyncActiveDownload.Component.Name + " API"; + } + else + { + performPostFinish(); + } + } + + private void downloadFileFromWeb(string sourceURL, string destinationPath) + { + progressBar.Visible = true; + + // do nuget download + //IServiceProvider serviceProvider=new System.IServiceProvider; + //var componentModel = (IComponentModel)GetService(typeof(SComponentModel)); + //IVsPackageInstallerServices installerServices = componentModel.GetService(); + //var installedPackages = installerServices.GetInstalledPackages(); + //Console.WriteLine(installedPackages.FirstOrDefault().Title); + + + WebClient webClient = new WebClient(); + webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); + webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); + Uri url = new Uri("http://packages.nuget.org/api/v1/package/" + asyncActiveDownload.Component.get_name()); + webClient.DownloadFileAsync(url, destinationPath); + } + + private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e) + { + progressBar.Value = e.ProgressPercentage; + } + + private void Completed(object sender, AsyncCompletedEventArgs e) + { + progressBar.Value = 100; + asyncActiveDownload.Component.Downloaded = true; + AsposeComponentsManager.storeVersion(asyncActiveDownload.Component); + UnZipDownloadedFile(asyncActiveDownload); + AbortButton.Enabled = true; + processDownloadList(); + } + + private void UnZipDownloadedFile(AsyncDownload download) + { + AsposeComponentsManager.unZipFile(download.LocalPath, Path.Combine(Path.GetDirectoryName(download.LocalPath), download.Component.Name)); + } + + public DialogResult showMessage(string title, string message, MessageBoxButtons buttons, MessageBoxIcon icon) + { + return MessageBox.Show(message, title, buttons, icon); + } + + private bool validateForm() + { + clearError(); + return true; + } + + void processComponents() + { + AsposeComponent component = new AsposeComponent(); + AsposeComponents.list.TryGetValue(Constants.ASPOSE_COMPONENT, out component); + component.Selected = true; + } + + + + private void setErrorMessage(string message) + { + toolStripStatusMessage.Text = message; + ContinueButton.Enabled = false; + } + + private void clearError() + { + ContinueButton.Enabled = true; + } + + private void setTooltip(Control control, string message) + { + ToolTip buttonToolTip = new ToolTip(); + buttonToolTip.ToolTipTitle = control.Text; + buttonToolTip.UseFading = true; + buttonToolTip.UseAnimation = true; + buttonToolTip.IsBalloon = true; + buttonToolTip.ToolTipIcon = ToolTipIcon.Info; + + buttonToolTip.ShowAlways = true; + + buttonToolTip.AutoPopDelay = 90000; + buttonToolTip.InitialDelay = 100; + buttonToolTip.ReshowDelay = 100; + + buttonToolTip.SetToolTip(control, message); + + } + #region events + private void linkLabelAspose_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + linkLabelAspose.LinkVisited = true; + System.Diagnostics.Process.Start("http://www.aspose.com/.net/total-component.aspx"); + } + + + #endregion + + private void logoButton_Click(object sender, EventArgs e) + { + System.Diagnostics.Process.Start("http://www.aspose.com"); + } + + private void textBoxProjectName_TextChanged(object sender, EventArgs e) + { + validateForm(); + } + + private void ContinueButton_Click(object sender, EventArgs e) + { + progressBar.Value = 1; + progressBar.Visible = true; + toolStripStatusMessage.Visible = true; + toolStripStatusMessage.Text = "Fetching API info: - Please wait while we configure you preferences"; + + GlobalData.isComponentFormAborted = false; + performFinish(); + } + + private void AbortButton_Click(object sender, EventArgs e) + { + if (GlobalData.isAutoOpened) + GlobalData.isComponentFormAborted = true; + + Close(); + } + + #region Download Examples from GitHub + + private void checkAndUpdateRepo(AsposeComponent component) + { + if (null == component) + return; + if (null == component.get_remoteExamplesRepository() || component.RemoteExamplesRepository == string.Empty) + { + showMessage("Examples not available", component.get_name() + " - " + Constants.EXAMPLES_NOT_AVAILABLE_MESSAGE, MessageBoxButtons.OK, MessageBoxIcon.Information); + examplesNotAvailable = true; + return; + } + else + { + examplesNotAvailable = false; + } + + if (AsposeComponentsManager.isIneternetConnected()) + { + CloneOrCheckOutRepo(component); + } + else + { + showMessage(Constants.INTERNET_CONNECTION_REQUIRED_MESSAGE_TITLE, component.get_name() + " - " + Constants.EXAMPLES_INTERNET_CONNECTION_REQUIRED_MESSAGE, MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void CloneOrCheckOutRepo(AsposeComponent component) + { + UpdateProgress(0); + downloadTaskCompleted = false; + timer1.Start(); + Task repoUpdateWorker = new Task(delegate { CloneOrCheckOutRepoWorker(component); }); + repoUpdateWorker.Start(); + progressTask = new Task(delegate { progressDisplayTask(); }); + progressBar.Enabled = true; + progressTask.Start(); + ContinueButton.Enabled = false; + toolStripStatusMessage.Text = "Please wait while the Examples are being downloaded..."; + } + + private void timer1_Tick(object sender, EventArgs e) + { + UpdateProgress((progressBar.Value < 90 ? progressBar.Value + 1 : 90)); + + if (downloadTaskCompleted) + { + timer1.Stop(); + RepositoryUpdateCompleted(); + } + } + + private void progressDisplayTask() + { + try + { + this.Invoke(new MethodInvoker(delegate() { progressBar.Visible = true; })); + } + catch (Exception) + { + } + } + + private void RepositoryUpdateCompleted() + { + UpdateProgress(100); + + ContinueButton.Enabled = true; + toolStripStatusMessage.Text = "Examples downloaded successfully."; + downloadTaskCompleted = true; + progressBar.Value = 0; + progressBar.Visible = false; + UpdateProgress(0); + + Close(); + } + + private string GetDestinationPath(string destinationRoot, string selectedProject) + { + if (!Directory.Exists(destinationRoot)) + Directory.CreateDirectory(destinationRoot); + + string path = destinationRoot + "\\" + Path.GetFileName(selectedProject); + + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + } + else + { + int index = 1; + while (Directory.Exists(path + index)) + { + index++; + } + path = path + index; + if (!Directory.Exists(path)) + Directory.CreateDirectory(path); + } + + return path; + } + + private void CloneOrCheckOutRepoWorker(AsposeComponent component) + { + GitHelper.CloneOrCheckOutRepo(component); + downloadTaskCompleted = true; + } + + + #endregion + } +} diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/ComponentWizardPage.resx b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/ComponentWizardPage.resx new file mode 100644 index 000000000..331254b5f --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/ComponentWizardPage.resx @@ -0,0 +1,914 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAAkgAAABQCAIAAABtZh0nAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACw8AAAsPAZL5A6UAAAAadEVYdFNvZnR3YXJlAFBhaW50 + Lk5FVCB2My41LjEwMPRyoQAAoJRJREFUeF7t/XmYfVdZ5/0/f3S3bTsrImiYRxkCSEJCAgmBQAJkIgHC + FIYECLMQQECUeRQQEFBEBUVQEBEBQSYRARHFWfBB2nZotJ3abieCoM/v+b1OvcPNZp+qSn0j+vR1+V1X + rpO11157n1P1rdrv+tzrvj/r//p/D7d/ne/A/2/R/p9F++fPtX/aap/9XPvMon3qU5/6y7/8y7/7u7+7 + +OKLP73TjOhrOrV/+Id/+PvPNTOn/e3f/q3+3+w0fa//63/9r/+90/76r/9aX/ufO83hJz/5yT/Yaf9t + p/3+Tvuv//W//o//8T/+4i/+4s///M91vGp/8id/8md/9mcOdf50p7l22h//8R//953mVvqazh/+4R/+ + 0R/9UXfuXT7xiU/0Lh//+Me9i6Zj8Pd22u/+7u96NfLRj370/95pv/3bv23wYx/72O/8zu/o9/rrv/7r + Xn/rt37r137t17xqH/nIRwz+xm/8xq/+6q/+yq/8inHtl37plxw69aEPfcjgL//yL+sY/PBO+8AHPqCv + ve997/vFnabzwQ9+0Pgv/MIv/PzP/7xX7V3vepdx7R3veIfB9773ve985zvf/e53v+c973HqbW97m77O + W97yFuPmvPnNb/7ZnfbWt77VoAk/8zM/88Y3vrHD17/+9T/90z/9pje9Sceg9hM/8RM/9mM/9oY3vMHI + D//wD7/uda/78R//8Ve96lUGX/Oa1+gYfPWrX+315S9/uVcjL33pS1/5ylf+4A/+4Ete8pLv//7vf8Ur + XvGyl71M//t22gte8AKH5jz3uc81+D3f8z3Pe97zvvu7v/uFL3yhU89+9rO9GnnqU5/6XTvtKU95ikHN + yJOf/ORnPvOZOo973OOe9rSn6Tz2sY81+KQnPekxj3nMt3/7t3/Hd3yHUxdddJH+E57whIc//OEOv+3b + vu3BD37wo3fawx760Ec84hGPetSjHvnIRz7wgQ/81m/9Vof3ve99H/YwZx56v/vdz0ztggsu0Dfh/ve/ + /7nnnuvVyF3vetfzzz/fZJ173OMe97nPfe5+97vf6U53ute97nXPe97ztNNOM2jk9re//V3uchdzztxp + d77znc8555xTTz3V69lnn33rW9/aJWedddZtb3vbM3baHe94x5NPPtnlOre4xS3usNN03MdVJ5xwwkkn + nXS7293uNre5zc1udjNXmXzTm97UofYt3/ItTTjuuOOOOeaYE3fajW98Y4O3vOUtr3/967vP8ccff5Ob + 3OTYY481x+uRRx5585vfXOfa1762S9zzute9rtejjz76BjvtqKOOcoerXe1qbq5d9apXdblmxA1vdKMb + ffM3f/PVr35199GudKUr3fCGN3TVFa94xetd73o6pl3rWtfS14444giTta//+q/3Lto3fuM3Xmenua2z + PsM1r3nNr/mar3GJ9rVf+7UONfPd+RrXuIZXgzre8Su/8iu9al/+5V9+latcxRt9wzd8wxWucAW30r76 + q7/a61WuetX/8l/+i7Oa2155p3lTN9Fxt//8n//zpnPlK3/Zl32ZQ82FvZ1bOetTaf/pP/2nOl/yJV/i + XXTcwcwGv/RLv/Sbdtp//I//sY7PZpqO78NXfMVXNPgf/sN/qDPz/69/naf64bv+v4cEtoiGdIhW/x// + 8R+jGxr91V/9lUNIi20hbQW2JdvimaZTi221FdsgLbZhT1CBEy2cYAl6gRm2gZmm7xXMgE3DM31zttkG + afFMB8P0tWFb1AyfsQ3VvKO+z9C790mwzcfQMEwf23SGbb/5m78Z0qBLX9MBM3hDMk3fK4B1CGn62AZd + sc2IvlcNwPQ16Hr/+9+PbTpgZtzrz/3cz3k1Al362AZgYIZtwUzfK4B51eIZtmGYvvFghnkakv3UT/2U + QwDDs5/8yZ/UwTPjXn/0R38U0oxAlz626eDZj/zIj+j8wA/8ALD90A/90Pd+7/fqYxuAAR68YVhsM4Jh + HQLYi170ohe/+MXPec5z8AzekAzwjGtPf/rT9TXcwrNnPetZGIZnxiENw7zCHm5953d+pzkgB2ZPfOIT + Qa6+V+jyquEWnj36ootwC/CAzYg+sDnErYfstHvf+94XXnjhgx70IGAz+IAHPADVoEs/tuFZbAMzk+92 + t7vV14ExFNRBKRgzjlUG9b0ahDQNpfDMCMiZoG8Ew2IbSgEbqgGS8VN22GamvlNwBWwOoehWt7qVDiAZ + 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 + roZnQSvJVWlauSHtnZ35Vhytms1NikNqwWwv55HK19px1FrOPs4jqAZ1XjFsnEeEgLTikLlqSWbLeQS3 + ch6BrlIijYzzCHS1zCb8aILW0tqlOo9Muj+k5TziQYZSsc0TXxxSq2QtE+RSSPCvzdg0hWuoRr0JSN77 + vLv+yIsv984fuzy2/fp7rvnxD3/zH/zmkR/98FHv+pmzXvbis57w2FMfcuGJj33UiS//nlt/5AN3/Js/ + g7Tb/vUnT/7LPzzpTz9xwh/9zvGf+MjNT7rlEU9+9Fn/z2888rM/e/ZnfvyWn375jYDtISdeGRvItYyP + sQ3hNq5aO84jgBTb/ERdhqeDR/8NjzzS/d3HnxFzB08MI9gmOJlc07CkCjYjy/cCNg/9XLV2dR5x/5xH + IM0T32G0yxwSaTR93PIPsbyznzcyKOcRpHFJziOj23wHlvP9IiCHS1RnL8Wfn0bU8S5AkvOIwxIgIdaP + 1twEBXMhofn2ch4RTkyiJdfqTCYkUibReDbnCenQ2VbUZhebqW/zeQ6D7QtCi9sbje71k91i2D4/9yuw + gRnkzP3xZkKRxkEOJsGpnA6dyYrc1XnkkNbY0m1uO2DrXXIeWe3HNnKtZbYxQU6uJfhor4iyBNt2uv9U + Z2dtpSXUtk2QW2ZbmSAXilyaIJcSGdsqaMvUvwhkkcneaGWCTLcJwpQ/UipK6i1j4mKJuZwk3Yo9atgD + SLPMVoZkPiPFFcvU17KCFIcsDbL8kZbZjBSHbL1Nv42Pq87OIrLsklJItEz9hSJzPW6xLRPkjCL1oa5U + EXKNaKPPWmzDsEyQMUz40apb1dmVstFnY4Kc8wiAEWqxDcNKJEm3OczgXyiyVBF4S58Zbxu2TJAz+Me/ + S6qzbc/2iEd4pK5MkPEMxozrXLDjQrJxQ77vfQtFZvBfoa6m7/WBF9zuJ1/x1e/Atjdf6VfffY2Pvv+6 + n/jI9f/wt7/lz//byX/1x6f+z/9+O+IMzP76k7f5qz++1V/8wQl/+onj//vHjvvD3zjm47981Ntff6Qs + h7e/4rx//oXzPvuW0z7zoze/+Htv9DfPueF1rnwFdPEE32RF7jQBSetnVWeDHLnm3Ze/3b7nm+K8Pdqy + gtsvftbJmESJLm/i3xqHMorUyXkEiCgzgng5k1qtWHs7FOlpjkNOmYBPeJZco8/08QAOY1vLbOC3NB/x + LqR2y1TjquWGxRihd1k2Z7K/PDZQOeIItPDDPB/S0893ySXZKCOfz+Ads+bymz4z/VnZEp1pK8r6Esis + 6rgRC950QqA3LdRZsBG00m3eaJbZZtPRQdpsqH0YbJcFbPgES/sbca3AVvixzBE/E8A2C2yoU1TTiD7S + EGFj2bXKihzFllabBbaMsvYPRY5TySi2y2CCDG8BMj6VBpL/yF4myO2CpnXh/ibIpY1A2jIUWUpkSKuU + jSybUOSSbSu5tjRBLkNyaYLcil0Qag0vG63Zs6aas0TbeB+Xxxiiii5OVmTOI0sT5KrZSvQvVglmmY+U + OeIQ0nY1QRb5WZkgQ9eEIg9iglwKycoE2VramCC3zBbb9jFB9thdmSCTYisT5NbV9jFBptVgD9gyQc5M + S0AypI3zSKkZ7VmTCfIF5x3zk9//VW//0a/7+Td+4y+97aqW3D76/uuITP7hb93sk797wp/+3i3/9Pdu + 8ScfP+6Tv3vzP/qdo//g14/6vV++yUc/eKNf+7kbnHHqla9x9av8r3ff55/ecc5nf/LW//jKm178PUf+ + 8HnX9Ogkztov+/Ny7dRTIQ2QMkEWDZ5Hg99BD+vEECZVYVZ+B2xoK4D5YwK9QMKEVeqjGF3pkUsTZN+N + ZVmYh0MCaC8T5LyPVybImSPnfezyMUE2eRUA9HX50XJz8MA2kxHFF+hfZ+WY5Xchh+JtE2Q3gUDfq1JI + Cidim++MX6glpP10uUkmyNvJI5FsTJCt1RWczOk/ksU2r9Vi67RTdtNKe/EllEvi9bAJ8hcormq0x3Ck + zq6aLAhtn1reYQW2ys5mJaywpJv4gaaoxgQ50uxaxLa9zU2hyPz+y+bYDkUul9n+JSbIlcotDf6XJsiB + ba9Q5IBtH+eRNq/pdZbZMKz8kbSa8WAW4XIe2TUUmatWW9hkvlWnT5LrcdXZmSCXNgJshSJjG5iVrw9I + ZefHpMrUAKz1tgRcYUkzV84j5FqhSKemOttf7m6YCXLOIzqeNVVnlxKpjfNIjv7lRmbwj2o02TiPFIps + z5pctaBr6TyCbYRaoci2YctVyxLaynlkZRRZKRuJNs4jdJv8keSaPsVGxmSCPKHIjY3Wwx6Gc0YQq71s + hBlzHjFCopUk2TKbU9iwkXEXXIBn2CYUaUSz5LaRb+ce++oXf/WbX/lVwpLv+6lv+sW3XuVX3nF1hPvN + n7/2xz54/Y//0o1+71du8n//8o0+9qEb/Nb7v/kj777W+3/6yt/6wCt4nn7XI2/32Z+902ffePJnXn3M + p7/3Rv/7uTc8+lobr0WWWpCWOaQOt8MTb3UrtNOR+2Bkmf7g393Dt4wS+Y061uSAQfTSSJux+XNtHghW + lWgRjDR5pfzMEQjxj+v77y8M/2Tbhdv+RbwdHQY2uzqPkGu+BKtisc3zPYP/1tuMAIyz2UV67pvs52r1 + vPKQ8bdaBmzCA0uX52b6ZcfglJPNYqT7u61fjeV9POX8mmTG5kfF32ErjxV/bXv3MhvRaxWKzLW1nOQ8 + E5ZFpd5r4+n6S7/kJ6RkmW6yiUle/vLlkvjqcvr3FnRbCDTnsGI7ZMW2j1xbRgjbsLTmEhDKYRLDlmXU + 9VNvuWT5UTig84h7+hVamiA7/KI7j0Aa3uAKdBWKPKDzCHGWq9ZsK3oZnEdmmW1/55FZZgOw9h0tv7/I + 5KE6j4Bc+SM6iS0w0/EgKCsyL+bYVuYIdO3lPJLsW7Ft23mEejug84inYc4jMLbtPJJRZAb//3LnEbj6 + V3UeyQ8Q5/L1H+cRYCt/JLah3el3vNWTHnU5bPMf9fbu11/hvT/5jSD3/p++kv8kTzo0+LOv2cx5+Plf + Kwh5q+Nv+lc/dspnX3/CP/7w0ZvVtRce+bTTruZRSJlBUc4jOjAmFLl0HgHs5ePbZ0AIGBO0bD+anEeI + ttgGMMTx8hLPYmmN2Ea3+WfaZ81idcrfXh7N+fpTP/i0WmOLedhGRWFGKSTY0zKbJzu2BblK2dyqs/5s + OvjH8Dvuw7sbmLWdje+bW61q0ve/ocedP1zcpKSSy+Y84i2QPommjUQ77Dxy0H/NAyq2veSat9kLbKBF + Ws39Jw6ZXEtUBSRgw7nS/fc3QS7LceUVCUJLV61u3v2nLV21tk2Ql+n+/mTzd2jFZBo+HaoJcuVr2DYm + yNlordL99zJBLiuyvbOTa0m3hNoqFLk0Qa46u7rsnEdmmW1/E+TSRpaGy2VjGtcpbSSjyDFBhjf96rJL + 929prbz/+q2rjfIru8SDZlcT5PZjm2W2TP0ts7WutjJBroKtvP9MkD1GxwS56myNVssE2R/X+uRC+f17 + mSC3rjbOI4UiW1qzzGYtrWo2gcdMkHWqztbaL1tcUoQtE+Rq1zJBbu/sjQnyfe5Doi1NkHMeyQRZColo + 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 + + + + 17, 17 + + + 67 + + + + AAABAAIAEBAAAAAAIABoBAAAJgAAACAgAAAAACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAEAE + AAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af///wEqa/IDKmvyRypr8okqa/KLKmzySSpv + 8w////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQ2grgUmcekPKm3zYyp2 + 89srefTJK3v0Rf///wH///8B////Af///wH///8B////Af///wEPnrEJD56xUQ+esZsPnrG5D56xrQ6d + r2smjOZFLo723y2I9e0sgvVH////Af///wH///8B////Af///wEPnrEdEJ+ysxWmuvkbr8H/H7XH/x22 + yP8XsMP7FKq8rzqo8202n/j7LYv12SyC9Rn///8B////Af///wEPnrEZE6S3yR+1xv8rx9ftOtXlzTrb + 6ck12ujpMdPi/yvF1/0vvNOBUrj72zGX9v0shfV1////Af///wEPnrEDFaW4iSC3yfUrytqVQbaTa0Wu + eptCtoebQcmtbUDi7qk+3On9Os7dsWnI/Ls5nvj/LIT0sSV4+gW7hTQLFKS3GRyww9knw9RxRqFbdUqq + cvVHtIT/Rb6U70PHocND0rtlSeHy2Urf66NfvvvBQ6H4/yt+9MMjdfwJvIY0VxipvEcgtsilN5hKNUeg + We1NsHz/SbuN1ZvBnG2lx6UbQ9PLDUfZ9qtO0fVrTqz56Uea9/8sd/Oxq4dVE76HNZUZrL5fILXHOTmS + N3FIoFn/UbSB+Xa4i3Pgt4/NvLGtIUKZ9hVEtvddSJ33vUma9/9GjPb7K27zY8WMNXW8hjWJGKm8QRuy + yg05kzmBQpxO/1W0g+2vrXx72q6A+7OopnFAi/i5RI7270eP9v9IjPb5Rob1mbmMTlfAiTbnuYQ0Qxan + uQf///8BOZQ5ZTqXQf1Pr3btraZzf9SjcP/Yq3vhsaOecVeO6H9Oi/GPdpHGccaRSIvDizntuoQ0vbWB + NA3///8B////ATqTOis5lTzvPKFY+XOla3PKmmfp0KBr/9SkcPnWpnLl1KFm3cmSRe/BiTf9uYM047WB + NDP///8B////Af///wH///8BOpQ6jzmaR/84pFyzsI1Lab2LSe3AjUr/v4pC/7uGNv+4hDT5toE0w7WB + NDH///8B////Af///wH///8B////ATqUOg86lT27OZxN+TiiWX+khTg7tYEzhbWBNJu1gTSNtYE0UbWB + NA3///8B////Af///wH///8B////Af///wH///8BOpQ6FTqWPos5m0njOJ5PpTmeUDE2nU0F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wE5lDkDOpY+ITmYQls5mUZ9OplEWTqY + QQ////8B////Af///wH///8B////AQAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8oAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEqa/IJKmvyOSpq + 8msqa/J1KmvyYypr8kkqavIrKmvyESpr8gcqbPMD////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////ASpr + 8gUpavEjKmvyUypr8osqa/LDKmvy4Slr8tMqa/KjKm3yZypv8y0rcfMNK3PzA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BKmvyBSpr8ikqa/J9Km3zzSpw8/MqcvPzKnPzwyt183ErdvMpKnb0Bf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEOoa0DDaGtCQ6frwsPnbEH////AStv9Acrc/Q9K3n0myt99OsrfvT/K3z07St7 + 9Kkre/Q7////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQ+esQUPnrEhDp2wRw6esGcOnrB7Dp6wgw+dsXsPnbFjDp+uOxaVwBUtgPYlLYf2iy2J + 9essiPX/LIT1+yyA9L8sf/U5////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEPnrEdD52xcQ+esa8PnrHVD56x5w+ese8PnrHzD56x7w+eseUOna/LDp2ukQ2f + rDktkPMnMJX2my+V9vMtkPX/LYn1/SyD9bcsgfUr////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEPnrEDD56xRw+esbMPn7LrEaC0+xOktv8Vp7n/F6i6/xepvP8Xqbz/FKm7/xGm + uf8Po7bzDqCyvw2er0c4ofo7OaP5yTSd9/0ulPb/LYr19SyD9ZMsgfQN////Af///wH///8B////Af// + /wH///8B////Af///wH///8BD56xCw6esGcPnrHbEqK1+xiqvf8dsMP/H7XI/yO7zP8nwNH/KcTV/ybE + 1v8iwtX/H77Q/xu5zP8ZssX7F66/vRqrwDtNsf15Q6z57Tag+P8tk/X/LYn13yyC9VP///8B////Af// + /wH///8B////Af///wH///8B////AQ+esQ0PnrFrEaCz4xaouv8dscT/JLzO/ynD1f8xy9z7N9Pi9zjX + 5fc11+X5M9bl/TDT4/8tz9//Ksrb/yfD1f8lu877JbbKl0i86UdUuvvNQ6v6/TKb9/8tjfX5LIT1pSyB + 9Rn///8B////Af///wH///8B////Af///wEOnrEHEJ+yURKitdUZq77/IbfJ/yfC0vsszNvnN9Piz0Td + 7K1E4O+VQeLwkT7i8aM74e3DOuDs4zfc6fs01+X/MdDf/y/I2f8swNHXM77UT2rK/aVRt/r5N6H4/y2R + 9f8sh/XTLID0Q////wH///8B////Af///wH///8B////ARCfsikToratGau+/SG5y/8oxdbrLM3etzDT + 32VDwqxLRrB/U0Oxf19CtYZfQbmOUUDJskNA4+thP+TwvT3h7fc72+j/ONTi/zXK2vE2xthndNH8iWHC + /PU+p/n/LpP2/yyH9ecrgPVpKXr3A////wH///8B////Af///wEPnrELEqK1ZRipvOsht8n/J8TV2yvN + 3n0yzdIxSqRnVUeobqNFq3TVRK9750O0g+dCuYvXQb6UrUHDmmVC3+FFQ+Xxr0Tj8PtC3ur/PtXi+T7P + 4HNxz/x9ZcT880it+v8vk/b/LIb08St+9YMlePsL////AbuHNQ27hTQb////ARKhtB8Wp7mrHrLF/SbA + 0dcpytxnNbORIUqiYG1KpmvdSKtz/UevfP9GtYX/RbqN/0S/lf9Dw5z/Qseh5ULNqoNE3uVTR+Lz00ri + 8P9H3enzRtjmaWvI/IFgv/zzTq/6/zWV9v8sg/T1Knz1jyN3/RH///8BvYc1MbuFNFUSobQDFaW4QRqs + v90iuszfJ8TWbS2/vBc+lTxpSqNg4UupcP9Krnn/SbSC/0i5jP9Fv5T1RMObxUTHoZlBy6iLQ86rf0PW + xz9G3fKTS+Hz/03j791O3uxPYb/8l1e3+/dNq/n/PJb2/yt/9PcqePSRJHT8Ef///wG+hzVhu4U0dROj + twkXqLtvHrHE7yS8z5UoxdgZOZEzOUCXRc1MpWb9Tax1/0yxfv9KuIj/SL2R50rBl4t0xZ9NbcikI0LN + qxNE0bAVQ9XPFUXY9HNJ3fX3T+Lyp1TN9UVUtfvBT676/Uyl+P9BlPb/LXv08ylz84UjcPsNzo0oCb+I + NZ+7hTR5Faa5DxmqvZUfs8bPJb3PQTWhZQU5kjh9QZpJ70+nav9Pr3n/TrSC/0u6jO9IvpODwb2YR+fB + oJXrw6M18MmnA////wFC0vcLRNP3cUfY9tVM3/RVTKz5a0uq+udMpvj/TJ73/0KP9v8ud/PnKW/zZyVu + +APIjTI1v4g11buFNGUYqbwTGqy/rSC1x40kv9IHOpI3HTmSN7FAmUj7UKhs/1GwfP9Ptob9T7uNtZu4 + jT/ht5Cn4ryXz+K+mi////8B////AUHP+Q1C0/hZRND3Y0ij+FNJovjTSqD4/0qc9/9Llvb/Qoj2/Stw + 9cccZ/830pAqEcOMN5G9hzXpuoU0QxmqvRUarL+pH7THT////wE6kjQvOZI3xT+YRP9PqGv/U7F+/1G3 + h+1RvI571q6BYd2yiOHhuZDZ3rmVOT2K+B1CjvUjQpL2JUOa9z1Fm/d5R5r30Uea9/1Il/f/SZT2/0uP + 9f9AgvXtKWz0f1Z1uhPMjzJXw4o12byGNdG6hDQlGKm8ExmqvY8cs8oj////ATqUOjk5kzjLO5ZA/02m + Zf9Vsn//U7eH32S5il3UqnmP261/+960ifHatZBlSY3wYT6L+LNDjva3RI/2z0WR9vFGkvb/R5L2/0iP + 9v9Jjfb/SYv38zx99qc4buApzJA5P8aNN7u/iDX7uoQ0nbiDNA8Xp7oNF6i7VRmvyA3///8BOpQ6NTqU + Ock5lTz/RaBY/1ayfv9VuIfXf7OCU9CmcqfXqHf/2q6B/96yhbWforRFPIj7lUGK+ONEi/b9RYz2/0eM + 9v9Ii/b/SYv2/UeK+OdJiveVT4HgNc+TO0PIjzqxwoo39buFNO+3gzRbtYEzBxanuQMWp7kTF63FA/// + /wE6lDonOZQ5vTmUO/07m0r/Ua51/1i4h9eDsX9XzKFsq9Sjb//WqHf/2q1+9dmvg5umoas/Qon4YUaK + 9p1FiffBRYn4zUeJ98NJivajSIn3ZZCQmjfQkz1nyZA9w8SMOPe9hzX/uIM0tbaBNCX///8B////Af// + /wH///8B////ATmTORE5kzmfOpQ7+TmYQ/9DpmH/U7N+32+0hGHJnWmb0Z5q/dOibv/Vp3X/2Kt689us + fLXWrYFvnZ+xTWaR209ZjudVZ5HcU5ebsFHMmlxrzJJCrcmPPOPEjDn9voc1/7mDNOG2gTRftYE0C/// + /wH///8B////Af///wH///8BOZQ5AzqUOnE6lDrrOZdA/zufUv9CqWjpUbN7d8aaZnHMmmfrzp1o/9Gh + bP/UpHD/1ad0+9iodunXqHfT2ql2w9uqdbvYqHLF0Z9g1cuSRefHjTv5wos3/72HNf+4gzTztoE0i7WB + NBn///8B////Af///wH///8B////Af///wH///8BOZQ5MzmUOdE6lT3/OpxM/zqjWvk7qGWjq5plQceX + ZbvImmf/y5xo/8+fav/QoGv/0qJt/9Ojb//Uo2790qBm+8yXUv3Hjz//w4s2/8CINv+7hDT/t4I097WB + NKW1gTQptYE0A////wH///8B////Af///wH///8B////Af///wE6lDoFOpQ6ezqUOvE6mET/OZ9S/zil + Xtk4qGNRvY1PUb+NUNHBklj9xZVd/8iWXf/Jl13/yJVX/8WQSv/Ciz7/v4g1/72HNP+6hTT/t4I0/bWB + M+e1gTSTtIEzIf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wE5lDkfOpQ6szqW + Pf06m0n/OaFW+TemXqc9pWAptoAyVbWANMe2gjbxt4M3/7iDNv+4gjT/t4Iz/7eCM/+3gjT/toE0+7WB + NOu1gTTFtIE0YbWBNA////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wE6lDo5OpQ61TmXQf06nU3/OaJY6zikXYNNn1cduX8yObSAM4m1gTPDtIEz17WBNN+1gTTftYE02bWB + NM21gTSvtYE0c7WANC21gTQF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE6lDpTOZU8xzqXQvk6nE3/OKFW4TejWns3o1shqoQ3DbaBNC21gTRJtYE0WbWB + NFm1gTRRtYE0O7WBNB20gTMD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////ATmUOQc6lDpFOpU8qzqXQus6m0r/OZ9S5zigVZk0o1g9O6BUBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////ATqUOgc5lDopOpU8azqXQLk6mUXtOZxK8zmd + Ts06nlB/OZ1POzedTREwnk4D////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wE6lDoLOpU8JzqW + Plc6l0GNOplEuzmaR885mke5OZlGjTqZRVc6mEIdNphCA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BOpQ6BTqVPg06l0AXOphCLTqYQj86mEJHOpdCPTqXQBk5l0AD////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + + + \ No newline at end of file diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/SampleWizardPage.Designer.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/SampleWizardPage.Designer.cs new file mode 100644 index 000000000..17b3f8e81 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/SampleWizardPage.Designer.cs @@ -0,0 +1,312 @@ +namespace AsposeVisualStudioPluginWords.GUI +{ + partial class SampleWizardPage + { + /// + /// 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.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SampleWizardPage)); + this.imageList1 = new System.Windows.Forms.ImageList(this.components); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.labelCommonUses = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.rdbVisualBasic = new System.Windows.Forms.RadioButton(); + this.rdbCSharp = new System.Windows.Forms.RadioButton(); + this.textBoxLocation = new System.Windows.Forms.TextBox(); + this.labelLocation = new System.Windows.Forms.Label(); + this.AbortButton = new System.Windows.Forms.Button(); + this.ContinueButton = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.toolStripStatusMessage = new System.Windows.Forms.Label(); + this.BrowseButton = new System.Windows.Forms.Button(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.label1 = new System.Windows.Forms.Label(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox1.SuspendLayout(); + this.panel2.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // imageList1 + // + this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); + this.imageList1.TransparentColor = System.Drawing.Color.Transparent; + this.imageList1.Images.SetKeyName(0, "folder-icon.png"); + this.imageList1.Images.SetKeyName(1, "page_white_csharp.ico"); + // + // timer1 + // + this.timer1.Interval = 200; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // groupBox1 + // + this.groupBox1.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.groupBox1.Controls.Add(this.tableLayoutPanel1); + this.groupBox1.Controls.Add(this.labelCommonUses); + this.groupBox1.Controls.Add(this.panel2); + this.groupBox1.Location = new System.Drawing.Point(12, 155); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(560, 228); + this.groupBox1.TabIndex = 5; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Examples:"; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.BackgroundImage = global::AsposeVisualStudioPluginWords.Properties.Resources.aspose_words; + this.tableLayoutPanel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 584F)); + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 58); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 228F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 228F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 228F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 228F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(554, 180); + this.tableLayoutPanel1.TabIndex = 6; + // + // labelCommonUses + // + this.labelCommonUses.AutoSize = true; + this.labelCommonUses.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.labelCommonUses.Location = new System.Drawing.Point(6, 71); + this.labelCommonUses.Name = "labelCommonUses"; + this.labelCommonUses.Size = new System.Drawing.Size(0, 13); + this.labelCommonUses.TabIndex = 4; + // + // panel2 + // + this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel2.Controls.Add(this.rdbVisualBasic); + this.panel2.Controls.Add(this.rdbCSharp); + this.panel2.Location = new System.Drawing.Point(6, 19); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(538, 49); + this.panel2.TabIndex = 3; + // + // rdbVisualBasic + // + this.rdbVisualBasic.AutoSize = true; + this.rdbVisualBasic.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.rdbVisualBasic.Location = new System.Drawing.Point(252, 15); + this.rdbVisualBasic.Name = "rdbVisualBasic"; + this.rdbVisualBasic.Size = new System.Drawing.Size(161, 17); + this.rdbVisualBasic.TabIndex = 2; + this.rdbVisualBasic.Text = "Open VB.NET Examples"; + this.rdbVisualBasic.UseVisualStyleBackColor = true; + // + // rdbCSharp + // + this.rdbCSharp.AutoSize = true; + this.rdbCSharp.Checked = true; + this.rdbCSharp.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.rdbCSharp.Location = new System.Drawing.Point(16, 15); + this.rdbCSharp.Name = "rdbCSharp"; + this.rdbCSharp.Size = new System.Drawing.Size(132, 17); + this.rdbCSharp.TabIndex = 1; + this.rdbCSharp.TabStop = true; + this.rdbCSharp.Text = "Open C# Examples"; + this.rdbCSharp.UseVisualStyleBackColor = true; + // + // textBoxLocation + // + this.textBoxLocation.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxLocation.Location = new System.Drawing.Point(18, 128); + this.textBoxLocation.Name = "textBoxLocation"; + this.textBoxLocation.ReadOnly = true; + this.textBoxLocation.Size = new System.Drawing.Size(461, 20); + this.textBoxLocation.TabIndex = 11; + // + // labelLocation + // + this.labelLocation.AutoSize = true; + this.labelLocation.Location = new System.Drawing.Point(15, 114); + this.labelLocation.Name = "labelLocation"; + this.labelLocation.Size = new System.Drawing.Size(54, 13); + this.labelLocation.TabIndex = 10; + this.labelLocation.Text = "Location: "; + // + // AbortButton + // + this.AbortButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.AbortButton.Location = new System.Drawing.Point(485, 417); + this.AbortButton.Name = "AbortButton"; + this.AbortButton.Size = new System.Drawing.Size(75, 23); + this.AbortButton.TabIndex = 18; + this.AbortButton.Text = "Abort"; + this.AbortButton.UseVisualStyleBackColor = true; + this.AbortButton.Click += new System.EventHandler(this.AbortButton_Click); + // + // ContinueButton + // + this.ContinueButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ContinueButton.Location = new System.Drawing.Point(372, 417); + this.ContinueButton.Name = "ContinueButton"; + this.ContinueButton.Size = new System.Drawing.Size(75, 23); + this.ContinueButton.TabIndex = 17; + this.ContinueButton.Text = "Continue"; + this.ContinueButton.UseVisualStyleBackColor = true; + this.ContinueButton.Click += new System.EventHandler(this.ContinueButton_Click); + // + // panel1 + // + this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel1.Location = new System.Drawing.Point(0, 404); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(585, 1); + this.panel1.TabIndex = 16; + // + // toolStripStatusMessage + // + this.toolStripStatusMessage.AutoSize = true; + this.toolStripStatusMessage.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.toolStripStatusMessage.Location = new System.Drawing.Point(15, 79); + this.toolStripStatusMessage.Name = "toolStripStatusMessage"; + this.toolStripStatusMessage.Size = new System.Drawing.Size(399, 13); + this.toolStripStatusMessage.TabIndex = 19; + this.toolStripStatusMessage.Text = "Fetching Examples: - Please wait while we configure you preferences"; + // + // BrowseButton + // + this.BrowseButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.BrowseButton.Location = new System.Drawing.Point(485, 126); + this.BrowseButton.Name = "BrowseButton"; + this.BrowseButton.Size = new System.Drawing.Size(71, 23); + this.BrowseButton.TabIndex = 21; + this.BrowseButton.Text = "&Browse"; + this.BrowseButton.UseVisualStyleBackColor = true; + this.BrowseButton.Click += new System.EventHandler(this.BrowseButton_Click); + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(18, 93); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(538, 20); + this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.progressBar1.TabIndex = 22; + this.progressBar1.Visible = false; + // + // label1 + // + this.label1.BackColor = System.Drawing.Color.Transparent; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(3, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(267, 74); + this.label1.TabIndex = 1; + this.label1.Text = "Explore Aspose .NET Examples"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel2.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("tableLayoutPanel2.BackgroundImage"))); + this.tableLayoutPanel2.ColumnCount = 1; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 584F)); + this.tableLayoutPanel2.Controls.Add(this.label1, 0, 0); + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 80F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(584, 76); + this.tableLayoutPanel2.TabIndex = 20; + // + // SampleWizardPage + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(584, 446); + this.ControlBox = false; + this.Controls.Add(this.progressBar1); + this.Controls.Add(this.BrowseButton); + this.Controls.Add(this.tableLayoutPanel2); + this.Controls.Add(this.textBoxLocation); + this.Controls.Add(this.toolStripStatusMessage); + this.Controls.Add(this.labelLocation); + this.Controls.Add(this.AbortButton); + this.Controls.Add(this.ContinueButton); + this.Controls.Add(this.panel1); + this.Controls.Add(this.groupBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(590, 490); + this.MinimizeBox = false; + this.Name = "SampleWizardPage"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Aspose Visual Studio Plugin"; + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ImageList imageList1; + private System.Windows.Forms.Timer timer1; + private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox textBoxLocation; + private System.Windows.Forms.Label labelLocation; + private System.Windows.Forms.Button AbortButton; + private System.Windows.Forms.Button ContinueButton; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label toolStripStatusMessage; + private System.Windows.Forms.Button BrowseButton; + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.RadioButton rdbCSharp; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.RadioButton rdbVisualBasic; + private System.Windows.Forms.Label labelCommonUses; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + } +} \ No newline at end of file diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/SampleWizardPage.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/SampleWizardPage.cs new file mode 100644 index 000000000..8e7197d74 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/SampleWizardPage.cs @@ -0,0 +1,462 @@ +// Copyright (c) Aspose 2002-2014. All Rights Reserved. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using AsposeVisualStudioPluginWords.Core; +using System.IO; +using System.Threading; +using System.Xml; +using AsposeVisualStudioPluginWords.XML; +using System.Xml.Serialization; +using System.Diagnostics; +using System.Xml.Linq; +using EnvDTE80; + +namespace AsposeVisualStudioPluginWords.GUI +{ + public partial class SampleWizardPage : Form + { + private bool examplesNotAvailable = false; + private bool downloadTaskCompleted = false; + private DTE2 _application = null; + CancellationTokenSource cancelToken = new CancellationTokenSource(); + TreeNode selectedNode = null; + + Task progressTask; + + public SampleWizardPage() + { + InitializeComponent(); + //AsposeComponents components = new AsposeComponents(); + SetComponentsAPIs(); + + //AsposeComponent component; + //AsposeComponents.list.TryGetValue(Constants.ASPOSE_COMPONENT, out component); + toolStripStatusMessage.Visible = true; + toolStripStatusMessage.Text = ""; + progressBar1.Visible = false; + progressBar1.Value = 0; + + //rdbCSharp.Enabled = false; + //rdbVisualBasic.Enabled = false; + + //checkAndUpdateRepo(component); + + //rdbCSharp.Enabled = true; + //rdbVisualBasic.Enabled = true; + } + + public SampleWizardPage(DTE2 application) + { + _application = application; + InitializeComponent(); + //AsposeComponents components = new AsposeComponents(); + SetComponentsAPIs(); + + textBoxLocation.Text = GetExamplesRootPath(); + + //AsposeComponent component; + //AsposeComponents.list.TryGetValue(Constants.ASPOSE_COMPONENT, out component); + + toolStripStatusMessage.Visible = true; + toolStripStatusMessage.Text = ""; + progressBar1.Visible = false; + progressBar1.Value = 0; + + //rdbCSharp.Enabled = false; + //rdbVisualBasic.Enabled = false; + + //checkAndUpdateRepo(component); + + //rdbCSharp.Enabled = true; + //rdbVisualBasic.Enabled = true; + } + + private void SetComponentsAPIs() + { + if (string.IsNullOrEmpty(GlobalData.SelectedComponent)) + { + ComponentWizardPage componentWizardPage = new ComponentWizardPage(); + componentWizardPage.FormClosed += new FormClosedEventHandler(components_FormClosed); + componentWizardPage.ShowDialog(); + + //if (!GlobalData.isComponentFormAborted) + //{ + // SetComponentsAPIs(); + //} + } + } + private string GetExamplesRootPath() + { + string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\Aspose"; + if (!Directory.Exists(path)) + Directory.CreateDirectory(path); + return path; + } + + private void components_FormClosed(object sender, FormClosedEventArgs e) + { + if (GlobalData.isComponentFormAborted) + this.Close(); + } + + public DialogResult showMessage(string title, string message, MessageBoxButtons buttons, MessageBoxIcon icon) + { + return MessageBox.Show(message, title, buttons, icon); + } + + private bool validateForm() + { + clearError(); + return true; + } + + private void setErrorMessage(string message) + { + toolStripStatusMessage.Text = message; + ContinueButton.Enabled = false; + } + + private void clearError() + { + + toolStripStatusMessage.Text = ""; + ContinueButton.Enabled = true; + } + + private void CloneOrCheckOutRepo(AsposeComponent component) + { + downloadTaskCompleted = false; + timer1.Start(); + Task repoUpdateWorker = new Task(delegate { CloneOrCheckOutRepoWorker(component); }); + repoUpdateWorker.Start(); + progressTask = new Task(delegate { progressDisplayTask(); }); + progressBar1.Enabled = true; + progressTask.Start(); + ContinueButton.Enabled = false; + toolStripStatusMessage.Text = "Please wait while the Examples are being downloaded..."; + } + + private void RepositoryUpdateCompleted() + { + ContinueButton.Enabled = true; + toolStripStatusMessage.Text = "Examples downloaded successfully."; + downloadTaskCompleted = true; + progressBar1.Value = 0; + progressBar1.Visible = false; + } + + private void progressDisplayTask() + { + try + { + this.Invoke(new MethodInvoker(delegate() { progressBar1.Visible = true; toolStripStatusMessage.Visible = true; toolStripStatusMessage.Text = "Fetching Examples: - Please wait while we configure you preferences"; })); + } + catch (Exception) + { + } + } + + private void CloneOrCheckOutRepoWorker(AsposeComponent component) + { + GitHelper.CloneOrCheckOutRepo(component); + downloadTaskCompleted = true; + + } + + private void checkAndUpdateRepo(AsposeComponent component) + { + if (null == component) + return; + if (null == component.get_remoteExamplesRepository() || component.RemoteExamplesRepository == string.Empty) + { + showMessage("Examples not available", component.get_name() + " - " + Constants.EXAMPLES_NOT_AVAILABLE_MESSAGE, MessageBoxButtons.OK, MessageBoxIcon.Information); + examplesNotAvailable = true; + return; + } + else + { + examplesNotAvailable = false; + } + + if (AsposeComponentsManager.isIneternetConnected()) + { + CloneOrCheckOutRepo(component); + } + else + { + showMessage(Constants.INTERNET_CONNECTION_REQUIRED_MESSAGE_TITLE, component.get_name() + " - " + Constants.EXAMPLES_INTERNET_CONNECTION_REQUIRED_MESSAGE, MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void timer1_Tick(object sender, EventArgs e) + { + if (downloadTaskCompleted) + { + timer1.Stop(); + RepositoryUpdateCompleted(); + } + } + + private string GetDestinationPath(string destinationRoot, string selectedProject) + { + if (!Directory.Exists(destinationRoot)) + Directory.CreateDirectory(destinationRoot); + + string path = destinationRoot + "\\" + Path.GetFileName(selectedProject); + + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + } + else + { + int index = 1; + while (Directory.Exists(path + index)) + { + index++; + } + path = path + index; + if (!Directory.Exists(path)) + Directory.CreateDirectory(path); + } + + return path; + } + + bool CopyAndCreateProject() + { + progressBar1.Visible = true; + progressBar1.Value = 10; + toolStripStatusMessage.Visible = true; + toolStripStatusMessage.Text = "Fetching Examples: - Please wait while we configure you preferences"; + AsposeComponent component; + AsposeComponents.list.TryGetValue(Constants.ASPOSE_COMPONENT, out component); + //TreeNodeData nodeData = (TreeNodeData)selectedNode.Tag; + string sampleSourcePath = "Examples"; + string repoPath = GitHelper.getLocalRepositoryPath(component); + string destinationPath = GetDestinationPath(textBoxLocation.Text + "\\" + Constants.ASPOSE_COMPONENT, sampleSourcePath); + progressBar1.Value = 30; + + bool isSuccessfull = false; + try + { + CopyFolderContents(Path.Combine(repoPath, sampleSourcePath), destinationPath); + progressBar1.Value = 40; + + string dllsRootPath = AsposeComponentsManager.getLibaryDownloadPath(); + string[] dllsPaths = Directory.GetFiles(Path.Combine(dllsRootPath, component.Name + "/lib/net40/"), "*.dll"); + for (int i = 0; i < dllsPaths.Length; i++) + { + if (!Directory.Exists(Path.Combine(destinationPath, "Bin"))) + Directory.CreateDirectory(Path.Combine(destinationPath, "Bin")); + File.Copy(dllsPaths[i], Path.Combine(destinationPath, "Bin", Path.GetFileName(dllsPaths[i])), true); + } + + progressBar1.Value = 50; + + string[] projectFiles = Directory.GetFiles(Path.Combine(destinationPath, (rdbCSharp.Checked ? "CSharp" : "VisualBasic")), (rdbCSharp.Checked ? "*.csproj" : "*.vbproj")); + for (int i = 0; i < projectFiles.Length; i++) + { + UpdatePrjReferenceHintPath(projectFiles[i], component); + } + progressBar1.Value = 70; + + int vsVersion = GetVSVersion(); + + if (vsVersion >= 2010) vsVersion = 2010; // Since our examples mostly have 2010 solution files + + string[] solutionFiles = Directory.GetFiles(Path.Combine(destinationPath, (rdbCSharp.Checked ? "CSharp" : "VisualBasic")), (rdbCSharp.Checked ? "*.sln" : "*.sln")); + progressBar1.Value = 80; + + try + { + if (solutionFiles.Length > 0) + { + foreach (string sFile in solutionFiles) + { + if (sFile.Contains(vsVersion.ToString())) + { + _application.Solution.Open(sFile); + isSuccessfull = true; + break; + } + } + + if (!isSuccessfull) + { + System.Diagnostics.Process.Start(solutionFiles[solutionFiles.Count() - 1]); + isSuccessfull = true; + } + } + else if (projectFiles.Length > 0) + { + System.Diagnostics.Process.Start(projectFiles[0]); + isSuccessfull = true; + } + progressBar1.Value = 90; + + } + catch (Exception) + { + if (solutionFiles.Length > 0) + { + System.Diagnostics.Process.Start(solutionFiles[0]); + isSuccessfull = true; + } + else if (projectFiles.Length > 0) + { + System.Diagnostics.Process.Start(projectFiles[0]); + isSuccessfull = true; + } + progressBar1.Value = 90; + + } + } + catch (Exception) + { } + + if (!isSuccessfull) + { + MessageBox.Show("Oops! We are unable to open the example project. Please open it manually from " + destinationPath); + return false; + } + progressBar1.Value = 100; + + return true; + } + + private int GetVSVersion() + { + switch (_application.Version) + { + case "11.0": + return 2012; + case "10.0": + return 2010; + case "9.0": + return 2008; + case "8.0": + return 2005; + } + return 2003; + } + + private void UpdatePrjReferenceHintPath(string projectFilePath, AsposeComponent component) + { + if (!File.Exists(projectFilePath)) + return; + + XmlDocument xdDoc = new XmlDocument(); + xdDoc.Load(projectFilePath); + + XmlNamespaceManager xnManager = + new XmlNamespaceManager(xdDoc.NameTable); + xnManager.AddNamespace("tu", + "http://schemas.microsoft.com/developer/msbuild/2003"); + + XmlNode xnRoot = xdDoc.DocumentElement; + XmlNodeList xnlPages = xnRoot.SelectNodes("//tu:ItemGroup", xnManager); + foreach (XmlNode node in xnlPages) + { + XmlNodeList nodelist = node.SelectNodes("//tu:HintPath", xnManager); + foreach (XmlNode nd in nodelist) + { + string innter = nd.InnerText; + nd.InnerText = "..\\Bin\\" + component.Name + ".dll"; + } + } + xdDoc.Save(projectFilePath); + } + + private bool CopyFolderContents(string SourcePath, string DestinationPath) + { + SourcePath = SourcePath.EndsWith(@"\") ? SourcePath : SourcePath + @"\"; + DestinationPath = DestinationPath.EndsWith(@"\") ? DestinationPath : DestinationPath + @"\"; + + try + { + if (Directory.Exists(SourcePath)) + { + if (Directory.Exists(DestinationPath) == false) + { + Directory.CreateDirectory(DestinationPath); + } + + foreach (string files in Directory.GetFiles(SourcePath)) + { + FileInfo fileInfo = new FileInfo(files); + fileInfo.CopyTo(string.Format(@"{0}\{1}", DestinationPath, fileInfo.Name), true); + } + + foreach (string drs in Directory.GetDirectories(SourcePath)) + { + DirectoryInfo directoryInfo = new DirectoryInfo(drs); + if (CopyFolderContents(drs, DestinationPath + directoryInfo.Name) == false) + { + return false; + } + } + } + return true; + } + catch (Exception ex) + { + return false; + } + } + + private void buttonGetComponents_Click(object sender, EventArgs e) + { + + } + + private void examplesTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) + { + /*selectedNode = examplesTree.SelectedNode; + validateForm();*/ + } + + private void AbortButton_Click(object sender, EventArgs e) + { + Close(); + } + + private void ContinueButton_Click(object sender, EventArgs e) + { + progressDisplayTask(); + if (CopyAndCreateProject()) + { + progressBar1.Visible = true; + progressBar1.Value = 0; + toolStripStatusMessage.Visible = true; + toolStripStatusMessage.Text = ""; + Close(); + } + } + + private void GetComponentsButton_Click(object sender, EventArgs e) + { + GlobalData.isAutoOpened = false; + ComponentWizardPage wizardpage = new ComponentWizardPage(); + wizardpage.ShowDialog(); + } + + private void BrowseButton_Click(object sender, EventArgs e) + { + if (DialogResult.OK == folderBrowserDialog1.ShowDialog()) + { + textBoxLocation.Text = folderBrowserDialog1.SelectedPath; + validateForm(); + } + } + + } +} diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/SampleWizardPage.resx b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/SampleWizardPage.resx new file mode 100644 index 000000000..0f689fa76 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/GUI/SampleWizardPage.resx @@ -0,0 +1,966 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 127, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAW + CQAAAk1TRnQBSQFMAgEBAgEAAXABAQFwAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/xIAAQcMEgEHIQANdAFS + AXQBGgEAARIM/wESIQABdAVZBzgBUwFZAXQBAAHwArQCtQHxAfQBswHzAbQB8QHzAf8B6iEAAXQBWQs4 + AVMBWQF0AfQBrQG1A/QBuwH0AbQBCQG1AQkB8wH/AeohAAF0DDgBUwFZAXQBtAGLAfME9AEJBK0BtAH/ + AW0hAAF0DDgBUwFZAXQBrQGLAf8D9ALzAQkBtAHwAbQB8wH/AW0hAAF0DDgBUwE4AXQBtAGtAf8B9APz + AQkFrQH/AeshAAF0DDgBUwE4AXQBuwGLAfID8wHwAvMBtAHxAbQB8AH/AeshAAFSDDgBUwE4AXQB/wGt + AbQD8wG0AvMBtAEJAbUBCQH/AewhAAF0AV4LOAFTAVkBdAEAAfMCtAK1AbQF8wHyAf8B7CEAAXQBXgs4 + AVIBWQF0AQAB7AH/BvMF/wHsIQABdAxSATgBWQF0AQAB7QH/BfMB8gH/AvIB8wHtAbwhAAF0BZoCoAKa + ATgCXgH7AVkBdAEAAe0B/wPzA/IB/wHyAfMB7QHwIgABGgF0BFIDdAFZAZoBwwGgAZoCGgEAAZIB/wHz + BfIB/wHzAZIB8CQABP8EAAZ0AgABkgj/AZIB8DUAAfAI9wHwJQABQgFNAT4HAAE+AwABKAMAAUADAAEQ + AwABAQEAAQEFAAGAFwAD/wEAAv8BgAEBBgABgAEBBgABgAEBBwABAQcAAQEHAAEBBwABAQcAAQEHAAEB + BgABgAEBBgABgAEBBgABgAEBBgABgAEDBgABgAEHBAABhwGBAYABDwQAAv8BgAEfBAAL + + + + 237, 17 + + + 324, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAAkgAAABQCAIAAABtZh0nAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACw4AAAsOAUC+4UEAAAAadEVYdFNvZnR3YXJlAFBhaW50 + Lk5FVCB2My41LjEwMPRyoQAAoJRJREFUeF7t/XmYfVdZ5/0/f3S3bTsrImiYRxkCSEJCAgmBQAJkIgHC + FIYECLMQQECUeRQQEFBEBUVQEBEBQSYRARHFWfBB2nZotJ3abieCoM/v+b1OvcPNZp+qSn0j+vR1+V1X + rpO11157n1P1rdrv+tzrvj/r//p/D7d/ne/A/2/R/p9F++fPtX/aap/9XPvMon3qU5/6y7/8y7/7u7+7 + +OKLP73TjOhrOrV/+Id/+PvPNTOn/e3f/q3+3+w0fa//63/9r/+90/76r/9aX/ufO83hJz/5yT/Yaf9t + p/3+Tvuv//W//o//8T/+4i/+4s///M91vGp/8id/8md/9mcOdf50p7l22h//8R//953mVvqazh/+4R/+ + 0R/9UXfuXT7xiU/0Lh//+Me9i6Zj8Pd22u/+7u96NfLRj370/95pv/3bv23wYx/72O/8zu/o9/rrv/7r + Xn/rt37r137t17xqH/nIRwz+xm/8xq/+6q/+yq/8inHtl37plxw69aEPfcjgL//yL+sY/PBO+8AHPqCv + ve997/vFnabzwQ9+0Pgv/MIv/PzP/7xX7V3vepdx7R3veIfB9773ve985zvf/e53v+c973HqbW97m77O + W97yFuPmvPnNb/7ZnfbWt77VoAk/8zM/88Y3vrHD17/+9T/90z/9pje9Sceg9hM/8RM/9mM/9oY3vMHI + D//wD7/uda/78R//8Ve96lUGX/Oa1+gYfPWrX+315S9/uVcjL33pS1/5ylf+4A/+4Ete8pLv//7vf8Ur + XvGyl71M//t22gte8AKH5jz3uc81+D3f8z3Pe97zvvu7v/uFL3yhU89+9rO9GnnqU5/6XTvtKU95ikHN + yJOf/ORnPvOZOo973OOe9rSn6Tz2sY81+KQnPekxj3nMt3/7t3/Hd3yHUxdddJH+E57whIc//OEOv+3b + vu3BD37wo3fawx760Ec84hGPetSjHvnIRz7wgQ/81m/9Vof3ve99H/YwZx56v/vdz0ztggsu0Dfh/ve/ + /7nnnuvVyF3vetfzzz/fZJ173OMe97nPfe5+97vf6U53ute97nXPe97ztNNOM2jk9re//V3uchdzztxp + d77znc8555xTTz3V69lnn33rW9/aJWedddZtb3vbM3baHe94x5NPPtnlOre4xS3usNN03MdVJ5xwwkkn + nXS7293uNre5zc1udjNXmXzTm97UofYt3/ItTTjuuOOOOeaYE3fajW98Y4O3vOUtr3/967vP8ccff5Ob + 3OTYY481x+uRRx5585vfXOfa1762S9zzute9rtejjz76BjvtqKOOcoerXe1qbq5d9apXdblmxA1vdKMb + ffM3f/PVr35199GudKUr3fCGN3TVFa94xetd73o6pl3rWtfS14444giTta//+q/3Lto3fuM3Xmenua2z + PsM1r3nNr/mar3GJ9rVf+7UONfPd+RrXuIZXgzre8Su/8iu9al/+5V9+latcxRt9wzd8wxWucAW30r76 + q7/a61WuetX/8l/+i7Oa2155p3lTN9Fxt//8n//zpnPlK3/Zl32ZQ82FvZ1bOetTaf/pP/2nOl/yJV/i + XXTcwcwGv/RLv/Sbdtp//I//sY7PZpqO78NXfMVXNPgf/sN/qDPz/69/naf64bv+v4cEtoiGdIhW/x// + 8R+jGxr91V/9lUNIi20hbQW2JdvimaZTi221FdsgLbZhT1CBEy2cYAl6gRm2gZmm7xXMgE3DM31zttkG + afFMB8P0tWFb1AyfsQ3VvKO+z9C790mwzcfQMEwf23SGbb/5m78Z0qBLX9MBM3hDMk3fK4B1CGn62AZd + sc2IvlcNwPQ16Hr/+9+PbTpgZtzrz/3cz3k1Al362AZgYIZtwUzfK4B51eIZtmGYvvFghnkakv3UT/2U + QwDDs5/8yZ/UwTPjXn/0R38U0oxAlz626eDZj/zIj+j8wA/8ALD90A/90Pd+7/fqYxuAAR68YVhsM4Jh + HQLYi170ohe/+MXPec5z8AzekAzwjGtPf/rT9TXcwrNnPetZGIZnxiENw7zCHm5953d+pzkgB2ZPfOIT + Qa6+V+jyquEWnj36ootwC/CAzYg+sDnErYfstHvf+94XXnjhgx70IGAz+IAHPADVoEs/tuFZbAMzk+92 + t7vV14ExFNRBKRgzjlUG9b0ahDQNpfDMCMiZoG8Ew2IbSgEbqgGS8VN22GamvlNwBWwOoehWt7qVDiAZ + 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 + roZnQSvJVWlauSHtnZ35Vhytms1NikNqwWwv55HK19px1FrOPs4jqAZ1XjFsnEeEgLTikLlqSWbLeQS3 + ch6BrlIijYzzCHS1zCb8aILW0tqlOo9Muj+k5TziQYZSsc0TXxxSq2QtE+RSSPCvzdg0hWuoRr0JSN77 + vLv+yIsv984fuzy2/fp7rvnxD3/zH/zmkR/98FHv+pmzXvbis57w2FMfcuGJj33UiS//nlt/5AN3/Js/ + g7Tb/vUnT/7LPzzpTz9xwh/9zvGf+MjNT7rlEU9+9Fn/z2888rM/e/ZnfvyWn375jYDtISdeGRvItYyP + sQ3hNq5aO84jgBTb/ERdhqeDR/8NjzzS/d3HnxFzB08MI9gmOJlc07CkCjYjy/cCNg/9XLV2dR5x/5xH + IM0T32G0yxwSaTR93PIPsbyznzcyKOcRpHFJziOj23wHlvP9IiCHS1RnL8Wfn0bU8S5AkvOIwxIgIdaP + 1twEBXMhofn2ch4RTkyiJdfqTCYkUibReDbnCenQ2VbUZhebqW/zeQ6D7QtCi9sbje71k91i2D4/9yuw + gRnkzP3xZkKRxkEOJsGpnA6dyYrc1XnkkNbY0m1uO2DrXXIeWe3HNnKtZbYxQU6uJfhor4iyBNt2uv9U + Z2dtpSXUtk2QW2ZbmSAXilyaIJcSGdsqaMvUvwhkkcneaGWCTLcJwpQ/UipK6i1j4mKJuZwk3Yo9atgD + SLPMVoZkPiPFFcvU17KCFIcsDbL8kZbZjBSHbL1Nv42Pq87OIrLsklJItEz9hSJzPW6xLRPkjCL1oa5U + EXKNaKPPWmzDsEyQMUz40apb1dmVstFnY4Kc8wiAEWqxDcNKJEm3OczgXyiyVBF4S58Zbxu2TJAz+Me/ + S6qzbc/2iEd4pK5MkPEMxozrXLDjQrJxQ77vfQtFZvBfoa6m7/WBF9zuJ1/x1e/Atjdf6VfffY2Pvv+6 + n/jI9f/wt7/lz//byX/1x6f+z/9+O+IMzP76k7f5qz++1V/8wQl/+onj//vHjvvD3zjm47981Ntff6Qs + h7e/4rx//oXzPvuW0z7zoze/+Htv9DfPueF1rnwFdPEE32RF7jQBSetnVWeDHLnm3Ze/3b7nm+K8Pdqy + gtsvftbJmESJLm/i3xqHMorUyXkEiCgzgng5k1qtWHs7FOlpjkNOmYBPeJZco8/08QAOY1vLbOC3NB/x + LqR2y1TjquWGxRihd1k2Z7K/PDZQOeIItPDDPB/S0893ySXZKCOfz+Ads+bymz4z/VnZEp1pK8r6Esis + 6rgRC950QqA3LdRZsBG00m3eaJbZZtPRQdpsqH0YbJcFbPgES/sbca3AVvixzBE/E8A2C2yoU1TTiD7S + EGFj2bXKihzFllabBbaMsvYPRY5TySi2y2CCDG8BMj6VBpL/yF4myO2CpnXh/ibIpY1A2jIUWUpkSKuU + jSybUOSSbSu5tjRBLkNyaYLcil0Qag0vG63Zs6aas0TbeB+Xxxiiii5OVmTOI0sT5KrZSvQvVglmmY+U + OeIQ0nY1QRb5WZkgQ9eEIg9iglwKycoE2VramCC3zBbb9jFB9thdmSCTYisT5NbV9jFBptVgD9gyQc5M + S0AypI3zSKkZ7VmTCfIF5x3zk9//VW//0a/7+Td+4y+97aqW3D76/uuITP7hb93sk797wp/+3i3/9Pdu + 8ScfP+6Tv3vzP/qdo//g14/6vV++yUc/eKNf+7kbnHHqla9x9av8r3ff55/ecc5nf/LW//jKm178PUf+ + 8HnX9Ogkztov+/Ny7dRTIQ2QMkEWDZ5Hg99BD+vEECZVYVZ+B2xoK4D5YwK9QMKEVeqjGF3pkUsTZN+N + ZVmYh0MCaC8T5LyPVybImSPnfezyMUE2eRUA9HX50XJz8MA2kxHFF+hfZ+WY5Xchh+JtE2Q3gUDfq1JI + Cidim++MX6glpP10uUkmyNvJI5FsTJCt1RWczOk/ksU2r9Vi67RTdtNKe/EllEvi9bAJ8hcormq0x3Ck + zq6aLAhtn1reYQW2ys5mJaywpJv4gaaoxgQ50uxaxLa9zU2hyPz+y+bYDkUul9n+JSbIlcotDf6XJsiB + ba9Q5IBtH+eRNq/pdZbZMKz8kbSa8WAW4XIe2TUUmatWW9hkvlWnT5LrcdXZmSCXNgJshSJjG5iVrw9I + ZefHpMrUAKz1tgRcYUkzV84j5FqhSKemOttf7m6YCXLOIzqeNVVnlxKpjfNIjv7lRmbwj2o02TiPFIps + z5pctaBr6TyCbYRaoci2YctVyxLaynlkZRRZKRuJNs4jdJv8keSaPsVGxmSCPKHIjY3Wwx6Gc0YQq71s + hBlzHjFCopUk2TKbU9iwkXEXXIBn2CYUaUSz5LaRb+ce++oXf/WbX/lVwpLv+6lv+sW3XuVX3nF1hPvN + n7/2xz54/Y//0o1+71du8n//8o0+9qEb/Nb7v/kj777W+3/6yt/6wCt4nn7XI2/32Z+902ffePJnXn3M + p7/3Rv/7uTc8+lobr0WWWpCWOaQOt8MTb3UrtNOR+2Bkmf7g393Dt4wS+Y061uSAQfTSSJux+XNtHghW + lWgRjDR5pfzMEQjxj+v77y8M/2Tbhdv+RbwdHQY2uzqPkGu+BKtisc3zPYP/1tuMAIyz2UV67pvs52r1 + vPKQ8bdaBmzCA0uX52b6ZcfglJPNYqT7u61fjeV9POX8mmTG5kfF32ErjxV/bXv3MhvRaxWKzLW1nOQ8 + E5ZFpd5r4+n6S7/kJ6RkmW6yiUle/vLlkvjqcvr3FnRbCDTnsGI7ZMW2j1xbRgjbsLTmEhDKYRLDlmXU + 9VNvuWT5UTig84h7+hVamiA7/KI7j0Aa3uAKdBWKPKDzCHGWq9ZsK3oZnEdmmW1/55FZZgOw9h0tv7/I + 5KE6j4Bc+SM6iS0w0/EgKCsyL+bYVuYIdO3lPJLsW7Ft23mEejug84inYc4jMLbtPJJRZAb//3LnEbj6 + V3UeyQ8Q5/L1H+cRYCt/JLah3el3vNWTHnU5bPMf9fbu11/hvT/5jSD3/p++kv8kTzo0+LOv2cx5+Plf + Kwh5q+Nv+lc/dspnX3/CP/7w0ZvVtRce+bTTruZRSJlBUc4jOjAmFLl0HgHs5ePbZ0AIGBO0bD+anEeI + ttgGMMTx8hLPYmmN2Ea3+WfaZ81idcrfXh7N+fpTP/i0WmOLedhGRWFGKSTY0zKbJzu2BblK2dyqs/5s + OvjH8Dvuw7sbmLWdje+bW61q0ve/ocedP1zcpKSSy+Y84i2QPommjUQ77Dxy0H/NAyq2veSat9kLbKBF + Ws39Jw6ZXEtUBSRgw7nS/fc3QS7LceUVCUJLV61u3v2nLV21tk2Ql+n+/mTzd2jFZBo+HaoJcuVr2DYm + yNlordL99zJBLiuyvbOTa0m3hNoqFLk0Qa46u7rsnEdmmW1/E+TSRpaGy2VjGtcpbSSjyDFBhjf96rJL + 929prbz/+q2rjfIru8SDZlcT5PZjm2W2TP0ts7WutjJBroKtvP9MkD1GxwS56myNVssE2R/X+uRC+f17 + mSC3rjbOI4UiW1qzzGYtrWo2gcdMkHWqztbaL1tcUoQtE+Rq1zJBbu/sjQnyfe5Doi1NkHMeyQRZColo + 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 + + + + 73 + + + + AAABAAIAEBAAAAAAIABoBAAAJgAAACAgAAAAACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAEAE + AAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af///wEqa/IDKmvyRypr8okqa/KLKmzySSpv + 8w////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQ2grgUmcekPKm3zYyp2 + 89srefTJK3v0Rf///wH///8B////Af///wH///8B////Af///wEPnrEJD56xUQ+esZsPnrG5D56xrQ6d + r2smjOZFLo723y2I9e0sgvVH////Af///wH///8B////Af///wEPnrEdEJ+ysxWmuvkbr8H/H7XH/x22 + yP8XsMP7FKq8rzqo8202n/j7LYv12SyC9Rn///8B////Af///wEPnrEZE6S3yR+1xv8rx9ftOtXlzTrb + 6ck12ujpMdPi/yvF1/0vvNOBUrj72zGX9v0shfV1////Af///wEPnrEDFaW4iSC3yfUrytqVQbaTa0Wu + eptCtoebQcmtbUDi7qk+3On9Os7dsWnI/Ls5nvj/LIT0sSV4+gW7hTQLFKS3GRyww9knw9RxRqFbdUqq + cvVHtIT/Rb6U70PHocND0rtlSeHy2Urf66NfvvvBQ6H4/yt+9MMjdfwJvIY0VxipvEcgtsilN5hKNUeg + We1NsHz/SbuN1ZvBnG2lx6UbQ9PLDUfZ9qtO0fVrTqz56Uea9/8sd/Oxq4dVE76HNZUZrL5fILXHOTmS + N3FIoFn/UbSB+Xa4i3Pgt4/NvLGtIUKZ9hVEtvddSJ33vUma9/9GjPb7K27zY8WMNXW8hjWJGKm8QRuy + yg05kzmBQpxO/1W0g+2vrXx72q6A+7OopnFAi/i5RI7270eP9v9IjPb5Rob1mbmMTlfAiTbnuYQ0Qxan + uQf///8BOZQ5ZTqXQf1Pr3btraZzf9SjcP/Yq3vhsaOecVeO6H9Oi/GPdpHGccaRSIvDizntuoQ0vbWB + NA3///8B////ATqTOis5lTzvPKFY+XOla3PKmmfp0KBr/9SkcPnWpnLl1KFm3cmSRe/BiTf9uYM047WB + NDP///8B////Af///wH///8BOpQ6jzmaR/84pFyzsI1Lab2LSe3AjUr/v4pC/7uGNv+4hDT5toE0w7WB + NDH///8B////Af///wH///8B////ATqUOg86lT27OZxN+TiiWX+khTg7tYEzhbWBNJu1gTSNtYE0UbWB + NA3///8B////Af///wH///8B////Af///wH///8BOpQ6FTqWPos5m0njOJ5PpTmeUDE2nU0F////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wE5lDkDOpY+ITmYQls5mUZ9OplEWTqY + QQ////8B////Af///wH///8B////AQAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8oAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEqa/IJKmvyOSpq + 8msqa/J1KmvyYypr8kkqavIrKmvyESpr8gcqbPMD////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////ASpr + 8gUpavEjKmvyUypr8osqa/LDKmvy4Slr8tMqa/KjKm3yZypv8y0rcfMNK3PzA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BKmvyBSpr8ikqa/J9Km3zzSpw8/MqcvPzKnPzwyt183ErdvMpKnb0Bf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEOoa0DDaGtCQ6frwsPnbEH////AStv9Acrc/Q9K3n0myt99OsrfvT/K3z07St7 + 9Kkre/Q7////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQ+esQUPnrEhDp2wRw6esGcOnrB7Dp6wgw+dsXsPnbFjDp+uOxaVwBUtgPYlLYf2iy2J + 9essiPX/LIT1+yyA9L8sf/U5////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEPnrEdD52xcQ+esa8PnrHVD56x5w+ese8PnrHzD56x7w+eseUOna/LDp2ukQ2f + rDktkPMnMJX2my+V9vMtkPX/LYn1/SyD9bcsgfUr////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEPnrEDD56xRw+esbMPn7LrEaC0+xOktv8Vp7n/F6i6/xepvP8Xqbz/FKm7/xGm + uf8Po7bzDqCyvw2er0c4ofo7OaP5yTSd9/0ulPb/LYr19SyD9ZMsgfQN////Af///wH///8B////Af// + /wH///8B////Af///wH///8BD56xCw6esGcPnrHbEqK1+xiqvf8dsMP/H7XI/yO7zP8nwNH/KcTV/ybE + 1v8iwtX/H77Q/xu5zP8ZssX7F66/vRqrwDtNsf15Q6z57Tag+P8tk/X/LYn13yyC9VP///8B////Af// + /wH///8B////Af///wH///8B////AQ+esQ0PnrFrEaCz4xaouv8dscT/JLzO/ynD1f8xy9z7N9Pi9zjX + 5fc11+X5M9bl/TDT4/8tz9//Ksrb/yfD1f8lu877JbbKl0i86UdUuvvNQ6v6/TKb9/8tjfX5LIT1pSyB + 9Rn///8B////Af///wH///8B////Af///wEOnrEHEJ+yURKitdUZq77/IbfJ/yfC0vsszNvnN9Piz0Td + 7K1E4O+VQeLwkT7i8aM74e3DOuDs4zfc6fs01+X/MdDf/y/I2f8swNHXM77UT2rK/aVRt/r5N6H4/y2R + 9f8sh/XTLID0Q////wH///8B////Af///wH///8B////ARCfsikToratGau+/SG5y/8oxdbrLM3etzDT + 32VDwqxLRrB/U0Oxf19CtYZfQbmOUUDJskNA4+thP+TwvT3h7fc72+j/ONTi/zXK2vE2xthndNH8iWHC + /PU+p/n/LpP2/yyH9ecrgPVpKXr3A////wH///8B////Af///wEPnrELEqK1ZRipvOsht8n/J8TV2yvN + 3n0yzdIxSqRnVUeobqNFq3TVRK9750O0g+dCuYvXQb6UrUHDmmVC3+FFQ+Xxr0Tj8PtC3ur/PtXi+T7P + 4HNxz/x9ZcT880it+v8vk/b/LIb08St+9YMlePsL////AbuHNQ27hTQb////ARKhtB8Wp7mrHrLF/SbA + 0dcpytxnNbORIUqiYG1KpmvdSKtz/UevfP9GtYX/RbqN/0S/lf9Dw5z/Qseh5ULNqoNE3uVTR+Lz00ri + 8P9H3enzRtjmaWvI/IFgv/zzTq/6/zWV9v8sg/T1Knz1jyN3/RH///8BvYc1MbuFNFUSobQDFaW4QRqs + v90iuszfJ8TWbS2/vBc+lTxpSqNg4UupcP9Krnn/SbSC/0i5jP9Fv5T1RMObxUTHoZlBy6iLQ86rf0PW + xz9G3fKTS+Hz/03j791O3uxPYb/8l1e3+/dNq/n/PJb2/yt/9PcqePSRJHT8Ef///wG+hzVhu4U0dROj + twkXqLtvHrHE7yS8z5UoxdgZOZEzOUCXRc1MpWb9Tax1/0yxfv9KuIj/SL2R50rBl4t0xZ9NbcikI0LN + qxNE0bAVQ9XPFUXY9HNJ3fX3T+Lyp1TN9UVUtfvBT676/Uyl+P9BlPb/LXv08ylz84UjcPsNzo0oCb+I + NZ+7hTR5Faa5DxmqvZUfs8bPJb3PQTWhZQU5kjh9QZpJ70+nav9Pr3n/TrSC/0u6jO9IvpODwb2YR+fB + oJXrw6M18MmnA////wFC0vcLRNP3cUfY9tVM3/RVTKz5a0uq+udMpvj/TJ73/0KP9v8ud/PnKW/zZyVu + +APIjTI1v4g11buFNGUYqbwTGqy/rSC1x40kv9IHOpI3HTmSN7FAmUj7UKhs/1GwfP9Ptob9T7uNtZu4 + jT/ht5Cn4ryXz+K+mi////8B////AUHP+Q1C0/hZRND3Y0ij+FNJovjTSqD4/0qc9/9Llvb/Qoj2/Stw + 9cccZ/830pAqEcOMN5G9hzXpuoU0QxmqvRUarL+pH7THT////wE6kjQvOZI3xT+YRP9PqGv/U7F+/1G3 + h+1RvI571q6BYd2yiOHhuZDZ3rmVOT2K+B1CjvUjQpL2JUOa9z1Fm/d5R5r30Uea9/1Il/f/SZT2/0uP + 9f9AgvXtKWz0f1Z1uhPMjzJXw4o12byGNdG6hDQlGKm8ExmqvY8cs8oj////ATqUOjk5kzjLO5ZA/02m + Zf9Vsn//U7eH32S5il3UqnmP261/+960ifHatZBlSY3wYT6L+LNDjva3RI/2z0WR9vFGkvb/R5L2/0iP + 9v9Jjfb/SYv38zx99qc4buApzJA5P8aNN7u/iDX7uoQ0nbiDNA8Xp7oNF6i7VRmvyA3///8BOpQ6NTqU + Ock5lTz/RaBY/1ayfv9VuIfXf7OCU9CmcqfXqHf/2q6B/96yhbWforRFPIj7lUGK+ONEi/b9RYz2/0eM + 9v9Ii/b/SYv2/UeK+OdJiveVT4HgNc+TO0PIjzqxwoo39buFNO+3gzRbtYEzBxanuQMWp7kTF63FA/// + /wE6lDonOZQ5vTmUO/07m0r/Ua51/1i4h9eDsX9XzKFsq9Sjb//WqHf/2q1+9dmvg5umoas/Qon4YUaK + 9p1FiffBRYn4zUeJ98NJivajSIn3ZZCQmjfQkz1nyZA9w8SMOPe9hzX/uIM0tbaBNCX///8B////Af// + /wH///8B////ATmTORE5kzmfOpQ7+TmYQ/9DpmH/U7N+32+0hGHJnWmb0Z5q/dOibv/Vp3X/2Kt689us + fLXWrYFvnZ+xTWaR209ZjudVZ5HcU5ebsFHMmlxrzJJCrcmPPOPEjDn9voc1/7mDNOG2gTRftYE0C/// + /wH///8B////Af///wH///8BOZQ5AzqUOnE6lDrrOZdA/zufUv9CqWjpUbN7d8aaZnHMmmfrzp1o/9Gh + bP/UpHD/1ad0+9iodunXqHfT2ql2w9uqdbvYqHLF0Z9g1cuSRefHjTv5wos3/72HNf+4gzTztoE0i7WB + NBn///8B////Af///wH///8B////Af///wH///8BOZQ5MzmUOdE6lT3/OpxM/zqjWvk7qGWjq5plQceX + ZbvImmf/y5xo/8+fav/QoGv/0qJt/9Ojb//Uo2790qBm+8yXUv3Hjz//w4s2/8CINv+7hDT/t4I097WB + NKW1gTQptYE0A////wH///8B////Af///wH///8B////Af///wE6lDoFOpQ6ezqUOvE6mET/OZ9S/zil + Xtk4qGNRvY1PUb+NUNHBklj9xZVd/8iWXf/Jl13/yJVX/8WQSv/Ciz7/v4g1/72HNP+6hTT/t4I0/bWB + M+e1gTSTtIEzIf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wE5lDkfOpQ6szqW + Pf06m0n/OaFW+TemXqc9pWAptoAyVbWANMe2gjbxt4M3/7iDNv+4gjT/t4Iz/7eCM/+3gjT/toE0+7WB + NOu1gTTFtIE0YbWBNA////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wE6lDo5OpQ61TmXQf06nU3/OaJY6zikXYNNn1cduX8yObSAM4m1gTPDtIEz17WBNN+1gTTftYE02bWB + NM21gTSvtYE0c7WANC21gTQF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wE6lDpTOZU8xzqXQvk6nE3/OKFW4TejWns3o1shqoQ3DbaBNC21gTRJtYE0WbWB + NFm1gTRRtYE0O7WBNB20gTMD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////ATmUOQc6lDpFOpU8qzqXQus6m0r/OZ9S5zigVZk0o1g9O6BUBf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////ATqUOgc5lDopOpU8azqXQLk6mUXtOZxK8zmd + Ts06nlB/OZ1POzedTREwnk4D////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wE6lDoLOpU8JzqW + Plc6l0GNOplEuzmaR885mke5OZlGjTqZRVc6mEIdNphCA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BOpQ6BTqVPg06l0AXOphCLTqYQj86mEJHOpdCPTqXQBk5l0AD////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + + + \ No newline at end of file diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Properties/Resources.Designer.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Properties/Resources.Designer.cs new file mode 100644 index 000000000..f49673bad --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Properties/Resources.Designer.cs @@ -0,0 +1,123 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18408 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AsposeVisualStudioPluginWords.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AsposeVisualStudioPluginWords.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap aspose { + get { + object obj = ResourceManager.GetObject("aspose", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap aspose_words { + get { + object obj = ResourceManager.GetObject("aspose_words", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon aspose1 { + get { + object obj = ResourceManager.GetObject("aspose1", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bmplogo { + get { + object obj = ResourceManager.GetObject("bmplogo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap long_banner { + get { + object obj = ResourceManager.GetObject("long_banner", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pnglogosmall { + get { + object obj = ResourceManager.GetObject("pnglogosmall", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Properties/Resources.resx b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Properties/Resources.resx new file mode 100644 index 000000000..2796cecef --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Properties/Resources.resx @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\aspose.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\aspose.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\long_banner.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bmplogo.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pnglogosmall.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\aspose.words.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Properties/Settings.Designer.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Properties/Settings.Designer.cs new file mode 100644 index 000000000..d3bdd0b69 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18408 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AsposeVisualStudioPluginWords.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Properties/Settings.settings b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Properties/Settings.settings new file mode 100644 index 000000000..2bd17f050 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Properties/Settings.settings @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/aspose.ico b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/aspose.ico new file mode 100644 index 000000000..7d621dd4a Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/aspose.ico differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/aspose.png b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/aspose.png new file mode 100644 index 000000000..b0532d999 Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/aspose.png differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/aspose.words.png b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/aspose.words.png new file mode 100644 index 000000000..40635a632 Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/aspose.words.png differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/bmplogo.bmp b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/bmplogo.bmp new file mode 100644 index 000000000..9e4fa076e Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/bmplogo.bmp differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/long_banner.PNG b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/long_banner.PNG new file mode 100644 index 000000000..e8fc26b5a Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/long_banner.PNG differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/pnglogosmall.png b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/pnglogosmall.png new file mode 100644 index 000000000..600907240 Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/Resources/pnglogosmall.png differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/XML/DynamicObjectSerializer.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/XML/DynamicObjectSerializer.cs new file mode 100644 index 000000000..02189c586 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/XML/DynamicObjectSerializer.cs @@ -0,0 +1,137 @@ +// Copyright (c) Aspose 2002-2014. All Rights Reserved. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; + +namespace AsposeVisualStudioPluginWords.XML + { + /// + /// Serialization/Deserialization of objects to/from XML + /// + /// + public static class DynamicObjectSerializer where T : class + { + #region Public + + /// + /// Reads xml and loads object in document format. + /// + /// Path of xml file + /// + public static T Load (string filePath) + { + T serializableObject = XMLDocumentLoader (null, filePath); + return serializableObject; + } + + /// + /// Loads an object from an XML file , supplying extra data types. + /// + /// File path to load. + /// Extra data types . + /// Object loaded from an XML file. + public static T Load (string filePath, System.Type[] extraTypes) + { + T serializableObject = XMLDocumentLoader (extraTypes, filePath); + return serializableObject; + } + + /// + /// Saves an object to an XML file . + /// + /// Serializable object to be saved to file. + /// Path of the file to save the object to. + public static void Save (T serializableObject, string path) + { + SaveXMLDocument (serializableObject, null, path); + } + + /// + /// Saves an object to an XML file in . + /// + /// Serializable object to be saved to file. + /// Path of the file to save the object to. + /// Extra data types to enable serialization of custom types within the object. + public static void Save (T serializableObject, string path, System.Type[] extraTypes) + { + SaveXMLDocument (serializableObject, extraTypes, path); + } + + #endregion + + #region Private + + private static FileStream CreateFileStream (string path) + { + FileStream fileStream = null; + + fileStream = new FileStream (path, FileMode.OpenOrCreate); + return fileStream; + } + + private static T XMLDocumentLoader (System.Type[] extraTypes, string path) + { + T serializableObject = null; + + using (TextReader textReader = TextFileReader (path)) + { + XmlSerializer xmlSerializer = XmlSerializerCreation (extraTypes); + serializableObject = xmlSerializer.Deserialize (textReader) as T; + + } + + return serializableObject; + } + + private static TextReader TextFileReader (string path) + { + + TextReader textReader = null; + + textReader = new StreamReader (path); + + + return textReader; + } + + private static TextWriter TextFileWriter (string path) + { + TextWriter textWriter = null; + + + textWriter = new StreamWriter (path); + + return textWriter; + } + + private static XmlSerializer XmlSerializerCreation (System.Type[] extraTypes) + { + Type ObjectType = typeof (T); + + XmlSerializer xmlSerializer = null; + + if (extraTypes != null) + xmlSerializer = new XmlSerializer (ObjectType, extraTypes); + else + xmlSerializer = new XmlSerializer (ObjectType); + + return xmlSerializer; + } + + private static void SaveXMLDocument (T serializableObject, System.Type[] extraTypes, string path) + { + using (TextWriter textWriter = TextFileWriter (path)) + { + XmlSerializer xmlSerializer = XmlSerializerCreation (extraTypes); + xmlSerializer.Serialize (textWriter, serializableObject); + } + } + + #endregion + } + } diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/XML/Examples.cs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/XML/Examples.cs new file mode 100644 index 000000000..ac0e778bb --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/XML/Examples.cs @@ -0,0 +1,472 @@ +// Copyright (c) Aspose 2002-2014. All Rights Reserved. + +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18033 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System.Collections.Generic; +using System.Xml.Serialization; + +// +// This source code was auto-generated by xsd, Version=4.0.30319.1. +// + + +/// +[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] +[System.SerializableAttribute()] +[System.Diagnostics.DebuggerStepThroughAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] +public partial class ExamplesData +{ + + private Folder[][] foldersField; + + private Example[][] examplesField; + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("Folder", typeof(Folder), IsNullable = false)] + public Folder[][] Folders + { + get + { + return this.foldersField; + } + set + { + this.foldersField = value; + } + } + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("Example", typeof(Example), IsNullable = false)] + public Example[][] Examples + { + get + { + return this.examplesField; + } + set + { + this.examplesField = value; + } + } +} + +/// +[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] +[System.SerializableAttribute()] +[System.Diagnostics.DebuggerStepThroughAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] +public partial class Folder +{ + + private string titleField; + + private string descriptionField; + + private string folderNameField; + + private string orderField; + + private List examplesField; + + private List foldersField; + + /// + public string Title + { + get + { + return this.titleField; + } + set + { + this.titleField = value; + } + } + + /// + public string Description + { + get + { + return this.descriptionField; + } + set + { + this.descriptionField = value; + } + } + + /// + public string FolderName + { + get + { + return this.folderNameField; + } + set + { + this.folderNameField = value; + } + } + + /// + public string Order + { + get + { + return this.orderField; + } + set + { + this.orderField = value; + } + } + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("Example", typeof(Example), IsNullable = false)] + public List Examples + { + get + { + return this.examplesField; + } + set + { + this.examplesField = value; + } + } + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("Folder", typeof(Folder), IsNullable = false)] + public List Folders + { + get + { + return this.foldersField; + } + set + { + this.foldersField = value; + } + } +} + +/// +[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] +[System.SerializableAttribute()] +[System.Diagnostics.DebuggerStepThroughAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] +public partial class Example +{ + + private string titleField; + + private string descriptionField; + + private string folderNameField; + + private string orderField; + + private DocLink docLinkField; + + private InputFiles inputFilesField; + + private OutputFiles outputFilesField; + + private string typeField; + + /// + public string Title + { + get + { + return this.titleField; + } + set + { + this.titleField = value; + } + } + + /// + public string Description + { + get + { + return this.descriptionField; + } + set + { + this.descriptionField = value; + } + } + + /// + public string FolderName + { + get + { + return this.folderNameField; + } + set + { + this.folderNameField = value; + } + } + + /// + public string Order + { + get + { + return this.orderField; + } + set + { + this.orderField = value; + } + } + + /// + public DocLink DocLink + { + get + { + return this.docLinkField; + } + set + { + this.docLinkField = value; + } + } + + /// + public InputFiles InputFiles + { + get + { + return this.inputFilesField; + } + set + { + this.inputFilesField = value; + } + } + + /// + public OutputFiles OutputFiles + { + get + { + return this.outputFilesField; + } + set + { + this.outputFilesField = value; + } + } + + /// + public string Type + { + get + { + return this.typeField; + } + set + { + this.typeField = value; + } + } +} + +/// +[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] +[System.SerializableAttribute()] +[System.Diagnostics.DebuggerStepThroughAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] +public partial class DocLink +{ + + private string displayNameField; + + private string urlField; + + /// + public string DisplayName + { + get + { + return this.displayNameField; + } + set + { + this.displayNameField = value; + } + } + + /// + public string Url + { + get + { + return this.urlField; + } + set + { + this.urlField = value; + } + } +} + +/// +[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] +[System.SerializableAttribute()] +[System.Diagnostics.DebuggerStepThroughAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] +public partial class InputFiles +{ + + private string[] dataFileField; + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("Path", IsNullable = false)] + public string[] DataFile + { + get + { + return this.dataFileField; + } + set + { + this.dataFileField = value; + } + } +} + +/// +[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] +[System.SerializableAttribute()] +[System.Diagnostics.DebuggerStepThroughAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] +public partial class OutputFiles +{ + + private string[] dataFileField; + + /// + [System.Xml.Serialization.XmlArrayItemAttribute("Path", IsNullable = false)] + public string[] DataFile + { + get + { + return this.dataFileField; + } + set + { + this.dataFileField = value; + } + } +} + +/// +[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] +[System.SerializableAttribute()] +[System.Diagnostics.DebuggerStepThroughAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] +public partial class Folders +{ + + private Folder[] folderField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Folder")] + public Folder[] Folder + { + get + { + return this.folderField; + } + set + { + this.folderField = value; + } + } +} + +/// +[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] +[System.SerializableAttribute()] +[System.Diagnostics.DebuggerStepThroughAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] +public partial class Examples +{ + + private Example[] exampleField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Example")] + public Example[] Example + { + get + { + return this.exampleField; + } + set + { + this.exampleField = value; + } + } +} + +/// +[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] +[System.SerializableAttribute()] +[System.Diagnostics.DebuggerStepThroughAttribute()] +[System.ComponentModel.DesignerCategoryAttribute("code")] +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] +[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] +public partial class DataFile +{ + + private string[] pathField; + + /// + [System.Xml.Serialization.XmlElementAttribute("Path")] + public string[] Path + { + get + { + return this.pathField; + } + set + { + this.pathField = value; + } + } +} diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/app.config b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/app.config new file mode 100644 index 000000000..58746ea2f --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/aspose.ico b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/aspose.ico new file mode 100644 index 000000000..7d621dd4a Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/aspose.ico differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/asposedotnetsignkey.snk b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/asposedotnetsignkey.snk new file mode 100644 index 000000000..68489614b Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/AsposeVisualStudioPlugin/asposedotnetsignkey.snk differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/Installer/Installer.wixproj b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/Installer/Installer.wixproj new file mode 100644 index 000000000..2848d23d5 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/Installer/Installer.wixproj @@ -0,0 +1,51 @@ + + + + Debug + x86 + 3.5 + {ce553c9b-6e0b-4bea-b242-17f294fdde7f} + 2.0 + Installer Aspose.Words for .NET API Examples + Package + $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets + $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets + + + ..\..\out\ + obj\$(Configuration)\ + Debug + False + ICE64;ICE30 + + + bin\$(Configuration)\ + obj\$(Configuration)\ + + + + + + + $(WixExtDir)\WixUtilExtension.dll + WixUtilExtension + + + $(WixExtDir)\WixUIExtension.dll + WixUIExtension + + + $(WixExtDir)\WixNetFxExtension.dll + WixNetFxExtension + + + + + \ No newline at end of file diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/Installer/License.rtf b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/Installer/License.rtf new file mode 100644 index 000000000..efea9426e --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/Installer/License.rtf @@ -0,0 +1,49 @@ +{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}} +{\*\generator Riched20 6.2.9200}\viewkind4\uc1 +\pard\sa200\sl276\slmult1\b\f0\fs18\lang9 GNU General Public License version 2 (GPLv2)\par +\b0 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\par +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.\par +\b Preamble\par +\b0 The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.\par +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.\par +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.\par +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.\par +We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.\par +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.\par +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.\par +The precise terms and conditions for copying, distribution and modification follow.\par +GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\par +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".\par +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.\par +1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.\par +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.\par +2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:\par +a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.\par +b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.\par +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)\par +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.\par +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.\par +In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.\par +3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:\par +a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,\par +b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,\par +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)\par +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.\par +If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.\par +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.\par +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.\par +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.\par +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.\par +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.\par +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.\par +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.\par +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.\par +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\par +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.\par +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.\par +\b NO WARRANTY\par +\b0 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\par +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\par +\par +} + \ No newline at end of file diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/Installer/Product.wxs b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/Installer/Product.wxs new file mode 100644 index 000000000..8d5aff2cd --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/Installer/Product.wxs @@ -0,0 +1,541 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Installed OR VS2010INSTALLATIONFOLDER OR VS2012INSTALLATIONFOLDER OR VS2013INSTALLATIONFOLDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NOT Installed AND NOT VS2010INSTALLATIONFOLDER + + + + + + + + + + + + NOT Installed AND NOT VS2012INSTALLATIONFOLDER + + + + + + + + + + + + NOT Installed AND NOT VS2013INSTALLATIONFOLDER + + + + + + + + + + + + + 0 Then + cmd.Delete() + End If + Next + dte.Quit() + ]]> + + + + + + 0 Then + cmd.Delete() + End If + Next + dte.Quit() + ]]> + + + + + + 0 Then + cmd.Delete() + End If + Next + dte.Quit() + ]]> + + + + + + + + Installed AND UPGRADINGPRODUCTCODE AND VS2010INSTALLATIONFOLDER + AND !VS2010InstallationFeatureId=3 + + + + Installed AND UPGRADINGPRODUCTCODE AND VS2012INSTALLATIONFOLDER + AND !VS2012InstallationFeatureId=3 + + + + Installed AND UPGRADINGPRODUCTCODE AND VS2013INSTALLATIONFOLDER + AND !VS2013InstallationFeatureId=3 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/README.md b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/README.md new file mode 100644 index 000000000..177c4fbc6 --- /dev/null +++ b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/README.md @@ -0,0 +1,30 @@ +

Explore Aspose.Words for .NET API Examples using Visual Studio Plugin

+

Aspose.Words for .NET ExamplesExplore Aspose.Words for .NET Examples Visual Studio plugin is a great tool for quickly downloading and exploring Aspose for .NET API examples. We are pleased to announce a new release which supports to exploring examples of Aspose.Words for .NET. This plugin saves a lot of time and effort by providing a very simple option for seamlessly selecting, downloading and opening the latest example projects without having to leave the Visual Studio environment.

+
+

free downloadvideo demoopen source

+

This version provides the following features:

+
    +
  • Supports Visual Studio 2010 and Visual Studio 2012 and Visual Studio 2013.
  • +
  • Easy to launch from File > Aspose menu in Visual Studio
  • +
  • Saves time and reduces the learning curve.
  • +
  • Enables you to select and open the latest Aspose.Words for .NET API examples hosted on Github.com.
  • +
  • Allow you to open C# or VB.NET examples project
  • +
  • A selected project is automatically opened in Visual Studio with all required references set to give you a ready to run and explore environment.
  • +
  • Automatically downloads the latest API libraries from NuGet and examples from GitHub.
  • +
+
Explore Aspose.Words for .NET Examples using Visual Studio Plugin
+

Aspose.Words for .NET

+

Aspose.Words for .NET is an advanced component and class library for .NET that enables you to perform a wide range of document processing tasks directly within your .NET applications.

+

Aspose.Words for .NET supports DOC, OOXML, RTF, HTML, OpenDocument, PDF, XPS, EPUB and other formats. With Aspose.Words you can view, generate, modify, convert, render and print documents without using Microsoft Word.

+

For more details about Aspose.Words for .NET API

+

Download, Installation and Usage

+

Please check the links below to find instructions on downloading, installing, configuring and using these development templates.

+ +
+

Start a Free Trial Today

+

Start a free trial today – all you need is to sign up with Aspose. Once you have signed up, you are ready to try powerful file processing features offered by Aspose file format APIs.

+

Customer Feedback

+

Your feedback is very important to us. The new features in this module are entirely added based on user requirements and suggestions. Please feel free to provide your feedback and raise feature requirements and we will always be keen to implement customer driven features since we are a 100% customer driven company.

\ No newline at end of file diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/libs/GIT/NGit.dll b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/libs/GIT/NGit.dll new file mode 100644 index 000000000..e6aaae505 Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/libs/GIT/NGit.dll differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/libs/GIT/NSch.dll b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/libs/GIT/NSch.dll new file mode 100644 index 000000000..4dea67651 Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/libs/GIT/NSch.dll differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/libs/GIT/Sharpen.dll b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/libs/GIT/Sharpen.dll new file mode 100644 index 000000000..5a6a4b91c Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/libs/GIT/Sharpen.dll differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/libs/ICSharpCode.SharpZipLib.dll b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/libs/ICSharpCode.SharpZipLib.dll new file mode 100644 index 000000000..6c6a5d4ad Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/libs/ICSharpCode.SharpZipLib.dll differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/libs/Ionic.Zip.dll b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/libs/Ionic.Zip.dll new file mode 100644 index 000000000..95fa92885 Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/libs/Ionic.Zip.dll differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/out/aspose.bmp b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/out/aspose.bmp new file mode 100644 index 000000000..eaed32e0b Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/out/aspose.bmp differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/out/aspose.ico b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/out/aspose.ico new file mode 100644 index 000000000..d252b3c22 Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/out/aspose.ico differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/out/aspose.png b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/out/aspose.png new file mode 100644 index 000000000..3f86d4d03 Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/out/aspose.png differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/out/banner.bmp b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/out/banner.bmp new file mode 100644 index 000000000..09c05bd33 Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/out/banner.bmp differ diff --git a/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/out/dialog.bmp b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/out/dialog.bmp new file mode 100644 index 000000000..67b28da10 Binary files /dev/null and b/Plugins/Visual Studio/Aspose.Words.VisualStudioPlugin/out/dialog.bmp differ diff --git a/Plugins/Visual Studio/README.md b/Plugins/Visual Studio/README.md index a8b9dae0a..4b7d2b696 100644 --- a/Plugins/Visual Studio/README.md +++ b/Plugins/Visual Studio/README.md @@ -4,4 +4,5 @@ We have developed the following plugins for Visual Studio * [Export GridView To Word Control](Aspose.Words.GridViewExport) * [Export Repeater To Word Control](Aspose.Words.RepeaterExport) -* [Export ListView To Word Control](Aspose.Words.ListViewExport) \ No newline at end of file +* [Export ListView To Word Control](Aspose.Words.ListViewExport) +* [Explore Asppose.Words API Examples using Visual Studio Plugin](Aspose.Words.VisualStudioPlugin)