From 2bef019797932c78229e94d55e033f0299fff997 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer <siegfriedpammer@gmail.com> Date: Fri, 14 Jun 2013 09:55:45 +0200 Subject: [PATCH] remove old AddIn Manager --- SharpDevelop.Tests.sln | 15 +- SharpDevelop.sln | 39 +- .../AddInManager/Project/AddInManager.addin | 78 -- .../AddInManager/Project/AddInManager.csproj | 95 -- .../Project/Configuration/AssemblyInfo.cs | 16 - .../AddInManager/Project/Src/AboutForm.cs | 216 ---- .../AddInManager/Project/Src/AboutForm.resx | 123 --- .../AddInManager/Project/Src/AddInControl.cs | 191 ---- .../Project/Src/AddInInstallBinding.cs | 37 - .../Misc/AddInManager/Project/Src/Commands.cs | 169 ---- .../Project/Src/InstallableAddIn.cs | 120 --- .../AddInManager/Project/Src/ManagerForm.cs | 945 ------------------ .../AddInManager/Project/Src/ManagerForm.resx | 120 --- .../ICSharpCode.SharpZipLib.dll | Bin 143360 -> 0 bytes src/Setup/Files.wxs | 9 - src/Setup/Setup.wxs | 2 - 16 files changed, 20 insertions(+), 2155 deletions(-) delete mode 100644 src/AddIns/Misc/AddInManager/Project/AddInManager.addin delete mode 100644 src/AddIns/Misc/AddInManager/Project/AddInManager.csproj delete mode 100644 src/AddIns/Misc/AddInManager/Project/Configuration/AssemblyInfo.cs delete mode 100644 src/AddIns/Misc/AddInManager/Project/Src/AboutForm.cs delete mode 100644 src/AddIns/Misc/AddInManager/Project/Src/AboutForm.resx delete mode 100644 src/AddIns/Misc/AddInManager/Project/Src/AddInControl.cs delete mode 100644 src/AddIns/Misc/AddInManager/Project/Src/AddInInstallBinding.cs delete mode 100644 src/AddIns/Misc/AddInManager/Project/Src/Commands.cs delete mode 100644 src/AddIns/Misc/AddInManager/Project/Src/InstallableAddIn.cs delete mode 100644 src/AddIns/Misc/AddInManager/Project/Src/ManagerForm.cs delete mode 100644 src/AddIns/Misc/AddInManager/Project/Src/ManagerForm.resx delete mode 100755 src/AddIns/Misc/AddInManager/RequiredLibraries/ICSharpCode.SharpZipLib.dll diff --git a/SharpDevelop.Tests.sln b/SharpDevelop.Tests.sln index 40797a93e3..8446e5495f 100644 --- a/SharpDevelop.Tests.sln +++ b/SharpDevelop.Tests.sln @@ -95,8 +95,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "src\Add EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "src\AddIns\Misc\StartPage\Project\StartPage.csproj", "{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager", "src\AddIns\Misc\AddInManager\Project\AddInManager.csproj", "{F93E52FD-DA66-4CE5-A0CB-BCD902811122}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "src\AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FiletypeRegisterer", "src\AddIns\Misc\FiletypeRegisterer\Project\FiletypeRegisterer.csproj", "{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}" @@ -381,10 +379,6 @@ Global {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}.Debug|Any CPU.Build.0 = Debug|Any CPU {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}.Release|Any CPU.ActiveCfg = Release|Any CPU {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}.Release|Any CPU.Build.0 = Release|Any CPU - {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Release|Any CPU.Build.0 = Release|Any CPU {4B8F0F98-8BE1-402B-AA8B-C8D548577B38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B8F0F98-8BE1-402B-AA8B-C8D548577B38}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B8F0F98-8BE1-402B-AA8B-C8D548577B38}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -589,6 +583,10 @@ Global {D1DA3B8F-7313-4BDA-8880-461C5F007751}.Debug|Any CPU.Build.0 = Debug|Any CPU {D1DA3B8F-7313-4BDA-8880-461C5F007751}.Release|Any CPU.ActiveCfg = Release|Any CPU {D1DA3B8F-7313-4BDA-8880-461C5F007751}.Release|Any CPU.Build.0 = Release|Any CPU + {0A029008-4973-4256-9150-9AF12845C547}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0A029008-4973-4256-9150-9AF12845C547}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A029008-4973-4256-9150-9AF12845C547}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0A029008-4973-4256-9150-9AF12845C547}.Release|Any CPU.Build.0 = Release|Any CPU {E2FD63DA-8478-4066-934C-DA82A852C83A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E2FD63DA-8478-4066-934C-DA82A852C83A}.Debug|Any CPU.Build.0 = Debug|Any CPU {E2FD63DA-8478-4066-934C-DA82A852C83A}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -597,10 +595,6 @@ Global {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Debug|Any CPU.Build.0 = Debug|Any CPU {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|Any CPU.ActiveCfg = Release|Any CPU {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|Any CPU.Build.0 = Release|Any CPU - {0A029008-4973-4256-9150-9AF12845C547}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0A029008-4973-4256-9150-9AF12845C547}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0A029008-4973-4256-9150-9AF12845C547}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0A029008-4973-4256-9150-9AF12845C547}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -648,7 +642,6 @@ Global {80F76D10-0B44-4D55-B4BD-DAEB5464090C} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} {9196DD8A-B4D4-4780-8742-C5762E547FC2} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {F93E52FD-DA66-4CE5-A0CB-BCD902811122} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} {4B8F0F98-8BE1-402B-AA8B-C8D548577B38} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} {D022A6CE-7438-41E8-AC64-F2DE18EC54C6} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} {64A3E5E6-90BF-47F6-94DF-68C94B62C817} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} diff --git a/SharpDevelop.sln b/SharpDevelop.sln index afe36f1d56..96d0132357 100644 --- a/SharpDevelop.sln +++ b/SharpDevelop.sln @@ -89,8 +89,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FiletypeRegisterer", "src\A EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelpViewer", "src\AddIns\Misc\HelpViewer\HelpViewer.csproj", "{80F76D10-0B44-4D55-B4BD-DAEB5464090C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager", "src\AddIns\Misc\AddInManager\Project\AddInManager.csproj", "{F93E52FD-DA66-4CE5-A0CB-BCD902811122}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RegExpTk", "src\AddIns\Misc\RegExpTk\Project\RegExpTk.csproj", "{64A3E5E6-90BF-47F6-94DF-68C94B62C817}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PortSD4AddInToSD5", "samples\PortSD4AddInToSD5\PortSD4AddInToSD5.csproj", "{E2FD63DA-8478-4066-934C-DA82A852C83A}" @@ -323,10 +321,6 @@ Global {80F76D10-0B44-4D55-B4BD-DAEB5464090C}.Debug|Any CPU.Build.0 = Debug|Any CPU {80F76D10-0B44-4D55-B4BD-DAEB5464090C}.Release|Any CPU.ActiveCfg = Release|Any CPU {80F76D10-0B44-4D55-B4BD-DAEB5464090C}.Release|Any CPU.Build.0 = Release|Any CPU - {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Release|Any CPU.Build.0 = Release|Any CPU {64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Debug|Any CPU.Build.0 = Debug|Any CPU {64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -359,6 +353,18 @@ Global {60480C2F-F228-4D86-B98F-AF75A7DCEC34}.Debug|Any CPU.Build.0 = Debug|Any CPU {60480C2F-F228-4D86-B98F-AF75A7DCEC34}.Release|Any CPU.ActiveCfg = Release|Any CPU {60480C2F-F228-4D86-B98F-AF75A7DCEC34}.Release|Any CPU.Build.0 = Release|Any CPU + {6FB2FE2F-4E8C-4403-99AE-0474721FFD2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6FB2FE2F-4E8C-4403-99AE-0474721FFD2E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6FB2FE2F-4E8C-4403-99AE-0474721FFD2E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6FB2FE2F-4E8C-4403-99AE-0474721FFD2E}.Release|Any CPU.Build.0 = Release|Any CPU + {7C3579BC-2A64-4108-82B5-3D07ADA079E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7C3579BC-2A64-4108-82B5-3D07ADA079E7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C3579BC-2A64-4108-82B5-3D07ADA079E7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7C3579BC-2A64-4108-82B5-3D07ADA079E7}.Release|Any CPU.Build.0 = Release|Any CPU + {9F0355DD-A394-4626-A2D9-112EBD1D36A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9F0355DD-A394-4626-A2D9-112EBD1D36A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9F0355DD-A394-4626-A2D9-112EBD1D36A9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9F0355DD-A394-4626-A2D9-112EBD1D36A9}.Release|Any CPU.Build.0 = Release|Any CPU {0162E499-42D0-409B-AA25-EED21F75336B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0162E499-42D0-409B-AA25-EED21F75336B}.Debug|Any CPU.Build.0 = Debug|Any CPU {0162E499-42D0-409B-AA25-EED21F75336B}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -451,6 +457,10 @@ Global {D1DA3B8F-7313-4BDA-8880-461C5F007751}.Debug|Any CPU.Build.0 = Debug|Any CPU {D1DA3B8F-7313-4BDA-8880-461C5F007751}.Release|Any CPU.ActiveCfg = Release|Any CPU {D1DA3B8F-7313-4BDA-8880-461C5F007751}.Release|Any CPU.Build.0 = Release|Any CPU + {D1DF9C2D-3A5E-4985-ACA4-648C604DB562}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1DF9C2D-3A5E-4985-ACA4-648C604DB562}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1DF9C2D-3A5E-4985-ACA4-648C604DB562}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D1DF9C2D-3A5E-4985-ACA4-648C604DB562}.Release|Any CPU.Build.0 = Release|Any CPU {1D18D788-F7EE-4585-A23B-34DC8EC63CB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1D18D788-F7EE-4585-A23B-34DC8EC63CB8}.Debug|Any CPU.Build.0 = Debug|Any CPU {1D18D788-F7EE-4585-A23B-34DC8EC63CB8}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -463,22 +473,6 @@ Global {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Debug|Any CPU.Build.0 = Debug|Any CPU {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|Any CPU.ActiveCfg = Release|Any CPU {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|Any CPU.Build.0 = Release|Any CPU - {D1DF9C2D-3A5E-4985-ACA4-648C604DB562}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1DF9C2D-3A5E-4985-ACA4-648C604DB562}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1DF9C2D-3A5E-4985-ACA4-648C604DB562}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1DF9C2D-3A5E-4985-ACA4-648C604DB562}.Release|Any CPU.Build.0 = Release|Any CPU - {6FB2FE2F-4E8C-4403-99AE-0474721FFD2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6FB2FE2F-4E8C-4403-99AE-0474721FFD2E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6FB2FE2F-4E8C-4403-99AE-0474721FFD2E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6FB2FE2F-4E8C-4403-99AE-0474721FFD2E}.Release|Any CPU.Build.0 = Release|Any CPU - {7C3579BC-2A64-4108-82B5-3D07ADA079E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7C3579BC-2A64-4108-82B5-3D07ADA079E7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7C3579BC-2A64-4108-82B5-3D07ADA079E7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7C3579BC-2A64-4108-82B5-3D07ADA079E7}.Release|Any CPU.Build.0 = Release|Any CPU - {9F0355DD-A394-4626-A2D9-112EBD1D36A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9F0355DD-A394-4626-A2D9-112EBD1D36A9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9F0355DD-A394-4626-A2D9-112EBD1D36A9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9F0355DD-A394-4626-A2D9-112EBD1D36A9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -523,7 +517,6 @@ Global {0008FCE9-9EB4-4E2E-979B-553278E5BBA6} = {59A30AA6-D600-41AB-B7A1-9543469DBE36} {D022A6CE-7438-41E8-AC64-F2DE18EC54C6} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} {80F76D10-0B44-4D55-B4BD-DAEB5464090C} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {F93E52FD-DA66-4CE5-A0CB-BCD902811122} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} {64A3E5E6-90BF-47F6-94DF-68C94B62C817} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} {E2FD63DA-8478-4066-934C-DA82A852C83A} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} {B5D8C3E6-42EC-4D4B-AD05-3644B32563EF} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} diff --git a/src/AddIns/Misc/AddInManager/Project/AddInManager.addin b/src/AddIns/Misc/AddInManager/Project/AddInManager.addin deleted file mode 100644 index 4faedd1fcc..0000000000 --- a/src/AddIns/Misc/AddInManager/Project/AddInManager.addin +++ /dev/null @@ -1,78 +0,0 @@ -<AddIn name = "AddInManager" - author = "Daniel Grunwald" - copyright = "prj:///doc/copyright.txt" - description = "Can install, enable, disable and uninstall AddIns" - addInManagerHidden = "preinstalled"> - - <Manifest> - <Identity name = "ICSharpCode.AddInManager"/> - </Manifest> - - <Runtime> - <Import assembly = "ICSharpCode.AddInManager.dll"> - <ConditionEvaluator name="AddInManagerAddInState" class="ICSharpCode.AddInManager.AddInManagerAddInStateConditionEvaluator"/> - <ConditionEvaluator name="AddInManager2NotInstalled" class="ICSharpCode.AddInManager.AddInManager2NotInstalledConditionEvaluator"/> - </Import> - </Runtime> - - <Path name = "/SharpDevelop/Workbench/Tools"> - <Condition name="AddInManager2NotInstalled"> - <MenuItem id = "ShowAddInManager" - label = "${res:AddInManager.Title}" - class = "ICSharpCode.AddInManager.ShowCommand"/> - </Condition> - </Path> - - <Path name = "/SharpDevelop/Workbench/DisplayBindings"> - <DisplayBinding id = "AddInManager" - class = "ICSharpCode.AddInManager.AddInInstallBinding" - insertbefore = "Text" - fileNamePattern = "\.sdaddin$" - title = "Install with AddIn manager"/> - </Path> - - <Path name = "/AddIns/AddInManager/ContextMenu"> - <Condition name="AddInManagerAddInState" states="Enable"> - <MenuItem id="Disable" - label="${res:AddInManager.ActionDisable}" - class="ICSharpCode.AddInManager.DisableCommand"/> - </Condition> - <Condition name="AddInManagerAddInState" states="Disable"> - <MenuItem id="Enable" - label="${res:AddInManager.ActionEnable}" - class="ICSharpCode.AddInManager.EnableCommand"/> - </Condition> - <Condition name="AddInManagerAddInState" states="Enable,Disable,InstalledTwice,DependencyError,CustomError"> - <MenuItem id="Uninstall" - label="${res:AddInManager.ActionUninstall}" - class="ICSharpCode.AddInManager.UninstallCommand"/> - </Condition> - <Condition name="AddInManagerAddInState" states="Install"> - <MenuItem id="AbortInstall" - label="${res:AddInManager.ActionCancelInstallation}" - class="ICSharpCode.AddInManager.AbortInstallCommand"/> - </Condition> - <Condition name="AddInManagerAddInState" states="Uninstall"> - <MenuItem id="AbortUninstall" - label="${res:AddInManager.ActionCancelDeinstallation}" - class="ICSharpCode.AddInManager.EnableCommand"/> - </Condition> - <Condition name="AddInManagerAddInState" states="Update"> - <MenuItem id="AbortUpdate" - label="${res:AddInManager.ActionCancelUpdate}" - class="ICSharpCode.AddInManager.AbortUpdateCommand"/> - </Condition> - <MenuItem id="Separator1" type="Separator"/> - <MenuItem id="GoToHomepage" - label="${res:AddInManager.OpenWebsite}" - class="ICSharpCode.AddInManager.OpenHomepageCommand" - loadclasslazy="false"/> - <MenuItem id="Options" - label="${res:AddInManager.Options}" - class="ICSharpCode.AddInManager.OptionsCommand" - loadclasslazy="false"/> - <MenuItem id="About" - label="${res:AddInManager.About}" - class="ICSharpCode.AddInManager.AboutCommand"/> - </Path> -</AddIn> diff --git a/src/AddIns/Misc/AddInManager/Project/AddInManager.csproj b/src/AddIns/Misc/AddInManager/Project/AddInManager.csproj deleted file mode 100644 index ba33653564..0000000000 --- a/src/AddIns/Misc/AddInManager/Project/AddInManager.csproj +++ /dev/null @@ -1,95 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> - <PropertyGroup> - <OutputType>Library</OutputType> - <RootNamespace>ICSharpCode.AddInManager</RootNamespace> - <AssemblyName>ICSharpCode.AddInManager</AssemblyName> - <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> - <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> - <ProjectGuid>{F93E52FD-DA66-4CE5-A0CB-BCD902811122}</ProjectGuid> - <AllowUnsafeBlocks>False</AllowUnsafeBlocks> - <NoStdLib>False</NoStdLib> - <RegisterForComInterop>False</RegisterForComInterop> - <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies> - <BaseAddress>111149056</BaseAddress> - <PlatformTarget>AnyCPU</PlatformTarget> - <FileAlignment>4096</FileAlignment> - <WarningLevel>4</WarningLevel> - <TreatWarningsAsErrors>false</TreatWarningsAsErrors> - <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> - <TargetFrameworkProfile> - </TargetFrameworkProfile> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> - <OutputPath>..\..\..\..\..\AddIns\Misc\AddInManager\</OutputPath> - <Optimize>False</Optimize> - <DefineConstants>DEBUG;TRACE</DefineConstants> - <DebugSymbols>true</DebugSymbols> - <DebugType>Full</DebugType> - <CheckForOverflowUnderflow>True</CheckForOverflowUnderflow> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)' == 'Release' "> - <OutputPath>..\..\..\..\..\AddIns\Misc\AddInManager\</OutputPath> - <Optimize>True</Optimize> - <DefineConstants>TRACE</DefineConstants> - <DebugSymbols>false</DebugSymbols> - <DebugType>None</DebugType> - <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> - </PropertyGroup> - <ItemGroup> - <Reference Include="System" /> - <Reference Include="System.Data" /> - <Reference Include="System.Drawing" /> - <Reference Include="System.Windows.Forms" /> - <Reference Include="System.Xml" /> - <Reference Include="ICSharpCode.SharpZipLib"> - <HintPath>..\RequiredLibraries\ICSharpCode.SharpZipLib.dll</HintPath> - <SpecificVersion>False</SpecificVersion> - </Reference> - </ItemGroup> - <ItemGroup> - <None Include="AddInManager.addin"> - <CopyToOutputDirectory>Always</CopyToOutputDirectory> - </None> - <Compile Include="Configuration\AssemblyInfo.cs" /> - <Compile Include="Src\Commands.cs" /> - <Compile Include="Src\ManagerForm.cs"> - <SubType>Form</SubType> - </Compile> - <EmbeddedResource Include="Src\ManagerForm.resx"> - <DependentUpon>ManagerForm.cs</DependentUpon> - </EmbeddedResource> - <Compile Include="Src\AddInControl.cs"> - <SubType>Component</SubType> - </Compile> - <Compile Include="Src\InstallableAddIn.cs" /> - <Compile Include="Src\AboutForm.cs"> - <SubType>Form</SubType> - </Compile> - <EmbeddedResource Include="Src\AboutForm.resx"> - <DependentUpon>AboutForm.cs</DependentUpon> - </EmbeddedResource> - <Compile Include="Src\AddInInstallBinding.cs" /> - <Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs"> - <Link>Configuration\GlobalAssemblyInfo.cs</Link> - </Compile> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\..\..\..\Main\Core\Project\ICSharpCode.Core.csproj"> - <Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project> - <Name>ICSharpCode.Core</Name> - <Private>False</Private> - </ProjectReference> - <ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj"> - <Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project> - <Name>ICSharpCode.SharpDevelop</Name> - <Private>False</Private> - </ProjectReference> - <ProjectReference Include="..\..\..\..\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj"> - <Project>{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}</Project> - <Name>ICSharpCode.Core.WinForms</Name> - <Private>False</Private> - </ProjectReference> - </ItemGroup> - <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" /> -</Project> \ No newline at end of file diff --git a/src/AddIns/Misc/AddInManager/Project/Configuration/AssemblyInfo.cs b/src/AddIns/Misc/AddInManager/Project/Configuration/AssemblyInfo.cs deleted file mode 100644 index e91f190955..0000000000 --- a/src/AddIns/Misc/AddInManager/Project/Configuration/AssemblyInfo.cs +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System.Reflection; - -// Information about this assembly is defined by the following -// attributes. -// -// change them to the information which is associated with the assembly -// you compile. - -[assembly: AssemblyTitle("AddInManager")] -[assembly: AssemblyDescription("AddInManager for ICSharpCode.Core")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] diff --git a/src/AddIns/Misc/AddInManager/Project/Src/AboutForm.cs b/src/AddIns/Misc/AddInManager/Project/Src/AboutForm.cs deleted file mode 100644 index eedc22365d..0000000000 --- a/src/AddIns/Misc/AddInManager/Project/Src/AboutForm.cs +++ /dev/null @@ -1,216 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; - -using ICSharpCode.Core; - -namespace ICSharpCode.AddInManager -{ - public class AboutForm : System.Windows.Forms.Form - { - Font boldFont; - - public AboutForm(AddIn addIn) - { - // - // The InitializeComponent() call is required for Windows Forms designer support. - // - InitializeComponent(); - - boldFont = new Font(Font, FontStyle.Bold); - - List<string> titles = new List<string>(); - List<string> values = new List<string>(); - - this.Text = addIn.Name; - closeButton.Text = ResourceService.GetString("Global.CloseButtonText"); - - titles.Add("AddIn name"); - values.Add(addIn.Name); - - if (addIn.Manifest.PrimaryVersion != null && addIn.Manifest.PrimaryVersion.ToString() != "0.0.0.0") { - titles.Add("Version"); - values.Add(addIn.Manifest.PrimaryVersion.ToString()); - } - - if (addIn.Properties["author"].Length > 0) { - titles.Add("Author"); - values.Add(addIn.Properties["author"]); - } - - if (addIn.Properties["copyright"].Length > 0) { - if (!addIn.Properties["copyright"].StartsWith("prj:")) { - titles.Add("Copyright"); - values.Add(addIn.Properties["copyright"]); - } - } - - if (addIn.Properties["license"].Length > 0) { - titles.Add("License"); - values.Add(addIn.Properties["license"]); - } - - if (addIn.Properties["url"].Length > 0) { - titles.Add("Website"); - values.Add(addIn.Properties["url"]); - } - - if (addIn.Properties["description"].Length > 0) { - titles.Add("Description"); - values.Add(addIn.Properties["description"]); - } - - titles.Add("AddIn file"); - values.Add(FileUtility.NormalizePath(addIn.FileName)); - - titles.Add("Internal name"); - values.Add(addIn.Manifest.PrimaryIdentity); - - table.RowCount = titles.Count + 1; - table.RowStyles.Clear(); - for (int i = 0; i < titles.Count; i++) { - table.RowStyles.Add(new RowStyle(SizeType.AutoSize)); - AddRow(titles[i], values[i], i); - } - } - - protected override void Dispose(bool disposing) - { - base.Dispose(disposing); - if (disposing) { - if (boldFont != null) - boldFont.Dispose(); - } - } - - void AddRow(string desc, string val, int rowIndex) - { - Label descLabel = new Label(); - descLabel.AutoSize = true; - descLabel.Anchor = AnchorStyles.Top | AnchorStyles.Right; - descLabel.Font = boldFont; - descLabel.Text = StringParser.Parse(desc) + ":"; - table.Controls.Add(descLabel, 0, rowIndex); - - Label valLabel; - string link = GetLink(val); - if (link != null) { - LinkLabel linkLabel = new LinkLabel(); - linkLabel.LinkClicked += delegate { - try { - System.Diagnostics.Process.Start(link); - } catch (Exception ex) { - MessageService.ShowMessage(ex.ToString()); - } - }; - valLabel = linkLabel; - } else { - valLabel = new Label(); - } - valLabel.AutoSize = true; - valLabel.Text = val; - table.Controls.Add(valLabel, 1, rowIndex); - } - - string GetLink(string text) - { - if (text == null) - return null; - switch (text) { - case "GNU General Public License": - case "GPL": - return "http://www.gnu.org/licenses/gpl.html"; - case "LGPL": - case "GNU Lesser General Public License": - return "http://www.gnu.org/licenses/lgpl.html"; - default: - if (text.StartsWith("http://")) - return text; - if (text.StartsWith("www.")) - return "http://" + text; - return null; - } - } - - #region Windows Forms Designer generated code - /// <summary> - /// This method is required for Windows Forms designer support. - /// Do not change the method contents inside the source code editor. The Forms designer might - /// not be able to load this method if it was changed manually. - /// </summary> - private void InitializeComponent() - { - System.Windows.Forms.Panel bottomPanel; - this.closeButton = new System.Windows.Forms.Button(); - this.table = new System.Windows.Forms.TableLayoutPanel(); - bottomPanel = new System.Windows.Forms.Panel(); - bottomPanel.SuspendLayout(); - this.SuspendLayout(); - // - // bottomPanel - // - bottomPanel.Controls.Add(this.closeButton); - bottomPanel.Dock = System.Windows.Forms.DockStyle.Bottom; - bottomPanel.Location = new System.Drawing.Point(0, 233); - bottomPanel.Name = "bottomPanel"; - bottomPanel.Size = new System.Drawing.Size(351, 35); - bottomPanel.TabIndex = 0; - // - // closeButton - // - this.closeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.closeButton.Location = new System.Drawing.Point(264, 6); - this.closeButton.Name = "closeButton"; - this.closeButton.Size = new System.Drawing.Size(75, 23); - this.closeButton.TabIndex = 0; - this.closeButton.Text = "Close"; - this.closeButton.UseCompatibleTextRendering = true; - this.closeButton.UseVisualStyleBackColor = true; - this.closeButton.Click += new System.EventHandler(this.CloseButtonClick); - // - // table - // - this.table.ColumnCount = 2; - this.table.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.table.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.table.Dock = System.Windows.Forms.DockStyle.Fill; - this.table.Location = new System.Drawing.Point(0, 8); - this.table.Name = "table"; - this.table.RowCount = 2; - this.table.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.table.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.table.Size = new System.Drawing.Size(351, 225); - this.table.TabIndex = 1; - // - // AboutForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.SystemColors.Info; - this.ClientSize = new System.Drawing.Size(351, 268); - this.Controls.Add(this.table); - this.Controls.Add(bottomPanel); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "AboutForm"; - this.Padding = new System.Windows.Forms.Padding(0, 8, 0, 0); - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "AboutForm"; - bottomPanel.ResumeLayout(false); - this.ResumeLayout(false); - } - private System.Windows.Forms.Button closeButton; - private System.Windows.Forms.TableLayoutPanel table; - #endregion - - void CloseButtonClick(object sender, EventArgs e) - { - Close(); - } - } -} diff --git a/src/AddIns/Misc/AddInManager/Project/Src/AboutForm.resx b/src/AddIns/Misc/AddInManager/Project/Src/AboutForm.resx deleted file mode 100644 index 168a2f36bd..0000000000 --- a/src/AddIns/Misc/AddInManager/Project/Src/AboutForm.resx +++ /dev/null @@ -1,123 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<root> - <!-- - Microsoft ResX Schema - - Version 2.0 - - The primary goals of this format is to allow a simple XML format - that is mostly human readable. The generation and parsing of the - various data types are done through the TypeConverter classes - associated with the data types. - - Example: - - ... ado.net/XML headers & schema ... - <resheader name="resmimetype">text/microsoft-resx</resheader> - <resheader name="version">2.0</resheader> - <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> - <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> - <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> - <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> - <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> - <value>[base64 mime encoded serialized .NET Framework object]</value> - </data> - <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> - <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> - <comment>This is a comment</comment> - </data> - - There are any number of "resheader" rows that contain simple - name/value pairs. - - Each data row contains a name, and value. The row also contains a - type or mimetype. Type corresponds to a .NET class that support - text/value conversion through the TypeConverter architecture. - Classes that don't support this are serialized and stored with the - mimetype set. - - The mimetype is used for serialized objects, and tells the - ResXResourceReader how to depersist the object. This is currently not - extensible. For a given mimetype the value must be set accordingly: - - Note - application/x-microsoft.net.object.binary.base64 is the format - that the ResXResourceWriter will generate, however the reader can - read any of the formats listed below. - - mimetype: application/x-microsoft.net.object.binary.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.soap.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Soap.SoapFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.bytearray.base64 - value : The object must be serialized into a byte array - : using a System.ComponentModel.TypeConverter - : and then encoded with base64 encoding. - --> - <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> - <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> - <xsd:element name="root" msdata:IsDataSet="true"> - <xsd:complexType> - <xsd:choice maxOccurs="unbounded"> - <xsd:element name="metadata"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" /> - </xsd:sequence> - <xsd:attribute name="name" use="required" type="xsd:string" /> - <xsd:attribute name="type" type="xsd:string" /> - <xsd:attribute name="mimetype" type="xsd:string" /> - <xsd:attribute ref="xml:space" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="assembly"> - <xsd:complexType> - <xsd:attribute name="alias" type="xsd:string" /> - <xsd:attribute name="name" type="xsd:string" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="data"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> - <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> - <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> - <xsd:attribute ref="xml:space" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="resheader"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" /> - </xsd:complexType> - </xsd:element> - </xsd:choice> - </xsd:complexType> - </xsd:element> - </xsd:schema> - <resheader name="resmimetype"> - <value>text/microsoft-resx</value> - </resheader> - <resheader name="version"> - <value>2.0</value> - </resheader> - <resheader name="reader"> - <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> - <resheader name="writer"> - <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> - <metadata name="bottomPanel.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> - <value>False</value> - </metadata> -</root> \ No newline at end of file diff --git a/src/AddIns/Misc/AddInManager/Project/Src/AddInControl.cs b/src/AddIns/Misc/AddInManager/Project/Src/AddInControl.cs deleted file mode 100644 index 76f0fbb63f..0000000000 --- a/src/AddIns/Misc/AddInManager/Project/Src/AddInControl.cs +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Windows.Forms; - -using ICSharpCode.Core; -using ICSharpCode.Core.WinForms; - -namespace ICSharpCode.AddInManager -{ - public class AddInControl : Control - { - AddIn addIn; - bool isExternal; - - public AddIn AddIn { - get { - return addIn; - } - } - - public AddInControl(AddIn addIn) - { - this.addIn = addIn; - this.BackColor = SystemColors.Window; - this.ContextMenuStrip = MenuService.CreateContextMenu(this, "/AddIns/AddInManager/ContextMenu"); - - isExternal = !FileUtility.IsBaseDirectory(FileUtility.ApplicationRootPath, addIn.FileName) - && !FileUtility.IsBaseDirectory(PropertyService.ConfigDirectory, addIn.FileName); - - this.ClientSize = new Size(100, isExternal ? 35 + pathHeight : 35); - this.SetStyle(ControlStyles.Selectable, true); - this.SetStyle(ControlStyles.UserPaint, true); - this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); - this.SetStyle(ControlStyles.ResizeRedraw, true); - this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); - } - - bool selected; - - public bool Selected { - get { - return selected; - } - set { - if (selected != value) { - selected = value; - Invalidate(); - } - } - } - - protected override void OnClick(EventArgs e) - { - base.OnClick(e); - Focus(); - } - - Color Mix(Color c1, Color c2, double perc) - { - double p1 = 1 - perc; - double p2 = perc; - return Color.FromArgb((int)(c1.R * p1 + c2.R * p2), - (int)(c1.G * p1 + c2.G * p2), - (int)(c1.B * p1 + c2.B * p2)); - } - - protected override void OnPaint(PaintEventArgs e) - { - Graphics g = e.Graphics; - Rectangle bounds = this.ClientRectangle; - bounds.Offset(1, 1); - bounds.Inflate(-2, -2); - Color startColor = SystemColors.ControlLightLight; - Color endColor = SystemColors.Control; - if (selected) { - startColor = Mix(SystemColors.ControlLightLight, SystemColors.Highlight, 0.1); - endColor = Mix(SystemColors.ControlLightLight, SystemColors.Highlight, 0.65); - } - Brush gradient = new LinearGradientBrush(bounds, - startColor, - endColor, - LinearGradientMode.ForwardDiagonal); - - GraphicsPath path = new GraphicsPath(); - - const int egdeRadius = 3; - const int innerMargin = egdeRadius + 2; - - RectangleF arcRect = new RectangleF(bounds.Location, new SizeF(egdeRadius * 2, egdeRadius * 2)); - //top left Arc - path.AddArc(arcRect, 180, 90); - path.AddLine(bounds.X + egdeRadius, bounds.Y, bounds.Right - egdeRadius, bounds.Y); - // top right arc - arcRect.X = bounds.Right - egdeRadius * 2; - path.AddArc(arcRect, 270, 90); - path.AddLine(bounds.Right, bounds.Left + egdeRadius, bounds.Right, bounds.Bottom - egdeRadius); - // bottom right arc - arcRect.Y = bounds.Bottom - egdeRadius * 2; - path.AddArc(arcRect, 0, 90); - path.AddLine(bounds.X + egdeRadius, bounds.Bottom, bounds.Right - egdeRadius, bounds.Bottom); - // bottom left arc - arcRect.X = bounds.Left; - path.AddArc(arcRect, 90, 90); - path.AddLine(bounds.X, bounds.Left + egdeRadius, bounds.X, bounds.Bottom - egdeRadius); - - g.FillPath(gradient, path); - g.DrawPath(SystemPens.ControlText, path); - path.Dispose(); - gradient.Dispose(); - Brush textBrush; - string description = GetText(out textBrush); - int titleWidth; - using (Font boldFont = new Font("Arial", 8, FontStyle.Bold)) { - g.DrawString(addIn.Name, boldFont, textBrush, innerMargin, innerMargin); - titleWidth = (int)g.MeasureString(addIn.Name, boldFont).Width + 1; - } - if (addIn.Version != null && addIn.Version.ToString() != "0.0.0.0") { - g.DrawString(addIn.Version.ToString(), Font, textBrush, innerMargin + titleWidth + 4, innerMargin); - } - RectangleF textBounds = bounds; - textBounds.Offset(innerMargin, innerMargin); - textBounds.Inflate(-innerMargin * 2, -innerMargin * 2 + 2); - if (isExternal) - textBounds.Height -= pathHeight; - using (StringFormat sf = new StringFormat(StringFormatFlags.LineLimit)) { - sf.Trimming = StringTrimming.EllipsisWord; - g.DrawString(description, Font, textBrush, textBounds, sf); - } - if (isExternal) { - textBounds.Y = textBounds.Bottom + 2; - textBounds.Height = pathHeight + 2; - using (Font font = new Font(Font.Name, 7, FontStyle.Italic)) { - using (StringFormat sf = new StringFormat(StringFormatFlags.NoWrap)) { - sf.Trimming = StringTrimming.EllipsisPath; - sf.Alignment = StringAlignment.Far; - g.DrawString(addIn.FileName, font, - selected ? SystemBrushes.HighlightText : SystemBrushes.ControlText, - textBounds, sf); - } - } - } - } - - const int pathHeight = 10; - - string GetText(out Brush textBrush) - { - switch (addIn.Action) { - case AddInAction.Enable: - if (addIn.Enabled) { - textBrush = SystemBrushes.ControlText; - return addIn.Properties["description"]; - } else { - textBrush = SystemBrushes.ActiveCaption; - return ResourceService.GetString("AddInManager.AddInEnabled"); - } - case AddInAction.Disable: - textBrush = SystemBrushes.GrayText; - if (addIn.Enabled) - return ResourceService.GetString("AddInManager.AddInWillBeDisabled"); - else - return ResourceService.GetString("AddInManager.AddInDisabled"); - case AddInAction.Install: - textBrush = SystemBrushes.ActiveCaption; - return ResourceService.GetString("AddInManager.AddInInstalled"); - case AddInAction.Uninstall: - textBrush = SystemBrushes.GrayText; - return ResourceService.GetString("AddInManager.AddInRemoved"); - case AddInAction.Update: - textBrush = SystemBrushes.ActiveCaption; - return ResourceService.GetString("AddInManager.AddInUpdated"); - case AddInAction.InstalledTwice: - textBrush = Brushes.Red; - return ResourceService.GetString("AddInManager.AddInInstalledTwice"); - case AddInAction.DependencyError: - textBrush = Brushes.Red; - return ResourceService.GetString("AddInManager.AddInDependencyFailed"); - case AddInAction.CustomError: - textBrush = Brushes.Red; - return StringParser.Parse(addIn.CustomErrorMessage); - default: - textBrush = Brushes.Yellow; - return addIn.Action.ToString(); - } - } - } -} diff --git a/src/AddIns/Misc/AddInManager/Project/Src/AddInInstallBinding.cs b/src/AddIns/Misc/AddInManager/Project/Src/AddInInstallBinding.cs deleted file mode 100644 index f8833b1071..0000000000 --- a/src/AddIns/Misc/AddInManager/Project/Src/AddInInstallBinding.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; -using ICSharpCode.Core; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Workbench; - -namespace ICSharpCode.AddInManager -{ - #if !STANDALONE - public class AddInInstallBinding : IDisplayBinding - { - public bool CanCreateContentForFile(FileName fileName) - { - return true; - } - - public IViewContent CreateContentForFile(OpenedFile file) - { - ManagerForm.ShowForm(); - ManagerForm.Instance.ShowInstallableAddIns(new string[] { file.FileName }); - return null; - } - - public bool IsPreferredBindingForFile(FileName fileName) - { - return true; - } - - public double AutoDetectFileContent(FileName fileName, System.IO.Stream fileContent, string detectedMimeType) - { - return 1; - } - } - #endif -} diff --git a/src/AddIns/Misc/AddInManager/Project/Src/Commands.cs b/src/AddIns/Misc/AddInManager/Project/Src/Commands.cs deleted file mode 100644 index e815531cdd..0000000000 --- a/src/AddIns/Misc/AddInManager/Project/Src/Commands.cs +++ /dev/null @@ -1,169 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; -using System.Collections.Generic; -using ICSharpCode.Core; -using System.Linq; - -#if !STANDALONE -using ICSharpCode.SharpDevelop; -#endif - -namespace ICSharpCode.AddInManager -{ - public class ShowCommand : AbstractMenuCommand - { - #if STANDALONE - static bool resourcesRegistered; - #endif - - public override void Run() - { - #if STANDALONE - if (!resourcesRegistered) { - resourcesRegistered = true; - ResourceService.RegisterStrings("ICSharpCode.AddInManager.StringResources", typeof(ShowCommand).Assembly); - } - #endif - ManagerForm.ShowForm(); - } - } - - public class AddInManagerAddInStateConditionEvaluator : IConditionEvaluator - { - public bool IsValid(object caller, Condition condition) - { - string states = condition.Properties["states"]; - string action = ((AddInControl)caller).AddIn.Action.ToString(); - foreach (string state in states.Split(',')) { - if (state == action) - return true; - } - return false; - } - } - - public class AddInManager2NotInstalledConditionEvaluator : IConditionEvaluator - { - public bool IsValid(object caller, Condition condition) - { - #if !STANDALONE - AddIn addInManager2AddIn = SD.AddInTree.AddIns.Where( - a => ((a.Manifest != null) && (a.Manifest.PrimaryIdentity == "ICSharpCode.AddInManager2"))) - .FirstOrDefault(); - if (addInManager2AddIn != null) - { - return !addInManager2AddIn.Enabled; - } - #endif - - return true; - } - } - - public class DisableCommand : AbstractMenuCommand - { - public override void Run() - { - ManagerForm.Instance.TryRunAction(((AddInControl)Owner).AddIn, AddInAction.Disable); - } - } - - public class EnableCommand : AbstractMenuCommand - { - public override void Run() - { - ManagerForm.Instance.TryRunAction(((AddInControl)Owner).AddIn, AddInAction.Enable); - } - } - - public class AbortInstallCommand : AbstractMenuCommand - { - public override void Run() - { - ManagerForm.Instance.TryRunAction(((AddInControl)Owner).AddIn, AddInAction.Uninstall); - } - } - - public class AbortUpdateCommand : AbstractMenuCommand - { - public override void Run() - { - ManagerForm.Instance.TryRunAction(((AddInControl)Owner).AddIn, AddInAction.InstalledTwice); - } - } - - public class UninstallCommand : AbstractMenuCommand - { - public override void Run() - { - ManagerForm.Instance.TryUninstall(((AddInControl)Owner).AddIn); - } - } - - public class OpenHomepageCommand : AbstractMenuCommand - { - public override bool IsEnabled { - get { - return ((AddInControl)Owner).AddIn.Properties["url"].Length > 0; - } - } - - public override void Run() - { - #if STANDALONE - try { - System.Diagnostics.Process.Start(((AddInControl)Owner).AddIn.Properties["url"]); - } catch {} - #else - FileService.OpenFile(((AddInControl)Owner).AddIn.Properties["url"]); - #endif - ManagerForm.Instance.Close(); - } - } - - public class AboutCommand : AbstractMenuCommand - { - public override void Run() - { - using (AboutForm form = new AboutForm(((AddInControl)Owner).AddIn)) { - form.ShowDialog(ManagerForm.Instance); - } - } - } - - public class OptionsCommand : AbstractMenuCommand - { - public override bool IsEnabled { - get { - #if !STANDALONE - AddIn addIn = ((AddInControl)Owner).AddIn; - if (addIn.Enabled) { - foreach (KeyValuePair<string, ExtensionPath> pair in addIn.Paths) { - if (pair.Key.StartsWith("/SharpDevelop/Dialogs/OptionsDialog")) { - return true; - } - } - } - #endif - return false; - } - } - - public override void Run() - { - #if !STANDALONE - AddIn addIn = ((AddInControl)Owner).AddIn; - AddInTreeNode dummyNode = new AddInTreeNode(); - foreach (KeyValuePair<string, ExtensionPath> pair in addIn.Paths) { - if (pair.Key.StartsWith("/SharpDevelop/Dialogs/OptionsDialog")) { - dummyNode.AddCodons(pair.Value.Codons); - } - } - ICSharpCode.SharpDevelop.Commands.OptionsCommand.ShowTabbedOptions(addIn.Name + " " + ResourceService.GetString("AddInManager.Options"), - dummyNode); - #endif - } - } -} diff --git a/src/AddIns/Misc/AddInManager/Project/Src/InstallableAddIn.cs b/src/AddIns/Misc/AddInManager/Project/Src/InstallableAddIn.cs deleted file mode 100644 index 2957767c6d..0000000000 --- a/src/AddIns/Misc/AddInManager/Project/Src/InstallableAddIn.cs +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; -using System.Collections.Generic; -using System.IO; -using ICSharpCode.Core; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpZipLib.Zip; - -namespace ICSharpCode.AddInManager -{ - public class InstallableAddIn - { - string fileName; - bool isPackage; - AddIn addIn; - - public AddIn AddIn { - get { - return addIn; - } - } - - public InstallableAddIn(string fileName, bool isPackage) - { - this.fileName = fileName; - this.isPackage = isPackage; - if (isPackage) { - ZipFile file = new ZipFile(fileName); - try { - LoadAddInFromZip(file); - } finally { - file.Close(); - } - } else { - addIn = AddIn.Load(SD.AddInTree, fileName); - } - if (addIn.Manifest.PrimaryIdentity == null) - throw new AddInLoadException(ResourceService.GetString("AddInManager.AddInMustHaveIdentity")); - } - - void LoadAddInFromZip(ZipFile file) - { - ZipEntry addInEntry = null; - foreach (ZipEntry entry in file) { - if (entry.Name.EndsWith(".addin")) { - if (addInEntry != null) - throw new AddInLoadException("The package may only contain one .addin file."); - addInEntry = entry; - } - } - if (addInEntry == null) - throw new AddInLoadException("The package must contain one .addin file."); - using (Stream s = file.GetInputStream(addInEntry)) { - using (StreamReader r = new StreamReader(s)) { - addIn = AddIn.Load(SD.AddInTree, r); - } - } - } - - public void Install(bool isUpdate) - { - foreach (string identity in addIn.Manifest.Identities.Keys) { - ICSharpCode.Core.AddInManager.AbortRemoveUserAddInOnNextStart(identity); - } - if (isPackage) { - string targetDir = Path.Combine(ICSharpCode.Core.AddInManager.AddInInstallTemp, - addIn.Manifest.PrimaryIdentity); - if (Directory.Exists(targetDir)) - Directory.Delete(targetDir, true); - Directory.CreateDirectory(targetDir); - FastZip fastZip = new FastZip(); - fastZip.CreateEmptyDirectories = true; - fastZip.ExtractZip(fileName, targetDir, null); - - addIn.Action = AddInAction.Install; - if (!isUpdate) { - ((AddInTreeImpl)SD.AddInTree).InsertAddIn(addIn); - } - } else { - ICSharpCode.Core.AddInManager.AddExternalAddIns(new AddIn[] { addIn }); - } - } - - public static void CancelUpdate(IList<AddIn> addIns) - { - foreach (AddIn addIn in addIns) { - foreach (string identity in addIn.Manifest.Identities.Keys) { - // delete from installation temp (if installation or update is pending) - string targetDir = Path.Combine(ICSharpCode.Core.AddInManager.AddInInstallTemp, - identity); - if (Directory.Exists(targetDir)) - Directory.Delete(targetDir, true); - } - } - } - - public static void Uninstall(IList<AddIn> addIns) - { - CancelUpdate(addIns); - foreach (AddIn addIn in addIns) { - foreach (string identity in addIn.Manifest.Identities.Keys) { - // remove the user AddIn - string targetDir = Path.Combine(ICSharpCode.Core.AddInManager.UserAddInPath, identity); - if (Directory.Exists(targetDir)) { - if (!addIn.Enabled) { - try { - Directory.Delete(targetDir, true); - continue; - } catch { - } - } - ICSharpCode.Core.AddInManager.RemoveUserAddInOnNextStart(identity); - } - } - } - } - } -} diff --git a/src/AddIns/Misc/AddInManager/Project/Src/ManagerForm.cs b/src/AddIns/Misc/AddInManager/Project/Src/ManagerForm.cs deleted file mode 100644 index 08a3149744..0000000000 --- a/src/AddIns/Misc/AddInManager/Project/Src/ManagerForm.cs +++ /dev/null @@ -1,945 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Text; -using System.Windows.Forms; -using ICSharpCode.Core; -using ICSharpCode.Core.WinForms; -using ICSharpCode.SharpDevelop; - -namespace ICSharpCode.AddInManager -{ - public class ManagerForm : System.Windows.Forms.Form - { - #region Form Initialization - static ManagerForm instance; - - public static ManagerForm Instance { - get { - return instance; - } - } - - public static void ShowForm() - { - if (instance == null) { - instance = new ManagerForm(); - #if STANDALONE - instance.Show(); - #else - instance.Show(SD.WinForms.MainWin32Window); - #endif - } else { - instance.Activate(); - } - } - - public ManagerForm() - { - // - // The InitializeComponent() call is required for Windows Forms designer support. - // - InitializeComponent(); - - #if !STANDALONE - ICSharpCode.SharpDevelop.Gui.FormLocationHelper.Apply(this, "AddInManager.WindowBounds", true); - #endif - - #if STANDALONE - actionFlowLayoutPanel.BackgroundImage = new Bitmap(typeof(ManagerForm).Assembly.GetManifestResourceStream("ICSharpCode.AddInManager.WizardBackground.png")); - #else - actionFlowLayoutPanel.BackgroundImage = WinFormsResourceService.GetBitmap("GeneralWizardBackground"); - #endif - - installButton.Text = ResourceService.GetString("AddInManager.InstallButton"); - uninstallButton.Text = ResourceService.GetString("AddInManager.ActionUninstall"); - closeButton.Text = ResourceService.GetString("Global.CloseButtonText"); - showPreinstalledAddInsCheckBox.Text = ResourceService.GetString("AddInManager.ShowPreinstalledAddIns"); - this.Text = ResourceService.GetString("AddInManager.Title"); - RightToLeftConverter.ConvertRecursive(this); - - CreateAddInList(); - } - - void OnSplitContainerPanel1Paint(object sender, PaintEventArgs e) - { - if (visibleAddInCount == 0) { - Rectangle rect = splitContainer.Panel1.ClientRectangle; - rect.Offset(16, 16); - rect.Inflate(-32, -32); - e.Graphics.DrawString(ResourceService.GetString("AddInManager.NoAddInsInstalled"), - Font, SystemBrushes.WindowText, rect); - } - } - - void CreateAddInList() - { - Stack<AddInControl> stack = new Stack<AddInControl>(); - int index = 0; - AddInControl addInControl; - - List<AddIn> addInList = new List<AddIn>(SD.AddInTree.AddIns); - addInList.Sort(delegate(AddIn a, AddIn b) { - return a.Name.CompareTo(b.Name); - }); - bool hasPreinstalledAddIns = false; - foreach (AddIn addIn in addInList) { - if (string.Equals(addIn.Properties["addInManagerHidden"], "true", StringComparison.OrdinalIgnoreCase) - && IsInstalledInApplicationRoot(addIn)) - { - hasPreinstalledAddIns = true; - continue; - } - addInControl = new AddInControl(addIn); - addInControl.Dock = DockStyle.Top; - addInControl.TabIndex = index++; - stack.Push(addInControl); - addInControl.Enter += OnControlEnter; - addInControl.Click += OnControlClick; - } - while (stack.Count > 0) { - splitContainer.Panel1.Controls.Add(stack.Pop()); - } - ShowPreinstalledAddInsCheckBoxCheckedChanged(null, null); - if (!hasPreinstalledAddIns) { - showPreinstalledAddInsCheckBox.Visible = false; - } - splitContainer.Panel2Collapsed = true; - } - - void RefreshAddInList() - { - List<AddIn> oldSelected = selected; - foreach (Control ctl in splitContainer.Panel1.Controls) { - ctl.Dispose(); - } - splitContainer.Panel1.Controls.Clear(); - CreateAddInList(); - if (oldSelected != null) { - foreach (AddInControl ctl in splitContainer.Panel1.Controls) { - if (oldSelected.Contains(ctl.AddIn)) - ctl.Selected = true; - } - } - UpdateActionBox(); - } - #endregion - - #region AddInList-Management - int visibleAddInCount = 0; - - void ShowPreinstalledAddInsCheckBoxCheckedChanged(object sender, EventArgs e) - { - visibleAddInCount = 0; - foreach (AddInControl ctl in splitContainer.Panel1.Controls) { - ctl.Selected = false; - bool visible; - if (showPreinstalledAddInsCheckBox.Checked) { - visible = true; - } else { - if (ctl == oldFocus) - oldFocus = null; - if (IsInstalledInApplicationRoot(ctl.AddIn)) { - visible = !string.Equals(ctl.AddIn.Properties["addInManagerHidden"], "preinstalled", StringComparison.OrdinalIgnoreCase); - } else { - visible = true; - } - } - if (visible) - visibleAddInCount += 1; - ctl.Visible = visible; - } - UpdateActionBox(); - } - - static bool IsInstalledInApplicationRoot(AddIn addin) - { - return FileUtility.IsBaseDirectory(FileUtility.ApplicationRootPath, addin.FileName); - } - - void OnControlClick(object sender, EventArgs e) - { - // clicking again on already focused item: - // remove selection of other items / or with Ctrl: toggle selection - if (((Control)sender).Focused) - OnControlEnter(sender, e); - } - - AddInControl oldFocus; - bool ignoreFocusChange; - - void OnControlEnter(object sender, EventArgs e) - { - if (ignoreFocusChange) - return; - bool ctrl = (ModifierKeys & Keys.Control) == Keys.Control; - if ((ModifierKeys & Keys.Shift) == Keys.Shift && sender != oldFocus) { - bool sel = false; - foreach (AddInControl ctl in splitContainer.Panel1.Controls) { - if (!ctl.Visible) continue; - if (ctl == sender || ctl == oldFocus) { - sel = !sel; - ctl.Selected = true; - } else { - if (sel || !ctrl) { - ctl.Selected = sel; - } - } - } - } else if (ctrl) { - foreach (AddInControl ctl in splitContainer.Panel1.Controls) { - if (ctl == sender) - ctl.Selected = !ctl.Selected; - } - oldFocus = (AddInControl)sender; - } else { - foreach (AddInControl ctl in splitContainer.Panel1.Controls) { - ctl.Selected = ctl == sender; - } - oldFocus = (AddInControl)sender; - } - UpdateActionBox(); - } - #endregion - - #region UpdateActionBox - List<AddIn> selected; - AddInAction selectedAction; - - static bool IsErrorAction(AddInAction action) - { - return action == AddInAction.DependencyError - || action == AddInAction.InstalledTwice - || action == AddInAction.CustomError; - } - - void UpdateActionBox() - { - ignoreFocusChange = true; - selected = new List<AddIn>(); - foreach (AddInControl ctl in splitContainer.Panel1.Controls) { - if (ctl.Selected) - selected.Add(ctl.AddIn); - } - splitContainer.Panel2Collapsed = selected.Count == 0; - if (selected.Count > 0) { - dependencyTable.Visible = false; - runActionButton.Visible = true; - uninstallButton.Visible = true; - - bool allHaveIdentity = true; - bool allEnabled = true; - bool allDisabled = true; - bool allInstalling = true; - bool allUninstalling = true; - bool allUpdating = true; - bool allUninstallable = true; - bool hasErrors = false; - foreach (AddIn addIn in selected) { - if (addIn.Manifest.PrimaryIdentity == null) { - allHaveIdentity = false; - break; - } - allEnabled &= addIn.Action == AddInAction.Enable; - if (IsErrorAction(addIn.Action)) - hasErrors = true; - else - allDisabled &= addIn.Action == AddInAction.Disable; - allUpdating &= addIn.Action == AddInAction.Update; - allInstalling &= addIn.Action == AddInAction.Install; - allUninstalling &= addIn.Action == AddInAction.Uninstall; - if (allUninstallable) { - if (IsInstalledInApplicationRoot(addIn)) { - allUninstallable = false; - } - } - } - if (allEnabled == true || allHaveIdentity == false) { - selectedAction = AddInAction.Disable; - actionGroupBox.Text = runActionButton.Text = ResourceService.GetString("AddInManager.ActionDisable"); - actionDescription.Text = ResourceService.GetString("AddInManager.DescriptionDisable"); - if (allHaveIdentity) - runActionButton.Enabled = ShowDependencies(selected, ShowDependencyMode.Disable); - else - runActionButton.Enabled = false; - uninstallButton.Enabled = allUninstallable; - } else if (allDisabled) { - selectedAction = AddInAction.Enable; - actionGroupBox.Text = runActionButton.Text = ResourceService.GetString("AddInManager.ActionEnable"); - actionDescription.Text = ResourceService.GetString("AddInManager.DescriptionEnable"); - runActionButton.Enabled = ShowDependencies(selected, ShowDependencyMode.Enable); - if (hasErrors) - runActionButton.Enabled = false; - uninstallButton.Enabled = allUninstallable; - } else if (allInstalling) { - selectedAction = AddInAction.Uninstall; - actionGroupBox.Text = runActionButton.Text = ResourceService.GetString("AddInManager.ActionCancelInstallation"); - actionDescription.Text = ResourceService.GetString("AddInManager.DescriptionCancelInstall"); - runActionButton.Enabled = ShowDependencies(selected, ShowDependencyMode.Disable); - uninstallButton.Visible = false; - } else if (allUninstalling) { - selectedAction = AddInAction.Enable; - actionGroupBox.Text = runActionButton.Text = ResourceService.GetString("AddInManager.ActionCancelDeinstallation"); - actionDescription.Text = ResourceService.GetString("AddInManager.DescriptionCancelDeinstallation"); - runActionButton.Enabled = ShowDependencies(selected, ShowDependencyMode.Enable); - uninstallButton.Visible = false; - } else if (allUpdating) { - selectedAction = AddInAction.InstalledTwice; - actionGroupBox.Text = runActionButton.Text = ResourceService.GetString("AddInManager.ActionCancelUpdate"); - actionDescription.Text = ResourceService.GetString("AddInManager.DescriptionCancelUpdate"); - runActionButton.Enabled = ShowDependencies(selected, ShowDependencyMode.CancelUpdate); - uninstallButton.Visible = false; - } else { - actionGroupBox.Text = ""; - actionDescription.Text = ResourceService.GetString("AddInManager.DescriptionInconsistentSelection"); - runActionButton.Visible = false; - uninstallButton.Visible = false; - } - } - ignoreFocusChange = false; - } - - enum ShowDependencyMode { - Disable, - Enable, - CancelUpdate - } - - bool ShowDependencies(IList<AddIn> addIns, ShowDependencyMode mode) - { - List<AddInReference> dependencies = new List<AddInReference>(); // only used with enable=true - List<KeyValuePair<AddIn, AddInReference>> dependenciesToSel = new List<KeyValuePair<AddIn, AddInReference>>(); - Dictionary<string, Version> addInDict = new Dictionary<string, Version>(); - Dictionary<string, Version> modifiedAddIns = new Dictionary<string, Version>(); - - // add available addins - foreach (AddIn addIn in SD.AddInTree.AddIns) { - if (addIn.Action != AddInAction.Enable && addIn.Action != AddInAction.Install) - continue; - if (addIns.Contains(addIn)) - continue; - foreach (KeyValuePair<string, Version> pair in addIn.Manifest.Identities) { - addInDict[pair.Key] = pair.Value; - } - } - - // create list of modified addin names - foreach (AddIn addIn in addIns) { - foreach (KeyValuePair<string, Version> pair in addIn.Manifest.Identities) { - modifiedAddIns[pair.Key] = pair.Value; - } - } - - // add new addins - if (mode != ShowDependencyMode.Disable) { - foreach (AddIn addIn in addIns) { - if (mode == ShowDependencyMode.CancelUpdate && !addIn.Enabled) { - continue; - } - foreach (KeyValuePair<string, Version> pair in addIn.Manifest.Identities) { - addInDict[pair.Key] = pair.Value; - } - foreach (AddInReference dep in addIn.Manifest.Dependencies) { - if (!dependencies.Contains(dep)) - dependencies.Add(dep); - } - } - } - - // add dependencies to the to-be-changed addins - foreach (AddIn addIn in SD.AddInTree.AddIns) { - if (addIn.Action != AddInAction.Enable && addIn.Action != AddInAction.Install) - continue; - if (addIns.Contains(addIn)) - continue; - foreach (AddInReference dep in addIn.Manifest.Dependencies) { - if (modifiedAddIns.ContainsKey(dep.Name)) { - dependenciesToSel.Add(new KeyValuePair<AddIn, AddInReference>(addIn, dep)); - } - } - } - - foreach (Control ctl in dependencyTable.Controls) { - ctl.Dispose(); - } - dependencyTable.Controls.Clear(); - bool allDepenciesOK = true; - if (dependencies.Count > 0 || dependenciesToSel.Count > 0) { - if (dependencies.Count == 0) { - dependencyTable.RowCount = 1 + dependenciesToSel.Count; - } else if (dependenciesToSel.Count == 0) { - dependencyTable.RowCount = 1 + dependencies.Count; - } else { - dependencyTable.RowCount = 2 + dependencies.Count + dependenciesToSel.Count; - } - while (dependencyTable.RowStyles.Count < dependencyTable.RowCount) { - dependencyTable.RowStyles.Add(new RowStyle(SizeType.AutoSize)); - } - int rowIndex = 0; - if (dependencies.Count > 0) { - AddLabelRow(rowIndex++, ResourceService.GetString("AddInManager.RequiredDependencies")); - foreach (AddInReference dep in dependencies) { - if (!AddDependencyRow(addInDict, dep, rowIndex++, null)) - allDepenciesOK = false; - } - } - if (dependenciesToSel.Count > 0) { - AddLabelRow(rowIndex++, ResourceService.GetString("AddInManager.RequiredBy")); - foreach (KeyValuePair<AddIn, AddInReference> pair in dependenciesToSel) { - if (!AddDependencyRow(addInDict, pair.Value, rowIndex++, pair.Key.Name)) - allDepenciesOK = false; - } - } - dependencyTable.Visible = true; - } - return allDepenciesOK; - } - - bool AddDependencyRow(Dictionary<string, Version> addInDict, AddInReference dep, int rowIndex, string requiredByName) - { - string text = requiredByName ?? GetDisplayName(dep.Name); - Version versionFound; - Label label = new Label(); - label.AutoSize = true; - label.Text = text; - PictureBox box = new PictureBox(); - box.BorderStyle = BorderStyle.None; - box.Size = new Size(16, 16); - bool isOK = dep.Check(addInDict, out versionFound); - box.SizeMode = PictureBoxSizeMode.CenterImage; - box.Image = isOK ? WinFormsResourceService.GetBitmap("Icons.16x16.OK") : WinFormsResourceService.GetBitmap("Icons.16x16.DeleteIcon"); - dependencyTable.Controls.Add(label, 1, rowIndex); - dependencyTable.Controls.Add(box, 0, rowIndex); - return isOK; - } - - void AddLabelRow(int rowIndex, string text) - { - Label label = new Label(); - label.AutoSize = true; - label.Text = text; - dependencyTable.Controls.Add(label, 0, rowIndex); - dependencyTable.SetColumnSpan(label, 2); - } - - string GetDisplayName(string identity) - { - foreach (AddIn addIn in SD.AddInTree.AddIns) { - if (addIn.Manifest.Identities.ContainsKey(identity)) - return addIn.Name; - } - return identity; - } - #endregion - - #region Install new AddIns - void InstallButtonClick(object sender, EventArgs e) - { - using (OpenFileDialog dlg = new OpenFileDialog()) { - dlg.Filter = ResourceService.GetString("AddInManager.FileFilter"); - dlg.Multiselect = true; - if (dlg.ShowDialog() == DialogResult.OK) { - if (ShowInstallableAddIns(dlg.FileNames)) { - if (runActionButton.Visible && runActionButton.Enabled) - runActionButton.PerformClick(); - } - } - } - } - - public bool ShowInstallableAddIns(IEnumerable<string> fileNames) - { - foreach (AddInControl ctl in splitContainer.Panel1.Controls) { - ctl.Selected = false; - } - UpdateActionBox(); - List<InstallableAddIn> list = new List<InstallableAddIn>(); - foreach (string file in fileNames) { - try { - // Same file-extension check is in Panel1DragEnter - switch (Path.GetExtension(file).ToLowerInvariant()) { - case ".addin": - if (FileUtility.IsBaseDirectory(FileUtility.ApplicationRootPath, file)) { - MessageService.ShowMessage("${res:AddInManager.CannotInstallIntoApplicationDirectory}"); - return false; - } - list.Add(new InstallableAddIn(file, false)); - break; - case ".sdaddin": - case ".zip": - list.Add(new InstallableAddIn(file, true)); - break; - default: - MessageService.ShowMessage("${res:AddInManager.UnknownFileFormat} " + Path.GetExtension(file)); - return false; - } - } catch (AddInLoadException ex) { - MessageService.ShowMessage("Error loading " + file + ":\n" + ex.Message); - return false; - } - } - ShowInstallableAddIns(list); - return true; - } - - IList<InstallableAddIn> shownAddInPackages; - - void ShowInstallableAddIns(IList<InstallableAddIn> addInPackages) - { - shownAddInPackages = addInPackages; - ignoreFocusChange = true; - splitContainer.Panel2Collapsed = false; - dependencyTable.Visible = false; - runActionButton.Visible = true; - uninstallButton.Visible = false; - - selectedAction = AddInAction.Install; - List<string> installAddIns = new List<string>(); - List<string> updateAddIns = new List<string>(); - foreach (InstallableAddIn addInPackage in addInPackages) { - string identity = addInPackage.AddIn.Manifest.PrimaryIdentity; - AddIn foundAddIn = null; - foreach (AddIn addIn in SD.AddInTree.AddIns) { - if (addIn.Action != AddInAction.Install - && addIn.Manifest.Identities.ContainsKey(identity)) - { - foundAddIn = addIn; - break; - } - } - if (foundAddIn != null) { - updateAddIns.Add(addInPackage.AddIn.Name); - } else { - installAddIns.Add(addInPackage.AddIn.Name); - } - } - - if (updateAddIns.Count == 0) { - actionGroupBox.Text = runActionButton.Text = ResourceService.GetString("AddInManager.ActionInstall"); - } else if (installAddIns.Count == 0) { - actionGroupBox.Text = runActionButton.Text = ResourceService.GetString("AddInManager.ActionUpdate"); - } else { - actionGroupBox.Text = runActionButton.Text = - ResourceService.GetString("AddInManager.ActionInstall") - + " + " + - ResourceService.GetString("AddInManager.ActionUpdate"); - } - List<AddIn> addInList = new List<AddIn>(); - StringBuilder b = new StringBuilder(); - if (installAddIns.Count == 1) { - b.Append("Installs the AddIn " + installAddIns[0]); - } else if (installAddIns.Count > 1) { - b.Append("Installs the AddIns " + string.Join(",", installAddIns.ToArray())); - } - if (updateAddIns.Count > 0 && installAddIns.Count > 0) - b.Append("; "); - if (updateAddIns.Count == 1) { - b.Append("Updates the AddIn " + updateAddIns[0]); - } else if (updateAddIns.Count > 1) { - b.Append("Updates the AddIns " + string.Join(",", updateAddIns.ToArray())); - } - actionDescription.Text = b.ToString(); - runActionButton.Enabled = ShowDependencies(addInList, ShowDependencyMode.Enable); - } - - void RunInstallation() - { - // install new AddIns - foreach (InstallableAddIn addInPackage in shownAddInPackages) { - string identity = addInPackage.AddIn.Manifest.PrimaryIdentity; - AddIn foundAddIn = null; - foreach (AddIn addIn in SD.AddInTree.AddIns) { - if (addIn.Manifest.Identities.ContainsKey(identity)) { - foundAddIn = addIn; - break; - } - } - if (foundAddIn != null) { - addInPackage.Install(true); - if (foundAddIn.Action != AddInAction.Enable) { - ICSharpCode.Core.AddInManager.Enable(new AddIn[] { foundAddIn }); - } - if (foundAddIn.Action != AddInAction.Install) { - foundAddIn.Action = AddInAction.Update; - } - } else { - addInPackage.Install(false); - } - } - RefreshAddInList(); - } - #endregion - - #region Uninstall AddIns - void UninstallButtonClick(object sender, EventArgs e) - { - ICSharpCode.Core.AddInManager.RemoveExternalAddIns(selected); - InstallableAddIn.Uninstall(selected); - RefreshAddInList(); - } - #endregion - - #region Drag'N'Drop - void Panel1DragEnter(object sender, DragEventArgs e) - { - if (!e.Data.GetDataPresent(DataFormats.FileDrop)) { - e.Effect = DragDropEffects.None; - return; - } - string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); - int addInCount = 0; - int packageCount = 0; - foreach (string file in files) { - switch (Path.GetExtension(file).ToLowerInvariant()) { - case ".addin": - addInCount += 1; - break; - case ".sdaddin": - case ".zip": - packageCount += 1; - break; - default: - e.Effect = DragDropEffects.None; - return; - } - } - if (addInCount == 0 && packageCount == 0) { - e.Effect = DragDropEffects.None; - } else if (addInCount == 0) { - e.Effect = DragDropEffects.Copy; - } else { - e.Effect = DragDropEffects.Link; - } - } - - void Panel1DragDrop(object sender, DragEventArgs e) - { - if (!e.Data.GetDataPresent(DataFormats.FileDrop)) - return; - ShowInstallableAddIns((string[])e.Data.GetData(DataFormats.FileDrop)); - } - #endregion - - void CloseButtonClick(object sender, EventArgs e) - { - Close(); - } - - protected override void OnClosed(EventArgs e) - { - base.OnClosed(e); - instance = null; - } - - public void TryRunAction(AddIn addIn, AddInAction action) - { - foreach (AddInControl ctl in splitContainer.Panel1.Controls) { - ctl.Selected = ctl.AddIn == addIn; - } - UpdateActionBox(); - if (selectedAction == action && runActionButton.Visible && runActionButton.Enabled) - runActionButton.PerformClick(); - } - - public void TryUninstall(AddIn addIn) - { - foreach (AddInControl ctl in splitContainer.Panel1.Controls) { - ctl.Selected = ctl.AddIn == addIn; - } - UpdateActionBox(); - if (uninstallButton.Visible && uninstallButton.Enabled) - uninstallButton.PerformClick(); - } - - void RunActionButtonClick(object sender, EventArgs e) - { - switch (selectedAction) { - case AddInAction.Disable: - for (int i = 0; i < selected.Count; i++) { - if (selected[i].Manifest.PrimaryIdentity == "ICSharpCode.AddInManager") { - MessageService.ShowMessage("${res:AddInManager.CannotDisableAddInManager}"); - selected.RemoveAt(i--); - } - } - ICSharpCode.Core.AddInManager.Disable(selected); - break; - case AddInAction.Enable: - ICSharpCode.Core.AddInManager.Enable(selected); - break; - case AddInAction.Install: - RunInstallation(); - return; - case AddInAction.Uninstall: - UninstallButtonClick(sender, e); - return; - case AddInAction.InstalledTwice: // used to cancel installation of update - InstallableAddIn.CancelUpdate(selected); - foreach (AddIn addIn in selected) { - addIn.Action = addIn.Enabled ? AddInAction.Enable : AddInAction.Disable; - } - break; - default: - throw new NotImplementedException(); - } - foreach (AddInControl ctl in splitContainer.Panel1.Controls) { - ctl.Invalidate(); - } - UpdateActionBox(); - } - - #region Windows Forms Designer generated code - /// <summary> - /// This method is required for Windows Forms designer support. - /// Do not change the method contents inside the source code editor. The Forms designer might - /// not be able to load this method if it was changed manually. - /// </summary> - private void InitializeComponent() - { - this.topPanel = new System.Windows.Forms.Panel(); - this.bottomPanel = new System.Windows.Forms.Panel(); - this.installButton = new System.Windows.Forms.Button(); - this.closeButton = new System.Windows.Forms.Button(); - this.showPreinstalledAddInsCheckBox = new System.Windows.Forms.CheckBox(); - this.splitContainer = new System.Windows.Forms.SplitContainer(); - this.actionGroupBox = new System.Windows.Forms.GroupBox(); - this.actionFlowLayoutPanel = new System.Windows.Forms.FlowLayoutPanel(); - this.actionDescription = new System.Windows.Forms.Label(); - this.dependencyTable = new System.Windows.Forms.TableLayoutPanel(); - this.dummyLabel1 = new System.Windows.Forms.Label(); - this.dummyLabel2 = new System.Windows.Forms.Label(); - this.runActionButton = new System.Windows.Forms.Button(); - this.uninstallButton = new System.Windows.Forms.Button(); - this.bottomPanel.SuspendLayout(); - this.splitContainer.Panel2.SuspendLayout(); - this.splitContainer.SuspendLayout(); - this.actionGroupBox.SuspendLayout(); - this.actionFlowLayoutPanel.SuspendLayout(); - this.dependencyTable.SuspendLayout(); - this.SuspendLayout(); - // - // topPanel - // - this.topPanel.Dock = System.Windows.Forms.DockStyle.Top; - this.topPanel.Location = new System.Drawing.Point(0, 0); - this.topPanel.Name = "topPanel"; - this.topPanel.Size = new System.Drawing.Size(460, 33); - this.topPanel.TabIndex = 1; - this.topPanel.Visible = false; - // - // bottomPanel - // - this.bottomPanel.Controls.Add(this.installButton); - this.bottomPanel.Controls.Add(this.closeButton); - this.bottomPanel.Controls.Add(this.showPreinstalledAddInsCheckBox); - this.bottomPanel.Dock = System.Windows.Forms.DockStyle.Bottom; - this.bottomPanel.Location = new System.Drawing.Point(0, 355); - this.bottomPanel.Name = "bottomPanel"; - this.bottomPanel.Size = new System.Drawing.Size(460, 35); - this.bottomPanel.TabIndex = 0; - // - // installButton - // - this.installButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.installButton.Location = new System.Drawing.Point(274, 6); - this.installButton.Name = "installButton"; - this.installButton.Size = new System.Drawing.Size(93, 23); - this.installButton.TabIndex = 1; - this.installButton.Text = "Install AddIn"; - this.installButton.UseCompatibleTextRendering = true; - this.installButton.UseVisualStyleBackColor = true; - this.installButton.Click += new System.EventHandler(this.InstallButtonClick); - // - // closeButton - // - this.closeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.closeButton.Location = new System.Drawing.Point(373, 6); - this.closeButton.Name = "closeButton"; - this.closeButton.Size = new System.Drawing.Size(75, 23); - this.closeButton.TabIndex = 2; - this.closeButton.Text = "Close"; - this.closeButton.UseCompatibleTextRendering = true; - this.closeButton.UseVisualStyleBackColor = true; - this.closeButton.Click += new System.EventHandler(this.CloseButtonClick); - // - // showPreinstalledAddInsCheckBox - // - this.showPreinstalledAddInsCheckBox.Location = new System.Drawing.Point(3, 6); - this.showPreinstalledAddInsCheckBox.Name = "showPreinstalledAddInsCheckBox"; - this.showPreinstalledAddInsCheckBox.Size = new System.Drawing.Size(169, 24); - this.showPreinstalledAddInsCheckBox.TabIndex = 0; - this.showPreinstalledAddInsCheckBox.Text = "Show preinstalled AddIns"; - this.showPreinstalledAddInsCheckBox.UseCompatibleTextRendering = true; - this.showPreinstalledAddInsCheckBox.UseVisualStyleBackColor = true; - this.showPreinstalledAddInsCheckBox.CheckedChanged += new System.EventHandler(this.ShowPreinstalledAddInsCheckBoxCheckedChanged); - // - // splitContainer - // - this.splitContainer.BackColor = System.Drawing.SystemColors.Window; - this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; - this.splitContainer.Location = new System.Drawing.Point(0, 33); - this.splitContainer.Name = "splitContainer"; - // - // splitContainer.Panel1 - // - this.splitContainer.Panel1.AllowDrop = true; - this.splitContainer.Panel1.AutoScroll = true; - this.splitContainer.Panel1.DragDrop += new System.Windows.Forms.DragEventHandler(this.Panel1DragDrop); - this.splitContainer.Panel1.DragEnter += new System.Windows.Forms.DragEventHandler(this.Panel1DragEnter); - this.splitContainer.Panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.OnSplitContainerPanel1Paint); - this.splitContainer.Panel1MinSize = 100; - // - // splitContainer.Panel2 - // - this.splitContainer.Panel2.Controls.Add(this.actionGroupBox); - this.splitContainer.Panel2MinSize = 100; - this.splitContainer.Size = new System.Drawing.Size(460, 322); - this.splitContainer.SplitterDistance = 248; - this.splitContainer.TabIndex = 2; - // - // actionGroupBox - // - this.actionGroupBox.Controls.Add(this.actionFlowLayoutPanel); - this.actionGroupBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.actionGroupBox.Location = new System.Drawing.Point(0, 0); - this.actionGroupBox.Name = "actionGroupBox"; - this.actionGroupBox.Size = new System.Drawing.Size(208, 322); - this.actionGroupBox.TabIndex = 0; - this.actionGroupBox.TabStop = false; - this.actionGroupBox.Text = "actionGroupBox"; - this.actionGroupBox.UseCompatibleTextRendering = true; - // - // actionFlowLayoutPanel - // - this.actionFlowLayoutPanel.AutoScroll = true; - this.actionFlowLayoutPanel.Controls.Add(this.actionDescription); - this.actionFlowLayoutPanel.Controls.Add(this.dependencyTable); - this.actionFlowLayoutPanel.Controls.Add(this.runActionButton); - this.actionFlowLayoutPanel.Controls.Add(this.uninstallButton); - this.actionFlowLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.actionFlowLayoutPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; - this.actionFlowLayoutPanel.ForeColor = System.Drawing.SystemColors.WindowText; - this.actionFlowLayoutPanel.Location = new System.Drawing.Point(3, 17); - this.actionFlowLayoutPanel.Name = "actionFlowLayoutPanel"; - this.actionFlowLayoutPanel.Size = new System.Drawing.Size(202, 302); - this.actionFlowLayoutPanel.TabIndex = 0; - this.actionFlowLayoutPanel.WrapContents = false; - // - // actionDescription - // - this.actionDescription.AutoSize = true; - this.actionDescription.Location = new System.Drawing.Point(3, 0); - this.actionDescription.Name = "actionDescription"; - this.actionDescription.Size = new System.Drawing.Size(90, 18); - this.actionDescription.TabIndex = 0; - this.actionDescription.Text = "actionDescription"; - this.actionDescription.UseCompatibleTextRendering = true; - // - // dependencyTable - // - this.dependencyTable.AutoSize = true; - this.dependencyTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.dependencyTable.ColumnCount = 2; - this.dependencyTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.dependencyTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.dependencyTable.Controls.Add(this.dummyLabel1, 1, 0); - this.dependencyTable.Controls.Add(this.dummyLabel2, 1, 1); - this.dependencyTable.Location = new System.Drawing.Point(3, 21); - this.dependencyTable.Name = "dependencyTable"; - this.dependencyTable.RowCount = 2; - this.dependencyTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.dependencyTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.dependencyTable.Size = new System.Drawing.Size(55, 36); - this.dependencyTable.TabIndex = 1; - // - // dummyLabel1 - // - this.dummyLabel1.AutoSize = true; - this.dummyLabel1.Location = new System.Drawing.Point(23, 0); - this.dummyLabel1.Name = "dummyLabel1"; - this.dummyLabel1.Size = new System.Drawing.Size(29, 18); - this.dummyLabel1.TabIndex = 0; - this.dummyLabel1.Text = "dep1"; - this.dummyLabel1.UseCompatibleTextRendering = true; - // - // dummyLabel2 - // - this.dummyLabel2.AutoSize = true; - this.dummyLabel2.Location = new System.Drawing.Point(23, 18); - this.dummyLabel2.Name = "dummyLabel2"; - this.dummyLabel2.Size = new System.Drawing.Size(29, 18); - this.dummyLabel2.TabIndex = 1; - this.dummyLabel2.Text = "dep2"; - this.dummyLabel2.UseCompatibleTextRendering = true; - // - // runActionButton - // - this.runActionButton.AutoSize = true; - this.runActionButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.runActionButton.Location = new System.Drawing.Point(3, 63); - this.runActionButton.MinimumSize = new System.Drawing.Size(91, 25); - this.runActionButton.Name = "runActionButton"; - this.runActionButton.Size = new System.Drawing.Size(91, 25); - this.runActionButton.TabIndex = 2; - this.runActionButton.Text = "runAction"; - this.runActionButton.UseCompatibleTextRendering = true; - this.runActionButton.UseVisualStyleBackColor = true; - this.runActionButton.Click += new System.EventHandler(this.RunActionButtonClick); - // - // uninstallButton - // - this.uninstallButton.AutoSize = true; - this.uninstallButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.uninstallButton.Location = new System.Drawing.Point(3, 94); - this.uninstallButton.MinimumSize = new System.Drawing.Size(91, 25); - this.uninstallButton.Name = "uninstallButton"; - this.uninstallButton.Size = new System.Drawing.Size(91, 25); - this.uninstallButton.TabIndex = 3; - this.uninstallButton.Text = "Uninstall"; - this.uninstallButton.UseCompatibleTextRendering = true; - this.uninstallButton.UseVisualStyleBackColor = true; - this.uninstallButton.Click += new System.EventHandler(this.UninstallButtonClick); - // - // ManagerForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(460, 390); - this.Controls.Add(this.splitContainer); - this.Controls.Add(this.bottomPanel); - this.Controls.Add(this.topPanel); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; - this.MinimumSize = new System.Drawing.Size(250, 200); - this.Name = "ManagerForm"; - this.Text = "AddIn Manager"; - this.bottomPanel.ResumeLayout(false); - this.splitContainer.Panel2.ResumeLayout(false); - this.splitContainer.ResumeLayout(false); - this.actionGroupBox.ResumeLayout(false); - this.actionFlowLayoutPanel.ResumeLayout(false); - this.actionFlowLayoutPanel.PerformLayout(); - this.dependencyTable.ResumeLayout(false); - this.dependencyTable.PerformLayout(); - this.ResumeLayout(false); - } - private System.Windows.Forms.Label dummyLabel2; - private System.Windows.Forms.Label dummyLabel1; - private System.Windows.Forms.CheckBox showPreinstalledAddInsCheckBox; - private System.Windows.Forms.Button installButton; - private System.Windows.Forms.Button uninstallButton; - private System.Windows.Forms.Button runActionButton; - private System.Windows.Forms.TableLayoutPanel dependencyTable; - private System.Windows.Forms.Label actionDescription; - private System.Windows.Forms.FlowLayoutPanel actionFlowLayoutPanel; - private System.Windows.Forms.GroupBox actionGroupBox; - private System.Windows.Forms.Button closeButton; - private System.Windows.Forms.SplitContainer splitContainer; - private System.Windows.Forms.Panel bottomPanel; - private System.Windows.Forms.Panel topPanel; - #endregion - } -} diff --git a/src/AddIns/Misc/AddInManager/Project/Src/ManagerForm.resx b/src/AddIns/Misc/AddInManager/Project/Src/ManagerForm.resx deleted file mode 100644 index 7080a7d118..0000000000 --- a/src/AddIns/Misc/AddInManager/Project/Src/ManagerForm.resx +++ /dev/null @@ -1,120 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<root> - <!-- - Microsoft ResX Schema - - Version 2.0 - - The primary goals of this format is to allow a simple XML format - that is mostly human readable. The generation and parsing of the - various data types are done through the TypeConverter classes - associated with the data types. - - Example: - - ... ado.net/XML headers & schema ... - <resheader name="resmimetype">text/microsoft-resx</resheader> - <resheader name="version">2.0</resheader> - <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> - <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> - <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> - <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> - <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> - <value>[base64 mime encoded serialized .NET Framework object]</value> - </data> - <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> - <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> - <comment>This is a comment</comment> - </data> - - There are any number of "resheader" rows that contain simple - name/value pairs. - - Each data row contains a name, and value. The row also contains a - type or mimetype. Type corresponds to a .NET class that support - text/value conversion through the TypeConverter architecture. - Classes that don't support this are serialized and stored with the - mimetype set. - - The mimetype is used for serialized objects, and tells the - ResXResourceReader how to depersist the object. This is currently not - extensible. For a given mimetype the value must be set accordingly: - - Note - application/x-microsoft.net.object.binary.base64 is the format - that the ResXResourceWriter will generate, however the reader can - read any of the formats listed below. - - mimetype: application/x-microsoft.net.object.binary.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.soap.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Soap.SoapFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.bytearray.base64 - value : The object must be serialized into a byte array - : using a System.ComponentModel.TypeConverter - : and then encoded with base64 encoding. - --> - <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> - <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> - <xsd:element name="root" msdata:IsDataSet="true"> - <xsd:complexType> - <xsd:choice maxOccurs="unbounded"> - <xsd:element name="metadata"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" /> - </xsd:sequence> - <xsd:attribute name="name" use="required" type="xsd:string" /> - <xsd:attribute name="type" type="xsd:string" /> - <xsd:attribute name="mimetype" type="xsd:string" /> - <xsd:attribute ref="xml:space" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="assembly"> - <xsd:complexType> - <xsd:attribute name="alias" type="xsd:string" /> - <xsd:attribute name="name" type="xsd:string" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="data"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> - <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> - <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> - <xsd:attribute ref="xml:space" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="resheader"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" /> - </xsd:complexType> - </xsd:element> - </xsd:choice> - </xsd:complexType> - </xsd:element> - </xsd:schema> - <resheader name="resmimetype"> - <value>text/microsoft-resx</value> - </resheader> - <resheader name="version"> - <value>2.0</value> - </resheader> - <resheader name="reader"> - <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> - <resheader name="writer"> - <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> -</root> \ No newline at end of file diff --git a/src/AddIns/Misc/AddInManager/RequiredLibraries/ICSharpCode.SharpZipLib.dll b/src/AddIns/Misc/AddInManager/RequiredLibraries/ICSharpCode.SharpZipLib.dll deleted file mode 100755 index 77bafe8ba867a1618b8735200289f6fad68b825e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143360 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 diff --git a/src/Setup/Files.wxs b/src/Setup/Files.wxs index 09da845820..6f93831496 100644 --- a/src/Setup/Files.wxs +++ b/src/Setup/Files.wxs @@ -1377,15 +1377,6 @@ </Component> </Directory> <Directory Id="MiscAddInsFolder" Name="Misc"> - <Directory Id="AddInManagerFolder" Name="AddInManager"> - <Component Guid="AA44E205-CCE8-46F3-B84B-D031BDB3570D" Id="AddInManagerSharpZipLibDll" DiskId="1"> - <File Source="..\..\AddIns\Misc\AddInManager\ICSharpCode.SharpZipLib.dll" Id="ICSharpCode.SharpZipLib.dll" Name="ICSharpCode.SharpZipLib.dll" Assembly=".net" AssemblyApplication="ICSharpCode.SharpZipLib.dll" AssemblyManifest="ICSharpCode.SharpZipLib.dll" KeyPath="yes" /> - </Component> - <Component Guid="DCC79FDD-A759-4CEE-A62E-C715738ABB9A" Id="AddInManagerFiles" DiskId="1"> - <File Source="..\..\AddIns\Misc\AddInManager\AddInManager.addin" Id="AddInManager.addin" Name="AddInManager.addin" /> - <File Source="..\..\AddIns\Misc\AddInManager\ICSharpCode.AddInManager.dll" Id="ICSharpCode.AddInManager.dll" Name="ICSharpCode.AddInManager.dll" Assembly=".net" AssemblyApplication="ICSharpCode.AddInManager.dll" AssemblyManifest="ICSharpCode.AddInManager.dll" KeyPath="yes" /> - </Component> - </Directory> <Directory Id="AddInScoutFolder" Name="AddinScout"> <Component Guid="815D3708-5A0A-4B8E-BB72-66DF8E851917" Id="AddInScoutFiles" DiskId="1"> <File Source="..\..\AddIns\Misc\AddinScout\AddinScout.dll" Id="AddinScout.dll" Name="AddinScout.dll" Assembly=".net" AssemblyApplication="AddinScout.dll" AssemblyManifest="AddinScout.dll" KeyPath="yes" /> diff --git a/src/Setup/Setup.wxs b/src/Setup/Setup.wxs index d18a7ad3cc..d62ba3663b 100644 --- a/src/Setup/Setup.wxs +++ b/src/Setup/Setup.wxs @@ -309,8 +309,6 @@ <ComponentRef Id="WorkflowDesignerDll"/>--> <ComponentRef Id="XmlEditorFiles"/> - <ComponentRef Id="AddInManagerFiles"/> - <ComponentRef Id="AddInManagerSharpZipLibDll"/> <ComponentRef Id="AddInManager2Addin"/> <ComponentRef Id="ICSharpCodeAddInManager2Dll"/> <ComponentRef Id="AddInManager2ICSharpCodeSharpZipLibDll"/>