diff --git a/source/ch/cyberduck/App.config b/App.config similarity index 100% rename from source/ch/cyberduck/App.config rename to App.config diff --git a/source/ch/cyberduck/Bundle.wxs b/Bundle.wxs similarity index 100% rename from source/ch/cyberduck/Bundle.wxs rename to Bundle.wxs diff --git a/source/ch/cyberduck/CLI-WiX-Bootstrapper.wixproj b/CLI-WiX-Bootstrapper.wixproj similarity index 97% rename from source/ch/cyberduck/CLI-WiX-Bootstrapper.wixproj rename to CLI-WiX-Bootstrapper.wixproj index de5cf58f85..8bdc8489e4 100644 --- a/source/ch/cyberduck/CLI-WiX-Bootstrapper.wixproj +++ b/CLI-WiX-Bootstrapper.wixproj @@ -1,82 +1,82 @@ - - - - Debug - x86 - 3.9 - ef87de0e-bc36-4d3c-8852-c8ad11d01f04 - 2.0 - duck-$(Version) - Bundle - true - $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets - $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets - - - ..\..\..\build\ - obj\$(Configuration)\ - Debug - - - ..\..\..\build\release\ - obj\$(Configuration)\ - - - - - - - $(WixExtDir)\WixNetFxExtension.dll - WixNetFxExtension - - - $(WixExtDir)\WixBalExtension.dll - WixBalExtension - - - - - CLI-WiX - {f6975079-f730-4a31-9909-de536e524764} - True - True - Binaries;Content;Satellites - INSTALLFOLDER - - - - - - - - - - $(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0@InstallationFolder) - $(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits\Installed Roots@KitsRoot10) - - - - - - $(FrameworkSdkPath)bin\signtool.exe - $(WinSDK)\bin\x86\signtool.exe - - - - - - - - - - - - + + + + Debug + x86 + 3.9 + ef87de0e-bc36-4d3c-8852-c8ad11d01f04 + 2.0 + duck-$(Version) + Bundle + true + $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets + $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets + + + ..\..\..\build\ + obj\$(Configuration)\ + Debug + + + ..\..\..\build\release\ + obj\$(Configuration)\ + + + + + + + $(WixExtDir)\WixNetFxExtension.dll + WixNetFxExtension + + + $(WixExtDir)\WixBalExtension.dll + WixBalExtension + + + + + CLI-WiX + {f6975079-f730-4a31-9909-de536e524764} + True + True + Binaries;Content;Satellites + INSTALLFOLDER + + + + + + + + + + $(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0@InstallationFolder) + $(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits\Installed Roots@KitsRoot10) + + + + + + $(FrameworkSdkPath)bin\signtool.exe + $(WinSDK)\bin\x86\signtool.exe + + + + + + + + + + + + \ No newline at end of file diff --git a/source/ch/cyberduck/CLI-WiX.wixproj b/Cyberduck CLI-WiX.wixproj similarity index 100% rename from source/ch/cyberduck/CLI-WiX.wixproj rename to Cyberduck CLI-WiX.wixproj diff --git a/source/ch/cyberduck/CLI.csproj b/Cyberduck CLI.csproj similarity index 67% rename from source/ch/cyberduck/CLI.csproj rename to Cyberduck CLI.csproj index f8385dcb5c..08c85f3825 100644 --- a/source/ch/cyberduck/CLI.csproj +++ b/Cyberduck CLI.csproj @@ -1,145 +1,145 @@ - - - - - Debug - x86 - {4B14000D-F435-4ECA-A119-7AEF03792DEE} - Exe - Properties - Ch.Cyberduck - duck - 1.0.0.%2a - v4.0 - 512 - - - Ch.Cyberduck.Cli.WindowsTerminal - - - true - ..\..\..\build\ - DEBUG;TRACE - true - full - x86 - prompt - 1 - - - ..\..\..\build\ - TRACE - true - true - pdbonly - x86 - prompt - - - - False - ..\..\..\build\Cyberduck.Core.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Beans.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Charsets.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Core.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Jdbc.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Localedata.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Management.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Naming.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Security.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.SwingAWT.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Text.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Util.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.API.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Bind.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Parse.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Transform.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.XPath.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.Runtime.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.Runtime.JNI.dll - - - - - - - - - - - - - - - - - {ac161b73-0b4b-4a32-b0d7-205ac89d83a5} - Windows Core - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Debug + x86 + {4B14000D-F435-4ECA-A119-7AEF03792DEE} + Exe + Properties + Ch.Cyberduck + duck + 1.0.0.%2a + v4.0 + 512 + + + Ch.Cyberduck.Cli.WindowsTerminal + + + true + cli\target + DEBUG;TRACE + true + full + x86 + prompt + 1 + + + cli\target + TRACE + true + true + pdbonly + x86 + prompt + + + + False + core\target\Cyberduck.Core.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Beans.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Charsets.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Core.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Jdbc.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Localedata.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Management.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Naming.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Security.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.SwingAWT.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Text.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Util.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.API.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Bind.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Parse.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Transform.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.XPath.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.Runtime.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.Runtime.JNI.dll + + + + + + + + + + + + + + + + + {ac161b73-0b4b-4a32-b0d7-205ac89d83a5} + Windows Core + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Cyberduck Core.csproj b/Cyberduck Core.csproj new file mode 100644 index 0000000000..4decbf31da --- /dev/null +++ b/Cyberduck Core.csproj @@ -0,0 +1,158 @@ + + + + + Debug + x86 + {AC161B73-0B4B-4A32-B0D7-205AC89D83A5} + Library + Properties + Core + Cyberduck.Core.Native + v4.0 + 512 + + + true + target + DEBUG;TRACE + true + full + x86 + prompt + 1 + + + target + TRACE + true + true + pdbonly + x86 + prompt + + + + core\target\Cyberduck.Core.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Beans.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Charsets.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Core.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Jdbc.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Localedata.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Security.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Text.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.API.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Bind.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Parse.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Transform.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.XPath.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.Runtime.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.Runtime.JNI.dll + + + + + + + + + + + + + + + {18FBED6D-F2B7-4EC8-A4A4-46282E635308} + 1 + 0 + 0 + tlbimp + False + False + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/ch/cyberduck/Test.csproj b/Cyberduck Test.csproj similarity index 78% rename from test/ch/cyberduck/Test.csproj rename to Cyberduck Test.csproj index 1ff7f07a88..d4cf4660b8 100644 --- a/test/ch/cyberduck/Test.csproj +++ b/Cyberduck Test.csproj @@ -1,103 +1,102 @@ - - - - Debug - AnyCPU - 8.0.30703 - 2.0 - {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91} - Library - Properties - Ch.Cyberduck - Test - v4.0 - 512 - - - true - full - false - ..\..\..\build\Debug\AnyCPU\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - ..\..\..\build\ - TRACE - prompt - 4 - - - true - ..\..\..\build\ - DEBUG;TRACE - full - x86 - prompt - false - false - false - - - ..\..\..\build\ - TRACE - true - pdbonly - x86 - prompt - true - - - - ..\..\..\build\Cyberduck.Core.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Core.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.Runtime.dll - - - False - ..\..\..\lib\ext\nunit.framework.dll - - - - - - - - - - - - - - - - - - - {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30} - Cyberduck - - - {ac161b73-0b4b-4a32-b0d7-205ac89d83a5} - Windows Core - - - - - - - + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91} + Library + Properties + Ch.Cyberduck + Test + v4.0 + 512 + + + true + full + false + target\Debug\AnyCPU\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + target\ + TRACE + prompt + 4 + + + true + target\ + DEBUG;TRACE + full + x86 + prompt + false + false + false + + + target\ + TRACE + true + pdbonly + x86 + prompt + true + + + + core\target\Cyberduck.Core.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Core.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.Runtime.dll + + + False + lib\ext\nunit.framework.dll + + + + + + + + + + + + + + + + + + {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30} + Cyberduck + + + {ac161b73-0b4b-4a32-b0d7-205ac89d83a5} + Cyberduck Core + + + + + + + \ No newline at end of file diff --git a/Cyberduck.csproj b/Cyberduck.csproj new file mode 100644 index 0000000000..2621d91cbe --- /dev/null +++ b/Cyberduck.csproj @@ -0,0 +1,663 @@ + + + + Debug + x86 + 9.0.21022 + 2.0 + {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30} + WinExe + Library + Properties + Ch.Cyberduck + Cyberduck + v4.0 + 512 + cyberduck-application.ico + LocalIntranet + false + properties\app.manifest + false + true + + + + + 3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + + + Ch.Cyberduck.Ui.Controller.MainController + + + true + windows\target\ + DEBUG;TRACE + true + full + x86 + prompt + 1 + + + windows\target\ + TRACE + true + true + pdbonly + x86 + prompt + + + + + windows\target\dll + TRACE + true + true + pdbonly + x86 + prompt + + + + False + windows\target\ActiveButtons.dll + + + False + windows\target\AutomaticUpdater.dll + + + False + core\target\Cyberduck.Core.dll + + + windows\target\lib\CustomOpenFileFolderDialog.dll + + + windows\target\lib\ExceptionReporter.WinForms.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Beans.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Charsets.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Core.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Jdbc.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Localedata.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Management.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Naming.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Security.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.SwingAWT.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Text.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Util.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.API.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Bind.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Parse.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Transform.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.XPath.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.Runtime.dll + + + lib\ikvm-8.1.5717.0\bin\IKVM.Runtime.JNI.dll + + + + False + windows\target\ObjectListView.dll + + + False + windows\target\StructureMap.dll + + + + + windows\target\System.Core.dll + + + + + + + + + + windows\target\VistaBridgeLibrary.dll + + + windows\target\Windows7.DesktopIntegration.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Form + + + CommandForm.cs + + + Component + + + Component + + + Component + + + UserControl + + + SearchTextBox2.cs + + + UserControl + + + TransferControl.cs + + + + Component + + + Form + + + CreateSymlinkPromptForm.cs + + + + Form + + + GotoPromptForm.cs + + + + + Form + + + UpdateForm.cs + + + + ResXFileCodeGenerator + Designer + ResourcesBundle.Designer.cs + + + AboutBox.cs + Designer + + + ActivityForm.cs + Designer + + + BaseForm.cs + Designer + + + BookmarkForm.cs + Designer + + + BrowserForm.cs + Designer + + + CommandForm.cs + + + ConnectionForm.cs + Designer + + + TransferControl.cs + Designer + + + CreateSymlinkPromptForm.cs + Designer + + + CreateFilePromptForm.cs + Designer + + + DonationForm.cs + Designer + + + ErrorForm.cs + Designer + + + InfoForm.cs + Designer + + + LoginForm.cs + Designer + + + NewFolderPromptForm.cs + Designer + + + PreferencesForm.cs + Designer + + + PromptForm.cs + Designer + + + TaskDialogForm.cs + Designer + + + TransferForm.cs + Designer + + + TransferPromptForm.cs + Designer + + + UpdateForm.cs + + + + Designer + + + True + True + Settings.settings + + + + True + True + ResourcesBundle.resx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Component + + + Component + + + Component + + + + + Component + + + + + + + + + + + + + Form + + + AboutBox.cs + + + Form + + + ActivityForm.cs + + + Form + + + BaseForm.cs + + + Form + + + BookmarkForm.cs + + + Form + + + BrowserForm.cs + + + Form + + + ConnectionForm.cs + + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + SearchTextBox.cs + + + Form + + + CreateFilePromptForm.cs + + + Form + + + DonationForm.cs + + + Form + + + DuplicateFilePromptForm.cs + + + Form + + + ErrorForm.cs + + + Form + + + InfoForm.cs + + + Form + + + LoginForm.cs + + + Form + + + NewFolderPromptForm.cs + + + Form + + + PreferencesForm.cs + + + Form + + + PromptForm.cs + + + Component + + + CommandButton.cs + + + + Form + + + TaskDialogForm.cs + + + + + Component + + + + + Form + + + ToolbarBaseForm.cs + + + Form + + + TransferForm.cs + + + Form + + + TransferPromptForm.cs + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + {18FBED6D-F2B7-4EC8-A4A4-46282E635308} + 1 + 0 + 0 + tlbimp + False + False + + + + + {ac161b73-0b4b-4a32-b0d7-205ac89d83a5} + Cyberduck Core + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + if exist "$(TargetPath).locked" del "$(TargetPath).locked" + if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked + + + \ No newline at end of file diff --git a/source/ch/cyberduck/Cyberduck.sln b/Cyberduck.sln similarity index 88% rename from source/ch/cyberduck/Cyberduck.sln rename to Cyberduck.sln index a135e16d62..65e82c1006 100644 --- a/source/ch/cyberduck/Cyberduck.sln +++ b/Cyberduck.sln @@ -1,94 +1,94 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.31101.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cyberduck", "Cyberduck.csproj", "{04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test", "..\..\..\test\ch\cyberduck\Test.csproj", "{18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CLI", "CLI.csproj", "{4B14000D-F435-4ECA-A119-7AEF03792DEE}" -EndProject -Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "CLI-WiX", "CLI-WiX.wixproj", "{F6975079-F730-4A31-9909-DE536E524764}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Windows Core", "Windows Core.csproj", "{AC161B73-0B4B-4A32-B0D7-205AC89D83A5}" -EndProject -Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "CLI-WiX-Bootstrapper", "CLI-WiX-Bootstrapper.wixproj", "{EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}" -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 - {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Debug|Any CPU.ActiveCfg = Debug|x86 - {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Debug|x86.ActiveCfg = Debug|x86 - {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Debug|x86.Build.0 = Debug|x86 - {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Release|Any CPU.ActiveCfg = Release|x86 - {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Release|Mixed Platforms.Build.0 = Release|x86 - {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Release|x86.ActiveCfg = Release|x86 - {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Release|x86.Build.0 = Release|x86 - {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Debug|Any CPU.Build.0 = Debug|Any CPU - {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Debug|x86.ActiveCfg = Debug|x86 - {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Debug|x86.Build.0 = Debug|x86 - {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Release|Any CPU.ActiveCfg = Release|Any CPU - {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Release|Any CPU.Build.0 = Release|Any CPU - {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Release|Mixed Platforms.Build.0 = Release|x86 - {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Release|x86.ActiveCfg = Release|x86 - {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Release|x86.Build.0 = Release|x86 - {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Debug|Any CPU.ActiveCfg = Debug|x86 - {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Debug|x86.ActiveCfg = Debug|x86 - {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Debug|x86.Build.0 = Debug|x86 - {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Release|Any CPU.ActiveCfg = Release|x86 - {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Release|Mixed Platforms.Build.0 = Release|x86 - {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Release|x86.ActiveCfg = Release|x86 - {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Release|x86.Build.0 = Release|x86 - {F6975079-F730-4A31-9909-DE536E524764}.Debug|Any CPU.ActiveCfg = Debug|x86 - {F6975079-F730-4A31-9909-DE536E524764}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {F6975079-F730-4A31-9909-DE536E524764}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {F6975079-F730-4A31-9909-DE536E524764}.Debug|x86.ActiveCfg = Debug|x86 - {F6975079-F730-4A31-9909-DE536E524764}.Debug|x86.Build.0 = Debug|x86 - {F6975079-F730-4A31-9909-DE536E524764}.Release|Any CPU.ActiveCfg = Release|x86 - {F6975079-F730-4A31-9909-DE536E524764}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {F6975079-F730-4A31-9909-DE536E524764}.Release|Mixed Platforms.Build.0 = Release|x86 - {F6975079-F730-4A31-9909-DE536E524764}.Release|x86.ActiveCfg = Release|x86 - {F6975079-F730-4A31-9909-DE536E524764}.Release|x86.Build.0 = Release|x86 - {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Debug|Any CPU.ActiveCfg = Debug|x86 - {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Debug|x86.ActiveCfg = Debug|x86 - {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Debug|x86.Build.0 = Debug|x86 - {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Release|Any CPU.ActiveCfg = Release|x86 - {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Release|Mixed Platforms.Build.0 = Release|x86 - {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Release|x86.ActiveCfg = Release|x86 - {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Release|x86.Build.0 = Release|x86 - {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Debug|Any CPU.ActiveCfg = Debug|x86 - {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Debug|x86.ActiveCfg = Debug|x86 - {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Debug|x86.Build.0 = Debug|x86 - {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Release|Any CPU.ActiveCfg = Release|x86 - {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Release|Mixed Platforms.Build.0 = Release|x86 - {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Release|x86.ActiveCfg = Release|x86 - {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.31101.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cyberduck", "Cyberduck.csproj", "{04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cyberduck Test", "..\..\..\test\ch\cyberduck\Cyberduck Test.csproj", "{18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cyberduck CLI", "Cyberduck CLI.csproj", "{4B14000D-F435-4ECA-A119-7AEF03792DEE}" +EndProject +Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Cyberduck CLI-WiX", "Cyberduck CLI-WiX.wixproj", "{F6975079-F730-4A31-9909-DE536E524764}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cyberduck Core", "Cyberduck Core.csproj", "{AC161B73-0B4B-4A32-B0D7-205AC89D83A5}" +EndProject +Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Cyberduck CLI-WiX-Bootstrapper", "Cyberduck CLI-WiX-Bootstrapper.wixproj", "{EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}" +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 + {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Debug|Any CPU.ActiveCfg = Debug|x86 + {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Debug|x86.ActiveCfg = Debug|x86 + {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Debug|x86.Build.0 = Debug|x86 + {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Release|Any CPU.ActiveCfg = Release|x86 + {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Release|Mixed Platforms.Build.0 = Release|x86 + {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Release|x86.ActiveCfg = Release|x86 + {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Release|x86.Build.0 = Release|x86 + {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Debug|Any CPU.Build.0 = Debug|Any CPU + {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Debug|x86.ActiveCfg = Debug|x86 + {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Debug|x86.Build.0 = Debug|x86 + {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Release|Any CPU.ActiveCfg = Release|Any CPU + {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Release|Any CPU.Build.0 = Release|Any CPU + {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Release|Mixed Platforms.Build.0 = Release|x86 + {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Release|x86.ActiveCfg = Release|x86 + {18C4C52D-F639-4A5E-A8B6-FC2950C8DC91}.Release|x86.Build.0 = Release|x86 + {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Debug|Any CPU.ActiveCfg = Debug|x86 + {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Debug|x86.ActiveCfg = Debug|x86 + {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Debug|x86.Build.0 = Debug|x86 + {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Release|Any CPU.ActiveCfg = Release|x86 + {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Release|Mixed Platforms.Build.0 = Release|x86 + {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Release|x86.ActiveCfg = Release|x86 + {4B14000D-F435-4ECA-A119-7AEF03792DEE}.Release|x86.Build.0 = Release|x86 + {F6975079-F730-4A31-9909-DE536E524764}.Debug|Any CPU.ActiveCfg = Debug|x86 + {F6975079-F730-4A31-9909-DE536E524764}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {F6975079-F730-4A31-9909-DE536E524764}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {F6975079-F730-4A31-9909-DE536E524764}.Debug|x86.ActiveCfg = Debug|x86 + {F6975079-F730-4A31-9909-DE536E524764}.Debug|x86.Build.0 = Debug|x86 + {F6975079-F730-4A31-9909-DE536E524764}.Release|Any CPU.ActiveCfg = Release|x86 + {F6975079-F730-4A31-9909-DE536E524764}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {F6975079-F730-4A31-9909-DE536E524764}.Release|Mixed Platforms.Build.0 = Release|x86 + {F6975079-F730-4A31-9909-DE536E524764}.Release|x86.ActiveCfg = Release|x86 + {F6975079-F730-4A31-9909-DE536E524764}.Release|x86.Build.0 = Release|x86 + {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Debug|Any CPU.ActiveCfg = Debug|x86 + {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Debug|x86.ActiveCfg = Debug|x86 + {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Debug|x86.Build.0 = Debug|x86 + {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Release|Any CPU.ActiveCfg = Release|x86 + {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Release|Mixed Platforms.Build.0 = Release|x86 + {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Release|x86.ActiveCfg = Release|x86 + {AC161B73-0B4B-4A32-B0D7-205AC89D83A5}.Release|x86.Build.0 = Release|x86 + {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Debug|Any CPU.ActiveCfg = Debug|x86 + {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Debug|x86.ActiveCfg = Debug|x86 + {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Debug|x86.Build.0 = Debug|x86 + {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Release|Any CPU.ActiveCfg = Release|x86 + {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Release|Mixed Platforms.Build.0 = Release|x86 + {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Release|x86.ActiveCfg = Release|x86 + {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Cyberduck.xcodeproj/project.pbxproj b/Cyberduck.xcodeproj/project.pbxproj index 89b6352c28..7747a05f97 100644 --- a/Cyberduck.xcodeproj/project.pbxproj +++ b/Cyberduck.xcodeproj/project.pbxproj @@ -11,41 +11,41 @@ 470168500EED9EB7005E2CCF /* Mosso.strings in Resources */ = {isa = PBXBuildFile; fileRef = 470168320EED9EB7005E2CCF /* Mosso.strings */; }; 47022C231018663600488C19 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47022C221018663600488C19 /* CoreServices.framework */; }; 4704C3A91664F94F00B17020 /* JavaNativeFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4704C3A81664F94F00B17020 /* JavaNativeFoundation.framework */; }; - 4704C3AB1664F96400B17020 /* JavaNativeFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4704C3A81664F94F00B17020 /* JavaNativeFoundation.framework */; }; - 4704C3AC1664F96700B17020 /* JavaNativeFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4704C3A81664F94F00B17020 /* JavaNativeFoundation.framework */; }; - 4704C3AD1664FB2E00B17020 /* JavaNativeFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4704C3A81664F94F00B17020 /* JavaNativeFoundation.framework */; }; - 4704C3AE1664FB4A00B17020 /* JavaNativeFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4704C3A81664F94F00B17020 /* JavaNativeFoundation.framework */; }; - 4704C3AF1664FB4F00B17020 /* JavaNativeFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4704C3A81664F94F00B17020 /* JavaNativeFoundation.framework */; }; - 4704C3B01664FB5300B17020 /* JavaNativeFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4704C3A81664F94F00B17020 /* JavaNativeFoundation.framework */; }; - 4704C3B21664FCB300B17020 /* JavaNativeFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4704C3A81664F94F00B17020 /* JavaNativeFoundation.framework */; }; - 4704C3B41664FD0F00B17020 /* JavaNativeFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4704C3A81664F94F00B17020 /* JavaNativeFoundation.framework */; }; + 4705DFD91C037A52002466FA /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 474522C51076B68E00823467 /* ApplicationServices.framework */; }; + 4705DFDA1C037A5E002466FA /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 479BF77D1725A68C006854BF /* IOKit.framework */; }; + 4705DFDC1C037A6D002466FA /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4705DFDB1C037A6D002466FA /* SystemConfiguration.framework */; }; + 4705DFF71C037AB5002466FA /* FinderSidebarService.m in Sources */ = {isa = PBXBuildFile; fileRef = 4705DFDD1C037AB5002466FA /* FinderSidebarService.m */; }; + 4705DFF81C037AB5002466FA /* FinderSidebarService.h in Headers */ = {isa = PBXBuildFile; fileRef = 4705DFDE1C037AB5002466FA /* FinderSidebarService.h */; }; + 4705DFF91C037AB5002466FA /* LaunchServicesApplicationFinder.m in Sources */ = {isa = PBXBuildFile; fileRef = 4705DFDF1C037AB5002466FA /* LaunchServicesApplicationFinder.m */; }; + 4705DFFA1C037AB5002466FA /* EMKeychainItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 4705DFE01C037AB5002466FA /* EMKeychainItem.h */; }; + 4705DFFB1C037AB5002466FA /* EMKeychainItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 4705DFE11C037AB5002466FA /* EMKeychainItem.m */; }; + 4705DFFC1C037AB5002466FA /* EMKeychainProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4705DFE21C037AB5002466FA /* EMKeychainProxy.h */; }; + 4705DFFD1C037AB5002466FA /* EMKeychainProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4705DFE31C037AB5002466FA /* EMKeychainProxy.m */; }; + 4705DFFE1C037AB5002466FA /* FinderLocal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4705DFE41C037AB5002466FA /* FinderLocal.h */; }; + 4705DFFF1C037AB5002466FA /* FinderLocal.m in Sources */ = {isa = PBXBuildFile; fileRef = 4705DFE51C037AB5002466FA /* FinderLocal.m */; }; + 4705E0001C037AB5002466FA /* FoundationProgressIconService.h in Headers */ = {isa = PBXBuildFile; fileRef = 4705DFE61C037AB5002466FA /* FoundationProgressIconService.h */; }; + 4705E0011C037AB5002466FA /* FoundationProgressIconService.m in Sources */ = {isa = PBXBuildFile; fileRef = 4705DFE71C037AB5002466FA /* FoundationProgressIconService.m */; }; + 4705E0021C037AB5002466FA /* IOKitSleepPreventer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4705DFE81C037AB5002466FA /* IOKitSleepPreventer.h */; }; + 4705E0031C037AB5002466FA /* IOKitSleepPreventer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4705DFE91C037AB5002466FA /* IOKitSleepPreventer.m */; }; + 4705E0041C037AB5002466FA /* Keychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 4705DFEA1C037AB5002466FA /* Keychain.h */; }; + 4705E0051C037AB5002466FA /* Keychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 4705DFEB1C037AB5002466FA /* Keychain.m */; }; + 4705E0061C037AB5002466FA /* LaunchServicesApplicationFinder.h in Headers */ = {isa = PBXBuildFile; fileRef = 4705DFEC1C037AB5002466FA /* LaunchServicesApplicationFinder.h */; }; + 4705E0071C037AB5002466FA /* LaunchServicesFileDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 4705DFED1C037AB5002466FA /* LaunchServicesFileDescriptor.h */; }; + 4705E0081C037AB5002466FA /* LaunchServicesFileDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4705DFEE1C037AB5002466FA /* LaunchServicesFileDescriptor.m */; }; + 4705E0091C037AB5002466FA /* LaunchServicesQuarantineService.h in Headers */ = {isa = PBXBuildFile; fileRef = 4705DFEF1C037AB5002466FA /* LaunchServicesQuarantineService.h */; }; + 4705E00A1C037AB5002466FA /* LaunchServicesQuarantineService.m in Sources */ = {isa = PBXBuildFile; fileRef = 4705DFF01C037AB5002466FA /* LaunchServicesQuarantineService.m */; }; + 4705E00B1C037AB5002466FA /* LaunchServicesSchemeHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4705DFF11C037AB5002466FA /* LaunchServicesSchemeHandler.h */; }; + 4705E00C1C037AB5002466FA /* LaunchServicesSchemeHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4705DFF21C037AB5002466FA /* LaunchServicesSchemeHandler.m */; }; + 4705E00D1C037AB5002466FA /* SystemConfigurationProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4705DFF31C037AB5002466FA /* SystemConfigurationProxy.h */; }; + 4705E00E1C037AB5002466FA /* SystemConfigurationProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4705DFF41C037AB5002466FA /* SystemConfigurationProxy.m */; }; + 4705E00F1C037AB5002466FA /* SystemConfigurationReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 4705DFF51C037AB5002466FA /* SystemConfigurationReachability.h */; }; + 4705E0101C037AB5002466FA /* SystemConfigurationReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 4705DFF61C037AB5002466FA /* SystemConfigurationReachability.m */; }; 470912ED0C36FCE00049FBCE /* Prompt.xib in Resources */ = {isa = PBXBuildFile; fileRef = 470912EB0C36FCE00049FBCE /* Prompt.xib */; }; - 47121FF71611F94000E2547D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 47121FF61611F94000E2547D /* main.m */; }; 4716C5F50872BA9900938886 /* Command.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4716C5EF0872BA9800938886 /* Command.xib */; }; - 471BC7701BB7F4B80062C792 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97325FDCFA39411CA2CEA /* Foundation.framework */; }; - 471BC7711BB7F4B80062C792 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47BEDBD20B9296C800141EB4 /* ApplicationServices.framework */; }; - 471BC7721BB7F4B80062C792 /* JavaNativeFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4704C3A81664F94F00B17020 /* JavaNativeFoundation.framework */; }; - 471C664419E3E20700D7266E /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47022C221018663600488C19 /* CoreServices.framework */; }; 471DF150167F2A7B00EAFE71 /* cyberduck-document.icns in Resources */ = {isa = PBXBuildFile; fileRef = 471DF14F167F2A7B00EAFE71 /* cyberduck-document.icns */; }; 471F5C2E12AD1B6B0005D323 /* Alert.strings in Resources */ = {isa = PBXBuildFile; fileRef = 471F5C0C12AD1B6B0005D323 /* Alert.strings */; }; - 471F77AD180439B500A4C196 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97325FDCFA39411CA2CEA /* Foundation.framework */; }; - 471F77AF180439B500A4C196 /* JavaNativeFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4704C3A81664F94F00B17020 /* JavaNativeFoundation.framework */; }; - 471F77B718043A0300A4C196 /* FoundationProgressIconService.h in Headers */ = {isa = PBXBuildFile; fileRef = 471F77B418043A0300A4C196 /* FoundationProgressIconService.h */; }; - 471F77B918043A0300A4C196 /* FoundationProgressIconService.m in Sources */ = {isa = PBXBuildFile; fileRef = 471F77B518043A0300A4C196 /* FoundationProgressIconService.m */; }; 4732BDA813182C7F00CBC46B /* Download.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4732BD8613182C7F00CBC46B /* Download.strings */; }; - 4734425B102DEABD00C04C43 /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4734425A102DEABD00C04C43 /* Quartz.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - 4738A1F11B1BA5EA005EA4AE /* UKCrashReporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 47457F8D09980270002C93C3 /* UKCrashReporter.m */; }; - 4738A1F31B1BA61A005EA4AE /* CTGradient.m in Sources */ = {isa = PBXBuildFile; fileRef = 47AC356C0DA1025000CC1426 /* CTGradient.m */; }; - 4738A1F51B1BA61A005EA4AE /* CTGradientView.m in Sources */ = {isa = PBXBuildFile; fileRef = 47AC356E0DA1025000CC1426 /* CTGradientView.m */; }; - 4738A1F61B1BA62F005EA4AE /* UKSystemInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 477FA95A0E9A7826009E7857 /* UKSystemInfo.m */; }; - 4738A1F71B1BA645005EA4AE /* CDBookmarkCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 475286BD10D2CC660029363C /* CDBookmarkCell.m */; }; - 4738A1F91B1BA645005EA4AE /* CDListView.m in Sources */ = {isa = PBXBuildFile; fileRef = 475286BF10D2CC660029363C /* CDListView.m */; }; - 4738A1FA1B1BA645005EA4AE /* CDOutlineCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 475286C010D2CC660029363C /* CDOutlineCell.m */; }; - 4738A1FB1B1BA645005EA4AE /* CDOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = 475286C110D2CC660029363C /* CDOutlineView.m */; }; - 4739EF690856981300405FD3 /* Keychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 47983749072AD67800FA3CDB /* Keychain.h */; }; - 4739EF6B0856981300405FD3 /* Keychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 4798373F072AD66D00FA3CDB /* Keychain.m */; }; 4739EF6E0856981300405FD3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97325FDCFA39411CA2CEA /* Foundation.framework */; }; - 4739EFAC0856990900405FD3 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47C761EA06A88D7600B464FF /* SystemConfiguration.framework */; }; 473BF0871892968E0068B4C1 /* azure.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 473BF0851892968E0068B4C1 /* azure.tiff */; }; 474163C106C4F64100AC0BD2 /* Info.xib in Resources */ = {isa = PBXBuildFile; fileRef = 474163A306C4F64000AC0BD2 /* Info.xib */; }; 474163C206C4F64100AC0BD2 /* Browser.xib in Resources */ = {isa = PBXBuildFile; fileRef = 474163A506C4F64100AC0BD2 /* Browser.xib */; }; @@ -58,15 +58,11 @@ 474163CF06C4F64100AC0BD2 /* Bookmark.xib in Resources */ = {isa = PBXBuildFile; fileRef = 474163BF06C4F64100AC0BD2 /* Bookmark.xib */; }; 474166A606C6555E00AC0BD2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 474166A406C6555E00AC0BD2 /* InfoPlist.strings */; }; 4741686B06C6BA9400AC0BD2 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4741686906C6BA9400AC0BD2 /* Localizable.strings */; }; - 474520F21076B60600823467 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47022C221018663600488C19 /* CoreServices.framework */; }; - 474523E21076B70000823467 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97325FDCFA39411CA2CEA /* Foundation.framework */; }; - 474524B11076B7DA00823467 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97325FDCFA39411CA2CEA /* Foundation.framework */; }; - 474524B71076B7FC00823467 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97325FDCFA39411CA2CEA /* Foundation.framework */; }; - 47462ADD0F0A473D0075CBA9 /* EMKeychainItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 47462AD90F0A473D0075CBA9 /* EMKeychainItem.h */; }; - 47462ADE0F0A473D0075CBA9 /* EMKeychainItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 47462ADA0F0A473D0075CBA9 /* EMKeychainItem.m */; }; - 47462ADF0F0A473D0075CBA9 /* EMKeychainProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 47462ADB0F0A473D0075CBA9 /* EMKeychainProxy.h */; }; - 47462AE00F0A473D0075CBA9 /* EMKeychainProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 47462ADC0F0A473D0075CBA9 /* EMKeychainProxy.m */; }; 47472EF5177F788E0090A595 /* Rackspace US.cyberduckprofile in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4718F4AA175F432400B424AD /* Rackspace US.cyberduckprofile */; }; + 474B843D1C15CDD1004D562C /* CDTransmitImporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 474B843B1C15CDD1004D562C /* CDTransmitImporter.m */; }; + 474B843E1C15CDD1004D562C /* CDTransmitImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 474B843C1C15CDD1004D562C /* CDTransmitImporter.h */; }; + 474B84411C15DB51004D562C /* Sandbox.h in Headers */ = {isa = PBXBuildFile; fileRef = 474B843F1C15DB51004D562C /* Sandbox.h */; }; + 474B84421C15DB51004D562C /* Sandbox.m in Sources */ = {isa = PBXBuildFile; fileRef = 474B84401C15DB51004D562C /* Sandbox.m */; }; 4751799E097943FA008F671F /* Credentials.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4751799C097943FA008F671F /* Credentials.strings */; }; 475C6D5A170C9214006535BB /* googlestorage.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 475C6D59170C9214006535BB /* googlestorage.tiff */; }; 475D17B90805D54C00166B8A /* download5.icns in Resources */ = {isa = PBXBuildFile; fileRef = 475D17AF0805D54C00166B8A /* download5.icns */; }; @@ -80,7 +76,6 @@ 475D17C20805D54C00166B8A /* download4.icns in Resources */ = {isa = PBXBuildFile; fileRef = 475D17B80805D54C00166B8A /* download4.icns */; }; 475D461D0D9953CD009450C4 /* SecurityInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 475D461C0D9953CD009450C4 /* SecurityInterface.framework */; }; 475EBE9412DA462C00E5C3A2 /* ServicesMenu.strings in Resources */ = {isa = PBXBuildFile; fileRef = 475EBE7212DA462C00E5C3A2 /* ServicesMenu.strings */; }; - 4762DAC109FC42EC0034C662 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47C761EA06A88D7600B464FF /* SystemConfiguration.framework */; }; 47652D0B1202BED200745031 /* Azure.strings in Resources */ = {isa = PBXBuildFile; fileRef = 47652CE91202BED200745031 /* Azure.strings */; }; 476730B716108E1300B28D35 /* add.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 4767306716108E1200B28D35 /* add.tiff */; }; 476730B816108E1300B28D35 /* addPressed.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 4767306816108E1200B28D35 /* addPressed.tiff */; }; @@ -148,35 +143,16 @@ 4767310416108E1300B28D35 /* unlocked.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 476730B416108E1300B28D35 /* unlocked.tiff */; }; 4767310516108E1300B28D35 /* update.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 476730B516108E1300B28D35 /* update.tiff */; }; 4767310616108E1300B28D35 /* upload.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 476730B616108E1300B28D35 /* upload.tiff */; }; - 477A10480FD08DBA00BAD4AD /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; - 477A10E00FD08DE900BAD4AD /* ProxyForJava.h in Headers */ = {isa = PBXBuildFile; fileRef = 477A108A0FD08DE800BAD4AD /* ProxyForJava.h */; }; - 477A10E10FD08DE900BAD4AD /* ProxyForJava.m in Sources */ = {isa = PBXBuildFile; fileRef = 477A108B0FD08DE800BAD4AD /* ProxyForJava.m */; }; - 477A10E20FD08DE900BAD4AD /* Rococoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 477A108C0FD08DE800BAD4AD /* Rococoa.h */; }; - 477A10E30FD08DE900BAD4AD /* Rococoa.m in Sources */ = {isa = PBXBuildFile; fileRef = 477A108D0FD08DE800BAD4AD /* Rococoa.m */; }; 4781AF410828423100B3E0FA /* download0.icns in Resources */ = {isa = PBXBuildFile; fileRef = 4781AF400828423100B3E0FA /* download0.icns */; }; - 4781DFE5162FF6FE001F4993 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97325FDCFA39411CA2CEA /* Foundation.framework */; }; - 4781DFE6162FF703001F4993 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97325FDCFA39411CA2CEA /* Foundation.framework */; }; 478426F40F9F75900068BA2E /* License.strings in Resources */ = {isa = PBXBuildFile; fileRef = 478426F20F9F75900068BA2E /* License.strings */; }; - 4786AA13162F4AE1006156A0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97325FDCFA39411CA2CEA /* Foundation.framework */; }; 4786AA14162F4AED006156A0 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47983764072AD73700FA3CDB /* Security.framework */; }; 4786CB6C0E253B800029848F /* Error.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4786CB660E253B800029848F /* Error.xib */; }; 4786CB6D0E253B800029848F /* Activity.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4786CB670E253B800029848F /* Activity.xib */; }; 4786CB6E0E253B800029848F /* Transcript.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4786CB680E253B800029848F /* Transcript.xib */; }; 4786CB6F0E253B800029848F /* Progress.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4786CB690E253B800029848F /* Progress.xib */; }; 4786CB700E253B800029848F /* Task.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4786CB6A0E253B800029848F /* Task.xib */; }; - 478ECD090DAD5743008A5B1F /* QLPreviewPanel.h in Headers */ = {isa = PBXBuildFile; fileRef = 473240070DABC00800BF67D2 /* QLPreviewPanel.h */; }; - 478ECD0A0DAD5743008A5B1F /* QuickLook.h in Headers */ = {isa = PBXBuildFile; fileRef = 478ECC9A0DAD1B0C008A5B1F /* QuickLook.h */; }; - 478ECD100DAD5743008A5B1F /* QuickLook.m in Sources */ = {isa = PBXBuildFile; fileRef = 478ECC9B0DAD1B0C008A5B1F /* QuickLook.m */; }; - 478ECD130DAD5743008A5B1F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; 478F0DF412FB03DC000FE33C /* update.pem in Resources */ = {isa = PBXBuildFile; fileRef = 478F0DF312FB03DC000FE33C /* update.pem */; }; - 4791017F1BE7AD870095838A /* FinderSidebarService.h in Headers */ = {isa = PBXBuildFile; fileRef = 4791017D1BE7AD870095838A /* FinderSidebarService.h */; }; - 479101801BE7AD870095838A /* FinderSidebarService.m in Sources */ = {isa = PBXBuildFile; fileRef = 4791017E1BE7AD870095838A /* FinderSidebarService.m */; }; 47911A180B84C4E8001A29AE /* Acknowledgments.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 47911A170B84C4E8001A29AE /* Acknowledgments.rtf */; }; - 479450BD162FF74F00FC7FF9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97325FDCFA39411CA2CEA /* Foundation.framework */; }; - 4796C7641B3317F70042891D /* HP Cloud Object Storage.cyberduckprofile in Resources */ = {isa = PBXBuildFile; fileRef = 4780ACC617634CD6007D9DD5 /* HP Cloud Object Storage.cyberduckprofile */; }; - 4796C7651B3317F70042891D /* Rackspace UK.cyberduckprofile in Resources */ = {isa = PBXBuildFile; fileRef = 4718F4A9175F432400B424AD /* Rackspace UK.cyberduckprofile */; }; - 4797D2751628276C00340E1C /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47BEDBD20B9296C800141EB4 /* ApplicationServices.framework */; }; - 4797D28E162829F800340E1C /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 474522C51076B68E00823467 /* ApplicationServices.framework */; }; 47990FD2195C63AE009EBB7C /* Support.strings in Resources */ = {isa = PBXBuildFile; fileRef = 47990FD0195C63AE009EBB7C /* Support.strings */; }; 47993F7811699F12000271A8 /* Transfer.strings in Resources */ = {isa = PBXBuildFile; fileRef = 47993F5711699F12000271A8 /* Transfer.strings */; }; 47993F7C11699F40000271A8 /* Transfer.xib in Resources */ = {isa = PBXBuildFile; fileRef = 47993F7B11699F40000271A8 /* Transfer.xib */; }; @@ -184,31 +160,14 @@ 47A082B1167A169D004458C7 /* cyberduck-application.icns in Resources */ = {isa = PBXBuildFile; fileRef = 47A082B0167A169D004458C7 /* cyberduck-application.icns */; }; 47A88FBB0B931D9C00DB9D87 /* Configuration.strings in Resources */ = {isa = PBXBuildFile; fileRef = 47A88FB90B931D9C00DB9D87 /* Configuration.strings */; }; 47AA19690AF09F810059C736 /* Error.strings in Resources */ = {isa = PBXBuildFile; fileRef = 47AA19670AF09F810059C736 /* Error.strings */; }; - 47ADB07E1A288C7C00E4F69B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 47ADB07D1A288C7C00E4F69B /* main.m */; }; - 47ADB0801A288CC100E4F69B /* launcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 47ADB07F1A288CC100E4F69B /* launcher.m */; }; - 47ADB0811A288CC100E4F69B /* launcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 47ADB07F1A288CC100E4F69B /* launcher.m */; }; - 47ADB0831A288D7600E4F69B /* launcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 47ADB0821A288D7600E4F69B /* launcher.h */; }; - 47AE2FDA1630470D0091E874 /* LaunchServicesApplicationFinder.h in Headers */ = {isa = PBXBuildFile; fileRef = 47AE2FD81630470D0091E874 /* LaunchServicesApplicationFinder.h */; }; - 47AE2FDB1630470D0091E874 /* LaunchServicesApplicationFinder.m in Sources */ = {isa = PBXBuildFile; fileRef = 47AE2FD91630470D0091E874 /* LaunchServicesApplicationFinder.m */; }; 47AF48FD199B913300A580EC /* Sftp.strings in Resources */ = {isa = PBXBuildFile; fileRef = 47AF48FB199B913300A580EC /* Sftp.strings */; }; - 47B1F21B199E13EA00960511 /* Sandbox.h in Headers */ = {isa = PBXBuildFile; fileRef = 47B1F213199E13C200960511 /* Sandbox.h */; }; - 47B1F21C199E13F000960511 /* Sandbox.m in Sources */ = {isa = PBXBuildFile; fileRef = 47B1F215199E13C200960511 /* Sandbox.m */; }; 47B3318C16680FF100C9FFA0 /* ftp.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 47B3318B16680FF100C9FFA0 /* ftp.tiff */; }; 47B331931668102400C9FFA0 /* s3.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 47B331911668102400C9FFA0 /* s3.tiff */; }; 47B331941668102400C9FFA0 /* swift.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 47B331921668102400C9FFA0 /* swift.tiff */; }; 47B6074A0DA420880068282C /* Keychain.strings in Resources */ = {isa = PBXBuildFile; fileRef = 47B6072E0DA420880068282C /* Keychain.strings */; }; 47B888A917984584004E298A /* Folder.xib in Resources */ = {isa = PBXBuildFile; fileRef = 47B888A817984584004E298A /* Folder.xib */; }; 47BCF18E13BB4EC700D26E4C /* setup/app/container-migration.plist in Resources */ = {isa = PBXBuildFile; fileRef = 47BCF18D13BB4EC700D26E4C /* setup/app/container-migration.plist */; }; - 47BEDBD30B9296C800141EB4 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47BEDBD20B9296C800141EB4 /* ApplicationServices.framework */; }; 47C2536A1BF0D94000863EAF /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4792112812F6F4FD00E35E16 /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 47C57EAC162F45F200A272BC /* FinderLocal.h in Headers */ = {isa = PBXBuildFile; fileRef = 47C57EAA162F45F200A272BC /* FinderLocal.h */; }; - 47C57EAD162F45F200A272BC /* FinderLocal.m in Sources */ = {isa = PBXBuildFile; fileRef = 47C57EAB162F45F200A272BC /* FinderLocal.m */; }; - 47C57EB5162F471700A272BC /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 474522C51076B68E00823467 /* ApplicationServices.framework */; }; - 47C57EBD162F479900A272BC /* LaunchServicesFileDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 47C57EBB162F479900A272BC /* LaunchServicesFileDescriptor.h */; }; - 47C57EBE162F479900A272BC /* LaunchServicesFileDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 47C57EBC162F479900A272BC /* LaunchServicesFileDescriptor.m */; }; - 47C88FEC17269991001A746A /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 479BF77D1725A68C006854BF /* IOKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - 47C88FEF17269A54001A746A /* IOKitSleepPreventer.h in Headers */ = {isa = PBXBuildFile; fileRef = 47C88FED17269A54001A746A /* IOKitSleepPreventer.h */; }; - 47C88FF017269A54001A746A /* IOKitSleepPreventer.m in Sources */ = {isa = PBXBuildFile; fileRef = 47C88FEE17269A54001A746A /* IOKitSleepPreventer.m */; }; 47C88FF117269A71001A746A /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; 47CD043812DB5F2000694306 /* File.strings in Resources */ = {isa = PBXBuildFile; fileRef = 47CD041612DB5F2000694306 /* File.strings */; }; 47CD045B12DB5F2E00694306 /* Folder.strings in Resources */ = {isa = PBXBuildFile; fileRef = 47CD043912DB5F2E00694306 /* Folder.strings */; }; @@ -238,171 +197,37 @@ 47D93A151A2762A40006D4AE /* Credentials.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4751799C097943FA008F671F /* Credentials.strings */; }; 47D93A161A2762A40006D4AE /* Status.strings in Resources */ = {isa = PBXBuildFile; fileRef = 47F0B7D2087AD1AE00439978 /* Status.strings */; }; 47D93A171A2762A40006D4AE /* Support.strings in Resources */ = {isa = PBXBuildFile; fileRef = 47990FD0195C63AE009EBB7C /* Support.strings */; }; - 47DD76731AE1340A005F08A0 /* SystemConfigurationProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 47DD76711AE1340A005F08A0 /* SystemConfigurationProxy.h */; }; - 47DD76741AE1340A005F08A0 /* SystemConfigurationProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 47DD76721AE1340A005F08A0 /* SystemConfigurationProxy.m */; }; - 47E0709A1B32DC7100B8B073 /* SNDisclosableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 477B1B7D0AF384350023BA7F /* SNDisclosableView.m */; }; 47E987600D689A280077733F /* S3.strings in Resources */ = {isa = PBXBuildFile; fileRef = 47E9875E0D689A280077733F /* S3.strings */; }; - 47EA2451162B5CE0002E23E2 /* LaunchServicesSchemeHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 47EA244F162B5CE0002E23E2 /* LaunchServicesSchemeHandler.h */; }; - 47EA2452162B5CE0002E23E2 /* LaunchServicesSchemeHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 47EA2450162B5CE0002E23E2 /* LaunchServicesSchemeHandler.m */; }; - 47EDDEEB1AE191EB00B17C93 /* SystemConfigurationReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 47EDDEE91AE191EB00B17C93 /* SystemConfigurationReachability.h */; }; - 47EDDEEC1AE191EB00B17C93 /* SystemConfigurationReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 47EDDEEA1AE191EB00B17C93 /* SystemConfigurationReachability.m */; }; 47F0B7D3087AD1B100439978 /* Status.strings in Resources */ = {isa = PBXBuildFile; fileRef = 47F0B7D2087AD1AE00439978 /* Status.strings */; }; - 47F102B41628D57500923FDE /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 474522C51076B68E00823467 /* ApplicationServices.framework */; }; - 47F102CA1628D5CE00923FDE /* LaunchServicesQuarantineService.h in Headers */ = {isa = PBXBuildFile; fileRef = 47F102BD1628D5CE00923FDE /* LaunchServicesQuarantineService.h */; }; - 47F102CE1628D5CE00923FDE /* LaunchServicesQuarantineService.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F102BF1628D5CE00923FDE /* LaunchServicesQuarantineService.m */; }; - 47FB9C641725A5CC00FE33C1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97325FDCFA39411CA2CEA /* Foundation.framework */; }; - 47FB9C661725A5CC00FE33C1 /* JavaNativeFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4704C3A81664F94F00B17020 /* JavaNativeFoundation.framework */; }; + 47F85C121C0F0E8900FDA856 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 477CFC7E1AF0FAFB001E81AF /* Cocoa.framework */; }; + 47F85C191C0F101F00FDA856 /* UKCrashReporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 47F85C151C0F101F00FDA856 /* UKCrashReporter.h */; }; + 47F85C1A1C0F101F00FDA856 /* UKCrashReporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F85C161C0F101F00FDA856 /* UKCrashReporter.m */; }; + 47F85C1B1C0F101F00FDA856 /* UKSystemInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 47F85C171C0F101F00FDA856 /* UKSystemInfo.h */; }; + 47F85C1C1C0F101F00FDA856 /* UKSystemInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F85C181C0F101F00FDA856 /* UKSystemInfo.m */; }; + 47F85C301C0F103E00FDA856 /* CDBookmarkCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 47F85C1E1C0F103E00FDA856 /* CDBookmarkCell.h */; }; + 47F85C311C0F103E00FDA856 /* CDBookmarkCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F85C1F1C0F103E00FDA856 /* CDBookmarkCell.m */; }; + 47F85C321C0F103E00FDA856 /* CDListView.h in Headers */ = {isa = PBXBuildFile; fileRef = 47F85C201C0F103E00FDA856 /* CDListView.h */; }; + 47F85C331C0F103E00FDA856 /* CDListView.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F85C211C0F103E00FDA856 /* CDListView.m */; }; + 47F85C341C0F103E00FDA856 /* CDOutlineCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 47F85C221C0F103E00FDA856 /* CDOutlineCell.h */; }; + 47F85C351C0F103E00FDA856 /* CDOutlineCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F85C231C0F103E00FDA856 /* CDOutlineCell.m */; }; + 47F85C361C0F103E00FDA856 /* CDOutlineView.h in Headers */ = {isa = PBXBuildFile; fileRef = 47F85C241C0F103E00FDA856 /* CDOutlineView.h */; }; + 47F85C371C0F103E00FDA856 /* CDOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F85C251C0F103E00FDA856 /* CDOutlineView.m */; }; + 47F85C381C0F103E00FDA856 /* CTGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = 47F85C261C0F103E00FDA856 /* CTGradient.h */; }; + 47F85C391C0F103E00FDA856 /* CTGradient.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F85C271C0F103E00FDA856 /* CTGradient.m */; }; + 47F85C3A1C0F103E00FDA856 /* CTGradientView.h in Headers */ = {isa = PBXBuildFile; fileRef = 47F85C281C0F103E00FDA856 /* CTGradientView.h */; }; + 47F85C3B1C0F103E00FDA856 /* CTGradientView.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F85C291C0F103E00FDA856 /* CTGradientView.m */; }; + 47F85C3C1C0F103E00FDA856 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F85C2A1C0F103E00FDA856 /* main.m */; }; + 47F85C3D1C0F103E00FDA856 /* QLPreviewPanel.h in Headers */ = {isa = PBXBuildFile; fileRef = 47F85C2B1C0F103E00FDA856 /* QLPreviewPanel.h */; }; + 47F85C401C0F103E00FDA856 /* SNDisclosableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 47F85C2E1C0F103E00FDA856 /* SNDisclosableView.h */; }; + 47F85C411C0F103E00FDA856 /* SNDisclosableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F85C2F1C0F103E00FDA856 /* SNDisclosableView.m */; }; + 47F85C481C0F106A00FDA856 /* launcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 47F85C461C0F106A00FDA856 /* launcher.h */; }; + 47F85C491C0F106A00FDA856 /* launcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F85C471C0F106A00FDA856 /* launcher.m */; }; + 47F85C4A1C0F106A00FDA856 /* launcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F85C471C0F106A00FDA856 /* launcher.m */; }; + 47F85C4C1C0F107100FDA856 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F85C4B1C0F107100FDA856 /* main.m */; }; 47FC190C099FB8AF0082431D /* Crash.strings in Resources */ = {isa = PBXBuildFile; fileRef = 47FC190A099FB8AF0082431D /* Crash.strings */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 471BC77B1BB7F4E00062C792 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 471BC76A1BB7F4B80062C792; - remoteInfo = libfindersidebarservice; - }; - 471E214B0A1734D7009E164E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4739EF670856981300405FD3; - remoteInfo = libKeychain; - }; - 471E21510A1734D7009E164E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4739EFA30856990900405FD3; - remoteInfo = libProxy; - }; - 471E21530A1734D7009E164E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4739EFB10856991200405FD3; - remoteInfo = libLocal; - }; - 471E21570A1734D7009E164E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4762DAB809FC42EC0034C662; - remoteInfo = libDiagnostics; - }; - 471F77BA18043A3800A4C196 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 471F77A7180439B500A4C196; - remoteInfo = libFoundationProgressService; - }; - 4726A8D30DAD6E27001BC01D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 478ECD000DAD5743008A5B1F; - remoteInfo = libQuickLook; - }; - 477A11D30FD0942800BAD4AD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 477A10400FD08DBA00BAD4AD; - remoteInfo = libCocoa; - }; - 479737AC162F4962002809CC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 47C57EAE162F471700A272BC; - remoteInfo = libLaunchServicesFileDescriptor; - }; - 4797D28C1628299700340E1C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4797D26E1628276C00340E1C; - remoteInfo = libLaunchServicesApplicationFinder; - }; - 479BF7801725A6FE006854BF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 47FB9C5E1725A5CC00FE33C1; - remoteInfo = libIOKitSleepPreventer; - }; - 47BEDCEE0B92A23B00141EB4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 47BEDAF60B92960400141EB4; - remoteInfo = libURLSchemeHandlerConfiguration; - }; - 47D939CC1A268E430006D4AE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4739EFA30856990900405FD3; - remoteInfo = libProxy; - }; - 47D939CE1A268E430006D4AE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4739EFB10856991200405FD3; - remoteInfo = libLocal; - }; - 47D939D01A268E430006D4AE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 47BEDAF60B92960400141EB4; - remoteInfo = libLaunchServicesSchemeHandler; - }; - 47D939D21A268E430006D4AE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4797D26E1628276C00340E1C; - remoteInfo = libLaunchServicesApplicationFinder; - }; - 47D939D41A268E430006D4AE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 47F102AD1628D57500923FDE; - remoteInfo = libLaunchServicesQuarantineService; - }; - 47D939D61A268E430006D4AE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 47C57EAE162F471700A272BC; - remoteInfo = libLaunchServicesFileDescriptor; - }; - 47D939D81A268E430006D4AE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 47FB9C5E1725A5CC00FE33C1; - remoteInfo = libIOKitSleepPreventer; - }; - 47D93D211A27825C0006D4AE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4762DAB809FC42EC0034C662; - remoteInfo = libDiagnostics; - }; - 47F102D91628D61A00923FDE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 47F102AD1628D57500923FDE; - remoteInfo = libLaunchServicesQuarantineService; - }; 47FA2CEE1A28A10B0058614E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -410,13 +235,6 @@ remoteGlobalIDString = 4739EF670856981300405FD3; remoteInfo = libKeychain; }; - 47FA2CF01A28A17E0058614E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 477A10400FD08DBA00BAD4AD; - remoteInfo = libRococoa; - }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -510,6 +328,33 @@ 4701684F0EED9EB7005E2CCF /* ca */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = ca; path = ca.lproj/Mosso.strings; sourceTree = ""; }; 47022C221018663600488C19 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; }; 4704C3A81664F94F00B17020 /* JavaNativeFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaNativeFoundation.framework; path = /System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaNativeFoundation.framework; sourceTree = ""; }; + 4705DFDB1C037A6D002466FA /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + 4705DFDD1C037AB5002466FA /* FinderSidebarService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FinderSidebarService.m; path = core/src/main/objc/FinderSidebarService.m; sourceTree = SOURCE_ROOT; }; + 4705DFDE1C037AB5002466FA /* FinderSidebarService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FinderSidebarService.h; path = core/src/main/objc/FinderSidebarService.h; sourceTree = SOURCE_ROOT; }; + 4705DFDF1C037AB5002466FA /* LaunchServicesApplicationFinder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LaunchServicesApplicationFinder.m; path = core/src/main/objc/LaunchServicesApplicationFinder.m; sourceTree = SOURCE_ROOT; }; + 4705DFE01C037AB5002466FA /* EMKeychainItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EMKeychainItem.h; path = core/src/main/objc/EMKeychainItem.h; sourceTree = SOURCE_ROOT; }; + 4705DFE11C037AB5002466FA /* EMKeychainItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EMKeychainItem.m; path = core/src/main/objc/EMKeychainItem.m; sourceTree = SOURCE_ROOT; }; + 4705DFE21C037AB5002466FA /* EMKeychainProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EMKeychainProxy.h; path = core/src/main/objc/EMKeychainProxy.h; sourceTree = SOURCE_ROOT; }; + 4705DFE31C037AB5002466FA /* EMKeychainProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EMKeychainProxy.m; path = core/src/main/objc/EMKeychainProxy.m; sourceTree = SOURCE_ROOT; }; + 4705DFE41C037AB5002466FA /* FinderLocal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FinderLocal.h; path = core/src/main/objc/FinderLocal.h; sourceTree = SOURCE_ROOT; }; + 4705DFE51C037AB5002466FA /* FinderLocal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FinderLocal.m; path = core/src/main/objc/FinderLocal.m; sourceTree = SOURCE_ROOT; }; + 4705DFE61C037AB5002466FA /* FoundationProgressIconService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FoundationProgressIconService.h; path = core/src/main/objc/FoundationProgressIconService.h; sourceTree = SOURCE_ROOT; }; + 4705DFE71C037AB5002466FA /* FoundationProgressIconService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FoundationProgressIconService.m; path = core/src/main/objc/FoundationProgressIconService.m; sourceTree = SOURCE_ROOT; }; + 4705DFE81C037AB5002466FA /* IOKitSleepPreventer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IOKitSleepPreventer.h; path = core/src/main/objc/IOKitSleepPreventer.h; sourceTree = SOURCE_ROOT; }; + 4705DFE91C037AB5002466FA /* IOKitSleepPreventer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IOKitSleepPreventer.m; path = core/src/main/objc/IOKitSleepPreventer.m; sourceTree = SOURCE_ROOT; }; + 4705DFEA1C037AB5002466FA /* Keychain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Keychain.h; path = core/src/main/objc/Keychain.h; sourceTree = SOURCE_ROOT; }; + 4705DFEB1C037AB5002466FA /* Keychain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Keychain.m; path = core/src/main/objc/Keychain.m; sourceTree = SOURCE_ROOT; }; + 4705DFEC1C037AB5002466FA /* LaunchServicesApplicationFinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LaunchServicesApplicationFinder.h; path = core/src/main/objc/LaunchServicesApplicationFinder.h; sourceTree = SOURCE_ROOT; }; + 4705DFED1C037AB5002466FA /* LaunchServicesFileDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LaunchServicesFileDescriptor.h; path = core/src/main/objc/LaunchServicesFileDescriptor.h; sourceTree = SOURCE_ROOT; }; + 4705DFEE1C037AB5002466FA /* LaunchServicesFileDescriptor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LaunchServicesFileDescriptor.m; path = core/src/main/objc/LaunchServicesFileDescriptor.m; sourceTree = SOURCE_ROOT; }; + 4705DFEF1C037AB5002466FA /* LaunchServicesQuarantineService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LaunchServicesQuarantineService.h; path = core/src/main/objc/LaunchServicesQuarantineService.h; sourceTree = SOURCE_ROOT; }; + 4705DFF01C037AB5002466FA /* LaunchServicesQuarantineService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LaunchServicesQuarantineService.m; path = core/src/main/objc/LaunchServicesQuarantineService.m; sourceTree = SOURCE_ROOT; }; + 4705DFF11C037AB5002466FA /* LaunchServicesSchemeHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LaunchServicesSchemeHandler.h; path = core/src/main/objc/LaunchServicesSchemeHandler.h; sourceTree = SOURCE_ROOT; }; + 4705DFF21C037AB5002466FA /* LaunchServicesSchemeHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LaunchServicesSchemeHandler.m; path = core/src/main/objc/LaunchServicesSchemeHandler.m; sourceTree = SOURCE_ROOT; }; + 4705DFF31C037AB5002466FA /* SystemConfigurationProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SystemConfigurationProxy.h; path = core/src/main/objc/SystemConfigurationProxy.h; sourceTree = SOURCE_ROOT; }; + 4705DFF41C037AB5002466FA /* SystemConfigurationProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SystemConfigurationProxy.m; path = core/src/main/objc/SystemConfigurationProxy.m; sourceTree = SOURCE_ROOT; }; + 4705DFF51C037AB5002466FA /* SystemConfigurationReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SystemConfigurationReachability.h; path = core/src/main/objc/SystemConfigurationReachability.h; sourceTree = SOURCE_ROOT; }; + 4705DFF61C037AB5002466FA /* SystemConfigurationReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SystemConfigurationReachability.m; path = core/src/main/objc/SystemConfigurationReachability.m; sourceTree = SOURCE_ROOT; }; 470912EC0C36FCE00049FBCE /* en */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = en; path = en.lproj/Prompt.xib; sourceTree = ""; }; 470912FB0C36FD330049FBCE /* ca */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = ca; path = ca.lproj/Prompt.xib; sourceTree = ""; }; 4709130A0C36FD920049FBCE /* cs */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = cs; path = cs.lproj/Prompt.xib; sourceTree = ""; }; @@ -619,7 +464,6 @@ 470FDC7E099E4AC5008DE09C /* he */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = he; path = he.lproj/Credentials.strings; sourceTree = ""; }; 470FDC80099E4AC5008DE09C /* he */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = he; path = he.lproj/Status.strings; sourceTree = ""; }; 470FDC81099E4AC5008DE09C /* he */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = he; path = he.lproj/InfoPlist.strings; sourceTree = ""; }; - 47121FF61611F94000E2547D /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 4716C5F00872BA9800938886 /* en */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = en; path = en.lproj/Command.xib; sourceTree = ""; }; 47181E840E17D1A600568D80 /* el */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = el; path = el.lproj/Command.xib; sourceTree = ""; }; 47181E850E17D1A600568D80 /* el */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = el; path = el.lproj/Info.xib; sourceTree = ""; }; @@ -642,7 +486,6 @@ 47181E9F0E17D1E500568D80 /* el */ = {isa = PBXFileReference; lastKnownFileType = text; name = el; path = el.lproj/License.txt; sourceTree = ""; }; 4718F4A9175F432400B424AD /* Rackspace UK.cyberduckprofile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "Rackspace UK.cyberduckprofile"; sourceTree = ""; }; 4718F4AA175F432400B424AD /* Rackspace US.cyberduckprofile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "Rackspace US.cyberduckprofile"; sourceTree = ""; }; - 471BC7761BB7F4B80062C792 /* libfindersidebarservice.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libfindersidebarservice.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 471D2C5505A2505600675163 /* Cyberduck.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Cyberduck.app; sourceTree = BUILT_PRODUCTS_DIR; }; 471DF14F167F2A7B00EAFE71 /* cyberduck-document.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "cyberduck-document.icns"; sourceTree = ""; }; 471F5C0D12AD1B6B0005D323 /* pt_PT */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = pt_PT; path = pt_PT.lproj/Alert.strings; sourceTree = ""; }; @@ -671,9 +514,6 @@ 471F5C2912AD1B6B0005D323 /* ru */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = ru; path = ru.lproj/Alert.strings; sourceTree = ""; }; 471F5C2C12AD1B6B0005D323 /* sl */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = sl; path = sl.lproj/Alert.strings; sourceTree = ""; }; 471F5C2D12AD1B6B0005D323 /* sk */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = sk; path = sk.lproj/Alert.strings; sourceTree = ""; }; - 471F77B3180439B500A4C196 /* libfoundationprogressservice.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libfoundationprogressservice.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; - 471F77B418043A0300A4C196 /* FoundationProgressIconService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoundationProgressIconService.h; sourceTree = ""; }; - 471F77B518043A0300A4C196 /* FoundationProgressIconService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoundationProgressIconService.m; sourceTree = ""; }; 4725396B10F4D10B00DF0F02 /* sr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = sr; path = sr.lproj/Bookmark.xib; sourceTree = ""; }; 4725396E10F4D10B00DF0F02 /* sr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = sr; path = sr.lproj/Browser.xib; sourceTree = ""; }; 4725397110F4D10B00DF0F02 /* sr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = sr; path = sr.lproj/Command.xib; sourceTree = ""; }; @@ -712,7 +552,6 @@ 47271DA809F4050B00136347 /* tr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = tr; path = tr.lproj/Bookmark.xib; sourceTree = ""; }; 47271DAB09F4053E00136347 /* tr */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = tr; path = tr.lproj/Crash.strings; sourceTree = ""; }; 47271DAE09F4055700136347 /* tr */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = tr; path = tr.lproj/Status.strings; sourceTree = ""; }; - 473240070DABC00800BF67D2 /* QLPreviewPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QLPreviewPanel.h; sourceTree = ""; }; 4732BD8713182C7F00CBC46B /* pt_PT */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = pt_PT; path = pt_PT.lproj/Download.strings; sourceTree = ""; }; 4732BD8813182C7F00CBC46B /* tr */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = tr; path = tr.lproj/Download.strings; sourceTree = ""; }; 4732BD8913182C7F00CBC46B /* ro */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = ro; path = ro.lproj/Download.strings; sourceTree = ""; }; @@ -754,9 +593,7 @@ 47341E0609A09CDC0065FF57 /* no */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = no; path = no.lproj/Crash.strings; sourceTree = ""; }; 47341E0A09A09CE90065FF57 /* sv */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = sv; path = sv.lproj/Crash.strings; sourceTree = ""; }; 4734425A102DEABD00C04C43 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = /System/Library/Frameworks/Quartz.framework; sourceTree = ""; }; - 4739EF730856981400405FD3 /* libkeychain.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libkeychain.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; - 4739EFB00856990900405FD3 /* libproxy.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libproxy.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; - 4739EFC10856991300405FD3 /* liblocal.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = liblocal.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; + 4739EF730856981400405FD3 /* libcore.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcore.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 473BF0851892968E0068B4C1 /* azure.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = azure.tiff; sourceTree = ""; }; 474163A406C4F64000AC0BD2 /* en */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = en; path = en.lproj/Info.xib; sourceTree = ""; }; 474163A606C4F64100AC0BD2 /* en */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = en; path = en.lproj/Browser.xib; sourceTree = ""; }; @@ -889,12 +726,6 @@ 4741688306C6BB2100AC0BD2 /* zh_CN */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = zh_CN; path = zh_CN.lproj/Localizable.strings; sourceTree = ""; }; 474522C51076B68E00823467 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = System/Library/Frameworks/ApplicationServices.framework; sourceTree = SDKROOT; }; 474523971076B6D800823467 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; - 47457F8C09980270002C93C3 /* UKCrashReporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UKCrashReporter.h; sourceTree = ""; }; - 47457F8D09980270002C93C3 /* UKCrashReporter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UKCrashReporter.m; sourceTree = ""; }; - 47462AD90F0A473D0075CBA9 /* EMKeychainItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EMKeychainItem.h; sourceTree = ""; }; - 47462ADA0F0A473D0075CBA9 /* EMKeychainItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EMKeychainItem.m; sourceTree = ""; }; - 47462ADB0F0A473D0075CBA9 /* EMKeychainProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EMKeychainProxy.h; sourceTree = ""; }; - 47462ADC0F0A473D0075CBA9 /* EMKeychainProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EMKeychainProxy.m; sourceTree = ""; }; 4749566007EDE5B600B34D53 /* sv */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = sv; path = sv.lproj/Info.xib; sourceTree = ""; }; 4749566107EDE5BD00B34D53 /* sv */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = sv; path = sv.lproj/Main.xib; sourceTree = ""; }; 4749566207EDE5C300B34D53 /* sv */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = sv; path = sv.lproj/Browser.xib; sourceTree = ""; }; @@ -902,6 +733,10 @@ 4749574F07EDECF800B34D53 /* sv */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = sv; path = sv.lproj/Login.xib; sourceTree = ""; }; 4749575007EDED0000B34D53 /* sv */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = sv; path = sv.lproj/Preferences.xib; sourceTree = ""; }; 4749575107EDED0600B34D53 /* sv */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = sv; path = sv.lproj/Bookmark.xib; sourceTree = ""; }; + 474B843B1C15CDD1004D562C /* CDTransmitImporter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDTransmitImporter.m; path = importer/src/main/objc/CDTransmitImporter.m; sourceTree = SOURCE_ROOT; }; + 474B843C1C15CDD1004D562C /* CDTransmitImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDTransmitImporter.h; path = importer/src/main/objc/CDTransmitImporter.h; sourceTree = SOURCE_ROOT; }; + 474B843F1C15DB51004D562C /* Sandbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Sandbox.h; path = core/src/main/objc/Sandbox.h; sourceTree = SOURCE_ROOT; }; + 474B84401C15DB51004D562C /* Sandbox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Sandbox.m; path = core/src/main/objc/Sandbox.m; sourceTree = SOURCE_ROOT; }; 474ECFBD116F7A970068A4DB /* ka */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = ka; path = ka.lproj/Bookmark.xib; sourceTree = ""; }; 474ECFBE116F7A970068A4DB /* ka */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = ka; path = ka.lproj/Browser.xib; sourceTree = ""; }; 474ECFBF116F7A970068A4DB /* ka */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = ka; path = ka.lproj/Command.xib; sourceTree = ""; }; @@ -943,14 +778,6 @@ 475179BC097945C2008F671F /* es */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = es; path = es.lproj/Credentials.strings; sourceTree = ""; }; 475179BD097945D5008F671F /* de */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = de; path = de.lproj/Credentials.strings; sourceTree = ""; }; 475179BE097945DC008F671F /* da */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = da; path = da.lproj/Credentials.strings; sourceTree = ""; }; - 475286B510D2CC660029363C /* CDBookmarkCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDBookmarkCell.h; path = view/CDBookmarkCell.h; sourceTree = ""; }; - 475286B710D2CC660029363C /* CDListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDListView.h; path = view/CDListView.h; sourceTree = ""; }; - 475286B810D2CC660029363C /* CDOutlineCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDOutlineCell.h; path = view/CDOutlineCell.h; sourceTree = ""; }; - 475286B910D2CC660029363C /* CDOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDOutlineView.h; path = view/CDOutlineView.h; sourceTree = ""; }; - 475286BD10D2CC660029363C /* CDBookmarkCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDBookmarkCell.m; path = view/CDBookmarkCell.m; sourceTree = ""; }; - 475286BF10D2CC660029363C /* CDListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDListView.m; path = view/CDListView.m; sourceTree = ""; }; - 475286C010D2CC660029363C /* CDOutlineCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDOutlineCell.m; path = view/CDOutlineCell.m; sourceTree = ""; }; - 475286C110D2CC660029363C /* CDOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDOutlineView.m; path = view/CDOutlineView.m; sourceTree = ""; }; 47562B25081D835D002849AB /* da */ = {isa = PBXFileReference; lastKnownFileType = text; name = da; path = da.lproj/License.txt; sourceTree = ""; }; 47562B26081D835D002849AB /* da */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; 47562B27081D835D002849AB /* da */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1015,7 +842,6 @@ 475EBE9112DA462C00E5C3A2 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/ServicesMenu.strings; sourceTree = ""; }; 475EBE9212DA462C00E5C3A2 /* nl */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/ServicesMenu.strings; sourceTree = ""; }; 475EBE9312DA462C00E5C3A2 /* da */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/ServicesMenu.strings; sourceTree = ""; }; - 4762DAC509FC42EC0034C662 /* libdiagnostics.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libdiagnostics.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 47652CEA1202BED200745031 /* ko */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = ko; path = ko.lproj/Azure.strings; sourceTree = ""; }; 47652CEB1202BED200745031 /* ka */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = ka; path = ka.lproj/Azure.strings; sourceTree = ""; }; 47652CEC1202BED200745031 /* sl */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = sl; path = sl.lproj/Azure.strings; sourceTree = ""; }; @@ -1112,18 +938,8 @@ 476C7C2D07F5A31800CF6032 /* sv */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; 476C7C2E07F5A32200CF6032 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text; name = sv; path = sv.lproj/License.txt; sourceTree = ""; }; 476DEBE10629C6FB005EF4B1 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; - 477A104D0FD08DBA00BAD4AD /* librococoa.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = librococoa.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; - 477A108A0FD08DE800BAD4AD /* ProxyForJava.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProxyForJava.h; sourceTree = ""; }; - 477A108B0FD08DE800BAD4AD /* ProxyForJava.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProxyForJava.m; sourceTree = ""; }; - 477A108C0FD08DE800BAD4AD /* Rococoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Rococoa.h; sourceTree = ""; }; - 477A108D0FD08DE800BAD4AD /* Rococoa.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Rococoa.m; sourceTree = ""; }; - 477B1B7C0AF384350023BA7F /* SNDisclosableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SNDisclosableView.h; sourceTree = ""; }; - 477B1B7D0AF384350023BA7F /* SNDisclosableView.m */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SNDisclosableView.m; sourceTree = ""; }; 477BE2330FD9B38C00F5CB50 /* en */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = en; path = en.lproj/Main.xib; sourceTree = ""; }; 477CFC7E1AF0FAFB001E81AF /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - 477FA9590E9A7826009E7857 /* UKSystemInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UKSystemInfo.h; sourceTree = ""; }; - 477FA95A0E9A7826009E7857 /* UKSystemInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UKSystemInfo.m; sourceTree = ""; }; - 4780ACC617634CD6007D9DD5 /* HP Cloud Object Storage.cyberduckprofile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "HP Cloud Object Storage.cyberduckprofile"; sourceTree = ""; }; 4781AF400828423100B3E0FA /* download0.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = download0.icns; sourceTree = ""; }; 478426F30F9F75900068BA2E /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = en; path = en.lproj/License.strings; sourceTree = ""; }; 478427070F9F75D70068BA2E /* sv */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = sv; path = sv.lproj/License.strings; sourceTree = ""; }; @@ -1151,13 +967,8 @@ 4786CB680E253B800029848F /* Transcript.xib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = Transcript.xib; path = resources/Transcript.xib; sourceTree = ""; }; 4786CB690E253B800029848F /* Progress.xib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = Progress.xib; path = resources/Progress.xib; sourceTree = ""; }; 4786CB6A0E253B800029848F /* Task.xib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = Task.xib; path = resources/Task.xib; sourceTree = ""; }; - 478ECC9A0DAD1B0C008A5B1F /* QuickLook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickLook.h; sourceTree = ""; }; - 478ECC9B0DAD1B0C008A5B1F /* QuickLook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuickLook.m; sourceTree = ""; }; - 478ECD180DAD5743008A5B1F /* libquickLook.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libquickLook.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 478F0DF312FB03DC000FE33C /* update.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = update.pem; path = www/update/update.pem; sourceTree = ""; }; 4790762A0764903900676C18 /* cs */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; - 4791017D1BE7AD870095838A /* FinderSidebarService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FinderSidebarService.h; sourceTree = ""; }; - 4791017E1BE7AD870095838A /* FinderSidebarService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FinderSidebarService.m; sourceTree = ""; }; 47911A170B84C4E8001A29AE /* Acknowledgments.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = Acknowledgments.rtf; sourceTree = ""; }; 4792112812F6F4FD00E35E16 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = lib/Sparkle.framework; sourceTree = ""; }; 4796C7271B3317F60042891D /* zh_TW */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = zh_TW; path = zh_TW.lproj/Alert.strings; sourceTree = ""; }; @@ -1217,7 +1028,6 @@ 4796E530195C692E000864F4 /* sv */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = sv; path = sv.lproj/Support.strings; sourceTree = ""; }; 4796E531195C692E000864F4 /* sk */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = sk; path = sk.lproj/Support.strings; sourceTree = ""; }; 4796E532195C692E000864F4 /* zh_CN */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = zh_CN; path = zh_CN.lproj/Support.strings; sourceTree = ""; }; - 4797D27A1628276C00340E1C /* liblaunchservicesapplicationfinder.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = liblaunchservicesapplicationfinder.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 479814C907280B2B00FA3CDB /* no */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = no; path = no.lproj/Localizable.strings; sourceTree = ""; }; 479814CA07280B2B00FA3CDB /* no */ = {isa = PBXFileReference; lastKnownFileType = text; name = no; path = no.lproj/License.txt; sourceTree = ""; }; 479814CB07280B2B00FA3CDB /* no */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = no; path = no.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1229,8 +1039,6 @@ 479814FB07280BAB00FA3CDB /* no */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = no; path = no.lproj/Browser.xib; sourceTree = ""; }; 479814FF07280BAB00FA3CDB /* no */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = no; path = no.lproj/Main.xib; sourceTree = ""; }; 4798150007280BAB00FA3CDB /* no */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = no; path = no.lproj/Info.xib; sourceTree = ""; }; - 4798373F072AD66D00FA3CDB /* Keychain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Keychain.m; sourceTree = ""; }; - 47983749072AD67800FA3CDB /* Keychain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Keychain.h; sourceTree = ""; }; 47983764072AD73700FA3CDB /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = ""; }; 47990FD1195C63AE009EBB7C /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = en; path = en.lproj/Support.strings; sourceTree = ""; }; 47990FD3195C63B5009EBB7C /* el */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = el; path = el.lproj/Support.strings; sourceTree = ""; }; @@ -1323,15 +1131,6 @@ 47AA197F0AF0ABA80059C736 /* tr */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = tr; path = tr.lproj/Error.strings; sourceTree = ""; }; 47AA19800AF0ABA80059C736 /* zh_CN */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = zh_CN; path = zh_CN.lproj/Error.strings; sourceTree = ""; }; 47AA19820AF0ABA80059C736 /* ca */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = ca; path = ca.lproj/Error.strings; sourceTree = ""; }; - 47AC356B0DA1025000CC1426 /* CTGradient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CTGradient.h; sourceTree = ""; }; - 47AC356C0DA1025000CC1426 /* CTGradient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CTGradient.m; sourceTree = ""; }; - 47AC356D0DA1025000CC1426 /* CTGradientView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CTGradientView.h; sourceTree = ""; }; - 47AC356E0DA1025000CC1426 /* CTGradientView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CTGradientView.m; sourceTree = ""; }; - 47ADB07D1A288C7C00E4F69B /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 47ADB07F1A288CC100E4F69B /* launcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = launcher.m; sourceTree = ""; }; - 47ADB0821A288D7600E4F69B /* launcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = launcher.h; sourceTree = ""; }; - 47AE2FD81630470D0091E874 /* LaunchServicesApplicationFinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LaunchServicesApplicationFinder.h; sourceTree = ""; }; - 47AE2FD91630470D0091E874 /* LaunchServicesApplicationFinder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LaunchServicesApplicationFinder.m; sourceTree = ""; }; 47AF48FC199B913300A580EC /* lv */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = lv; path = lv.lproj/Sftp.strings; sourceTree = ""; }; 47B000941A234981003941A0 /* pt_BR */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = pt_BR; path = pt_BR.lproj/Alert.strings; sourceTree = ""; }; 47B000951A234981003941A0 /* pt_BR */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = pt_BR; path = pt_BR.lproj/Archive.strings; sourceTree = ""; }; @@ -1364,8 +1163,6 @@ 47B000C61A234982003941A0 /* pt_BR */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = pt_BR; path = pt_BR.lproj/ServicesMenu.strings; sourceTree = ""; }; 47B000C71A234982003941A0 /* pt_BR */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = pt_BR; path = pt_BR.lproj/Status.strings; sourceTree = ""; }; 47B000C81A234982003941A0 /* pt_BR */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = pt_BR; path = pt_BR.lproj/Transfer.strings; sourceTree = ""; }; - 47B1F213199E13C200960511 /* Sandbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sandbox.h; sourceTree = ""; }; - 47B1F215199E13C200960511 /* Sandbox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Sandbox.m; sourceTree = ""; }; 47B3318B16680FF100C9FFA0 /* ftp.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = ftp.tiff; sourceTree = ""; }; 47B331911668102400C9FFA0 /* s3.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = s3.tiff; sourceTree = ""; }; 47B331921668102400C9FFA0 /* swift.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = swift.tiff; sourceTree = ""; }; @@ -1409,9 +1206,6 @@ 47B607490DA420880068282C /* da */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = da; path = da.lproj/Keychain.strings; sourceTree = ""; }; 47B888A817984584004E298A /* Folder.xib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = Folder.xib; path = resources/Folder.xib; sourceTree = ""; }; 47BCF18D13BB4EC700D26E4C /* setup/app/container-migration.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "setup/app/container-migration.plist"; sourceTree = ""; }; - 47BE1F8912369DF100E758FE /* CDTransmitImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDTransmitImporter.h; path = importer/CDTransmitImporter.h; sourceTree = ""; }; - 47BE1F8A12369DF100E758FE /* CDTransmitImporter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDTransmitImporter.m; path = importer/CDTransmitImporter.m; sourceTree = ""; }; - 47BEDB030B92960400141EB4 /* liblaunchservicesschemehandler.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = liblaunchservicesschemehandler.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 47BEDBD20B9296C800141EB4 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; 47C2AD801A268C880047B67A /* duck.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = duck.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 47C4D6CB08798D0C007A1D39 /* cs */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = cs; path = cs.lproj/Command.xib; sourceTree = ""; }; @@ -1441,19 +1235,12 @@ 47C4E80E0879EBFB007A1D39 /* ca */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = ca; path = ca.lproj/Donate.xib; sourceTree = ""; }; 47C4E8110879EC01007A1D39 /* ca */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = ca; path = ca.lproj/Connection.xib; sourceTree = ""; }; 47C4E8140879EC2F007A1D39 /* sv */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = sv; path = sv.lproj/Donate.xib; sourceTree = ""; }; - 47C57EAA162F45F200A272BC /* FinderLocal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FinderLocal.h; sourceTree = ""; }; - 47C57EAB162F45F200A272BC /* FinderLocal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FinderLocal.m; sourceTree = ""; }; - 47C57EBA162F471700A272BC /* liblaunchservicesfiledescriptor.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = liblaunchservicesfiledescriptor.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; - 47C57EBB162F479900A272BC /* LaunchServicesFileDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LaunchServicesFileDescriptor.h; sourceTree = ""; }; - 47C57EBC162F479900A272BC /* LaunchServicesFileDescriptor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LaunchServicesFileDescriptor.m; sourceTree = ""; }; 47C59A560880165B00CC2FA5 /* ja */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = ja; path = ja.lproj/Command.xib; sourceTree = ""; }; 47C6ECFA19C9EBAC0059F4DE /* ar */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = ar; path = ar.lproj/Support.strings; sourceTree = ""; }; 47C6ECFB19C9EBB30059F4DE /* ca */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = ca; path = ca.lproj/Support.strings; sourceTree = ""; }; 47C6ECFC19C9EBB30059F4DE /* bg */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = bg; path = bg.lproj/Support.strings; sourceTree = ""; }; 47C6ECFD19C9EBB30059F4DE /* de */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = de; path = de.lproj/Support.strings; sourceTree = ""; }; 47C761EA06A88D7600B464FF /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = ""; }; - 47C88FED17269A54001A746A /* IOKitSleepPreventer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IOKitSleepPreventer.h; sourceTree = ""; }; - 47C88FEE17269A54001A746A /* IOKitSleepPreventer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IOKitSleepPreventer.m; sourceTree = ""; }; 47C92D4E1189B6B300EDDD00 /* sl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = sl; path = sl.lproj/Bookmark.xib; sourceTree = ""; }; 47C92D4F1189B6B300EDDD00 /* sl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = sl; path = sl.lproj/Browser.xib; sourceTree = ""; }; 47C92D501189B6B300EDDD00 /* sl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = sl; path = sl.lproj/Command.xib; sourceTree = ""; }; @@ -1621,605 +1408,6 @@ 47CF43D41508FCC000647729 /* ar */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = ar; path = ar.lproj/Transfer.strings; sourceTree = ""; }; 47D4148E0F0ECFBD00BAF184 /* SecurityFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SecurityFoundation.framework; path = System/Library/Frameworks/SecurityFoundation.framework; sourceTree = SDKROOT; }; 47D939C91A268D7F0006D4AE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 47D93A1E1A2764910006D4AE /* ASSEMBLY_EXCEPTION */ = {isa = PBXFileReference; lastKnownFileType = text; path = ASSEMBLY_EXCEPTION; sourceTree = ""; }; - 47D93A201A2764910006D4AE /* java */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = java; sourceTree = ""; }; - 47D93A211A2764910006D4AE /* keytool */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = keytool; sourceTree = ""; }; - 47D93A221A2764910006D4AE /* orbd */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = orbd; sourceTree = ""; }; - 47D93A231A2764910006D4AE /* pack200 */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = pack200; sourceTree = ""; }; - 47D93A241A2764910006D4AE /* policytool */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = policytool; sourceTree = ""; }; - 47D93A251A2764910006D4AE /* rmid */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = rmid; sourceTree = ""; }; - 47D93A261A2764910006D4AE /* rmiregistry */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = rmiregistry; sourceTree = ""; }; - 47D93A271A2764910006D4AE /* servertool */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = servertool; sourceTree = ""; }; - 47D93A281A2764910006D4AE /* tnameserv */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = tnameserv; sourceTree = ""; }; - 47D93A291A2764910006D4AE /* unpack200 */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = unpack200; sourceTree = ""; }; - 47D93A2C1A2764910006D4AE /* calendars.properties */ = {isa = PBXFileReference; lastKnownFileType = text; path = calendars.properties; sourceTree = ""; }; - 47D93A2D1A2764910006D4AE /* charsets.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = charsets.jar; sourceTree = ""; }; - 47D93A2E1A2764910006D4AE /* classlist */ = {isa = PBXFileReference; lastKnownFileType = text; path = classlist; sourceTree = ""; }; - 47D93A301A2764910006D4AE /* CIEXYZ.pf */ = {isa = PBXFileReference; lastKnownFileType = file; path = CIEXYZ.pf; sourceTree = ""; }; - 47D93A311A2764910006D4AE /* GRAY.pf */ = {isa = PBXFileReference; lastKnownFileType = file; path = GRAY.pf; sourceTree = ""; }; - 47D93A321A2764910006D4AE /* LINEAR_RGB.pf */ = {isa = PBXFileReference; lastKnownFileType = file; path = LINEAR_RGB.pf; sourceTree = ""; }; - 47D93A331A2764910006D4AE /* PYCC.pf */ = {isa = PBXFileReference; lastKnownFileType = file; path = PYCC.pf; sourceTree = ""; }; - 47D93A341A2764910006D4AE /* sRGB.pf */ = {isa = PBXFileReference; lastKnownFileType = file; path = sRGB.pf; sourceTree = ""; }; - 47D93A351A2764910006D4AE /* content-types.properties */ = {isa = PBXFileReference; lastKnownFileType = text; path = "content-types.properties"; sourceTree = ""; }; - 47D93A361A2764910006D4AE /* currency.data */ = {isa = PBXFileReference; lastKnownFileType = file; path = currency.data; sourceTree = ""; }; - 47D93A381A2764910006D4AE /* dnsns.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = dnsns.jar; sourceTree = ""; }; - 47D93A391A2764910006D4AE /* localedata.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = localedata.jar; sourceTree = ""; }; - 47D93A3A1A2764910006D4AE /* meta-index */ = {isa = PBXFileReference; lastKnownFileType = text; path = "meta-index"; sourceTree = ""; }; - 47D93A3B1A2764910006D4AE /* sunec.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = sunec.jar; sourceTree = ""; }; - 47D93A3C1A2764910006D4AE /* sunjce_provider.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = sunjce_provider.jar; sourceTree = ""; }; - 47D93A3D1A2764910006D4AE /* sunpkcs11.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = sunpkcs11.jar; sourceTree = ""; }; - 47D93A3E1A2764910006D4AE /* zipfs.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = zipfs.jar; sourceTree = ""; }; - 47D93A3F1A2764910006D4AE /* flavormap.properties */ = {isa = PBXFileReference; lastKnownFileType = text; path = flavormap.properties; sourceTree = ""; }; - 47D93A401A2764910006D4AE /* fontconfig.bfc */ = {isa = PBXFileReference; lastKnownFileType = file; path = fontconfig.bfc; sourceTree = ""; }; - 47D93A411A2764910006D4AE /* fontconfig.properties.src */ = {isa = PBXFileReference; lastKnownFileType = text; path = fontconfig.properties.src; sourceTree = ""; }; - 47D93A431A2764910006D4AE /* libmawt.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libmawt.dylib; sourceTree = ""; }; - 47D93A461A2764910006D4AE /* cursors.properties */ = {isa = PBXFileReference; lastKnownFileType = text; path = cursors.properties; sourceTree = ""; }; - 47D93A471A2764910006D4AE /* invalid32x32.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = invalid32x32.gif; sourceTree = ""; }; - 47D93A481A2764910006D4AE /* motif_CopyDrop32x32.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = motif_CopyDrop32x32.gif; sourceTree = ""; }; - 47D93A491A2764910006D4AE /* motif_CopyNoDrop32x32.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = motif_CopyNoDrop32x32.gif; sourceTree = ""; }; - 47D93A4A1A2764910006D4AE /* motif_LinkDrop32x32.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = motif_LinkDrop32x32.gif; sourceTree = ""; }; - 47D93A4B1A2764910006D4AE /* motif_LinkNoDrop32x32.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = motif_LinkNoDrop32x32.gif; sourceTree = ""; }; - 47D93A4C1A2764910006D4AE /* motif_MoveDrop32x32.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = motif_MoveDrop32x32.gif; sourceTree = ""; }; - 47D93A4D1A2764910006D4AE /* motif_MoveNoDrop32x32.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = motif_MoveNoDrop32x32.gif; sourceTree = ""; }; - 47D93A4E1A2764910006D4AE /* jce.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = jce.jar; sourceTree = ""; }; - 47D93A501A2764910006D4AE /* libjli.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libjli.dylib; sourceTree = ""; }; - 47D93A511A2764910006D4AE /* JObjC.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = JObjC.jar; sourceTree = ""; }; - 47D93A521A2764910006D4AE /* jsse.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = jsse.jar; sourceTree = ""; }; - 47D93A531A2764910006D4AE /* jvm.cfg */ = {isa = PBXFileReference; lastKnownFileType = text; path = jvm.cfg; sourceTree = ""; }; - 47D93A541A2764910006D4AE /* jvm.hprof.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = jvm.hprof.txt; sourceTree = ""; }; - 47D93A551A2764910006D4AE /* libAppleScriptEngine.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libAppleScriptEngine.dylib; sourceTree = ""; }; - 47D93A561A2764910006D4AE /* libattach.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libattach.dylib; sourceTree = ""; }; - 47D93A571A2764910006D4AE /* libawt.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libawt.dylib; sourceTree = ""; }; - 47D93A581A2764910006D4AE /* libdt_socket.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libdt_socket.dylib; sourceTree = ""; }; - 47D93A591A2764910006D4AE /* libfontmanager.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libfontmanager.dylib; sourceTree = ""; }; - 47D93A5A1A2764910006D4AE /* libfreetype.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libfreetype.dylib; sourceTree = ""; }; - 47D93A5B1A2764910006D4AE /* libhprof.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libhprof.dylib; sourceTree = ""; }; - 47D93A5C1A2764910006D4AE /* libinstrument.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libinstrument.dylib; sourceTree = ""; }; - 47D93A5D1A2764910006D4AE /* libj2gss.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libj2gss.dylib; sourceTree = ""; }; - 47D93A5E1A2764910006D4AE /* libj2pcsc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libj2pcsc.dylib; sourceTree = ""; }; - 47D93A5F1A2764910006D4AE /* libj2pkcs11.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libj2pkcs11.dylib; sourceTree = ""; }; - 47D93A601A2764910006D4AE /* libjaas_unix.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libjaas_unix.dylib; sourceTree = ""; }; - 47D93A611A2764910006D4AE /* libjava.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libjava.dylib; sourceTree = ""; }; - 47D93A621A2764910006D4AE /* libjava_crw_demo.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libjava_crw_demo.dylib; sourceTree = ""; }; - 47D93A631A2764910006D4AE /* libjawt.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libjawt.dylib; sourceTree = ""; }; - 47D93A641A2764910006D4AE /* libjdwp.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libjdwp.dylib; sourceTree = ""; }; - 47D93A651A2764910006D4AE /* libJObjC.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libJObjC.dylib; sourceTree = ""; }; - 47D93A661A2764910006D4AE /* libjpeg.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libjpeg.dylib; sourceTree = ""; }; - 47D93A671A2764910006D4AE /* libjsdt.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libjsdt.dylib; sourceTree = ""; }; - 47D93A681A2764910006D4AE /* libjsig.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libjsig.dylib; sourceTree = ""; }; - 47D93A691A2764910006D4AE /* libjsound.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libjsound.dylib; sourceTree = ""; }; - 47D93A6A1A2764910006D4AE /* liblcms.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = liblcms.dylib; sourceTree = ""; }; - 47D93A6B1A2764910006D4AE /* libmanagement.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libmanagement.dylib; sourceTree = ""; }; - 47D93A6C1A2764910006D4AE /* libmlib_image.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libmlib_image.dylib; sourceTree = ""; }; - 47D93A6D1A2764910006D4AE /* libnet.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libnet.dylib; sourceTree = ""; }; - 47D93A6E1A2764910006D4AE /* libnio.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libnio.dylib; sourceTree = ""; }; - 47D93A6F1A2764910006D4AE /* libnpt.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libnpt.dylib; sourceTree = ""; }; - 47D93A701A2764910006D4AE /* libosx.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libosx.dylib; sourceTree = ""; }; - 47D93A711A2764910006D4AE /* libosxapp.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libosxapp.dylib; sourceTree = ""; }; - 47D93A721A2764910006D4AE /* libosxkrb5.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libosxkrb5.dylib; sourceTree = ""; }; - 47D93A731A2764910006D4AE /* libosxui.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libosxui.dylib; sourceTree = ""; }; - 47D93A741A2764910006D4AE /* libsaproc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libsaproc.dylib; sourceTree = ""; }; - 47D93A751A2764910006D4AE /* libsplashscreen.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libsplashscreen.dylib; sourceTree = ""; }; - 47D93A761A2764910006D4AE /* libsunec.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libsunec.dylib; sourceTree = ""; }; - 47D93A771A2764910006D4AE /* libunpack.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libunpack.dylib; sourceTree = ""; }; - 47D93A781A2764910006D4AE /* libverify.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libverify.dylib; sourceTree = ""; }; - 47D93A791A2764910006D4AE /* libzip.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libzip.dylib; sourceTree = ""; }; - 47D93A7A1A2764910006D4AE /* logging.properties */ = {isa = PBXFileReference; lastKnownFileType = text; path = logging.properties; sourceTree = ""; }; - 47D93A7C1A2764910006D4AE /* liblwawt.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = liblwawt.dylib; sourceTree = ""; }; - 47D93A7E1A2764910006D4AE /* jmxremote.access */ = {isa = PBXFileReference; lastKnownFileType = text; path = jmxremote.access; sourceTree = ""; }; - 47D93A7F1A2764910006D4AE /* jmxremote.password.template */ = {isa = PBXFileReference; lastKnownFileType = text; path = jmxremote.password.template; sourceTree = ""; }; - 47D93A801A2764910006D4AE /* management.properties */ = {isa = PBXFileReference; lastKnownFileType = text; path = management.properties; sourceTree = ""; }; - 47D93A811A2764910006D4AE /* snmp.acl.template */ = {isa = PBXFileReference; lastKnownFileType = text; path = snmp.acl.template; sourceTree = ""; }; - 47D93A821A2764910006D4AE /* management-agent.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = "management-agent.jar"; sourceTree = ""; }; - 47D93A831A2764910006D4AE /* meta-index */ = {isa = PBXFileReference; lastKnownFileType = text; path = "meta-index"; sourceTree = ""; }; - 47D93A841A2764910006D4AE /* net.properties */ = {isa = PBXFileReference; lastKnownFileType = text; path = net.properties; sourceTree = ""; }; - 47D93A851A2764910006D4AE /* psfont.properties.ja */ = {isa = PBXFileReference; lastKnownFileType = text; path = psfont.properties.ja; sourceTree = ""; }; - 47D93A861A2764910006D4AE /* psfontj2d.properties */ = {isa = PBXFileReference; lastKnownFileType = text; path = psfontj2d.properties; sourceTree = ""; }; - 47D93A871A2764910006D4AE /* resources.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = resources.jar; sourceTree = ""; }; - 47D93A881A2764910006D4AE /* rt.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = rt.jar; sourceTree = ""; }; - 47D93A8A1A2764910006D4AE /* cacerts */ = {isa = PBXFileReference; lastKnownFileType = text; path = cacerts; sourceTree = ""; }; - 47D93A8B1A2764910006D4AE /* java.policy */ = {isa = PBXFileReference; lastKnownFileType = text; path = java.policy; sourceTree = ""; }; - 47D93A8C1A2764910006D4AE /* java.security */ = {isa = PBXFileReference; lastKnownFileType = text; path = java.security; sourceTree = ""; }; - 47D93A8D1A2764910006D4AE /* local_policy.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = local_policy.jar; sourceTree = ""; }; - 47D93A8E1A2764910006D4AE /* US_export_policy.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = US_export_policy.jar; sourceTree = ""; }; - 47D93A901A2764910006D4AE /* libjsig.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libjsig.dylib; sourceTree = ""; }; - 47D93A911A2764910006D4AE /* libjvm.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libjvm.dylib; sourceTree = ""; }; - 47D93A921A2764910006D4AE /* Xusage.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Xusage.txt; sourceTree = ""; }; - 47D93A931A2764910006D4AE /* sound.properties */ = {isa = PBXFileReference; lastKnownFileType = text; path = sound.properties; sourceTree = ""; }; - 47D93A951A2764910006D4AE /* libmawt.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libmawt.dylib; sourceTree = ""; }; - 47D93A981A2764910006D4AE /* Abidjan */ = {isa = PBXFileReference; lastKnownFileType = text; path = Abidjan; sourceTree = ""; }; - 47D93A991A2764910006D4AE /* Accra */ = {isa = PBXFileReference; lastKnownFileType = text; path = Accra; sourceTree = ""; }; - 47D93A9A1A2764910006D4AE /* Addis_Ababa */ = {isa = PBXFileReference; lastKnownFileType = text; path = Addis_Ababa; sourceTree = ""; }; - 47D93A9B1A2764910006D4AE /* Algiers */ = {isa = PBXFileReference; lastKnownFileType = text; path = Algiers; sourceTree = ""; }; - 47D93A9C1A2764910006D4AE /* Asmara */ = {isa = PBXFileReference; lastKnownFileType = text; path = Asmara; sourceTree = ""; }; - 47D93A9D1A2764910006D4AE /* Bamako */ = {isa = PBXFileReference; lastKnownFileType = text; path = Bamako; sourceTree = ""; }; - 47D93A9E1A2764910006D4AE /* Bangui */ = {isa = PBXFileReference; lastKnownFileType = text; path = Bangui; sourceTree = ""; }; - 47D93A9F1A2764910006D4AE /* Banjul */ = {isa = PBXFileReference; lastKnownFileType = text; path = Banjul; sourceTree = ""; }; - 47D93AA01A2764910006D4AE /* Bissau */ = {isa = PBXFileReference; lastKnownFileType = text; path = Bissau; sourceTree = ""; }; - 47D93AA11A2764910006D4AE /* Blantyre */ = {isa = PBXFileReference; lastKnownFileType = text; path = Blantyre; sourceTree = ""; }; - 47D93AA21A2764910006D4AE /* Brazzaville */ = {isa = PBXFileReference; lastKnownFileType = text; path = Brazzaville; sourceTree = ""; }; - 47D93AA31A2764910006D4AE /* Bujumbura */ = {isa = PBXFileReference; lastKnownFileType = text; path = Bujumbura; sourceTree = ""; }; - 47D93AA41A2764910006D4AE /* Cairo */ = {isa = PBXFileReference; lastKnownFileType = text; path = Cairo; sourceTree = ""; }; - 47D93AA51A2764910006D4AE /* Casablanca */ = {isa = PBXFileReference; lastKnownFileType = text; path = Casablanca; sourceTree = ""; }; - 47D93AA61A2764910006D4AE /* Ceuta */ = {isa = PBXFileReference; lastKnownFileType = text; path = Ceuta; sourceTree = ""; }; - 47D93AA71A2764910006D4AE /* Conakry */ = {isa = PBXFileReference; lastKnownFileType = text; path = Conakry; sourceTree = ""; }; - 47D93AA81A2764910006D4AE /* Dakar */ = {isa = PBXFileReference; lastKnownFileType = text; path = Dakar; sourceTree = ""; }; - 47D93AA91A2764910006D4AE /* Dar_es_Salaam */ = {isa = PBXFileReference; lastKnownFileType = text; path = Dar_es_Salaam; sourceTree = ""; }; - 47D93AAA1A2764910006D4AE /* Djibouti */ = {isa = PBXFileReference; lastKnownFileType = text; path = Djibouti; sourceTree = ""; }; - 47D93AAB1A2764910006D4AE /* Douala */ = {isa = PBXFileReference; lastKnownFileType = text; path = Douala; sourceTree = ""; }; - 47D93AAC1A2764910006D4AE /* El_Aaiun */ = {isa = PBXFileReference; lastKnownFileType = text; path = El_Aaiun; sourceTree = ""; }; - 47D93AAD1A2764910006D4AE /* Freetown */ = {isa = PBXFileReference; lastKnownFileType = text; path = Freetown; sourceTree = ""; }; - 47D93AAE1A2764910006D4AE /* Gaborone */ = {isa = PBXFileReference; lastKnownFileType = text; path = Gaborone; sourceTree = ""; }; - 47D93AAF1A2764910006D4AE /* Harare */ = {isa = PBXFileReference; lastKnownFileType = text; path = Harare; sourceTree = ""; }; - 47D93AB01A2764910006D4AE /* Johannesburg */ = {isa = PBXFileReference; lastKnownFileType = text; path = Johannesburg; sourceTree = ""; }; - 47D93AB11A2764910006D4AE /* Juba */ = {isa = PBXFileReference; lastKnownFileType = text; path = Juba; sourceTree = ""; }; - 47D93AB21A2764910006D4AE /* Kampala */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kampala; sourceTree = ""; }; - 47D93AB31A2764910006D4AE /* Khartoum */ = {isa = PBXFileReference; lastKnownFileType = text; path = Khartoum; sourceTree = ""; }; - 47D93AB41A2764910006D4AE /* Kigali */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kigali; sourceTree = ""; }; - 47D93AB51A2764910006D4AE /* Kinshasa */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kinshasa; sourceTree = ""; }; - 47D93AB61A2764910006D4AE /* Lagos */ = {isa = PBXFileReference; lastKnownFileType = text; path = Lagos; sourceTree = ""; }; - 47D93AB71A2764910006D4AE /* Libreville */ = {isa = PBXFileReference; lastKnownFileType = text; path = Libreville; sourceTree = ""; }; - 47D93AB81A2764910006D4AE /* Lome */ = {isa = PBXFileReference; lastKnownFileType = text; path = Lome; sourceTree = ""; }; - 47D93AB91A2764910006D4AE /* Luanda */ = {isa = PBXFileReference; lastKnownFileType = text; path = Luanda; sourceTree = ""; }; - 47D93ABA1A2764910006D4AE /* Lubumbashi */ = {isa = PBXFileReference; lastKnownFileType = text; path = Lubumbashi; sourceTree = ""; }; - 47D93ABB1A2764910006D4AE /* Lusaka */ = {isa = PBXFileReference; lastKnownFileType = text; path = Lusaka; sourceTree = ""; }; - 47D93ABC1A2764910006D4AE /* Malabo */ = {isa = PBXFileReference; lastKnownFileType = text; path = Malabo; sourceTree = ""; }; - 47D93ABD1A2764910006D4AE /* Maputo */ = {isa = PBXFileReference; lastKnownFileType = text; path = Maputo; sourceTree = ""; }; - 47D93ABE1A2764910006D4AE /* Maseru */ = {isa = PBXFileReference; lastKnownFileType = text; path = Maseru; sourceTree = ""; }; - 47D93ABF1A2764910006D4AE /* Mbabane */ = {isa = PBXFileReference; lastKnownFileType = text; path = Mbabane; sourceTree = ""; }; - 47D93AC01A2764910006D4AE /* Mogadishu */ = {isa = PBXFileReference; lastKnownFileType = text; path = Mogadishu; sourceTree = ""; }; - 47D93AC11A2764910006D4AE /* Monrovia */ = {isa = PBXFileReference; lastKnownFileType = text; path = Monrovia; sourceTree = ""; }; - 47D93AC21A2764910006D4AE /* Nairobi */ = {isa = PBXFileReference; lastKnownFileType = text; path = Nairobi; sourceTree = ""; }; - 47D93AC31A2764910006D4AE /* Ndjamena */ = {isa = PBXFileReference; lastKnownFileType = text; path = Ndjamena; sourceTree = ""; }; - 47D93AC41A2764910006D4AE /* Niamey */ = {isa = PBXFileReference; lastKnownFileType = text; path = Niamey; sourceTree = ""; }; - 47D93AC51A2764910006D4AE /* Nouakchott */ = {isa = PBXFileReference; lastKnownFileType = text; path = Nouakchott; sourceTree = ""; }; - 47D93AC61A2764910006D4AE /* Ouagadougou */ = {isa = PBXFileReference; lastKnownFileType = text; path = Ouagadougou; sourceTree = ""; }; - 47D93AC71A2764910006D4AE /* Porto-Novo */ = {isa = PBXFileReference; lastKnownFileType = text; path = "Porto-Novo"; sourceTree = ""; }; - 47D93AC81A2764910006D4AE /* Sao_Tome */ = {isa = PBXFileReference; lastKnownFileType = text; path = Sao_Tome; sourceTree = ""; }; - 47D93AC91A2764910006D4AE /* Tripoli */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tripoli; sourceTree = ""; }; - 47D93ACA1A2764910006D4AE /* Tunis */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tunis; sourceTree = ""; }; - 47D93ACB1A2764910006D4AE /* Windhoek */ = {isa = PBXFileReference; lastKnownFileType = text; path = Windhoek; sourceTree = ""; }; - 47D93ACD1A2764910006D4AE /* Adak */ = {isa = PBXFileReference; lastKnownFileType = text; path = Adak; sourceTree = ""; }; - 47D93ACE1A2764910006D4AE /* Anchorage */ = {isa = PBXFileReference; lastKnownFileType = text; path = Anchorage; sourceTree = ""; }; - 47D93ACF1A2764910006D4AE /* Anguilla */ = {isa = PBXFileReference; lastKnownFileType = text; path = Anguilla; sourceTree = ""; }; - 47D93AD01A2764910006D4AE /* Antigua */ = {isa = PBXFileReference; lastKnownFileType = text; path = Antigua; sourceTree = ""; }; - 47D93AD11A2764910006D4AE /* Araguaina */ = {isa = PBXFileReference; lastKnownFileType = text; path = Araguaina; sourceTree = ""; }; - 47D93AD31A2764910006D4AE /* Buenos_Aires */ = {isa = PBXFileReference; lastKnownFileType = text; path = Buenos_Aires; sourceTree = ""; }; - 47D93AD41A2764910006D4AE /* Catamarca */ = {isa = PBXFileReference; lastKnownFileType = text; path = Catamarca; sourceTree = ""; }; - 47D93AD51A2764910006D4AE /* Cordoba */ = {isa = PBXFileReference; lastKnownFileType = text; path = Cordoba; sourceTree = ""; }; - 47D93AD61A2764910006D4AE /* Jujuy */ = {isa = PBXFileReference; lastKnownFileType = text; path = Jujuy; sourceTree = ""; }; - 47D93AD71A2764910006D4AE /* La_Rioja */ = {isa = PBXFileReference; lastKnownFileType = text; path = La_Rioja; sourceTree = ""; }; - 47D93AD81A2764910006D4AE /* Mendoza */ = {isa = PBXFileReference; lastKnownFileType = text; path = Mendoza; sourceTree = ""; }; - 47D93AD91A2764910006D4AE /* Rio_Gallegos */ = {isa = PBXFileReference; lastKnownFileType = text; path = Rio_Gallegos; sourceTree = ""; }; - 47D93ADA1A2764910006D4AE /* Salta */ = {isa = PBXFileReference; lastKnownFileType = text; path = Salta; sourceTree = ""; }; - 47D93ADB1A2764910006D4AE /* San_Juan */ = {isa = PBXFileReference; lastKnownFileType = text; path = San_Juan; sourceTree = ""; }; - 47D93ADC1A2764910006D4AE /* San_Luis */ = {isa = PBXFileReference; lastKnownFileType = text; path = San_Luis; sourceTree = ""; }; - 47D93ADD1A2764910006D4AE /* Tucuman */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tucuman; sourceTree = ""; }; - 47D93ADE1A2764910006D4AE /* Ushuaia */ = {isa = PBXFileReference; lastKnownFileType = text; path = Ushuaia; sourceTree = ""; }; - 47D93ADF1A2764910006D4AE /* Aruba */ = {isa = PBXFileReference; lastKnownFileType = text; path = Aruba; sourceTree = ""; }; - 47D93AE01A2764910006D4AE /* Asuncion */ = {isa = PBXFileReference; lastKnownFileType = text; path = Asuncion; sourceTree = ""; }; - 47D93AE11A2764910006D4AE /* Atikokan */ = {isa = PBXFileReference; lastKnownFileType = text; path = Atikokan; sourceTree = ""; }; - 47D93AE21A2764910006D4AE /* Bahia */ = {isa = PBXFileReference; lastKnownFileType = text; path = Bahia; sourceTree = ""; }; - 47D93AE31A2764910006D4AE /* Bahia_Banderas */ = {isa = PBXFileReference; lastKnownFileType = text; path = Bahia_Banderas; sourceTree = ""; }; - 47D93AE41A2764910006D4AE /* Barbados */ = {isa = PBXFileReference; lastKnownFileType = text; path = Barbados; sourceTree = ""; }; - 47D93AE51A2764910006D4AE /* Belem */ = {isa = PBXFileReference; lastKnownFileType = text; path = Belem; sourceTree = ""; }; - 47D93AE61A2764910006D4AE /* Belize */ = {isa = PBXFileReference; lastKnownFileType = text; path = Belize; sourceTree = ""; }; - 47D93AE71A2764910006D4AE /* Blanc-Sablon */ = {isa = PBXFileReference; lastKnownFileType = text; path = "Blanc-Sablon"; sourceTree = ""; }; - 47D93AE81A2764910006D4AE /* Boa_Vista */ = {isa = PBXFileReference; lastKnownFileType = text; path = Boa_Vista; sourceTree = ""; }; - 47D93AE91A2764910006D4AE /* Bogota */ = {isa = PBXFileReference; lastKnownFileType = text; path = Bogota; sourceTree = ""; }; - 47D93AEA1A2764910006D4AE /* Boise */ = {isa = PBXFileReference; lastKnownFileType = text; path = Boise; sourceTree = ""; }; - 47D93AEB1A2764910006D4AE /* Cambridge_Bay */ = {isa = PBXFileReference; lastKnownFileType = text; path = Cambridge_Bay; sourceTree = ""; }; - 47D93AEC1A2764910006D4AE /* Campo_Grande */ = {isa = PBXFileReference; lastKnownFileType = text; path = Campo_Grande; sourceTree = ""; }; - 47D93AED1A2764910006D4AE /* Cancun */ = {isa = PBXFileReference; lastKnownFileType = text; path = Cancun; sourceTree = ""; }; - 47D93AEE1A2764910006D4AE /* Caracas */ = {isa = PBXFileReference; lastKnownFileType = text; path = Caracas; sourceTree = ""; }; - 47D93AEF1A2764910006D4AE /* Cayenne */ = {isa = PBXFileReference; lastKnownFileType = text; path = Cayenne; sourceTree = ""; }; - 47D93AF01A2764910006D4AE /* Cayman */ = {isa = PBXFileReference; lastKnownFileType = text; path = Cayman; sourceTree = ""; }; - 47D93AF11A2764910006D4AE /* Chicago */ = {isa = PBXFileReference; lastKnownFileType = text; path = Chicago; sourceTree = ""; }; - 47D93AF21A2764910006D4AE /* Chihuahua */ = {isa = PBXFileReference; lastKnownFileType = text; path = Chihuahua; sourceTree = ""; }; - 47D93AF31A2764910006D4AE /* Costa_Rica */ = {isa = PBXFileReference; lastKnownFileType = text; path = Costa_Rica; sourceTree = ""; }; - 47D93AF41A2764910006D4AE /* Creston */ = {isa = PBXFileReference; lastKnownFileType = text; path = Creston; sourceTree = ""; }; - 47D93AF51A2764910006D4AE /* Cuiaba */ = {isa = PBXFileReference; lastKnownFileType = text; path = Cuiaba; sourceTree = ""; }; - 47D93AF61A2764910006D4AE /* Curacao */ = {isa = PBXFileReference; lastKnownFileType = text; path = Curacao; sourceTree = ""; }; - 47D93AF71A2764910006D4AE /* Danmarkshavn */ = {isa = PBXFileReference; lastKnownFileType = text; path = Danmarkshavn; sourceTree = ""; }; - 47D93AF81A2764910006D4AE /* Dawson */ = {isa = PBXFileReference; lastKnownFileType = text; path = Dawson; sourceTree = ""; }; - 47D93AF91A2764910006D4AE /* Dawson_Creek */ = {isa = PBXFileReference; lastKnownFileType = text; path = Dawson_Creek; sourceTree = ""; }; - 47D93AFA1A2764910006D4AE /* Denver */ = {isa = PBXFileReference; lastKnownFileType = text; path = Denver; sourceTree = ""; }; - 47D93AFB1A2764910006D4AE /* Detroit */ = {isa = PBXFileReference; lastKnownFileType = text; path = Detroit; sourceTree = ""; }; - 47D93AFC1A2764910006D4AE /* Dominica */ = {isa = PBXFileReference; lastKnownFileType = text; path = Dominica; sourceTree = ""; }; - 47D93AFD1A2764910006D4AE /* Edmonton */ = {isa = PBXFileReference; lastKnownFileType = text; path = Edmonton; sourceTree = ""; }; - 47D93AFE1A2764910006D4AE /* Eirunepe */ = {isa = PBXFileReference; lastKnownFileType = text; path = Eirunepe; sourceTree = ""; }; - 47D93AFF1A2764910006D4AE /* El_Salvador */ = {isa = PBXFileReference; lastKnownFileType = text; path = El_Salvador; sourceTree = ""; }; - 47D93B001A2764910006D4AE /* Fortaleza */ = {isa = PBXFileReference; lastKnownFileType = text; path = Fortaleza; sourceTree = ""; }; - 47D93B011A2764910006D4AE /* Glace_Bay */ = {isa = PBXFileReference; lastKnownFileType = text; path = Glace_Bay; sourceTree = ""; }; - 47D93B021A2764910006D4AE /* Godthab */ = {isa = PBXFileReference; lastKnownFileType = text; path = Godthab; sourceTree = ""; }; - 47D93B031A2764910006D4AE /* Goose_Bay */ = {isa = PBXFileReference; lastKnownFileType = text; path = Goose_Bay; sourceTree = ""; }; - 47D93B041A2764910006D4AE /* Grand_Turk */ = {isa = PBXFileReference; lastKnownFileType = text; path = Grand_Turk; sourceTree = ""; }; - 47D93B051A2764910006D4AE /* Grenada */ = {isa = PBXFileReference; lastKnownFileType = text; path = Grenada; sourceTree = ""; }; - 47D93B061A2764910006D4AE /* Guadeloupe */ = {isa = PBXFileReference; lastKnownFileType = text; path = Guadeloupe; sourceTree = ""; }; - 47D93B071A2764910006D4AE /* Guatemala */ = {isa = PBXFileReference; lastKnownFileType = text; path = Guatemala; sourceTree = ""; }; - 47D93B081A2764910006D4AE /* Guayaquil */ = {isa = PBXFileReference; lastKnownFileType = text; path = Guayaquil; sourceTree = ""; }; - 47D93B091A2764910006D4AE /* Guyana */ = {isa = PBXFileReference; lastKnownFileType = text; path = Guyana; sourceTree = ""; }; - 47D93B0A1A2764910006D4AE /* Halifax */ = {isa = PBXFileReference; lastKnownFileType = text; path = Halifax; sourceTree = ""; }; - 47D93B0B1A2764910006D4AE /* Havana */ = {isa = PBXFileReference; lastKnownFileType = text; path = Havana; sourceTree = ""; }; - 47D93B0C1A2764910006D4AE /* Hermosillo */ = {isa = PBXFileReference; lastKnownFileType = text; path = Hermosillo; sourceTree = ""; }; - 47D93B0E1A2764910006D4AE /* Indianapolis */ = {isa = PBXFileReference; lastKnownFileType = text; path = Indianapolis; sourceTree = ""; }; - 47D93B0F1A2764910006D4AE /* Knox */ = {isa = PBXFileReference; lastKnownFileType = text; path = Knox; sourceTree = ""; }; - 47D93B101A2764910006D4AE /* Marengo */ = {isa = PBXFileReference; lastKnownFileType = text; path = Marengo; sourceTree = ""; }; - 47D93B111A2764910006D4AE /* Petersburg */ = {isa = PBXFileReference; lastKnownFileType = text; path = Petersburg; sourceTree = ""; }; - 47D93B121A2764910006D4AE /* Tell_City */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tell_City; sourceTree = ""; }; - 47D93B131A2764910006D4AE /* Vevay */ = {isa = PBXFileReference; lastKnownFileType = text; path = Vevay; sourceTree = ""; }; - 47D93B141A2764910006D4AE /* Vincennes */ = {isa = PBXFileReference; lastKnownFileType = text; path = Vincennes; sourceTree = ""; }; - 47D93B151A2764910006D4AE /* Winamac */ = {isa = PBXFileReference; lastKnownFileType = text; path = Winamac; sourceTree = ""; }; - 47D93B161A2764910006D4AE /* Inuvik */ = {isa = PBXFileReference; lastKnownFileType = text; path = Inuvik; sourceTree = ""; }; - 47D93B171A2764910006D4AE /* Iqaluit */ = {isa = PBXFileReference; lastKnownFileType = text; path = Iqaluit; sourceTree = ""; }; - 47D93B181A2764910006D4AE /* Jamaica */ = {isa = PBXFileReference; lastKnownFileType = text; path = Jamaica; sourceTree = ""; }; - 47D93B191A2764910006D4AE /* Juneau */ = {isa = PBXFileReference; lastKnownFileType = text; path = Juneau; sourceTree = ""; }; - 47D93B1B1A2764910006D4AE /* Louisville */ = {isa = PBXFileReference; lastKnownFileType = text; path = Louisville; sourceTree = ""; }; - 47D93B1C1A2764910006D4AE /* Monticello */ = {isa = PBXFileReference; lastKnownFileType = text; path = Monticello; sourceTree = ""; }; - 47D93B1D1A2764910006D4AE /* La_Paz */ = {isa = PBXFileReference; lastKnownFileType = text; path = La_Paz; sourceTree = ""; }; - 47D93B1E1A2764910006D4AE /* Lima */ = {isa = PBXFileReference; lastKnownFileType = text; path = Lima; sourceTree = ""; }; - 47D93B1F1A2764910006D4AE /* Los_Angeles */ = {isa = PBXFileReference; lastKnownFileType = text; path = Los_Angeles; sourceTree = ""; }; - 47D93B201A2764910006D4AE /* Maceio */ = {isa = PBXFileReference; lastKnownFileType = text; path = Maceio; sourceTree = ""; }; - 47D93B211A2764910006D4AE /* Managua */ = {isa = PBXFileReference; lastKnownFileType = text; path = Managua; sourceTree = ""; }; - 47D93B221A2764910006D4AE /* Manaus */ = {isa = PBXFileReference; lastKnownFileType = text; path = Manaus; sourceTree = ""; }; - 47D93B231A2764910006D4AE /* Martinique */ = {isa = PBXFileReference; lastKnownFileType = text; path = Martinique; sourceTree = ""; }; - 47D93B241A2764920006D4AE /* Matamoros */ = {isa = PBXFileReference; lastKnownFileType = text; path = Matamoros; sourceTree = ""; }; - 47D93B251A2764920006D4AE /* Mazatlan */ = {isa = PBXFileReference; lastKnownFileType = text; path = Mazatlan; sourceTree = ""; }; - 47D93B261A2764920006D4AE /* Menominee */ = {isa = PBXFileReference; lastKnownFileType = text; path = Menominee; sourceTree = ""; }; - 47D93B271A2764920006D4AE /* Merida */ = {isa = PBXFileReference; lastKnownFileType = text; path = Merida; sourceTree = ""; }; - 47D93B281A2764920006D4AE /* Metlakatla */ = {isa = PBXFileReference; lastKnownFileType = text; path = Metlakatla; sourceTree = ""; }; - 47D93B291A2764920006D4AE /* Mexico_City */ = {isa = PBXFileReference; lastKnownFileType = text; path = Mexico_City; sourceTree = ""; }; - 47D93B2A1A2764920006D4AE /* Miquelon */ = {isa = PBXFileReference; lastKnownFileType = text; path = Miquelon; sourceTree = ""; }; - 47D93B2B1A2764920006D4AE /* Moncton */ = {isa = PBXFileReference; lastKnownFileType = text; path = Moncton; sourceTree = ""; }; - 47D93B2C1A2764920006D4AE /* Monterrey */ = {isa = PBXFileReference; lastKnownFileType = text; path = Monterrey; sourceTree = ""; }; - 47D93B2D1A2764920006D4AE /* Montevideo */ = {isa = PBXFileReference; lastKnownFileType = text; path = Montevideo; sourceTree = ""; }; - 47D93B2E1A2764920006D4AE /* Montreal */ = {isa = PBXFileReference; lastKnownFileType = text; path = Montreal; sourceTree = ""; }; - 47D93B2F1A2764920006D4AE /* Montserrat */ = {isa = PBXFileReference; lastKnownFileType = text; path = Montserrat; sourceTree = ""; }; - 47D93B301A2764920006D4AE /* Nassau */ = {isa = PBXFileReference; lastKnownFileType = text; path = Nassau; sourceTree = ""; }; - 47D93B311A2764920006D4AE /* New_York */ = {isa = PBXFileReference; lastKnownFileType = text; path = New_York; sourceTree = ""; }; - 47D93B321A2764920006D4AE /* Nipigon */ = {isa = PBXFileReference; lastKnownFileType = text; path = Nipigon; sourceTree = ""; }; - 47D93B331A2764920006D4AE /* Nome */ = {isa = PBXFileReference; lastKnownFileType = text; path = Nome; sourceTree = ""; }; - 47D93B341A2764920006D4AE /* Noronha */ = {isa = PBXFileReference; lastKnownFileType = text; path = Noronha; sourceTree = ""; }; - 47D93B361A2764920006D4AE /* Beulah */ = {isa = PBXFileReference; lastKnownFileType = text; path = Beulah; sourceTree = ""; }; - 47D93B371A2764920006D4AE /* Center */ = {isa = PBXFileReference; lastKnownFileType = text; path = Center; sourceTree = ""; }; - 47D93B381A2764920006D4AE /* New_Salem */ = {isa = PBXFileReference; lastKnownFileType = text; path = New_Salem; sourceTree = ""; }; - 47D93B391A2764920006D4AE /* Ojinaga */ = {isa = PBXFileReference; lastKnownFileType = text; path = Ojinaga; sourceTree = ""; }; - 47D93B3A1A2764920006D4AE /* Panama */ = {isa = PBXFileReference; lastKnownFileType = text; path = Panama; sourceTree = ""; }; - 47D93B3B1A2764920006D4AE /* Pangnirtung */ = {isa = PBXFileReference; lastKnownFileType = text; path = Pangnirtung; sourceTree = ""; }; - 47D93B3C1A2764920006D4AE /* Paramaribo */ = {isa = PBXFileReference; lastKnownFileType = text; path = Paramaribo; sourceTree = ""; }; - 47D93B3D1A2764920006D4AE /* Phoenix */ = {isa = PBXFileReference; lastKnownFileType = text; path = Phoenix; sourceTree = ""; }; - 47D93B3E1A2764920006D4AE /* Port-au-Prince */ = {isa = PBXFileReference; lastKnownFileType = text; path = "Port-au-Prince"; sourceTree = ""; }; - 47D93B3F1A2764920006D4AE /* Port_of_Spain */ = {isa = PBXFileReference; lastKnownFileType = text; path = Port_of_Spain; sourceTree = ""; }; - 47D93B401A2764920006D4AE /* Porto_Velho */ = {isa = PBXFileReference; lastKnownFileType = text; path = Porto_Velho; sourceTree = ""; }; - 47D93B411A2764920006D4AE /* Puerto_Rico */ = {isa = PBXFileReference; lastKnownFileType = text; path = Puerto_Rico; sourceTree = ""; }; - 47D93B421A2764920006D4AE /* Rainy_River */ = {isa = PBXFileReference; lastKnownFileType = text; path = Rainy_River; sourceTree = ""; }; - 47D93B431A2764920006D4AE /* Rankin_Inlet */ = {isa = PBXFileReference; lastKnownFileType = text; path = Rankin_Inlet; sourceTree = ""; }; - 47D93B441A2764920006D4AE /* Recife */ = {isa = PBXFileReference; lastKnownFileType = text; path = Recife; sourceTree = ""; }; - 47D93B451A2764920006D4AE /* Regina */ = {isa = PBXFileReference; lastKnownFileType = text; path = Regina; sourceTree = ""; }; - 47D93B461A2764920006D4AE /* Resolute */ = {isa = PBXFileReference; lastKnownFileType = text; path = Resolute; sourceTree = ""; }; - 47D93B471A2764920006D4AE /* Rio_Branco */ = {isa = PBXFileReference; lastKnownFileType = text; path = Rio_Branco; sourceTree = ""; }; - 47D93B481A2764920006D4AE /* Santa_Isabel */ = {isa = PBXFileReference; lastKnownFileType = text; path = Santa_Isabel; sourceTree = ""; }; - 47D93B491A2764920006D4AE /* Santarem */ = {isa = PBXFileReference; lastKnownFileType = text; path = Santarem; sourceTree = ""; }; - 47D93B4A1A2764920006D4AE /* Santiago */ = {isa = PBXFileReference; lastKnownFileType = text; path = Santiago; sourceTree = ""; }; - 47D93B4B1A2764920006D4AE /* Santo_Domingo */ = {isa = PBXFileReference; lastKnownFileType = text; path = Santo_Domingo; sourceTree = ""; }; - 47D93B4C1A2764920006D4AE /* Sao_Paulo */ = {isa = PBXFileReference; lastKnownFileType = text; path = Sao_Paulo; sourceTree = ""; }; - 47D93B4D1A2764920006D4AE /* Scoresbysund */ = {isa = PBXFileReference; lastKnownFileType = text; path = Scoresbysund; sourceTree = ""; }; - 47D93B4E1A2764920006D4AE /* Sitka */ = {isa = PBXFileReference; lastKnownFileType = text; path = Sitka; sourceTree = ""; }; - 47D93B4F1A2764920006D4AE /* St_Johns */ = {isa = PBXFileReference; lastKnownFileType = text; path = St_Johns; sourceTree = ""; }; - 47D93B501A2764920006D4AE /* St_Kitts */ = {isa = PBXFileReference; lastKnownFileType = text; path = St_Kitts; sourceTree = ""; }; - 47D93B511A2764920006D4AE /* St_Lucia */ = {isa = PBXFileReference; lastKnownFileType = text; path = St_Lucia; sourceTree = ""; }; - 47D93B521A2764920006D4AE /* St_Thomas */ = {isa = PBXFileReference; lastKnownFileType = text; path = St_Thomas; sourceTree = ""; }; - 47D93B531A2764920006D4AE /* St_Vincent */ = {isa = PBXFileReference; lastKnownFileType = text; path = St_Vincent; sourceTree = ""; }; - 47D93B541A2764920006D4AE /* Swift_Current */ = {isa = PBXFileReference; lastKnownFileType = text; path = Swift_Current; sourceTree = ""; }; - 47D93B551A2764920006D4AE /* Tegucigalpa */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tegucigalpa; sourceTree = ""; }; - 47D93B561A2764920006D4AE /* Thule */ = {isa = PBXFileReference; lastKnownFileType = text; path = Thule; sourceTree = ""; }; - 47D93B571A2764920006D4AE /* Thunder_Bay */ = {isa = PBXFileReference; lastKnownFileType = text; path = Thunder_Bay; sourceTree = ""; }; - 47D93B581A2764920006D4AE /* Tijuana */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tijuana; sourceTree = ""; }; - 47D93B591A2764920006D4AE /* Toronto */ = {isa = PBXFileReference; lastKnownFileType = text; path = Toronto; sourceTree = ""; }; - 47D93B5A1A2764920006D4AE /* Tortola */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tortola; sourceTree = ""; }; - 47D93B5B1A2764920006D4AE /* Vancouver */ = {isa = PBXFileReference; lastKnownFileType = text; path = Vancouver; sourceTree = ""; }; - 47D93B5C1A2764920006D4AE /* Whitehorse */ = {isa = PBXFileReference; lastKnownFileType = text; path = Whitehorse; sourceTree = ""; }; - 47D93B5D1A2764920006D4AE /* Winnipeg */ = {isa = PBXFileReference; lastKnownFileType = text; path = Winnipeg; sourceTree = ""; }; - 47D93B5E1A2764920006D4AE /* Yakutat */ = {isa = PBXFileReference; lastKnownFileType = text; path = Yakutat; sourceTree = ""; }; - 47D93B5F1A2764920006D4AE /* Yellowknife */ = {isa = PBXFileReference; lastKnownFileType = text; path = Yellowknife; sourceTree = ""; }; - 47D93B611A2764920006D4AE /* Casey */ = {isa = PBXFileReference; lastKnownFileType = text; path = Casey; sourceTree = ""; }; - 47D93B621A2764920006D4AE /* Davis */ = {isa = PBXFileReference; lastKnownFileType = text; path = Davis; sourceTree = ""; }; - 47D93B631A2764920006D4AE /* DumontDUrville */ = {isa = PBXFileReference; lastKnownFileType = text; path = DumontDUrville; sourceTree = ""; }; - 47D93B641A2764920006D4AE /* Macquarie */ = {isa = PBXFileReference; lastKnownFileType = text; path = Macquarie; sourceTree = ""; }; - 47D93B651A2764920006D4AE /* Mawson */ = {isa = PBXFileReference; lastKnownFileType = text; path = Mawson; sourceTree = ""; }; - 47D93B661A2764920006D4AE /* McMurdo */ = {isa = PBXFileReference; lastKnownFileType = text; path = McMurdo; sourceTree = ""; }; - 47D93B671A2764920006D4AE /* Palmer */ = {isa = PBXFileReference; lastKnownFileType = text; path = Palmer; sourceTree = ""; }; - 47D93B681A2764920006D4AE /* Rothera */ = {isa = PBXFileReference; lastKnownFileType = text; path = Rothera; sourceTree = ""; }; - 47D93B691A2764920006D4AE /* Syowa */ = {isa = PBXFileReference; lastKnownFileType = text; path = Syowa; sourceTree = ""; }; - 47D93B6A1A2764920006D4AE /* Vostok */ = {isa = PBXFileReference; lastKnownFileType = text; path = Vostok; sourceTree = ""; }; - 47D93B6C1A2764920006D4AE /* Aden */ = {isa = PBXFileReference; lastKnownFileType = text; path = Aden; sourceTree = ""; }; - 47D93B6D1A2764920006D4AE /* Almaty */ = {isa = PBXFileReference; lastKnownFileType = text; path = Almaty; sourceTree = ""; }; - 47D93B6E1A2764920006D4AE /* Amman */ = {isa = PBXFileReference; lastKnownFileType = text; path = Amman; sourceTree = ""; }; - 47D93B6F1A2764920006D4AE /* Anadyr */ = {isa = PBXFileReference; lastKnownFileType = text; path = Anadyr; sourceTree = ""; }; - 47D93B701A2764920006D4AE /* Aqtau */ = {isa = PBXFileReference; lastKnownFileType = text; path = Aqtau; sourceTree = ""; }; - 47D93B711A2764920006D4AE /* Aqtobe */ = {isa = PBXFileReference; lastKnownFileType = text; path = Aqtobe; sourceTree = ""; }; - 47D93B721A2764920006D4AE /* Ashgabat */ = {isa = PBXFileReference; lastKnownFileType = text; path = Ashgabat; sourceTree = ""; }; - 47D93B731A2764920006D4AE /* Baghdad */ = {isa = PBXFileReference; lastKnownFileType = text; path = Baghdad; sourceTree = ""; }; - 47D93B741A2764920006D4AE /* Bahrain */ = {isa = PBXFileReference; lastKnownFileType = text; path = Bahrain; sourceTree = ""; }; - 47D93B751A2764920006D4AE /* Baku */ = {isa = PBXFileReference; lastKnownFileType = text; path = Baku; sourceTree = ""; }; - 47D93B761A2764920006D4AE /* Bangkok */ = {isa = PBXFileReference; lastKnownFileType = text; path = Bangkok; sourceTree = ""; }; - 47D93B771A2764920006D4AE /* Beirut */ = {isa = PBXFileReference; lastKnownFileType = text; path = Beirut; sourceTree = ""; }; - 47D93B781A2764920006D4AE /* Bishkek */ = {isa = PBXFileReference; lastKnownFileType = text; path = Bishkek; sourceTree = ""; }; - 47D93B791A2764920006D4AE /* Brunei */ = {isa = PBXFileReference; lastKnownFileType = text; path = Brunei; sourceTree = ""; }; - 47D93B7A1A2764920006D4AE /* Choibalsan */ = {isa = PBXFileReference; lastKnownFileType = text; path = Choibalsan; sourceTree = ""; }; - 47D93B7B1A2764920006D4AE /* Chongqing */ = {isa = PBXFileReference; lastKnownFileType = text; path = Chongqing; sourceTree = ""; }; - 47D93B7C1A2764920006D4AE /* Colombo */ = {isa = PBXFileReference; lastKnownFileType = text; path = Colombo; sourceTree = ""; }; - 47D93B7D1A2764920006D4AE /* Damascus */ = {isa = PBXFileReference; lastKnownFileType = text; path = Damascus; sourceTree = ""; }; - 47D93B7E1A2764920006D4AE /* Dhaka */ = {isa = PBXFileReference; lastKnownFileType = text; path = Dhaka; sourceTree = ""; }; - 47D93B7F1A2764920006D4AE /* Dili */ = {isa = PBXFileReference; lastKnownFileType = text; path = Dili; sourceTree = ""; }; - 47D93B801A2764920006D4AE /* Dubai */ = {isa = PBXFileReference; lastKnownFileType = text; path = Dubai; sourceTree = ""; }; - 47D93B811A2764920006D4AE /* Dushanbe */ = {isa = PBXFileReference; lastKnownFileType = text; path = Dushanbe; sourceTree = ""; }; - 47D93B821A2764920006D4AE /* Gaza */ = {isa = PBXFileReference; lastKnownFileType = text; path = Gaza; sourceTree = ""; }; - 47D93B831A2764920006D4AE /* Harbin */ = {isa = PBXFileReference; lastKnownFileType = text; path = Harbin; sourceTree = ""; }; - 47D93B841A2764920006D4AE /* Hebron */ = {isa = PBXFileReference; lastKnownFileType = text; path = Hebron; sourceTree = ""; }; - 47D93B851A2764920006D4AE /* Ho_Chi_Minh */ = {isa = PBXFileReference; lastKnownFileType = text; path = Ho_Chi_Minh; sourceTree = ""; }; - 47D93B861A2764920006D4AE /* Hong_Kong */ = {isa = PBXFileReference; lastKnownFileType = text; path = Hong_Kong; sourceTree = ""; }; - 47D93B871A2764920006D4AE /* Hovd */ = {isa = PBXFileReference; lastKnownFileType = text; path = Hovd; sourceTree = ""; }; - 47D93B881A2764920006D4AE /* Irkutsk */ = {isa = PBXFileReference; lastKnownFileType = text; path = Irkutsk; sourceTree = ""; }; - 47D93B891A2764920006D4AE /* Jakarta */ = {isa = PBXFileReference; lastKnownFileType = text; path = Jakarta; sourceTree = ""; }; - 47D93B8A1A2764920006D4AE /* Jayapura */ = {isa = PBXFileReference; lastKnownFileType = text; path = Jayapura; sourceTree = ""; }; - 47D93B8B1A2764920006D4AE /* Jerusalem */ = {isa = PBXFileReference; lastKnownFileType = text; path = Jerusalem; sourceTree = ""; }; - 47D93B8C1A2764920006D4AE /* Kabul */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kabul; sourceTree = ""; }; - 47D93B8D1A2764920006D4AE /* Kamchatka */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kamchatka; sourceTree = ""; }; - 47D93B8E1A2764920006D4AE /* Karachi */ = {isa = PBXFileReference; lastKnownFileType = text; path = Karachi; sourceTree = ""; }; - 47D93B8F1A2764920006D4AE /* Kashgar */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kashgar; sourceTree = ""; }; - 47D93B901A2764920006D4AE /* Kathmandu */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kathmandu; sourceTree = ""; }; - 47D93B911A2764920006D4AE /* Khandyga */ = {isa = PBXFileReference; lastKnownFileType = text; path = Khandyga; sourceTree = ""; }; - 47D93B921A2764920006D4AE /* Kolkata */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kolkata; sourceTree = ""; }; - 47D93B931A2764920006D4AE /* Krasnoyarsk */ = {isa = PBXFileReference; lastKnownFileType = text; path = Krasnoyarsk; sourceTree = ""; }; - 47D93B941A2764920006D4AE /* Kuala_Lumpur */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kuala_Lumpur; sourceTree = ""; }; - 47D93B951A2764920006D4AE /* Kuching */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kuching; sourceTree = ""; }; - 47D93B961A2764920006D4AE /* Kuwait */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kuwait; sourceTree = ""; }; - 47D93B971A2764920006D4AE /* Macau */ = {isa = PBXFileReference; lastKnownFileType = text; path = Macau; sourceTree = ""; }; - 47D93B981A2764920006D4AE /* Magadan */ = {isa = PBXFileReference; lastKnownFileType = text; path = Magadan; sourceTree = ""; }; - 47D93B991A2764920006D4AE /* Makassar */ = {isa = PBXFileReference; lastKnownFileType = text; path = Makassar; sourceTree = ""; }; - 47D93B9A1A2764920006D4AE /* Manila */ = {isa = PBXFileReference; lastKnownFileType = text; path = Manila; sourceTree = ""; }; - 47D93B9B1A2764920006D4AE /* Muscat */ = {isa = PBXFileReference; lastKnownFileType = text; path = Muscat; sourceTree = ""; }; - 47D93B9C1A2764920006D4AE /* Nicosia */ = {isa = PBXFileReference; lastKnownFileType = text; path = Nicosia; sourceTree = ""; }; - 47D93B9D1A2764920006D4AE /* Novokuznetsk */ = {isa = PBXFileReference; lastKnownFileType = text; path = Novokuznetsk; sourceTree = ""; }; - 47D93B9E1A2764920006D4AE /* Novosibirsk */ = {isa = PBXFileReference; lastKnownFileType = text; path = Novosibirsk; sourceTree = ""; }; - 47D93B9F1A2764920006D4AE /* Omsk */ = {isa = PBXFileReference; lastKnownFileType = text; path = Omsk; sourceTree = ""; }; - 47D93BA01A2764920006D4AE /* Oral */ = {isa = PBXFileReference; lastKnownFileType = text; path = Oral; sourceTree = ""; }; - 47D93BA11A2764920006D4AE /* Phnom_Penh */ = {isa = PBXFileReference; lastKnownFileType = text; path = Phnom_Penh; sourceTree = ""; }; - 47D93BA21A2764920006D4AE /* Pontianak */ = {isa = PBXFileReference; lastKnownFileType = text; path = Pontianak; sourceTree = ""; }; - 47D93BA31A2764920006D4AE /* Pyongyang */ = {isa = PBXFileReference; lastKnownFileType = text; path = Pyongyang; sourceTree = ""; }; - 47D93BA41A2764920006D4AE /* Qatar */ = {isa = PBXFileReference; lastKnownFileType = text; path = Qatar; sourceTree = ""; }; - 47D93BA51A2764920006D4AE /* Qyzylorda */ = {isa = PBXFileReference; lastKnownFileType = text; path = Qyzylorda; sourceTree = ""; }; - 47D93BA61A2764920006D4AE /* Rangoon */ = {isa = PBXFileReference; lastKnownFileType = text; path = Rangoon; sourceTree = ""; }; - 47D93BA71A2764920006D4AE /* Riyadh */ = {isa = PBXFileReference; lastKnownFileType = text; path = Riyadh; sourceTree = ""; }; - 47D93BA81A2764920006D4AE /* Riyadh87 */ = {isa = PBXFileReference; lastKnownFileType = text; path = Riyadh87; sourceTree = ""; }; - 47D93BA91A2764920006D4AE /* Riyadh88 */ = {isa = PBXFileReference; lastKnownFileType = text; path = Riyadh88; sourceTree = ""; }; - 47D93BAA1A2764920006D4AE /* Riyadh89 */ = {isa = PBXFileReference; lastKnownFileType = text; path = Riyadh89; sourceTree = ""; }; - 47D93BAB1A2764920006D4AE /* Sakhalin */ = {isa = PBXFileReference; lastKnownFileType = text; path = Sakhalin; sourceTree = ""; }; - 47D93BAC1A2764920006D4AE /* Samarkand */ = {isa = PBXFileReference; lastKnownFileType = text; path = Samarkand; sourceTree = ""; }; - 47D93BAD1A2764920006D4AE /* Seoul */ = {isa = PBXFileReference; lastKnownFileType = text; path = Seoul; sourceTree = ""; }; - 47D93BAE1A2764920006D4AE /* Shanghai */ = {isa = PBXFileReference; lastKnownFileType = text; path = Shanghai; sourceTree = ""; }; - 47D93BAF1A2764920006D4AE /* Singapore */ = {isa = PBXFileReference; lastKnownFileType = text; path = Singapore; sourceTree = ""; }; - 47D93BB01A2764920006D4AE /* Taipei */ = {isa = PBXFileReference; lastKnownFileType = text; path = Taipei; sourceTree = ""; }; - 47D93BB11A2764920006D4AE /* Tashkent */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tashkent; sourceTree = ""; }; - 47D93BB21A2764920006D4AE /* Tbilisi */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tbilisi; sourceTree = ""; }; - 47D93BB31A2764920006D4AE /* Tehran */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tehran; sourceTree = ""; }; - 47D93BB41A2764920006D4AE /* Thimphu */ = {isa = PBXFileReference; lastKnownFileType = text; path = Thimphu; sourceTree = ""; }; - 47D93BB51A2764920006D4AE /* Tokyo */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tokyo; sourceTree = ""; }; - 47D93BB61A2764920006D4AE /* Ulaanbaatar */ = {isa = PBXFileReference; lastKnownFileType = text; path = Ulaanbaatar; sourceTree = ""; }; - 47D93BB71A2764920006D4AE /* Urumqi */ = {isa = PBXFileReference; lastKnownFileType = text; path = Urumqi; sourceTree = ""; }; - 47D93BB81A2764920006D4AE /* Ust-Nera */ = {isa = PBXFileReference; lastKnownFileType = text; path = "Ust-Nera"; sourceTree = ""; }; - 47D93BB91A2764920006D4AE /* Vientiane */ = {isa = PBXFileReference; lastKnownFileType = text; path = Vientiane; sourceTree = ""; }; - 47D93BBA1A2764920006D4AE /* Vladivostok */ = {isa = PBXFileReference; lastKnownFileType = text; path = Vladivostok; sourceTree = ""; }; - 47D93BBB1A2764920006D4AE /* Yakutsk */ = {isa = PBXFileReference; lastKnownFileType = text; path = Yakutsk; sourceTree = ""; }; - 47D93BBC1A2764920006D4AE /* Yekaterinburg */ = {isa = PBXFileReference; lastKnownFileType = text; path = Yekaterinburg; sourceTree = ""; }; - 47D93BBD1A2764920006D4AE /* Yerevan */ = {isa = PBXFileReference; lastKnownFileType = text; path = Yerevan; sourceTree = ""; }; - 47D93BBF1A2764920006D4AE /* Azores */ = {isa = PBXFileReference; lastKnownFileType = text; path = Azores; sourceTree = ""; }; - 47D93BC01A2764920006D4AE /* Bermuda */ = {isa = PBXFileReference; lastKnownFileType = text; path = Bermuda; sourceTree = ""; }; - 47D93BC11A2764920006D4AE /* Canary */ = {isa = PBXFileReference; lastKnownFileType = text; path = Canary; sourceTree = ""; }; - 47D93BC21A2764920006D4AE /* Cape_Verde */ = {isa = PBXFileReference; lastKnownFileType = text; path = Cape_Verde; sourceTree = ""; }; - 47D93BC31A2764920006D4AE /* Faroe */ = {isa = PBXFileReference; lastKnownFileType = text; path = Faroe; sourceTree = ""; }; - 47D93BC41A2764920006D4AE /* Madeira */ = {isa = PBXFileReference; lastKnownFileType = text; path = Madeira; sourceTree = ""; }; - 47D93BC51A2764920006D4AE /* Reykjavik */ = {isa = PBXFileReference; lastKnownFileType = text; path = Reykjavik; sourceTree = ""; }; - 47D93BC61A2764920006D4AE /* South_Georgia */ = {isa = PBXFileReference; lastKnownFileType = text; path = South_Georgia; sourceTree = ""; }; - 47D93BC71A2764920006D4AE /* St_Helena */ = {isa = PBXFileReference; lastKnownFileType = text; path = St_Helena; sourceTree = ""; }; - 47D93BC81A2764920006D4AE /* Stanley */ = {isa = PBXFileReference; lastKnownFileType = text; path = Stanley; sourceTree = ""; }; - 47D93BCA1A2764920006D4AE /* Adelaide */ = {isa = PBXFileReference; lastKnownFileType = text; path = Adelaide; sourceTree = ""; }; - 47D93BCB1A2764920006D4AE /* Brisbane */ = {isa = PBXFileReference; lastKnownFileType = text; path = Brisbane; sourceTree = ""; }; - 47D93BCC1A2764920006D4AE /* Broken_Hill */ = {isa = PBXFileReference; lastKnownFileType = text; path = Broken_Hill; sourceTree = ""; }; - 47D93BCD1A2764920006D4AE /* Currie */ = {isa = PBXFileReference; lastKnownFileType = text; path = Currie; sourceTree = ""; }; - 47D93BCE1A2764920006D4AE /* Darwin */ = {isa = PBXFileReference; lastKnownFileType = text; path = Darwin; sourceTree = ""; }; - 47D93BCF1A2764920006D4AE /* Eucla */ = {isa = PBXFileReference; lastKnownFileType = text; path = Eucla; sourceTree = ""; }; - 47D93BD01A2764920006D4AE /* Hobart */ = {isa = PBXFileReference; lastKnownFileType = text; path = Hobart; sourceTree = ""; }; - 47D93BD11A2764920006D4AE /* Lindeman */ = {isa = PBXFileReference; lastKnownFileType = text; path = Lindeman; sourceTree = ""; }; - 47D93BD21A2764920006D4AE /* Lord_Howe */ = {isa = PBXFileReference; lastKnownFileType = text; path = Lord_Howe; sourceTree = ""; }; - 47D93BD31A2764920006D4AE /* Melbourne */ = {isa = PBXFileReference; lastKnownFileType = text; path = Melbourne; sourceTree = ""; }; - 47D93BD41A2764920006D4AE /* Perth */ = {isa = PBXFileReference; lastKnownFileType = text; path = Perth; sourceTree = ""; }; - 47D93BD51A2764920006D4AE /* Sydney */ = {isa = PBXFileReference; lastKnownFileType = text; path = Sydney; sourceTree = ""; }; - 47D93BD61A2764920006D4AE /* CET */ = {isa = PBXFileReference; lastKnownFileType = text; path = CET; sourceTree = ""; }; - 47D93BD71A2764920006D4AE /* CST6CDT */ = {isa = PBXFileReference; lastKnownFileType = text; path = CST6CDT; sourceTree = ""; }; - 47D93BD81A2764920006D4AE /* EET */ = {isa = PBXFileReference; lastKnownFileType = text; path = EET; sourceTree = ""; }; - 47D93BD91A2764920006D4AE /* EST */ = {isa = PBXFileReference; lastKnownFileType = text; path = EST; sourceTree = ""; }; - 47D93BDA1A2764920006D4AE /* EST5EDT */ = {isa = PBXFileReference; lastKnownFileType = text; path = EST5EDT; sourceTree = ""; }; - 47D93BDC1A2764920006D4AE /* GMT */ = {isa = PBXFileReference; lastKnownFileType = text; path = GMT; sourceTree = ""; }; - 47D93BDD1A2764920006D4AE /* GMT+1 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT+1"; sourceTree = ""; }; - 47D93BDE1A2764920006D4AE /* GMT+10 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT+10"; sourceTree = ""; }; - 47D93BDF1A2764920006D4AE /* GMT+11 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT+11"; sourceTree = ""; }; - 47D93BE01A2764920006D4AE /* GMT+12 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT+12"; sourceTree = ""; }; - 47D93BE11A2764920006D4AE /* GMT+2 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT+2"; sourceTree = ""; }; - 47D93BE21A2764920006D4AE /* GMT+3 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT+3"; sourceTree = ""; }; - 47D93BE31A2764920006D4AE /* GMT+4 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT+4"; sourceTree = ""; }; - 47D93BE41A2764920006D4AE /* GMT+5 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT+5"; sourceTree = ""; }; - 47D93BE51A2764920006D4AE /* GMT+6 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT+6"; sourceTree = ""; }; - 47D93BE61A2764920006D4AE /* GMT+7 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT+7"; sourceTree = ""; }; - 47D93BE71A2764920006D4AE /* GMT+8 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT+8"; sourceTree = ""; }; - 47D93BE81A2764920006D4AE /* GMT+9 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT+9"; sourceTree = ""; }; - 47D93BE91A2764920006D4AE /* GMT-1 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT-1"; sourceTree = ""; }; - 47D93BEA1A2764920006D4AE /* GMT-10 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT-10"; sourceTree = ""; }; - 47D93BEB1A2764920006D4AE /* GMT-11 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT-11"; sourceTree = ""; }; - 47D93BEC1A2764920006D4AE /* GMT-12 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT-12"; sourceTree = ""; }; - 47D93BED1A2764920006D4AE /* GMT-13 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT-13"; sourceTree = ""; }; - 47D93BEE1A2764920006D4AE /* GMT-14 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT-14"; sourceTree = ""; }; - 47D93BEF1A2764920006D4AE /* GMT-2 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT-2"; sourceTree = ""; }; - 47D93BF01A2764920006D4AE /* GMT-3 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT-3"; sourceTree = ""; }; - 47D93BF11A2764920006D4AE /* GMT-4 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT-4"; sourceTree = ""; }; - 47D93BF21A2764920006D4AE /* GMT-5 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT-5"; sourceTree = ""; }; - 47D93BF31A2764920006D4AE /* GMT-6 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT-6"; sourceTree = ""; }; - 47D93BF41A2764920006D4AE /* GMT-7 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT-7"; sourceTree = ""; }; - 47D93BF51A2764920006D4AE /* GMT-8 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT-8"; sourceTree = ""; }; - 47D93BF61A2764920006D4AE /* GMT-9 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GMT-9"; sourceTree = ""; }; - 47D93BF71A2764920006D4AE /* UCT */ = {isa = PBXFileReference; lastKnownFileType = text; path = UCT; sourceTree = ""; }; - 47D93BF81A2764920006D4AE /* UTC */ = {isa = PBXFileReference; lastKnownFileType = text; path = UTC; sourceTree = ""; }; - 47D93BFA1A2764920006D4AE /* Amsterdam */ = {isa = PBXFileReference; lastKnownFileType = text; path = Amsterdam; sourceTree = ""; }; - 47D93BFB1A2764920006D4AE /* Andorra */ = {isa = PBXFileReference; lastKnownFileType = text; path = Andorra; sourceTree = ""; }; - 47D93BFC1A2764920006D4AE /* Athens */ = {isa = PBXFileReference; lastKnownFileType = text; path = Athens; sourceTree = ""; }; - 47D93BFD1A2764920006D4AE /* Belgrade */ = {isa = PBXFileReference; lastKnownFileType = text; path = Belgrade; sourceTree = ""; }; - 47D93BFE1A2764920006D4AE /* Berlin */ = {isa = PBXFileReference; lastKnownFileType = text; path = Berlin; sourceTree = ""; }; - 47D93BFF1A2764920006D4AE /* Brussels */ = {isa = PBXFileReference; lastKnownFileType = text; path = Brussels; sourceTree = ""; }; - 47D93C001A2764920006D4AE /* Bucharest */ = {isa = PBXFileReference; lastKnownFileType = text; path = Bucharest; sourceTree = ""; }; - 47D93C011A2764920006D4AE /* Budapest */ = {isa = PBXFileReference; lastKnownFileType = text; path = Budapest; sourceTree = ""; }; - 47D93C021A2764920006D4AE /* Chisinau */ = {isa = PBXFileReference; lastKnownFileType = text; path = Chisinau; sourceTree = ""; }; - 47D93C031A2764920006D4AE /* Copenhagen */ = {isa = PBXFileReference; lastKnownFileType = text; path = Copenhagen; sourceTree = ""; }; - 47D93C041A2764920006D4AE /* Dublin */ = {isa = PBXFileReference; lastKnownFileType = text; path = Dublin; sourceTree = ""; }; - 47D93C051A2764920006D4AE /* Gibraltar */ = {isa = PBXFileReference; lastKnownFileType = text; path = Gibraltar; sourceTree = ""; }; - 47D93C061A2764920006D4AE /* Helsinki */ = {isa = PBXFileReference; lastKnownFileType = text; path = Helsinki; sourceTree = ""; }; - 47D93C071A2764920006D4AE /* Istanbul */ = {isa = PBXFileReference; lastKnownFileType = text; path = Istanbul; sourceTree = ""; }; - 47D93C081A2764920006D4AE /* Kaliningrad */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kaliningrad; sourceTree = ""; }; - 47D93C091A2764920006D4AE /* Kiev */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kiev; sourceTree = ""; }; - 47D93C0A1A2764920006D4AE /* Lisbon */ = {isa = PBXFileReference; lastKnownFileType = text; path = Lisbon; sourceTree = ""; }; - 47D93C0B1A2764920006D4AE /* London */ = {isa = PBXFileReference; lastKnownFileType = text; path = London; sourceTree = ""; }; - 47D93C0C1A2764920006D4AE /* Luxembourg */ = {isa = PBXFileReference; lastKnownFileType = text; path = Luxembourg; sourceTree = ""; }; - 47D93C0D1A2764920006D4AE /* Madrid */ = {isa = PBXFileReference; lastKnownFileType = text; path = Madrid; sourceTree = ""; }; - 47D93C0E1A2764920006D4AE /* Malta */ = {isa = PBXFileReference; lastKnownFileType = text; path = Malta; sourceTree = ""; }; - 47D93C0F1A2764920006D4AE /* Minsk */ = {isa = PBXFileReference; lastKnownFileType = text; path = Minsk; sourceTree = ""; }; - 47D93C101A2764920006D4AE /* Monaco */ = {isa = PBXFileReference; lastKnownFileType = text; path = Monaco; sourceTree = ""; }; - 47D93C111A2764920006D4AE /* Moscow */ = {isa = PBXFileReference; lastKnownFileType = text; path = Moscow; sourceTree = ""; }; - 47D93C121A2764920006D4AE /* Oslo */ = {isa = PBXFileReference; lastKnownFileType = text; path = Oslo; sourceTree = ""; }; - 47D93C131A2764920006D4AE /* Paris */ = {isa = PBXFileReference; lastKnownFileType = text; path = Paris; sourceTree = ""; }; - 47D93C141A2764920006D4AE /* Prague */ = {isa = PBXFileReference; lastKnownFileType = text; path = Prague; sourceTree = ""; }; - 47D93C151A2764920006D4AE /* Riga */ = {isa = PBXFileReference; lastKnownFileType = text; path = Riga; sourceTree = ""; }; - 47D93C161A2764920006D4AE /* Rome */ = {isa = PBXFileReference; lastKnownFileType = text; path = Rome; sourceTree = ""; }; - 47D93C171A2764920006D4AE /* Samara */ = {isa = PBXFileReference; lastKnownFileType = text; path = Samara; sourceTree = ""; }; - 47D93C181A2764920006D4AE /* Simferopol */ = {isa = PBXFileReference; lastKnownFileType = text; path = Simferopol; sourceTree = ""; }; - 47D93C191A2764920006D4AE /* Sofia */ = {isa = PBXFileReference; lastKnownFileType = text; path = Sofia; sourceTree = ""; }; - 47D93C1A1A2764920006D4AE /* Stockholm */ = {isa = PBXFileReference; lastKnownFileType = text; path = Stockholm; sourceTree = ""; }; - 47D93C1B1A2764920006D4AE /* Tallinn */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tallinn; sourceTree = ""; }; - 47D93C1C1A2764920006D4AE /* Tirane */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tirane; sourceTree = ""; }; - 47D93C1D1A2764920006D4AE /* Uzhgorod */ = {isa = PBXFileReference; lastKnownFileType = text; path = Uzhgorod; sourceTree = ""; }; - 47D93C1E1A2764920006D4AE /* Vaduz */ = {isa = PBXFileReference; lastKnownFileType = text; path = Vaduz; sourceTree = ""; }; - 47D93C1F1A2764920006D4AE /* Vienna */ = {isa = PBXFileReference; lastKnownFileType = text; path = Vienna; sourceTree = ""; }; - 47D93C201A2764920006D4AE /* Vilnius */ = {isa = PBXFileReference; lastKnownFileType = text; path = Vilnius; sourceTree = ""; }; - 47D93C211A2764920006D4AE /* Volgograd */ = {isa = PBXFileReference; lastKnownFileType = text; path = Volgograd; sourceTree = ""; }; - 47D93C221A2764920006D4AE /* Warsaw */ = {isa = PBXFileReference; lastKnownFileType = text; path = Warsaw; sourceTree = ""; }; - 47D93C231A2764920006D4AE /* Zaporozhye */ = {isa = PBXFileReference; lastKnownFileType = text; path = Zaporozhye; sourceTree = ""; }; - 47D93C241A2764920006D4AE /* Zurich */ = {isa = PBXFileReference; lastKnownFileType = text; path = Zurich; sourceTree = ""; }; - 47D93C251A2764920006D4AE /* GMT */ = {isa = PBXFileReference; lastKnownFileType = text; path = GMT; sourceTree = ""; }; - 47D93C261A2764920006D4AE /* HST */ = {isa = PBXFileReference; lastKnownFileType = text; path = HST; sourceTree = ""; }; - 47D93C281A2764920006D4AE /* Antananarivo */ = {isa = PBXFileReference; lastKnownFileType = text; path = Antananarivo; sourceTree = ""; }; - 47D93C291A2764920006D4AE /* Chagos */ = {isa = PBXFileReference; lastKnownFileType = text; path = Chagos; sourceTree = ""; }; - 47D93C2A1A2764920006D4AE /* Christmas */ = {isa = PBXFileReference; lastKnownFileType = text; path = Christmas; sourceTree = ""; }; - 47D93C2B1A2764920006D4AE /* Cocos */ = {isa = PBXFileReference; lastKnownFileType = text; path = Cocos; sourceTree = ""; }; - 47D93C2C1A2764920006D4AE /* Comoro */ = {isa = PBXFileReference; lastKnownFileType = text; path = Comoro; sourceTree = ""; }; - 47D93C2D1A2764920006D4AE /* Kerguelen */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kerguelen; sourceTree = ""; }; - 47D93C2E1A2764920006D4AE /* Mahe */ = {isa = PBXFileReference; lastKnownFileType = text; path = Mahe; sourceTree = ""; }; - 47D93C2F1A2764920006D4AE /* Maldives */ = {isa = PBXFileReference; lastKnownFileType = text; path = Maldives; sourceTree = ""; }; - 47D93C301A2764920006D4AE /* Mauritius */ = {isa = PBXFileReference; lastKnownFileType = text; path = Mauritius; sourceTree = ""; }; - 47D93C311A2764920006D4AE /* Mayotte */ = {isa = PBXFileReference; lastKnownFileType = text; path = Mayotte; sourceTree = ""; }; - 47D93C321A2764920006D4AE /* Reunion */ = {isa = PBXFileReference; lastKnownFileType = text; path = Reunion; sourceTree = ""; }; - 47D93C331A2764920006D4AE /* MET */ = {isa = PBXFileReference; lastKnownFileType = text; path = MET; sourceTree = ""; }; - 47D93C341A2764920006D4AE /* MST */ = {isa = PBXFileReference; lastKnownFileType = text; path = MST; sourceTree = ""; }; - 47D93C351A2764920006D4AE /* MST7MDT */ = {isa = PBXFileReference; lastKnownFileType = text; path = MST7MDT; sourceTree = ""; }; - 47D93C371A2764920006D4AE /* Apia */ = {isa = PBXFileReference; lastKnownFileType = text; path = Apia; sourceTree = ""; }; - 47D93C381A2764920006D4AE /* Auckland */ = {isa = PBXFileReference; lastKnownFileType = text; path = Auckland; sourceTree = ""; }; - 47D93C391A2764920006D4AE /* Chatham */ = {isa = PBXFileReference; lastKnownFileType = text; path = Chatham; sourceTree = ""; }; - 47D93C3A1A2764920006D4AE /* Chuuk */ = {isa = PBXFileReference; lastKnownFileType = text; path = Chuuk; sourceTree = ""; }; - 47D93C3B1A2764920006D4AE /* Easter */ = {isa = PBXFileReference; lastKnownFileType = text; path = Easter; sourceTree = ""; }; - 47D93C3C1A2764920006D4AE /* Efate */ = {isa = PBXFileReference; lastKnownFileType = text; path = Efate; sourceTree = ""; }; - 47D93C3D1A2764920006D4AE /* Enderbury */ = {isa = PBXFileReference; lastKnownFileType = text; path = Enderbury; sourceTree = ""; }; - 47D93C3E1A2764920006D4AE /* Fakaofo */ = {isa = PBXFileReference; lastKnownFileType = text; path = Fakaofo; sourceTree = ""; }; - 47D93C3F1A2764920006D4AE /* Fiji */ = {isa = PBXFileReference; lastKnownFileType = text; path = Fiji; sourceTree = ""; }; - 47D93C401A2764920006D4AE /* Funafuti */ = {isa = PBXFileReference; lastKnownFileType = text; path = Funafuti; sourceTree = ""; }; - 47D93C411A2764920006D4AE /* Galapagos */ = {isa = PBXFileReference; lastKnownFileType = text; path = Galapagos; sourceTree = ""; }; - 47D93C421A2764920006D4AE /* Gambier */ = {isa = PBXFileReference; lastKnownFileType = text; path = Gambier; sourceTree = ""; }; - 47D93C431A2764920006D4AE /* Guadalcanal */ = {isa = PBXFileReference; lastKnownFileType = text; path = Guadalcanal; sourceTree = ""; }; - 47D93C441A2764920006D4AE /* Guam */ = {isa = PBXFileReference; lastKnownFileType = text; path = Guam; sourceTree = ""; }; - 47D93C451A2764920006D4AE /* Honolulu */ = {isa = PBXFileReference; lastKnownFileType = text; path = Honolulu; sourceTree = ""; }; - 47D93C461A2764920006D4AE /* Johnston */ = {isa = PBXFileReference; lastKnownFileType = text; path = Johnston; sourceTree = ""; }; - 47D93C471A2764920006D4AE /* Kiritimati */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kiritimati; sourceTree = ""; }; - 47D93C481A2764920006D4AE /* Kosrae */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kosrae; sourceTree = ""; }; - 47D93C491A2764920006D4AE /* Kwajalein */ = {isa = PBXFileReference; lastKnownFileType = text; path = Kwajalein; sourceTree = ""; }; - 47D93C4A1A2764920006D4AE /* Majuro */ = {isa = PBXFileReference; lastKnownFileType = text; path = Majuro; sourceTree = ""; }; - 47D93C4B1A2764930006D4AE /* Marquesas */ = {isa = PBXFileReference; lastKnownFileType = text; path = Marquesas; sourceTree = ""; }; - 47D93C4C1A2764930006D4AE /* Midway */ = {isa = PBXFileReference; lastKnownFileType = text; path = Midway; sourceTree = ""; }; - 47D93C4D1A2764930006D4AE /* Nauru */ = {isa = PBXFileReference; lastKnownFileType = text; path = Nauru; sourceTree = ""; }; - 47D93C4E1A2764930006D4AE /* Niue */ = {isa = PBXFileReference; lastKnownFileType = text; path = Niue; sourceTree = ""; }; - 47D93C4F1A2764930006D4AE /* Norfolk */ = {isa = PBXFileReference; lastKnownFileType = text; path = Norfolk; sourceTree = ""; }; - 47D93C501A2764930006D4AE /* Noumea */ = {isa = PBXFileReference; lastKnownFileType = text; path = Noumea; sourceTree = ""; }; - 47D93C511A2764930006D4AE /* Pago_Pago */ = {isa = PBXFileReference; lastKnownFileType = text; path = Pago_Pago; sourceTree = ""; }; - 47D93C521A2764930006D4AE /* Palau */ = {isa = PBXFileReference; lastKnownFileType = text; path = Palau; sourceTree = ""; }; - 47D93C531A2764930006D4AE /* Pitcairn */ = {isa = PBXFileReference; lastKnownFileType = text; path = Pitcairn; sourceTree = ""; }; - 47D93C541A2764930006D4AE /* Pohnpei */ = {isa = PBXFileReference; lastKnownFileType = text; path = Pohnpei; sourceTree = ""; }; - 47D93C551A2764930006D4AE /* Port_Moresby */ = {isa = PBXFileReference; lastKnownFileType = text; path = Port_Moresby; sourceTree = ""; }; - 47D93C561A2764930006D4AE /* Rarotonga */ = {isa = PBXFileReference; lastKnownFileType = text; path = Rarotonga; sourceTree = ""; }; - 47D93C571A2764930006D4AE /* Saipan */ = {isa = PBXFileReference; lastKnownFileType = text; path = Saipan; sourceTree = ""; }; - 47D93C581A2764930006D4AE /* Tahiti */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tahiti; sourceTree = ""; }; - 47D93C591A2764930006D4AE /* Tarawa */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tarawa; sourceTree = ""; }; - 47D93C5A1A2764930006D4AE /* Tongatapu */ = {isa = PBXFileReference; lastKnownFileType = text; path = Tongatapu; sourceTree = ""; }; - 47D93C5B1A2764930006D4AE /* Wake */ = {isa = PBXFileReference; lastKnownFileType = text; path = Wake; sourceTree = ""; }; - 47D93C5C1A2764930006D4AE /* Wallis */ = {isa = PBXFileReference; lastKnownFileType = text; path = Wallis; sourceTree = ""; }; - 47D93C5D1A2764930006D4AE /* PST8PDT */ = {isa = PBXFileReference; lastKnownFileType = text; path = PST8PDT; sourceTree = ""; }; - 47D93C5F1A2764930006D4AE /* AST4 */ = {isa = PBXFileReference; lastKnownFileType = text; path = AST4; sourceTree = ""; }; - 47D93C601A2764930006D4AE /* AST4ADT */ = {isa = PBXFileReference; lastKnownFileType = text; path = AST4ADT; sourceTree = ""; }; - 47D93C611A2764930006D4AE /* CST6 */ = {isa = PBXFileReference; lastKnownFileType = text; path = CST6; sourceTree = ""; }; - 47D93C621A2764930006D4AE /* CST6CDT */ = {isa = PBXFileReference; lastKnownFileType = text; path = CST6CDT; sourceTree = ""; }; - 47D93C631A2764930006D4AE /* EST5 */ = {isa = PBXFileReference; lastKnownFileType = text; path = EST5; sourceTree = ""; }; - 47D93C641A2764930006D4AE /* EST5EDT */ = {isa = PBXFileReference; lastKnownFileType = text; path = EST5EDT; sourceTree = ""; }; - 47D93C651A2764930006D4AE /* HST10 */ = {isa = PBXFileReference; lastKnownFileType = text; path = HST10; sourceTree = ""; }; - 47D93C661A2764930006D4AE /* MST7 */ = {isa = PBXFileReference; lastKnownFileType = text; path = MST7; sourceTree = ""; }; - 47D93C671A2764930006D4AE /* MST7MDT */ = {isa = PBXFileReference; lastKnownFileType = text; path = MST7MDT; sourceTree = ""; }; - 47D93C681A2764930006D4AE /* PST8 */ = {isa = PBXFileReference; lastKnownFileType = text; path = PST8; sourceTree = ""; }; - 47D93C691A2764930006D4AE /* PST8PDT */ = {isa = PBXFileReference; lastKnownFileType = text; path = PST8PDT; sourceTree = ""; }; - 47D93C6A1A2764930006D4AE /* YST9 */ = {isa = PBXFileReference; lastKnownFileType = text; path = YST9; sourceTree = ""; }; - 47D93C6B1A2764930006D4AE /* YST9YDT */ = {isa = PBXFileReference; lastKnownFileType = text; path = YST9YDT; sourceTree = ""; }; - 47D93C6C1A2764930006D4AE /* WET */ = {isa = PBXFileReference; lastKnownFileType = text; path = WET; sourceTree = ""; }; - 47D93C6D1A2764930006D4AE /* ZoneInfoMappings */ = {isa = PBXFileReference; lastKnownFileType = text; path = ZoneInfoMappings; sourceTree = ""; }; - 47D93C6E1A2764930006D4AE /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - 47D93C721A2764930006D4AE /* java.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = java.1; sourceTree = ""; }; - 47D93C731A2764930006D4AE /* keytool.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = keytool.1; sourceTree = ""; }; - 47D93C741A2764930006D4AE /* orbd.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = orbd.1; sourceTree = ""; }; - 47D93C751A2764930006D4AE /* pack200.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = pack200.1; sourceTree = ""; }; - 47D93C761A2764930006D4AE /* policytool.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = policytool.1; sourceTree = ""; }; - 47D93C771A2764930006D4AE /* rmid.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = rmid.1; sourceTree = ""; }; - 47D93C781A2764930006D4AE /* rmiregistry.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = rmiregistry.1; sourceTree = ""; }; - 47D93C791A2764930006D4AE /* servertool.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = servertool.1; sourceTree = ""; }; - 47D93C7A1A2764930006D4AE /* tnameserv.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = tnameserv.1; sourceTree = ""; }; - 47D93C7B1A2764930006D4AE /* unpack200.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = unpack200.1; sourceTree = ""; }; - 47D93C7E1A2764930006D4AE /* java.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = java.1; sourceTree = ""; }; - 47D93C7F1A2764930006D4AE /* keytool.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = keytool.1; sourceTree = ""; }; - 47D93C801A2764930006D4AE /* orbd.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = orbd.1; sourceTree = ""; }; - 47D93C811A2764930006D4AE /* pack200.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = pack200.1; sourceTree = ""; }; - 47D93C821A2764930006D4AE /* policytool.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = policytool.1; sourceTree = ""; }; - 47D93C831A2764930006D4AE /* rmid.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = rmid.1; sourceTree = ""; }; - 47D93C841A2764930006D4AE /* rmiregistry.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = rmiregistry.1; sourceTree = ""; }; - 47D93C851A2764930006D4AE /* servertool.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = servertool.1; sourceTree = ""; }; - 47D93C861A2764930006D4AE /* tnameserv.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = tnameserv.1; sourceTree = ""; }; - 47D93C871A2764930006D4AE /* unpack200.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = unpack200.1; sourceTree = ""; }; - 47D93C891A2764930006D4AE /* java.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = java.1; sourceTree = ""; }; - 47D93C8A1A2764930006D4AE /* keytool.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = keytool.1; sourceTree = ""; }; - 47D93C8B1A2764930006D4AE /* orbd.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = orbd.1; sourceTree = ""; }; - 47D93C8C1A2764930006D4AE /* pack200.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = pack200.1; sourceTree = ""; }; - 47D93C8D1A2764930006D4AE /* policytool.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = policytool.1; sourceTree = ""; }; - 47D93C8E1A2764930006D4AE /* rmid.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = rmid.1; sourceTree = ""; }; - 47D93C8F1A2764930006D4AE /* rmiregistry.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = rmiregistry.1; sourceTree = ""; }; - 47D93C901A2764930006D4AE /* servertool.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = servertool.1; sourceTree = ""; }; - 47D93C911A2764930006D4AE /* tnameserv.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = tnameserv.1; sourceTree = ""; }; - 47D93C921A2764930006D4AE /* unpack200.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = unpack200.1; sourceTree = ""; }; - 47D93C931A2764930006D4AE /* release */ = {isa = PBXFileReference; lastKnownFileType = text; path = release; sourceTree = ""; }; - 47D93C941A2764930006D4AE /* THIRD_PARTY_README */ = {isa = PBXFileReference; lastKnownFileType = text; path = THIRD_PARTY_README; sourceTree = ""; }; - 47D93C951A2764930006D4AE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 47D93C971A2764930006D4AE /* libjli.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libjli.dylib; sourceTree = ""; }; - 47DD76711AE1340A005F08A0 /* SystemConfigurationProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SystemConfigurationProxy.h; path = proxy/SystemConfigurationProxy.h; sourceTree = ""; }; - 47DD76721AE1340A005F08A0 /* SystemConfigurationProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SystemConfigurationProxy.m; path = proxy/SystemConfigurationProxy.m; sourceTree = ""; }; 47E2848513191D0900D03060 /* uk */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = uk; path = uk.lproj/Bookmark.xib; sourceTree = ""; }; 47E2848613191D0900D03060 /* uk */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = uk; path = uk.lproj/Browser.xib; sourceTree = ""; }; 47E2848713191D0900D03060 /* uk */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = uk; path = uk.lproj/Command.xib; sourceTree = ""; }; @@ -2244,18 +1432,7 @@ 47E284E01319333000D03060 /* uk */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = uk; path = uk.lproj/S3.strings; sourceTree = ""; }; 47E284E11319333000D03060 /* uk */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = uk; path = uk.lproj/Status.strings; sourceTree = ""; }; 47E284E21319333000D03060 /* uk */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = uk; path = uk.lproj/Transfer.strings; sourceTree = ""; }; - 47E72E07162865000002F049 /* Editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Editor.h; sourceTree = ""; }; - 47E72E08162865000002F049 /* NSAppleEventDescriptor-Extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSAppleEventDescriptor-Extensions.h"; sourceTree = ""; }; - 47E72E09162865000002F049 /* ODBEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ODBEditor.h; sourceTree = ""; }; - 47E72E0A162865000002F049 /* ODBEditorSuite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ODBEditorSuite.h; sourceTree = ""; }; - 47E72E0B162865000002F049 /* Editor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Editor.m; sourceTree = ""; }; - 47E72E0C162865000002F049 /* NSAppleEventDescriptor-Extensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSAppleEventDescriptor-Extensions.m"; sourceTree = ""; }; - 47E72E0D162865000002F049 /* ODBEditor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ODBEditor.m; sourceTree = ""; }; 47E9875F0D689A280077733F /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = en; path = en.lproj/S3.strings; sourceTree = ""; }; - 47EA244F162B5CE0002E23E2 /* LaunchServicesSchemeHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LaunchServicesSchemeHandler.h; sourceTree = ""; }; - 47EA2450162B5CE0002E23E2 /* LaunchServicesSchemeHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LaunchServicesSchemeHandler.m; sourceTree = ""; }; - 47EDDEE91AE191EB00B17C93 /* SystemConfigurationReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SystemConfigurationReachability.h; path = diagnostics/SystemConfigurationReachability.h; sourceTree = ""; }; - 47EDDEEA1AE191EB00B17C93 /* SystemConfigurationReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SystemConfigurationReachability.m; path = diagnostics/SystemConfigurationReachability.m; sourceTree = ""; }; 47EF0EC50D6DBF3F00AC2F94 /* ca */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = ca; path = ca.lproj/S3.strings; sourceTree = ""; }; 47EF0EC60D6DBF3F00AC2F94 /* cs */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = cs; path = cs.lproj/S3.strings; sourceTree = ""; }; 47EF0EC80D6DBF3F00AC2F94 /* da */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = da; path = da.lproj/S3.strings; sourceTree = ""; }; @@ -2293,10 +1470,29 @@ 47F0B7EC087AD34B00439978 /* ca */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = ca; path = ca.lproj/Status.strings; sourceTree = ""; }; 47F0CB46087B237F00439978 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 47F0CB8C087B23A900439978 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = en; path = en.lproj/Status.strings; sourceTree = ""; }; - 47F102B91628D57500923FDE /* liblaunchservicesquarantineservice.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = liblaunchservicesquarantineservice.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; - 47F102BD1628D5CE00923FDE /* LaunchServicesQuarantineService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LaunchServicesQuarantineService.h; sourceTree = ""; }; - 47F102BF1628D5CE00923FDE /* LaunchServicesQuarantineService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LaunchServicesQuarantineService.m; sourceTree = ""; }; - 47FB9C6B1725A5CC00FE33C1 /* libiokitsleeppreventer.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libiokitsleeppreventer.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; + 47F85C151C0F101F00FDA856 /* UKCrashReporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UKCrashReporter.h; path = core/src/main/objc/UKCrashReporter.h; sourceTree = SOURCE_ROOT; }; + 47F85C161C0F101F00FDA856 /* UKCrashReporter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = UKCrashReporter.m; path = core/src/main/objc/UKCrashReporter.m; sourceTree = SOURCE_ROOT; }; + 47F85C171C0F101F00FDA856 /* UKSystemInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UKSystemInfo.h; path = core/src/main/objc/UKSystemInfo.h; sourceTree = SOURCE_ROOT; }; + 47F85C181C0F101F00FDA856 /* UKSystemInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = UKSystemInfo.m; path = core/src/main/objc/UKSystemInfo.m; sourceTree = SOURCE_ROOT; }; + 47F85C1E1C0F103E00FDA856 /* CDBookmarkCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDBookmarkCell.h; path = osx/src/main/objc/CDBookmarkCell.h; sourceTree = ""; }; + 47F85C1F1C0F103E00FDA856 /* CDBookmarkCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDBookmarkCell.m; path = osx/src/main/objc/CDBookmarkCell.m; sourceTree = ""; }; + 47F85C201C0F103E00FDA856 /* CDListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDListView.h; path = osx/src/main/objc/CDListView.h; sourceTree = ""; }; + 47F85C211C0F103E00FDA856 /* CDListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDListView.m; path = osx/src/main/objc/CDListView.m; sourceTree = ""; }; + 47F85C221C0F103E00FDA856 /* CDOutlineCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDOutlineCell.h; path = osx/src/main/objc/CDOutlineCell.h; sourceTree = ""; }; + 47F85C231C0F103E00FDA856 /* CDOutlineCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDOutlineCell.m; path = osx/src/main/objc/CDOutlineCell.m; sourceTree = ""; }; + 47F85C241C0F103E00FDA856 /* CDOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDOutlineView.h; path = osx/src/main/objc/CDOutlineView.h; sourceTree = ""; }; + 47F85C251C0F103E00FDA856 /* CDOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDOutlineView.m; path = osx/src/main/objc/CDOutlineView.m; sourceTree = ""; }; + 47F85C261C0F103E00FDA856 /* CTGradient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CTGradient.h; path = osx/src/main/objc/CTGradient.h; sourceTree = ""; }; + 47F85C271C0F103E00FDA856 /* CTGradient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CTGradient.m; path = osx/src/main/objc/CTGradient.m; sourceTree = ""; }; + 47F85C281C0F103E00FDA856 /* CTGradientView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CTGradientView.h; path = osx/src/main/objc/CTGradientView.h; sourceTree = ""; }; + 47F85C291C0F103E00FDA856 /* CTGradientView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CTGradientView.m; path = osx/src/main/objc/CTGradientView.m; sourceTree = ""; }; + 47F85C2A1C0F103E00FDA856 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = osx/src/main/objc/main.m; sourceTree = ""; }; + 47F85C2B1C0F103E00FDA856 /* QLPreviewPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = QLPreviewPanel.h; path = osx/src/main/objc/QLPreviewPanel.h; sourceTree = ""; }; + 47F85C2E1C0F103E00FDA856 /* SNDisclosableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SNDisclosableView.h; path = osx/src/main/objc/SNDisclosableView.h; sourceTree = ""; }; + 47F85C2F1C0F103E00FDA856 /* SNDisclosableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SNDisclosableView.m; path = osx/src/main/objc/SNDisclosableView.m; sourceTree = ""; }; + 47F85C461C0F106A00FDA856 /* launcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = launcher.h; path = cli/src/main/objc/launcher.h; sourceTree = ""; }; + 47F85C471C0F106A00FDA856 /* launcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = launcher.m; path = cli/src/main/objc/launcher.m; sourceTree = ""; }; + 47F85C4B1C0F107100FDA856 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = cli/src/main/objc/main.m; sourceTree = ""; }; 47FC190B099FB8AF0082431D /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = en; path = en.lproj/Crash.strings; sourceTree = ""; }; 47FC191F099FC1290082431D /* fr */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = fr; path = fr.lproj/Crash.strings; sourceTree = ""; }; 47FC1943099FDB310082431D /* it */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = it; path = it.lproj/Crash.strings; sourceTree = ""; }; @@ -2340,29 +1536,14 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 471BC76F1BB7F4B80062C792 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 471BC7701BB7F4B80062C792 /* Foundation.framework in Frameworks */, - 471BC7711BB7F4B80062C792 /* ApplicationServices.framework in Frameworks */, - 471BC7721BB7F4B80062C792 /* JavaNativeFoundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 471F77AC180439B500A4C196 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 471F77AD180439B500A4C196 /* Foundation.framework in Frameworks */, - 471F77AF180439B500A4C196 /* JavaNativeFoundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 4739EF6C0856981300405FD3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 47F85C121C0F0E8900FDA856 /* Cocoa.framework in Frameworks */, + 4705DFDC1C037A6D002466FA /* SystemConfiguration.framework in Frameworks */, + 4705DFDA1C037A5E002466FA /* IOKit.framework in Frameworks */, + 4705DFD91C037A52002466FA /* ApplicationServices.framework in Frameworks */, 4704C3A91664F94F00B17020 /* JavaNativeFoundation.framework in Frameworks */, 4739EF6E0856981300405FD3 /* Foundation.framework in Frameworks */, 475D461D0D9953CD009450C4 /* SecurityInterface.framework in Frameworks */, @@ -2371,76 +1552,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 4739EFA80856990900405FD3 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 471C664419E3E20700D7266E /* CoreServices.framework in Frameworks */, - 4704C3AB1664F96400B17020 /* JavaNativeFoundation.framework in Frameworks */, - 474523E21076B70000823467 /* Foundation.framework in Frameworks */, - 4739EFAC0856990900405FD3 /* SystemConfiguration.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4739EFBA0856991200405FD3 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 479450BD162FF74F00FC7FF9 /* Foundation.framework in Frameworks */, - 4797D28E162829F800340E1C /* ApplicationServices.framework in Frameworks */, - 4704C3AC1664F96700B17020 /* JavaNativeFoundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4762DABD09FC42EC0034C662 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 474524B71076B7FC00823467 /* Foundation.framework in Frameworks */, - 4762DAC109FC42EC0034C662 /* SystemConfiguration.framework in Frameworks */, - 4704C3AD1664FB2E00B17020 /* JavaNativeFoundation.framework in Frameworks */, - 474520F21076B60600823467 /* CoreServices.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 477A10460FD08DBA00BAD4AD /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 477A10480FD08DBA00BAD4AD /* Cocoa.framework in Frameworks */, - 4734425B102DEABD00C04C43 /* Quartz.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 478ECD110DAD5743008A5B1F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 478ECD130DAD5743008A5B1F /* Cocoa.framework in Frameworks */, - 4704C3B41664FD0F00B17020 /* JavaNativeFoundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4797D2731628276C00340E1C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4781DFE5162FF6FE001F4993 /* Foundation.framework in Frameworks */, - 4797D2751628276C00340E1C /* ApplicationServices.framework in Frameworks */, - 4704C3AE1664FB4A00B17020 /* JavaNativeFoundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 47BEDAFB0B92960400141EB4 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 474524B11076B7DA00823467 /* Foundation.framework in Frameworks */, - 47BEDBD30B9296C800141EB4 /* ApplicationServices.framework in Frameworks */, - 4704C3B21664FCB300B17020 /* JavaNativeFoundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 47C2724412E99D8600A13758 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -2457,36 +1568,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 47C57EB3162F471700A272BC /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4786AA13162F4AE1006156A0 /* Foundation.framework in Frameworks */, - 47C57EB5162F471700A272BC /* ApplicationServices.framework in Frameworks */, - 4704C3B01664FB5300B17020 /* JavaNativeFoundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 47F102B21628D57500923FDE /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4781DFE6162FF703001F4993 /* Foundation.framework in Frameworks */, - 47F102B41628D57500923FDE /* ApplicationServices.framework in Frameworks */, - 4704C3AF1664FB4F00B17020 /* JavaNativeFoundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 47FB9C631725A5CC00FE33C1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 47FB9C641725A5CC00FE33C1 /* Foundation.framework in Frameworks */, - 47FB9C661725A5CC00FE33C1 /* JavaNativeFoundation.framework in Frameworks */, - 47C88FEC17269991001A746A /* IOKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -2494,20 +1575,8 @@ isa = PBXGroup; children = ( 471D2C5505A2505600675163 /* Cyberduck.app */, - 4739EF730856981400405FD3 /* libkeychain.dylib */, - 4739EFB00856990900405FD3 /* libproxy.dylib */, - 4739EFC10856991300405FD3 /* liblocal.dylib */, - 4762DAC509FC42EC0034C662 /* libdiagnostics.dylib */, - 47BEDB030B92960400141EB4 /* liblaunchservicesschemehandler.dylib */, - 478ECD180DAD5743008A5B1F /* libquickLook.dylib */, - 477A104D0FD08DBA00BAD4AD /* librococoa.dylib */, - 4797D27A1628276C00340E1C /* liblaunchservicesapplicationfinder.dylib */, - 47F102B91628D57500923FDE /* liblaunchservicesquarantineservice.dylib */, - 47C57EBA162F471700A272BC /* liblaunchservicesfiledescriptor.dylib */, - 47FB9C6B1725A5CC00FE33C1 /* libiokitsleeppreventer.dylib */, - 471F77B3180439B500A4C196 /* libfoundationprogressservice.dylib */, + 4739EF730856981400405FD3 /* libcore.dylib */, 47C2AD801A268C880047B67A /* duck.bundle */, - 471BC7761BB7F4B80062C792 /* libfindersidebarservice.dylib */, ); name = Products; sourceTree = ""; @@ -2515,9 +1584,12 @@ 29B97314FDCFA39411CA2CEA /* cyberduck-cocoa */ = { isa = PBXGroup; children = ( - 47D93A1A1A2764910006D4AE /* lib */, + 47F85C461C0F106A00FDA856 /* launcher.h */, + 47F85C471C0F106A00FDA856 /* launcher.m */, + 47F85C4B1C0F107100FDA856 /* main.m */, + 47F85C1D1C0F102600FDA856 /* App */, 4741639206C4F58D00AC0BD2 /* Resources */, - 474152D706C4F08A00AC0BD2 /* source */, + 474152D706C4F08A00AC0BD2 /* Core */, 29B97323FDCFA39411CA2CEA /* Frameworks */, 19C28FACFE9D520D11CA2CBB /* Products */, ); @@ -2527,6 +1599,7 @@ 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( + 4705DFDB1C037A6D002466FA /* SystemConfiguration.framework */, 477CFC7E1AF0FAFB001E81AF /* Cocoa.framework */, 4759B9301AF0D40600DB909A /* ServiceManagement.framework */, 47D939C91A268D7F0006D4AE /* Foundation.framework */, @@ -2560,87 +1633,54 @@ 4718F499175F432400B424AD /* profiles */ = { isa = PBXGroup; children = ( - 4780ACC617634CD6007D9DD5 /* HP Cloud Object Storage.cyberduckprofile */, 4718F4A9175F432400B424AD /* Rackspace UK.cyberduckprofile */, 4718F4AA175F432400B424AD /* Rackspace US.cyberduckprofile */, ); path = profiles; sourceTree = ""; }; - 474152D706C4F08A00AC0BD2 /* source */ = { + 474152D706C4F08A00AC0BD2 /* Core */ = { isa = PBXGroup; children = ( - 477A105C0FD08DE800BAD4AD /* org */, - 47AC35690DA1025000CC1426 /* net */, - 47457F8A09980270002C93C3 /* de */, - 474152D806C4F08A00AC0BD2 /* ch */, - 4741532B06C4F08A00AC0BD2 /* com */, + 474B843F1C15DB51004D562C /* Sandbox.h */, + 474B84401C15DB51004D562C /* Sandbox.m */, + 47F85C151C0F101F00FDA856 /* UKCrashReporter.h */, + 47F85C161C0F101F00FDA856 /* UKCrashReporter.m */, + 47F85C171C0F101F00FDA856 /* UKSystemInfo.h */, + 47F85C181C0F101F00FDA856 /* UKSystemInfo.m */, + 4705DFDD1C037AB5002466FA /* FinderSidebarService.m */, + 4705DFDE1C037AB5002466FA /* FinderSidebarService.h */, + 4705DFDF1C037AB5002466FA /* LaunchServicesApplicationFinder.m */, + 4705DFE01C037AB5002466FA /* EMKeychainItem.h */, + 4705DFE11C037AB5002466FA /* EMKeychainItem.m */, + 4705DFE21C037AB5002466FA /* EMKeychainProxy.h */, + 4705DFE31C037AB5002466FA /* EMKeychainProxy.m */, + 4705DFE41C037AB5002466FA /* FinderLocal.h */, + 4705DFE51C037AB5002466FA /* FinderLocal.m */, + 4705DFE61C037AB5002466FA /* FoundationProgressIconService.h */, + 4705DFE71C037AB5002466FA /* FoundationProgressIconService.m */, + 4705DFE81C037AB5002466FA /* IOKitSleepPreventer.h */, + 4705DFE91C037AB5002466FA /* IOKitSleepPreventer.m */, + 4705DFEA1C037AB5002466FA /* Keychain.h */, + 4705DFEB1C037AB5002466FA /* Keychain.m */, + 4705DFEC1C037AB5002466FA /* LaunchServicesApplicationFinder.h */, + 4705DFED1C037AB5002466FA /* LaunchServicesFileDescriptor.h */, + 4705DFEE1C037AB5002466FA /* LaunchServicesFileDescriptor.m */, + 4705DFEF1C037AB5002466FA /* LaunchServicesQuarantineService.h */, + 4705DFF01C037AB5002466FA /* LaunchServicesQuarantineService.m */, + 4705DFF11C037AB5002466FA /* LaunchServicesSchemeHandler.h */, + 4705DFF21C037AB5002466FA /* LaunchServicesSchemeHandler.m */, + 4705DFF31C037AB5002466FA /* SystemConfigurationProxy.h */, + 4705DFF41C037AB5002466FA /* SystemConfigurationProxy.m */, + 4705DFF51C037AB5002466FA /* SystemConfigurationReachability.h */, + 4705DFF61C037AB5002466FA /* SystemConfigurationReachability.m */, + 474B843B1C15CDD1004D562C /* CDTransmitImporter.m */, + 474B843C1C15CDD1004D562C /* CDTransmitImporter.h */, ); + name = Core; path = source; sourceTree = ""; }; - 474152D806C4F08A00AC0BD2 /* ch */ = { - isa = PBXGroup; - children = ( - 474152D906C4F08A00AC0BD2 /* cyberduck */, - ); - path = ch; - sourceTree = ""; - }; - 474152D906C4F08A00AC0BD2 /* cyberduck */ = { - isa = PBXGroup; - children = ( - 47ADB0621A288BE200E4F69B /* cli */, - 474152DA06C4F08A00AC0BD2 /* core */, - 4741530106C4F08A00AC0BD2 /* ui */, - ); - path = cyberduck; - sourceTree = ""; - }; - 474152DA06C4F08A00AC0BD2 /* core */ = { - isa = PBXGroup; - children = ( - 47EDDEE81AE191DE00B17C93 /* diagnostics */, - 47DD76701AE133B1005F08A0 /* proxy */, - 47B1F212199E13C200960511 /* sparkle */, - 47C88FED17269A54001A746A /* IOKitSleepPreventer.h */, - 47C88FEE17269A54001A746A /* IOKitSleepPreventer.m */, - 47EA2444162B5C44002E23E2 /* urlhandler */, - 47F102BA1628D5CE00923FDE /* local */, - 4797D27F1628296900340E1C /* editor */, - 47BE1F8712369DE600E758FE /* importer */, - 47983749072AD67800FA3CDB /* Keychain.h */, - 4798373F072AD66D00FA3CDB /* Keychain.m */, - ); - path = core; - sourceTree = ""; - }; - 4741530106C4F08A00AC0BD2 /* ui */ = { - isa = PBXGroup; - children = ( - 4741530206C4F08A00AC0BD2 /* cocoa */, - ); - path = ui; - sourceTree = ""; - }; - 4741530206C4F08A00AC0BD2 /* cocoa */ = { - isa = PBXGroup; - children = ( - 47121FF61611F94000E2547D /* main.m */, - 4798434E072B0DAA00FA3CDB /* view */, - ); - path = cocoa; - sourceTree = ""; - }; - 4741532B06C4F08A00AC0BD2 /* com */ = { - isa = PBXGroup; - children = ( - 47462AD80F0A473D0075CBA9 /* extendmac */, - 477B1B7B0AF384350023BA7F /* snoize */, - ); - path = com; - sourceTree = ""; - }; 4741639206C4F58D00AC0BD2 /* Resources */ = { isa = PBXGroup; children = ( @@ -2789,1215 +1829,53 @@ path = img; sourceTree = ""; }; - 47457F8A09980270002C93C3 /* de */ = { + 47F85C1D1C0F102600FDA856 /* App */ = { isa = PBXGroup; children = ( - 47457F8B09980270002C93C3 /* zathras */, + 47F85C1E1C0F103E00FDA856 /* CDBookmarkCell.h */, + 47F85C1F1C0F103E00FDA856 /* CDBookmarkCell.m */, + 47F85C201C0F103E00FDA856 /* CDListView.h */, + 47F85C211C0F103E00FDA856 /* CDListView.m */, + 47F85C221C0F103E00FDA856 /* CDOutlineCell.h */, + 47F85C231C0F103E00FDA856 /* CDOutlineCell.m */, + 47F85C241C0F103E00FDA856 /* CDOutlineView.h */, + 47F85C251C0F103E00FDA856 /* CDOutlineView.m */, + 47F85C261C0F103E00FDA856 /* CTGradient.h */, + 47F85C271C0F103E00FDA856 /* CTGradient.m */, + 47F85C281C0F103E00FDA856 /* CTGradientView.h */, + 47F85C291C0F103E00FDA856 /* CTGradientView.m */, + 47F85C2A1C0F103E00FDA856 /* main.m */, + 47F85C2B1C0F103E00FDA856 /* QLPreviewPanel.h */, + 47F85C2E1C0F103E00FDA856 /* SNDisclosableView.h */, + 47F85C2F1C0F103E00FDA856 /* SNDisclosableView.m */, ); - path = de; - sourceTree = ""; - }; - 47457F8B09980270002C93C3 /* zathras */ = { - isa = PBXGroup; - children = ( - 477FA9590E9A7826009E7857 /* UKSystemInfo.h */, - 477FA95A0E9A7826009E7857 /* UKSystemInfo.m */, - 47457F8C09980270002C93C3 /* UKCrashReporter.h */, - 47457F8D09980270002C93C3 /* UKCrashReporter.m */, - ); - path = zathras; - sourceTree = ""; - }; - 47462AD80F0A473D0075CBA9 /* extendmac */ = { - isa = PBXGroup; - children = ( - 47462AD90F0A473D0075CBA9 /* EMKeychainItem.h */, - 47462ADA0F0A473D0075CBA9 /* EMKeychainItem.m */, - 47462ADB0F0A473D0075CBA9 /* EMKeychainProxy.h */, - 47462ADC0F0A473D0075CBA9 /* EMKeychainProxy.m */, - ); - path = extendmac; - sourceTree = ""; - }; - 476691820DAA874100DAE443 /* quicklook */ = { - isa = PBXGroup; - children = ( - 473240070DABC00800BF67D2 /* QLPreviewPanel.h */, - 478ECC9A0DAD1B0C008A5B1F /* QuickLook.h */, - 478ECC9B0DAD1B0C008A5B1F /* QuickLook.m */, - ); - path = quicklook; - sourceTree = ""; - }; - 477A105C0FD08DE800BAD4AD /* org */ = { - isa = PBXGroup; - children = ( - 477A105D0FD08DE800BAD4AD /* rococoa */, - ); - path = org; - sourceTree = ""; - }; - 477A105D0FD08DE800BAD4AD /* rococoa */ = { - isa = PBXGroup; - children = ( - 477A10890FD08DE800BAD4AD /* native */, - ); - path = rococoa; - sourceTree = ""; - }; - 477A10890FD08DE800BAD4AD /* native */ = { - isa = PBXGroup; - children = ( - 477A108A0FD08DE800BAD4AD /* ProxyForJava.h */, - 477A108B0FD08DE800BAD4AD /* ProxyForJava.m */, - 477A108C0FD08DE800BAD4AD /* Rococoa.h */, - 477A108D0FD08DE800BAD4AD /* Rococoa.m */, - ); - path = native; - sourceTree = ""; - }; - 477B1B7B0AF384350023BA7F /* snoize */ = { - isa = PBXGroup; - children = ( - 477B1B7C0AF384350023BA7F /* SNDisclosableView.h */, - 477B1B7D0AF384350023BA7F /* SNDisclosableView.m */, - ); - path = snoize; - sourceTree = ""; - }; - 4797D27F1628296900340E1C /* editor */ = { - isa = PBXGroup; - children = ( - 47E72E07162865000002F049 /* Editor.h */, - 47E72E08162865000002F049 /* NSAppleEventDescriptor-Extensions.h */, - 47E72E09162865000002F049 /* ODBEditor.h */, - 47E72E0A162865000002F049 /* ODBEditorSuite.h */, - 47E72E0B162865000002F049 /* Editor.m */, - 47E72E0C162865000002F049 /* NSAppleEventDescriptor-Extensions.m */, - 47E72E0D162865000002F049 /* ODBEditor.m */, - ); - path = editor; - sourceTree = ""; - }; - 4798434E072B0DAA00FA3CDB /* view */ = { - isa = PBXGroup; - children = ( - 475286B510D2CC660029363C /* CDBookmarkCell.h */, - 475286B710D2CC660029363C /* CDListView.h */, - 475286B810D2CC660029363C /* CDOutlineCell.h */, - 475286B910D2CC660029363C /* CDOutlineView.h */, - 475286BD10D2CC660029363C /* CDBookmarkCell.m */, - 475286BF10D2CC660029363C /* CDListView.m */, - 475286C010D2CC660029363C /* CDOutlineCell.m */, - 475286C110D2CC660029363C /* CDOutlineView.m */, - 476691820DAA874100DAE443 /* quicklook */, - ); - name = view; - sourceTree = ""; - }; - 47AC35690DA1025000CC1426 /* net */ = { - isa = PBXGroup; - children = ( - 47AC356A0DA1025000CC1426 /* oofn */, - ); - path = net; - sourceTree = ""; - }; - 47AC356A0DA1025000CC1426 /* oofn */ = { - isa = PBXGroup; - children = ( - 47AC356B0DA1025000CC1426 /* CTGradient.h */, - 47AC356C0DA1025000CC1426 /* CTGradient.m */, - 47AC356D0DA1025000CC1426 /* CTGradientView.h */, - 47AC356E0DA1025000CC1426 /* CTGradientView.m */, - ); - path = oofn; - sourceTree = ""; - }; - 47ADB0621A288BE200E4F69B /* cli */ = { - isa = PBXGroup; - children = ( - 47ADB0821A288D7600E4F69B /* launcher.h */, - 47ADB07F1A288CC100E4F69B /* launcher.m */, - 47ADB07D1A288C7C00E4F69B /* main.m */, - ); - path = cli; - sourceTree = ""; - }; - 47B1F212199E13C200960511 /* sparkle */ = { - isa = PBXGroup; - children = ( - 47B1F213199E13C200960511 /* Sandbox.h */, - 47B1F215199E13C200960511 /* Sandbox.m */, - ); - path = sparkle; - sourceTree = ""; - }; - 47BE1F8712369DE600E758FE /* importer */ = { - isa = PBXGroup; - children = ( - 47BE1F8912369DF100E758FE /* CDTransmitImporter.h */, - 47BE1F8A12369DF100E758FE /* CDTransmitImporter.m */, - ); - name = importer; - sourceTree = ""; - }; - 47D93A1A1A2764910006D4AE /* lib */ = { - isa = PBXGroup; - children = ( - 47D93A1B1A2764910006D4AE /* Runtime.jre */, - ); - path = lib; - sourceTree = ""; - }; - 47D93A1B1A2764910006D4AE /* Runtime.jre */ = { - isa = PBXGroup; - children = ( - 47D93A1C1A2764910006D4AE /* Contents */, - ); - name = Runtime.jre; - path = "1.7.0-u40-b30.jre"; - sourceTree = ""; - }; - 47D93A1C1A2764910006D4AE /* Contents */ = { - isa = PBXGroup; - children = ( - 47D93A1D1A2764910006D4AE /* Home */, - 47D93C951A2764930006D4AE /* Info.plist */, - 47D93C961A2764930006D4AE /* MacOS */, - ); - path = Contents; - sourceTree = ""; - }; - 47D93A1D1A2764910006D4AE /* Home */ = { - isa = PBXGroup; - children = ( - 47D93A1E1A2764910006D4AE /* ASSEMBLY_EXCEPTION */, - 47D93A1F1A2764910006D4AE /* bin */, - 47D93A2A1A2764910006D4AE /* lib */, - 47D93C6E1A2764930006D4AE /* LICENSE */, - 47D93C6F1A2764930006D4AE /* man */, - 47D93C931A2764930006D4AE /* release */, - 47D93C941A2764930006D4AE /* THIRD_PARTY_README */, - ); - path = Home; - sourceTree = ""; - }; - 47D93A1F1A2764910006D4AE /* bin */ = { - isa = PBXGroup; - children = ( - 47D93A201A2764910006D4AE /* java */, - 47D93A211A2764910006D4AE /* keytool */, - 47D93A221A2764910006D4AE /* orbd */, - 47D93A231A2764910006D4AE /* pack200 */, - 47D93A241A2764910006D4AE /* policytool */, - 47D93A251A2764910006D4AE /* rmid */, - 47D93A261A2764910006D4AE /* rmiregistry */, - 47D93A271A2764910006D4AE /* servertool */, - 47D93A281A2764910006D4AE /* tnameserv */, - 47D93A291A2764910006D4AE /* unpack200 */, - ); - path = bin; - sourceTree = ""; - }; - 47D93A2A1A2764910006D4AE /* lib */ = { - isa = PBXGroup; - children = ( - 47D93A2B1A2764910006D4AE /* applet */, - 47D93A2C1A2764910006D4AE /* calendars.properties */, - 47D93A2D1A2764910006D4AE /* charsets.jar */, - 47D93A2E1A2764910006D4AE /* classlist */, - 47D93A2F1A2764910006D4AE /* cmm */, - 47D93A351A2764910006D4AE /* content-types.properties */, - 47D93A361A2764910006D4AE /* currency.data */, - 47D93A371A2764910006D4AE /* ext */, - 47D93A3F1A2764910006D4AE /* flavormap.properties */, - 47D93A401A2764910006D4AE /* fontconfig.bfc */, - 47D93A411A2764910006D4AE /* fontconfig.properties.src */, - 47D93A421A2764910006D4AE /* headless */, - 47D93A441A2764910006D4AE /* images */, - 47D93A4E1A2764910006D4AE /* jce.jar */, - 47D93A4F1A2764910006D4AE /* jli */, - 47D93A511A2764910006D4AE /* JObjC.jar */, - 47D93A521A2764910006D4AE /* jsse.jar */, - 47D93A531A2764910006D4AE /* jvm.cfg */, - 47D93A541A2764910006D4AE /* jvm.hprof.txt */, - 47D93A551A2764910006D4AE /* libAppleScriptEngine.dylib */, - 47D93A561A2764910006D4AE /* libattach.dylib */, - 47D93A571A2764910006D4AE /* libawt.dylib */, - 47D93A581A2764910006D4AE /* libdt_socket.dylib */, - 47D93A591A2764910006D4AE /* libfontmanager.dylib */, - 47D93A5A1A2764910006D4AE /* libfreetype.dylib */, - 47D93A5B1A2764910006D4AE /* libhprof.dylib */, - 47D93A5C1A2764910006D4AE /* libinstrument.dylib */, - 47D93A5D1A2764910006D4AE /* libj2gss.dylib */, - 47D93A5E1A2764910006D4AE /* libj2pcsc.dylib */, - 47D93A5F1A2764910006D4AE /* libj2pkcs11.dylib */, - 47D93A601A2764910006D4AE /* libjaas_unix.dylib */, - 47D93A611A2764910006D4AE /* libjava.dylib */, - 47D93A621A2764910006D4AE /* libjava_crw_demo.dylib */, - 47D93A631A2764910006D4AE /* libjawt.dylib */, - 47D93A641A2764910006D4AE /* libjdwp.dylib */, - 47D93A651A2764910006D4AE /* libJObjC.dylib */, - 47D93A661A2764910006D4AE /* libjpeg.dylib */, - 47D93A671A2764910006D4AE /* libjsdt.dylib */, - 47D93A681A2764910006D4AE /* libjsig.dylib */, - 47D93A691A2764910006D4AE /* libjsound.dylib */, - 47D93A6A1A2764910006D4AE /* liblcms.dylib */, - 47D93A6B1A2764910006D4AE /* libmanagement.dylib */, - 47D93A6C1A2764910006D4AE /* libmlib_image.dylib */, - 47D93A6D1A2764910006D4AE /* libnet.dylib */, - 47D93A6E1A2764910006D4AE /* libnio.dylib */, - 47D93A6F1A2764910006D4AE /* libnpt.dylib */, - 47D93A701A2764910006D4AE /* libosx.dylib */, - 47D93A711A2764910006D4AE /* libosxapp.dylib */, - 47D93A721A2764910006D4AE /* libosxkrb5.dylib */, - 47D93A731A2764910006D4AE /* libosxui.dylib */, - 47D93A741A2764910006D4AE /* libsaproc.dylib */, - 47D93A751A2764910006D4AE /* libsplashscreen.dylib */, - 47D93A761A2764910006D4AE /* libsunec.dylib */, - 47D93A771A2764910006D4AE /* libunpack.dylib */, - 47D93A781A2764910006D4AE /* libverify.dylib */, - 47D93A791A2764910006D4AE /* libzip.dylib */, - 47D93A7A1A2764910006D4AE /* logging.properties */, - 47D93A7B1A2764910006D4AE /* lwawt */, - 47D93A7D1A2764910006D4AE /* management */, - 47D93A821A2764910006D4AE /* management-agent.jar */, - 47D93A831A2764910006D4AE /* meta-index */, - 47D93A841A2764910006D4AE /* net.properties */, - 47D93A851A2764910006D4AE /* psfont.properties.ja */, - 47D93A861A2764910006D4AE /* psfontj2d.properties */, - 47D93A871A2764910006D4AE /* resources.jar */, - 47D93A881A2764910006D4AE /* rt.jar */, - 47D93A891A2764910006D4AE /* security */, - 47D93A8F1A2764910006D4AE /* server */, - 47D93A931A2764910006D4AE /* sound.properties */, - 47D93A941A2764910006D4AE /* xawt */, - 47D93A961A2764910006D4AE /* zi */, - ); - path = lib; - sourceTree = ""; - }; - 47D93A2B1A2764910006D4AE /* applet */ = { - isa = PBXGroup; - children = ( - ); - path = applet; - sourceTree = ""; - }; - 47D93A2F1A2764910006D4AE /* cmm */ = { - isa = PBXGroup; - children = ( - 47D93A301A2764910006D4AE /* CIEXYZ.pf */, - 47D93A311A2764910006D4AE /* GRAY.pf */, - 47D93A321A2764910006D4AE /* LINEAR_RGB.pf */, - 47D93A331A2764910006D4AE /* PYCC.pf */, - 47D93A341A2764910006D4AE /* sRGB.pf */, - ); - path = cmm; - sourceTree = ""; - }; - 47D93A371A2764910006D4AE /* ext */ = { - isa = PBXGroup; - children = ( - 47D93A381A2764910006D4AE /* dnsns.jar */, - 47D93A391A2764910006D4AE /* localedata.jar */, - 47D93A3A1A2764910006D4AE /* meta-index */, - 47D93A3B1A2764910006D4AE /* sunec.jar */, - 47D93A3C1A2764910006D4AE /* sunjce_provider.jar */, - 47D93A3D1A2764910006D4AE /* sunpkcs11.jar */, - 47D93A3E1A2764910006D4AE /* zipfs.jar */, - ); - path = ext; - sourceTree = ""; - }; - 47D93A421A2764910006D4AE /* headless */ = { - isa = PBXGroup; - children = ( - 47D93A431A2764910006D4AE /* libmawt.dylib */, - ); - path = headless; - sourceTree = ""; - }; - 47D93A441A2764910006D4AE /* images */ = { - isa = PBXGroup; - children = ( - 47D93A451A2764910006D4AE /* cursors */, - ); - path = images; - sourceTree = ""; - }; - 47D93A451A2764910006D4AE /* cursors */ = { - isa = PBXGroup; - children = ( - 47D93A461A2764910006D4AE /* cursors.properties */, - 47D93A471A2764910006D4AE /* invalid32x32.gif */, - 47D93A481A2764910006D4AE /* motif_CopyDrop32x32.gif */, - 47D93A491A2764910006D4AE /* motif_CopyNoDrop32x32.gif */, - 47D93A4A1A2764910006D4AE /* motif_LinkDrop32x32.gif */, - 47D93A4B1A2764910006D4AE /* motif_LinkNoDrop32x32.gif */, - 47D93A4C1A2764910006D4AE /* motif_MoveDrop32x32.gif */, - 47D93A4D1A2764910006D4AE /* motif_MoveNoDrop32x32.gif */, - ); - path = cursors; - sourceTree = ""; - }; - 47D93A4F1A2764910006D4AE /* jli */ = { - isa = PBXGroup; - children = ( - 47D93A501A2764910006D4AE /* libjli.dylib */, - ); - path = jli; - sourceTree = ""; - }; - 47D93A7B1A2764910006D4AE /* lwawt */ = { - isa = PBXGroup; - children = ( - 47D93A7C1A2764910006D4AE /* liblwawt.dylib */, - ); - path = lwawt; - sourceTree = ""; - }; - 47D93A7D1A2764910006D4AE /* management */ = { - isa = PBXGroup; - children = ( - 47D93A7E1A2764910006D4AE /* jmxremote.access */, - 47D93A7F1A2764910006D4AE /* jmxremote.password.template */, - 47D93A801A2764910006D4AE /* management.properties */, - 47D93A811A2764910006D4AE /* snmp.acl.template */, - ); - path = management; - sourceTree = ""; - }; - 47D93A891A2764910006D4AE /* security */ = { - isa = PBXGroup; - children = ( - 47D93A8A1A2764910006D4AE /* cacerts */, - 47D93A8B1A2764910006D4AE /* java.policy */, - 47D93A8C1A2764910006D4AE /* java.security */, - 47D93A8D1A2764910006D4AE /* local_policy.jar */, - 47D93A8E1A2764910006D4AE /* US_export_policy.jar */, - ); - path = security; - sourceTree = ""; - }; - 47D93A8F1A2764910006D4AE /* server */ = { - isa = PBXGroup; - children = ( - 47D93A901A2764910006D4AE /* libjsig.dylib */, - 47D93A911A2764910006D4AE /* libjvm.dylib */, - 47D93A921A2764910006D4AE /* Xusage.txt */, - ); - path = server; - sourceTree = ""; - }; - 47D93A941A2764910006D4AE /* xawt */ = { - isa = PBXGroup; - children = ( - 47D93A951A2764910006D4AE /* libmawt.dylib */, - ); - path = xawt; - sourceTree = ""; - }; - 47D93A961A2764910006D4AE /* zi */ = { - isa = PBXGroup; - children = ( - 47D93A971A2764910006D4AE /* Africa */, - 47D93ACC1A2764910006D4AE /* America */, - 47D93B601A2764920006D4AE /* Antarctica */, - 47D93B6B1A2764920006D4AE /* Asia */, - 47D93BBE1A2764920006D4AE /* Atlantic */, - 47D93BC91A2764920006D4AE /* Australia */, - 47D93BD61A2764920006D4AE /* CET */, - 47D93BD71A2764920006D4AE /* CST6CDT */, - 47D93BD81A2764920006D4AE /* EET */, - 47D93BD91A2764920006D4AE /* EST */, - 47D93BDA1A2764920006D4AE /* EST5EDT */, - 47D93BDB1A2764920006D4AE /* Etc */, - 47D93BF91A2764920006D4AE /* Europe */, - 47D93C251A2764920006D4AE /* GMT */, - 47D93C261A2764920006D4AE /* HST */, - 47D93C271A2764920006D4AE /* Indian */, - 47D93C331A2764920006D4AE /* MET */, - 47D93C341A2764920006D4AE /* MST */, - 47D93C351A2764920006D4AE /* MST7MDT */, - 47D93C361A2764920006D4AE /* Pacific */, - 47D93C5D1A2764930006D4AE /* PST8PDT */, - 47D93C5E1A2764930006D4AE /* SystemV */, - 47D93C6C1A2764930006D4AE /* WET */, - 47D93C6D1A2764930006D4AE /* ZoneInfoMappings */, - ); - path = zi; - sourceTree = ""; - }; - 47D93A971A2764910006D4AE /* Africa */ = { - isa = PBXGroup; - children = ( - 47D93A981A2764910006D4AE /* Abidjan */, - 47D93A991A2764910006D4AE /* Accra */, - 47D93A9A1A2764910006D4AE /* Addis_Ababa */, - 47D93A9B1A2764910006D4AE /* Algiers */, - 47D93A9C1A2764910006D4AE /* Asmara */, - 47D93A9D1A2764910006D4AE /* Bamako */, - 47D93A9E1A2764910006D4AE /* Bangui */, - 47D93A9F1A2764910006D4AE /* Banjul */, - 47D93AA01A2764910006D4AE /* Bissau */, - 47D93AA11A2764910006D4AE /* Blantyre */, - 47D93AA21A2764910006D4AE /* Brazzaville */, - 47D93AA31A2764910006D4AE /* Bujumbura */, - 47D93AA41A2764910006D4AE /* Cairo */, - 47D93AA51A2764910006D4AE /* Casablanca */, - 47D93AA61A2764910006D4AE /* Ceuta */, - 47D93AA71A2764910006D4AE /* Conakry */, - 47D93AA81A2764910006D4AE /* Dakar */, - 47D93AA91A2764910006D4AE /* Dar_es_Salaam */, - 47D93AAA1A2764910006D4AE /* Djibouti */, - 47D93AAB1A2764910006D4AE /* Douala */, - 47D93AAC1A2764910006D4AE /* El_Aaiun */, - 47D93AAD1A2764910006D4AE /* Freetown */, - 47D93AAE1A2764910006D4AE /* Gaborone */, - 47D93AAF1A2764910006D4AE /* Harare */, - 47D93AB01A2764910006D4AE /* Johannesburg */, - 47D93AB11A2764910006D4AE /* Juba */, - 47D93AB21A2764910006D4AE /* Kampala */, - 47D93AB31A2764910006D4AE /* Khartoum */, - 47D93AB41A2764910006D4AE /* Kigali */, - 47D93AB51A2764910006D4AE /* Kinshasa */, - 47D93AB61A2764910006D4AE /* Lagos */, - 47D93AB71A2764910006D4AE /* Libreville */, - 47D93AB81A2764910006D4AE /* Lome */, - 47D93AB91A2764910006D4AE /* Luanda */, - 47D93ABA1A2764910006D4AE /* Lubumbashi */, - 47D93ABB1A2764910006D4AE /* Lusaka */, - 47D93ABC1A2764910006D4AE /* Malabo */, - 47D93ABD1A2764910006D4AE /* Maputo */, - 47D93ABE1A2764910006D4AE /* Maseru */, - 47D93ABF1A2764910006D4AE /* Mbabane */, - 47D93AC01A2764910006D4AE /* Mogadishu */, - 47D93AC11A2764910006D4AE /* Monrovia */, - 47D93AC21A2764910006D4AE /* Nairobi */, - 47D93AC31A2764910006D4AE /* Ndjamena */, - 47D93AC41A2764910006D4AE /* Niamey */, - 47D93AC51A2764910006D4AE /* Nouakchott */, - 47D93AC61A2764910006D4AE /* Ouagadougou */, - 47D93AC71A2764910006D4AE /* Porto-Novo */, - 47D93AC81A2764910006D4AE /* Sao_Tome */, - 47D93AC91A2764910006D4AE /* Tripoli */, - 47D93ACA1A2764910006D4AE /* Tunis */, - 47D93ACB1A2764910006D4AE /* Windhoek */, - ); - path = Africa; - sourceTree = ""; - }; - 47D93ACC1A2764910006D4AE /* America */ = { - isa = PBXGroup; - children = ( - 47D93ACD1A2764910006D4AE /* Adak */, - 47D93ACE1A2764910006D4AE /* Anchorage */, - 47D93ACF1A2764910006D4AE /* Anguilla */, - 47D93AD01A2764910006D4AE /* Antigua */, - 47D93AD11A2764910006D4AE /* Araguaina */, - 47D93AD21A2764910006D4AE /* Argentina */, - 47D93ADF1A2764910006D4AE /* Aruba */, - 47D93AE01A2764910006D4AE /* Asuncion */, - 47D93AE11A2764910006D4AE /* Atikokan */, - 47D93AE21A2764910006D4AE /* Bahia */, - 47D93AE31A2764910006D4AE /* Bahia_Banderas */, - 47D93AE41A2764910006D4AE /* Barbados */, - 47D93AE51A2764910006D4AE /* Belem */, - 47D93AE61A2764910006D4AE /* Belize */, - 47D93AE71A2764910006D4AE /* Blanc-Sablon */, - 47D93AE81A2764910006D4AE /* Boa_Vista */, - 47D93AE91A2764910006D4AE /* Bogota */, - 47D93AEA1A2764910006D4AE /* Boise */, - 47D93AEB1A2764910006D4AE /* Cambridge_Bay */, - 47D93AEC1A2764910006D4AE /* Campo_Grande */, - 47D93AED1A2764910006D4AE /* Cancun */, - 47D93AEE1A2764910006D4AE /* Caracas */, - 47D93AEF1A2764910006D4AE /* Cayenne */, - 47D93AF01A2764910006D4AE /* Cayman */, - 47D93AF11A2764910006D4AE /* Chicago */, - 47D93AF21A2764910006D4AE /* Chihuahua */, - 47D93AF31A2764910006D4AE /* Costa_Rica */, - 47D93AF41A2764910006D4AE /* Creston */, - 47D93AF51A2764910006D4AE /* Cuiaba */, - 47D93AF61A2764910006D4AE /* Curacao */, - 47D93AF71A2764910006D4AE /* Danmarkshavn */, - 47D93AF81A2764910006D4AE /* Dawson */, - 47D93AF91A2764910006D4AE /* Dawson_Creek */, - 47D93AFA1A2764910006D4AE /* Denver */, - 47D93AFB1A2764910006D4AE /* Detroit */, - 47D93AFC1A2764910006D4AE /* Dominica */, - 47D93AFD1A2764910006D4AE /* Edmonton */, - 47D93AFE1A2764910006D4AE /* Eirunepe */, - 47D93AFF1A2764910006D4AE /* El_Salvador */, - 47D93B001A2764910006D4AE /* Fortaleza */, - 47D93B011A2764910006D4AE /* Glace_Bay */, - 47D93B021A2764910006D4AE /* Godthab */, - 47D93B031A2764910006D4AE /* Goose_Bay */, - 47D93B041A2764910006D4AE /* Grand_Turk */, - 47D93B051A2764910006D4AE /* Grenada */, - 47D93B061A2764910006D4AE /* Guadeloupe */, - 47D93B071A2764910006D4AE /* Guatemala */, - 47D93B081A2764910006D4AE /* Guayaquil */, - 47D93B091A2764910006D4AE /* Guyana */, - 47D93B0A1A2764910006D4AE /* Halifax */, - 47D93B0B1A2764910006D4AE /* Havana */, - 47D93B0C1A2764910006D4AE /* Hermosillo */, - 47D93B0D1A2764910006D4AE /* Indiana */, - 47D93B161A2764910006D4AE /* Inuvik */, - 47D93B171A2764910006D4AE /* Iqaluit */, - 47D93B181A2764910006D4AE /* Jamaica */, - 47D93B191A2764910006D4AE /* Juneau */, - 47D93B1A1A2764910006D4AE /* Kentucky */, - 47D93B1D1A2764910006D4AE /* La_Paz */, - 47D93B1E1A2764910006D4AE /* Lima */, - 47D93B1F1A2764910006D4AE /* Los_Angeles */, - 47D93B201A2764910006D4AE /* Maceio */, - 47D93B211A2764910006D4AE /* Managua */, - 47D93B221A2764910006D4AE /* Manaus */, - 47D93B231A2764910006D4AE /* Martinique */, - 47D93B241A2764920006D4AE /* Matamoros */, - 47D93B251A2764920006D4AE /* Mazatlan */, - 47D93B261A2764920006D4AE /* Menominee */, - 47D93B271A2764920006D4AE /* Merida */, - 47D93B281A2764920006D4AE /* Metlakatla */, - 47D93B291A2764920006D4AE /* Mexico_City */, - 47D93B2A1A2764920006D4AE /* Miquelon */, - 47D93B2B1A2764920006D4AE /* Moncton */, - 47D93B2C1A2764920006D4AE /* Monterrey */, - 47D93B2D1A2764920006D4AE /* Montevideo */, - 47D93B2E1A2764920006D4AE /* Montreal */, - 47D93B2F1A2764920006D4AE /* Montserrat */, - 47D93B301A2764920006D4AE /* Nassau */, - 47D93B311A2764920006D4AE /* New_York */, - 47D93B321A2764920006D4AE /* Nipigon */, - 47D93B331A2764920006D4AE /* Nome */, - 47D93B341A2764920006D4AE /* Noronha */, - 47D93B351A2764920006D4AE /* North_Dakota */, - 47D93B391A2764920006D4AE /* Ojinaga */, - 47D93B3A1A2764920006D4AE /* Panama */, - 47D93B3B1A2764920006D4AE /* Pangnirtung */, - 47D93B3C1A2764920006D4AE /* Paramaribo */, - 47D93B3D1A2764920006D4AE /* Phoenix */, - 47D93B3E1A2764920006D4AE /* Port-au-Prince */, - 47D93B3F1A2764920006D4AE /* Port_of_Spain */, - 47D93B401A2764920006D4AE /* Porto_Velho */, - 47D93B411A2764920006D4AE /* Puerto_Rico */, - 47D93B421A2764920006D4AE /* Rainy_River */, - 47D93B431A2764920006D4AE /* Rankin_Inlet */, - 47D93B441A2764920006D4AE /* Recife */, - 47D93B451A2764920006D4AE /* Regina */, - 47D93B461A2764920006D4AE /* Resolute */, - 47D93B471A2764920006D4AE /* Rio_Branco */, - 47D93B481A2764920006D4AE /* Santa_Isabel */, - 47D93B491A2764920006D4AE /* Santarem */, - 47D93B4A1A2764920006D4AE /* Santiago */, - 47D93B4B1A2764920006D4AE /* Santo_Domingo */, - 47D93B4C1A2764920006D4AE /* Sao_Paulo */, - 47D93B4D1A2764920006D4AE /* Scoresbysund */, - 47D93B4E1A2764920006D4AE /* Sitka */, - 47D93B4F1A2764920006D4AE /* St_Johns */, - 47D93B501A2764920006D4AE /* St_Kitts */, - 47D93B511A2764920006D4AE /* St_Lucia */, - 47D93B521A2764920006D4AE /* St_Thomas */, - 47D93B531A2764920006D4AE /* St_Vincent */, - 47D93B541A2764920006D4AE /* Swift_Current */, - 47D93B551A2764920006D4AE /* Tegucigalpa */, - 47D93B561A2764920006D4AE /* Thule */, - 47D93B571A2764920006D4AE /* Thunder_Bay */, - 47D93B581A2764920006D4AE /* Tijuana */, - 47D93B591A2764920006D4AE /* Toronto */, - 47D93B5A1A2764920006D4AE /* Tortola */, - 47D93B5B1A2764920006D4AE /* Vancouver */, - 47D93B5C1A2764920006D4AE /* Whitehorse */, - 47D93B5D1A2764920006D4AE /* Winnipeg */, - 47D93B5E1A2764920006D4AE /* Yakutat */, - 47D93B5F1A2764920006D4AE /* Yellowknife */, - ); - path = America; - sourceTree = ""; - }; - 47D93AD21A2764910006D4AE /* Argentina */ = { - isa = PBXGroup; - children = ( - 47D93AD31A2764910006D4AE /* Buenos_Aires */, - 47D93AD41A2764910006D4AE /* Catamarca */, - 47D93AD51A2764910006D4AE /* Cordoba */, - 47D93AD61A2764910006D4AE /* Jujuy */, - 47D93AD71A2764910006D4AE /* La_Rioja */, - 47D93AD81A2764910006D4AE /* Mendoza */, - 47D93AD91A2764910006D4AE /* Rio_Gallegos */, - 47D93ADA1A2764910006D4AE /* Salta */, - 47D93ADB1A2764910006D4AE /* San_Juan */, - 47D93ADC1A2764910006D4AE /* San_Luis */, - 47D93ADD1A2764910006D4AE /* Tucuman */, - 47D93ADE1A2764910006D4AE /* Ushuaia */, - ); - path = Argentina; - sourceTree = ""; - }; - 47D93B0D1A2764910006D4AE /* Indiana */ = { - isa = PBXGroup; - children = ( - 47D93B0E1A2764910006D4AE /* Indianapolis */, - 47D93B0F1A2764910006D4AE /* Knox */, - 47D93B101A2764910006D4AE /* Marengo */, - 47D93B111A2764910006D4AE /* Petersburg */, - 47D93B121A2764910006D4AE /* Tell_City */, - 47D93B131A2764910006D4AE /* Vevay */, - 47D93B141A2764910006D4AE /* Vincennes */, - 47D93B151A2764910006D4AE /* Winamac */, - ); - path = Indiana; - sourceTree = ""; - }; - 47D93B1A1A2764910006D4AE /* Kentucky */ = { - isa = PBXGroup; - children = ( - 47D93B1B1A2764910006D4AE /* Louisville */, - 47D93B1C1A2764910006D4AE /* Monticello */, - ); - path = Kentucky; - sourceTree = ""; - }; - 47D93B351A2764920006D4AE /* North_Dakota */ = { - isa = PBXGroup; - children = ( - 47D93B361A2764920006D4AE /* Beulah */, - 47D93B371A2764920006D4AE /* Center */, - 47D93B381A2764920006D4AE /* New_Salem */, - ); - path = North_Dakota; - sourceTree = ""; - }; - 47D93B601A2764920006D4AE /* Antarctica */ = { - isa = PBXGroup; - children = ( - 47D93B611A2764920006D4AE /* Casey */, - 47D93B621A2764920006D4AE /* Davis */, - 47D93B631A2764920006D4AE /* DumontDUrville */, - 47D93B641A2764920006D4AE /* Macquarie */, - 47D93B651A2764920006D4AE /* Mawson */, - 47D93B661A2764920006D4AE /* McMurdo */, - 47D93B671A2764920006D4AE /* Palmer */, - 47D93B681A2764920006D4AE /* Rothera */, - 47D93B691A2764920006D4AE /* Syowa */, - 47D93B6A1A2764920006D4AE /* Vostok */, - ); - path = Antarctica; - sourceTree = ""; - }; - 47D93B6B1A2764920006D4AE /* Asia */ = { - isa = PBXGroup; - children = ( - 47D93B6C1A2764920006D4AE /* Aden */, - 47D93B6D1A2764920006D4AE /* Almaty */, - 47D93B6E1A2764920006D4AE /* Amman */, - 47D93B6F1A2764920006D4AE /* Anadyr */, - 47D93B701A2764920006D4AE /* Aqtau */, - 47D93B711A2764920006D4AE /* Aqtobe */, - 47D93B721A2764920006D4AE /* Ashgabat */, - 47D93B731A2764920006D4AE /* Baghdad */, - 47D93B741A2764920006D4AE /* Bahrain */, - 47D93B751A2764920006D4AE /* Baku */, - 47D93B761A2764920006D4AE /* Bangkok */, - 47D93B771A2764920006D4AE /* Beirut */, - 47D93B781A2764920006D4AE /* Bishkek */, - 47D93B791A2764920006D4AE /* Brunei */, - 47D93B7A1A2764920006D4AE /* Choibalsan */, - 47D93B7B1A2764920006D4AE /* Chongqing */, - 47D93B7C1A2764920006D4AE /* Colombo */, - 47D93B7D1A2764920006D4AE /* Damascus */, - 47D93B7E1A2764920006D4AE /* Dhaka */, - 47D93B7F1A2764920006D4AE /* Dili */, - 47D93B801A2764920006D4AE /* Dubai */, - 47D93B811A2764920006D4AE /* Dushanbe */, - 47D93B821A2764920006D4AE /* Gaza */, - 47D93B831A2764920006D4AE /* Harbin */, - 47D93B841A2764920006D4AE /* Hebron */, - 47D93B851A2764920006D4AE /* Ho_Chi_Minh */, - 47D93B861A2764920006D4AE /* Hong_Kong */, - 47D93B871A2764920006D4AE /* Hovd */, - 47D93B881A2764920006D4AE /* Irkutsk */, - 47D93B891A2764920006D4AE /* Jakarta */, - 47D93B8A1A2764920006D4AE /* Jayapura */, - 47D93B8B1A2764920006D4AE /* Jerusalem */, - 47D93B8C1A2764920006D4AE /* Kabul */, - 47D93B8D1A2764920006D4AE /* Kamchatka */, - 47D93B8E1A2764920006D4AE /* Karachi */, - 47D93B8F1A2764920006D4AE /* Kashgar */, - 47D93B901A2764920006D4AE /* Kathmandu */, - 47D93B911A2764920006D4AE /* Khandyga */, - 47D93B921A2764920006D4AE /* Kolkata */, - 47D93B931A2764920006D4AE /* Krasnoyarsk */, - 47D93B941A2764920006D4AE /* Kuala_Lumpur */, - 47D93B951A2764920006D4AE /* Kuching */, - 47D93B961A2764920006D4AE /* Kuwait */, - 47D93B971A2764920006D4AE /* Macau */, - 47D93B981A2764920006D4AE /* Magadan */, - 47D93B991A2764920006D4AE /* Makassar */, - 47D93B9A1A2764920006D4AE /* Manila */, - 47D93B9B1A2764920006D4AE /* Muscat */, - 47D93B9C1A2764920006D4AE /* Nicosia */, - 47D93B9D1A2764920006D4AE /* Novokuznetsk */, - 47D93B9E1A2764920006D4AE /* Novosibirsk */, - 47D93B9F1A2764920006D4AE /* Omsk */, - 47D93BA01A2764920006D4AE /* Oral */, - 47D93BA11A2764920006D4AE /* Phnom_Penh */, - 47D93BA21A2764920006D4AE /* Pontianak */, - 47D93BA31A2764920006D4AE /* Pyongyang */, - 47D93BA41A2764920006D4AE /* Qatar */, - 47D93BA51A2764920006D4AE /* Qyzylorda */, - 47D93BA61A2764920006D4AE /* Rangoon */, - 47D93BA71A2764920006D4AE /* Riyadh */, - 47D93BA81A2764920006D4AE /* Riyadh87 */, - 47D93BA91A2764920006D4AE /* Riyadh88 */, - 47D93BAA1A2764920006D4AE /* Riyadh89 */, - 47D93BAB1A2764920006D4AE /* Sakhalin */, - 47D93BAC1A2764920006D4AE /* Samarkand */, - 47D93BAD1A2764920006D4AE /* Seoul */, - 47D93BAE1A2764920006D4AE /* Shanghai */, - 47D93BAF1A2764920006D4AE /* Singapore */, - 47D93BB01A2764920006D4AE /* Taipei */, - 47D93BB11A2764920006D4AE /* Tashkent */, - 47D93BB21A2764920006D4AE /* Tbilisi */, - 47D93BB31A2764920006D4AE /* Tehran */, - 47D93BB41A2764920006D4AE /* Thimphu */, - 47D93BB51A2764920006D4AE /* Tokyo */, - 47D93BB61A2764920006D4AE /* Ulaanbaatar */, - 47D93BB71A2764920006D4AE /* Urumqi */, - 47D93BB81A2764920006D4AE /* Ust-Nera */, - 47D93BB91A2764920006D4AE /* Vientiane */, - 47D93BBA1A2764920006D4AE /* Vladivostok */, - 47D93BBB1A2764920006D4AE /* Yakutsk */, - 47D93BBC1A2764920006D4AE /* Yekaterinburg */, - 47D93BBD1A2764920006D4AE /* Yerevan */, - ); - path = Asia; - sourceTree = ""; - }; - 47D93BBE1A2764920006D4AE /* Atlantic */ = { - isa = PBXGroup; - children = ( - 47D93BBF1A2764920006D4AE /* Azores */, - 47D93BC01A2764920006D4AE /* Bermuda */, - 47D93BC11A2764920006D4AE /* Canary */, - 47D93BC21A2764920006D4AE /* Cape_Verde */, - 47D93BC31A2764920006D4AE /* Faroe */, - 47D93BC41A2764920006D4AE /* Madeira */, - 47D93BC51A2764920006D4AE /* Reykjavik */, - 47D93BC61A2764920006D4AE /* South_Georgia */, - 47D93BC71A2764920006D4AE /* St_Helena */, - 47D93BC81A2764920006D4AE /* Stanley */, - ); - path = Atlantic; - sourceTree = ""; - }; - 47D93BC91A2764920006D4AE /* Australia */ = { - isa = PBXGroup; - children = ( - 47D93BCA1A2764920006D4AE /* Adelaide */, - 47D93BCB1A2764920006D4AE /* Brisbane */, - 47D93BCC1A2764920006D4AE /* Broken_Hill */, - 47D93BCD1A2764920006D4AE /* Currie */, - 47D93BCE1A2764920006D4AE /* Darwin */, - 47D93BCF1A2764920006D4AE /* Eucla */, - 47D93BD01A2764920006D4AE /* Hobart */, - 47D93BD11A2764920006D4AE /* Lindeman */, - 47D93BD21A2764920006D4AE /* Lord_Howe */, - 47D93BD31A2764920006D4AE /* Melbourne */, - 47D93BD41A2764920006D4AE /* Perth */, - 47D93BD51A2764920006D4AE /* Sydney */, - ); - path = Australia; - sourceTree = ""; - }; - 47D93BDB1A2764920006D4AE /* Etc */ = { - isa = PBXGroup; - children = ( - 47D93BDC1A2764920006D4AE /* GMT */, - 47D93BDD1A2764920006D4AE /* GMT+1 */, - 47D93BDE1A2764920006D4AE /* GMT+10 */, - 47D93BDF1A2764920006D4AE /* GMT+11 */, - 47D93BE01A2764920006D4AE /* GMT+12 */, - 47D93BE11A2764920006D4AE /* GMT+2 */, - 47D93BE21A2764920006D4AE /* GMT+3 */, - 47D93BE31A2764920006D4AE /* GMT+4 */, - 47D93BE41A2764920006D4AE /* GMT+5 */, - 47D93BE51A2764920006D4AE /* GMT+6 */, - 47D93BE61A2764920006D4AE /* GMT+7 */, - 47D93BE71A2764920006D4AE /* GMT+8 */, - 47D93BE81A2764920006D4AE /* GMT+9 */, - 47D93BE91A2764920006D4AE /* GMT-1 */, - 47D93BEA1A2764920006D4AE /* GMT-10 */, - 47D93BEB1A2764920006D4AE /* GMT-11 */, - 47D93BEC1A2764920006D4AE /* GMT-12 */, - 47D93BED1A2764920006D4AE /* GMT-13 */, - 47D93BEE1A2764920006D4AE /* GMT-14 */, - 47D93BEF1A2764920006D4AE /* GMT-2 */, - 47D93BF01A2764920006D4AE /* GMT-3 */, - 47D93BF11A2764920006D4AE /* GMT-4 */, - 47D93BF21A2764920006D4AE /* GMT-5 */, - 47D93BF31A2764920006D4AE /* GMT-6 */, - 47D93BF41A2764920006D4AE /* GMT-7 */, - 47D93BF51A2764920006D4AE /* GMT-8 */, - 47D93BF61A2764920006D4AE /* GMT-9 */, - 47D93BF71A2764920006D4AE /* UCT */, - 47D93BF81A2764920006D4AE /* UTC */, - ); - path = Etc; - sourceTree = ""; - }; - 47D93BF91A2764920006D4AE /* Europe */ = { - isa = PBXGroup; - children = ( - 47D93BFA1A2764920006D4AE /* Amsterdam */, - 47D93BFB1A2764920006D4AE /* Andorra */, - 47D93BFC1A2764920006D4AE /* Athens */, - 47D93BFD1A2764920006D4AE /* Belgrade */, - 47D93BFE1A2764920006D4AE /* Berlin */, - 47D93BFF1A2764920006D4AE /* Brussels */, - 47D93C001A2764920006D4AE /* Bucharest */, - 47D93C011A2764920006D4AE /* Budapest */, - 47D93C021A2764920006D4AE /* Chisinau */, - 47D93C031A2764920006D4AE /* Copenhagen */, - 47D93C041A2764920006D4AE /* Dublin */, - 47D93C051A2764920006D4AE /* Gibraltar */, - 47D93C061A2764920006D4AE /* Helsinki */, - 47D93C071A2764920006D4AE /* Istanbul */, - 47D93C081A2764920006D4AE /* Kaliningrad */, - 47D93C091A2764920006D4AE /* Kiev */, - 47D93C0A1A2764920006D4AE /* Lisbon */, - 47D93C0B1A2764920006D4AE /* London */, - 47D93C0C1A2764920006D4AE /* Luxembourg */, - 47D93C0D1A2764920006D4AE /* Madrid */, - 47D93C0E1A2764920006D4AE /* Malta */, - 47D93C0F1A2764920006D4AE /* Minsk */, - 47D93C101A2764920006D4AE /* Monaco */, - 47D93C111A2764920006D4AE /* Moscow */, - 47D93C121A2764920006D4AE /* Oslo */, - 47D93C131A2764920006D4AE /* Paris */, - 47D93C141A2764920006D4AE /* Prague */, - 47D93C151A2764920006D4AE /* Riga */, - 47D93C161A2764920006D4AE /* Rome */, - 47D93C171A2764920006D4AE /* Samara */, - 47D93C181A2764920006D4AE /* Simferopol */, - 47D93C191A2764920006D4AE /* Sofia */, - 47D93C1A1A2764920006D4AE /* Stockholm */, - 47D93C1B1A2764920006D4AE /* Tallinn */, - 47D93C1C1A2764920006D4AE /* Tirane */, - 47D93C1D1A2764920006D4AE /* Uzhgorod */, - 47D93C1E1A2764920006D4AE /* Vaduz */, - 47D93C1F1A2764920006D4AE /* Vienna */, - 47D93C201A2764920006D4AE /* Vilnius */, - 47D93C211A2764920006D4AE /* Volgograd */, - 47D93C221A2764920006D4AE /* Warsaw */, - 47D93C231A2764920006D4AE /* Zaporozhye */, - 47D93C241A2764920006D4AE /* Zurich */, - ); - path = Europe; - sourceTree = ""; - }; - 47D93C271A2764920006D4AE /* Indian */ = { - isa = PBXGroup; - children = ( - 47D93C281A2764920006D4AE /* Antananarivo */, - 47D93C291A2764920006D4AE /* Chagos */, - 47D93C2A1A2764920006D4AE /* Christmas */, - 47D93C2B1A2764920006D4AE /* Cocos */, - 47D93C2C1A2764920006D4AE /* Comoro */, - 47D93C2D1A2764920006D4AE /* Kerguelen */, - 47D93C2E1A2764920006D4AE /* Mahe */, - 47D93C2F1A2764920006D4AE /* Maldives */, - 47D93C301A2764920006D4AE /* Mauritius */, - 47D93C311A2764920006D4AE /* Mayotte */, - 47D93C321A2764920006D4AE /* Reunion */, - ); - path = Indian; - sourceTree = ""; - }; - 47D93C361A2764920006D4AE /* Pacific */ = { - isa = PBXGroup; - children = ( - 47D93C371A2764920006D4AE /* Apia */, - 47D93C381A2764920006D4AE /* Auckland */, - 47D93C391A2764920006D4AE /* Chatham */, - 47D93C3A1A2764920006D4AE /* Chuuk */, - 47D93C3B1A2764920006D4AE /* Easter */, - 47D93C3C1A2764920006D4AE /* Efate */, - 47D93C3D1A2764920006D4AE /* Enderbury */, - 47D93C3E1A2764920006D4AE /* Fakaofo */, - 47D93C3F1A2764920006D4AE /* Fiji */, - 47D93C401A2764920006D4AE /* Funafuti */, - 47D93C411A2764920006D4AE /* Galapagos */, - 47D93C421A2764920006D4AE /* Gambier */, - 47D93C431A2764920006D4AE /* Guadalcanal */, - 47D93C441A2764920006D4AE /* Guam */, - 47D93C451A2764920006D4AE /* Honolulu */, - 47D93C461A2764920006D4AE /* Johnston */, - 47D93C471A2764920006D4AE /* Kiritimati */, - 47D93C481A2764920006D4AE /* Kosrae */, - 47D93C491A2764920006D4AE /* Kwajalein */, - 47D93C4A1A2764920006D4AE /* Majuro */, - 47D93C4B1A2764930006D4AE /* Marquesas */, - 47D93C4C1A2764930006D4AE /* Midway */, - 47D93C4D1A2764930006D4AE /* Nauru */, - 47D93C4E1A2764930006D4AE /* Niue */, - 47D93C4F1A2764930006D4AE /* Norfolk */, - 47D93C501A2764930006D4AE /* Noumea */, - 47D93C511A2764930006D4AE /* Pago_Pago */, - 47D93C521A2764930006D4AE /* Palau */, - 47D93C531A2764930006D4AE /* Pitcairn */, - 47D93C541A2764930006D4AE /* Pohnpei */, - 47D93C551A2764930006D4AE /* Port_Moresby */, - 47D93C561A2764930006D4AE /* Rarotonga */, - 47D93C571A2764930006D4AE /* Saipan */, - 47D93C581A2764930006D4AE /* Tahiti */, - 47D93C591A2764930006D4AE /* Tarawa */, - 47D93C5A1A2764930006D4AE /* Tongatapu */, - 47D93C5B1A2764930006D4AE /* Wake */, - 47D93C5C1A2764930006D4AE /* Wallis */, - ); - path = Pacific; - sourceTree = ""; - }; - 47D93C5E1A2764930006D4AE /* SystemV */ = { - isa = PBXGroup; - children = ( - 47D93C5F1A2764930006D4AE /* AST4 */, - 47D93C601A2764930006D4AE /* AST4ADT */, - 47D93C611A2764930006D4AE /* CST6 */, - 47D93C621A2764930006D4AE /* CST6CDT */, - 47D93C631A2764930006D4AE /* EST5 */, - 47D93C641A2764930006D4AE /* EST5EDT */, - 47D93C651A2764930006D4AE /* HST10 */, - 47D93C661A2764930006D4AE /* MST7 */, - 47D93C671A2764930006D4AE /* MST7MDT */, - 47D93C681A2764930006D4AE /* PST8 */, - 47D93C691A2764930006D4AE /* PST8PDT */, - 47D93C6A1A2764930006D4AE /* YST9 */, - 47D93C6B1A2764930006D4AE /* YST9YDT */, - ); - path = SystemV; - sourceTree = ""; - }; - 47D93C6F1A2764930006D4AE /* man */ = { - isa = PBXGroup; - children = ( - 47D93C701A2764930006D4AE /* ja */, - 47D93C7C1A2764930006D4AE /* ja_JP.UTF-8 */, - 47D93C881A2764930006D4AE /* man1 */, - ); - path = man; - sourceTree = ""; - }; - 47D93C701A2764930006D4AE /* ja */ = { - isa = PBXGroup; - children = ( - 47D93C711A2764930006D4AE /* man1 */, - ); - path = ja; - sourceTree = ""; - }; - 47D93C711A2764930006D4AE /* man1 */ = { - isa = PBXGroup; - children = ( - 47D93C721A2764930006D4AE /* java.1 */, - 47D93C731A2764930006D4AE /* keytool.1 */, - 47D93C741A2764930006D4AE /* orbd.1 */, - 47D93C751A2764930006D4AE /* pack200.1 */, - 47D93C761A2764930006D4AE /* policytool.1 */, - 47D93C771A2764930006D4AE /* rmid.1 */, - 47D93C781A2764930006D4AE /* rmiregistry.1 */, - 47D93C791A2764930006D4AE /* servertool.1 */, - 47D93C7A1A2764930006D4AE /* tnameserv.1 */, - 47D93C7B1A2764930006D4AE /* unpack200.1 */, - ); - path = man1; - sourceTree = ""; - }; - 47D93C7C1A2764930006D4AE /* ja_JP.UTF-8 */ = { - isa = PBXGroup; - children = ( - 47D93C7D1A2764930006D4AE /* man1 */, - ); - path = "ja_JP.UTF-8"; - sourceTree = ""; - }; - 47D93C7D1A2764930006D4AE /* man1 */ = { - isa = PBXGroup; - children = ( - 47D93C7E1A2764930006D4AE /* java.1 */, - 47D93C7F1A2764930006D4AE /* keytool.1 */, - 47D93C801A2764930006D4AE /* orbd.1 */, - 47D93C811A2764930006D4AE /* pack200.1 */, - 47D93C821A2764930006D4AE /* policytool.1 */, - 47D93C831A2764930006D4AE /* rmid.1 */, - 47D93C841A2764930006D4AE /* rmiregistry.1 */, - 47D93C851A2764930006D4AE /* servertool.1 */, - 47D93C861A2764930006D4AE /* tnameserv.1 */, - 47D93C871A2764930006D4AE /* unpack200.1 */, - ); - path = man1; - sourceTree = ""; - }; - 47D93C881A2764930006D4AE /* man1 */ = { - isa = PBXGroup; - children = ( - 47D93C891A2764930006D4AE /* java.1 */, - 47D93C8A1A2764930006D4AE /* keytool.1 */, - 47D93C8B1A2764930006D4AE /* orbd.1 */, - 47D93C8C1A2764930006D4AE /* pack200.1 */, - 47D93C8D1A2764930006D4AE /* policytool.1 */, - 47D93C8E1A2764930006D4AE /* rmid.1 */, - 47D93C8F1A2764930006D4AE /* rmiregistry.1 */, - 47D93C901A2764930006D4AE /* servertool.1 */, - 47D93C911A2764930006D4AE /* tnameserv.1 */, - 47D93C921A2764930006D4AE /* unpack200.1 */, - ); - path = man1; - sourceTree = ""; - }; - 47D93C961A2764930006D4AE /* MacOS */ = { - isa = PBXGroup; - children = ( - 47D93C971A2764930006D4AE /* libjli.dylib */, - ); - path = MacOS; - sourceTree = ""; - }; - 47DD76701AE133B1005F08A0 /* proxy */ = { - isa = PBXGroup; - children = ( - 47DD76711AE1340A005F08A0 /* SystemConfigurationProxy.h */, - 47DD76721AE1340A005F08A0 /* SystemConfigurationProxy.m */, - ); - name = proxy; - sourceTree = ""; - }; - 47EA2444162B5C44002E23E2 /* urlhandler */ = { - isa = PBXGroup; - children = ( - 47EA244F162B5CE0002E23E2 /* LaunchServicesSchemeHandler.h */, - 47EA2450162B5CE0002E23E2 /* LaunchServicesSchemeHandler.m */, - ); - path = urlhandler; - sourceTree = ""; - }; - 47EDDEE81AE191DE00B17C93 /* diagnostics */ = { - isa = PBXGroup; - children = ( - 47EDDEE91AE191EB00B17C93 /* SystemConfigurationReachability.h */, - 47EDDEEA1AE191EB00B17C93 /* SystemConfigurationReachability.m */, - ); - name = diagnostics; - sourceTree = ""; - }; - 47F102BA1628D5CE00923FDE /* local */ = { - isa = PBXGroup; - children = ( - 47AE2FD81630470D0091E874 /* LaunchServicesApplicationFinder.h */, - 47AE2FD91630470D0091E874 /* LaunchServicesApplicationFinder.m */, - 47C57EBB162F479900A272BC /* LaunchServicesFileDescriptor.h */, - 47C57EBC162F479900A272BC /* LaunchServicesFileDescriptor.m */, - 47C57EAA162F45F200A272BC /* FinderLocal.h */, - 47C57EAB162F45F200A272BC /* FinderLocal.m */, - 47F102BD1628D5CE00923FDE /* LaunchServicesQuarantineService.h */, - 47F102BF1628D5CE00923FDE /* LaunchServicesQuarantineService.m */, - 471F77B418043A0300A4C196 /* FoundationProgressIconService.h */, - 471F77B518043A0300A4C196 /* FoundationProgressIconService.m */, - 4791017D1BE7AD870095838A /* FinderSidebarService.h */, - 4791017E1BE7AD870095838A /* FinderSidebarService.m */, - ); - path = local; + name = App; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 471BC76B1BB7F4B80062C792 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 4791017F1BE7AD870095838A /* FinderSidebarService.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 471F77A8180439B500A4C196 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 471F77B718043A0300A4C196 /* FoundationProgressIconService.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 4739EF680856981300405FD3 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 47B1F21B199E13EA00960511 /* Sandbox.h in Headers */, - 4739EF690856981300405FD3 /* Keychain.h in Headers */, - 47462ADD0F0A473D0075CBA9 /* EMKeychainItem.h in Headers */, - 47462ADF0F0A473D0075CBA9 /* EMKeychainProxy.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4739EFA40856990900405FD3 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 47DD76731AE1340A005F08A0 /* SystemConfigurationProxy.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4739EFB20856991200405FD3 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 47C57EAC162F45F200A272BC /* FinderLocal.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4762DAB909FC42EC0034C662 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 47EDDEEB1AE191EB00B17C93 /* SystemConfigurationReachability.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 477A10410FD08DBA00BAD4AD /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 477A10E00FD08DE900BAD4AD /* ProxyForJava.h in Headers */, - 477A10E20FD08DE900BAD4AD /* Rococoa.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 478ECD010DAD5743008A5B1F /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 478ECD090DAD5743008A5B1F /* QLPreviewPanel.h in Headers */, - 478ECD0A0DAD5743008A5B1F /* QuickLook.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4797D26F1628276C00340E1C /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 47AE2FDA1630470D0091E874 /* LaunchServicesApplicationFinder.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 47BEDAF70B92960400141EB4 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 47EA2451162B5CE0002E23E2 /* LaunchServicesSchemeHandler.h in Headers */, + 4705E0041C037AB5002466FA /* Keychain.h in Headers */, + 4705DFFC1C037AB5002466FA /* EMKeychainProxy.h in Headers */, + 4705E0021C037AB5002466FA /* IOKitSleepPreventer.h in Headers */, + 4705E0001C037AB5002466FA /* FoundationProgressIconService.h in Headers */, + 4705DFF81C037AB5002466FA /* FinderSidebarService.h in Headers */, + 474B843E1C15CDD1004D562C /* CDTransmitImporter.h in Headers */, + 4705DFFE1C037AB5002466FA /* FinderLocal.h in Headers */, + 4705E00F1C037AB5002466FA /* SystemConfigurationReachability.h in Headers */, + 4705E0061C037AB5002466FA /* LaunchServicesApplicationFinder.h in Headers */, + 4705E00D1C037AB5002466FA /* SystemConfigurationProxy.h in Headers */, + 474B84411C15DB51004D562C /* Sandbox.h in Headers */, + 47F85C191C0F101F00FDA856 /* UKCrashReporter.h in Headers */, + 47F85C1B1C0F101F00FDA856 /* UKSystemInfo.h in Headers */, + 4705E0091C037AB5002466FA /* LaunchServicesQuarantineService.h in Headers */, + 4705DFFA1C037AB5002466FA /* EMKeychainItem.h in Headers */, + 4705E0071C037AB5002466FA /* LaunchServicesFileDescriptor.h in Headers */, + 4705E00B1C037AB5002466FA /* LaunchServicesSchemeHandler.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4005,55 +1883,21 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 47ADB0831A288D7600E4F69B /* launcher.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 47C57EAF162F471700A272BC /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 47C57EBD162F479900A272BC /* LaunchServicesFileDescriptor.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 47F102AE1628D57500923FDE /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 47F102CA1628D5CE00923FDE /* LaunchServicesQuarantineService.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 47FB9C5F1725A5CC00FE33C1 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 47C88FEF17269A54001A746A /* IOKitSleepPreventer.h in Headers */, + 47F85C321C0F103E00FDA856 /* CDListView.h in Headers */, + 47F85C341C0F103E00FDA856 /* CDOutlineCell.h in Headers */, + 47F85C301C0F103E00FDA856 /* CDBookmarkCell.h in Headers */, + 47F85C361C0F103E00FDA856 /* CDOutlineView.h in Headers */, + 47F85C3D1C0F103E00FDA856 /* QLPreviewPanel.h in Headers */, + 47F85C481C0F106A00FDA856 /* launcher.h in Headers */, + 47F85C3A1C0F103E00FDA856 /* CTGradientView.h in Headers */, + 47F85C401C0F103E00FDA856 /* SNDisclosableView.h in Headers */, + 47F85C381C0F103E00FDA856 /* CTGradient.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 471BC76A1BB7F4B80062C792 /* libfindersidebarservice */ = { - isa = PBXNativeTarget; - buildConfigurationList = 471BC7731BB7F4B80062C792 /* Build configuration list for PBXNativeTarget "libfindersidebarservice" */; - buildPhases = ( - 471BC76B1BB7F4B80062C792 /* Headers */, - 471BC76D1BB7F4B80062C792 /* Sources */, - 471BC76F1BB7F4B80062C792 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = libfindersidebarservice; - productInstallPath = /usr/local/lib; - productName = keychainLib; - productReference = 471BC7761BB7F4B80062C792 /* libfindersidebarservice.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; 471D2C0B05A2505500675163 /* app */ = { isa = PBXNativeTarget; buildConfigurationList = 47D286C50855740C008142CF /* Build configuration list for PBXNativeTarget "app" */; @@ -4072,19 +1916,6 @@ buildRules = ( ); dependencies = ( - 471BC77C1BB7F4E00062C792 /* PBXTargetDependency */, - 471F77BB18043A3800A4C196 /* PBXTargetDependency */, - 479737AD162F4962002809CC /* PBXTargetDependency */, - 47F102DA1628D61A00923FDE /* PBXTargetDependency */, - 4797D28D1628299700340E1C /* PBXTargetDependency */, - 479BF7811725A6FE006854BF /* PBXTargetDependency */, - 471E214C0A1734D7009E164E /* PBXTargetDependency */, - 471E21520A1734D7009E164E /* PBXTargetDependency */, - 471E21540A1734D7009E164E /* PBXTargetDependency */, - 471E21580A1734D7009E164E /* PBXTargetDependency */, - 47BEDCEF0B92A23B00141EB4 /* PBXTargetDependency */, - 4726A8D40DAD6E27001BC01D /* PBXTargetDependency */, - 477A11D40FD0942800BAD4AD /* PBXTargetDependency */, ); name = app; productInstallPath = "$(USER_APPS_DIR)"; @@ -4092,27 +1923,9 @@ productReference = 471D2C5505A2505600675163 /* Cyberduck.app */; productType = "com.apple.product-type.application"; }; - 471F77A7180439B500A4C196 /* libfoundationprogressservice */ = { + 4739EF670856981300405FD3 /* libcore */ = { isa = PBXNativeTarget; - buildConfigurationList = 471F77B0180439B500A4C196 /* Build configuration list for PBXNativeTarget "libfoundationprogressservice" */; - buildPhases = ( - 471F77A8180439B500A4C196 /* Headers */, - 471F77AA180439B500A4C196 /* Sources */, - 471F77AC180439B500A4C196 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = libfoundationprogressservice; - productInstallPath = /usr/local/lib; - productName = keychainLib; - productReference = 471F77B3180439B500A4C196 /* libfoundationprogressservice.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; - 4739EF670856981300405FD3 /* libkeychain */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4739EF710856981300405FD3 /* Build configuration list for PBXNativeTarget "libkeychain" */; + buildConfigurationList = 4739EF710856981300405FD3 /* Build configuration list for PBXNativeTarget "libcore" */; buildPhases = ( 4739EF680856981300405FD3 /* Headers */, 4739EF6A0856981300405FD3 /* Sources */, @@ -4122,136 +1935,10 @@ ); dependencies = ( ); - name = libkeychain; + name = libcore; productInstallPath = /usr/local/lib; productName = keychainLib; - productReference = 4739EF730856981400405FD3 /* libkeychain.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; - 4739EFA30856990900405FD3 /* libproxy */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4739EFAE0856990900405FD3 /* Build configuration list for PBXNativeTarget "libproxy" */; - buildPhases = ( - 4739EFA40856990900405FD3 /* Headers */, - 4739EFA60856990900405FD3 /* Sources */, - 4739EFA80856990900405FD3 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = libproxy; - productInstallPath = /usr/local/lib; - productName = keychainLib; - productReference = 4739EFB00856990900405FD3 /* libproxy.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; - 4739EFB10856991200405FD3 /* liblocal */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4739EFBF0856991200405FD3 /* Build configuration list for PBXNativeTarget "liblocal" */; - buildPhases = ( - 4739EFB20856991200405FD3 /* Headers */, - 4739EFB60856991200405FD3 /* Sources */, - 4739EFBA0856991200405FD3 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = liblocal; - productInstallPath = /usr/local/lib; - productName = keychainLib; - productReference = 4739EFC10856991300405FD3 /* liblocal.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; - 4762DAB809FC42EC0034C662 /* libdiagnostics */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4762DAC309FC42EC0034C662 /* Build configuration list for PBXNativeTarget "libdiagnostics" */; - buildPhases = ( - 4762DAB909FC42EC0034C662 /* Headers */, - 4762DABB09FC42EC0034C662 /* Sources */, - 4762DABD09FC42EC0034C662 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = libdiagnostics; - productInstallPath = /usr/local/lib; - productName = keychainLib; - productReference = 4762DAC509FC42EC0034C662 /* libdiagnostics.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; - 477A10400FD08DBA00BAD4AD /* librococoa */ = { - isa = PBXNativeTarget; - buildConfigurationList = 477A104B0FD08DBA00BAD4AD /* Build configuration list for PBXNativeTarget "librococoa" */; - buildPhases = ( - 477A10410FD08DBA00BAD4AD /* Headers */, - 477A10440FD08DBA00BAD4AD /* Sources */, - 477A10460FD08DBA00BAD4AD /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = librococoa; - productInstallPath = /usr/local/lib; - productName = keychainLib; - productReference = 477A104D0FD08DBA00BAD4AD /* librococoa.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; - 478ECD000DAD5743008A5B1F /* libquickLook */ = { - isa = PBXNativeTarget; - buildConfigurationList = 478ECD160DAD5743008A5B1F /* Build configuration list for PBXNativeTarget "libquickLook" */; - buildPhases = ( - 478ECD010DAD5743008A5B1F /* Headers */, - 478ECD0B0DAD5743008A5B1F /* Sources */, - 478ECD110DAD5743008A5B1F /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = libquickLook; - productInstallPath = /usr/local/lib; - productName = keychainLib; - productReference = 478ECD180DAD5743008A5B1F /* libquickLook.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; - 4797D26E1628276C00340E1C /* liblaunchservicesapplicationfinder */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4797D2771628276C00340E1C /* Build configuration list for PBXNativeTarget "liblaunchservicesapplicationfinder" */; - buildPhases = ( - 4797D26F1628276C00340E1C /* Headers */, - 4797D2711628276C00340E1C /* Sources */, - 4797D2731628276C00340E1C /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = liblaunchservicesapplicationfinder; - productInstallPath = /usr/local/lib; - productName = keychainLib; - productReference = 4797D27A1628276C00340E1C /* liblaunchservicesapplicationfinder.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; - 47BEDAF60B92960400141EB4 /* liblaunchservicesschemehandler */ = { - isa = PBXNativeTarget; - buildConfigurationList = 47BEDB010B92960400141EB4 /* Build configuration list for PBXNativeTarget "liblaunchservicesschemehandler" */; - buildPhases = ( - 47BEDAF70B92960400141EB4 /* Headers */, - 47BEDAF90B92960400141EB4 /* Sources */, - 47BEDAFB0B92960400141EB4 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = liblaunchservicesschemehandler; - productInstallPath = /usr/local/lib; - productName = keychainLib; - productReference = 47BEDB030B92960400141EB4 /* liblaunchservicesschemehandler.dylib */; + productReference = 4739EF730856981400405FD3 /* libcore.dylib */; productType = "com.apple.product-type.library.dynamic"; }; 47C2AD7F1A268C880047B67A /* cli */ = { @@ -4266,76 +1953,13 @@ buildRules = ( ); dependencies = ( - 47FA2CF11A28A17E0058614E /* PBXTargetDependency */, 47FA2CEF1A28A10B0058614E /* PBXTargetDependency */, - 47D93D221A27825C0006D4AE /* PBXTargetDependency */, - 47D939CD1A268E430006D4AE /* PBXTargetDependency */, - 47D939CF1A268E430006D4AE /* PBXTargetDependency */, - 47D939D11A268E430006D4AE /* PBXTargetDependency */, - 47D939D31A268E430006D4AE /* PBXTargetDependency */, - 47D939D51A268E430006D4AE /* PBXTargetDependency */, - 47D939D71A268E430006D4AE /* PBXTargetDependency */, - 47D939D91A268E430006D4AE /* PBXTargetDependency */, ); name = cli; productName = cli; productReference = 47C2AD801A268C880047B67A /* duck.bundle */; productType = "com.apple.product-type.bundle"; }; - 47C57EAE162F471700A272BC /* liblaunchservicesfiledescriptor */ = { - isa = PBXNativeTarget; - buildConfigurationList = 47C57EB7162F471700A272BC /* Build configuration list for PBXNativeTarget "liblaunchservicesfiledescriptor" */; - buildPhases = ( - 47C57EAF162F471700A272BC /* Headers */, - 47C57EB1162F471700A272BC /* Sources */, - 47C57EB3162F471700A272BC /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = liblaunchservicesfiledescriptor; - productInstallPath = /usr/local/lib; - productName = keychainLib; - productReference = 47C57EBA162F471700A272BC /* liblaunchservicesfiledescriptor.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; - 47F102AD1628D57500923FDE /* liblaunchservicesquarantineservice */ = { - isa = PBXNativeTarget; - buildConfigurationList = 47F102B61628D57500923FDE /* Build configuration list for PBXNativeTarget "liblaunchservicesquarantineservice" */; - buildPhases = ( - 47F102AE1628D57500923FDE /* Headers */, - 47F102B01628D57500923FDE /* Sources */, - 47F102B21628D57500923FDE /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = liblaunchservicesquarantineservice; - productInstallPath = /usr/local/lib; - productName = keychainLib; - productReference = 47F102B91628D57500923FDE /* liblaunchservicesquarantineservice.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; - 47FB9C5E1725A5CC00FE33C1 /* libiokitsleeppreventer */ = { - isa = PBXNativeTarget; - buildConfigurationList = 47FB9C681725A5CC00FE33C1 /* Build configuration list for PBXNativeTarget "libiokitsleeppreventer" */; - buildPhases = ( - 47FB9C5F1725A5CC00FE33C1 /* Headers */, - 47FB9C611725A5CC00FE33C1 /* Sources */, - 47FB9C631725A5CC00FE33C1 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = libiokitsleeppreventer; - productInstallPath = /usr/local/lib; - productName = keychainLib; - productReference = 47FB9C6B1725A5CC00FE33C1 /* libiokitsleeppreventer.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -4401,19 +2025,7 @@ projectRoot = ""; targets = ( 471D2C0B05A2505500675163 /* app */, - 4739EF670856981300405FD3 /* libkeychain */, - 4739EFA30856990900405FD3 /* libproxy */, - 4739EFB10856991200405FD3 /* liblocal */, - 4762DAB809FC42EC0034C662 /* libdiagnostics */, - 478ECD000DAD5743008A5B1F /* libquickLook */, - 477A10400FD08DBA00BAD4AD /* librococoa */, - 47BEDAF60B92960400141EB4 /* liblaunchservicesschemehandler */, - 4797D26E1628276C00340E1C /* liblaunchservicesapplicationfinder */, - 47F102AD1628D57500923FDE /* liblaunchservicesquarantineservice */, - 47C57EAE162F471700A272BC /* liblaunchservicesfiledescriptor */, - 47FB9C5E1725A5CC00FE33C1 /* libiokitsleeppreventer */, - 471F77A7180439B500A4C196 /* libfoundationprogressservice */, - 471BC76A1BB7F4B80062C792 /* libfindersidebarservice */, + 4739EF670856981300405FD3 /* libcore */, 47C2AD7F1A268C880047B67A /* cli */, ); }; @@ -4493,7 +2105,6 @@ 476730CB16108E1300B28D35 /* bookmarks.tiff in Resources */, 476730CC16108E1300B28D35 /* browser.tiff in Resources */, 476730CD16108E1300B28D35 /* cancel.tiff in Resources */, - 4796C7651B3317F70042891D /* Rackspace UK.cyberduckprofile in Resources */, 476730CF16108E1300B28D35 /* clean.tiff in Resources */, 476730D016108E1300B28D35 /* cleanall.tiff in Resources */, 476730D116108E1300B28D35 /* column.tiff in Resources */, @@ -4534,7 +2145,6 @@ 476730F616108E1300B28D35 /* reveal.tiff in Resources */, 476730F916108E1300B28D35 /* site.tiff in Resources */, 476730FA16108E1300B28D35 /* statusBlue.tiff in Resources */, - 4796C7641B3317F70042891D /* HP Cloud Object Storage.cyberduckprofile in Resources */, 476730FB16108E1300B28D35 /* statusGreen.tiff in Resources */, 476730FC16108E1300B28D35 /* statusRed.tiff in Resources */, 476730FD16108E1300B28D35 /* statusYellow.tiff in Resources */, @@ -4634,87 +2244,27 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 471BC76D1BB7F4B80062C792 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 479101801BE7AD870095838A /* FinderSidebarService.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 471F77AA180439B500A4C196 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 471F77B918043A0300A4C196 /* FoundationProgressIconService.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 4739EF6A0856981300405FD3 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 47B1F21C199E13F000960511 /* Sandbox.m in Sources */, - 4739EF6B0856981300405FD3 /* Keychain.m in Sources */, - 47462ADE0F0A473D0075CBA9 /* EMKeychainItem.m in Sources */, - 47462AE00F0A473D0075CBA9 /* EMKeychainProxy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4739EFA60856990900405FD3 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 47DD76741AE1340A005F08A0 /* SystemConfigurationProxy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4739EFB60856991200405FD3 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 47C57EAD162F45F200A272BC /* FinderLocal.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4762DABB09FC42EC0034C662 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 47EDDEEC1AE191EB00B17C93 /* SystemConfigurationReachability.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 477A10440FD08DBA00BAD4AD /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 477A10E10FD08DE900BAD4AD /* ProxyForJava.m in Sources */, - 477A10E30FD08DE900BAD4AD /* Rococoa.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 478ECD0B0DAD5743008A5B1F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 478ECD100DAD5743008A5B1F /* QuickLook.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4797D2711628276C00340E1C /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 47AE2FDB1630470D0091E874 /* LaunchServicesApplicationFinder.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 47BEDAF90B92960400141EB4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 47EA2452162B5CE0002E23E2 /* LaunchServicesSchemeHandler.m in Sources */, + 4705E0081C037AB5002466FA /* LaunchServicesFileDescriptor.m in Sources */, + 4705E00C1C037AB5002466FA /* LaunchServicesSchemeHandler.m in Sources */, + 4705E0011C037AB5002466FA /* FoundationProgressIconService.m in Sources */, + 4705E00A1C037AB5002466FA /* LaunchServicesQuarantineService.m in Sources */, + 4705E0051C037AB5002466FA /* Keychain.m in Sources */, + 47F85C1C1C0F101F00FDA856 /* UKSystemInfo.m in Sources */, + 4705DFFD1C037AB5002466FA /* EMKeychainProxy.m in Sources */, + 47F85C1A1C0F101F00FDA856 /* UKCrashReporter.m in Sources */, + 474B84421C15DB51004D562C /* Sandbox.m in Sources */, + 4705DFF71C037AB5002466FA /* FinderSidebarService.m in Sources */, + 4705DFF91C037AB5002466FA /* LaunchServicesApplicationFinder.m in Sources */, + 474B843D1C15CDD1004D562C /* CDTransmitImporter.m in Sources */, + 4705E0101C037AB5002466FA /* SystemConfigurationReachability.m in Sources */, + 4705E00E1C037AB5002466FA /* SystemConfigurationProxy.m in Sources */, + 4705DFFB1C037AB5002466FA /* EMKeychainItem.m in Sources */, + 4705DFFF1C037AB5002466FA /* FinderLocal.m in Sources */, + 4705E0031C037AB5002466FA /* IOKitSleepPreventer.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4722,17 +2272,15 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 47E0709A1B32DC7100B8B073 /* SNDisclosableView.m in Sources */, - 4738A1F71B1BA645005EA4AE /* CDBookmarkCell.m in Sources */, - 4738A1F91B1BA645005EA4AE /* CDListView.m in Sources */, - 4738A1FA1B1BA645005EA4AE /* CDOutlineCell.m in Sources */, - 4738A1FB1B1BA645005EA4AE /* CDOutlineView.m in Sources */, - 4738A1F61B1BA62F005EA4AE /* UKSystemInfo.m in Sources */, - 4738A1F31B1BA61A005EA4AE /* CTGradient.m in Sources */, - 4738A1F51B1BA61A005EA4AE /* CTGradientView.m in Sources */, - 4738A1F11B1BA5EA005EA4AE /* UKCrashReporter.m in Sources */, - 47121FF71611F94000E2547D /* main.m in Sources */, - 47ADB0801A288CC100E4F69B /* launcher.m in Sources */, + 47F85C491C0F106A00FDA856 /* launcher.m in Sources */, + 47F85C371C0F103E00FDA856 /* CDOutlineView.m in Sources */, + 47F85C311C0F103E00FDA856 /* CDBookmarkCell.m in Sources */, + 47F85C351C0F103E00FDA856 /* CDOutlineCell.m in Sources */, + 47F85C411C0F103E00FDA856 /* SNDisclosableView.m in Sources */, + 47F85C331C0F103E00FDA856 /* CDListView.m in Sources */, + 47F85C391C0F103E00FDA856 /* CTGradient.m in Sources */, + 47F85C3C1C0F103E00FDA856 /* main.m in Sources */, + 47F85C3B1C0F103E00FDA856 /* CTGradientView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4740,153 +2288,19 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 47ADB07E1A288C7C00E4F69B /* main.m in Sources */, - 47ADB0811A288CC100E4F69B /* launcher.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 47C57EB1162F471700A272BC /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 47C57EBE162F479900A272BC /* LaunchServicesFileDescriptor.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 47F102B01628D57500923FDE /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 47F102CE1628D5CE00923FDE /* LaunchServicesQuarantineService.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 47FB9C611725A5CC00FE33C1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 47C88FF017269A54001A746A /* IOKitSleepPreventer.m in Sources */, + 47F85C4C1C0F107100FDA856 /* main.m in Sources */, + 47F85C4A1C0F106A00FDA856 /* launcher.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 471BC77C1BB7F4E00062C792 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 471BC76A1BB7F4B80062C792 /* libfindersidebarservice */; - targetProxy = 471BC77B1BB7F4E00062C792 /* PBXContainerItemProxy */; - }; - 471E214C0A1734D7009E164E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4739EF670856981300405FD3 /* libkeychain */; - targetProxy = 471E214B0A1734D7009E164E /* PBXContainerItemProxy */; - }; - 471E21520A1734D7009E164E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4739EFA30856990900405FD3 /* libproxy */; - targetProxy = 471E21510A1734D7009E164E /* PBXContainerItemProxy */; - }; - 471E21540A1734D7009E164E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4739EFB10856991200405FD3 /* liblocal */; - targetProxy = 471E21530A1734D7009E164E /* PBXContainerItemProxy */; - }; - 471E21580A1734D7009E164E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4762DAB809FC42EC0034C662 /* libdiagnostics */; - targetProxy = 471E21570A1734D7009E164E /* PBXContainerItemProxy */; - }; - 471F77BB18043A3800A4C196 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 471F77A7180439B500A4C196 /* libfoundationprogressservice */; - targetProxy = 471F77BA18043A3800A4C196 /* PBXContainerItemProxy */; - }; - 4726A8D40DAD6E27001BC01D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 478ECD000DAD5743008A5B1F /* libquickLook */; - targetProxy = 4726A8D30DAD6E27001BC01D /* PBXContainerItemProxy */; - }; - 477A11D40FD0942800BAD4AD /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 477A10400FD08DBA00BAD4AD /* librococoa */; - targetProxy = 477A11D30FD0942800BAD4AD /* PBXContainerItemProxy */; - }; - 479737AD162F4962002809CC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 47C57EAE162F471700A272BC /* liblaunchservicesfiledescriptor */; - targetProxy = 479737AC162F4962002809CC /* PBXContainerItemProxy */; - }; - 4797D28D1628299700340E1C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4797D26E1628276C00340E1C /* liblaunchservicesapplicationfinder */; - targetProxy = 4797D28C1628299700340E1C /* PBXContainerItemProxy */; - }; - 479BF7811725A6FE006854BF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 47FB9C5E1725A5CC00FE33C1 /* libiokitsleeppreventer */; - targetProxy = 479BF7801725A6FE006854BF /* PBXContainerItemProxy */; - }; - 47BEDCEF0B92A23B00141EB4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 47BEDAF60B92960400141EB4 /* liblaunchservicesschemehandler */; - targetProxy = 47BEDCEE0B92A23B00141EB4 /* PBXContainerItemProxy */; - }; - 47D939CD1A268E430006D4AE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4739EFA30856990900405FD3 /* libproxy */; - targetProxy = 47D939CC1A268E430006D4AE /* PBXContainerItemProxy */; - }; - 47D939CF1A268E430006D4AE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4739EFB10856991200405FD3 /* liblocal */; - targetProxy = 47D939CE1A268E430006D4AE /* PBXContainerItemProxy */; - }; - 47D939D11A268E430006D4AE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 47BEDAF60B92960400141EB4 /* liblaunchservicesschemehandler */; - targetProxy = 47D939D01A268E430006D4AE /* PBXContainerItemProxy */; - }; - 47D939D31A268E430006D4AE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4797D26E1628276C00340E1C /* liblaunchservicesapplicationfinder */; - targetProxy = 47D939D21A268E430006D4AE /* PBXContainerItemProxy */; - }; - 47D939D51A268E430006D4AE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 47F102AD1628D57500923FDE /* liblaunchservicesquarantineservice */; - targetProxy = 47D939D41A268E430006D4AE /* PBXContainerItemProxy */; - }; - 47D939D71A268E430006D4AE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 47C57EAE162F471700A272BC /* liblaunchservicesfiledescriptor */; - targetProxy = 47D939D61A268E430006D4AE /* PBXContainerItemProxy */; - }; - 47D939D91A268E430006D4AE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 47FB9C5E1725A5CC00FE33C1 /* libiokitsleeppreventer */; - targetProxy = 47D939D81A268E430006D4AE /* PBXContainerItemProxy */; - }; - 47D93D221A27825C0006D4AE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4762DAB809FC42EC0034C662 /* libdiagnostics */; - targetProxy = 47D93D211A27825C0006D4AE /* PBXContainerItemProxy */; - }; - 47F102DA1628D61A00923FDE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 47F102AD1628D57500923FDE /* liblaunchservicesquarantineservice */; - targetProxy = 47F102D91628D61A00923FDE /* PBXContainerItemProxy */; - }; 47FA2CEF1A28A10B0058614E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 4739EF670856981300405FD3 /* libkeychain */; + target = 4739EF670856981300405FD3 /* libcore */; targetProxy = 47FA2CEE1A28A10B0058614E /* PBXContainerItemProxy */; }; - 47FA2CF11A28A17E0058614E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 477A10400FD08DBA00BAD4AD /* librococoa */; - targetProxy = 47FA2CF01A28A17E0058614E /* PBXContainerItemProxy */; - }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -6209,36 +3623,6 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 471BC7741BB7F4B80062C792 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - 471F77B1180439B500A4C196 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = libfoundationprogressservice; - }; - name = Release; - }; 4739EF720856981300405FD3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -6250,112 +3634,7 @@ ); MACH_O_TYPE = mh_dylib; OTHER_LDFLAGS = ""; - PRODUCT_NAME = libkeychain; - }; - name = Release; - }; - 4739EFAF0856990900405FD3 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = libproxy; - }; - name = Release; - }; - 4739EFC00856991200405FD3 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = liblocal; - }; - name = Release; - }; - 4762DAC409FC42EC0034C662 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = libdiagnostics; - }; - name = Release; - }; - 477A104C0FD08DBA00BAD4AD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/lib\"", - ); - MACH_O_TYPE = mh_dylib; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = librococoa; - }; - name = Release; - }; - 478ECD170DAD5743008A5B1F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = libquickLook; - }; - name = Release; - }; - 4797D2781628276C00340E1C /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = liblaunchservicesapplicationfinder; - }; - name = Release; - }; - 47BEDB020B92960400141EB4 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = liblaunchservicesschemehandler; + PRODUCT_NAME = libcore; }; name = Release; }; @@ -6398,29 +3677,19 @@ PRODUCT_MODULE_NAME = duck; PRODUCT_NAME = duck; SKIP_INSTALL = YES; + SYMROOT = cli/target; VERSIONING_SYSTEM = ""; WRAPPER_EXTENSION = bundle; }; name = Release; }; - 47C57EB8162F471700A272BC /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = liblaunchservicesfiledescriptor; - }; - name = Release; - }; 47D286C70855740C008142CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks", + ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; INFOPLIST_EXPAND_BUILD_SETTINGS = YES; INFOPLIST_FILE = setup/app/Info.plist; @@ -6485,6 +3754,10 @@ 47EFE4D21BECFE81009AC47B /* Mac App Store */ = { isa = XCBuildConfiguration; buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks", + ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; INFOPLIST_EXPAND_BUILD_SETTINGS = YES; INFOPLIST_FILE = setup/app/Info.plist; @@ -6504,175 +3777,7 @@ "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", ); MACH_O_TYPE = mh_dylib; - PRODUCT_NAME = libkeychain; - }; - name = "Mac App Store"; - }; - 47EFE4D41BECFE81009AC47B /* Mac App Store */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - PRODUCT_NAME = libproxy; - }; - name = "Mac App Store"; - }; - 47EFE4D51BECFE81009AC47B /* Mac App Store */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - PRODUCT_NAME = liblocal; - }; - name = "Mac App Store"; - }; - 47EFE4D61BECFE81009AC47B /* Mac App Store */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - PRODUCT_NAME = libdiagnostics; - }; - name = "Mac App Store"; - }; - 47EFE4D71BECFE81009AC47B /* Mac App Store */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - PRODUCT_NAME = libquickLook; - }; - name = "Mac App Store"; - }; - 47EFE4D81BECFE81009AC47B /* Mac App Store */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/lib\"", - ); - MACH_O_TYPE = mh_dylib; - PRODUCT_NAME = librococoa; - }; - name = "Mac App Store"; - }; - 47EFE4D91BECFE81009AC47B /* Mac App Store */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - PRODUCT_NAME = liblaunchservicesschemehandler; - }; - name = "Mac App Store"; - }; - 47EFE4DA1BECFE81009AC47B /* Mac App Store */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - PRODUCT_NAME = liblaunchservicesapplicationfinder; - }; - name = "Mac App Store"; - }; - 47EFE4DB1BECFE81009AC47B /* Mac App Store */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - PRODUCT_NAME = liblaunchservicesquarantineservice; - }; - name = "Mac App Store"; - }; - 47EFE4DC1BECFE81009AC47B /* Mac App Store */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - PRODUCT_NAME = liblaunchservicesfiledescriptor; - }; - name = "Mac App Store"; - }; - 47EFE4DD1BECFE81009AC47B /* Mac App Store */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - PRODUCT_NAME = libiokitsleeppreventer; - }; - name = "Mac App Store"; - }; - 47EFE4DE1BECFE81009AC47B /* Mac App Store */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - PRODUCT_NAME = libfoundationprogressservice; - }; - name = "Mac App Store"; - }; - 47EFE4DF1BECFE81009AC47B /* Mac App Store */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = libcore; }; name = "Mac App Store"; }; @@ -6714,63 +3819,16 @@ PRODUCT_MODULE_NAME = duck; PRODUCT_NAME = duck; SKIP_INSTALL = YES; + SYMROOT = cli/target; VERSIONING_SYSTEM = ""; WRAPPER_EXTENSION = bundle; }; name = "Mac App Store"; }; - 47F102B71628D57500923FDE /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = liblaunchservicesquarantineservice; - }; - name = Release; - }; - 47FB9C691725A5CC00FE33C1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"", - ); - MACH_O_TYPE = mh_dylib; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = libiokitsleeppreventer; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 471BC7731BB7F4B80062C792 /* Build configuration list for PBXNativeTarget "libfindersidebarservice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 471BC7741BB7F4B80062C792 /* Release */, - 47EFE4DF1BECFE81009AC47B /* Mac App Store */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 471F77B0180439B500A4C196 /* Build configuration list for PBXNativeTarget "libfoundationprogressservice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 471F77B1180439B500A4C196 /* Release */, - 47EFE4DE1BECFE81009AC47B /* Mac App Store */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4739EF710856981300405FD3 /* Build configuration list for PBXNativeTarget "libkeychain" */ = { + 4739EF710856981300405FD3 /* Build configuration list for PBXNativeTarget "libcore" */ = { isa = XCConfigurationList; buildConfigurations = ( 4739EF720856981300405FD3 /* Release */, @@ -6779,69 +3837,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4739EFAE0856990900405FD3 /* Build configuration list for PBXNativeTarget "libproxy" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4739EFAF0856990900405FD3 /* Release */, - 47EFE4D41BECFE81009AC47B /* Mac App Store */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4739EFBF0856991200405FD3 /* Build configuration list for PBXNativeTarget "liblocal" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4739EFC00856991200405FD3 /* Release */, - 47EFE4D51BECFE81009AC47B /* Mac App Store */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4762DAC309FC42EC0034C662 /* Build configuration list for PBXNativeTarget "libdiagnostics" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4762DAC409FC42EC0034C662 /* Release */, - 47EFE4D61BECFE81009AC47B /* Mac App Store */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 477A104B0FD08DBA00BAD4AD /* Build configuration list for PBXNativeTarget "librococoa" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 477A104C0FD08DBA00BAD4AD /* Release */, - 47EFE4D81BECFE81009AC47B /* Mac App Store */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 478ECD160DAD5743008A5B1F /* Build configuration list for PBXNativeTarget "libquickLook" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 478ECD170DAD5743008A5B1F /* Release */, - 47EFE4D71BECFE81009AC47B /* Mac App Store */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4797D2771628276C00340E1C /* Build configuration list for PBXNativeTarget "liblaunchservicesapplicationfinder" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4797D2781628276C00340E1C /* Release */, - 47EFE4DA1BECFE81009AC47B /* Mac App Store */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 47BEDB010B92960400141EB4 /* Build configuration list for PBXNativeTarget "liblaunchservicesschemehandler" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 47BEDB020B92960400141EB4 /* Release */, - 47EFE4D91BECFE81009AC47B /* Mac App Store */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 47C2AD861A268C880047B67A /* Build configuration list for PBXNativeTarget "cli" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -6851,15 +3846,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 47C57EB7162F471700A272BC /* Build configuration list for PBXNativeTarget "liblaunchservicesfiledescriptor" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 47C57EB8162F471700A272BC /* Release */, - 47EFE4DC1BECFE81009AC47B /* Mac App Store */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 47D286C50855740C008142CF /* Build configuration list for PBXNativeTarget "app" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -6878,24 +3864,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 47F102B61628D57500923FDE /* Build configuration list for PBXNativeTarget "liblaunchservicesquarantineservice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 47F102B71628D57500923FDE /* Release */, - 47EFE4DB1BECFE81009AC47B /* Mac App Store */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 47FB9C681725A5CC00FE33C1 /* Build configuration list for PBXNativeTarget "libiokitsleeppreventer" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 47FB9C691725A5CC00FE33C1 /* Release */, - 47EFE4DD1BECFE81009AC47B /* Mac App Store */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ }; rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; diff --git a/source/ch/cyberduck/Product.wxs b/Product.wxs similarity index 100% rename from source/ch/cyberduck/Product.wxs rename to Product.wxs diff --git a/archive.xml b/archive.xml new file mode 100644 index 0000000000..e936ef7984 --- /dev/null +++ b/archive.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/azure/pom.xml b/azure/pom.xml new file mode 100644 index 0000000000..dccb9735fe --- /dev/null +++ b/azure/pom.xml @@ -0,0 +1,50 @@ + + + + 4.0.0 + + ch.cyberduck + parent + 4.8.0-SNAPSHOT + + azure + jar + + + + ch.cyberduck + core + ${project.version} + + + ch.cyberduck + test + pom + test + ${project.version} + + + com.microsoft.azure + azure-storage + 4.0.0 + + + + + diff --git a/source/ch/cyberduck/core/azure/AzureAclPermissionFeature.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureAclPermissionFeature.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureAclPermissionFeature.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureAclPermissionFeature.java diff --git a/source/ch/cyberduck/core/azure/AzureAttributesFeature.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureAttributesFeature.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureAttributesFeature.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureAttributesFeature.java diff --git a/source/ch/cyberduck/core/azure/AzureContainerListService.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureContainerListService.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureContainerListService.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureContainerListService.java diff --git a/source/ch/cyberduck/core/azure/AzureCopyFeature.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureCopyFeature.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureCopyFeature.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureCopyFeature.java diff --git a/source/ch/cyberduck/core/azure/AzureDeleteFeature.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureDeleteFeature.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureDeleteFeature.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureDeleteFeature.java diff --git a/source/ch/cyberduck/core/azure/AzureDirectoryFeature.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureDirectoryFeature.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureDirectoryFeature.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureDirectoryFeature.java diff --git a/source/ch/cyberduck/core/azure/AzureExceptionMappingService.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureExceptionMappingService.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureExceptionMappingService.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureExceptionMappingService.java diff --git a/source/ch/cyberduck/core/azure/AzureFindFeature.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureFindFeature.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureFindFeature.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureFindFeature.java diff --git a/source/ch/cyberduck/core/azure/AzureHomeFinderService.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureHomeFinderService.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureHomeFinderService.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureHomeFinderService.java diff --git a/source/ch/cyberduck/core/azure/AzureLoggingFeature.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureLoggingFeature.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureLoggingFeature.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureLoggingFeature.java diff --git a/source/ch/cyberduck/core/azure/AzureMetadataFeature.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureMetadataFeature.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureMetadataFeature.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureMetadataFeature.java diff --git a/source/ch/cyberduck/core/azure/AzureMoveFeature.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureMoveFeature.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureMoveFeature.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureMoveFeature.java diff --git a/source/ch/cyberduck/core/azure/AzureObjectListService.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureObjectListService.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureObjectListService.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureObjectListService.java diff --git a/source/ch/cyberduck/core/azure/AzurePathContainerService.java b/azure/src/main/java/ch/cyberduck/core/azure/AzurePathContainerService.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzurePathContainerService.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzurePathContainerService.java diff --git a/source/ch/cyberduck/core/azure/AzureProtocol.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureProtocol.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureProtocol.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureProtocol.java diff --git a/source/ch/cyberduck/core/azure/AzureReadFeature.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureReadFeature.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureReadFeature.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureReadFeature.java diff --git a/source/ch/cyberduck/core/azure/AzureSession.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureSession.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureSession.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureSession.java diff --git a/source/ch/cyberduck/core/azure/AzureTouchFeature.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureTouchFeature.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureTouchFeature.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureTouchFeature.java diff --git a/source/ch/cyberduck/core/azure/AzureUrlProvider.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureUrlProvider.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureUrlProvider.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureUrlProvider.java diff --git a/source/ch/cyberduck/core/azure/AzureWriteFeature.java b/azure/src/main/java/ch/cyberduck/core/azure/AzureWriteFeature.java similarity index 100% rename from source/ch/cyberduck/core/azure/AzureWriteFeature.java rename to azure/src/main/java/ch/cyberduck/core/azure/AzureWriteFeature.java diff --git a/test/ch/cyberduck/core/azure/AzureAclPermissionFeatureTest.java b/azure/src/test/java/ch/cyberduck/core/azure/AzureAclPermissionFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/azure/AzureAclPermissionFeatureTest.java rename to azure/src/test/java/ch/cyberduck/core/azure/AzureAclPermissionFeatureTest.java diff --git a/test/ch/cyberduck/core/azure/AzureAttributesFeatureTest.java b/azure/src/test/java/ch/cyberduck/core/azure/AzureAttributesFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/azure/AzureAttributesFeatureTest.java rename to azure/src/test/java/ch/cyberduck/core/azure/AzureAttributesFeatureTest.java diff --git a/test/ch/cyberduck/core/azure/AzureCopyFeatureTest.java b/azure/src/test/java/ch/cyberduck/core/azure/AzureCopyFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/azure/AzureCopyFeatureTest.java rename to azure/src/test/java/ch/cyberduck/core/azure/AzureCopyFeatureTest.java diff --git a/test/ch/cyberduck/core/azure/AzureDeleteFeatureTest.java b/azure/src/test/java/ch/cyberduck/core/azure/AzureDeleteFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/azure/AzureDeleteFeatureTest.java rename to azure/src/test/java/ch/cyberduck/core/azure/AzureDeleteFeatureTest.java diff --git a/test/ch/cyberduck/core/azure/AzureDirectoryFeatureTest.java b/azure/src/test/java/ch/cyberduck/core/azure/AzureDirectoryFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/azure/AzureDirectoryFeatureTest.java rename to azure/src/test/java/ch/cyberduck/core/azure/AzureDirectoryFeatureTest.java diff --git a/test/ch/cyberduck/core/azure/AzureLoggingFeatureTest.java b/azure/src/test/java/ch/cyberduck/core/azure/AzureLoggingFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/azure/AzureLoggingFeatureTest.java rename to azure/src/test/java/ch/cyberduck/core/azure/AzureLoggingFeatureTest.java diff --git a/test/ch/cyberduck/core/azure/AzureMetadataFeatureTest.java b/azure/src/test/java/ch/cyberduck/core/azure/AzureMetadataFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/azure/AzureMetadataFeatureTest.java rename to azure/src/test/java/ch/cyberduck/core/azure/AzureMetadataFeatureTest.java diff --git a/test/ch/cyberduck/core/azure/AzureMoveFeatureTest.java b/azure/src/test/java/ch/cyberduck/core/azure/AzureMoveFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/azure/AzureMoveFeatureTest.java rename to azure/src/test/java/ch/cyberduck/core/azure/AzureMoveFeatureTest.java diff --git a/test/ch/cyberduck/core/azure/AzureObjectListServiceTest.java b/azure/src/test/java/ch/cyberduck/core/azure/AzureObjectListServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/azure/AzureObjectListServiceTest.java rename to azure/src/test/java/ch/cyberduck/core/azure/AzureObjectListServiceTest.java diff --git a/test/ch/cyberduck/core/azure/AzureReadFeatureTest.java b/azure/src/test/java/ch/cyberduck/core/azure/AzureReadFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/azure/AzureReadFeatureTest.java rename to azure/src/test/java/ch/cyberduck/core/azure/AzureReadFeatureTest.java diff --git a/test/ch/cyberduck/core/azure/AzureSessionTest.java b/azure/src/test/java/ch/cyberduck/core/azure/AzureSessionTest.java similarity index 100% rename from test/ch/cyberduck/core/azure/AzureSessionTest.java rename to azure/src/test/java/ch/cyberduck/core/azure/AzureSessionTest.java diff --git a/test/ch/cyberduck/core/azure/AzureUrlProviderTest.java b/azure/src/test/java/ch/cyberduck/core/azure/AzureUrlProviderTest.java similarity index 100% rename from test/ch/cyberduck/core/azure/AzureUrlProviderTest.java rename to azure/src/test/java/ch/cyberduck/core/azure/AzureUrlProviderTest.java diff --git a/test/ch/cyberduck/core/azure/AzureWriteFeatureTest.java b/azure/src/test/java/ch/cyberduck/core/azure/AzureWriteFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/azure/AzureWriteFeatureTest.java rename to azure/src/test/java/ch/cyberduck/core/azure/AzureWriteFeatureTest.java diff --git a/binding/pom.xml b/binding/pom.xml new file mode 100644 index 0000000000..e58a7ecb46 --- /dev/null +++ b/binding/pom.xml @@ -0,0 +1,44 @@ + + + 4.0.0 + + ch.cyberduck + parent + 4.8.0-SNAPSHOT + + binding + jar + + + + log4j + log4j + 1.2.17 + + + org.rococoa + rococoa-core + 0.8 + + + org.rococoa + librococoa + 0.8 + dylib + runtime + + + net.java.dev.jna + jna + + + net.java.dev.jna + libjnidispatch + native + dylib + 4.2 + runtime + + + \ No newline at end of file diff --git a/source/ch/cyberduck/binding/Action.java b/binding/src/main/java/ch/cyberduck/binding/Action.java similarity index 100% rename from source/ch/cyberduck/binding/Action.java rename to binding/src/main/java/ch/cyberduck/binding/Action.java diff --git a/source/ch/cyberduck/binding/Delegate.java b/binding/src/main/java/ch/cyberduck/binding/Delegate.java similarity index 100% rename from source/ch/cyberduck/binding/Delegate.java rename to binding/src/main/java/ch/cyberduck/binding/Delegate.java diff --git a/source/ch/cyberduck/binding/Outlet.java b/binding/src/main/java/ch/cyberduck/binding/Outlet.java similarity index 100% rename from source/ch/cyberduck/binding/Outlet.java rename to binding/src/main/java/ch/cyberduck/binding/Outlet.java diff --git a/binding/src/main/java/ch/cyberduck/binding/Proxy.java b/binding/src/main/java/ch/cyberduck/binding/Proxy.java new file mode 100644 index 0000000000..5b965978ac --- /dev/null +++ b/binding/src/main/java/ch/cyberduck/binding/Proxy.java @@ -0,0 +1,75 @@ +package ch.cyberduck.binding; + +import ch.cyberduck.binding.foundation.NSNotificationCenter; +import ch.cyberduck.binding.foundation.NSObject; +import ch.cyberduck.binding.foundation.NSThread; + +import org.apache.log4j.Logger; +import org.rococoa.Foundation; +import org.rococoa.ID; +import org.rococoa.Rococoa; + +/** + * @version $Id:$ + */ +public class Proxy { + private static final Logger log = Logger.getLogger(Proxy.class); + + /** + * You need to keep a reference to the returned value for as long as it is + * active. When it is GCd, it will release the Objective-C proxy. + */ + private NSObject proxy; + + private ID id; + + public NSObject proxy() { + return this.proxy(NSObject.class); + } + + protected NSObject proxy(Class type) { + if(null == proxy) { + proxy = Rococoa.proxy(this, type); + } + return proxy; + } + + public ID id() { + return this.id(NSObject.class); + } + + protected ID id(Class type) { + if(null == id) { + id = this.proxy(type).id(); + } + return id; + } + + public void invalidate() { + if(id != null) { + NSNotificationCenter.defaultCenter().removeObserver(id); + } + } + + public void invoke(final Runnable runnable, final Object lock, final boolean wait) { + if(NSThread.isMainThread()) { + if(log.isDebugEnabled()) { + log.debug(String.format("Already on main thread. Invoke %s directly.", runnable)); + } + runnable.run(); + return; + } + synchronized(lock) { + if(log.isTraceEnabled()) { + log.trace(String.format("Invoke runnable %s on main thread", runnable)); + } + try { + //Defer to main thread + Foundation.runOnMainThread(runnable, wait); + } + catch(Exception e) { + log.error(String.format("Exception %s running task on main thread", e.getMessage()), e); + } + } + } +} diff --git a/source/ch/cyberduck/binding/application/AppKitFunctions.java b/binding/src/main/java/ch/cyberduck/binding/application/AppKitFunctions.java similarity index 100% rename from source/ch/cyberduck/binding/application/AppKitFunctions.java rename to binding/src/main/java/ch/cyberduck/binding/application/AppKitFunctions.java diff --git a/source/ch/cyberduck/binding/application/AppKitFunctionsLibrary.java b/binding/src/main/java/ch/cyberduck/binding/application/AppKitFunctionsLibrary.java similarity index 100% rename from source/ch/cyberduck/binding/application/AppKitFunctionsLibrary.java rename to binding/src/main/java/ch/cyberduck/binding/application/AppKitFunctionsLibrary.java diff --git a/source/ch/cyberduck/binding/application/NSActionCell.java b/binding/src/main/java/ch/cyberduck/binding/application/NSActionCell.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSActionCell.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSActionCell.java diff --git a/source/ch/cyberduck/binding/application/NSAlert.java b/binding/src/main/java/ch/cyberduck/binding/application/NSAlert.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSAlert.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSAlert.java diff --git a/source/ch/cyberduck/binding/application/NSApplication.java b/binding/src/main/java/ch/cyberduck/binding/application/NSApplication.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSApplication.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSApplication.java diff --git a/source/ch/cyberduck/binding/application/NSButton.java b/binding/src/main/java/ch/cyberduck/binding/application/NSButton.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSButton.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSButton.java diff --git a/source/ch/cyberduck/binding/application/NSButtonCell.java b/binding/src/main/java/ch/cyberduck/binding/application/NSButtonCell.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSButtonCell.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSButtonCell.java diff --git a/source/ch/cyberduck/binding/application/NSCell.java b/binding/src/main/java/ch/cyberduck/binding/application/NSCell.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSCell.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSCell.java diff --git a/source/ch/cyberduck/binding/application/NSColor.java b/binding/src/main/java/ch/cyberduck/binding/application/NSColor.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSColor.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSColor.java diff --git a/source/ch/cyberduck/binding/application/NSComboBox.java b/binding/src/main/java/ch/cyberduck/binding/application/NSComboBox.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSComboBox.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSComboBox.java diff --git a/source/ch/cyberduck/binding/application/NSComboBoxCell.java b/binding/src/main/java/ch/cyberduck/binding/application/NSComboBoxCell.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSComboBoxCell.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSComboBoxCell.java diff --git a/source/ch/cyberduck/binding/application/NSControl.java b/binding/src/main/java/ch/cyberduck/binding/application/NSControl.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSControl.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSControl.java diff --git a/source/ch/cyberduck/binding/application/NSDockTile.java b/binding/src/main/java/ch/cyberduck/binding/application/NSDockTile.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSDockTile.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSDockTile.java diff --git a/source/ch/cyberduck/binding/application/NSDraggingDestination.java b/binding/src/main/java/ch/cyberduck/binding/application/NSDraggingDestination.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSDraggingDestination.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSDraggingDestination.java diff --git a/source/ch/cyberduck/binding/application/NSDraggingInfo.java b/binding/src/main/java/ch/cyberduck/binding/application/NSDraggingInfo.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSDraggingInfo.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSDraggingInfo.java diff --git a/source/ch/cyberduck/binding/application/NSDraggingSource.java b/binding/src/main/java/ch/cyberduck/binding/application/NSDraggingSource.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSDraggingSource.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSDraggingSource.java diff --git a/source/ch/cyberduck/binding/application/NSDrawer.java b/binding/src/main/java/ch/cyberduck/binding/application/NSDrawer.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSDrawer.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSDrawer.java diff --git a/source/ch/cyberduck/binding/application/NSEvent.java b/binding/src/main/java/ch/cyberduck/binding/application/NSEvent.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSEvent.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSEvent.java diff --git a/source/ch/cyberduck/binding/application/NSFont.java b/binding/src/main/java/ch/cyberduck/binding/application/NSFont.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSFont.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSFont.java diff --git a/source/ch/cyberduck/binding/application/NSGraphics.java b/binding/src/main/java/ch/cyberduck/binding/application/NSGraphics.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSGraphics.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSGraphics.java diff --git a/source/ch/cyberduck/binding/application/NSImage.java b/binding/src/main/java/ch/cyberduck/binding/application/NSImage.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSImage.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSImage.java diff --git a/source/ch/cyberduck/binding/application/NSImageCell.java b/binding/src/main/java/ch/cyberduck/binding/application/NSImageCell.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSImageCell.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSImageCell.java diff --git a/source/ch/cyberduck/binding/application/NSImageView.java b/binding/src/main/java/ch/cyberduck/binding/application/NSImageView.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSImageView.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSImageView.java diff --git a/source/ch/cyberduck/binding/application/NSLayoutManager.java b/binding/src/main/java/ch/cyberduck/binding/application/NSLayoutManager.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSLayoutManager.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSLayoutManager.java diff --git a/source/ch/cyberduck/binding/application/NSMenu.java b/binding/src/main/java/ch/cyberduck/binding/application/NSMenu.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSMenu.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSMenu.java diff --git a/source/ch/cyberduck/binding/application/NSMenuItem.java b/binding/src/main/java/ch/cyberduck/binding/application/NSMenuItem.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSMenuItem.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSMenuItem.java diff --git a/source/ch/cyberduck/binding/application/NSMutableParagraphStyle.java b/binding/src/main/java/ch/cyberduck/binding/application/NSMutableParagraphStyle.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSMutableParagraphStyle.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSMutableParagraphStyle.java diff --git a/source/ch/cyberduck/binding/application/NSOpenPanel.java b/binding/src/main/java/ch/cyberduck/binding/application/NSOpenPanel.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSOpenPanel.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSOpenPanel.java diff --git a/source/ch/cyberduck/binding/application/NSOutlineView.java b/binding/src/main/java/ch/cyberduck/binding/application/NSOutlineView.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSOutlineView.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSOutlineView.java diff --git a/source/ch/cyberduck/binding/application/NSPanel.java b/binding/src/main/java/ch/cyberduck/binding/application/NSPanel.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSPanel.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSPanel.java diff --git a/source/ch/cyberduck/binding/application/NSParagraphStyle.java b/binding/src/main/java/ch/cyberduck/binding/application/NSParagraphStyle.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSParagraphStyle.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSParagraphStyle.java diff --git a/source/ch/cyberduck/binding/application/NSPasteboard.java b/binding/src/main/java/ch/cyberduck/binding/application/NSPasteboard.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSPasteboard.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSPasteboard.java diff --git a/source/ch/cyberduck/binding/application/NSPopUpButton.java b/binding/src/main/java/ch/cyberduck/binding/application/NSPopUpButton.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSPopUpButton.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSPopUpButton.java diff --git a/source/ch/cyberduck/binding/application/NSPopUpButtonCell.java b/binding/src/main/java/ch/cyberduck/binding/application/NSPopUpButtonCell.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSPopUpButtonCell.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSPopUpButtonCell.java diff --git a/source/ch/cyberduck/binding/application/NSPrintInfo.java b/binding/src/main/java/ch/cyberduck/binding/application/NSPrintInfo.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSPrintInfo.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSPrintInfo.java diff --git a/source/ch/cyberduck/binding/application/NSPrintOperation.java b/binding/src/main/java/ch/cyberduck/binding/application/NSPrintOperation.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSPrintOperation.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSPrintOperation.java diff --git a/source/ch/cyberduck/binding/application/NSPrintPanel.java b/binding/src/main/java/ch/cyberduck/binding/application/NSPrintPanel.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSPrintPanel.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSPrintPanel.java diff --git a/source/ch/cyberduck/binding/application/NSProgressIndicator.java b/binding/src/main/java/ch/cyberduck/binding/application/NSProgressIndicator.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSProgressIndicator.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSProgressIndicator.java diff --git a/source/ch/cyberduck/binding/application/NSResponder.java b/binding/src/main/java/ch/cyberduck/binding/application/NSResponder.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSResponder.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSResponder.java diff --git a/source/ch/cyberduck/binding/application/NSSavePanel.java b/binding/src/main/java/ch/cyberduck/binding/application/NSSavePanel.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSSavePanel.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSSavePanel.java diff --git a/source/ch/cyberduck/binding/application/NSScreen.java b/binding/src/main/java/ch/cyberduck/binding/application/NSScreen.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSScreen.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSScreen.java diff --git a/source/ch/cyberduck/binding/application/NSSecureTextField.java b/binding/src/main/java/ch/cyberduck/binding/application/NSSecureTextField.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSSecureTextField.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSSecureTextField.java diff --git a/source/ch/cyberduck/binding/application/NSSegmentedCell.java b/binding/src/main/java/ch/cyberduck/binding/application/NSSegmentedCell.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSSegmentedCell.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSSegmentedCell.java diff --git a/source/ch/cyberduck/binding/application/NSSegmentedControl.java b/binding/src/main/java/ch/cyberduck/binding/application/NSSegmentedControl.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSSegmentedControl.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSSegmentedControl.java diff --git a/source/ch/cyberduck/binding/application/NSStatusBar.java b/binding/src/main/java/ch/cyberduck/binding/application/NSStatusBar.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSStatusBar.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSStatusBar.java diff --git a/source/ch/cyberduck/binding/application/NSStatusItem.java b/binding/src/main/java/ch/cyberduck/binding/application/NSStatusItem.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSStatusItem.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSStatusItem.java diff --git a/source/ch/cyberduck/binding/application/NSStepper.java b/binding/src/main/java/ch/cyberduck/binding/application/NSStepper.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSStepper.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSStepper.java diff --git a/source/ch/cyberduck/binding/application/NSTabView.java b/binding/src/main/java/ch/cyberduck/binding/application/NSTabView.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSTabView.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSTabView.java diff --git a/source/ch/cyberduck/binding/application/NSTabViewItem.java b/binding/src/main/java/ch/cyberduck/binding/application/NSTabViewItem.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSTabViewItem.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSTabViewItem.java diff --git a/source/ch/cyberduck/binding/application/NSTableColumn.java b/binding/src/main/java/ch/cyberduck/binding/application/NSTableColumn.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSTableColumn.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSTableColumn.java diff --git a/source/ch/cyberduck/binding/application/NSTableView.java b/binding/src/main/java/ch/cyberduck/binding/application/NSTableView.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSTableView.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSTableView.java diff --git a/source/ch/cyberduck/binding/application/NSText.java b/binding/src/main/java/ch/cyberduck/binding/application/NSText.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSText.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSText.java diff --git a/source/ch/cyberduck/binding/application/NSTextField.java b/binding/src/main/java/ch/cyberduck/binding/application/NSTextField.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSTextField.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSTextField.java diff --git a/source/ch/cyberduck/binding/application/NSTextFieldCell.java b/binding/src/main/java/ch/cyberduck/binding/application/NSTextFieldCell.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSTextFieldCell.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSTextFieldCell.java diff --git a/source/ch/cyberduck/binding/application/NSTextStorage.java b/binding/src/main/java/ch/cyberduck/binding/application/NSTextStorage.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSTextStorage.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSTextStorage.java diff --git a/source/ch/cyberduck/binding/application/NSTextView.java b/binding/src/main/java/ch/cyberduck/binding/application/NSTextView.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSTextView.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSTextView.java diff --git a/source/ch/cyberduck/binding/application/NSToolbar.java b/binding/src/main/java/ch/cyberduck/binding/application/NSToolbar.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSToolbar.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSToolbar.java diff --git a/source/ch/cyberduck/binding/application/NSToolbarItem.java b/binding/src/main/java/ch/cyberduck/binding/application/NSToolbarItem.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSToolbarItem.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSToolbarItem.java diff --git a/source/ch/cyberduck/binding/application/NSUserInterfaceValidations.java b/binding/src/main/java/ch/cyberduck/binding/application/NSUserInterfaceValidations.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSUserInterfaceValidations.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSUserInterfaceValidations.java diff --git a/source/ch/cyberduck/binding/application/NSValidatedUserInterfaceItem.java b/binding/src/main/java/ch/cyberduck/binding/application/NSValidatedUserInterfaceItem.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSValidatedUserInterfaceItem.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSValidatedUserInterfaceItem.java diff --git a/source/ch/cyberduck/binding/application/NSView.java b/binding/src/main/java/ch/cyberduck/binding/application/NSView.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSView.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSView.java diff --git a/source/ch/cyberduck/binding/application/NSWindow.java b/binding/src/main/java/ch/cyberduck/binding/application/NSWindow.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSWindow.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSWindow.java diff --git a/source/ch/cyberduck/binding/application/NSWorkspace.java b/binding/src/main/java/ch/cyberduck/binding/application/NSWorkspace.java similarity index 100% rename from source/ch/cyberduck/binding/application/NSWorkspace.java rename to binding/src/main/java/ch/cyberduck/binding/application/NSWorkspace.java diff --git a/source/ch/cyberduck/binding/application/PanelReturnCodeMapper.java b/binding/src/main/java/ch/cyberduck/binding/application/PanelReturnCodeMapper.java similarity index 100% rename from source/ch/cyberduck/binding/application/PanelReturnCodeMapper.java rename to binding/src/main/java/ch/cyberduck/binding/application/PanelReturnCodeMapper.java diff --git a/source/ch/cyberduck/binding/application/SheetCallback.java b/binding/src/main/java/ch/cyberduck/binding/application/SheetCallback.java similarity index 100% rename from source/ch/cyberduck/binding/application/SheetCallback.java rename to binding/src/main/java/ch/cyberduck/binding/application/SheetCallback.java diff --git a/source/ch/cyberduck/binding/application/WindowListener.java b/binding/src/main/java/ch/cyberduck/binding/application/WindowListener.java similarity index 100% rename from source/ch/cyberduck/binding/application/WindowListener.java rename to binding/src/main/java/ch/cyberduck/binding/application/WindowListener.java diff --git a/source/ch/cyberduck/binding/foundation/CFAllocatorRef.java b/binding/src/main/java/ch/cyberduck/binding/foundation/CFAllocatorRef.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/CFAllocatorRef.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/CFAllocatorRef.java diff --git a/source/ch/cyberduck/binding/foundation/CFArrayRef.java b/binding/src/main/java/ch/cyberduck/binding/foundation/CFArrayRef.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/CFArrayRef.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/CFArrayRef.java diff --git a/source/ch/cyberduck/binding/foundation/CFIndex.java b/binding/src/main/java/ch/cyberduck/binding/foundation/CFIndex.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/CFIndex.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/CFIndex.java diff --git a/source/ch/cyberduck/binding/foundation/CFRunLoopRef.java b/binding/src/main/java/ch/cyberduck/binding/foundation/CFRunLoopRef.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/CFRunLoopRef.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/CFRunLoopRef.java diff --git a/source/ch/cyberduck/binding/foundation/CFStringRef.java b/binding/src/main/java/ch/cyberduck/binding/foundation/CFStringRef.java similarity index 85% rename from source/ch/cyberduck/binding/foundation/CFStringRef.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/CFStringRef.java index a5253843bd..e7d6120d6b 100644 --- a/source/ch/cyberduck/binding/foundation/CFStringRef.java +++ b/binding/src/main/java/ch/cyberduck/binding/foundation/CFStringRef.java @@ -17,8 +17,6 @@ package ch.cyberduck.binding.foundation; * Bug fixes, suggestions and comments should be sent to feedback@cyberduck.ch */ -import ch.cyberduck.core.io.watchservice.jna.FSEvents; - import com.sun.jna.ptr.PointerByReference; public class CFStringRef extends PointerByReference { @@ -26,7 +24,6 @@ public class CFStringRef extends PointerByReference { public static CFStringRef toCFString(String s) { final char[] chars = s.toCharArray(); int length = chars.length; - return FSEvents.library.CFStringCreateWithCharacters(null, chars, CFIndex.valueOf(length)); + return FoundationKitFunctionsLibrary.CFStringCreateWithCharacters(null, chars, CFIndex.valueOf(length)); } - } diff --git a/source/ch/cyberduck/binding/foundation/FoundationKitFunctions.java b/binding/src/main/java/ch/cyberduck/binding/foundation/FoundationKitFunctions.java similarity index 99% rename from source/ch/cyberduck/binding/foundation/FoundationKitFunctions.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/FoundationKitFunctions.java index b157bc4e2d..65e572a4db 100644 --- a/source/ch/cyberduck/binding/foundation/FoundationKitFunctions.java +++ b/binding/src/main/java/ch/cyberduck/binding/foundation/FoundationKitFunctions.java @@ -286,5 +286,7 @@ public interface FoundationKitFunctions extends Library { * @param format Statement */ void NSLog(String format, String... args); + + CFStringRef CFStringCreateWithCharacters(CFAllocatorRef allocator, char[] chars, CFIndex index); } diff --git a/source/ch/cyberduck/binding/foundation/FoundationKitFunctionsLibrary.java b/binding/src/main/java/ch/cyberduck/binding/foundation/FoundationKitFunctionsLibrary.java similarity index 93% rename from source/ch/cyberduck/binding/foundation/FoundationKitFunctionsLibrary.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/FoundationKitFunctionsLibrary.java index 772d75b238..5c09223169 100644 --- a/source/ch/cyberduck/binding/foundation/FoundationKitFunctionsLibrary.java +++ b/binding/src/main/java/ch/cyberduck/binding/foundation/FoundationKitFunctionsLibrary.java @@ -86,4 +86,8 @@ public final class FoundationKitFunctionsLibrary { public static void NSLog(String format, String... args) { instance.NSLog(format, args); } + + public static CFStringRef CFStringCreateWithCharacters(final CFAllocatorRef allocator, final char[] chars, final CFIndex index) { + return instance.CFStringCreateWithCharacters(allocator, chars, index); + } } diff --git a/source/ch/cyberduck/binding/foundation/NSAppleEventDescriptor.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSAppleEventDescriptor.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSAppleEventDescriptor.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSAppleEventDescriptor.java diff --git a/source/ch/cyberduck/binding/foundation/NSAppleEventManager.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSAppleEventManager.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSAppleEventManager.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSAppleEventManager.java diff --git a/source/ch/cyberduck/binding/foundation/NSAppleScript.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSAppleScript.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSAppleScript.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSAppleScript.java diff --git a/source/ch/cyberduck/binding/foundation/NSArray.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSArray.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSArray.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSArray.java diff --git a/source/ch/cyberduck/binding/foundation/NSAttributedString.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSAttributedString.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSAttributedString.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSAttributedString.java diff --git a/source/ch/cyberduck/binding/foundation/NSAutoreleasePool.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSAutoreleasePool.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSAutoreleasePool.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSAutoreleasePool.java diff --git a/source/ch/cyberduck/binding/foundation/NSBundle.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSBundle.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSBundle.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSBundle.java diff --git a/source/ch/cyberduck/binding/foundation/NSCoder.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSCoder.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSCoder.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSCoder.java diff --git a/source/ch/cyberduck/binding/foundation/NSCopying.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSCopying.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSCopying.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSCopying.java diff --git a/source/ch/cyberduck/binding/foundation/NSData.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSData.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSData.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSData.java diff --git a/source/ch/cyberduck/binding/foundation/NSDate.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSDate.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSDate.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSDate.java diff --git a/source/ch/cyberduck/binding/foundation/NSDateFormatter.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSDateFormatter.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSDateFormatter.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSDateFormatter.java diff --git a/source/ch/cyberduck/binding/foundation/NSDictionary.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSDictionary.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSDictionary.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSDictionary.java diff --git a/source/ch/cyberduck/binding/foundation/NSDistributedNotificationCenter.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSDistributedNotificationCenter.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSDistributedNotificationCenter.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSDistributedNotificationCenter.java diff --git a/source/ch/cyberduck/binding/foundation/NSEnumerator.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSEnumerator.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSEnumerator.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSEnumerator.java diff --git a/source/ch/cyberduck/binding/foundation/NSFileManager.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSFileManager.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSFileManager.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSFileManager.java diff --git a/source/ch/cyberduck/binding/foundation/NSFormatter.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSFormatter.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSFormatter.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSFormatter.java diff --git a/source/ch/cyberduck/binding/foundation/NSIndexSet.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSIndexSet.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSIndexSet.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSIndexSet.java diff --git a/source/ch/cyberduck/binding/foundation/NSKeyedUnarchiver.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSKeyedUnarchiver.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSKeyedUnarchiver.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSKeyedUnarchiver.java diff --git a/source/ch/cyberduck/binding/foundation/NSLocale.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSLocale.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSLocale.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSLocale.java diff --git a/source/ch/cyberduck/binding/foundation/NSMutableArray.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSMutableArray.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSMutableArray.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSMutableArray.java diff --git a/source/ch/cyberduck/binding/foundation/NSMutableAttributedString.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSMutableAttributedString.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSMutableAttributedString.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSMutableAttributedString.java diff --git a/source/ch/cyberduck/binding/foundation/NSMutableData.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSMutableData.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSMutableData.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSMutableData.java diff --git a/source/ch/cyberduck/binding/foundation/NSMutableDictionary.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSMutableDictionary.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSMutableDictionary.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSMutableDictionary.java diff --git a/source/ch/cyberduck/binding/foundation/NSNotification.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSNotification.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSNotification.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSNotification.java diff --git a/source/ch/cyberduck/binding/foundation/NSNotificationCenter.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSNotificationCenter.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSNotificationCenter.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSNotificationCenter.java diff --git a/source/ch/cyberduck/binding/foundation/NSNumber.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSNumber.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSNumber.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSNumber.java diff --git a/source/ch/cyberduck/binding/foundation/NSObject.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSObject.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSObject.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSObject.java diff --git a/source/ch/cyberduck/binding/foundation/NSRange.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSRange.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSRange.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSRange.java diff --git a/source/ch/cyberduck/binding/foundation/NSSet.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSSet.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSSet.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSSet.java diff --git a/source/ch/cyberduck/binding/foundation/NSString.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSString.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSString.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSString.java diff --git a/source/ch/cyberduck/binding/foundation/NSThread.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSThread.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSThread.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSThread.java diff --git a/source/ch/cyberduck/binding/foundation/NSTimeZone.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSTimeZone.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSTimeZone.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSTimeZone.java diff --git a/source/ch/cyberduck/binding/foundation/NSURL.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSURL.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSURL.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSURL.java diff --git a/source/ch/cyberduck/binding/foundation/NSUserDefaults.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSUserDefaults.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSUserDefaults.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSUserDefaults.java diff --git a/source/ch/cyberduck/binding/foundation/NSUserNotification.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSUserNotification.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSUserNotification.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSUserNotification.java diff --git a/source/ch/cyberduck/binding/foundation/NSUserNotificationCenter.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSUserNotificationCenter.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSUserNotificationCenter.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSUserNotificationCenter.java diff --git a/source/ch/cyberduck/binding/foundation/NSValue.java b/binding/src/main/java/ch/cyberduck/binding/foundation/NSValue.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/NSValue.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/NSValue.java diff --git a/source/ch/cyberduck/binding/foundation/ServiceManagementFunctions.java b/binding/src/main/java/ch/cyberduck/binding/foundation/ServiceManagementFunctions.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/ServiceManagementFunctions.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/ServiceManagementFunctions.java diff --git a/source/ch/cyberduck/binding/foundation/ServiceManagementLibrary.java b/binding/src/main/java/ch/cyberduck/binding/foundation/ServiceManagementLibrary.java similarity index 100% rename from source/ch/cyberduck/binding/foundation/ServiceManagementLibrary.java rename to binding/src/main/java/ch/cyberduck/binding/foundation/ServiceManagementLibrary.java diff --git a/bonjour/pom.xml b/bonjour/pom.xml new file mode 100644 index 0000000000..6d7cc8f1b0 --- /dev/null +++ b/bonjour/pom.xml @@ -0,0 +1,55 @@ + + + + parent + ch.cyberduck + 4.8.0-SNAPSHOT + + 4.0.0 + + bonjour + + + + ch.cyberduck + core + ${project.version} + + + ch.cyberduck + test + pom + test + ${project.version} + + + ch.cyberduck + ftp + ${project.version} + + + ch.cyberduck + ssh + ${project.version} + + + ch.cyberduck + webdav + ${project.version} + + + com.apple + dnssd + 1.0 + + + com.apple + libjdns_sd + dylib + runtime + 1.0 + + + \ No newline at end of file diff --git a/source/ch/cyberduck/core/bonjour/AbstractRendezvous.java b/bonjour/src/main/java/ch/cyberduck/core/bonjour/AbstractRendezvous.java similarity index 95% rename from source/ch/cyberduck/core/bonjour/AbstractRendezvous.java rename to bonjour/src/main/java/ch/cyberduck/core/bonjour/AbstractRendezvous.java index ab8cc0f678..26c6b879c5 100644 --- a/source/ch/cyberduck/core/bonjour/AbstractRendezvous.java +++ b/bonjour/src/main/java/ch/cyberduck/core/bonjour/AbstractRendezvous.java @@ -21,12 +21,14 @@ package ch.cyberduck.core.bonjour; import ch.cyberduck.core.BookmarkNameProvider; import ch.cyberduck.core.Host; -import ch.cyberduck.core.LimitedRendezvousListener; import ch.cyberduck.core.LocaleFactory; import ch.cyberduck.core.PathNormalizer; import ch.cyberduck.core.Protocol; -import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.UserDateFormatterFactory; +import ch.cyberduck.core.dav.DAVProtocol; +import ch.cyberduck.core.dav.DAVSSLProtocol; +import ch.cyberduck.core.ftp.FTPProtocol; +import ch.cyberduck.core.sftp.SFTPProtocol; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; @@ -179,16 +181,16 @@ public abstract class AbstractRendezvous implements Rendezvous { */ protected Protocol getProtocol(final String fullname) { if(fullname.contains(SERVICE_TYPE_SFTP)) { - return ProtocolFactory.SFTP; + return new SFTPProtocol(); } if(fullname.contains(SERVICE_TYPE_FTP)) { - return ProtocolFactory.FTP; + return new FTPProtocol(); } if(fullname.contains(SERVICE_TYPE_WEBDAV)) { - return ProtocolFactory.WEBDAV; + return new DAVProtocol(); } if(fullname.contains(SERVICE_TYPE_WEBDAV_TLS)) { - return ProtocolFactory.WEBDAV_SSL; + return new DAVSSLProtocol(); } log.warn(String.format("Cannot find service type in %s", fullname)); return null; diff --git a/source/ch/cyberduck/core/bonjour/DisabledRendezvous.java b/bonjour/src/main/java/ch/cyberduck/core/bonjour/DisabledRendezvous.java similarity index 100% rename from source/ch/cyberduck/core/bonjour/DisabledRendezvous.java rename to bonjour/src/main/java/ch/cyberduck/core/bonjour/DisabledRendezvous.java diff --git a/source/ch/cyberduck/core/LimitedRendezvousListener.java b/bonjour/src/main/java/ch/cyberduck/core/bonjour/LimitedRendezvousListener.java similarity index 97% rename from source/ch/cyberduck/core/LimitedRendezvousListener.java rename to bonjour/src/main/java/ch/cyberduck/core/bonjour/LimitedRendezvousListener.java index 0b16dfbc05..49320dc9b4 100644 --- a/source/ch/cyberduck/core/LimitedRendezvousListener.java +++ b/bonjour/src/main/java/ch/cyberduck/core/bonjour/LimitedRendezvousListener.java @@ -1,4 +1,4 @@ -package ch.cyberduck.core; +package ch.cyberduck.core.bonjour; /* * Copyright (c) 2002-2014 David Kocher. All rights reserved. @@ -17,7 +17,7 @@ package ch.cyberduck.core; * Bug fixes, suggestions and comments should be sent to feedback@cyberduck.ch */ -import ch.cyberduck.core.bonjour.RendezvousListener; +import ch.cyberduck.core.Host; import ch.cyberduck.core.preferences.PreferencesFactory; import org.apache.commons.lang3.concurrent.TimedSemaphore; diff --git a/source/ch/cyberduck/core/bonjour/NotificationRendezvousListener.java b/bonjour/src/main/java/ch/cyberduck/core/bonjour/NotificationRendezvousListener.java similarity index 100% rename from source/ch/cyberduck/core/bonjour/NotificationRendezvousListener.java rename to bonjour/src/main/java/ch/cyberduck/core/bonjour/NotificationRendezvousListener.java diff --git a/source/ch/cyberduck/core/bonjour/Rendezvous.cs b/bonjour/src/main/java/ch/cyberduck/core/bonjour/Rendezvous.cs similarity index 97% rename from source/ch/cyberduck/core/bonjour/Rendezvous.cs rename to bonjour/src/main/java/ch/cyberduck/core/bonjour/Rendezvous.cs index 6a0114bb7c..f9e2f7144b 100755 --- a/source/ch/cyberduck/core/bonjour/Rendezvous.cs +++ b/bonjour/src/main/java/ch/cyberduck/core/bonjour/Rendezvous.cs @@ -1,131 +1,131 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Text; -using Bonjour; -using ch.cyberduck.core; -using ch.cyberduck.core.bonjour; - -namespace Ch.Cyberduck.Core.Bonjour -{ - public class Rendezvous : AbstractRendezvous - { - private readonly Dictionary _browsers = new Dictionary(); - - private DNSSDEventManager _eventManager; - private DNSSDService _service; - - public override void init() - { - base.init(); - _eventManager = new DNSSDEventManager(); - _eventManager.ServiceFound += ServiceFound; - _eventManager.ServiceLost += ServiceLost; - _eventManager.ServiceResolved += ServiceResolved; - _eventManager.OperationFailed += OperationFailed; - _service = new DNSSDService(); - for (int i = 0; i < getServiceTypes().Length; i++) - { - _browsers.Add(getServiceTypes()[i], _service.Browse(0, 0, getServiceTypes()[i], null, _eventManager)); - } - } - - public override void quit() - { - if (null == _eventManager) - { - return; - } - _eventManager.ServiceFound -= ServiceFound; - _eventManager.ServiceLost -= ServiceLost; - _eventManager.ServiceResolved -= ServiceResolved; - _eventManager.OperationFailed -= OperationFailed; - for (int i = 0; i < getServiceTypes().Length; i++) - { - DNSSDService browser; - if (_browsers.TryGetValue(getServiceTypes()[i], out browser)) - { - if (null != browser) - { - browser.Stop(); - } - } - } - if (_service != null) - { - _service.Stop(); - } - base.quit(); - } - - // - // ServiceFound - // - // This call is invoked by the DNSService core. We create - // a BrowseData object and invoked the appropriate method - // in the GUI thread so we can update the UI - // - public void ServiceFound(DNSSDService service, DNSSDFlags flags, uint ifIndex, String serviceName, - String regType, String domain) - { - service.Resolve(flags, ifIndex, serviceName, regType, domain, _eventManager); - } - - public void ServiceLost(DNSSDService service, DNSSDFlags flags, uint ifIndex, String serviceName, String regType, - String domain) - { - string fullname = serviceName + "." + regType + domain; - base.remove(fullname); - } - - public void ServiceResolved(DNSSDService service, DNSSDFlags flags, uint ifIndex, String fullName, - String hostName, ushort port, TXTRecord txtRecord) - { - String user = null; - String password = null; - String path = null; - if (txtRecord.ContainsKey("u")) - { - user = ByteArrayToString((byte[]) txtRecord.GetValueForKey("u")); - } - if (txtRecord.ContainsKey("p")) - { - password = ByteArrayToString((byte[]) txtRecord.GetValueForKey("p")); - } - if (txtRecord.ContainsKey("path")) - { - path = ByteArrayToString((byte[]) txtRecord.GetValueForKey("path")); - } - base.add(fullName, hostName, port, user, password, path); - service.Stop(); - } - - private string ByteArrayToString(byte[] input) - { - UTF8Encoding enc = new UTF8Encoding(); - return enc.GetString(input); - } - - public void OperationFailed(DNSSDService service, DNSSDError error) - { - service.Stop(); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Text; +using Bonjour; +using ch.cyberduck.core; +using ch.cyberduck.core.bonjour; + +namespace Ch.Cyberduck.Core.Bonjour +{ + public class Rendezvous : AbstractRendezvous + { + private readonly Dictionary _browsers = new Dictionary(); + + private DNSSDEventManager _eventManager; + private DNSSDService _service; + + public override void init() + { + base.init(); + _eventManager = new DNSSDEventManager(); + _eventManager.ServiceFound += ServiceFound; + _eventManager.ServiceLost += ServiceLost; + _eventManager.ServiceResolved += ServiceResolved; + _eventManager.OperationFailed += OperationFailed; + _service = new DNSSDService(); + for (int i = 0; i < getServiceTypes().Length; i++) + { + _browsers.Add(getServiceTypes()[i], _service.Browse(0, 0, getServiceTypes()[i], null, _eventManager)); + } + } + + public override void quit() + { + if (null == _eventManager) + { + return; + } + _eventManager.ServiceFound -= ServiceFound; + _eventManager.ServiceLost -= ServiceLost; + _eventManager.ServiceResolved -= ServiceResolved; + _eventManager.OperationFailed -= OperationFailed; + for (int i = 0; i < getServiceTypes().Length; i++) + { + DNSSDService browser; + if (_browsers.TryGetValue(getServiceTypes()[i], out browser)) + { + if (null != browser) + { + browser.Stop(); + } + } + } + if (_service != null) + { + _service.Stop(); + } + base.quit(); + } + + // + // ServiceFound + // + // This call is invoked by the DNSService core. We create + // a BrowseData object and invoked the appropriate method + // in the GUI thread so we can update the UI + // + public void ServiceFound(DNSSDService service, DNSSDFlags flags, uint ifIndex, String serviceName, + String regType, String domain) + { + service.Resolve(flags, ifIndex, serviceName, regType, domain, _eventManager); + } + + public void ServiceLost(DNSSDService service, DNSSDFlags flags, uint ifIndex, String serviceName, String regType, + String domain) + { + string fullname = serviceName + "." + regType + domain; + base.remove(fullname); + } + + public void ServiceResolved(DNSSDService service, DNSSDFlags flags, uint ifIndex, String fullName, + String hostName, ushort port, TXTRecord txtRecord) + { + String user = null; + String password = null; + String path = null; + if (txtRecord.ContainsKey("u")) + { + user = ByteArrayToString((byte[]) txtRecord.GetValueForKey("u")); + } + if (txtRecord.ContainsKey("p")) + { + password = ByteArrayToString((byte[]) txtRecord.GetValueForKey("p")); + } + if (txtRecord.ContainsKey("path")) + { + path = ByteArrayToString((byte[]) txtRecord.GetValueForKey("path")); + } + base.add(fullName, hostName, port, user, password, path); + service.Stop(); + } + + private string ByteArrayToString(byte[] input) + { + UTF8Encoding enc = new UTF8Encoding(); + return enc.GetString(input); + } + + public void OperationFailed(DNSSDService service, DNSSDError error) + { + service.Stop(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/bonjour/Rendezvous.java b/bonjour/src/main/java/ch/cyberduck/core/bonjour/Rendezvous.java similarity index 100% rename from source/ch/cyberduck/core/bonjour/Rendezvous.java rename to bonjour/src/main/java/ch/cyberduck/core/bonjour/Rendezvous.java diff --git a/source/ch/cyberduck/core/bonjour/RendezvousCollection.java b/bonjour/src/main/java/ch/cyberduck/core/bonjour/RendezvousCollection.java similarity index 93% rename from source/ch/cyberduck/core/bonjour/RendezvousCollection.java rename to bonjour/src/main/java/ch/cyberduck/core/bonjour/RendezvousCollection.java index 95d6fe6524..9a9b173090 100644 --- a/source/ch/cyberduck/core/bonjour/RendezvousCollection.java +++ b/bonjour/src/main/java/ch/cyberduck/core/bonjour/RendezvousCollection.java @@ -23,6 +23,7 @@ import ch.cyberduck.core.AbstractHostCollection; import ch.cyberduck.core.Host; import ch.cyberduck.core.LocaleFactory; +import java.util.Collection; import java.util.Iterator; /** @@ -41,7 +42,11 @@ public final class RendezvousCollection extends AbstractHostCollection implement private final Rendezvous rendezvous; private RendezvousCollection() { - rendezvous = RendezvousFactory.instance(); + this(RendezvousFactory.instance()); + } + + public RendezvousCollection(final Rendezvous rendezvous) { + this.rendezvous = rendezvous; rendezvous.addListener(this); this.collectionLoaded(); } diff --git a/source/ch/cyberduck/core/bonjour/RendezvousFactory.java b/bonjour/src/main/java/ch/cyberduck/core/bonjour/RendezvousFactory.java similarity index 100% rename from source/ch/cyberduck/core/bonjour/RendezvousFactory.java rename to bonjour/src/main/java/ch/cyberduck/core/bonjour/RendezvousFactory.java diff --git a/source/ch/cyberduck/core/bonjour/RendezvousListener.java b/bonjour/src/main/java/ch/cyberduck/core/bonjour/RendezvousListener.java similarity index 100% rename from source/ch/cyberduck/core/bonjour/RendezvousListener.java rename to bonjour/src/main/java/ch/cyberduck/core/bonjour/RendezvousListener.java diff --git a/source/ch/cyberduck/core/bonjour/RendezvousResponder.java b/bonjour/src/main/java/ch/cyberduck/core/bonjour/RendezvousResponder.java similarity index 100% rename from source/ch/cyberduck/core/bonjour/RendezvousResponder.java rename to bonjour/src/main/java/ch/cyberduck/core/bonjour/RendezvousResponder.java diff --git a/bonjour/src/test/java/ch/cyberduck/core/bonjour/RendezvousCollectionTest.java b/bonjour/src/test/java/ch/cyberduck/core/bonjour/RendezvousCollectionTest.java new file mode 100644 index 0000000000..e4302ee0a1 --- /dev/null +++ b/bonjour/src/test/java/ch/cyberduck/core/bonjour/RendezvousCollectionTest.java @@ -0,0 +1,75 @@ +package ch.cyberduck.core.bonjour; + +import ch.cyberduck.core.AbstractTestCase; +import ch.cyberduck.core.Host; +import ch.cyberduck.core.sftp.SFTPProtocol; + +import org.junit.Test; + +import java.util.Iterator; + +import static org.junit.Assert.*; + +/** + * @version $Id$ + */ +public class RendezvousCollectionTest { + + @Test + public void testAdd() throws Exception { + final Rendezvous bonjour = new Rendezvous() { + @Override + public void init() { + throw new UnsupportedOperationException(); + } + + @Override + public void quit() { + throw new UnsupportedOperationException(); + } + + @Override + public void addListener(final RendezvousListener listener) { + throw new UnsupportedOperationException(); + } + + @Override + public void removeListener(final RendezvousListener listener) { + throw new UnsupportedOperationException(); + } + + @Override + public int numberOfServices() { + throw new UnsupportedOperationException(); + } + + @Override + public Host getService(final int index) { + throw new UnsupportedOperationException(); + } + + @Override + public Iterator iterator() { + throw new UnsupportedOperationException(); + } + + @Override + public String getDisplayedName(final String identifier) { + throw new UnsupportedOperationException(); + } + }; + final RendezvousCollection c = new RendezvousCollection(bonjour); + assertFalse(c.allowsAdd()); + assertFalse(c.allowsDelete()); + assertFalse(c.allowsEdit()); + bonjour.init(); + final Host h = new Host(new SFTPProtocol(), "h"); + ((AbstractRendezvous) bonjour).add("h_sftp", h); + assertEquals(1, c.size()); + assertEquals(h, c.get(0)); + assertNotNull(c.get(0).getUuid()); + ((AbstractRendezvous) bonjour).remove("h_sftp"); + assertEquals(0, c.size()); + assertTrue(c.isEmpty()); + } +} diff --git a/test/ch/cyberduck/core/bonjour/RendezvousResponderTest.java b/bonjour/src/test/java/ch/cyberduck/core/bonjour/RendezvousResponderTest.java similarity index 74% rename from test/ch/cyberduck/core/bonjour/RendezvousResponderTest.java rename to bonjour/src/test/java/ch/cyberduck/core/bonjour/RendezvousResponderTest.java index d523cc169a..935ee98829 100644 --- a/test/ch/cyberduck/core/bonjour/RendezvousResponderTest.java +++ b/bonjour/src/test/java/ch/cyberduck/core/bonjour/RendezvousResponderTest.java @@ -1,10 +1,11 @@ package ch.cyberduck.core.bonjour; -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Host; -import ch.cyberduck.core.ProtocolFactory; -import ch.cyberduck.core.test.Depends; +import ch.cyberduck.core.TestProtocol; +import ch.cyberduck.core.dav.DAVProtocol; +import ch.cyberduck.core.dav.DAVSSLProtocol; +import ch.cyberduck.core.ftp.FTPProtocol; +import ch.cyberduck.core.sftp.SFTPProtocol; import org.junit.Assert; import org.junit.Test; @@ -17,8 +18,7 @@ import static org.junit.Assert.*; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) -public class RendezvousResponderTest extends AbstractTestCase { +public class RendezvousResponderTest { @Test public void testInit() throws Exception { @@ -63,16 +63,16 @@ public class RendezvousResponderTest extends AbstractTestCase { final RendezvousResponder r = new RendezvousResponder(); r.init(); r.quit(); - r.add("t-name", new Host("h")); + r.add("t-name", new Host(new TestProtocol(), "h")); } @Test public void testGetProtocol() throws Exception { final AbstractRendezvous r = new RendezvousResponder(); - Assert.assertEquals(ProtocolFactory.FTP, r.getProtocol("andaman._ftp._tcp.local.")); - assertEquals(ProtocolFactory.SFTP, r.getProtocol("yuksom._sftp-ssh._tcp.")); - assertEquals(ProtocolFactory.WEBDAV, r.getProtocol("yuksom._webdav._tcp")); - assertEquals(ProtocolFactory.WEBDAV_SSL, r.getProtocol("andaman._webdavs._tcp")); + Assert.assertEquals(new FTPProtocol(), r.getProtocol("andaman._ftp._tcp.local.")); + assertEquals(new SFTPProtocol(), r.getProtocol("yuksom._sftp-ssh._tcp.")); + assertEquals(new DAVProtocol(), r.getProtocol("yuksom._webdav._tcp")); + assertEquals(new DAVSSLProtocol(), r.getProtocol("andaman._webdavs._tcp")); assertNull(r.getProtocol("andaman._g._tcp")); } } \ No newline at end of file diff --git a/build-linux.xml b/build-linux.xml deleted file mode 100644 index c3751aecd1..0000000000 --- a/build-linux.xml +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build-mac.xml b/build-mac.xml deleted file mode 100644 index 4f7394f1bb..0000000000 --- a/build-mac.xml +++ /dev/null @@ -1,425 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build.xml b/build.xml index 3fc3a08a39..3c8b96424a 100644 --- a/build.xml +++ b/build.xml @@ -21,20 +21,17 @@ * Bug fixes, suggestions and comments should be sent to: * dkocher@cyberduck.io --> - + - - - - - - + + + @@ -47,9 +44,6 @@ - - - @@ -57,64 +51,52 @@ + + + + + + + + + + + - + + + + + - + - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + diff --git a/cli/build.xml b/cli/build.xml new file mode 100644 index 0000000000..a409561023 --- /dev/null +++ b/cli/build.xml @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cli/pom.xml b/cli/pom.xml new file mode 100644 index 0000000000..0811c04f68 --- /dev/null +++ b/cli/pom.xml @@ -0,0 +1,183 @@ + + + 4.0.0 + + ch.cyberduck + parent + 4.8.0-SNAPSHOT + + cli + jar + + + + mac + + + Mac + + + + + + maven-dependency-plugin + + + copy-dependencies-jar-bundle + generate-sources + + copy-dependencies + + + ${project.build.directory}/duck.bundle/Contents/Resources + jar + runtime + true + + + + copy-dependencies-dylib-bundle + generate-sources + + copy-dependencies + + + ${project.build.directory}/duck.bundle/Contents/Frameworks + dylib + runtime + true + true + + + + copy-artfifact-bundle + install + + copy + + + + + ${project.groupId} + ${project.artifactId} + ${project.version} + ${project.packaging} + + + ${project.build.directory}/duck.bundle/Contents/Resources + + + + + + maven-antrun-plugin + + + run-ant-target + package + + run + + + + + + + + + + + + + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + true + + ch.cyberduck.cli.Terminal + true + + + Cyberduck CLI + ${project.version} + iterate GmbH + ${commitsCount} + + + + + + maven-dependency-plugin + + + copy-dependencies-jar-bundle + generate-sources + + copy-dependencies + + + ${project.build.directory} + jar + runtime + true + + + + + + + + + + ch.cyberduck + core + ${project.version} + + + ch.cyberduck + libcore + dylib + runtime + ${project.version} + + + ch.cyberduck + test + pom + test + ${project.version} + + + ch.cyberduck + protocols + pom + ${project.version} + + + ch.cyberduck + fs + ${project.version} + + + commons-cli + commons-cli + 1.2 + + + org.fusesource.jansi + jansi + 1.12 + + + + diff --git a/source/ch/cyberduck/cli/CommandLinePathParser.java b/cli/src/main/java/ch/cyberduck/cli/CommandLinePathParser.java similarity index 100% rename from source/ch/cyberduck/cli/CommandLinePathParser.java rename to cli/src/main/java/ch/cyberduck/cli/CommandLinePathParser.java diff --git a/source/ch/cyberduck/cli/CommandLineUriParser.java b/cli/src/main/java/ch/cyberduck/cli/CommandLineUriParser.java similarity index 100% rename from source/ch/cyberduck/cli/CommandLineUriParser.java rename to cli/src/main/java/ch/cyberduck/cli/CommandLineUriParser.java diff --git a/source/ch/cyberduck/cli/Console.java b/cli/src/main/java/ch/cyberduck/cli/Console.java similarity index 100% rename from source/ch/cyberduck/cli/Console.java rename to cli/src/main/java/ch/cyberduck/cli/Console.java diff --git a/source/ch/cyberduck/cli/DeletePathFinder.java b/cli/src/main/java/ch/cyberduck/cli/DeletePathFinder.java similarity index 100% rename from source/ch/cyberduck/cli/DeletePathFinder.java rename to cli/src/main/java/ch/cyberduck/cli/DeletePathFinder.java diff --git a/source/ch/cyberduck/cli/DisabledTerminalPromptReader.java b/cli/src/main/java/ch/cyberduck/cli/DisabledTerminalPromptReader.java similarity index 100% rename from source/ch/cyberduck/cli/DisabledTerminalPromptReader.java rename to cli/src/main/java/ch/cyberduck/cli/DisabledTerminalPromptReader.java diff --git a/source/ch/cyberduck/cli/DownloadGlobFilter.java b/cli/src/main/java/ch/cyberduck/cli/DownloadGlobFilter.java similarity index 100% rename from source/ch/cyberduck/cli/DownloadGlobFilter.java rename to cli/src/main/java/ch/cyberduck/cli/DownloadGlobFilter.java diff --git a/source/ch/cyberduck/cli/DownloadTransferItemFinder.java b/cli/src/main/java/ch/cyberduck/cli/DownloadTransferItemFinder.java similarity index 100% rename from source/ch/cyberduck/cli/DownloadTransferItemFinder.java rename to cli/src/main/java/ch/cyberduck/cli/DownloadTransferItemFinder.java diff --git a/source/ch/cyberduck/cli/GlobTransferItemFinder.java b/cli/src/main/java/ch/cyberduck/cli/GlobTransferItemFinder.java similarity index 100% rename from source/ch/cyberduck/cli/GlobTransferItemFinder.java rename to cli/src/main/java/ch/cyberduck/cli/GlobTransferItemFinder.java diff --git a/source/ch/cyberduck/cli/InteractiveTerminalPromptReader.java b/cli/src/main/java/ch/cyberduck/cli/InteractiveTerminalPromptReader.java similarity index 100% rename from source/ch/cyberduck/cli/InteractiveTerminalPromptReader.java rename to cli/src/main/java/ch/cyberduck/cli/InteractiveTerminalPromptReader.java diff --git a/source/ch/cyberduck/cli/SingleTransferItemFinder.java b/cli/src/main/java/ch/cyberduck/cli/SingleTransferItemFinder.java similarity index 100% rename from source/ch/cyberduck/cli/SingleTransferItemFinder.java rename to cli/src/main/java/ch/cyberduck/cli/SingleTransferItemFinder.java diff --git a/source/ch/cyberduck/cli/Terminal.java b/cli/src/main/java/ch/cyberduck/cli/Terminal.java similarity index 93% rename from source/ch/cyberduck/cli/Terminal.java rename to cli/src/main/java/ch/cyberduck/cli/Terminal.java index 7a26b7bea2..02d667852d 100644 --- a/source/ch/cyberduck/cli/Terminal.java +++ b/cli/src/main/java/ch/cyberduck/cli/Terminal.java @@ -19,18 +19,28 @@ package ch.cyberduck.cli; */ import ch.cyberduck.core.*; +import ch.cyberduck.core.azure.AzureProtocol; +import ch.cyberduck.core.dav.DAVProtocol; +import ch.cyberduck.core.dav.DAVSSLProtocol; import ch.cyberduck.core.editor.DefaultEditorListener; import ch.cyberduck.core.editor.Editor; import ch.cyberduck.core.editor.EditorFactory; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.exception.ConnectionCanceledException; +import ch.cyberduck.core.ftp.FTPProtocol; +import ch.cyberduck.core.ftp.FTPTLSProtocol; +import ch.cyberduck.core.gstorage.GoogleStorageProtocol; import ch.cyberduck.core.io.DisabledStreamListener; +import ch.cyberduck.core.irods.IRODSProtocol; import ch.cyberduck.core.local.Application; import ch.cyberduck.core.local.ApplicationFinder; import ch.cyberduck.core.local.ApplicationFinderFactory; import ch.cyberduck.core.local.ApplicationQuitCallback; +import ch.cyberduck.core.openstack.SwiftProtocol; import ch.cyberduck.core.preferences.Preferences; import ch.cyberduck.core.preferences.PreferencesFactory; +import ch.cyberduck.core.s3.S3Protocol; +import ch.cyberduck.core.sftp.SFTPProtocol; import ch.cyberduck.core.ssl.CertificateStoreX509TrustManager; import ch.cyberduck.core.ssl.DefaultTrustManagerHostnameCallback; import ch.cyberduck.core.ssl.PreferencesX509KeyManager; @@ -101,7 +111,8 @@ public class Terminal { public Terminal(final Preferences defaults, final Options options, final CommandLine input) { this.preferences = defaults; - ProtocolFactory.register(); + ProtocolFactory.register(new FTPProtocol(), new FTPTLSProtocol(), new SFTPProtocol(), new DAVProtocol(), new DAVSSLProtocol(), new SwiftProtocol(), new S3Protocol(), + new GoogleStorageProtocol(), new AzureProtocol(), new IRODSProtocol()); this.options = options; if(log.isInfoEnabled()) { log.info(String.format("Parsed options %s from input %s", options, input)); @@ -199,7 +210,7 @@ public class Terminal { if(new CommandLinePathParser(input).parse(uri).getAbsolute().startsWith(TildePathExpander.PREFIX)) { // Already connect here because the tilde expander may need to use the current working directory this.connect(session); - remote = new TildePathExpander(session).expand(new CommandLinePathParser(input).parse(uri)); + remote = new TildePathExpander(session.workdir()).expand(new CommandLinePathParser(input).parse(uri)); } else { remote = new CommandLinePathParser(input).parse(uri); @@ -224,15 +235,16 @@ public class Terminal { break; case copy: final Host target = new CommandLineUriParser(input).parse(input.getOptionValues(action.name())[1]); - transfer = new CopyTransfer(host, target, + transfer = new CopyTransfer(host, + SessionFactory.create(target, + new CertificateStoreX509TrustManager( + new DefaultTrustManagerHostnameCallback(target), + new TerminalCertificateStore(reader) + ), + new PreferencesX509KeyManager(new TerminalCertificateStore(reader))), Collections.singletonMap( remote, new CommandLinePathParser(input).parse(input.getOptionValues(action.name())[1]) - ), - new CertificateStoreX509TrustManager( - new DefaultTrustManagerHostnameCallback(target), - new TerminalCertificateStore(reader) - ), - new PreferencesX509KeyManager(new TerminalCertificateStore(reader)) + ) ); break; default: diff --git a/source/ch/cyberduck/cli/TerminalAction.java b/cli/src/main/java/ch/cyberduck/cli/TerminalAction.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalAction.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalAction.java diff --git a/source/ch/cyberduck/cli/TerminalActionFinder.java b/cli/src/main/java/ch/cyberduck/cli/TerminalActionFinder.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalActionFinder.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalActionFinder.java diff --git a/source/ch/cyberduck/cli/TerminalAlertCallback.java b/cli/src/main/java/ch/cyberduck/cli/TerminalAlertCallback.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalAlertCallback.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalAlertCallback.java diff --git a/source/ch/cyberduck/cli/TerminalBackgroundAction.java b/cli/src/main/java/ch/cyberduck/cli/TerminalBackgroundAction.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalBackgroundAction.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalBackgroundAction.java diff --git a/source/ch/cyberduck/cli/TerminalCertificateStore.java b/cli/src/main/java/ch/cyberduck/cli/TerminalCertificateStore.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalCertificateStore.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalCertificateStore.java diff --git a/source/ch/cyberduck/cli/TerminalController.java b/cli/src/main/java/ch/cyberduck/cli/TerminalController.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalController.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalController.java diff --git a/source/ch/cyberduck/cli/TerminalHelpFormatter.java b/cli/src/main/java/ch/cyberduck/cli/TerminalHelpFormatter.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalHelpFormatter.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalHelpFormatter.java diff --git a/source/ch/cyberduck/cli/TerminalHelpPrinter.java b/cli/src/main/java/ch/cyberduck/cli/TerminalHelpPrinter.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalHelpPrinter.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalHelpPrinter.java diff --git a/source/ch/cyberduck/cli/TerminalHostKeyVerifier.java b/cli/src/main/java/ch/cyberduck/cli/TerminalHostKeyVerifier.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalHostKeyVerifier.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalHostKeyVerifier.java diff --git a/source/ch/cyberduck/cli/TerminalListProgressListener.java b/cli/src/main/java/ch/cyberduck/cli/TerminalListProgressListener.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalListProgressListener.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalListProgressListener.java diff --git a/source/ch/cyberduck/cli/TerminalLoggingAppender.java b/cli/src/main/java/ch/cyberduck/cli/TerminalLoggingAppender.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalLoggingAppender.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalLoggingAppender.java diff --git a/source/ch/cyberduck/cli/TerminalLoginCallback.java b/cli/src/main/java/ch/cyberduck/cli/TerminalLoginCallback.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalLoginCallback.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalLoginCallback.java diff --git a/source/ch/cyberduck/cli/TerminalLoginService.java b/cli/src/main/java/ch/cyberduck/cli/TerminalLoginService.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalLoginService.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalLoginService.java diff --git a/source/ch/cyberduck/cli/TerminalNotification.java b/cli/src/main/java/ch/cyberduck/cli/TerminalNotification.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalNotification.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalNotification.java diff --git a/source/ch/cyberduck/cli/TerminalOptionsBuilder.java b/cli/src/main/java/ch/cyberduck/cli/TerminalOptionsBuilder.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalOptionsBuilder.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalOptionsBuilder.java diff --git a/source/ch/cyberduck/cli/TerminalOptionsInputValidator.java b/cli/src/main/java/ch/cyberduck/cli/TerminalOptionsInputValidator.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalOptionsInputValidator.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalOptionsInputValidator.java diff --git a/source/ch/cyberduck/cli/TerminalPreferences.java b/cli/src/main/java/ch/cyberduck/cli/TerminalPreferences.java similarity index 98% rename from source/ch/cyberduck/cli/TerminalPreferences.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalPreferences.java index fd9e7d52ea..1702ce6cbc 100644 --- a/source/ch/cyberduck/cli/TerminalPreferences.java +++ b/cli/src/main/java/ch/cyberduck/cli/TerminalPreferences.java @@ -44,7 +44,6 @@ import ch.cyberduck.core.preferences.StaticApplicationResourcesFinder; import ch.cyberduck.core.preferences.UserHomeSupportDirectoryFinder; import ch.cyberduck.core.proxy.EnvironmentVariableProxyFinder; import ch.cyberduck.core.proxy.SystemConfigurationProxy; -import ch.cyberduck.core.resources.NSImageIconCache; import ch.cyberduck.core.threading.AutoreleaseActionOperationBatcher; import ch.cyberduck.core.transfer.Transfer; import ch.cyberduck.core.transfer.TransferAction; @@ -89,7 +88,6 @@ public class TerminalPreferences extends MemoryPreferences { defaults.put("factory.reachability.class", SystemConfigurationReachability.class.getName()); defaults.put("factory.quarantine.class", LaunchServicesQuarantineService.class.getName()); defaults.put("factory.iconservice.class", WorkspaceIconService.class.getName()); - defaults.put("factory.iconcache.class", NSImageIconCache.class.getName()); defaults.put("factory.filedescriptor.class", LaunchServicesFileDescriptor.class.getName()); defaults.put("factory.workingdirectory.class", FileManagerWorkingDirectoryFinder.class.getName()); defaults.put("factory.symlink.class", WorkspaceSymlinkFeature.class.getName()); diff --git a/source/ch/cyberduck/cli/TerminalProgressListener.java b/cli/src/main/java/ch/cyberduck/cli/TerminalProgressListener.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalProgressListener.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalProgressListener.java diff --git a/source/ch/cyberduck/cli/TerminalPromptReader.java b/cli/src/main/java/ch/cyberduck/cli/TerminalPromptReader.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalPromptReader.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalPromptReader.java diff --git a/source/ch/cyberduck/cli/TerminalStreamListener.java b/cli/src/main/java/ch/cyberduck/cli/TerminalStreamListener.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalStreamListener.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalStreamListener.java diff --git a/source/ch/cyberduck/cli/TerminalTranscriptListener.java b/cli/src/main/java/ch/cyberduck/cli/TerminalTranscriptListener.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalTranscriptListener.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalTranscriptListener.java diff --git a/source/ch/cyberduck/cli/TerminalTransferBackgroundAction.java b/cli/src/main/java/ch/cyberduck/cli/TerminalTransferBackgroundAction.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalTransferBackgroundAction.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalTransferBackgroundAction.java diff --git a/source/ch/cyberduck/cli/TerminalTransferErrorCallback.java b/cli/src/main/java/ch/cyberduck/cli/TerminalTransferErrorCallback.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalTransferErrorCallback.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalTransferErrorCallback.java diff --git a/source/ch/cyberduck/cli/TerminalTransferFactory.java b/cli/src/main/java/ch/cyberduck/cli/TerminalTransferFactory.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalTransferFactory.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalTransferFactory.java diff --git a/source/ch/cyberduck/cli/TerminalTransferListener.java b/cli/src/main/java/ch/cyberduck/cli/TerminalTransferListener.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalTransferListener.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalTransferListener.java diff --git a/source/ch/cyberduck/cli/TerminalTransferPrompt.java b/cli/src/main/java/ch/cyberduck/cli/TerminalTransferPrompt.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalTransferPrompt.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalTransferPrompt.java diff --git a/source/ch/cyberduck/cli/TerminalVersionPrinter.java b/cli/src/main/java/ch/cyberduck/cli/TerminalVersionPrinter.java similarity index 100% rename from source/ch/cyberduck/cli/TerminalVersionPrinter.java rename to cli/src/main/java/ch/cyberduck/cli/TerminalVersionPrinter.java diff --git a/source/ch/cyberduck/cli/TransferItemFinder.java b/cli/src/main/java/ch/cyberduck/cli/TransferItemFinder.java similarity index 100% rename from source/ch/cyberduck/cli/TransferItemFinder.java rename to cli/src/main/java/ch/cyberduck/cli/TransferItemFinder.java diff --git a/source/ch/cyberduck/cli/UploadTransferItemFinder.java b/cli/src/main/java/ch/cyberduck/cli/UploadTransferItemFinder.java similarity index 100% rename from source/ch/cyberduck/cli/UploadTransferItemFinder.java rename to cli/src/main/java/ch/cyberduck/cli/UploadTransferItemFinder.java diff --git a/source/ch/cyberduck/cli/WindowsTerminal.cs b/cli/src/main/java/ch/cyberduck/cli/WindowsTerminal.cs similarity index 97% rename from source/ch/cyberduck/cli/WindowsTerminal.cs rename to cli/src/main/java/ch/cyberduck/cli/WindowsTerminal.cs index 5a5c7cdc85..1b09371b35 100644 --- a/source/ch/cyberduck/cli/WindowsTerminal.cs +++ b/cli/src/main/java/ch/cyberduck/cli/WindowsTerminal.cs @@ -1,44 +1,44 @@ -// -// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using ch.cyberduck.cli; -using ch.cyberduck.core.preferences; -using org.apache.commons.cli; -using Console = System.Console; - -namespace Ch.Cyberduck.Cli -{ - internal class WindowsTerminal : Terminal - { - public WindowsTerminal(Options options, CommandLine input) - : base(new WindowsTerminalPreferences(), options, input) - { - } - - private static void Main(string[] args) - { - // set UTF-8 encoding, tested in mintty (cygwin, babun) and cmd.exe - java.lang.System.setProperty("file.encoding", "UTF-8"); - Console.OutputEncoding = System.Text.Encoding.UTF8; - - Preferences defaults = new WindowsTerminalPreferences(); - PreferencesFactory.set(defaults); - open(args, defaults); - } - } +// +// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using ch.cyberduck.cli; +using ch.cyberduck.core.preferences; +using org.apache.commons.cli; +using Console = System.Console; + +namespace Ch.Cyberduck.Cli +{ + internal class WindowsTerminal : Terminal + { + public WindowsTerminal(Options options, CommandLine input) + : base(new WindowsTerminalPreferences(), options, input) + { + } + + private static void Main(string[] args) + { + // set UTF-8 encoding, tested in mintty (cygwin, babun) and cmd.exe + java.lang.System.setProperty("file.encoding", "UTF-8"); + Console.OutputEncoding = System.Text.Encoding.UTF8; + + Preferences defaults = new WindowsTerminalPreferences(); + PreferencesFactory.set(defaults); + open(args, defaults); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/cli/WindowsTerminalPreferences.cs b/cli/src/main/java/ch/cyberduck/cli/WindowsTerminalPreferences.cs similarity index 97% rename from source/ch/cyberduck/cli/WindowsTerminalPreferences.cs rename to cli/src/main/java/ch/cyberduck/cli/WindowsTerminalPreferences.cs index 0561e2977a..dc85ee18e3 100644 --- a/source/ch/cyberduck/cli/WindowsTerminalPreferences.cs +++ b/cli/src/main/java/ch/cyberduck/cli/WindowsTerminalPreferences.cs @@ -1,53 +1,53 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.IO; -using System.Reflection; -using ch.cyberduck.cli; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Core.Editor; -using Ch.Cyberduck.Core.I18n; -using Ch.Cyberduck.Core.Local; -using Ch.Cyberduck.Core.Proxy; -using Ch.Cyberduck.Core.Diagnostics; -using Ch.Cyberduck.Core.Preferences; - -namespace Ch.Cyberduck.Cli -{ - internal class WindowsTerminalPreferences : TerminalPreferences - { - protected override void setFactories() - { - base.setFactories(); - - defaults.put("factory.locale.class", typeof (DictionaryLocale).AssemblyQualifiedName); - defaults.put("factory.supportdirectoryfinder.class", - typeof (RoamingSupportDirectoryFinder).AssemblyQualifiedName); - defaults.put("factory.applicationresourcesfinder.class", - typeof (AssemblyApplicationResourcesFinder).AssemblyQualifiedName); - defaults.put("factory.editorfactory.class", typeof (SystemWatchEditorFactory).AssemblyQualifiedName); - defaults.put("factory.applicationlauncher.class", typeof (WindowsApplicationLauncher).AssemblyQualifiedName); - defaults.put("factory.applicationfinder.class", typeof (RegistryApplicationFinder).AssemblyQualifiedName); - defaults.put("factory.local.class", typeof (SystemLocal).AssemblyQualifiedName); - defaults.put("factory.passwordstore.class", typeof (DataProtectorPasswordStore).AssemblyQualifiedName); - defaults.put("factory.proxy.class", typeof (SystemProxy).AssemblyQualifiedName); - defaults.put("factory.reachability.class", typeof (TcpReachability).AssemblyQualifiedName); - defaults.put("factory.filedescriptor.class", typeof (Win32FileDescriptor).AssemblyQualifiedName); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.IO; +using System.Reflection; +using ch.cyberduck.cli; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Core.Editor; +using Ch.Cyberduck.Core.I18n; +using Ch.Cyberduck.Core.Local; +using Ch.Cyberduck.Core.Proxy; +using Ch.Cyberduck.Core.Diagnostics; +using Ch.Cyberduck.Core.Preferences; + +namespace Ch.Cyberduck.Cli +{ + internal class WindowsTerminalPreferences : TerminalPreferences + { + protected override void setFactories() + { + base.setFactories(); + + defaults.put("factory.locale.class", typeof (DictionaryLocale).AssemblyQualifiedName); + defaults.put("factory.supportdirectoryfinder.class", + typeof (RoamingSupportDirectoryFinder).AssemblyQualifiedName); + defaults.put("factory.applicationresourcesfinder.class", + typeof (AssemblyApplicationResourcesFinder).AssemblyQualifiedName); + defaults.put("factory.editorfactory.class", typeof (SystemWatchEditorFactory).AssemblyQualifiedName); + defaults.put("factory.applicationlauncher.class", typeof (WindowsApplicationLauncher).AssemblyQualifiedName); + defaults.put("factory.applicationfinder.class", typeof (RegistryApplicationFinder).AssemblyQualifiedName); + defaults.put("factory.local.class", typeof (SystemLocal).AssemblyQualifiedName); + defaults.put("factory.passwordstore.class", typeof (DataProtectorPasswordStore).AssemblyQualifiedName); + defaults.put("factory.proxy.class", typeof (SystemProxy).AssemblyQualifiedName); + defaults.put("factory.reachability.class", typeof (TcpReachability).AssemblyQualifiedName); + defaults.put("factory.filedescriptor.class", typeof (Win32FileDescriptor).AssemblyQualifiedName); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/cli/launcher.h b/cli/src/main/objc/launcher.h similarity index 100% rename from source/ch/cyberduck/cli/launcher.h rename to cli/src/main/objc/launcher.h diff --git a/source/ch/cyberduck/cli/launcher.m b/cli/src/main/objc/launcher.m similarity index 100% rename from source/ch/cyberduck/cli/launcher.m rename to cli/src/main/objc/launcher.m diff --git a/source/ch/cyberduck/cli/main.m b/cli/src/main/objc/main.m similarity index 100% rename from source/ch/cyberduck/cli/main.m rename to cli/src/main/objc/main.m diff --git a/test/ch/cyberduck/cli/CommandLinePathParserTest.java b/cli/src/test/java/ch/cyberduck/cli/CommandLinePathParserTest.java similarity index 89% rename from test/ch/cyberduck/cli/CommandLinePathParserTest.java rename to cli/src/test/java/ch/cyberduck/cli/CommandLinePathParserTest.java index efa0366c35..71450c0909 100644 --- a/test/ch/cyberduck/cli/CommandLinePathParserTest.java +++ b/cli/src/test/java/ch/cyberduck/cli/CommandLinePathParserTest.java @@ -18,12 +18,14 @@ package ch.cyberduck.cli; * feedback@cyberduck.io */ -import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.DeserializerFactory; import ch.cyberduck.core.Local; import ch.cyberduck.core.Path; import ch.cyberduck.core.Profile; import ch.cyberduck.core.ProtocolFactory; +import ch.cyberduck.core.ftp.FTPTLSProtocol; +import ch.cyberduck.core.openstack.SwiftProtocol; +import ch.cyberduck.core.s3.S3Protocol; import ch.cyberduck.core.serializer.impl.dd.PlistDeserializer; import ch.cyberduck.core.serializer.impl.dd.ProfilePlistReader; @@ -38,13 +40,14 @@ import java.util.EnumSet; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -public class CommandLinePathParserTest extends AbstractTestCase { +public class CommandLinePathParserTest { @Test public void testParse() throws Exception { final CommandLineParser parser = new PosixParser(); final CommandLine input = parser.parse(new Options(), new String[]{}); + ProtocolFactory.register(new FTPTLSProtocol()); assertEquals(new Path("/", EnumSet.of(Path.Type.directory)), new CommandLinePathParser(input).parse("ftps://u@test.cyberduck.ch/")); assertEquals(new Path("/d", EnumSet.of(Path.Type.directory)), @@ -52,6 +55,7 @@ public class CommandLinePathParserTest extends AbstractTestCase { assertEquals(new Path("/d", EnumSet.of(Path.Type.file)), new CommandLinePathParser(input).parse("ftps://u@test.cyberduck.ch/d")); + ProtocolFactory.register(new S3Protocol()); assertEquals(new Path("/test.cyberduck.ch", EnumSet.of(Path.Type.directory)), new CommandLinePathParser(input).parse("s3://u@test.cyberduck.ch/")); assertEquals(new Path("/test.cyberduck.ch/d", EnumSet.of(Path.Type.directory)), @@ -63,8 +67,9 @@ public class CommandLinePathParserTest extends AbstractTestCase { @Test public void testParseProfile() throws Exception { final ProfilePlistReader reader = new ProfilePlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); + ProtocolFactory.register(new SwiftProtocol()); final Profile profile = reader.read( - new Local("profiles/Rackspace US.cyberduckprofile") + new Local("../profiles/Rackspace US.cyberduckprofile") ); assertNotNull(profile); ProtocolFactory.register(profile); diff --git a/test/ch/cyberduck/cli/CommandLineUriParserTest.java b/cli/src/test/java/ch/cyberduck/cli/CommandLineUriParserTest.java similarity index 79% rename from test/ch/cyberduck/cli/CommandLineUriParserTest.java rename to cli/src/test/java/ch/cyberduck/cli/CommandLineUriParserTest.java index a054bbe1d5..2c363858bc 100644 --- a/test/ch/cyberduck/cli/CommandLineUriParserTest.java +++ b/cli/src/test/java/ch/cyberduck/cli/CommandLineUriParserTest.java @@ -18,10 +18,11 @@ package ch.cyberduck.cli; * feedback@cyberduck.io */ -import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Credentials; import ch.cyberduck.core.Host; import ch.cyberduck.core.ProtocolFactory; +import ch.cyberduck.core.ftp.FTPTLSProtocol; +import ch.cyberduck.core.s3.S3Protocol; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; @@ -31,16 +32,18 @@ import org.junit.Test; import static org.junit.Assert.assertTrue; -public class CommandLineUriParserTest extends AbstractTestCase { +public class CommandLineUriParserTest { @Test public void testParse() throws Exception { final CommandLineParser parser = new PosixParser(); final CommandLine input = parser.parse(new Options(), new String[]{}); - assertTrue(new Host(ProtocolFactory.S3_SSL, "s3.amazonaws.com", 443, "/cyberduck-test/key", new Credentials("AWS456", null)) + ProtocolFactory.register(new S3Protocol()); + assertTrue(new Host(new S3Protocol(), "s3.amazonaws.com", 443, "/cyberduck-test/key", new Credentials("AWS456", null)) .compareTo(new CommandLineUriParser(input).parse("s3://AWS456@cyberduck-test/key")) == 0); - assertTrue(new Host(ProtocolFactory.FTP_TLS, "cyberduck.io", 55, "/cyberduck-test/key", new Credentials("anonymous", null)) + ProtocolFactory.register(new FTPTLSProtocol()); + assertTrue(new Host(new FTPTLSProtocol(), "cyberduck.io", 55, "/cyberduck-test/key", new Credentials("anonymous", null)) .compareTo(new CommandLineUriParser(input).parse("ftps://cyberduck.io:55/folder")) == 0); } diff --git a/test/ch/cyberduck/cli/DeletePathFinderTest.java b/cli/src/test/java/ch/cyberduck/cli/DeletePathFinderTest.java similarity index 96% rename from test/ch/cyberduck/cli/DeletePathFinderTest.java rename to cli/src/test/java/ch/cyberduck/cli/DeletePathFinderTest.java index aacef8e3d6..305c71c279 100644 --- a/test/ch/cyberduck/cli/DeletePathFinderTest.java +++ b/cli/src/test/java/ch/cyberduck/cli/DeletePathFinderTest.java @@ -17,7 +17,6 @@ package ch.cyberduck.cli; * Bug fixes, suggestions and comments should be sent to feedback@cyberduck.ch */ -import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Path; import ch.cyberduck.core.transfer.TransferItem; @@ -33,7 +32,7 @@ import static org.junit.Assert.assertTrue; /** * @version $Id$ */ -public class DeletePathFinderTest extends AbstractTestCase { +public class DeletePathFinderTest { @Test public void testFindDirectory() throws Exception { diff --git a/test/ch/cyberduck/cli/DownloadGlobFilterTest.java b/cli/src/test/java/ch/cyberduck/cli/DownloadGlobFilterTest.java similarity index 91% rename from test/ch/cyberduck/cli/DownloadGlobFilterTest.java rename to cli/src/test/java/ch/cyberduck/cli/DownloadGlobFilterTest.java index daa5f7d24b..9eb526a6d1 100644 --- a/test/ch/cyberduck/cli/DownloadGlobFilterTest.java +++ b/cli/src/test/java/ch/cyberduck/cli/DownloadGlobFilterTest.java @@ -17,7 +17,6 @@ package ch.cyberduck.cli; * Bug fixes, suggestions and comments should be sent to feedback@cyberduck.ch */ -import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Path; import org.junit.Test; @@ -30,7 +29,7 @@ import static org.junit.Assert.assertTrue; /** * @version $Id$ */ -public class DownloadGlobFilterTest extends AbstractTestCase { +public class DownloadGlobFilterTest { @Test public void testAccept() throws Exception { diff --git a/test/ch/cyberduck/cli/GlobTransferItemFinderTest.java b/cli/src/test/java/ch/cyberduck/cli/GlobTransferItemFinderTest.java similarity index 96% rename from test/ch/cyberduck/cli/GlobTransferItemFinderTest.java rename to cli/src/test/java/ch/cyberduck/cli/GlobTransferItemFinderTest.java index ece28fcc5f..428389ba91 100644 --- a/test/ch/cyberduck/cli/GlobTransferItemFinderTest.java +++ b/cli/src/test/java/ch/cyberduck/cli/GlobTransferItemFinderTest.java @@ -18,7 +18,6 @@ package ch.cyberduck.cli; * feedback@cyberduck.io */ -import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Local; import ch.cyberduck.core.LocalFactory; import ch.cyberduck.core.Path; @@ -35,7 +34,7 @@ import java.util.Set; import static org.junit.Assert.*; -public class GlobTransferItemFinderTest extends AbstractTestCase { +public class GlobTransferItemFinderTest { @Test public void testNoLocalInOptionsDownload() throws Exception { diff --git a/test/ch/cyberduck/cli/SingleTransferItemFinderTest.java b/cli/src/test/java/ch/cyberduck/cli/SingleTransferItemFinderTest.java similarity index 98% rename from test/ch/cyberduck/cli/SingleTransferItemFinderTest.java rename to cli/src/test/java/ch/cyberduck/cli/SingleTransferItemFinderTest.java index 8cdfcfc0f3..e41c362854 100644 --- a/test/ch/cyberduck/cli/SingleTransferItemFinderTest.java +++ b/cli/src/test/java/ch/cyberduck/cli/SingleTransferItemFinderTest.java @@ -18,7 +18,6 @@ package ch.cyberduck.cli; * feedback@cyberduck.io */ -import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Local; import ch.cyberduck.core.LocalFactory; import ch.cyberduck.core.Path; @@ -35,7 +34,7 @@ import java.util.Set; import static org.junit.Assert.*; -public class SingleTransferItemFinderTest extends AbstractTestCase { +public class SingleTransferItemFinderTest { @Test public void testNoLocalInOptionsDownload() throws Exception { diff --git a/test/ch/cyberduck/cli/TerminalAlertCallbackTest.java b/cli/src/test/java/ch/cyberduck/cli/TerminalAlertCallbackTest.java similarity index 80% rename from test/ch/cyberduck/cli/TerminalAlertCallbackTest.java rename to cli/src/test/java/ch/cyberduck/cli/TerminalAlertCallbackTest.java index b9d990347a..3cf776b2d1 100644 --- a/test/ch/cyberduck/cli/TerminalAlertCallbackTest.java +++ b/cli/src/test/java/ch/cyberduck/cli/TerminalAlertCallbackTest.java @@ -17,8 +17,8 @@ package ch.cyberduck.cli; * Bug fixes, suggestions and comments should be sent to feedback@cyberduck.ch */ -import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Host; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import org.junit.Test; @@ -28,10 +28,10 @@ import static org.junit.Assert.assertFalse; /** * @version $Id$ */ -public class TerminalAlertCallbackTest extends AbstractTestCase { +public class TerminalAlertCallbackTest { @Test public void testAlert() throws Exception { - assertFalse(new TerminalAlertCallback().alert(new Host("localhost"), new BackgroundException(), new StringBuilder())); + assertFalse(new TerminalAlertCallback().alert(new Host(new TestProtocol()), new BackgroundException(), new StringBuilder())); } } \ No newline at end of file diff --git a/test/ch/cyberduck/cli/TerminalHelpPrinterTest.java b/cli/src/test/java/ch/cyberduck/cli/TerminalHelpPrinterTest.java similarity index 100% rename from test/ch/cyberduck/cli/TerminalHelpPrinterTest.java rename to cli/src/test/java/ch/cyberduck/cli/TerminalHelpPrinterTest.java diff --git a/test/ch/cyberduck/cli/TerminalListProgressListenerTest.java b/cli/src/test/java/ch/cyberduck/cli/TerminalListProgressListenerTest.java similarity index 92% rename from test/ch/cyberduck/cli/TerminalListProgressListenerTest.java rename to cli/src/test/java/ch/cyberduck/cli/TerminalListProgressListenerTest.java index f5e2fe53f5..017564f7f2 100644 --- a/test/ch/cyberduck/cli/TerminalListProgressListenerTest.java +++ b/cli/src/test/java/ch/cyberduck/cli/TerminalListProgressListenerTest.java @@ -17,7 +17,6 @@ package ch.cyberduck.cli; * Bug fixes, suggestions and comments should be sent to feedback@cyberduck.ch */ -import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.AttributedList; import ch.cyberduck.core.Path; @@ -29,7 +28,7 @@ import java.util.EnumSet; /** * @version $Id$ */ -public class TerminalListProgressListenerTest extends AbstractTestCase { +public class TerminalListProgressListenerTest { @Test public void testChunkEmpty() throws Exception { diff --git a/test/ch/cyberduck/cli/TerminalLoginCallbackTest.java b/cli/src/test/java/ch/cyberduck/cli/TerminalLoginCallbackTest.java similarity index 84% rename from test/ch/cyberduck/cli/TerminalLoginCallbackTest.java rename to cli/src/test/java/ch/cyberduck/cli/TerminalLoginCallbackTest.java index 8140236c4b..59448a1bd4 100644 --- a/test/ch/cyberduck/cli/TerminalLoginCallbackTest.java +++ b/cli/src/test/java/ch/cyberduck/cli/TerminalLoginCallbackTest.java @@ -17,8 +17,7 @@ package ch.cyberduck.cli; * Bug fixes, suggestions and comments should be sent to feedback@cyberduck.ch */ -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.ProtocolFactory; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.LoginCanceledException; import org.junit.Test; @@ -26,7 +25,7 @@ import org.junit.Test; /** * @version $Id$ */ -public class TerminalLoginCallbackTest extends AbstractTestCase { +public class TerminalLoginCallbackTest { @Test(expected = LoginCanceledException.class) public void testWarn() throws Exception { @@ -35,6 +34,6 @@ public class TerminalLoginCallbackTest extends AbstractTestCase { public boolean prompt(final String message) { return false; } - }).warn(ProtocolFactory.FTP, "", "", "", "", ""); + }).warn(new TestProtocol(), "", "", "", "", ""); } } \ No newline at end of file diff --git a/test/ch/cyberduck/cli/TerminalOptionsBuilderTest.java b/cli/src/test/java/ch/cyberduck/cli/TerminalOptionsBuilderTest.java similarity index 89% rename from test/ch/cyberduck/cli/TerminalOptionsBuilderTest.java rename to cli/src/test/java/ch/cyberduck/cli/TerminalOptionsBuilderTest.java index 5f3e7e40de..979fd00bc3 100644 --- a/test/ch/cyberduck/cli/TerminalOptionsBuilderTest.java +++ b/cli/src/test/java/ch/cyberduck/cli/TerminalOptionsBuilderTest.java @@ -17,8 +17,6 @@ package ch.cyberduck.cli; * Bug fixes, suggestions and comments should be sent to feedback@cyberduck.ch */ -import ch.cyberduck.core.AbstractTestCase; - import org.junit.Test; import static org.junit.Assert.assertNotNull; @@ -26,7 +24,7 @@ import static org.junit.Assert.assertNotNull; /** * @version $Id$ */ -public class TerminalOptionsBuilderTest extends AbstractTestCase { +public class TerminalOptionsBuilderTest { @Test public void testOptions() throws Exception { diff --git a/test/ch/cyberduck/cli/TerminalOptionsInputValidatorTest.java b/cli/src/test/java/ch/cyberduck/cli/TerminalOptionsInputValidatorTest.java similarity index 92% rename from test/ch/cyberduck/cli/TerminalOptionsInputValidatorTest.java rename to cli/src/test/java/ch/cyberduck/cli/TerminalOptionsInputValidatorTest.java index f32c89767c..f4566d2816 100644 --- a/test/ch/cyberduck/cli/TerminalOptionsInputValidatorTest.java +++ b/cli/src/test/java/ch/cyberduck/cli/TerminalOptionsInputValidatorTest.java @@ -18,14 +18,12 @@ package ch.cyberduck.cli; * feedback@cyberduck.io */ -import ch.cyberduck.core.AbstractTestCase; - import org.junit.Test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -public class TerminalOptionsInputValidatorTest extends AbstractTestCase { +public class TerminalOptionsInputValidatorTest { @Test public void testValidate() throws Exception { diff --git a/test/ch/cyberduck/cli/TerminalProgressListenerTest.java b/cli/src/test/java/ch/cyberduck/cli/TerminalProgressListenerTest.java similarity index 89% rename from test/ch/cyberduck/cli/TerminalProgressListenerTest.java rename to cli/src/test/java/ch/cyberduck/cli/TerminalProgressListenerTest.java index 32eedc7325..39f97f84b1 100644 --- a/test/ch/cyberduck/cli/TerminalProgressListenerTest.java +++ b/cli/src/test/java/ch/cyberduck/cli/TerminalProgressListenerTest.java @@ -17,14 +17,12 @@ package ch.cyberduck.cli; * Bug fixes, suggestions and comments should be sent to feedback@cyberduck.ch */ -import ch.cyberduck.core.AbstractTestCase; - import org.junit.Test; /** * @version $Id$ */ -public class TerminalProgressListenerTest extends AbstractTestCase { +public class TerminalProgressListenerTest { @Test public void testNullMessage() throws Exception { diff --git a/test/ch/cyberduck/cli/TerminalStreamListenerTest.java b/cli/src/test/java/ch/cyberduck/cli/TerminalStreamListenerTest.java similarity index 87% rename from test/ch/cyberduck/cli/TerminalStreamListenerTest.java rename to cli/src/test/java/ch/cyberduck/cli/TerminalStreamListenerTest.java index 1c805c3d42..af61c2d8b3 100644 --- a/test/ch/cyberduck/cli/TerminalStreamListenerTest.java +++ b/cli/src/test/java/ch/cyberduck/cli/TerminalStreamListenerTest.java @@ -17,8 +17,8 @@ package ch.cyberduck.cli; * Bug fixes, suggestions and comments should be sent to feedback@cyberduck.ch */ -import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Host; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.transfer.DownloadTransfer; import ch.cyberduck.core.transfer.TransferItem; import ch.cyberduck.core.transfer.TransferSpeedometer; @@ -30,11 +30,11 @@ import java.util.Collections; /** * @version $Id$ */ -public class TerminalStreamListenerTest extends AbstractTestCase { +public class TerminalStreamListenerTest { @Test public void testRecv() throws Exception { - final DownloadTransfer transfer = new DownloadTransfer(new Host("localhost"), Collections.emptyList()); + final DownloadTransfer transfer = new DownloadTransfer(new Host(new TestProtocol()), Collections.emptyList()); final TerminalStreamListener l = new TerminalStreamListener(new TransferSpeedometer(transfer)); l.recv(1L); transfer.addSize(1L); @@ -43,7 +43,7 @@ public class TerminalStreamListenerTest extends AbstractTestCase { @Test public void testSent() throws Exception { - final DownloadTransfer transfer = new DownloadTransfer(new Host("localhost"), Collections.emptyList()); + final DownloadTransfer transfer = new DownloadTransfer(new Host(new TestProtocol()), Collections.emptyList()); final TerminalStreamListener l = new TerminalStreamListener(new TransferSpeedometer(transfer)); l.sent(1L); transfer.addSize(1L); diff --git a/test/ch/cyberduck/cli/TerminalTransferFactoryTest.java b/cli/src/test/java/ch/cyberduck/cli/TerminalTransferFactoryTest.java similarity index 80% rename from test/ch/cyberduck/cli/TerminalTransferFactoryTest.java rename to cli/src/test/java/ch/cyberduck/cli/TerminalTransferFactoryTest.java index 231788eaa7..3958b42496 100644 --- a/test/ch/cyberduck/cli/TerminalTransferFactoryTest.java +++ b/cli/src/test/java/ch/cyberduck/cli/TerminalTransferFactoryTest.java @@ -17,13 +17,13 @@ package ch.cyberduck.cli; * Bug fixes, suggestions and comments should be sent to feedback@cyberduck.ch */ -import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.AttributedList; import ch.cyberduck.core.DisabledListProgressListener; import ch.cyberduck.core.Host; +import ch.cyberduck.core.Local; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathCache; -import ch.cyberduck.core.test.NullLocal; +import ch.cyberduck.core.openstack.SwiftProtocol; import ch.cyberduck.core.transfer.Transfer; import ch.cyberduck.core.transfer.TransferItem; @@ -39,14 +39,14 @@ import static org.junit.Assert.*; /** * @version $Id$ */ -public class TerminalTransferFactoryTest extends AbstractTestCase { +public class TerminalTransferFactoryTest { @Test public void testCreate() throws Exception { final CommandLineParser parser = new PosixParser(); final Transfer transfer = new TerminalTransferFactory().create(parser.parse(TerminalOptionsBuilder.options(), new String[]{"--download", "rackspace://cdn.cyberduck.ch/remote"}), - new Host("localhost"), new Path("/remote", EnumSet.of(Path.Type.directory)), Collections.emptyList()); + new Host(new SwiftProtocol()), new Path("/remote", EnumSet.of(Path.Type.directory)), Collections.emptyList()); assertEquals(Transfer.Type.download, transfer.getType()); } @@ -55,15 +55,15 @@ public class TerminalTransferFactoryTest extends AbstractTestCase { final CommandLineParser parser = new PosixParser(); final Transfer transfer = new TerminalTransferFactory().create(parser.parse(TerminalOptionsBuilder.options(), new String[]{"--download", "rackspace://cdn.cyberduck.ch/remote/*.css"}), - new Host("localhost"), new Path("/remote/*.css", EnumSet.of(Path.Type.directory)), Collections.emptyList()); + new Host(new SwiftProtocol()), new Path("/remote/*.css", EnumSet.of(Path.Type.directory)), Collections.emptyList()); assertEquals(Transfer.Type.download, transfer.getType()); final PathCache cache = new PathCache(1); transfer.withCache(cache); cache.clear(); cache.put(new Path("/remote", EnumSet.of(Path.Type.directory)), new AttributedList(Collections.singletonList(new Path("/remote/file.css", EnumSet.of(Path.Type.file))))); - assertFalse(transfer.list(null, new Path("/remote", EnumSet.of(Path.Type.directory)), new NullLocal("/tmp"), new DisabledListProgressListener()).isEmpty()); + assertFalse(transfer.list(null, new Path("/remote", EnumSet.of(Path.Type.directory)), new Local("/tmp"), new DisabledListProgressListener()).isEmpty()); cache.clear(); cache.put(new Path("/remote", EnumSet.of(Path.Type.directory)), new AttributedList(Collections.singletonList(new Path("/remote/file.png", EnumSet.of(Path.Type.file))))); - assertTrue(transfer.list(null, new Path("/remote", EnumSet.of(Path.Type.directory)), new NullLocal("/tmp"), new DisabledListProgressListener()).isEmpty()); + assertTrue(transfer.list(null, new Path("/remote", EnumSet.of(Path.Type.directory)), new Local("/tmp"), new DisabledListProgressListener()).isEmpty()); } } \ No newline at end of file diff --git a/codesign.xml b/codesign.xml new file mode 100644 index 0000000000..6fbab8673a --- /dev/null +++ b/codesign.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/pom.xml b/config/pom.xml new file mode 100644 index 0000000000..c94ae0f8a6 --- /dev/null +++ b/config/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + ch.cyberduck + parent + 4.8.0-SNAPSHOT + + config + jar + + diff --git a/config/src/main/resources/log4j-cli.xml b/config/src/main/resources/log4j-cli.xml new file mode 100644 index 0000000000..b61b2a3e04 --- /dev/null +++ b/config/src/main/resources/log4j-cli.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + diff --git a/config/src/main/resources/log4j-cocoa.xml b/config/src/main/resources/log4j-cocoa.xml new file mode 100644 index 0000000000..402fdff347 --- /dev/null +++ b/config/src/main/resources/log4j-cocoa.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/config/src/main/resources/log4j-default.xml b/config/src/main/resources/log4j-default.xml new file mode 100644 index 0000000000..c6d6bbe096 --- /dev/null +++ b/config/src/main/resources/log4j-default.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + diff --git a/core/build.xml b/core/build.xml new file mode 100644 index 0000000000..1c6a2916c8 --- /dev/null +++ b/core/build.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom/bundle/pom.xml b/core/dll/pom.xml similarity index 59% rename from pom/bundle/pom.xml rename to core/dll/pom.xml index 7fe061ae44..ec3b6d8734 100644 --- a/pom/bundle/pom.xml +++ b/core/dll/pom.xml @@ -1,21 +1,7 @@ - - - + + 4.0.0 ch.cyberduck @@ -23,7 +9,7 @@ ../../pom.xml 4.8.0-SNAPSHOT - Cyberduck + Cyberduck.Core pom @@ -41,7 +27,7 @@ build-helper-maven-plugin - install-winforms-dll + install-dll package attach-artifact @@ -50,7 +36,7 @@ dll - ${project.basedir}/../../build/dll/Cyberduck.dll + ../target/Cyberduck.Core.dll @@ -65,7 +51,7 @@ ch.cyberduck - ui + core ${project.version} diff --git a/pom/cocoa/pom.xml b/core/dylib/pom.xml similarity index 75% rename from pom/cocoa/pom.xml rename to core/dylib/pom.xml index 0fab66fca6..e966900197 100644 --- a/pom/cocoa/pom.xml +++ b/core/dylib/pom.xml @@ -1,4 +1,7 @@ - + + 4.0.0 ch.cyberduck @@ -6,9 +9,17 @@ ../../pom.xml 4.8.0-SNAPSHOT - cocoa + libcore pom + + + ch.cyberduck + core + ${project.version} + + + mac @@ -24,7 +35,6 @@ build-helper-maven-plugin - install-cocoa package attach-artifact @@ -32,8 +42,8 @@ - jar - ${project.basedir}/../../build/cocoa-${project.version}.jar + dylib + ../target/libcore.dylib @@ -44,12 +54,4 @@ - - - - ch.cyberduck - binding - ${project.version} - - \ No newline at end of file diff --git a/pom/winforms/pom.xml b/core/native/pom.xml similarity index 50% rename from pom/winforms/pom.xml rename to core/native/pom.xml index 95714f8950..59657f6293 100644 --- a/pom/winforms/pom.xml +++ b/core/native/pom.xml @@ -1,21 +1,7 @@ - - - + + 4.0.0 ch.cyberduck @@ -41,7 +27,7 @@ build-helper-maven-plugin - install-winforms-dll + install-dll package attach-artifact @@ -50,7 +36,7 @@ dll - ${project.basedir}/../../build/Cyberduck.Core.Native.dll + ../target/Cyberduck.Core.Native.dll @@ -65,58 +51,39 @@ ch.cyberduck - ui + core ${project.version} - net.structuremap - structuremap + com.microsoft + msvcr100 native dll - 2.6.1 + 10.0.40219.325 runtime - objectlistview - objectlistview + com.microsoft + msvcp120 native dll - 2.5.1.35588 + 12.0.21005.1 runtime - net.java.dev.jna - jna - 4.2.0 - - - net.java.dev.jna - jnidispatch + com.microsoft + msvcr120 native dll - 4.2 + 12.0.21005.1 runtime - sunmscapi - sunmscapi - 7.0.250.17 - runtime - - - sunmscapi - sunmscapi + com.microsoft + vccorlib120 native dll - 7.0.250.17 - runtime - - - sunec - sunec - native - dll - 8.0.40.26 + 12.0.21005.1 runtime diff --git a/core/pom.xml b/core/pom.xml new file mode 100644 index 0000000000..5192e6be0d --- /dev/null +++ b/core/pom.xml @@ -0,0 +1,199 @@ + + 4.0.0 + + ch.cyberduck + parent + 4.8.0-SNAPSHOT + + core + jar + + + + + maven-antrun-plugin + false + + + run-ant-target + generate-sources + + run + + + + + + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + test-jar + + + + + + + + + + windows + + + Windows + + + + + + maven-dependency-plugin + + + copy-dependencies-jar-target + generate-sources + + copy-dependencies + + + ${project.build.directory} + jar + runtime + true + + + + + + + + + + + + ch.cyberduck + config + ${project.version} + + + ch.cyberduck + binding + ${project.version} + + + net.java.dev.jets3t + jets3t + + + org.apache.httpcomponents + httpcore + + + org.apache.httpcomponents + httpclient + + + org.apache.httpcomponents + httpmime + + + commons-net + commons-net + + + org.apache.commons + commons-pool2 + + + commons-io + commons-io + + + commons-collections + commons-collections + + + org.apache.commons + commons-lang3 + + + org.bouncycastle + bcprov-jdk15on + + + org.bouncycastle + bcpkix-jdk15on + + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-log4j12 + + + org.slf4j + jul-to-slf4j + + + com.googlecode.plist + dd-plist + 1.16 + + + com.google.code.gson + gson + + + net.java.dev.jna + jna + + + sunmscapi + sunmscapi + native + dll + 7.0.250.17 + runtime + + + sunec + sunec + native + dll + 8.0.40.26 + runtime + + + net.java.dev.jna + jnidispatch + native + dll + 4.2 + runtime + + + cglib + cglib + 2.2.2 + + + junit + junit + 4.12 + test + + + + diff --git a/source/ch/cyberduck/core/AtomicBoolean.cs b/core/src/main/csharp/ch/cyberduck/core/AtomicBoolean.cs similarity index 96% rename from source/ch/cyberduck/core/AtomicBoolean.cs rename to core/src/main/csharp/ch/cyberduck/core/AtomicBoolean.cs index 5ea2d1e906..46e37f9d74 100644 --- a/source/ch/cyberduck/core/AtomicBoolean.cs +++ b/core/src/main/csharp/ch/cyberduck/core/AtomicBoolean.cs @@ -1,84 +1,84 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Threading; - -namespace Ch.Cyberduck.Core -{ - /// - /// Provides non-blocking, thread-safe access to a boolean value. - /// - public class AtomicBoolean - { - private const int VALUE_FALSE = 0; - private const int VALUE_TRUE = 1; - - private int _currentValue; - - public AtomicBoolean(bool initialValue) - { - _currentValue = BoolToInt(initialValue); - } - - public bool Value - { - get - { - return IntToBool(Interlocked.Add( - ref _currentValue, 0)); - } - } - - private int BoolToInt(bool value) - { - return value ? VALUE_TRUE : VALUE_FALSE; - } - - private bool IntToBool(int value) - { - return value == VALUE_TRUE; - } - - /// - /// Sets the boolean value. - /// - /// - /// The original value. - public bool SetValue(bool newValue) - { - return IntToBool( - Interlocked.Exchange(ref _currentValue, - BoolToInt(newValue))); - } - - /// - /// Compares with expected value and if same, assigns the new value. - /// - /// - /// - /// True if able to compare and set, otherwise false. - public bool CompareAndSet(bool expectedValue, - bool newValue) - { - int expectedVal = BoolToInt(expectedValue); - int newVal = BoolToInt(newValue); - return Interlocked.CompareExchange( - ref _currentValue, newVal, expectedVal) == expectedVal; - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Threading; + +namespace Ch.Cyberduck.Core +{ + /// + /// Provides non-blocking, thread-safe access to a boolean value. + /// + public class AtomicBoolean + { + private const int VALUE_FALSE = 0; + private const int VALUE_TRUE = 1; + + private int _currentValue; + + public AtomicBoolean(bool initialValue) + { + _currentValue = BoolToInt(initialValue); + } + + public bool Value + { + get + { + return IntToBool(Interlocked.Add( + ref _currentValue, 0)); + } + } + + private int BoolToInt(bool value) + { + return value ? VALUE_TRUE : VALUE_FALSE; + } + + private bool IntToBool(int value) + { + return value == VALUE_TRUE; + } + + /// + /// Sets the boolean value. + /// + /// + /// The original value. + public bool SetValue(bool newValue) + { + return IntToBool( + Interlocked.Exchange(ref _currentValue, + BoolToInt(newValue))); + } + + /// + /// Compares with expected value and if same, assigns the new value. + /// + /// + /// + /// True if able to compare and set, otherwise false. + public bool CompareAndSet(bool expectedValue, + bool newValue) + { + int expectedVal = BoolToInt(expectedValue); + int newVal = BoolToInt(newValue); + return Interlocked.CompareExchange( + ref _currentValue, newVal, expectedVal) == expectedVal; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/core/CrashReporter.cs b/core/src/main/csharp/ch/cyberduck/core/CrashReporter.cs similarity index 97% rename from source/ch/cyberduck/ui/core/CrashReporter.cs rename to core/src/main/csharp/ch/cyberduck/core/CrashReporter.cs index 1bd5ecffab..b3acda9501 100755 --- a/source/ch/cyberduck/ui/core/CrashReporter.cs +++ b/core/src/main/csharp/ch/cyberduck/core/CrashReporter.cs @@ -1,184 +1,184 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.IO; -using System.Net; -using System.Text; -using System.Windows.Forms; -using ch.cyberduck.core; -using ch.cyberduck.core.preferences; -using Ch.Cyberduck.Ui.Winforms.Taskdialog; -using ExceptionReporting.Core; -using Path = System.IO.Path; - -namespace Ch.Cyberduck.Ui.Core -{ - internal class CrashReporter - { - private static readonly CrashReporter instance = new CrashReporter(); - - private CrashReporter() - { - } - - public static CrashReporter Instance - { - get { return instance; } - } - - /// - /// - /// - /// - /// Crash report as string - public void Write(Exception e) - { - ExceptionReportInfo info = new ExceptionReportInfo {MainException = e}; - ExceptionReportGenerator reportGenerator = new ExceptionReportGenerator(info); - ExceptionReport report = reportGenerator.CreateExceptionReport(); - - string crashDir = Path.Combine(PreferencesFactory.get().getProperty("application.support.path"), - "CrashReporter"); - Directory.CreateDirectory(crashDir); - using (StreamWriter outfile = new StreamWriter(Path.Combine(crashDir, DateTime.Now.Ticks + ".txt"))) - { - outfile.Write(report.ToString()); - } - TaskDialog prompt = new TaskDialog(); - DialogResult result = - prompt.ShowCommandBox(LocaleFactory.localizedString("Do you want to report the last crash?", "Crash"), - LocaleFactory.localizedString("Do you want to report the last crash?", "Crash"), - LocaleFactory.localizedString( - "The application %@ has recently crashed. To help improve it, you can send the crash log to the author.", - "Crash").Replace("%@", PreferencesFactory.get().getProperty("application.name")), - String.Format("{0}|{1}", LocaleFactory.localizedString("Send", "Crash"), - LocaleFactory.localizedString("Don't Send", "Crash")), false, SysIcons.Error); - if (DialogResult.OK == result) - { - if (0 == prompt.CommandButtonResult) - { - Post(report.ToString()); - } - } - } - - public void Post(string report) - { - Dictionary postParameters = new Dictionary {{"crashlog", report}}; - string revision = PreferencesFactory.get().getProperty("application.revision"); - - //this might take some time as the WebRequest tries to detect the proxy settings first - this.MultipartFormDataPost( - PreferencesFactory.get().getProperty("website.crash") + - String.Format("?revision={0}&os={1}", revision, Environment.OSVersion), - String.Format("{0} ({1})", PreferencesFactory.get().getProperty("application.name"), revision), - postParameters); - } - - /// - /// Post the data as a multipart form - /// postParameters with a value of type byte[] will be passed in the form as a file, and value of type string will be - /// passed as a name/value pair. - /// - private HttpWebResponse MultipartFormDataPost(string postUrl, string userAgent, - Dictionary postParameters) - { - string formDataBoundary = "-----------------------------0xKhTmLbOuNdArY"; - string contentType = "multipart/form-data; boundary=" + formDataBoundary; - - byte[] formData = GetMultipartFormData(postParameters, formDataBoundary); - - return PostForm(postUrl, userAgent, contentType, formData); - } - - /// - /// Post a form - /// - private HttpWebResponse PostForm(string postUrl, string userAgent, string contentType, byte[] formData) - { - HttpWebRequest request = WebRequest.Create(postUrl) as HttpWebRequest; - if (null == request) - { - throw new NullReferenceException("request is not a http request"); - } - // Add these, as we're doing a POST - request.Method = "POST"; - request.ContentType = contentType; - request.UserAgent = userAgent; - request.CookieContainer = new CookieContainer(); - - // We need to count how many bytes we're sending. - request.ContentLength = formData.Length; - using (Stream requestStream = request.GetRequestStream()) - { - // Push it out there - requestStream.Write(formData, 0, formData.Length); - requestStream.Close(); - } - return request.GetResponse() as HttpWebResponse; - } - - /// - /// Turn the key and value pairs into a multipart form. - /// See http://www.ietf.org/rfc/rfc2388.txt for issues about file uploads - /// - private byte[] GetMultipartFormData(Dictionary postParameters, string boundary) - { - Stream formDataStream = new MemoryStream(); - - foreach (var param in postParameters) - { - if (param.Value is byte[]) - { - byte[] fileData = param.Value as byte[]; - - // Add just the first part of this param, since we will write the file data directly to the Stream - string header = - string.Format( - "--{0}\r\nContent-Disposition: form-data; name=\"{1}\"; filename=\"{2}\";\r\nContent-Type: application/octet-stream\r\n\r\n", - boundary, param.Key, param.Key); - formDataStream.Write(Encoding.UTF8.GetBytes(header), 0, header.Length); - - // Write the file data directly to the Stream, rather than serializing it to a string. This - formDataStream.Write(fileData, 0, fileData.Length); - } - else - { - string postData = - string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n{2}\r\n", boundary, - param.Key, param.Value); - formDataStream.Write(Encoding.UTF8.GetBytes(postData), 0, postData.Length); - } - } - - // Add the end of the request - string footer = "\r\n--" + boundary + "--\r\n"; - formDataStream.Write(Encoding.UTF8.GetBytes(footer), 0, footer.Length); - - // Dump the Stream into a byte[] - formDataStream.Position = 0; - byte[] formData = new byte[formDataStream.Length]; - formDataStream.Read(formData, 0, formData.Length); - formDataStream.Close(); - - return formData; - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Text; +using System.Windows.Forms; +using ch.cyberduck.core; +using ch.cyberduck.core.preferences; +using Ch.Cyberduck.Ui.Winforms.Taskdialog; +using ExceptionReporting.Core; +using Path = System.IO.Path; + +namespace Ch.Cyberduck.Core +{ + internal class CrashReporter + { + private static readonly CrashReporter instance = new CrashReporter(); + + private CrashReporter() + { + } + + public static CrashReporter Instance + { + get { return instance; } + } + + /// + /// + /// + /// + /// Crash report as string + public void Write(Exception e) + { + ExceptionReportInfo info = new ExceptionReportInfo {MainException = e}; + ExceptionReportGenerator reportGenerator = new ExceptionReportGenerator(info); + ExceptionReport report = reportGenerator.CreateExceptionReport(); + + string crashDir = Path.Combine(PreferencesFactory.get().getProperty("application.support.path"), + "CrashReporter"); + Directory.CreateDirectory(crashDir); + using (StreamWriter outfile = new StreamWriter(Path.Combine(crashDir, DateTime.Now.Ticks + ".txt"))) + { + outfile.Write(report.ToString()); + } + TaskDialog prompt = new TaskDialog(); + DialogResult result = + prompt.ShowCommandBox(LocaleFactory.localizedString("Do you want to report the last crash?", "Crash"), + LocaleFactory.localizedString("Do you want to report the last crash?", "Crash"), + LocaleFactory.localizedString( + "The application %@ has recently crashed. To help improve it, you can send the crash log to the author.", + "Crash").Replace("%@", PreferencesFactory.get().getProperty("application.name")), + String.Format("{0}|{1}", LocaleFactory.localizedString("Send", "Crash"), + LocaleFactory.localizedString("Don't Send", "Crash")), false, SysIcons.Error); + if (DialogResult.OK == result) + { + if (0 == prompt.CommandButtonResult) + { + Post(report.ToString()); + } + } + } + + public void Post(string report) + { + Dictionary postParameters = new Dictionary {{"crashlog", report}}; + string revision = PreferencesFactory.get().getProperty("application.revision"); + + //this might take some time as the WebRequest tries to detect the proxy settings first + this.MultipartFormDataPost( + PreferencesFactory.get().getProperty("website.crash") + + String.Format("?revision={0}&os={1}", revision, Environment.OSVersion), + String.Format("{0} ({1})", PreferencesFactory.get().getProperty("application.name"), revision), + postParameters); + } + + /// + /// Post the data as a multipart form + /// postParameters with a value of type byte[] will be passed in the form as a file, and value of type string will be + /// passed as a name/value pair. + /// + private HttpWebResponse MultipartFormDataPost(string postUrl, string userAgent, + Dictionary postParameters) + { + string formDataBoundary = "-----------------------------0xKhTmLbOuNdArY"; + string contentType = "multipart/form-data; boundary=" + formDataBoundary; + + byte[] formData = GetMultipartFormData(postParameters, formDataBoundary); + + return PostForm(postUrl, userAgent, contentType, formData); + } + + /// + /// Post a form + /// + private HttpWebResponse PostForm(string postUrl, string userAgent, string contentType, byte[] formData) + { + HttpWebRequest request = WebRequest.Create(postUrl) as HttpWebRequest; + if (null == request) + { + throw new NullReferenceException("request is not a http request"); + } + // Add these, as we're doing a POST + request.Method = "POST"; + request.ContentType = contentType; + request.UserAgent = userAgent; + request.CookieContainer = new CookieContainer(); + + // We need to count how many bytes we're sending. + request.ContentLength = formData.Length; + using (Stream requestStream = request.GetRequestStream()) + { + // Push it out there + requestStream.Write(formData, 0, formData.Length); + requestStream.Close(); + } + return request.GetResponse() as HttpWebResponse; + } + + /// + /// Turn the key and value pairs into a multipart form. + /// See http://www.ietf.org/rfc/rfc2388.txt for issues about file uploads + /// + private byte[] GetMultipartFormData(Dictionary postParameters, string boundary) + { + Stream formDataStream = new MemoryStream(); + + foreach (var param in postParameters) + { + if (param.Value is byte[]) + { + byte[] fileData = param.Value as byte[]; + + // Add just the first part of this param, since we will write the file data directly to the Stream + string header = + string.Format( + "--{0}\r\nContent-Disposition: form-data; name=\"{1}\"; filename=\"{2}\";\r\nContent-Type: application/octet-stream\r\n\r\n", + boundary, param.Key, param.Key); + formDataStream.Write(Encoding.UTF8.GetBytes(header), 0, header.Length); + + // Write the file data directly to the Stream, rather than serializing it to a string. This + formDataStream.Write(fileData, 0, fileData.Length); + } + else + { + string postData = + string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n{2}\r\n", boundary, + param.Key, param.Value); + formDataStream.Write(Encoding.UTF8.GetBytes(postData), 0, postData.Length); + } + } + + // Add the end of the request + string footer = "\r\n--" + boundary + "--\r\n"; + formDataStream.Write(Encoding.UTF8.GetBytes(footer), 0, footer.Length); + + // Dump the Stream into a byte[] + formDataStream.Position = 0; + byte[] formData = new byte[formDataStream.Length]; + formDataStream.Read(formData, 0, formData.Length); + formDataStream.Close(); + + return formData; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/DataProtector.cs b/core/src/main/csharp/ch/cyberduck/core/DataProtector.cs similarity index 97% rename from source/ch/cyberduck/core/DataProtector.cs rename to core/src/main/csharp/ch/cyberduck/core/DataProtector.cs index f089e4aa0d..614fd80966 100644 --- a/source/ch/cyberduck/core/DataProtector.cs +++ b/core/src/main/csharp/ch/cyberduck/core/DataProtector.cs @@ -1,60 +1,60 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Security.Cryptography; -using System.Text; -using org.apache.log4j; - -namespace Ch.Cyberduck.Core -{ - public class DataProtector - { - private static readonly Logger Log = Logger.getLogger(typeof (DataProtector).FullName); - - public static string Encrypt(string data) - { - try - { - byte[] plain = Encoding.UTF8.GetBytes(data); - byte[] encrypted = ProtectedData.Protect(plain, null, DataProtectionScope.CurrentUser); - return Convert.ToBase64String(encrypted); - } - catch (CryptographicException e) - { - Log.error("Error while encrypting data.", e); - return null; - } - } - - public static string Decrypt(string base64) - { - try - { - byte[] decrypted = ProtectedData.Unprotect(Convert.FromBase64String(base64), null, - DataProtectionScope.CurrentUser); - return Encoding.UTF8.GetString(decrypted); - } - catch (CryptographicException e) - { - Log.error("Error while decrypting data.", e); - return null; - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Security.Cryptography; +using System.Text; +using org.apache.log4j; + +namespace Ch.Cyberduck.Core +{ + public class DataProtector + { + private static readonly Logger Log = Logger.getLogger(typeof (DataProtector).FullName); + + public static string Encrypt(string data) + { + try + { + byte[] plain = Encoding.UTF8.GetBytes(data); + byte[] encrypted = ProtectedData.Protect(plain, null, DataProtectionScope.CurrentUser); + return Convert.ToBase64String(encrypted); + } + catch (CryptographicException e) + { + Log.error("Error while encrypting data.", e); + return null; + } + } + + public static string Decrypt(string base64) + { + try + { + byte[] decrypted = ProtectedData.Unprotect(Convert.FromBase64String(base64), null, + DataProtectionScope.CurrentUser); + return Encoding.UTF8.GetString(decrypted); + } + catch (CryptographicException e) + { + Log.error("Error while decrypting data.", e); + return null; + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/DataProtectorPasswordStore.cs b/core/src/main/csharp/ch/cyberduck/core/DataProtectorPasswordStore.cs similarity index 97% rename from source/ch/cyberduck/core/DataProtectorPasswordStore.cs rename to core/src/main/csharp/ch/cyberduck/core/DataProtectorPasswordStore.cs index a1b6a78ee1..c3199f6420 100644 --- a/source/ch/cyberduck/core/DataProtectorPasswordStore.cs +++ b/core/src/main/csharp/ch/cyberduck/core/DataProtectorPasswordStore.cs @@ -1,68 +1,68 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using ch.cyberduck.core; -using ch.cyberduck.core.preferences; -using org.apache.log4j; - -namespace Ch.Cyberduck.Core -{ - public class DataProtectorPasswordStore : HostPasswordStore - { - private static readonly Logger Log = Logger.getLogger(typeof (Keychain).FullName); - - public override string getPassword(Scheme scheme, int port, String hostName, String user) - { - Host host = new Host(ProtocolFactory.forScheme(scheme.name()), hostName, port); - host.getCredentials().setUsername(user); - return getPassword(host); - } - - public override string getPassword(String hostName, String user) - { - Host host = new Host(hostName); - host.getCredentials().setUsername(user); - return getPassword(host); - } - - public override void addPassword(String hostName, String user, String password) - { - Host host = new Host(hostName); - host.getCredentials().setUsername(user); - PreferencesFactory.get().setProperty(new HostUrlProvider().get(host), DataProtector.Encrypt(password)); - } - - public override void addPassword(Scheme scheme, int port, String hostName, String user, String password) - { - Host host = new Host(ProtocolFactory.forScheme(scheme.name()), hostName, port); - host.getCredentials().setUsername(user); - PreferencesFactory.get().setProperty(new HostUrlProvider().get(host), DataProtector.Encrypt(password)); - } - - private string getPassword(Host host) - { - string password = PreferencesFactory.get().getProperty(new HostUrlProvider().get(host)); - if (null == password) - { - return null; - } - return DataProtector.Decrypt(password); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using ch.cyberduck.core; +using ch.cyberduck.core.preferences; +using org.apache.log4j; + +namespace Ch.Cyberduck.Core +{ + public class DataProtectorPasswordStore : HostPasswordStore + { + private static readonly Logger Log = Logger.getLogger(typeof (Keychain).FullName); + + public override string getPassword(Scheme scheme, int port, String hostName, String user) + { + Host host = new Host(ProtocolFactory.forScheme(scheme.name()), hostName, port); + host.getCredentials().setUsername(user); + return getPassword(host); + } + + public override string getPassword(String hostName, String user) + { + Host host = new Host(hostName); + host.getCredentials().setUsername(user); + return getPassword(host); + } + + public override void addPassword(String hostName, String user, String password) + { + Host host = new Host(hostName); + host.getCredentials().setUsername(user); + PreferencesFactory.get().setProperty(new HostUrlProvider().get(host), DataProtector.Encrypt(password)); + } + + public override void addPassword(Scheme scheme, int port, String hostName, String user, String password) + { + Host host = new Host(ProtocolFactory.forScheme(scheme.name()), hostName, port); + host.getCredentials().setUsername(user); + PreferencesFactory.get().setProperty(new HostUrlProvider().get(host), DataProtector.Encrypt(password)); + } + + private string getPassword(Host host) + { + string password = PreferencesFactory.get().getProperty(new HostUrlProvider().get(host)); + if (null == password) + { + return null; + } + return DataProtector.Decrypt(password); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/ListAdapter.cs b/core/src/main/csharp/ch/cyberduck/core/ListAdapter.cs similarity index 97% rename from source/ch/cyberduck/core/ListAdapter.cs rename to core/src/main/csharp/ch/cyberduck/core/ListAdapter.cs index b7e5b4c979..8f69d3fa90 100644 --- a/source/ch/cyberduck/core/ListAdapter.cs +++ b/core/src/main/csharp/ch/cyberduck/core/ListAdapter.cs @@ -1,67 +1,67 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@langisch.ch -// -using System.Collections; -using System.Collections.Generic; - -namespace Ch.Cyberduck.Core -{ - /// - /// The ListAdapter implements the generic IEnumerable interface in order to allow a - /// generic list instantiation of a List that implements the IList interface - /// - /// - public class ListAdapter : IEnumerable - { - private readonly IList _nativeList; - - /// - /// Initializes a new instance of the ListAdapter class. - /// - /// The native list parameter. - public ListAdapter(IList nativeListParameter) - { - _nativeList = nativeListParameter; - } - - /// - ///Returns an enumerator that iterates through the collection. - /// - /// - /// - ///A that can be used to iterate through the collection. - /// - ///1 - IEnumerator IEnumerable.GetEnumerator() - { - return new NativeListEnumerator(GetEnumerator()); - } - - /// - ///Returns an enumerator that iterates through a collection. - /// - /// - /// - ///An object that can be used to iterate through the collection. - /// - ///2 - public IEnumerator GetEnumerator() - { - return _nativeList.GetEnumerator(); - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@langisch.ch +// +using System.Collections; +using System.Collections.Generic; + +namespace Ch.Cyberduck.Core +{ + /// + /// The ListAdapter implements the generic IEnumerable interface in order to allow a + /// generic list instantiation of a List that implements the IList interface + /// + /// + public class ListAdapter : IEnumerable + { + private readonly IList _nativeList; + + /// + /// Initializes a new instance of the ListAdapter class. + /// + /// The native list parameter. + public ListAdapter(IList nativeListParameter) + { + _nativeList = nativeListParameter; + } + + /// + ///Returns an enumerator that iterates through the collection. + /// + /// + /// + ///A that can be used to iterate through the collection. + /// + ///1 + IEnumerator IEnumerable.GetEnumerator() + { + return new NativeListEnumerator(GetEnumerator()); + } + + /// + ///Returns an enumerator that iterates through a collection. + /// + /// + /// + ///An object that can be used to iterate through the collection. + /// + ///2 + public IEnumerator GetEnumerator() + { + return _nativeList.GetEnumerator(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/NativeConstants.cs b/core/src/main/csharp/ch/cyberduck/core/NativeConstants.cs similarity index 97% rename from source/ch/cyberduck/core/NativeConstants.cs rename to core/src/main/csharp/ch/cyberduck/core/NativeConstants.cs index 37b2526e74..bf75eb555b 100644 --- a/source/ch/cyberduck/core/NativeConstants.cs +++ b/core/src/main/csharp/ch/cyberduck/core/NativeConstants.cs @@ -1,2528 +1,2528 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -namespace Ch.Cyberduck.Core -{ - public static class NativeConstants - { - public const int ACM_OPENA = (0x0400 + 100), - ACM_OPENW = (0x0400 + 103), - ADVF_NODATA = 1, - ADVF_ONLYONCE = 2, - ADVF_PRIMEFIRST = 4; - - public const int ARW_BOTTOMLEFT = 0x0000, - ARW_BOTTOMRIGHT = 0x0001; - - public const int ARW_DOWN = 0x0004, - ARW_HIDE = 0x0008; - - public const int ARW_LEFT = 0x0000, - ARW_RIGHT = 0x0000; - - public const int ARW_TOPLEFT = 0x0002, - ARW_TOPRIGHT = 0x0003; - - public const int ARW_UP = 0x0004; - - public const int AUTOAPPEND = 0x40000000, - AUTOAPPEND_OFF = (unchecked((int) 0x80000000)); - - public const int AUTOSUGGEST = 0x10000000, - AUTOSUGGEST_OFF = 0x20000000; - - public const int BCM_GETIDEALSIZE = 0x1601; - - public const int BDR_RAISED = 0x0005; - - public const int BDR_RAISEDINNER = 0x0004; - public const int BDR_RAISEDOUTER = 0x0001; - - public const int BDR_SUNKEN = 0x000a; - - public const int BDR_SUNKENINNER = 0x0008; - public const int BDR_SUNKENOUTER = 0x0002; - public const int BFFM_ENABLEOK = 0x400 + 101; - - public const int BFFM_INITIALIZED = 1, - BFFM_SELCHANGED = 2, - BFFM_SETSELECTION = 0x400 + 103; - - public const int BF_ADJUST = 0x2000; - public const int BF_BOTTOM = 0x0008; - public const int BF_FLAT = 0x4000; - public const int BF_LEFT = 0x0001; - public const int BF_MIDDLE = 0x0800; - public const int BF_RIGHT = 0x0004; - public const int BF_TOP = 0x0002; - public const int BITSPIXEL = 12; - public const int BI_RGB = 0; - public const int BM_CLICK = 0x00F5; - - public const int BM_SETCHECK = 0x00F1, - BM_SETSTATE = 0x00F3; - - public const int BN_CLICKED = 0; - public const int BS_3STATE = 0x00000005; - public const int BS_BOTTOM = 0x00000800; - public const int BS_CENTER = 0x00000300; - - public const int BS_DEFPUSHBUTTON = 0x00000001; - - public const int BS_GROUPBOX = 0x00000007, - BS_LEFT = 0x00000100; - - public const int BS_MULTILINE = 0x00002000; - - public const int BS_OWNERDRAW = 0x0000000B; - - public const int BS_PATTERN = 3; - public const int BS_PUSHBUTTON = 0x00000000; - public const int BS_PUSHLIKE = 0x00001000; - - public const int BS_RADIOBUTTON = 0x00000004; - - public const int BS_RIGHT = 0x00000200; - - public const int BS_RIGHTBUTTON = 0x00000020; - - public const int BS_TOP = 0x00000400; - - public const int BS_VCENTER = 0x00000C00; - - public const int CBEM_GETITEMA = (0x0400 + 4); // C:\Program Files\Common - public const int CBEM_GETITEMW = (0x0400 + 13); // C:\Program Files\Common - public const int CBEM_INSERTITEMA = (0x0400 + 1); // C:\Program Files\Common - public const int CBEM_INSERTITEMW = (0x0400 + 11); // C:\Program Files\Common - public const int CBEM_SETITEMA = (0x0400 + 5); // C:\Program Files\Common - public const int CBEM_SETITEMW = (0x0400 + 12); // C:\Program Files\Common - - public const int CBEN_ENDEDITA = ((0 - 800) - 5), - CBEN_ENDEDITW = ((0 - 800) - 6); // C:\Program Files\Common - - public const int CBN_CLOSEUP = 8; // C:\Program Files\Common - - public const int CBN_DBLCLK = 2; // C:\Program Files\Common - - public const int CBN_DROPDOWN = 7; // C:\Program Files\Common - - public const int CBN_EDITCHANGE = 5, - CBN_EDITUPDATE = 6; // C:\Program Files\Common - - public const int CBN_SELCHANGE = 1; // C:\Program Files\Common - - public const int CBN_SELENDOK = 9; // C:\Program Files\Common - - public const int CBS_AUTOHSCROLL = 0x0040; // C:\Program Files\Common - - public const int CBS_DROPDOWN = 0x0002, - CBS_DROPDOWNLIST = 0x0003; // C:\Program Files\Common - - public const int CBS_HASSTRINGS = 0x0200, - CBS_NOINTEGRALHEIGHT = 0x0400; // C:\Program Files\Common - - public const int CBS_OWNERDRAWFIXED = 0x0010, - CBS_OWNERDRAWVARIABLE = 0x0020; // C:\Program Files\Common - - public const int CBS_SIMPLE = 0x0001; // C:\Program Files\Common - - public const int CB_ADDSTRING = 0x0143, - CB_DELETESTRING = 0x0144; // C:\Program Files\Common - - public const int CB_ERR = (-1); // C:\Program Files\Common - public const int CB_FINDSTRING = 0x014C; // C:\Program Files\Common - public const int CB_FINDSTRINGEXACT = 0x0158; // C:\Program Files\Common - - public const int CB_GETCURSEL = 0x0147; // C:\Program Files\Common - - public const int CB_GETDROPPEDSTATE = 0x0157; // C:\Program Files\Common - public const int CB_GETEDITSEL = 0x0140; // C:\Program Files\Common - public const int CB_GETITEMDATA = 0x0150; // C:\Program Files\Common - public const int CB_GETITEMHEIGHT = 0x0154; // C:\Program Files\Common - - public const int CB_INSERTSTRING = 0x014A; // C:\Program Files\Common - - public const int CB_LIMITTEXT = 0x0141; // C:\Program Files\Common - - public const int CB_RESETCONTENT = 0x014B; // C:\Program Files\Common - - public const int CB_SETCURSEL = 0x014E; // C:\Program Files\Common - - public const int CB_SETDROPPEDWIDTH = 0x0160; // C:\Program Files\Common - - public const int CB_SETEDITSEL = 0x0142; // C:\Program Files\Common - public const int CB_SETITEMHEIGHT = 0x0153; // C:\Program Files\Common - public const int CB_SHOWDROPDOWN = 0x014F; // C:\Program Files\Common - public const int CCS_NODIVIDER = 0x00000040; // C:\Program Files\Common - public const int CCS_NOPARENTALIGN = 0x00000008; // C:\Program Files\Common - public const int CCS_NORESIZE = 0x00000004; // C:\Program Files\Common - public const int CC_ANYCOLOR = 0x00000100; - public const int CC_ENABLEHOOK = 0x00000010; - - public const int CC_FULLOPEN = 0x00000002, - CC_PREVENTFULLOPEN = 0x00000004; - - public const int CC_RGBINIT = 0x00000001; - public const int CC_SHOWHELP = 0x00000008; - public const int CC_SOLIDCOLOR = 0x00000080; - - public const int CDDS_ITEM = 0x00010000; // C:\Program Files\Common - - public const int CDDS_ITEMPOSTPAINT = (0x00010000 | 0x00000002); // C:\Program Files\Common - - public const int CDDS_ITEMPREPAINT = (0x00010000 | 0x00000001); // C:\Program Files\Common - public const int CDDS_POSTPAINT = 0x00000002; // C:\Program Files\Common - public const int CDDS_PREPAINT = 0x00000001; // C:\Program Files\Common - public const int CDDS_SUBITEM = 0x00020000; // C:\Program Files\Common - public const int CDERR_DIALOGFAILURE = 0xFFFF; - public const int CDERR_FINDRESFAILURE = 0x0006; - public const int CDERR_INITIALIZATION = 0x0002; - public const int CDERR_LOADRESFAILURE = 0x0007; - public const int CDERR_LOADSTRFAILURE = 0x0005; - - public const int CDERR_LOCKRESFAILURE = 0x0008, - CDERR_MEMALLOCFAILURE = 0x0009, - CDERR_MEMLOCKFAILURE = 0x000A; - - public const int CDERR_NOHINSTANCE = 0x0004; - public const int CDERR_NOHOOK = 0x000B; - public const int CDERR_NOTEMPLATE = 0x0003; - public const int CDERR_REGISTERMSGFAIL = 0x000C; - public const int CDERR_STRUCTSIZE = 0x0001; - - public const int CDIS_CHECKED = 0x0008; // C:\Program Files\Common - - public const int CDIS_DEFAULT = 0x0020; // C:\Program Files\Common - - public const int CDIS_DISABLED = 0x0004; // C:\Program Files\Common - public const int CDIS_FOCUS = 0x0010; // C:\Program Files\Common - public const int CDIS_GRAYED = 0x0002; // C:\Program Files\Common - - public const int CDIS_HOT = 0x0040; // C:\Program Files\Common - - public const int CDIS_INDETERMINATE = 0x0100; // C:\Program Files\Common - - public const int CDIS_MARKED = 0x0080; // C:\Program Files\Common - public const int CDIS_SELECTED = 0x0001; // C:\Program Files\Common - - public const int CDIS_SHOWKEYBOARDCUES = 0x0200; // C:\Program Files\Common - - public const int CDRF_DODEFAULT = 0x00000000, - CDRF_NEWFONT = 0x00000002; // C:\Program Files\Common - - public const int CDRF_NOTIFYITEMDRAW = 0x00000020; // C:\Program Files\Common - public const int CDRF_NOTIFYPOSTPAINT = 0x00000010; // C:\Program Files\Common - public const int CDRF_NOTIFYSUBITEMDRAW = CDRF_NOTIFYITEMDRAW; // C:\Program Files\Common - public const int CDRF_SKIPDEFAULT = 0x00000004; // C:\Program Files\Common - public const int CFERR_MAXLESSTHANMIN = 0x2002; - public const int CFERR_NOFONTS = 0x2001; - public const int CF_APPLY = 0x00000200; - public const int CF_BITMAP = 2; // C:\Program Files\Common - public const int CF_DIB = 8; // C:\Program Files\Common - public const int CF_DIF = 5; // C:\Program Files\Common - public const int CF_EFFECTS = 0x00000100; - public const int CF_ENABLEHOOK = 0x00000008; - public const int CF_ENHMETAFILE = 14; // C:\Program Files\Common - - public const int CF_FIXEDPITCHONLY = 0x00004000, - CF_FORCEFONTEXIST = 0x00010000; - - public const int CF_HDROP = 15; // C:\Program Files\Common - public const int CF_INITTOLOGFONTSTRUCT = 0x00000040; - public const int CF_LIMITSIZE = 0x00002000; - public const int CF_LOCALE = 16; // C:\Program Files\Common - public const int CF_METAFILEPICT = 3; // C:\Program Files\Common - public const int CF_NOSIMULATIONS = 0x00001000; - public const int CF_NOVECTORFONTS = 0x00000800; - public const int CF_NOVERTFONTS = 0x01000000; - public const int CF_OEMTEXT = 7; // C:\Program Files\Common - - public const int CF_PALETTE = 9, - CF_PENDATA = 10, - CF_RIFF = 11; // C:\Program Files\Common - - public const int CF_SCREENFONTS = 0x00000001; - public const int CF_SCRIPTSONLY = 0x00000400; - public const int CF_SELECTSCRIPT = 0x00400000; - public const int CF_SHOWHELP = 0x00000004; - public const int CF_SYLK = 4; // C:\Program Files\Common - public const int CF_TEXT = 1; // C:\Program Files\Common - public const int CF_TIFF = 6; // C:\Program Files\Common - public const int CF_TTONLY = 0x00040000; - public const int CF_UNICODETEXT = 13; // C:\Program Files\Common - public const int CF_WAVE = 12; // C:\Program Files\Common - - public const int CLR_DEFAULT = unchecked((int) 0xFF000000); // C:\Program Files\Common - - public const int CLR_NONE = unchecked((int) 0xFFFFFFFF); // C:\Program Files\Common - - public const int CLSCTX_INPROC_SERVER = 0x1, - CLSCTX_LOCAL_SERVER = 0x4; // C:\Program Files\Common - - public const int COLOR_WINDOW = 5; // C:\Program Files\Common - - public const int CONNECT_E_CANNOTCONNECT = unchecked((int) 0x80040202); // C:\Program Files\Common - - public const int CONNECT_E_NOCONNECTION = unchecked((int) 0x80040200); // C:\Program Files\Common - public const int CP_WINANSI = 1004; - public const int CSC_NAVIGATEBACK = 0x00000002; - public const int CSC_NAVIGATEFORWARD = 0x00000001; - public const int CSIDL_APPDATA = 0x001a; // C:\Program Files\Common - public const int CSIDL_COMMON_APPDATA = 0x0023; // C:\Program Files\Common - public const int CSIDL_COOKIES = 0x0021; // C:\Program Files\Common - - public const int CSIDL_DESKTOP = 0x0000; // C:\Program Files\Common - - public const int // Start Menu\Programs\Startup - CSIDL_DESKTOPDIRECTORY = 0x0010; // C:\Program Files\Common - - public const int // Start Menu\Programs - CSIDL_FAVORITES = 0x0006; // C:\Program Files\Common - - public const int CSIDL_HISTORY = 0x0022; // C:\Program Files\Common - - public const int // - CSIDL_INTERNET = 0x0001; // C:\Program Files\Common - - public const int CSIDL_INTERNET_CACHE = 0x0020; // C:\Program Files\Common - public const int CSIDL_LOCAL_APPDATA = 0x001c; // C:\Program Files\Common - - public const int // Start Menu\Programs - CSIDL_PERSONAL = 0x0005; // C:\Program Files\Common - - public const int CSIDL_PROGRAMS = 0x0002; // C:\Program Files\Common - - public const int CSIDL_PROGRAM_FILES = 0x0026, - // C:\Program Files - CSIDL_PROGRAM_FILES_COMMON = 0x002b; // C:\Program Files\Common - - public const int // Start Menu\Programs\Startup - CSIDL_RECENT = 0x0008, - // \Recent - CSIDL_SENDTO = 0x0009, - // \SendTo - CSIDL_STARTMENU = 0x000b; // C:\Program Files\Common - - public const int CSIDL_STARTUP = 0x0007; // C:\Program Files\Common - - public const int // All Users\Application Data - CSIDL_SYSTEM = 0x0025; // C:\Program Files\Common - - public const int CSIDL_TEMPLATES = 0x0015; // C:\Program Files\Common - - public const int CS_DBLCLKS = 0x0008, - CS_DROPSHADOW = 0x00020000; // C:\Program Files\Common - - public const int CTRLINFO_EATS_ESCAPE = 2; // C:\Program Files\Common - public const int CTRLINFO_EATS_RETURN = 1; // C:\Program Files\Common - public const int CWP_SKIPINVISIBLE = 0x0001; // C:\Program Files\Common - public const int CW_USEDEFAULT = (unchecked((int) 0x80000000)); // C:\Program Files\Common - - public const int DCX_CACHE = 0x00000002, - DCX_LOCKWINDOWUPDATE = 0x00000400; - - public const int DCX_WINDOW = 0x00000001; - - public const int DEFAULT_GUI_FONT = 17; - - public const int DFCS_BUTTON3STATE = 0x0008; - public const int DFCS_BUTTONCHECK = 0x0000; - public const int DFCS_BUTTONPUSH = 0x0010; - public const int DFCS_BUTTONRADIO = 0x0004; - - public const int DFCS_CAPTIONCLOSE = 0x0000; - - public const int DFCS_CAPTIONHELP = 0x0004; - - public const int DFCS_CAPTIONMAX = 0x0002; - - public const int DFCS_CAPTIONMIN = 0x0001; - - public const int DFCS_CAPTIONRESTORE = 0x0003; - - public const int DFCS_CHECKED = 0x0400, - DFCS_FLAT = 0x4000; - - public const int DFCS_INACTIVE = 0x0100; - - public const int DFCS_MENUARROW = 0x0000; - - public const int DFCS_MENUBULLET = 0x0002; - - public const int DFCS_MENUCHECK = 0x0001; - public const int DFCS_PUSHED = 0x0200; - public const int DFCS_SCROLLCOMBOBOX = 0x0005; - - public const int DFCS_SCROLLDOWN = 0x0001, - DFCS_SCROLLLEFT = 0x0002, - DFCS_SCROLLRIGHT = 0x0003; - - public const int DFCS_SCROLLUP = 0x0000; - public const int DFC_BUTTON = 4; - - public const int DFC_CAPTION = 1, - DFC_MENU = 2, - DFC_SCROLL = 3; - - public const int DIB_RGB_COLORS = 0; - - public const int DISPATCH_METHOD = 0x1, - DISPATCH_PROPERTYGET = 0x2, - DISPATCH_PROPERTYPUT = 0x4; - - public const int DISPID_PROPERTYPUT = (-3); - public const int DISPID_UNKNOWN = (-1); - public const int DISP_E_EXCEPTION = unchecked((int) 0x80020009); - - public const int DISP_E_MEMBERNOTFOUND = unchecked((int) 0x80020003), - DISP_E_PARAMNOTFOUND = unchecked((int) 0x80020004); - - public const int DI_NORMAL = 0x0003; - - public const int DLGC_WANTALLKEYS = 0x0004; - - public const int DLGC_WANTARROWS = 0x0001; - - public const int DLGC_WANTCHARS = 0x0080; - - public const int DLGC_WANTTAB = 0x0002; - public const int DRAGDROP_E_ALREADYREGISTERED = unchecked((int) 0x80040101); - public const int DRAGDROP_E_NOTREGISTERED = unchecked((int) 0x80040100); - - public const int DTM_SETFORMATA = (0x1000 + 5), - DTM_SETFORMATW = (0x1000 + 50), - DTM_SETMCCOLOR = (0x1000 + 6), - DTM_SETMCFONT = (0x1000 + 9); - - public const int DTM_SETRANGE = (0x1000 + 4); - public const int DTM_SETSYSTEMTIME = (0x1000 + 2); - public const int DTN_CLOSEUP = ((0 - 760) + 7); - - public const int DTN_DATETIMECHANGE = ((0 - 760) + 1); - - public const int DTN_DROPDOWN = ((0 - 760) + 6); - public const int DTN_FORMATA = ((0 - 760) + 4); - - public const int DTN_FORMATQUERYA = ((0 - 760) + 5), - DTN_FORMATQUERYW = ((0 - 760) + 18); - - public const int DTN_FORMATW = ((0 - 760) + 17); - - public const int DTN_USERSTRINGA = ((0 - 760) + 2), - DTN_USERSTRINGW = ((0 - 760) + 15), - DTN_WMKEYDOWNA = ((0 - 760) + 3), - DTN_WMKEYDOWNW = ((0 - 760) + 16); - - public const int DTS_LONGDATEFORMAT = 0x0004; - public const int DTS_RIGHTALIGN = 0x0020; - public const int DTS_SHOWNONE = 0x0002; - public const int DTS_TIMEFORMAT = 0x0009; - public const int DTS_UPDOWN = 0x0001; - public const int DT_CALCRECT = 0x00000400; - public const int DT_EDITCONTROL = 0x00002000; - public const int DT_END_ELLIPSIS = 0x00008000; - public const int DT_EXPANDTABS = 0x00000040; - public const int DT_LEFT = 0x00000000; - public const int DT_NOCLIP = 0x00000100; - public const int DT_NOPREFIX = 0x00000800; - public const int DT_RIGHT = 0x00000002; - public const int DT_RTLREADING = 0x00020000; - public const int DT_SINGLELINE = 0x00000020; - public const int DT_VCENTER = 0x00000004; - public const int DT_WORDBREAK = 0x00000010; - public const int DUPLICATE = 0x06; - public const int DUPLICATE_SAME_ACCESS = 0x00000002; - - public const int DVASPECT_CONTENT = 1; - - public const int DVASPECT_OPAQUE = 16; - - public const int DVASPECT_TRANSPARENT = 32; - public const int DV_E_DVASPECT = unchecked((int) 0x8004006B); - - public const int EC_LEFTMARGIN = 0x0001, - EC_RIGHTMARGIN = 0x0002; - - public const int EDGE_BUMP = (0x0001 | 0x0008); - public const int EDGE_ETCHED = (0x0002 | 0x0004); - - public const int EDGE_RAISED = (0x0001 | 0x0004), - EDGE_SUNKEN = (0x0002 | 0x0008); - - public const int EMR_POLYTEXTOUTA = 96, - EMR_POLYTEXTOUTW = 97; - - public const int EM_CANUNDO = 0x00C6; - public const int EM_CHARFROMPOS = 0x00D7; - public const int EM_EMPTYUNDOBUFFER = 0x00CD; - public const int EM_GETLINE = 0x00C4; - public const int EM_GETLINECOUNT = 0x00BA; - public const int EM_GETMODIFY = 0x00B8; - public const int EM_GETPASSWORDCHAR = 0x00D2; - - public const int EM_GETSEL = 0x00B0; - - public const int EM_LIMITTEXT = 0x00C5; - - public const int EM_LINEFROMCHAR = 0x00C9, - EM_LINEINDEX = 0x00BB; - - public const int EM_POSFROMCHAR = 0x00D6; - public const int EM_REPLACESEL = 0x00C2; - - public const int EM_SCROLL = 0x00B5, - EM_SCROLLCARET = 0x00B7; - - public const int EM_SETMARGINS = 0x00D3; - - public const int EM_SETMODIFY = 0x00B9; - - public const int EM_SETPASSWORDCHAR = 0x00CC; - - public const int EM_SETREADONLY = 0x00CF; - public const int EM_SETTYPOGRAPHYOPTIONS = WM_USER + 202; - - public const int EM_SETSEL = 0x00B1; - public const int EM_UNDO = 0x00C7; - - public const int EN_ALIGN_LTR_EC = 0x0700, - EN_ALIGN_RTL_EC = 0x0701; - - public const int EN_CHANGE = 0x0300, - EN_HSCROLL = 0x0601, - EN_VSCROLL = 0x0602; - - public const int ES_AUTOHSCROLL = 0x0080; - public const int ES_AUTOVSCROLL = 0x0040; - public const int ES_CENTER = 0x0001; - public const int ES_LEFT = 0x0000; - public const int ES_LOWERCASE = 0x0010; - public const int ES_MULTILINE = 0x0004; - public const int ES_NOHIDESEL = 0x0100; - public const int ES_PASSWORD = 0x0020; - public const int ES_READONLY = 0x0800; - public const int ES_RIGHT = 0x0002; - public const int ES_UPPERCASE = 0x0008; - public const int ETO_CLIPPED = 0x0004; - public const int ETO_OPAQUE = 0x0002; - public const int E_ABORT = unchecked((int) 0x80004004); - public const int E_FAIL = unchecked((int) 0x80004005); - - public const int E_INVALIDARG = unchecked((int) 0x80070057), - E_NOINTERFACE = unchecked((int) 0x80004002); - - public const int E_NOTIMPL = unchecked((int) 0x80004001), - E_OUTOFMEMORY = unchecked((int) 0x8007000E); - - public const int E_UNEXPECTED = unchecked((int) 0x8000FFFF); - - public const int FADF_BSTR = (0x100); - - public const int FADF_DISPATCH = (0x400); - - public const int FADF_UNKNOWN = (0x200); - - public const int FADF_VARIANT = (unchecked(0x800)); - - public const int FALT = 0x10; - public const int FLASHW_ALL = FLASHW_CAPTION | FLASHW_TRAY; - public const int FLASHW_CAPTION = 0x00000001; - public const int FLASHW_STOP = 0; - - public const int FLASHW_TIMER = 0x00000004, - FLASHW_TIMERNOFG = 0x0000000C; - - public const int FLASHW_TRAY = 0x00000002; - public const int FNERR_BUFFERTOOSMALL = 0x3003; - public const int FNERR_INVALIDFILENAME = 0x3002; - public const int FNERR_SUBCLASSFAILURE = 0x3001; - - public const int FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000, - FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200; - - public const int FRERR_BUFFERLENGTHZERO = 0x4001; - - public const int FSHIFT = 0x04; - - public const int FVIRTKEY = 0x01; - public const int GDI_ERROR = (unchecked((int) 0xFFFFFFFF)); - public const int GDTR_MAX = 0x0002; - public const int GDTR_MIN = 0x0001; - public const int GDT_NONE = 1; - public const int GDT_VALID = 0; - public const int GMEM_DDESHARE = 0x2000; - - public const int GMEM_MOVEABLE = 0x0002, - GMEM_ZEROINIT = 0x0040; - - public const int GMR_DAYSTATE = 1; - public const int GMR_VISIBLE = 0; - - public const int GWL_EXSTYLE = (-20); - - public const int GWL_HWNDPARENT = (-8); - - public const int GWL_ID = (-12); - - public const int GWL_STYLE = (-16); - public const int GWL_WNDPROC = (-4); - public const int GW_CHILD = 5; - - public const int GW_HWNDFIRST = 0, - GW_HWNDLAST = 1, - GW_HWNDNEXT = 2, - GW_HWNDPREV = 3; - - public const int HCF_HIGHCONTRASTON = 0x00000001; - - public const int HC_ACTION = 0, - HC_GETNEXT = 1, - HC_SKIP = 2; - - public const int HDI_ORDER = 0x0080; - - public const int HDM_GETITEMA = (0x1200 + 3); - - public const int HDM_GETITEMCOUNT = (0x1200 + 0); - - public const int HDM_GETITEMW = (0x1200 + 11); - - public const int HDM_INSERTITEMA = (0x1200 + 1), - HDM_INSERTITEMW = (0x1200 + 10); - - public const int HDM_SETITEMA = (0x1200 + 4), - HDM_SETITEMW = (0x1200 + 12); - - public const int HDN_BEGINTDRAG = ((0 - 300) - 10), - HDN_BEGINTRACKA = ((0 - 300) - 6), - HDN_BEGINTRACKW = ((0 - 300) - 26); - - public const int HDN_DIVIDERDBLCLICKA = ((0 - 300) - 5), - HDN_DIVIDERDBLCLICKW = ((0 - 300) - 25); - - public const int HDN_ENDDRAG = ((0 - 300) - 11), - HDN_ENDTRACKA = ((0 - 300) - 7), - HDN_ENDTRACKW = ((0 - 300) - 27); - - public const int HDN_GETDISPINFOA = ((0 - 300) - 9), - HDN_GETDISPINFOW = ((0 - 300) - 29); - - public const int HDN_ITEMCHANGEDA = ((0 - 300) - 1), - HDN_ITEMCHANGEDW = ((0 - 300) - 21); - - public const int HDN_ITEMCHANGINGA = ((0 - 300) - 0), - HDN_ITEMCHANGINGW = ((0 - 300) - 20); - - public const int HDN_ITEMCLICKA = ((0 - 300) - 2), - HDN_ITEMCLICKW = ((0 - 300) - 22), - HDN_ITEMDBLCLICKA = ((0 - 300) - 3), - HDN_ITEMDBLCLICKW = ((0 - 300) - 23); - - public const int HDN_TRACKA = ((0 - 300) - 8), - HDN_TRACKW = ((0 - 300) - 28); - - public const int HELPINFO_WINDOW = 0x0001; - - public const int HLP_FILE = 1, - HLP_KEYWORD = 2, - HLP_NAVIGATOR = 3, - HLP_OBJECT = 4; - - public const int HOLLOW_BRUSH = 5; - - public const int HTBOTTOM = 15, - HTBOTTOMRIGHT = 17; - - public const int HTCLIENT = 1; - public const int HTNOWHERE = 0; - public const int ICC_BAR_CLASSES = 0x00000004; - public const int ICC_DATE_CLASSES = 0x00000100; - public const int ICC_LISTVIEW_CLASSES = 0x00000001; - public const int ICC_PROGRESS_CLASS = 0x00000020; - public const int ICC_TAB_CLASSES = 0x00000008; - public const int ICC_TREEVIEW_CLASSES = 0x00000002; - - public const int ICON_BIG = 1; - - public const int ICON_SMALL = 0; - public const int IDC_APPSTARTING = 32650; - - public const int IDC_ARROW = 32512; - - public const int IDC_CROSS = 32515; - - public const int IDC_HELP = 32651; - public const int IDC_IBEAM = 32513; - public const int IDC_NO = 32648; - - public const int IDC_SIZEALL = 32646; - - public const int IDC_SIZENESW = 32643; - - public const int IDC_SIZENS = 32645; - - public const int IDC_SIZENWSE = 32642; - public const int IDC_SIZEWE = 32644; - - public const int IDC_UPARROW = 32516; - - public const int IDC_WAIT = 32514; - public const int IDM_PAGESETUP = 2004; - public const int IDM_PRINT = 27; - - public const int IDM_PRINTPREVIEW = 2003, - IDM_PROPERTIES = 28, - IDM_SAVEAS = 71; - - public const int ILC_COLOR = 0x0000; - - public const int ILC_COLOR16 = 0x0010, - ILC_COLOR24 = 0x0018, - ILC_COLOR32 = 0x0020; - - public const int ILC_COLOR4 = 0x0004, - ILC_COLOR8 = 0x0008; - - public const int ILC_MASK = 0x0001; - - public const int ILD_MASK = 0x0010; - - public const int ILD_NORMAL = 0x0000; - - public const int ILD_ROP = 0x0040; - - public const int ILD_TRANSPARENT = 0x0001; - public const int ILS_ALPHA = 0x8; - - public const int ILS_GLOW = 0x1; - - public const int ILS_NORMAL = 0x0; - - public const int ILS_SATURATE = 0x4; - - public const int ILS_SHADOW = 0x2; - public const int IMAGE_CURSOR = 2; - public const int IMAGE_ICON = 1; - public const int IME_CMODE_FULLSHAPE = 0x0008; - public const int IME_CMODE_KATAKANA = 0x0002; - public const int IME_CMODE_NATIVE = 0x0001; - public const int INET_E_DEFAULT_ACTION = unchecked((int) 0x800C0011); - public const int INPLACE_E_NOTOOLSPACE = unchecked((int) 0x800401A1); - - public const int KEYEVENTF_KEYUP = 0x0002; - public const int LANG_NEUTRAL = 0x00; - - public const int LBN_DBLCLK = 2; - - public const int LBN_SELCHANGE = 1; - public const int LBS_DISABLENOSCROLL = 0x1000; - public const int LBS_EXTENDEDSEL = 0x0800; - public const int LBS_HASSTRINGS = 0x0040; - public const int LBS_MULTICOLUMN = 0x0200; - public const int LBS_MULTIPLESEL = 0x0008; - public const int LBS_NOINTEGRALHEIGHT = 0x0100; - public const int LBS_NOSEL = 0x4000; - public const int LBS_NOTIFY = 0x0001; - - public const int LBS_OWNERDRAWFIXED = 0x0010, - LBS_OWNERDRAWVARIABLE = 0x0020; - - public const int LBS_USETABSTOPS = 0x0080; - public const int LBS_WANTKEYBOARDINPUT = 0x0400; - - public const int LB_ADDSTRING = 0x0180; - - public const int LB_DELETESTRING = 0x0182; - - public const int LB_ERR = (-1), - LB_ERRSPACE = (-2); - - public const int LB_FINDSTRING = 0x018F; - public const int LB_FINDSTRINGEXACT = 0x01A2; - - public const int LB_GETCARETINDEX = 0x019F, - LB_GETCURSEL = 0x0188; - - public const int LB_GETITEMHEIGHT = 0x01A1; - public const int LB_GETITEMRECT = 0x0198; - public const int LB_GETSEL = 0x0187; - - public const int LB_GETSELCOUNT = 0x0190, - LB_GETSELITEMS = 0x0191; - - public const int LB_GETTEXT = 0x0189, - LB_GETTEXTLEN = 0x018A, - LB_GETTOPINDEX = 0x018E; - - public const int LB_INSERTSTRING = 0x0181; - public const int LB_ITEMFROMPOINT = 0x01A9; - public const int LB_RESETCONTENT = 0x0184; - - public const int LB_SETCOLUMNWIDTH = 0x0195; - - public const int LB_SETCURSEL = 0x0186; - public const int LB_SETHORIZONTALEXTENT = 0x0194; - - public const int LB_SETITEMHEIGHT = 0x01A0; - - public const int LB_SETLOCALE = 0x01A5; - - public const int LB_SETSEL = 0x0185; - public const int LB_SETTABSTOPS = 0x0192; - public const int LB_SETTOPINDEX = 0x0197; - - public const int LCID_INSTALLED = 0x01; - public const int LCID_SUPPORTED = 0x02; - - public const int LOCALE_IFIRSTDAYOFWEEK = 0x0000100C; - - public const int LOCK_EXCLUSIVE = 0x2, - LOCK_ONLYONCE = 0x4; - - public const int LOCK_WRITE = 0x1; - - public const int LOGPIXELSX = 88, - LOGPIXELSY = 90; - - public const int LVA_ALIGNLEFT = 0x0001, - LVA_ALIGNTOP = 0x0002; - - public const int LVA_DEFAULT = 0x0000; - public const int LVA_SNAPTOGRID = 0x0005; - - public const int LVBKIF_SOURCE_NONE = 0x0000, - LVBKIF_SOURCE_URL = 0x0002, - LVBKIF_STYLE_NORMAL = 0x0000, - LVBKIF_STYLE_TILE = 0x0010; - - public const int LVCDI_ITEM = 0x0000, - LVCF_FMT = 0x0001; - - public const int LVCF_IMAGE = 0x0010, - LVCF_ORDER = 0x0020; - - public const int LVCF_SUBITEM = 0x0008; - public const int LVCF_TEXT = 0x0004; - public const int LVCF_WIDTH = 0x0002; - public const int LVFI_NEARESTXY = 0x0040; - public const int LVFI_PARAM = 0x0001; - - public const int LVFI_PARTIAL = 0x0008, - LVFI_STRING = 0x0002; - - public const int LVGA_FOOTER_CENTER = 0x00000010; - public const int LVGA_FOOTER_LEFT = 0x00000008; - public const int LVGA_FOOTER_RIGHT = 0x00000020; - public const int LVGA_HEADER_CENTER = 0x00000002; - public const int LVGA_HEADER_LEFT = 0x00000001; - public const int LVGA_HEADER_RIGHT = 0x00000004; - public const int LVGF_ALIGN = 0x00000008; - public const int LVGF_FOOTER = 0x00000002; - public const int LVGF_GROUPID = 0x00000010; - public const int LVGF_HEADER = 0x00000001; - public const int LVGF_NONE = 0x00000000; - public const int LVGF_STATE = 0x00000004; - - public const int LVGS_COLLAPSED = 0x00000001, - LVGS_HIDDEN = 0x00000002; - - public const int LVGS_NORMAL = 0x00000000; - - public const int LVHT_ABOVE = 0x0008, - LVHT_BELOW = 0x0010; - - public const int LVHT_LEFT = 0x0040; - public const int LVHT_NOWHERE = 0x0001; - public const int LVHT_ONITEM = (0x0002 | 0x0004 | 0x0008); - - public const int LVHT_ONITEMICON = 0x0002, - LVHT_ONITEMLABEL = 0x0004; - - public const int LVHT_ONITEMSTATEICON = 0x0008; - public const int LVHT_RIGHT = 0x0020; - public const int LVIF_COLUMNS = 0x0200; - public const int LVIF_GROUPID = 0x0100; - - public const int LVIF_IMAGE = 0x0002, - LVIF_INDENT = 0x0010, - LVIF_PARAM = 0x0004, - LVIF_STATE = 0x0008; - - public const int LVIF_TEXT = 0x0001; - public const int LVIM_AFTER = 0x00000001; - - public const int LVIR_BOUNDS = 0, - LVIR_ICON = 1, - LVIR_LABEL = 2, - LVIR_SELECTBOUNDS = 3; - - public const int LVIS_CUT = 0x0004, - LVIS_DROPHILITED = 0x0008; - - public const int LVIS_FOCUSED = 0x0001; - - public const int LVIS_OVERLAYMASK = 0x0F00; - - public const int LVIS_SELECTED = 0x0002; - - public const int LVIS_STATEIMAGEMASK = 0xF000; - - public const int LVM_ARRANGE = (0x1000 + 22); - - public const int LVM_DELETEALLITEMS = (0x1000 + 9); - - public const int LVM_DELETECOLUMN = (0x1000 + 28); - public const int LVM_DELETEITEM = (0x1000 + 8); - - public const int LVM_EDITLABELA = (0x1000 + 23), - LVM_EDITLABELW = (0x1000 + 118); - - public const int LVM_ENABLEGROUPVIEW = (0x1000 + 157); - public const int LVM_ENSUREVISIBLE = (0x1000 + 19); - - public const int LVM_FINDITEMA = (0x1000 + 13), - LVM_FINDITEMW = (0x1000 + 83); - - public const int LVM_GETCOLUMNA = (0x1000 + 25), - LVM_GETCOLUMNW = (0x1000 + 95); - - public const int LVM_GETCOLUMNWIDTH = (0x1000 + 29); - public const int LVM_GETGROUPINFO = (0x1000 + 149); - public const int LVM_GETHEADER = (0x1000 + 31); - public const int LVM_GETHOTITEM = (0x1000 + 61); - public const int LVM_GETINSERTMARK = (0x1000 + 167); - public const int LVM_GETINSERTMARKCOLOR = (0x1000 + 171); - public const int LVM_GETINSERTMARKRECT = (0x1000 + 169); - - public const int LVM_GETISEARCHSTRINGA = (0x1000 + 52), - LVM_GETISEARCHSTRINGW = (0x1000 + 117); - - public const int LVM_GETITEMA = (0x1000 + 5); - - public const int LVM_GETITEMRECT = (0x1000 + 14); - - public const int LVM_GETITEMSTATE = (0x1000 + 44), - LVM_GETITEMTEXTA = (0x1000 + 45), - LVM_GETITEMTEXTW = (0x1000 + 115); - - public const int LVM_GETITEMW = (0x1000 + 75); - public const int LVM_GETNEXTITEM = (0x1000 + 12); - public const int LVM_GETSELECTEDCOUNT = (0x1000 + 50); - - public const int LVM_GETSTRINGWIDTHA = (0x1000 + 17), - LVM_GETSTRINGWIDTHW = (0x1000 + 87); - - public const int LVM_GETSUBITEMRECT = (0x1000 + 56); - public const int LVM_GETTILEVIEWINFO = (0x1000 + 163); - public const int LVM_GETTOPINDEX = (0x1000 + 39); - public const int LVM_HASGROUP = (0x1000 + 161); - - public const int LVM_HITTEST = (0x1000 + 18); - - public const int LVM_INSERTCOLUMNA = (0x1000 + 27), - LVM_INSERTCOLUMNW = (0x1000 + 97), - LVM_INSERTGROUP = (0x1000 + 145); - - public const int LVM_INSERTITEMA = (0x1000 + 7), - LVM_INSERTITEMW = (0x1000 + 77); - - public const int LVM_INSERTMARKHITTEST = (0x1000 + 168); - - public const int LVM_ISGROUPVIEWENABLED = (0x1000 + 175); - public const int LVM_MOVEITEMTOGROUP = (0x1000 + 154); - - public const int LVM_REMOVEALLGROUPS = (0x1000 + 160); - - public const int LVM_REMOVEGROUP = (0x1000 + 150); - - public const int LVM_SCROLL = (0x1000 + 20), - LVM_SETBKCOLOR = (0x1000 + 1), - LVM_SETBKIMAGEA = (0x1000 + 68), - LVM_SETBKIMAGEW = (0x1000 + 138); - - public const int LVM_SETCOLUMNA = (0x1000 + 26), - LVM_SETCOLUMNW = (0x1000 + 96); - - public const int LVM_SETCOLUMNWIDTH = (0x1000 + 30); - - public const int LVM_SETEXTENDEDLISTVIEWSTYLE = (0x1000 + 54); - public const int LVM_SETGROUPINFO = (0x1000 + 147); - public const int LVM_SETIMAGELIST = (0x1000 + 3); - public const int LVM_SETINFOTIP = (0x1000 + 173); - - public const int LVM_SETINSERTMARK = (0x1000 + 166); - - public const int LVM_SETINSERTMARKCOLOR = (0x1000 + 170); - public const int LVM_SETITEMA = (0x1000 + 6); - public const int LVM_SETITEMCOUNT = (0x1000 + 47); - - public const int LVM_SETITEMPOSITION = (0x1000 + 15); - - public const int LVM_SETITEMPOSITION32 = (0x01000 + 49); - - public const int LVM_SETITEMSTATE = (0x1000 + 43); - - public const int LVM_SETITEMTEXTA = (0x1000 + 46), - LVM_SETITEMTEXTW = (0x1000 + 116); - - public const int LVM_SETITEMW = (0x1000 + 76); - public const int LVM_SETTEXTBKCOLOR = (0x1000 + 38); - public const int LVM_SETTEXTCOLOR = (0x1000 + 36); - - public const int LVM_SETTILEVIEWINFO = (0x1000 + 162); - - public const int LVM_SETTOOLTIPS = (0x1000 + 74); - public const int LVM_SETVIEW = (0x1000 + 142); - public const int LVM_SORTITEMS = (0x1000 + 48); - public const int LVM_SUBITEMHITTEST = (0x1000 + 57); - - public const int LVM_UPDATE = (0x1000 + 42), - LVNI_FOCUSED = 0x0001, - LVNI_SELECTED = 0x0002; - - public const int LVN_BEGINDRAG = ((0 - 100) - 9); - - public const int LVN_BEGINLABELEDITA = ((0 - 100) - 5), - LVN_BEGINLABELEDITW = ((0 - 100) - 75); - - public const int LVN_BEGINRDRAG = ((0 - 100) - 11); - public const int LVN_COLUMNCLICK = ((0 - 100) - 8); - - public const int LVN_ENDLABELEDITA = ((0 - 100) - 6), - LVN_ENDLABELEDITW = ((0 - 100) - 76); - - public const int LVN_GETDISPINFOA = ((0 - 100) - 50), - LVN_GETDISPINFOW = ((0 - 100) - 77); - - public const int LVN_GETINFOTIPA = ((0 - 100) - 57), - LVN_GETINFOTIPW = ((0 - 100) - 58); - - public const int LVN_ITEMACTIVATE = ((0 - 100) - 14); - public const int LVN_ITEMCHANGED = ((0 - 100) - 1); - public const int LVN_ITEMCHANGING = ((0 - 100) - 0); - public const int LVN_KEYDOWN = ((0 - 100) - 55); - - public const int LVN_ODCACHEHINT = ((0 - 100) - 13); - - public const int LVN_ODFINDITEMA = ((0 - 100) - 52), - LVN_ODFINDITEMW = ((0 - 100) - 79); - - public const int LVN_ODSTATECHANGED = ((0 - 100) - 15), - LVN_SETDISPINFOA = ((0 - 100) - 51), - LVN_SETDISPINFOW = ((0 - 100) - 78); - - public const int LVSCW_AUTOSIZE = -1, - LVSCW_AUTOSIZE_USEHEADER = -2; - - public const int LVSIL_NORMAL = 0, - LVSIL_SMALL = 1, - LVSIL_STATE = 2; - - public const int LVS_ALIGNLEFT = 0x0800; - public const int LVS_ALIGNTOP = 0x0000; - - public const int LVS_AUTOARRANGE = 0x0100, - LVS_EDITLABELS = 0x0200; - - public const int LVS_EX_CHECKBOXES = 0x00000004; - public const int LVS_EX_FULLROWSELECT = 0x00000020; - public const int LVS_EX_GRIDLINES = 0x00000001; - public const int LVS_EX_HEADERDRAGDROP = 0x00000010; - public const int LVS_EX_INFOTIP = 0x00000400; - public const int LVS_EX_ONECLICKACTIVATE = 0x00000040; - public const int LVS_EX_TRACKSELECT = 0x00000008; - public const int LVS_EX_TWOCLICKACTIVATE = 0x00000080; - public const int LVS_EX_UNDERLINEHOT = 0x0800; - public const int LVS_ICON = 0x0000; - public const int LVS_LIST = 0x0003; - public const int LVS_NOCOLUMNHEADER = 0x4000; - public const int LVS_NOLABELWRAP = 0x0080; - public const int LVS_NOSCROLL = 0x2000; - - public const int LVS_NOSORTHEADER = unchecked(0x8000), - LVS_OWNERDATA = 0x1000; - - public const int LVS_REPORT = 0x0001; - public const int LVS_SHAREIMAGELISTS = 0x0040; - public const int LVS_SHOWSELALWAYS = 0x0008; - public const int LVS_SINGLESEL = 0x0004; - public const int LVS_SMALLICON = 0x0002; - - public const int LVS_SORTASCENDING = 0x0010, - LVS_SORTDESCENDING = 0x0020; - - public const int LVTVIF_FIXEDSIZE = 0x00000003; - public const int LVTVIM_COLUMNS = 0x00000002; - public const int LVTVIM_TILESIZE = 0x00000001; - public const int LV_VIEW_TILE = 0x0004; - - public const int LWA_ALPHA = 0x00000002; - - public const int LWA_COLORKEY = 0x00000001; - - public const int MAX_PATH = 260; - - public const uint MA_ACTIVATE = 1; - public const uint MA_ACTIVATEANDEAT = 2; - public const uint MA_NOACTIVATE = 3; - public const uint MA_NOACTIVATEANDEAT = 4; - - public const int MB_ICONASTERISK = 0x000040; - public const int MB_ICONEXCLAMATION = 0x000030; - - public const int MB_ICONHAND = 0x000010, - MB_ICONQUESTION = 0x000020; - - public const int MB_OK = 0x00000000; - - public const int MCHT_CALENDAR = 0x00020000; - - public const int MCHT_CALENDARBK = (0x00020000), - MCHT_CALENDARDATE = (0x00020000 | 0x0001), - MCHT_CALENDARDATENEXT = ((0x00020000 | 0x0001) | 0x01000000), - MCHT_CALENDARDATEPREV = ((0x00020000 | 0x0001) | 0x02000000), - MCHT_CALENDARDAY = (0x00020000 | 0x0002), - MCHT_CALENDARWEEKNUM = (0x00020000 | 0x0003); - - public const int MCHT_TITLE = 0x00010000; - public const int MCHT_TITLEBK = (0x00010000); - - public const int MCHT_TITLEBTNNEXT = (0x00010000 | 0x01000000 | 0x0003), - MCHT_TITLEBTNPREV = (0x00010000 | 0x02000000 | 0x0003); - - public const int MCHT_TITLEMONTH = (0x00010000 | 0x0001), - MCHT_TITLEYEAR = (0x00010000 | 0x0002); - - public const int MCHT_TODAYLINK = 0x00030000; - public const int MCM_GETMAXTODAYWIDTH = (0x1000 + 21); - public const int MCM_GETMINREQRECT = (0x1000 + 9); - public const int MCM_GETMONTHRANGE = (0x1000 + 7); - - public const int MCM_GETTODAY = (0x1000 + 13), - MCM_HITTEST = (0x1000 + 14); - - public const int MCM_SETCOLOR = (0x1000 + 10); - public const int MCM_SETFIRSTDAYOFWEEK = (0x1000 + 15); - public const int MCM_SETMAXSELCOUNT = (0x1000 + 4); - public const int MCM_SETMONTHDELTA = (0x1000 + 20); - public const int MCM_SETRANGE = (0x1000 + 18); - public const int MCM_SETSELRANGE = (0x1000 + 6); - public const int MCM_SETTODAY = (0x1000 + 12); - public const int MCN_GETDAYSTATE = ((0 - 750) + 3); - public const int MCN_SELCHANGE = ((0 - 750) + 1); - public const int MCN_SELECT = ((0 - 750) + 4); - public const int MCSC_MONTHBK = 4; - - public const int MCSC_TEXT = 1, - MCSC_TITLEBK = 2, - MCSC_TITLETEXT = 3; - - public const int MCSC_TRAILINGTEXT = 5; - - public const int MCS_DAYSTATE = 0x0001, - MCS_MULTISELECT = 0x0002; - - public const int MCS_NOTODAY = 0x0010; - - public const int MCS_NOTODAYCIRCLE = 0x0008; - public const int MCS_WEEKNUMBERS = 0x0004; - public const int MDITILE_HORIZONTAL = 0x0001; - public const int MDITILE_VERTICAL = 0x0000; - public const int MEMBERID_NIL = (-1); - public const int MFT_MENUBREAK = 0x00000040; - public const int MFT_RIGHTJUSTIFY = 0x00004000; - public const int MFT_RIGHTORDER = 0x00002000; - public const int MFT_SEPARATOR = 0x00000800; - - public const int MF_BYCOMMAND = 0x00000000, - MF_BYPOSITION = 0x00000400, - MF_ENABLED = 0x00000000, - MF_GRAYED = 0x00000001, - MF_POPUP = 0x00000010, - MF_SYSMENU = 0x00002000; - - public const int MIIM_DATA = 0x00000020; - public const int MIIM_ID = 0x00000002; - public const int MIIM_STATE = 0x00000001; - - public const int MIIM_SUBMENU = 0x00000004, - MIIM_TYPE = 0x00000010; - - public const int MK_CONTROL = 0x0008; - public const int MK_LBUTTON = 0x0001; - public const int MK_MBUTTON = 0x0010; - - public const int MK_RBUTTON = 0x0002, - MK_SHIFT = 0x0004; - - public const int MMIO_ALLOCBUF = 0x00010000, - MMIO_FINDRIFF = 0x00000020; - - public const int MMIO_READ = 0x00000000; - public const int MM_ANISOTROPIC = 8; - public const int MM_TEXT = 1; - - public const int MNC_EXECUTE = 2, - MNC_SELECT = 3; - - public const int MSAA_MENU_SIG = (unchecked((int) 0xAA0DF00D)); - - public const int NFR_ANSI = 1, - NFR_UNICODE = 2; - - public const int NIF_ICON = 0x00000002; - public const int NIF_MESSAGE = 0x00000001; - public const int NIF_TIP = 0x00000004; - public const int NIM_ADD = 0x00000000; - public const int NIM_DELETE = 0x00000002; - public const int NIM_MODIFY = 0x00000001; - - public const int NM_CLICK = ((0 - 0) - 2); - - public const int NM_CUSTOMDRAW = ((0 - 0) - 12); - - public const int NM_DBLCLK = ((0 - 0) - 3), - NM_RCLICK = ((0 - 0) - 5), - NM_RDBLCLK = ((0 - 0) - 6); - - public const int NM_RELEASEDCAPTURE = ((0 - 0) - 16); - - public const int OBJ_BITMAP = 7; - - public const int OBJ_BRUSH = 2, - OBJ_DC = 3; - - public const int OBJ_ENHMETADC = 12; - public const int OBJ_EXTPEN = 11; - public const int OBJ_FONT = 6; - public const int OBJ_MEMDC = 10; - - public const int OBJ_METADC = 4; - - public const int OBJ_METAFILE = 9; - - public const int OBJ_PAL = 5; - - public const int OBJ_PEN = 1; - - public const int OBJ_REGION = 8; - - public const int ODS_CHECKED = 0x0008, - ODS_COMBOBOXEDIT = 0x1000, - ODS_DEFAULT = 0x0020, - ODS_DISABLED = 0x0004, - ODS_FOCUS = 0x0010, - ODS_GRAYED = 0x0002, - ODS_HOTLIGHT = 0x0040, - ODS_INACTIVE = 0x0080, - ODS_NOACCEL = 0x0100, - ODS_NOFOCUSRECT = 0x0200, - ODS_SELECTED = 0x0001; - - public const int OFN_ALLOWMULTISELECT = 0x00000200; - public const int OFN_CREATEPROMPT = 0x00002000; - public const int OFN_ENABLEHOOK = 0x00000020; - public const int OFN_ENABLESIZING = 0x00800000; - public const int OFN_EXPLORER = 0x00080000; - public const int OFN_FILEMUSTEXIST = 0x00001000; - - public const int OFN_HIDEREADONLY = 0x00000004, - OFN_NOCHANGEDIR = 0x00000008; - - public const int OFN_NODEREFERENCELINKS = 0x00100000; - public const int OFN_NOVALIDATE = 0x00000100; - public const int OFN_OVERWRITEPROMPT = 0x00000002; - public const int OFN_PATHMUSTEXIST = 0x00000800; - public const int OFN_READONLY = 0x00000001; - public const int OFN_SHOWHELP = 0x00000010; - public const int OFN_USESHELLITEM = 0x01000000; - - public const int OLECLOSE_PROMPTSAVE = 2; - - public const int OLECLOSE_SAVEIFDIRTY = 0; - public const int OLEIVERB_DISCARDUNDOSTATE = -6; - public const int OLEIVERB_HIDE = -3; - public const int OLEIVERB_INPLACEACTIVATE = -5; - public const int OLEIVERB_PRIMARY = 0; - public const int OLEIVERB_PROPERTIES = -7; - public const int OLEIVERB_SHOW = -1; - public const int OLEIVERB_UIACTIVATE = -4; - - public const int OLEMISC_ACTIVATEWHENVISIBLE = 0x0000100, - OLEMISC_ACTSLIKEBUTTON = 0x00001000; - - public const int OLEMISC_INSIDEOUT = 0x00000080; - public const int OLEMISC_RECOMPOSEONRESIZE = 0x00000001; - public const int OLEMISC_SETCLIENTSITEFIRST = 0x00020000; - - public const int OLE_E_NOCONNECTION = unchecked((int) 0x80040004), - OLE_E_PROMPTSAVECANCELLED = unchecked((int) 0x8004000C); - - public const int PATCOPY = 0x00F00021, - PATINVERT = 0x005A0049; - - public const int PBM_SETBARCOLOR = (0x0400 + 9), - PBM_SETBKCOLOR = (0x2000 + 1); - - public const int PBM_SETPOS = (0x0400 + 2); - public const int PBM_SETRANGE = (0x0400 + 1); - public const int PBM_SETRANGE32 = (0x0400 + 6); - public const int PBM_SETSTEP = (0x0400 + 4); - public const int PBS_SMOOTH = 0x01; - public const int PDERR_CREATEICFAILURE = 0x100A; - public const int PDERR_DEFAULTDIFFERENT = 0x100C; - public const int PDERR_DNDMMISMATCH = 0x1009; - - public const int PDERR_GETDEVMODEFAIL = 0x1005, - PDERR_INITFAILURE = 0x1006; - - public const int PDERR_LOADDRVFAILURE = 0x1004; - - public const int PDERR_NODEFAULTPRN = 0x1008; - - public const int PDERR_NODEVICES = 0x1007; - public const int PDERR_PARSEFAILURE = 0x1002; - - public const int PDERR_PRINTERNOTFOUND = 0x100B; - - public const int PDERR_RETDEFFAILURE = 0x1003; - public const int PDERR_SETUPFAILURE = 0x1001; - - public const int PD_COLLATE = 0x00000010; - - public const int PD_DISABLEPRINTTOFILE = 0x00080000; - - public const int PD_ENABLEPRINTHOOK = 0x00001000; - public const int PD_NOCURRENTPAGE = 0x00800000; - - public const int PD_NONETWORKBUTTON = 0x00200000; - - public const int PD_NOPAGENUMS = 0x00000008; - public const int PD_NOSELECTION = 0x00000004; - - public const int PD_PRINTTOFILE = 0x00000020, - PD_SHOWHELP = 0x00000800; - - public const int PLANES = 14; - public const int PM_NOREMOVE = 0x0000; - public const int PM_NOYIELD = 0x0002; - public const int PM_REMOVE = 0x0001; - public const int PRF_CHECKVISIBLE = 0x00000001; - public const int PRF_CHILDREN = 0x00000010; - - public const int PRF_CLIENT = 0x00000004, - PRF_ERASEBKGND = 0x00000008; - - public const int PRF_NONCLIENT = 0x00000002; - - public const int PSD_DISABLEMARGINS = 0x00000010; - - public const int PSD_DISABLEORIENTATION = 0x00000100, - PSD_DISABLEPAPER = 0x00000200; - - public const int PSD_DISABLEPRINTER = 0x00000020; - - public const int PSD_ENABLEPAGESETUPHOOK = 0x00002000; - - public const int PSD_INHUNDREDTHSOFMILLIMETERS = 0x00000008; - public const int PSD_MARGINS = 0x00000002; - public const int PSD_MINMARGINS = 0x00000001; - - public const int PSD_NONETWORKBUTTON = 0x00200000; - - public const int PSD_SHOWHELP = 0x00000800; - - public const int PSM_SETFINISHTEXTA = (0x0400 + 115), - PSM_SETFINISHTEXTW = (0x0400 + 121); - - public const int PSM_SETTITLEA = (0x0400 + 111), - PSM_SETTITLEW = (0x0400 + 120); - - public const int PS_DOT = 2; - public const int PS_SOLID = 0; - - public const int QS_ALLEVENTS = QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY, - QS_ALLINPUT = QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY | QS_SENDMESSAGE; - - public const int QS_ALLPOSTMESSAGE = 0x0100; - public const int QS_HOTKEY = 0x0080; - public const int QS_INPUT = QS_MOUSE | QS_KEY; - - public const int QS_KEY = 0x0001; - public const int QS_MOUSE = QS_MOUSEMOVE | QS_MOUSEBUTTON; - - public const int QS_MOUSEBUTTON = 0x0004; - - public const int QS_MOUSEMOVE = 0x0002; - - public const int QS_PAINT = 0x0020; - - public const int QS_POSTMESSAGE = 0x0008; - - public const int QS_SENDMESSAGE = 0x0040; - - public const int QS_TIMER = 0x0010; - - public const int RB_INSERTBANDA = (0x0400 + 1), - RB_INSERTBANDW = (0x0400 + 10); - - public const int RDW_ALLCHILDREN = 0x0080; - public const int RDW_ERASE = 0x0004; - public const int RDW_FRAME = 0x0400; - public const int RDW_INVALIDATE = 0x0001; - public const int RGN_AND = 1; - public const int RGN_DIFF = 4; - public const int RPC_E_CANTCALLOUT_ININPUTSYNCCALL = unchecked((int) 0x8001010D); - public const int RPC_E_CHANGED_MODE = unchecked((int) 0x80010106); - public const int SBARS_SIZEGRIP = 0x0100; - - public const int SBS_HORZ = 0x0000, - SBS_VERT = 0x0001; - - public const int SBT_NOBORDERS = 0x0100; - public const int SBT_OWNERDRAW = 0x1000; - - public const int SBT_POPOUT = 0x0200, - SBT_RTLREADING = 0x0400; - - public const int SB_BOTTOM = 7; - - public const int SB_CTL = 2; - - public const int SB_ENDSCROLL = 8; - public const int SB_GETRECT = (0x0400 + 10); - public const int SB_GETTEXTA = (0x0400 + 2); - - public const int SB_GETTEXTLENGTHA = (0x0400 + 3), - SB_GETTEXTLENGTHW = (0x0400 + 12); - - public const int SB_GETTEXTW = (0x0400 + 13); - - public const int SB_GETTIPTEXTA = (0x0400 + 18), - SB_GETTIPTEXTW = (0x0400 + 19); - - public const int SB_HORZ = 0; - public const int SB_LEFT = 6; - - public const int SB_LINEDOWN = 1; - - public const int SB_LINELEFT = 0; - - public const int SB_LINERIGHT = 1; - - public const int SB_LINEUP = 0; - - public const int SB_PAGEDOWN = 3; - - public const int SB_PAGELEFT = 2; - - public const int SB_PAGERIGHT = 3; - - public const int SB_PAGEUP = 2; - public const int SB_RIGHT = 7; - public const int SB_SETICON = (0x0400 + 15); - public const int SB_SETPARTS = (0x0400 + 4); - - public const int SB_SETTEXTA = (0x0400 + 1), - SB_SETTEXTW = (0x0400 + 11); - - public const int SB_SETTIPTEXTA = (0x0400 + 16), - SB_SETTIPTEXTW = (0x0400 + 17); - - public const int SB_SIMPLE = (0x0400 + 9); - - public const int SB_THUMBPOSITION = 4, - SB_THUMBTRACK = 5; - - public const int SB_TOP = 6; - - public const int SB_VERT = 1; - - public const int SC_CLOSE = 0xF060, - SC_KEYMENU = 0xF100; - - public const int SC_MAXIMIZE = 0xF030; - public const int SC_MINIMIZE = 0xF020; - public const int SC_MOVE = 0xF010; - public const int SC_RESTORE = 0xF120; - public const int SC_SIZE = 0xF000; - public const int SHGFI_ADDOVERLAYS = 0x000000020; - public const int SHGFI_ATTRIBUTES = 0x000000800; - public const int SHGFI_ATTR_SPECIFIED = 0x000020000; - public const int SHGFI_DISPLAYNAME = 0x000000200; - public const int SHGFI_EXETYPE = 0x000002000; - public const int SHGFI_ICON = 0x000000100; - public const int SHGFI_ICONLOCATION = 0x000001000; - public const int SHGFI_LARGEICON = 0x000000000; - public const int SHGFI_LINKOVERLAY = 0x000008000; - public const int SHGFI_OPENICON = 0x000000002; - public const int SHGFI_OVERLAYINDEX = 0x000000040; - public const int SHGFI_PIDL = 0x000000008; - public const int SHGFI_SELECTED = 0x000010000; - public const int SHGFI_SHELLICONSIZE = 0x000000004; - public const int SHGFI_SMALLICON = 0x000000001; - public const int SHGFI_SYSICONINDEX = 0x000004000; - public const int SHGFI_TYPENAME = 0x000000400; - public const int SHGFI_USEFILEATTRIBUTES = 0x000000010; - public const int SHGFP_TYPE_CURRENT = 0; - public const int SIF_ALL = (0x0001 | 0x0002 | 0x0004 | 0x0010); - - public const int SIF_PAGE = 0x0002, - SIF_POS = 0x0004; - - public const int SIF_RANGE = 0x0001; - public const int SIF_TRACKPOS = 0x0010; - public const int SM_ARRANGE = 56; - public const int SM_CLEANBOOT = 67; - public const int SM_CMONITORS = 80; - public const int SM_CMOUSEBUTTONS = 43; - - public const int SM_CXBORDER = 5; - - public const int SM_CXCURSOR = 13; - - public const int SM_CXDOUBLECLK = 36; - public const int SM_CXDRAG = 68; - public const int SM_CXEDGE = 45; - public const int SM_CXFIXEDFRAME = 7; - public const int SM_CXFOCUSBORDER = 83; - public const int SM_CXFRAME = 32; - - public const int SM_CXHSCROLL = 21; - - public const int SM_CXHTHUMB = 10, - SM_CXICON = 11; - - public const int SM_CXICONSPACING = 38; - public const int SM_CXMAXIMIZED = 61; - public const int SM_CXMAXTRACK = 59; - public const int SM_CXMENUCHECK = 71; - public const int SM_CXMENUSIZE = 54; - - public const int SM_CXMIN = 28; - - public const int SM_CXMINIMIZED = 57; - public const int SM_CXMINSPACING = 47; - - public const int SM_CXMINTRACK = 34; - - public const int SM_CXSCREEN = 0; - public const int SM_CXSIZE = 30; - public const int SM_CXSIZEFRAME = SM_CXFRAME; - public const int SM_CXSMICON = 49; - public const int SM_CXSMSIZE = 52; - public const int SM_CXVIRTUALSCREEN = 78; - public const int SM_CXVSCROLL = 2; - public const int SM_CYBORDER = 6; - public const int SM_CYCAPTION = 4; - public const int SM_CYCURSOR = 14; - - public const int SM_CYDOUBLECLK = 37; - - public const int SM_CYDRAG = 69; - - public const int SM_CYEDGE = 46; - - public const int SM_CYFIXEDFRAME = 8; - public const int SM_CYFOCUSBORDER = 84; - public const int SM_CYFRAME = 33; - public const int SM_CYHSCROLL = 3; - public const int SM_CYICON = 12; - public const int SM_CYICONSPACING = 39; - public const int SM_CYKANJIWINDOW = 18; - public const int SM_CYMAXIMIZED = 62; - public const int SM_CYMAXTRACK = 60; - public const int SM_CYMENU = 15; - public const int SM_CYMENUCHECK = 72; - public const int SM_CYMENUSIZE = 55; - public const int SM_CYMIN = 29; - public const int SM_CYMINIMIZED = 58; - - public const int SM_CYMINSPACING = 48; - - public const int SM_CYMINTRACK = 35; - public const int SM_CYSCREEN = 1; - public const int SM_CYSIZE = 31; - public const int SM_CYSIZEFRAME = SM_CYFRAME; - - public const int SM_CYSMCAPTION = 51; - - public const int SM_CYSMICON = 50; - - public const int SM_CYSMSIZE = 53; - - public const int SM_CYVIRTUALSCREEN = 79; - public const int SM_CYVSCROLL = 20; - public const int SM_CYVTHUMB = 9; - public const int SM_DBCSENABLED = 42; - public const int SM_DEBUG = 22; - public const int SM_MENUDROPALIGNMENT = 40; - - public const int SM_MIDEASTENABLED = 74; - - public const int SM_MOUSEPRESENT = 19; - - public const int SM_MOUSEWHEELPRESENT = 75; - - public const int SM_NETWORK = 63; - public const int SM_PENWINDOWS = 41; - public const int SM_REMOTESESSION = 0x1000; - public const int SM_SAMEDISPLAYFORMAT = 81; - public const int SM_SECURE = 44; - public const int SM_SHOWSOUNDS = 70; - public const int SM_SWAPBUTTON = 23; - - public const int SM_XVIRTUALSCREEN = 76, - SM_YVIRTUALSCREEN = 77; - - public const int SND_ASYNC = 0x0001; - - public const int SND_FILENAME = 0x00020000; - - public const int SND_LOOP = 0x0008; - public const int SND_MEMORY = 0x0004; - public const int SND_NODEFAULT = 0x0002; - - public const int SND_NOSTOP = 0x0010; - - public const int SND_PURGE = 0x0040; - public const int SND_SYNC = 0000; - public const int SORT_DEFAULT = 0x0; - - public const int SPI_GETACTIVEWINDOWTRACKING = 0x1000, - SPI_GETACTIVEWNDTRKTIMEOUT = 0x2002, - SPI_GETANIMATION = 0x0048, - SPI_GETBORDER = 0x0005, - SPI_GETCARETWIDTH = 0x2006; - - public const int SPI_GETCOMBOBOXANIMATION = 0x1004; - public const int SPI_GETDEFAULTINPUTLANG = 89; - public const int SPI_GETDRAGFULLWINDOWS = 38; - - public const int SPI_GETDROPSHADOW = 0x1024, - SPI_GETFLATMENU = 0x1022; - - public const int SPI_GETFONTSMOOTHING = 0x004A; - - public const int SPI_GETFONTSMOOTHINGCONTRAST = 0x200C; - - public const int SPI_GETFONTSMOOTHINGTYPE = 0x200A; - public const int SPI_GETGRADIENTCAPTIONS = 0x1008; - public const int SPI_GETHIGHCONTRAST = 66; - public const int SPI_GETHOTTRACKING = 0x100E; - - public const int SPI_GETICONTITLELOGFONT = 0x001F; - - public const int SPI_GETICONTITLEWRAP = 0x0019; - - public const int SPI_GETKEYBOARDCUES = 0x100A, - SPI_GETKEYBOARDDELAY = 0x0016, - SPI_GETKEYBOARDPREF = 0x0044, - SPI_GETKEYBOARDSPEED = 0x000A; - - public const int SPI_GETLISTBOXSMOOTHSCROLLING = 0x1006, - SPI_GETMENUANIMATION = 0x1002; - - public const int SPI_GETMENUDROPALIGNMENT = 0x001B, - SPI_GETMENUFADE = 0x1012, - SPI_GETMENUSHOWDELAY = 0x006A; - - public const int SPI_GETMOUSEHOVERHEIGHT = 0x0064, - SPI_GETMOUSEHOVERTIME = 0x0066; - - public const int SPI_GETMOUSEHOVERWIDTH = 0x0062; - public const int SPI_GETMOUSESPEED = 0x0070; - public const int SPI_GETNONCLIENTMETRICS = 41; - - public const int SPI_GETSELECTIONFADE = 0x1014; - - public const int SPI_GETSNAPTODEFBUTTON = 95; - - public const int SPI_GETTOOLTIPANIMATION = 0x1016, - SPI_GETUIEFFECTS = 0x103E; - - public const int SPI_GETWHEELSCROLLLINES = 104; - - public const int SPI_GETWORKAREA = 48; - - public const int SPI_ICONHORIZONTALSPACING = 0x000D, - SPI_ICONVERTICALSPACING = 0x0018; - - public const int SRCCOPY = 0x00CC0020; - - public const int SS_CENTER = 0x00000001; - public const int SS_LEFT = 0x00000000; - public const int SS_NOPREFIX = 0x00000080; - public const int SS_OWNERDRAW = 0x0000000D; - public const int SS_RIGHT = 0x00000002; - public const int SS_SUNKEN = 0x00001000; - public const int STARTF_USESHOWWINDOW = 0x00000001; - - public const int STATFLAG_DEFAULT = 0x0, - STATFLAG_NONAME = 0x1, - STATFLAG_NOOPEN = 0x2; - - public const int STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 0x4; - - public const int STGC_DEFAULT = 0x0; - - public const int STGC_ONLYIFCURRENT = 0x2; - - public const int STGC_OVERWRITE = 0x1; - public const int STGM_CONVERT = 0x00020000; - public const int STGM_CREATE = 0x00001000; - public const int STGM_DELETEONRELEASE = 0x04000000; - public const int STGM_READ = 0x00000000; - - public const int STGM_READWRITE = 0x00000002, - STGM_SHARE_EXCLUSIVE = 0x00000010; - - public const int STGM_TRANSACTED = 0x00010000; - public const int STGM_WRITE = 0x00000001; - public const int STG_E_ACCESSDENIED = unchecked((int) 0x80030005); - public const int STG_E_DISKISWRITEPROTECTED = unchecked((int) 0x80030013); - public const int STG_E_FILENOTFOUND = unchecked((int) 0x80030002); - public const int STG_E_INSUFFICIENTMEMORY = unchecked((int) 0x80030008); - public const int STG_E_INVALIDFUNCTION = unchecked((int) 0x80030001); - public const int STG_E_INVALIDHANDLE = unchecked((int) 0x80030006); - public const int STG_E_INVALIDPOINTER = unchecked((int) 0x80030009); - public const int STG_E_LOCKVIOLATION = unchecked((int) 0x80030021); - public const int STG_E_NOMOREFILES = unchecked((int) 0x80030012); - public const int STG_E_PATHNOTFOUND = unchecked((int) 0x80030003); - public const int STG_E_READFAULT = unchecked((int) 0x8003001E); - public const int STG_E_SEEKERROR = unchecked((int) 0x80030019); - public const int STG_E_SHAREVIOLATION = unchecked((int) 0x80030020); - public const int STG_E_TOOMANYOPENFILES = unchecked((int) 0x80030004); - public const int STG_E_WRITEFAULT = unchecked((int) 0x8003001D); - - public const int STREAM_SEEK_CUR = 0x1, - STREAM_SEEK_END = 0x2; - - public const int STREAM_SEEK_SET = 0x0; - public const int SUBLANG_DEFAULT = 0x01; - public const int SWP_DRAWFRAME = 0x0020; - public const int SWP_HIDEWINDOW = 0x0080; - public const int SWP_NOACTIVATE = 0x0010; - public const int SWP_NOMOVE = 0x0002; - public const int SWP_NOSIZE = 0x0001; - public const int SWP_NOZORDER = 0x0004; - public const int SWP_SHOWWINDOW = 0x0040; - public const int SW_ERASE = 0x0004; - public const int SW_HIDE = 0; - public const int SW_INVALIDATE = 0x0002; - public const int SW_MAX = 10; - public const int SW_MAXIMIZE = 3; - public const int SW_MINIMIZE = 6; - public const int SW_NORMAL = 1; - public const int SW_RESTORE = 9; - public const int SW_SCROLLCHILDREN = 0x0001; - public const int SW_SHOW = 5; - public const int SW_SHOWMAXIMIZED = 3; - public const int SW_SHOWMINIMIZED = 2; - - public const int SW_SHOWMINNOACTIVE = 7, - SW_SHOWNA = 8; - - public const int SW_SHOWNOACTIVATE = 4; - public const int SW_SMOOTHSCROLL = 0x0010; - - public const int S_FALSE = 0x00000001; - public const int S_OK = 0x00000000; - public const int TBIF_COMMAND = 0x00000020; - public const int TBIF_IMAGE = 0x00000001; - public const int TBIF_SIZE = 0x00000040; - - public const int TBIF_STATE = 0x00000004, - TBIF_STYLE = 0x00000008; - - public const int TBIF_TEXT = 0x00000002; - public const int TBM_GETPOS = (0x0400); - public const int TBM_SETLINESIZE = (0x0400 + 23); - public const int TBM_SETPAGESIZE = (0x0400 + 21); - - public const int TBM_SETPOS = (0x0400 + 5), - TBM_SETRANGE = (0x0400 + 6); - - public const int TBM_SETRANGEMAX = (0x0400 + 8); - public const int TBM_SETRANGEMIN = (0x0400 + 7); - public const int TBM_SETTIC = (0x0400 + 4); - public const int TBM_SETTICFREQ = (0x0400 + 20); - public const int TBN_DROPDOWN = ((0 - 700) - 10); - - public const int TBN_GETBUTTONINFOA = ((0 - 700) - 0), - TBN_GETBUTTONINFOW = ((0 - 700) - 20); - - public const int TBN_GETDISPINFOA = ((0 - 700) - 16), - TBN_GETDISPINFOW = ((0 - 700) - 17), - TBN_GETINFOTIPA = ((0 - 700) - 18), - TBN_GETINFOTIPW = ((0 - 700) - 19); - - public const int TBN_QUERYINSERT = ((0 - 700) - 6); - - public const int TBSTATE_CHECKED = 0x01, - TBSTATE_ENABLED = 0x04, - TBSTATE_HIDDEN = 0x08, - TBSTATE_INDETERMINATE = 0x10, - TBSTYLE_BUTTON = 0x00; - - public const int TBSTYLE_CHECK = 0x02, - TBSTYLE_DROPDOWN = 0x08; - - public const int TBSTYLE_EX_DRAWDDARROWS = 0x00000001; - - public const int TBSTYLE_FLAT = 0x0800, - TBSTYLE_LIST = 0x1000; - - public const int TBSTYLE_SEP = 0x01; - public const int TBSTYLE_TOOLTIPS = 0x0100; - public const int TBSTYLE_WRAPPABLE = 0x0200; - public const int TBS_AUTOTICKS = 0x0001; - public const int TBS_BOTH = 0x0008; - public const int TBS_BOTTOM = 0x0000; - public const int TBS_NOTICKS = 0x0010; - public const int TBS_TOP = 0x0004; - public const int TBS_VERT = 0x0002; - - public const int TB_ADDBUTTONSA = (0x0400 + 20), - TB_ADDBUTTONSW = (0x0400 + 68); - - public const int TB_ADDSTRINGA = (0x0400 + 28), - TB_ADDSTRINGW = (0x0400 + 77); - - public const int TB_AUTOSIZE = (0x0400 + 33); - - public const int TB_BOTTOM = 7; - public const int TB_BUTTONSTRUCTSIZE = (0x0400 + 30); - public const int TB_DELETEBUTTON = (0x0400 + 22); - public const int TB_ENABLEBUTTON = (0x0400 + 1); - public const int TB_ENDTRACK = 8; - public const int TB_GETBUTTON = (0x0400 + 23); - public const int TB_GETBUTTONINFOA = (0x0400 + 65); - public const int TB_GETBUTTONINFOW = (0x0400 + 63); - public const int TB_GETBUTTONSIZE = (0x0400 + 58); - - public const int TB_GETBUTTONTEXTA = (0x0400 + 45), - TB_GETBUTTONTEXTW = (0x0400 + 75); - - public const int TB_GETRECT = (0x0400 + 51); - - public const int TB_GETROWS = (0x0400 + 40); - - public const int TB_INSERTBUTTONA = (0x0400 + 21), - TB_INSERTBUTTONW = (0x0400 + 67); - - public const int TB_ISBUTTONCHECKED = (0x0400 + 10), - TB_ISBUTTONINDETERMINATE = (0x0400 + 13); - - public const int TB_LINEDOWN = 1; - public const int TB_LINEUP = 0; - - public const int TB_MAPACCELERATORA = (0x0400 + 78); - - public const int TB_MAPACCELERATORW = (0x0400 + 90); - - public const int TB_PAGEDOWN = 3; - public const int TB_PAGEUP = 2; - - public const int TB_SAVERESTOREA = (0x0400 + 26), - TB_SAVERESTOREW = (0x0400 + 76); - - public const int TB_SETBUTTONINFOA = (0x0400 + 66); - public const int TB_SETBUTTONINFOW = (0x0400 + 64); - public const int TB_SETBUTTONSIZE = (0x0400 + 31); - public const int TB_SETEXTENDEDSTYLE = (0x0400 + 84); - public const int TB_SETIMAGELIST = (0x0400 + 48); - - public const int TB_SETTOOLTIPS = (0x0400 + 36); - - public const int TB_THUMBPOSITION = 4, - TB_THUMBTRACK = 5, - TB_TOP = 6; - - public const int TCIF_IMAGE = 0x0002; - public const int TCIF_TEXT = 0x0001; - public const int TCM_ADJUSTRECT = (0x1300 + 40); - public const int TCM_DELETEALLITEMS = (0x1300 + 9); - public const int TCM_DELETEITEM = (0x1300 + 8); - public const int TCM_GETCURSEL = (0x1300 + 11); - public const int TCM_GETITEMA = (0x1300 + 5); - public const int TCM_GETITEMRECT = (0x1300 + 10); - public const int TCM_GETITEMW = (0x1300 + 60); - - public const int TCM_GETROWCOUNT = (0x1300 + 44), - TCM_GETTOOLTIPS = (0x1300 + 45); - - public const int TCM_INSERTITEMA = (0x1300 + 7), - TCM_INSERTITEMW = (0x1300 + 62); - - public const int TCM_SETCURSEL = (0x1300 + 12); - public const int TCM_SETIMAGELIST = (0x1300 + 3); - public const int TCM_SETITEMA = (0x1300 + 6); - public const int TCM_SETITEMSIZE = (0x1300 + 41); - public const int TCM_SETITEMW = (0x1300 + 61); - public const int TCM_SETPADDING = (0x1300 + 43); - - public const int TCM_SETTOOLTIPS = (0x1300 + 46), - TCN_SELCHANGE = ((0 - 550) - 1), - TCN_SELCHANGING = ((0 - 550) - 2); - - public const int TCS_BOTTOM = 0x0002; - public const int TCS_BUTTONS = 0x0100; - public const int TCS_FIXEDWIDTH = 0x0400; - - public const int TCS_FLATBUTTONS = 0x0008, - TCS_HOTTRACK = 0x0040; - - public const int TCS_MULTILINE = 0x0200; - public const int TCS_OWNERDRAWFIXED = 0x2000; - public const int TCS_RAGGEDRIGHT = 0x0800; - public const int TCS_RIGHT = 0x0002; - public const int TCS_RIGHTJUSTIFY = 0x0000; - public const int TCS_TABS = 0x0000; - public const int TCS_TOOLTIPS = 0x4000; - public const int TCS_VERTICAL = 0x0080; - - public const int TME_HOVER = 0x00000001, - TME_LEAVE = 0x00000002; - - public const int TO_ADVANCEDTYPOGRAPHY = 1; - - public const int TPM_LEFTALIGN = 0x0000; - public const int TPM_LEFTBUTTON = 0x0000; - public const int TPM_VERTICAL = 0x0040; - public const int TRANSPARENT = 1; - public const int TTDT_AUTOMATIC = 0; - - public const int TTDT_AUTOPOP = 2, - TTDT_INITIAL = 3; - - public const int TTDT_RESHOW = 1; - public const int TTF_ABSOLUTE = 0x0080; - public const int TTF_CENTERTIP = 0x0002; - - public const int TTF_IDISHWND = 0x0001, - TTF_RTLREADING = 0x0004; - - public const int TTF_SUBCLASS = 0x0010; - - public const int TTF_TRACK = 0x0020; - - public const int TTF_TRANSPARENT = 0x0100; - - public const int TTI_WARNING = 2; - - public const int TTM_ACTIVATE = (0x0400 + 1); - - public const int TTM_ADDTOOLA = (0x0400 + 4), - TTM_ADDTOOLW = (0x0400 + 50); - - public const int TTM_ADJUSTRECT = (0x400 + 31); - - public const int TTM_DELTOOLA = (0x0400 + 5), - TTM_DELTOOLW = (0x0400 + 51); - - public const int TTM_ENUMTOOLSA = (0x0400 + 14), - TTM_ENUMTOOLSW = (0x0400 + 58), - TTM_GETCURRENTTOOLA = (0x0400 + 15), - TTM_GETCURRENTTOOLW = (0x0400 + 59); - - public const int TTM_GETDELAYTIME = (0x0400 + 21); - - public const int TTM_GETTEXTA = (0x0400 + 11), - TTM_GETTEXTW = (0x0400 + 56); - - public const int TTM_GETTIPBKCOLOR = (0x0400 + 22); - - public const int TTM_GETTIPTEXTCOLOR = (0x0400 + 23), - TTM_GETTOOLINFOA = (0x0400 + 8), - TTM_GETTOOLINFOW = (0x0400 + 53); - - public const int TTM_HITTESTA = (0x0400 + 10), - TTM_HITTESTW = (0x0400 + 55); - - public const int TTM_NEWTOOLRECTA = (0x0400 + 6), - TTM_NEWTOOLRECTW = (0x0400 + 52); - - public const int TTM_POP = (0x0400 + 28); - - public const int TTM_RELAYEVENT = (0x0400 + 7); - - public const int TTM_SETDELAYTIME = (0x0400 + 3); - public const int TTM_SETMAXTIPWIDTH = (0x0400 + 24); - - public const int TTM_SETTIPBKCOLOR = (0x0400 + 19), - TTM_SETTIPTEXTCOLOR = (0x0400 + 20); - - public const int TTM_SETTITLEA = (WM_USER + 32), - TTM_SETTITLEW = (WM_USER + 33); - - public const int TTM_SETTOOLINFOA = (0x0400 + 9), - TTM_SETTOOLINFOW = (0x0400 + 54); - - public const int TTM_TRACKACTIVATE = (0x0400 + 17), - TTM_TRACKPOSITION = (0x0400 + 18); - - public const int TTM_UPDATE = (0x0400 + 29), - TTM_UPDATETIPTEXTA = (0x0400 + 12), - TTM_UPDATETIPTEXTW = (0x0400 + 57); - - public const int TTM_WINDOWFROMPOINT = (0x0400 + 16); - - public const int TTN_GETDISPINFOA = ((0 - 520) - 0), - TTN_GETDISPINFOW = ((0 - 520) - 10); - - public const int TTN_NEEDTEXTA = ((0 - 520) - 0), - TTN_NEEDTEXTW = ((0 - 520) - 10); - - public const int TTN_POP = ((0 - 520) - 2); - public const int TTN_SHOW = ((0 - 520) - 1); - public const int TTS_ALWAYSTIP = 0x01; - public const int TTS_BALLOON = 0x40; - - public const int TTS_NOANIMATE = 0x10, - TTS_NOFADE = 0x20; - - public const int TTS_NOPREFIX = 0x02; - public const int TVC_BYKEYBOARD = 0x0002; - public const int TVC_BYMOUSE = 0x0001; - public const int TVC_UNKNOWN = 0x0000; - - public const int TVE_COLLAPSE = 0x0001, - TVE_EXPAND = 0x0002; - - public const int TVGN_CARET = 0x0009; - public const int TVGN_FIRSTVISIBLE = 0x0005; - public const int TVGN_NEXT = 0x0001; - public const int TVGN_NEXTVISIBLE = 0x0006; - public const int TVGN_PREVIOUS = 0x0002; - public const int TVGN_PREVIOUSVISIBLE = 0x0007; - - public const int TVHT_ABOVE = 0x0100, - TVHT_BELOW = 0x0200; - - public const int TVHT_NOWHERE = 0x0001; - public const int TVHT_ONITEM = (TVHT_ONITEMICON | TVHT_ONITEMLABEL | TVHT_ONITEMSTATEICON); - public const int TVHT_ONITEMBUTTON = 0x0010; - public const int TVHT_ONITEMICON = 0x0002; - public const int TVHT_ONITEMINDENT = 0x0008; - public const int TVHT_ONITEMLABEL = 0x0004; - - public const int TVHT_ONITEMRIGHT = 0x0020, - TVHT_ONITEMSTATEICON = 0x0040; - - public const int TVHT_TOLEFT = 0x0800; - public const int TVHT_TORIGHT = 0x0400; - public const int TVIF_HANDLE = 0x0010; - - public const int TVIF_IMAGE = 0x0002, - TVIF_PARAM = 0x0004; - - public const int TVIF_SELECTEDIMAGE = 0x0020; - - public const int TVIF_STATE = 0x0008; - public const int TVIF_TEXT = 0x0001; - - public const int TVIS_EXPANDED = 0x0020, - TVIS_EXPANDEDONCE = 0x0040; - - public const int TVIS_SELECTED = 0x0002; - - public const int TVIS_STATEIMAGEMASK = 0xF000; - - public const int TVI_FIRST = (unchecked((int) 0xFFFF0001)); - - public const int TVI_ROOT = (unchecked((int) 0xFFFF0000)); - - public const int TVM_DELETEITEM = (0x1100 + 1); - - public const int TVM_EDITLABELA = (0x1100 + 14), - TVM_EDITLABELW = (0x1100 + 65); - - public const int TVM_ENDEDITLABELNOW = (0x1100 + 22); - public const int TVM_ENSUREVISIBLE = (0x1100 + 20); - - public const int TVM_EXPAND = (0x1100 + 2); - - public const int TVM_GETEDITCONTROL = (0x1100 + 15); - - public const int TVM_GETINDENT = (0x1100 + 6); - - public const int TVM_GETISEARCHSTRINGA = (0x1100 + 23), - TVM_GETISEARCHSTRINGW = (0x1100 + 64); - - public const int TVM_GETITEMA = (0x1100 + 12); - - public const int TVM_GETITEMHEIGHT = (0x1100 + 28); - public const int TVM_GETITEMRECT = (0x1100 + 4); - - public const int TVM_GETITEMW = (0x1100 + 62); - - public const int TVM_GETLINECOLOR = (TV_FIRST + 41); - public const int TVM_GETNEXTITEM = (0x1100 + 10); - - public const int TVM_GETVISIBLECOUNT = (0x1100 + 16), - TVM_HITTEST = (0x1100 + 17); - - public const int TVM_INSERTITEMA = (0x1100 + 0), - TVM_INSERTITEMW = (0x1100 + 50); - - public const int TVM_SELECTITEM = (0x1100 + 11); - public const int TVM_SETBKCOLOR = (TV_FIRST + 29); - public const int TVM_SETIMAGELIST = (0x1100 + 9); - public const int TVM_SETINDENT = (0x1100 + 7); - public const int TVM_SETITEMA = (0x1100 + 13); - - public const int TVM_SETITEMHEIGHT = (0x1100 + 27); - - public const int TVM_SETITEMW = (0x1100 + 63); - public const int TVM_SETLINECOLOR = (TV_FIRST + 40); - public const int TVM_SETTEXTCOLOR = (TV_FIRST + 30); - public const int TVM_SETTOOLTIPS = (TV_FIRST + 24); - public const int TVM_SORTCHILDRENCB = (TV_FIRST + 21); - - public const int TVN_BEGINDRAGA = ((0 - 400) - 7), - TVN_BEGINDRAGW = ((0 - 400) - 56); - - public const int TVN_BEGINLABELEDITA = ((0 - 400) - 10), - TVN_BEGINLABELEDITW = ((0 - 400) - 59); - - public const int TVN_BEGINRDRAGA = ((0 - 400) - 8), - TVN_BEGINRDRAGW = ((0 - 400) - 57); - - public const int TVN_ENDLABELEDITA = ((0 - 400) - 11), - TVN_ENDLABELEDITW = ((0 - 400) - 60); - - public const int TVN_GETDISPINFOA = ((0 - 400) - 3), - TVN_GETDISPINFOW = ((0 - 400) - 52); - - public const int TVN_GETINFOTIPA = ((0 - 400) - 13), - TVN_GETINFOTIPW = ((0 - 400) - 14); - - public const int TVN_ITEMEXPANDEDA = ((0 - 400) - 6), - TVN_ITEMEXPANDEDW = ((0 - 400) - 55); - - public const int TVN_ITEMEXPANDINGA = ((0 - 400) - 5), - TVN_ITEMEXPANDINGW = ((0 - 400) - 54); - - public const int TVN_SELCHANGEDA = ((0 - 400) - 2), - TVN_SELCHANGEDW = ((0 - 400) - 51); - - public const int TVN_SELCHANGINGA = ((0 - 400) - 1), - TVN_SELCHANGINGW = ((0 - 400) - 50); - - public const int TVN_SETDISPINFOA = ((0 - 400) - 4), - TVN_SETDISPINFOW = ((0 - 400) - 53); - - public const int TVSIL_STATE = 2; - - public const int TVS_CHECKBOXES = 0x0100; - public const int TVS_EDITLABELS = 0x0008; - public const int TVS_FULLROWSELECT = 0x1000; - - public const int TVS_HASBUTTONS = 0x0001, - TVS_HASLINES = 0x0002; - - public const int TVS_INFOTIP = 0x0800; - public const int TVS_LINESATROOT = 0x0004; - public const int TVS_NOTOOLTIPS = 0x0080; - public const int TVS_RTLREADING = 0x0040; - public const int TVS_SHOWSELALWAYS = 0x0020; - public const int TVS_TRACKSELECT = 0x0200; - public const int TV_FIRST = 0x1100; - public const int TYMED_NULL = 0; - public const int UISF_HIDEACCEL = 0x2; - public const int UISF_HIDEFOCUS = 0x1; - - public const int UIS_CLEAR = 2, - UIS_INITIALIZE = 3; - - public const int UIS_SET = 1; - public const int UOI_FLAGS = 1; - public const int USERCLASSTYPE_APPNAME = 3; - - public const int USERCLASSTYPE_FULL = 1, - USERCLASSTYPE_SHORT = 2; - - public const int VIEW_E_DRAW = unchecked((int) 0x80040140); - public const int VK_CONTROL = 0x11; - public const int VK_DOWN = 0x28; - public const int VK_ESCAPE = 0x1B; - - public const int VK_LEFT = 0x25; - - public const int VK_MENU = 0x12; - - public const int VK_RIGHT = 0x27; - - public const int VK_SHIFT = 0x10; - - public const int VK_TAB = 0x09; - public const int VK_UP = 0x26; - - public const int WAVE_FORMAT_ADPCM = 0x0002, - WAVE_FORMAT_IEEE_FLOAT = 0x0003; - - public const int WAVE_FORMAT_PCM = 0x0001; - - public const int WA_ACTIVE = 1, - WA_CLICKACTIVE = 2; - - public const int WA_INACTIVE = 0; - public const int WHEEL_DELTA = 120; - - public const int WH_GETMESSAGE = 3; - - public const int WH_JOURNALPLAYBACK = 1; - - public const int WH_MOUSE = 7; - - public const int WM_ACTIVATE = 0x0006; - public const int WM_ACTIVATEAPP = 0x001C; - - public const int WM_AFXFIRST = 0x0360, - WM_AFXLAST = 0x037F; - - public const int WM_APP = unchecked(0x8000); - public const int WM_ASKCBFORMATNAME = 0x030C; - public const int WM_CANCELJOURNAL = 0x004B; - public const int WM_CANCELMODE = 0x001F; - public const int WM_CAPTURECHANGED = 0x0215; - public const int WM_CHANGECBCHAIN = 0x030D; - public const int WM_CHANGEUISTATE = 0x0127; - public const int WM_CHAR = 0x0102; - public const int WM_CHARTOITEM = 0x002F; - public const int WM_CHILDACTIVATE = 0x0022; - public const int WM_CHOOSEFONT_GETLOGFONT = (0x0400 + 1); - public const int WM_CLEAR = 0x0303; - public const int WM_CLOSE = 0x0010; - public const int WM_COMMAND = 0x0111; - public const int WM_COMMNOTIFY = 0x0044; - public const int WM_COMPACTING = 0x0041; - public const int WM_COMPAREITEM = 0x0039; - public const int WM_CONTEXTMENU = 0x007B; - public const int WM_COPY = 0x0301; - public const int WM_COPYDATA = 0x004A; - - public const int WM_CREATE = 0x0001; - - public const int WM_CTLCOLOR = 0x0019; - - public const int WM_CTLCOLORBTN = 0x0135, - WM_CTLCOLORDLG = 0x0136; - - public const int WM_CTLCOLOREDIT = 0x0133, - WM_CTLCOLORLISTBOX = 0x0134; - - public const int WM_CTLCOLORMSGBOX = 0x0132; - - public const int WM_CTLCOLORSCROLLBAR = 0x0137, - WM_CTLCOLORSTATIC = 0x0138; - - public const int WM_CUT = 0x0300; - public const int WM_DEADCHAR = 0x0103; - - public const int WM_DELETEITEM = 0x002D, - WM_DESTROY = 0x0002; - - public const int WM_DESTROYCLIPBOARD = 0x0307; - public const int WM_DEVICECHANGE = 0x0219; - public const int WM_DEVMODECHANGE = 0x001B; - public const int WM_DISPLAYCHANGE = 0x007E; - public const int WM_DRAWCLIPBOARD = 0x0308; - public const int WM_DRAWITEM = 0x002B; - public const int WM_DROPFILES = 0x0233; - - public const int WM_ENABLE = 0x000A; - - public const int WM_ENDSESSION = 0x0016; - - public const int WM_ENTERIDLE = 0x0121; - public const int WM_ENTERMENULOOP = 0x0211; - public const int WM_ENTERSIZEMOVE = 0x0231; - public const int WM_ERASEBKGND = 0x0014; - public const int WM_EXITMENULOOP = 0x0212; - public const int WM_EXITSIZEMOVE = 0x0232; - - public const int WM_FONTCHANGE = 0x001D; - - public const int WM_GETDLGCODE = 0x0087; - - public const int WM_GETFONT = 0x0031; - - public const int WM_GETHOTKEY = 0x0033; - - public const int WM_GETICON = 0x007F; - public const int WM_GETMINMAXINFO = 0x0024; - - public const int WM_GETOBJECT = 0x003D; - - public const int WM_GETTEXT = 0x000D, - WM_GETTEXTLENGTH = 0x000E; - - public const int WM_HANDHELDFIRST = 0x0358, - WM_HANDHELDLAST = 0x035F; - - public const int WM_HELP = 0x0053; - - public const int WM_HOTKEY = 0x0312; - public const int WM_HSCROLL = 0x0114; - public const int WM_HSCROLLCLIPBOARD = 0x030E; - public const int WM_ICONERASEBKGND = 0x0027; - public const int WM_IME_CHAR = 0x0286; - - public const int WM_IME_COMPOSITION = 0x010F; - - public const int WM_IME_COMPOSITIONFULL = 0x0284; - public const int WM_IME_CONTROL = 0x0283; - public const int WM_IME_ENDCOMPOSITION = 0x010E; - public const int WM_IME_KEYDOWN = 0x0290; - - public const int WM_IME_KEYLAST = 0x010F; - - public const int WM_IME_KEYUP = 0x0291; - public const int WM_IME_NOTIFY = 0x0282; - public const int WM_IME_SELECT = 0x0285; - public const int WM_IME_SETCONTEXT = 0x0281; - public const int WM_IME_STARTCOMPOSITION = 0x010D; - - public const int WM_INITDIALOG = 0x0110; - - public const int WM_INITMENU = 0x0116, - WM_INITMENUPOPUP = 0x0117; - - public const int WM_INPUTLANGCHANGE = 0x0051; - public const int WM_INPUTLANGCHANGEREQUEST = 0x0050; - public const int WM_KEYDOWN = 0x0100; - public const int WM_KEYFIRST = 0x0100; - public const int WM_KEYLAST = 0x0108; - public const int WM_KEYUP = 0x0101; - public const int WM_KILLFOCUS = 0x0008; - public const int WM_LBUTTONDBLCLK = 0x0203; - - public const int WM_LBUTTONDOWN = 0x0201, - WM_LBUTTONUP = 0x0202; - - public const int WM_MBUTTONDBLCLK = 0x0209; - - public const int WM_MBUTTONDOWN = 0x0207, - WM_MBUTTONUP = 0x0208; - - public const int WM_MDIACTIVATE = 0x0222; - - public const int WM_MDICASCADE = 0x0227; - - public const int WM_MDICREATE = 0x0220, - WM_MDIDESTROY = 0x0221; - - public const int WM_MDIGETACTIVE = 0x0229; - - public const int WM_MDIICONARRANGE = 0x0228; - public const int WM_MDIMAXIMIZE = 0x0225; - public const int WM_MDINEXT = 0x0224; - - public const int WM_MDIREFRESHMENU = 0x0234; - - public const int WM_MDIRESTORE = 0x0223; - public const int WM_MDISETMENU = 0x0230; - public const int WM_MDITILE = 0x0226; - public const int WM_MEASUREITEM = 0x002C; - public const int WM_MENUCHAR = 0x0120; - public const int WM_MENUSELECT = 0x011F; - public const int WM_MOUSEACTIVATE = 0x0021; - public const int WM_MOUSEFIRST = 0x0200; - - public const int WM_MOUSEHOVER = 0x02A1; - - public const int WM_MOUSELAST = 0x020A; - - public const int WM_MOUSELEAVE = 0x02A3; - - public const int WM_MOUSEMOVE = 0x0200; - public const int WM_MOUSEWHEEL = 0x020A; - public const int WM_MOVE = 0x0003; - public const int WM_MOVING = 0x0216; - public const int WM_NCACTIVATE = 0x0086; - public const int WM_NCCALCSIZE = 0x0083; - - public const int WM_NCCREATE = 0x0081, - WM_NCDESTROY = 0x0082; - - public const int WM_NCHITTEST = 0x0084; - public const int WM_NCLBUTTONDBLCLK = 0x00A3; - - public const int WM_NCLBUTTONDOWN = 0x00A1, - WM_NCLBUTTONUP = 0x00A2; - - public const int WM_NCMBUTTONDBLCLK = 0x00A9; - - public const int WM_NCMBUTTONDOWN = 0x00A7, - WM_NCMBUTTONUP = 0x00A8; - - public const int WM_NCMOUSEMOVE = 0x00A0; - public const int WM_NCPAINT = 0x0085; - public const int WM_NCRBUTTONDBLCLK = 0x00A6; - - public const int WM_NCRBUTTONDOWN = 0x00A4, - WM_NCRBUTTONUP = 0x00A5; - - public const int WM_NCXBUTTONDBLCLK = 0x00AD; - - public const int WM_NCXBUTTONDOWN = 0x00AB, - WM_NCXBUTTONUP = 0x00AC; - - public const int WM_NEXTDLGCTL = 0x0028; - public const int WM_NEXTMENU = 0x0213; - public const int WM_NOTIFY = 0x004E; - public const int WM_NOTIFYFORMAT = 0x0055; - public const int WM_NULL = 0x0000; - public const int WM_PAINT = 0x000F; - - public const int WM_PAINTCLIPBOARD = 0x0309; - - public const int WM_PAINTICON = 0x0026; - - public const int WM_PALETTECHANGED = 0x0311; - - public const int WM_PALETTEISCHANGING = 0x0310; - public const int WM_PARENTNOTIFY = 0x0210; - public const int WM_PASTE = 0x0302; - - public const int WM_PENWINFIRST = 0x0380, - WM_PENWINLAST = 0x038F; - - public const int WM_POWER = 0x0048; - public const int WM_POWERBROADCAST = 0x0218; - - public const int WM_PRINT = 0x0317, - WM_PRINTCLIENT = 0x0318; - - public const int WM_QUERYDRAGICON = 0x0037; - public const int WM_QUERYENDSESSION = 0x0011; - public const int WM_QUERYNEWPALETTE = 0x030F; - public const int WM_QUERYOPEN = 0x0013; - public const int WM_QUERYUISTATE = 0x0129; - public const int WM_QUEUESYNC = 0x0023; - public const int WM_QUIT = 0x0012; - public const int WM_RBUTTONDBLCLK = 0x0206; - - public const int WM_RBUTTONDOWN = 0x0204, - WM_RBUTTONUP = 0x0205; - - public const int WM_REFLECT = WM_USER + 0x1C00; - - public const int WM_RENDERALLFORMATS = 0x0306; - public const int WM_RENDERFORMAT = 0x0305; - public const int WM_SETCURSOR = 0x0020; - public const int WM_SETFOCUS = 0x0007; - public const int WM_SETFONT = 0x0030; - public const int WM_SETHOTKEY = 0x0032; - public const int WM_SETICON = 0x0080; - - public const int WM_SETREDRAW = 0x000B, - WM_SETTEXT = 0x000C; - - public const int WM_SETTINGCHANGE = 0x001A; - public const int WM_SHOWWINDOW = 0x0018; - public const int WM_SIZE = 0x0005; - public const int WM_SIZECLIPBOARD = 0x030B; - public const int WM_SIZING = 0x0214; - public const int WM_SPOOLERSTATUS = 0x002A; - public const int WM_STYLECHANGED = 0x007D; - public const int WM_STYLECHANGING = 0x007C; - public const int WM_SYSCHAR = 0x0106; - public const int WM_SYSCOLORCHANGE = 0x0015; - public const int WM_SYSCOMMAND = 0x0112; - public const int WM_SYSDEADCHAR = 0x0107; - - public const int WM_SYSKEYDOWN = 0x0104, - WM_SYSKEYUP = 0x0105; - - public const int WM_TCARD = 0x0052; - public const int WM_TIMECHANGE = 0x001E; - public const int WM_TIMER = 0x0113; - public const int WM_UNDO = 0x0304; - public const int WM_UNINITMENUPOPUP = 0x0125; - public const int WM_UPDATEUISTATE = 0x0128; - public const int WM_USER = 0x0400; - public const int WM_USERCHANGED = 0x0054; - public const int WM_VKEYTOITEM = 0x002E; - public const int WM_VSCROLL = 0x0115; - public const int WM_VSCROLLCLIPBOARD = 0x030A; - public const int WM_WINDOWPOSCHANGED = 0x0047; - public const int WM_WINDOWPOSCHANGING = 0x0046; - public const int WM_WININICHANGE = 0x001A; - public const int WM_XBUTTONDBLCLK = 0x020D; - - public const int WM_XBUTTONDOWN = 0x020B, - WM_XBUTTONUP = 0x020C; - - public const int WPF_SETMINPOSITION = 0x0001; - public const int WSF_VISIBLE = 0x0001; - public const int WS_BORDER = 0x00800000; - public const int WS_CAPTION = 0x00C00000; - - public const int WS_CHILD = 0x40000000; - - public const int WS_CLIPCHILDREN = 0x02000000; - - public const int WS_CLIPSIBLINGS = 0x04000000; - public const int WS_DISABLED = 0x08000000; - - public const int WS_DLGFRAME = 0x00400000; - - public const int WS_EX_APPWINDOW = 0x00040000; - - public const int WS_EX_CLIENTEDGE = 0x00000200, - WS_EX_CONTEXTHELP = 0x00000400; - - public const int WS_EX_CONTROLPARENT = 0x00010000; - - public const int WS_EX_DLGMODALFRAME = 0x00000001; - - public const int WS_EX_LAYERED = 0x00080000; - - public const int WS_EX_LAYOUTRTL = 0x00400000; - - public const int WS_EX_LEFT = 0x00000000; - public const int WS_EX_LEFTSCROLLBAR = 0x00004000; - public const int WS_EX_MDICHILD = 0x00000040; - - public const int WS_EX_NOINHERITLAYOUT = 0x00100000; - - public const int WS_EX_RIGHT = 0x00001000; - public const int WS_EX_RTLREADING = 0x00002000; - public const int WS_EX_STATICEDGE = 0x00020000; - public const int WS_EX_TOOLWINDOW = 0x00000080; - public const int WS_EX_TOPMOST = 0x00000008; - public const int WS_HSCROLL = 0x00100000; - public const int WS_MAXIMIZE = 0x01000000; - public const int WS_MAXIMIZEBOX = 0x00010000; - public const int WS_MINIMIZE = 0x20000000; - public const int WS_MINIMIZEBOX = 0x00020000; - - public const int WS_OVERLAPPED = 0x00000000, - WS_POPUP = unchecked((int) 0x80000000); - - public const int WS_SYSMENU = 0x00080000; - public const int WS_TABSTOP = 0x00010000; - public const int WS_THICKFRAME = 0x00040000; - public const int WS_VISIBLE = 0x10000000; - public const int WS_VSCROLL = 0x00200000; - public const int cmb4 = 0x0473; // C:\Program Files\Common - public const int stc4 = 0x0443; - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +namespace Ch.Cyberduck.Core +{ + public static class NativeConstants + { + public const int ACM_OPENA = (0x0400 + 100), + ACM_OPENW = (0x0400 + 103), + ADVF_NODATA = 1, + ADVF_ONLYONCE = 2, + ADVF_PRIMEFIRST = 4; + + public const int ARW_BOTTOMLEFT = 0x0000, + ARW_BOTTOMRIGHT = 0x0001; + + public const int ARW_DOWN = 0x0004, + ARW_HIDE = 0x0008; + + public const int ARW_LEFT = 0x0000, + ARW_RIGHT = 0x0000; + + public const int ARW_TOPLEFT = 0x0002, + ARW_TOPRIGHT = 0x0003; + + public const int ARW_UP = 0x0004; + + public const int AUTOAPPEND = 0x40000000, + AUTOAPPEND_OFF = (unchecked((int) 0x80000000)); + + public const int AUTOSUGGEST = 0x10000000, + AUTOSUGGEST_OFF = 0x20000000; + + public const int BCM_GETIDEALSIZE = 0x1601; + + public const int BDR_RAISED = 0x0005; + + public const int BDR_RAISEDINNER = 0x0004; + public const int BDR_RAISEDOUTER = 0x0001; + + public const int BDR_SUNKEN = 0x000a; + + public const int BDR_SUNKENINNER = 0x0008; + public const int BDR_SUNKENOUTER = 0x0002; + public const int BFFM_ENABLEOK = 0x400 + 101; + + public const int BFFM_INITIALIZED = 1, + BFFM_SELCHANGED = 2, + BFFM_SETSELECTION = 0x400 + 103; + + public const int BF_ADJUST = 0x2000; + public const int BF_BOTTOM = 0x0008; + public const int BF_FLAT = 0x4000; + public const int BF_LEFT = 0x0001; + public const int BF_MIDDLE = 0x0800; + public const int BF_RIGHT = 0x0004; + public const int BF_TOP = 0x0002; + public const int BITSPIXEL = 12; + public const int BI_RGB = 0; + public const int BM_CLICK = 0x00F5; + + public const int BM_SETCHECK = 0x00F1, + BM_SETSTATE = 0x00F3; + + public const int BN_CLICKED = 0; + public const int BS_3STATE = 0x00000005; + public const int BS_BOTTOM = 0x00000800; + public const int BS_CENTER = 0x00000300; + + public const int BS_DEFPUSHBUTTON = 0x00000001; + + public const int BS_GROUPBOX = 0x00000007, + BS_LEFT = 0x00000100; + + public const int BS_MULTILINE = 0x00002000; + + public const int BS_OWNERDRAW = 0x0000000B; + + public const int BS_PATTERN = 3; + public const int BS_PUSHBUTTON = 0x00000000; + public const int BS_PUSHLIKE = 0x00001000; + + public const int BS_RADIOBUTTON = 0x00000004; + + public const int BS_RIGHT = 0x00000200; + + public const int BS_RIGHTBUTTON = 0x00000020; + + public const int BS_TOP = 0x00000400; + + public const int BS_VCENTER = 0x00000C00; + + public const int CBEM_GETITEMA = (0x0400 + 4); // C:\Program Files\Common + public const int CBEM_GETITEMW = (0x0400 + 13); // C:\Program Files\Common + public const int CBEM_INSERTITEMA = (0x0400 + 1); // C:\Program Files\Common + public const int CBEM_INSERTITEMW = (0x0400 + 11); // C:\Program Files\Common + public const int CBEM_SETITEMA = (0x0400 + 5); // C:\Program Files\Common + public const int CBEM_SETITEMW = (0x0400 + 12); // C:\Program Files\Common + + public const int CBEN_ENDEDITA = ((0 - 800) - 5), + CBEN_ENDEDITW = ((0 - 800) - 6); // C:\Program Files\Common + + public const int CBN_CLOSEUP = 8; // C:\Program Files\Common + + public const int CBN_DBLCLK = 2; // C:\Program Files\Common + + public const int CBN_DROPDOWN = 7; // C:\Program Files\Common + + public const int CBN_EDITCHANGE = 5, + CBN_EDITUPDATE = 6; // C:\Program Files\Common + + public const int CBN_SELCHANGE = 1; // C:\Program Files\Common + + public const int CBN_SELENDOK = 9; // C:\Program Files\Common + + public const int CBS_AUTOHSCROLL = 0x0040; // C:\Program Files\Common + + public const int CBS_DROPDOWN = 0x0002, + CBS_DROPDOWNLIST = 0x0003; // C:\Program Files\Common + + public const int CBS_HASSTRINGS = 0x0200, + CBS_NOINTEGRALHEIGHT = 0x0400; // C:\Program Files\Common + + public const int CBS_OWNERDRAWFIXED = 0x0010, + CBS_OWNERDRAWVARIABLE = 0x0020; // C:\Program Files\Common + + public const int CBS_SIMPLE = 0x0001; // C:\Program Files\Common + + public const int CB_ADDSTRING = 0x0143, + CB_DELETESTRING = 0x0144; // C:\Program Files\Common + + public const int CB_ERR = (-1); // C:\Program Files\Common + public const int CB_FINDSTRING = 0x014C; // C:\Program Files\Common + public const int CB_FINDSTRINGEXACT = 0x0158; // C:\Program Files\Common + + public const int CB_GETCURSEL = 0x0147; // C:\Program Files\Common + + public const int CB_GETDROPPEDSTATE = 0x0157; // C:\Program Files\Common + public const int CB_GETEDITSEL = 0x0140; // C:\Program Files\Common + public const int CB_GETITEMDATA = 0x0150; // C:\Program Files\Common + public const int CB_GETITEMHEIGHT = 0x0154; // C:\Program Files\Common + + public const int CB_INSERTSTRING = 0x014A; // C:\Program Files\Common + + public const int CB_LIMITTEXT = 0x0141; // C:\Program Files\Common + + public const int CB_RESETCONTENT = 0x014B; // C:\Program Files\Common + + public const int CB_SETCURSEL = 0x014E; // C:\Program Files\Common + + public const int CB_SETDROPPEDWIDTH = 0x0160; // C:\Program Files\Common + + public const int CB_SETEDITSEL = 0x0142; // C:\Program Files\Common + public const int CB_SETITEMHEIGHT = 0x0153; // C:\Program Files\Common + public const int CB_SHOWDROPDOWN = 0x014F; // C:\Program Files\Common + public const int CCS_NODIVIDER = 0x00000040; // C:\Program Files\Common + public const int CCS_NOPARENTALIGN = 0x00000008; // C:\Program Files\Common + public const int CCS_NORESIZE = 0x00000004; // C:\Program Files\Common + public const int CC_ANYCOLOR = 0x00000100; + public const int CC_ENABLEHOOK = 0x00000010; + + public const int CC_FULLOPEN = 0x00000002, + CC_PREVENTFULLOPEN = 0x00000004; + + public const int CC_RGBINIT = 0x00000001; + public const int CC_SHOWHELP = 0x00000008; + public const int CC_SOLIDCOLOR = 0x00000080; + + public const int CDDS_ITEM = 0x00010000; // C:\Program Files\Common + + public const int CDDS_ITEMPOSTPAINT = (0x00010000 | 0x00000002); // C:\Program Files\Common + + public const int CDDS_ITEMPREPAINT = (0x00010000 | 0x00000001); // C:\Program Files\Common + public const int CDDS_POSTPAINT = 0x00000002; // C:\Program Files\Common + public const int CDDS_PREPAINT = 0x00000001; // C:\Program Files\Common + public const int CDDS_SUBITEM = 0x00020000; // C:\Program Files\Common + public const int CDERR_DIALOGFAILURE = 0xFFFF; + public const int CDERR_FINDRESFAILURE = 0x0006; + public const int CDERR_INITIALIZATION = 0x0002; + public const int CDERR_LOADRESFAILURE = 0x0007; + public const int CDERR_LOADSTRFAILURE = 0x0005; + + public const int CDERR_LOCKRESFAILURE = 0x0008, + CDERR_MEMALLOCFAILURE = 0x0009, + CDERR_MEMLOCKFAILURE = 0x000A; + + public const int CDERR_NOHINSTANCE = 0x0004; + public const int CDERR_NOHOOK = 0x000B; + public const int CDERR_NOTEMPLATE = 0x0003; + public const int CDERR_REGISTERMSGFAIL = 0x000C; + public const int CDERR_STRUCTSIZE = 0x0001; + + public const int CDIS_CHECKED = 0x0008; // C:\Program Files\Common + + public const int CDIS_DEFAULT = 0x0020; // C:\Program Files\Common + + public const int CDIS_DISABLED = 0x0004; // C:\Program Files\Common + public const int CDIS_FOCUS = 0x0010; // C:\Program Files\Common + public const int CDIS_GRAYED = 0x0002; // C:\Program Files\Common + + public const int CDIS_HOT = 0x0040; // C:\Program Files\Common + + public const int CDIS_INDETERMINATE = 0x0100; // C:\Program Files\Common + + public const int CDIS_MARKED = 0x0080; // C:\Program Files\Common + public const int CDIS_SELECTED = 0x0001; // C:\Program Files\Common + + public const int CDIS_SHOWKEYBOARDCUES = 0x0200; // C:\Program Files\Common + + public const int CDRF_DODEFAULT = 0x00000000, + CDRF_NEWFONT = 0x00000002; // C:\Program Files\Common + + public const int CDRF_NOTIFYITEMDRAW = 0x00000020; // C:\Program Files\Common + public const int CDRF_NOTIFYPOSTPAINT = 0x00000010; // C:\Program Files\Common + public const int CDRF_NOTIFYSUBITEMDRAW = CDRF_NOTIFYITEMDRAW; // C:\Program Files\Common + public const int CDRF_SKIPDEFAULT = 0x00000004; // C:\Program Files\Common + public const int CFERR_MAXLESSTHANMIN = 0x2002; + public const int CFERR_NOFONTS = 0x2001; + public const int CF_APPLY = 0x00000200; + public const int CF_BITMAP = 2; // C:\Program Files\Common + public const int CF_DIB = 8; // C:\Program Files\Common + public const int CF_DIF = 5; // C:\Program Files\Common + public const int CF_EFFECTS = 0x00000100; + public const int CF_ENABLEHOOK = 0x00000008; + public const int CF_ENHMETAFILE = 14; // C:\Program Files\Common + + public const int CF_FIXEDPITCHONLY = 0x00004000, + CF_FORCEFONTEXIST = 0x00010000; + + public const int CF_HDROP = 15; // C:\Program Files\Common + public const int CF_INITTOLOGFONTSTRUCT = 0x00000040; + public const int CF_LIMITSIZE = 0x00002000; + public const int CF_LOCALE = 16; // C:\Program Files\Common + public const int CF_METAFILEPICT = 3; // C:\Program Files\Common + public const int CF_NOSIMULATIONS = 0x00001000; + public const int CF_NOVECTORFONTS = 0x00000800; + public const int CF_NOVERTFONTS = 0x01000000; + public const int CF_OEMTEXT = 7; // C:\Program Files\Common + + public const int CF_PALETTE = 9, + CF_PENDATA = 10, + CF_RIFF = 11; // C:\Program Files\Common + + public const int CF_SCREENFONTS = 0x00000001; + public const int CF_SCRIPTSONLY = 0x00000400; + public const int CF_SELECTSCRIPT = 0x00400000; + public const int CF_SHOWHELP = 0x00000004; + public const int CF_SYLK = 4; // C:\Program Files\Common + public const int CF_TEXT = 1; // C:\Program Files\Common + public const int CF_TIFF = 6; // C:\Program Files\Common + public const int CF_TTONLY = 0x00040000; + public const int CF_UNICODETEXT = 13; // C:\Program Files\Common + public const int CF_WAVE = 12; // C:\Program Files\Common + + public const int CLR_DEFAULT = unchecked((int) 0xFF000000); // C:\Program Files\Common + + public const int CLR_NONE = unchecked((int) 0xFFFFFFFF); // C:\Program Files\Common + + public const int CLSCTX_INPROC_SERVER = 0x1, + CLSCTX_LOCAL_SERVER = 0x4; // C:\Program Files\Common + + public const int COLOR_WINDOW = 5; // C:\Program Files\Common + + public const int CONNECT_E_CANNOTCONNECT = unchecked((int) 0x80040202); // C:\Program Files\Common + + public const int CONNECT_E_NOCONNECTION = unchecked((int) 0x80040200); // C:\Program Files\Common + public const int CP_WINANSI = 1004; + public const int CSC_NAVIGATEBACK = 0x00000002; + public const int CSC_NAVIGATEFORWARD = 0x00000001; + public const int CSIDL_APPDATA = 0x001a; // C:\Program Files\Common + public const int CSIDL_COMMON_APPDATA = 0x0023; // C:\Program Files\Common + public const int CSIDL_COOKIES = 0x0021; // C:\Program Files\Common + + public const int CSIDL_DESKTOP = 0x0000; // C:\Program Files\Common + + public const int // Start Menu\Programs\Startup + CSIDL_DESKTOPDIRECTORY = 0x0010; // C:\Program Files\Common + + public const int // Start Menu\Programs + CSIDL_FAVORITES = 0x0006; // C:\Program Files\Common + + public const int CSIDL_HISTORY = 0x0022; // C:\Program Files\Common + + public const int // + CSIDL_INTERNET = 0x0001; // C:\Program Files\Common + + public const int CSIDL_INTERNET_CACHE = 0x0020; // C:\Program Files\Common + public const int CSIDL_LOCAL_APPDATA = 0x001c; // C:\Program Files\Common + + public const int // Start Menu\Programs + CSIDL_PERSONAL = 0x0005; // C:\Program Files\Common + + public const int CSIDL_PROGRAMS = 0x0002; // C:\Program Files\Common + + public const int CSIDL_PROGRAM_FILES = 0x0026, + // C:\Program Files + CSIDL_PROGRAM_FILES_COMMON = 0x002b; // C:\Program Files\Common + + public const int // Start Menu\Programs\Startup + CSIDL_RECENT = 0x0008, + // \Recent + CSIDL_SENDTO = 0x0009, + // \SendTo + CSIDL_STARTMENU = 0x000b; // C:\Program Files\Common + + public const int CSIDL_STARTUP = 0x0007; // C:\Program Files\Common + + public const int // All Users\Application Data + CSIDL_SYSTEM = 0x0025; // C:\Program Files\Common + + public const int CSIDL_TEMPLATES = 0x0015; // C:\Program Files\Common + + public const int CS_DBLCLKS = 0x0008, + CS_DROPSHADOW = 0x00020000; // C:\Program Files\Common + + public const int CTRLINFO_EATS_ESCAPE = 2; // C:\Program Files\Common + public const int CTRLINFO_EATS_RETURN = 1; // C:\Program Files\Common + public const int CWP_SKIPINVISIBLE = 0x0001; // C:\Program Files\Common + public const int CW_USEDEFAULT = (unchecked((int) 0x80000000)); // C:\Program Files\Common + + public const int DCX_CACHE = 0x00000002, + DCX_LOCKWINDOWUPDATE = 0x00000400; + + public const int DCX_WINDOW = 0x00000001; + + public const int DEFAULT_GUI_FONT = 17; + + public const int DFCS_BUTTON3STATE = 0x0008; + public const int DFCS_BUTTONCHECK = 0x0000; + public const int DFCS_BUTTONPUSH = 0x0010; + public const int DFCS_BUTTONRADIO = 0x0004; + + public const int DFCS_CAPTIONCLOSE = 0x0000; + + public const int DFCS_CAPTIONHELP = 0x0004; + + public const int DFCS_CAPTIONMAX = 0x0002; + + public const int DFCS_CAPTIONMIN = 0x0001; + + public const int DFCS_CAPTIONRESTORE = 0x0003; + + public const int DFCS_CHECKED = 0x0400, + DFCS_FLAT = 0x4000; + + public const int DFCS_INACTIVE = 0x0100; + + public const int DFCS_MENUARROW = 0x0000; + + public const int DFCS_MENUBULLET = 0x0002; + + public const int DFCS_MENUCHECK = 0x0001; + public const int DFCS_PUSHED = 0x0200; + public const int DFCS_SCROLLCOMBOBOX = 0x0005; + + public const int DFCS_SCROLLDOWN = 0x0001, + DFCS_SCROLLLEFT = 0x0002, + DFCS_SCROLLRIGHT = 0x0003; + + public const int DFCS_SCROLLUP = 0x0000; + public const int DFC_BUTTON = 4; + + public const int DFC_CAPTION = 1, + DFC_MENU = 2, + DFC_SCROLL = 3; + + public const int DIB_RGB_COLORS = 0; + + public const int DISPATCH_METHOD = 0x1, + DISPATCH_PROPERTYGET = 0x2, + DISPATCH_PROPERTYPUT = 0x4; + + public const int DISPID_PROPERTYPUT = (-3); + public const int DISPID_UNKNOWN = (-1); + public const int DISP_E_EXCEPTION = unchecked((int) 0x80020009); + + public const int DISP_E_MEMBERNOTFOUND = unchecked((int) 0x80020003), + DISP_E_PARAMNOTFOUND = unchecked((int) 0x80020004); + + public const int DI_NORMAL = 0x0003; + + public const int DLGC_WANTALLKEYS = 0x0004; + + public const int DLGC_WANTARROWS = 0x0001; + + public const int DLGC_WANTCHARS = 0x0080; + + public const int DLGC_WANTTAB = 0x0002; + public const int DRAGDROP_E_ALREADYREGISTERED = unchecked((int) 0x80040101); + public const int DRAGDROP_E_NOTREGISTERED = unchecked((int) 0x80040100); + + public const int DTM_SETFORMATA = (0x1000 + 5), + DTM_SETFORMATW = (0x1000 + 50), + DTM_SETMCCOLOR = (0x1000 + 6), + DTM_SETMCFONT = (0x1000 + 9); + + public const int DTM_SETRANGE = (0x1000 + 4); + public const int DTM_SETSYSTEMTIME = (0x1000 + 2); + public const int DTN_CLOSEUP = ((0 - 760) + 7); + + public const int DTN_DATETIMECHANGE = ((0 - 760) + 1); + + public const int DTN_DROPDOWN = ((0 - 760) + 6); + public const int DTN_FORMATA = ((0 - 760) + 4); + + public const int DTN_FORMATQUERYA = ((0 - 760) + 5), + DTN_FORMATQUERYW = ((0 - 760) + 18); + + public const int DTN_FORMATW = ((0 - 760) + 17); + + public const int DTN_USERSTRINGA = ((0 - 760) + 2), + DTN_USERSTRINGW = ((0 - 760) + 15), + DTN_WMKEYDOWNA = ((0 - 760) + 3), + DTN_WMKEYDOWNW = ((0 - 760) + 16); + + public const int DTS_LONGDATEFORMAT = 0x0004; + public const int DTS_RIGHTALIGN = 0x0020; + public const int DTS_SHOWNONE = 0x0002; + public const int DTS_TIMEFORMAT = 0x0009; + public const int DTS_UPDOWN = 0x0001; + public const int DT_CALCRECT = 0x00000400; + public const int DT_EDITCONTROL = 0x00002000; + public const int DT_END_ELLIPSIS = 0x00008000; + public const int DT_EXPANDTABS = 0x00000040; + public const int DT_LEFT = 0x00000000; + public const int DT_NOCLIP = 0x00000100; + public const int DT_NOPREFIX = 0x00000800; + public const int DT_RIGHT = 0x00000002; + public const int DT_RTLREADING = 0x00020000; + public const int DT_SINGLELINE = 0x00000020; + public const int DT_VCENTER = 0x00000004; + public const int DT_WORDBREAK = 0x00000010; + public const int DUPLICATE = 0x06; + public const int DUPLICATE_SAME_ACCESS = 0x00000002; + + public const int DVASPECT_CONTENT = 1; + + public const int DVASPECT_OPAQUE = 16; + + public const int DVASPECT_TRANSPARENT = 32; + public const int DV_E_DVASPECT = unchecked((int) 0x8004006B); + + public const int EC_LEFTMARGIN = 0x0001, + EC_RIGHTMARGIN = 0x0002; + + public const int EDGE_BUMP = (0x0001 | 0x0008); + public const int EDGE_ETCHED = (0x0002 | 0x0004); + + public const int EDGE_RAISED = (0x0001 | 0x0004), + EDGE_SUNKEN = (0x0002 | 0x0008); + + public const int EMR_POLYTEXTOUTA = 96, + EMR_POLYTEXTOUTW = 97; + + public const int EM_CANUNDO = 0x00C6; + public const int EM_CHARFROMPOS = 0x00D7; + public const int EM_EMPTYUNDOBUFFER = 0x00CD; + public const int EM_GETLINE = 0x00C4; + public const int EM_GETLINECOUNT = 0x00BA; + public const int EM_GETMODIFY = 0x00B8; + public const int EM_GETPASSWORDCHAR = 0x00D2; + + public const int EM_GETSEL = 0x00B0; + + public const int EM_LIMITTEXT = 0x00C5; + + public const int EM_LINEFROMCHAR = 0x00C9, + EM_LINEINDEX = 0x00BB; + + public const int EM_POSFROMCHAR = 0x00D6; + public const int EM_REPLACESEL = 0x00C2; + + public const int EM_SCROLL = 0x00B5, + EM_SCROLLCARET = 0x00B7; + + public const int EM_SETMARGINS = 0x00D3; + + public const int EM_SETMODIFY = 0x00B9; + + public const int EM_SETPASSWORDCHAR = 0x00CC; + + public const int EM_SETREADONLY = 0x00CF; + public const int EM_SETTYPOGRAPHYOPTIONS = WM_USER + 202; + + public const int EM_SETSEL = 0x00B1; + public const int EM_UNDO = 0x00C7; + + public const int EN_ALIGN_LTR_EC = 0x0700, + EN_ALIGN_RTL_EC = 0x0701; + + public const int EN_CHANGE = 0x0300, + EN_HSCROLL = 0x0601, + EN_VSCROLL = 0x0602; + + public const int ES_AUTOHSCROLL = 0x0080; + public const int ES_AUTOVSCROLL = 0x0040; + public const int ES_CENTER = 0x0001; + public const int ES_LEFT = 0x0000; + public const int ES_LOWERCASE = 0x0010; + public const int ES_MULTILINE = 0x0004; + public const int ES_NOHIDESEL = 0x0100; + public const int ES_PASSWORD = 0x0020; + public const int ES_READONLY = 0x0800; + public const int ES_RIGHT = 0x0002; + public const int ES_UPPERCASE = 0x0008; + public const int ETO_CLIPPED = 0x0004; + public const int ETO_OPAQUE = 0x0002; + public const int E_ABORT = unchecked((int) 0x80004004); + public const int E_FAIL = unchecked((int) 0x80004005); + + public const int E_INVALIDARG = unchecked((int) 0x80070057), + E_NOINTERFACE = unchecked((int) 0x80004002); + + public const int E_NOTIMPL = unchecked((int) 0x80004001), + E_OUTOFMEMORY = unchecked((int) 0x8007000E); + + public const int E_UNEXPECTED = unchecked((int) 0x8000FFFF); + + public const int FADF_BSTR = (0x100); + + public const int FADF_DISPATCH = (0x400); + + public const int FADF_UNKNOWN = (0x200); + + public const int FADF_VARIANT = (unchecked(0x800)); + + public const int FALT = 0x10; + public const int FLASHW_ALL = FLASHW_CAPTION | FLASHW_TRAY; + public const int FLASHW_CAPTION = 0x00000001; + public const int FLASHW_STOP = 0; + + public const int FLASHW_TIMER = 0x00000004, + FLASHW_TIMERNOFG = 0x0000000C; + + public const int FLASHW_TRAY = 0x00000002; + public const int FNERR_BUFFERTOOSMALL = 0x3003; + public const int FNERR_INVALIDFILENAME = 0x3002; + public const int FNERR_SUBCLASSFAILURE = 0x3001; + + public const int FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000, + FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200; + + public const int FRERR_BUFFERLENGTHZERO = 0x4001; + + public const int FSHIFT = 0x04; + + public const int FVIRTKEY = 0x01; + public const int GDI_ERROR = (unchecked((int) 0xFFFFFFFF)); + public const int GDTR_MAX = 0x0002; + public const int GDTR_MIN = 0x0001; + public const int GDT_NONE = 1; + public const int GDT_VALID = 0; + public const int GMEM_DDESHARE = 0x2000; + + public const int GMEM_MOVEABLE = 0x0002, + GMEM_ZEROINIT = 0x0040; + + public const int GMR_DAYSTATE = 1; + public const int GMR_VISIBLE = 0; + + public const int GWL_EXSTYLE = (-20); + + public const int GWL_HWNDPARENT = (-8); + + public const int GWL_ID = (-12); + + public const int GWL_STYLE = (-16); + public const int GWL_WNDPROC = (-4); + public const int GW_CHILD = 5; + + public const int GW_HWNDFIRST = 0, + GW_HWNDLAST = 1, + GW_HWNDNEXT = 2, + GW_HWNDPREV = 3; + + public const int HCF_HIGHCONTRASTON = 0x00000001; + + public const int HC_ACTION = 0, + HC_GETNEXT = 1, + HC_SKIP = 2; + + public const int HDI_ORDER = 0x0080; + + public const int HDM_GETITEMA = (0x1200 + 3); + + public const int HDM_GETITEMCOUNT = (0x1200 + 0); + + public const int HDM_GETITEMW = (0x1200 + 11); + + public const int HDM_INSERTITEMA = (0x1200 + 1), + HDM_INSERTITEMW = (0x1200 + 10); + + public const int HDM_SETITEMA = (0x1200 + 4), + HDM_SETITEMW = (0x1200 + 12); + + public const int HDN_BEGINTDRAG = ((0 - 300) - 10), + HDN_BEGINTRACKA = ((0 - 300) - 6), + HDN_BEGINTRACKW = ((0 - 300) - 26); + + public const int HDN_DIVIDERDBLCLICKA = ((0 - 300) - 5), + HDN_DIVIDERDBLCLICKW = ((0 - 300) - 25); + + public const int HDN_ENDDRAG = ((0 - 300) - 11), + HDN_ENDTRACKA = ((0 - 300) - 7), + HDN_ENDTRACKW = ((0 - 300) - 27); + + public const int HDN_GETDISPINFOA = ((0 - 300) - 9), + HDN_GETDISPINFOW = ((0 - 300) - 29); + + public const int HDN_ITEMCHANGEDA = ((0 - 300) - 1), + HDN_ITEMCHANGEDW = ((0 - 300) - 21); + + public const int HDN_ITEMCHANGINGA = ((0 - 300) - 0), + HDN_ITEMCHANGINGW = ((0 - 300) - 20); + + public const int HDN_ITEMCLICKA = ((0 - 300) - 2), + HDN_ITEMCLICKW = ((0 - 300) - 22), + HDN_ITEMDBLCLICKA = ((0 - 300) - 3), + HDN_ITEMDBLCLICKW = ((0 - 300) - 23); + + public const int HDN_TRACKA = ((0 - 300) - 8), + HDN_TRACKW = ((0 - 300) - 28); + + public const int HELPINFO_WINDOW = 0x0001; + + public const int HLP_FILE = 1, + HLP_KEYWORD = 2, + HLP_NAVIGATOR = 3, + HLP_OBJECT = 4; + + public const int HOLLOW_BRUSH = 5; + + public const int HTBOTTOM = 15, + HTBOTTOMRIGHT = 17; + + public const int HTCLIENT = 1; + public const int HTNOWHERE = 0; + public const int ICC_BAR_CLASSES = 0x00000004; + public const int ICC_DATE_CLASSES = 0x00000100; + public const int ICC_LISTVIEW_CLASSES = 0x00000001; + public const int ICC_PROGRESS_CLASS = 0x00000020; + public const int ICC_TAB_CLASSES = 0x00000008; + public const int ICC_TREEVIEW_CLASSES = 0x00000002; + + public const int ICON_BIG = 1; + + public const int ICON_SMALL = 0; + public const int IDC_APPSTARTING = 32650; + + public const int IDC_ARROW = 32512; + + public const int IDC_CROSS = 32515; + + public const int IDC_HELP = 32651; + public const int IDC_IBEAM = 32513; + public const int IDC_NO = 32648; + + public const int IDC_SIZEALL = 32646; + + public const int IDC_SIZENESW = 32643; + + public const int IDC_SIZENS = 32645; + + public const int IDC_SIZENWSE = 32642; + public const int IDC_SIZEWE = 32644; + + public const int IDC_UPARROW = 32516; + + public const int IDC_WAIT = 32514; + public const int IDM_PAGESETUP = 2004; + public const int IDM_PRINT = 27; + + public const int IDM_PRINTPREVIEW = 2003, + IDM_PROPERTIES = 28, + IDM_SAVEAS = 71; + + public const int ILC_COLOR = 0x0000; + + public const int ILC_COLOR16 = 0x0010, + ILC_COLOR24 = 0x0018, + ILC_COLOR32 = 0x0020; + + public const int ILC_COLOR4 = 0x0004, + ILC_COLOR8 = 0x0008; + + public const int ILC_MASK = 0x0001; + + public const int ILD_MASK = 0x0010; + + public const int ILD_NORMAL = 0x0000; + + public const int ILD_ROP = 0x0040; + + public const int ILD_TRANSPARENT = 0x0001; + public const int ILS_ALPHA = 0x8; + + public const int ILS_GLOW = 0x1; + + public const int ILS_NORMAL = 0x0; + + public const int ILS_SATURATE = 0x4; + + public const int ILS_SHADOW = 0x2; + public const int IMAGE_CURSOR = 2; + public const int IMAGE_ICON = 1; + public const int IME_CMODE_FULLSHAPE = 0x0008; + public const int IME_CMODE_KATAKANA = 0x0002; + public const int IME_CMODE_NATIVE = 0x0001; + public const int INET_E_DEFAULT_ACTION = unchecked((int) 0x800C0011); + public const int INPLACE_E_NOTOOLSPACE = unchecked((int) 0x800401A1); + + public const int KEYEVENTF_KEYUP = 0x0002; + public const int LANG_NEUTRAL = 0x00; + + public const int LBN_DBLCLK = 2; + + public const int LBN_SELCHANGE = 1; + public const int LBS_DISABLENOSCROLL = 0x1000; + public const int LBS_EXTENDEDSEL = 0x0800; + public const int LBS_HASSTRINGS = 0x0040; + public const int LBS_MULTICOLUMN = 0x0200; + public const int LBS_MULTIPLESEL = 0x0008; + public const int LBS_NOINTEGRALHEIGHT = 0x0100; + public const int LBS_NOSEL = 0x4000; + public const int LBS_NOTIFY = 0x0001; + + public const int LBS_OWNERDRAWFIXED = 0x0010, + LBS_OWNERDRAWVARIABLE = 0x0020; + + public const int LBS_USETABSTOPS = 0x0080; + public const int LBS_WANTKEYBOARDINPUT = 0x0400; + + public const int LB_ADDSTRING = 0x0180; + + public const int LB_DELETESTRING = 0x0182; + + public const int LB_ERR = (-1), + LB_ERRSPACE = (-2); + + public const int LB_FINDSTRING = 0x018F; + public const int LB_FINDSTRINGEXACT = 0x01A2; + + public const int LB_GETCARETINDEX = 0x019F, + LB_GETCURSEL = 0x0188; + + public const int LB_GETITEMHEIGHT = 0x01A1; + public const int LB_GETITEMRECT = 0x0198; + public const int LB_GETSEL = 0x0187; + + public const int LB_GETSELCOUNT = 0x0190, + LB_GETSELITEMS = 0x0191; + + public const int LB_GETTEXT = 0x0189, + LB_GETTEXTLEN = 0x018A, + LB_GETTOPINDEX = 0x018E; + + public const int LB_INSERTSTRING = 0x0181; + public const int LB_ITEMFROMPOINT = 0x01A9; + public const int LB_RESETCONTENT = 0x0184; + + public const int LB_SETCOLUMNWIDTH = 0x0195; + + public const int LB_SETCURSEL = 0x0186; + public const int LB_SETHORIZONTALEXTENT = 0x0194; + + public const int LB_SETITEMHEIGHT = 0x01A0; + + public const int LB_SETLOCALE = 0x01A5; + + public const int LB_SETSEL = 0x0185; + public const int LB_SETTABSTOPS = 0x0192; + public const int LB_SETTOPINDEX = 0x0197; + + public const int LCID_INSTALLED = 0x01; + public const int LCID_SUPPORTED = 0x02; + + public const int LOCALE_IFIRSTDAYOFWEEK = 0x0000100C; + + public const int LOCK_EXCLUSIVE = 0x2, + LOCK_ONLYONCE = 0x4; + + public const int LOCK_WRITE = 0x1; + + public const int LOGPIXELSX = 88, + LOGPIXELSY = 90; + + public const int LVA_ALIGNLEFT = 0x0001, + LVA_ALIGNTOP = 0x0002; + + public const int LVA_DEFAULT = 0x0000; + public const int LVA_SNAPTOGRID = 0x0005; + + public const int LVBKIF_SOURCE_NONE = 0x0000, + LVBKIF_SOURCE_URL = 0x0002, + LVBKIF_STYLE_NORMAL = 0x0000, + LVBKIF_STYLE_TILE = 0x0010; + + public const int LVCDI_ITEM = 0x0000, + LVCF_FMT = 0x0001; + + public const int LVCF_IMAGE = 0x0010, + LVCF_ORDER = 0x0020; + + public const int LVCF_SUBITEM = 0x0008; + public const int LVCF_TEXT = 0x0004; + public const int LVCF_WIDTH = 0x0002; + public const int LVFI_NEARESTXY = 0x0040; + public const int LVFI_PARAM = 0x0001; + + public const int LVFI_PARTIAL = 0x0008, + LVFI_STRING = 0x0002; + + public const int LVGA_FOOTER_CENTER = 0x00000010; + public const int LVGA_FOOTER_LEFT = 0x00000008; + public const int LVGA_FOOTER_RIGHT = 0x00000020; + public const int LVGA_HEADER_CENTER = 0x00000002; + public const int LVGA_HEADER_LEFT = 0x00000001; + public const int LVGA_HEADER_RIGHT = 0x00000004; + public const int LVGF_ALIGN = 0x00000008; + public const int LVGF_FOOTER = 0x00000002; + public const int LVGF_GROUPID = 0x00000010; + public const int LVGF_HEADER = 0x00000001; + public const int LVGF_NONE = 0x00000000; + public const int LVGF_STATE = 0x00000004; + + public const int LVGS_COLLAPSED = 0x00000001, + LVGS_HIDDEN = 0x00000002; + + public const int LVGS_NORMAL = 0x00000000; + + public const int LVHT_ABOVE = 0x0008, + LVHT_BELOW = 0x0010; + + public const int LVHT_LEFT = 0x0040; + public const int LVHT_NOWHERE = 0x0001; + public const int LVHT_ONITEM = (0x0002 | 0x0004 | 0x0008); + + public const int LVHT_ONITEMICON = 0x0002, + LVHT_ONITEMLABEL = 0x0004; + + public const int LVHT_ONITEMSTATEICON = 0x0008; + public const int LVHT_RIGHT = 0x0020; + public const int LVIF_COLUMNS = 0x0200; + public const int LVIF_GROUPID = 0x0100; + + public const int LVIF_IMAGE = 0x0002, + LVIF_INDENT = 0x0010, + LVIF_PARAM = 0x0004, + LVIF_STATE = 0x0008; + + public const int LVIF_TEXT = 0x0001; + public const int LVIM_AFTER = 0x00000001; + + public const int LVIR_BOUNDS = 0, + LVIR_ICON = 1, + LVIR_LABEL = 2, + LVIR_SELECTBOUNDS = 3; + + public const int LVIS_CUT = 0x0004, + LVIS_DROPHILITED = 0x0008; + + public const int LVIS_FOCUSED = 0x0001; + + public const int LVIS_OVERLAYMASK = 0x0F00; + + public const int LVIS_SELECTED = 0x0002; + + public const int LVIS_STATEIMAGEMASK = 0xF000; + + public const int LVM_ARRANGE = (0x1000 + 22); + + public const int LVM_DELETEALLITEMS = (0x1000 + 9); + + public const int LVM_DELETECOLUMN = (0x1000 + 28); + public const int LVM_DELETEITEM = (0x1000 + 8); + + public const int LVM_EDITLABELA = (0x1000 + 23), + LVM_EDITLABELW = (0x1000 + 118); + + public const int LVM_ENABLEGROUPVIEW = (0x1000 + 157); + public const int LVM_ENSUREVISIBLE = (0x1000 + 19); + + public const int LVM_FINDITEMA = (0x1000 + 13), + LVM_FINDITEMW = (0x1000 + 83); + + public const int LVM_GETCOLUMNA = (0x1000 + 25), + LVM_GETCOLUMNW = (0x1000 + 95); + + public const int LVM_GETCOLUMNWIDTH = (0x1000 + 29); + public const int LVM_GETGROUPINFO = (0x1000 + 149); + public const int LVM_GETHEADER = (0x1000 + 31); + public const int LVM_GETHOTITEM = (0x1000 + 61); + public const int LVM_GETINSERTMARK = (0x1000 + 167); + public const int LVM_GETINSERTMARKCOLOR = (0x1000 + 171); + public const int LVM_GETINSERTMARKRECT = (0x1000 + 169); + + public const int LVM_GETISEARCHSTRINGA = (0x1000 + 52), + LVM_GETISEARCHSTRINGW = (0x1000 + 117); + + public const int LVM_GETITEMA = (0x1000 + 5); + + public const int LVM_GETITEMRECT = (0x1000 + 14); + + public const int LVM_GETITEMSTATE = (0x1000 + 44), + LVM_GETITEMTEXTA = (0x1000 + 45), + LVM_GETITEMTEXTW = (0x1000 + 115); + + public const int LVM_GETITEMW = (0x1000 + 75); + public const int LVM_GETNEXTITEM = (0x1000 + 12); + public const int LVM_GETSELECTEDCOUNT = (0x1000 + 50); + + public const int LVM_GETSTRINGWIDTHA = (0x1000 + 17), + LVM_GETSTRINGWIDTHW = (0x1000 + 87); + + public const int LVM_GETSUBITEMRECT = (0x1000 + 56); + public const int LVM_GETTILEVIEWINFO = (0x1000 + 163); + public const int LVM_GETTOPINDEX = (0x1000 + 39); + public const int LVM_HASGROUP = (0x1000 + 161); + + public const int LVM_HITTEST = (0x1000 + 18); + + public const int LVM_INSERTCOLUMNA = (0x1000 + 27), + LVM_INSERTCOLUMNW = (0x1000 + 97), + LVM_INSERTGROUP = (0x1000 + 145); + + public const int LVM_INSERTITEMA = (0x1000 + 7), + LVM_INSERTITEMW = (0x1000 + 77); + + public const int LVM_INSERTMARKHITTEST = (0x1000 + 168); + + public const int LVM_ISGROUPVIEWENABLED = (0x1000 + 175); + public const int LVM_MOVEITEMTOGROUP = (0x1000 + 154); + + public const int LVM_REMOVEALLGROUPS = (0x1000 + 160); + + public const int LVM_REMOVEGROUP = (0x1000 + 150); + + public const int LVM_SCROLL = (0x1000 + 20), + LVM_SETBKCOLOR = (0x1000 + 1), + LVM_SETBKIMAGEA = (0x1000 + 68), + LVM_SETBKIMAGEW = (0x1000 + 138); + + public const int LVM_SETCOLUMNA = (0x1000 + 26), + LVM_SETCOLUMNW = (0x1000 + 96); + + public const int LVM_SETCOLUMNWIDTH = (0x1000 + 30); + + public const int LVM_SETEXTENDEDLISTVIEWSTYLE = (0x1000 + 54); + public const int LVM_SETGROUPINFO = (0x1000 + 147); + public const int LVM_SETIMAGELIST = (0x1000 + 3); + public const int LVM_SETINFOTIP = (0x1000 + 173); + + public const int LVM_SETINSERTMARK = (0x1000 + 166); + + public const int LVM_SETINSERTMARKCOLOR = (0x1000 + 170); + public const int LVM_SETITEMA = (0x1000 + 6); + public const int LVM_SETITEMCOUNT = (0x1000 + 47); + + public const int LVM_SETITEMPOSITION = (0x1000 + 15); + + public const int LVM_SETITEMPOSITION32 = (0x01000 + 49); + + public const int LVM_SETITEMSTATE = (0x1000 + 43); + + public const int LVM_SETITEMTEXTA = (0x1000 + 46), + LVM_SETITEMTEXTW = (0x1000 + 116); + + public const int LVM_SETITEMW = (0x1000 + 76); + public const int LVM_SETTEXTBKCOLOR = (0x1000 + 38); + public const int LVM_SETTEXTCOLOR = (0x1000 + 36); + + public const int LVM_SETTILEVIEWINFO = (0x1000 + 162); + + public const int LVM_SETTOOLTIPS = (0x1000 + 74); + public const int LVM_SETVIEW = (0x1000 + 142); + public const int LVM_SORTITEMS = (0x1000 + 48); + public const int LVM_SUBITEMHITTEST = (0x1000 + 57); + + public const int LVM_UPDATE = (0x1000 + 42), + LVNI_FOCUSED = 0x0001, + LVNI_SELECTED = 0x0002; + + public const int LVN_BEGINDRAG = ((0 - 100) - 9); + + public const int LVN_BEGINLABELEDITA = ((0 - 100) - 5), + LVN_BEGINLABELEDITW = ((0 - 100) - 75); + + public const int LVN_BEGINRDRAG = ((0 - 100) - 11); + public const int LVN_COLUMNCLICK = ((0 - 100) - 8); + + public const int LVN_ENDLABELEDITA = ((0 - 100) - 6), + LVN_ENDLABELEDITW = ((0 - 100) - 76); + + public const int LVN_GETDISPINFOA = ((0 - 100) - 50), + LVN_GETDISPINFOW = ((0 - 100) - 77); + + public const int LVN_GETINFOTIPA = ((0 - 100) - 57), + LVN_GETINFOTIPW = ((0 - 100) - 58); + + public const int LVN_ITEMACTIVATE = ((0 - 100) - 14); + public const int LVN_ITEMCHANGED = ((0 - 100) - 1); + public const int LVN_ITEMCHANGING = ((0 - 100) - 0); + public const int LVN_KEYDOWN = ((0 - 100) - 55); + + public const int LVN_ODCACHEHINT = ((0 - 100) - 13); + + public const int LVN_ODFINDITEMA = ((0 - 100) - 52), + LVN_ODFINDITEMW = ((0 - 100) - 79); + + public const int LVN_ODSTATECHANGED = ((0 - 100) - 15), + LVN_SETDISPINFOA = ((0 - 100) - 51), + LVN_SETDISPINFOW = ((0 - 100) - 78); + + public const int LVSCW_AUTOSIZE = -1, + LVSCW_AUTOSIZE_USEHEADER = -2; + + public const int LVSIL_NORMAL = 0, + LVSIL_SMALL = 1, + LVSIL_STATE = 2; + + public const int LVS_ALIGNLEFT = 0x0800; + public const int LVS_ALIGNTOP = 0x0000; + + public const int LVS_AUTOARRANGE = 0x0100, + LVS_EDITLABELS = 0x0200; + + public const int LVS_EX_CHECKBOXES = 0x00000004; + public const int LVS_EX_FULLROWSELECT = 0x00000020; + public const int LVS_EX_GRIDLINES = 0x00000001; + public const int LVS_EX_HEADERDRAGDROP = 0x00000010; + public const int LVS_EX_INFOTIP = 0x00000400; + public const int LVS_EX_ONECLICKACTIVATE = 0x00000040; + public const int LVS_EX_TRACKSELECT = 0x00000008; + public const int LVS_EX_TWOCLICKACTIVATE = 0x00000080; + public const int LVS_EX_UNDERLINEHOT = 0x0800; + public const int LVS_ICON = 0x0000; + public const int LVS_LIST = 0x0003; + public const int LVS_NOCOLUMNHEADER = 0x4000; + public const int LVS_NOLABELWRAP = 0x0080; + public const int LVS_NOSCROLL = 0x2000; + + public const int LVS_NOSORTHEADER = unchecked(0x8000), + LVS_OWNERDATA = 0x1000; + + public const int LVS_REPORT = 0x0001; + public const int LVS_SHAREIMAGELISTS = 0x0040; + public const int LVS_SHOWSELALWAYS = 0x0008; + public const int LVS_SINGLESEL = 0x0004; + public const int LVS_SMALLICON = 0x0002; + + public const int LVS_SORTASCENDING = 0x0010, + LVS_SORTDESCENDING = 0x0020; + + public const int LVTVIF_FIXEDSIZE = 0x00000003; + public const int LVTVIM_COLUMNS = 0x00000002; + public const int LVTVIM_TILESIZE = 0x00000001; + public const int LV_VIEW_TILE = 0x0004; + + public const int LWA_ALPHA = 0x00000002; + + public const int LWA_COLORKEY = 0x00000001; + + public const int MAX_PATH = 260; + + public const uint MA_ACTIVATE = 1; + public const uint MA_ACTIVATEANDEAT = 2; + public const uint MA_NOACTIVATE = 3; + public const uint MA_NOACTIVATEANDEAT = 4; + + public const int MB_ICONASTERISK = 0x000040; + public const int MB_ICONEXCLAMATION = 0x000030; + + public const int MB_ICONHAND = 0x000010, + MB_ICONQUESTION = 0x000020; + + public const int MB_OK = 0x00000000; + + public const int MCHT_CALENDAR = 0x00020000; + + public const int MCHT_CALENDARBK = (0x00020000), + MCHT_CALENDARDATE = (0x00020000 | 0x0001), + MCHT_CALENDARDATENEXT = ((0x00020000 | 0x0001) | 0x01000000), + MCHT_CALENDARDATEPREV = ((0x00020000 | 0x0001) | 0x02000000), + MCHT_CALENDARDAY = (0x00020000 | 0x0002), + MCHT_CALENDARWEEKNUM = (0x00020000 | 0x0003); + + public const int MCHT_TITLE = 0x00010000; + public const int MCHT_TITLEBK = (0x00010000); + + public const int MCHT_TITLEBTNNEXT = (0x00010000 | 0x01000000 | 0x0003), + MCHT_TITLEBTNPREV = (0x00010000 | 0x02000000 | 0x0003); + + public const int MCHT_TITLEMONTH = (0x00010000 | 0x0001), + MCHT_TITLEYEAR = (0x00010000 | 0x0002); + + public const int MCHT_TODAYLINK = 0x00030000; + public const int MCM_GETMAXTODAYWIDTH = (0x1000 + 21); + public const int MCM_GETMINREQRECT = (0x1000 + 9); + public const int MCM_GETMONTHRANGE = (0x1000 + 7); + + public const int MCM_GETTODAY = (0x1000 + 13), + MCM_HITTEST = (0x1000 + 14); + + public const int MCM_SETCOLOR = (0x1000 + 10); + public const int MCM_SETFIRSTDAYOFWEEK = (0x1000 + 15); + public const int MCM_SETMAXSELCOUNT = (0x1000 + 4); + public const int MCM_SETMONTHDELTA = (0x1000 + 20); + public const int MCM_SETRANGE = (0x1000 + 18); + public const int MCM_SETSELRANGE = (0x1000 + 6); + public const int MCM_SETTODAY = (0x1000 + 12); + public const int MCN_GETDAYSTATE = ((0 - 750) + 3); + public const int MCN_SELCHANGE = ((0 - 750) + 1); + public const int MCN_SELECT = ((0 - 750) + 4); + public const int MCSC_MONTHBK = 4; + + public const int MCSC_TEXT = 1, + MCSC_TITLEBK = 2, + MCSC_TITLETEXT = 3; + + public const int MCSC_TRAILINGTEXT = 5; + + public const int MCS_DAYSTATE = 0x0001, + MCS_MULTISELECT = 0x0002; + + public const int MCS_NOTODAY = 0x0010; + + public const int MCS_NOTODAYCIRCLE = 0x0008; + public const int MCS_WEEKNUMBERS = 0x0004; + public const int MDITILE_HORIZONTAL = 0x0001; + public const int MDITILE_VERTICAL = 0x0000; + public const int MEMBERID_NIL = (-1); + public const int MFT_MENUBREAK = 0x00000040; + public const int MFT_RIGHTJUSTIFY = 0x00004000; + public const int MFT_RIGHTORDER = 0x00002000; + public const int MFT_SEPARATOR = 0x00000800; + + public const int MF_BYCOMMAND = 0x00000000, + MF_BYPOSITION = 0x00000400, + MF_ENABLED = 0x00000000, + MF_GRAYED = 0x00000001, + MF_POPUP = 0x00000010, + MF_SYSMENU = 0x00002000; + + public const int MIIM_DATA = 0x00000020; + public const int MIIM_ID = 0x00000002; + public const int MIIM_STATE = 0x00000001; + + public const int MIIM_SUBMENU = 0x00000004, + MIIM_TYPE = 0x00000010; + + public const int MK_CONTROL = 0x0008; + public const int MK_LBUTTON = 0x0001; + public const int MK_MBUTTON = 0x0010; + + public const int MK_RBUTTON = 0x0002, + MK_SHIFT = 0x0004; + + public const int MMIO_ALLOCBUF = 0x00010000, + MMIO_FINDRIFF = 0x00000020; + + public const int MMIO_READ = 0x00000000; + public const int MM_ANISOTROPIC = 8; + public const int MM_TEXT = 1; + + public const int MNC_EXECUTE = 2, + MNC_SELECT = 3; + + public const int MSAA_MENU_SIG = (unchecked((int) 0xAA0DF00D)); + + public const int NFR_ANSI = 1, + NFR_UNICODE = 2; + + public const int NIF_ICON = 0x00000002; + public const int NIF_MESSAGE = 0x00000001; + public const int NIF_TIP = 0x00000004; + public const int NIM_ADD = 0x00000000; + public const int NIM_DELETE = 0x00000002; + public const int NIM_MODIFY = 0x00000001; + + public const int NM_CLICK = ((0 - 0) - 2); + + public const int NM_CUSTOMDRAW = ((0 - 0) - 12); + + public const int NM_DBLCLK = ((0 - 0) - 3), + NM_RCLICK = ((0 - 0) - 5), + NM_RDBLCLK = ((0 - 0) - 6); + + public const int NM_RELEASEDCAPTURE = ((0 - 0) - 16); + + public const int OBJ_BITMAP = 7; + + public const int OBJ_BRUSH = 2, + OBJ_DC = 3; + + public const int OBJ_ENHMETADC = 12; + public const int OBJ_EXTPEN = 11; + public const int OBJ_FONT = 6; + public const int OBJ_MEMDC = 10; + + public const int OBJ_METADC = 4; + + public const int OBJ_METAFILE = 9; + + public const int OBJ_PAL = 5; + + public const int OBJ_PEN = 1; + + public const int OBJ_REGION = 8; + + public const int ODS_CHECKED = 0x0008, + ODS_COMBOBOXEDIT = 0x1000, + ODS_DEFAULT = 0x0020, + ODS_DISABLED = 0x0004, + ODS_FOCUS = 0x0010, + ODS_GRAYED = 0x0002, + ODS_HOTLIGHT = 0x0040, + ODS_INACTIVE = 0x0080, + ODS_NOACCEL = 0x0100, + ODS_NOFOCUSRECT = 0x0200, + ODS_SELECTED = 0x0001; + + public const int OFN_ALLOWMULTISELECT = 0x00000200; + public const int OFN_CREATEPROMPT = 0x00002000; + public const int OFN_ENABLEHOOK = 0x00000020; + public const int OFN_ENABLESIZING = 0x00800000; + public const int OFN_EXPLORER = 0x00080000; + public const int OFN_FILEMUSTEXIST = 0x00001000; + + public const int OFN_HIDEREADONLY = 0x00000004, + OFN_NOCHANGEDIR = 0x00000008; + + public const int OFN_NODEREFERENCELINKS = 0x00100000; + public const int OFN_NOVALIDATE = 0x00000100; + public const int OFN_OVERWRITEPROMPT = 0x00000002; + public const int OFN_PATHMUSTEXIST = 0x00000800; + public const int OFN_READONLY = 0x00000001; + public const int OFN_SHOWHELP = 0x00000010; + public const int OFN_USESHELLITEM = 0x01000000; + + public const int OLECLOSE_PROMPTSAVE = 2; + + public const int OLECLOSE_SAVEIFDIRTY = 0; + public const int OLEIVERB_DISCARDUNDOSTATE = -6; + public const int OLEIVERB_HIDE = -3; + public const int OLEIVERB_INPLACEACTIVATE = -5; + public const int OLEIVERB_PRIMARY = 0; + public const int OLEIVERB_PROPERTIES = -7; + public const int OLEIVERB_SHOW = -1; + public const int OLEIVERB_UIACTIVATE = -4; + + public const int OLEMISC_ACTIVATEWHENVISIBLE = 0x0000100, + OLEMISC_ACTSLIKEBUTTON = 0x00001000; + + public const int OLEMISC_INSIDEOUT = 0x00000080; + public const int OLEMISC_RECOMPOSEONRESIZE = 0x00000001; + public const int OLEMISC_SETCLIENTSITEFIRST = 0x00020000; + + public const int OLE_E_NOCONNECTION = unchecked((int) 0x80040004), + OLE_E_PROMPTSAVECANCELLED = unchecked((int) 0x8004000C); + + public const int PATCOPY = 0x00F00021, + PATINVERT = 0x005A0049; + + public const int PBM_SETBARCOLOR = (0x0400 + 9), + PBM_SETBKCOLOR = (0x2000 + 1); + + public const int PBM_SETPOS = (0x0400 + 2); + public const int PBM_SETRANGE = (0x0400 + 1); + public const int PBM_SETRANGE32 = (0x0400 + 6); + public const int PBM_SETSTEP = (0x0400 + 4); + public const int PBS_SMOOTH = 0x01; + public const int PDERR_CREATEICFAILURE = 0x100A; + public const int PDERR_DEFAULTDIFFERENT = 0x100C; + public const int PDERR_DNDMMISMATCH = 0x1009; + + public const int PDERR_GETDEVMODEFAIL = 0x1005, + PDERR_INITFAILURE = 0x1006; + + public const int PDERR_LOADDRVFAILURE = 0x1004; + + public const int PDERR_NODEFAULTPRN = 0x1008; + + public const int PDERR_NODEVICES = 0x1007; + public const int PDERR_PARSEFAILURE = 0x1002; + + public const int PDERR_PRINTERNOTFOUND = 0x100B; + + public const int PDERR_RETDEFFAILURE = 0x1003; + public const int PDERR_SETUPFAILURE = 0x1001; + + public const int PD_COLLATE = 0x00000010; + + public const int PD_DISABLEPRINTTOFILE = 0x00080000; + + public const int PD_ENABLEPRINTHOOK = 0x00001000; + public const int PD_NOCURRENTPAGE = 0x00800000; + + public const int PD_NONETWORKBUTTON = 0x00200000; + + public const int PD_NOPAGENUMS = 0x00000008; + public const int PD_NOSELECTION = 0x00000004; + + public const int PD_PRINTTOFILE = 0x00000020, + PD_SHOWHELP = 0x00000800; + + public const int PLANES = 14; + public const int PM_NOREMOVE = 0x0000; + public const int PM_NOYIELD = 0x0002; + public const int PM_REMOVE = 0x0001; + public const int PRF_CHECKVISIBLE = 0x00000001; + public const int PRF_CHILDREN = 0x00000010; + + public const int PRF_CLIENT = 0x00000004, + PRF_ERASEBKGND = 0x00000008; + + public const int PRF_NONCLIENT = 0x00000002; + + public const int PSD_DISABLEMARGINS = 0x00000010; + + public const int PSD_DISABLEORIENTATION = 0x00000100, + PSD_DISABLEPAPER = 0x00000200; + + public const int PSD_DISABLEPRINTER = 0x00000020; + + public const int PSD_ENABLEPAGESETUPHOOK = 0x00002000; + + public const int PSD_INHUNDREDTHSOFMILLIMETERS = 0x00000008; + public const int PSD_MARGINS = 0x00000002; + public const int PSD_MINMARGINS = 0x00000001; + + public const int PSD_NONETWORKBUTTON = 0x00200000; + + public const int PSD_SHOWHELP = 0x00000800; + + public const int PSM_SETFINISHTEXTA = (0x0400 + 115), + PSM_SETFINISHTEXTW = (0x0400 + 121); + + public const int PSM_SETTITLEA = (0x0400 + 111), + PSM_SETTITLEW = (0x0400 + 120); + + public const int PS_DOT = 2; + public const int PS_SOLID = 0; + + public const int QS_ALLEVENTS = QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY, + QS_ALLINPUT = QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY | QS_SENDMESSAGE; + + public const int QS_ALLPOSTMESSAGE = 0x0100; + public const int QS_HOTKEY = 0x0080; + public const int QS_INPUT = QS_MOUSE | QS_KEY; + + public const int QS_KEY = 0x0001; + public const int QS_MOUSE = QS_MOUSEMOVE | QS_MOUSEBUTTON; + + public const int QS_MOUSEBUTTON = 0x0004; + + public const int QS_MOUSEMOVE = 0x0002; + + public const int QS_PAINT = 0x0020; + + public const int QS_POSTMESSAGE = 0x0008; + + public const int QS_SENDMESSAGE = 0x0040; + + public const int QS_TIMER = 0x0010; + + public const int RB_INSERTBANDA = (0x0400 + 1), + RB_INSERTBANDW = (0x0400 + 10); + + public const int RDW_ALLCHILDREN = 0x0080; + public const int RDW_ERASE = 0x0004; + public const int RDW_FRAME = 0x0400; + public const int RDW_INVALIDATE = 0x0001; + public const int RGN_AND = 1; + public const int RGN_DIFF = 4; + public const int RPC_E_CANTCALLOUT_ININPUTSYNCCALL = unchecked((int) 0x8001010D); + public const int RPC_E_CHANGED_MODE = unchecked((int) 0x80010106); + public const int SBARS_SIZEGRIP = 0x0100; + + public const int SBS_HORZ = 0x0000, + SBS_VERT = 0x0001; + + public const int SBT_NOBORDERS = 0x0100; + public const int SBT_OWNERDRAW = 0x1000; + + public const int SBT_POPOUT = 0x0200, + SBT_RTLREADING = 0x0400; + + public const int SB_BOTTOM = 7; + + public const int SB_CTL = 2; + + public const int SB_ENDSCROLL = 8; + public const int SB_GETRECT = (0x0400 + 10); + public const int SB_GETTEXTA = (0x0400 + 2); + + public const int SB_GETTEXTLENGTHA = (0x0400 + 3), + SB_GETTEXTLENGTHW = (0x0400 + 12); + + public const int SB_GETTEXTW = (0x0400 + 13); + + public const int SB_GETTIPTEXTA = (0x0400 + 18), + SB_GETTIPTEXTW = (0x0400 + 19); + + public const int SB_HORZ = 0; + public const int SB_LEFT = 6; + + public const int SB_LINEDOWN = 1; + + public const int SB_LINELEFT = 0; + + public const int SB_LINERIGHT = 1; + + public const int SB_LINEUP = 0; + + public const int SB_PAGEDOWN = 3; + + public const int SB_PAGELEFT = 2; + + public const int SB_PAGERIGHT = 3; + + public const int SB_PAGEUP = 2; + public const int SB_RIGHT = 7; + public const int SB_SETICON = (0x0400 + 15); + public const int SB_SETPARTS = (0x0400 + 4); + + public const int SB_SETTEXTA = (0x0400 + 1), + SB_SETTEXTW = (0x0400 + 11); + + public const int SB_SETTIPTEXTA = (0x0400 + 16), + SB_SETTIPTEXTW = (0x0400 + 17); + + public const int SB_SIMPLE = (0x0400 + 9); + + public const int SB_THUMBPOSITION = 4, + SB_THUMBTRACK = 5; + + public const int SB_TOP = 6; + + public const int SB_VERT = 1; + + public const int SC_CLOSE = 0xF060, + SC_KEYMENU = 0xF100; + + public const int SC_MAXIMIZE = 0xF030; + public const int SC_MINIMIZE = 0xF020; + public const int SC_MOVE = 0xF010; + public const int SC_RESTORE = 0xF120; + public const int SC_SIZE = 0xF000; + public const int SHGFI_ADDOVERLAYS = 0x000000020; + public const int SHGFI_ATTRIBUTES = 0x000000800; + public const int SHGFI_ATTR_SPECIFIED = 0x000020000; + public const int SHGFI_DISPLAYNAME = 0x000000200; + public const int SHGFI_EXETYPE = 0x000002000; + public const int SHGFI_ICON = 0x000000100; + public const int SHGFI_ICONLOCATION = 0x000001000; + public const int SHGFI_LARGEICON = 0x000000000; + public const int SHGFI_LINKOVERLAY = 0x000008000; + public const int SHGFI_OPENICON = 0x000000002; + public const int SHGFI_OVERLAYINDEX = 0x000000040; + public const int SHGFI_PIDL = 0x000000008; + public const int SHGFI_SELECTED = 0x000010000; + public const int SHGFI_SHELLICONSIZE = 0x000000004; + public const int SHGFI_SMALLICON = 0x000000001; + public const int SHGFI_SYSICONINDEX = 0x000004000; + public const int SHGFI_TYPENAME = 0x000000400; + public const int SHGFI_USEFILEATTRIBUTES = 0x000000010; + public const int SHGFP_TYPE_CURRENT = 0; + public const int SIF_ALL = (0x0001 | 0x0002 | 0x0004 | 0x0010); + + public const int SIF_PAGE = 0x0002, + SIF_POS = 0x0004; + + public const int SIF_RANGE = 0x0001; + public const int SIF_TRACKPOS = 0x0010; + public const int SM_ARRANGE = 56; + public const int SM_CLEANBOOT = 67; + public const int SM_CMONITORS = 80; + public const int SM_CMOUSEBUTTONS = 43; + + public const int SM_CXBORDER = 5; + + public const int SM_CXCURSOR = 13; + + public const int SM_CXDOUBLECLK = 36; + public const int SM_CXDRAG = 68; + public const int SM_CXEDGE = 45; + public const int SM_CXFIXEDFRAME = 7; + public const int SM_CXFOCUSBORDER = 83; + public const int SM_CXFRAME = 32; + + public const int SM_CXHSCROLL = 21; + + public const int SM_CXHTHUMB = 10, + SM_CXICON = 11; + + public const int SM_CXICONSPACING = 38; + public const int SM_CXMAXIMIZED = 61; + public const int SM_CXMAXTRACK = 59; + public const int SM_CXMENUCHECK = 71; + public const int SM_CXMENUSIZE = 54; + + public const int SM_CXMIN = 28; + + public const int SM_CXMINIMIZED = 57; + public const int SM_CXMINSPACING = 47; + + public const int SM_CXMINTRACK = 34; + + public const int SM_CXSCREEN = 0; + public const int SM_CXSIZE = 30; + public const int SM_CXSIZEFRAME = SM_CXFRAME; + public const int SM_CXSMICON = 49; + public const int SM_CXSMSIZE = 52; + public const int SM_CXVIRTUALSCREEN = 78; + public const int SM_CXVSCROLL = 2; + public const int SM_CYBORDER = 6; + public const int SM_CYCAPTION = 4; + public const int SM_CYCURSOR = 14; + + public const int SM_CYDOUBLECLK = 37; + + public const int SM_CYDRAG = 69; + + public const int SM_CYEDGE = 46; + + public const int SM_CYFIXEDFRAME = 8; + public const int SM_CYFOCUSBORDER = 84; + public const int SM_CYFRAME = 33; + public const int SM_CYHSCROLL = 3; + public const int SM_CYICON = 12; + public const int SM_CYICONSPACING = 39; + public const int SM_CYKANJIWINDOW = 18; + public const int SM_CYMAXIMIZED = 62; + public const int SM_CYMAXTRACK = 60; + public const int SM_CYMENU = 15; + public const int SM_CYMENUCHECK = 72; + public const int SM_CYMENUSIZE = 55; + public const int SM_CYMIN = 29; + public const int SM_CYMINIMIZED = 58; + + public const int SM_CYMINSPACING = 48; + + public const int SM_CYMINTRACK = 35; + public const int SM_CYSCREEN = 1; + public const int SM_CYSIZE = 31; + public const int SM_CYSIZEFRAME = SM_CYFRAME; + + public const int SM_CYSMCAPTION = 51; + + public const int SM_CYSMICON = 50; + + public const int SM_CYSMSIZE = 53; + + public const int SM_CYVIRTUALSCREEN = 79; + public const int SM_CYVSCROLL = 20; + public const int SM_CYVTHUMB = 9; + public const int SM_DBCSENABLED = 42; + public const int SM_DEBUG = 22; + public const int SM_MENUDROPALIGNMENT = 40; + + public const int SM_MIDEASTENABLED = 74; + + public const int SM_MOUSEPRESENT = 19; + + public const int SM_MOUSEWHEELPRESENT = 75; + + public const int SM_NETWORK = 63; + public const int SM_PENWINDOWS = 41; + public const int SM_REMOTESESSION = 0x1000; + public const int SM_SAMEDISPLAYFORMAT = 81; + public const int SM_SECURE = 44; + public const int SM_SHOWSOUNDS = 70; + public const int SM_SWAPBUTTON = 23; + + public const int SM_XVIRTUALSCREEN = 76, + SM_YVIRTUALSCREEN = 77; + + public const int SND_ASYNC = 0x0001; + + public const int SND_FILENAME = 0x00020000; + + public const int SND_LOOP = 0x0008; + public const int SND_MEMORY = 0x0004; + public const int SND_NODEFAULT = 0x0002; + + public const int SND_NOSTOP = 0x0010; + + public const int SND_PURGE = 0x0040; + public const int SND_SYNC = 0000; + public const int SORT_DEFAULT = 0x0; + + public const int SPI_GETACTIVEWINDOWTRACKING = 0x1000, + SPI_GETACTIVEWNDTRKTIMEOUT = 0x2002, + SPI_GETANIMATION = 0x0048, + SPI_GETBORDER = 0x0005, + SPI_GETCARETWIDTH = 0x2006; + + public const int SPI_GETCOMBOBOXANIMATION = 0x1004; + public const int SPI_GETDEFAULTINPUTLANG = 89; + public const int SPI_GETDRAGFULLWINDOWS = 38; + + public const int SPI_GETDROPSHADOW = 0x1024, + SPI_GETFLATMENU = 0x1022; + + public const int SPI_GETFONTSMOOTHING = 0x004A; + + public const int SPI_GETFONTSMOOTHINGCONTRAST = 0x200C; + + public const int SPI_GETFONTSMOOTHINGTYPE = 0x200A; + public const int SPI_GETGRADIENTCAPTIONS = 0x1008; + public const int SPI_GETHIGHCONTRAST = 66; + public const int SPI_GETHOTTRACKING = 0x100E; + + public const int SPI_GETICONTITLELOGFONT = 0x001F; + + public const int SPI_GETICONTITLEWRAP = 0x0019; + + public const int SPI_GETKEYBOARDCUES = 0x100A, + SPI_GETKEYBOARDDELAY = 0x0016, + SPI_GETKEYBOARDPREF = 0x0044, + SPI_GETKEYBOARDSPEED = 0x000A; + + public const int SPI_GETLISTBOXSMOOTHSCROLLING = 0x1006, + SPI_GETMENUANIMATION = 0x1002; + + public const int SPI_GETMENUDROPALIGNMENT = 0x001B, + SPI_GETMENUFADE = 0x1012, + SPI_GETMENUSHOWDELAY = 0x006A; + + public const int SPI_GETMOUSEHOVERHEIGHT = 0x0064, + SPI_GETMOUSEHOVERTIME = 0x0066; + + public const int SPI_GETMOUSEHOVERWIDTH = 0x0062; + public const int SPI_GETMOUSESPEED = 0x0070; + public const int SPI_GETNONCLIENTMETRICS = 41; + + public const int SPI_GETSELECTIONFADE = 0x1014; + + public const int SPI_GETSNAPTODEFBUTTON = 95; + + public const int SPI_GETTOOLTIPANIMATION = 0x1016, + SPI_GETUIEFFECTS = 0x103E; + + public const int SPI_GETWHEELSCROLLLINES = 104; + + public const int SPI_GETWORKAREA = 48; + + public const int SPI_ICONHORIZONTALSPACING = 0x000D, + SPI_ICONVERTICALSPACING = 0x0018; + + public const int SRCCOPY = 0x00CC0020; + + public const int SS_CENTER = 0x00000001; + public const int SS_LEFT = 0x00000000; + public const int SS_NOPREFIX = 0x00000080; + public const int SS_OWNERDRAW = 0x0000000D; + public const int SS_RIGHT = 0x00000002; + public const int SS_SUNKEN = 0x00001000; + public const int STARTF_USESHOWWINDOW = 0x00000001; + + public const int STATFLAG_DEFAULT = 0x0, + STATFLAG_NONAME = 0x1, + STATFLAG_NOOPEN = 0x2; + + public const int STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 0x4; + + public const int STGC_DEFAULT = 0x0; + + public const int STGC_ONLYIFCURRENT = 0x2; + + public const int STGC_OVERWRITE = 0x1; + public const int STGM_CONVERT = 0x00020000; + public const int STGM_CREATE = 0x00001000; + public const int STGM_DELETEONRELEASE = 0x04000000; + public const int STGM_READ = 0x00000000; + + public const int STGM_READWRITE = 0x00000002, + STGM_SHARE_EXCLUSIVE = 0x00000010; + + public const int STGM_TRANSACTED = 0x00010000; + public const int STGM_WRITE = 0x00000001; + public const int STG_E_ACCESSDENIED = unchecked((int) 0x80030005); + public const int STG_E_DISKISWRITEPROTECTED = unchecked((int) 0x80030013); + public const int STG_E_FILENOTFOUND = unchecked((int) 0x80030002); + public const int STG_E_INSUFFICIENTMEMORY = unchecked((int) 0x80030008); + public const int STG_E_INVALIDFUNCTION = unchecked((int) 0x80030001); + public const int STG_E_INVALIDHANDLE = unchecked((int) 0x80030006); + public const int STG_E_INVALIDPOINTER = unchecked((int) 0x80030009); + public const int STG_E_LOCKVIOLATION = unchecked((int) 0x80030021); + public const int STG_E_NOMOREFILES = unchecked((int) 0x80030012); + public const int STG_E_PATHNOTFOUND = unchecked((int) 0x80030003); + public const int STG_E_READFAULT = unchecked((int) 0x8003001E); + public const int STG_E_SEEKERROR = unchecked((int) 0x80030019); + public const int STG_E_SHAREVIOLATION = unchecked((int) 0x80030020); + public const int STG_E_TOOMANYOPENFILES = unchecked((int) 0x80030004); + public const int STG_E_WRITEFAULT = unchecked((int) 0x8003001D); + + public const int STREAM_SEEK_CUR = 0x1, + STREAM_SEEK_END = 0x2; + + public const int STREAM_SEEK_SET = 0x0; + public const int SUBLANG_DEFAULT = 0x01; + public const int SWP_DRAWFRAME = 0x0020; + public const int SWP_HIDEWINDOW = 0x0080; + public const int SWP_NOACTIVATE = 0x0010; + public const int SWP_NOMOVE = 0x0002; + public const int SWP_NOSIZE = 0x0001; + public const int SWP_NOZORDER = 0x0004; + public const int SWP_SHOWWINDOW = 0x0040; + public const int SW_ERASE = 0x0004; + public const int SW_HIDE = 0; + public const int SW_INVALIDATE = 0x0002; + public const int SW_MAX = 10; + public const int SW_MAXIMIZE = 3; + public const int SW_MINIMIZE = 6; + public const int SW_NORMAL = 1; + public const int SW_RESTORE = 9; + public const int SW_SCROLLCHILDREN = 0x0001; + public const int SW_SHOW = 5; + public const int SW_SHOWMAXIMIZED = 3; + public const int SW_SHOWMINIMIZED = 2; + + public const int SW_SHOWMINNOACTIVE = 7, + SW_SHOWNA = 8; + + public const int SW_SHOWNOACTIVATE = 4; + public const int SW_SMOOTHSCROLL = 0x0010; + + public const int S_FALSE = 0x00000001; + public const int S_OK = 0x00000000; + public const int TBIF_COMMAND = 0x00000020; + public const int TBIF_IMAGE = 0x00000001; + public const int TBIF_SIZE = 0x00000040; + + public const int TBIF_STATE = 0x00000004, + TBIF_STYLE = 0x00000008; + + public const int TBIF_TEXT = 0x00000002; + public const int TBM_GETPOS = (0x0400); + public const int TBM_SETLINESIZE = (0x0400 + 23); + public const int TBM_SETPAGESIZE = (0x0400 + 21); + + public const int TBM_SETPOS = (0x0400 + 5), + TBM_SETRANGE = (0x0400 + 6); + + public const int TBM_SETRANGEMAX = (0x0400 + 8); + public const int TBM_SETRANGEMIN = (0x0400 + 7); + public const int TBM_SETTIC = (0x0400 + 4); + public const int TBM_SETTICFREQ = (0x0400 + 20); + public const int TBN_DROPDOWN = ((0 - 700) - 10); + + public const int TBN_GETBUTTONINFOA = ((0 - 700) - 0), + TBN_GETBUTTONINFOW = ((0 - 700) - 20); + + public const int TBN_GETDISPINFOA = ((0 - 700) - 16), + TBN_GETDISPINFOW = ((0 - 700) - 17), + TBN_GETINFOTIPA = ((0 - 700) - 18), + TBN_GETINFOTIPW = ((0 - 700) - 19); + + public const int TBN_QUERYINSERT = ((0 - 700) - 6); + + public const int TBSTATE_CHECKED = 0x01, + TBSTATE_ENABLED = 0x04, + TBSTATE_HIDDEN = 0x08, + TBSTATE_INDETERMINATE = 0x10, + TBSTYLE_BUTTON = 0x00; + + public const int TBSTYLE_CHECK = 0x02, + TBSTYLE_DROPDOWN = 0x08; + + public const int TBSTYLE_EX_DRAWDDARROWS = 0x00000001; + + public const int TBSTYLE_FLAT = 0x0800, + TBSTYLE_LIST = 0x1000; + + public const int TBSTYLE_SEP = 0x01; + public const int TBSTYLE_TOOLTIPS = 0x0100; + public const int TBSTYLE_WRAPPABLE = 0x0200; + public const int TBS_AUTOTICKS = 0x0001; + public const int TBS_BOTH = 0x0008; + public const int TBS_BOTTOM = 0x0000; + public const int TBS_NOTICKS = 0x0010; + public const int TBS_TOP = 0x0004; + public const int TBS_VERT = 0x0002; + + public const int TB_ADDBUTTONSA = (0x0400 + 20), + TB_ADDBUTTONSW = (0x0400 + 68); + + public const int TB_ADDSTRINGA = (0x0400 + 28), + TB_ADDSTRINGW = (0x0400 + 77); + + public const int TB_AUTOSIZE = (0x0400 + 33); + + public const int TB_BOTTOM = 7; + public const int TB_BUTTONSTRUCTSIZE = (0x0400 + 30); + public const int TB_DELETEBUTTON = (0x0400 + 22); + public const int TB_ENABLEBUTTON = (0x0400 + 1); + public const int TB_ENDTRACK = 8; + public const int TB_GETBUTTON = (0x0400 + 23); + public const int TB_GETBUTTONINFOA = (0x0400 + 65); + public const int TB_GETBUTTONINFOW = (0x0400 + 63); + public const int TB_GETBUTTONSIZE = (0x0400 + 58); + + public const int TB_GETBUTTONTEXTA = (0x0400 + 45), + TB_GETBUTTONTEXTW = (0x0400 + 75); + + public const int TB_GETRECT = (0x0400 + 51); + + public const int TB_GETROWS = (0x0400 + 40); + + public const int TB_INSERTBUTTONA = (0x0400 + 21), + TB_INSERTBUTTONW = (0x0400 + 67); + + public const int TB_ISBUTTONCHECKED = (0x0400 + 10), + TB_ISBUTTONINDETERMINATE = (0x0400 + 13); + + public const int TB_LINEDOWN = 1; + public const int TB_LINEUP = 0; + + public const int TB_MAPACCELERATORA = (0x0400 + 78); + + public const int TB_MAPACCELERATORW = (0x0400 + 90); + + public const int TB_PAGEDOWN = 3; + public const int TB_PAGEUP = 2; + + public const int TB_SAVERESTOREA = (0x0400 + 26), + TB_SAVERESTOREW = (0x0400 + 76); + + public const int TB_SETBUTTONINFOA = (0x0400 + 66); + public const int TB_SETBUTTONINFOW = (0x0400 + 64); + public const int TB_SETBUTTONSIZE = (0x0400 + 31); + public const int TB_SETEXTENDEDSTYLE = (0x0400 + 84); + public const int TB_SETIMAGELIST = (0x0400 + 48); + + public const int TB_SETTOOLTIPS = (0x0400 + 36); + + public const int TB_THUMBPOSITION = 4, + TB_THUMBTRACK = 5, + TB_TOP = 6; + + public const int TCIF_IMAGE = 0x0002; + public const int TCIF_TEXT = 0x0001; + public const int TCM_ADJUSTRECT = (0x1300 + 40); + public const int TCM_DELETEALLITEMS = (0x1300 + 9); + public const int TCM_DELETEITEM = (0x1300 + 8); + public const int TCM_GETCURSEL = (0x1300 + 11); + public const int TCM_GETITEMA = (0x1300 + 5); + public const int TCM_GETITEMRECT = (0x1300 + 10); + public const int TCM_GETITEMW = (0x1300 + 60); + + public const int TCM_GETROWCOUNT = (0x1300 + 44), + TCM_GETTOOLTIPS = (0x1300 + 45); + + public const int TCM_INSERTITEMA = (0x1300 + 7), + TCM_INSERTITEMW = (0x1300 + 62); + + public const int TCM_SETCURSEL = (0x1300 + 12); + public const int TCM_SETIMAGELIST = (0x1300 + 3); + public const int TCM_SETITEMA = (0x1300 + 6); + public const int TCM_SETITEMSIZE = (0x1300 + 41); + public const int TCM_SETITEMW = (0x1300 + 61); + public const int TCM_SETPADDING = (0x1300 + 43); + + public const int TCM_SETTOOLTIPS = (0x1300 + 46), + TCN_SELCHANGE = ((0 - 550) - 1), + TCN_SELCHANGING = ((0 - 550) - 2); + + public const int TCS_BOTTOM = 0x0002; + public const int TCS_BUTTONS = 0x0100; + public const int TCS_FIXEDWIDTH = 0x0400; + + public const int TCS_FLATBUTTONS = 0x0008, + TCS_HOTTRACK = 0x0040; + + public const int TCS_MULTILINE = 0x0200; + public const int TCS_OWNERDRAWFIXED = 0x2000; + public const int TCS_RAGGEDRIGHT = 0x0800; + public const int TCS_RIGHT = 0x0002; + public const int TCS_RIGHTJUSTIFY = 0x0000; + public const int TCS_TABS = 0x0000; + public const int TCS_TOOLTIPS = 0x4000; + public const int TCS_VERTICAL = 0x0080; + + public const int TME_HOVER = 0x00000001, + TME_LEAVE = 0x00000002; + + public const int TO_ADVANCEDTYPOGRAPHY = 1; + + public const int TPM_LEFTALIGN = 0x0000; + public const int TPM_LEFTBUTTON = 0x0000; + public const int TPM_VERTICAL = 0x0040; + public const int TRANSPARENT = 1; + public const int TTDT_AUTOMATIC = 0; + + public const int TTDT_AUTOPOP = 2, + TTDT_INITIAL = 3; + + public const int TTDT_RESHOW = 1; + public const int TTF_ABSOLUTE = 0x0080; + public const int TTF_CENTERTIP = 0x0002; + + public const int TTF_IDISHWND = 0x0001, + TTF_RTLREADING = 0x0004; + + public const int TTF_SUBCLASS = 0x0010; + + public const int TTF_TRACK = 0x0020; + + public const int TTF_TRANSPARENT = 0x0100; + + public const int TTI_WARNING = 2; + + public const int TTM_ACTIVATE = (0x0400 + 1); + + public const int TTM_ADDTOOLA = (0x0400 + 4), + TTM_ADDTOOLW = (0x0400 + 50); + + public const int TTM_ADJUSTRECT = (0x400 + 31); + + public const int TTM_DELTOOLA = (0x0400 + 5), + TTM_DELTOOLW = (0x0400 + 51); + + public const int TTM_ENUMTOOLSA = (0x0400 + 14), + TTM_ENUMTOOLSW = (0x0400 + 58), + TTM_GETCURRENTTOOLA = (0x0400 + 15), + TTM_GETCURRENTTOOLW = (0x0400 + 59); + + public const int TTM_GETDELAYTIME = (0x0400 + 21); + + public const int TTM_GETTEXTA = (0x0400 + 11), + TTM_GETTEXTW = (0x0400 + 56); + + public const int TTM_GETTIPBKCOLOR = (0x0400 + 22); + + public const int TTM_GETTIPTEXTCOLOR = (0x0400 + 23), + TTM_GETTOOLINFOA = (0x0400 + 8), + TTM_GETTOOLINFOW = (0x0400 + 53); + + public const int TTM_HITTESTA = (0x0400 + 10), + TTM_HITTESTW = (0x0400 + 55); + + public const int TTM_NEWTOOLRECTA = (0x0400 + 6), + TTM_NEWTOOLRECTW = (0x0400 + 52); + + public const int TTM_POP = (0x0400 + 28); + + public const int TTM_RELAYEVENT = (0x0400 + 7); + + public const int TTM_SETDELAYTIME = (0x0400 + 3); + public const int TTM_SETMAXTIPWIDTH = (0x0400 + 24); + + public const int TTM_SETTIPBKCOLOR = (0x0400 + 19), + TTM_SETTIPTEXTCOLOR = (0x0400 + 20); + + public const int TTM_SETTITLEA = (WM_USER + 32), + TTM_SETTITLEW = (WM_USER + 33); + + public const int TTM_SETTOOLINFOA = (0x0400 + 9), + TTM_SETTOOLINFOW = (0x0400 + 54); + + public const int TTM_TRACKACTIVATE = (0x0400 + 17), + TTM_TRACKPOSITION = (0x0400 + 18); + + public const int TTM_UPDATE = (0x0400 + 29), + TTM_UPDATETIPTEXTA = (0x0400 + 12), + TTM_UPDATETIPTEXTW = (0x0400 + 57); + + public const int TTM_WINDOWFROMPOINT = (0x0400 + 16); + + public const int TTN_GETDISPINFOA = ((0 - 520) - 0), + TTN_GETDISPINFOW = ((0 - 520) - 10); + + public const int TTN_NEEDTEXTA = ((0 - 520) - 0), + TTN_NEEDTEXTW = ((0 - 520) - 10); + + public const int TTN_POP = ((0 - 520) - 2); + public const int TTN_SHOW = ((0 - 520) - 1); + public const int TTS_ALWAYSTIP = 0x01; + public const int TTS_BALLOON = 0x40; + + public const int TTS_NOANIMATE = 0x10, + TTS_NOFADE = 0x20; + + public const int TTS_NOPREFIX = 0x02; + public const int TVC_BYKEYBOARD = 0x0002; + public const int TVC_BYMOUSE = 0x0001; + public const int TVC_UNKNOWN = 0x0000; + + public const int TVE_COLLAPSE = 0x0001, + TVE_EXPAND = 0x0002; + + public const int TVGN_CARET = 0x0009; + public const int TVGN_FIRSTVISIBLE = 0x0005; + public const int TVGN_NEXT = 0x0001; + public const int TVGN_NEXTVISIBLE = 0x0006; + public const int TVGN_PREVIOUS = 0x0002; + public const int TVGN_PREVIOUSVISIBLE = 0x0007; + + public const int TVHT_ABOVE = 0x0100, + TVHT_BELOW = 0x0200; + + public const int TVHT_NOWHERE = 0x0001; + public const int TVHT_ONITEM = (TVHT_ONITEMICON | TVHT_ONITEMLABEL | TVHT_ONITEMSTATEICON); + public const int TVHT_ONITEMBUTTON = 0x0010; + public const int TVHT_ONITEMICON = 0x0002; + public const int TVHT_ONITEMINDENT = 0x0008; + public const int TVHT_ONITEMLABEL = 0x0004; + + public const int TVHT_ONITEMRIGHT = 0x0020, + TVHT_ONITEMSTATEICON = 0x0040; + + public const int TVHT_TOLEFT = 0x0800; + public const int TVHT_TORIGHT = 0x0400; + public const int TVIF_HANDLE = 0x0010; + + public const int TVIF_IMAGE = 0x0002, + TVIF_PARAM = 0x0004; + + public const int TVIF_SELECTEDIMAGE = 0x0020; + + public const int TVIF_STATE = 0x0008; + public const int TVIF_TEXT = 0x0001; + + public const int TVIS_EXPANDED = 0x0020, + TVIS_EXPANDEDONCE = 0x0040; + + public const int TVIS_SELECTED = 0x0002; + + public const int TVIS_STATEIMAGEMASK = 0xF000; + + public const int TVI_FIRST = (unchecked((int) 0xFFFF0001)); + + public const int TVI_ROOT = (unchecked((int) 0xFFFF0000)); + + public const int TVM_DELETEITEM = (0x1100 + 1); + + public const int TVM_EDITLABELA = (0x1100 + 14), + TVM_EDITLABELW = (0x1100 + 65); + + public const int TVM_ENDEDITLABELNOW = (0x1100 + 22); + public const int TVM_ENSUREVISIBLE = (0x1100 + 20); + + public const int TVM_EXPAND = (0x1100 + 2); + + public const int TVM_GETEDITCONTROL = (0x1100 + 15); + + public const int TVM_GETINDENT = (0x1100 + 6); + + public const int TVM_GETISEARCHSTRINGA = (0x1100 + 23), + TVM_GETISEARCHSTRINGW = (0x1100 + 64); + + public const int TVM_GETITEMA = (0x1100 + 12); + + public const int TVM_GETITEMHEIGHT = (0x1100 + 28); + public const int TVM_GETITEMRECT = (0x1100 + 4); + + public const int TVM_GETITEMW = (0x1100 + 62); + + public const int TVM_GETLINECOLOR = (TV_FIRST + 41); + public const int TVM_GETNEXTITEM = (0x1100 + 10); + + public const int TVM_GETVISIBLECOUNT = (0x1100 + 16), + TVM_HITTEST = (0x1100 + 17); + + public const int TVM_INSERTITEMA = (0x1100 + 0), + TVM_INSERTITEMW = (0x1100 + 50); + + public const int TVM_SELECTITEM = (0x1100 + 11); + public const int TVM_SETBKCOLOR = (TV_FIRST + 29); + public const int TVM_SETIMAGELIST = (0x1100 + 9); + public const int TVM_SETINDENT = (0x1100 + 7); + public const int TVM_SETITEMA = (0x1100 + 13); + + public const int TVM_SETITEMHEIGHT = (0x1100 + 27); + + public const int TVM_SETITEMW = (0x1100 + 63); + public const int TVM_SETLINECOLOR = (TV_FIRST + 40); + public const int TVM_SETTEXTCOLOR = (TV_FIRST + 30); + public const int TVM_SETTOOLTIPS = (TV_FIRST + 24); + public const int TVM_SORTCHILDRENCB = (TV_FIRST + 21); + + public const int TVN_BEGINDRAGA = ((0 - 400) - 7), + TVN_BEGINDRAGW = ((0 - 400) - 56); + + public const int TVN_BEGINLABELEDITA = ((0 - 400) - 10), + TVN_BEGINLABELEDITW = ((0 - 400) - 59); + + public const int TVN_BEGINRDRAGA = ((0 - 400) - 8), + TVN_BEGINRDRAGW = ((0 - 400) - 57); + + public const int TVN_ENDLABELEDITA = ((0 - 400) - 11), + TVN_ENDLABELEDITW = ((0 - 400) - 60); + + public const int TVN_GETDISPINFOA = ((0 - 400) - 3), + TVN_GETDISPINFOW = ((0 - 400) - 52); + + public const int TVN_GETINFOTIPA = ((0 - 400) - 13), + TVN_GETINFOTIPW = ((0 - 400) - 14); + + public const int TVN_ITEMEXPANDEDA = ((0 - 400) - 6), + TVN_ITEMEXPANDEDW = ((0 - 400) - 55); + + public const int TVN_ITEMEXPANDINGA = ((0 - 400) - 5), + TVN_ITEMEXPANDINGW = ((0 - 400) - 54); + + public const int TVN_SELCHANGEDA = ((0 - 400) - 2), + TVN_SELCHANGEDW = ((0 - 400) - 51); + + public const int TVN_SELCHANGINGA = ((0 - 400) - 1), + TVN_SELCHANGINGW = ((0 - 400) - 50); + + public const int TVN_SETDISPINFOA = ((0 - 400) - 4), + TVN_SETDISPINFOW = ((0 - 400) - 53); + + public const int TVSIL_STATE = 2; + + public const int TVS_CHECKBOXES = 0x0100; + public const int TVS_EDITLABELS = 0x0008; + public const int TVS_FULLROWSELECT = 0x1000; + + public const int TVS_HASBUTTONS = 0x0001, + TVS_HASLINES = 0x0002; + + public const int TVS_INFOTIP = 0x0800; + public const int TVS_LINESATROOT = 0x0004; + public const int TVS_NOTOOLTIPS = 0x0080; + public const int TVS_RTLREADING = 0x0040; + public const int TVS_SHOWSELALWAYS = 0x0020; + public const int TVS_TRACKSELECT = 0x0200; + public const int TV_FIRST = 0x1100; + public const int TYMED_NULL = 0; + public const int UISF_HIDEACCEL = 0x2; + public const int UISF_HIDEFOCUS = 0x1; + + public const int UIS_CLEAR = 2, + UIS_INITIALIZE = 3; + + public const int UIS_SET = 1; + public const int UOI_FLAGS = 1; + public const int USERCLASSTYPE_APPNAME = 3; + + public const int USERCLASSTYPE_FULL = 1, + USERCLASSTYPE_SHORT = 2; + + public const int VIEW_E_DRAW = unchecked((int) 0x80040140); + public const int VK_CONTROL = 0x11; + public const int VK_DOWN = 0x28; + public const int VK_ESCAPE = 0x1B; + + public const int VK_LEFT = 0x25; + + public const int VK_MENU = 0x12; + + public const int VK_RIGHT = 0x27; + + public const int VK_SHIFT = 0x10; + + public const int VK_TAB = 0x09; + public const int VK_UP = 0x26; + + public const int WAVE_FORMAT_ADPCM = 0x0002, + WAVE_FORMAT_IEEE_FLOAT = 0x0003; + + public const int WAVE_FORMAT_PCM = 0x0001; + + public const int WA_ACTIVE = 1, + WA_CLICKACTIVE = 2; + + public const int WA_INACTIVE = 0; + public const int WHEEL_DELTA = 120; + + public const int WH_GETMESSAGE = 3; + + public const int WH_JOURNALPLAYBACK = 1; + + public const int WH_MOUSE = 7; + + public const int WM_ACTIVATE = 0x0006; + public const int WM_ACTIVATEAPP = 0x001C; + + public const int WM_AFXFIRST = 0x0360, + WM_AFXLAST = 0x037F; + + public const int WM_APP = unchecked(0x8000); + public const int WM_ASKCBFORMATNAME = 0x030C; + public const int WM_CANCELJOURNAL = 0x004B; + public const int WM_CANCELMODE = 0x001F; + public const int WM_CAPTURECHANGED = 0x0215; + public const int WM_CHANGECBCHAIN = 0x030D; + public const int WM_CHANGEUISTATE = 0x0127; + public const int WM_CHAR = 0x0102; + public const int WM_CHARTOITEM = 0x002F; + public const int WM_CHILDACTIVATE = 0x0022; + public const int WM_CHOOSEFONT_GETLOGFONT = (0x0400 + 1); + public const int WM_CLEAR = 0x0303; + public const int WM_CLOSE = 0x0010; + public const int WM_COMMAND = 0x0111; + public const int WM_COMMNOTIFY = 0x0044; + public const int WM_COMPACTING = 0x0041; + public const int WM_COMPAREITEM = 0x0039; + public const int WM_CONTEXTMENU = 0x007B; + public const int WM_COPY = 0x0301; + public const int WM_COPYDATA = 0x004A; + + public const int WM_CREATE = 0x0001; + + public const int WM_CTLCOLOR = 0x0019; + + public const int WM_CTLCOLORBTN = 0x0135, + WM_CTLCOLORDLG = 0x0136; + + public const int WM_CTLCOLOREDIT = 0x0133, + WM_CTLCOLORLISTBOX = 0x0134; + + public const int WM_CTLCOLORMSGBOX = 0x0132; + + public const int WM_CTLCOLORSCROLLBAR = 0x0137, + WM_CTLCOLORSTATIC = 0x0138; + + public const int WM_CUT = 0x0300; + public const int WM_DEADCHAR = 0x0103; + + public const int WM_DELETEITEM = 0x002D, + WM_DESTROY = 0x0002; + + public const int WM_DESTROYCLIPBOARD = 0x0307; + public const int WM_DEVICECHANGE = 0x0219; + public const int WM_DEVMODECHANGE = 0x001B; + public const int WM_DISPLAYCHANGE = 0x007E; + public const int WM_DRAWCLIPBOARD = 0x0308; + public const int WM_DRAWITEM = 0x002B; + public const int WM_DROPFILES = 0x0233; + + public const int WM_ENABLE = 0x000A; + + public const int WM_ENDSESSION = 0x0016; + + public const int WM_ENTERIDLE = 0x0121; + public const int WM_ENTERMENULOOP = 0x0211; + public const int WM_ENTERSIZEMOVE = 0x0231; + public const int WM_ERASEBKGND = 0x0014; + public const int WM_EXITMENULOOP = 0x0212; + public const int WM_EXITSIZEMOVE = 0x0232; + + public const int WM_FONTCHANGE = 0x001D; + + public const int WM_GETDLGCODE = 0x0087; + + public const int WM_GETFONT = 0x0031; + + public const int WM_GETHOTKEY = 0x0033; + + public const int WM_GETICON = 0x007F; + public const int WM_GETMINMAXINFO = 0x0024; + + public const int WM_GETOBJECT = 0x003D; + + public const int WM_GETTEXT = 0x000D, + WM_GETTEXTLENGTH = 0x000E; + + public const int WM_HANDHELDFIRST = 0x0358, + WM_HANDHELDLAST = 0x035F; + + public const int WM_HELP = 0x0053; + + public const int WM_HOTKEY = 0x0312; + public const int WM_HSCROLL = 0x0114; + public const int WM_HSCROLLCLIPBOARD = 0x030E; + public const int WM_ICONERASEBKGND = 0x0027; + public const int WM_IME_CHAR = 0x0286; + + public const int WM_IME_COMPOSITION = 0x010F; + + public const int WM_IME_COMPOSITIONFULL = 0x0284; + public const int WM_IME_CONTROL = 0x0283; + public const int WM_IME_ENDCOMPOSITION = 0x010E; + public const int WM_IME_KEYDOWN = 0x0290; + + public const int WM_IME_KEYLAST = 0x010F; + + public const int WM_IME_KEYUP = 0x0291; + public const int WM_IME_NOTIFY = 0x0282; + public const int WM_IME_SELECT = 0x0285; + public const int WM_IME_SETCONTEXT = 0x0281; + public const int WM_IME_STARTCOMPOSITION = 0x010D; + + public const int WM_INITDIALOG = 0x0110; + + public const int WM_INITMENU = 0x0116, + WM_INITMENUPOPUP = 0x0117; + + public const int WM_INPUTLANGCHANGE = 0x0051; + public const int WM_INPUTLANGCHANGEREQUEST = 0x0050; + public const int WM_KEYDOWN = 0x0100; + public const int WM_KEYFIRST = 0x0100; + public const int WM_KEYLAST = 0x0108; + public const int WM_KEYUP = 0x0101; + public const int WM_KILLFOCUS = 0x0008; + public const int WM_LBUTTONDBLCLK = 0x0203; + + public const int WM_LBUTTONDOWN = 0x0201, + WM_LBUTTONUP = 0x0202; + + public const int WM_MBUTTONDBLCLK = 0x0209; + + public const int WM_MBUTTONDOWN = 0x0207, + WM_MBUTTONUP = 0x0208; + + public const int WM_MDIACTIVATE = 0x0222; + + public const int WM_MDICASCADE = 0x0227; + + public const int WM_MDICREATE = 0x0220, + WM_MDIDESTROY = 0x0221; + + public const int WM_MDIGETACTIVE = 0x0229; + + public const int WM_MDIICONARRANGE = 0x0228; + public const int WM_MDIMAXIMIZE = 0x0225; + public const int WM_MDINEXT = 0x0224; + + public const int WM_MDIREFRESHMENU = 0x0234; + + public const int WM_MDIRESTORE = 0x0223; + public const int WM_MDISETMENU = 0x0230; + public const int WM_MDITILE = 0x0226; + public const int WM_MEASUREITEM = 0x002C; + public const int WM_MENUCHAR = 0x0120; + public const int WM_MENUSELECT = 0x011F; + public const int WM_MOUSEACTIVATE = 0x0021; + public const int WM_MOUSEFIRST = 0x0200; + + public const int WM_MOUSEHOVER = 0x02A1; + + public const int WM_MOUSELAST = 0x020A; + + public const int WM_MOUSELEAVE = 0x02A3; + + public const int WM_MOUSEMOVE = 0x0200; + public const int WM_MOUSEWHEEL = 0x020A; + public const int WM_MOVE = 0x0003; + public const int WM_MOVING = 0x0216; + public const int WM_NCACTIVATE = 0x0086; + public const int WM_NCCALCSIZE = 0x0083; + + public const int WM_NCCREATE = 0x0081, + WM_NCDESTROY = 0x0082; + + public const int WM_NCHITTEST = 0x0084; + public const int WM_NCLBUTTONDBLCLK = 0x00A3; + + public const int WM_NCLBUTTONDOWN = 0x00A1, + WM_NCLBUTTONUP = 0x00A2; + + public const int WM_NCMBUTTONDBLCLK = 0x00A9; + + public const int WM_NCMBUTTONDOWN = 0x00A7, + WM_NCMBUTTONUP = 0x00A8; + + public const int WM_NCMOUSEMOVE = 0x00A0; + public const int WM_NCPAINT = 0x0085; + public const int WM_NCRBUTTONDBLCLK = 0x00A6; + + public const int WM_NCRBUTTONDOWN = 0x00A4, + WM_NCRBUTTONUP = 0x00A5; + + public const int WM_NCXBUTTONDBLCLK = 0x00AD; + + public const int WM_NCXBUTTONDOWN = 0x00AB, + WM_NCXBUTTONUP = 0x00AC; + + public const int WM_NEXTDLGCTL = 0x0028; + public const int WM_NEXTMENU = 0x0213; + public const int WM_NOTIFY = 0x004E; + public const int WM_NOTIFYFORMAT = 0x0055; + public const int WM_NULL = 0x0000; + public const int WM_PAINT = 0x000F; + + public const int WM_PAINTCLIPBOARD = 0x0309; + + public const int WM_PAINTICON = 0x0026; + + public const int WM_PALETTECHANGED = 0x0311; + + public const int WM_PALETTEISCHANGING = 0x0310; + public const int WM_PARENTNOTIFY = 0x0210; + public const int WM_PASTE = 0x0302; + + public const int WM_PENWINFIRST = 0x0380, + WM_PENWINLAST = 0x038F; + + public const int WM_POWER = 0x0048; + public const int WM_POWERBROADCAST = 0x0218; + + public const int WM_PRINT = 0x0317, + WM_PRINTCLIENT = 0x0318; + + public const int WM_QUERYDRAGICON = 0x0037; + public const int WM_QUERYENDSESSION = 0x0011; + public const int WM_QUERYNEWPALETTE = 0x030F; + public const int WM_QUERYOPEN = 0x0013; + public const int WM_QUERYUISTATE = 0x0129; + public const int WM_QUEUESYNC = 0x0023; + public const int WM_QUIT = 0x0012; + public const int WM_RBUTTONDBLCLK = 0x0206; + + public const int WM_RBUTTONDOWN = 0x0204, + WM_RBUTTONUP = 0x0205; + + public const int WM_REFLECT = WM_USER + 0x1C00; + + public const int WM_RENDERALLFORMATS = 0x0306; + public const int WM_RENDERFORMAT = 0x0305; + public const int WM_SETCURSOR = 0x0020; + public const int WM_SETFOCUS = 0x0007; + public const int WM_SETFONT = 0x0030; + public const int WM_SETHOTKEY = 0x0032; + public const int WM_SETICON = 0x0080; + + public const int WM_SETREDRAW = 0x000B, + WM_SETTEXT = 0x000C; + + public const int WM_SETTINGCHANGE = 0x001A; + public const int WM_SHOWWINDOW = 0x0018; + public const int WM_SIZE = 0x0005; + public const int WM_SIZECLIPBOARD = 0x030B; + public const int WM_SIZING = 0x0214; + public const int WM_SPOOLERSTATUS = 0x002A; + public const int WM_STYLECHANGED = 0x007D; + public const int WM_STYLECHANGING = 0x007C; + public const int WM_SYSCHAR = 0x0106; + public const int WM_SYSCOLORCHANGE = 0x0015; + public const int WM_SYSCOMMAND = 0x0112; + public const int WM_SYSDEADCHAR = 0x0107; + + public const int WM_SYSKEYDOWN = 0x0104, + WM_SYSKEYUP = 0x0105; + + public const int WM_TCARD = 0x0052; + public const int WM_TIMECHANGE = 0x001E; + public const int WM_TIMER = 0x0113; + public const int WM_UNDO = 0x0304; + public const int WM_UNINITMENUPOPUP = 0x0125; + public const int WM_UPDATEUISTATE = 0x0128; + public const int WM_USER = 0x0400; + public const int WM_USERCHANGED = 0x0054; + public const int WM_VKEYTOITEM = 0x002E; + public const int WM_VSCROLL = 0x0115; + public const int WM_VSCROLLCLIPBOARD = 0x030A; + public const int WM_WINDOWPOSCHANGED = 0x0047; + public const int WM_WINDOWPOSCHANGING = 0x0046; + public const int WM_WININICHANGE = 0x001A; + public const int WM_XBUTTONDBLCLK = 0x020D; + + public const int WM_XBUTTONDOWN = 0x020B, + WM_XBUTTONUP = 0x020C; + + public const int WPF_SETMINPOSITION = 0x0001; + public const int WSF_VISIBLE = 0x0001; + public const int WS_BORDER = 0x00800000; + public const int WS_CAPTION = 0x00C00000; + + public const int WS_CHILD = 0x40000000; + + public const int WS_CLIPCHILDREN = 0x02000000; + + public const int WS_CLIPSIBLINGS = 0x04000000; + public const int WS_DISABLED = 0x08000000; + + public const int WS_DLGFRAME = 0x00400000; + + public const int WS_EX_APPWINDOW = 0x00040000; + + public const int WS_EX_CLIENTEDGE = 0x00000200, + WS_EX_CONTEXTHELP = 0x00000400; + + public const int WS_EX_CONTROLPARENT = 0x00010000; + + public const int WS_EX_DLGMODALFRAME = 0x00000001; + + public const int WS_EX_LAYERED = 0x00080000; + + public const int WS_EX_LAYOUTRTL = 0x00400000; + + public const int WS_EX_LEFT = 0x00000000; + public const int WS_EX_LEFTSCROLLBAR = 0x00004000; + public const int WS_EX_MDICHILD = 0x00000040; + + public const int WS_EX_NOINHERITLAYOUT = 0x00100000; + + public const int WS_EX_RIGHT = 0x00001000; + public const int WS_EX_RTLREADING = 0x00002000; + public const int WS_EX_STATICEDGE = 0x00020000; + public const int WS_EX_TOOLWINDOW = 0x00000080; + public const int WS_EX_TOPMOST = 0x00000008; + public const int WS_HSCROLL = 0x00100000; + public const int WS_MAXIMIZE = 0x01000000; + public const int WS_MAXIMIZEBOX = 0x00010000; + public const int WS_MINIMIZE = 0x20000000; + public const int WS_MINIMIZEBOX = 0x00020000; + + public const int WS_OVERLAPPED = 0x00000000, + WS_POPUP = unchecked((int) 0x80000000); + + public const int WS_SYSMENU = 0x00080000; + public const int WS_TABSTOP = 0x00010000; + public const int WS_THICKFRAME = 0x00040000; + public const int WS_VISIBLE = 0x10000000; + public const int WS_VSCROLL = 0x00200000; + public const int cmb4 = 0x0473; // C:\Program Files\Common + public const int stc4 = 0x0443; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/NativeListEnumerator.cs b/core/src/main/csharp/ch/cyberduck/core/NativeListEnumerator.cs similarity index 97% rename from source/ch/cyberduck/core/NativeListEnumerator.cs rename to core/src/main/csharp/ch/cyberduck/core/NativeListEnumerator.cs index dd9ac1fe81..d75137ddd7 100644 --- a/source/ch/cyberduck/core/NativeListEnumerator.cs +++ b/core/src/main/csharp/ch/cyberduck/core/NativeListEnumerator.cs @@ -1,99 +1,99 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@langisch.ch -// -using System.Collections; -using System.Collections.Generic; - -namespace Ch.Cyberduck.Core -{ - /// - /// The Native List Enumerator offers an enumerator for a class that implements the IEnumerator interface - /// - /// - public class NativeListEnumerator : IEnumerator - { - private IEnumerator _nativeEnumerator; - - /// - /// Initializes a new instance of the NativeListEnumerator class. - /// - /// The native enumerator parameter. - public NativeListEnumerator(IEnumerator nativeEnumeratorParameter) - { - _nativeEnumerator = nativeEnumeratorParameter; - } - - /// - ///Gets the element in the collection at the current position of the enumerator. - /// - /// - /// - ///The element in the collection at the current position of the enumerator. - /// - /// - T IEnumerator.Current - { - get { return (T) _nativeEnumerator.Current; } - } - - /// - ///Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - /// - ///2 - public void Dispose() - { - _nativeEnumerator = null; - } - - /// - ///Advances the enumerator to the next element of the collection. - /// - /// - /// - ///true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. - /// - /// - ///The collection was modified after the enumerator was created. 2 - public bool MoveNext() - { - return _nativeEnumerator.MoveNext(); - } - - /// - ///Sets the enumerator to its initial position, which is before the first element in the collection. - /// - /// - ///The collection was modified after the enumerator was created. 2 - public void Reset() - { - _nativeEnumerator.Reset(); - } - - /// - /// Gets the current element in the collection. - /// - /// - /// - /// The current element in the collection. - /// - /// The enumerator is positioned before the first element of the collection or after the last element. - public object Current - { - get { return _nativeEnumerator.Current; } - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@langisch.ch +// +using System.Collections; +using System.Collections.Generic; + +namespace Ch.Cyberduck.Core +{ + /// + /// The Native List Enumerator offers an enumerator for a class that implements the IEnumerator interface + /// + /// + public class NativeListEnumerator : IEnumerator + { + private IEnumerator _nativeEnumerator; + + /// + /// Initializes a new instance of the NativeListEnumerator class. + /// + /// The native enumerator parameter. + public NativeListEnumerator(IEnumerator nativeEnumeratorParameter) + { + _nativeEnumerator = nativeEnumeratorParameter; + } + + /// + ///Gets the element in the collection at the current position of the enumerator. + /// + /// + /// + ///The element in the collection at the current position of the enumerator. + /// + /// + T IEnumerator.Current + { + get { return (T) _nativeEnumerator.Current; } + } + + /// + ///Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + ///2 + public void Dispose() + { + _nativeEnumerator = null; + } + + /// + ///Advances the enumerator to the next element of the collection. + /// + /// + /// + ///true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. + /// + /// + ///The collection was modified after the enumerator was created. 2 + public bool MoveNext() + { + return _nativeEnumerator.MoveNext(); + } + + /// + ///Sets the enumerator to its initial position, which is before the first element in the collection. + /// + /// + ///The collection was modified after the enumerator was created. 2 + public void Reset() + { + _nativeEnumerator.Reset(); + } + + /// + /// Gets the current element in the collection. + /// + /// + /// + /// The current element in the collection. + /// + /// The enumerator is positioned before the first element of the collection or after the last element. + public object Current + { + get { return _nativeEnumerator.Current; } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/NativeMethods.cs b/core/src/main/csharp/ch/cyberduck/core/NativeMethods.cs similarity index 96% rename from source/ch/cyberduck/core/NativeMethods.cs rename to core/src/main/csharp/ch/cyberduck/core/NativeMethods.cs index 380bc73d1c..82ec2cc4f2 100644 --- a/source/ch/cyberduck/core/NativeMethods.cs +++ b/core/src/main/csharp/ch/cyberduck/core/NativeMethods.cs @@ -1,194 +1,194 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Drawing; -using System.Runtime.InteropServices; - -namespace Ch.Cyberduck.Core -{ - [StructLayout(LayoutKind.Sequential)] - public struct APPBARDATA - { - public uint cbSize; - public IntPtr hWnd; - public uint uCallbackMessage; - public AppBarEdge uEdge; - public RECT rc; - public int lParam; - } - - internal enum MousePositionCodes - { - HTERROR = (-2), - HTTRANSPARENT = (-1), - HTNOWHERE = 0, - HTCLIENT = 1, - HTCAPTION = 2, - HTSYSMENU = 3, - HTGROWBOX = 4, - HTSIZE = HTGROWBOX, - HTMENU = 5, - HTHSCROLL = 6, - HTVSCROLL = 7, - HTMINBUTTON = 8, - HTMAXBUTTON = 9, - HTLEFT = 10, - HTRIGHT = 11, - HTTOP = 12, - HTTOPLEFT = 13, - HTTOPRIGHT = 14, - HTBOTTOM = 15, - HTBOTTOMLEFT = 16, - HTBOTTOMRIGHT = 17, - HTBORDER = 18, - HTREDUCE = HTMINBUTTON, - HTZOOM = HTMAXBUTTON, - HTSIZEFIRST = HTLEFT, - HTSIZELAST = HTBOTTOMRIGHT, - HTOBJECT = 19, - HTCLOSE = 20, - HTHELP = 21 - } - - public enum AppBarEdge : uint - { - NotDocked = UInt32.MaxValue, - ScreenLeft = 0, // ABE_LEFT - ScreenTop = 1, // ABE_TOP - ScreenRight = 2, // ABE_RIGHT - ScreenBottom = 3, // ABE_BOTTOM - } - - public enum AppBarMessage : uint - { - ABM_NEW = 0x00, - ABM_REMOVE = 0x01, - ABM_QUERYPOS = 0x02, - ABM_SETPOS = 0x03, - ABM_GETSTATE = 0x04, - ABM_GETTASKBARPOS = 0x05, - ABM_ACTIVATE = 0x06, - ABM_GETAUTOHIDEBAR = 0x07, - ABM_SETAUTOHIDEBAR = 0x08, - ABM_WINDOWPOSCHANGED = 0x09, - ABM_SETSTATE = 0x0a, - } - - internal enum AppBarState - { - ABS_MANUAL = 0, - ABS_AUTOHIDE = 1, - ABS_ALWAYSONTOP = 2, - ABS_AUTOHIDEANDONTOP = 3, - } - - internal enum AppBarNotification - { - ABN_STATECHANGE = 0, - ABN_POSCHANGED, - ABN_FULLSCREENAPP, - ABN_WINDOWARRANGE, - } - - [StructLayout(LayoutKind.Sequential)] - public struct RECT - { - public int left; - public int top; - public int right; - public int bottom; - - public RECT(int left, int top, int right, int bottom) - { - this.left = left; - this.top = top; - this.right = right; - this.bottom = bottom; - } - - public static implicit operator RECT(Rectangle r) - { - return new RECT(r.Left, r.Top, r.Right, r.Bottom); - } - - public static explicit operator Rectangle(RECT r) - { - return new Rectangle(r.left, r.top, r.right - r.left, r.bottom - r.top); - } - } - - [StructLayout(LayoutKind.Sequential)] - public struct POINT - { - public int X; - public int Y; - - public POINT(int x, int y) - { - X = x; - Y = y; - } - - public static implicit operator Point(POINT p) - { - return new Point(p.X, p.Y); - } - - public static implicit operator POINT(Point p) - { - return new POINT(p.X, p.Y); - } - } - - public static class NativeMethods - { - [DllImport("shell32.dll", CallingConvention = CallingConvention.StdCall)] - public static extern uint SHAppBarMessage(AppBarMessage dwMessage, ref APPBARDATA pData); - - [DllImport("user32.dll", ExactSpelling = true)] - public static extern bool MoveWindow(IntPtr hWnd, int x, int y, int nWidth, int nHeight, bool bRepaint); - - [DllImport("user32.dll")] - public static extern uint RegisterWindowMessage([MarshalAs(UnmanagedType.LPTStr)] string lpString); - - [DllImport("user32.dll", EntryPoint = "ReleaseCapture")] - public static extern bool StopMouseCapture(); - - [DllImport("user32.dll", EntryPoint = "SetCapture")] - public static extern IntPtr StartMouseCapture(IntPtr hWnd); - - [DllImport("user32.dll", EntryPoint = "GetCapture")] - public static extern IntPtr GetMouseCapture(); - - [DllImport("user32.dll")] - public static extern bool DragDetect(IntPtr hwnd, POINT pt); - - [DllImport("user32.dll")] - public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, int lParam); - - [DllImport("user32.dll", EntryPoint = "ShowCaret")] - public static extern long ShowCaret(IntPtr hwnd); - - [DllImport("user32.dll", EntryPoint = "HideCaret")] - public static extern long HideCaret(IntPtr hwnd); - - [DllImport("kernel32.dll", SetLastError = true)] - public static extern int IsValidLocale(int locale, int dwFlags); - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Drawing; +using System.Runtime.InteropServices; + +namespace Ch.Cyberduck.Core +{ + [StructLayout(LayoutKind.Sequential)] + public struct APPBARDATA + { + public uint cbSize; + public IntPtr hWnd; + public uint uCallbackMessage; + public AppBarEdge uEdge; + public RECT rc; + public int lParam; + } + + internal enum MousePositionCodes + { + HTERROR = (-2), + HTTRANSPARENT = (-1), + HTNOWHERE = 0, + HTCLIENT = 1, + HTCAPTION = 2, + HTSYSMENU = 3, + HTGROWBOX = 4, + HTSIZE = HTGROWBOX, + HTMENU = 5, + HTHSCROLL = 6, + HTVSCROLL = 7, + HTMINBUTTON = 8, + HTMAXBUTTON = 9, + HTLEFT = 10, + HTRIGHT = 11, + HTTOP = 12, + HTTOPLEFT = 13, + HTTOPRIGHT = 14, + HTBOTTOM = 15, + HTBOTTOMLEFT = 16, + HTBOTTOMRIGHT = 17, + HTBORDER = 18, + HTREDUCE = HTMINBUTTON, + HTZOOM = HTMAXBUTTON, + HTSIZEFIRST = HTLEFT, + HTSIZELAST = HTBOTTOMRIGHT, + HTOBJECT = 19, + HTCLOSE = 20, + HTHELP = 21 + } + + public enum AppBarEdge : uint + { + NotDocked = UInt32.MaxValue, + ScreenLeft = 0, // ABE_LEFT + ScreenTop = 1, // ABE_TOP + ScreenRight = 2, // ABE_RIGHT + ScreenBottom = 3, // ABE_BOTTOM + } + + public enum AppBarMessage : uint + { + ABM_NEW = 0x00, + ABM_REMOVE = 0x01, + ABM_QUERYPOS = 0x02, + ABM_SETPOS = 0x03, + ABM_GETSTATE = 0x04, + ABM_GETTASKBARPOS = 0x05, + ABM_ACTIVATE = 0x06, + ABM_GETAUTOHIDEBAR = 0x07, + ABM_SETAUTOHIDEBAR = 0x08, + ABM_WINDOWPOSCHANGED = 0x09, + ABM_SETSTATE = 0x0a, + } + + internal enum AppBarState + { + ABS_MANUAL = 0, + ABS_AUTOHIDE = 1, + ABS_ALWAYSONTOP = 2, + ABS_AUTOHIDEANDONTOP = 3, + } + + internal enum AppBarNotification + { + ABN_STATECHANGE = 0, + ABN_POSCHANGED, + ABN_FULLSCREENAPP, + ABN_WINDOWARRANGE, + } + + [StructLayout(LayoutKind.Sequential)] + public struct RECT + { + public int left; + public int top; + public int right; + public int bottom; + + public RECT(int left, int top, int right, int bottom) + { + this.left = left; + this.top = top; + this.right = right; + this.bottom = bottom; + } + + public static implicit operator RECT(Rectangle r) + { + return new RECT(r.Left, r.Top, r.Right, r.Bottom); + } + + public static explicit operator Rectangle(RECT r) + { + return new Rectangle(r.left, r.top, r.right - r.left, r.bottom - r.top); + } + } + + [StructLayout(LayoutKind.Sequential)] + public struct POINT + { + public int X; + public int Y; + + public POINT(int x, int y) + { + X = x; + Y = y; + } + + public static implicit operator Point(POINT p) + { + return new Point(p.X, p.Y); + } + + public static implicit operator POINT(Point p) + { + return new POINT(p.X, p.Y); + } + } + + public static class NativeMethods + { + [DllImport("shell32.dll", CallingConvention = CallingConvention.StdCall)] + public static extern uint SHAppBarMessage(AppBarMessage dwMessage, ref APPBARDATA pData); + + [DllImport("user32.dll", ExactSpelling = true)] + public static extern bool MoveWindow(IntPtr hWnd, int x, int y, int nWidth, int nHeight, bool bRepaint); + + [DllImport("user32.dll")] + public static extern uint RegisterWindowMessage([MarshalAs(UnmanagedType.LPTStr)] string lpString); + + [DllImport("user32.dll", EntryPoint = "ReleaseCapture")] + public static extern bool StopMouseCapture(); + + [DllImport("user32.dll", EntryPoint = "SetCapture")] + public static extern IntPtr StartMouseCapture(IntPtr hWnd); + + [DllImport("user32.dll", EntryPoint = "GetCapture")] + public static extern IntPtr GetMouseCapture(); + + [DllImport("user32.dll")] + public static extern bool DragDetect(IntPtr hwnd, POINT pt); + + [DllImport("user32.dll")] + public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, int lParam); + + [DllImport("user32.dll", EntryPoint = "ShowCaret")] + public static extern long ShowCaret(IntPtr hwnd); + + [DllImport("user32.dll", EntryPoint = "HideCaret")] + public static extern long HideCaret(IntPtr hwnd); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern int IsValidLocale(int locale, int dwFlags); + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/OSVersion.cs b/core/src/main/csharp/ch/cyberduck/core/OSVersion.cs similarity index 97% rename from source/ch/cyberduck/core/OSVersion.cs rename to core/src/main/csharp/ch/cyberduck/core/OSVersion.cs index 85dcd40a3a..c312595a45 100644 --- a/source/ch/cyberduck/core/OSVersion.cs +++ b/core/src/main/csharp/ch/cyberduck/core/OSVersion.cs @@ -1,1583 +1,1583 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using System.Globalization; -using System.Runtime.InteropServices; - -namespace Ch.Cyberduck.Core -{ - //----------------------------------------------------------------------------- - // Enums - - public enum OSPlatformId - { - Win32s = 0, - Win32Windows = 1, - Win32NT = 2, - WinCE = 3, - } - - public enum OSBuildNumber - { - None = 0, - - Win2000SP4 = 2195, - - WinXPSP2 = 2600, - - Win2003SP1 = 3790, - } - - [Flags] - public enum OSSuites - { - None = 0, - SmallBusiness = 0x00000001, - Enterprise = 0x00000002, - BackOffice = 0x00000004, - Communications = 0x00000008, - Terminal = 0x00000010, - SmallBusinessRestricted = 0x00000020, - EmbeddedNT = 0x00000040, - Datacenter = 0x00000080, - SingleUserTS = 0x00000100, - Personal = 0x00000200, - Blade = 0x00000400, - EmbeddedRestricted = 0x00000800, - } - - public enum OSProductType - { - Invalid = 0, - Workstation = 1, - DomainController = 2, - Server = 3, - } - - public enum OSVersion - { - Win32s, - Win95, - Win98, - WinME, - WinNT351, - WinNT4, - Win2000, - WinXP, - Win2003, - WinXPx64, - WinCE, - Vista, - Win2008, - Win2008R2, - Win7, - } - - public enum OSArchitecture - { - x86, - x64, - } - - //----------------------------------------------------------------------------- - // OSVersionInfo, Thanks to Nicholas Butler - // http://www.codeproject.com/KB/system/osversion.aspx - - public class OSVersionInfo : IComparable, ICloneable - { - //----------------------------------------------------------------------------- - // Constants - - //----------------------------------------------------------------------------- - // Static Fields - - private static readonly OSVersionInfo _Vista = new OSVersionInfo(OSPlatformId.Win32NT, MajorVersionConst.Vista, - MinorVersionConst.Vista, - OSProductType.Workstation, true); - - private static readonly OSVersionInfo _Win2000 = new OSVersionInfo(OSPlatformId.Win32NT, - MajorVersionConst.Win2000, - MinorVersionConst.Win2000, true); - - private static readonly OSVersionInfo _Win2003 = new OSVersionInfo(OSPlatformId.Win32NT, - MajorVersionConst.Win2003, - MinorVersionConst.Win2003, - OSProductType.Server, true); - - private static readonly OSVersionInfo _Win2008 = new OSVersionInfo(OSPlatformId.Win32NT, - MajorVersionConst.Win2008, - MinorVersionConst.Win2008, - OSProductType.Server, true); - - private static readonly OSVersionInfo _Win2008R2 = new OSVersionInfo(OSPlatformId.Win32NT, - MajorVersionConst.Win2008R2, - MinorVersionConst.Win2008R2, - OSProductType.Server, true); - - private static readonly OSVersionInfo _Win32s = new OSVersionInfo(OSPlatformId.Win32s, MajorVersionConst.Win32s, - MinorVersionConst.Win32s, true); - - private static readonly OSVersionInfo _Win7 = new OSVersionInfo(OSPlatformId.Win32NT, MajorVersionConst.Win7, - MinorVersionConst.Win7, - OSProductType.Workstation, true); - - private static readonly OSVersionInfo _Win95 = new OSVersionInfo(OSPlatformId.Win32Windows, - MajorVersionConst.Win95, - MinorVersionConst.Win95, true); - - private static readonly OSVersionInfo _Win98 = new OSVersionInfo(OSPlatformId.Win32Windows, - MajorVersionConst.Win98, - MinorVersionConst.Win98, true); - - private static readonly OSVersionInfo _WinCE = new OSVersionInfo(OSPlatformId.WinCE, true); - - private static readonly OSVersionInfo _WinME = new OSVersionInfo(OSPlatformId.Win32Windows, - MajorVersionConst.WinME, - MinorVersionConst.WinME, true); - - private static readonly OSVersionInfo _WinNT351 = new OSVersionInfo(OSPlatformId.Win32NT, - MajorVersionConst.WinNT351, - MinorVersionConst.WinNT351, true); - - private static readonly OSVersionInfo _WinNT4 = new OSVersionInfo(OSPlatformId.Win32NT, MajorVersionConst.WinNT4, - MinorVersionConst.WinNT4, true); - - private static readonly OSVersionInfo _WinXP = new OSVersionInfo(OSPlatformId.Win32NT, MajorVersionConst.WinXP, - MinorVersionConst.WinXP, true); - - private static readonly OSVersionInfo _WinXPx64 = new OSVersionInfo(OSPlatformId.Win32NT, - MajorVersionConst.WinXPx64, - MinorVersionConst.WinXPx64, - OSProductType.Workstation, true); - - private int _BuildNumber = -1; - // private int _PlatformId; - private string _CSDVersion = String.Empty; - private bool _ExtendedPropertiesAreSet; - private bool _Locked; - private int _MajorVersion = -1; - private int _MinorVersion = -1; - private OSArchitecture _OSArchitecture = 0; - private OSPlatformId _OSPlatformId; - private OSProductType _OSProductType; - private OSSuites _OSSuiteFlags; - private byte _Reserved; - private Int16 _ServicePackMajor = -1; - private Int16 _ServicePackMinor = -1; - - public OSVersionInfo() - { - } - - public OSVersionInfo( - OSPlatformId osPlatformId) - { - _OSPlatformId = osPlatformId; - } - - public OSVersionInfo( - OSPlatformId osPlatformId, - bool locked) - { - _OSPlatformId = osPlatformId; - - _Locked = locked; - } - - public OSVersionInfo( - OSPlatformId osPlatformId, - int majorVersion, - int minorVersion) - { - _OSPlatformId = osPlatformId; - _MajorVersion = majorVersion; - _MinorVersion = minorVersion; - } - - public OSVersionInfo( - OSPlatformId osPlatformId, - int majorVersion, - int minorVersion, - bool locked) - { - _OSPlatformId = osPlatformId; - _MajorVersion = majorVersion; - _MinorVersion = minorVersion; - - _Locked = locked; - } - - public OSVersionInfo( - OSPlatformId osPlatformId, - int majorVersion, - int minorVersion, - OSProductType osProductType, - bool locked) - { - _OSPlatformId = osPlatformId; - _MajorVersion = majorVersion; - _MinorVersion = minorVersion; - _OSProductType = osProductType; - - _Locked = locked; - } - - //----------------------------------------------------------------------------- - // Copying - - public OSVersionInfo(OSVersionInfo o) - { - CopyThis(o); - } - - //----------------------------------------------------------------------------- - // Static Properties - - public static OSVersionInfo Win32s - { - get { return _Win32s; } - } - - public static OSVersionInfo Win95 - { - get { return _Win95; } - } - - public static OSVersionInfo Win98 - { - get { return _Win98; } - } - - public static OSVersionInfo WinME - { - get { return _WinME; } - } - - public static OSVersionInfo WinNT351 - { - get { return _WinNT351; } - } - - public static OSVersionInfo WinNT4 - { - get { return _WinNT4; } - } - - public static OSVersionInfo Win2000 - { - get { return _Win2000; } - } - - public static OSVersionInfo WinXP - { - get { return _WinXP; } - } - - public static OSVersionInfo Win2003 - { - get { return _Win2003; } - } - - public static OSVersionInfo WinXPx64 - { - get { return _WinXPx64; } - } - - public static OSVersionInfo WinCE - { - get { return _WinCE; } - } - - public static OSVersionInfo Vista - { - get { return _Vista; } - } - - public static OSVersionInfo Win2008 - { - get { return _Win2008; } - } - - public static OSVersionInfo Win2008R2 - { - get { return _Win2008R2; } - } - - public static OSVersionInfo Win7 - { - get { return _Win7; } - } - - //----------------------------------------------------------------------------- - // Static methods - - //----------------------------------------------------------------------------- - // Normal Properties - - public OSPlatformId OSPlatformId - { - get { return _OSPlatformId; } - - set - { - CheckLock("OSPlatformId"); - - _OSPlatformId = value; - } - } - - public int OSMajorVersion - { - get { return _MajorVersion; } - - set - { - CheckLock("MajorVersion"); - - _MajorVersion = value; - } - } - - public int OSMinorVersion - { - get { return _MinorVersion; } - - set - { - CheckLock("MinorVersion"); - - _MinorVersion = value; - } - } - - public int BuildNumber - { - get { return _BuildNumber; } - - set - { - CheckLock("BuildNumber"); - - _BuildNumber = value; - } - } - - // public int PlatformId - // { - // get { return _PlatformId; } - // - // set - // { - // CheckLock( "PlatformId" ); - // - // _PlatformId = value; - // } - // } - - public string OSCSDVersion - { - get { return _CSDVersion; } - - set - { - CheckLock("CSDVersion"); - - _CSDVersion = value; - } - } - - public OSArchitecture OSArchitecture - { - get { return _OSArchitecture; } - protected set { _OSArchitecture = value; } - } - - //----------------------------------------------------------------------------- - // Extended Properties - - public OSSuites OSSuiteFlags - { - get - { - CheckExtendedProperty("OSSuiteFlags"); - - return _OSSuiteFlags; - } - - set - { - CheckLock("OSSuiteFlags"); - - _OSSuiteFlags = value; - } - } - - public OSProductType OSProductType - { - get - { - CheckExtendedProperty("OSProductType"); - - return _OSProductType; - } - - set - { - CheckLock("OSProductType"); - - _OSProductType = value; - } - } - - public Int16 OSServicePackMajor - { - get - { - CheckExtendedProperty("ServicePackMajor"); - - return _ServicePackMajor; - } - - set - { - CheckLock("ServicePackMajor"); - - _ServicePackMajor = value; - } - } - - public Int16 OSServicePackMinor - { - get - { - CheckExtendedProperty("ServicePackMinor"); - - return _ServicePackMinor; - } - - set - { - CheckLock("ServicePackMinor"); - - _ServicePackMinor = value; - } - } - - // public UInt16 SuiteMask - // { - // get - // { - // CheckExtendedProperty( "SuiteMask" ); - // - // return _SuiteMask; - // } - // - // set - // { - // CheckLock( "SuiteMask" ); - // - // _SuiteMask = value; - // } - // } - - // public byte ProductType - // { - // get - // { - // CheckExtendedProperty( "ProductType" ); - // - // return _ProductType; - // } - // - // set - // { - // CheckLock( "ProductType" ); - // - // _ProductType = value; - // } - // } - - public byte OSReserved - { - get - { - CheckExtendedProperty("Reserved"); - - return _Reserved; - } - - set - { - CheckLock("Reserved"); - - _Reserved = value; - } - } - - //----------------------------------------------------------------------------- - // Get Properties - - public int Platform - { - get { return (int) _OSPlatformId; } - } - - public int SuiteMask - { - get - { - CheckExtendedProperty("SuiteMask"); - - return (int) _OSSuiteFlags; - } - } - - public byte ProductType - { - get - { - CheckExtendedProperty("ProductType"); - - return (byte) _OSProductType; - } - } - - //----------------------------------------------------------------------------- - // Calculated Properties - - public Version Version - { - get - { - if (OSMajorVersion < 0 || OSMinorVersion < 0) - return new Version(); - - if (BuildNumber < 0) - return new Version(OSMajorVersion, OSMinorVersion); - - return new Version(OSMajorVersion, OSMinorVersion, BuildNumber); - } - } - - public string VersionString - { - get { return Version.ToString(); } - } - - public string OSPlatformIdString - { - get - { - switch (OSPlatformId) - { - case OSPlatformId.Win32s: - return "Windows 32s"; - case OSPlatformId.Win32Windows: - return "Windows 32"; - case OSPlatformId.Win32NT: - return "Windows NT"; - case OSPlatformId.WinCE: - return "Windows CE"; - - default: - throw new InvalidOperationException("Invalid OSPlatformId: " + OSPlatformId); - } - } - } - - public string OSSuiteString - { - get - { - string s = String.Empty; - - OSSuites flags = OSSuiteFlags; - - if (OSSuiteFlag(flags, OSSuites.SmallBusiness)) - OSSuiteStringAdd(ref s, "Small Business"); - - if (OSSuiteFlag(flags, OSSuites.Enterprise)) - switch (OSVersion) - { - case OSVersion.WinNT4: - OSSuiteStringAdd(ref s, "Enterprise"); - break; - case OSVersion.Win2000: - OSSuiteStringAdd(ref s, "Advanced"); - break; - case OSVersion.Win2003: - OSSuiteStringAdd(ref s, "Enterprise"); - break; - } - - if (OSSuiteFlag(flags, OSSuites.BackOffice)) - OSSuiteStringAdd(ref s, "BackOffice"); - - if (OSSuiteFlag(flags, OSSuites.Communications)) - OSSuiteStringAdd(ref s, "Communications"); - - if (OSSuiteFlag(flags, OSSuites.Terminal)) - OSSuiteStringAdd(ref s, "Terminal Services"); - - if (OSSuiteFlag(flags, OSSuites.SmallBusinessRestricted)) - OSSuiteStringAdd(ref s, "Small Business Restricted"); - - if (OSSuiteFlag(flags, OSSuites.EmbeddedNT)) - OSSuiteStringAdd(ref s, "Embedded"); - - if (OSSuiteFlag(flags, OSSuites.Datacenter)) - OSSuiteStringAdd(ref s, "Datacenter"); - - // if ( OSSuiteFlag( flags, OSSuites.SingleUserTS ) ) - // OSSuiteStringAdd( ref s, "Single User Terminal Services" ); - - if (OSSuiteFlag(flags, OSSuites.Personal)) - OSSuiteStringAdd(ref s, "Home Edition"); - - if (OSSuiteFlag(flags, OSSuites.Blade)) - OSSuiteStringAdd(ref s, "Web Edition"); - - if (OSSuiteFlag(flags, OSSuites.EmbeddedRestricted)) - OSSuiteStringAdd(ref s, "Embedded Restricted"); - - return s; - } - } - - public string OSProductTypeString - { - get - { - switch (OSProductType) - { - case OSProductType.Workstation: - - switch (OSVersion) - { - case OSVersion.Win32s: - return String.Empty; - case OSVersion.Win95: - return String.Empty; - case OSVersion.Win98: - return String.Empty; - case OSVersion.WinME: - return String.Empty; - case OSVersion.WinNT351: - return String.Empty; - case OSVersion.WinNT4: - return "Workstation"; - case OSVersion.Win2000: - return "Professional"; - - case OSVersion.WinXP: - - if (OSSuiteFlag(OSSuiteFlags, OSSuites.Personal)) - return "Home Edition"; - else - return "Professional"; - - case OSVersion.Win2003: - return String.Empty; - case OSVersion.WinXPx64: - return String.Empty; - case OSVersion.WinCE: - return String.Empty; - - case OSVersion.Vista: - case OSVersion.Win2008: - case OSVersion.Win2008R2: - case OSVersion.Win7: - - switch (OSArchitecture) - { - case OSArchitecture.x86: - return "x86"; - case OSArchitecture.x64: - return "x64"; - - default: - throw new InvalidOperationException("Invalid OSArchitecture: " + OSArchitecture); - } - - default: - throw new InvalidOperationException("Invalid OSVersion: " + OSVersion); - } - - case OSProductType.DomainController: - { - string s = OSSuiteString; - - if (s.Length > 0) s += " "; - - return s + "Domain Controller"; - } - - case OSProductType.Server: - { - string s = OSSuiteString; - - if (s.Length > 0) s += " "; - - return s + "Server"; - } - - default: - throw new InvalidOperationException("Invalid OSProductType: " + OSProductType); - } - } - } - - public OSVersion OSVersion - { - get - { - switch (OSPlatformId) - { - case OSPlatformId.Win32s: - return OSVersion.Win32s; - - case OSPlatformId.Win32Windows: - - switch (OSMinorVersion) - { - case MinorVersionConst.Win95: - return OSVersion.Win95; - case MinorVersionConst.Win98: - return OSVersion.Win98; - case MinorVersionConst.WinME: - return OSVersion.WinME; - - default: - throw new InvalidOperationException("Invalid Win32Windows MinorVersion: " + - OSMinorVersion); - } - - case OSPlatformId.Win32NT: - - switch (OSMajorVersion) - { - case MajorVersionConst.WinNT351: - return OSVersion.WinNT351; - case MajorVersionConst.WinNT4: - return OSVersion.WinNT4; - - case MajorVersionConst.WinNT5: - - switch (OSMinorVersion) - { - case MinorVersionConst.Win2000: - return OSVersion.Win2000; - case MinorVersionConst.WinXP: - return OSVersion.WinXP; - - case MinorVersionConst.Win2003: - //case MinorVersionConst.WinXPx64: // same ( 5.2 ) - - switch (_OSProductType) - { - case OSProductType.Workstation: - return OSVersion.WinXPx64; - - case OSProductType.DomainController: - case OSProductType.Server: - return OSVersion.Win2003; - - default: - throw new InvalidOperationException( - "Invalid Win32NT WinNT5.2 OSProductType: " + OSProductType); - } - - default: - throw new InvalidOperationException("Invalid Win32NT WinNT5 MinorVersion: " + - OSMinorVersion); - } - - case MajorVersionConst.Vista: - //case MajorVersionConst.Win2008: same ( 6 ) - //case MajorVersionConst.Win2008R2: same ( 6 ) - //case MajorVersionConst.Win7: same ( 6 ) - - switch (_OSProductType) - { - case OSProductType.Workstation: - switch (OSMinorVersion) - { - case MinorVersionConst.Vista: - return OSVersion.Vista; - case MinorVersionConst.Win7: - return OSVersion.Win7; - default: - throw new InvalidOperationException( - "Invalid Win32NT WinNT6 Workstation MinorVersion: " + OSMinorVersion); - } - - - case OSProductType.DomainController: - case OSProductType.Server: - switch (OSMinorVersion) - { - case MinorVersionConst.Win2008: - return OSVersion.Win2008; - case MinorVersionConst.Win2008R2: - return OSVersion.Win2008R2; - default: - throw new InvalidOperationException( - "Invalid Win32NT WinNT6 Server MinorVersion: " + OSMinorVersion); - } - - default: - throw new InvalidOperationException("Invalid Win32NT WinNT6 OSProductType: " + - OSProductType); - } - - default: - throw new InvalidOperationException("Invalid Win32NT MajorVersion: " + OSMajorVersion); - } - - case OSPlatformId.WinCE: - return OSVersion.WinCE; - - default: - throw new InvalidOperationException("Invalid OSPlatformId: " + OSPlatformId); - } - } - } - - public string OSVersionString - { - get - { - switch (OSVersion) - { - case OSVersion.Win32s: - return "Windows 32s"; - case OSVersion.Win95: - return "Windows 95"; - case OSVersion.Win98: - return "Windows 98"; - case OSVersion.WinME: - return "Windows ME"; - case OSVersion.WinNT351: - return "Windows NT 3.51"; - case OSVersion.WinNT4: - return "Windows NT 4"; - case OSVersion.Win2000: - return "Windows 2000"; - case OSVersion.WinXP: - return "Windows XP"; - case OSVersion.Win2003: - return "Windows 2003"; - case OSVersion.WinXPx64: - return "Windows XP x64"; - case OSVersion.WinCE: - return "Windows CE"; - case OSVersion.Vista: - return "Windows Vista"; - case OSVersion.Win2008: - return "Windows 2008"; - case OSVersion.Win2008R2: - return "Windows 2008 R2"; - case OSVersion.Win7: - return "Windows 7"; - - default: - throw new InvalidOperationException("Invalid OSVersion: " + OSVersion); - } - } - } - - //----------------------------------------------------------------------------- - // State Properties - - public bool ExtendedPropertiesAreSet - { - get { return _ExtendedPropertiesAreSet; } - set { _ExtendedPropertiesAreSet = value; } - } - - public bool IsLocked - { - get { return _Locked; } - } - - public virtual object Clone() - { - return CreateCopy(); - } - - public virtual int CompareTo(object o) - { - if (o == null) throw new InvalidOperationException("CompareTo( object o ): 'o' is null"); - - OSVersionInfo p = o as OSVersionInfo; - if (p == null) throw new InvalidOperationException("CompareTo( object o ): 'o' is not an OSVersionInfo"); - - if (this == p) return 0; - if (this > p) return 1; - return -1; - } - - public static OSVersionInfo GetOSVersionInfo(OSVersion v) - { - switch (v) - { - case OSVersion.Win32s: - return Win32s; - case OSVersion.Win95: - return Win95; - case OSVersion.Win98: - return Win98; - case OSVersion.WinME: - return WinME; - case OSVersion.WinNT351: - return WinNT351; - case OSVersion.WinNT4: - return WinNT4; - case OSVersion.Win2000: - return Win2000; - case OSVersion.WinXP: - return WinXP; - case OSVersion.Win2003: - return Win2003; - case OSVersion.WinXPx64: - return WinXPx64; - case OSVersion.WinCE: - return WinCE; - case OSVersion.Vista: - return Vista; - case OSVersion.Win2008: - return Win2008; - case OSVersion.Win2008R2: - return Win2008R2; - case OSVersion.Win7: - return Win7; - - default: - throw new InvalidOperationException(); - } - } - - public static bool OSSuiteFlag(OSSuites flags, OSSuites test) - { - return ((flags & test) > 0); - } - - private static void OSSuiteStringAdd(ref string s, string suite) - { - if (s.Length > 0) s += ", "; - - s += suite; - } - - public void Lock() - { - _Locked = true; - } - - //----------------------------------------------------------------------------- - // Property helpers - - private void CheckExtendedProperty(string property) - { - if (_ExtendedPropertiesAreSet) return; - - throw new InvalidOperationException("'" + property + "' is not set"); - } - - private void CheckLock(string property) - { - if (!_Locked) return; - - throw new InvalidOperationException("Cannot set '" + property + "' on locked instance"); - } - - //----------------------------------------------------------------------------- - // Constructors - - public virtual void Copy(OSVersionInfo o) - { - CopyThis(o); - } - - public virtual OSVersionInfo CreateCopy() - { - return new OSVersionInfo(this); - } - - private void CopyThis(OSVersionInfo o) - { - // normal fields - _OSPlatformId = o._OSPlatformId; - - _MajorVersion = o._MajorVersion; - _MinorVersion = o._MinorVersion; - _BuildNumber = o._BuildNumber; - _CSDVersion = o._CSDVersion; - - // extended fields - _OSSuiteFlags = o._OSSuiteFlags; - _OSProductType = o._OSProductType; - - _ServicePackMajor = o._ServicePackMajor; - _ServicePackMinor = o._ServicePackMinor; - _Reserved = o._Reserved; - - // state fields - // _Locked = o._Locked ; - _Locked = false; - _ExtendedPropertiesAreSet = o._ExtendedPropertiesAreSet; - } - - //----------------------------------------------------------------------------- - // overrides - - public override bool Equals(object o) - { - OSVersionInfo p = o as OSVersionInfo; - - if (p != null) return (this == p); - - return base.Equals(o); - } - - public override int GetHashCode() - { - return base.GetHashCode(); - } - - public override string ToString() - { - string s = OSVersionString; - - if (ExtendedPropertiesAreSet) s += " " + OSProductTypeString; - - if (OSCSDVersion.Length > 0) s += " " + OSCSDVersion; - - s += " v" + VersionString; - - return s; - } - - //----------------------------------------------------------------------------- - // Operators - - public static bool operator ==(OSVersionInfo o, OSVersionInfo p) - { - if (o.OSPlatformId != p.OSPlatformId) return false; - - if (o.OSMajorVersion < 0 || p.OSMajorVersion < 0) goto hell; - if (o.OSMajorVersion != p.OSMajorVersion) return false; - - if (o.OSMinorVersion < 0 || p.OSMinorVersion < 0) goto hell; - if (o.OSMinorVersion != p.OSMinorVersion) return false; - - if (o.BuildNumber < 0 || p.BuildNumber < 0) goto hell; - if (o.BuildNumber != p.BuildNumber) return false; - - if ((!o.ExtendedPropertiesAreSet) || (!p.ExtendedPropertiesAreSet)) goto hell; - - if (o.OSServicePackMajor < 0 || p.OSServicePackMajor < 0) goto hell; - if (o.OSServicePackMajor != p.OSServicePackMajor) return false; - - if (o.OSServicePackMinor < 0 || p.OSServicePackMinor < 0) goto hell; - if (o.OSServicePackMinor != p.OSServicePackMinor) return false; - - hell: - - return true; - } - - public static bool operator !=(OSVersionInfo o, OSVersionInfo p) - { - return !(o == p); - } - - public static bool operator <(OSVersionInfo o, OSVersionInfo p) - { - if (o.OSPlatformId < p.OSPlatformId) return true; - if (o.OSPlatformId > p.OSPlatformId) return false; - - if (o.OSMajorVersion < 0 || p.OSMajorVersion < 0) goto hell; - if (o.OSMajorVersion < p.OSMajorVersion) return true; - if (o.OSMajorVersion > p.OSMajorVersion) return false; - - if (o.OSMinorVersion < 0 || p.OSMinorVersion < 0) goto hell; - if (o.OSMinorVersion < p.OSMinorVersion) return true; - if (o.OSMinorVersion > p.OSMinorVersion) return false; - - if (o.BuildNumber < 0 || p.BuildNumber < 0) goto hell; - if (o.BuildNumber < p.BuildNumber) return true; - if (o.BuildNumber > p.BuildNumber) return false; - - if ((!o.ExtendedPropertiesAreSet) || (!p.ExtendedPropertiesAreSet)) goto hell; - - if (o.OSServicePackMajor < 0 || p.OSServicePackMajor < 0) goto hell; - if (o.OSServicePackMajor < p.OSServicePackMajor) return true; - if (o.OSServicePackMajor > p.OSServicePackMajor) return false; - - if (o.OSServicePackMinor < 0 || p.OSServicePackMinor < 0) goto hell; - if (o.OSServicePackMinor < p.OSServicePackMinor) return true; - if (o.OSServicePackMinor > p.OSServicePackMinor) return false; - - hell: - - return false; - } - - public static bool operator >(OSVersionInfo o, OSVersionInfo p) - { - if (o.OSPlatformId < p.OSPlatformId) return false; - if (o.OSPlatformId > p.OSPlatformId) return true; - - if (o.OSMajorVersion < 0 || p.OSMajorVersion < 0) goto hell; - if (o.OSMajorVersion < p.OSMajorVersion) return false; - if (o.OSMajorVersion > p.OSMajorVersion) return true; - - if (o.OSMinorVersion < 0 || p.OSMinorVersion < 0) goto hell; - if (o.OSMinorVersion < p.OSMinorVersion) return false; - if (o.OSMinorVersion > p.OSMinorVersion) return true; - - if (o.BuildNumber < 0 || p.BuildNumber < 0) goto hell; - if (o.BuildNumber < p.BuildNumber) return false; - if (o.BuildNumber > p.BuildNumber) return true; - - if ((!o.ExtendedPropertiesAreSet) || (!p.ExtendedPropertiesAreSet)) goto hell; - - if (o.OSServicePackMajor < 0 || p.OSServicePackMajor < 0) goto hell; - if (o.OSServicePackMajor < p.OSServicePackMajor) return false; - if (o.OSServicePackMajor > p.OSServicePackMajor) return true; - - if (o.OSServicePackMinor < 0 || p.OSServicePackMinor < 0) goto hell; - if (o.OSServicePackMinor < p.OSServicePackMinor) return false; - if (o.OSServicePackMinor > p.OSServicePackMinor) return true; - - hell: - - return false; - } - - public static bool operator <=(OSVersionInfo o, OSVersionInfo p) - { - return (o < p || o == p); - } - - public static bool operator >=(OSVersionInfo o, OSVersionInfo p) - { - return (o > p || o == p); - } - - private class MajorVersionConst - { - public const int Vista = 6; - public const int Win2000 = WinNT5; - public const int Win2003 = WinNT5; - public const int Win2008 = 6; - public const int Win2008R2 = 6; - public const int Win32s = 0; - public const int Win7 = 6; - public const int Win95 = 4; - public const int Win98 = 4; - public const int WinME = 4; - public const int WinNT351 = 3; - public const int WinNT4 = 4; - public const int WinNT5 = 5; - public const int WinXP = WinNT5; - public const int WinXPx64 = WinNT5; - - private MajorVersionConst() - { - } - } - - private class MinorVersionConst - { - public const int Vista = 0; - public const int Win2000 = 0; - public const int Win2003 = 2; - public const int Win2008 = 0; - public const int Win2008R2 = 1; - public const int Win32s = 0; - public const int Win7 = 1; - public const int Win95 = 0; - public const int Win98 = 10; - public const int WinME = 90; - public const int WinNT351 = 51; - public const int WinNT4 = 0; - public const int WinXP = 1; - public const int WinXPx64 = 2; - - private MinorVersionConst() - { - } - } - - //----------------------------------------------------------------------------- - } - - // OSVersionInfo - - //----------------------------------------------------------------------------- - // OperatingSystemVersion - - public class OperatingSystemVersion : OSVersionInfo - { - //----------------------------------------------------------------------------- - // Current - - private static OperatingSystemVersion sCurrent; - - //----------------------------------------------------------------------------- - // Constructors - - public OperatingSystemVersion() - { - OSVERSIONINFO osVersionInfo = new OSVERSIONINFO(); - - if (!UseOSVersionInfoEx(osVersionInfo)) - InitOsVersionInfo(osVersionInfo); - else - InitOsVersionInfoEx(); - - // Lock(); - - InitArchitecture(); - } - - public static OperatingSystemVersion Current - { - get - { - if (ReferenceEquals(sCurrent, null)) sCurrent = new OperatingSystemVersion(); - - return sCurrent; - } - } - - // check for NT4 SP6 or later - private static bool UseOSVersionInfoEx(OSVERSIONINFO info) - { - bool b = NativeMethods.GetVersionEx(info); - - if (!b) - { - int error = Marshal.GetLastWin32Error(); - - throw new InvalidOperationException( - "Failed to get OSVersionInfo. Error = 0x" + - error.ToString("8X", CultureInfo.CurrentCulture)); - } - - if (info.MajorVersion < 4) return false; - if (info.MajorVersion > 4) return true; - - if (info.MinorVersion < 0) return false; - if (info.MinorVersion > 0) return true; - - if (info.CSDVersion == "Service Pack 6") return true; - - return false; - } - - private void InitOsVersionInfo(OSVERSIONINFO info) - { - OSPlatformId = GetOSPlatformId(info.PlatformId); - - OSMajorVersion = info.MajorVersion; - OSMinorVersion = info.MinorVersion; - BuildNumber = info.BuildNumber; - // PlatformId = info.PlatformId ; - OSCSDVersion = info.CSDVersion; - } - - private void InitOsVersionInfoEx() - { - OSVERSIONINFOEX info = new OSVERSIONINFOEX(); - - bool b = NativeMethods.GetVersionEx(info); - - if (!b) - { - int error = Marshal.GetLastWin32Error(); - - throw new InvalidOperationException( - "Failed to get OSVersionInfoEx. Error = 0x" + - error.ToString("8X", CultureInfo.CurrentCulture)); - } - - OSPlatformId = GetOSPlatformId(info.PlatformId); - - OSMajorVersion = info.MajorVersion; - OSMinorVersion = info.MinorVersion; - BuildNumber = info.BuildNumber; - // PlatformId = info.PlatformId ; - OSCSDVersion = info.CSDVersion; - - OSSuiteFlags = GetOSSuiteFlags(info.SuiteMask); - OSProductType = GetOSProductType(info.ProductType); - - OSServicePackMajor = info.ServicePackMajor; - OSServicePackMinor = info.ServicePackMinor; - // SuiteMask = info.SuiteMask ; - // ProductType = info.ProductType ; - OSReserved = info.Reserved; - - ExtendedPropertiesAreSet = true; - } - - private static OSPlatformId GetOSPlatformId(int platformId) - { - switch (platformId) - { - case VerPlatformId.Win32s: - return OSPlatformId.Win32s; - case VerPlatformId.Win32Windows: - return OSPlatformId.Win32Windows; - case VerPlatformId.Win32NT: - return OSPlatformId.Win32NT; - case VerPlatformId.WinCE: - return OSPlatformId.WinCE; - - default: - throw new InvalidOperationException("Invalid PlatformId: " + platformId); - } - } - - private static OSSuites GetOSSuiteFlags(UInt16 suiteMask) - { - return (OSSuites) suiteMask; - } - - private static OSProductType GetOSProductType(byte productType) - { - switch (productType) - { - case VerProductType.VER_NT_WORKSTATION: - return OSProductType.Workstation; - case VerProductType.VER_NT_DOMAIN_CONTROLLER: - return OSProductType.DomainController; - case VerProductType.VER_NT_SERVER: - return OSProductType.Server; - - default: - throw new InvalidOperationException("Invalid ProductType: " + productType); - } - } - - private void InitArchitecture() - { - SYSTEM_INFO lpSystemInfo = new SYSTEM_INFO(); - NativeMethods.GetSystemInfo(ref lpSystemInfo); - - switch (lpSystemInfo.uProcessorInfo.wProcessorArchitecture) - { - case VerArchitecture.INTEL: - OSArchitecture = OSArchitecture.x86; - break; - - case VerArchitecture.AMD64: - case VerArchitecture.IA64: - OSArchitecture = OSArchitecture.x64; - break; - - default: - throw new ApplicationException("Unknown architecture: " + - lpSystemInfo.uProcessorInfo.wProcessorArchitecture); - } - } - - private class NativeMethods - { - private NativeMethods() - { - } - - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] - public static extern bool GetVersionEx - ( - [In, Out] OSVERSIONINFO osVersionInfo - ); - - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] - public static extern bool GetVersionEx - ( - [In, Out] OSVERSIONINFOEX osVersionInfoEx - ); - - // [ DllImport( "kernel32.dll", SetLastError = true ) ] - // public static extern bool VerifyVersionInfo - // ( - // [ In ] OSVERSIONINFOEX VersionInfo, - // UInt32 TypeMask, - // UInt64 ConditionMask - // ); - - [DllImport("kernel32.dll", CharSet = CharSet.Auto)] - public static extern void GetSystemInfo([MarshalAs(UnmanagedType.Struct)] ref SYSTEM_INFO lpSystemInfo); - } - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] - private class OSVERSIONINFO - { - public int OSVersionInfoSize; - public int MajorVersion; - public int MinorVersion; - public int BuildNumber; - public int PlatformId; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x80)] public string CSDVersion; - - public OSVERSIONINFO() - { - OSVersionInfoSize = Marshal.SizeOf(this); - } - - private void StopTheCompilerComplaining() - { - MajorVersion = 0; - MinorVersion = 0; - BuildNumber = 0; - PlatformId = 0; - CSDVersion = String.Empty; - } - } - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] - private class OSVERSIONINFOEX - { - public int OSVersionInfoSize; - public int MajorVersion; - public int MinorVersion; - public int BuildNumber; - public int PlatformId; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x80)] public string CSDVersion; - public Int16 ServicePackMajor; - public Int16 ServicePackMinor; - public UInt16 SuiteMask; - public byte ProductType; - public byte Reserved; - - public OSVERSIONINFOEX() - { - OSVersionInfoSize = Marshal.SizeOf(this); - } - - private void StopTheCompilerComplaining() - { - MajorVersion = 0; - MinorVersion = 0; - BuildNumber = 0; - PlatformId = 0; - CSDVersion = String.Empty; - ServicePackMajor = 0; - ServicePackMinor = 0; - SuiteMask = 0; - ProductType = 0; - Reserved = 0; - } - } - - [StructLayout(LayoutKind.Sequential)] - private struct SYSTEM_INFO - { - internal _PROCESSOR_INFO_UNION uProcessorInfo; - public readonly uint dwPageSize; - public readonly IntPtr lpMinimumApplicationAddress; - public readonly IntPtr lpMaximumApplicationAddress; - public readonly IntPtr dwActiveProcessorMask; - public readonly uint dwNumberOfProcessors; - public readonly uint dwProcessorType; - public readonly uint dwAllocationGranularity; - public readonly ushort dwProcessorLevel; - public readonly ushort dwProcessorRevision; - } - - private class VerArchitecture - { - //public const ushort ALPHA64 = 7; - //public const ushort MSIL = 8; - public const ushort AMD64 = 9; - public const ushort IA64 = 6; - public const ushort INTEL = 0; - //public const ushort IA32_ON_WIN64 = 10; - - public const ushort UNKNOWN = 0xFFFF; - - private VerArchitecture() - { - } - } - - private class VerPlatformId - { - public const Int32 Win32NT = 2; - public const Int32 Win32Windows = 1; - public const Int32 Win32s = 0; - public const Int32 WinCE = 3; - - private VerPlatformId() - { - } - } - - private class VerProductType - { - public const byte VER_NT_DOMAIN_CONTROLLER = 0x00000002; - public const byte VER_NT_SERVER = 0x00000003; - public const byte VER_NT_WORKSTATION = 0x00000001; - - private VerProductType() - { - } - } - - private class VerSuiteMask - { - public const UInt32 VER_SERVER_NT = 0x80000000; - public const UInt16 VER_SUITE_BACKOFFICE = 0x00000004; - public const UInt16 VER_SUITE_BLADE = 0x00000400; - public const UInt16 VER_SUITE_COMMUNICATIONS = 0x00000008; - public const UInt16 VER_SUITE_DATACENTER = 0x00000080; - public const UInt16 VER_SUITE_EMBEDDEDNT = 0x00000040; - public const UInt16 VER_SUITE_EMBEDDED_RESTRICTED = 0x00000800; - public const UInt16 VER_SUITE_ENTERPRISE = 0x00000002; - public const UInt16 VER_SUITE_PERSONAL = 0x00000200; - public const UInt16 VER_SUITE_SINGLEUSERTS = 0x00000100; - public const UInt16 VER_SUITE_SMALLBUSINESS = 0x00000001; - public const UInt16 VER_SUITE_SMALLBUSINESS_RESTRICTED = 0x00000020; - public const UInt16 VER_SUITE_TERMINAL = 0x00000010; - public const UInt32 VER_WORKSTATION_NT = 0x40000000; - - private VerSuiteMask() - { - } - } - - [StructLayout(LayoutKind.Explicit)] - private struct _PROCESSOR_INFO_UNION - { - [FieldOffset(0)] internal readonly uint dwOemId; - [FieldOffset(0)] internal readonly ushort wProcessorArchitecture; - [FieldOffset(2)] internal readonly ushort wReserved; - } - - //----------------------------------------------------------------------------- - } - - // OperatingSystemVersion - - //----------------------------------------------------------------------------- +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using System.Globalization; +using System.Runtime.InteropServices; + +namespace Ch.Cyberduck.Core +{ + //----------------------------------------------------------------------------- + // Enums + + public enum OSPlatformId + { + Win32s = 0, + Win32Windows = 1, + Win32NT = 2, + WinCE = 3, + } + + public enum OSBuildNumber + { + None = 0, + + Win2000SP4 = 2195, + + WinXPSP2 = 2600, + + Win2003SP1 = 3790, + } + + [Flags] + public enum OSSuites + { + None = 0, + SmallBusiness = 0x00000001, + Enterprise = 0x00000002, + BackOffice = 0x00000004, + Communications = 0x00000008, + Terminal = 0x00000010, + SmallBusinessRestricted = 0x00000020, + EmbeddedNT = 0x00000040, + Datacenter = 0x00000080, + SingleUserTS = 0x00000100, + Personal = 0x00000200, + Blade = 0x00000400, + EmbeddedRestricted = 0x00000800, + } + + public enum OSProductType + { + Invalid = 0, + Workstation = 1, + DomainController = 2, + Server = 3, + } + + public enum OSVersion + { + Win32s, + Win95, + Win98, + WinME, + WinNT351, + WinNT4, + Win2000, + WinXP, + Win2003, + WinXPx64, + WinCE, + Vista, + Win2008, + Win2008R2, + Win7, + } + + public enum OSArchitecture + { + x86, + x64, + } + + //----------------------------------------------------------------------------- + // OSVersionInfo, Thanks to Nicholas Butler + // http://www.codeproject.com/KB/system/osversion.aspx + + public class OSVersionInfo : IComparable, ICloneable + { + //----------------------------------------------------------------------------- + // Constants + + //----------------------------------------------------------------------------- + // Static Fields + + private static readonly OSVersionInfo _Vista = new OSVersionInfo(OSPlatformId.Win32NT, MajorVersionConst.Vista, + MinorVersionConst.Vista, + OSProductType.Workstation, true); + + private static readonly OSVersionInfo _Win2000 = new OSVersionInfo(OSPlatformId.Win32NT, + MajorVersionConst.Win2000, + MinorVersionConst.Win2000, true); + + private static readonly OSVersionInfo _Win2003 = new OSVersionInfo(OSPlatformId.Win32NT, + MajorVersionConst.Win2003, + MinorVersionConst.Win2003, + OSProductType.Server, true); + + private static readonly OSVersionInfo _Win2008 = new OSVersionInfo(OSPlatformId.Win32NT, + MajorVersionConst.Win2008, + MinorVersionConst.Win2008, + OSProductType.Server, true); + + private static readonly OSVersionInfo _Win2008R2 = new OSVersionInfo(OSPlatformId.Win32NT, + MajorVersionConst.Win2008R2, + MinorVersionConst.Win2008R2, + OSProductType.Server, true); + + private static readonly OSVersionInfo _Win32s = new OSVersionInfo(OSPlatformId.Win32s, MajorVersionConst.Win32s, + MinorVersionConst.Win32s, true); + + private static readonly OSVersionInfo _Win7 = new OSVersionInfo(OSPlatformId.Win32NT, MajorVersionConst.Win7, + MinorVersionConst.Win7, + OSProductType.Workstation, true); + + private static readonly OSVersionInfo _Win95 = new OSVersionInfo(OSPlatformId.Win32Windows, + MajorVersionConst.Win95, + MinorVersionConst.Win95, true); + + private static readonly OSVersionInfo _Win98 = new OSVersionInfo(OSPlatformId.Win32Windows, + MajorVersionConst.Win98, + MinorVersionConst.Win98, true); + + private static readonly OSVersionInfo _WinCE = new OSVersionInfo(OSPlatformId.WinCE, true); + + private static readonly OSVersionInfo _WinME = new OSVersionInfo(OSPlatformId.Win32Windows, + MajorVersionConst.WinME, + MinorVersionConst.WinME, true); + + private static readonly OSVersionInfo _WinNT351 = new OSVersionInfo(OSPlatformId.Win32NT, + MajorVersionConst.WinNT351, + MinorVersionConst.WinNT351, true); + + private static readonly OSVersionInfo _WinNT4 = new OSVersionInfo(OSPlatformId.Win32NT, MajorVersionConst.WinNT4, + MinorVersionConst.WinNT4, true); + + private static readonly OSVersionInfo _WinXP = new OSVersionInfo(OSPlatformId.Win32NT, MajorVersionConst.WinXP, + MinorVersionConst.WinXP, true); + + private static readonly OSVersionInfo _WinXPx64 = new OSVersionInfo(OSPlatformId.Win32NT, + MajorVersionConst.WinXPx64, + MinorVersionConst.WinXPx64, + OSProductType.Workstation, true); + + private int _BuildNumber = -1; + // private int _PlatformId; + private string _CSDVersion = String.Empty; + private bool _ExtendedPropertiesAreSet; + private bool _Locked; + private int _MajorVersion = -1; + private int _MinorVersion = -1; + private OSArchitecture _OSArchitecture = 0; + private OSPlatformId _OSPlatformId; + private OSProductType _OSProductType; + private OSSuites _OSSuiteFlags; + private byte _Reserved; + private Int16 _ServicePackMajor = -1; + private Int16 _ServicePackMinor = -1; + + public OSVersionInfo() + { + } + + public OSVersionInfo( + OSPlatformId osPlatformId) + { + _OSPlatformId = osPlatformId; + } + + public OSVersionInfo( + OSPlatformId osPlatformId, + bool locked) + { + _OSPlatformId = osPlatformId; + + _Locked = locked; + } + + public OSVersionInfo( + OSPlatformId osPlatformId, + int majorVersion, + int minorVersion) + { + _OSPlatformId = osPlatformId; + _MajorVersion = majorVersion; + _MinorVersion = minorVersion; + } + + public OSVersionInfo( + OSPlatformId osPlatformId, + int majorVersion, + int minorVersion, + bool locked) + { + _OSPlatformId = osPlatformId; + _MajorVersion = majorVersion; + _MinorVersion = minorVersion; + + _Locked = locked; + } + + public OSVersionInfo( + OSPlatformId osPlatformId, + int majorVersion, + int minorVersion, + OSProductType osProductType, + bool locked) + { + _OSPlatformId = osPlatformId; + _MajorVersion = majorVersion; + _MinorVersion = minorVersion; + _OSProductType = osProductType; + + _Locked = locked; + } + + //----------------------------------------------------------------------------- + // Copying + + public OSVersionInfo(OSVersionInfo o) + { + CopyThis(o); + } + + //----------------------------------------------------------------------------- + // Static Properties + + public static OSVersionInfo Win32s + { + get { return _Win32s; } + } + + public static OSVersionInfo Win95 + { + get { return _Win95; } + } + + public static OSVersionInfo Win98 + { + get { return _Win98; } + } + + public static OSVersionInfo WinME + { + get { return _WinME; } + } + + public static OSVersionInfo WinNT351 + { + get { return _WinNT351; } + } + + public static OSVersionInfo WinNT4 + { + get { return _WinNT4; } + } + + public static OSVersionInfo Win2000 + { + get { return _Win2000; } + } + + public static OSVersionInfo WinXP + { + get { return _WinXP; } + } + + public static OSVersionInfo Win2003 + { + get { return _Win2003; } + } + + public static OSVersionInfo WinXPx64 + { + get { return _WinXPx64; } + } + + public static OSVersionInfo WinCE + { + get { return _WinCE; } + } + + public static OSVersionInfo Vista + { + get { return _Vista; } + } + + public static OSVersionInfo Win2008 + { + get { return _Win2008; } + } + + public static OSVersionInfo Win2008R2 + { + get { return _Win2008R2; } + } + + public static OSVersionInfo Win7 + { + get { return _Win7; } + } + + //----------------------------------------------------------------------------- + // Static methods + + //----------------------------------------------------------------------------- + // Normal Properties + + public OSPlatformId OSPlatformId + { + get { return _OSPlatformId; } + + set + { + CheckLock("OSPlatformId"); + + _OSPlatformId = value; + } + } + + public int OSMajorVersion + { + get { return _MajorVersion; } + + set + { + CheckLock("MajorVersion"); + + _MajorVersion = value; + } + } + + public int OSMinorVersion + { + get { return _MinorVersion; } + + set + { + CheckLock("MinorVersion"); + + _MinorVersion = value; + } + } + + public int BuildNumber + { + get { return _BuildNumber; } + + set + { + CheckLock("BuildNumber"); + + _BuildNumber = value; + } + } + + // public int PlatformId + // { + // get { return _PlatformId; } + // + // set + // { + // CheckLock( "PlatformId" ); + // + // _PlatformId = value; + // } + // } + + public string OSCSDVersion + { + get { return _CSDVersion; } + + set + { + CheckLock("CSDVersion"); + + _CSDVersion = value; + } + } + + public OSArchitecture OSArchitecture + { + get { return _OSArchitecture; } + protected set { _OSArchitecture = value; } + } + + //----------------------------------------------------------------------------- + // Extended Properties + + public OSSuites OSSuiteFlags + { + get + { + CheckExtendedProperty("OSSuiteFlags"); + + return _OSSuiteFlags; + } + + set + { + CheckLock("OSSuiteFlags"); + + _OSSuiteFlags = value; + } + } + + public OSProductType OSProductType + { + get + { + CheckExtendedProperty("OSProductType"); + + return _OSProductType; + } + + set + { + CheckLock("OSProductType"); + + _OSProductType = value; + } + } + + public Int16 OSServicePackMajor + { + get + { + CheckExtendedProperty("ServicePackMajor"); + + return _ServicePackMajor; + } + + set + { + CheckLock("ServicePackMajor"); + + _ServicePackMajor = value; + } + } + + public Int16 OSServicePackMinor + { + get + { + CheckExtendedProperty("ServicePackMinor"); + + return _ServicePackMinor; + } + + set + { + CheckLock("ServicePackMinor"); + + _ServicePackMinor = value; + } + } + + // public UInt16 SuiteMask + // { + // get + // { + // CheckExtendedProperty( "SuiteMask" ); + // + // return _SuiteMask; + // } + // + // set + // { + // CheckLock( "SuiteMask" ); + // + // _SuiteMask = value; + // } + // } + + // public byte ProductType + // { + // get + // { + // CheckExtendedProperty( "ProductType" ); + // + // return _ProductType; + // } + // + // set + // { + // CheckLock( "ProductType" ); + // + // _ProductType = value; + // } + // } + + public byte OSReserved + { + get + { + CheckExtendedProperty("Reserved"); + + return _Reserved; + } + + set + { + CheckLock("Reserved"); + + _Reserved = value; + } + } + + //----------------------------------------------------------------------------- + // Get Properties + + public int Platform + { + get { return (int) _OSPlatformId; } + } + + public int SuiteMask + { + get + { + CheckExtendedProperty("SuiteMask"); + + return (int) _OSSuiteFlags; + } + } + + public byte ProductType + { + get + { + CheckExtendedProperty("ProductType"); + + return (byte) _OSProductType; + } + } + + //----------------------------------------------------------------------------- + // Calculated Properties + + public Version Version + { + get + { + if (OSMajorVersion < 0 || OSMinorVersion < 0) + return new Version(); + + if (BuildNumber < 0) + return new Version(OSMajorVersion, OSMinorVersion); + + return new Version(OSMajorVersion, OSMinorVersion, BuildNumber); + } + } + + public string VersionString + { + get { return Version.ToString(); } + } + + public string OSPlatformIdString + { + get + { + switch (OSPlatformId) + { + case OSPlatformId.Win32s: + return "Windows 32s"; + case OSPlatformId.Win32Windows: + return "Windows 32"; + case OSPlatformId.Win32NT: + return "Windows NT"; + case OSPlatformId.WinCE: + return "Windows CE"; + + default: + throw new InvalidOperationException("Invalid OSPlatformId: " + OSPlatformId); + } + } + } + + public string OSSuiteString + { + get + { + string s = String.Empty; + + OSSuites flags = OSSuiteFlags; + + if (OSSuiteFlag(flags, OSSuites.SmallBusiness)) + OSSuiteStringAdd(ref s, "Small Business"); + + if (OSSuiteFlag(flags, OSSuites.Enterprise)) + switch (OSVersion) + { + case OSVersion.WinNT4: + OSSuiteStringAdd(ref s, "Enterprise"); + break; + case OSVersion.Win2000: + OSSuiteStringAdd(ref s, "Advanced"); + break; + case OSVersion.Win2003: + OSSuiteStringAdd(ref s, "Enterprise"); + break; + } + + if (OSSuiteFlag(flags, OSSuites.BackOffice)) + OSSuiteStringAdd(ref s, "BackOffice"); + + if (OSSuiteFlag(flags, OSSuites.Communications)) + OSSuiteStringAdd(ref s, "Communications"); + + if (OSSuiteFlag(flags, OSSuites.Terminal)) + OSSuiteStringAdd(ref s, "Terminal Services"); + + if (OSSuiteFlag(flags, OSSuites.SmallBusinessRestricted)) + OSSuiteStringAdd(ref s, "Small Business Restricted"); + + if (OSSuiteFlag(flags, OSSuites.EmbeddedNT)) + OSSuiteStringAdd(ref s, "Embedded"); + + if (OSSuiteFlag(flags, OSSuites.Datacenter)) + OSSuiteStringAdd(ref s, "Datacenter"); + + // if ( OSSuiteFlag( flags, OSSuites.SingleUserTS ) ) + // OSSuiteStringAdd( ref s, "Single User Terminal Services" ); + + if (OSSuiteFlag(flags, OSSuites.Personal)) + OSSuiteStringAdd(ref s, "Home Edition"); + + if (OSSuiteFlag(flags, OSSuites.Blade)) + OSSuiteStringAdd(ref s, "Web Edition"); + + if (OSSuiteFlag(flags, OSSuites.EmbeddedRestricted)) + OSSuiteStringAdd(ref s, "Embedded Restricted"); + + return s; + } + } + + public string OSProductTypeString + { + get + { + switch (OSProductType) + { + case OSProductType.Workstation: + + switch (OSVersion) + { + case OSVersion.Win32s: + return String.Empty; + case OSVersion.Win95: + return String.Empty; + case OSVersion.Win98: + return String.Empty; + case OSVersion.WinME: + return String.Empty; + case OSVersion.WinNT351: + return String.Empty; + case OSVersion.WinNT4: + return "Workstation"; + case OSVersion.Win2000: + return "Professional"; + + case OSVersion.WinXP: + + if (OSSuiteFlag(OSSuiteFlags, OSSuites.Personal)) + return "Home Edition"; + else + return "Professional"; + + case OSVersion.Win2003: + return String.Empty; + case OSVersion.WinXPx64: + return String.Empty; + case OSVersion.WinCE: + return String.Empty; + + case OSVersion.Vista: + case OSVersion.Win2008: + case OSVersion.Win2008R2: + case OSVersion.Win7: + + switch (OSArchitecture) + { + case OSArchitecture.x86: + return "x86"; + case OSArchitecture.x64: + return "x64"; + + default: + throw new InvalidOperationException("Invalid OSArchitecture: " + OSArchitecture); + } + + default: + throw new InvalidOperationException("Invalid OSVersion: " + OSVersion); + } + + case OSProductType.DomainController: + { + string s = OSSuiteString; + + if (s.Length > 0) s += " "; + + return s + "Domain Controller"; + } + + case OSProductType.Server: + { + string s = OSSuiteString; + + if (s.Length > 0) s += " "; + + return s + "Server"; + } + + default: + throw new InvalidOperationException("Invalid OSProductType: " + OSProductType); + } + } + } + + public OSVersion OSVersion + { + get + { + switch (OSPlatformId) + { + case OSPlatformId.Win32s: + return OSVersion.Win32s; + + case OSPlatformId.Win32Windows: + + switch (OSMinorVersion) + { + case MinorVersionConst.Win95: + return OSVersion.Win95; + case MinorVersionConst.Win98: + return OSVersion.Win98; + case MinorVersionConst.WinME: + return OSVersion.WinME; + + default: + throw new InvalidOperationException("Invalid Win32Windows MinorVersion: " + + OSMinorVersion); + } + + case OSPlatformId.Win32NT: + + switch (OSMajorVersion) + { + case MajorVersionConst.WinNT351: + return OSVersion.WinNT351; + case MajorVersionConst.WinNT4: + return OSVersion.WinNT4; + + case MajorVersionConst.WinNT5: + + switch (OSMinorVersion) + { + case MinorVersionConst.Win2000: + return OSVersion.Win2000; + case MinorVersionConst.WinXP: + return OSVersion.WinXP; + + case MinorVersionConst.Win2003: + //case MinorVersionConst.WinXPx64: // same ( 5.2 ) + + switch (_OSProductType) + { + case OSProductType.Workstation: + return OSVersion.WinXPx64; + + case OSProductType.DomainController: + case OSProductType.Server: + return OSVersion.Win2003; + + default: + throw new InvalidOperationException( + "Invalid Win32NT WinNT5.2 OSProductType: " + OSProductType); + } + + default: + throw new InvalidOperationException("Invalid Win32NT WinNT5 MinorVersion: " + + OSMinorVersion); + } + + case MajorVersionConst.Vista: + //case MajorVersionConst.Win2008: same ( 6 ) + //case MajorVersionConst.Win2008R2: same ( 6 ) + //case MajorVersionConst.Win7: same ( 6 ) + + switch (_OSProductType) + { + case OSProductType.Workstation: + switch (OSMinorVersion) + { + case MinorVersionConst.Vista: + return OSVersion.Vista; + case MinorVersionConst.Win7: + return OSVersion.Win7; + default: + throw new InvalidOperationException( + "Invalid Win32NT WinNT6 Workstation MinorVersion: " + OSMinorVersion); + } + + + case OSProductType.DomainController: + case OSProductType.Server: + switch (OSMinorVersion) + { + case MinorVersionConst.Win2008: + return OSVersion.Win2008; + case MinorVersionConst.Win2008R2: + return OSVersion.Win2008R2; + default: + throw new InvalidOperationException( + "Invalid Win32NT WinNT6 Server MinorVersion: " + OSMinorVersion); + } + + default: + throw new InvalidOperationException("Invalid Win32NT WinNT6 OSProductType: " + + OSProductType); + } + + default: + throw new InvalidOperationException("Invalid Win32NT MajorVersion: " + OSMajorVersion); + } + + case OSPlatformId.WinCE: + return OSVersion.WinCE; + + default: + throw new InvalidOperationException("Invalid OSPlatformId: " + OSPlatformId); + } + } + } + + public string OSVersionString + { + get + { + switch (OSVersion) + { + case OSVersion.Win32s: + return "Windows 32s"; + case OSVersion.Win95: + return "Windows 95"; + case OSVersion.Win98: + return "Windows 98"; + case OSVersion.WinME: + return "Windows ME"; + case OSVersion.WinNT351: + return "Windows NT 3.51"; + case OSVersion.WinNT4: + return "Windows NT 4"; + case OSVersion.Win2000: + return "Windows 2000"; + case OSVersion.WinXP: + return "Windows XP"; + case OSVersion.Win2003: + return "Windows 2003"; + case OSVersion.WinXPx64: + return "Windows XP x64"; + case OSVersion.WinCE: + return "Windows CE"; + case OSVersion.Vista: + return "Windows Vista"; + case OSVersion.Win2008: + return "Windows 2008"; + case OSVersion.Win2008R2: + return "Windows 2008 R2"; + case OSVersion.Win7: + return "Windows 7"; + + default: + throw new InvalidOperationException("Invalid OSVersion: " + OSVersion); + } + } + } + + //----------------------------------------------------------------------------- + // State Properties + + public bool ExtendedPropertiesAreSet + { + get { return _ExtendedPropertiesAreSet; } + set { _ExtendedPropertiesAreSet = value; } + } + + public bool IsLocked + { + get { return _Locked; } + } + + public virtual object Clone() + { + return CreateCopy(); + } + + public virtual int CompareTo(object o) + { + if (o == null) throw new InvalidOperationException("CompareTo( object o ): 'o' is null"); + + OSVersionInfo p = o as OSVersionInfo; + if (p == null) throw new InvalidOperationException("CompareTo( object o ): 'o' is not an OSVersionInfo"); + + if (this == p) return 0; + if (this > p) return 1; + return -1; + } + + public static OSVersionInfo GetOSVersionInfo(OSVersion v) + { + switch (v) + { + case OSVersion.Win32s: + return Win32s; + case OSVersion.Win95: + return Win95; + case OSVersion.Win98: + return Win98; + case OSVersion.WinME: + return WinME; + case OSVersion.WinNT351: + return WinNT351; + case OSVersion.WinNT4: + return WinNT4; + case OSVersion.Win2000: + return Win2000; + case OSVersion.WinXP: + return WinXP; + case OSVersion.Win2003: + return Win2003; + case OSVersion.WinXPx64: + return WinXPx64; + case OSVersion.WinCE: + return WinCE; + case OSVersion.Vista: + return Vista; + case OSVersion.Win2008: + return Win2008; + case OSVersion.Win2008R2: + return Win2008R2; + case OSVersion.Win7: + return Win7; + + default: + throw new InvalidOperationException(); + } + } + + public static bool OSSuiteFlag(OSSuites flags, OSSuites test) + { + return ((flags & test) > 0); + } + + private static void OSSuiteStringAdd(ref string s, string suite) + { + if (s.Length > 0) s += ", "; + + s += suite; + } + + public void Lock() + { + _Locked = true; + } + + //----------------------------------------------------------------------------- + // Property helpers + + private void CheckExtendedProperty(string property) + { + if (_ExtendedPropertiesAreSet) return; + + throw new InvalidOperationException("'" + property + "' is not set"); + } + + private void CheckLock(string property) + { + if (!_Locked) return; + + throw new InvalidOperationException("Cannot set '" + property + "' on locked instance"); + } + + //----------------------------------------------------------------------------- + // Constructors + + public virtual void Copy(OSVersionInfo o) + { + CopyThis(o); + } + + public virtual OSVersionInfo CreateCopy() + { + return new OSVersionInfo(this); + } + + private void CopyThis(OSVersionInfo o) + { + // normal fields + _OSPlatformId = o._OSPlatformId; + + _MajorVersion = o._MajorVersion; + _MinorVersion = o._MinorVersion; + _BuildNumber = o._BuildNumber; + _CSDVersion = o._CSDVersion; + + // extended fields + _OSSuiteFlags = o._OSSuiteFlags; + _OSProductType = o._OSProductType; + + _ServicePackMajor = o._ServicePackMajor; + _ServicePackMinor = o._ServicePackMinor; + _Reserved = o._Reserved; + + // state fields + // _Locked = o._Locked ; + _Locked = false; + _ExtendedPropertiesAreSet = o._ExtendedPropertiesAreSet; + } + + //----------------------------------------------------------------------------- + // overrides + + public override bool Equals(object o) + { + OSVersionInfo p = o as OSVersionInfo; + + if (p != null) return (this == p); + + return base.Equals(o); + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + public override string ToString() + { + string s = OSVersionString; + + if (ExtendedPropertiesAreSet) s += " " + OSProductTypeString; + + if (OSCSDVersion.Length > 0) s += " " + OSCSDVersion; + + s += " v" + VersionString; + + return s; + } + + //----------------------------------------------------------------------------- + // Operators + + public static bool operator ==(OSVersionInfo o, OSVersionInfo p) + { + if (o.OSPlatformId != p.OSPlatformId) return false; + + if (o.OSMajorVersion < 0 || p.OSMajorVersion < 0) goto hell; + if (o.OSMajorVersion != p.OSMajorVersion) return false; + + if (o.OSMinorVersion < 0 || p.OSMinorVersion < 0) goto hell; + if (o.OSMinorVersion != p.OSMinorVersion) return false; + + if (o.BuildNumber < 0 || p.BuildNumber < 0) goto hell; + if (o.BuildNumber != p.BuildNumber) return false; + + if ((!o.ExtendedPropertiesAreSet) || (!p.ExtendedPropertiesAreSet)) goto hell; + + if (o.OSServicePackMajor < 0 || p.OSServicePackMajor < 0) goto hell; + if (o.OSServicePackMajor != p.OSServicePackMajor) return false; + + if (o.OSServicePackMinor < 0 || p.OSServicePackMinor < 0) goto hell; + if (o.OSServicePackMinor != p.OSServicePackMinor) return false; + + hell: + + return true; + } + + public static bool operator !=(OSVersionInfo o, OSVersionInfo p) + { + return !(o == p); + } + + public static bool operator <(OSVersionInfo o, OSVersionInfo p) + { + if (o.OSPlatformId < p.OSPlatformId) return true; + if (o.OSPlatformId > p.OSPlatformId) return false; + + if (o.OSMajorVersion < 0 || p.OSMajorVersion < 0) goto hell; + if (o.OSMajorVersion < p.OSMajorVersion) return true; + if (o.OSMajorVersion > p.OSMajorVersion) return false; + + if (o.OSMinorVersion < 0 || p.OSMinorVersion < 0) goto hell; + if (o.OSMinorVersion < p.OSMinorVersion) return true; + if (o.OSMinorVersion > p.OSMinorVersion) return false; + + if (o.BuildNumber < 0 || p.BuildNumber < 0) goto hell; + if (o.BuildNumber < p.BuildNumber) return true; + if (o.BuildNumber > p.BuildNumber) return false; + + if ((!o.ExtendedPropertiesAreSet) || (!p.ExtendedPropertiesAreSet)) goto hell; + + if (o.OSServicePackMajor < 0 || p.OSServicePackMajor < 0) goto hell; + if (o.OSServicePackMajor < p.OSServicePackMajor) return true; + if (o.OSServicePackMajor > p.OSServicePackMajor) return false; + + if (o.OSServicePackMinor < 0 || p.OSServicePackMinor < 0) goto hell; + if (o.OSServicePackMinor < p.OSServicePackMinor) return true; + if (o.OSServicePackMinor > p.OSServicePackMinor) return false; + + hell: + + return false; + } + + public static bool operator >(OSVersionInfo o, OSVersionInfo p) + { + if (o.OSPlatformId < p.OSPlatformId) return false; + if (o.OSPlatformId > p.OSPlatformId) return true; + + if (o.OSMajorVersion < 0 || p.OSMajorVersion < 0) goto hell; + if (o.OSMajorVersion < p.OSMajorVersion) return false; + if (o.OSMajorVersion > p.OSMajorVersion) return true; + + if (o.OSMinorVersion < 0 || p.OSMinorVersion < 0) goto hell; + if (o.OSMinorVersion < p.OSMinorVersion) return false; + if (o.OSMinorVersion > p.OSMinorVersion) return true; + + if (o.BuildNumber < 0 || p.BuildNumber < 0) goto hell; + if (o.BuildNumber < p.BuildNumber) return false; + if (o.BuildNumber > p.BuildNumber) return true; + + if ((!o.ExtendedPropertiesAreSet) || (!p.ExtendedPropertiesAreSet)) goto hell; + + if (o.OSServicePackMajor < 0 || p.OSServicePackMajor < 0) goto hell; + if (o.OSServicePackMajor < p.OSServicePackMajor) return false; + if (o.OSServicePackMajor > p.OSServicePackMajor) return true; + + if (o.OSServicePackMinor < 0 || p.OSServicePackMinor < 0) goto hell; + if (o.OSServicePackMinor < p.OSServicePackMinor) return false; + if (o.OSServicePackMinor > p.OSServicePackMinor) return true; + + hell: + + return false; + } + + public static bool operator <=(OSVersionInfo o, OSVersionInfo p) + { + return (o < p || o == p); + } + + public static bool operator >=(OSVersionInfo o, OSVersionInfo p) + { + return (o > p || o == p); + } + + private class MajorVersionConst + { + public const int Vista = 6; + public const int Win2000 = WinNT5; + public const int Win2003 = WinNT5; + public const int Win2008 = 6; + public const int Win2008R2 = 6; + public const int Win32s = 0; + public const int Win7 = 6; + public const int Win95 = 4; + public const int Win98 = 4; + public const int WinME = 4; + public const int WinNT351 = 3; + public const int WinNT4 = 4; + public const int WinNT5 = 5; + public const int WinXP = WinNT5; + public const int WinXPx64 = WinNT5; + + private MajorVersionConst() + { + } + } + + private class MinorVersionConst + { + public const int Vista = 0; + public const int Win2000 = 0; + public const int Win2003 = 2; + public const int Win2008 = 0; + public const int Win2008R2 = 1; + public const int Win32s = 0; + public const int Win7 = 1; + public const int Win95 = 0; + public const int Win98 = 10; + public const int WinME = 90; + public const int WinNT351 = 51; + public const int WinNT4 = 0; + public const int WinXP = 1; + public const int WinXPx64 = 2; + + private MinorVersionConst() + { + } + } + + //----------------------------------------------------------------------------- + } + + // OSVersionInfo + + //----------------------------------------------------------------------------- + // OperatingSystemVersion + + public class OperatingSystemVersion : OSVersionInfo + { + //----------------------------------------------------------------------------- + // Current + + private static OperatingSystemVersion sCurrent; + + //----------------------------------------------------------------------------- + // Constructors + + public OperatingSystemVersion() + { + OSVERSIONINFO osVersionInfo = new OSVERSIONINFO(); + + if (!UseOSVersionInfoEx(osVersionInfo)) + InitOsVersionInfo(osVersionInfo); + else + InitOsVersionInfoEx(); + + // Lock(); + + InitArchitecture(); + } + + public static OperatingSystemVersion Current + { + get + { + if (ReferenceEquals(sCurrent, null)) sCurrent = new OperatingSystemVersion(); + + return sCurrent; + } + } + + // check for NT4 SP6 or later + private static bool UseOSVersionInfoEx(OSVERSIONINFO info) + { + bool b = NativeMethods.GetVersionEx(info); + + if (!b) + { + int error = Marshal.GetLastWin32Error(); + + throw new InvalidOperationException( + "Failed to get OSVersionInfo. Error = 0x" + + error.ToString("8X", CultureInfo.CurrentCulture)); + } + + if (info.MajorVersion < 4) return false; + if (info.MajorVersion > 4) return true; + + if (info.MinorVersion < 0) return false; + if (info.MinorVersion > 0) return true; + + if (info.CSDVersion == "Service Pack 6") return true; + + return false; + } + + private void InitOsVersionInfo(OSVERSIONINFO info) + { + OSPlatformId = GetOSPlatformId(info.PlatformId); + + OSMajorVersion = info.MajorVersion; + OSMinorVersion = info.MinorVersion; + BuildNumber = info.BuildNumber; + // PlatformId = info.PlatformId ; + OSCSDVersion = info.CSDVersion; + } + + private void InitOsVersionInfoEx() + { + OSVERSIONINFOEX info = new OSVERSIONINFOEX(); + + bool b = NativeMethods.GetVersionEx(info); + + if (!b) + { + int error = Marshal.GetLastWin32Error(); + + throw new InvalidOperationException( + "Failed to get OSVersionInfoEx. Error = 0x" + + error.ToString("8X", CultureInfo.CurrentCulture)); + } + + OSPlatformId = GetOSPlatformId(info.PlatformId); + + OSMajorVersion = info.MajorVersion; + OSMinorVersion = info.MinorVersion; + BuildNumber = info.BuildNumber; + // PlatformId = info.PlatformId ; + OSCSDVersion = info.CSDVersion; + + OSSuiteFlags = GetOSSuiteFlags(info.SuiteMask); + OSProductType = GetOSProductType(info.ProductType); + + OSServicePackMajor = info.ServicePackMajor; + OSServicePackMinor = info.ServicePackMinor; + // SuiteMask = info.SuiteMask ; + // ProductType = info.ProductType ; + OSReserved = info.Reserved; + + ExtendedPropertiesAreSet = true; + } + + private static OSPlatformId GetOSPlatformId(int platformId) + { + switch (platformId) + { + case VerPlatformId.Win32s: + return OSPlatformId.Win32s; + case VerPlatformId.Win32Windows: + return OSPlatformId.Win32Windows; + case VerPlatformId.Win32NT: + return OSPlatformId.Win32NT; + case VerPlatformId.WinCE: + return OSPlatformId.WinCE; + + default: + throw new InvalidOperationException("Invalid PlatformId: " + platformId); + } + } + + private static OSSuites GetOSSuiteFlags(UInt16 suiteMask) + { + return (OSSuites) suiteMask; + } + + private static OSProductType GetOSProductType(byte productType) + { + switch (productType) + { + case VerProductType.VER_NT_WORKSTATION: + return OSProductType.Workstation; + case VerProductType.VER_NT_DOMAIN_CONTROLLER: + return OSProductType.DomainController; + case VerProductType.VER_NT_SERVER: + return OSProductType.Server; + + default: + throw new InvalidOperationException("Invalid ProductType: " + productType); + } + } + + private void InitArchitecture() + { + SYSTEM_INFO lpSystemInfo = new SYSTEM_INFO(); + NativeMethods.GetSystemInfo(ref lpSystemInfo); + + switch (lpSystemInfo.uProcessorInfo.wProcessorArchitecture) + { + case VerArchitecture.INTEL: + OSArchitecture = OSArchitecture.x86; + break; + + case VerArchitecture.AMD64: + case VerArchitecture.IA64: + OSArchitecture = OSArchitecture.x64; + break; + + default: + throw new ApplicationException("Unknown architecture: " + + lpSystemInfo.uProcessorInfo.wProcessorArchitecture); + } + } + + private class NativeMethods + { + private NativeMethods() + { + } + + [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] + public static extern bool GetVersionEx + ( + [In, Out] OSVERSIONINFO osVersionInfo + ); + + [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] + public static extern bool GetVersionEx + ( + [In, Out] OSVERSIONINFOEX osVersionInfoEx + ); + + // [ DllImport( "kernel32.dll", SetLastError = true ) ] + // public static extern bool VerifyVersionInfo + // ( + // [ In ] OSVERSIONINFOEX VersionInfo, + // UInt32 TypeMask, + // UInt64 ConditionMask + // ); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto)] + public static extern void GetSystemInfo([MarshalAs(UnmanagedType.Struct)] ref SYSTEM_INFO lpSystemInfo); + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + private class OSVERSIONINFO + { + public int OSVersionInfoSize; + public int MajorVersion; + public int MinorVersion; + public int BuildNumber; + public int PlatformId; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x80)] public string CSDVersion; + + public OSVERSIONINFO() + { + OSVersionInfoSize = Marshal.SizeOf(this); + } + + private void StopTheCompilerComplaining() + { + MajorVersion = 0; + MinorVersion = 0; + BuildNumber = 0; + PlatformId = 0; + CSDVersion = String.Empty; + } + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + private class OSVERSIONINFOEX + { + public int OSVersionInfoSize; + public int MajorVersion; + public int MinorVersion; + public int BuildNumber; + public int PlatformId; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x80)] public string CSDVersion; + public Int16 ServicePackMajor; + public Int16 ServicePackMinor; + public UInt16 SuiteMask; + public byte ProductType; + public byte Reserved; + + public OSVERSIONINFOEX() + { + OSVersionInfoSize = Marshal.SizeOf(this); + } + + private void StopTheCompilerComplaining() + { + MajorVersion = 0; + MinorVersion = 0; + BuildNumber = 0; + PlatformId = 0; + CSDVersion = String.Empty; + ServicePackMajor = 0; + ServicePackMinor = 0; + SuiteMask = 0; + ProductType = 0; + Reserved = 0; + } + } + + [StructLayout(LayoutKind.Sequential)] + private struct SYSTEM_INFO + { + internal _PROCESSOR_INFO_UNION uProcessorInfo; + public readonly uint dwPageSize; + public readonly IntPtr lpMinimumApplicationAddress; + public readonly IntPtr lpMaximumApplicationAddress; + public readonly IntPtr dwActiveProcessorMask; + public readonly uint dwNumberOfProcessors; + public readonly uint dwProcessorType; + public readonly uint dwAllocationGranularity; + public readonly ushort dwProcessorLevel; + public readonly ushort dwProcessorRevision; + } + + private class VerArchitecture + { + //public const ushort ALPHA64 = 7; + //public const ushort MSIL = 8; + public const ushort AMD64 = 9; + public const ushort IA64 = 6; + public const ushort INTEL = 0; + //public const ushort IA32_ON_WIN64 = 10; + + public const ushort UNKNOWN = 0xFFFF; + + private VerArchitecture() + { + } + } + + private class VerPlatformId + { + public const Int32 Win32NT = 2; + public const Int32 Win32Windows = 1; + public const Int32 Win32s = 0; + public const Int32 WinCE = 3; + + private VerPlatformId() + { + } + } + + private class VerProductType + { + public const byte VER_NT_DOMAIN_CONTROLLER = 0x00000002; + public const byte VER_NT_SERVER = 0x00000003; + public const byte VER_NT_WORKSTATION = 0x00000001; + + private VerProductType() + { + } + } + + private class VerSuiteMask + { + public const UInt32 VER_SERVER_NT = 0x80000000; + public const UInt16 VER_SUITE_BACKOFFICE = 0x00000004; + public const UInt16 VER_SUITE_BLADE = 0x00000400; + public const UInt16 VER_SUITE_COMMUNICATIONS = 0x00000008; + public const UInt16 VER_SUITE_DATACENTER = 0x00000080; + public const UInt16 VER_SUITE_EMBEDDEDNT = 0x00000040; + public const UInt16 VER_SUITE_EMBEDDED_RESTRICTED = 0x00000800; + public const UInt16 VER_SUITE_ENTERPRISE = 0x00000002; + public const UInt16 VER_SUITE_PERSONAL = 0x00000200; + public const UInt16 VER_SUITE_SINGLEUSERTS = 0x00000100; + public const UInt16 VER_SUITE_SMALLBUSINESS = 0x00000001; + public const UInt16 VER_SUITE_SMALLBUSINESS_RESTRICTED = 0x00000020; + public const UInt16 VER_SUITE_TERMINAL = 0x00000010; + public const UInt32 VER_WORKSTATION_NT = 0x40000000; + + private VerSuiteMask() + { + } + } + + [StructLayout(LayoutKind.Explicit)] + private struct _PROCESSOR_INFO_UNION + { + [FieldOffset(0)] internal readonly uint dwOemId; + [FieldOffset(0)] internal readonly ushort wProcessorArchitecture; + [FieldOffset(2)] internal readonly ushort wReserved; + } + + //----------------------------------------------------------------------------- + } + + // OperatingSystemVersion + + //----------------------------------------------------------------------------- } \ No newline at end of file diff --git a/source/ch/cyberduck/core/RFC2253.cs b/core/src/main/csharp/ch/cyberduck/core/RFC2253.cs similarity index 96% rename from source/ch/cyberduck/core/RFC2253.cs rename to core/src/main/csharp/ch/cyberduck/core/RFC2253.cs index 6123543a60..00363357e2 100644 --- a/source/ch/cyberduck/core/RFC2253.cs +++ b/core/src/main/csharp/ch/cyberduck/core/RFC2253.cs @@ -1,505 +1,505 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using System.Collections; -using System.Diagnostics; - -namespace Ch.Cyberduck.Core -{ - internal class RFC2253 - { - private static string hexvalid = "0123456789abcdefABCDEF"; - private static string special = ",=+<>#;"; - - internal static ArrayList - parse(string data) - { - ArrayList results = new ArrayList(); - ArrayList current = new ArrayList(); - int pos = 0; - while (pos < data.Length) - { - current.Add(parseNameComponent(data, ref pos)); - eatWhite(data, ref pos); - if (pos < data.Length && data[pos] == ',') - { - ++pos; - } - else if (pos < data.Length && data[pos] == ';') - { - ++pos; - results.Add(current); - current = new ArrayList(); - } - else if (pos < data.Length) - { - throw new ParseException("expected ',' or ';' at `" + data.Substring(pos) + "'"); - } - } - if (current.Count > 0) - { - results.Add(current); - } - - return results; - } - - internal static ArrayList - parseStrict(string data) - { - ArrayList results = new ArrayList(); - int pos = 0; - while (pos < data.Length) - { - results.Add(parseNameComponent(data, ref pos)); - eatWhite(data, ref pos); - if (pos < data.Length && - (data[pos] == ',' || data[pos] == ';')) - { - ++pos; - } - else if (pos < data.Length) - { - throw new ParseException("expected ',' or ';' at `" + data.Substring(pos) + "'"); - } - } - return results; - } - - public static string - unescape(string data) - { - if (data.Length == 0) - { - return data; - } - - if (data[0] == '"') - { - if (data[data.Length - 1] != '"') - { - throw new ParseException("unescape: missing \""); - } - // - // Return the string without quotes. - // - return data.Substring(1, data.Length - 2); - } - - // - // Unescape the entire string. - // - string result = String.Empty; - if (data[0] == '#') - { - int pos = 1; - while (pos < data.Length) - { - result += unescapeHex(data, pos); - pos += 2; - } - } - else - { - int pos = 0; - while (pos < data.Length) - { - if (data[pos] != '\\') - { - result += data[pos]; - ++pos; - } - else - { - ++pos; - if (pos >= data.Length) - { - throw new ParseException("unescape: invalid escape sequence"); - } - if (special.IndexOf(data[pos]) != -1 || data[pos] != '\\' || data[pos] != '"') - { - result += data[pos]; - ++pos; - } - else - { - result += unescapeHex(data, pos); - pos += 2; - } - } - } - } - return result; - } - - private static int - hexToInt(char v) - { - if (v >= '0' && v <= '9') - { - return v - '0'; - } - if (v >= 'a' && v <= 'f') - { - return 10 + (v - 'a'); - } - if (v >= 'A' && v <= 'F') - { - return 10 + (v - 'A'); - } - throw new ParseException("unescape: invalid hex pair"); - } - - private static char - unescapeHex(string data, int pos) - { - Debug.Assert(pos < data.Length); - if (pos + 2 >= data.Length) - { - throw new ParseException("unescape: invalid hex pair"); - } - return (char) (hexToInt(data[pos])*16 + hexToInt(data[pos + 1])); - } - - private static RDNPair - parseNameComponent(string data, ref int pos) - { - RDNPair result = parseAttributeTypeAndValue(data, ref pos); - while (pos < data.Length) - { - eatWhite(data, ref pos); - if (pos < data.Length && data[pos] == '+') - { - ++pos; - } - else - { - break; - } - RDNPair p = parseAttributeTypeAndValue(data, ref pos); - result.value += "+"; - result.value += p.key; - result.value += '='; - result.value += p.value; - } - return result; - } - - private static RDNPair - parseAttributeTypeAndValue(string data, ref int pos) - { - RDNPair p = new RDNPair(); - p.key = parseAttributeType(data, ref pos); - eatWhite(data, ref pos); - if (pos >= data.Length) - { - throw new ParseException("invalid attribute type/value pair (unexpected end of data)"); - } - if (data[pos] != '=') - { - throw new ParseException("invalid attribute type/value pair (missing =). remainder: " + - data.Substring(pos)); - } - ++pos; - p.value = parseAttributeValue(data, ref pos); - return p; - } - - private static string - parseAttributeType(string data, ref int pos) - { - eatWhite(data, ref pos); - if (pos >= data.Length) - { - throw new ParseException("invalid attribute type (expected end of data)"); - } - - string result = String.Empty; - - // - // RFC 1779. - // ::= 1*( ) | "OID." | "oid." - // ::= | "." - // RFC 2253: - // attributeType = (ALPHA 1*keychar) | oid - // keychar = ALPHA | DIGIT | "-" - // oid = 1*DIGIT *("." 1*DIGIT) - // - // In section 4 of RFC 2253 the document says: - // Implementations MUST allow an oid in the attribute type to be - // prefixed by one of the character strings "oid." or "OID.". - // - // Here we must also check for "oid." and "OID." before parsing - // according to the ALPHA KEYCHAR* rule. - // - // First the OID case. - // - if (Char.IsDigit(data[pos]) || - (data.Length - pos >= 4 && (data.Substring(pos, 4) == "oid." || - data.Substring(pos, 4) == "OID."))) - { - if (!Char.IsDigit(data[pos])) - { - result += data.Substring(pos, 4); - pos += 4; - } - - while (true) - { - // 1*DIGIT - while (pos < data.Length && Char.IsDigit(data[pos])) - { - result += data[pos]; - ++pos; - } - // "." 1*DIGIT - if (pos < data.Length && data[pos] == '.') - { - result += data[pos]; - ++pos; - // 1*DIGIT must follow "." - if (pos < data.Length && !Char.IsDigit(data[pos])) - { - throw new ParseException("invalid attribute type (expected end of data)"); - } - } - else - { - break; - } - } - } - else if (Char.IsUpper(data[pos]) || - Char.IsLower(data[pos])) - { - // - // The grammar is wrong in this case. It should be ALPHA - // KEYCHAR* otherwise it will not accept "O" as a valid - // attribute type. - // - result += data[pos]; - ++pos; - // 1* KEYCHAR - while (pos < data.Length && - (Char.IsDigit(data[pos]) || - Char.IsUpper(data[pos]) || - Char.IsLower(data[pos]) || - data[pos] == '-')) - { - result += data[pos]; - ++pos; - } - } - else - { - throw new ParseException("invalid attribute type"); - } - return result; - } - - private static string - parseAttributeValue(string data, ref int pos) - { - eatWhite(data, ref pos); - string result = String.Empty; - if (pos >= data.Length) - { - return result; - } - - // - // RFC 2253 - // # hexstring - // - if (data[pos] == '#') - { - result += data[pos]; - ++pos; - while (true) - { - string h = parseHexPair(data, ref pos, true); - if (h.Length == 0) - { - break; - } - result += h; - } - } - // - // RFC 2253 - // QUOTATION *( quotechar | pair ) QUOTATION ; only from v2 - // quotechar = - // - else if (data[pos] == '"') - { - result += data[pos]; - ++pos; - while (true) - { - if (pos >= data.Length) - { - throw new ParseException("invalid attribute value (unexpected end of data)"); - } - // final terminating " - if (data[pos] == '"') - { - result += data[pos]; - ++pos; - break; - } - // any character except '\' - else if (data[pos] != '\\') - { - result += data[pos]; - ++pos; - } - // pair '\' - else - { - result += parsePair(data, ref pos); - } - } - } - // - // RFC 2253 - // * (stringchar | pair) - // stringchar = - // - else - { - while (pos < data.Length) - { - if (data[pos] == '\\') - { - result += parsePair(data, ref pos); - } - else if (special.IndexOf(data[pos]) == -1 && data[pos] != '"') - { - result += data[pos]; - ++pos; - } - else - { - break; - } - } - } - return result; - } - - // - // RFC2253: - // pair = "\" ( special | "\" | QUOTATION | hexpair ) - // - private static string - parsePair(string data, ref int pos) - { - string result = String.Empty; - - Debug.Assert(data[pos] == '\\'); - result += data[pos]; - ++pos; - - if (pos >= data.Length) - { - throw new ParseException("invalid escape format (unexpected end of data)"); - } - - if (special.IndexOf(data[pos]) != -1 || data[pos] != '\\' || - data[pos] != '"') - { - result += data[pos]; - ++pos; - return result; - } - return parseHexPair(data, ref pos, false); - } - - // - // RFC 2253 - // hexpair = hexchar hexchar - // - private static string - parseHexPair(string data, ref int pos, bool allowEmpty) - { - string result = String.Empty; - if (pos < data.Length && hexvalid.IndexOf(data[pos]) != -1) - { - result += data[pos]; - ++pos; - } - if (pos < data.Length && hexvalid.IndexOf(data[pos]) != -1) - { - result += data[pos]; - ++pos; - } - if (result.Length != 2) - { - if (allowEmpty && result.Length == 0) - { - return result; - } - throw new ParseException("invalid hex format"); - } - return result; - } - - // - // RFC 2253: - // - // Implementations MUST allow for space (' ' ASCII 32) characters to be - // present between name-component and ',', between attributeTypeAndValue - // and '+', between attributeType and '=', and between '=' and - // attributeValue. These space characters are ignored when parsing. - // - private static void - eatWhite(string data, ref int pos) - { - while (pos < data.Length && data[pos] == ' ') - { - ++pos; - } - } - - internal class ParseException : Exception - { - internal string reason; - - internal ParseException() - { - } - - internal ParseException(string reason) - { - this.reason = reason; - } - - internal string - name() - { - return "RFC2253::ParseException"; - } - } - - internal struct RDNPair - { - internal string key; - internal string value; - } ; - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using System.Collections; +using System.Diagnostics; + +namespace Ch.Cyberduck.Core +{ + internal class RFC2253 + { + private static string hexvalid = "0123456789abcdefABCDEF"; + private static string special = ",=+<>#;"; + + internal static ArrayList + parse(string data) + { + ArrayList results = new ArrayList(); + ArrayList current = new ArrayList(); + int pos = 0; + while (pos < data.Length) + { + current.Add(parseNameComponent(data, ref pos)); + eatWhite(data, ref pos); + if (pos < data.Length && data[pos] == ',') + { + ++pos; + } + else if (pos < data.Length && data[pos] == ';') + { + ++pos; + results.Add(current); + current = new ArrayList(); + } + else if (pos < data.Length) + { + throw new ParseException("expected ',' or ';' at `" + data.Substring(pos) + "'"); + } + } + if (current.Count > 0) + { + results.Add(current); + } + + return results; + } + + internal static ArrayList + parseStrict(string data) + { + ArrayList results = new ArrayList(); + int pos = 0; + while (pos < data.Length) + { + results.Add(parseNameComponent(data, ref pos)); + eatWhite(data, ref pos); + if (pos < data.Length && + (data[pos] == ',' || data[pos] == ';')) + { + ++pos; + } + else if (pos < data.Length) + { + throw new ParseException("expected ',' or ';' at `" + data.Substring(pos) + "'"); + } + } + return results; + } + + public static string + unescape(string data) + { + if (data.Length == 0) + { + return data; + } + + if (data[0] == '"') + { + if (data[data.Length - 1] != '"') + { + throw new ParseException("unescape: missing \""); + } + // + // Return the string without quotes. + // + return data.Substring(1, data.Length - 2); + } + + // + // Unescape the entire string. + // + string result = String.Empty; + if (data[0] == '#') + { + int pos = 1; + while (pos < data.Length) + { + result += unescapeHex(data, pos); + pos += 2; + } + } + else + { + int pos = 0; + while (pos < data.Length) + { + if (data[pos] != '\\') + { + result += data[pos]; + ++pos; + } + else + { + ++pos; + if (pos >= data.Length) + { + throw new ParseException("unescape: invalid escape sequence"); + } + if (special.IndexOf(data[pos]) != -1 || data[pos] != '\\' || data[pos] != '"') + { + result += data[pos]; + ++pos; + } + else + { + result += unescapeHex(data, pos); + pos += 2; + } + } + } + } + return result; + } + + private static int + hexToInt(char v) + { + if (v >= '0' && v <= '9') + { + return v - '0'; + } + if (v >= 'a' && v <= 'f') + { + return 10 + (v - 'a'); + } + if (v >= 'A' && v <= 'F') + { + return 10 + (v - 'A'); + } + throw new ParseException("unescape: invalid hex pair"); + } + + private static char + unescapeHex(string data, int pos) + { + Debug.Assert(pos < data.Length); + if (pos + 2 >= data.Length) + { + throw new ParseException("unescape: invalid hex pair"); + } + return (char) (hexToInt(data[pos])*16 + hexToInt(data[pos + 1])); + } + + private static RDNPair + parseNameComponent(string data, ref int pos) + { + RDNPair result = parseAttributeTypeAndValue(data, ref pos); + while (pos < data.Length) + { + eatWhite(data, ref pos); + if (pos < data.Length && data[pos] == '+') + { + ++pos; + } + else + { + break; + } + RDNPair p = parseAttributeTypeAndValue(data, ref pos); + result.value += "+"; + result.value += p.key; + result.value += '='; + result.value += p.value; + } + return result; + } + + private static RDNPair + parseAttributeTypeAndValue(string data, ref int pos) + { + RDNPair p = new RDNPair(); + p.key = parseAttributeType(data, ref pos); + eatWhite(data, ref pos); + if (pos >= data.Length) + { + throw new ParseException("invalid attribute type/value pair (unexpected end of data)"); + } + if (data[pos] != '=') + { + throw new ParseException("invalid attribute type/value pair (missing =). remainder: " + + data.Substring(pos)); + } + ++pos; + p.value = parseAttributeValue(data, ref pos); + return p; + } + + private static string + parseAttributeType(string data, ref int pos) + { + eatWhite(data, ref pos); + if (pos >= data.Length) + { + throw new ParseException("invalid attribute type (expected end of data)"); + } + + string result = String.Empty; + + // + // RFC 1779. + // ::= 1*( ) | "OID." | "oid." + // ::= | "." + // RFC 2253: + // attributeType = (ALPHA 1*keychar) | oid + // keychar = ALPHA | DIGIT | "-" + // oid = 1*DIGIT *("." 1*DIGIT) + // + // In section 4 of RFC 2253 the document says: + // Implementations MUST allow an oid in the attribute type to be + // prefixed by one of the character strings "oid." or "OID.". + // + // Here we must also check for "oid." and "OID." before parsing + // according to the ALPHA KEYCHAR* rule. + // + // First the OID case. + // + if (Char.IsDigit(data[pos]) || + (data.Length - pos >= 4 && (data.Substring(pos, 4) == "oid." || + data.Substring(pos, 4) == "OID."))) + { + if (!Char.IsDigit(data[pos])) + { + result += data.Substring(pos, 4); + pos += 4; + } + + while (true) + { + // 1*DIGIT + while (pos < data.Length && Char.IsDigit(data[pos])) + { + result += data[pos]; + ++pos; + } + // "." 1*DIGIT + if (pos < data.Length && data[pos] == '.') + { + result += data[pos]; + ++pos; + // 1*DIGIT must follow "." + if (pos < data.Length && !Char.IsDigit(data[pos])) + { + throw new ParseException("invalid attribute type (expected end of data)"); + } + } + else + { + break; + } + } + } + else if (Char.IsUpper(data[pos]) || + Char.IsLower(data[pos])) + { + // + // The grammar is wrong in this case. It should be ALPHA + // KEYCHAR* otherwise it will not accept "O" as a valid + // attribute type. + // + result += data[pos]; + ++pos; + // 1* KEYCHAR + while (pos < data.Length && + (Char.IsDigit(data[pos]) || + Char.IsUpper(data[pos]) || + Char.IsLower(data[pos]) || + data[pos] == '-')) + { + result += data[pos]; + ++pos; + } + } + else + { + throw new ParseException("invalid attribute type"); + } + return result; + } + + private static string + parseAttributeValue(string data, ref int pos) + { + eatWhite(data, ref pos); + string result = String.Empty; + if (pos >= data.Length) + { + return result; + } + + // + // RFC 2253 + // # hexstring + // + if (data[pos] == '#') + { + result += data[pos]; + ++pos; + while (true) + { + string h = parseHexPair(data, ref pos, true); + if (h.Length == 0) + { + break; + } + result += h; + } + } + // + // RFC 2253 + // QUOTATION *( quotechar | pair ) QUOTATION ; only from v2 + // quotechar = + // + else if (data[pos] == '"') + { + result += data[pos]; + ++pos; + while (true) + { + if (pos >= data.Length) + { + throw new ParseException("invalid attribute value (unexpected end of data)"); + } + // final terminating " + if (data[pos] == '"') + { + result += data[pos]; + ++pos; + break; + } + // any character except '\' + else if (data[pos] != '\\') + { + result += data[pos]; + ++pos; + } + // pair '\' + else + { + result += parsePair(data, ref pos); + } + } + } + // + // RFC 2253 + // * (stringchar | pair) + // stringchar = + // + else + { + while (pos < data.Length) + { + if (data[pos] == '\\') + { + result += parsePair(data, ref pos); + } + else if (special.IndexOf(data[pos]) == -1 && data[pos] != '"') + { + result += data[pos]; + ++pos; + } + else + { + break; + } + } + } + return result; + } + + // + // RFC2253: + // pair = "\" ( special | "\" | QUOTATION | hexpair ) + // + private static string + parsePair(string data, ref int pos) + { + string result = String.Empty; + + Debug.Assert(data[pos] == '\\'); + result += data[pos]; + ++pos; + + if (pos >= data.Length) + { + throw new ParseException("invalid escape format (unexpected end of data)"); + } + + if (special.IndexOf(data[pos]) != -1 || data[pos] != '\\' || + data[pos] != '"') + { + result += data[pos]; + ++pos; + return result; + } + return parseHexPair(data, ref pos, false); + } + + // + // RFC 2253 + // hexpair = hexchar hexchar + // + private static string + parseHexPair(string data, ref int pos, bool allowEmpty) + { + string result = String.Empty; + if (pos < data.Length && hexvalid.IndexOf(data[pos]) != -1) + { + result += data[pos]; + ++pos; + } + if (pos < data.Length && hexvalid.IndexOf(data[pos]) != -1) + { + result += data[pos]; + ++pos; + } + if (result.Length != 2) + { + if (allowEmpty && result.Length == 0) + { + return result; + } + throw new ParseException("invalid hex format"); + } + return result; + } + + // + // RFC 2253: + // + // Implementations MUST allow for space (' ' ASCII 32) characters to be + // present between name-component and ',', between attributeTypeAndValue + // and '+', between attributeType and '=', and between '=' and + // attributeValue. These space characters are ignored when parsing. + // + private static void + eatWhite(string data, ref int pos) + { + while (pos < data.Length && data[pos] == ' ') + { + ++pos; + } + } + + internal class ParseException : Exception + { + internal string reason; + + internal ParseException() + { + } + + internal ParseException(string reason) + { + this.reason = reason; + } + + internal string + name() + { + return "RFC2253::ParseException"; + } + } + + internal struct RDNPair + { + internal string key; + internal string value; + } ; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/SerializableDictionary.cs b/core/src/main/csharp/ch/cyberduck/core/SerializableDictionary.cs similarity index 96% rename from source/ch/cyberduck/core/SerializableDictionary.cs rename to core/src/main/csharp/ch/cyberduck/core/SerializableDictionary.cs index b3a2dfd561..3464003d21 100644 --- a/source/ch/cyberduck/core/SerializableDictionary.cs +++ b/core/src/main/csharp/ch/cyberduck/core/SerializableDictionary.cs @@ -1,93 +1,93 @@ -// -// Copyright (c) 2009 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@langisch.ch -// - -#region - -using System.Collections.Generic; -using System.Xml; -using System.Xml.Schema; -using System.Xml.Serialization; - -#endregion - -namespace Ch.Cyberduck.Core -{ - [XmlRoot("dictionary")] - public class SerializableDictionary - : Dictionary, IXmlSerializable - { - public XmlSchema GetSchema() - { - return null; - } - - public void ReadXml(XmlReader reader) - { - XmlSerializer keySerializer = new XmlSerializer(typeof (TKey)); - XmlSerializer valueSerializer = new XmlSerializer(typeof (TValue)); - - bool wasEmpty = reader.IsEmptyElement; - reader.Read(); - - if (wasEmpty) - return; - - while (reader.NodeType != XmlNodeType.EndElement) - { - reader.ReadStartElement("item"); - - reader.ReadStartElement("property"); - TKey key = (TKey) keySerializer.Deserialize(reader); - reader.ReadEndElement(); - - reader.ReadStartElement("value"); - TValue value = (TValue) valueSerializer.Deserialize(reader); - reader.ReadEndElement(); - - Add(key, value); - - reader.ReadEndElement(); - reader.MoveToContent(); - } - reader.ReadEndElement(); - } - - public void WriteXml(XmlWriter writer) - { - XmlSerializer keySerializer = new XmlSerializer(typeof (TKey)); - XmlSerializer valueSerializer = new XmlSerializer(typeof (TValue)); - - foreach (TKey key in Keys) - { - writer.WriteStartElement("item"); - - writer.WriteStartElement("property"); - - keySerializer.Serialize(writer, key); - writer.WriteEndElement(); - - writer.WriteStartElement("value"); - TValue value = this[key]; - valueSerializer.Serialize(writer, value); - writer.WriteEndElement(); - - writer.WriteEndElement(); - } - } - } +// +// Copyright (c) 2009 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@langisch.ch +// + +#region + +using System.Collections.Generic; +using System.Xml; +using System.Xml.Schema; +using System.Xml.Serialization; + +#endregion + +namespace Ch.Cyberduck.Core +{ + [XmlRoot("dictionary")] + public class SerializableDictionary + : Dictionary, IXmlSerializable + { + public XmlSchema GetSchema() + { + return null; + } + + public void ReadXml(XmlReader reader) + { + XmlSerializer keySerializer = new XmlSerializer(typeof (TKey)); + XmlSerializer valueSerializer = new XmlSerializer(typeof (TValue)); + + bool wasEmpty = reader.IsEmptyElement; + reader.Read(); + + if (wasEmpty) + return; + + while (reader.NodeType != XmlNodeType.EndElement) + { + reader.ReadStartElement("item"); + + reader.ReadStartElement("property"); + TKey key = (TKey) keySerializer.Deserialize(reader); + reader.ReadEndElement(); + + reader.ReadStartElement("value"); + TValue value = (TValue) valueSerializer.Deserialize(reader); + reader.ReadEndElement(); + + Add(key, value); + + reader.ReadEndElement(); + reader.MoveToContent(); + } + reader.ReadEndElement(); + } + + public void WriteXml(XmlWriter writer) + { + XmlSerializer keySerializer = new XmlSerializer(typeof (TKey)); + XmlSerializer valueSerializer = new XmlSerializer(typeof (TValue)); + + foreach (TKey key in Keys) + { + writer.WriteStartElement("item"); + + writer.WriteStartElement("property"); + + keySerializer.Serialize(writer, key); + writer.WriteEndElement(); + + writer.WriteStartElement("value"); + TValue value = this[key]; + valueSerializer.Serialize(writer, value); + writer.WriteEndElement(); + + writer.WriteEndElement(); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/Shell32.cs b/core/src/main/csharp/ch/cyberduck/core/Shell32.cs similarity index 97% rename from source/ch/cyberduck/core/Shell32.cs rename to core/src/main/csharp/ch/cyberduck/core/Shell32.cs index c9d412edfe..0310bd6cba 100644 --- a/source/ch/cyberduck/core/Shell32.cs +++ b/core/src/main/csharp/ch/cyberduck/core/Shell32.cs @@ -1,124 +1,124 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Runtime.InteropServices; - -namespace Ch.Cyberduck.Core -{ - /// - /// Wraps necessary Shell32.dll structures and functions required to retrieve Icon Handles using SHGetFileInfo. Code - /// courtesy of MSDN Cold Rooster Consulting case study. - /// - /// - // This code has been left largely untouched from that in the CRC example. The main changes have been moving - // the icon reading code over to the IconReader type. - public class Shell32 - { - public const uint BIF_BROWSEFORCOMPUTER = 0x1000; - public const uint BIF_BROWSEFORPRINTER = 0x2000; - public const uint BIF_BROWSEINCLUDEFILES = 0x4000; - public const uint BIF_BROWSEINCLUDEURLS = 0x0080; - public const uint BIF_DONTGOBELOWDOMAIN = 0x0002; - public const uint BIF_EDITBOX = 0x0010; - public const uint BIF_NEWDIALOGSTYLE = 0x0040; - public const uint BIF_RETURNFSANCESTORS = 0x0008; - public const uint BIF_RETURNONLYFSDIRS = 0x0001; - public const uint BIF_SHAREABLE = 0x8000; - public const uint BIF_STATUSTEXT = 0x0004; - public const uint BIF_USENEWUI = (BIF_NEWDIALOGSTYLE | BIF_EDITBOX); - public const uint BIF_VALIDATE = 0x0020; - public const uint FILE_ATTRIBUTE_DIRECTORY = 0x00000010; - public const uint FILE_ATTRIBUTE_NORMAL = 0x00000080; - public const int MAX_PATH = 256; - public const uint SHGFI_ADDOVERLAYS = 0x000000020; // apply the appropriate overlays - - public const uint SHGFI_ATTRIBUTES = 0x000000800; // get attributes - public const uint SHGFI_ATTR_SPECIFIED = 0x000020000; // get only specified attributes - public const uint SHGFI_DISPLAYNAME = 0x000000200; // get display name - public const uint SHGFI_EXETYPE = 0x000002000; // return exe type - public const uint SHGFI_ICON = 0x000000100; // get icon - public const uint SHGFI_ICONLOCATION = 0x000001000; // get icon location - public const uint SHGFI_LARGEICON = 0x000000000; // get large icon - public const uint SHGFI_LINKOVERLAY = 0x000008000; // put a link overlay on icon - public const uint SHGFI_OPENICON = 0x000000002; // get open icon - public const uint SHGFI_OVERLAYINDEX = 0x000000040; // Get the index of the overlay - public const uint SHGFI_PIDL = 0x000000008; // pszPath is a pidl - public const uint SHGFI_SELECTED = 0x000010000; // show icon in selected state - public const uint SHGFI_SHELLICONSIZE = 0x000000004; // get shell size icon - public const uint SHGFI_SMALLICON = 0x000000001; // get small icon - public const uint SHGFI_SYSICONINDEX = 0x000004000; // get system icon index - public const uint SHGFI_TYPENAME = 0x000000400; // get type name - public const uint SHGFI_USEFILEATTRIBUTES = 0x000000010; // use passed dwFileAttribute - - [DllImport("shell32.dll", CharSet = CharSet.Auto)] - public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, - uint cbFileInfo, uint uFlags); - - [StructLayout(LayoutKind.Sequential)] - public struct BROWSEINFO - { - public IntPtr hwndOwner; - public IntPtr pidlRoot; - public IntPtr pszDisplayName; - [MarshalAs(UnmanagedType.LPTStr)] public string lpszTitle; - public uint ulFlags; - public IntPtr lpfn; - public int lParam; - public IntPtr iImage; - } - - [StructLayout(LayoutKind.Sequential)] - public struct ITEMIDLIST - { - public SHITEMID mkid; - } - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] - public struct SHFILEINFO - { - public IntPtr hIcon; - public int iIcon; - public uint dwAttributes; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName; - }; - - [StructLayout(LayoutKind.Sequential)] - public struct SHITEMID - { - public ushort cb; - [MarshalAs(UnmanagedType.LPArray)] public byte[] abID; - } - } - - /// - /// Wraps necessary functions imported from User32.dll. Code courtesy of MSDN Cold Rooster Consulting example. - /// - public class User32 - { - /// - /// Provides access to function required to delete handle. This method is used internally - /// and is not required to be called separately. - /// - /// Pointer to icon handle. - /// N/A - [DllImport("User32.dll")] - public static extern int DestroyIcon(IntPtr hIcon); - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Runtime.InteropServices; + +namespace Ch.Cyberduck.Core +{ + /// + /// Wraps necessary Shell32.dll structures and functions required to retrieve Icon Handles using SHGetFileInfo. Code + /// courtesy of MSDN Cold Rooster Consulting case study. + /// + /// + // This code has been left largely untouched from that in the CRC example. The main changes have been moving + // the icon reading code over to the IconReader type. + public class Shell32 + { + public const uint BIF_BROWSEFORCOMPUTER = 0x1000; + public const uint BIF_BROWSEFORPRINTER = 0x2000; + public const uint BIF_BROWSEINCLUDEFILES = 0x4000; + public const uint BIF_BROWSEINCLUDEURLS = 0x0080; + public const uint BIF_DONTGOBELOWDOMAIN = 0x0002; + public const uint BIF_EDITBOX = 0x0010; + public const uint BIF_NEWDIALOGSTYLE = 0x0040; + public const uint BIF_RETURNFSANCESTORS = 0x0008; + public const uint BIF_RETURNONLYFSDIRS = 0x0001; + public const uint BIF_SHAREABLE = 0x8000; + public const uint BIF_STATUSTEXT = 0x0004; + public const uint BIF_USENEWUI = (BIF_NEWDIALOGSTYLE | BIF_EDITBOX); + public const uint BIF_VALIDATE = 0x0020; + public const uint FILE_ATTRIBUTE_DIRECTORY = 0x00000010; + public const uint FILE_ATTRIBUTE_NORMAL = 0x00000080; + public const int MAX_PATH = 256; + public const uint SHGFI_ADDOVERLAYS = 0x000000020; // apply the appropriate overlays + + public const uint SHGFI_ATTRIBUTES = 0x000000800; // get attributes + public const uint SHGFI_ATTR_SPECIFIED = 0x000020000; // get only specified attributes + public const uint SHGFI_DISPLAYNAME = 0x000000200; // get display name + public const uint SHGFI_EXETYPE = 0x000002000; // return exe type + public const uint SHGFI_ICON = 0x000000100; // get icon + public const uint SHGFI_ICONLOCATION = 0x000001000; // get icon location + public const uint SHGFI_LARGEICON = 0x000000000; // get large icon + public const uint SHGFI_LINKOVERLAY = 0x000008000; // put a link overlay on icon + public const uint SHGFI_OPENICON = 0x000000002; // get open icon + public const uint SHGFI_OVERLAYINDEX = 0x000000040; // Get the index of the overlay + public const uint SHGFI_PIDL = 0x000000008; // pszPath is a pidl + public const uint SHGFI_SELECTED = 0x000010000; // show icon in selected state + public const uint SHGFI_SHELLICONSIZE = 0x000000004; // get shell size icon + public const uint SHGFI_SMALLICON = 0x000000001; // get small icon + public const uint SHGFI_SYSICONINDEX = 0x000004000; // get system icon index + public const uint SHGFI_TYPENAME = 0x000000400; // get type name + public const uint SHGFI_USEFILEATTRIBUTES = 0x000000010; // use passed dwFileAttribute + + [DllImport("shell32.dll", CharSet = CharSet.Auto)] + public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, + uint cbFileInfo, uint uFlags); + + [StructLayout(LayoutKind.Sequential)] + public struct BROWSEINFO + { + public IntPtr hwndOwner; + public IntPtr pidlRoot; + public IntPtr pszDisplayName; + [MarshalAs(UnmanagedType.LPTStr)] public string lpszTitle; + public uint ulFlags; + public IntPtr lpfn; + public int lParam; + public IntPtr iImage; + } + + [StructLayout(LayoutKind.Sequential)] + public struct ITEMIDLIST + { + public SHITEMID mkid; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + public struct SHFILEINFO + { + public IntPtr hIcon; + public int iIcon; + public uint dwAttributes; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName; + }; + + [StructLayout(LayoutKind.Sequential)] + public struct SHITEMID + { + public ushort cb; + [MarshalAs(UnmanagedType.LPArray)] public byte[] abID; + } + } + + /// + /// Wraps necessary functions imported from User32.dll. Code courtesy of MSDN Cold Rooster Consulting example. + /// + public class User32 + { + /// + /// Provides access to function required to delete handle. This method is used internally + /// and is not required to be called separately. + /// + /// Pointer to icon handle. + /// N/A + [DllImport("User32.dll")] + public static extern int DestroyIcon(IntPtr hIcon); + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/SshTerminalService.cs b/core/src/main/csharp/ch/cyberduck/core/SshTerminalService.cs similarity index 97% rename from source/ch/cyberduck/core/SshTerminalService.cs rename to core/src/main/csharp/ch/cyberduck/core/SshTerminalService.cs index de6e1e1041..a6e98127c2 100644 --- a/source/ch/cyberduck/core/SshTerminalService.cs +++ b/core/src/main/csharp/ch/cyberduck/core/SshTerminalService.cs @@ -1,48 +1,48 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.IO; -using ch.cyberduck.core; -using ch.cyberduck.core.local; -using ch.cyberduck.core.preferences; -using Path = ch.cyberduck.core.Path; - -namespace Ch.Cyberduck.Core -{ - public class SshTerminalService : TerminalService - { - public void open(Host host, Path workdir) - { - string tempFile = System.IO.Path.GetTempFileName(); - bool identity = host.getCredentials().isPublicKeyAuthentication(); - TextWriter tw = new StreamWriter(tempFile); - tw.WriteLine("cd {0} && exec $SHELL", workdir.getAbsolute()); - tw.Close(); - String ssh = String.Format(PreferencesFactory.get().getProperty("terminal.command.ssh.args"), - identity - ? "-i " + host.getCredentials().getIdentity().getAbsolute() - : String.Empty, host.getCredentials().getUsername(), host.getHostname(), - Convert.ToString(host.getPort()), tempFile); - ApplicationLauncherFactory.get() - .open( - new Application(PreferencesFactory.get().getProperty("terminal.command.ssh"), - null), ssh); - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.IO; +using ch.cyberduck.core; +using ch.cyberduck.core.local; +using ch.cyberduck.core.preferences; +using Path = ch.cyberduck.core.Path; + +namespace Ch.Cyberduck.Core +{ + public class SshTerminalService : TerminalService + { + public void open(Host host, Path workdir) + { + string tempFile = System.IO.Path.GetTempFileName(); + bool identity = host.getCredentials().isPublicKeyAuthentication(); + TextWriter tw = new StreamWriter(tempFile); + tw.WriteLine("cd {0} && exec $SHELL", workdir.getAbsolute()); + tw.Close(); + String ssh = String.Format(PreferencesFactory.get().getProperty("terminal.command.ssh.args"), + identity + ? "-i " + host.getCredentials().getIdentity().getAbsolute() + : String.Empty, host.getCredentials().getUsername(), host.getHostname(), + Convert.ToString(host.getPort()), tempFile); + ApplicationLauncherFactory.get() + .open( + new Application(PreferencesFactory.get().getProperty("terminal.command.ssh"), + null), ssh); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/core/SystemCertificateStore.cs b/core/src/main/csharp/ch/cyberduck/core/SystemCertificateStore.cs similarity index 97% rename from source/ch/cyberduck/ui/core/SystemCertificateStore.cs rename to core/src/main/csharp/ch/cyberduck/core/SystemCertificateStore.cs index 52e71c1d9e..253d7bd332 100644 --- a/source/ch/cyberduck/ui/core/SystemCertificateStore.cs +++ b/core/src/main/csharp/ch/cyberduck/core/SystemCertificateStore.cs @@ -1,250 +1,250 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Security.Cryptography.X509Certificates; -using System.Windows.Forms; -using ch.cyberduck.core; -using ch.cyberduck.core.exception; -using ch.cyberduck.core.preferences; -using Ch.Cyberduck.Core.Ssl; -using Ch.Cyberduck.Ui.Winforms.Taskdialog; -using java.io; -using java.security; -using java.security.cert; -using java.util; -using org.apache.log4j; -using X509Certificate = java.security.cert.X509Certificate; - -namespace Ch.Cyberduck.Ui.Core -{ - public class SystemCertificateStore : CertificateStore - { - private static readonly Logger Log = Logger.getLogger(typeof (SystemCertificateStore).FullName); - - public bool isTrusted(String hostName, List certs) - { - X509Certificate2 serverCert = ConvertCertificate(certs.iterator().next() as X509Certificate); - X509Chain chain = new X509Chain(); - chain.ChainPolicy.RevocationMode = - PreferencesFactory.get().getBoolean("connection.ssl.x509.revocation.online") - ? X509RevocationMode.Online - : X509RevocationMode.Offline; - chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 0, 0, 10); // set timeout to 10 seconds - chain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag; - - for (int index = 1; index < certs.size(); index++) - { - chain.ChainPolicy.ExtraStore.Add(ConvertCertificate(certs.get(index) as X509Certificate)); - } - chain.Build(serverCert); - - bool isException = CheckForException(hostName, serverCert); - if (isException) - { - // Exceptions always have precendence - return true; - } - - string errorFromChainStatus = GetErrorFromChainStatus(chain, hostName); - bool certError = null != errorFromChainStatus; - bool hostnameMismatch = hostName != null && - !HostnameVerifier.CheckServerIdentity(certs.iterator().next() as X509Certificate, - serverCert, hostName); - - // check if host name matches - if (null == errorFromChainStatus && hostnameMismatch) - { - errorFromChainStatus = - LocaleFactory.localizedString( - "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “%@” which could put your confidential information at risk. Would you like to connect to the server anyway?", - "Keychain").Replace("%@", hostName); - } - - if (null != errorFromChainStatus) - { - while (true) - { - TaskDialog d = new TaskDialog(); - DialogResult r = - d.ShowCommandBox(LocaleFactory.localizedString("This certificate is not valid", "Keychain"), - LocaleFactory.localizedString("This certificate is not valid", "Keychain"), - errorFromChainStatus, null, null, LocaleFactory.localizedString("Always Trust", "Keychain"), - String.Format("{0}|{1}|{2}", LocaleFactory.localizedString("Continue", "Credentials"), - LocaleFactory.localizedString("Disconnect"), - LocaleFactory.localizedString("Show Certificate", "Keychain")), false, SysIcons.Warning, - SysIcons.Information); - if (r == DialogResult.OK) - { - if (d.CommandButtonResult == 0) - { - if (d.VerificationChecked) - { - if (certError) - { - //todo can we use the Trusted People and Third Party Certificate Authority Store? Currently X509Chain is the problem. - AddCertificate(serverCert, StoreName.Root); - } - PreferencesFactory.get() - .setProperty(hostName + ".certificate.accept", serverCert.SubjectName.Name); - } - return true; - } - if (d.CommandButtonResult == 1) - { - return false; - } - if (d.CommandButtonResult == 2) - { - X509Certificate2UI.DisplayCertificate(serverCert); - } - } - } - } - return true; - } - - public bool display(List certificates) - { - if (certificates.isEmpty()) - { - return false; - } - X509Certificate2 cert = ConvertCertificate(certificates.iterator().next() as X509Certificate); - X509Certificate2UI.DisplayCertificate(cert); - return true; - } - - public X509Certificate choose(string[] keyTypes, Principal[] issuers, string hostname, string prompt) - { - X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); - try - { - store.Open(OpenFlags.ReadOnly); - X509Certificate2Collection found = new X509Certificate2Collection(); - foreach (Principal issuer in issuers) - { - // JBA 20141028, windows is expecting EMAILADDRESS in issuer name, but the rfc1779 emmits it as an OID, which makes it not match - // this is not the best way to fix the issue, but I can't find anyway to get an X500Principal to not emit EMAILADDRESS as an OID - string rfc1779 = issuer.toString() - .Replace("EMAILADDRESS=", "E=") - .Replace("ST=", "S=") - .Replace("SP=", "S="); - Log.debug("Query certificate store for issuer name " + rfc1779); - - X509Certificate2Collection certificates = - store.Certificates.Find(X509FindType.FindByIssuerDistinguishedName, rfc1779, true); - found.AddRange(certificates); - foreach (X509Certificate2 certificate in certificates) - { - Log.debug("Found certificate with DN " + certificate.IssuerName.Name); - } - } - X509Certificate2Collection selected = X509Certificate2UI.SelectFromCollection(found, - LocaleFactory.localizedString("Choose"), prompt, X509SelectionFlag.SingleSelection); - foreach (X509Certificate2 c in selected) - { - return ConvertCertificate(c); - } - throw new ConnectionCanceledException(); - } - finally - { - store.Close(); - } - } - - public static X509Certificate2 ConvertCertificate(X509Certificate certificate) - { - return new X509Certificate2(certificate.getEncoded()); - } - - public static X509Certificate ConvertCertificate(X509Certificate2 certificate) - { - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - return (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(certificate.RawData)); - } - - private string GetErrorFromChainStatus(X509Chain chain, string hostName) - { - string error = null; - foreach (X509ChainStatus status in chain.ChainStatus) - { - if ((status.Status & X509ChainStatusFlags.RevocationStatusUnknown) == - X509ChainStatusFlags.RevocationStatusUnknown || - ((status.Status & X509ChainStatusFlags.OfflineRevocation) == X509ChainStatusFlags.OfflineRevocation)) - { - //due to the offline revocation check - continue; - } - if ((status.Status & X509ChainStatusFlags.NotTimeValid) == X509ChainStatusFlags.NotTimeValid) - { - //certificate is expired, CSSM_CERT_STATUS_EXPIRED - error = - LocaleFactory.localizedString( - "The certificate for this server has expired. You might be connecting to a server that is pretending to be “%@” which could put your confidential information at risk. Would you like to connect to the server anyway?", - "Keychain").Replace("%@", hostName); - return error; - } - if (((status.Status & X509ChainStatusFlags.UntrustedRoot) == X509ChainStatusFlags.UntrustedRoot) || - (status.Status & X509ChainStatusFlags.PartialChain) == X509ChainStatusFlags.PartialChain) - { - // untrusted self-signed, !CSSM_CERT_STATUS_IS_IN_ANCHORS && CSSM_CERT_STATUS_IS_ROOT - error = - LocaleFactory.localizedString( - "The certificate for this server was signed by an unknown certifying authority. You might be connecting to a server that is pretending to be “%@” which could put your confidential information at risk. Would you like to connect to the server anyway?", - "Keychain").Replace("%@", hostName); - return error; - } - - //all other errors we map to !CSSM_CERT_STATUS_IS_IN_ANCHORS - Log.debug("Certificate error" + status.StatusInformation); - error = - LocaleFactory.localizedString( - "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “%@” which could put your confidential information at risk. Would you like to connect to the server anyway?", - "Keychain").Replace("%@", hostName); - } - return error; - } - - private bool CheckForException(string hostname, X509Certificate2 cert) - { - string accCert = PreferencesFactory.get().getProperty(hostname + ".certificate.accept"); - if (Cyberduck.Core.Utils.IsNotBlank(accCert)) - { - return accCert.Equals(cert.SubjectName.Name); - } - return false; - } - - private void AddCertificate(X509Certificate2 cert, StoreName storeName) - { - Log.debug("Add certificate:" + cert.SubjectName.Name); - X509Store store = new X509Store(storeName, StoreLocation.CurrentUser); - try - { - store.Open(OpenFlags.ReadWrite); - store.Add(cert); - } - finally - { - store.Close(); - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Security.Cryptography.X509Certificates; +using System.Windows.Forms; +using ch.cyberduck.core; +using ch.cyberduck.core.exception; +using ch.cyberduck.core.preferences; +using Ch.Cyberduck.Core.Ssl; +using Ch.Cyberduck.Ui.Winforms.Taskdialog; +using java.io; +using java.security; +using java.security.cert; +using java.util; +using org.apache.log4j; +using X509Certificate = java.security.cert.X509Certificate; + +namespace Ch.Cyberduck.Core +{ + public class SystemCertificateStore : CertificateStore + { + private static readonly Logger Log = Logger.getLogger(typeof (SystemCertificateStore).FullName); + + public bool isTrusted(String hostName, List certs) + { + X509Certificate2 serverCert = ConvertCertificate(certs.iterator().next() as X509Certificate); + X509Chain chain = new X509Chain(); + chain.ChainPolicy.RevocationMode = + PreferencesFactory.get().getBoolean("connection.ssl.x509.revocation.online") + ? X509RevocationMode.Online + : X509RevocationMode.Offline; + chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 0, 0, 10); // set timeout to 10 seconds + chain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag; + + for (int index = 1; index < certs.size(); index++) + { + chain.ChainPolicy.ExtraStore.Add(ConvertCertificate(certs.get(index) as X509Certificate)); + } + chain.Build(serverCert); + + bool isException = CheckForException(hostName, serverCert); + if (isException) + { + // Exceptions always have precendence + return true; + } + + string errorFromChainStatus = GetErrorFromChainStatus(chain, hostName); + bool certError = null != errorFromChainStatus; + bool hostnameMismatch = hostName != null && + !HostnameVerifier.CheckServerIdentity(certs.iterator().next() as X509Certificate, + serverCert, hostName); + + // check if host name matches + if (null == errorFromChainStatus && hostnameMismatch) + { + errorFromChainStatus = + LocaleFactory.localizedString( + "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “%@” which could put your confidential information at risk. Would you like to connect to the server anyway?", + "Keychain").Replace("%@", hostName); + } + + if (null != errorFromChainStatus) + { + while (true) + { + TaskDialog d = new TaskDialog(); + DialogResult r = + d.ShowCommandBox(LocaleFactory.localizedString("This certificate is not valid", "Keychain"), + LocaleFactory.localizedString("This certificate is not valid", "Keychain"), + errorFromChainStatus, null, null, LocaleFactory.localizedString("Always Trust", "Keychain"), + String.Format("{0}|{1}|{2}", LocaleFactory.localizedString("Continue", "Credentials"), + LocaleFactory.localizedString("Disconnect"), + LocaleFactory.localizedString("Show Certificate", "Keychain")), false, SysIcons.Warning, + SysIcons.Information); + if (r == DialogResult.OK) + { + if (d.CommandButtonResult == 0) + { + if (d.VerificationChecked) + { + if (certError) + { + //todo can we use the Trusted People and Third Party Certificate Authority Store? Currently X509Chain is the problem. + AddCertificate(serverCert, StoreName.Root); + } + PreferencesFactory.get() + .setProperty(hostName + ".certificate.accept", serverCert.SubjectName.Name); + } + return true; + } + if (d.CommandButtonResult == 1) + { + return false; + } + if (d.CommandButtonResult == 2) + { + X509Certificate2UI.DisplayCertificate(serverCert); + } + } + } + } + return true; + } + + public bool display(List certificates) + { + if (certificates.isEmpty()) + { + return false; + } + X509Certificate2 cert = ConvertCertificate(certificates.iterator().next() as X509Certificate); + X509Certificate2UI.DisplayCertificate(cert); + return true; + } + + public X509Certificate choose(string[] keyTypes, Principal[] issuers, string hostname, string prompt) + { + X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); + try + { + store.Open(OpenFlags.ReadOnly); + X509Certificate2Collection found = new X509Certificate2Collection(); + foreach (Principal issuer in issuers) + { + // JBA 20141028, windows is expecting EMAILADDRESS in issuer name, but the rfc1779 emmits it as an OID, which makes it not match + // this is not the best way to fix the issue, but I can't find anyway to get an X500Principal to not emit EMAILADDRESS as an OID + string rfc1779 = issuer.toString() + .Replace("EMAILADDRESS=", "E=") + .Replace("ST=", "S=") + .Replace("SP=", "S="); + Log.debug("Query certificate store for issuer name " + rfc1779); + + X509Certificate2Collection certificates = + store.Certificates.Find(X509FindType.FindByIssuerDistinguishedName, rfc1779, true); + found.AddRange(certificates); + foreach (X509Certificate2 certificate in certificates) + { + Log.debug("Found certificate with DN " + certificate.IssuerName.Name); + } + } + X509Certificate2Collection selected = X509Certificate2UI.SelectFromCollection(found, + LocaleFactory.localizedString("Choose"), prompt, X509SelectionFlag.SingleSelection); + foreach (X509Certificate2 c in selected) + { + return ConvertCertificate(c); + } + throw new ConnectionCanceledException(); + } + finally + { + store.Close(); + } + } + + public static X509Certificate2 ConvertCertificate(X509Certificate certificate) + { + return new X509Certificate2(certificate.getEncoded()); + } + + public static X509Certificate ConvertCertificate(X509Certificate2 certificate) + { + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + return (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(certificate.RawData)); + } + + private string GetErrorFromChainStatus(X509Chain chain, string hostName) + { + string error = null; + foreach (X509ChainStatus status in chain.ChainStatus) + { + if ((status.Status & X509ChainStatusFlags.RevocationStatusUnknown) == + X509ChainStatusFlags.RevocationStatusUnknown || + ((status.Status & X509ChainStatusFlags.OfflineRevocation) == X509ChainStatusFlags.OfflineRevocation)) + { + //due to the offline revocation check + continue; + } + if ((status.Status & X509ChainStatusFlags.NotTimeValid) == X509ChainStatusFlags.NotTimeValid) + { + //certificate is expired, CSSM_CERT_STATUS_EXPIRED + error = + LocaleFactory.localizedString( + "The certificate for this server has expired. You might be connecting to a server that is pretending to be “%@” which could put your confidential information at risk. Would you like to connect to the server anyway?", + "Keychain").Replace("%@", hostName); + return error; + } + if (((status.Status & X509ChainStatusFlags.UntrustedRoot) == X509ChainStatusFlags.UntrustedRoot) || + (status.Status & X509ChainStatusFlags.PartialChain) == X509ChainStatusFlags.PartialChain) + { + // untrusted self-signed, !CSSM_CERT_STATUS_IS_IN_ANCHORS && CSSM_CERT_STATUS_IS_ROOT + error = + LocaleFactory.localizedString( + "The certificate for this server was signed by an unknown certifying authority. You might be connecting to a server that is pretending to be “%@” which could put your confidential information at risk. Would you like to connect to the server anyway?", + "Keychain").Replace("%@", hostName); + return error; + } + + //all other errors we map to !CSSM_CERT_STATUS_IS_IN_ANCHORS + Log.debug("Certificate error" + status.StatusInformation); + error = + LocaleFactory.localizedString( + "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “%@” which could put your confidential information at risk. Would you like to connect to the server anyway?", + "Keychain").Replace("%@", hostName); + } + return error; + } + + private bool CheckForException(string hostname, X509Certificate2 cert) + { + string accCert = PreferencesFactory.get().getProperty(hostname + ".certificate.accept"); + if (Cyberduck.Core.Utils.IsNotBlank(accCert)) + { + return accCert.Equals(cert.SubjectName.Name); + } + return false; + } + + private void AddCertificate(X509Certificate2 cert, StoreName storeName) + { + Log.debug("Add certificate:" + cert.SubjectName.Name); + X509Store store = new X509Store(storeName, StoreLocation.CurrentUser); + try + { + store.Open(OpenFlags.ReadWrite); + store.Add(cert); + } + finally + { + store.Close(); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/Utils.cs b/core/src/main/csharp/ch/cyberduck/core/Utils.cs similarity index 97% rename from source/ch/cyberduck/core/Utils.cs rename to core/src/main/csharp/ch/cyberduck/core/Utils.cs index dd90a6cbfc..3af0d78599 100644 --- a/source/ch/cyberduck/core/Utils.cs +++ b/core/src/main/csharp/ch/cyberduck/core/Utils.cs @@ -1,527 +1,527 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Reflection; -using ch.cyberduck.core; -using ch.cyberduck.core.local; -using java.util; -using Microsoft.Win32; -using org.apache.commons.io; -using org.apache.log4j; -using Collection = java.util.Collection; - -namespace Ch.Cyberduck.Core -{ - public class Utils - { - public delegate object ApplyPerItemForwardDelegate(T item); - - public delegate T ApplyPerItemReverseDelegate(object item); - - private static readonly List ExtendedCharsets = new List - { - "Big5", - "Big5-HKSCS", - "EUC-JP", - "EUC-KR", - "GB18030", - "GB2312", - "GBK", - "ISO-2022-CN", - "ISO-2022-JP", - "ISO-2022-JP-2", - "ISO-2022-KR", - "ISO-8859-3", - "ISO-8859-6", - "ISO-8859-8", - "JIS_X0201", - "JIS_X0212-1990", - "Shift_JIS", - "TIS-620", - "windows-1255", - "windows-1256", - "windows-1258", - "windows-31j" - }; - - public static readonly bool IsVistaOrLater = OperatingSystemVersion.Current >= OSVersionInfo.Vista; - public static readonly bool IsWin7OrLater = OperatingSystemVersion.Current >= OSVersionInfo.Win7; - private static readonly Logger Log = Logger.getLogger(typeof (Utils).FullName); - - public static bool IsBlank(string value) - { - if (String.IsNullOrEmpty(value)) - { - return true; - } - - return String.IsNullOrEmpty(value.Trim()); - } - - public static Assembly Me() - { - return Assembly.GetExecutingAssembly(); - } - - public static bool IsNotBlank(string value) - { - return !IsBlank(value); - } - - /// - /// Get file extension. Ignores OS specific special characters. Includes the dot if available. - /// - /// - /// - public static string GetSafeExtension(string filename) - { - if (IsNotBlank(filename)) - { - //see http://windevblog.blogspot.com/2008/09/get-default-application-in-windows-xp.html - string extension = FilenameUtils.getExtension(filename); - if (IsBlank(extension)) - { - return String.Empty; - } - return "." + extension; - } - return String.Empty; - } - - public static string SafeString(string s) - { - return s ?? string.Empty; - } - - /// - /// Check if a given object is parseable to an int32 - /// - /// - /// - public static bool IsInt(object expression) - { - int retNum; - - bool isNum = int.TryParse(Convert.ToString(expression), NumberStyles.Any, NumberFormatInfo.InvariantInfo, - out retNum); - return isNum; - } - - /// - /// Convert a generic IEnumerable to a java list - /// - /// - /// IEnumerable to convert - /// Apply this delegate to all list items before adding - /// A java list - public static List ConvertToJavaList(IEnumerable list, ApplyPerItemForwardDelegate applyPerItem) - { - ArrayList javaList = new ArrayList(); - foreach (T item in list) - { - if (null != applyPerItem) - { - javaList.add(applyPerItem(item)); - continue; - } - javaList.Add(item); - } - return javaList; - } - - /// - /// - /// - /// - /// - /// - /// - public static Map ConvertToJavaMap(IDictionary dictionary) - { - Map javaMap = new HashMap(); - foreach (KeyValuePair pair in dictionary) - { - javaMap.put(pair.Key, pair.Value); - } - return javaMap; - } - - /// - /// - /// - /// - /// - /// - /// - public static IDictionary ConvertFromJavaMap(Map javaMap) - { - IDictionary result = new Dictionary(); - Iterator iterator = javaMap.entrySet().iterator(); - while (iterator.hasNext()) - { - Map.Entry entry = (Map.Entry) iterator.next(); - result.Add((K) entry.getKey(), (V) entry.getValue()); - } - return result; - } - - /// - /// Convert a generic IEnumerable to a java list - /// - /// - /// IEnumerable to convert - /// A java list - public static List ConvertToJavaList(IEnumerable list) - { - return ConvertToJavaList(list, null); - } - - /// - /// Convert a java list to a generic collection - /// - /// - /// - /// A List - public static ICollection ConvertFromJavaList(Collection collection) - { - return ConvertFromJavaList(collection, null); - } - - /// - /// Convert a java list to a generic collection - /// - /// - /// - /// Apply this delegate to all list items before adding - /// A List - public static IList ConvertFromJavaList(Collection collection, ApplyPerItemReverseDelegate applyPerItem) - { - List result = new List(collection.size()); - for (Iterator iterator = collection.iterator(); iterator.hasNext();) - { - Object next = iterator.next(); - if (null != applyPerItem) - { - result.Add(applyPerItem(next)); - continue; - } - result.Add((T) next); - } - return result; - } - - public static IList> OpenWithListForExtension(String ext) - { - IList progs = new List(); - List> map = new List>(); - - if (IsBlank(ext)) return map; - - if (!ext.StartsWith(".")) ext = "." + ext; - using (RegistryKey clsExt = Registry.ClassesRoot.OpenSubKey(ext)) - { - IList rootList = OpenWithListForExtension(ext, clsExt); - foreach (string s in rootList) - { - progs.Add(s); - } - } - using ( - RegistryKey clsExt = - Registry.CurrentUser.OpenSubKey( - "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\" + ext)) - { - IList explorerList = OpenWithListForExtension(ext, clsExt); - foreach (string s in explorerList) - { - progs.Add(s); - } - } - - foreach (string exe in progs.Distinct()) - { - ApplicationFinder finder = ApplicationFinderFactory.get(); - Application application = finder.getDescription(exe); - if (finder.isInstalled(application)) - { - map.Add(new KeyValuePair(application.getName(), exe)); - } - else - { - map.Add(new KeyValuePair(LocalFactory.get(exe).getName(), exe)); - } - } - map.Sort( - delegate(KeyValuePair pair1, KeyValuePair pair2) - { - return pair1.Key.CompareTo(pair2.Key); - }); - - return map; - } - - public static IList OpenWithListForExtension(String ext, RegistryKey rootKey) - { - IList result = new List(); - - if (null != rootKey) - { - //PerceivedType - String perceivedType = (String) rootKey.GetValue("PerceivedType"); - if (null != perceivedType) - { - using ( - RegistryKey openWithKey = - Registry.ClassesRoot.OpenSubKey("SystemFileAssociations\\" + perceivedType + - "\\OpenWithList")) - { - IList appCmds = GetApplicationCmdsFromOpenWithList(openWithKey); - foreach (string appCmd in appCmds) - { - result.Add(appCmd); - } - } - } - - //OpenWithProgIds - using (RegistryKey key = rootKey.OpenSubKey("OpenWithProgIds")) - { - IList appCmds = GetApplicationCmdsFromOpenWithProgIds(key); - foreach (string appCmd in appCmds) - { - result.Add(appCmd); - } - } - - //OpenWithList - using (RegistryKey openWithKey = rootKey.OpenSubKey("OpenWithList")) - { - IList appCmds = GetApplicationCmdsFromOpenWithList(openWithKey); - foreach (string appCmd in appCmds) - { - result.Add(appCmd); - } - } - } - return result; - } - - private static IList GetApplicationCmdsFromOpenWithList(RegistryKey openWithKey) - { - IList appCmds = new List(); - if (openWithKey != null) - { - //all subkeys - string[] exes = openWithKey.GetSubKeyNames(); - IList cands = exes.ToList(); - //all values); - string[] values = openWithKey.GetValueNames(); - foreach (string value in values) - { - object o = openWithKey.GetValue(value); - if (o is String) - { - cands.Add(o as String); - } - } - - - foreach (string s in exes) - { - cands.Add(s); - } - - foreach (string progid in cands) - { - using (RegistryKey key = Registry.ClassesRoot.OpenSubKey("Applications\\" + progid)) - { - String cmd = GetExeFromOpenCommand(key); - if (!String.IsNullOrEmpty(cmd)) - { - appCmds.Add(cmd); - } - } - } - } - return appCmds; - } - - private static IList GetApplicationCmdsFromOpenWithProgIds(RegistryKey key) - { - IList appCmds = new List(); - if (key != null) - { - string[] progids = key.GetValueNames(); - foreach (string progid in progids) - { - if (!string.IsNullOrEmpty(progid)) - { - using (RegistryKey clsProgid = Registry.ClassesRoot.OpenSubKey(progid)) - { - String cmd = GetExeFromOpenCommand(clsProgid); - if (!String.IsNullOrEmpty(cmd)) - { - appCmds.Add(cmd); - } - } - } - } - } - return appCmds; - } - - public static bool StartProcess(Process process) - { - try - { - process.Start(); - return true; - } - catch (InvalidOperationException e) - { - Log.error(e); - } - catch (Win32Exception e) - { - Log.error(String.Format("Error while StartProcess: {0},{1}", e.Message, e.NativeErrorCode)); - } - return false; - } - - public static string ExtractApplicationPath(string cmd) - { - if (!String.IsNullOrEmpty(cmd) && !cmd.Contains("rundll32.exe")) - { - String command = null; - if (cmd.StartsWith("\"")) - { - int i = cmd.IndexOf("\"", 1); - if (i > 2) - command = cmd.Substring(1, i - 1); - } - else - { - int i = cmd.IndexOf(" "); - if (i > 0) - command = cmd.Substring(0, i); - } - - if (File.Exists(command)) - { - return command; - } - } - return null; - } - - /// - /// Extract open command - /// - /// expected substructure is shell/open/command - /// null if not found - public static string GetExeFromOpenCommand(RegistryKey root) - { - if (null != root) - { - using (var editSk = root.OpenSubKey("shell\\open\\command")) - { - if (null != editSk) - { - String cmd = (String) editSk.GetValue(String.Empty); - return ExtractApplicationPath(cmd); - } - } - } - return null; - } - - /// - /// method for retrieving the users default web browser - /// - /// - public static string GetSystemDefaultBrowser() - { - try - { - //for Vista and later we first check the UserChoice - using ( - var uc = - Registry.CurrentUser.OpenSubKey( - @"HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice") - ) - { - if (null != uc) - { - string progid = (string) uc.GetValue("Progid"); - if (null != progid) - { - string exe = GetExeFromOpenCommand(Registry.ClassesRoot); - if (null != exe) - { - return exe; - } - } - } - } - - //set the registry key we want to open - using (var regKey = Registry.ClassesRoot.OpenSubKey("HTTP\\shell\\open\\command", false)) - { - return ExtractExeFromCommand((string) regKey.GetValue(null)); - } - } - catch (Exception) - { - return null; - } - } - - public static string ExtractExeFromCommand(string command) - { - if (!String.IsNullOrEmpty(command)) - { - String cmd = null; - if (command.StartsWith("\"")) - { - int i = command.IndexOf("\"", 1); - if (i > 2) - cmd = command.Substring(1, i - 1); - } - else - { - int i = command.IndexOf(" "); - if (i > 0) - cmd = command.Substring(0, i); - } - - if (null != cmd && LocalFactory.get(cmd).exists()) - { - return cmd; - } - } - return null; - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Reflection; +using ch.cyberduck.core; +using ch.cyberduck.core.local; +using java.util; +using Microsoft.Win32; +using org.apache.commons.io; +using org.apache.log4j; +using Collection = java.util.Collection; + +namespace Ch.Cyberduck.Core +{ + public class Utils + { + public delegate object ApplyPerItemForwardDelegate(T item); + + public delegate T ApplyPerItemReverseDelegate(object item); + + private static readonly List ExtendedCharsets = new List + { + "Big5", + "Big5-HKSCS", + "EUC-JP", + "EUC-KR", + "GB18030", + "GB2312", + "GBK", + "ISO-2022-CN", + "ISO-2022-JP", + "ISO-2022-JP-2", + "ISO-2022-KR", + "ISO-8859-3", + "ISO-8859-6", + "ISO-8859-8", + "JIS_X0201", + "JIS_X0212-1990", + "Shift_JIS", + "TIS-620", + "windows-1255", + "windows-1256", + "windows-1258", + "windows-31j" + }; + + public static readonly bool IsVistaOrLater = OperatingSystemVersion.Current >= OSVersionInfo.Vista; + public static readonly bool IsWin7OrLater = OperatingSystemVersion.Current >= OSVersionInfo.Win7; + private static readonly Logger Log = Logger.getLogger(typeof (Utils).FullName); + + public static bool IsBlank(string value) + { + if (String.IsNullOrEmpty(value)) + { + return true; + } + + return String.IsNullOrEmpty(value.Trim()); + } + + public static Assembly Me() + { + return Assembly.GetExecutingAssembly(); + } + + public static bool IsNotBlank(string value) + { + return !IsBlank(value); + } + + /// + /// Get file extension. Ignores OS specific special characters. Includes the dot if available. + /// + /// + /// + public static string GetSafeExtension(string filename) + { + if (IsNotBlank(filename)) + { + //see http://windevblog.blogspot.com/2008/09/get-default-application-in-windows-xp.html + string extension = FilenameUtils.getExtension(filename); + if (IsBlank(extension)) + { + return String.Empty; + } + return "." + extension; + } + return String.Empty; + } + + public static string SafeString(string s) + { + return s ?? string.Empty; + } + + /// + /// Check if a given object is parseable to an int32 + /// + /// + /// + public static bool IsInt(object expression) + { + int retNum; + + bool isNum = int.TryParse(Convert.ToString(expression), NumberStyles.Any, NumberFormatInfo.InvariantInfo, + out retNum); + return isNum; + } + + /// + /// Convert a generic IEnumerable to a java list + /// + /// + /// IEnumerable to convert + /// Apply this delegate to all list items before adding + /// A java list + public static List ConvertToJavaList(IEnumerable list, ApplyPerItemForwardDelegate applyPerItem) + { + ArrayList javaList = new ArrayList(); + foreach (T item in list) + { + if (null != applyPerItem) + { + javaList.add(applyPerItem(item)); + continue; + } + javaList.Add(item); + } + return javaList; + } + + /// + /// + /// + /// + /// + /// + /// + public static Map ConvertToJavaMap(IDictionary dictionary) + { + Map javaMap = new HashMap(); + foreach (KeyValuePair pair in dictionary) + { + javaMap.put(pair.Key, pair.Value); + } + return javaMap; + } + + /// + /// + /// + /// + /// + /// + /// + public static IDictionary ConvertFromJavaMap(Map javaMap) + { + IDictionary result = new Dictionary(); + Iterator iterator = javaMap.entrySet().iterator(); + while (iterator.hasNext()) + { + Map.Entry entry = (Map.Entry) iterator.next(); + result.Add((K) entry.getKey(), (V) entry.getValue()); + } + return result; + } + + /// + /// Convert a generic IEnumerable to a java list + /// + /// + /// IEnumerable to convert + /// A java list + public static List ConvertToJavaList(IEnumerable list) + { + return ConvertToJavaList(list, null); + } + + /// + /// Convert a java list to a generic collection + /// + /// + /// + /// A List + public static ICollection ConvertFromJavaList(Collection collection) + { + return ConvertFromJavaList(collection, null); + } + + /// + /// Convert a java list to a generic collection + /// + /// + /// + /// Apply this delegate to all list items before adding + /// A List + public static IList ConvertFromJavaList(Collection collection, ApplyPerItemReverseDelegate applyPerItem) + { + List result = new List(collection.size()); + for (Iterator iterator = collection.iterator(); iterator.hasNext();) + { + Object next = iterator.next(); + if (null != applyPerItem) + { + result.Add(applyPerItem(next)); + continue; + } + result.Add((T) next); + } + return result; + } + + public static IList> OpenWithListForExtension(String ext) + { + IList progs = new List(); + List> map = new List>(); + + if (IsBlank(ext)) return map; + + if (!ext.StartsWith(".")) ext = "." + ext; + using (RegistryKey clsExt = Registry.ClassesRoot.OpenSubKey(ext)) + { + IList rootList = OpenWithListForExtension(ext, clsExt); + foreach (string s in rootList) + { + progs.Add(s); + } + } + using ( + RegistryKey clsExt = + Registry.CurrentUser.OpenSubKey( + "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\" + ext)) + { + IList explorerList = OpenWithListForExtension(ext, clsExt); + foreach (string s in explorerList) + { + progs.Add(s); + } + } + + foreach (string exe in progs.Distinct()) + { + ApplicationFinder finder = ApplicationFinderFactory.get(); + Application application = finder.getDescription(exe); + if (finder.isInstalled(application)) + { + map.Add(new KeyValuePair(application.getName(), exe)); + } + else + { + map.Add(new KeyValuePair(LocalFactory.get(exe).getName(), exe)); + } + } + map.Sort( + delegate(KeyValuePair pair1, KeyValuePair pair2) + { + return pair1.Key.CompareTo(pair2.Key); + }); + + return map; + } + + public static IList OpenWithListForExtension(String ext, RegistryKey rootKey) + { + IList result = new List(); + + if (null != rootKey) + { + //PerceivedType + String perceivedType = (String) rootKey.GetValue("PerceivedType"); + if (null != perceivedType) + { + using ( + RegistryKey openWithKey = + Registry.ClassesRoot.OpenSubKey("SystemFileAssociations\\" + perceivedType + + "\\OpenWithList")) + { + IList appCmds = GetApplicationCmdsFromOpenWithList(openWithKey); + foreach (string appCmd in appCmds) + { + result.Add(appCmd); + } + } + } + + //OpenWithProgIds + using (RegistryKey key = rootKey.OpenSubKey("OpenWithProgIds")) + { + IList appCmds = GetApplicationCmdsFromOpenWithProgIds(key); + foreach (string appCmd in appCmds) + { + result.Add(appCmd); + } + } + + //OpenWithList + using (RegistryKey openWithKey = rootKey.OpenSubKey("OpenWithList")) + { + IList appCmds = GetApplicationCmdsFromOpenWithList(openWithKey); + foreach (string appCmd in appCmds) + { + result.Add(appCmd); + } + } + } + return result; + } + + private static IList GetApplicationCmdsFromOpenWithList(RegistryKey openWithKey) + { + IList appCmds = new List(); + if (openWithKey != null) + { + //all subkeys + string[] exes = openWithKey.GetSubKeyNames(); + IList cands = exes.ToList(); + //all values); + string[] values = openWithKey.GetValueNames(); + foreach (string value in values) + { + object o = openWithKey.GetValue(value); + if (o is String) + { + cands.Add(o as String); + } + } + + + foreach (string s in exes) + { + cands.Add(s); + } + + foreach (string progid in cands) + { + using (RegistryKey key = Registry.ClassesRoot.OpenSubKey("Applications\\" + progid)) + { + String cmd = GetExeFromOpenCommand(key); + if (!String.IsNullOrEmpty(cmd)) + { + appCmds.Add(cmd); + } + } + } + } + return appCmds; + } + + private static IList GetApplicationCmdsFromOpenWithProgIds(RegistryKey key) + { + IList appCmds = new List(); + if (key != null) + { + string[] progids = key.GetValueNames(); + foreach (string progid in progids) + { + if (!string.IsNullOrEmpty(progid)) + { + using (RegistryKey clsProgid = Registry.ClassesRoot.OpenSubKey(progid)) + { + String cmd = GetExeFromOpenCommand(clsProgid); + if (!String.IsNullOrEmpty(cmd)) + { + appCmds.Add(cmd); + } + } + } + } + } + return appCmds; + } + + public static bool StartProcess(Process process) + { + try + { + process.Start(); + return true; + } + catch (InvalidOperationException e) + { + Log.error(e); + } + catch (Win32Exception e) + { + Log.error(String.Format("Error while StartProcess: {0},{1}", e.Message, e.NativeErrorCode)); + } + return false; + } + + public static string ExtractApplicationPath(string cmd) + { + if (!String.IsNullOrEmpty(cmd) && !cmd.Contains("rundll32.exe")) + { + String command = null; + if (cmd.StartsWith("\"")) + { + int i = cmd.IndexOf("\"", 1); + if (i > 2) + command = cmd.Substring(1, i - 1); + } + else + { + int i = cmd.IndexOf(" "); + if (i > 0) + command = cmd.Substring(0, i); + } + + if (File.Exists(command)) + { + return command; + } + } + return null; + } + + /// + /// Extract open command + /// + /// expected substructure is shell/open/command + /// null if not found + public static string GetExeFromOpenCommand(RegistryKey root) + { + if (null != root) + { + using (var editSk = root.OpenSubKey("shell\\open\\command")) + { + if (null != editSk) + { + String cmd = (String) editSk.GetValue(String.Empty); + return ExtractApplicationPath(cmd); + } + } + } + return null; + } + + /// + /// method for retrieving the users default web browser + /// + /// + public static string GetSystemDefaultBrowser() + { + try + { + //for Vista and later we first check the UserChoice + using ( + var uc = + Registry.CurrentUser.OpenSubKey( + @"HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice") + ) + { + if (null != uc) + { + string progid = (string) uc.GetValue("Progid"); + if (null != progid) + { + string exe = GetExeFromOpenCommand(Registry.ClassesRoot); + if (null != exe) + { + return exe; + } + } + } + } + + //set the registry key we want to open + using (var regKey = Registry.ClassesRoot.OpenSubKey("HTTP\\shell\\open\\command", false)) + { + return ExtractExeFromCommand((string) regKey.GetValue(null)); + } + } + catch (Exception) + { + return null; + } + } + + public static string ExtractExeFromCommand(string command) + { + if (!String.IsNullOrEmpty(command)) + { + String cmd = null; + if (command.StartsWith("\"")) + { + int i = command.IndexOf("\"", 1); + if (i > 2) + cmd = command.Substring(1, i - 1); + } + else + { + int i = command.IndexOf(" "); + if (i > 0) + cmd = command.Substring(0, i); + } + + if (null != cmd && LocalFactory.get(cmd).exists()) + { + return cmd; + } + } + return null; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/collections/IndexedLinkedList.cs b/core/src/main/csharp/ch/cyberduck/core/collections/IndexedLinkedList.cs similarity index 96% rename from source/ch/cyberduck/core/collections/IndexedLinkedList.cs rename to core/src/main/csharp/ch/cyberduck/core/collections/IndexedLinkedList.cs index a4c8f53bce..3f350cd8cd 100644 --- a/source/ch/cyberduck/core/collections/IndexedLinkedList.cs +++ b/core/src/main/csharp/ch/cyberduck/core/collections/IndexedLinkedList.cs @@ -1,64 +1,64 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System.Collections.Generic; - -namespace Ch.Cyberduck.Core.Collections -{ - public class IndexedLinkedList - { - private readonly LinkedList data = new LinkedList(); - private readonly Dictionary> index = new Dictionary>(); - - public int Count - { - get { return data.Count; } - } - - public T First - { - get { return data.First.Value; } - } - - public void Add(T value) - { - index[value] = data.AddLast(value); - } - - public void RemoveFirst() - { - index.Remove(data.First.Value); - data.RemoveFirst(); - } - - public void Remove(T value) - { - LinkedListNode node; - if (index.TryGetValue(value, out node)) - { - data.Remove(node); - index.Remove(value); - } - } - - public void Clear() - { - data.Clear(); - index.Clear(); - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System.Collections.Generic; + +namespace Ch.Cyberduck.Core.Collections +{ + public class IndexedLinkedList + { + private readonly LinkedList data = new LinkedList(); + private readonly Dictionary> index = new Dictionary>(); + + public int Count + { + get { return data.Count; } + } + + public T First + { + get { return data.First.Value; } + } + + public void Add(T value) + { + index[value] = data.AddLast(value); + } + + public void RemoveFirst() + { + index.Remove(data.First.Value); + data.RemoveFirst(); + } + + public void Remove(T value) + { + LinkedListNode node; + if (index.TryGetValue(value, out node)) + { + data.Remove(node); + index.Remove(value); + } + } + + public void Clear() + { + data.Clear(); + index.Clear(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/collections/LRUCache.cs b/core/src/main/csharp/ch/cyberduck/core/collections/LRUCache.cs similarity index 96% rename from source/ch/cyberduck/core/collections/LRUCache.cs rename to core/src/main/csharp/ch/cyberduck/core/collections/LRUCache.cs index e8c4719919..b6698b1077 100644 --- a/source/ch/cyberduck/core/collections/LRUCache.cs +++ b/core/src/main/csharp/ch/cyberduck/core/collections/LRUCache.cs @@ -1,155 +1,155 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using System.Collections; -using System.Collections.Generic; - -namespace Ch.Cyberduck.Core.Collections -{ - public class LRUCache : IDictionary - { - private readonly int capacity; - private readonly Dictionary data; - private readonly ICollection> dataAsCollection; - private readonly IndexedLinkedList lruList = new IndexedLinkedList(); - - public LRUCache(int capacity) - { - if (capacity <= 0) - { - throw new ArgumentException("capacity should always be bigger than 0"); - } - - data = new Dictionary(capacity); - dataAsCollection = data; - this.capacity = capacity; - } - - public void Add(TKey key, TValue value) - { - if (!ContainsKey(key)) - { - this[key] = value; - } - else - { - throw new ArgumentException("An attempt was made to insert a duplicate key in the cache."); - } - } - - public bool ContainsKey(TKey key) - { - return data.ContainsKey(key); - } - - public ICollection Keys - { - get { return data.Keys; } - } - - public bool Remove(TKey key) - { - bool existed = data.Remove(key); - lruList.Remove(key); - return existed; - } - - public bool TryGetValue(TKey key, out TValue value) - { - return data.TryGetValue(key, out value); - } - - public ICollection Values - { - get { return data.Values; } - } - - public TValue this[TKey key] - { - get - { - var value = data[key]; - lruList.Remove(key); - lruList.Add(key); - return value; - } - set - { - data[key] = value; - lruList.Remove(key); - lruList.Add(key); - - if (data.Count > capacity) - { - Remove(lruList.First); - } - } - } - - public void Add(KeyValuePair item) - { - Add(item.Key, item.Value); - } - - public void Clear() - { - data.Clear(); - lruList.Clear(); - } - - public bool Contains(KeyValuePair item) - { - return dataAsCollection.Contains(item); - } - - public void CopyTo(KeyValuePair[] array, int arrayIndex) - { - dataAsCollection.CopyTo(array, arrayIndex); - } - - public int Count - { - get { return data.Count; } - } - - public bool IsReadOnly - { - get { return false; } - } - - public bool Remove(KeyValuePair item) - { - bool removed = dataAsCollection.Remove(item); - if (removed) - { - lruList.Remove(item.Key); - } - return removed; - } - - public IEnumerator> GetEnumerator() - { - return dataAsCollection.GetEnumerator(); - } - - IEnumerator IEnumerable.GetEnumerator() - { - return ((IEnumerable) data).GetEnumerator(); - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Ch.Cyberduck.Core.Collections +{ + public class LRUCache : IDictionary + { + private readonly int capacity; + private readonly Dictionary data; + private readonly ICollection> dataAsCollection; + private readonly IndexedLinkedList lruList = new IndexedLinkedList(); + + public LRUCache(int capacity) + { + if (capacity <= 0) + { + throw new ArgumentException("capacity should always be bigger than 0"); + } + + data = new Dictionary(capacity); + dataAsCollection = data; + this.capacity = capacity; + } + + public void Add(TKey key, TValue value) + { + if (!ContainsKey(key)) + { + this[key] = value; + } + else + { + throw new ArgumentException("An attempt was made to insert a duplicate key in the cache."); + } + } + + public bool ContainsKey(TKey key) + { + return data.ContainsKey(key); + } + + public ICollection Keys + { + get { return data.Keys; } + } + + public bool Remove(TKey key) + { + bool existed = data.Remove(key); + lruList.Remove(key); + return existed; + } + + public bool TryGetValue(TKey key, out TValue value) + { + return data.TryGetValue(key, out value); + } + + public ICollection Values + { + get { return data.Values; } + } + + public TValue this[TKey key] + { + get + { + var value = data[key]; + lruList.Remove(key); + lruList.Add(key); + return value; + } + set + { + data[key] = value; + lruList.Remove(key); + lruList.Add(key); + + if (data.Count > capacity) + { + Remove(lruList.First); + } + } + } + + public void Add(KeyValuePair item) + { + Add(item.Key, item.Value); + } + + public void Clear() + { + data.Clear(); + lruList.Clear(); + } + + public bool Contains(KeyValuePair item) + { + return dataAsCollection.Contains(item); + } + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + dataAsCollection.CopyTo(array, arrayIndex); + } + + public int Count + { + get { return data.Count; } + } + + public bool IsReadOnly + { + get { return false; } + } + + public bool Remove(KeyValuePair item) + { + bool removed = dataAsCollection.Remove(item); + if (removed) + { + lruList.Remove(item.Key); + } + return removed; + } + + public IEnumerator> GetEnumerator() + { + return dataAsCollection.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return ((IEnumerable) data).GetEnumerator(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/diagnostics/TcpReachability.cs b/core/src/main/csharp/ch/cyberduck/core/diagnostics/TcpReachability.cs similarity index 96% rename from source/ch/cyberduck/core/diagnostics/TcpReachability.cs rename to core/src/main/csharp/ch/cyberduck/core/diagnostics/TcpReachability.cs index e35ae068f2..2af47dea71 100644 --- a/source/ch/cyberduck/core/diagnostics/TcpReachability.cs +++ b/core/src/main/csharp/ch/cyberduck/core/diagnostics/TcpReachability.cs @@ -1,53 +1,53 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Diagnostics; -using System.Net.Sockets; -using ch.cyberduck.core; -using ch.cyberduck.core.diagnostics; -using ch.cyberduck.core.preferences; - -namespace Ch.Cyberduck.Core.Diagnostics -{ - public class TcpReachability : Reachability - { - public bool isReachable(Host h) - { - if (!PreferencesFactory.get().getBoolean("connection.hostname.check")) - { - return true; - } - try - { - TcpClient c = new TcpClient(h.getHostname(), h.getPort()); - c.Close(); - return true; - } - catch (Exception) - { - return false; - } - } - - public void diagnose(Host h) - { - Process.Start("Rundll32.exe", "ndfapi,NdfRunDllDiagnoseIncident"); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Diagnostics; +using System.Net.Sockets; +using ch.cyberduck.core; +using ch.cyberduck.core.diagnostics; +using ch.cyberduck.core.preferences; + +namespace Ch.Cyberduck.Core.Diagnostics +{ + public class TcpReachability : Reachability + { + public bool isReachable(Host h) + { + if (!PreferencesFactory.get().getBoolean("connection.hostname.check")) + { + return true; + } + try + { + TcpClient c = new TcpClient(h.getHostname(), h.getPort()); + c.Close(); + return true; + } + catch (Exception) + { + return false; + } + } + + public void diagnose(Host h) + { + Process.Start("Rundll32.exe", "ndfapi,NdfRunDllDiagnoseIncident"); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/editor/SystemEditorFactory.cs b/core/src/main/csharp/ch/cyberduck/core/editor/SystemEditorFactory.cs similarity index 97% rename from source/ch/cyberduck/core/editor/SystemEditorFactory.cs rename to core/src/main/csharp/ch/cyberduck/core/editor/SystemEditorFactory.cs index e7f8774f31..8ee62b17c8 100644 --- a/source/ch/cyberduck/core/editor/SystemEditorFactory.cs +++ b/core/src/main/csharp/ch/cyberduck/core/editor/SystemEditorFactory.cs @@ -1,191 +1,191 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.IO; -using ch.cyberduck.core; -using ch.cyberduck.core.editor; -using ch.cyberduck.core.local; -using java.util; -using Microsoft.Win32; -using org.apache.log4j; -using Path = ch.cyberduck.core.Path; - -namespace Ch.Cyberduck.Core.Editor -{ - public class SystemEditorFactory : EditorFactory - { - private static readonly Logger Log = Logger.getLogger(typeof (SystemEditorFactory).Name); - private readonly IList _registeredEditors = new List(); - - public SystemEditorFactory() - { - _registeredEditors.Add(new Dreamweaver()); - _registeredEditors.Add(new Notepad()); - _registeredEditors.Add(new NotepadPlusPlus()); - _registeredEditors.Add(new TextPad()); - } - - protected override List getConfigured() - { - return Utils.ConvertToJavaList(_registeredEditors); - } - - public override ch.cyberduck.core.editor.Editor create(ProgressListener listener, Session session, Application application, Path file) - { - return new SystemWatchEditor(application, session, file, listener); - } - - protected override object create() - { - throw new NotImplementedException(); - } - - private class Dreamweaver : Application - { - public Dreamweaver() : base(Identifier(), "Dreamweaver") - { - } - - private static string Identifier() - { - try - { - using (var uc = Registry.LocalMachine.OpenSubKey(@"Software\Adobe\Dreamweaver\")) - { - if (null != uc) - { - string[] subKeyNames = uc.GetSubKeyNames(); - foreach (string keyName in subKeyNames) - { - RegistryKey versionSubtree = uc.OpenSubKey(keyName + "\\Installation"); - if (versionSubtree != null) - { - string exePath = (string) versionSubtree.GetValue(null); - if (null != exePath) - { - return exePath.ToLower(); - } - } - } - } - } - } - catch (Exception e) - { - Log.error(e.Message, e); - } - return null; - } - } - - /** - * Default Editor if none selected - */ - - public class Notepad : Application - { - public Notepad() : base(Identifier(), "Notepad") - { - } - - private static string Identifier() - { - string windir = Environment.ExpandEnvironmentVariables("%WinDir%"); - string notepadExe = System.IO.Path.Combine(windir, "system32", "notepad.exe"); - if (File.Exists(notepadExe)) - { - return notepadExe.ToLower(); - } - return null; - } - } - - private class NotepadPlusPlus : Application - { - public NotepadPlusPlus() : base(Identifier(), "Notepad++") - { - } - - private static string Identifier() - { - try - { - using ( - var uc = - Registry.LocalMachine.OpenSubKey( - @"Software\Microsoft\Windows\CurrentVersion\Uninstall\Notepad++")) - { - if (null != uc) - { - string exe = (string) uc.GetValue("DisplayIcon"); - if (null != exe) - { - return exe.ToLower(); - } - } - } - } - catch (Exception e) - { - Log.error(e.Message, e); - } - return null; - } - } - - private class TextPad : Application - { - public TextPad() : base(Identifier(), "TextPad") - { - } - - private static string Identifier() - { - try - { - using (var uc = Registry.LocalMachine.OpenSubKey(@"Software\Helios\TextPad\")) - { - if (null != uc) - { - string version = (string) uc.GetValue("CurrentVersion"); - if (null != version) - { - RegistryKey versionSubtree = uc.OpenSubKey(version); - if (versionSubtree != null) - { - string exePath = (string) versionSubtree.GetValue("ExePath"); - if (null != exePath) - { - return exePath.ToLower(); - } - } - } - } - } - } - catch (Exception e) - { - Log.error(e.Message, e); - } - return null; - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.IO; +using ch.cyberduck.core; +using ch.cyberduck.core.editor; +using ch.cyberduck.core.local; +using java.util; +using Microsoft.Win32; +using org.apache.log4j; +using Path = ch.cyberduck.core.Path; + +namespace Ch.Cyberduck.Core.Editor +{ + public class SystemEditorFactory : EditorFactory + { + private static readonly Logger Log = Logger.getLogger(typeof (SystemEditorFactory).Name); + private readonly IList _registeredEditors = new List(); + + public SystemEditorFactory() + { + _registeredEditors.Add(new Dreamweaver()); + _registeredEditors.Add(new Notepad()); + _registeredEditors.Add(new NotepadPlusPlus()); + _registeredEditors.Add(new TextPad()); + } + + protected override List getConfigured() + { + return Utils.ConvertToJavaList(_registeredEditors); + } + + public override ch.cyberduck.core.editor.Editor create(ProgressListener listener, Session session, Application application, Path file) + { + return new SystemWatchEditor(application, session, file, listener); + } + + protected override object create() + { + throw new NotImplementedException(); + } + + private class Dreamweaver : Application + { + public Dreamweaver() : base(Identifier(), "Dreamweaver") + { + } + + private static string Identifier() + { + try + { + using (var uc = Registry.LocalMachine.OpenSubKey(@"Software\Adobe\Dreamweaver\")) + { + if (null != uc) + { + string[] subKeyNames = uc.GetSubKeyNames(); + foreach (string keyName in subKeyNames) + { + RegistryKey versionSubtree = uc.OpenSubKey(keyName + "\\Installation"); + if (versionSubtree != null) + { + string exePath = (string) versionSubtree.GetValue(null); + if (null != exePath) + { + return exePath.ToLower(); + } + } + } + } + } + } + catch (Exception e) + { + Log.error(e.Message, e); + } + return null; + } + } + + /** + * Default Editor if none selected + */ + + public class Notepad : Application + { + public Notepad() : base(Identifier(), "Notepad") + { + } + + private static string Identifier() + { + string windir = Environment.ExpandEnvironmentVariables("%WinDir%"); + string notepadExe = System.IO.Path.Combine(windir, "system32", "notepad.exe"); + if (File.Exists(notepadExe)) + { + return notepadExe.ToLower(); + } + return null; + } + } + + private class NotepadPlusPlus : Application + { + public NotepadPlusPlus() : base(Identifier(), "Notepad++") + { + } + + private static string Identifier() + { + try + { + using ( + var uc = + Registry.LocalMachine.OpenSubKey( + @"Software\Microsoft\Windows\CurrentVersion\Uninstall\Notepad++")) + { + if (null != uc) + { + string exe = (string) uc.GetValue("DisplayIcon"); + if (null != exe) + { + return exe.ToLower(); + } + } + } + } + catch (Exception e) + { + Log.error(e.Message, e); + } + return null; + } + } + + private class TextPad : Application + { + public TextPad() : base(Identifier(), "TextPad") + { + } + + private static string Identifier() + { + try + { + using (var uc = Registry.LocalMachine.OpenSubKey(@"Software\Helios\TextPad\")) + { + if (null != uc) + { + string version = (string) uc.GetValue("CurrentVersion"); + if (null != version) + { + RegistryKey versionSubtree = uc.OpenSubKey(version); + if (versionSubtree != null) + { + string exePath = (string) versionSubtree.GetValue("ExePath"); + if (null != exePath) + { + return exePath.ToLower(); + } + } + } + } + } + } + catch (Exception e) + { + Log.error(e.Message, e); + } + return null; + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/editor/SystemWatchEditor.cs b/core/src/main/csharp/ch/cyberduck/core/editor/SystemWatchEditor.cs similarity index 97% rename from source/ch/cyberduck/core/editor/SystemWatchEditor.cs rename to core/src/main/csharp/ch/cyberduck/core/editor/SystemWatchEditor.cs index 72235191fd..f31dedb736 100644 --- a/source/ch/cyberduck/core/editor/SystemWatchEditor.cs +++ b/core/src/main/csharp/ch/cyberduck/core/editor/SystemWatchEditor.cs @@ -1,68 +1,68 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.IO; -using ch.cyberduck.core; -using ch.cyberduck.core.editor; -using ch.cyberduck.core.local; -using ch.cyberduck.core.transfer; -using org.apache.log4j; -using Path = ch.cyberduck.core.Path; - -namespace Ch.Cyberduck.Core.Editor -{ - public class SystemWatchEditor : AbstractEditor - { - private static readonly Logger Log = Logger.getLogger(typeof(SystemWatchEditor).FullName); - private FileSystemWatcher _watcher; - - public SystemWatchEditor(Application application, Session session, Path file, ProgressListener listener) - : base(application, session, file, listener) - { - } - - protected override void watch(ch.cyberduck.core.Local file, FileWatcherListener listener) - { - _watcher = new FileSystemWatcher(); - _watcher.Path = file.getParent().getAbsolute(); - _watcher.Filter = file.getName(); - _watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | - NotifyFilters.DirectoryName; - _watcher.Changed += delegate(object sender, FileSystemEventArgs e) - { - Log.debug("HasChanged:" + e.FullPath); - listener.fileWritten(file); - }; - _watcher.Renamed += delegate(object sender, RenamedEventArgs e) - { - Log.debug(String.Format("HasRenamed: from {0} to {1}", e.OldFullPath, e.FullPath)); - listener.fileWritten(file); - }; - // Begin watching. - _watcher.EnableRaisingEvents = true; - } - - public override void delete() - { - _watcher.EnableRaisingEvents = false; - _watcher.Dispose(); - base.delete(); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.IO; +using ch.cyberduck.core; +using ch.cyberduck.core.editor; +using ch.cyberduck.core.local; +using ch.cyberduck.core.transfer; +using org.apache.log4j; +using Path = ch.cyberduck.core.Path; + +namespace Ch.Cyberduck.Core.Editor +{ + public class SystemWatchEditor : AbstractEditor + { + private static readonly Logger Log = Logger.getLogger(typeof(SystemWatchEditor).FullName); + private FileSystemWatcher _watcher; + + public SystemWatchEditor(Application application, Session session, Path file, ProgressListener listener) + : base(application, session, file, listener) + { + } + + protected override void watch(ch.cyberduck.core.Local file, FileWatcherListener listener) + { + _watcher = new FileSystemWatcher(); + _watcher.Path = file.getParent().getAbsolute(); + _watcher.Filter = file.getName(); + _watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | + NotifyFilters.DirectoryName; + _watcher.Changed += delegate(object sender, FileSystemEventArgs e) + { + Log.debug("HasChanged:" + e.FullPath); + listener.fileWritten(file); + }; + _watcher.Renamed += delegate(object sender, RenamedEventArgs e) + { + Log.debug(String.Format("HasRenamed: from {0} to {1}", e.OldFullPath, e.FullPath)); + listener.fileWritten(file); + }; + // Begin watching. + _watcher.EnableRaisingEvents = true; + } + + public override void delete() + { + _watcher.EnableRaisingEvents = false; + _watcher.Dispose(); + base.delete(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/editor/SystemWatchEditorFactory.cs b/core/src/main/csharp/ch/cyberduck/core/editor/SystemWatchEditorFactory.cs similarity index 97% rename from source/ch/cyberduck/core/editor/SystemWatchEditorFactory.cs rename to core/src/main/csharp/ch/cyberduck/core/editor/SystemWatchEditorFactory.cs index d3529340ca..1e7b9ee698 100644 --- a/source/ch/cyberduck/core/editor/SystemWatchEditorFactory.cs +++ b/core/src/main/csharp/ch/cyberduck/core/editor/SystemWatchEditorFactory.cs @@ -1,191 +1,191 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.IO; -using ch.cyberduck.core; -using ch.cyberduck.core.editor; -using ch.cyberduck.core.local; -using java.util; -using Microsoft.Win32; -using org.apache.log4j; -using Path = ch.cyberduck.core.Path; - -namespace Ch.Cyberduck.Core.Editor -{ - public class SystemWatchEditorFactory : EditorFactory - { - private static readonly Logger Log = Logger.getLogger(typeof (SystemWatchEditorFactory).Name); - private readonly IList _registeredEditors = new List(); - - public SystemWatchEditorFactory() - { - _registeredEditors.Add(new Dreamweaver()); - _registeredEditors.Add(new Notepad()); - _registeredEditors.Add(new NotepadPlusPlus()); - _registeredEditors.Add(new TextPad()); - } - - protected override List getConfigured() - { - return Utils.ConvertToJavaList(_registeredEditors); - } - - public override ch.cyberduck.core.editor.Editor create(ProgressListener listener, Session session, Application application, Path file) - { - return new SystemWatchEditor(application, session, file, listener); - } - - protected override object create() - { - throw new NotImplementedException(); - } - - private class Dreamweaver : Application - { - public Dreamweaver() : base(Identifier(), "Dreamweaver") - { - } - - private static string Identifier() - { - try - { - using (var uc = Registry.LocalMachine.OpenSubKey(@"Software\Adobe\Dreamweaver\")) - { - if (null != uc) - { - string[] subKeyNames = uc.GetSubKeyNames(); - foreach (string keyName in subKeyNames) - { - RegistryKey versionSubtree = uc.OpenSubKey(keyName + "\\Installation"); - if (versionSubtree != null) - { - string exePath = (string) versionSubtree.GetValue(null); - if (null != exePath) - { - return exePath.ToLower(); - } - } - } - } - } - } - catch (Exception e) - { - Log.error(e.Message, e); - } - return null; - } - } - - /** - * Default Editor if none selected - */ - - public class Notepad : Application - { - public Notepad() : base(Identifier(), "Notepad") - { - } - - private static string Identifier() - { - string windir = Environment.ExpandEnvironmentVariables("%WinDir%"); - string notepadExe = System.IO.Path.Combine(windir, "system32", "notepad.exe"); - if (File.Exists(notepadExe)) - { - return notepadExe.ToLower(); - } - return null; - } - } - - private class NotepadPlusPlus : Application - { - public NotepadPlusPlus() : base(Identifier(), "Notepad++") - { - } - - private static string Identifier() - { - try - { - using ( - var uc = - Registry.LocalMachine.OpenSubKey( - @"Software\Microsoft\Windows\CurrentVersion\Uninstall\Notepad++")) - { - if (null != uc) - { - string exe = (string) uc.GetValue("DisplayIcon"); - if (null != exe) - { - return exe.ToLower(); - } - } - } - } - catch (Exception e) - { - Log.error(e.Message, e); - } - return null; - } - } - - private class TextPad : Application - { - public TextPad() : base(Identifier(), "TextPad") - { - } - - private static string Identifier() - { - try - { - using (var uc = Registry.LocalMachine.OpenSubKey(@"Software\Helios\TextPad\")) - { - if (null != uc) - { - string version = (string) uc.GetValue("CurrentVersion"); - if (null != version) - { - RegistryKey versionSubtree = uc.OpenSubKey(version); - if (versionSubtree != null) - { - string exePath = (string) versionSubtree.GetValue("ExePath"); - if (null != exePath) - { - return exePath.ToLower(); - } - } - } - } - } - } - catch (Exception e) - { - Log.error(e.Message, e); - } - return null; - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.IO; +using ch.cyberduck.core; +using ch.cyberduck.core.editor; +using ch.cyberduck.core.local; +using java.util; +using Microsoft.Win32; +using org.apache.log4j; +using Path = ch.cyberduck.core.Path; + +namespace Ch.Cyberduck.Core.Editor +{ + public class SystemWatchEditorFactory : EditorFactory + { + private static readonly Logger Log = Logger.getLogger(typeof (SystemWatchEditorFactory).Name); + private readonly IList _registeredEditors = new List(); + + public SystemWatchEditorFactory() + { + _registeredEditors.Add(new Dreamweaver()); + _registeredEditors.Add(new Notepad()); + _registeredEditors.Add(new NotepadPlusPlus()); + _registeredEditors.Add(new TextPad()); + } + + protected override List getConfigured() + { + return Utils.ConvertToJavaList(_registeredEditors); + } + + public override ch.cyberduck.core.editor.Editor create(ProgressListener listener, Session session, Application application, Path file) + { + return new SystemWatchEditor(application, session, file, listener); + } + + protected override object create() + { + throw new NotImplementedException(); + } + + private class Dreamweaver : Application + { + public Dreamweaver() : base(Identifier(), "Dreamweaver") + { + } + + private static string Identifier() + { + try + { + using (var uc = Registry.LocalMachine.OpenSubKey(@"Software\Adobe\Dreamweaver\")) + { + if (null != uc) + { + string[] subKeyNames = uc.GetSubKeyNames(); + foreach (string keyName in subKeyNames) + { + RegistryKey versionSubtree = uc.OpenSubKey(keyName + "\\Installation"); + if (versionSubtree != null) + { + string exePath = (string) versionSubtree.GetValue(null); + if (null != exePath) + { + return exePath.ToLower(); + } + } + } + } + } + } + catch (Exception e) + { + Log.error(e.Message, e); + } + return null; + } + } + + /** + * Default Editor if none selected + */ + + public class Notepad : Application + { + public Notepad() : base(Identifier(), "Notepad") + { + } + + private static string Identifier() + { + string windir = Environment.ExpandEnvironmentVariables("%WinDir%"); + string notepadExe = System.IO.Path.Combine(windir, "system32", "notepad.exe"); + if (File.Exists(notepadExe)) + { + return notepadExe.ToLower(); + } + return null; + } + } + + private class NotepadPlusPlus : Application + { + public NotepadPlusPlus() : base(Identifier(), "Notepad++") + { + } + + private static string Identifier() + { + try + { + using ( + var uc = + Registry.LocalMachine.OpenSubKey( + @"Software\Microsoft\Windows\CurrentVersion\Uninstall\Notepad++")) + { + if (null != uc) + { + string exe = (string) uc.GetValue("DisplayIcon"); + if (null != exe) + { + return exe.ToLower(); + } + } + } + } + catch (Exception e) + { + Log.error(e.Message, e); + } + return null; + } + } + + private class TextPad : Application + { + public TextPad() : base(Identifier(), "TextPad") + { + } + + private static string Identifier() + { + try + { + using (var uc = Registry.LocalMachine.OpenSubKey(@"Software\Helios\TextPad\")) + { + if (null != uc) + { + string version = (string) uc.GetValue("CurrentVersion"); + if (null != version) + { + RegistryKey versionSubtree = uc.OpenSubKey(version); + if (versionSubtree != null) + { + string exePath = (string) versionSubtree.GetValue("ExePath"); + if (null != exePath) + { + return exePath.ToLower(); + } + } + } + } + } + } + catch (Exception e) + { + Log.error(e.Message, e); + } + return null; + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/i18n/DictionaryLocale.cs b/core/src/main/csharp/ch/cyberduck/core/i18n/DictionaryLocale.cs similarity index 97% rename from source/ch/cyberduck/core/i18n/DictionaryLocale.cs rename to core/src/main/csharp/ch/cyberduck/core/i18n/DictionaryLocale.cs index fd4f096f41..d4c1e993e4 100644 --- a/source/ch/cyberduck/core/i18n/DictionaryLocale.cs +++ b/core/src/main/csharp/ch/cyberduck/core/i18n/DictionaryLocale.cs @@ -1,109 +1,109 @@ -// -// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. -// http://cyberduck.io/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// feedback@cyberduck.io -// - -using System; -using System.Collections.Generic; -using System.IO; -using System.Reflection; -using System.Text.RegularExpressions; -using ch.cyberduck.core.i18n; -using ch.cyberduck.core.preferences; -using org.apache.log4j; - -namespace Ch.Cyberduck.Core.I18n -{ - public class DictionaryLocale : Locale - { - private static readonly Logger Log = Logger.getLogger(typeof (DictionaryLocale).FullName); - private static readonly Regex StringsRegex = new Regex("\"?(.*?)\"?[ ]*=[ ]*\"(.*)\"", RegexOptions.Compiled); - - private readonly IDictionary> _cache = - new Dictionary>(); - - public string localize(string key, string table) - { - Dictionary bundle; - - if (!_cache.TryGetValue(table, out bundle)) - { - lock (this) - { - load(table); - } - //try again - if (!_cache.TryGetValue(table, out bundle)) - { - Log.warn(string.Format("Key '{0}' in bundle '{1}' not found", key, table)); - return key; - } - } - - string value; - return bundle.TryGetValue(key, out value) ? value : key; - } - - public void setDefault(string language) - { - PreferencesFactory.get().setProperty("application.language", language); - } - - private void load(string bundle) - { - Log.debug("Caching bundle " + bundle); - string language = PreferencesFactory.get().getProperty("application.language"); - Assembly asm = Utils.Me(); - string[] resourceNames = Assembly.GetExecutingAssembly().GetManifestResourceNames(); - Stream stream = null; - foreach (string resourceName in resourceNames) - { - if (resourceName.Contains(string.Format("{0}.lproj.{1}.strings", language, bundle))) - { - stream = asm.GetManifestResourceStream(resourceName + ".1"); - if (stream == null) - { - stream = asm.GetManifestResourceStream(resourceName); - } - break; - } - } - if (null != stream) - { - using (StreamReader file = new StreamReader(stream)) - { - Dictionary bundleDict = new Dictionary(); - _cache[bundle] = bundleDict; - string line; - while ((line = file.ReadLine()) != null) - { - if (StringsRegex.IsMatch(line)) - { - Match match = StringsRegex.Match(line); - string key = match.Groups[1].Value; - string value = match.Groups[2].Value; - bundleDict[key] = value; - } - } - } - } - else - { - Log.error(String.Format("Bundle {0} for language {1} not found", bundle, language)); - } - } - } +// +// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. +// http://cyberduck.io/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// feedback@cyberduck.io +// + +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Text.RegularExpressions; +using ch.cyberduck.core.i18n; +using ch.cyberduck.core.preferences; +using org.apache.log4j; + +namespace Ch.Cyberduck.Core.I18n +{ + public class DictionaryLocale : Locale + { + private static readonly Logger Log = Logger.getLogger(typeof (DictionaryLocale).FullName); + private static readonly Regex StringsRegex = new Regex("\"?(.*?)\"?[ ]*=[ ]*\"(.*)\"", RegexOptions.Compiled); + + private readonly IDictionary> _cache = + new Dictionary>(); + + public string localize(string key, string table) + { + Dictionary bundle; + + if (!_cache.TryGetValue(table, out bundle)) + { + lock (this) + { + load(table); + } + //try again + if (!_cache.TryGetValue(table, out bundle)) + { + Log.warn(string.Format("Key '{0}' in bundle '{1}' not found", key, table)); + return key; + } + } + + string value; + return bundle.TryGetValue(key, out value) ? value : key; + } + + public void setDefault(string language) + { + PreferencesFactory.get().setProperty("application.language", language); + } + + private void load(string bundle) + { + Log.debug("Caching bundle " + bundle); + string language = PreferencesFactory.get().getProperty("application.language"); + Assembly asm = Utils.Me(); + string[] resourceNames = Assembly.GetExecutingAssembly().GetManifestResourceNames(); + Stream stream = null; + foreach (string resourceName in resourceNames) + { + if (resourceName.Contains(string.Format("{0}.lproj.{1}.strings", language, bundle))) + { + stream = asm.GetManifestResourceStream(resourceName + ".1"); + if (stream == null) + { + stream = asm.GetManifestResourceStream(resourceName); + } + break; + } + } + if (null != stream) + { + using (StreamReader file = new StreamReader(stream)) + { + Dictionary bundleDict = new Dictionary(); + _cache[bundle] = bundleDict; + string line; + while ((line = file.ReadLine()) != null) + { + if (StringsRegex.IsMatch(line)) + { + Match match = StringsRegex.Match(line); + string key = match.Groups[1].Value; + string value = match.Groups[2].Value; + bundleDict[key] = value; + } + } + } + } + else + { + Log.error(String.Format("Bundle {0} for language {1} not found", bundle, language)); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/local/DefaultBrowserLauncher.cs b/core/src/main/csharp/ch/cyberduck/core/local/DefaultBrowserLauncher.cs similarity index 97% rename from source/ch/cyberduck/core/local/DefaultBrowserLauncher.cs rename to core/src/main/csharp/ch/cyberduck/core/local/DefaultBrowserLauncher.cs index f499f19b98..389f89497d 100644 --- a/source/ch/cyberduck/core/local/DefaultBrowserLauncher.cs +++ b/core/src/main/csharp/ch/cyberduck/core/local/DefaultBrowserLauncher.cs @@ -1,33 +1,33 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Diagnostics; -using ch.cyberduck.core.local; - -namespace Ch.Cyberduck.Core.Local -{ - public sealed class DefaultBrowserLauncher : BrowserLauncher - { - public bool open(string url) - { - Process process = new Process(); - process.StartInfo.FileName = url; - return Utils.StartProcess(process); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Diagnostics; +using ch.cyberduck.core.local; + +namespace Ch.Cyberduck.Core.Local +{ + public sealed class DefaultBrowserLauncher : BrowserLauncher + { + public bool open(string url) + { + Process process = new Process(); + process.StartInfo.FileName = url; + return Utils.StartProcess(process); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/local/ExplorerRevealService.cs b/core/src/main/csharp/ch/cyberduck/core/local/ExplorerRevealService.cs similarity index 97% rename from source/ch/cyberduck/core/local/ExplorerRevealService.cs rename to core/src/main/csharp/ch/cyberduck/core/local/ExplorerRevealService.cs index 884da7644a..1ca06c0685 100644 --- a/source/ch/cyberduck/core/local/ExplorerRevealService.cs +++ b/core/src/main/csharp/ch/cyberduck/core/local/ExplorerRevealService.cs @@ -1,42 +1,42 @@ -// -// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System.IO; -using ch.cyberduck.core.local; - -namespace Ch.Cyberduck.Core.Local -{ - public sealed class ExplorerRevealService : RevealService - { - public bool reveal(ch.cyberduck.core.Local l) - { - if (l.exists()) - { - string path = l.getAbsolute(); - DirectoryInfo d = new DirectoryInfo(path); - string parameter = ""; - if (d.Parent != null) - { - parameter = "/select,"; - } - return ApplicationLauncherFactory.get() - .open(new Application("explorer.exe", null), parameter + path); - } - return false; - } - } +// +// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System.IO; +using ch.cyberduck.core.local; + +namespace Ch.Cyberduck.Core.Local +{ + public sealed class ExplorerRevealService : RevealService + { + public bool reveal(ch.cyberduck.core.Local l) + { + if (l.exists()) + { + string path = l.getAbsolute(); + DirectoryInfo d = new DirectoryInfo(path); + string parameter = ""; + if (d.Parent != null) + { + parameter = "/select,"; + } + return ApplicationLauncherFactory.get() + .open(new Application("explorer.exe", null), parameter + path); + } + return false; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/local/RecycleLocalTrashFeature.cs b/core/src/main/csharp/ch/cyberduck/core/local/RecycleLocalTrashFeature.cs similarity index 97% rename from source/ch/cyberduck/core/local/RecycleLocalTrashFeature.cs rename to core/src/main/csharp/ch/cyberduck/core/local/RecycleLocalTrashFeature.cs index 813207ec6f..0a4b3e176f 100644 --- a/source/ch/cyberduck/core/local/RecycleLocalTrashFeature.cs +++ b/core/src/main/csharp/ch/cyberduck/core/local/RecycleLocalTrashFeature.cs @@ -1,47 +1,47 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using ch.cyberduck.core.exception; -using ch.cyberduck.core.local.features; -using Microsoft.VisualBasic.FileIO; - -namespace Ch.Cyberduck.Core.Local -{ - public sealed class RecycleLocalTrashFeature : Trash - { - public void trash(ch.cyberduck.core.Local file) - { - if (file.exists()) - { - try { - if (file.isFile()) - { - FileSystem.DeleteFile(file.getAbsolute(), UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin); - } - else if (file.isDirectory()) - { - FileSystem.DeleteDirectory(file.getAbsolute(), UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin); - } - } - catch(System.Exception e) { - throw new AccessDeniedException(e.Message); - } - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using ch.cyberduck.core.exception; +using ch.cyberduck.core.local.features; +using Microsoft.VisualBasic.FileIO; + +namespace Ch.Cyberduck.Core.Local +{ + public sealed class RecycleLocalTrashFeature : Trash + { + public void trash(ch.cyberduck.core.Local file) + { + if (file.exists()) + { + try { + if (file.isFile()) + { + FileSystem.DeleteFile(file.getAbsolute(), UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin); + } + else if (file.isDirectory()) + { + FileSystem.DeleteDirectory(file.getAbsolute(), UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin); + } + } + catch(System.Exception e) { + throw new AccessDeniedException(e.Message); + } + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/local/RegistryApplicationFinder.cs b/core/src/main/csharp/ch/cyberduck/core/local/RegistryApplicationFinder.cs similarity index 97% rename from source/ch/cyberduck/core/local/RegistryApplicationFinder.cs rename to core/src/main/csharp/ch/cyberduck/core/local/RegistryApplicationFinder.cs index 55c0cdcea3..042addea37 100644 --- a/source/ch/cyberduck/core/local/RegistryApplicationFinder.cs +++ b/core/src/main/csharp/ch/cyberduck/core/local/RegistryApplicationFinder.cs @@ -1,348 +1,348 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; -using Ch.Cyberduck.Core.Collections; -using Ch.Cyberduck.Core.Local; -using Microsoft.Win32; -using ch.cyberduck.core.local; -using java.util; -using org.apache.commons.io; -using org.apache.log4j; - -namespace Ch.Cyberduck.Core.Local -{ - public class RegistryApplicationFinder : ApplicationFinder - { - private static readonly Guid CLSID_QueryAssociations = new Guid("a07034fd-6caa-4954-ac3f-97a27216f98a"); - private static readonly Logger Log = Logger.getLogger(typeof (RegistryApplicationFinder).Name); - - private static readonly LRUCache applicationNameCache = - new LRUCache(100); - - private static readonly LRUCache defaultApplicationCache = - new LRUCache(100); - - private static readonly LRUCache> defaultApplicationListCache = - new LRUCache>(100); - - private static Guid IID_IQueryAssociations = new Guid("c46ca590-3c3f-11d2-bee6-0000f805ca57"); - - - //vormals GetApplicationNameForExe - public Application getDescription(string application) - { - if (!applicationNameCache.ContainsKey(application)) - { - string path = WindowsApplicationLauncher.GetExecutableCommand(application); - if (File.Exists(path)) - { - FileVersionInfo info = FileVersionInfo.GetVersionInfo(path); - applicationNameCache.Add(new KeyValuePair(application, - new Application( - application.ToLower(), - info.FileDescription))); - } - else - { - applicationNameCache.Add(new KeyValuePair(application, - new Application( - application.ToLower(), - FilenameUtils.getName(application)))); - } - } - Application result; - applicationNameCache.TryGetValue(application, out result); - return result; - } - - public Application find(String filename) - { - string extension = Utils.GetSafeExtension(filename); - if (Utils.IsBlank(extension)) - { - return Application.notfound; - } - Application app; - Log.debug(string.Format("GetRegisteredDefaultApplication for filename {0}", filename)); - if (defaultApplicationCache.TryGetValue(extension, out app)) - { - Log.debug(string.Format("Return cached default application {0} for extension {1}", app, extension)); - return app; - } - String exe = GetExplorerRegisteredApplication(extension); - if (null != exe) - { - defaultApplicationCache.Add(extension, getDescription(exe)); - } - else - { - try - { - string strProgID; - using (var extSubKey = Registry.ClassesRoot.OpenSubKey(extension)) - { - if (null != extSubKey) - { - strProgID = (string) extSubKey.GetValue(null); - - if (null != strProgID) - { - // Get associated application and its edit command - using (var oProgId = Registry.ClassesRoot.OpenSubKey(strProgID)) - { - if (null != oProgId) - { - string strExe = GetEditCommand(oProgId.OpenSubKey(strProgID)); - - if (!string.IsNullOrEmpty(strExe)) - { - exe = Utils.ExtractExeFromCommand(strExe); - } - } - } - } - } - if (null != exe) - { - defaultApplicationCache.Add(extension, getDescription(exe)); - } - } - } - catch (Exception) - { - Log.error(string.Format("Exception while finding application for {0}", filename)); - } - } - defaultApplicationCache.TryGetValue(extension, out app); - if(null == app) { - return Application.notfound; - } - return app; - } - - public List findAll(String filename) - { - IList progs = new List(); - List map = new List(); - string extension = Utils.GetSafeExtension(filename); - if (Utils.IsBlank(extension)) - { - return Utils.ConvertToJavaList(map); - } - if (!defaultApplicationListCache.ContainsKey(extension)) - { - using (RegistryKey clsExt = Registry.ClassesRoot.OpenSubKey(extension)) - { - IList rootList = Utils.OpenWithListForExtension(extension, clsExt); - foreach (string s in rootList) - { - progs.Add(s); - } - } - using ( - RegistryKey clsExt = - Registry.CurrentUser.OpenSubKey( - "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\" + extension)) - { - IList explorerList = Utils.OpenWithListForExtension(extension, clsExt); - foreach (string s in explorerList) - { - progs.Add(s); - } - } - - foreach (string exe in progs.Distinct()) - { - Application application = find(exe); - if (isInstalled(application)) - { - map.Add(application); - } - else - { - map.Add(getDescription(exe)); - } - } - map.Sort( - delegate(Application app1, Application app2) - { return app1.getIdentifier().CompareTo(app2.getIdentifier()); }); - defaultApplicationListCache.Add(extension, map); - } - return Utils.ConvertToJavaList(defaultApplicationListCache[extension]); - } - - public bool isInstalled(Application application) - { - return Utils.IsNotBlank(application.getIdentifier()) && File.Exists(application.getIdentifier()); - } - - [DllImport("shlwapi.dll")] - private static extern int AssocCreate(Guid clsid, ref Guid riid, - [MarshalAs(UnmanagedType.Interface)] out object ppv); - - /// - /// Return with Explorer registered application by file's extension (for editing) - /// - /// - /// - /// - /// - /// - private string GetExplorerRegisteredApplication(string extension) - { - try - { - object obj; - AssocCreate(CLSID_QueryAssociations, ref IID_IQueryAssociations, out obj); - IQueryAssociations qa = (IQueryAssociations) obj; - qa.Init(ASSOCF.INIT_DEFAULTTOSTAR, extension, UIntPtr.Zero, IntPtr.Zero); - - int size = 0; - qa.GetString(ASSOCF.NOTRUNCATE, ASSOCSTR.COMMAND, "edit", null, ref size); - - StringBuilder sb = new StringBuilder(size); - qa.GetString(ASSOCF.NOTRUNCATE, ASSOCSTR.COMMAND, "edit", sb, ref size); - - string cmd = sb.ToString(); - if (Utils.IsBlank(cmd)) - { - return null; - } - - if (cmd.Contains("\"")) - { - return cmd.Substring(1, cmd.LastIndexOf("\"")); - } - return cmd.Substring(0, cmd.IndexOf(" ")); - } - catch (Exception) - { - return null; - } - } - - /// - /// Extract edit command, fallback is the open command - /// - /// expected substructure shell/edit/command or shell/open/command - /// null if not found - private string GetEditCommand(RegistryKey root) - { - if (null != root) - { - using (var editSk = root.OpenSubKey("shell\\edit\\command")) - { - if (null != editSk) - { - return (string) editSk.GetValue(String.Empty); - } - - using (var openSk = root.OpenSubKey("shell\\open\\command")) - { - if (null != openSk) - { - return (string) openSk.GetValue(String.Empty); - } - } - } - } - return null; - } - - private enum ASSOCDATA - { - MSIDESCRIPTOR = 1, - NOACTIVATEHANDLER, - QUERYCLASSSTORE, - HASPERUSERASSOC, - EDITFLAGS, - VALUE - } - - [Flags] - private enum ASSOCF - { - INIT_NOREMAPCLSID = 0x00000001, - INIT_BYEXENAME = 0x00000002, - OPEN_BYEXENAME = 0x00000002, - INIT_DEFAULTTOSTAR = 0x00000004, - INIT_DEFAULTTOFOLDER = 0x00000008, - NOUSERSETTINGS = 0x00000010, - NOTRUNCATE = 0x00000020, - VERIFY = 0x00000040, - REMAPRUNDLL = 0x00000080, - NOFIXUPS = 0x00000100, - IGNOREBASECLASS = 0x00000200, - INIT_IGNOREUNKNOWN = 0x00000400 - } - - private enum ASSOCKEY - { - SHELLEXECCLASS = 1, - APP, - CLASS, - BASECLASS - } - - private enum ASSOCSTR - { - COMMAND = 1, - EXECUTABLE, - FRIENDLYDOCNAME, - FRIENDLYAPPNAME, - NOOPEN, - SHELLNEWVALUE, - DDECOMMAND, - DDEIFEXEC, - DDEAPPLICATION, - DDETOPIC, - INFOTIP, - QUICKTIP, - TILEINFO, - CONTENTTYPE, - DEFAULTICON, - SHELLEXTENSION - } - - [Guid("c46ca590-3c3f-11d2-bee6-0000f805ca57"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - private interface IQueryAssociations - { - void Init([In] ASSOCF flags, [In, MarshalAs(UnmanagedType.LPWStr)] string pszAssoc, [In] UIntPtr hkProgid, - [In] IntPtr hwnd); - - void GetString([In] ASSOCF flags, [In] ASSOCSTR str, [In, MarshalAs(UnmanagedType.LPWStr)] string pwszExtra, - [Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszOut, [In, Out] ref int pcchOut); - - void GetKey([In] ASSOCF flags, [In] ASSOCKEY str, [In, MarshalAs(UnmanagedType.LPWStr)] string pwszExtra, - [Out] out UIntPtr phkeyOut); - - void GetData([In] ASSOCF flags, [In] ASSOCDATA data, [In, MarshalAs(UnmanagedType.LPWStr)] string pwszExtra, - [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 4)] out byte[] pvOut, - [In, Out] ref int pcbOut); - - void GetEnum(); // not used actually - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using Ch.Cyberduck.Core.Collections; +using Ch.Cyberduck.Core.Local; +using Microsoft.Win32; +using ch.cyberduck.core.local; +using java.util; +using org.apache.commons.io; +using org.apache.log4j; + +namespace Ch.Cyberduck.Core.Local +{ + public class RegistryApplicationFinder : ApplicationFinder + { + private static readonly Guid CLSID_QueryAssociations = new Guid("a07034fd-6caa-4954-ac3f-97a27216f98a"); + private static readonly Logger Log = Logger.getLogger(typeof (RegistryApplicationFinder).Name); + + private static readonly LRUCache applicationNameCache = + new LRUCache(100); + + private static readonly LRUCache defaultApplicationCache = + new LRUCache(100); + + private static readonly LRUCache> defaultApplicationListCache = + new LRUCache>(100); + + private static Guid IID_IQueryAssociations = new Guid("c46ca590-3c3f-11d2-bee6-0000f805ca57"); + + + //vormals GetApplicationNameForExe + public Application getDescription(string application) + { + if (!applicationNameCache.ContainsKey(application)) + { + string path = WindowsApplicationLauncher.GetExecutableCommand(application); + if (File.Exists(path)) + { + FileVersionInfo info = FileVersionInfo.GetVersionInfo(path); + applicationNameCache.Add(new KeyValuePair(application, + new Application( + application.ToLower(), + info.FileDescription))); + } + else + { + applicationNameCache.Add(new KeyValuePair(application, + new Application( + application.ToLower(), + FilenameUtils.getName(application)))); + } + } + Application result; + applicationNameCache.TryGetValue(application, out result); + return result; + } + + public Application find(String filename) + { + string extension = Utils.GetSafeExtension(filename); + if (Utils.IsBlank(extension)) + { + return Application.notfound; + } + Application app; + Log.debug(string.Format("GetRegisteredDefaultApplication for filename {0}", filename)); + if (defaultApplicationCache.TryGetValue(extension, out app)) + { + Log.debug(string.Format("Return cached default application {0} for extension {1}", app, extension)); + return app; + } + String exe = GetExplorerRegisteredApplication(extension); + if (null != exe) + { + defaultApplicationCache.Add(extension, getDescription(exe)); + } + else + { + try + { + string strProgID; + using (var extSubKey = Registry.ClassesRoot.OpenSubKey(extension)) + { + if (null != extSubKey) + { + strProgID = (string) extSubKey.GetValue(null); + + if (null != strProgID) + { + // Get associated application and its edit command + using (var oProgId = Registry.ClassesRoot.OpenSubKey(strProgID)) + { + if (null != oProgId) + { + string strExe = GetEditCommand(oProgId.OpenSubKey(strProgID)); + + if (!string.IsNullOrEmpty(strExe)) + { + exe = Utils.ExtractExeFromCommand(strExe); + } + } + } + } + } + if (null != exe) + { + defaultApplicationCache.Add(extension, getDescription(exe)); + } + } + } + catch (Exception) + { + Log.error(string.Format("Exception while finding application for {0}", filename)); + } + } + defaultApplicationCache.TryGetValue(extension, out app); + if(null == app) { + return Application.notfound; + } + return app; + } + + public List findAll(String filename) + { + IList progs = new List(); + List map = new List(); + string extension = Utils.GetSafeExtension(filename); + if (Utils.IsBlank(extension)) + { + return Utils.ConvertToJavaList(map); + } + if (!defaultApplicationListCache.ContainsKey(extension)) + { + using (RegistryKey clsExt = Registry.ClassesRoot.OpenSubKey(extension)) + { + IList rootList = Utils.OpenWithListForExtension(extension, clsExt); + foreach (string s in rootList) + { + progs.Add(s); + } + } + using ( + RegistryKey clsExt = + Registry.CurrentUser.OpenSubKey( + "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\" + extension)) + { + IList explorerList = Utils.OpenWithListForExtension(extension, clsExt); + foreach (string s in explorerList) + { + progs.Add(s); + } + } + + foreach (string exe in progs.Distinct()) + { + Application application = find(exe); + if (isInstalled(application)) + { + map.Add(application); + } + else + { + map.Add(getDescription(exe)); + } + } + map.Sort( + delegate(Application app1, Application app2) + { return app1.getIdentifier().CompareTo(app2.getIdentifier()); }); + defaultApplicationListCache.Add(extension, map); + } + return Utils.ConvertToJavaList(defaultApplicationListCache[extension]); + } + + public bool isInstalled(Application application) + { + return Utils.IsNotBlank(application.getIdentifier()) && File.Exists(application.getIdentifier()); + } + + [DllImport("shlwapi.dll")] + private static extern int AssocCreate(Guid clsid, ref Guid riid, + [MarshalAs(UnmanagedType.Interface)] out object ppv); + + /// + /// Return with Explorer registered application by file's extension (for editing) + /// + /// + /// + /// + /// + /// + private string GetExplorerRegisteredApplication(string extension) + { + try + { + object obj; + AssocCreate(CLSID_QueryAssociations, ref IID_IQueryAssociations, out obj); + IQueryAssociations qa = (IQueryAssociations) obj; + qa.Init(ASSOCF.INIT_DEFAULTTOSTAR, extension, UIntPtr.Zero, IntPtr.Zero); + + int size = 0; + qa.GetString(ASSOCF.NOTRUNCATE, ASSOCSTR.COMMAND, "edit", null, ref size); + + StringBuilder sb = new StringBuilder(size); + qa.GetString(ASSOCF.NOTRUNCATE, ASSOCSTR.COMMAND, "edit", sb, ref size); + + string cmd = sb.ToString(); + if (Utils.IsBlank(cmd)) + { + return null; + } + + if (cmd.Contains("\"")) + { + return cmd.Substring(1, cmd.LastIndexOf("\"")); + } + return cmd.Substring(0, cmd.IndexOf(" ")); + } + catch (Exception) + { + return null; + } + } + + /// + /// Extract edit command, fallback is the open command + /// + /// expected substructure shell/edit/command or shell/open/command + /// null if not found + private string GetEditCommand(RegistryKey root) + { + if (null != root) + { + using (var editSk = root.OpenSubKey("shell\\edit\\command")) + { + if (null != editSk) + { + return (string) editSk.GetValue(String.Empty); + } + + using (var openSk = root.OpenSubKey("shell\\open\\command")) + { + if (null != openSk) + { + return (string) openSk.GetValue(String.Empty); + } + } + } + } + return null; + } + + private enum ASSOCDATA + { + MSIDESCRIPTOR = 1, + NOACTIVATEHANDLER, + QUERYCLASSSTORE, + HASPERUSERASSOC, + EDITFLAGS, + VALUE + } + + [Flags] + private enum ASSOCF + { + INIT_NOREMAPCLSID = 0x00000001, + INIT_BYEXENAME = 0x00000002, + OPEN_BYEXENAME = 0x00000002, + INIT_DEFAULTTOSTAR = 0x00000004, + INIT_DEFAULTTOFOLDER = 0x00000008, + NOUSERSETTINGS = 0x00000010, + NOTRUNCATE = 0x00000020, + VERIFY = 0x00000040, + REMAPRUNDLL = 0x00000080, + NOFIXUPS = 0x00000100, + IGNOREBASECLASS = 0x00000200, + INIT_IGNOREUNKNOWN = 0x00000400 + } + + private enum ASSOCKEY + { + SHELLEXECCLASS = 1, + APP, + CLASS, + BASECLASS + } + + private enum ASSOCSTR + { + COMMAND = 1, + EXECUTABLE, + FRIENDLYDOCNAME, + FRIENDLYAPPNAME, + NOOPEN, + SHELLNEWVALUE, + DDECOMMAND, + DDEIFEXEC, + DDEAPPLICATION, + DDETOPIC, + INFOTIP, + QUICKTIP, + TILEINFO, + CONTENTTYPE, + DEFAULTICON, + SHELLEXTENSION + } + + [Guid("c46ca590-3c3f-11d2-bee6-0000f805ca57"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + private interface IQueryAssociations + { + void Init([In] ASSOCF flags, [In, MarshalAs(UnmanagedType.LPWStr)] string pszAssoc, [In] UIntPtr hkProgid, + [In] IntPtr hwnd); + + void GetString([In] ASSOCF flags, [In] ASSOCSTR str, [In, MarshalAs(UnmanagedType.LPWStr)] string pwszExtra, + [Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszOut, [In, Out] ref int pcchOut); + + void GetKey([In] ASSOCF flags, [In] ASSOCKEY str, [In, MarshalAs(UnmanagedType.LPWStr)] string pwszExtra, + [Out] out UIntPtr phkeyOut); + + void GetData([In] ASSOCF flags, [In] ASSOCDATA data, [In, MarshalAs(UnmanagedType.LPWStr)] string pwszExtra, + [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 4)] out byte[] pvOut, + [In, Out] ref int pcbOut); + + void GetEnum(); // not used actually + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/local/SystemLocal.cs b/core/src/main/csharp/ch/cyberduck/core/local/SystemLocal.cs similarity index 96% rename from source/ch/cyberduck/core/local/SystemLocal.cs rename to core/src/main/csharp/ch/cyberduck/core/local/SystemLocal.cs index 164af46290..58ff7bcd95 100644 --- a/source/ch/cyberduck/core/local/SystemLocal.cs +++ b/core/src/main/csharp/ch/cyberduck/core/local/SystemLocal.cs @@ -1,79 +1,79 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.IO; -using System.Text; -using ch.cyberduck.core; -using org.apache.commons.io; -using org.apache.log4j; -using Path = System.IO.Path; - -namespace Ch.Cyberduck.Core.Local -{ - public class SystemLocal : ch.cyberduck.core.Local - { - private static readonly Logger Log = Logger.getLogger(typeof (SystemLocal).FullName); - - public SystemLocal(string parent, string name) - : base(parent, name) {} - - public SystemLocal(ch.cyberduck.core.Local parent, string name) - : base(parent, name) {} - - public SystemLocal(string path) - : base( - Path.Combine(FilenameUtils.getPrefix(path), FilenameUtils.getPath(path)) + - FilenameUtils.getName(path)) {} - - public override char getDelimiter() - { - return '\\'; - } - - public override bool isRoot() - { - return getAbsolute().Equals(Directory.GetDirectoryRoot(getAbsolute())); - } - - public override String getAbbreviatedPath() { - return getAbsolute(); - } - - public override bool exists() - { - string path = getAbsolute(); - if (File.Exists(path)) - { - return true; - } - bool directory = Directory.Exists(path); - if (directory) - { - return true; - } - Log.warn(path + " is a non-existing file"); - return false; - } - - public override bool isSymbolicLink() - { - return false; - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.IO; +using System.Text; +using ch.cyberduck.core; +using org.apache.commons.io; +using org.apache.log4j; +using Path = System.IO.Path; + +namespace Ch.Cyberduck.Core.Local +{ + public class SystemLocal : ch.cyberduck.core.Local + { + private static readonly Logger Log = Logger.getLogger(typeof (SystemLocal).FullName); + + public SystemLocal(string parent, string name) + : base(parent, name) {} + + public SystemLocal(ch.cyberduck.core.Local parent, string name) + : base(parent, name) {} + + public SystemLocal(string path) + : base( + Path.Combine(FilenameUtils.getPrefix(path), FilenameUtils.getPath(path)) + + FilenameUtils.getName(path)) {} + + public override char getDelimiter() + { + return '\\'; + } + + public override bool isRoot() + { + return getAbsolute().Equals(Directory.GetDirectoryRoot(getAbsolute())); + } + + public override String getAbbreviatedPath() { + return getAbsolute(); + } + + public override bool exists() + { + string path = getAbsolute(); + if (File.Exists(path)) + { + return true; + } + bool directory = Directory.Exists(path); + if (directory) + { + return true; + } + Log.warn(path + " is a non-existing file"); + return false; + } + + public override bool isSymbolicLink() + { + return false; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/core/local/TaskbarApplicationBadgeLabeler.cs b/core/src/main/csharp/ch/cyberduck/core/local/TaskbarApplicationBadgeLabeler.cs similarity index 95% rename from source/ch/cyberduck/ui/core/local/TaskbarApplicationBadgeLabeler.cs rename to core/src/main/csharp/ch/cyberduck/core/local/TaskbarApplicationBadgeLabeler.cs index debbada174..5d45fb6c4c 100644 --- a/source/ch/cyberduck/ui/core/local/TaskbarApplicationBadgeLabeler.cs +++ b/core/src/main/csharp/ch/cyberduck/core/local/TaskbarApplicationBadgeLabeler.cs @@ -1,58 +1,58 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Drawing; -using System.Drawing.Drawing2D; -using ch.cyberduck.core.local; -using Ch.Cyberduck.Ui.Controller; - -namespace Ch.Cyberduck.Ui.Core.Local -{ - public sealed class TaskbarApplicationBadgeLabeler : ApplicationBadgeLabeler - { - public void badge(string text) - { - if (Cyberduck.Core.Utils.IsBlank(text)) - { - TransferController.Instance.TaskbarOverlayIcon(null, String.Empty); - } - else - { - using (Bitmap bm = new Bitmap(16, 16)) - using (Graphics g = Graphics.FromImage(bm)) - { - g.SmoothingMode = SmoothingMode.AntiAlias; - g.FillEllipse(Brushes.Navy, new Rectangle(0, 0, 15, 15)); - - if (text.Length == 1) - { - Font f = new Font("Segoe UI", 8, FontStyle.Bold); - g.DrawString(text, f, new SolidBrush(Color.White), 3, 1); - } - else - { - Font f = new Font("Segoe UI", 7, FontStyle.Bold); - g.DrawString(text, f, new SolidBrush(Color.White), 1, 1); - } - TransferController.Instance.TaskbarOverlayIcon(Icon.FromHandle(bm.GetHicon()), text); - } - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using ch.cyberduck.core.local; +using Ch.Cyberduck.Ui.Controller; + +namespace Ch.Cyberduck.Core.Local +{ + public sealed class TaskbarApplicationBadgeLabeler : ApplicationBadgeLabeler + { + public void badge(string text) + { + if (Cyberduck.Core.Utils.IsBlank(text)) + { + TransferController.Instance.TaskbarOverlayIcon(null, String.Empty); + } + else + { + using (Bitmap bm = new Bitmap(16, 16)) + using (Graphics g = Graphics.FromImage(bm)) + { + g.SmoothingMode = SmoothingMode.AntiAlias; + g.FillEllipse(Brushes.Navy, new Rectangle(0, 0, 15, 15)); + + if (text.Length == 1) + { + Font f = new Font("Segoe UI", 8, FontStyle.Bold); + g.DrawString(text, f, new SolidBrush(Color.White), 3, 1); + } + else + { + Font f = new Font("Segoe UI", 7, FontStyle.Bold); + g.DrawString(text, f, new SolidBrush(Color.White), 1, 1); + } + TransferController.Instance.TaskbarOverlayIcon(Icon.FromHandle(bm.GetHicon()), text); + } + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/local/Win32FileDescriptor.cs b/core/src/main/csharp/ch/cyberduck/core/local/Win32FileDescriptor.cs similarity index 97% rename from source/ch/cyberduck/core/local/Win32FileDescriptor.cs rename to core/src/main/csharp/ch/cyberduck/core/local/Win32FileDescriptor.cs index c67a89525b..f3235fc169 100644 --- a/source/ch/cyberduck/core/local/Win32FileDescriptor.cs +++ b/core/src/main/csharp/ch/cyberduck/core/local/Win32FileDescriptor.cs @@ -1,62 +1,62 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Runtime.InteropServices; -using ch.cyberduck.core; -using ch.cyberduck.core.local; -using org.apache.commons.io; - -namespace Ch.Cyberduck.Core.Local -{ - public sealed class Win32FileDescriptor : AbstractFileDescriptor - { - public override string getKind(string filename) - { - String extension = FilenameUtils.getExtension(filename); - String kind = null; - if (Utils.IsBlank(extension)) - { - kind = this.kind(filename); - if (Utils.IsBlank(kind)) - { - return LocaleFactory.localizedString("Unknown"); - } - return kind; - } - kind = this.kind(FilenameUtils.getExtension(filename)); - if (Utils.IsBlank(kind)) - { - return LocaleFactory.localizedString("Unknown"); - } - return kind; - } - - private string kind(string extension) - { - Shell32.SHFILEINFO shinfo = new Shell32.SHFILEINFO(); - IntPtr hSuccess = Shell32.SHGetFileInfo(extension, 0, ref shinfo, (uint) Marshal.SizeOf(shinfo), - Shell32.SHGFI_TYPENAME | Shell32.SHGFI_USEFILEATTRIBUTES); - if (hSuccess != IntPtr.Zero) - { - return Convert.ToString(shinfo.szTypeName.Trim()); - } - return null; - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Runtime.InteropServices; +using ch.cyberduck.core; +using ch.cyberduck.core.local; +using org.apache.commons.io; + +namespace Ch.Cyberduck.Core.Local +{ + public sealed class Win32FileDescriptor : AbstractFileDescriptor + { + public override string getKind(string filename) + { + String extension = FilenameUtils.getExtension(filename); + String kind = null; + if (Utils.IsBlank(extension)) + { + kind = this.kind(filename); + if (Utils.IsBlank(kind)) + { + return LocaleFactory.localizedString("Unknown"); + } + return kind; + } + kind = this.kind(FilenameUtils.getExtension(filename)); + if (Utils.IsBlank(kind)) + { + return LocaleFactory.localizedString("Unknown"); + } + return kind; + } + + private string kind(string extension) + { + Shell32.SHFILEINFO shinfo = new Shell32.SHFILEINFO(); + IntPtr hSuccess = Shell32.SHGetFileInfo(extension, 0, ref shinfo, (uint) Marshal.SizeOf(shinfo), + Shell32.SHGFI_TYPENAME | Shell32.SHGFI_USEFILEATTRIBUTES); + if (hSuccess != IntPtr.Zero) + { + return Convert.ToString(shinfo.szTypeName.Trim()); + } + return null; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/local/WindowsApplicationLauncher.cs b/core/src/main/csharp/ch/cyberduck/core/local/WindowsApplicationLauncher.cs similarity index 97% rename from source/ch/cyberduck/core/local/WindowsApplicationLauncher.cs rename to core/src/main/csharp/ch/cyberduck/core/local/WindowsApplicationLauncher.cs index 672b059dd2..87de0e12ad 100644 --- a/source/ch/cyberduck/core/local/WindowsApplicationLauncher.cs +++ b/core/src/main/csharp/ch/cyberduck/core/local/WindowsApplicationLauncher.cs @@ -1,76 +1,76 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Diagnostics; -using ch.cyberduck.core.local; -using org.apache.log4j; - -namespace Ch.Cyberduck.Core.Local -{ - public sealed class WindowsApplicationLauncher : ApplicationLauncher - { - private static readonly Logger Log = Logger.getLogger(typeof (WindowsApplicationLauncher).Name); - - public void bounce(ch.cyberduck.core.Local local) - { - // - } - - public bool open(ch.cyberduck.core.Local local) - { - Process process = new Process(); - process.StartInfo.FileName = "\"" + local.getAbsolute() + "\""; - return Utils.StartProcess(process); - } - - public bool open(ch.cyberduck.core.Local local, Application application, ApplicationQuitCallback callback) - { - Process process = new Process(); - if (null == application) - { - process.StartInfo.FileName = "\"" + local.getAbsolute() + "\""; - } - else - { - process.StartInfo.FileName = GetExecutableCommand(application.getIdentifier()); - process.StartInfo.Arguments = "\"" + local.getAbsolute() + "\""; - } - return Utils.StartProcess(process); - } - - public bool open(Application application, string args) - { - Process process = new Process(); - process.StartInfo.FileName = GetExecutableCommand(application.getIdentifier()); - if (Utils.IsNotBlank(args)) - { - process.StartInfo.Arguments = args; - } - return Utils.StartProcess(process); - } - - public static string GetExecutableCommand(string command) - { - if (Utils.IsNotBlank(command) && command.Contains(".exe")) - { - return command.Substring(0, command.LastIndexOf(".exe") + 4); - } - return command; - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Diagnostics; +using ch.cyberduck.core.local; +using org.apache.log4j; + +namespace Ch.Cyberduck.Core.Local +{ + public sealed class WindowsApplicationLauncher : ApplicationLauncher + { + private static readonly Logger Log = Logger.getLogger(typeof (WindowsApplicationLauncher).Name); + + public void bounce(ch.cyberduck.core.Local local) + { + // + } + + public bool open(ch.cyberduck.core.Local local) + { + Process process = new Process(); + process.StartInfo.FileName = "\"" + local.getAbsolute() + "\""; + return Utils.StartProcess(process); + } + + public bool open(ch.cyberduck.core.Local local, Application application, ApplicationQuitCallback callback) + { + Process process = new Process(); + if (null == application) + { + process.StartInfo.FileName = "\"" + local.getAbsolute() + "\""; + } + else + { + process.StartInfo.FileName = GetExecutableCommand(application.getIdentifier()); + process.StartInfo.Arguments = "\"" + local.getAbsolute() + "\""; + } + return Utils.StartProcess(process); + } + + public bool open(Application application, string args) + { + Process process = new Process(); + process.StartInfo.FileName = GetExecutableCommand(application.getIdentifier()); + if (Utils.IsNotBlank(args)) + { + process.StartInfo.Arguments = args; + } + return Utils.StartProcess(process); + } + + public static string GetExecutableCommand(string command) + { + if (Utils.IsNotBlank(command) && command.Contains(".exe")) + { + return command.Substring(0, command.LastIndexOf(".exe") + 4); + } + return command; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/local/WindowsTemporaryFileService.cs b/core/src/main/csharp/ch/cyberduck/core/local/WindowsTemporaryFileService.cs similarity index 96% rename from source/ch/cyberduck/core/local/WindowsTemporaryFileService.cs rename to core/src/main/csharp/ch/cyberduck/core/local/WindowsTemporaryFileService.cs index dec0f1b421..8dd36e6251 100644 --- a/source/ch/cyberduck/core/local/WindowsTemporaryFileService.cs +++ b/core/src/main/csharp/ch/cyberduck/core/local/WindowsTemporaryFileService.cs @@ -1,46 +1,46 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Security.Cryptography; -using System.Text; -using ch.cyberduck.core; -using ch.cyberduck.core.local; -using java.io; -using org.apache.commons.io; - -namespace Ch.Cyberduck.Core.Local -{ - public sealed class WindowsTemporaryFileService : TemporaryFileService - { - protected override String shorten(string path) { - if (path.Length > 240) - { - return CalculateMD5Hash(path); - } - return path; - } - - private static string CalculateMD5Hash(string input) - { - MD5 md5 = MD5.Create(); - byte[] hash = md5.ComputeHash(Encoding.UTF8.GetBytes(input)); - return Convert.ToBase64String(hash); - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Security.Cryptography; +using System.Text; +using ch.cyberduck.core; +using ch.cyberduck.core.local; +using java.io; +using org.apache.commons.io; + +namespace Ch.Cyberduck.Core.Local +{ + public sealed class WindowsTemporaryFileService : TemporaryFileService + { + protected override String shorten(string path) { + if (path.Length > 240) + { + return CalculateMD5Hash(path); + } + return path; + } + + private static string CalculateMD5Hash(string input) + { + MD5 md5 = MD5.Create(); + byte[] hash = md5.ComputeHash(Encoding.UTF8.GetBytes(input)); + return Convert.ToBase64String(hash); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/preferences/AssemblyApplicationResourcesFinder.cs b/core/src/main/csharp/ch/cyberduck/core/preferences/AssemblyApplicationResourcesFinder.cs similarity index 100% rename from source/ch/cyberduck/core/preferences/AssemblyApplicationResourcesFinder.cs rename to core/src/main/csharp/ch/cyberduck/core/preferences/AssemblyApplicationResourcesFinder.cs diff --git a/source/ch/cyberduck/core/preferences/RoamingSupportDirectoryFinder.cs b/core/src/main/csharp/ch/cyberduck/core/preferences/RoamingSupportDirectoryFinder.cs similarity index 97% rename from source/ch/cyberduck/core/preferences/RoamingSupportDirectoryFinder.cs rename to core/src/main/csharp/ch/cyberduck/core/preferences/RoamingSupportDirectoryFinder.cs index 78d2645397..4fcb6b021c 100644 --- a/source/ch/cyberduck/core/preferences/RoamingSupportDirectoryFinder.cs +++ b/core/src/main/csharp/ch/cyberduck/core/preferences/RoamingSupportDirectoryFinder.cs @@ -1,35 +1,35 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using ch.cyberduck.core; -using ch.cyberduck.core.preferences; -using Path = System.IO.Path; - -namespace Ch.Cyberduck.Core.Preferences -{ - public class RoamingSupportDirectoryFinder : SupportDirectoryFinder - { - public ch.cyberduck.core.Local find() - { - return - LocalFactory.get(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), - PreferencesFactory.get().getProperty("application.name"))); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using ch.cyberduck.core; +using ch.cyberduck.core.preferences; +using Path = System.IO.Path; + +namespace Ch.Cyberduck.Core.Preferences +{ + public class RoamingSupportDirectoryFinder : SupportDirectoryFinder + { + public ch.cyberduck.core.Local find() + { + return + LocalFactory.get(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), + PreferencesFactory.get().getProperty("application.name"))); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/preferences/SettingsDictionary.cs b/core/src/main/csharp/ch/cyberduck/core/preferences/SettingsDictionary.cs similarity index 96% rename from source/ch/cyberduck/core/preferences/SettingsDictionary.cs rename to core/src/main/csharp/ch/cyberduck/core/preferences/SettingsDictionary.cs index f762dc65f5..8584dbadda 100644 --- a/source/ch/cyberduck/core/preferences/SettingsDictionary.cs +++ b/core/src/main/csharp/ch/cyberduck/core/preferences/SettingsDictionary.cs @@ -1,55 +1,55 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@langisch.ch -// -using System.Collections.Specialized; -using System.Xml; -using System.Xml.Schema; -using System.Xml.Serialization; - -namespace Ch.Cyberduck.Core.Preferences -{ - [XmlRoot(ElementName = "settings")] - public class SettingsDictionary : StringDictionary, IXmlSerializable - { - public XmlSchema GetSchema() - { - return null; - } - - public void ReadXml(XmlReader reader) - { - while (reader.Read()) - { - if (reader.IsStartElement()) - { - Add(reader["name"], reader["value"]); - } - } - } - - public void WriteXml(XmlWriter writer) - { - foreach (string key in Keys) - { - writer.WriteStartElement("setting"); - writer.WriteAttributeString("name", key); - writer.WriteAttributeString("value", this[key]); - writer.WriteEndElement(); - } - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@langisch.ch +// +using System.Collections.Specialized; +using System.Xml; +using System.Xml.Schema; +using System.Xml.Serialization; + +namespace Ch.Cyberduck.Core.Preferences +{ + [XmlRoot(ElementName = "settings")] + public class SettingsDictionary : StringDictionary, IXmlSerializable + { + public XmlSchema GetSchema() + { + return null; + } + + public void ReadXml(XmlReader reader) + { + while (reader.Read()) + { + if (reader.IsStartElement()) + { + Add(reader["name"], reader["value"]); + } + } + } + + public void WriteXml(XmlWriter writer) + { + foreach (string key in Keys) + { + writer.WriteStartElement("setting"); + writer.WriteAttributeString("name", key); + writer.WriteAttributeString("value", this[key]); + writer.WriteEndElement(); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/proxy/SystemProxy.cs b/core/src/main/csharp/ch/cyberduck/core/proxy/SystemProxy.cs similarity index 97% rename from source/ch/cyberduck/core/proxy/SystemProxy.cs rename to core/src/main/csharp/ch/cyberduck/core/proxy/SystemProxy.cs index dcbb77fee4..75da68c6d2 100644 --- a/source/ch/cyberduck/core/proxy/SystemProxy.cs +++ b/core/src/main/csharp/ch/cyberduck/core/proxy/SystemProxy.cs @@ -1,56 +1,56 @@ -// -// Copyright (c) 2010-2012 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Net; -using ch.cyberduck.core; -using ch.cyberduck.core.proxy; -using ch.cyberduck.core.preferences; - -using InetSocketAddress = java.net.InetSocketAddress; - -namespace Ch.Cyberduck.Core.Proxy -{ - public class SystemProxy : AbstractProxyFinder - { - private readonly IWebProxy _system = WebRequest.GetSystemWebProxy(); - - public override ch.cyberduck.core.proxy.Proxy find(Host host) - { - if (!PreferencesFactory.get().getBoolean("connection.proxy.enable")) - { - return ch.cyberduck.core.proxy.Proxy.DIRECT; - } - Uri target; - try - { - target = new Uri(new ProxyHostUrlProvider().get(host)); - } - catch (UriFormatException) - { - return ch.cyberduck.core.proxy.Proxy.DIRECT; - } - if (_system.IsBypassed(target)) - { - return ch.cyberduck.core.proxy.Proxy.DIRECT; - } - Uri proxy = _system.GetProxy(target); - return new ch.cyberduck.core.proxy.Proxy(ch.cyberduck.core.proxy.Proxy.Type.valueOf(proxy.Scheme.ToUpper()), proxy.Host, proxy.Port); - } - } +// +// Copyright (c) 2010-2012 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Net; +using ch.cyberduck.core; +using ch.cyberduck.core.proxy; +using ch.cyberduck.core.preferences; + +using InetSocketAddress = java.net.InetSocketAddress; + +namespace Ch.Cyberduck.Core.Proxy +{ + public class SystemProxy : AbstractProxyFinder + { + private readonly IWebProxy _system = WebRequest.GetSystemWebProxy(); + + public override ch.cyberduck.core.proxy.Proxy find(Host host) + { + if (!PreferencesFactory.get().getBoolean("connection.proxy.enable")) + { + return ch.cyberduck.core.proxy.Proxy.DIRECT; + } + Uri target; + try + { + target = new Uri(new ProxyHostUrlProvider().get(host)); + } + catch (UriFormatException) + { + return ch.cyberduck.core.proxy.Proxy.DIRECT; + } + if (_system.IsBypassed(target)) + { + return ch.cyberduck.core.proxy.Proxy.DIRECT; + } + Uri proxy = _system.GetProxy(target); + return new ch.cyberduck.core.proxy.Proxy(ch.cyberduck.core.proxy.Proxy.Type.valueOf(proxy.Scheme.ToUpper()), proxy.Host, proxy.Port); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/ssl/HostnameVerifier.cs b/core/src/main/csharp/ch/cyberduck/core/ssl/HostnameVerifier.cs similarity index 97% rename from source/ch/cyberduck/core/ssl/HostnameVerifier.cs rename to core/src/main/csharp/ch/cyberduck/core/ssl/HostnameVerifier.cs index 23be7bf927..6359e70d56 100644 --- a/source/ch/cyberduck/core/ssl/HostnameVerifier.cs +++ b/core/src/main/csharp/ch/cyberduck/core/ssl/HostnameVerifier.cs @@ -1,198 +1,198 @@ -// -// Copyright (c) 2010-2012 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Globalization; -using System.Security.Cryptography.X509Certificates; -using java.lang; -using java.util; -using org.apache.log4j; -using ArrayList = System.Collections.ArrayList; -using Exception = System.Exception; -using String = System.String; -using X509Certificate = java.security.cert.X509Certificate; - -namespace Ch.Cyberduck.Core.Ssl -{ - public class HostnameVerifier - { - private static readonly Logger Log = Logger.getLogger(typeof (HostnameVerifier).FullName); - - /// - // RFC2818 - HTTP Over TLS, Section 3.1 - // http://www.ietf.org/rfc/rfc2818.txt - // - // 1. if present MUST use subjectAltName dNSName as identity - // 1.1. if multiples entries a match of any one is acceptable - // 1.2. wildcard * is acceptable - // 2. URI may be an IP address -> subjectAltName.iPAddress - // 2.1. exact match is required - // 3. Use of the most specific Common Name (CN=) in the Subject - // 3.1 Existing practice but DEPRECATED - /// - /// - /// - /// - /// - ///todo We should get rid of the java certificate parameter. Means to find an easy way to get the subjectAltNames (see http://www.java2s.com/Open-Source/CSharp/2.6.4-mono-.net-core/System.Net/System/Net/ServicePointManager.cs.htm) - public static bool CheckServerIdentity(X509Certificate javaCert, - X509Certificate2 cert, string targetHost) - { - try - { - /* - SubjectAltName ::= GeneralNames - - GeneralNames :: = SEQUENCE SIZE (1..MAX) OF GeneralName - - GeneralName ::= CHOICE { - otherName [0] OtherName, - rfc822Name [1] IA5String, - dNSName [2] IA5String, - x400Address [3] ORAddress, - directoryName [4] Name, - ediPartyName [5] EDIPartyName, - uniformResourceIdentifier [6] IA5String, - iPAddress [7] OCTET STRING, - registeredID [8] OBJECT IDENTIFIER} - - SubjectAltName is of form \"rfc822Name=, - dNSName=, uri=, - ipaddress=
, guid= - - */ - - Collection ext = javaCert.getSubjectAlternativeNames(); - // subjectAltName - if (null != ext && ext.size() > 0) - { - for (Iterator i = ext.iterator(); i.hasNext();) - { - List item = (List) i.next(); - Integer type = (Integer) item.get(0); - switch (type.intValue()) - { - case 0: - continue; // SubjectAltName of type OtherName not - case 1: - continue; // rfc822Name - - case 2: - if (Match(targetHost, (String) item.get(1))) //dNSName - { - return true; - } - break; - case 3: - continue; // x400Address - case 4: - continue; // directoryName - case 5: - continue; // ediPartyName - case 6: - //todo shouldn't we handle uri as well? check spec. - continue; // uri - case 7: - if (targetHost.Equals((String) item.get(1))) // ipaddress, exact match required - { - return true; - } - break; - default: - continue; - } - } - } - // Common Name (CN=) - return Match(GetCommonName(cert), targetHost); - } - catch (Exception e) - { - Log.error("ERROR processing certificate: {0}", e); - return false; - } - } - - /// - /// Get CN from certificate - /// - /// - /// only the first CN found - private static string GetCommonName(X509Certificate2 cert) - { - ArrayList dn = RFC2253.parseStrict(cert.SubjectName.Name); - for (int i = 0; i < dn.Count; ++i) - { - RFC2253.RDNPair p = (RFC2253.RDNPair) dn[i]; - if ("CN".Equals(p.key)) - { - return RFC2253.unescape(p.value); - } - } - return null; - } - - public static bool Match(string hostname, string pattern) - { - // check if this is a pattern - int index = pattern.IndexOf('*'); - if (index == -1) - { - // not a pattern, do a direct case-insensitive comparison - return (String.Compare(hostname, pattern, true, CultureInfo.InvariantCulture) == 0); - } - - // check pattern validity - // A "*" wildcard character MAY be used as the left-most name component in the certificate. - - // unless this is the last char (valid) - if (index != pattern.Length - 1) - { - // then the next char must be a dot .'. - if (pattern[index + 1] != '.') - return false; - } - - // only one (A) wildcard is supported - int i2 = pattern.IndexOf('*', index + 1); - if (i2 != -1) - return false; - - // match the end of the pattern - string end = pattern.Substring(index + 1); - int length = hostname.Length - end.Length; - // no point to check a pattern that is longer than the hostname - if (length <= 0) - return false; - - if (String.Compare(hostname, length, end, 0, end.Length, true, CultureInfo.InvariantCulture) != 0) - return false; - - // special case, we start with the wildcard - if (index == 0) - { - // ensure we hostname non-matched part (start) doesn't contain a dot - int i3 = hostname.IndexOf('.'); - return ((i3 == -1) || (i3 >= (hostname.Length - end.Length))); - } - - // match the start of the pattern - string start = pattern.Substring(0, index); - return (String.Compare(hostname, 0, start, 0, start.Length, true, CultureInfo.InvariantCulture) == 0); - } - } +// +// Copyright (c) 2010-2012 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Globalization; +using System.Security.Cryptography.X509Certificates; +using java.lang; +using java.util; +using org.apache.log4j; +using ArrayList = System.Collections.ArrayList; +using Exception = System.Exception; +using String = System.String; +using X509Certificate = java.security.cert.X509Certificate; + +namespace Ch.Cyberduck.Core.Ssl +{ + public class HostnameVerifier + { + private static readonly Logger Log = Logger.getLogger(typeof (HostnameVerifier).FullName); + + /// + // RFC2818 - HTTP Over TLS, Section 3.1 + // http://www.ietf.org/rfc/rfc2818.txt + // + // 1. if present MUST use subjectAltName dNSName as identity + // 1.1. if multiples entries a match of any one is acceptable + // 1.2. wildcard * is acceptable + // 2. URI may be an IP address -> subjectAltName.iPAddress + // 2.1. exact match is required + // 3. Use of the most specific Common Name (CN=) in the Subject + // 3.1 Existing practice but DEPRECATED + /// + /// + /// + /// + /// + ///todo We should get rid of the java certificate parameter. Means to find an easy way to get the subjectAltNames (see http://www.java2s.com/Open-Source/CSharp/2.6.4-mono-.net-core/System.Net/System/Net/ServicePointManager.cs.htm) + public static bool CheckServerIdentity(X509Certificate javaCert, + X509Certificate2 cert, string targetHost) + { + try + { + /* + SubjectAltName ::= GeneralNames + + GeneralNames :: = SEQUENCE SIZE (1..MAX) OF GeneralName + + GeneralName ::= CHOICE { + otherName [0] OtherName, + rfc822Name [1] IA5String, + dNSName [2] IA5String, + x400Address [3] ORAddress, + directoryName [4] Name, + ediPartyName [5] EDIPartyName, + uniformResourceIdentifier [6] IA5String, + iPAddress [7] OCTET STRING, + registeredID [8] OBJECT IDENTIFIER} + + SubjectAltName is of form \"rfc822Name=, + dNSName=, uri=, + ipaddress=
, guid= + + */ + + Collection ext = javaCert.getSubjectAlternativeNames(); + // subjectAltName + if (null != ext && ext.size() > 0) + { + for (Iterator i = ext.iterator(); i.hasNext();) + { + List item = (List) i.next(); + Integer type = (Integer) item.get(0); + switch (type.intValue()) + { + case 0: + continue; // SubjectAltName of type OtherName not + case 1: + continue; // rfc822Name + + case 2: + if (Match(targetHost, (String) item.get(1))) //dNSName + { + return true; + } + break; + case 3: + continue; // x400Address + case 4: + continue; // directoryName + case 5: + continue; // ediPartyName + case 6: + //todo shouldn't we handle uri as well? check spec. + continue; // uri + case 7: + if (targetHost.Equals((String) item.get(1))) // ipaddress, exact match required + { + return true; + } + break; + default: + continue; + } + } + } + // Common Name (CN=) + return Match(GetCommonName(cert), targetHost); + } + catch (Exception e) + { + Log.error("ERROR processing certificate: {0}", e); + return false; + } + } + + /// + /// Get CN from certificate + /// + /// + /// only the first CN found + private static string GetCommonName(X509Certificate2 cert) + { + ArrayList dn = RFC2253.parseStrict(cert.SubjectName.Name); + for (int i = 0; i < dn.Count; ++i) + { + RFC2253.RDNPair p = (RFC2253.RDNPair) dn[i]; + if ("CN".Equals(p.key)) + { + return RFC2253.unescape(p.value); + } + } + return null; + } + + public static bool Match(string hostname, string pattern) + { + // check if this is a pattern + int index = pattern.IndexOf('*'); + if (index == -1) + { + // not a pattern, do a direct case-insensitive comparison + return (String.Compare(hostname, pattern, true, CultureInfo.InvariantCulture) == 0); + } + + // check pattern validity + // A "*" wildcard character MAY be used as the left-most name component in the certificate. + + // unless this is the last char (valid) + if (index != pattern.Length - 1) + { + // then the next char must be a dot .'. + if (pattern[index + 1] != '.') + return false; + } + + // only one (A) wildcard is supported + int i2 = pattern.IndexOf('*', index + 1); + if (i2 != -1) + return false; + + // match the end of the pattern + string end = pattern.Substring(index + 1); + int length = hostname.Length - end.Length; + // no point to check a pattern that is longer than the hostname + if (length <= 0) + return false; + + if (String.Compare(hostname, length, end, 0, end.Length, true, CultureInfo.InvariantCulture) != 0) + return false; + + // special case, we start with the wildcard + if (index == 0) + { + // ensure we hostname non-matched part (start) doesn't contain a dot + int i3 = hostname.IndexOf('.'); + return ((i3 == -1) || (i3 >= (hostname.Length - end.Length))); + } + + // match the start of the pattern + string start = pattern.Substring(0, index); + return (String.Compare(hostname, 0, start, 0, start.Length, true, CultureInfo.InvariantCulture) == 0); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/core/urlhandler/URLSchemeHandlerConfiguration.cs b/core/src/main/csharp/ch/cyberduck/core/urlhandler/URLSchemeHandlerConfiguration.cs similarity index 97% rename from source/ch/cyberduck/ui/core/urlhandler/URLSchemeHandlerConfiguration.cs rename to core/src/main/csharp/ch/cyberduck/core/urlhandler/URLSchemeHandlerConfiguration.cs index 32ce2c4b2a..498ba25de7 100755 --- a/source/ch/cyberduck/ui/core/urlhandler/URLSchemeHandlerConfiguration.cs +++ b/core/src/main/csharp/ch/cyberduck/core/urlhandler/URLSchemeHandlerConfiguration.cs @@ -1,164 +1,164 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Windows.Forms; -using Microsoft.Win32; -using org.apache.log4j; - -namespace Ch.Cyberduck.Ui.Core.Urlhandler -{ - public class URLSchemeHandlerConfiguration - { - private static readonly Logger Logger = Logger.getLogger(typeof (URLSchemeHandlerConfiguration).FullName); - private static readonly URLSchemeHandlerConfiguration instance = new URLSchemeHandlerConfiguration(); - - private URLSchemeHandlerConfiguration() - { - } - - public static URLSchemeHandlerConfiguration Instance - { - get { return instance; } - } - - /// - /// - /// - /// - private void RegisterCyberduckUrlHandler(RegistryKey registry) - { - CreateCustomUrlHandler(registry, "CyberduckURL", "Cyberduck URL", Application.ExecutablePath, - Application.ExecutablePath + ",0"); - } - - /// - /// Register Cyberduck as default application for the FTP URLs in the current user domain. - /// - public void RegisterFtpProtocol() - { - RegisterFtpProtocol(Registry.CurrentUser); - } - - /// - /// Register Cyberduck as default application for the FTP URLs. To make it work with the Windows Search box we need - /// some more tweaking (e.g. remove the ShellFolder from the ftp entry in the registry). - /// - /// - public void RegisterFtpProtocol(RegistryKey registry) - { - RegisterCyberduckUrlHandler(registry); - RegistryKey r = - registry.CreateSubKey(@"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\ftp\UserChoice"); - r.SetValue("Progid", "CyberduckURL"); - r.Close(); - } - - /// - /// Check if Cyberduck is the default application for FTP URLs in the current user domain. - /// - /// - public bool IsDefaultApplicationForFtp() - { - RegistryKey ftpUserChoice = - Registry.CurrentUser.OpenSubKey( - @"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\ftp\UserChoice"); - return (null != ftpUserChoice && "CyberduckURL".Equals(ftpUserChoice.GetValue("Progid"))); - } - - /// - /// Check if Cyberduck is the default application for SFTP URLs in the current user domain. - /// - /// - public bool IsDefaultApplicationForSftp() - { - RegistryKey sftpClass = Registry.CurrentUser.OpenSubKey(@"Software\Classes\sftp"); - if (null != sftpClass) - { - RegistryKey command = sftpClass.OpenSubKey(@"shell\open\command"); - if (null != command) - { - var value = (string) command.GetValue(String.Empty); - return (null != value && value.Contains("Cyberduck")); - } - } - return false; - } - - /// - /// Register Cyberduck as default application for the SFTP URLs in the current user domain. - /// - /// - public void RegisterSftpProtocol() - { - RegisterSftpProtocol(Registry.CurrentUser); - } - - /// - /// Register Cyberduck as default application for the SFTP URLs. - /// - /// - public void RegisterSftpProtocol(RegistryKey registry) - { - CreateCustomUrlHandler(registry, "sftp", "sftp protocol", Application.ExecutablePath, - Application.ExecutablePath + ",0"); - } - - private void CreateCustomUrlHandler(RegistryKey registry, string association, string description, - string applicationPath, string icon) - { - RegistryKey r32 = null; - RegistryKey r64 = null; - try - { - r32 = registry.CreateSubKey(@"SOFTWARE\Classes\" + association); - r32.SetValue(String.Empty, description); - r32.SetValue("URL Protocol", String.Empty); - - RegistryKey defaultIcon = r32.CreateSubKey("DefaultIcon"); - defaultIcon.SetValue(String.Empty, applicationPath); - - RegistryKey command = r32.CreateSubKey(@"shell\open\command"); - command.SetValue(String.Empty, "\"" + applicationPath + "\" \"%1\""); - - // If 64-bit OS, also register in the 32-bit registry area. - if (registry.OpenSubKey(@"SOFTWARE\Wow6432Node\Classes") != null) - { - r64 = registry.CreateSubKey(@"SOFTWARE\Wow6432Node\Classes" + association); - r64.SetValue(String.Empty, description); - r64.SetValue("URL Protocol", String.Empty); - - defaultIcon = r64.CreateSubKey("DefaultIcon"); - defaultIcon.SetValue(String.Empty, icon); - - command = r64.CreateSubKey(@"shell\open\command"); - command.SetValue(String.Empty, "\"" + applicationPath + "\" \"%1\""); - } - } - catch (UnauthorizedAccessException e) - { - Logger.error(e.Message); - } - finally - { - if (null != r32) r32.Close(); - if (null != r64) r64.Close(); - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Windows.Forms; +using Microsoft.Win32; +using org.apache.log4j; + +namespace Ch.Cyberduck.Ui.Core.Urlhandler +{ + public class URLSchemeHandlerConfiguration + { + private static readonly Logger Logger = Logger.getLogger(typeof (URLSchemeHandlerConfiguration).FullName); + private static readonly URLSchemeHandlerConfiguration instance = new URLSchemeHandlerConfiguration(); + + private URLSchemeHandlerConfiguration() + { + } + + public static URLSchemeHandlerConfiguration Instance + { + get { return instance; } + } + + /// + /// + /// + /// + private void RegisterCyberduckUrlHandler(RegistryKey registry) + { + CreateCustomUrlHandler(registry, "CyberduckURL", "Cyberduck URL", Application.ExecutablePath, + Application.ExecutablePath + ",0"); + } + + /// + /// Register Cyberduck as default application for the FTP URLs in the current user domain. + /// + public void RegisterFtpProtocol() + { + RegisterFtpProtocol(Registry.CurrentUser); + } + + /// + /// Register Cyberduck as default application for the FTP URLs. To make it work with the Windows Search box we need + /// some more tweaking (e.g. remove the ShellFolder from the ftp entry in the registry). + /// + /// + public void RegisterFtpProtocol(RegistryKey registry) + { + RegisterCyberduckUrlHandler(registry); + RegistryKey r = + registry.CreateSubKey(@"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\ftp\UserChoice"); + r.SetValue("Progid", "CyberduckURL"); + r.Close(); + } + + /// + /// Check if Cyberduck is the default application for FTP URLs in the current user domain. + /// + /// + public bool IsDefaultApplicationForFtp() + { + RegistryKey ftpUserChoice = + Registry.CurrentUser.OpenSubKey( + @"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\ftp\UserChoice"); + return (null != ftpUserChoice && "CyberduckURL".Equals(ftpUserChoice.GetValue("Progid"))); + } + + /// + /// Check if Cyberduck is the default application for SFTP URLs in the current user domain. + /// + /// + public bool IsDefaultApplicationForSftp() + { + RegistryKey sftpClass = Registry.CurrentUser.OpenSubKey(@"Software\Classes\sftp"); + if (null != sftpClass) + { + RegistryKey command = sftpClass.OpenSubKey(@"shell\open\command"); + if (null != command) + { + var value = (string) command.GetValue(String.Empty); + return (null != value && value.Contains("Cyberduck")); + } + } + return false; + } + + /// + /// Register Cyberduck as default application for the SFTP URLs in the current user domain. + /// + /// + public void RegisterSftpProtocol() + { + RegisterSftpProtocol(Registry.CurrentUser); + } + + /// + /// Register Cyberduck as default application for the SFTP URLs. + /// + /// + public void RegisterSftpProtocol(RegistryKey registry) + { + CreateCustomUrlHandler(registry, "sftp", "sftp protocol", Application.ExecutablePath, + Application.ExecutablePath + ",0"); + } + + private void CreateCustomUrlHandler(RegistryKey registry, string association, string description, + string applicationPath, string icon) + { + RegistryKey r32 = null; + RegistryKey r64 = null; + try + { + r32 = registry.CreateSubKey(@"SOFTWARE\Classes\" + association); + r32.SetValue(String.Empty, description); + r32.SetValue("URL Protocol", String.Empty); + + RegistryKey defaultIcon = r32.CreateSubKey("DefaultIcon"); + defaultIcon.SetValue(String.Empty, applicationPath); + + RegistryKey command = r32.CreateSubKey(@"shell\open\command"); + command.SetValue(String.Empty, "\"" + applicationPath + "\" \"%1\""); + + // If 64-bit OS, also register in the 32-bit registry area. + if (registry.OpenSubKey(@"SOFTWARE\Wow6432Node\Classes") != null) + { + r64 = registry.CreateSubKey(@"SOFTWARE\Wow6432Node\Classes" + association); + r64.SetValue(String.Empty, description); + r64.SetValue("URL Protocol", String.Empty); + + defaultIcon = r64.CreateSubKey("DefaultIcon"); + defaultIcon.SetValue(String.Empty, icon); + + command = r64.CreateSubKey(@"shell\open\command"); + command.SetValue(String.Empty, "\"" + applicationPath + "\" \"%1\""); + } + } + catch (UnauthorizedAccessException e) + { + Logger.error(e.Message); + } + finally + { + if (null != r32) r32.Close(); + if (null != r64) r64.Close(); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/core/preferences/SettingsDictionaryPreferences.cs b/core/src/main/csharp/ch/cyberduck/ui/core/preferences/SettingsDictionaryPreferences.cs similarity index 97% rename from source/ch/cyberduck/ui/core/preferences/SettingsDictionaryPreferences.cs rename to core/src/main/csharp/ch/cyberduck/ui/core/preferences/SettingsDictionaryPreferences.cs index 78cb9add81..600e741614 100644 --- a/source/ch/cyberduck/ui/core/preferences/SettingsDictionaryPreferences.cs +++ b/core/src/main/csharp/ch/cyberduck/ui/core/preferences/SettingsDictionaryPreferences.cs @@ -1,447 +1,447 @@ -// -// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. -// http://cyberduck.io/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// feedback@cyberduck.io -// - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Globalization; -using System.IO; -using System.Reflection; -using System.Text.RegularExpressions; -using ch.cyberduck.core.local; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Core.Bonjour; -using Ch.Cyberduck.Core.Diagnostics; -using Ch.Cyberduck.Core.Editor; -using Ch.Cyberduck.Core.I18n; -using Ch.Cyberduck.Core.Local; -using Ch.Cyberduck.Core.Preferences; -using Ch.Cyberduck.Core.Proxy; -using Ch.Cyberduck.Properties; -using Ch.Cyberduck.Ui.Controller; -using Ch.Cyberduck.Ui.Core.Local; -using Ch.Cyberduck.Ui.Growl; -using Ch.Cyberduck.Ui.Winforms; -using Ch.Cyberduck.Ui.Winforms.Threading; -using java.security; -using java.util; -using org.apache.log4j; -using sun.security.mscapi; -using Application = System.Windows.Forms.Application; - -namespace Ch.Cyberduck.Ui.Core.Preferences -{ - public class SettingsDictionaryPreferences : ch.cyberduck.core.preferences.Preferences - { - private static readonly Logger Log = Logger.getLogger(typeof (SettingsDictionaryPreferences).FullName); - private SettingsDictionary _settings; - - /// - /// Try to get an OS version specific download path: - /// - XP : Desktop - /// - Vista or later : Downloads folder in the user home directory - /// - private string DefaultDownloadPath - { - get - { - string homePath = HomeFolder; - if (!string.IsNullOrEmpty(homePath)) - { - string downloads = Path.Combine(homePath, "Downloads"); - if (Directory.Exists(downloads)) - { - return downloads; - } - } - // fallback is Desktop - return Environment.GetFolderPath(Environment.SpecialFolder.Desktop); - } - } - - /// - /// Get platform specific home directory - /// - public static string HomeFolder - { - get - { - return (Environment.OSVersion.Platform == PlatformID.Unix || - Environment.OSVersion.Platform == PlatformID.MacOSX) - ? Environment.GetEnvironmentVariable("HOME") - : Environment.GetEnvironmentVariable("USERPROFILE"); - } - } - - private static string ApplicationRevision - { - get { return Assembly.GetExecutingAssembly().GetName().Version.Revision.ToString(); } - } - - private static string ApplicationVersion - { - get { return Application.ProductVersion; } - } - - public override void setProperty(string property, string value) - { - Log.info("setProperty: " + property + "," + value); - _settings[property] = value; - } - - public override string locale() - { - return getProperty("application.language"); - } - - public override void setProperty(string str, List l) - { - throw new InvalidOperationException(); - } - - public override void deleteProperty(string property) - { - Log.debug("deleteProperty: " + property); - _settings.Remove(property); - } - - public override string getProperty(string property) - { - if (_settings.ContainsKey(property)) - { - return _settings[property]; - } - return getDefault(property); - } - - public override string getDisplayName(string locale) - { - //cy is a special case as it is not available in the framework - if ("cy".Equals(locale)) - { - return "Welsh"; - } - CultureInfo cultureInfo = CultureInfo.GetCultureInfo(locale.Replace('_', '-')); - return cultureInfo.TextInfo.ToTitleCase(cultureInfo.NativeName); - } - - public override List applicationLocales() - { - Assembly asm = Cyberduck.Core.Utils.Me(); - string[] names = asm.GetManifestResourceNames(); - // the dots apparently come from the relative path in the msbuild file - Regex regex = new Regex("Core\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.([^\\..]*).lproj\\.Localizable\\.strings"); - List distinctNames = new List(); - foreach (var name in names) - { - Match match = regex.Match(name); - if (match.Groups.Count > 1) - { - distinctNames.Add(match.Groups[1].Value); - } - } - if (!HasEastAsianFontSupport()) - { - distinctNames.Remove("ja"); - distinctNames.Remove("ko"); - distinctNames.Remove("ka"); - distinctNames.Remove("zh_CN"); - distinctNames.Remove("zh_TW"); - } - return Cyberduck.Core.Utils.ConvertToJavaList(distinctNames); - } - - private bool HasEastAsianFontSupport() - { - if (Cyberduck.Core.Utils.IsVistaOrLater) - { - return true; - } - return - Convert.ToBoolean(NativeMethods.IsValidLocale(CultureInfo.CreateSpecificCulture("zh").LCID, - NativeConstants.LCID_INSTALLED)); - } - - public object GetSpecialObject(string property) - { - return Settings.Default[property]; - } - - public override void save() - { - Log.debug("Saving preferences"); - // re-set field to force save - Settings.Default.CdSettings = _settings; - Settings.Default.Save(); - } - - public override List systemLocales() - { - List locales = new ArrayList(); - //add current UI culture - locales.add(CultureInfo.CurrentUICulture.Name); - //add current system culture - locales.add(Application.CurrentCulture.Name); - return locales; - } - - public override void load() - { - Log.debug("Loading preferences"); - // upgrade settings for a new version - if (Settings.Default.UpgradeSettings) - { - Settings.Default.Upgrade(); - Settings.Default.UpgradeSettings = false; - } - _settings = Settings.Default.CdSettings ?? new SettingsDictionary(); - } - - protected override void setLogging() - { - defaults.put("logging.config", "log4j-windows.xml"); - base.setLogging(); - } - - protected override void setDefaults() - { - defaults.put("application.name", Application.ProductName); - defaults.put("application.version", ApplicationVersion); - defaults.put("application.revision", ApplicationRevision); - defaults.put("application.language", GetDefaultLanguage()); - defaults.put("application.language.custom", false.ToString()); - - defaults.put("update.feed.release", "https://version.cyberduck.io/changelog.wys"); - defaults.put("update.feed.beta", "https://version.cyberduck.io/beta/changelog.wys"); - defaults.put("update.feed.nightly", "https://version.cyberduck.io/nightly/changelog.wys"); - - defaults.put("update.feed", "release"); - - // Importers - defaults.put("bookmark.import.winscp.location", - Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs), "WinSCP", "winscp.ini")); - defaults.put("bookmark.import.filezilla.location", - Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FileZilla", - "sitemanager.xml")); - defaults.put("bookmark.import.smartftp.location", - Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "SmartFTP", - "Client 2.0", "Favorites")); - defaults.put("bookmark.import.totalcommander.location", - Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "GHISLER", - "wcx_ftp.ini")); - defaults.put("bookmark.import.flashfxp3.location", - Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FlashFXP", "3", - "Sites.dat")); - defaults.put("bookmark.import.flashfxp4.location", - Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FlashFXP", "4", - "Sites.dat")); - defaults.put("bookmark.import.flashfxp4.common.location", - Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "FlashFXP", "4", - "Sites.dat")); - defaults.put("bookmark.import.wsftp.location", - Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Ipswitch", "WS_FTP", - "Sites")); - defaults.put("bookmark.import.fireftp.location", - Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Mozilla", "Firefox", - "Profiles")); - defaults.put("bookmark.import.s3browser.location", - Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "S3Browser", - "settings.ini")); - defaults.put("bookmark.import.crossftp.location", Path.Combine(HomeFolder, ".crossftp", "sites.xml")); - defaults.put("bookmark.import.cloudberry.s3.location", - Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), - "CloudBerry S3 Explorer for Amazon S3", "settings.list")); - defaults.put("bookmark.import.cloudberry.google.location", - Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), - "CloudBerry Explorer for Google Storage", "settings.list")); - defaults.put("bookmark.import.cloudberry.azure.location", - Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), - "CloudBerry Explorer for Azure Blob Storage", "settings.list")); - - base.setDefaults(); - - //disable reminder for protocol handler registration - defaults.put("defaulthandler.reminder", false.ToString()); - - defaults.put("update.check.last", "0"); - - defaults.put("queue.download.folder", DefaultDownloadPath); - defaults.put("queue.upload.permissions.default", true.ToString()); - defaults.put("queue.upload.permissions.change", true.ToString()); - - defaults.put("queue.dock.badge", true.ToString()); - - defaults.put("ssh.knownhosts", - Path.Combine(new RoamingSupportDirectoryFinder().find().getAbsolute(), "known_hosts")); - defaults.put("browser.enterkey.rename", false.ToString()); - defaults.put("terminal.command.ssh", Path.Combine(HomeFolder, "putty.exe")); - defaults.put("terminal.command.ssh.args", "-ssh {0} {1}@{2} -t -P {3} -m \"{4}\""); - - defaults.put("editor.bundleIdentifier", new SystemWatchEditorFactory.Notepad().getIdentifier()); - - defaults.put("notifications.timeout.milliseconds", "300"); - - //default browser toolbar set - defaults.put("browser.toolbar", true.ToString()); - defaults.put("browser.toolbar.openconnection", true.ToString()); - defaults.put("browser.toolbar.quickconnect", true.ToString()); - defaults.put("browser.toolbar.action", true.ToString()); - defaults.put("browser.toolbar.info", true.ToString()); - defaults.put("browser.toolbar.refresh", true.ToString()); - defaults.put("browser.toolbar.edit", true.ToString()); - defaults.put("browser.toolbar.openinbrowser", false.ToString()); - defaults.put("browser.toolbar.openinterminal", false.ToString()); - defaults.put("browser.toolbar.newfolder", false.ToString()); - defaults.put("browser.toolbar.delete", false.ToString()); - defaults.put("browser.toolbar.download", false.ToString()); - defaults.put("browser.toolbar.upload", true.ToString()); - defaults.put("browser.toolbar.transfers", true.ToString()); - - //default transfer toolbar set - defaults.put("transfer.toolbar.resume", true.ToString()); - defaults.put("transfer.toolbar.reload", true.ToString()); - defaults.put("transfer.toolbar.stop", true.ToString()); - defaults.put("transfer.toolbar.remove", true.ToString()); - defaults.put("transfer.toolbar.cleanup", false.ToString()); - defaults.put("transfer.toolbar.log", false.ToString()); - defaults.put("transfer.toolbar.open", true.ToString()); - defaults.put("transfer.toolbar.show", true.ToString()); - - // Resolve symbolic links downloading target file instead. Cannot create symbolic links on FAT. - defaults.put("path.symboliclink.resolve", true.ToString()); - // Resolve local links uploading target file instead. Currently not supporting shortcuts on Windows. - defaults.put("local.symboliclink.resolve", true.ToString()); - - defaults.put("local.user.home", HomeFolder); - defaults.put("local.delimiter", "\\"); - defaults.put("local.normalize.tilde", false.ToString()); - - // SSL Keystore - // Add mscapi security provider - Security.addProvider(new SunMSCAPI()); - defaults.put("connection.ssl.keystore.type", "Windows-MY"); - defaults.put("connection.ssl.keystore.provider", "SunMSCAPI"); - } - - protected override void post() - { - base.post(); - Logger root = Logger.getRootLogger(); - var fileName = Path.Combine(this.getProperty("application.support.path"), - this.getProperty("application.name").ToLower().Replace(" ", "") + ".log"); - RollingFileAppender appender = new RollingFileAppender(new PatternLayout(@"%d [%t] %-5p %c - %m%n"), - fileName, true); - appender.setMaxFileSize("10MB"); - appender.setMaxBackupIndex(0); - root.addAppender(appender); - if (Debugger.IsAttached) - { - root.setLevel(Level.DEBUG); - } - } - - protected override void setFactories() - { - base.setFactories(); - - defaults.put("factory.supportdirectoryfinder.class", - typeof (RoamingSupportDirectoryFinder).AssemblyQualifiedName); - defaults.put("factory.applicationresourcesfinder.class", - typeof (AssemblyApplicationResourcesFinder).AssemblyQualifiedName); - defaults.put("factory.local.class", typeof (SystemLocal).AssemblyQualifiedName); - defaults.put("factory.locale.class", typeof (DictionaryLocale).AssemblyQualifiedName); - defaults.put("factory.dateformatter.class", typeof (UserDefaultsDateFormatter).AssemblyQualifiedName); - defaults.put("factory.passwordstore.class", typeof (DataProtectorPasswordStore).AssemblyQualifiedName); - defaults.put("factory.certificatestore.class", typeof (SystemCertificateStore).AssemblyQualifiedName); - defaults.put("factory.hostkeycallback.class", typeof (HostKeyController).AssemblyQualifiedName); - defaults.put("factory.logincallback.class", typeof (PromptLoginController).AssemblyQualifiedName); - defaults.put("factory.transfererrorcallback.class", - typeof (DialogTransferErrorCallback).AssemblyQualifiedName); - defaults.put("factory.transferpromptcallback.download.class", - typeof (DownloadPromptController).AssemblyQualifiedName); - defaults.put("factory.transferpromptcallback.upload.class", - typeof (UploadPromptController).AssemblyQualifiedName); - defaults.put("factory.transferpromptcallback.copy.class", - typeof (UploadPromptController).AssemblyQualifiedName); - defaults.put("factory.transferpromptcallback.sync.class", - typeof (SyncPromptController).AssemblyQualifiedName); - defaults.put("factory.proxy.class", typeof (SystemProxy).AssemblyQualifiedName); - defaults.put("factory.reachability.class", typeof (TcpReachability).AssemblyQualifiedName); - defaults.put("factory.rendezvous.class", typeof (Rendezvous).AssemblyQualifiedName); - - defaults.put("factory.applicationfinder.class", typeof (RegistryApplicationFinder).AssemblyQualifiedName); - defaults.put("factory.applicationlauncher.class", typeof (WindowsApplicationLauncher).AssemblyQualifiedName); - defaults.put("factory.temporaryfiles.class", typeof (WindowsTemporaryFileService).AssemblyQualifiedName); - defaults.put("factory.browserlauncher.class", typeof (DefaultBrowserLauncher).AssemblyQualifiedName); - defaults.put("factory.reveal.class", typeof (ExplorerRevealService).AssemblyQualifiedName); - defaults.put("factory.trash.class", typeof (RecycleLocalTrashFeature).AssemblyQualifiedName); - defaults.put("factory.symlink.class", typeof (NullLocalSymlinkFeature).AssemblyQualifiedName); - defaults.put("factory.terminalservice.class", typeof (SshTerminalService).AssemblyQualifiedName); - defaults.put("factory.editorfactory.class", typeof (SystemWatchEditorFactory).AssemblyQualifiedName); - defaults.put("factory.notification.class", typeof (ToolstripNotificationService).AssemblyQualifiedName); - if (Cyberduck.Core.Utils.IsWin7OrLater) - { - defaults.put("factory.badgelabeler.class", typeof (TaskbarApplicationBadgeLabeler).AssemblyQualifiedName); - } - defaults.put("factory.filedescriptor.class", typeof (Win32FileDescriptor).AssemblyQualifiedName); - } - - public string GetDefaultLanguage() - { - List sysLocales = systemLocales(); - List appLocales = applicationLocales(); - for (int i = 0; i < sysLocales.size(); i++) - { - string s = (string) sysLocales.get(i); - string match = TryToMatchLocale(s.Replace('-', '_'), appLocales); - if (null != match) - { - Log.debug(String.Format("Default locale is '{0}' for system locale '{1}'", match, s)); - return match; - } - } - //default to english - Log.debug("Fallback to locale 'en'"); - return "en"; - } - - private string TryToMatchLocale(string sysLocale, List appLocales) - { - for (int i = 0; i < appLocales.size(); i++) - { - string l = (string) appLocales.get(i); - if (l.Equals(sysLocale)) - { - //direct match - return l; - } - //remove region - int m = sysLocale.IndexOf('_'); - if (m > 0) - { - string country = sysLocale.Substring(0, m); - if (l.Equals(country)) - { - return l; - } - } - } - return null; - } - } +// +// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. +// http://cyberduck.io/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// feedback@cyberduck.io +// + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Reflection; +using System.Text.RegularExpressions; +using ch.cyberduck.core.local; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Core.Bonjour; +using Ch.Cyberduck.Core.Diagnostics; +using Ch.Cyberduck.Core.Editor; +using Ch.Cyberduck.Core.I18n; +using Ch.Cyberduck.Core.Local; +using Ch.Cyberduck.Core.Preferences; +using Ch.Cyberduck.Core.Proxy; +using Ch.Cyberduck.Properties; +using Ch.Cyberduck.Ui.Controller; +using Ch.Cyberduck.Ui.Core.Local; +using Ch.Cyberduck.Ui.Growl; +using Ch.Cyberduck.Ui.Winforms; +using Ch.Cyberduck.Ui.Winforms.Threading; +using java.security; +using java.util; +using org.apache.log4j; +using sun.security.mscapi; +using Application = System.Windows.Forms.Application; + +namespace Ch.Cyberduck.Ui.Core.Preferences +{ + public class SettingsDictionaryPreferences : ch.cyberduck.core.preferences.Preferences + { + private static readonly Logger Log = Logger.getLogger(typeof (SettingsDictionaryPreferences).FullName); + private SettingsDictionary _settings; + + /// + /// Try to get an OS version specific download path: + /// - XP : Desktop + /// - Vista or later : Downloads folder in the user home directory + /// + private string DefaultDownloadPath + { + get + { + string homePath = HomeFolder; + if (!string.IsNullOrEmpty(homePath)) + { + string downloads = Path.Combine(homePath, "Downloads"); + if (Directory.Exists(downloads)) + { + return downloads; + } + } + // fallback is Desktop + return Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + } + } + + /// + /// Get platform specific home directory + /// + public static string HomeFolder + { + get + { + return (Environment.OSVersion.Platform == PlatformID.Unix || + Environment.OSVersion.Platform == PlatformID.MacOSX) + ? Environment.GetEnvironmentVariable("HOME") + : Environment.GetEnvironmentVariable("USERPROFILE"); + } + } + + private static string ApplicationRevision + { + get { return Assembly.GetExecutingAssembly().GetName().Version.Revision.ToString(); } + } + + private static string ApplicationVersion + { + get { return Application.ProductVersion; } + } + + public override void setProperty(string property, string value) + { + Log.info("setProperty: " + property + "," + value); + _settings[property] = value; + } + + public override string locale() + { + return getProperty("application.language"); + } + + public override void setProperty(string str, List l) + { + throw new InvalidOperationException(); + } + + public override void deleteProperty(string property) + { + Log.debug("deleteProperty: " + property); + _settings.Remove(property); + } + + public override string getProperty(string property) + { + if (_settings.ContainsKey(property)) + { + return _settings[property]; + } + return getDefault(property); + } + + public override string getDisplayName(string locale) + { + //cy is a special case as it is not available in the framework + if ("cy".Equals(locale)) + { + return "Welsh"; + } + CultureInfo cultureInfo = CultureInfo.GetCultureInfo(locale.Replace('_', '-')); + return cultureInfo.TextInfo.ToTitleCase(cultureInfo.NativeName); + } + + public override List applicationLocales() + { + Assembly asm = Cyberduck.Core.Utils.Me(); + string[] names = asm.GetManifestResourceNames(); + // the dots apparently come from the relative path in the msbuild file + Regex regex = new Regex("Core\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.([^\\..]*).lproj\\.Localizable\\.strings"); + List distinctNames = new List(); + foreach (var name in names) + { + Match match = regex.Match(name); + if (match.Groups.Count > 1) + { + distinctNames.Add(match.Groups[1].Value); + } + } + if (!HasEastAsianFontSupport()) + { + distinctNames.Remove("ja"); + distinctNames.Remove("ko"); + distinctNames.Remove("ka"); + distinctNames.Remove("zh_CN"); + distinctNames.Remove("zh_TW"); + } + return Cyberduck.Core.Utils.ConvertToJavaList(distinctNames); + } + + private bool HasEastAsianFontSupport() + { + if (Cyberduck.Core.Utils.IsVistaOrLater) + { + return true; + } + return + Convert.ToBoolean(NativeMethods.IsValidLocale(CultureInfo.CreateSpecificCulture("zh").LCID, + NativeConstants.LCID_INSTALLED)); + } + + public object GetSpecialObject(string property) + { + return Settings.Default[property]; + } + + public override void save() + { + Log.debug("Saving preferences"); + // re-set field to force save + Settings.Default.CdSettings = _settings; + Settings.Default.Save(); + } + + public override List systemLocales() + { + List locales = new ArrayList(); + //add current UI culture + locales.add(CultureInfo.CurrentUICulture.Name); + //add current system culture + locales.add(Application.CurrentCulture.Name); + return locales; + } + + public override void load() + { + Log.debug("Loading preferences"); + // upgrade settings for a new version + if (Settings.Default.UpgradeSettings) + { + Settings.Default.Upgrade(); + Settings.Default.UpgradeSettings = false; + } + _settings = Settings.Default.CdSettings ?? new SettingsDictionary(); + } + + protected override void setLogging() + { + defaults.put("logging.config", "log4j-windows.xml"); + base.setLogging(); + } + + protected override void setDefaults() + { + defaults.put("application.name", Application.ProductName); + defaults.put("application.version", ApplicationVersion); + defaults.put("application.revision", ApplicationRevision); + defaults.put("application.language", GetDefaultLanguage()); + defaults.put("application.language.custom", false.ToString()); + + defaults.put("update.feed.release", "https://version.cyberduck.io/changelog.wys"); + defaults.put("update.feed.beta", "https://version.cyberduck.io/beta/changelog.wys"); + defaults.put("update.feed.nightly", "https://version.cyberduck.io/nightly/changelog.wys"); + + defaults.put("update.feed", "release"); + + // Importers + defaults.put("bookmark.import.winscp.location", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs), "WinSCP", "winscp.ini")); + defaults.put("bookmark.import.filezilla.location", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FileZilla", + "sitemanager.xml")); + defaults.put("bookmark.import.smartftp.location", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "SmartFTP", + "Client 2.0", "Favorites")); + defaults.put("bookmark.import.totalcommander.location", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "GHISLER", + "wcx_ftp.ini")); + defaults.put("bookmark.import.flashfxp3.location", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FlashFXP", "3", + "Sites.dat")); + defaults.put("bookmark.import.flashfxp4.location", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FlashFXP", "4", + "Sites.dat")); + defaults.put("bookmark.import.flashfxp4.common.location", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "FlashFXP", "4", + "Sites.dat")); + defaults.put("bookmark.import.wsftp.location", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Ipswitch", "WS_FTP", + "Sites")); + defaults.put("bookmark.import.fireftp.location", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Mozilla", "Firefox", + "Profiles")); + defaults.put("bookmark.import.s3browser.location", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "S3Browser", + "settings.ini")); + defaults.put("bookmark.import.crossftp.location", Path.Combine(HomeFolder, ".crossftp", "sites.xml")); + defaults.put("bookmark.import.cloudberry.s3.location", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), + "CloudBerry S3 Explorer for Amazon S3", "settings.list")); + defaults.put("bookmark.import.cloudberry.google.location", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), + "CloudBerry Explorer for Google Storage", "settings.list")); + defaults.put("bookmark.import.cloudberry.azure.location", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), + "CloudBerry Explorer for Azure Blob Storage", "settings.list")); + + base.setDefaults(); + + //disable reminder for protocol handler registration + defaults.put("defaulthandler.reminder", false.ToString()); + + defaults.put("update.check.last", "0"); + + defaults.put("queue.download.folder", DefaultDownloadPath); + defaults.put("queue.upload.permissions.default", true.ToString()); + defaults.put("queue.upload.permissions.change", true.ToString()); + + defaults.put("queue.dock.badge", true.ToString()); + + defaults.put("ssh.knownhosts", + Path.Combine(new RoamingSupportDirectoryFinder().find().getAbsolute(), "known_hosts")); + defaults.put("browser.enterkey.rename", false.ToString()); + defaults.put("terminal.command.ssh", Path.Combine(HomeFolder, "putty.exe")); + defaults.put("terminal.command.ssh.args", "-ssh {0} {1}@{2} -t -P {3} -m \"{4}\""); + + defaults.put("editor.bundleIdentifier", new SystemWatchEditorFactory.Notepad().getIdentifier()); + + defaults.put("notifications.timeout.milliseconds", "300"); + + //default browser toolbar set + defaults.put("browser.toolbar", true.ToString()); + defaults.put("browser.toolbar.openconnection", true.ToString()); + defaults.put("browser.toolbar.quickconnect", true.ToString()); + defaults.put("browser.toolbar.action", true.ToString()); + defaults.put("browser.toolbar.info", true.ToString()); + defaults.put("browser.toolbar.refresh", true.ToString()); + defaults.put("browser.toolbar.edit", true.ToString()); + defaults.put("browser.toolbar.openinbrowser", false.ToString()); + defaults.put("browser.toolbar.openinterminal", false.ToString()); + defaults.put("browser.toolbar.newfolder", false.ToString()); + defaults.put("browser.toolbar.delete", false.ToString()); + defaults.put("browser.toolbar.download", false.ToString()); + defaults.put("browser.toolbar.upload", true.ToString()); + defaults.put("browser.toolbar.transfers", true.ToString()); + + //default transfer toolbar set + defaults.put("transfer.toolbar.resume", true.ToString()); + defaults.put("transfer.toolbar.reload", true.ToString()); + defaults.put("transfer.toolbar.stop", true.ToString()); + defaults.put("transfer.toolbar.remove", true.ToString()); + defaults.put("transfer.toolbar.cleanup", false.ToString()); + defaults.put("transfer.toolbar.log", false.ToString()); + defaults.put("transfer.toolbar.open", true.ToString()); + defaults.put("transfer.toolbar.show", true.ToString()); + + // Resolve symbolic links downloading target file instead. Cannot create symbolic links on FAT. + defaults.put("path.symboliclink.resolve", true.ToString()); + // Resolve local links uploading target file instead. Currently not supporting shortcuts on Windows. + defaults.put("local.symboliclink.resolve", true.ToString()); + + defaults.put("local.user.home", HomeFolder); + defaults.put("local.delimiter", "\\"); + defaults.put("local.normalize.tilde", false.ToString()); + + // SSL Keystore + // Add mscapi security provider + Security.addProvider(new SunMSCAPI()); + defaults.put("connection.ssl.keystore.type", "Windows-MY"); + defaults.put("connection.ssl.keystore.provider", "SunMSCAPI"); + } + + protected override void post() + { + base.post(); + Logger root = Logger.getRootLogger(); + var fileName = Path.Combine(this.getProperty("application.support.path"), + this.getProperty("application.name").ToLower().Replace(" ", "") + ".log"); + RollingFileAppender appender = new RollingFileAppender(new PatternLayout(@"%d [%t] %-5p %c - %m%n"), + fileName, true); + appender.setMaxFileSize("10MB"); + appender.setMaxBackupIndex(0); + root.addAppender(appender); + if (Debugger.IsAttached) + { + root.setLevel(Level.DEBUG); + } + } + + protected override void setFactories() + { + base.setFactories(); + + defaults.put("factory.supportdirectoryfinder.class", + typeof (RoamingSupportDirectoryFinder).AssemblyQualifiedName); + defaults.put("factory.applicationresourcesfinder.class", + typeof (AssemblyApplicationResourcesFinder).AssemblyQualifiedName); + defaults.put("factory.local.class", typeof (SystemLocal).AssemblyQualifiedName); + defaults.put("factory.locale.class", typeof (DictionaryLocale).AssemblyQualifiedName); + defaults.put("factory.dateformatter.class", typeof (UserDefaultsDateFormatter).AssemblyQualifiedName); + defaults.put("factory.passwordstore.class", typeof (DataProtectorPasswordStore).AssemblyQualifiedName); + defaults.put("factory.certificatestore.class", typeof (SystemCertificateStore).AssemblyQualifiedName); + defaults.put("factory.hostkeycallback.class", typeof (HostKeyController).AssemblyQualifiedName); + defaults.put("factory.logincallback.class", typeof (PromptLoginController).AssemblyQualifiedName); + defaults.put("factory.transfererrorcallback.class", + typeof (DialogTransferErrorCallback).AssemblyQualifiedName); + defaults.put("factory.transferpromptcallback.download.class", + typeof (DownloadPromptController).AssemblyQualifiedName); + defaults.put("factory.transferpromptcallback.upload.class", + typeof (UploadPromptController).AssemblyQualifiedName); + defaults.put("factory.transferpromptcallback.copy.class", + typeof (UploadPromptController).AssemblyQualifiedName); + defaults.put("factory.transferpromptcallback.sync.class", + typeof (SyncPromptController).AssemblyQualifiedName); + defaults.put("factory.proxy.class", typeof (SystemProxy).AssemblyQualifiedName); + defaults.put("factory.reachability.class", typeof (TcpReachability).AssemblyQualifiedName); + defaults.put("factory.rendezvous.class", typeof (Rendezvous).AssemblyQualifiedName); + + defaults.put("factory.applicationfinder.class", typeof (RegistryApplicationFinder).AssemblyQualifiedName); + defaults.put("factory.applicationlauncher.class", typeof (WindowsApplicationLauncher).AssemblyQualifiedName); + defaults.put("factory.temporaryfiles.class", typeof (WindowsTemporaryFileService).AssemblyQualifiedName); + defaults.put("factory.browserlauncher.class", typeof (DefaultBrowserLauncher).AssemblyQualifiedName); + defaults.put("factory.reveal.class", typeof (ExplorerRevealService).AssemblyQualifiedName); + defaults.put("factory.trash.class", typeof (RecycleLocalTrashFeature).AssemblyQualifiedName); + defaults.put("factory.symlink.class", typeof (NullLocalSymlinkFeature).AssemblyQualifiedName); + defaults.put("factory.terminalservice.class", typeof (SshTerminalService).AssemblyQualifiedName); + defaults.put("factory.editorfactory.class", typeof (SystemWatchEditorFactory).AssemblyQualifiedName); + defaults.put("factory.notification.class", typeof (ToolstripNotificationService).AssemblyQualifiedName); + if (Cyberduck.Core.Utils.IsWin7OrLater) + { + defaults.put("factory.badgelabeler.class", typeof (TaskbarApplicationBadgeLabeler).AssemblyQualifiedName); + } + defaults.put("factory.filedescriptor.class", typeof (Win32FileDescriptor).AssemblyQualifiedName); + } + + public string GetDefaultLanguage() + { + List sysLocales = systemLocales(); + List appLocales = applicationLocales(); + for (int i = 0; i < sysLocales.size(); i++) + { + string s = (string) sysLocales.get(i); + string match = TryToMatchLocale(s.Replace('-', '_'), appLocales); + if (null != match) + { + Log.debug(String.Format("Default locale is '{0}' for system locale '{1}'", match, s)); + return match; + } + } + //default to english + Log.debug("Fallback to locale 'en'"); + return "en"; + } + + private string TryToMatchLocale(string sysLocale, List appLocales) + { + for (int i = 0; i < appLocales.size(); i++) + { + string l = (string) appLocales.get(i); + if (l.Equals(sysLocale)) + { + //direct match + return l; + } + //remove region + int m = sysLocale.IndexOf('_'); + if (m > 0) + { + string country = sysLocale.Substring(0, m); + if (l.Equals(country)) + { + return l; + } + } + } + return null; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/growl/ToolstripNotificationService.cs b/core/src/main/csharp/ch/cyberduck/ui/growl/ToolstripNotificationService.cs similarity index 97% rename from source/ch/cyberduck/ui/growl/ToolstripNotificationService.cs rename to core/src/main/csharp/ch/cyberduck/ui/growl/ToolstripNotificationService.cs index 2d0501ab17..8ba58f9f06 100644 --- a/source/ch/cyberduck/ui/growl/ToolstripNotificationService.cs +++ b/core/src/main/csharp/ch/cyberduck/ui/growl/ToolstripNotificationService.cs @@ -1,91 +1,91 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Drawing; -using System.Windows.Forms; -using ch.cyberduck.core; -using ch.cyberduck.core.aquaticprime; -using ch.cyberduck.core.local; -using ch.cyberduck.core.notification; -using ch.cyberduck.core.preferences; -using Ch.Cyberduck.Ui.Controller; -using Application = System.Windows.Forms.Application; - -namespace Ch.Cyberduck.Ui.Growl -{ - public class ToolstripNotificationService : NotificationService - { - private readonly NotifyIcon _icon = new NotifyIcon(); - - public void notify(string title, string description) - { - _icon.ShowBalloonTip(PreferencesFactory.get().getInteger("notifications.timeout.milliseconds"), title, - description, ToolTipIcon.Info); - } - - public void setup() - { - ContextMenuStrip rightMenu = new ContextMenuStrip(); - ToolStripMenuItem itemUpdate = new ToolStripMenuItem - { - Text = LocaleFactory.get().localize("Check for Update…", "Main") - }; - itemUpdate.Click += delegate { UpdateController.Instance.ForceCheckForUpdates(false); }; - ToolStripMenuItem itemDonate = new ToolStripMenuItem - { - Text = LocaleFactory.get().localize("Donate…", "Main") - }; - itemDonate.Click += - delegate { BrowserLauncherFactory.get().open(PreferencesFactory.get().getProperty("website.donate")); }; - ToolStripMenuItem itemKey = new ToolStripMenuItem {Text = LicenseFactory.find().ToString(), Enabled = false}; - ToolStripMenuItem itemExit = new ToolStripMenuItem - { - Text = LocaleFactory.get().localize("Exit", "Localizable") - }; - itemExit.Click += delegate { MainController.Exit(); }; - rightMenu.Items.AddRange(new ToolStripItem[] - {itemUpdate, new ToolStripSeparator(), itemDonate, itemKey, new ToolStripSeparator(), itemExit}); - - _icon.Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath); - _icon.Visible = true; - _icon.ContextMenuStrip = rightMenu; - - _icon.MouseClick += delegate(object sender, MouseEventArgs args) - { - if (args.Button == MouseButtons.Left) - { - foreach (BrowserController browser in MainController.Browsers) - { - browser.View.Activate(); - browser.View.BringToFront(); - } - } - }; - } - - public void unregister() - { - _icon.Dispose(); - } - - public void notifyWithImage(string title, string description, string image) - { - notify(title, description); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Drawing; +using System.Windows.Forms; +using ch.cyberduck.core; +using ch.cyberduck.core.aquaticprime; +using ch.cyberduck.core.local; +using ch.cyberduck.core.notification; +using ch.cyberduck.core.preferences; +using Ch.Cyberduck.Ui.Controller; +using Application = System.Windows.Forms.Application; + +namespace Ch.Cyberduck.Ui.Growl +{ + public class ToolstripNotificationService : NotificationService + { + private readonly NotifyIcon _icon = new NotifyIcon(); + + public void notify(string title, string description) + { + _icon.ShowBalloonTip(PreferencesFactory.get().getInteger("notifications.timeout.milliseconds"), title, + description, ToolTipIcon.Info); + } + + public void setup() + { + ContextMenuStrip rightMenu = new ContextMenuStrip(); + ToolStripMenuItem itemUpdate = new ToolStripMenuItem + { + Text = LocaleFactory.get().localize("Check for Update…", "Main") + }; + itemUpdate.Click += delegate { UpdateController.Instance.ForceCheckForUpdates(false); }; + ToolStripMenuItem itemDonate = new ToolStripMenuItem + { + Text = LocaleFactory.get().localize("Donate…", "Main") + }; + itemDonate.Click += + delegate { BrowserLauncherFactory.get().open(PreferencesFactory.get().getProperty("website.donate")); }; + ToolStripMenuItem itemKey = new ToolStripMenuItem {Text = LicenseFactory.find().ToString(), Enabled = false}; + ToolStripMenuItem itemExit = new ToolStripMenuItem + { + Text = LocaleFactory.get().localize("Exit", "Localizable") + }; + itemExit.Click += delegate { MainController.Exit(); }; + rightMenu.Items.AddRange(new ToolStripItem[] + {itemUpdate, new ToolStripSeparator(), itemDonate, itemKey, new ToolStripSeparator(), itemExit}); + + _icon.Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath); + _icon.Visible = true; + _icon.ContextMenuStrip = rightMenu; + + _icon.MouseClick += delegate(object sender, MouseEventArgs args) + { + if (args.Button == MouseButtons.Left) + { + foreach (BrowserController browser in MainController.Browsers) + { + browser.View.Activate(); + browser.View.BringToFront(); + } + } + }; + } + + public void unregister() + { + _icon.Dispose(); + } + + public void notifyWithImage(string title, string description, string image) + { + notify(title, description); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/AbstractCollectionListener.java b/core/src/main/java/ch/cyberduck/core/AbstractCollectionListener.java similarity index 100% rename from source/ch/cyberduck/core/AbstractCollectionListener.java rename to core/src/main/java/ch/cyberduck/core/AbstractCollectionListener.java diff --git a/source/ch/cyberduck/core/AbstractController.java b/core/src/main/java/ch/cyberduck/core/AbstractController.java similarity index 100% rename from source/ch/cyberduck/core/AbstractController.java rename to core/src/main/java/ch/cyberduck/core/AbstractController.java diff --git a/source/ch/cyberduck/core/AbstractExceptionMappingService.java b/core/src/main/java/ch/cyberduck/core/AbstractExceptionMappingService.java similarity index 100% rename from source/ch/cyberduck/core/AbstractExceptionMappingService.java rename to core/src/main/java/ch/cyberduck/core/AbstractExceptionMappingService.java diff --git a/source/ch/cyberduck/core/AbstractFolderHostCollection.java b/core/src/main/java/ch/cyberduck/core/AbstractFolderHostCollection.java similarity index 100% rename from source/ch/cyberduck/core/AbstractFolderHostCollection.java rename to core/src/main/java/ch/cyberduck/core/AbstractFolderHostCollection.java diff --git a/source/ch/cyberduck/core/AbstractHostCollection.java b/core/src/main/java/ch/cyberduck/core/AbstractHostCollection.java similarity index 100% rename from source/ch/cyberduck/core/AbstractHostCollection.java rename to core/src/main/java/ch/cyberduck/core/AbstractHostCollection.java diff --git a/source/ch/cyberduck/core/AbstractPath.java b/core/src/main/java/ch/cyberduck/core/AbstractPath.java similarity index 100% rename from source/ch/cyberduck/core/AbstractPath.java rename to core/src/main/java/ch/cyberduck/core/AbstractPath.java diff --git a/source/ch/cyberduck/core/AbstractProtocol.java b/core/src/main/java/ch/cyberduck/core/AbstractProtocol.java similarity index 100% rename from source/ch/cyberduck/core/AbstractProtocol.java rename to core/src/main/java/ch/cyberduck/core/AbstractProtocol.java diff --git a/source/ch/cyberduck/core/Acl.java b/core/src/main/java/ch/cyberduck/core/Acl.java similarity index 100% rename from source/ch/cyberduck/core/Acl.java rename to core/src/main/java/ch/cyberduck/core/Acl.java diff --git a/source/ch/cyberduck/core/ApplescriptTerminalService.java b/core/src/main/java/ch/cyberduck/core/ApplescriptTerminalService.java similarity index 100% rename from source/ch/cyberduck/core/ApplescriptTerminalService.java rename to core/src/main/java/ch/cyberduck/core/ApplescriptTerminalService.java diff --git a/source/ch/cyberduck/core/Archive.java b/core/src/main/java/ch/cyberduck/core/Archive.java similarity index 100% rename from source/ch/cyberduck/core/Archive.java rename to core/src/main/java/ch/cyberduck/core/Archive.java diff --git a/source/ch/cyberduck/core/AttributedList.java b/core/src/main/java/ch/cyberduck/core/AttributedList.java similarity index 100% rename from source/ch/cyberduck/core/AttributedList.java rename to core/src/main/java/ch/cyberduck/core/AttributedList.java diff --git a/source/ch/cyberduck/core/AttributedListAttributes.java b/core/src/main/java/ch/cyberduck/core/AttributedListAttributes.java similarity index 100% rename from source/ch/cyberduck/core/AttributedListAttributes.java rename to core/src/main/java/ch/cyberduck/core/AttributedListAttributes.java diff --git a/source/ch/cyberduck/core/Attributes.java b/core/src/main/java/ch/cyberduck/core/Attributes.java similarity index 100% rename from source/ch/cyberduck/core/Attributes.java rename to core/src/main/java/ch/cyberduck/core/Attributes.java diff --git a/source/ch/cyberduck/core/BookmarkCollection.java b/core/src/main/java/ch/cyberduck/core/BookmarkCollection.java similarity index 100% rename from source/ch/cyberduck/core/BookmarkCollection.java rename to core/src/main/java/ch/cyberduck/core/BookmarkCollection.java diff --git a/source/ch/cyberduck/core/BookmarkNameProvider.java b/core/src/main/java/ch/cyberduck/core/BookmarkNameProvider.java similarity index 100% rename from source/ch/cyberduck/core/BookmarkNameProvider.java rename to core/src/main/java/ch/cyberduck/core/BookmarkNameProvider.java diff --git a/source/ch/cyberduck/core/Cache.java b/core/src/main/java/ch/cyberduck/core/Cache.java similarity index 100% rename from source/ch/cyberduck/core/Cache.java rename to core/src/main/java/ch/cyberduck/core/Cache.java diff --git a/source/ch/cyberduck/core/CacheReference.java b/core/src/main/java/ch/cyberduck/core/CacheReference.java similarity index 100% rename from source/ch/cyberduck/core/CacheReference.java rename to core/src/main/java/ch/cyberduck/core/CacheReference.java diff --git a/source/ch/cyberduck/core/CertificateStore.java b/core/src/main/java/ch/cyberduck/core/CertificateStore.java similarity index 100% rename from source/ch/cyberduck/core/CertificateStore.java rename to core/src/main/java/ch/cyberduck/core/CertificateStore.java diff --git a/source/ch/cyberduck/core/CertificateStoreFactory.java b/core/src/main/java/ch/cyberduck/core/CertificateStoreFactory.java similarity index 100% rename from source/ch/cyberduck/core/CertificateStoreFactory.java rename to core/src/main/java/ch/cyberduck/core/CertificateStoreFactory.java diff --git a/source/ch/cyberduck/core/CharsetProvider.java b/core/src/main/java/ch/cyberduck/core/CharsetProvider.java similarity index 100% rename from source/ch/cyberduck/core/CharsetProvider.java rename to core/src/main/java/ch/cyberduck/core/CharsetProvider.java diff --git a/source/ch/cyberduck/core/Collection.java b/core/src/main/java/ch/cyberduck/core/Collection.java similarity index 100% rename from source/ch/cyberduck/core/Collection.java rename to core/src/main/java/ch/cyberduck/core/Collection.java diff --git a/source/ch/cyberduck/core/CollectionListener.java b/core/src/main/java/ch/cyberduck/core/CollectionListener.java similarity index 100% rename from source/ch/cyberduck/core/CollectionListener.java rename to core/src/main/java/ch/cyberduck/core/CollectionListener.java diff --git a/source/ch/cyberduck/core/ConnectionCallback.java b/core/src/main/java/ch/cyberduck/core/ConnectionCallback.java similarity index 100% rename from source/ch/cyberduck/core/ConnectionCallback.java rename to core/src/main/java/ch/cyberduck/core/ConnectionCallback.java diff --git a/source/ch/cyberduck/core/ConnectionService.java b/core/src/main/java/ch/cyberduck/core/ConnectionService.java similarity index 100% rename from source/ch/cyberduck/core/ConnectionService.java rename to core/src/main/java/ch/cyberduck/core/ConnectionService.java diff --git a/source/ch/cyberduck/core/Controller.java b/core/src/main/java/ch/cyberduck/core/Controller.java similarity index 100% rename from source/ch/cyberduck/core/Controller.java rename to core/src/main/java/ch/cyberduck/core/Controller.java diff --git a/source/ch/cyberduck/core/Credentials.java b/core/src/main/java/ch/cyberduck/core/Credentials.java similarity index 100% rename from source/ch/cyberduck/core/Credentials.java rename to core/src/main/java/ch/cyberduck/core/Credentials.java diff --git a/source/ch/cyberduck/core/CredentialsConfigurator.java b/core/src/main/java/ch/cyberduck/core/CredentialsConfigurator.java similarity index 100% rename from source/ch/cyberduck/core/CredentialsConfigurator.java rename to core/src/main/java/ch/cyberduck/core/CredentialsConfigurator.java diff --git a/source/ch/cyberduck/core/CredentialsConfiguratorFactory.java b/core/src/main/java/ch/cyberduck/core/CredentialsConfiguratorFactory.java similarity index 96% rename from source/ch/cyberduck/core/CredentialsConfiguratorFactory.java rename to core/src/main/java/ch/cyberduck/core/CredentialsConfiguratorFactory.java index eb9481affd..683c0e32e3 100644 --- a/source/ch/cyberduck/core/CredentialsConfiguratorFactory.java +++ b/core/src/main/java/ch/cyberduck/core/CredentialsConfiguratorFactory.java @@ -38,7 +38,7 @@ public final class CredentialsConfiguratorFactory { * @return Configurator for default settings */ public static CredentialsConfigurator get(final Protocol protocol) { - if(protocol.getType() == Protocol.Type.ssh) { + if(protocol.getType() == Protocol.Type.sftp) { synchronized(lock) { if(null == instance) { instance = new OpenSSHCredentialsConfigurator(); diff --git a/source/ch/cyberduck/core/DefaultCertificateStore.java b/core/src/main/java/ch/cyberduck/core/DefaultCertificateStore.java similarity index 100% rename from source/ch/cyberduck/core/DefaultCertificateStore.java rename to core/src/main/java/ch/cyberduck/core/DefaultCertificateStore.java diff --git a/source/ch/cyberduck/core/DefaultCharsetProvider.java b/core/src/main/java/ch/cyberduck/core/DefaultCharsetProvider.java similarity index 100% rename from source/ch/cyberduck/core/DefaultCharsetProvider.java rename to core/src/main/java/ch/cyberduck/core/DefaultCharsetProvider.java diff --git a/source/ch/cyberduck/core/DefaultIOExceptionMappingService.java b/core/src/main/java/ch/cyberduck/core/DefaultIOExceptionMappingService.java similarity index 100% rename from source/ch/cyberduck/core/DefaultIOExceptionMappingService.java rename to core/src/main/java/ch/cyberduck/core/DefaultIOExceptionMappingService.java diff --git a/source/ch/cyberduck/core/DefaultPathKindDetector.java b/core/src/main/java/ch/cyberduck/core/DefaultPathKindDetector.java similarity index 100% rename from source/ch/cyberduck/core/DefaultPathKindDetector.java rename to core/src/main/java/ch/cyberduck/core/DefaultPathKindDetector.java diff --git a/source/ch/cyberduck/core/DefaultPathReference.java b/core/src/main/java/ch/cyberduck/core/DefaultPathReference.java similarity index 100% rename from source/ch/cyberduck/core/DefaultPathReference.java rename to core/src/main/java/ch/cyberduck/core/DefaultPathReference.java diff --git a/source/ch/cyberduck/core/DefaultProviderHelpService.java b/core/src/main/java/ch/cyberduck/core/DefaultProviderHelpService.java similarity index 100% rename from source/ch/cyberduck/core/DefaultProviderHelpService.java rename to core/src/main/java/ch/cyberduck/core/DefaultProviderHelpService.java diff --git a/source/ch/cyberduck/core/DelimiterPathKindDetector.java b/core/src/main/java/ch/cyberduck/core/DelimiterPathKindDetector.java similarity index 100% rename from source/ch/cyberduck/core/DelimiterPathKindDetector.java rename to core/src/main/java/ch/cyberduck/core/DelimiterPathKindDetector.java diff --git a/source/ch/cyberduck/core/DescriptiveUrl.java b/core/src/main/java/ch/cyberduck/core/DescriptiveUrl.java similarity index 100% rename from source/ch/cyberduck/core/DescriptiveUrl.java rename to core/src/main/java/ch/cyberduck/core/DescriptiveUrl.java diff --git a/source/ch/cyberduck/core/DescriptiveUrlBag.java b/core/src/main/java/ch/cyberduck/core/DescriptiveUrlBag.java similarity index 100% rename from source/ch/cyberduck/core/DescriptiveUrlBag.java rename to core/src/main/java/ch/cyberduck/core/DescriptiveUrlBag.java diff --git a/source/ch/cyberduck/core/DeserializerFactory.java b/core/src/main/java/ch/cyberduck/core/DeserializerFactory.java similarity index 100% rename from source/ch/cyberduck/core/DeserializerFactory.java rename to core/src/main/java/ch/cyberduck/core/DeserializerFactory.java diff --git a/source/ch/cyberduck/core/DisabledCancelCallback.java b/core/src/main/java/ch/cyberduck/core/DisabledCancelCallback.java similarity index 100% rename from source/ch/cyberduck/core/DisabledCancelCallback.java rename to core/src/main/java/ch/cyberduck/core/DisabledCancelCallback.java diff --git a/source/ch/cyberduck/core/DisabledCertificateStore.java b/core/src/main/java/ch/cyberduck/core/DisabledCertificateStore.java similarity index 100% rename from source/ch/cyberduck/core/DisabledCertificateStore.java rename to core/src/main/java/ch/cyberduck/core/DisabledCertificateStore.java diff --git a/source/ch/cyberduck/core/DisabledConnectionCallback.java b/core/src/main/java/ch/cyberduck/core/DisabledConnectionCallback.java similarity index 100% rename from source/ch/cyberduck/core/DisabledConnectionCallback.java rename to core/src/main/java/ch/cyberduck/core/DisabledConnectionCallback.java diff --git a/source/ch/cyberduck/core/DisabledHostKeyCallback.java b/core/src/main/java/ch/cyberduck/core/DisabledHostKeyCallback.java similarity index 100% rename from source/ch/cyberduck/core/DisabledHostKeyCallback.java rename to core/src/main/java/ch/cyberduck/core/DisabledHostKeyCallback.java diff --git a/source/ch/cyberduck/core/DisabledListProgressListener.java b/core/src/main/java/ch/cyberduck/core/DisabledListProgressListener.java similarity index 100% rename from source/ch/cyberduck/core/DisabledListProgressListener.java rename to core/src/main/java/ch/cyberduck/core/DisabledListProgressListener.java diff --git a/source/ch/cyberduck/core/DisabledLocale.java b/core/src/main/java/ch/cyberduck/core/DisabledLocale.java similarity index 100% rename from source/ch/cyberduck/core/DisabledLocale.java rename to core/src/main/java/ch/cyberduck/core/DisabledLocale.java diff --git a/source/ch/cyberduck/core/DisabledLoginCallback.java b/core/src/main/java/ch/cyberduck/core/DisabledLoginCallback.java similarity index 100% rename from source/ch/cyberduck/core/DisabledLoginCallback.java rename to core/src/main/java/ch/cyberduck/core/DisabledLoginCallback.java diff --git a/source/ch/cyberduck/core/DisabledPasswordStore.java b/core/src/main/java/ch/cyberduck/core/DisabledPasswordStore.java similarity index 100% rename from source/ch/cyberduck/core/DisabledPasswordStore.java rename to core/src/main/java/ch/cyberduck/core/DisabledPasswordStore.java diff --git a/source/ch/cyberduck/core/DisabledProgressListener.java b/core/src/main/java/ch/cyberduck/core/DisabledProgressListener.java similarity index 100% rename from source/ch/cyberduck/core/DisabledProgressListener.java rename to core/src/main/java/ch/cyberduck/core/DisabledProgressListener.java diff --git a/source/ch/cyberduck/core/DisabledSleepPreventer.java b/core/src/main/java/ch/cyberduck/core/DisabledSleepPreventer.java similarity index 100% rename from source/ch/cyberduck/core/DisabledSleepPreventer.java rename to core/src/main/java/ch/cyberduck/core/DisabledSleepPreventer.java diff --git a/source/ch/cyberduck/core/DisabledTerminalService.java b/core/src/main/java/ch/cyberduck/core/DisabledTerminalService.java similarity index 100% rename from source/ch/cyberduck/core/DisabledTerminalService.java rename to core/src/main/java/ch/cyberduck/core/DisabledTerminalService.java diff --git a/source/ch/cyberduck/core/DisabledTranscriptListener.java b/core/src/main/java/ch/cyberduck/core/DisabledTranscriptListener.java similarity index 100% rename from source/ch/cyberduck/core/DisabledTranscriptListener.java rename to core/src/main/java/ch/cyberduck/core/DisabledTranscriptListener.java diff --git a/source/ch/cyberduck/core/DistributionCredentials.java b/core/src/main/java/ch/cyberduck/core/DistributionCredentials.java similarity index 100% rename from source/ch/cyberduck/core/DistributionCredentials.java rename to core/src/main/java/ch/cyberduck/core/DistributionCredentials.java diff --git a/source/ch/cyberduck/core/EditableCollection.java b/core/src/main/java/ch/cyberduck/core/EditableCollection.java similarity index 100% rename from source/ch/cyberduck/core/EditableCollection.java rename to core/src/main/java/ch/cyberduck/core/EditableCollection.java diff --git a/source/ch/cyberduck/core/ExceptionMappingService.java b/core/src/main/java/ch/cyberduck/core/ExceptionMappingService.java similarity index 100% rename from source/ch/cyberduck/core/ExceptionMappingService.java rename to core/src/main/java/ch/cyberduck/core/ExceptionMappingService.java diff --git a/source/ch/cyberduck/core/Factory.java b/core/src/main/java/ch/cyberduck/core/Factory.java similarity index 100% rename from source/ch/cyberduck/core/Factory.java rename to core/src/main/java/ch/cyberduck/core/Factory.java diff --git a/source/ch/cyberduck/core/FactoryException.java b/core/src/main/java/ch/cyberduck/core/FactoryException.java similarity index 100% rename from source/ch/cyberduck/core/FactoryException.java rename to core/src/main/java/ch/cyberduck/core/FactoryException.java diff --git a/source/ch/cyberduck/core/Filter.java b/core/src/main/java/ch/cyberduck/core/Filter.java similarity index 100% rename from source/ch/cyberduck/core/Filter.java rename to core/src/main/java/ch/cyberduck/core/Filter.java diff --git a/source/ch/cyberduck/core/FolderBookmarkCollection.java b/core/src/main/java/ch/cyberduck/core/FolderBookmarkCollection.java similarity index 100% rename from source/ch/cyberduck/core/FolderBookmarkCollection.java rename to core/src/main/java/ch/cyberduck/core/FolderBookmarkCollection.java diff --git a/source/ch/cyberduck/core/FolderTransferCollection.java b/core/src/main/java/ch/cyberduck/core/FolderTransferCollection.java similarity index 100% rename from source/ch/cyberduck/core/FolderTransferCollection.java rename to core/src/main/java/ch/cyberduck/core/FolderTransferCollection.java diff --git a/source/ch/cyberduck/core/Header.java b/core/src/main/java/ch/cyberduck/core/Header.java similarity index 100% rename from source/ch/cyberduck/core/Header.java rename to core/src/main/java/ch/cyberduck/core/Header.java diff --git a/source/ch/cyberduck/core/HistoryCollection.java b/core/src/main/java/ch/cyberduck/core/HistoryCollection.java similarity index 100% rename from source/ch/cyberduck/core/HistoryCollection.java rename to core/src/main/java/ch/cyberduck/core/HistoryCollection.java diff --git a/source/ch/cyberduck/core/Host.java b/core/src/main/java/ch/cyberduck/core/Host.java similarity index 95% rename from source/ch/cyberduck/core/Host.java rename to core/src/main/java/ch/cyberduck/core/Host.java index e22e9cca33..f1ba37f0c5 100644 --- a/source/ch/cyberduck/core/Host.java +++ b/core/src/main/java/ch/cyberduck/core/Host.java @@ -19,7 +19,6 @@ package ch.cyberduck.core; */ import ch.cyberduck.core.ftp.FTPConnectMode; -import ch.cyberduck.core.preferences.PreferencesFactory; import ch.cyberduck.core.serializer.Serializer; import org.apache.commons.lang3.StringUtils; @@ -134,28 +133,6 @@ public class Host implements Serializable, Comparable { */ private Local volume; - /** - * New host with the default protocol - * - * @param hostname The hostname of the server - */ - public Host(final String hostname) { - this(null == ProtocolFactory.forName(PreferencesFactory.get().getProperty("connection.protocol.default")) - ? ProtocolFactory.FTP : ProtocolFactory.forName(PreferencesFactory.get().getProperty("connection.protocol.default")), - hostname); - } - - /** - * New host with the default protocol for this port - * - * @param hostname The hostname of the server - * @param port The port number to connect to - */ - public Host(final String hostname, final int port) { - this(null == ProtocolFactory.getDefaultProtocol(port) ? - ProtocolFactory.FTP : ProtocolFactory.getDefaultProtocol(port), hostname, port); - } - /** * @param protocol Scheme */ @@ -349,7 +326,7 @@ public class Host implements Serializable, Comparable { public String toString() { return LocaleFactory.localizedString("Qloudsonic (UDP-based Data Transfer Protocol)"); } - }; + } } /** diff --git a/source/ch/cyberduck/core/HostCredentials.java b/core/src/main/java/ch/cyberduck/core/HostCredentials.java similarity index 100% rename from source/ch/cyberduck/core/HostCredentials.java rename to core/src/main/java/ch/cyberduck/core/HostCredentials.java diff --git a/source/ch/cyberduck/core/HostFilter.java b/core/src/main/java/ch/cyberduck/core/HostFilter.java similarity index 100% rename from source/ch/cyberduck/core/HostFilter.java rename to core/src/main/java/ch/cyberduck/core/HostFilter.java diff --git a/source/ch/cyberduck/core/HostKeyCallback.java b/core/src/main/java/ch/cyberduck/core/HostKeyCallback.java similarity index 100% rename from source/ch/cyberduck/core/HostKeyCallback.java rename to core/src/main/java/ch/cyberduck/core/HostKeyCallback.java diff --git a/source/ch/cyberduck/core/HostKeyCallbackFactory.java b/core/src/main/java/ch/cyberduck/core/HostKeyCallbackFactory.java similarity index 100% rename from source/ch/cyberduck/core/HostKeyCallbackFactory.java rename to core/src/main/java/ch/cyberduck/core/HostKeyCallbackFactory.java diff --git a/source/ch/cyberduck/core/HostParser.java b/core/src/main/java/ch/cyberduck/core/HostParser.java similarity index 100% rename from source/ch/cyberduck/core/HostParser.java rename to core/src/main/java/ch/cyberduck/core/HostParser.java diff --git a/source/ch/cyberduck/core/HostPasswordStore.java b/core/src/main/java/ch/cyberduck/core/HostPasswordStore.java similarity index 100% rename from source/ch/cyberduck/core/HostPasswordStore.java rename to core/src/main/java/ch/cyberduck/core/HostPasswordStore.java diff --git a/source/ch/cyberduck/core/HostReaderFactory.java b/core/src/main/java/ch/cyberduck/core/HostReaderFactory.java similarity index 100% rename from source/ch/cyberduck/core/HostReaderFactory.java rename to core/src/main/java/ch/cyberduck/core/HostReaderFactory.java diff --git a/source/ch/cyberduck/core/HostUrlProvider.java b/core/src/main/java/ch/cyberduck/core/HostUrlProvider.java similarity index 100% rename from source/ch/cyberduck/core/HostUrlProvider.java rename to core/src/main/java/ch/cyberduck/core/HostUrlProvider.java diff --git a/source/ch/cyberduck/core/HostWriterFactory.java b/core/src/main/java/ch/cyberduck/core/HostWriterFactory.java similarity index 100% rename from source/ch/cyberduck/core/HostWriterFactory.java rename to core/src/main/java/ch/cyberduck/core/HostWriterFactory.java diff --git a/source/ch/cyberduck/core/HostnameConfigurator.java b/core/src/main/java/ch/cyberduck/core/HostnameConfigurator.java similarity index 100% rename from source/ch/cyberduck/core/HostnameConfigurator.java rename to core/src/main/java/ch/cyberduck/core/HostnameConfigurator.java diff --git a/source/ch/cyberduck/core/HostnameConfiguratorFactory.java b/core/src/main/java/ch/cyberduck/core/HostnameConfiguratorFactory.java similarity index 96% rename from source/ch/cyberduck/core/HostnameConfiguratorFactory.java rename to core/src/main/java/ch/cyberduck/core/HostnameConfiguratorFactory.java index b9581d2395..5738a60f19 100644 --- a/source/ch/cyberduck/core/HostnameConfiguratorFactory.java +++ b/core/src/main/java/ch/cyberduck/core/HostnameConfiguratorFactory.java @@ -38,7 +38,7 @@ public final class HostnameConfiguratorFactory { * @return Configurator for default settings */ public static HostnameConfigurator get(final Protocol protocol) { - if(protocol.getType() == Protocol.Type.ssh) { + if(protocol.getType() == Protocol.Type.sftp) { synchronized(lock) { if(null == instance) { instance = new OpenSSHHostnameConfigurator(); diff --git a/source/ch/cyberduck/core/IOKitSleepPreventer.java b/core/src/main/java/ch/cyberduck/core/IOKitSleepPreventer.java similarity index 97% rename from source/ch/cyberduck/core/IOKitSleepPreventer.java rename to core/src/main/java/ch/cyberduck/core/IOKitSleepPreventer.java index 5efa6d8a53..022fde1be3 100644 --- a/source/ch/cyberduck/core/IOKitSleepPreventer.java +++ b/core/src/main/java/ch/cyberduck/core/IOKitSleepPreventer.java @@ -27,7 +27,7 @@ import ch.cyberduck.core.preferences.PreferencesFactory; public final class IOKitSleepPreventer implements SleepPreventer { static { - Native.load("iokitsleeppreventer"); + Native.load("core"); } private static final String reason diff --git a/source/ch/cyberduck/core/Keychain.java b/core/src/main/java/ch/cyberduck/core/Keychain.java similarity index 92% rename from source/ch/cyberduck/core/Keychain.java rename to core/src/main/java/ch/cyberduck/core/Keychain.java index 906820beec..4cd5dc8469 100644 --- a/source/ch/cyberduck/core/Keychain.java +++ b/core/src/main/java/ch/cyberduck/core/Keychain.java @@ -18,7 +18,7 @@ package ch.cyberduck.core; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.ProxyController; +import ch.cyberduck.binding.Proxy; import ch.cyberduck.core.exception.ConnectionCanceledException; import ch.cyberduck.core.library.Native; import ch.cyberduck.core.ssl.CertificateStoreX509KeyManager; @@ -46,17 +46,17 @@ public final class Keychain extends HostPasswordStore implements PasswordStore, private static final Logger log = Logger.getLogger(Keychain.class); static { - Native.load("keychain"); + Native.load("core"); } - private final Controller controller; + private final Proxy proxy; public Keychain() { - this(new ProxyController()); + this(new Proxy()); } - public Keychain(final Controller controller) { - this.controller = controller; + public Keychain(final Proxy proxy) { + this.proxy = proxy; } /** @@ -122,12 +122,13 @@ public final class Keychain extends HostPasswordStore implements PasswordStore, } final Object[] encoded = new DEREncoder().encode(certificates); final AtomicBoolean trusted = new AtomicBoolean(false); - controller.invoke(new DefaultMainAction() { + final DefaultMainAction action = new DefaultMainAction() { @Override public void run() { trusted.set(isTrustedNative(hostname, encoded)); } - }, true); + }; + proxy.invoke(action, action.lock(), true); return trusted.get(); } @@ -149,12 +150,13 @@ public final class Keychain extends HostPasswordStore implements PasswordStore, } final Object[] encoded = new DEREncoder().encode(certificates); final AtomicBoolean accepted = new AtomicBoolean(false); - controller.invoke(new DefaultMainAction() { + final DefaultMainAction action = new DefaultMainAction() { @Override public void run() { accepted.set(displayCertificatesNative(encoded)); } - }, true); + }; + proxy.invoke(action, action.lock(), true); return accepted.get(); } @@ -180,12 +182,13 @@ public final class Keychain extends HostPasswordStore implements PasswordStore, try { final Object[] encoded = new DEREncoder().encode(certificates); final AtomicReference select = new AtomicReference(); - controller.invoke(new DefaultMainAction() { + final DefaultMainAction action = new DefaultMainAction() { @Override public void run() { select.set(chooseCertificateNative(encoded, hostname, prompt)); } - }, true); + }; + proxy.invoke(action, action.lock(), true); if(null == select.get()) { if(log.isInfoEnabled()) { diff --git a/source/ch/cyberduck/core/KeychainLoginService.java b/core/src/main/java/ch/cyberduck/core/KeychainLoginService.java similarity index 96% rename from source/ch/cyberduck/core/KeychainLoginService.java rename to core/src/main/java/ch/cyberduck/core/KeychainLoginService.java index 941c5c302a..d7cb4d7d86 100644 --- a/source/ch/cyberduck/core/KeychainLoginService.java +++ b/core/src/main/java/ch/cyberduck/core/KeychainLoginService.java @@ -54,16 +54,16 @@ public class KeychainLoginService implements LoginService { if(session.alert(callback)) { // Warning if credentials are sent plaintext. callback.warn(bookmark.getProtocol(), MessageFormat.format(LocaleFactory.localizedString("Unsecured {0} connection", "Credentials"), - bookmark.getProtocol().getName()), + bookmark.getProtocol().getName()), MessageFormat.format("{0} {1}.", MessageFormat.format(LocaleFactory.localizedString("{0} will be sent in plaintext.", "Credentials"), - bookmark.getCredentials().getPasswordPlaceholder()), + bookmark.getCredentials().getPasswordPlaceholder()), LocaleFactory.localizedString("Please contact your web hosting service provider for assistance", "Support")), LocaleFactory.localizedString("Continue", "Credentials"), LocaleFactory.localizedString("Disconnect", "Credentials"), String.format("connection.unsecure.%s", bookmark.getHostname())); } listener.message(MessageFormat.format(LocaleFactory.localizedString("Authenticating as {0}", "Status"), - bookmark.getCredentials().getUsername())); + StringUtils.isEmpty(bookmark.getCredentials().getUsername()) ? LocaleFactory.localizedString("Unknown") : bookmark.getCredentials().getUsername())); try { if(log.isDebugEnabled()) { log.debug(String.format("Attempt authentication for %s", bookmark)); diff --git a/source/ch/cyberduck/core/LimitedListProgressListener.java b/core/src/main/java/ch/cyberduck/core/LimitedListProgressListener.java similarity index 100% rename from source/ch/cyberduck/core/LimitedListProgressListener.java rename to core/src/main/java/ch/cyberduck/core/LimitedListProgressListener.java diff --git a/source/ch/cyberduck/core/ListProgressListener.java b/core/src/main/java/ch/cyberduck/core/ListProgressListener.java similarity index 100% rename from source/ch/cyberduck/core/ListProgressListener.java rename to core/src/main/java/ch/cyberduck/core/ListProgressListener.java diff --git a/source/ch/cyberduck/core/ListService.java b/core/src/main/java/ch/cyberduck/core/ListService.java similarity index 100% rename from source/ch/cyberduck/core/ListService.java rename to core/src/main/java/ch/cyberduck/core/ListService.java diff --git a/source/ch/cyberduck/core/Local.java b/core/src/main/java/ch/cyberduck/core/Local.java similarity index 100% rename from source/ch/cyberduck/core/Local.java rename to core/src/main/java/ch/cyberduck/core/Local.java diff --git a/source/ch/cyberduck/core/LocalAttributes.java b/core/src/main/java/ch/cyberduck/core/LocalAttributes.java similarity index 100% rename from source/ch/cyberduck/core/LocalAttributes.java rename to core/src/main/java/ch/cyberduck/core/LocalAttributes.java diff --git a/source/ch/cyberduck/core/LocalFactory.java b/core/src/main/java/ch/cyberduck/core/LocalFactory.java similarity index 100% rename from source/ch/cyberduck/core/LocalFactory.java rename to core/src/main/java/ch/cyberduck/core/LocalFactory.java diff --git a/source/ch/cyberduck/core/LocaleFactory.java b/core/src/main/java/ch/cyberduck/core/LocaleFactory.java similarity index 100% rename from source/ch/cyberduck/core/LocaleFactory.java rename to core/src/main/java/ch/cyberduck/core/LocaleFactory.java diff --git a/source/ch/cyberduck/core/LoginCallback.java b/core/src/main/java/ch/cyberduck/core/LoginCallback.java similarity index 100% rename from source/ch/cyberduck/core/LoginCallback.java rename to core/src/main/java/ch/cyberduck/core/LoginCallback.java diff --git a/source/ch/cyberduck/core/LoginCallbackFactory.java b/core/src/main/java/ch/cyberduck/core/LoginCallbackFactory.java similarity index 100% rename from source/ch/cyberduck/core/LoginCallbackFactory.java rename to core/src/main/java/ch/cyberduck/core/LoginCallbackFactory.java diff --git a/source/ch/cyberduck/core/LoginConnectionService.java b/core/src/main/java/ch/cyberduck/core/LoginConnectionService.java similarity index 100% rename from source/ch/cyberduck/core/LoginConnectionService.java rename to core/src/main/java/ch/cyberduck/core/LoginConnectionService.java diff --git a/source/ch/cyberduck/core/LoginOptions.java b/core/src/main/java/ch/cyberduck/core/LoginOptions.java similarity index 97% rename from source/ch/cyberduck/core/LoginOptions.java rename to core/src/main/java/ch/cyberduck/core/LoginOptions.java index 0730fe42f3..064a5ed4f1 100644 --- a/source/ch/cyberduck/core/LoginOptions.java +++ b/core/src/main/java/ch/cyberduck/core/LoginOptions.java @@ -84,7 +84,7 @@ public final class LoginOptions { * Defer login options from protocol */ public LoginOptions(final Protocol protocol) { - publickey = protocol.getType() == Protocol.Type.ssh; + publickey = protocol.getType() == Protocol.Type.sftp; anonymous = protocol.isAnonymousConfigurable(); user = protocol.isUsernameConfigurable(); password = protocol.isPasswordConfigurable(); diff --git a/source/ch/cyberduck/core/LoginService.java b/core/src/main/java/ch/cyberduck/core/LoginService.java similarity index 100% rename from source/ch/cyberduck/core/LoginService.java rename to core/src/main/java/ch/cyberduck/core/LoginService.java diff --git a/source/ch/cyberduck/core/MappingMimeTypeService.java b/core/src/main/java/ch/cyberduck/core/MappingMimeTypeService.java similarity index 98% rename from source/ch/cyberduck/core/MappingMimeTypeService.java rename to core/src/main/java/ch/cyberduck/core/MappingMimeTypeService.java index c691dd1d87..9bd1b6b71f 100644 --- a/source/ch/cyberduck/core/MappingMimeTypeService.java +++ b/core/src/main/java/ch/cyberduck/core/MappingMimeTypeService.java @@ -49,6 +49,7 @@ public class MappingMimeTypeService implements MimeTypeService { log.info(String.format("Loading MIME types from %s", url)); } types.loadAndReplaceMimetypes(url.openStream()); + break; } } catch(IOException e) { diff --git a/source/ch/cyberduck/core/MemoryPreferences.java b/core/src/main/java/ch/cyberduck/core/MemoryPreferences.java similarity index 100% rename from source/ch/cyberduck/core/MemoryPreferences.java rename to core/src/main/java/ch/cyberduck/core/MemoryPreferences.java diff --git a/source/ch/cyberduck/core/MimeTypeService.java b/core/src/main/java/ch/cyberduck/core/MimeTypeService.java similarity index 100% rename from source/ch/cyberduck/core/MimeTypeService.java rename to core/src/main/java/ch/cyberduck/core/MimeTypeService.java diff --git a/source/ch/cyberduck/core/MultipleFolderBookmarkCollection.java b/core/src/main/java/ch/cyberduck/core/MultipleFolderBookmarkCollection.java similarity index 100% rename from source/ch/cyberduck/core/MultipleFolderBookmarkCollection.java rename to core/src/main/java/ch/cyberduck/core/MultipleFolderBookmarkCollection.java diff --git a/source/ch/cyberduck/core/Navigation.java b/core/src/main/java/ch/cyberduck/core/Navigation.java similarity index 100% rename from source/ch/cyberduck/core/Navigation.java rename to core/src/main/java/ch/cyberduck/core/Navigation.java diff --git a/source/ch/cyberduck/core/NullComparator.java b/core/src/main/java/ch/cyberduck/core/NullComparator.java similarity index 100% rename from source/ch/cyberduck/core/NullComparator.java rename to core/src/main/java/ch/cyberduck/core/NullComparator.java diff --git a/source/ch/cyberduck/core/NullFilter.java b/core/src/main/java/ch/cyberduck/core/NullFilter.java similarity index 100% rename from source/ch/cyberduck/core/NullFilter.java rename to core/src/main/java/ch/cyberduck/core/NullFilter.java diff --git a/source/ch/cyberduck/core/PasswordStore.java b/core/src/main/java/ch/cyberduck/core/PasswordStore.java similarity index 100% rename from source/ch/cyberduck/core/PasswordStore.java rename to core/src/main/java/ch/cyberduck/core/PasswordStore.java diff --git a/source/ch/cyberduck/core/PasswordStoreFactory.java b/core/src/main/java/ch/cyberduck/core/PasswordStoreFactory.java similarity index 100% rename from source/ch/cyberduck/core/PasswordStoreFactory.java rename to core/src/main/java/ch/cyberduck/core/PasswordStoreFactory.java diff --git a/source/ch/cyberduck/core/Path.java b/core/src/main/java/ch/cyberduck/core/Path.java similarity index 100% rename from source/ch/cyberduck/core/Path.java rename to core/src/main/java/ch/cyberduck/core/Path.java diff --git a/source/ch/cyberduck/core/PathAttributes.java b/core/src/main/java/ch/cyberduck/core/PathAttributes.java similarity index 100% rename from source/ch/cyberduck/core/PathAttributes.java rename to core/src/main/java/ch/cyberduck/core/PathAttributes.java diff --git a/source/ch/cyberduck/core/PathCache.java b/core/src/main/java/ch/cyberduck/core/PathCache.java similarity index 100% rename from source/ch/cyberduck/core/PathCache.java rename to core/src/main/java/ch/cyberduck/core/PathCache.java diff --git a/source/ch/cyberduck/core/PathContainerService.java b/core/src/main/java/ch/cyberduck/core/PathContainerService.java similarity index 100% rename from source/ch/cyberduck/core/PathContainerService.java rename to core/src/main/java/ch/cyberduck/core/PathContainerService.java diff --git a/source/ch/cyberduck/core/PathKindDetector.java b/core/src/main/java/ch/cyberduck/core/PathKindDetector.java similarity index 100% rename from source/ch/cyberduck/core/PathKindDetector.java rename to core/src/main/java/ch/cyberduck/core/PathKindDetector.java diff --git a/source/ch/cyberduck/core/PathNormalizer.java b/core/src/main/java/ch/cyberduck/core/PathNormalizer.java similarity index 100% rename from source/ch/cyberduck/core/PathNormalizer.java rename to core/src/main/java/ch/cyberduck/core/PathNormalizer.java diff --git a/source/ch/cyberduck/core/PathRelativizer.java b/core/src/main/java/ch/cyberduck/core/PathRelativizer.java similarity index 100% rename from source/ch/cyberduck/core/PathRelativizer.java rename to core/src/main/java/ch/cyberduck/core/PathRelativizer.java diff --git a/source/ch/cyberduck/core/Permission.java b/core/src/main/java/ch/cyberduck/core/Permission.java similarity index 100% rename from source/ch/cyberduck/core/Permission.java rename to core/src/main/java/ch/cyberduck/core/Permission.java diff --git a/source/ch/cyberduck/core/PreferencesUseragentProvider.java b/core/src/main/java/ch/cyberduck/core/PreferencesUseragentProvider.java similarity index 100% rename from source/ch/cyberduck/core/PreferencesUseragentProvider.java rename to core/src/main/java/ch/cyberduck/core/PreferencesUseragentProvider.java diff --git a/source/ch/cyberduck/core/Profile.java b/core/src/main/java/ch/cyberduck/core/Profile.java similarity index 93% rename from source/ch/cyberduck/core/Profile.java rename to core/src/main/java/ch/cyberduck/core/Profile.java index edf550d3b8..951119c9c3 100644 --- a/source/ch/cyberduck/core/Profile.java +++ b/core/src/main/java/ch/cyberduck/core/Profile.java @@ -21,9 +21,7 @@ package ch.cyberduck.core; import ch.cyberduck.core.exception.AccessDeniedException; import ch.cyberduck.core.features.Location; -import ch.cyberduck.core.openstack.SwiftLocationFeature; import ch.cyberduck.core.preferences.PreferencesFactory; -import ch.cyberduck.core.s3.S3LocationFeature; import ch.cyberduck.core.serializer.Deserializer; import ch.cyberduck.core.serializer.Serializer; @@ -46,7 +44,7 @@ import java.util.UUID; public final class Profile implements Protocol, Serializable { private static final Logger log = Logger.getLogger(Profile.class); - private Deserializer dict; + private Deserializer dict; /** * The actual protocol implementation registered @@ -55,7 +53,7 @@ public final class Profile implements Protocol, Serializable { private Local image; - public Profile(final Protocol parent, final Deserializer dict) { + public Profile(final Protocol parent, final Deserializer dict) { this.parent = parent; this.dict = dict; this.image = this.write(this.value("Disk")); @@ -219,10 +217,7 @@ public final class Profile implements Protocol, Serializable { } return file; } - catch(IOException e) { - log.error("Error writing temporary file", e); - } - catch(AccessDeniedException e) { + catch(IOException | AccessDeniedException e) { log.error("Error writing temporary file", e); } return null; @@ -261,13 +256,7 @@ public final class Profile implements Protocol, Serializable { final List regions = this.list("Regions"); final Set set = new HashSet(); for(String region : regions) { - switch(parent.getType()) { - case s3: - set.add(new S3LocationFeature.S3Region(region)); - break; - case swift: - set.add(new SwiftLocationFeature.SwiftRegion(region)); - } + set.add(new Location.Name(region)); } return set; } @@ -330,8 +319,8 @@ public final class Profile implements Protocol, Serializable { return value; } - private List list(final String key) { - final List list = dict.listForKey(key); + private List list(final String key) { + final List list = dict.listForKey(key); if(null == list) { return Collections.emptyList(); } diff --git a/source/ch/cyberduck/core/ProfileReaderFactory.java b/core/src/main/java/ch/cyberduck/core/ProfileReaderFactory.java similarity index 100% rename from source/ch/cyberduck/core/ProfileReaderFactory.java rename to core/src/main/java/ch/cyberduck/core/ProfileReaderFactory.java diff --git a/source/ch/cyberduck/core/ProfileWriterFactory.java b/core/src/main/java/ch/cyberduck/core/ProfileWriterFactory.java similarity index 100% rename from source/ch/cyberduck/core/ProfileWriterFactory.java rename to core/src/main/java/ch/cyberduck/core/ProfileWriterFactory.java diff --git a/source/ch/cyberduck/core/ProgressListener.java b/core/src/main/java/ch/cyberduck/core/ProgressListener.java similarity index 100% rename from source/ch/cyberduck/core/ProgressListener.java rename to core/src/main/java/ch/cyberduck/core/ProgressListener.java diff --git a/source/ch/cyberduck/core/Protocol.java b/core/src/main/java/ch/cyberduck/core/Protocol.java similarity index 96% rename from source/ch/cyberduck/core/Protocol.java rename to core/src/main/java/ch/cyberduck/core/Protocol.java index eead7f3aab..2e655819c2 100644 --- a/source/ch/cyberduck/core/Protocol.java +++ b/core/src/main/java/ch/cyberduck/core/Protocol.java @@ -32,7 +32,7 @@ public interface Protocol extends Comparable { boolean validate(Credentials credentials, LoginOptions options); - public enum Type { + enum Type { ftp { /** * Allows empty string for password. @@ -53,7 +53,7 @@ public interface Protocol extends Comparable { return true; } }, - ssh { + sftp { @Override public boolean validate(final Credentials credentials, final LoginOptions options) { if(options.user) { @@ -66,10 +66,7 @@ public interface Protocol extends Comparable { googlestorage { @Override public boolean validate(final Credentials credentials, final LoginOptions options) { - if(options.user) { - // OAuth only requires the project token - return StringUtils.isNotBlank(credentials.getUsername()); - } + // OAuth only requires the project token return true; } }, diff --git a/source/ch/cyberduck/core/ProtocolFactory.java b/core/src/main/java/ch/cyberduck/core/ProtocolFactory.java similarity index 77% rename from source/ch/cyberduck/core/ProtocolFactory.java rename to core/src/main/java/ch/cyberduck/core/ProtocolFactory.java index 55437277fc..b5b7b113fc 100644 --- a/source/ch/cyberduck/core/ProtocolFactory.java +++ b/core/src/main/java/ch/cyberduck/core/ProtocolFactory.java @@ -19,21 +19,10 @@ package ch.cyberduck.core; * dkocher@cyberduck.ch */ -import ch.cyberduck.core.azure.AzureProtocol; -import ch.cyberduck.core.dav.DAVProtocol; -import ch.cyberduck.core.dav.DAVSSLProtocol; import ch.cyberduck.core.exception.AccessDeniedException; -import ch.cyberduck.core.ftp.FTPProtocol; -import ch.cyberduck.core.ftp.FTPTLSProtocol; -import ch.cyberduck.core.gstorage.GoogleStorageProtocol; -import ch.cyberduck.core.irods.IRODSProtocol; -import ch.cyberduck.core.openstack.SwiftProtocol; import ch.cyberduck.core.preferences.PreferencesFactory; -import ch.cyberduck.core.s3.S3Protocol; -import ch.cyberduck.core.sftp.SFTPProtocol; import org.apache.commons.io.FilenameUtils; -import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import java.util.ArrayList; @@ -47,17 +36,6 @@ import java.util.Set; public final class ProtocolFactory { private static final Logger log = Logger.getLogger(ProtocolFactory.class); - public static final Protocol FTP = new FTPProtocol(); - public static final Protocol FTP_TLS = new FTPTLSProtocol(); - public static final Protocol SFTP = new SFTPProtocol(); - public static final Protocol S3_SSL = new S3Protocol(); - public static final Protocol WEBDAV = new DAVProtocol(); - public static final Protocol WEBDAV_SSL = new DAVSSLProtocol(); - public static final Protocol SWIFT = new SwiftProtocol(); - public static final Protocol GOOGLESTORAGE_SSL = new GoogleStorageProtocol(); - public static final Protocol AZURE = new AzureProtocol(); - public static final Protocol IRODS = new IRODSProtocol(); - /** * Ordered list of supported protocols. */ @@ -68,10 +46,6 @@ public final class ProtocolFactory { // } - public static void register() { - register(FTP, FTP_TLS, SFTP, WEBDAV, WEBDAV_SSL, SWIFT, S3_SSL, GOOGLESTORAGE_SSL, AZURE, IRODS); - } - public static void register(Protocol... protocols) { // Order determines list in connection dropdown for(Protocol protocol : protocols) { @@ -203,21 +177,4 @@ public final class ProtocolFactory { log.warn(String.format("Unknown scheme %s", scheme)); return null; } - - /** - * @param str Determine if URL can be handled by a registered protocol - * @return True if known URL - */ - public static boolean isURL(final String str) { - if(StringUtils.isNotBlank(str)) { - for(Protocol protocol : getEnabledProtocols()) { - for(String scheme : protocol.getSchemes()) { - if(str.startsWith(scheme + "://")) { - return true; - } - } - } - } - return false; - } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/ProviderHelpService.java b/core/src/main/java/ch/cyberduck/core/ProviderHelpService.java similarity index 100% rename from source/ch/cyberduck/core/ProviderHelpService.java rename to core/src/main/java/ch/cyberduck/core/ProviderHelpService.java diff --git a/source/ch/cyberduck/core/Referenceable.java b/core/src/main/java/ch/cyberduck/core/Referenceable.java similarity index 100% rename from source/ch/cyberduck/core/Referenceable.java rename to core/src/main/java/ch/cyberduck/core/Referenceable.java diff --git a/source/ch/cyberduck/core/Resolver.java b/core/src/main/java/ch/cyberduck/core/Resolver.java similarity index 100% rename from source/ch/cyberduck/core/Resolver.java rename to core/src/main/java/ch/cyberduck/core/Resolver.java diff --git a/source/ch/cyberduck/core/RootListService.java b/core/src/main/java/ch/cyberduck/core/RootListService.java similarity index 100% rename from source/ch/cyberduck/core/RootListService.java rename to core/src/main/java/ch/cyberduck/core/RootListService.java diff --git a/source/ch/cyberduck/core/Scheme.java b/core/src/main/java/ch/cyberduck/core/Scheme.java similarity index 85% rename from source/ch/cyberduck/core/Scheme.java rename to core/src/main/java/ch/cyberduck/core/Scheme.java index 0fab3d96c4..afe6673c24 100644 --- a/source/ch/cyberduck/core/Scheme.java +++ b/core/src/main/java/ch/cyberduck/core/Scheme.java @@ -19,6 +19,8 @@ package ch.cyberduck.core; * dkocher@cyberduck.ch */ +import org.apache.commons.lang3.StringUtils; + /** * @version $Id$ */ @@ -137,4 +139,19 @@ public enum Scheme { public abstract boolean isSecure(); public abstract int getPort(); + + /** + * @param str Determine if URL can be handled by a registered protocol + * @return True if known URL + */ + public static boolean isURL(final String str) { + if(StringUtils.isNotBlank(str)) { + for(Scheme scheme : Scheme.values()) { + if(str.startsWith(scheme + "://")) { + return true; + } + } + } + return false; + } } diff --git a/source/ch/cyberduck/core/Serializable.java b/core/src/main/java/ch/cyberduck/core/Serializable.java similarity index 100% rename from source/ch/cyberduck/core/Serializable.java rename to core/src/main/java/ch/cyberduck/core/Serializable.java diff --git a/source/ch/cyberduck/core/SerializerFactory.java b/core/src/main/java/ch/cyberduck/core/SerializerFactory.java similarity index 100% rename from source/ch/cyberduck/core/SerializerFactory.java rename to core/src/main/java/ch/cyberduck/core/SerializerFactory.java diff --git a/source/ch/cyberduck/core/Session.java b/core/src/main/java/ch/cyberduck/core/Session.java similarity index 95% rename from source/ch/cyberduck/core/Session.java rename to core/src/main/java/ch/cyberduck/core/Session.java index 4426b582fb..852ee09aaa 100644 --- a/source/ch/cyberduck/core/Session.java +++ b/core/src/main/java/ch/cyberduck/core/Session.java @@ -19,7 +19,6 @@ package ch.cyberduck.core; */ import ch.cyberduck.core.cdn.DistributionConfiguration; -import ch.cyberduck.core.cloudfront.CustomOriginCloudFrontDistributionConfiguration; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.Download; import ch.cyberduck.core.features.Find; @@ -63,8 +62,6 @@ public abstract class Session implements TranscriptListener { */ private State state = State.closed; - private DistributionConfiguration cloudfront; - private Preferences preferences = PreferencesFactory.get(); @@ -306,13 +303,6 @@ public abstract class Session implements TranscriptListener { if(type == Move.class) { return (T) new DisabledMoveFeature(); } - if(type == DistributionConfiguration.class) { - if(null == cloudfront) { - // Use login context of current session - cloudfront = new CustomOriginCloudFrontDistributionConfiguration(host, this); - } - return (T) cloudfront; - } if(type == UrlProvider.class) { return (T) new DefaultUrlProvider(host); } diff --git a/core/src/main/java/ch/cyberduck/core/SessionFactory.java b/core/src/main/java/ch/cyberduck/core/SessionFactory.java new file mode 100644 index 0000000000..e1c0faf4d7 --- /dev/null +++ b/core/src/main/java/ch/cyberduck/core/SessionFactory.java @@ -0,0 +1,79 @@ +package ch.cyberduck.core; + +/* + * Copyright (c) 2012 David Kocher. All rights reserved. + * http://cyberduck.ch/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * Bug fixes, suggestions and comments should be sent to: + * dkocher@cyberduck.ch + */ + +import ch.cyberduck.core.ssl.DefaultTrustManagerHostnameCallback; +import ch.cyberduck.core.ssl.KeychainX509KeyManager; +import ch.cyberduck.core.ssl.KeychainX509TrustManager; +import ch.cyberduck.core.ssl.X509KeyManager; +import ch.cyberduck.core.ssl.X509TrustManager; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.reflect.ConstructorUtils; +import org.apache.log4j.Logger; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; + +public final class SessionFactory { + private static final Logger log = Logger.getLogger(SessionFactory.class); + + private SessionFactory() { + // + } + + public static Session create(final Host host, final X509TrustManager trust, final X509KeyManager key) { + if(log.isDebugEnabled()) { + log.debug(String.format("Create session for %s", host)); + } + final Protocol protocol = host.getProtocol(); + final String prefix = protocol.getType().name(); + Class name; + try { + try { + name = (Class) Class.forName(String.format("%s.%s.%sSession", "ch.cyberduck.core", prefix, StringUtils.upperCase(prefix))); + } + catch(ClassNotFoundException e) { + name = (Class) Class.forName(String.format("%s.%s.%sSession", "ch.cyberduck.core", prefix, StringUtils.capitalize(prefix))); + } + final Constructor constructor = ConstructorUtils.getMatchingAccessibleConstructor(name, + host.getClass(), trust.getClass(), key.getClass()); + if(null == constructor) { + log.warn(String.format("No matching constructor for parameter %s, %s, %s", host.getClass(), trust.getClass(), key.getClass())); + final Constructor fallback = ConstructorUtils.getMatchingAccessibleConstructor(name, + host.getClass()); + if(fallback == null) { + log.warn(String.format("No matching constructor for parameter %s", host.getClass())); + return null; + } + return fallback.newInstance(host); + } + return constructor.newInstance(host, trust, key); + } + catch(InstantiationException | InvocationTargetException | ClassNotFoundException | IllegalAccessException e) { + log.error(String.format("Failure loading session class for %s protocol. Failure %s", protocol, e.getMessage())); + return null; + } + } + + public static Session create(final Host target) { + return create(target, new KeychainX509TrustManager(new DefaultTrustManagerHostnameCallback(target)), + new KeychainX509KeyManager()); + } +} diff --git a/source/ch/cyberduck/core/SleepPreventer.java b/core/src/main/java/ch/cyberduck/core/SleepPreventer.java similarity index 100% rename from source/ch/cyberduck/core/SleepPreventer.java rename to core/src/main/java/ch/cyberduck/core/SleepPreventer.java diff --git a/source/ch/cyberduck/core/SleepPreventerFactory.java b/core/src/main/java/ch/cyberduck/core/SleepPreventerFactory.java similarity index 100% rename from source/ch/cyberduck/core/SleepPreventerFactory.java rename to core/src/main/java/ch/cyberduck/core/SleepPreventerFactory.java diff --git a/source/ch/cyberduck/core/StringAppender.java b/core/src/main/java/ch/cyberduck/core/StringAppender.java similarity index 100% rename from source/ch/cyberduck/core/StringAppender.java rename to core/src/main/java/ch/cyberduck/core/StringAppender.java diff --git a/source/ch/cyberduck/core/TerminalService.java b/core/src/main/java/ch/cyberduck/core/TerminalService.java similarity index 100% rename from source/ch/cyberduck/core/TerminalService.java rename to core/src/main/java/ch/cyberduck/core/TerminalService.java diff --git a/source/ch/cyberduck/core/TerminalServiceFactory.java b/core/src/main/java/ch/cyberduck/core/TerminalServiceFactory.java similarity index 100% rename from source/ch/cyberduck/core/TerminalServiceFactory.java rename to core/src/main/java/ch/cyberduck/core/TerminalServiceFactory.java diff --git a/source/ch/cyberduck/core/TildePathExpander.java b/core/src/main/java/ch/cyberduck/core/TildePathExpander.java similarity index 89% rename from source/ch/cyberduck/core/TildePathExpander.java rename to core/src/main/java/ch/cyberduck/core/TildePathExpander.java index be3b1d4ce7..550332e7aa 100644 --- a/source/ch/cyberduck/core/TildePathExpander.java +++ b/core/src/main/java/ch/cyberduck/core/TildePathExpander.java @@ -30,10 +30,10 @@ public class TildePathExpander { public static final String PREFIX = String.format("%s%s", Path.DELIMITER, Path.HOME); - private Session session; + private Path workdir; - public TildePathExpander(final Session session) { - this.session = session; + public TildePathExpander(final Path workdir) { + this.workdir = workdir; } public Path expand(final Path remote) throws BackgroundException { @@ -42,7 +42,7 @@ public class TildePathExpander { protected Path expand(final Path remote, final String format) throws BackgroundException { if(remote.getAbsolute().startsWith(format)) { - return new Path(StringUtils.replaceOnce(remote.getAbsolute(), format, session.workdir().getAbsolute()), + return new Path(StringUtils.replaceOnce(remote.getAbsolute(), format, workdir.getAbsolute()), remote.getType()); } return remote; diff --git a/source/ch/cyberduck/core/TranscriptListener.java b/core/src/main/java/ch/cyberduck/core/TranscriptListener.java similarity index 100% rename from source/ch/cyberduck/core/TranscriptListener.java rename to core/src/main/java/ch/cyberduck/core/TranscriptListener.java diff --git a/source/ch/cyberduck/core/TransferCollection.java b/core/src/main/java/ch/cyberduck/core/TransferCollection.java similarity index 100% rename from source/ch/cyberduck/core/TransferCollection.java rename to core/src/main/java/ch/cyberduck/core/TransferCollection.java diff --git a/source/ch/cyberduck/core/TransferErrorCallbackControllerFactory.java b/core/src/main/java/ch/cyberduck/core/TransferErrorCallbackControllerFactory.java similarity index 100% rename from source/ch/cyberduck/core/TransferErrorCallbackControllerFactory.java rename to core/src/main/java/ch/cyberduck/core/TransferErrorCallbackControllerFactory.java diff --git a/source/ch/cyberduck/core/TransferItemCache.java b/core/src/main/java/ch/cyberduck/core/TransferItemCache.java similarity index 100% rename from source/ch/cyberduck/core/TransferItemCache.java rename to core/src/main/java/ch/cyberduck/core/TransferItemCache.java diff --git a/source/ch/cyberduck/core/TransferPromptControllerFactory.java b/core/src/main/java/ch/cyberduck/core/TransferPromptControllerFactory.java similarity index 100% rename from source/ch/cyberduck/core/TransferPromptControllerFactory.java rename to core/src/main/java/ch/cyberduck/core/TransferPromptControllerFactory.java diff --git a/source/ch/cyberduck/core/TransferReaderFactory.java b/core/src/main/java/ch/cyberduck/core/TransferReaderFactory.java similarity index 100% rename from source/ch/cyberduck/core/TransferReaderFactory.java rename to core/src/main/java/ch/cyberduck/core/TransferReaderFactory.java diff --git a/source/ch/cyberduck/core/TransferWriterFactory.java b/core/src/main/java/ch/cyberduck/core/TransferWriterFactory.java similarity index 100% rename from source/ch/cyberduck/core/TransferWriterFactory.java rename to core/src/main/java/ch/cyberduck/core/TransferWriterFactory.java diff --git a/source/ch/cyberduck/core/URIEncoder.java b/core/src/main/java/ch/cyberduck/core/URIEncoder.java similarity index 100% rename from source/ch/cyberduck/core/URIEncoder.java rename to core/src/main/java/ch/cyberduck/core/URIEncoder.java diff --git a/source/ch/cyberduck/core/UrlProvider.java b/core/src/main/java/ch/cyberduck/core/UrlProvider.java similarity index 100% rename from source/ch/cyberduck/core/UrlProvider.java rename to core/src/main/java/ch/cyberduck/core/UrlProvider.java diff --git a/source/ch/cyberduck/core/UserDateFormatterFactory.java b/core/src/main/java/ch/cyberduck/core/UserDateFormatterFactory.java similarity index 100% rename from source/ch/cyberduck/core/UserDateFormatterFactory.java rename to core/src/main/java/ch/cyberduck/core/UserDateFormatterFactory.java diff --git a/source/ch/cyberduck/core/UseragentProvider.java b/core/src/main/java/ch/cyberduck/core/UseragentProvider.java similarity index 100% rename from source/ch/cyberduck/core/UseragentProvider.java rename to core/src/main/java/ch/cyberduck/core/UseragentProvider.java diff --git a/source/ch/cyberduck/core/s3/VersioningConfiguration.java b/core/src/main/java/ch/cyberduck/core/VersioningConfiguration.java similarity index 98% rename from source/ch/cyberduck/core/s3/VersioningConfiguration.java rename to core/src/main/java/ch/cyberduck/core/VersioningConfiguration.java index d21a7d23fb..57be76e511 100644 --- a/source/ch/cyberduck/core/s3/VersioningConfiguration.java +++ b/core/src/main/java/ch/cyberduck/core/VersioningConfiguration.java @@ -1,4 +1,4 @@ -package ch.cyberduck.core.s3; +package ch.cyberduck.core; /* * Copyright (c) 2002-2013 David Kocher. All rights reserved. diff --git a/source/ch/cyberduck/core/WebUrlProvider.java b/core/src/main/java/ch/cyberduck/core/WebUrlProvider.java similarity index 100% rename from source/ch/cyberduck/core/WebUrlProvider.java rename to core/src/main/java/ch/cyberduck/core/WebUrlProvider.java diff --git a/source/ch/cyberduck/core/analytics/AnalyticsProvider.java b/core/src/main/java/ch/cyberduck/core/analytics/AnalyticsProvider.java similarity index 100% rename from source/ch/cyberduck/core/analytics/AnalyticsProvider.java rename to core/src/main/java/ch/cyberduck/core/analytics/AnalyticsProvider.java diff --git a/source/ch/cyberduck/core/analytics/QloudstatAnalyticsProvider.java b/core/src/main/java/ch/cyberduck/core/analytics/QloudstatAnalyticsProvider.java similarity index 100% rename from source/ch/cyberduck/core/analytics/QloudstatAnalyticsProvider.java rename to core/src/main/java/ch/cyberduck/core/analytics/QloudstatAnalyticsProvider.java diff --git a/source/ch/cyberduck/core/aquaticprime/AbstractLicense.java b/core/src/main/java/ch/cyberduck/core/aquaticprime/AbstractLicense.java similarity index 100% rename from source/ch/cyberduck/core/aquaticprime/AbstractLicense.java rename to core/src/main/java/ch/cyberduck/core/aquaticprime/AbstractLicense.java diff --git a/source/ch/cyberduck/core/aquaticprime/DisabledLicenseFactory.java b/core/src/main/java/ch/cyberduck/core/aquaticprime/DisabledLicenseFactory.java similarity index 100% rename from source/ch/cyberduck/core/aquaticprime/DisabledLicenseFactory.java rename to core/src/main/java/ch/cyberduck/core/aquaticprime/DisabledLicenseFactory.java diff --git a/source/ch/cyberduck/core/aquaticprime/DonationKey.java b/core/src/main/java/ch/cyberduck/core/aquaticprime/DonationKey.java similarity index 100% rename from source/ch/cyberduck/core/aquaticprime/DonationKey.java rename to core/src/main/java/ch/cyberduck/core/aquaticprime/DonationKey.java diff --git a/source/ch/cyberduck/core/aquaticprime/DonationKeyFactory.java b/core/src/main/java/ch/cyberduck/core/aquaticprime/DonationKeyFactory.java similarity index 100% rename from source/ch/cyberduck/core/aquaticprime/DonationKeyFactory.java rename to core/src/main/java/ch/cyberduck/core/aquaticprime/DonationKeyFactory.java diff --git a/source/ch/cyberduck/core/aquaticprime/License.java b/core/src/main/java/ch/cyberduck/core/aquaticprime/License.java similarity index 100% rename from source/ch/cyberduck/core/aquaticprime/License.java rename to core/src/main/java/ch/cyberduck/core/aquaticprime/License.java diff --git a/source/ch/cyberduck/core/aquaticprime/LicenseFactory.java b/core/src/main/java/ch/cyberduck/core/aquaticprime/LicenseFactory.java similarity index 100% rename from source/ch/cyberduck/core/aquaticprime/LicenseFactory.java rename to core/src/main/java/ch/cyberduck/core/aquaticprime/LicenseFactory.java diff --git a/source/ch/cyberduck/core/aquaticprime/LicenseVerifier.java b/core/src/main/java/ch/cyberduck/core/aquaticprime/LicenseVerifier.java similarity index 100% rename from source/ch/cyberduck/core/aquaticprime/LicenseVerifier.java rename to core/src/main/java/ch/cyberduck/core/aquaticprime/LicenseVerifier.java diff --git a/source/ch/cyberduck/core/aquaticprime/Receipt.java b/core/src/main/java/ch/cyberduck/core/aquaticprime/Receipt.java similarity index 100% rename from source/ch/cyberduck/core/aquaticprime/Receipt.java rename to core/src/main/java/ch/cyberduck/core/aquaticprime/Receipt.java diff --git a/source/ch/cyberduck/core/aquaticprime/ReceiptFactory.java b/core/src/main/java/ch/cyberduck/core/aquaticprime/ReceiptFactory.java similarity index 100% rename from source/ch/cyberduck/core/aquaticprime/ReceiptFactory.java rename to core/src/main/java/ch/cyberduck/core/aquaticprime/ReceiptFactory.java diff --git a/source/ch/cyberduck/core/aquaticprime/ReceiptVerifier.java b/core/src/main/java/ch/cyberduck/core/aquaticprime/ReceiptVerifier.java similarity index 100% rename from source/ch/cyberduck/core/aquaticprime/ReceiptVerifier.java rename to core/src/main/java/ch/cyberduck/core/aquaticprime/ReceiptVerifier.java diff --git a/source/ch/cyberduck/core/cdn/Distribution.java b/core/src/main/java/ch/cyberduck/core/cdn/Distribution.java similarity index 100% rename from source/ch/cyberduck/core/cdn/Distribution.java rename to core/src/main/java/ch/cyberduck/core/cdn/Distribution.java diff --git a/source/ch/cyberduck/core/cdn/DistributionConfiguration.java b/core/src/main/java/ch/cyberduck/core/cdn/DistributionConfiguration.java similarity index 100% rename from source/ch/cyberduck/core/cdn/DistributionConfiguration.java rename to core/src/main/java/ch/cyberduck/core/cdn/DistributionConfiguration.java diff --git a/source/ch/cyberduck/core/cdn/DistributionUrlProvider.java b/core/src/main/java/ch/cyberduck/core/cdn/DistributionUrlProvider.java similarity index 100% rename from source/ch/cyberduck/core/cdn/DistributionUrlProvider.java rename to core/src/main/java/ch/cyberduck/core/cdn/DistributionUrlProvider.java diff --git a/source/ch/cyberduck/core/cdn/features/Cname.java b/core/src/main/java/ch/cyberduck/core/cdn/features/Cname.java similarity index 100% rename from source/ch/cyberduck/core/cdn/features/Cname.java rename to core/src/main/java/ch/cyberduck/core/cdn/features/Cname.java diff --git a/source/ch/cyberduck/core/cdn/features/DistributionLogging.java b/core/src/main/java/ch/cyberduck/core/cdn/features/DistributionLogging.java similarity index 100% rename from source/ch/cyberduck/core/cdn/features/DistributionLogging.java rename to core/src/main/java/ch/cyberduck/core/cdn/features/DistributionLogging.java diff --git a/source/ch/cyberduck/core/cdn/features/Index.java b/core/src/main/java/ch/cyberduck/core/cdn/features/Index.java similarity index 100% rename from source/ch/cyberduck/core/cdn/features/Index.java rename to core/src/main/java/ch/cyberduck/core/cdn/features/Index.java diff --git a/source/ch/cyberduck/core/cdn/features/Purge.java b/core/src/main/java/ch/cyberduck/core/cdn/features/Purge.java similarity index 100% rename from source/ch/cyberduck/core/cdn/features/Purge.java rename to core/src/main/java/ch/cyberduck/core/cdn/features/Purge.java diff --git a/source/ch/cyberduck/core/collections/Partition.java b/core/src/main/java/ch/cyberduck/core/collections/Partition.java similarity index 100% rename from source/ch/cyberduck/core/collections/Partition.java rename to core/src/main/java/ch/cyberduck/core/collections/Partition.java diff --git a/source/ch/cyberduck/core/date/AbstractDateFormatter.java b/core/src/main/java/ch/cyberduck/core/date/AbstractDateFormatter.java similarity index 100% rename from source/ch/cyberduck/core/date/AbstractDateFormatter.java rename to core/src/main/java/ch/cyberduck/core/date/AbstractDateFormatter.java diff --git a/source/ch/cyberduck/core/date/AbstractUserDateFormatter.java b/core/src/main/java/ch/cyberduck/core/date/AbstractUserDateFormatter.java similarity index 100% rename from source/ch/cyberduck/core/date/AbstractUserDateFormatter.java rename to core/src/main/java/ch/cyberduck/core/date/AbstractUserDateFormatter.java diff --git a/source/ch/cyberduck/core/date/CalendarService.java b/core/src/main/java/ch/cyberduck/core/date/CalendarService.java similarity index 100% rename from source/ch/cyberduck/core/date/CalendarService.java rename to core/src/main/java/ch/cyberduck/core/date/CalendarService.java diff --git a/source/ch/cyberduck/core/date/DateDomainService.java b/core/src/main/java/ch/cyberduck/core/date/DateDomainService.java similarity index 100% rename from source/ch/cyberduck/core/date/DateDomainService.java rename to core/src/main/java/ch/cyberduck/core/date/DateDomainService.java diff --git a/source/ch/cyberduck/core/date/DateFormatter.java b/core/src/main/java/ch/cyberduck/core/date/DateFormatter.java similarity index 100% rename from source/ch/cyberduck/core/date/DateFormatter.java rename to core/src/main/java/ch/cyberduck/core/date/DateFormatter.java diff --git a/source/ch/cyberduck/core/date/DefaultUserDateFormatter.java b/core/src/main/java/ch/cyberduck/core/date/DefaultUserDateFormatter.java similarity index 100% rename from source/ch/cyberduck/core/date/DefaultUserDateFormatter.java rename to core/src/main/java/ch/cyberduck/core/date/DefaultUserDateFormatter.java diff --git a/source/ch/cyberduck/core/date/ISO8601DateParser.java b/core/src/main/java/ch/cyberduck/core/date/ISO8601DateParser.java similarity index 100% rename from source/ch/cyberduck/core/date/ISO8601DateParser.java rename to core/src/main/java/ch/cyberduck/core/date/ISO8601DateParser.java diff --git a/source/ch/cyberduck/core/date/Instant.java b/core/src/main/java/ch/cyberduck/core/date/Instant.java similarity index 100% rename from source/ch/cyberduck/core/date/Instant.java rename to core/src/main/java/ch/cyberduck/core/date/Instant.java diff --git a/source/ch/cyberduck/core/date/InvalidDateException.java b/core/src/main/java/ch/cyberduck/core/date/InvalidDateException.java similarity index 100% rename from source/ch/cyberduck/core/date/InvalidDateException.java rename to core/src/main/java/ch/cyberduck/core/date/InvalidDateException.java diff --git a/source/ch/cyberduck/core/date/MDTMMillisecondsDateFormatter.java b/core/src/main/java/ch/cyberduck/core/date/MDTMMillisecondsDateFormatter.java similarity index 100% rename from source/ch/cyberduck/core/date/MDTMMillisecondsDateFormatter.java rename to core/src/main/java/ch/cyberduck/core/date/MDTMMillisecondsDateFormatter.java diff --git a/source/ch/cyberduck/core/date/MDTMSecondsDateFormatter.java b/core/src/main/java/ch/cyberduck/core/date/MDTMSecondsDateFormatter.java similarity index 100% rename from source/ch/cyberduck/core/date/MDTMSecondsDateFormatter.java rename to core/src/main/java/ch/cyberduck/core/date/MDTMSecondsDateFormatter.java diff --git a/source/ch/cyberduck/core/date/PeriodFormatter.java b/core/src/main/java/ch/cyberduck/core/date/PeriodFormatter.java similarity index 100% rename from source/ch/cyberduck/core/date/PeriodFormatter.java rename to core/src/main/java/ch/cyberduck/core/date/PeriodFormatter.java diff --git a/source/ch/cyberduck/core/date/RFC1123DateFormatter.java b/core/src/main/java/ch/cyberduck/core/date/RFC1123DateFormatter.java similarity index 100% rename from source/ch/cyberduck/core/date/RFC1123DateFormatter.java rename to core/src/main/java/ch/cyberduck/core/date/RFC1123DateFormatter.java diff --git a/source/ch/cyberduck/core/date/RemainingPeriodFormatter.java b/core/src/main/java/ch/cyberduck/core/date/RemainingPeriodFormatter.java similarity index 100% rename from source/ch/cyberduck/core/date/RemainingPeriodFormatter.java rename to core/src/main/java/ch/cyberduck/core/date/RemainingPeriodFormatter.java diff --git a/source/ch/cyberduck/core/date/UserDateFormatter.java b/core/src/main/java/ch/cyberduck/core/date/UserDateFormatter.java similarity index 100% rename from source/ch/cyberduck/core/date/UserDateFormatter.java rename to core/src/main/java/ch/cyberduck/core/date/UserDateFormatter.java diff --git a/source/ch/cyberduck/core/diagnostics/DefaultInetAddressReachability.java b/core/src/main/java/ch/cyberduck/core/diagnostics/DefaultInetAddressReachability.java similarity index 100% rename from source/ch/cyberduck/core/diagnostics/DefaultInetAddressReachability.java rename to core/src/main/java/ch/cyberduck/core/diagnostics/DefaultInetAddressReachability.java diff --git a/source/ch/cyberduck/core/diagnostics/Reachability.java b/core/src/main/java/ch/cyberduck/core/diagnostics/Reachability.java similarity index 100% rename from source/ch/cyberduck/core/diagnostics/Reachability.java rename to core/src/main/java/ch/cyberduck/core/diagnostics/Reachability.java diff --git a/source/ch/cyberduck/core/diagnostics/ReachabilityFactory.java b/core/src/main/java/ch/cyberduck/core/diagnostics/ReachabilityFactory.java similarity index 100% rename from source/ch/cyberduck/core/diagnostics/ReachabilityFactory.java rename to core/src/main/java/ch/cyberduck/core/diagnostics/ReachabilityFactory.java diff --git a/source/ch/cyberduck/core/diagnostics/SystemConfigurationReachability.java b/core/src/main/java/ch/cyberduck/core/diagnostics/SystemConfigurationReachability.java similarity index 98% rename from source/ch/cyberduck/core/diagnostics/SystemConfigurationReachability.java rename to core/src/main/java/ch/cyberduck/core/diagnostics/SystemConfigurationReachability.java index 5e5de68078..1189afb75b 100644 --- a/source/ch/cyberduck/core/diagnostics/SystemConfigurationReachability.java +++ b/core/src/main/java/ch/cyberduck/core/diagnostics/SystemConfigurationReachability.java @@ -30,7 +30,7 @@ import ch.cyberduck.core.library.Native; public final class SystemConfigurationReachability implements Reachability { static { - Native.load("diagnostics"); + Native.load("core"); } public SystemConfigurationReachability() { diff --git a/source/ch/cyberduck/core/editor/AbstractEditor.java b/core/src/main/java/ch/cyberduck/core/editor/AbstractEditor.java similarity index 100% rename from source/ch/cyberduck/core/editor/AbstractEditor.java rename to core/src/main/java/ch/cyberduck/core/editor/AbstractEditor.java diff --git a/source/ch/cyberduck/core/editor/DefaultEditorFactory.java b/core/src/main/java/ch/cyberduck/core/editor/DefaultEditorFactory.java similarity index 100% rename from source/ch/cyberduck/core/editor/DefaultEditorFactory.java rename to core/src/main/java/ch/cyberduck/core/editor/DefaultEditorFactory.java diff --git a/source/ch/cyberduck/core/editor/DefaultEditorListener.java b/core/src/main/java/ch/cyberduck/core/editor/DefaultEditorListener.java similarity index 100% rename from source/ch/cyberduck/core/editor/DefaultEditorListener.java rename to core/src/main/java/ch/cyberduck/core/editor/DefaultEditorListener.java diff --git a/source/ch/cyberduck/core/editor/DefaultWatchEditor.java b/core/src/main/java/ch/cyberduck/core/editor/DefaultWatchEditor.java similarity index 100% rename from source/ch/cyberduck/core/editor/DefaultWatchEditor.java rename to core/src/main/java/ch/cyberduck/core/editor/DefaultWatchEditor.java diff --git a/source/ch/cyberduck/core/editor/EditOpenWorker.java b/core/src/main/java/ch/cyberduck/core/editor/EditOpenWorker.java similarity index 100% rename from source/ch/cyberduck/core/editor/EditOpenWorker.java rename to core/src/main/java/ch/cyberduck/core/editor/EditOpenWorker.java diff --git a/source/ch/cyberduck/core/editor/EditSaveWorker.java b/core/src/main/java/ch/cyberduck/core/editor/EditSaveWorker.java similarity index 100% rename from source/ch/cyberduck/core/editor/EditSaveWorker.java rename to core/src/main/java/ch/cyberduck/core/editor/EditSaveWorker.java diff --git a/source/ch/cyberduck/core/editor/Editor.java b/core/src/main/java/ch/cyberduck/core/editor/Editor.java similarity index 100% rename from source/ch/cyberduck/core/editor/Editor.java rename to core/src/main/java/ch/cyberduck/core/editor/Editor.java diff --git a/source/ch/cyberduck/core/editor/EditorFactory.java b/core/src/main/java/ch/cyberduck/core/editor/EditorFactory.java similarity index 100% rename from source/ch/cyberduck/core/editor/EditorFactory.java rename to core/src/main/java/ch/cyberduck/core/editor/EditorFactory.java diff --git a/source/ch/cyberduck/core/editor/FSEventWatchEditor.java b/core/src/main/java/ch/cyberduck/core/editor/FSEventWatchEditor.java similarity index 100% rename from source/ch/cyberduck/core/editor/FSEventWatchEditor.java rename to core/src/main/java/ch/cyberduck/core/editor/FSEventWatchEditor.java diff --git a/source/ch/cyberduck/core/editor/FSEventWatchEditorFactory.java b/core/src/main/java/ch/cyberduck/core/editor/FSEventWatchEditorFactory.java similarity index 100% rename from source/ch/cyberduck/core/editor/FSEventWatchEditorFactory.java rename to core/src/main/java/ch/cyberduck/core/editor/FSEventWatchEditorFactory.java diff --git a/source/ch/cyberduck/core/exception/AccessDeniedException.java b/core/src/main/java/ch/cyberduck/core/exception/AccessDeniedException.java similarity index 100% rename from source/ch/cyberduck/core/exception/AccessDeniedException.java rename to core/src/main/java/ch/cyberduck/core/exception/AccessDeniedException.java diff --git a/source/ch/cyberduck/core/exception/BackgroundException.java b/core/src/main/java/ch/cyberduck/core/exception/BackgroundException.java similarity index 100% rename from source/ch/cyberduck/core/exception/BackgroundException.java rename to core/src/main/java/ch/cyberduck/core/exception/BackgroundException.java diff --git a/source/ch/cyberduck/core/exception/ChecksumException.java b/core/src/main/java/ch/cyberduck/core/exception/ChecksumException.java similarity index 100% rename from source/ch/cyberduck/core/exception/ChecksumException.java rename to core/src/main/java/ch/cyberduck/core/exception/ChecksumException.java diff --git a/source/ch/cyberduck/core/exception/ConnectionCanceledException.java b/core/src/main/java/ch/cyberduck/core/exception/ConnectionCanceledException.java similarity index 100% rename from source/ch/cyberduck/core/exception/ConnectionCanceledException.java rename to core/src/main/java/ch/cyberduck/core/exception/ConnectionCanceledException.java diff --git a/source/ch/cyberduck/core/exception/ConnectionRefusedException.java b/core/src/main/java/ch/cyberduck/core/exception/ConnectionRefusedException.java similarity index 100% rename from source/ch/cyberduck/core/exception/ConnectionRefusedException.java rename to core/src/main/java/ch/cyberduck/core/exception/ConnectionRefusedException.java diff --git a/source/ch/cyberduck/core/exception/ConnectionTimeoutException.java b/core/src/main/java/ch/cyberduck/core/exception/ConnectionTimeoutException.java similarity index 100% rename from source/ch/cyberduck/core/exception/ConnectionTimeoutException.java rename to core/src/main/java/ch/cyberduck/core/exception/ConnectionTimeoutException.java diff --git a/source/ch/cyberduck/core/exception/InteroperabilityException.java b/core/src/main/java/ch/cyberduck/core/exception/InteroperabilityException.java similarity index 100% rename from source/ch/cyberduck/core/exception/InteroperabilityException.java rename to core/src/main/java/ch/cyberduck/core/exception/InteroperabilityException.java diff --git a/source/ch/cyberduck/core/exception/ListCanceledException.java b/core/src/main/java/ch/cyberduck/core/exception/ListCanceledException.java similarity index 100% rename from source/ch/cyberduck/core/exception/ListCanceledException.java rename to core/src/main/java/ch/cyberduck/core/exception/ListCanceledException.java diff --git a/source/ch/cyberduck/core/exception/LocalAccessDeniedException.java b/core/src/main/java/ch/cyberduck/core/exception/LocalAccessDeniedException.java similarity index 100% rename from source/ch/cyberduck/core/exception/LocalAccessDeniedException.java rename to core/src/main/java/ch/cyberduck/core/exception/LocalAccessDeniedException.java diff --git a/source/ch/cyberduck/core/exception/LocalNotfoundException.java b/core/src/main/java/ch/cyberduck/core/exception/LocalNotfoundException.java similarity index 100% rename from source/ch/cyberduck/core/exception/LocalNotfoundException.java rename to core/src/main/java/ch/cyberduck/core/exception/LocalNotfoundException.java diff --git a/source/ch/cyberduck/core/exception/LoginCanceledException.java b/core/src/main/java/ch/cyberduck/core/exception/LoginCanceledException.java similarity index 100% rename from source/ch/cyberduck/core/exception/LoginCanceledException.java rename to core/src/main/java/ch/cyberduck/core/exception/LoginCanceledException.java diff --git a/source/ch/cyberduck/core/exception/LoginFailureException.java b/core/src/main/java/ch/cyberduck/core/exception/LoginFailureException.java similarity index 100% rename from source/ch/cyberduck/core/exception/LoginFailureException.java rename to core/src/main/java/ch/cyberduck/core/exception/LoginFailureException.java diff --git a/source/ch/cyberduck/core/exception/NotfoundException.java b/core/src/main/java/ch/cyberduck/core/exception/NotfoundException.java similarity index 100% rename from source/ch/cyberduck/core/exception/NotfoundException.java rename to core/src/main/java/ch/cyberduck/core/exception/NotfoundException.java diff --git a/source/ch/cyberduck/core/exception/ProxyException.java b/core/src/main/java/ch/cyberduck/core/exception/ProxyException.java similarity index 100% rename from source/ch/cyberduck/core/exception/ProxyException.java rename to core/src/main/java/ch/cyberduck/core/exception/ProxyException.java diff --git a/source/ch/cyberduck/core/exception/QuotaException.java b/core/src/main/java/ch/cyberduck/core/exception/QuotaException.java similarity index 100% rename from source/ch/cyberduck/core/exception/QuotaException.java rename to core/src/main/java/ch/cyberduck/core/exception/QuotaException.java diff --git a/source/ch/cyberduck/core/exception/ResolveCanceledException.java b/core/src/main/java/ch/cyberduck/core/exception/ResolveCanceledException.java similarity index 100% rename from source/ch/cyberduck/core/exception/ResolveCanceledException.java rename to core/src/main/java/ch/cyberduck/core/exception/ResolveCanceledException.java diff --git a/source/ch/cyberduck/core/exception/ResolveFailedException.java b/core/src/main/java/ch/cyberduck/core/exception/ResolveFailedException.java similarity index 100% rename from source/ch/cyberduck/core/exception/ResolveFailedException.java rename to core/src/main/java/ch/cyberduck/core/exception/ResolveFailedException.java diff --git a/source/ch/cyberduck/core/exception/StreamCloseTimeoutException.java b/core/src/main/java/ch/cyberduck/core/exception/StreamCloseTimeoutException.java similarity index 100% rename from source/ch/cyberduck/core/exception/StreamCloseTimeoutException.java rename to core/src/main/java/ch/cyberduck/core/exception/StreamCloseTimeoutException.java diff --git a/source/ch/cyberduck/core/features/AclPermission.java b/core/src/main/java/ch/cyberduck/core/features/AclPermission.java similarity index 100% rename from source/ch/cyberduck/core/features/AclPermission.java rename to core/src/main/java/ch/cyberduck/core/features/AclPermission.java diff --git a/source/ch/cyberduck/core/features/Attributes.java b/core/src/main/java/ch/cyberduck/core/features/Attributes.java similarity index 100% rename from source/ch/cyberduck/core/features/Attributes.java rename to core/src/main/java/ch/cyberduck/core/features/Attributes.java diff --git a/source/ch/cyberduck/core/features/Command.java b/core/src/main/java/ch/cyberduck/core/features/Command.java similarity index 100% rename from source/ch/cyberduck/core/features/Command.java rename to core/src/main/java/ch/cyberduck/core/features/Command.java diff --git a/source/ch/cyberduck/core/features/Compress.java b/core/src/main/java/ch/cyberduck/core/features/Compress.java similarity index 100% rename from source/ch/cyberduck/core/features/Compress.java rename to core/src/main/java/ch/cyberduck/core/features/Compress.java diff --git a/source/ch/cyberduck/core/features/Copy.java b/core/src/main/java/ch/cyberduck/core/features/Copy.java similarity index 100% rename from source/ch/cyberduck/core/features/Copy.java rename to core/src/main/java/ch/cyberduck/core/features/Copy.java diff --git a/source/ch/cyberduck/core/features/Delete.java b/core/src/main/java/ch/cyberduck/core/features/Delete.java similarity index 100% rename from source/ch/cyberduck/core/features/Delete.java rename to core/src/main/java/ch/cyberduck/core/features/Delete.java diff --git a/source/ch/cyberduck/core/features/Directory.java b/core/src/main/java/ch/cyberduck/core/features/Directory.java similarity index 100% rename from source/ch/cyberduck/core/features/Directory.java rename to core/src/main/java/ch/cyberduck/core/features/Directory.java diff --git a/source/ch/cyberduck/core/features/Download.java b/core/src/main/java/ch/cyberduck/core/features/Download.java similarity index 100% rename from source/ch/cyberduck/core/features/Download.java rename to core/src/main/java/ch/cyberduck/core/features/Download.java diff --git a/source/ch/cyberduck/core/features/Encryption.java b/core/src/main/java/ch/cyberduck/core/features/Encryption.java similarity index 100% rename from source/ch/cyberduck/core/features/Encryption.java rename to core/src/main/java/ch/cyberduck/core/features/Encryption.java diff --git a/source/ch/cyberduck/core/features/Find.java b/core/src/main/java/ch/cyberduck/core/features/Find.java similarity index 100% rename from source/ch/cyberduck/core/features/Find.java rename to core/src/main/java/ch/cyberduck/core/features/Find.java diff --git a/source/ch/cyberduck/core/features/Folder.java b/core/src/main/java/ch/cyberduck/core/features/Folder.java similarity index 100% rename from source/ch/cyberduck/core/features/Folder.java rename to core/src/main/java/ch/cyberduck/core/features/Folder.java diff --git a/source/ch/cyberduck/core/features/Headers.java b/core/src/main/java/ch/cyberduck/core/features/Headers.java similarity index 100% rename from source/ch/cyberduck/core/features/Headers.java rename to core/src/main/java/ch/cyberduck/core/features/Headers.java diff --git a/source/ch/cyberduck/core/features/Home.java b/core/src/main/java/ch/cyberduck/core/features/Home.java similarity index 100% rename from source/ch/cyberduck/core/features/Home.java rename to core/src/main/java/ch/cyberduck/core/features/Home.java diff --git a/source/ch/cyberduck/core/features/Lifecycle.java b/core/src/main/java/ch/cyberduck/core/features/Lifecycle.java similarity index 100% rename from source/ch/cyberduck/core/features/Lifecycle.java rename to core/src/main/java/ch/cyberduck/core/features/Lifecycle.java diff --git a/source/ch/cyberduck/core/features/Location.java b/core/src/main/java/ch/cyberduck/core/features/Location.java similarity index 93% rename from source/ch/cyberduck/core/features/Location.java rename to core/src/main/java/ch/cyberduck/core/features/Location.java index 6388370b0d..e255a5fe63 100644 --- a/source/ch/cyberduck/core/features/Location.java +++ b/core/src/main/java/ch/cyberduck/core/features/Location.java @@ -33,10 +33,10 @@ public interface Location { Name getLocation(Path file) throws BackgroundException; - abstract class Name { + class Name { private String identifier; - protected Name(String identifier) { + public Name(String identifier) { this.identifier = identifier; } @@ -44,7 +44,9 @@ public interface Location { return identifier; } - public abstract String toString(); + public String toString() { + return identifier; + }; @Override public boolean equals(final Object o) { diff --git a/source/ch/cyberduck/core/features/Logging.java b/core/src/main/java/ch/cyberduck/core/features/Logging.java similarity index 100% rename from source/ch/cyberduck/core/features/Logging.java rename to core/src/main/java/ch/cyberduck/core/features/Logging.java diff --git a/source/ch/cyberduck/core/features/Move.java b/core/src/main/java/ch/cyberduck/core/features/Move.java similarity index 100% rename from source/ch/cyberduck/core/features/Move.java rename to core/src/main/java/ch/cyberduck/core/features/Move.java diff --git a/source/ch/cyberduck/core/features/Read.java b/core/src/main/java/ch/cyberduck/core/features/Read.java similarity index 100% rename from source/ch/cyberduck/core/features/Read.java rename to core/src/main/java/ch/cyberduck/core/features/Read.java diff --git a/source/ch/cyberduck/core/features/Redundancy.java b/core/src/main/java/ch/cyberduck/core/features/Redundancy.java similarity index 100% rename from source/ch/cyberduck/core/features/Redundancy.java rename to core/src/main/java/ch/cyberduck/core/features/Redundancy.java diff --git a/source/ch/cyberduck/core/features/Symlink.java b/core/src/main/java/ch/cyberduck/core/features/Symlink.java similarity index 100% rename from source/ch/cyberduck/core/features/Symlink.java rename to core/src/main/java/ch/cyberduck/core/features/Symlink.java diff --git a/source/ch/cyberduck/core/features/Timestamp.java b/core/src/main/java/ch/cyberduck/core/features/Timestamp.java similarity index 100% rename from source/ch/cyberduck/core/features/Timestamp.java rename to core/src/main/java/ch/cyberduck/core/features/Timestamp.java diff --git a/source/ch/cyberduck/core/features/Touch.java b/core/src/main/java/ch/cyberduck/core/features/Touch.java similarity index 100% rename from source/ch/cyberduck/core/features/Touch.java rename to core/src/main/java/ch/cyberduck/core/features/Touch.java diff --git a/source/ch/cyberduck/core/features/UnixPermission.java b/core/src/main/java/ch/cyberduck/core/features/UnixPermission.java similarity index 100% rename from source/ch/cyberduck/core/features/UnixPermission.java rename to core/src/main/java/ch/cyberduck/core/features/UnixPermission.java diff --git a/source/ch/cyberduck/core/features/Upload.java b/core/src/main/java/ch/cyberduck/core/features/Upload.java similarity index 100% rename from source/ch/cyberduck/core/features/Upload.java rename to core/src/main/java/ch/cyberduck/core/features/Upload.java diff --git a/source/ch/cyberduck/core/features/Versioning.java b/core/src/main/java/ch/cyberduck/core/features/Versioning.java similarity index 96% rename from source/ch/cyberduck/core/features/Versioning.java rename to core/src/main/java/ch/cyberduck/core/features/Versioning.java index 3854c01452..7a9ae79ffb 100644 --- a/source/ch/cyberduck/core/features/Versioning.java +++ b/core/src/main/java/ch/cyberduck/core/features/Versioning.java @@ -21,9 +21,9 @@ package ch.cyberduck.core.features; import ch.cyberduck.core.Credentials; import ch.cyberduck.core.LoginCallback; import ch.cyberduck.core.Path; +import ch.cyberduck.core.VersioningConfiguration; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.exception.ConnectionCanceledException; -import ch.cyberduck.core.s3.VersioningConfiguration; import java.util.Map; diff --git a/source/ch/cyberduck/core/features/Write.java b/core/src/main/java/ch/cyberduck/core/features/Write.java similarity index 100% rename from source/ch/cyberduck/core/features/Write.java rename to core/src/main/java/ch/cyberduck/core/features/Write.java diff --git a/source/ch/cyberduck/core/filter/DownloadDuplicateFilter.java b/core/src/main/java/ch/cyberduck/core/filter/DownloadDuplicateFilter.java similarity index 100% rename from source/ch/cyberduck/core/filter/DownloadDuplicateFilter.java rename to core/src/main/java/ch/cyberduck/core/filter/DownloadDuplicateFilter.java diff --git a/source/ch/cyberduck/core/filter/DownloadRegexFilter.java b/core/src/main/java/ch/cyberduck/core/filter/DownloadRegexFilter.java similarity index 100% rename from source/ch/cyberduck/core/filter/DownloadRegexFilter.java rename to core/src/main/java/ch/cyberduck/core/filter/DownloadRegexFilter.java diff --git a/source/ch/cyberduck/core/filter/UploadRegexFilter.java b/core/src/main/java/ch/cyberduck/core/filter/UploadRegexFilter.java similarity index 100% rename from source/ch/cyberduck/core/filter/UploadRegexFilter.java rename to core/src/main/java/ch/cyberduck/core/filter/UploadRegexFilter.java diff --git a/source/ch/cyberduck/core/formatter/AbstractSizeFormatter.java b/core/src/main/java/ch/cyberduck/core/formatter/AbstractSizeFormatter.java similarity index 100% rename from source/ch/cyberduck/core/formatter/AbstractSizeFormatter.java rename to core/src/main/java/ch/cyberduck/core/formatter/AbstractSizeFormatter.java diff --git a/source/ch/cyberduck/core/formatter/BinarySizeFormatter.java b/core/src/main/java/ch/cyberduck/core/formatter/BinarySizeFormatter.java similarity index 100% rename from source/ch/cyberduck/core/formatter/BinarySizeFormatter.java rename to core/src/main/java/ch/cyberduck/core/formatter/BinarySizeFormatter.java diff --git a/source/ch/cyberduck/core/formatter/DecimalSizeFormatter.java b/core/src/main/java/ch/cyberduck/core/formatter/DecimalSizeFormatter.java similarity index 100% rename from source/ch/cyberduck/core/formatter/DecimalSizeFormatter.java rename to core/src/main/java/ch/cyberduck/core/formatter/DecimalSizeFormatter.java diff --git a/source/ch/cyberduck/core/formatter/SizeFormatter.java b/core/src/main/java/ch/cyberduck/core/formatter/SizeFormatter.java similarity index 100% rename from source/ch/cyberduck/core/formatter/SizeFormatter.java rename to core/src/main/java/ch/cyberduck/core/formatter/SizeFormatter.java diff --git a/source/ch/cyberduck/core/formatter/SizeFormatterFactory.java b/core/src/main/java/ch/cyberduck/core/formatter/SizeFormatterFactory.java similarity index 100% rename from source/ch/cyberduck/core/formatter/SizeFormatterFactory.java rename to core/src/main/java/ch/cyberduck/core/formatter/SizeFormatterFactory.java diff --git a/source/ch/cyberduck/core/formatter/Unit.java b/core/src/main/java/ch/cyberduck/core/formatter/Unit.java similarity index 100% rename from source/ch/cyberduck/core/formatter/Unit.java rename to core/src/main/java/ch/cyberduck/core/formatter/Unit.java diff --git a/source/ch/cyberduck/core/ftp/FTPConnectMode.java b/core/src/main/java/ch/cyberduck/core/ftp/FTPConnectMode.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPConnectMode.java rename to core/src/main/java/ch/cyberduck/core/ftp/FTPConnectMode.java diff --git a/source/ch/cyberduck/core/http/AbstractHttpWriteFeature.java b/core/src/main/java/ch/cyberduck/core/http/AbstractHttpWriteFeature.java similarity index 100% rename from source/ch/cyberduck/core/http/AbstractHttpWriteFeature.java rename to core/src/main/java/ch/cyberduck/core/http/AbstractHttpWriteFeature.java diff --git a/source/ch/cyberduck/core/http/DelayedHttpEntity.java b/core/src/main/java/ch/cyberduck/core/http/DelayedHttpEntity.java similarity index 100% rename from source/ch/cyberduck/core/http/DelayedHttpEntity.java rename to core/src/main/java/ch/cyberduck/core/http/DelayedHttpEntity.java diff --git a/source/ch/cyberduck/core/http/DelayedHttpEntityCallable.java b/core/src/main/java/ch/cyberduck/core/http/DelayedHttpEntityCallable.java similarity index 100% rename from source/ch/cyberduck/core/http/DelayedHttpEntityCallable.java rename to core/src/main/java/ch/cyberduck/core/http/DelayedHttpEntityCallable.java diff --git a/source/ch/cyberduck/core/http/DisabledHttpRequestRetryHandler.java b/core/src/main/java/ch/cyberduck/core/http/DisabledHttpRequestRetryHandler.java similarity index 100% rename from source/ch/cyberduck/core/http/DisabledHttpRequestRetryHandler.java rename to core/src/main/java/ch/cyberduck/core/http/DisabledHttpRequestRetryHandler.java diff --git a/source/ch/cyberduck/core/http/DisabledX509HostnameVerifier.java b/core/src/main/java/ch/cyberduck/core/http/DisabledX509HostnameVerifier.java similarity index 100% rename from source/ch/cyberduck/core/http/DisabledX509HostnameVerifier.java rename to core/src/main/java/ch/cyberduck/core/http/DisabledX509HostnameVerifier.java diff --git a/source/ch/cyberduck/core/http/ExtendedHttpRequestRetryHandler.java b/core/src/main/java/ch/cyberduck/core/http/ExtendedHttpRequestRetryHandler.java similarity index 97% rename from source/ch/cyberduck/core/http/ExtendedHttpRequestRetryHandler.java rename to core/src/main/java/ch/cyberduck/core/http/ExtendedHttpRequestRetryHandler.java index 72c4a16245..9aeb26213f 100644 --- a/source/ch/cyberduck/core/http/ExtendedHttpRequestRetryHandler.java +++ b/core/src/main/java/ch/cyberduck/core/http/ExtendedHttpRequestRetryHandler.java @@ -32,8 +32,6 @@ import java.net.UnknownHostException; import java.util.Arrays; import java.util.List; -import com.barchart.udt.ExceptionUDT; - /** * @version $Id$ */ @@ -45,7 +43,7 @@ public class ExtendedHttpRequestRetryHandler extends DefaultHttpRequestRetryHand InterruptedIOException.class, UnknownHostException.class, ConnectException.class, - ExceptionUDT.class, +// ExceptionUDT.class, // Not providing SSLException.class, because broken pipe failures are wrapped in SSL Exceptions. // "Broken pipe".equals(ExceptionUtils.getRootCause(failure).getMessage()) SSLHandshakeException.class); diff --git a/source/ch/cyberduck/core/http/HttpConnectionPoolBuilder.java b/core/src/main/java/ch/cyberduck/core/http/HttpConnectionPoolBuilder.java similarity index 100% rename from source/ch/cyberduck/core/http/HttpConnectionPoolBuilder.java rename to core/src/main/java/ch/cyberduck/core/http/HttpConnectionPoolBuilder.java diff --git a/source/ch/cyberduck/core/http/HttpResponseExceptionMappingService.java b/core/src/main/java/ch/cyberduck/core/http/HttpResponseExceptionMappingService.java similarity index 100% rename from source/ch/cyberduck/core/http/HttpResponseExceptionMappingService.java rename to core/src/main/java/ch/cyberduck/core/http/HttpResponseExceptionMappingService.java diff --git a/source/ch/cyberduck/core/http/HttpSession.java b/core/src/main/java/ch/cyberduck/core/http/HttpSession.java similarity index 100% rename from source/ch/cyberduck/core/http/HttpSession.java rename to core/src/main/java/ch/cyberduck/core/http/HttpSession.java diff --git a/source/ch/cyberduck/core/http/HttpUploadFeature.java b/core/src/main/java/ch/cyberduck/core/http/HttpUploadFeature.java similarity index 100% rename from source/ch/cyberduck/core/http/HttpUploadFeature.java rename to core/src/main/java/ch/cyberduck/core/http/HttpUploadFeature.java diff --git a/source/ch/cyberduck/core/http/LoggingHttpRequestExecutor.java b/core/src/main/java/ch/cyberduck/core/http/LoggingHttpRequestExecutor.java similarity index 100% rename from source/ch/cyberduck/core/http/LoggingHttpRequestExecutor.java rename to core/src/main/java/ch/cyberduck/core/http/LoggingHttpRequestExecutor.java diff --git a/source/ch/cyberduck/core/http/PreferencesRedirectCallback.java b/core/src/main/java/ch/cyberduck/core/http/PreferencesRedirectCallback.java similarity index 100% rename from source/ch/cyberduck/core/http/PreferencesRedirectCallback.java rename to core/src/main/java/ch/cyberduck/core/http/PreferencesRedirectCallback.java diff --git a/source/ch/cyberduck/core/http/RedirectCallback.java b/core/src/main/java/ch/cyberduck/core/http/RedirectCallback.java similarity index 100% rename from source/ch/cyberduck/core/http/RedirectCallback.java rename to core/src/main/java/ch/cyberduck/core/http/RedirectCallback.java diff --git a/source/ch/cyberduck/core/http/ResponseOutputStream.java b/core/src/main/java/ch/cyberduck/core/http/ResponseOutputStream.java similarity index 100% rename from source/ch/cyberduck/core/http/ResponseOutputStream.java rename to core/src/main/java/ch/cyberduck/core/http/ResponseOutputStream.java diff --git a/source/ch/cyberduck/core/i18n/BundleLocale.java b/core/src/main/java/ch/cyberduck/core/i18n/BundleLocale.java similarity index 100% rename from source/ch/cyberduck/core/i18n/BundleLocale.java rename to core/src/main/java/ch/cyberduck/core/i18n/BundleLocale.java diff --git a/source/ch/cyberduck/core/i18n/Locale.java b/core/src/main/java/ch/cyberduck/core/i18n/Locale.java similarity index 100% rename from source/ch/cyberduck/core/i18n/Locale.java rename to core/src/main/java/ch/cyberduck/core/i18n/Locale.java diff --git a/source/ch/cyberduck/core/i18n/RegexLocale.java b/core/src/main/java/ch/cyberduck/core/i18n/RegexLocale.java similarity index 100% rename from source/ch/cyberduck/core/i18n/RegexLocale.java rename to core/src/main/java/ch/cyberduck/core/i18n/RegexLocale.java diff --git a/source/ch/cyberduck/core/identity/AbstractIdentityConfiguration.java b/core/src/main/java/ch/cyberduck/core/identity/AbstractIdentityConfiguration.java similarity index 100% rename from source/ch/cyberduck/core/identity/AbstractIdentityConfiguration.java rename to core/src/main/java/ch/cyberduck/core/identity/AbstractIdentityConfiguration.java diff --git a/source/ch/cyberduck/core/identity/DefaultCredentialsIdentityConfiguration.java b/core/src/main/java/ch/cyberduck/core/identity/DefaultCredentialsIdentityConfiguration.java similarity index 100% rename from source/ch/cyberduck/core/identity/DefaultCredentialsIdentityConfiguration.java rename to core/src/main/java/ch/cyberduck/core/identity/DefaultCredentialsIdentityConfiguration.java diff --git a/source/ch/cyberduck/core/identity/IdentityConfiguration.java b/core/src/main/java/ch/cyberduck/core/identity/IdentityConfiguration.java similarity index 100% rename from source/ch/cyberduck/core/identity/IdentityConfiguration.java rename to core/src/main/java/ch/cyberduck/core/identity/IdentityConfiguration.java diff --git a/source/ch/cyberduck/core/idna/PunycodeConverter.java b/core/src/main/java/ch/cyberduck/core/idna/PunycodeConverter.java similarity index 100% rename from source/ch/cyberduck/core/idna/PunycodeConverter.java rename to core/src/main/java/ch/cyberduck/core/idna/PunycodeConverter.java diff --git a/source/ch/cyberduck/core/io/AbstractChecksumCompute.java b/core/src/main/java/ch/cyberduck/core/io/AbstractChecksumCompute.java similarity index 100% rename from source/ch/cyberduck/core/io/AbstractChecksumCompute.java rename to core/src/main/java/ch/cyberduck/core/io/AbstractChecksumCompute.java diff --git a/source/ch/cyberduck/core/io/BandwidthThrottle.java b/core/src/main/java/ch/cyberduck/core/io/BandwidthThrottle.java similarity index 100% rename from source/ch/cyberduck/core/io/BandwidthThrottle.java rename to core/src/main/java/ch/cyberduck/core/io/BandwidthThrottle.java diff --git a/source/ch/cyberduck/core/io/Checksum.java b/core/src/main/java/ch/cyberduck/core/io/Checksum.java similarity index 100% rename from source/ch/cyberduck/core/io/Checksum.java rename to core/src/main/java/ch/cyberduck/core/io/Checksum.java diff --git a/source/ch/cyberduck/core/io/ChecksumCompute.java b/core/src/main/java/ch/cyberduck/core/io/ChecksumCompute.java similarity index 100% rename from source/ch/cyberduck/core/io/ChecksumCompute.java rename to core/src/main/java/ch/cyberduck/core/io/ChecksumCompute.java diff --git a/source/ch/cyberduck/core/io/ChecksumComputeFactory.java b/core/src/main/java/ch/cyberduck/core/io/ChecksumComputeFactory.java similarity index 100% rename from source/ch/cyberduck/core/io/ChecksumComputeFactory.java rename to core/src/main/java/ch/cyberduck/core/io/ChecksumComputeFactory.java diff --git a/source/ch/cyberduck/core/io/DefaultStreamCloser.java b/core/src/main/java/ch/cyberduck/core/io/DefaultStreamCloser.java similarity index 100% rename from source/ch/cyberduck/core/io/DefaultStreamCloser.java rename to core/src/main/java/ch/cyberduck/core/io/DefaultStreamCloser.java diff --git a/source/ch/cyberduck/core/io/DisabledStreamListener.java b/core/src/main/java/ch/cyberduck/core/io/DisabledStreamListener.java similarity index 100% rename from source/ch/cyberduck/core/io/DisabledStreamListener.java rename to core/src/main/java/ch/cyberduck/core/io/DisabledStreamListener.java diff --git a/source/ch/cyberduck/core/io/HashAlgorithm.java b/core/src/main/java/ch/cyberduck/core/io/HashAlgorithm.java similarity index 100% rename from source/ch/cyberduck/core/io/HashAlgorithm.java rename to core/src/main/java/ch/cyberduck/core/io/HashAlgorithm.java diff --git a/source/ch/cyberduck/core/io/IOResumeException.java b/core/src/main/java/ch/cyberduck/core/io/IOResumeException.java similarity index 100% rename from source/ch/cyberduck/core/io/IOResumeException.java rename to core/src/main/java/ch/cyberduck/core/io/IOResumeException.java diff --git a/source/ch/cyberduck/core/io/LocalRepeatableFileInputStream.java b/core/src/main/java/ch/cyberduck/core/io/LocalRepeatableFileInputStream.java similarity index 100% rename from source/ch/cyberduck/core/io/LocalRepeatableFileInputStream.java rename to core/src/main/java/ch/cyberduck/core/io/LocalRepeatableFileInputStream.java diff --git a/source/ch/cyberduck/core/io/MD5ChecksumCompute.java b/core/src/main/java/ch/cyberduck/core/io/MD5ChecksumCompute.java similarity index 100% rename from source/ch/cyberduck/core/io/MD5ChecksumCompute.java rename to core/src/main/java/ch/cyberduck/core/io/MD5ChecksumCompute.java diff --git a/source/ch/cyberduck/core/io/SHA1ChecksumCompute.java b/core/src/main/java/ch/cyberduck/core/io/SHA1ChecksumCompute.java similarity index 100% rename from source/ch/cyberduck/core/io/SHA1ChecksumCompute.java rename to core/src/main/java/ch/cyberduck/core/io/SHA1ChecksumCompute.java diff --git a/source/ch/cyberduck/core/io/SHA256ChecksumCompute.java b/core/src/main/java/ch/cyberduck/core/io/SHA256ChecksumCompute.java similarity index 100% rename from source/ch/cyberduck/core/io/SHA256ChecksumCompute.java rename to core/src/main/java/ch/cyberduck/core/io/SHA256ChecksumCompute.java diff --git a/source/ch/cyberduck/core/io/StreamCancelation.java b/core/src/main/java/ch/cyberduck/core/io/StreamCancelation.java similarity index 100% rename from source/ch/cyberduck/core/io/StreamCancelation.java rename to core/src/main/java/ch/cyberduck/core/io/StreamCancelation.java diff --git a/source/ch/cyberduck/core/io/StreamCloser.java b/core/src/main/java/ch/cyberduck/core/io/StreamCloser.java similarity index 100% rename from source/ch/cyberduck/core/io/StreamCloser.java rename to core/src/main/java/ch/cyberduck/core/io/StreamCloser.java diff --git a/source/ch/cyberduck/core/io/StreamCopier.java b/core/src/main/java/ch/cyberduck/core/io/StreamCopier.java similarity index 100% rename from source/ch/cyberduck/core/io/StreamCopier.java rename to core/src/main/java/ch/cyberduck/core/io/StreamCopier.java diff --git a/source/ch/cyberduck/core/io/StreamGobbler.java b/core/src/main/java/ch/cyberduck/core/io/StreamGobbler.java similarity index 100% rename from source/ch/cyberduck/core/io/StreamGobbler.java rename to core/src/main/java/ch/cyberduck/core/io/StreamGobbler.java diff --git a/source/ch/cyberduck/core/io/StreamListener.java b/core/src/main/java/ch/cyberduck/core/io/StreamListener.java similarity index 100% rename from source/ch/cyberduck/core/io/StreamListener.java rename to core/src/main/java/ch/cyberduck/core/io/StreamListener.java diff --git a/source/ch/cyberduck/core/io/StreamProgress.java b/core/src/main/java/ch/cyberduck/core/io/StreamProgress.java similarity index 100% rename from source/ch/cyberduck/core/io/StreamProgress.java rename to core/src/main/java/ch/cyberduck/core/io/StreamProgress.java diff --git a/source/ch/cyberduck/core/io/ThreadedStreamCloser.java b/core/src/main/java/ch/cyberduck/core/io/ThreadedStreamCloser.java similarity index 100% rename from source/ch/cyberduck/core/io/ThreadedStreamCloser.java rename to core/src/main/java/ch/cyberduck/core/io/ThreadedStreamCloser.java diff --git a/source/ch/cyberduck/core/io/ThrottledInputStream.java b/core/src/main/java/ch/cyberduck/core/io/ThrottledInputStream.java similarity index 100% rename from source/ch/cyberduck/core/io/ThrottledInputStream.java rename to core/src/main/java/ch/cyberduck/core/io/ThrottledInputStream.java diff --git a/source/ch/cyberduck/core/io/ThrottledOutputStream.java b/core/src/main/java/ch/cyberduck/core/io/ThrottledOutputStream.java similarity index 100% rename from source/ch/cyberduck/core/io/ThrottledOutputStream.java rename to core/src/main/java/ch/cyberduck/core/io/ThrottledOutputStream.java diff --git a/source/ch/cyberduck/core/io/watchservice/AbstractWatchKey.java b/core/src/main/java/ch/cyberduck/core/io/watchservice/AbstractWatchKey.java similarity index 100% rename from source/ch/cyberduck/core/io/watchservice/AbstractWatchKey.java rename to core/src/main/java/ch/cyberduck/core/io/watchservice/AbstractWatchKey.java diff --git a/source/ch/cyberduck/core/io/watchservice/AbstractWatchService.java b/core/src/main/java/ch/cyberduck/core/io/watchservice/AbstractWatchService.java similarity index 100% rename from source/ch/cyberduck/core/io/watchservice/AbstractWatchService.java rename to core/src/main/java/ch/cyberduck/core/io/watchservice/AbstractWatchService.java diff --git a/source/ch/cyberduck/core/io/watchservice/DisabledWatchService.java b/core/src/main/java/ch/cyberduck/core/io/watchservice/DisabledWatchService.java similarity index 100% rename from source/ch/cyberduck/core/io/watchservice/DisabledWatchService.java rename to core/src/main/java/ch/cyberduck/core/io/watchservice/DisabledWatchService.java diff --git a/source/ch/cyberduck/core/io/watchservice/FSEventWatchService.java b/core/src/main/java/ch/cyberduck/core/io/watchservice/FSEventWatchService.java similarity index 100% rename from source/ch/cyberduck/core/io/watchservice/FSEventWatchService.java rename to core/src/main/java/ch/cyberduck/core/io/watchservice/FSEventWatchService.java diff --git a/source/ch/cyberduck/core/io/watchservice/NIOEventWatchService.java b/core/src/main/java/ch/cyberduck/core/io/watchservice/NIOEventWatchService.java similarity index 100% rename from source/ch/cyberduck/core/io/watchservice/NIOEventWatchService.java rename to core/src/main/java/ch/cyberduck/core/io/watchservice/NIOEventWatchService.java diff --git a/source/ch/cyberduck/core/io/watchservice/RegisterWatchService.java b/core/src/main/java/ch/cyberduck/core/io/watchservice/RegisterWatchService.java similarity index 100% rename from source/ch/cyberduck/core/io/watchservice/RegisterWatchService.java rename to core/src/main/java/ch/cyberduck/core/io/watchservice/RegisterWatchService.java diff --git a/source/ch/cyberduck/core/io/watchservice/WatchServiceFactory.java b/core/src/main/java/ch/cyberduck/core/io/watchservice/WatchServiceFactory.java similarity index 100% rename from source/ch/cyberduck/core/io/watchservice/WatchServiceFactory.java rename to core/src/main/java/ch/cyberduck/core/io/watchservice/WatchServiceFactory.java diff --git a/source/ch/cyberduck/core/io/watchservice/jna/FSEventStreamRef.java b/core/src/main/java/ch/cyberduck/core/io/watchservice/jna/FSEventStreamRef.java similarity index 100% rename from source/ch/cyberduck/core/io/watchservice/jna/FSEventStreamRef.java rename to core/src/main/java/ch/cyberduck/core/io/watchservice/jna/FSEventStreamRef.java diff --git a/source/ch/cyberduck/core/io/watchservice/jna/FSEvents.java b/core/src/main/java/ch/cyberduck/core/io/watchservice/jna/FSEvents.java similarity index 100% rename from source/ch/cyberduck/core/io/watchservice/jna/FSEvents.java rename to core/src/main/java/ch/cyberduck/core/io/watchservice/jna/FSEvents.java diff --git a/source/ch/cyberduck/core/library/Native.java b/core/src/main/java/ch/cyberduck/core/library/Native.java similarity index 100% rename from source/ch/cyberduck/core/library/Native.java rename to core/src/main/java/ch/cyberduck/core/library/Native.java diff --git a/source/ch/cyberduck/core/lifecycle/LifecycleConfiguration.java b/core/src/main/java/ch/cyberduck/core/lifecycle/LifecycleConfiguration.java similarity index 100% rename from source/ch/cyberduck/core/lifecycle/LifecycleConfiguration.java rename to core/src/main/java/ch/cyberduck/core/lifecycle/LifecycleConfiguration.java diff --git a/source/ch/cyberduck/core/local/AbstractFileDescriptor.java b/core/src/main/java/ch/cyberduck/core/local/AbstractFileDescriptor.java similarity index 100% rename from source/ch/cyberduck/core/local/AbstractFileDescriptor.java rename to core/src/main/java/ch/cyberduck/core/local/AbstractFileDescriptor.java diff --git a/source/ch/cyberduck/core/local/Application.java b/core/src/main/java/ch/cyberduck/core/local/Application.java similarity index 100% rename from source/ch/cyberduck/core/local/Application.java rename to core/src/main/java/ch/cyberduck/core/local/Application.java diff --git a/source/ch/cyberduck/core/local/ApplicationBadgeLabeler.java b/core/src/main/java/ch/cyberduck/core/local/ApplicationBadgeLabeler.java similarity index 100% rename from source/ch/cyberduck/core/local/ApplicationBadgeLabeler.java rename to core/src/main/java/ch/cyberduck/core/local/ApplicationBadgeLabeler.java diff --git a/source/ch/cyberduck/core/local/ApplicationBadgeLabelerFactory.java b/core/src/main/java/ch/cyberduck/core/local/ApplicationBadgeLabelerFactory.java similarity index 100% rename from source/ch/cyberduck/core/local/ApplicationBadgeLabelerFactory.java rename to core/src/main/java/ch/cyberduck/core/local/ApplicationBadgeLabelerFactory.java diff --git a/source/ch/cyberduck/core/local/ApplicationFinder.java b/core/src/main/java/ch/cyberduck/core/local/ApplicationFinder.java similarity index 100% rename from source/ch/cyberduck/core/local/ApplicationFinder.java rename to core/src/main/java/ch/cyberduck/core/local/ApplicationFinder.java diff --git a/source/ch/cyberduck/core/local/ApplicationFinderFactory.java b/core/src/main/java/ch/cyberduck/core/local/ApplicationFinderFactory.java similarity index 100% rename from source/ch/cyberduck/core/local/ApplicationFinderFactory.java rename to core/src/main/java/ch/cyberduck/core/local/ApplicationFinderFactory.java diff --git a/source/ch/cyberduck/core/local/ApplicationLauncher.java b/core/src/main/java/ch/cyberduck/core/local/ApplicationLauncher.java similarity index 100% rename from source/ch/cyberduck/core/local/ApplicationLauncher.java rename to core/src/main/java/ch/cyberduck/core/local/ApplicationLauncher.java diff --git a/source/ch/cyberduck/core/local/ApplicationLauncherFactory.java b/core/src/main/java/ch/cyberduck/core/local/ApplicationLauncherFactory.java similarity index 100% rename from source/ch/cyberduck/core/local/ApplicationLauncherFactory.java rename to core/src/main/java/ch/cyberduck/core/local/ApplicationLauncherFactory.java diff --git a/source/ch/cyberduck/core/local/ApplicationQuitCallback.java b/core/src/main/java/ch/cyberduck/core/local/ApplicationQuitCallback.java similarity index 100% rename from source/ch/cyberduck/core/local/ApplicationQuitCallback.java rename to core/src/main/java/ch/cyberduck/core/local/ApplicationQuitCallback.java diff --git a/source/ch/cyberduck/core/local/BrowserLauncher.java b/core/src/main/java/ch/cyberduck/core/local/BrowserLauncher.java similarity index 100% rename from source/ch/cyberduck/core/local/BrowserLauncher.java rename to core/src/main/java/ch/cyberduck/core/local/BrowserLauncher.java diff --git a/source/ch/cyberduck/core/local/BrowserLauncherFactory.java b/core/src/main/java/ch/cyberduck/core/local/BrowserLauncherFactory.java similarity index 100% rename from source/ch/cyberduck/core/local/BrowserLauncherFactory.java rename to core/src/main/java/ch/cyberduck/core/local/BrowserLauncherFactory.java diff --git a/source/ch/cyberduck/core/local/DefaultLocalTouchFeature.java b/core/src/main/java/ch/cyberduck/core/local/DefaultLocalTouchFeature.java similarity index 100% rename from source/ch/cyberduck/core/local/DefaultLocalTouchFeature.java rename to core/src/main/java/ch/cyberduck/core/local/DefaultLocalTouchFeature.java diff --git a/source/ch/cyberduck/core/local/DefaultLocalTrashFeature.java b/core/src/main/java/ch/cyberduck/core/local/DefaultLocalTrashFeature.java similarity index 100% rename from source/ch/cyberduck/core/local/DefaultLocalTrashFeature.java rename to core/src/main/java/ch/cyberduck/core/local/DefaultLocalTrashFeature.java diff --git a/source/ch/cyberduck/core/local/DefaultWorkingDirectoryFinder.java b/core/src/main/java/ch/cyberduck/core/local/DefaultWorkingDirectoryFinder.java similarity index 100% rename from source/ch/cyberduck/core/local/DefaultWorkingDirectoryFinder.java rename to core/src/main/java/ch/cyberduck/core/local/DefaultWorkingDirectoryFinder.java diff --git a/source/ch/cyberduck/core/local/DisabledApplicationBadgeLabeler.java b/core/src/main/java/ch/cyberduck/core/local/DisabledApplicationBadgeLabeler.java similarity index 100% rename from source/ch/cyberduck/core/local/DisabledApplicationBadgeLabeler.java rename to core/src/main/java/ch/cyberduck/core/local/DisabledApplicationBadgeLabeler.java diff --git a/source/ch/cyberduck/core/local/DisabledApplicationFinder.java b/core/src/main/java/ch/cyberduck/core/local/DisabledApplicationFinder.java similarity index 100% rename from source/ch/cyberduck/core/local/DisabledApplicationFinder.java rename to core/src/main/java/ch/cyberduck/core/local/DisabledApplicationFinder.java diff --git a/source/ch/cyberduck/core/local/DisabledApplicationLauncher.java b/core/src/main/java/ch/cyberduck/core/local/DisabledApplicationLauncher.java similarity index 100% rename from source/ch/cyberduck/core/local/DisabledApplicationLauncher.java rename to core/src/main/java/ch/cyberduck/core/local/DisabledApplicationLauncher.java diff --git a/source/ch/cyberduck/core/local/DisabledApplicationQuitCallback.java b/core/src/main/java/ch/cyberduck/core/local/DisabledApplicationQuitCallback.java similarity index 100% rename from source/ch/cyberduck/core/local/DisabledApplicationQuitCallback.java rename to core/src/main/java/ch/cyberduck/core/local/DisabledApplicationQuitCallback.java diff --git a/source/ch/cyberduck/core/local/DisabledBrowserLauncher.java b/core/src/main/java/ch/cyberduck/core/local/DisabledBrowserLauncher.java similarity index 100% rename from source/ch/cyberduck/core/local/DisabledBrowserLauncher.java rename to core/src/main/java/ch/cyberduck/core/local/DisabledBrowserLauncher.java diff --git a/source/ch/cyberduck/core/local/DisabledFileWatcherListener.java b/core/src/main/java/ch/cyberduck/core/local/DisabledFileWatcherListener.java similarity index 100% rename from source/ch/cyberduck/core/local/DisabledFileWatcherListener.java rename to core/src/main/java/ch/cyberduck/core/local/DisabledFileWatcherListener.java diff --git a/source/ch/cyberduck/core/local/DisabledIconService.java b/core/src/main/java/ch/cyberduck/core/local/DisabledIconService.java similarity index 100% rename from source/ch/cyberduck/core/local/DisabledIconService.java rename to core/src/main/java/ch/cyberduck/core/local/DisabledIconService.java diff --git a/source/ch/cyberduck/core/local/DisabledQuarantineService.java b/core/src/main/java/ch/cyberduck/core/local/DisabledQuarantineService.java similarity index 100% rename from source/ch/cyberduck/core/local/DisabledQuarantineService.java rename to core/src/main/java/ch/cyberduck/core/local/DisabledQuarantineService.java diff --git a/source/ch/cyberduck/core/local/ExecApplicationLauncher.java b/core/src/main/java/ch/cyberduck/core/local/ExecApplicationLauncher.java similarity index 100% rename from source/ch/cyberduck/core/local/ExecApplicationLauncher.java rename to core/src/main/java/ch/cyberduck/core/local/ExecApplicationLauncher.java diff --git a/source/ch/cyberduck/core/local/FileDescriptor.java b/core/src/main/java/ch/cyberduck/core/local/FileDescriptor.java similarity index 100% rename from source/ch/cyberduck/core/local/FileDescriptor.java rename to core/src/main/java/ch/cyberduck/core/local/FileDescriptor.java diff --git a/source/ch/cyberduck/core/local/FileDescriptorFactory.java b/core/src/main/java/ch/cyberduck/core/local/FileDescriptorFactory.java similarity index 100% rename from source/ch/cyberduck/core/local/FileDescriptorFactory.java rename to core/src/main/java/ch/cyberduck/core/local/FileDescriptorFactory.java diff --git a/source/ch/cyberduck/core/local/FileManagerWorkingDirectoryFinder.java b/core/src/main/java/ch/cyberduck/core/local/FileManagerWorkingDirectoryFinder.java similarity index 100% rename from source/ch/cyberduck/core/local/FileManagerWorkingDirectoryFinder.java rename to core/src/main/java/ch/cyberduck/core/local/FileManagerWorkingDirectoryFinder.java index a216f4acec..2ddb8236db 100644 --- a/source/ch/cyberduck/core/local/FileManagerWorkingDirectoryFinder.java +++ b/core/src/main/java/ch/cyberduck/core/local/FileManagerWorkingDirectoryFinder.java @@ -18,9 +18,9 @@ package ch.cyberduck.core.local; * feedback@cyberduck.io */ +import ch.cyberduck.binding.foundation.NSFileManager; import ch.cyberduck.core.Local; import ch.cyberduck.core.LocalFactory; -import ch.cyberduck.binding.foundation.NSFileManager; /** * @version $Id$ diff --git a/source/ch/cyberduck/core/local/FileWatcher.java b/core/src/main/java/ch/cyberduck/core/local/FileWatcher.java similarity index 100% rename from source/ch/cyberduck/core/local/FileWatcher.java rename to core/src/main/java/ch/cyberduck/core/local/FileWatcher.java diff --git a/source/ch/cyberduck/core/local/FileWatcherCallback.java b/core/src/main/java/ch/cyberduck/core/local/FileWatcherCallback.java similarity index 100% rename from source/ch/cyberduck/core/local/FileWatcherCallback.java rename to core/src/main/java/ch/cyberduck/core/local/FileWatcherCallback.java diff --git a/source/ch/cyberduck/core/local/FileWatcherListener.java b/core/src/main/java/ch/cyberduck/core/local/FileWatcherListener.java similarity index 100% rename from source/ch/cyberduck/core/local/FileWatcherListener.java rename to core/src/main/java/ch/cyberduck/core/local/FileWatcherListener.java diff --git a/source/ch/cyberduck/core/local/FinderLocal.java b/core/src/main/java/ch/cyberduck/core/local/FinderLocal.java similarity index 99% rename from source/ch/cyberduck/core/local/FinderLocal.java rename to core/src/main/java/ch/cyberduck/core/local/FinderLocal.java index def492a66a..4ea23158f2 100644 --- a/source/ch/cyberduck/core/local/FinderLocal.java +++ b/core/src/main/java/ch/cyberduck/core/local/FinderLocal.java @@ -57,7 +57,7 @@ public class FinderLocal extends Local { private static final Logger log = Logger.getLogger(FinderLocal.class); static { - Native.load("local"); + Native.load("core"); } /** diff --git a/source/ch/cyberduck/core/local/FinderLocalAttributes.java b/core/src/main/java/ch/cyberduck/core/local/FinderLocalAttributes.java similarity index 100% rename from source/ch/cyberduck/core/local/FinderLocalAttributes.java rename to core/src/main/java/ch/cyberduck/core/local/FinderLocalAttributes.java diff --git a/source/ch/cyberduck/core/local/FinderSidebarService.java b/core/src/main/java/ch/cyberduck/core/local/FinderSidebarService.java similarity index 98% rename from source/ch/cyberduck/core/local/FinderSidebarService.java rename to core/src/main/java/ch/cyberduck/core/local/FinderSidebarService.java index 9d2ae6b592..016e44a62b 100644 --- a/source/ch/cyberduck/core/local/FinderSidebarService.java +++ b/core/src/main/java/ch/cyberduck/core/local/FinderSidebarService.java @@ -33,7 +33,7 @@ public class FinderSidebarService implements SidebarService { private static final Logger log = Logger.getLogger(FinderSidebarService.class); static { - Native.load("findersidebarservice"); + Native.load("core"); } private static final String kLSSharedFileListFavoriteVolumes = "com.apple.LSSharedFileList.FavoriteVolumes"; diff --git a/source/ch/cyberduck/core/local/FoundationProgressIconService.java b/core/src/main/java/ch/cyberduck/core/local/FoundationProgressIconService.java similarity index 96% rename from source/ch/cyberduck/core/local/FoundationProgressIconService.java rename to core/src/main/java/ch/cyberduck/core/local/FoundationProgressIconService.java index ac46f6ce63..e75a18d8d8 100644 --- a/source/ch/cyberduck/core/local/FoundationProgressIconService.java +++ b/core/src/main/java/ch/cyberduck/core/local/FoundationProgressIconService.java @@ -28,7 +28,7 @@ import ch.cyberduck.core.transfer.TransferStatus; public final class FoundationProgressIconService implements IconService { static { - Native.load("foundationprogressservice"); + Native.load("core"); } @Override diff --git a/source/ch/cyberduck/core/local/IconService.java b/core/src/main/java/ch/cyberduck/core/local/IconService.java similarity index 100% rename from source/ch/cyberduck/core/local/IconService.java rename to core/src/main/java/ch/cyberduck/core/local/IconService.java diff --git a/source/ch/cyberduck/core/local/IconServiceFactory.java b/core/src/main/java/ch/cyberduck/core/local/IconServiceFactory.java similarity index 100% rename from source/ch/cyberduck/core/local/IconServiceFactory.java rename to core/src/main/java/ch/cyberduck/core/local/IconServiceFactory.java diff --git a/source/ch/cyberduck/core/local/LaunchServicesApplicationFinder.java b/core/src/main/java/ch/cyberduck/core/local/LaunchServicesApplicationFinder.java similarity index 99% rename from source/ch/cyberduck/core/local/LaunchServicesApplicationFinder.java rename to core/src/main/java/ch/cyberduck/core/local/LaunchServicesApplicationFinder.java index 358c9d9203..2511b18cd1 100644 --- a/source/ch/cyberduck/core/local/LaunchServicesApplicationFinder.java +++ b/core/src/main/java/ch/cyberduck/core/local/LaunchServicesApplicationFinder.java @@ -43,7 +43,7 @@ public final class LaunchServicesApplicationFinder implements ApplicationFinder private static final Logger log = Logger.getLogger(LaunchServicesApplicationFinder.class); static { - Native.load("launchservicesapplicationfinder"); + Native.load("core"); } public LaunchServicesApplicationFinder() { diff --git a/source/ch/cyberduck/core/local/LaunchServicesFileDescriptor.java b/core/src/main/java/ch/cyberduck/core/local/LaunchServicesFileDescriptor.java similarity index 96% rename from source/ch/cyberduck/core/local/LaunchServicesFileDescriptor.java rename to core/src/main/java/ch/cyberduck/core/local/LaunchServicesFileDescriptor.java index 178cd59068..3f770405f0 100644 --- a/source/ch/cyberduck/core/local/LaunchServicesFileDescriptor.java +++ b/core/src/main/java/ch/cyberduck/core/local/LaunchServicesFileDescriptor.java @@ -30,7 +30,7 @@ import org.apache.commons.lang3.StringUtils; public final class LaunchServicesFileDescriptor extends AbstractFileDescriptor { static { - Native.load("launchservicesfiledescriptor"); + Native.load("core"); } @Override diff --git a/source/ch/cyberduck/core/local/LaunchServicesQuarantineService.java b/core/src/main/java/ch/cyberduck/core/local/LaunchServicesQuarantineService.java similarity index 98% rename from source/ch/cyberduck/core/local/LaunchServicesQuarantineService.java rename to core/src/main/java/ch/cyberduck/core/local/LaunchServicesQuarantineService.java index 41be5d5edb..f0a8f8559d 100644 --- a/source/ch/cyberduck/core/local/LaunchServicesQuarantineService.java +++ b/core/src/main/java/ch/cyberduck/core/local/LaunchServicesQuarantineService.java @@ -31,7 +31,7 @@ public final class LaunchServicesQuarantineService implements QuarantineService private static final Logger log = Logger.getLogger(LaunchServicesQuarantineService.class); static { - Native.load("launchservicesquarantineservice"); + Native.load("core"); } private static final Object lock = new Object(); diff --git a/source/ch/cyberduck/core/local/LibcWorkingDirectoryFinder.java b/core/src/main/java/ch/cyberduck/core/local/LibcWorkingDirectoryFinder.java similarity index 100% rename from source/ch/cyberduck/core/local/LibcWorkingDirectoryFinder.java rename to core/src/main/java/ch/cyberduck/core/local/LibcWorkingDirectoryFinder.java diff --git a/source/ch/cyberduck/core/local/LocalApplicationFinder.java b/core/src/main/java/ch/cyberduck/core/local/LocalApplicationFinder.java similarity index 100% rename from source/ch/cyberduck/core/local/LocalApplicationFinder.java rename to core/src/main/java/ch/cyberduck/core/local/LocalApplicationFinder.java diff --git a/source/ch/cyberduck/core/local/LocalSymlinkFactory.java b/core/src/main/java/ch/cyberduck/core/local/LocalSymlinkFactory.java similarity index 100% rename from source/ch/cyberduck/core/local/LocalSymlinkFactory.java rename to core/src/main/java/ch/cyberduck/core/local/LocalSymlinkFactory.java diff --git a/source/ch/cyberduck/core/local/LocalTouchFactory.java b/core/src/main/java/ch/cyberduck/core/local/LocalTouchFactory.java similarity index 100% rename from source/ch/cyberduck/core/local/LocalTouchFactory.java rename to core/src/main/java/ch/cyberduck/core/local/LocalTouchFactory.java diff --git a/source/ch/cyberduck/core/local/LocalTrashFactory.java b/core/src/main/java/ch/cyberduck/core/local/LocalTrashFactory.java similarity index 100% rename from source/ch/cyberduck/core/local/LocalTrashFactory.java rename to core/src/main/java/ch/cyberduck/core/local/LocalTrashFactory.java diff --git a/source/ch/cyberduck/core/local/NullFileDescriptor.java b/core/src/main/java/ch/cyberduck/core/local/NullFileDescriptor.java similarity index 100% rename from source/ch/cyberduck/core/local/NullFileDescriptor.java rename to core/src/main/java/ch/cyberduck/core/local/NullFileDescriptor.java diff --git a/source/ch/cyberduck/core/local/NullLocalSymlinkFeature.java b/core/src/main/java/ch/cyberduck/core/local/NullLocalSymlinkFeature.java similarity index 100% rename from source/ch/cyberduck/core/local/NullLocalSymlinkFeature.java rename to core/src/main/java/ch/cyberduck/core/local/NullLocalSymlinkFeature.java diff --git a/source/ch/cyberduck/core/local/NullLocalTrashFeature.java b/core/src/main/java/ch/cyberduck/core/local/NullLocalTrashFeature.java similarity index 100% rename from source/ch/cyberduck/core/local/NullLocalTrashFeature.java rename to core/src/main/java/ch/cyberduck/core/local/NullLocalTrashFeature.java diff --git a/source/ch/cyberduck/core/local/PanelSandboxBookmarkResolver.java b/core/src/main/java/ch/cyberduck/core/local/PanelSandboxBookmarkResolver.java similarity index 100% rename from source/ch/cyberduck/core/local/PanelSandboxBookmarkResolver.java rename to core/src/main/java/ch/cyberduck/core/local/PanelSandboxBookmarkResolver.java diff --git a/source/ch/cyberduck/core/local/QuarantineService.java b/core/src/main/java/ch/cyberduck/core/local/QuarantineService.java similarity index 100% rename from source/ch/cyberduck/core/local/QuarantineService.java rename to core/src/main/java/ch/cyberduck/core/local/QuarantineService.java diff --git a/source/ch/cyberduck/core/local/QuarantineServiceFactory.java b/core/src/main/java/ch/cyberduck/core/local/QuarantineServiceFactory.java similarity index 100% rename from source/ch/cyberduck/core/local/QuarantineServiceFactory.java rename to core/src/main/java/ch/cyberduck/core/local/QuarantineServiceFactory.java diff --git a/source/ch/cyberduck/core/local/RevealService.java b/core/src/main/java/ch/cyberduck/core/local/RevealService.java similarity index 100% rename from source/ch/cyberduck/core/local/RevealService.java rename to core/src/main/java/ch/cyberduck/core/local/RevealService.java diff --git a/source/ch/cyberduck/core/local/RevealServiceFactory.java b/core/src/main/java/ch/cyberduck/core/local/RevealServiceFactory.java similarity index 100% rename from source/ch/cyberduck/core/local/RevealServiceFactory.java rename to core/src/main/java/ch/cyberduck/core/local/RevealServiceFactory.java diff --git a/source/ch/cyberduck/core/local/SandboxBookmarkResolver.java b/core/src/main/java/ch/cyberduck/core/local/SandboxBookmarkResolver.java similarity index 100% rename from source/ch/cyberduck/core/local/SandboxBookmarkResolver.java rename to core/src/main/java/ch/cyberduck/core/local/SandboxBookmarkResolver.java diff --git a/source/ch/cyberduck/core/local/SidebarService.java b/core/src/main/java/ch/cyberduck/core/local/SidebarService.java similarity index 100% rename from source/ch/cyberduck/core/local/SidebarService.java rename to core/src/main/java/ch/cyberduck/core/local/SidebarService.java diff --git a/source/ch/cyberduck/core/local/TemporaryFileService.java b/core/src/main/java/ch/cyberduck/core/local/TemporaryFileService.java similarity index 100% rename from source/ch/cyberduck/core/local/TemporaryFileService.java rename to core/src/main/java/ch/cyberduck/core/local/TemporaryFileService.java diff --git a/source/ch/cyberduck/core/local/TemporaryFileServiceFactory.java b/core/src/main/java/ch/cyberduck/core/local/TemporaryFileServiceFactory.java similarity index 100% rename from source/ch/cyberduck/core/local/TemporaryFileServiceFactory.java rename to core/src/main/java/ch/cyberduck/core/local/TemporaryFileServiceFactory.java diff --git a/source/ch/cyberduck/core/local/TildeExpander.java b/core/src/main/java/ch/cyberduck/core/local/TildeExpander.java similarity index 100% rename from source/ch/cyberduck/core/local/TildeExpander.java rename to core/src/main/java/ch/cyberduck/core/local/TildeExpander.java diff --git a/source/ch/cyberduck/core/local/WorkdirPrefixer.java b/core/src/main/java/ch/cyberduck/core/local/WorkdirPrefixer.java similarity index 100% rename from source/ch/cyberduck/core/local/WorkdirPrefixer.java rename to core/src/main/java/ch/cyberduck/core/local/WorkdirPrefixer.java diff --git a/source/ch/cyberduck/core/local/WorkingDirectoryFinder.java b/core/src/main/java/ch/cyberduck/core/local/WorkingDirectoryFinder.java similarity index 100% rename from source/ch/cyberduck/core/local/WorkingDirectoryFinder.java rename to core/src/main/java/ch/cyberduck/core/local/WorkingDirectoryFinder.java diff --git a/source/ch/cyberduck/core/local/WorkingDirectoryFinderFactory.java b/core/src/main/java/ch/cyberduck/core/local/WorkingDirectoryFinderFactory.java similarity index 100% rename from source/ch/cyberduck/core/local/WorkingDirectoryFinderFactory.java rename to core/src/main/java/ch/cyberduck/core/local/WorkingDirectoryFinderFactory.java diff --git a/source/ch/cyberduck/core/local/WorkspaceApplicationBadgeLabeler.java b/core/src/main/java/ch/cyberduck/core/local/WorkspaceApplicationBadgeLabeler.java similarity index 100% rename from source/ch/cyberduck/core/local/WorkspaceApplicationBadgeLabeler.java rename to core/src/main/java/ch/cyberduck/core/local/WorkspaceApplicationBadgeLabeler.java diff --git a/source/ch/cyberduck/core/local/WorkspaceApplicationLauncher.java b/core/src/main/java/ch/cyberduck/core/local/WorkspaceApplicationLauncher.java similarity index 97% rename from source/ch/cyberduck/core/local/WorkspaceApplicationLauncher.java rename to core/src/main/java/ch/cyberduck/core/local/WorkspaceApplicationLauncher.java index 78c80fbdbf..7a2de3f80f 100644 --- a/source/ch/cyberduck/core/local/WorkspaceApplicationLauncher.java +++ b/core/src/main/java/ch/cyberduck/core/local/WorkspaceApplicationLauncher.java @@ -18,7 +18,7 @@ package ch.cyberduck.core.local; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.ProxyController; +import ch.cyberduck.binding.Proxy; import ch.cyberduck.binding.application.NSWorkspace; import ch.cyberduck.binding.foundation.NSDistributedNotificationCenter; import ch.cyberduck.binding.foundation.NSNotification; @@ -54,7 +54,7 @@ public final class WorkspaceApplicationLauncher implements ApplicationLauncher { registered.put(application, callback); } - private final ProxyController terminate = new ProxyController() { + private final Proxy terminate = new Proxy() { public void terminated(final NSNotification notification) { if(log.isDebugEnabled()) { log.debug(String.format("Received notification %s from workspace", notification.userInfo())); diff --git a/source/ch/cyberduck/core/local/WorkspaceBrowserLauncher.java b/core/src/main/java/ch/cyberduck/core/local/WorkspaceBrowserLauncher.java similarity index 100% rename from source/ch/cyberduck/core/local/WorkspaceBrowserLauncher.java rename to core/src/main/java/ch/cyberduck/core/local/WorkspaceBrowserLauncher.java diff --git a/source/ch/cyberduck/core/local/WorkspaceIconService.java b/core/src/main/java/ch/cyberduck/core/local/WorkspaceIconService.java similarity index 100% rename from source/ch/cyberduck/core/local/WorkspaceIconService.java rename to core/src/main/java/ch/cyberduck/core/local/WorkspaceIconService.java diff --git a/source/ch/cyberduck/core/local/WorkspaceRevealService.java b/core/src/main/java/ch/cyberduck/core/local/WorkspaceRevealService.java similarity index 100% rename from source/ch/cyberduck/core/local/WorkspaceRevealService.java rename to core/src/main/java/ch/cyberduck/core/local/WorkspaceRevealService.java diff --git a/source/ch/cyberduck/core/local/WorkspaceSymlinkFeature.java b/core/src/main/java/ch/cyberduck/core/local/WorkspaceSymlinkFeature.java similarity index 100% rename from source/ch/cyberduck/core/local/WorkspaceSymlinkFeature.java rename to core/src/main/java/ch/cyberduck/core/local/WorkspaceSymlinkFeature.java diff --git a/source/ch/cyberduck/core/local/WorkspaceTrashFeature.java b/core/src/main/java/ch/cyberduck/core/local/WorkspaceTrashFeature.java similarity index 100% rename from source/ch/cyberduck/core/local/WorkspaceTrashFeature.java rename to core/src/main/java/ch/cyberduck/core/local/WorkspaceTrashFeature.java diff --git a/source/ch/cyberduck/core/local/features/DefaultSymlinkFeature.java b/core/src/main/java/ch/cyberduck/core/local/features/DefaultSymlinkFeature.java similarity index 100% rename from source/ch/cyberduck/core/local/features/DefaultSymlinkFeature.java rename to core/src/main/java/ch/cyberduck/core/local/features/DefaultSymlinkFeature.java diff --git a/source/ch/cyberduck/core/local/features/Symlink.java b/core/src/main/java/ch/cyberduck/core/local/features/Symlink.java similarity index 100% rename from source/ch/cyberduck/core/local/features/Symlink.java rename to core/src/main/java/ch/cyberduck/core/local/features/Symlink.java diff --git a/source/ch/cyberduck/core/local/features/Touch.java b/core/src/main/java/ch/cyberduck/core/local/features/Touch.java similarity index 100% rename from source/ch/cyberduck/core/local/features/Touch.java rename to core/src/main/java/ch/cyberduck/core/local/features/Touch.java diff --git a/source/ch/cyberduck/core/local/features/Trash.java b/core/src/main/java/ch/cyberduck/core/local/features/Trash.java similarity index 100% rename from source/ch/cyberduck/core/local/features/Trash.java rename to core/src/main/java/ch/cyberduck/core/local/features/Trash.java diff --git a/source/ch/cyberduck/core/logging/LoggingConfiguration.java b/core/src/main/java/ch/cyberduck/core/logging/LoggingConfiguration.java similarity index 100% rename from source/ch/cyberduck/core/logging/LoggingConfiguration.java rename to core/src/main/java/ch/cyberduck/core/logging/LoggingConfiguration.java diff --git a/source/ch/cyberduck/core/logging/SystemLogAppender.java b/core/src/main/java/ch/cyberduck/core/logging/SystemLogAppender.java similarity index 100% rename from source/ch/cyberduck/core/logging/SystemLogAppender.java rename to core/src/main/java/ch/cyberduck/core/logging/SystemLogAppender.java diff --git a/source/ch/cyberduck/core/notification/DisabledNotificationService.java b/core/src/main/java/ch/cyberduck/core/notification/DisabledNotificationService.java similarity index 93% rename from source/ch/cyberduck/core/notification/DisabledNotificationService.java rename to core/src/main/java/ch/cyberduck/core/notification/DisabledNotificationService.java index edf80ef7a3..5773d97afa 100644 --- a/source/ch/cyberduck/core/notification/DisabledNotificationService.java +++ b/core/src/main/java/ch/cyberduck/core/notification/DisabledNotificationService.java @@ -28,12 +28,12 @@ public final class DisabledNotificationService implements NotificationService { @Override public void setup() { - log.warn("Growl notifications disabled"); + log.warn("Notifications disabled"); } @Override public void unregister() { - log.warn("Growl notifications disabled"); + log.warn("Notifications disabled"); } @Override diff --git a/source/ch/cyberduck/core/notification/NotificationAlertCallback.java b/core/src/main/java/ch/cyberduck/core/notification/NotificationAlertCallback.java similarity index 100% rename from source/ch/cyberduck/core/notification/NotificationAlertCallback.java rename to core/src/main/java/ch/cyberduck/core/notification/NotificationAlertCallback.java diff --git a/source/ch/cyberduck/core/notification/NotificationCenter.java b/core/src/main/java/ch/cyberduck/core/notification/NotificationCenter.java similarity index 100% rename from source/ch/cyberduck/core/notification/NotificationCenter.java rename to core/src/main/java/ch/cyberduck/core/notification/NotificationCenter.java diff --git a/source/ch/cyberduck/core/notification/NotificationService.java b/core/src/main/java/ch/cyberduck/core/notification/NotificationService.java similarity index 100% rename from source/ch/cyberduck/core/notification/NotificationService.java rename to core/src/main/java/ch/cyberduck/core/notification/NotificationService.java diff --git a/source/ch/cyberduck/core/notification/NotificationServiceFactory.java b/core/src/main/java/ch/cyberduck/core/notification/NotificationServiceFactory.java similarity index 100% rename from source/ch/cyberduck/core/notification/NotificationServiceFactory.java rename to core/src/main/java/ch/cyberduck/core/notification/NotificationServiceFactory.java diff --git a/source/ch/cyberduck/core/pasteboard/HostPasteboard.java b/core/src/main/java/ch/cyberduck/core/pasteboard/HostPasteboard.java similarity index 100% rename from source/ch/cyberduck/core/pasteboard/HostPasteboard.java rename to core/src/main/java/ch/cyberduck/core/pasteboard/HostPasteboard.java diff --git a/source/ch/cyberduck/core/pasteboard/Pasteboard.java b/core/src/main/java/ch/cyberduck/core/pasteboard/Pasteboard.java similarity index 100% rename from source/ch/cyberduck/core/pasteboard/Pasteboard.java rename to core/src/main/java/ch/cyberduck/core/pasteboard/Pasteboard.java diff --git a/source/ch/cyberduck/core/pasteboard/PathPasteboard.java b/core/src/main/java/ch/cyberduck/core/pasteboard/PathPasteboard.java similarity index 100% rename from source/ch/cyberduck/core/pasteboard/PathPasteboard.java rename to core/src/main/java/ch/cyberduck/core/pasteboard/PathPasteboard.java diff --git a/source/ch/cyberduck/core/pasteboard/PathPasteboardFactory.java b/core/src/main/java/ch/cyberduck/core/pasteboard/PathPasteboardFactory.java similarity index 100% rename from source/ch/cyberduck/core/pasteboard/PathPasteboardFactory.java rename to core/src/main/java/ch/cyberduck/core/pasteboard/PathPasteboardFactory.java diff --git a/source/ch/cyberduck/core/worker/SessionPool.java b/core/src/main/java/ch/cyberduck/core/pool/SessionPool.java similarity index 98% rename from source/ch/cyberduck/core/worker/SessionPool.java rename to core/src/main/java/ch/cyberduck/core/pool/SessionPool.java index ed2b12cd80..295d3be666 100644 --- a/source/ch/cyberduck/core/worker/SessionPool.java +++ b/core/src/main/java/ch/cyberduck/core/pool/SessionPool.java @@ -1,4 +1,4 @@ -package ch.cyberduck.core.worker; +package ch.cyberduck.core.pool; /* * Copyright (c) 2002-2015 David Kocher. All rights reserved. diff --git a/source/ch/cyberduck/core/preferences/ApplicationLoginRegistry.java b/core/src/main/java/ch/cyberduck/core/preferences/ApplicationLoginRegistry.java similarity index 100% rename from source/ch/cyberduck/core/preferences/ApplicationLoginRegistry.java rename to core/src/main/java/ch/cyberduck/core/preferences/ApplicationLoginRegistry.java diff --git a/source/ch/cyberduck/core/preferences/ApplicationResourcesFinder.java b/core/src/main/java/ch/cyberduck/core/preferences/ApplicationResourcesFinder.java similarity index 100% rename from source/ch/cyberduck/core/preferences/ApplicationResourcesFinder.java rename to core/src/main/java/ch/cyberduck/core/preferences/ApplicationResourcesFinder.java diff --git a/source/ch/cyberduck/core/preferences/ApplicationResourcesFinderFactory.java b/core/src/main/java/ch/cyberduck/core/preferences/ApplicationResourcesFinderFactory.java similarity index 100% rename from source/ch/cyberduck/core/preferences/ApplicationResourcesFinderFactory.java rename to core/src/main/java/ch/cyberduck/core/preferences/ApplicationResourcesFinderFactory.java diff --git a/source/ch/cyberduck/core/preferences/ApplicationSupportDirectoryFinder.java b/core/src/main/java/ch/cyberduck/core/preferences/ApplicationSupportDirectoryFinder.java similarity index 100% rename from source/ch/cyberduck/core/preferences/ApplicationSupportDirectoryFinder.java rename to core/src/main/java/ch/cyberduck/core/preferences/ApplicationSupportDirectoryFinder.java diff --git a/source/ch/cyberduck/core/preferences/BundleApplicationResourcesFinder.java b/core/src/main/java/ch/cyberduck/core/preferences/BundleApplicationResourcesFinder.java similarity index 100% rename from source/ch/cyberduck/core/preferences/BundleApplicationResourcesFinder.java rename to core/src/main/java/ch/cyberduck/core/preferences/BundleApplicationResourcesFinder.java diff --git a/source/ch/cyberduck/core/preferences/Preferences.java b/core/src/main/java/ch/cyberduck/core/preferences/Preferences.java similarity index 97% rename from source/ch/cyberduck/core/preferences/Preferences.java rename to core/src/main/java/ch/cyberduck/core/preferences/Preferences.java index 210c429eb9..db01cb781c 100644 --- a/source/ch/cyberduck/core/preferences/Preferences.java +++ b/core/src/main/java/ch/cyberduck/core/preferences/Preferences.java @@ -27,10 +27,8 @@ import ch.cyberduck.core.DisabledSleepPreventer; import ch.cyberduck.core.DisabledTerminalService; import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; -import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.Scheme; import ch.cyberduck.core.aquaticprime.DonationKeyFactory; -import ch.cyberduck.core.bonjour.DisabledRendezvous; import ch.cyberduck.core.date.DefaultUserDateFormatter; import ch.cyberduck.core.diagnostics.DefaultInetAddressReachability; import ch.cyberduck.core.formatter.DecimalSizeFormatter; @@ -630,7 +628,7 @@ public abstract class Preferences { defaults.put("s3.location", "us-east-1"); defaults.put("s3.bucket.virtualhost.disable", String.valueOf(false)); defaults.put("s3.bucket.requesterpays", String.valueOf(true)); - defaults.put("s3.hostname.default", ProtocolFactory.S3_SSL.getDefaultHostname()); + defaults.put("s3.hostname.default", "s3.amazonaws.com"); defaults.put("s3.bucket.acl.default", "public-read"); //defaults.put("s3.bucket.acl.default", "private"); @@ -865,17 +863,6 @@ public abstract class Preferences { defaults.put("connection.port.default", String.valueOf(21)); defaults.put("connection.protocol.default", Scheme.ftp.name()); - defaults.put(String.format("connection.protocol.%s.enable", ProtocolFactory.FTP.getIdentifier()), String.valueOf(true)); - defaults.put(String.format("connection.protocol.%s.enable", ProtocolFactory.FTP_TLS.getIdentifier()), String.valueOf(true)); - defaults.put(String.format("connection.protocol.%s.enable", ProtocolFactory.SFTP.getIdentifier()), String.valueOf(true)); - defaults.put(String.format("connection.protocol.%s.enable", ProtocolFactory.WEBDAV.getIdentifier()), String.valueOf(true)); - defaults.put(String.format("connection.protocol.%s.enable", ProtocolFactory.WEBDAV_SSL.getIdentifier()), String.valueOf(true)); - defaults.put(String.format("connection.protocol.%s.enable", ProtocolFactory.SWIFT.getIdentifier()), String.valueOf(true)); - defaults.put(String.format("connection.protocol.%s.enable", ProtocolFactory.S3_SSL.getIdentifier()), String.valueOf(true)); - defaults.put(String.format("connection.protocol.%s.enable", ProtocolFactory.GOOGLESTORAGE_SSL.getIdentifier()), String.valueOf(true)); - defaults.put(String.format("connection.protocol.%s.enable", ProtocolFactory.AZURE.getIdentifier()), String.valueOf(true)); - defaults.put(String.format("connection.protocol.%s.enable", ProtocolFactory.IRODS.getIdentifier()), String.valueOf(false)); - /** * SO_KEEPALIVE */ @@ -1177,6 +1164,7 @@ public abstract class Preferences { defaults.put("factory.reader.host.class", HostPlistReader.class.getName()); defaults.put("factory.writer.host.class", PlistWriter.class.getName()); + defaults.put("factory.certificatestore.class", DisabledCertificateStore.class.getName()); defaults.put("factory.logincallback.class", DisabledLoginCallback.class.getName()); defaults.put("factory.hostkeycallback.class", DisabledHostKeyCallback.class.getName()); @@ -1202,7 +1190,6 @@ public abstract class Preferences { defaults.put("factory.proxy.class", DisabledProxyFinder.class.getName()); defaults.put("factory.passwordstore.class", DisabledPasswordStore.class.getName()); defaults.put("factory.dateformatter.class", DefaultUserDateFormatter.class.getName()); - defaults.put("factory.rendezvous.class", DisabledRendezvous.class.getName()); defaults.put("factory.trash.class", DefaultLocalTrashFeature.class.getName()); defaults.put("factory.symlink.class", NullLocalSymlinkFeature.class.getName()); defaults.put("factory.licensefactory.class", DonationKeyFactory.class.getName()); diff --git a/source/ch/cyberduck/core/preferences/PreferencesFactory.java b/core/src/main/java/ch/cyberduck/core/preferences/PreferencesFactory.java similarity index 100% rename from source/ch/cyberduck/core/preferences/PreferencesFactory.java rename to core/src/main/java/ch/cyberduck/core/preferences/PreferencesFactory.java diff --git a/source/ch/cyberduck/core/preferences/SecurityApplicationGroupSupportDirectoryFinder.java b/core/src/main/java/ch/cyberduck/core/preferences/SecurityApplicationGroupSupportDirectoryFinder.java similarity index 100% rename from source/ch/cyberduck/core/preferences/SecurityApplicationGroupSupportDirectoryFinder.java rename to core/src/main/java/ch/cyberduck/core/preferences/SecurityApplicationGroupSupportDirectoryFinder.java diff --git a/source/ch/cyberduck/core/preferences/ServiceManagementApplicationLoginRegistry.java b/core/src/main/java/ch/cyberduck/core/preferences/ServiceManagementApplicationLoginRegistry.java similarity index 100% rename from source/ch/cyberduck/core/preferences/ServiceManagementApplicationLoginRegistry.java rename to core/src/main/java/ch/cyberduck/core/preferences/ServiceManagementApplicationLoginRegistry.java diff --git a/source/ch/cyberduck/core/preferences/StaticApplicationResourcesFinder.java b/core/src/main/java/ch/cyberduck/core/preferences/StaticApplicationResourcesFinder.java similarity index 100% rename from source/ch/cyberduck/core/preferences/StaticApplicationResourcesFinder.java rename to core/src/main/java/ch/cyberduck/core/preferences/StaticApplicationResourcesFinder.java diff --git a/source/ch/cyberduck/core/preferences/SupportDirectoryFinder.java b/core/src/main/java/ch/cyberduck/core/preferences/SupportDirectoryFinder.java similarity index 100% rename from source/ch/cyberduck/core/preferences/SupportDirectoryFinder.java rename to core/src/main/java/ch/cyberduck/core/preferences/SupportDirectoryFinder.java diff --git a/source/ch/cyberduck/core/preferences/SupportDirectoryFinderFactory.java b/core/src/main/java/ch/cyberduck/core/preferences/SupportDirectoryFinderFactory.java similarity index 100% rename from source/ch/cyberduck/core/preferences/SupportDirectoryFinderFactory.java rename to core/src/main/java/ch/cyberduck/core/preferences/SupportDirectoryFinderFactory.java diff --git a/source/ch/cyberduck/core/preferences/TemporaryApplicationResourcesFinder.java b/core/src/main/java/ch/cyberduck/core/preferences/TemporaryApplicationResourcesFinder.java similarity index 100% rename from source/ch/cyberduck/core/preferences/TemporaryApplicationResourcesFinder.java rename to core/src/main/java/ch/cyberduck/core/preferences/TemporaryApplicationResourcesFinder.java diff --git a/source/ch/cyberduck/core/preferences/TemporarySupportDirectoryFinder.java b/core/src/main/java/ch/cyberduck/core/preferences/TemporarySupportDirectoryFinder.java similarity index 100% rename from source/ch/cyberduck/core/preferences/TemporarySupportDirectoryFinder.java rename to core/src/main/java/ch/cyberduck/core/preferences/TemporarySupportDirectoryFinder.java diff --git a/source/ch/cyberduck/core/preferences/UserDefaultsPreferences.java b/core/src/main/java/ch/cyberduck/core/preferences/UserDefaultsPreferences.java similarity index 59% rename from source/ch/cyberduck/core/preferences/UserDefaultsPreferences.java rename to core/src/main/java/ch/cyberduck/core/preferences/UserDefaultsPreferences.java index ffb03f6624..4fda331d9e 100644 --- a/source/ch/cyberduck/core/preferences/UserDefaultsPreferences.java +++ b/core/src/main/java/ch/cyberduck/core/preferences/UserDefaultsPreferences.java @@ -26,42 +26,9 @@ import ch.cyberduck.binding.foundation.NSLocale; import ch.cyberduck.binding.foundation.NSObject; import ch.cyberduck.binding.foundation.NSString; import ch.cyberduck.binding.foundation.NSUserDefaults; -import ch.cyberduck.core.ApplescriptTerminalService; import ch.cyberduck.core.Factory; -import ch.cyberduck.core.IOKitSleepPreventer; -import ch.cyberduck.core.Keychain; import ch.cyberduck.core.Local; import ch.cyberduck.core.LocalFactory; -import ch.cyberduck.core.aquaticprime.ReceiptFactory; -import ch.cyberduck.core.bonjour.RendezvousResponder; -import ch.cyberduck.core.diagnostics.SystemConfigurationReachability; -import ch.cyberduck.core.editor.FSEventWatchEditorFactory; -import ch.cyberduck.core.i18n.BundleLocale; -import ch.cyberduck.core.local.FileManagerWorkingDirectoryFinder; -import ch.cyberduck.core.local.FinderLocal; -import ch.cyberduck.core.local.LaunchServicesApplicationFinder; -import ch.cyberduck.core.local.LaunchServicesFileDescriptor; -import ch.cyberduck.core.local.LaunchServicesQuarantineService; -import ch.cyberduck.core.local.WorkspaceApplicationBadgeLabeler; -import ch.cyberduck.core.local.WorkspaceApplicationLauncher; -import ch.cyberduck.core.local.WorkspaceBrowserLauncher; -import ch.cyberduck.core.local.WorkspaceIconService; -import ch.cyberduck.core.local.WorkspaceRevealService; -import ch.cyberduck.core.local.WorkspaceSymlinkFeature; -import ch.cyberduck.core.local.WorkspaceTrashFeature; -import ch.cyberduck.core.notification.NotificationCenter; -import ch.cyberduck.core.proxy.SystemConfigurationProxy; -import ch.cyberduck.core.resources.NSImageIconCache; -import ch.cyberduck.core.serializer.impl.jna.HostPlistReader; -import ch.cyberduck.core.serializer.impl.jna.PlistDeserializer; -import ch.cyberduck.core.serializer.impl.jna.PlistSerializer; -import ch.cyberduck.core.serializer.impl.jna.PlistWriter; -import ch.cyberduck.core.serializer.impl.jna.ProfilePlistReader; -import ch.cyberduck.core.serializer.impl.jna.TransferPlistReader; -import ch.cyberduck.core.sparkle.Updater; -import ch.cyberduck.core.threading.AutoreleaseActionOperationBatcher; -import ch.cyberduck.core.urlhandler.LaunchServicesSchemeHandler; -import ch.cyberduck.ui.browser.Column; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; @@ -243,82 +210,9 @@ public class UserDefaultsPreferences extends Preferences { defaults.put("connection.ssl.keystore.type", "KeychainStore"); defaults.put("connection.ssl.keystore.provider", "Apple"); - defaults.put(String.format("browser.column.%s", Column.icon.name()), String.valueOf(true)); - defaults.put(String.format("browser.column.%s.width", Column.icon.name()), String.valueOf(20)); - defaults.put(String.format("browser.column.%s", Column.filename.name()), String.valueOf(true)); - defaults.put(String.format("browser.column.%s.width", Column.filename.name()), String.valueOf(250)); - defaults.put(String.format("browser.column.%s", Column.kind.name()), String.valueOf(false)); - defaults.put(String.format("browser.column.%s.width", Column.kind.name()), String.valueOf(80)); - defaults.put(String.format("browser.column.%s", Column.extension.name()), String.valueOf(false)); - defaults.put(String.format("browser.column.%s.width", Column.extension.name()), String.valueOf(80)); - defaults.put(String.format("browser.column.%s", Column.size.name()), String.valueOf(true)); - defaults.put(String.format("browser.column.%s.width", Column.size.name()), String.valueOf(80)); - defaults.put(String.format("browser.column.%s", Column.modified.name()), String.valueOf(true)); - defaults.put(String.format("browser.column.%s.width", Column.modified.name()), String.valueOf(150)); - defaults.put(String.format("browser.column.%s", Column.owner.name()), String.valueOf(false)); - defaults.put(String.format("browser.column.%s.width", Column.owner.name()), String.valueOf(80)); - defaults.put(String.format("browser.column.%s", Column.group.name()), String.valueOf(false)); - defaults.put(String.format("browser.column.%s.width", Column.group.name()), String.valueOf(80)); - defaults.put(String.format("browser.column.%s", Column.permission.name()), String.valueOf(false)); - defaults.put(String.format("browser.column.%s.width", Column.permission.name()), String.valueOf(100)); - defaults.put(String.format("browser.column.%s", Column.region.name()), String.valueOf(false)); - defaults.put(String.format("browser.column.%s.width", Column.region.name()), String.valueOf(80)); - defaults.put(String.format("browser.column.%s", Column.version.name()), String.valueOf(false)); - defaults.put(String.format("browser.column.%s.width", Column.version.name()), String.valueOf(80)); - - defaults.put("browser.sort.column", Column.filename.name()); - defaults.put("network.interface.blacklist", "awdl0,utun0"); } - @Override - protected void setFactories() { - super.setFactories(); - - defaults.put("factory.supportdirectoryfinder.class", SecurityApplicationGroupSupportDirectoryFinder.class.getName()); - defaults.put("factory.applicationresourcesfinder.class", BundleApplicationResourcesFinder.class.getName()); - defaults.put("factory.autorelease.class", AutoreleaseActionOperationBatcher.class.getName()); - defaults.put("factory.local.class", FinderLocal.class.getName()); - defaults.put("factory.locale.class", BundleLocale.class.getName()); - defaults.put("factory.passwordstore.class", Keychain.class.getName()); - defaults.put("factory.certificatestore.class", Keychain.class.getName()); - defaults.put("factory.proxy.class", SystemConfigurationProxy.class.getName()); - defaults.put("factory.sleeppreventer.class", IOKitSleepPreventer.class.getName()); - defaults.put("factory.reachability.class", SystemConfigurationReachability.class.getName()); - defaults.put("factory.rendezvous.class", RendezvousResponder.class.getName()); - - defaults.put("factory.serializer.class", PlistSerializer.class.getName()); - defaults.put("factory.deserializer.class", PlistDeserializer.class.getName()); - defaults.put("factory.reader.profile.class", ProfilePlistReader.class.getName()); - defaults.put("factory.writer.profile.class", PlistWriter.class.getName()); - defaults.put("factory.reader.transfer.class", TransferPlistReader.class.getName()); - defaults.put("factory.writer.transfer.class", PlistWriter.class.getName()); - defaults.put("factory.reader.host.class", HostPlistReader.class.getName()); - defaults.put("factory.writer.host.class", PlistWriter.class.getName()); - - defaults.put("factory.applicationfinder.class", LaunchServicesApplicationFinder.class.getName()); - defaults.put("factory.applicationlauncher.class", WorkspaceApplicationLauncher.class.getName()); - defaults.put("factory.browserlauncher.class", WorkspaceBrowserLauncher.class.getName()); - defaults.put("factory.reveal.class", WorkspaceRevealService.class.getName()); - defaults.put("factory.trash.class", WorkspaceTrashFeature.class.getName()); - defaults.put("factory.quarantine.class", LaunchServicesQuarantineService.class.getName()); - defaults.put("factory.symlink.class", WorkspaceSymlinkFeature.class.getName()); - defaults.put("factory.terminalservice.class", ApplescriptTerminalService.class.getName()); - defaults.put("factory.badgelabeler.class", WorkspaceApplicationBadgeLabeler.class.getName()); - defaults.put("factory.editorfactory.class", FSEventWatchEditorFactory.class.getName()); - if(null == Updater.getFeed()) { - defaults.put("factory.licensefactory.class", ReceiptFactory.class.getName()); - } - if(!Factory.Platform.osversion.matches("10\\.(5|6|7).*")) { - defaults.put("factory.notification.class", NotificationCenter.class.getName()); - } - defaults.put("factory.iconservice.class", WorkspaceIconService.class.getName()); - defaults.put("factory.filedescriptor.class", LaunchServicesFileDescriptor.class.getName()); - defaults.put("factory.schemehandler.class", LaunchServicesSchemeHandler.class.getName()); - defaults.put("factory.iconcache.class", NSImageIconCache.class.getName()); - defaults.put("factory.workingdirectory.class", FileManagerWorkingDirectoryFinder.class.getName()); - } - /** * Setting default values that must be accessible using [NSUserDefaults standardUserDefaults] * diff --git a/source/ch/cyberduck/core/preferences/UserHomeSupportDirectoryFinder.java b/core/src/main/java/ch/cyberduck/core/preferences/UserHomeSupportDirectoryFinder.java similarity index 100% rename from source/ch/cyberduck/core/preferences/UserHomeSupportDirectoryFinder.java rename to core/src/main/java/ch/cyberduck/core/preferences/UserHomeSupportDirectoryFinder.java diff --git a/source/ch/cyberduck/core/proxy/AbstractProxyFinder.java b/core/src/main/java/ch/cyberduck/core/proxy/AbstractProxyFinder.java similarity index 100% rename from source/ch/cyberduck/core/proxy/AbstractProxyFinder.java rename to core/src/main/java/ch/cyberduck/core/proxy/AbstractProxyFinder.java diff --git a/source/ch/cyberduck/core/proxy/DefaultProxyFinder.java b/core/src/main/java/ch/cyberduck/core/proxy/DefaultProxyFinder.java similarity index 100% rename from source/ch/cyberduck/core/proxy/DefaultProxyFinder.java rename to core/src/main/java/ch/cyberduck/core/proxy/DefaultProxyFinder.java diff --git a/source/ch/cyberduck/core/proxy/DisabledProxyFinder.java b/core/src/main/java/ch/cyberduck/core/proxy/DisabledProxyFinder.java similarity index 100% rename from source/ch/cyberduck/core/proxy/DisabledProxyFinder.java rename to core/src/main/java/ch/cyberduck/core/proxy/DisabledProxyFinder.java diff --git a/source/ch/cyberduck/core/proxy/EnvironmentVariableProxyFinder.java b/core/src/main/java/ch/cyberduck/core/proxy/EnvironmentVariableProxyFinder.java similarity index 96% rename from source/ch/cyberduck/core/proxy/EnvironmentVariableProxyFinder.java rename to core/src/main/java/ch/cyberduck/core/proxy/EnvironmentVariableProxyFinder.java index b3bc7ddad4..68b53f6e1f 100644 --- a/source/ch/cyberduck/core/proxy/EnvironmentVariableProxyFinder.java +++ b/core/src/main/java/ch/cyberduck/core/proxy/EnvironmentVariableProxyFinder.java @@ -14,7 +14,7 @@ import java.net.URISyntaxException; * @version $Id$ */ public class EnvironmentVariableProxyFinder implements ProxyFinder { - private static final Logger log = Logger.getLogger(SystemConfigurationProxy.class); + private static final Logger log = Logger.getLogger(EnvironmentVariableProxyFinder.class); private Preferences preferences = PreferencesFactory.get(); diff --git a/source/ch/cyberduck/core/proxy/Proxy.java b/core/src/main/java/ch/cyberduck/core/proxy/Proxy.java similarity index 100% rename from source/ch/cyberduck/core/proxy/Proxy.java rename to core/src/main/java/ch/cyberduck/core/proxy/Proxy.java diff --git a/source/ch/cyberduck/core/proxy/ProxyFactory.java b/core/src/main/java/ch/cyberduck/core/proxy/ProxyFactory.java similarity index 100% rename from source/ch/cyberduck/core/proxy/ProxyFactory.java rename to core/src/main/java/ch/cyberduck/core/proxy/ProxyFactory.java diff --git a/source/ch/cyberduck/core/proxy/ProxyFinder.java b/core/src/main/java/ch/cyberduck/core/proxy/ProxyFinder.java similarity index 100% rename from source/ch/cyberduck/core/proxy/ProxyFinder.java rename to core/src/main/java/ch/cyberduck/core/proxy/ProxyFinder.java diff --git a/source/ch/cyberduck/core/proxy/ProxyHostUrlProvider.java b/core/src/main/java/ch/cyberduck/core/proxy/ProxyHostUrlProvider.java similarity index 87% rename from source/ch/cyberduck/core/proxy/ProxyHostUrlProvider.java rename to core/src/main/java/ch/cyberduck/core/proxy/ProxyHostUrlProvider.java index c5af7613d8..7d885d3023 100644 --- a/source/ch/cyberduck/core/proxy/ProxyHostUrlProvider.java +++ b/core/src/main/java/ch/cyberduck/core/proxy/ProxyHostUrlProvider.java @@ -20,6 +20,7 @@ package ch.cyberduck.core.proxy; import ch.cyberduck.core.Host; import ch.cyberduck.core.HostUrlProvider; import ch.cyberduck.core.ProtocolFactory; +import ch.cyberduck.core.Scheme; /** * @version $Id$ @@ -34,7 +35,7 @@ public class ProxyHostUrlProvider extends HostUrlProvider { public String get(final Host host) { switch(host.getProtocol().getScheme()) { case sftp: - return super.get(new Host(ProtocolFactory.FTP, host.getHostname(), host.getPort())); + return super.get(new Host(ProtocolFactory.forScheme(Scheme.ftp.name()), host.getHostname(), host.getPort())); } return super.get(host); } diff --git a/source/ch/cyberduck/core/proxy/ProxySocketFactory.java b/core/src/main/java/ch/cyberduck/core/proxy/ProxySocketFactory.java similarity index 100% rename from source/ch/cyberduck/core/proxy/ProxySocketFactory.java rename to core/src/main/java/ch/cyberduck/core/proxy/ProxySocketFactory.java diff --git a/source/ch/cyberduck/core/proxy/SystemConfigurationProxy.java b/core/src/main/java/ch/cyberduck/core/proxy/SystemConfigurationProxy.java similarity index 99% rename from source/ch/cyberduck/core/proxy/SystemConfigurationProxy.java rename to core/src/main/java/ch/cyberduck/core/proxy/SystemConfigurationProxy.java index c6c0e892dc..957acbebf3 100644 --- a/source/ch/cyberduck/core/proxy/SystemConfigurationProxy.java +++ b/core/src/main/java/ch/cyberduck/core/proxy/SystemConfigurationProxy.java @@ -37,7 +37,7 @@ public final class SystemConfigurationProxy extends AbstractProxyFinder implemen private static final Logger log = Logger.getLogger(SystemConfigurationProxy.class); static { - Native.load("proxy"); + Native.load("core"); } private HostUrlProvider provider diff --git a/source/ch/cyberduck/core/resources/AbstractIconCache.java b/core/src/main/java/ch/cyberduck/core/resources/AbstractIconCache.java similarity index 100% rename from source/ch/cyberduck/core/resources/AbstractIconCache.java rename to core/src/main/java/ch/cyberduck/core/resources/AbstractIconCache.java diff --git a/source/ch/cyberduck/core/resources/DisabledIconCache.java b/core/src/main/java/ch/cyberduck/core/resources/DisabledIconCache.java similarity index 100% rename from source/ch/cyberduck/core/resources/DisabledIconCache.java rename to core/src/main/java/ch/cyberduck/core/resources/DisabledIconCache.java diff --git a/source/ch/cyberduck/core/resources/IconCache.java b/core/src/main/java/ch/cyberduck/core/resources/IconCache.java similarity index 100% rename from source/ch/cyberduck/core/resources/IconCache.java rename to core/src/main/java/ch/cyberduck/core/resources/IconCache.java diff --git a/source/ch/cyberduck/core/resources/IconCacheFactory.java b/core/src/main/java/ch/cyberduck/core/resources/IconCacheFactory.java similarity index 100% rename from source/ch/cyberduck/core/resources/IconCacheFactory.java rename to core/src/main/java/ch/cyberduck/core/resources/IconCacheFactory.java diff --git a/source/ch/cyberduck/core/serializer/Deserializer.java b/core/src/main/java/ch/cyberduck/core/serializer/Deserializer.java similarity index 100% rename from source/ch/cyberduck/core/serializer/Deserializer.java rename to core/src/main/java/ch/cyberduck/core/serializer/Deserializer.java diff --git a/source/ch/cyberduck/core/serializer/HostDictionary.java b/core/src/main/java/ch/cyberduck/core/serializer/HostDictionary.java similarity index 91% rename from source/ch/cyberduck/core/serializer/HostDictionary.java rename to core/src/main/java/ch/cyberduck/core/serializer/HostDictionary.java index abfaadb515..ee05b96f2d 100644 --- a/source/ch/cyberduck/core/serializer/HostDictionary.java +++ b/core/src/main/java/ch/cyberduck/core/serializer/HostDictionary.java @@ -50,24 +50,22 @@ public class HostDictionary { public Host deserialize(final T serialized) { final Deserializer dict = deserializer.create(serialized); - Object hostnameObj = dict.stringForKey("Hostname"); - if(hostnameObj != null) { - final Host bookmark = new Host(hostnameObj.toString()); + Object protocolObj = dict.stringForKey("Protocol"); + if(protocolObj == null) { + log.warn(String.format("Missing protocol key in %s", serialized)); + return null; + } + final Protocol p = ProtocolFactory.forName(protocolObj.toString()); + if(null != p) { + final Host bookmark = new Host(p); + Object hostnameObj = dict.stringForKey("Hostname"); + if(hostnameObj != null) { + bookmark.setHostname(hostnameObj.toString()); + } Object uuidObj = dict.stringForKey("UUID"); if(uuidObj != null) { bookmark.setUuid(uuidObj.toString()); } - Object protocolObj = dict.stringForKey("Protocol"); - if(protocolObj != null) { - final Protocol p = ProtocolFactory.forName(protocolObj.toString()); - if(null != p) { - bookmark.setProtocol(p); - } - else { - log.warn(String.format("Protocol %s no more available", protocolObj)); - return null; - } - } Object providerObj = dict.stringForKey("Provider"); if(providerObj != null) { final Protocol provider = ProtocolFactory.forName(providerObj.toString()); @@ -172,6 +170,9 @@ public class HostDictionary { } return bookmark; } - return null; + else { + log.warn(String.format("No protocol registered for identifier %s", protocolObj)); + return null; + } } } diff --git a/source/ch/cyberduck/core/serializer/LocalDictionary.java b/core/src/main/java/ch/cyberduck/core/serializer/LocalDictionary.java similarity index 100% rename from source/ch/cyberduck/core/serializer/LocalDictionary.java rename to core/src/main/java/ch/cyberduck/core/serializer/LocalDictionary.java diff --git a/source/ch/cyberduck/core/serializer/PathAttributesDictionary.java b/core/src/main/java/ch/cyberduck/core/serializer/PathAttributesDictionary.java similarity index 100% rename from source/ch/cyberduck/core/serializer/PathAttributesDictionary.java rename to core/src/main/java/ch/cyberduck/core/serializer/PathAttributesDictionary.java diff --git a/source/ch/cyberduck/core/serializer/PathDictionary.java b/core/src/main/java/ch/cyberduck/core/serializer/PathDictionary.java similarity index 100% rename from source/ch/cyberduck/core/serializer/PathDictionary.java rename to core/src/main/java/ch/cyberduck/core/serializer/PathDictionary.java diff --git a/source/ch/cyberduck/core/serializer/PermissionDictionary.java b/core/src/main/java/ch/cyberduck/core/serializer/PermissionDictionary.java similarity index 100% rename from source/ch/cyberduck/core/serializer/PermissionDictionary.java rename to core/src/main/java/ch/cyberduck/core/serializer/PermissionDictionary.java diff --git a/source/ch/cyberduck/core/serializer/ProfileDictionary.java b/core/src/main/java/ch/cyberduck/core/serializer/ProfileDictionary.java similarity index 96% rename from source/ch/cyberduck/core/serializer/ProfileDictionary.java rename to core/src/main/java/ch/cyberduck/core/serializer/ProfileDictionary.java index 38ba99071a..a6812a294b 100644 --- a/source/ch/cyberduck/core/serializer/ProfileDictionary.java +++ b/core/src/main/java/ch/cyberduck/core/serializer/ProfileDictionary.java @@ -43,7 +43,7 @@ public class ProfileDictionary { } public Profile deserialize(Object serialized) { - final Deserializer dict = deserializer.create(serialized); + final Deserializer dict = deserializer.create(serialized); final String protocol = dict.stringForKey("Protocol"); if(StringUtils.isNotBlank(protocol)) { final Protocol parent = ProtocolFactory.forName(protocol); diff --git a/source/ch/cyberduck/core/serializer/Reader.java b/core/src/main/java/ch/cyberduck/core/serializer/Reader.java similarity index 100% rename from source/ch/cyberduck/core/serializer/Reader.java rename to core/src/main/java/ch/cyberduck/core/serializer/Reader.java diff --git a/source/ch/cyberduck/core/serializer/Serializer.java b/core/src/main/java/ch/cyberduck/core/serializer/Serializer.java similarity index 100% rename from source/ch/cyberduck/core/serializer/Serializer.java rename to core/src/main/java/ch/cyberduck/core/serializer/Serializer.java diff --git a/source/ch/cyberduck/core/serializer/SerializerFormatException.java b/core/src/main/java/ch/cyberduck/core/serializer/SerializerFormatException.java similarity index 100% rename from source/ch/cyberduck/core/serializer/SerializerFormatException.java rename to core/src/main/java/ch/cyberduck/core/serializer/SerializerFormatException.java diff --git a/source/ch/cyberduck/core/serializer/TransferDictionary.java b/core/src/main/java/ch/cyberduck/core/serializer/TransferDictionary.java similarity index 98% rename from source/ch/cyberduck/core/serializer/TransferDictionary.java rename to core/src/main/java/ch/cyberduck/core/serializer/TransferDictionary.java index 01513b5da8..b237745f97 100644 --- a/source/ch/cyberduck/core/serializer/TransferDictionary.java +++ b/core/src/main/java/ch/cyberduck/core/serializer/TransferDictionary.java @@ -23,6 +23,7 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; import ch.cyberduck.core.LocalFactory; import ch.cyberduck.core.Path; +import ch.cyberduck.core.SessionFactory; import ch.cyberduck.core.transfer.CopyTransfer; import ch.cyberduck.core.transfer.DownloadTransfer; import ch.cyberduck.core.transfer.SyncTransfer; @@ -186,7 +187,7 @@ public class TransferDictionary { log.warn("Missing target host in copy transfer"); return null; } - transfer = new CopyTransfer(host, target, files); + transfer = new CopyTransfer(host, SessionFactory.create(target), files); } else { log.warn("Invalid file mapping for copy transfer"); diff --git a/source/ch/cyberduck/core/serializer/TransferItemDictionary.java b/core/src/main/java/ch/cyberduck/core/serializer/TransferItemDictionary.java similarity index 100% rename from source/ch/cyberduck/core/serializer/TransferItemDictionary.java rename to core/src/main/java/ch/cyberduck/core/serializer/TransferItemDictionary.java diff --git a/source/ch/cyberduck/core/serializer/Writer.java b/core/src/main/java/ch/cyberduck/core/serializer/Writer.java similarity index 100% rename from source/ch/cyberduck/core/serializer/Writer.java rename to core/src/main/java/ch/cyberduck/core/serializer/Writer.java diff --git a/source/ch/cyberduck/core/serializer/impl/dd/HostPlistReader.java b/core/src/main/java/ch/cyberduck/core/serializer/impl/dd/HostPlistReader.java similarity index 100% rename from source/ch/cyberduck/core/serializer/impl/dd/HostPlistReader.java rename to core/src/main/java/ch/cyberduck/core/serializer/impl/dd/HostPlistReader.java diff --git a/source/ch/cyberduck/core/serializer/impl/dd/PlistDeserializer.java b/core/src/main/java/ch/cyberduck/core/serializer/impl/dd/PlistDeserializer.java similarity index 100% rename from source/ch/cyberduck/core/serializer/impl/dd/PlistDeserializer.java rename to core/src/main/java/ch/cyberduck/core/serializer/impl/dd/PlistDeserializer.java diff --git a/source/ch/cyberduck/core/serializer/impl/dd/PlistReader.java b/core/src/main/java/ch/cyberduck/core/serializer/impl/dd/PlistReader.java similarity index 100% rename from source/ch/cyberduck/core/serializer/impl/dd/PlistReader.java rename to core/src/main/java/ch/cyberduck/core/serializer/impl/dd/PlistReader.java diff --git a/source/ch/cyberduck/core/serializer/impl/dd/PlistSerializer.java b/core/src/main/java/ch/cyberduck/core/serializer/impl/dd/PlistSerializer.java similarity index 100% rename from source/ch/cyberduck/core/serializer/impl/dd/PlistSerializer.java rename to core/src/main/java/ch/cyberduck/core/serializer/impl/dd/PlistSerializer.java diff --git a/source/ch/cyberduck/core/serializer/impl/dd/PlistWriter.java b/core/src/main/java/ch/cyberduck/core/serializer/impl/dd/PlistWriter.java similarity index 100% rename from source/ch/cyberduck/core/serializer/impl/dd/PlistWriter.java rename to core/src/main/java/ch/cyberduck/core/serializer/impl/dd/PlistWriter.java diff --git a/source/ch/cyberduck/core/serializer/impl/dd/ProfilePlistReader.java b/core/src/main/java/ch/cyberduck/core/serializer/impl/dd/ProfilePlistReader.java similarity index 100% rename from source/ch/cyberduck/core/serializer/impl/dd/ProfilePlistReader.java rename to core/src/main/java/ch/cyberduck/core/serializer/impl/dd/ProfilePlistReader.java diff --git a/source/ch/cyberduck/core/serializer/impl/dd/TransferPlistReader.java b/core/src/main/java/ch/cyberduck/core/serializer/impl/dd/TransferPlistReader.java similarity index 100% rename from source/ch/cyberduck/core/serializer/impl/dd/TransferPlistReader.java rename to core/src/main/java/ch/cyberduck/core/serializer/impl/dd/TransferPlistReader.java diff --git a/source/ch/cyberduck/core/sftp/openssh/OpenSSHCredentialsConfigurator.java b/core/src/main/java/ch/cyberduck/core/sftp/openssh/OpenSSHCredentialsConfigurator.java similarity index 100% rename from source/ch/cyberduck/core/sftp/openssh/OpenSSHCredentialsConfigurator.java rename to core/src/main/java/ch/cyberduck/core/sftp/openssh/OpenSSHCredentialsConfigurator.java diff --git a/source/ch/cyberduck/core/sftp/openssh/OpenSSHHostnameConfigurator.java b/core/src/main/java/ch/cyberduck/core/sftp/openssh/OpenSSHHostnameConfigurator.java similarity index 100% rename from source/ch/cyberduck/core/sftp/openssh/OpenSSHHostnameConfigurator.java rename to core/src/main/java/ch/cyberduck/core/sftp/openssh/OpenSSHHostnameConfigurator.java diff --git a/source/ch/cyberduck/core/sftp/openssh/config/errors/InvalidPatternException.java b/core/src/main/java/ch/cyberduck/core/sftp/openssh/config/errors/InvalidPatternException.java similarity index 100% rename from source/ch/cyberduck/core/sftp/openssh/config/errors/InvalidPatternException.java rename to core/src/main/java/ch/cyberduck/core/sftp/openssh/config/errors/InvalidPatternException.java diff --git a/source/ch/cyberduck/core/sftp/openssh/config/errors/NoClosingBracketException.java b/core/src/main/java/ch/cyberduck/core/sftp/openssh/config/errors/NoClosingBracketException.java similarity index 100% rename from source/ch/cyberduck/core/sftp/openssh/config/errors/NoClosingBracketException.java rename to core/src/main/java/ch/cyberduck/core/sftp/openssh/config/errors/NoClosingBracketException.java diff --git a/source/ch/cyberduck/core/sftp/openssh/config/fnmatch/AbstractHead.java b/core/src/main/java/ch/cyberduck/core/sftp/openssh/config/fnmatch/AbstractHead.java similarity index 100% rename from source/ch/cyberduck/core/sftp/openssh/config/fnmatch/AbstractHead.java rename to core/src/main/java/ch/cyberduck/core/sftp/openssh/config/fnmatch/AbstractHead.java diff --git a/source/ch/cyberduck/core/sftp/openssh/config/fnmatch/CharacterHead.java b/core/src/main/java/ch/cyberduck/core/sftp/openssh/config/fnmatch/CharacterHead.java similarity index 100% rename from source/ch/cyberduck/core/sftp/openssh/config/fnmatch/CharacterHead.java rename to core/src/main/java/ch/cyberduck/core/sftp/openssh/config/fnmatch/CharacterHead.java diff --git a/source/ch/cyberduck/core/sftp/openssh/config/fnmatch/FileNameMatcher.java b/core/src/main/java/ch/cyberduck/core/sftp/openssh/config/fnmatch/FileNameMatcher.java similarity index 100% rename from source/ch/cyberduck/core/sftp/openssh/config/fnmatch/FileNameMatcher.java rename to core/src/main/java/ch/cyberduck/core/sftp/openssh/config/fnmatch/FileNameMatcher.java diff --git a/source/ch/cyberduck/core/sftp/openssh/config/fnmatch/GroupHead.java b/core/src/main/java/ch/cyberduck/core/sftp/openssh/config/fnmatch/GroupHead.java similarity index 100% rename from source/ch/cyberduck/core/sftp/openssh/config/fnmatch/GroupHead.java rename to core/src/main/java/ch/cyberduck/core/sftp/openssh/config/fnmatch/GroupHead.java diff --git a/source/ch/cyberduck/core/sftp/openssh/config/fnmatch/Head.java b/core/src/main/java/ch/cyberduck/core/sftp/openssh/config/fnmatch/Head.java similarity index 100% rename from source/ch/cyberduck/core/sftp/openssh/config/fnmatch/Head.java rename to core/src/main/java/ch/cyberduck/core/sftp/openssh/config/fnmatch/Head.java diff --git a/source/ch/cyberduck/core/sftp/openssh/config/fnmatch/LastHead.java b/core/src/main/java/ch/cyberduck/core/sftp/openssh/config/fnmatch/LastHead.java similarity index 100% rename from source/ch/cyberduck/core/sftp/openssh/config/fnmatch/LastHead.java rename to core/src/main/java/ch/cyberduck/core/sftp/openssh/config/fnmatch/LastHead.java diff --git a/source/ch/cyberduck/core/sftp/openssh/config/fnmatch/RestrictedWildCardHead.java b/core/src/main/java/ch/cyberduck/core/sftp/openssh/config/fnmatch/RestrictedWildCardHead.java similarity index 100% rename from source/ch/cyberduck/core/sftp/openssh/config/fnmatch/RestrictedWildCardHead.java rename to core/src/main/java/ch/cyberduck/core/sftp/openssh/config/fnmatch/RestrictedWildCardHead.java diff --git a/source/ch/cyberduck/core/sftp/openssh/config/fnmatch/WildCardHead.java b/core/src/main/java/ch/cyberduck/core/sftp/openssh/config/fnmatch/WildCardHead.java similarity index 100% rename from source/ch/cyberduck/core/sftp/openssh/config/fnmatch/WildCardHead.java rename to core/src/main/java/ch/cyberduck/core/sftp/openssh/config/fnmatch/WildCardHead.java diff --git a/source/ch/cyberduck/core/sftp/openssh/config/transport/OpenSshConfig.java b/core/src/main/java/ch/cyberduck/core/sftp/openssh/config/transport/OpenSshConfig.java similarity index 100% rename from source/ch/cyberduck/core/sftp/openssh/config/transport/OpenSshConfig.java rename to core/src/main/java/ch/cyberduck/core/sftp/openssh/config/transport/OpenSshConfig.java diff --git a/source/ch/cyberduck/core/shared/AppendWriteFeature.java b/core/src/main/java/ch/cyberduck/core/shared/AppendWriteFeature.java similarity index 100% rename from source/ch/cyberduck/core/shared/AppendWriteFeature.java rename to core/src/main/java/ch/cyberduck/core/shared/AppendWriteFeature.java diff --git a/source/ch/cyberduck/core/shared/DefaultAttributesFeature.java b/core/src/main/java/ch/cyberduck/core/shared/DefaultAttributesFeature.java similarity index 91% rename from source/ch/cyberduck/core/shared/DefaultAttributesFeature.java rename to core/src/main/java/ch/cyberduck/core/shared/DefaultAttributesFeature.java index fb0ec91fd9..48ff43a9bd 100644 --- a/source/ch/cyberduck/core/shared/DefaultAttributesFeature.java +++ b/core/src/main/java/ch/cyberduck/core/shared/DefaultAttributesFeature.java @@ -30,10 +30,13 @@ import ch.cyberduck.core.exception.InteroperabilityException; import ch.cyberduck.core.exception.NotfoundException; import ch.cyberduck.core.features.Attributes; +import org.apache.log4j.Logger; + /** * @version $Id$ */ public class DefaultAttributesFeature implements Attributes { + private static final Logger log = Logger.getLogger(DefaultAttributesFeature.class); private Session session; @@ -53,6 +56,7 @@ public class DefaultAttributesFeature implements Attributes { cache.put(file.getParent(), list); } catch(InteroperabilityException | AccessDeniedException | NotfoundException f) { + log.warn(String.format("Failure listing directory %s. %s", file.getParent(), f.getMessage())); // Try native implementation final Attributes feature = session.getFeature(Attributes.class); if(feature instanceof DefaultAttributesFeature) { diff --git a/source/ch/cyberduck/core/shared/DefaultDownloadFeature.java b/core/src/main/java/ch/cyberduck/core/shared/DefaultDownloadFeature.java similarity index 100% rename from source/ch/cyberduck/core/shared/DefaultDownloadFeature.java rename to core/src/main/java/ch/cyberduck/core/shared/DefaultDownloadFeature.java diff --git a/source/ch/cyberduck/core/shared/DefaultFindFeature.java b/core/src/main/java/ch/cyberduck/core/shared/DefaultFindFeature.java similarity index 100% rename from source/ch/cyberduck/core/shared/DefaultFindFeature.java rename to core/src/main/java/ch/cyberduck/core/shared/DefaultFindFeature.java diff --git a/source/ch/cyberduck/core/shared/DefaultHomeFinderService.java b/core/src/main/java/ch/cyberduck/core/shared/DefaultHomeFinderService.java similarity index 100% rename from source/ch/cyberduck/core/shared/DefaultHomeFinderService.java rename to core/src/main/java/ch/cyberduck/core/shared/DefaultHomeFinderService.java diff --git a/source/ch/cyberduck/core/shared/DefaultTouchFeature.java b/core/src/main/java/ch/cyberduck/core/shared/DefaultTouchFeature.java similarity index 100% rename from source/ch/cyberduck/core/shared/DefaultTouchFeature.java rename to core/src/main/java/ch/cyberduck/core/shared/DefaultTouchFeature.java diff --git a/source/ch/cyberduck/core/shared/DefaultUploadFeature.java b/core/src/main/java/ch/cyberduck/core/shared/DefaultUploadFeature.java similarity index 100% rename from source/ch/cyberduck/core/shared/DefaultUploadFeature.java rename to core/src/main/java/ch/cyberduck/core/shared/DefaultUploadFeature.java diff --git a/source/ch/cyberduck/core/shared/DefaultUrlProvider.java b/core/src/main/java/ch/cyberduck/core/shared/DefaultUrlProvider.java similarity index 100% rename from source/ch/cyberduck/core/shared/DefaultUrlProvider.java rename to core/src/main/java/ch/cyberduck/core/shared/DefaultUrlProvider.java diff --git a/source/ch/cyberduck/core/shared/DisabledMoveFeature.java b/core/src/main/java/ch/cyberduck/core/shared/DisabledMoveFeature.java similarity index 100% rename from source/ch/cyberduck/core/shared/DisabledMoveFeature.java rename to core/src/main/java/ch/cyberduck/core/shared/DisabledMoveFeature.java diff --git a/source/ch/cyberduck/core/socket/DefaultSocketConfigurator.java b/core/src/main/java/ch/cyberduck/core/socket/DefaultSocketConfigurator.java similarity index 100% rename from source/ch/cyberduck/core/socket/DefaultSocketConfigurator.java rename to core/src/main/java/ch/cyberduck/core/socket/DefaultSocketConfigurator.java diff --git a/source/ch/cyberduck/core/socket/HttpProxyAwareSocket.java b/core/src/main/java/ch/cyberduck/core/socket/HttpProxyAwareSocket.java similarity index 100% rename from source/ch/cyberduck/core/socket/HttpProxyAwareSocket.java rename to core/src/main/java/ch/cyberduck/core/socket/HttpProxyAwareSocket.java diff --git a/source/ch/cyberduck/core/socket/HttpProxySocketFactory.java b/core/src/main/java/ch/cyberduck/core/socket/HttpProxySocketFactory.java similarity index 100% rename from source/ch/cyberduck/core/socket/HttpProxySocketFactory.java rename to core/src/main/java/ch/cyberduck/core/socket/HttpProxySocketFactory.java diff --git a/source/ch/cyberduck/core/socket/NetworkInterfaceAwareSocketFactory.java b/core/src/main/java/ch/cyberduck/core/socket/NetworkInterfaceAwareSocketFactory.java similarity index 100% rename from source/ch/cyberduck/core/socket/NetworkInterfaceAwareSocketFactory.java rename to core/src/main/java/ch/cyberduck/core/socket/NetworkInterfaceAwareSocketFactory.java diff --git a/source/ch/cyberduck/core/socket/SocketConfigurator.java b/core/src/main/java/ch/cyberduck/core/socket/SocketConfigurator.java similarity index 100% rename from source/ch/cyberduck/core/socket/SocketConfigurator.java rename to core/src/main/java/ch/cyberduck/core/socket/SocketConfigurator.java diff --git a/source/ch/cyberduck/core/sparkle/Sandbox.java b/core/src/main/java/ch/cyberduck/core/sparkle/Sandbox.java similarity index 97% rename from source/ch/cyberduck/core/sparkle/Sandbox.java rename to core/src/main/java/ch/cyberduck/core/sparkle/Sandbox.java index b38da0528c..00cd929954 100644 --- a/source/ch/cyberduck/core/sparkle/Sandbox.java +++ b/core/src/main/java/ch/cyberduck/core/sparkle/Sandbox.java @@ -29,7 +29,7 @@ public final class Sandbox { private static final Logger log = Logger.getLogger(Sandbox.class); static { - Native.load("keychain"); + Native.load("core"); } public static Sandbox get() { diff --git a/source/ch/cyberduck/core/sparkle/Updater.java b/core/src/main/java/ch/cyberduck/core/sparkle/Updater.java similarity index 100% rename from source/ch/cyberduck/core/sparkle/Updater.java rename to core/src/main/java/ch/cyberduck/core/sparkle/Updater.java diff --git a/source/ch/cyberduck/core/ssl/AbstractX509KeyManager.java b/core/src/main/java/ch/cyberduck/core/ssl/AbstractX509KeyManager.java similarity index 100% rename from source/ch/cyberduck/core/ssl/AbstractX509KeyManager.java rename to core/src/main/java/ch/cyberduck/core/ssl/AbstractX509KeyManager.java diff --git a/source/ch/cyberduck/core/ssl/AbstractX509TrustManager.java b/core/src/main/java/ch/cyberduck/core/ssl/AbstractX509TrustManager.java similarity index 100% rename from source/ch/cyberduck/core/ssl/AbstractX509TrustManager.java rename to core/src/main/java/ch/cyberduck/core/ssl/AbstractX509TrustManager.java diff --git a/source/ch/cyberduck/core/ssl/CertificateEncoder.java b/core/src/main/java/ch/cyberduck/core/ssl/CertificateEncoder.java similarity index 100% rename from source/ch/cyberduck/core/ssl/CertificateEncoder.java rename to core/src/main/java/ch/cyberduck/core/ssl/CertificateEncoder.java diff --git a/source/ch/cyberduck/core/ssl/CertificateStoreX509KeyManager.java b/core/src/main/java/ch/cyberduck/core/ssl/CertificateStoreX509KeyManager.java similarity index 100% rename from source/ch/cyberduck/core/ssl/CertificateStoreX509KeyManager.java rename to core/src/main/java/ch/cyberduck/core/ssl/CertificateStoreX509KeyManager.java diff --git a/source/ch/cyberduck/core/ssl/CertificateStoreX509TrustManager.java b/core/src/main/java/ch/cyberduck/core/ssl/CertificateStoreX509TrustManager.java similarity index 100% rename from source/ch/cyberduck/core/ssl/CertificateStoreX509TrustManager.java rename to core/src/main/java/ch/cyberduck/core/ssl/CertificateStoreX509TrustManager.java diff --git a/source/ch/cyberduck/core/ssl/CustomTrustSSLProtocolSocketFactory.java b/core/src/main/java/ch/cyberduck/core/ssl/CustomTrustSSLProtocolSocketFactory.java similarity index 100% rename from source/ch/cyberduck/core/ssl/CustomTrustSSLProtocolSocketFactory.java rename to core/src/main/java/ch/cyberduck/core/ssl/CustomTrustSSLProtocolSocketFactory.java diff --git a/source/ch/cyberduck/core/ssl/DEREncoder.java b/core/src/main/java/ch/cyberduck/core/ssl/DEREncoder.java similarity index 100% rename from source/ch/cyberduck/core/ssl/DEREncoder.java rename to core/src/main/java/ch/cyberduck/core/ssl/DEREncoder.java diff --git a/source/ch/cyberduck/core/ssl/DefaultTrustManagerHostnameCallback.java b/core/src/main/java/ch/cyberduck/core/ssl/DefaultTrustManagerHostnameCallback.java similarity index 100% rename from source/ch/cyberduck/core/ssl/DefaultTrustManagerHostnameCallback.java rename to core/src/main/java/ch/cyberduck/core/ssl/DefaultTrustManagerHostnameCallback.java diff --git a/source/ch/cyberduck/core/ssl/DefaultX509KeyManager.java b/core/src/main/java/ch/cyberduck/core/ssl/DefaultX509KeyManager.java similarity index 100% rename from source/ch/cyberduck/core/ssl/DefaultX509KeyManager.java rename to core/src/main/java/ch/cyberduck/core/ssl/DefaultX509KeyManager.java diff --git a/source/ch/cyberduck/core/ssl/DefaultX509TrustManager.java b/core/src/main/java/ch/cyberduck/core/ssl/DefaultX509TrustManager.java similarity index 100% rename from source/ch/cyberduck/core/ssl/DefaultX509TrustManager.java rename to core/src/main/java/ch/cyberduck/core/ssl/DefaultX509TrustManager.java diff --git a/source/ch/cyberduck/core/ssl/DisabledX509TrustManager.java b/core/src/main/java/ch/cyberduck/core/ssl/DisabledX509TrustManager.java similarity index 100% rename from source/ch/cyberduck/core/ssl/DisabledX509TrustManager.java rename to core/src/main/java/ch/cyberduck/core/ssl/DisabledX509TrustManager.java diff --git a/source/ch/cyberduck/core/ssl/KeychainX509KeyManager.java b/core/src/main/java/ch/cyberduck/core/ssl/KeychainX509KeyManager.java similarity index 100% rename from source/ch/cyberduck/core/ssl/KeychainX509KeyManager.java rename to core/src/main/java/ch/cyberduck/core/ssl/KeychainX509KeyManager.java diff --git a/source/ch/cyberduck/core/ssl/KeychainX509TrustManager.java b/core/src/main/java/ch/cyberduck/core/ssl/KeychainX509TrustManager.java similarity index 100% rename from source/ch/cyberduck/core/ssl/KeychainX509TrustManager.java rename to core/src/main/java/ch/cyberduck/core/ssl/KeychainX509TrustManager.java diff --git a/source/ch/cyberduck/core/ssl/PreferencesX509KeyManager.java b/core/src/main/java/ch/cyberduck/core/ssl/PreferencesX509KeyManager.java similarity index 100% rename from source/ch/cyberduck/core/ssl/PreferencesX509KeyManager.java rename to core/src/main/java/ch/cyberduck/core/ssl/PreferencesX509KeyManager.java diff --git a/source/ch/cyberduck/core/ssl/SSLExceptionMappingService.java b/core/src/main/java/ch/cyberduck/core/ssl/SSLExceptionMappingService.java similarity index 100% rename from source/ch/cyberduck/core/ssl/SSLExceptionMappingService.java rename to core/src/main/java/ch/cyberduck/core/ssl/SSLExceptionMappingService.java diff --git a/source/ch/cyberduck/core/ssl/SSLSession.java b/core/src/main/java/ch/cyberduck/core/ssl/SSLSession.java similarity index 100% rename from source/ch/cyberduck/core/ssl/SSLSession.java rename to core/src/main/java/ch/cyberduck/core/ssl/SSLSession.java diff --git a/source/ch/cyberduck/core/ssl/ThreadLocalHostnameDelegatingTrustManager.java b/core/src/main/java/ch/cyberduck/core/ssl/ThreadLocalHostnameDelegatingTrustManager.java similarity index 100% rename from source/ch/cyberduck/core/ssl/ThreadLocalHostnameDelegatingTrustManager.java rename to core/src/main/java/ch/cyberduck/core/ssl/ThreadLocalHostnameDelegatingTrustManager.java diff --git a/source/ch/cyberduck/core/ssl/TrustManagerHostnameCallback.java b/core/src/main/java/ch/cyberduck/core/ssl/TrustManagerHostnameCallback.java similarity index 100% rename from source/ch/cyberduck/core/ssl/TrustManagerHostnameCallback.java rename to core/src/main/java/ch/cyberduck/core/ssl/TrustManagerHostnameCallback.java diff --git a/source/ch/cyberduck/core/ssl/X509KeyManager.java b/core/src/main/java/ch/cyberduck/core/ssl/X509KeyManager.java similarity index 100% rename from source/ch/cyberduck/core/ssl/X509KeyManager.java rename to core/src/main/java/ch/cyberduck/core/ssl/X509KeyManager.java diff --git a/source/ch/cyberduck/core/ssl/X509TrustManager.java b/core/src/main/java/ch/cyberduck/core/ssl/X509TrustManager.java similarity index 100% rename from source/ch/cyberduck/core/ssl/X509TrustManager.java rename to core/src/main/java/ch/cyberduck/core/ssl/X509TrustManager.java diff --git a/source/ch/cyberduck/core/synchronization/CachingComparisonServiceFilter.java b/core/src/main/java/ch/cyberduck/core/synchronization/CachingComparisonServiceFilter.java similarity index 100% rename from source/ch/cyberduck/core/synchronization/CachingComparisonServiceFilter.java rename to core/src/main/java/ch/cyberduck/core/synchronization/CachingComparisonServiceFilter.java diff --git a/source/ch/cyberduck/core/synchronization/ChecksumComparisonService.java b/core/src/main/java/ch/cyberduck/core/synchronization/ChecksumComparisonService.java similarity index 100% rename from source/ch/cyberduck/core/synchronization/ChecksumComparisonService.java rename to core/src/main/java/ch/cyberduck/core/synchronization/ChecksumComparisonService.java diff --git a/source/ch/cyberduck/core/synchronization/ComparePathFilter.java b/core/src/main/java/ch/cyberduck/core/synchronization/ComparePathFilter.java similarity index 100% rename from source/ch/cyberduck/core/synchronization/ComparePathFilter.java rename to core/src/main/java/ch/cyberduck/core/synchronization/ComparePathFilter.java diff --git a/source/ch/cyberduck/core/synchronization/Comparison.java b/core/src/main/java/ch/cyberduck/core/synchronization/Comparison.java similarity index 100% rename from source/ch/cyberduck/core/synchronization/Comparison.java rename to core/src/main/java/ch/cyberduck/core/synchronization/Comparison.java diff --git a/source/ch/cyberduck/core/synchronization/ComparisonService.java b/core/src/main/java/ch/cyberduck/core/synchronization/ComparisonService.java similarity index 100% rename from source/ch/cyberduck/core/synchronization/ComparisonService.java rename to core/src/main/java/ch/cyberduck/core/synchronization/ComparisonService.java diff --git a/source/ch/cyberduck/core/synchronization/ComparisonServiceFilter.java b/core/src/main/java/ch/cyberduck/core/synchronization/ComparisonServiceFilter.java similarity index 100% rename from source/ch/cyberduck/core/synchronization/ComparisonServiceFilter.java rename to core/src/main/java/ch/cyberduck/core/synchronization/ComparisonServiceFilter.java diff --git a/source/ch/cyberduck/core/synchronization/SizeComparisonService.java b/core/src/main/java/ch/cyberduck/core/synchronization/SizeComparisonService.java similarity index 100% rename from source/ch/cyberduck/core/synchronization/SizeComparisonService.java rename to core/src/main/java/ch/cyberduck/core/synchronization/SizeComparisonService.java diff --git a/source/ch/cyberduck/core/synchronization/TimestampComparisonService.java b/core/src/main/java/ch/cyberduck/core/synchronization/TimestampComparisonService.java similarity index 100% rename from source/ch/cyberduck/core/synchronization/TimestampComparisonService.java rename to core/src/main/java/ch/cyberduck/core/synchronization/TimestampComparisonService.java diff --git a/source/ch/cyberduck/core/text/NaturalOrderCollator.java b/core/src/main/java/ch/cyberduck/core/text/NaturalOrderCollator.java similarity index 100% rename from source/ch/cyberduck/core/text/NaturalOrderCollator.java rename to core/src/main/java/ch/cyberduck/core/text/NaturalOrderCollator.java diff --git a/source/ch/cyberduck/core/text/NaturalOrderComparator.java b/core/src/main/java/ch/cyberduck/core/text/NaturalOrderComparator.java similarity index 100% rename from source/ch/cyberduck/core/text/NaturalOrderComparator.java rename to core/src/main/java/ch/cyberduck/core/text/NaturalOrderComparator.java diff --git a/source/ch/cyberduck/core/threading/AbstractBackgroundAction.java b/core/src/main/java/ch/cyberduck/core/threading/AbstractBackgroundAction.java similarity index 100% rename from source/ch/cyberduck/core/threading/AbstractBackgroundAction.java rename to core/src/main/java/ch/cyberduck/core/threading/AbstractBackgroundAction.java diff --git a/source/ch/cyberduck/core/threading/ActionOperationBatcher.java b/core/src/main/java/ch/cyberduck/core/threading/ActionOperationBatcher.java similarity index 100% rename from source/ch/cyberduck/core/threading/ActionOperationBatcher.java rename to core/src/main/java/ch/cyberduck/core/threading/ActionOperationBatcher.java diff --git a/source/ch/cyberduck/core/threading/ActionOperationBatcherFactory.java b/core/src/main/java/ch/cyberduck/core/threading/ActionOperationBatcherFactory.java similarity index 100% rename from source/ch/cyberduck/core/threading/ActionOperationBatcherFactory.java rename to core/src/main/java/ch/cyberduck/core/threading/ActionOperationBatcherFactory.java diff --git a/source/ch/cyberduck/core/threading/AlertCallback.java b/core/src/main/java/ch/cyberduck/core/threading/AlertCallback.java similarity index 100% rename from source/ch/cyberduck/core/threading/AlertCallback.java rename to core/src/main/java/ch/cyberduck/core/threading/AlertCallback.java diff --git a/source/ch/cyberduck/core/threading/AutoreleaseActionOperationBatcher.java b/core/src/main/java/ch/cyberduck/core/threading/AutoreleaseActionOperationBatcher.java similarity index 100% rename from source/ch/cyberduck/core/threading/AutoreleaseActionOperationBatcher.java rename to core/src/main/java/ch/cyberduck/core/threading/AutoreleaseActionOperationBatcher.java diff --git a/source/ch/cyberduck/core/threading/BackgroundAction.java b/core/src/main/java/ch/cyberduck/core/threading/BackgroundAction.java similarity index 100% rename from source/ch/cyberduck/core/threading/BackgroundAction.java rename to core/src/main/java/ch/cyberduck/core/threading/BackgroundAction.java diff --git a/source/ch/cyberduck/core/threading/BackgroundActionListener.java b/core/src/main/java/ch/cyberduck/core/threading/BackgroundActionListener.java similarity index 100% rename from source/ch/cyberduck/core/threading/BackgroundActionListener.java rename to core/src/main/java/ch/cyberduck/core/threading/BackgroundActionListener.java diff --git a/source/ch/cyberduck/core/threading/BackgroundActionPauser.java b/core/src/main/java/ch/cyberduck/core/threading/BackgroundActionPauser.java similarity index 100% rename from source/ch/cyberduck/core/threading/BackgroundActionPauser.java rename to core/src/main/java/ch/cyberduck/core/threading/BackgroundActionPauser.java diff --git a/source/ch/cyberduck/core/threading/BackgroundActionRegistry.java b/core/src/main/java/ch/cyberduck/core/threading/BackgroundActionRegistry.java similarity index 100% rename from source/ch/cyberduck/core/threading/BackgroundActionRegistry.java rename to core/src/main/java/ch/cyberduck/core/threading/BackgroundActionRegistry.java diff --git a/source/ch/cyberduck/core/threading/BrowserBackgroundAction.java b/core/src/main/java/ch/cyberduck/core/threading/BrowserBackgroundAction.java similarity index 94% rename from source/ch/cyberduck/core/threading/BrowserBackgroundAction.java rename to core/src/main/java/ch/cyberduck/core/threading/BrowserBackgroundAction.java index 857ae325c7..3e613caaff 100644 --- a/source/ch/cyberduck/core/threading/BrowserBackgroundAction.java +++ b/core/src/main/java/ch/cyberduck/core/threading/BrowserBackgroundAction.java @@ -28,11 +28,9 @@ import ch.cyberduck.core.HostKeyCallbackFactory; import ch.cyberduck.core.LoginService; import ch.cyberduck.core.Path; import ch.cyberduck.core.ProgressListener; -import ch.cyberduck.core.SerializerFactory; import ch.cyberduck.core.Session; import ch.cyberduck.core.TranscriptListener; import ch.cyberduck.core.exception.BackgroundException; -import ch.cyberduck.core.serializer.HostDictionary; /** * @version $Id$ @@ -107,13 +105,10 @@ public abstract class BrowserBackgroundAction extends ControllerBackgroundAct protected boolean connect(final Session session) throws BackgroundException { final boolean opened = super.connect(session); if(opened) { - // Only notify bookmarks when connection opened. - final Host bookmark = session.getHost(); - final HistoryCollection history = HistoryCollection.defaultCollection(); if(history.isLoaded()) { - history.add(new HostDictionary().deserialize(bookmark.serialize(SerializerFactory.get()))); + history.add(bookmark); } // Notify changed bookmark final BookmarkCollection bookmarks = BookmarkCollection.defaultCollection(); diff --git a/source/ch/cyberduck/core/threading/CancelCallback.java b/core/src/main/java/ch/cyberduck/core/threading/CancelCallback.java similarity index 100% rename from source/ch/cyberduck/core/threading/CancelCallback.java rename to core/src/main/java/ch/cyberduck/core/threading/CancelCallback.java diff --git a/source/ch/cyberduck/core/threading/ControllerBackgroundAction.java b/core/src/main/java/ch/cyberduck/core/threading/ControllerBackgroundAction.java similarity index 88% rename from source/ch/cyberduck/core/threading/ControllerBackgroundAction.java rename to core/src/main/java/ch/cyberduck/core/threading/ControllerBackgroundAction.java index 2a4b66bc26..36a4d68c45 100644 --- a/source/ch/cyberduck/core/threading/ControllerBackgroundAction.java +++ b/core/src/main/java/ch/cyberduck/core/threading/ControllerBackgroundAction.java @@ -35,7 +35,7 @@ import ch.cyberduck.core.exception.ConnectionCanceledException; */ public abstract class ControllerBackgroundAction extends SessionBackgroundAction { - private Controller controller; + private final BackgroundActionListener listener; public ControllerBackgroundAction(final Controller controller, final Session session, @@ -43,7 +43,7 @@ public abstract class ControllerBackgroundAction extends SessionBackgroundAct super(session, cache, controller, controller, controller, LoginCallbackFactory.get(controller), HostKeyCallbackFactory.get(controller, session.getHost().getProtocol())); - this.controller = controller; + this.listener = controller; } public ControllerBackgroundAction(final Controller controller, @@ -54,39 +54,39 @@ public abstract class ControllerBackgroundAction extends SessionBackgroundAct super(session, cache, controller, progress, transcript, LoginCallbackFactory.get(controller), HostKeyCallbackFactory.get(controller, session.getHost().getProtocol())); - this.controller = controller; + this.listener = controller; } public ControllerBackgroundAction(final ConnectionService connection, - final Controller controller, + final BackgroundActionListener controller, final Session session, final Cache cache, final ProgressListener progress, final TranscriptListener transcript) { super(connection, session, cache, controller, progress, transcript); - this.controller = controller; + this.listener = controller; } public ControllerBackgroundAction(final LoginService login, - final Controller controller, + final BackgroundActionListener controller, final Session session, final Cache cache, final ProgressListener progress, final TranscriptListener transcript, final HostKeyCallback key) { super(login, session, cache, controller, progress, transcript, key); - this.controller = controller; + this.listener = controller; } @Override public void prepare() throws ConnectionCanceledException { - this.addListener(controller); + this.addListener(listener); super.prepare(); } @Override public void finish() { super.finish(); - this.removeListener(controller); + this.removeListener(listener); } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/threading/ControllerMainAction.java b/core/src/main/java/ch/cyberduck/core/threading/ControllerMainAction.java similarity index 100% rename from source/ch/cyberduck/core/threading/ControllerMainAction.java rename to core/src/main/java/ch/cyberduck/core/threading/ControllerMainAction.java diff --git a/source/ch/cyberduck/core/threading/DefaultFailureDiagnostics.java b/core/src/main/java/ch/cyberduck/core/threading/DefaultFailureDiagnostics.java similarity index 100% rename from source/ch/cyberduck/core/threading/DefaultFailureDiagnostics.java rename to core/src/main/java/ch/cyberduck/core/threading/DefaultFailureDiagnostics.java diff --git a/source/ch/cyberduck/core/threading/DefaultMainAction.java b/core/src/main/java/ch/cyberduck/core/threading/DefaultMainAction.java similarity index 100% rename from source/ch/cyberduck/core/threading/DefaultMainAction.java rename to core/src/main/java/ch/cyberduck/core/threading/DefaultMainAction.java diff --git a/source/ch/cyberduck/core/threading/DisabledActionOperationBatcher.java b/core/src/main/java/ch/cyberduck/core/threading/DisabledActionOperationBatcher.java similarity index 100% rename from source/ch/cyberduck/core/threading/DisabledActionOperationBatcher.java rename to core/src/main/java/ch/cyberduck/core/threading/DisabledActionOperationBatcher.java diff --git a/source/ch/cyberduck/core/threading/DisabledAlertCallback.java b/core/src/main/java/ch/cyberduck/core/threading/DisabledAlertCallback.java similarity index 100% rename from source/ch/cyberduck/core/threading/DisabledAlertCallback.java rename to core/src/main/java/ch/cyberduck/core/threading/DisabledAlertCallback.java diff --git a/source/ch/cyberduck/core/threading/FailureDiagnostics.java b/core/src/main/java/ch/cyberduck/core/threading/FailureDiagnostics.java similarity index 100% rename from source/ch/cyberduck/core/threading/FailureDiagnostics.java rename to core/src/main/java/ch/cyberduck/core/threading/FailureDiagnostics.java diff --git a/source/ch/cyberduck/core/threading/LoggingUncaughtExceptionHandler.java b/core/src/main/java/ch/cyberduck/core/threading/LoggingUncaughtExceptionHandler.java similarity index 100% rename from source/ch/cyberduck/core/threading/LoggingUncaughtExceptionHandler.java rename to core/src/main/java/ch/cyberduck/core/threading/LoggingUncaughtExceptionHandler.java diff --git a/source/ch/cyberduck/core/threading/MainAction.java b/core/src/main/java/ch/cyberduck/core/threading/MainAction.java similarity index 100% rename from source/ch/cyberduck/core/threading/MainAction.java rename to core/src/main/java/ch/cyberduck/core/threading/MainAction.java diff --git a/source/ch/cyberduck/core/threading/NamedThreadFactory.java b/core/src/main/java/ch/cyberduck/core/threading/NamedThreadFactory.java similarity index 100% rename from source/ch/cyberduck/core/threading/NamedThreadFactory.java rename to core/src/main/java/ch/cyberduck/core/threading/NamedThreadFactory.java diff --git a/source/ch/cyberduck/core/threading/ScheduledThreadPool.java b/core/src/main/java/ch/cyberduck/core/threading/ScheduledThreadPool.java similarity index 100% rename from source/ch/cyberduck/core/threading/ScheduledThreadPool.java rename to core/src/main/java/ch/cyberduck/core/threading/ScheduledThreadPool.java diff --git a/source/ch/cyberduck/core/threading/SessionBackgroundAction.java b/core/src/main/java/ch/cyberduck/core/threading/SessionBackgroundAction.java similarity index 100% rename from source/ch/cyberduck/core/threading/SessionBackgroundAction.java rename to core/src/main/java/ch/cyberduck/core/threading/SessionBackgroundAction.java diff --git a/source/ch/cyberduck/core/threading/ThreadPool.java b/core/src/main/java/ch/cyberduck/core/threading/ThreadPool.java similarity index 100% rename from source/ch/cyberduck/core/threading/ThreadPool.java rename to core/src/main/java/ch/cyberduck/core/threading/ThreadPool.java diff --git a/source/ch/cyberduck/core/threading/TransferBackgroundAction.java b/core/src/main/java/ch/cyberduck/core/threading/TransferBackgroundAction.java similarity index 100% rename from source/ch/cyberduck/core/threading/TransferBackgroundAction.java rename to core/src/main/java/ch/cyberduck/core/threading/TransferBackgroundAction.java diff --git a/source/ch/cyberduck/core/threading/TransferCollectionBackgroundAction.java b/core/src/main/java/ch/cyberduck/core/threading/TransferCollectionBackgroundAction.java similarity index 100% rename from source/ch/cyberduck/core/threading/TransferCollectionBackgroundAction.java rename to core/src/main/java/ch/cyberduck/core/threading/TransferCollectionBackgroundAction.java diff --git a/source/ch/cyberduck/core/threading/WorkerBackgroundAction.java b/core/src/main/java/ch/cyberduck/core/threading/WorkerBackgroundAction.java similarity index 100% rename from source/ch/cyberduck/core/threading/WorkerBackgroundAction.java rename to core/src/main/java/ch/cyberduck/core/threading/WorkerBackgroundAction.java diff --git a/source/ch/cyberduck/core/transfer/CopyTransfer.java b/core/src/main/java/ch/cyberduck/core/transfer/CopyTransfer.java similarity index 86% rename from source/ch/cyberduck/core/transfer/CopyTransfer.java rename to core/src/main/java/ch/cyberduck/core/transfer/CopyTransfer.java index 88acc79534..7d6ac65629 100644 --- a/source/ch/cyberduck/core/transfer/CopyTransfer.java +++ b/core/src/main/java/ch/cyberduck/core/transfer/CopyTransfer.java @@ -32,14 +32,8 @@ import ch.cyberduck.core.io.ThrottledInputStream; import ch.cyberduck.core.io.ThrottledOutputStream; import ch.cyberduck.core.preferences.PreferencesFactory; import ch.cyberduck.core.serializer.Serializer; -import ch.cyberduck.core.ssl.DefaultTrustManagerHostnameCallback; -import ch.cyberduck.core.ssl.KeychainX509KeyManager; -import ch.cyberduck.core.ssl.KeychainX509TrustManager; -import ch.cyberduck.core.ssl.X509KeyManager; -import ch.cyberduck.core.ssl.X509TrustManager; import ch.cyberduck.core.transfer.copy.ChecksumFilter; import ch.cyberduck.core.transfer.copy.OverwriteFilter; -import ch.cyberduck.core.transfer.normalizer.CopyRootPathsNormalizer; import org.apache.commons.io.IOUtils; import org.apache.log4j.Logger; @@ -70,30 +64,13 @@ public class CopyTransfer extends Transfer { private Session destination; - /** - * @param files Source to destination mapping - */ - public CopyTransfer(final Host source, final Host target, final Map files) { - this(source, target, files, - new KeychainX509TrustManager(new DefaultTrustManagerHostnameCallback(target)), - new KeychainX509KeyManager()); + public CopyTransfer(final Host source, final Session destination, + final Map selected) { + this(source, destination, selected, new BandwidthThrottle(PreferencesFactory.get().getFloat("queue.download.bandwidth.bytes"))); } - public CopyTransfer(final Host source, final Host target, final Map files, - final X509TrustManager trust, final X509KeyManager key) { - this(source, target, new CopyRootPathsNormalizer().normalize(files), - new BandwidthThrottle(PreferencesFactory.get().getFloat("queue.download.bandwidth.bytes")), - trust, key); - } - - protected CopyTransfer(final Host source, final Host target, - final Map selected, final BandwidthThrottle bandwidth, - final X509TrustManager trust, final X509KeyManager key) { - this(source, SessionFactory.create(target, trust, key), selected, bandwidth); - } - - protected CopyTransfer(final Host source, final Session destination, - final Map selected, final BandwidthThrottle bandwidth) { + public CopyTransfer(final Host source, final Session destination, + final Map selected, final BandwidthThrottle bandwidth) { super(source, new ArrayList(), bandwidth); this.destination = destination; this.files = selected; diff --git a/source/ch/cyberduck/core/transfer/DisabledTransferErrorCallback.java b/core/src/main/java/ch/cyberduck/core/transfer/DisabledTransferErrorCallback.java similarity index 100% rename from source/ch/cyberduck/core/transfer/DisabledTransferErrorCallback.java rename to core/src/main/java/ch/cyberduck/core/transfer/DisabledTransferErrorCallback.java diff --git a/source/ch/cyberduck/core/transfer/DisabledTransferItemCallback.java b/core/src/main/java/ch/cyberduck/core/transfer/DisabledTransferItemCallback.java similarity index 100% rename from source/ch/cyberduck/core/transfer/DisabledTransferItemCallback.java rename to core/src/main/java/ch/cyberduck/core/transfer/DisabledTransferItemCallback.java diff --git a/source/ch/cyberduck/core/transfer/DisabledTransferPrompt.java b/core/src/main/java/ch/cyberduck/core/transfer/DisabledTransferPrompt.java similarity index 100% rename from source/ch/cyberduck/core/transfer/DisabledTransferPrompt.java rename to core/src/main/java/ch/cyberduck/core/transfer/DisabledTransferPrompt.java diff --git a/source/ch/cyberduck/core/transfer/DownloadTransfer.java b/core/src/main/java/ch/cyberduck/core/transfer/DownloadTransfer.java similarity index 100% rename from source/ch/cyberduck/core/transfer/DownloadTransfer.java rename to core/src/main/java/ch/cyberduck/core/transfer/DownloadTransfer.java diff --git a/source/ch/cyberduck/core/transfer/NullTransferFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/NullTransferFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/NullTransferFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/NullTransferFilter.java diff --git a/source/ch/cyberduck/core/transfer/Speedometer.java b/core/src/main/java/ch/cyberduck/core/transfer/Speedometer.java similarity index 100% rename from source/ch/cyberduck/core/transfer/Speedometer.java rename to core/src/main/java/ch/cyberduck/core/transfer/Speedometer.java diff --git a/source/ch/cyberduck/core/transfer/SyncTransfer.java b/core/src/main/java/ch/cyberduck/core/transfer/SyncTransfer.java similarity index 100% rename from source/ch/cyberduck/core/transfer/SyncTransfer.java rename to core/src/main/java/ch/cyberduck/core/transfer/SyncTransfer.java diff --git a/source/ch/cyberduck/core/transfer/Transfer.java b/core/src/main/java/ch/cyberduck/core/transfer/Transfer.java similarity index 100% rename from source/ch/cyberduck/core/transfer/Transfer.java rename to core/src/main/java/ch/cyberduck/core/transfer/Transfer.java diff --git a/source/ch/cyberduck/core/transfer/TransferAction.java b/core/src/main/java/ch/cyberduck/core/transfer/TransferAction.java similarity index 100% rename from source/ch/cyberduck/core/transfer/TransferAction.java rename to core/src/main/java/ch/cyberduck/core/transfer/TransferAction.java diff --git a/source/ch/cyberduck/core/transfer/TransferAdapter.java b/core/src/main/java/ch/cyberduck/core/transfer/TransferAdapter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/TransferAdapter.java rename to core/src/main/java/ch/cyberduck/core/transfer/TransferAdapter.java diff --git a/source/ch/cyberduck/core/transfer/TransferCallback.java b/core/src/main/java/ch/cyberduck/core/transfer/TransferCallback.java similarity index 100% rename from source/ch/cyberduck/core/transfer/TransferCallback.java rename to core/src/main/java/ch/cyberduck/core/transfer/TransferCallback.java diff --git a/source/ch/cyberduck/core/transfer/TransferErrorCallback.java b/core/src/main/java/ch/cyberduck/core/transfer/TransferErrorCallback.java similarity index 100% rename from source/ch/cyberduck/core/transfer/TransferErrorCallback.java rename to core/src/main/java/ch/cyberduck/core/transfer/TransferErrorCallback.java diff --git a/source/ch/cyberduck/core/transfer/TransferFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/TransferFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/TransferFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/TransferFilter.java diff --git a/source/ch/cyberduck/core/transfer/TransferItem.java b/core/src/main/java/ch/cyberduck/core/transfer/TransferItem.java similarity index 100% rename from source/ch/cyberduck/core/transfer/TransferItem.java rename to core/src/main/java/ch/cyberduck/core/transfer/TransferItem.java diff --git a/source/ch/cyberduck/core/transfer/TransferItemCallback.java b/core/src/main/java/ch/cyberduck/core/transfer/TransferItemCallback.java similarity index 100% rename from source/ch/cyberduck/core/transfer/TransferItemCallback.java rename to core/src/main/java/ch/cyberduck/core/transfer/TransferItemCallback.java diff --git a/source/ch/cyberduck/core/transfer/TransferListener.java b/core/src/main/java/ch/cyberduck/core/transfer/TransferListener.java similarity index 100% rename from source/ch/cyberduck/core/transfer/TransferListener.java rename to core/src/main/java/ch/cyberduck/core/transfer/TransferListener.java diff --git a/source/ch/cyberduck/core/transfer/TransferOptions.java b/core/src/main/java/ch/cyberduck/core/transfer/TransferOptions.java similarity index 100% rename from source/ch/cyberduck/core/transfer/TransferOptions.java rename to core/src/main/java/ch/cyberduck/core/transfer/TransferOptions.java diff --git a/source/ch/cyberduck/core/transfer/TransferPathFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/TransferPathFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/TransferPathFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/TransferPathFilter.java diff --git a/source/ch/cyberduck/core/transfer/TransferProgress.java b/core/src/main/java/ch/cyberduck/core/transfer/TransferProgress.java similarity index 100% rename from source/ch/cyberduck/core/transfer/TransferProgress.java rename to core/src/main/java/ch/cyberduck/core/transfer/TransferProgress.java diff --git a/source/ch/cyberduck/core/transfer/TransferPrompt.java b/core/src/main/java/ch/cyberduck/core/transfer/TransferPrompt.java similarity index 100% rename from source/ch/cyberduck/core/transfer/TransferPrompt.java rename to core/src/main/java/ch/cyberduck/core/transfer/TransferPrompt.java diff --git a/source/ch/cyberduck/core/transfer/TransferQueue.java b/core/src/main/java/ch/cyberduck/core/transfer/TransferQueue.java similarity index 100% rename from source/ch/cyberduck/core/transfer/TransferQueue.java rename to core/src/main/java/ch/cyberduck/core/transfer/TransferQueue.java diff --git a/source/ch/cyberduck/core/transfer/TransferQueueFactory.java b/core/src/main/java/ch/cyberduck/core/transfer/TransferQueueFactory.java similarity index 100% rename from source/ch/cyberduck/core/transfer/TransferQueueFactory.java rename to core/src/main/java/ch/cyberduck/core/transfer/TransferQueueFactory.java diff --git a/source/ch/cyberduck/core/transfer/TransferSpeedometer.java b/core/src/main/java/ch/cyberduck/core/transfer/TransferSpeedometer.java similarity index 100% rename from source/ch/cyberduck/core/transfer/TransferSpeedometer.java rename to core/src/main/java/ch/cyberduck/core/transfer/TransferSpeedometer.java diff --git a/source/ch/cyberduck/core/transfer/TransferStatus.java b/core/src/main/java/ch/cyberduck/core/transfer/TransferStatus.java similarity index 100% rename from source/ch/cyberduck/core/transfer/TransferStatus.java rename to core/src/main/java/ch/cyberduck/core/transfer/TransferStatus.java diff --git a/source/ch/cyberduck/core/transfer/UploadTransfer.java b/core/src/main/java/ch/cyberduck/core/transfer/UploadTransfer.java similarity index 100% rename from source/ch/cyberduck/core/transfer/UploadTransfer.java rename to core/src/main/java/ch/cyberduck/core/transfer/UploadTransfer.java diff --git a/source/ch/cyberduck/core/transfer/copy/AbstractCopyFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/copy/AbstractCopyFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/copy/AbstractCopyFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/copy/AbstractCopyFilter.java diff --git a/source/ch/cyberduck/core/transfer/copy/ChecksumFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/copy/ChecksumFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/copy/ChecksumFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/copy/ChecksumFilter.java diff --git a/source/ch/cyberduck/core/transfer/copy/OverwriteFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/copy/OverwriteFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/copy/OverwriteFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/copy/OverwriteFilter.java diff --git a/source/ch/cyberduck/core/transfer/download/AbstractDownloadFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/download/AbstractDownloadFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/download/AbstractDownloadFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/download/AbstractDownloadFilter.java diff --git a/source/ch/cyberduck/core/transfer/download/CompareFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/download/CompareFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/download/CompareFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/download/CompareFilter.java diff --git a/source/ch/cyberduck/core/transfer/download/DownloadFilterOptions.java b/core/src/main/java/ch/cyberduck/core/transfer/download/DownloadFilterOptions.java similarity index 100% rename from source/ch/cyberduck/core/transfer/download/DownloadFilterOptions.java rename to core/src/main/java/ch/cyberduck/core/transfer/download/DownloadFilterOptions.java diff --git a/source/ch/cyberduck/core/transfer/download/DownloadRegexPriorityComparator.java b/core/src/main/java/ch/cyberduck/core/transfer/download/DownloadRegexPriorityComparator.java similarity index 100% rename from source/ch/cyberduck/core/transfer/download/DownloadRegexPriorityComparator.java rename to core/src/main/java/ch/cyberduck/core/transfer/download/DownloadRegexPriorityComparator.java diff --git a/source/ch/cyberduck/core/transfer/download/IconUpdateSreamListener.java b/core/src/main/java/ch/cyberduck/core/transfer/download/IconUpdateSreamListener.java similarity index 100% rename from source/ch/cyberduck/core/transfer/download/IconUpdateSreamListener.java rename to core/src/main/java/ch/cyberduck/core/transfer/download/IconUpdateSreamListener.java diff --git a/source/ch/cyberduck/core/transfer/download/OverwriteFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/download/OverwriteFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/download/OverwriteFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/download/OverwriteFilter.java diff --git a/source/ch/cyberduck/core/transfer/download/PathPriorityComparator.java b/core/src/main/java/ch/cyberduck/core/transfer/download/PathPriorityComparator.java similarity index 100% rename from source/ch/cyberduck/core/transfer/download/PathPriorityComparator.java rename to core/src/main/java/ch/cyberduck/core/transfer/download/PathPriorityComparator.java diff --git a/source/ch/cyberduck/core/transfer/download/RenameExistingFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/download/RenameExistingFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/download/RenameExistingFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/download/RenameExistingFilter.java diff --git a/source/ch/cyberduck/core/transfer/download/RenameFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/download/RenameFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/download/RenameFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/download/RenameFilter.java diff --git a/source/ch/cyberduck/core/transfer/download/ResumeFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/download/ResumeFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/download/ResumeFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/download/ResumeFilter.java diff --git a/source/ch/cyberduck/core/transfer/download/SkipFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/download/SkipFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/download/SkipFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/download/SkipFilter.java diff --git a/source/ch/cyberduck/core/transfer/download/TrashFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/download/TrashFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/download/TrashFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/download/TrashFilter.java diff --git a/source/ch/cyberduck/core/transfer/normalizer/CopyRootPathsNormalizer.java b/core/src/main/java/ch/cyberduck/core/transfer/normalizer/CopyRootPathsNormalizer.java similarity index 100% rename from source/ch/cyberduck/core/transfer/normalizer/CopyRootPathsNormalizer.java rename to core/src/main/java/ch/cyberduck/core/transfer/normalizer/CopyRootPathsNormalizer.java diff --git a/source/ch/cyberduck/core/transfer/normalizer/DownloadRootPathsNormalizer.java b/core/src/main/java/ch/cyberduck/core/transfer/normalizer/DownloadRootPathsNormalizer.java similarity index 100% rename from source/ch/cyberduck/core/transfer/normalizer/DownloadRootPathsNormalizer.java rename to core/src/main/java/ch/cyberduck/core/transfer/normalizer/DownloadRootPathsNormalizer.java diff --git a/source/ch/cyberduck/core/transfer/normalizer/RootPathsNormalizer.java b/core/src/main/java/ch/cyberduck/core/transfer/normalizer/RootPathsNormalizer.java similarity index 100% rename from source/ch/cyberduck/core/transfer/normalizer/RootPathsNormalizer.java rename to core/src/main/java/ch/cyberduck/core/transfer/normalizer/RootPathsNormalizer.java diff --git a/source/ch/cyberduck/core/transfer/normalizer/UploadRootPathsNormalizer.java b/core/src/main/java/ch/cyberduck/core/transfer/normalizer/UploadRootPathsNormalizer.java similarity index 100% rename from source/ch/cyberduck/core/transfer/normalizer/UploadRootPathsNormalizer.java rename to core/src/main/java/ch/cyberduck/core/transfer/normalizer/UploadRootPathsNormalizer.java diff --git a/source/ch/cyberduck/core/transfer/symlink/AbstractSymlinkResolver.java b/core/src/main/java/ch/cyberduck/core/transfer/symlink/AbstractSymlinkResolver.java similarity index 100% rename from source/ch/cyberduck/core/transfer/symlink/AbstractSymlinkResolver.java rename to core/src/main/java/ch/cyberduck/core/transfer/symlink/AbstractSymlinkResolver.java diff --git a/source/ch/cyberduck/core/transfer/symlink/DisabledDownloadSymlinkResolver.java b/core/src/main/java/ch/cyberduck/core/transfer/symlink/DisabledDownloadSymlinkResolver.java similarity index 100% rename from source/ch/cyberduck/core/transfer/symlink/DisabledDownloadSymlinkResolver.java rename to core/src/main/java/ch/cyberduck/core/transfer/symlink/DisabledDownloadSymlinkResolver.java diff --git a/source/ch/cyberduck/core/transfer/symlink/DisabledUploadSymlinkResolver.java b/core/src/main/java/ch/cyberduck/core/transfer/symlink/DisabledUploadSymlinkResolver.java similarity index 100% rename from source/ch/cyberduck/core/transfer/symlink/DisabledUploadSymlinkResolver.java rename to core/src/main/java/ch/cyberduck/core/transfer/symlink/DisabledUploadSymlinkResolver.java diff --git a/source/ch/cyberduck/core/transfer/symlink/DownloadSymlinkResolver.java b/core/src/main/java/ch/cyberduck/core/transfer/symlink/DownloadSymlinkResolver.java similarity index 100% rename from source/ch/cyberduck/core/transfer/symlink/DownloadSymlinkResolver.java rename to core/src/main/java/ch/cyberduck/core/transfer/symlink/DownloadSymlinkResolver.java diff --git a/source/ch/cyberduck/core/transfer/symlink/SymlinkResolver.java b/core/src/main/java/ch/cyberduck/core/transfer/symlink/SymlinkResolver.java similarity index 100% rename from source/ch/cyberduck/core/transfer/symlink/SymlinkResolver.java rename to core/src/main/java/ch/cyberduck/core/transfer/symlink/SymlinkResolver.java diff --git a/source/ch/cyberduck/core/transfer/symlink/UploadSymlinkResolver.java b/core/src/main/java/ch/cyberduck/core/transfer/symlink/UploadSymlinkResolver.java similarity index 100% rename from source/ch/cyberduck/core/transfer/symlink/UploadSymlinkResolver.java rename to core/src/main/java/ch/cyberduck/core/transfer/symlink/UploadSymlinkResolver.java diff --git a/source/ch/cyberduck/core/transfer/synchronisation/SynchronizationPathFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/synchronisation/SynchronizationPathFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/synchronisation/SynchronizationPathFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/synchronisation/SynchronizationPathFilter.java diff --git a/source/ch/cyberduck/core/transfer/upload/AbstractUploadFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/upload/AbstractUploadFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/upload/AbstractUploadFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/upload/AbstractUploadFilter.java diff --git a/source/ch/cyberduck/core/transfer/upload/CompareFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/upload/CompareFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/upload/CompareFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/upload/CompareFilter.java diff --git a/source/ch/cyberduck/core/transfer/upload/LocalPriorityComparator.java b/core/src/main/java/ch/cyberduck/core/transfer/upload/LocalPriorityComparator.java similarity index 100% rename from source/ch/cyberduck/core/transfer/upload/LocalPriorityComparator.java rename to core/src/main/java/ch/cyberduck/core/transfer/upload/LocalPriorityComparator.java diff --git a/source/ch/cyberduck/core/transfer/upload/OverwriteFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/upload/OverwriteFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/upload/OverwriteFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/upload/OverwriteFilter.java diff --git a/source/ch/cyberduck/core/transfer/upload/RenameExistingFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/upload/RenameExistingFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/upload/RenameExistingFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/upload/RenameExistingFilter.java diff --git a/source/ch/cyberduck/core/transfer/upload/RenameFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/upload/RenameFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/upload/RenameFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/upload/RenameFilter.java diff --git a/source/ch/cyberduck/core/transfer/upload/ResumeFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/upload/ResumeFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/upload/ResumeFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/upload/ResumeFilter.java diff --git a/source/ch/cyberduck/core/transfer/upload/SkipFilter.java b/core/src/main/java/ch/cyberduck/core/transfer/upload/SkipFilter.java similarity index 100% rename from source/ch/cyberduck/core/transfer/upload/SkipFilter.java rename to core/src/main/java/ch/cyberduck/core/transfer/upload/SkipFilter.java diff --git a/source/ch/cyberduck/core/transfer/upload/UploadFilterOptions.java b/core/src/main/java/ch/cyberduck/core/transfer/upload/UploadFilterOptions.java similarity index 100% rename from source/ch/cyberduck/core/transfer/upload/UploadFilterOptions.java rename to core/src/main/java/ch/cyberduck/core/transfer/upload/UploadFilterOptions.java diff --git a/source/ch/cyberduck/core/transfer/upload/UploadRegexPriorityComparator.java b/core/src/main/java/ch/cyberduck/core/transfer/upload/UploadRegexPriorityComparator.java similarity index 100% rename from source/ch/cyberduck/core/transfer/upload/UploadRegexPriorityComparator.java rename to core/src/main/java/ch/cyberduck/core/transfer/upload/UploadRegexPriorityComparator.java diff --git a/source/ch/cyberduck/core/unicode/NFCNormalizer.java b/core/src/main/java/ch/cyberduck/core/unicode/NFCNormalizer.java similarity index 100% rename from source/ch/cyberduck/core/unicode/NFCNormalizer.java rename to core/src/main/java/ch/cyberduck/core/unicode/NFCNormalizer.java diff --git a/source/ch/cyberduck/core/urlhandler/AbstractSchemeHandler.java b/core/src/main/java/ch/cyberduck/core/urlhandler/AbstractSchemeHandler.java similarity index 100% rename from source/ch/cyberduck/core/urlhandler/AbstractSchemeHandler.java rename to core/src/main/java/ch/cyberduck/core/urlhandler/AbstractSchemeHandler.java diff --git a/source/ch/cyberduck/core/urlhandler/DisabledSchemeHandler.java b/core/src/main/java/ch/cyberduck/core/urlhandler/DisabledSchemeHandler.java similarity index 100% rename from source/ch/cyberduck/core/urlhandler/DisabledSchemeHandler.java rename to core/src/main/java/ch/cyberduck/core/urlhandler/DisabledSchemeHandler.java diff --git a/source/ch/cyberduck/core/urlhandler/LaunchServicesSchemeHandler.java b/core/src/main/java/ch/cyberduck/core/urlhandler/LaunchServicesSchemeHandler.java similarity index 98% rename from source/ch/cyberduck/core/urlhandler/LaunchServicesSchemeHandler.java rename to core/src/main/java/ch/cyberduck/core/urlhandler/LaunchServicesSchemeHandler.java index e74caf6df8..1145418eb8 100644 --- a/source/ch/cyberduck/core/urlhandler/LaunchServicesSchemeHandler.java +++ b/core/src/main/java/ch/cyberduck/core/urlhandler/LaunchServicesSchemeHandler.java @@ -34,7 +34,7 @@ import java.util.List; public final class LaunchServicesSchemeHandler extends AbstractSchemeHandler { static { - Native.load("launchservicesschemehandler"); + Native.load("core"); } private ApplicationFinder applicationFinder; diff --git a/source/ch/cyberduck/core/urlhandler/SchemeHandler.java b/core/src/main/java/ch/cyberduck/core/urlhandler/SchemeHandler.java similarity index 100% rename from source/ch/cyberduck/core/urlhandler/SchemeHandler.java rename to core/src/main/java/ch/cyberduck/core/urlhandler/SchemeHandler.java diff --git a/source/ch/cyberduck/core/urlhandler/SchemeHandlerFactory.java b/core/src/main/java/ch/cyberduck/core/urlhandler/SchemeHandlerFactory.java similarity index 100% rename from source/ch/cyberduck/core/urlhandler/SchemeHandlerFactory.java rename to core/src/main/java/ch/cyberduck/core/urlhandler/SchemeHandlerFactory.java diff --git a/source/ch/cyberduck/core/worker/AbstractTransferWorker.java b/core/src/main/java/ch/cyberduck/core/worker/AbstractTransferWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/AbstractTransferWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/AbstractTransferWorker.java diff --git a/source/ch/cyberduck/core/worker/ActionListProgressListener.java b/core/src/main/java/ch/cyberduck/core/worker/ActionListProgressListener.java similarity index 100% rename from source/ch/cyberduck/core/worker/ActionListProgressListener.java rename to core/src/main/java/ch/cyberduck/core/worker/ActionListProgressListener.java diff --git a/source/ch/cyberduck/core/worker/CalculateSizeWorker.java b/core/src/main/java/ch/cyberduck/core/worker/CalculateSizeWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/CalculateSizeWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/CalculateSizeWorker.java diff --git a/source/ch/cyberduck/core/worker/ConcurrentTransferWorker.java b/core/src/main/java/ch/cyberduck/core/worker/ConcurrentTransferWorker.java similarity index 99% rename from source/ch/cyberduck/core/worker/ConcurrentTransferWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/ConcurrentTransferWorker.java index 2a3d2c8bf5..8a3dde3fc3 100644 --- a/source/ch/cyberduck/core/worker/ConcurrentTransferWorker.java +++ b/core/src/main/java/ch/cyberduck/core/worker/ConcurrentTransferWorker.java @@ -26,6 +26,7 @@ import ch.cyberduck.core.Session; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.exception.ConnectionCanceledException; import ch.cyberduck.core.io.StreamListener; +import ch.cyberduck.core.pool.SessionPool; import ch.cyberduck.core.ssl.X509KeyManager; import ch.cyberduck.core.ssl.X509TrustManager; import ch.cyberduck.core.threading.NamedThreadFactory; diff --git a/source/ch/cyberduck/core/worker/CreateDirectoryWorker.java b/core/src/main/java/ch/cyberduck/core/worker/CreateDirectoryWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/CreateDirectoryWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/CreateDirectoryWorker.java diff --git a/source/ch/cyberduck/core/worker/DeleteWorker.java b/core/src/main/java/ch/cyberduck/core/worker/DeleteWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/DeleteWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/DeleteWorker.java diff --git a/source/ch/cyberduck/core/worker/DisconnectWorker.java b/core/src/main/java/ch/cyberduck/core/worker/DisconnectWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/DisconnectWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/DisconnectWorker.java diff --git a/source/ch/cyberduck/core/worker/MountWorker.java b/core/src/main/java/ch/cyberduck/core/worker/MountWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/MountWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/MountWorker.java diff --git a/source/ch/cyberduck/core/worker/MoveWorker.java b/core/src/main/java/ch/cyberduck/core/worker/MoveWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/MoveWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/MoveWorker.java diff --git a/source/ch/cyberduck/core/worker/ReadAclWorker.java b/core/src/main/java/ch/cyberduck/core/worker/ReadAclWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/ReadAclWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/ReadAclWorker.java diff --git a/source/ch/cyberduck/core/worker/ReadMetadataWorker.java b/core/src/main/java/ch/cyberduck/core/worker/ReadMetadataWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/ReadMetadataWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/ReadMetadataWorker.java diff --git a/source/ch/cyberduck/core/worker/ReadPermissionWorker.java b/core/src/main/java/ch/cyberduck/core/worker/ReadPermissionWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/ReadPermissionWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/ReadPermissionWorker.java diff --git a/source/ch/cyberduck/core/worker/ReadSizeWorker.java b/core/src/main/java/ch/cyberduck/core/worker/ReadSizeWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/ReadSizeWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/ReadSizeWorker.java diff --git a/source/ch/cyberduck/core/worker/RevertWorker.java b/core/src/main/java/ch/cyberduck/core/worker/RevertWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/RevertWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/RevertWorker.java diff --git a/source/ch/cyberduck/core/worker/SessionListWorker.java b/core/src/main/java/ch/cyberduck/core/worker/SessionListWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/SessionListWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/SessionListWorker.java diff --git a/source/ch/cyberduck/core/worker/SingleTransferWorker.java b/core/src/main/java/ch/cyberduck/core/worker/SingleTransferWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/SingleTransferWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/SingleTransferWorker.java diff --git a/source/ch/cyberduck/core/worker/TouchWorker.java b/core/src/main/java/ch/cyberduck/core/worker/TouchWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/TouchWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/TouchWorker.java diff --git a/source/ch/cyberduck/core/worker/TransferPromptFilterWorker.java b/core/src/main/java/ch/cyberduck/core/worker/TransferPromptFilterWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/TransferPromptFilterWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/TransferPromptFilterWorker.java diff --git a/source/ch/cyberduck/core/worker/TransferPromptListWorker.java b/core/src/main/java/ch/cyberduck/core/worker/TransferPromptListWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/TransferPromptListWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/TransferPromptListWorker.java diff --git a/source/ch/cyberduck/core/worker/TransferWorker.java b/core/src/main/java/ch/cyberduck/core/worker/TransferWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/TransferWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/TransferWorker.java diff --git a/source/ch/cyberduck/core/worker/Worker.java b/core/src/main/java/ch/cyberduck/core/worker/Worker.java similarity index 100% rename from source/ch/cyberduck/core/worker/Worker.java rename to core/src/main/java/ch/cyberduck/core/worker/Worker.java diff --git a/source/ch/cyberduck/core/worker/WriteAclWorker.java b/core/src/main/java/ch/cyberduck/core/worker/WriteAclWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/WriteAclWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/WriteAclWorker.java diff --git a/source/ch/cyberduck/core/worker/WriteEncryptionWorker.java b/core/src/main/java/ch/cyberduck/core/worker/WriteEncryptionWorker.java similarity index 96% rename from source/ch/cyberduck/core/worker/WriteEncryptionWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/WriteEncryptionWorker.java index 1c65c55512..aa51979150 100644 --- a/source/ch/cyberduck/core/worker/WriteEncryptionWorker.java +++ b/core/src/main/java/ch/cyberduck/core/worker/WriteEncryptionWorker.java @@ -1,131 +1,131 @@ -package ch.cyberduck.core.worker; - -/* - * Copyright (c) 2002-2015 David Kocher. All rights reserved. - * http://cyberduck.io/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Bug fixes, suggestions and comments should be sent to: - * feedback@cyberduck.io - */ - -import ch.cyberduck.core.LocaleFactory; -import ch.cyberduck.core.Path; -import ch.cyberduck.core.ProgressListener; -import ch.cyberduck.core.Session; -import ch.cyberduck.core.exception.BackgroundException; -import ch.cyberduck.core.exception.ConnectionCanceledException; -import ch.cyberduck.core.features.Encryption; - -import java.text.MessageFormat; -import java.util.List; - -/** - * @version $Id:$ - */ -public class WriteEncryptionWorker extends Worker { - - /** - * Selected files. - */ - private List files; - - /** - * Redundancy class - */ - private String algorithm; - - /** - * Descend into directories - */ - private boolean recursive; - - private ProgressListener listener; - - public WriteEncryptionWorker(final List files, - final String algorithm, final boolean recursive, final ProgressListener listener) { - this.files = files; - this.algorithm = algorithm; - this.recursive = recursive; - this.listener = listener; - } - - @Override - public Boolean run(final Session session) throws BackgroundException { - final Encryption feature = session.getFeature(Encryption.class); - for(Path file : files) { - this.write(session, feature, file); - } - return true; - } - - protected void write(final Session session, final Encryption feature, final Path file) throws BackgroundException { - if(this.isCanceled()) { - throw new ConnectionCanceledException(); - } - if(!algorithm.equals(file.attributes().getStorageClass())) { - listener.message(MessageFormat.format(LocaleFactory.localizedString("Writing metadata of {0}", "Status"), - file.getName())); - feature.setEncryption(file, algorithm); - file.attributes().setEncryption(algorithm); - } - if(recursive) { - if(file.isVolume()) { - // No recursion when changing container ACL - } - else if(file.isDirectory()) { - for(Path child : session.list(file, new ActionListProgressListener(this, listener))) { - this.write(session, feature, child); - } - } - } - } - - @Override - public Boolean initialize() { - return false; - } - - @Override - public String getActivity() { - return MessageFormat.format(LocaleFactory.localizedString("Writing metadata of {0}", "Status"), - this.toString(files)); - } - - @Override - public boolean equals(final Object o) { - if(this == o) { - return true; - } - if(o == null || getClass() != o.getClass()) { - return false; - } - final WriteEncryptionWorker that = (WriteEncryptionWorker) o; - if(files != null ? !files.equals(that.files) : that.files != null) { - return false; - } - return true; - } - - @Override - public int hashCode() { - return files != null ? files.hashCode() : 0; - } - - @Override - public String toString() { - final StringBuilder sb = new StringBuilder("WriteRedundancyWorker{"); - sb.append("files=").append(files); - sb.append('}'); - return sb.toString(); - } -} +package ch.cyberduck.core.worker; + +/* + * Copyright (c) 2002-2015 David Kocher. All rights reserved. + * http://cyberduck.io/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * Bug fixes, suggestions and comments should be sent to: + * feedback@cyberduck.io + */ + +import ch.cyberduck.core.LocaleFactory; +import ch.cyberduck.core.Path; +import ch.cyberduck.core.ProgressListener; +import ch.cyberduck.core.Session; +import ch.cyberduck.core.exception.BackgroundException; +import ch.cyberduck.core.exception.ConnectionCanceledException; +import ch.cyberduck.core.features.Encryption; + +import java.text.MessageFormat; +import java.util.List; + +/** + * @version $Id:$ + */ +public class WriteEncryptionWorker extends Worker { + + /** + * Selected files. + */ + private List files; + + /** + * Redundancy class + */ + private String algorithm; + + /** + * Descend into directories + */ + private boolean recursive; + + private ProgressListener listener; + + public WriteEncryptionWorker(final List files, + final String algorithm, final boolean recursive, final ProgressListener listener) { + this.files = files; + this.algorithm = algorithm; + this.recursive = recursive; + this.listener = listener; + } + + @Override + public Boolean run(final Session session) throws BackgroundException { + final Encryption feature = session.getFeature(Encryption.class); + for(Path file : files) { + this.write(session, feature, file); + } + return true; + } + + protected void write(final Session session, final Encryption feature, final Path file) throws BackgroundException { + if(this.isCanceled()) { + throw new ConnectionCanceledException(); + } + if(!algorithm.equals(file.attributes().getStorageClass())) { + listener.message(MessageFormat.format(LocaleFactory.localizedString("Writing metadata of {0}", "Status"), + file.getName())); + feature.setEncryption(file, algorithm); + file.attributes().setEncryption(algorithm); + } + if(recursive) { + if(file.isVolume()) { + // No recursion when changing container ACL + } + else if(file.isDirectory()) { + for(Path child : session.list(file, new ActionListProgressListener(this, listener))) { + this.write(session, feature, child); + } + } + } + } + + @Override + public Boolean initialize() { + return false; + } + + @Override + public String getActivity() { + return MessageFormat.format(LocaleFactory.localizedString("Writing metadata of {0}", "Status"), + this.toString(files)); + } + + @Override + public boolean equals(final Object o) { + if(this == o) { + return true; + } + if(o == null || getClass() != o.getClass()) { + return false; + } + final WriteEncryptionWorker that = (WriteEncryptionWorker) o; + if(files != null ? !files.equals(that.files) : that.files != null) { + return false; + } + return true; + } + + @Override + public int hashCode() { + return files != null ? files.hashCode() : 0; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("WriteRedundancyWorker{"); + sb.append("files=").append(files); + sb.append('}'); + return sb.toString(); + } +} diff --git a/source/ch/cyberduck/core/worker/WriteMetadataWorker.java b/core/src/main/java/ch/cyberduck/core/worker/WriteMetadataWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/WriteMetadataWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/WriteMetadataWorker.java diff --git a/source/ch/cyberduck/core/worker/WritePermissionWorker.java b/core/src/main/java/ch/cyberduck/core/worker/WritePermissionWorker.java similarity index 100% rename from source/ch/cyberduck/core/worker/WritePermissionWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/WritePermissionWorker.java diff --git a/source/ch/cyberduck/core/worker/WriteRedundancyWorker.java b/core/src/main/java/ch/cyberduck/core/worker/WriteRedundancyWorker.java similarity index 96% rename from source/ch/cyberduck/core/worker/WriteRedundancyWorker.java rename to core/src/main/java/ch/cyberduck/core/worker/WriteRedundancyWorker.java index 80d1c21c29..51316dd0aa 100644 --- a/source/ch/cyberduck/core/worker/WriteRedundancyWorker.java +++ b/core/src/main/java/ch/cyberduck/core/worker/WriteRedundancyWorker.java @@ -1,128 +1,128 @@ -package ch.cyberduck.core.worker; - -/* - * Copyright (c) 2002-2015 David Kocher. All rights reserved. - * http://cyberduck.io/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Bug fixes, suggestions and comments should be sent to: - * feedback@cyberduck.io - */ - -import ch.cyberduck.core.LocaleFactory; -import ch.cyberduck.core.Path; -import ch.cyberduck.core.ProgressListener; -import ch.cyberduck.core.Session; -import ch.cyberduck.core.exception.BackgroundException; -import ch.cyberduck.core.exception.ConnectionCanceledException; -import ch.cyberduck.core.features.Redundancy; - -import java.text.MessageFormat; -import java.util.List; - -/** - * @version $Id:$ - */ -public class WriteRedundancyWorker extends Worker { - - /** - * Selected files. - */ - private List files; - - /** - * Redundancy class - */ - private String level; - - /** - * Descend into directories - */ - private boolean recursive; - - private ProgressListener listener; - - public WriteRedundancyWorker(final List files, - final String level, final boolean recursive, final ProgressListener listener) { - this.files = files; - this.level = level; - this.recursive = recursive; - this.listener = listener; - } - - @Override - public Boolean run(final Session session) throws BackgroundException { - final Redundancy feature = session.getFeature(Redundancy.class); - for(Path file : files) { - this.write(session, feature, file); - } - return true; - } - - protected void write(final Session session, final Redundancy feature, final Path file) throws BackgroundException { - if(this.isCanceled()) { - throw new ConnectionCanceledException(); - } - if(!level.equals(file.attributes().getStorageClass())) { - listener.message(MessageFormat.format(LocaleFactory.localizedString("Writing metadata of {0}", "Status"), - file.getName())); - feature.setClass(file, level); - file.attributes().setStorageClass(level); - } - if(recursive) { - if(file.isDirectory()) { - for(Path child : session.list(file, new ActionListProgressListener(this, listener))) { - this.write(session, feature, child); - } - } - } - } - - @Override - public Boolean initialize() { - return false; - } - - @Override - public String getActivity() { - return MessageFormat.format(LocaleFactory.localizedString("Writing metadata of {0}", "Status"), - this.toString(files)); - } - - @Override - public boolean equals(final Object o) { - if(this == o) { - return true; - } - if(o == null || getClass() != o.getClass()) { - return false; - } - final WriteRedundancyWorker that = (WriteRedundancyWorker) o; - if(files != null ? !files.equals(that.files) : that.files != null) { - return false; - } - return true; - } - - @Override - public int hashCode() { - return files != null ? files.hashCode() : 0; - } - - @Override - public String toString() { - final StringBuilder sb = new StringBuilder("WriteRedundancyWorker{"); - sb.append("files=").append(files); - sb.append('}'); - return sb.toString(); - } -} +package ch.cyberduck.core.worker; + +/* + * Copyright (c) 2002-2015 David Kocher. All rights reserved. + * http://cyberduck.io/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * Bug fixes, suggestions and comments should be sent to: + * feedback@cyberduck.io + */ + +import ch.cyberduck.core.LocaleFactory; +import ch.cyberduck.core.Path; +import ch.cyberduck.core.ProgressListener; +import ch.cyberduck.core.Session; +import ch.cyberduck.core.exception.BackgroundException; +import ch.cyberduck.core.exception.ConnectionCanceledException; +import ch.cyberduck.core.features.Redundancy; + +import java.text.MessageFormat; +import java.util.List; + +/** + * @version $Id:$ + */ +public class WriteRedundancyWorker extends Worker { + + /** + * Selected files. + */ + private List files; + + /** + * Redundancy class + */ + private String level; + + /** + * Descend into directories + */ + private boolean recursive; + + private ProgressListener listener; + + public WriteRedundancyWorker(final List files, + final String level, final boolean recursive, final ProgressListener listener) { + this.files = files; + this.level = level; + this.recursive = recursive; + this.listener = listener; + } + + @Override + public Boolean run(final Session session) throws BackgroundException { + final Redundancy feature = session.getFeature(Redundancy.class); + for(Path file : files) { + this.write(session, feature, file); + } + return true; + } + + protected void write(final Session session, final Redundancy feature, final Path file) throws BackgroundException { + if(this.isCanceled()) { + throw new ConnectionCanceledException(); + } + if(!level.equals(file.attributes().getStorageClass())) { + listener.message(MessageFormat.format(LocaleFactory.localizedString("Writing metadata of {0}", "Status"), + file.getName())); + feature.setClass(file, level); + file.attributes().setStorageClass(level); + } + if(recursive) { + if(file.isDirectory()) { + for(Path child : session.list(file, new ActionListProgressListener(this, listener))) { + this.write(session, feature, child); + } + } + } + } + + @Override + public Boolean initialize() { + return false; + } + + @Override + public String getActivity() { + return MessageFormat.format(LocaleFactory.localizedString("Writing metadata of {0}", "Status"), + this.toString(files)); + } + + @Override + public boolean equals(final Object o) { + if(this == o) { + return true; + } + if(o == null || getClass() != o.getClass()) { + return false; + } + final WriteRedundancyWorker that = (WriteRedundancyWorker) o; + if(files != null ? !files.equals(that.files) : that.files != null) { + return false; + } + return true; + } + + @Override + public int hashCode() { + return files != null ? files.hashCode() : 0; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("WriteRedundancyWorker{"); + sb.append("files=").append(files); + sb.append('}'); + return sb.toString(); + } +} diff --git a/source/com/extendmac/EMKeychainItem.h b/core/src/main/objc/EMKeychainItem.h similarity index 100% rename from source/com/extendmac/EMKeychainItem.h rename to core/src/main/objc/EMKeychainItem.h diff --git a/source/com/extendmac/EMKeychainItem.m b/core/src/main/objc/EMKeychainItem.m similarity index 100% rename from source/com/extendmac/EMKeychainItem.m rename to core/src/main/objc/EMKeychainItem.m diff --git a/source/com/extendmac/EMKeychainProxy.h b/core/src/main/objc/EMKeychainProxy.h similarity index 100% rename from source/com/extendmac/EMKeychainProxy.h rename to core/src/main/objc/EMKeychainProxy.h diff --git a/source/com/extendmac/EMKeychainProxy.m b/core/src/main/objc/EMKeychainProxy.m similarity index 100% rename from source/com/extendmac/EMKeychainProxy.m rename to core/src/main/objc/EMKeychainProxy.m diff --git a/source/ch/cyberduck/core/local/FinderLocal.h b/core/src/main/objc/FinderLocal.h similarity index 100% rename from source/ch/cyberduck/core/local/FinderLocal.h rename to core/src/main/objc/FinderLocal.h diff --git a/source/ch/cyberduck/core/local/FinderLocal.m b/core/src/main/objc/FinderLocal.m similarity index 100% rename from source/ch/cyberduck/core/local/FinderLocal.m rename to core/src/main/objc/FinderLocal.m diff --git a/source/ch/cyberduck/core/local/FinderSidebarService.h b/core/src/main/objc/FinderSidebarService.h similarity index 100% rename from source/ch/cyberduck/core/local/FinderSidebarService.h rename to core/src/main/objc/FinderSidebarService.h diff --git a/source/ch/cyberduck/core/local/FinderSidebarService.m b/core/src/main/objc/FinderSidebarService.m similarity index 100% rename from source/ch/cyberduck/core/local/FinderSidebarService.m rename to core/src/main/objc/FinderSidebarService.m diff --git a/source/ch/cyberduck/core/local/FoundationProgressIconService.h b/core/src/main/objc/FoundationProgressIconService.h similarity index 100% rename from source/ch/cyberduck/core/local/FoundationProgressIconService.h rename to core/src/main/objc/FoundationProgressIconService.h diff --git a/source/ch/cyberduck/core/local/FoundationProgressIconService.m b/core/src/main/objc/FoundationProgressIconService.m similarity index 100% rename from source/ch/cyberduck/core/local/FoundationProgressIconService.m rename to core/src/main/objc/FoundationProgressIconService.m diff --git a/source/ch/cyberduck/core/IOKitSleepPreventer.h b/core/src/main/objc/IOKitSleepPreventer.h similarity index 100% rename from source/ch/cyberduck/core/IOKitSleepPreventer.h rename to core/src/main/objc/IOKitSleepPreventer.h diff --git a/source/ch/cyberduck/core/IOKitSleepPreventer.m b/core/src/main/objc/IOKitSleepPreventer.m similarity index 100% rename from source/ch/cyberduck/core/IOKitSleepPreventer.m rename to core/src/main/objc/IOKitSleepPreventer.m diff --git a/source/ch/cyberduck/core/Keychain.h b/core/src/main/objc/Keychain.h similarity index 100% rename from source/ch/cyberduck/core/Keychain.h rename to core/src/main/objc/Keychain.h diff --git a/source/ch/cyberduck/core/Keychain.m b/core/src/main/objc/Keychain.m similarity index 100% rename from source/ch/cyberduck/core/Keychain.m rename to core/src/main/objc/Keychain.m diff --git a/source/ch/cyberduck/core/local/LaunchServicesApplicationFinder.h b/core/src/main/objc/LaunchServicesApplicationFinder.h similarity index 100% rename from source/ch/cyberduck/core/local/LaunchServicesApplicationFinder.h rename to core/src/main/objc/LaunchServicesApplicationFinder.h diff --git a/source/ch/cyberduck/core/local/LaunchServicesApplicationFinder.m b/core/src/main/objc/LaunchServicesApplicationFinder.m similarity index 100% rename from source/ch/cyberduck/core/local/LaunchServicesApplicationFinder.m rename to core/src/main/objc/LaunchServicesApplicationFinder.m diff --git a/source/ch/cyberduck/core/local/LaunchServicesFileDescriptor.h b/core/src/main/objc/LaunchServicesFileDescriptor.h similarity index 100% rename from source/ch/cyberduck/core/local/LaunchServicesFileDescriptor.h rename to core/src/main/objc/LaunchServicesFileDescriptor.h diff --git a/source/ch/cyberduck/core/local/LaunchServicesFileDescriptor.m b/core/src/main/objc/LaunchServicesFileDescriptor.m similarity index 100% rename from source/ch/cyberduck/core/local/LaunchServicesFileDescriptor.m rename to core/src/main/objc/LaunchServicesFileDescriptor.m diff --git a/source/ch/cyberduck/core/local/LaunchServicesQuarantineService.h b/core/src/main/objc/LaunchServicesQuarantineService.h similarity index 100% rename from source/ch/cyberduck/core/local/LaunchServicesQuarantineService.h rename to core/src/main/objc/LaunchServicesQuarantineService.h diff --git a/source/ch/cyberduck/core/local/LaunchServicesQuarantineService.m b/core/src/main/objc/LaunchServicesQuarantineService.m similarity index 100% rename from source/ch/cyberduck/core/local/LaunchServicesQuarantineService.m rename to core/src/main/objc/LaunchServicesQuarantineService.m diff --git a/source/ch/cyberduck/core/urlhandler/LaunchServicesSchemeHandler.h b/core/src/main/objc/LaunchServicesSchemeHandler.h similarity index 100% rename from source/ch/cyberduck/core/urlhandler/LaunchServicesSchemeHandler.h rename to core/src/main/objc/LaunchServicesSchemeHandler.h diff --git a/source/ch/cyberduck/core/urlhandler/LaunchServicesSchemeHandler.m b/core/src/main/objc/LaunchServicesSchemeHandler.m similarity index 100% rename from source/ch/cyberduck/core/urlhandler/LaunchServicesSchemeHandler.m rename to core/src/main/objc/LaunchServicesSchemeHandler.m diff --git a/source/ch/cyberduck/core/sparkle/Sandbox.h b/core/src/main/objc/Sandbox.h similarity index 100% rename from source/ch/cyberduck/core/sparkle/Sandbox.h rename to core/src/main/objc/Sandbox.h diff --git a/source/ch/cyberduck/core/sparkle/Sandbox.m b/core/src/main/objc/Sandbox.m similarity index 100% rename from source/ch/cyberduck/core/sparkle/Sandbox.m rename to core/src/main/objc/Sandbox.m diff --git a/source/ch/cyberduck/core/proxy/SystemConfigurationProxy.h b/core/src/main/objc/SystemConfigurationProxy.h similarity index 100% rename from source/ch/cyberduck/core/proxy/SystemConfigurationProxy.h rename to core/src/main/objc/SystemConfigurationProxy.h diff --git a/source/ch/cyberduck/core/proxy/SystemConfigurationProxy.m b/core/src/main/objc/SystemConfigurationProxy.m similarity index 100% rename from source/ch/cyberduck/core/proxy/SystemConfigurationProxy.m rename to core/src/main/objc/SystemConfigurationProxy.m diff --git a/source/ch/cyberduck/core/diagnostics/SystemConfigurationReachability.h b/core/src/main/objc/SystemConfigurationReachability.h similarity index 100% rename from source/ch/cyberduck/core/diagnostics/SystemConfigurationReachability.h rename to core/src/main/objc/SystemConfigurationReachability.h diff --git a/source/ch/cyberduck/core/diagnostics/SystemConfigurationReachability.m b/core/src/main/objc/SystemConfigurationReachability.m similarity index 100% rename from source/ch/cyberduck/core/diagnostics/SystemConfigurationReachability.m rename to core/src/main/objc/SystemConfigurationReachability.m diff --git a/source/de/zathras/UKCrashReporter.h b/core/src/main/objc/UKCrashReporter.h similarity index 100% rename from source/de/zathras/UKCrashReporter.h rename to core/src/main/objc/UKCrashReporter.h diff --git a/source/de/zathras/UKCrashReporter.m b/core/src/main/objc/UKCrashReporter.m similarity index 100% rename from source/de/zathras/UKCrashReporter.m rename to core/src/main/objc/UKCrashReporter.m diff --git a/source/de/zathras/UKSystemInfo.h b/core/src/main/objc/UKSystemInfo.h similarity index 100% rename from source/de/zathras/UKSystemInfo.h rename to core/src/main/objc/UKSystemInfo.h diff --git a/source/de/zathras/UKSystemInfo.m b/core/src/main/objc/UKSystemInfo.m similarity index 100% rename from source/de/zathras/UKSystemInfo.m rename to core/src/main/objc/UKSystemInfo.m diff --git a/core/src/main/resources/mime.types b/core/src/main/resources/mime.types new file mode 100644 index 0000000000..37e27b6a56 --- /dev/null +++ b/core/src/main/resources/mime.types @@ -0,0 +1,1590 @@ +# This file maps Internet media types to unique file extension(s). +# Although created for httpd, this file is used by many software systems +# and has been placed in the public domain for unlimited redisribution. +# +# The table below contains both registered and (common) unregistered types. +# A type that has no unique extension can be ignored -- they are listed +# here to guide configurations toward known types and to make it easier to +# identify "new" types. File extensions are also commonly used to indicate +# content languages and encodings, so choose them carefully. +# +# Internet media types should be registered as described in RFC 4288. +# The registry is at . +# +# MIME type (lowercased) Extensions +# ============================================ ========== +# application/1d-interleaved-parityfec +# application/3gpp-ims+xml +# application/activemessage +application/andrew-inset ez +# application/applefile +application/applixware aw +application/atom+xml atom +application/atomcat+xml atomcat +# application/atomicmail +application/atomsvc+xml atomsvc +# application/auth-policy+xml +# application/batch-smtp +# application/beep+xml +# application/calendar+xml +# application/cals-1840 +# application/ccmp+xml +application/ccxml+xml ccxml +application/cdmi-capability cdmia +application/cdmi-container cdmic +application/cdmi-domain cdmid +application/cdmi-object cdmio +application/cdmi-queue cdmiq +# application/cea-2018+xml +# application/cellml+xml +# application/cfw +# application/cnrp+xml +# application/commonground +# application/conference-info+xml +# application/cpl+xml +# application/csta+xml +# application/cstadata+xml +application/cu-seeme cu +# application/cybercash +application/davmount+xml davmount +application/dash+xml mpd +# application/dca-rft +# application/dec-dx +# application/dialog-info+xml +# application/dicom +# application/dns +application/docbook+xml dbk +# application/dskpp+xml +application/dssc+der dssc +application/dssc+xml xdssc +# application/dvcs +application/ecmascript ecma +# application/edi-consent +# application/edi-x12 +# application/edifact +application/emma+xml emma +# application/epp+xml +application/epub+zip epub +# application/eshop +# application/example +application/exi exi +# application/fastinfoset +# application/fastsoap +# application/fits +application/font-tdpfr pfr +# application/framework-attributes+xml +application/gml+xml gml +application/gpx+xml gpx +application/gxf gxf +# application/h224 +# application/held+xml +# application/http +application/hyperstudio stk +# application/ibe-key-request+xml +# application/ibe-pkg-reply+xml +# application/ibe-pp-data +# application/iges +# application/im-iscomposing+xml +# application/index +# application/index.cmd +# application/index.obj +# application/index.response +# application/index.vnd +application/inkml+xml ink inkml +# application/iotp +application/ipfix ipfix +# application/ipp +# application/isup +application/java-archive jar +application/java-serialized-object ser +application/java-vm class +application/javascript js +application/json json +application/jsonml+json jsonml +# application/kpml-request+xml +# application/kpml-response+xml +application/lost+xml lostxml +application/mac-binhex40 hqx +application/mac-compactpro cpt +# application/macwriteii +application/mads+xml mads +application/marc mrc +application/marcxml+xml mrcx +application/mathematica ma nb mb +# application/mathml-content+xml +# application/mathml-presentation+xml +application/mathml+xml mathml +# application/mbms-associated-procedure-description+xml +# application/mbms-deregister+xml +# application/mbms-envelope+xml +# application/mbms-msk+xml +# application/mbms-msk-response+xml +# application/mbms-protection-description+xml +# application/mbms-reception-report+xml +# application/mbms-register+xml +# application/mbms-register-response+xml +# application/mbms-user-service-description+xml +application/mbox mbox +# application/media_control+xml +application/mediaservercontrol+xml mscml +application/metalink+xml metalink +application/metalink4+xml meta4 +application/mets+xml mets +# application/mikey +application/mods+xml mods +# application/moss-keys +# application/moss-signature +# application/mosskey-data +# application/mosskey-request +application/mp21 m21 mp21 +application/mp4 mp4s +# application/mpeg4-generic +# application/mpeg4-iod +# application/mpeg4-iod-xmt +# application/msc-ivr+xml +# application/msc-mixer+xml +application/msword doc dot +application/mxf mxf +# application/nasdata +# application/news-checkgroups +# application/news-groupinfo +# application/news-transmission +# application/nss +# application/ocsp-request +# application/ocsp-response +application/octet-stream bin dms lha lrf lzh so iso dmg dist distz pkg bpk dump elc deploy +application/oda oda +application/oebps-package+xml opf +application/ogg ogx +application/omdoc+xml omdoc +application/onenote onetoc onetoc2 onetmp onepkg +application/oxps oxps +# application/parityfec +application/patch-ops-error+xml xer +application/pdf pdf +application/pgp-encrypted pgp +# application/pgp-keys +application/pgp-signature asc sig +application/pics-rules prf +# application/pidf+xml +# application/pidf-diff+xml +application/pkcs10 p10 +application/pkcs7-mime p7m p7c +application/pkcs7-signature p7s +application/pkcs8 p8 +application/pkix-attr-cert ac +application/pkix-cert cer +application/pkix-crl crl +application/pkix-pkipath pkipath +application/pkixcmp pki +application/pls+xml pls +# application/poc-settings+xml +application/postscript ai eps ps +# application/prs.alvestrand.titrax-sheet +application/prs.cww cww +# application/prs.nprend +# application/prs.plucker +# application/prs.rdf-xml-crypt +# application/prs.xsf+xml +application/pskc+xml pskcxml +# application/qsig +application/rdf+xml rdf +application/reginfo+xml rif +application/relax-ng-compact-syntax rnc +# application/remote-printing +application/resource-lists+xml rl +application/resource-lists-diff+xml rld +# application/riscos +# application/rlmi+xml +application/rls-services+xml rs +application/rpki-ghostbusters gbr +application/rpki-manifest mft +application/rpki-roa roa +# application/rpki-updown +application/rsd+xml rsd +application/rss+xml rss +application/rtf rtf +# application/rtx +# application/samlassertion+xml +# application/samlmetadata+xml +application/sbml+xml sbml +application/scvp-cv-request scq +application/scvp-cv-response scs +application/scvp-vp-request spq +application/scvp-vp-response spp +application/sdp sdp +# application/set-payment +application/set-payment-initiation setpay +# application/set-registration +application/set-registration-initiation setreg +# application/sgml +# application/sgml-open-catalog +application/shf+xml shf +# application/sieve +# application/simple-filter+xml +# application/simple-message-summary +# application/simplesymbolcontainer +# application/slate +# application/smil +application/smil+xml smi smil +# application/soap+fastinfoset +# application/soap+xml +application/sparql-query rq +application/sparql-results+xml srx +# application/spirits-event+xml +application/srgs gram +application/srgs+xml grxml +application/sru+xml sru +application/ssdl+xml ssdl +application/ssml+xml ssml +# application/tamp-apex-update +# application/tamp-apex-update-confirm +# application/tamp-community-update +# application/tamp-community-update-confirm +# application/tamp-error +# application/tamp-sequence-adjust +# application/tamp-sequence-adjust-confirm +# application/tamp-status-query +# application/tamp-status-response +# application/tamp-update +# application/tamp-update-confirm +application/tei+xml tei teicorpus +application/thraud+xml tfi +# application/timestamp-query +# application/timestamp-reply +application/timestamped-data tsd +# application/tve-trigger +# application/ulpfec +# application/vcard+xml +# application/vemmi +# application/vividence.scriptfile +# application/vnd.3gpp.bsf+xml +application/vnd.3gpp.pic-bw-large plb +application/vnd.3gpp.pic-bw-small psb +application/vnd.3gpp.pic-bw-var pvb +# application/vnd.3gpp.sms +# application/vnd.3gpp2.bcmcsinfo+xml +# application/vnd.3gpp2.sms +application/vnd.3gpp2.tcap tcap +application/vnd.3m.post-it-notes pwn +application/vnd.accpac.simply.aso aso +application/vnd.accpac.simply.imp imp +application/vnd.acucobol acu +application/vnd.acucorp atc acutc +application/vnd.adobe.air-application-installer-package+zip air +application/vnd.adobe.formscentral.fcdt fcdt +application/vnd.adobe.fxp fxp fxpl +# application/vnd.adobe.partial-upload +application/vnd.adobe.xdp+xml xdp +application/vnd.adobe.xfdf xfdf +# application/vnd.aether.imp +# application/vnd.ah-barcode +application/vnd.ahead.space ahead +application/vnd.airzip.filesecure.azf azf +application/vnd.airzip.filesecure.azs azs +application/vnd.amazon.ebook azw +application/vnd.americandynamics.acc acc +application/vnd.amiga.ami ami +# application/vnd.amundsen.maze+xml +application/vnd.android.package-archive apk +application/vnd.anser-web-certificate-issue-initiation cii +application/vnd.anser-web-funds-transfer-initiation fti +application/vnd.antix.game-component atx +application/vnd.apple.installer+xml mpkg +application/vnd.apple.mpegurl m3u8 +application/x-mpegurl m3u8 +# application/vnd.arastra.swi +application/vnd.aristanetworks.swi swi +application/vnd.astraea-software.iota iota +application/vnd.audiograph aep +# application/vnd.autopackage +# application/vnd.avistar+xml +application/vnd.blueice.multipass mpm +# application/vnd.bluetooth.ep.oob +application/vnd.bmi bmi +application/vnd.businessobjects rep +# application/vnd.cab-jscript +# application/vnd.canon-cpdl +# application/vnd.canon-lips +# application/vnd.cendio.thinlinc.clientconf +application/vnd.chemdraw+xml cdxml +application/vnd.chipnuts.karaoke-mmd mmd +application/vnd.cinderella cdy +# application/vnd.cirpack.isdn-ext +application/vnd.claymore cla +application/vnd.cloanto.rp9 rp9 +application/vnd.clonk.c4group c4g c4d c4f c4p c4u +application/vnd.cluetrust.cartomobile-config c11amc +application/vnd.cluetrust.cartomobile-config-pkg c11amz +# application/vnd.collection+json +# application/vnd.commerce-battelle +application/vnd.commonspace csp +application/vnd.contact.cmsg cdbcmsg +application/vnd.cosmocaller cmc +application/vnd.crick.clicker clkx +application/vnd.crick.clicker.keyboard clkk +application/vnd.crick.clicker.palette clkp +application/vnd.crick.clicker.template clkt +application/vnd.crick.clicker.wordbank clkw +application/vnd.criticaltools.wbs+xml wbs +application/vnd.ctc-posml pml +# application/vnd.ctct.ws+xml +# application/vnd.cups-pdf +# application/vnd.cups-postscript +application/vnd.cups-ppd ppd +# application/vnd.cups-raster +# application/vnd.cups-raw +# application/vnd.curl +application/vnd.curl.car car +application/vnd.curl.pcurl pcurl +# application/vnd.cybank +application/vnd.dart dart +application/vnd.data-vision.rdz rdz +application/vnd.dece.data uvf uvvf uvd uvvd +application/vnd.dece.ttml+xml uvt uvvt +application/vnd.dece.unspecified uvx uvvx +application/vnd.dece.zip uvz uvvz +application/vnd.denovo.fcselayout-link fe_launch +# application/vnd.dir-bi.plate-dl-nosuffix +application/vnd.dna dna +application/vnd.dolby.mlp mlp +# application/vnd.dolby.mobile.1 +# application/vnd.dolby.mobile.2 +application/vnd.dpgraph dpg +application/vnd.dreamfactory dfac +application/vnd.ds-keypoint kpxx +application/vnd.dvb.ait ait +# application/vnd.dvb.dvbj +# application/vnd.dvb.esgcontainer +# application/vnd.dvb.ipdcdftnotifaccess +# application/vnd.dvb.ipdcesgaccess +# application/vnd.dvb.ipdcesgaccess2 +# application/vnd.dvb.ipdcesgpdd +# application/vnd.dvb.ipdcroaming +# application/vnd.dvb.iptv.alfec-base +# application/vnd.dvb.iptv.alfec-enhancement +# application/vnd.dvb.notif-aggregate-root+xml +# application/vnd.dvb.notif-container+xml +# application/vnd.dvb.notif-generic+xml +# application/vnd.dvb.notif-ia-msglist+xml +# application/vnd.dvb.notif-ia-registration-request+xml +# application/vnd.dvb.notif-ia-registration-response+xml +# application/vnd.dvb.notif-init+xml +# application/vnd.dvb.pfr +application/vnd.dvb.service svc +# application/vnd.dxr +application/vnd.dynageo geo +# application/vnd.easykaraoke.cdgdownload +# application/vnd.ecdis-update +application/vnd.ecowin.chart mag +# application/vnd.ecowin.filerequest +# application/vnd.ecowin.fileupdate +# application/vnd.ecowin.series +# application/vnd.ecowin.seriesrequest +# application/vnd.ecowin.seriesupdate +# application/vnd.emclient.accessrequest+xml +application/vnd.enliven nml +# application/vnd.eprints.data+xml +application/vnd.epson.esf esf +application/vnd.epson.msf msf +application/vnd.epson.quickanime qam +application/vnd.epson.salt slt +application/vnd.epson.ssf ssf +# application/vnd.ericsson.quickcall +application/vnd.eszigno3+xml es3 et3 +# application/vnd.etsi.aoc+xml +# application/vnd.etsi.cug+xml +# application/vnd.etsi.iptvcommand+xml +# application/vnd.etsi.iptvdiscovery+xml +# application/vnd.etsi.iptvprofile+xml +# application/vnd.etsi.iptvsad-bc+xml +# application/vnd.etsi.iptvsad-cod+xml +# application/vnd.etsi.iptvsad-npvr+xml +# application/vnd.etsi.iptvservice+xml +# application/vnd.etsi.iptvsync+xml +# application/vnd.etsi.iptvueprofile+xml +# application/vnd.etsi.mcid+xml +# application/vnd.etsi.overload-control-policy-dataset+xml +# application/vnd.etsi.sci+xml +# application/vnd.etsi.simservs+xml +# application/vnd.etsi.tsl+xml +# application/vnd.etsi.tsl.der +# application/vnd.eudora.data +application/vnd.ezpix-album ez2 +application/vnd.ezpix-package ez3 +# application/vnd.f-secure.mobile +application/vnd.fdf fdf +application/vnd.fdsn.mseed mseed +application/vnd.fdsn.seed seed dataless +# application/vnd.ffsns +# application/vnd.fints +application/vnd.flographit gph +application/vnd.fluxtime.clip ftc +# application/vnd.font-fontforge-sfd +application/vnd.framemaker fm frame maker book +application/vnd.frogans.fnc fnc +application/vnd.frogans.ltf ltf +application/vnd.fsc.weblaunch fsc +application/vnd.fujitsu.oasys oas +application/vnd.fujitsu.oasys2 oa2 +application/vnd.fujitsu.oasys3 oa3 +application/vnd.fujitsu.oasysgp fg5 +application/vnd.fujitsu.oasysprs bh2 +# application/vnd.fujixerox.art-ex +# application/vnd.fujixerox.art4 +# application/vnd.fujixerox.hbpl +application/vnd.fujixerox.ddd ddd +application/vnd.fujixerox.docuworks xdw +application/vnd.fujixerox.docuworks.binder xbd +# application/vnd.fut-misnet +application/vnd.fuzzysheet fzs +application/vnd.genomatix.tuxedo txd +# application/vnd.geocube+xml +application/vnd.geogebra.file ggb +application/vnd.geogebra.tool ggt +application/vnd.geometry-explorer gex gre +application/vnd.geonext gxt +application/vnd.geoplan g2w +application/vnd.geospace g3w +# application/vnd.globalplatform.card-content-mgt +# application/vnd.globalplatform.card-content-mgt-response +application/vnd.gmx gmx +application/vnd.google-earth.kml+xml kml +application/vnd.google-earth.kmz kmz +application/vnd.grafeq gqf gqs +# application/vnd.gridmp +application/vnd.groove-account gac +application/vnd.groove-help ghf +application/vnd.groove-identity-message gim +application/vnd.groove-injector grv +application/vnd.groove-tool-message gtm +application/vnd.groove-tool-template tpl +application/vnd.groove-vcard vcg +# application/vnd.hal+json +application/vnd.hal+xml hal +application/vnd.handheld-entertainment+xml zmm +application/vnd.hbci hbci +# application/vnd.hcl-bireports +application/vnd.hhe.lesson-player les +application/vnd.hp-hpgl hpgl +application/vnd.hp-hpid hpid +application/vnd.hp-hps hps +application/vnd.hp-jlyt jlt +application/vnd.hp-pcl pcl +application/vnd.hp-pclxl pclxl +# application/vnd.httphone +application/vnd.hydrostatix.sof-data sfd-hdstx +# application/vnd.hzn-3d-crossword +# application/vnd.ibm.afplinedata +# application/vnd.ibm.electronic-media +application/vnd.ibm.minipay mpy +application/vnd.ibm.modcap afp listafp list3820 +application/vnd.ibm.rights-management irm +application/vnd.ibm.secure-container sc +application/vnd.iccprofile icc icm +application/vnd.igloader igl +application/vnd.immervision-ivp ivp +application/vnd.immervision-ivu ivu +# application/vnd.informedcontrol.rms+xml +# application/vnd.informix-visionary +# application/vnd.infotech.project +# application/vnd.infotech.project+xml +# application/vnd.innopath.wamp.notification +application/vnd.insors.igm igm +application/vnd.intercon.formnet xpw xpx +application/vnd.intergeo i2g +# application/vnd.intertrust.digibox +# application/vnd.intertrust.nncp +application/vnd.intu.qbo qbo +application/vnd.intu.qfx qfx +# application/vnd.iptc.g2.conceptitem+xml +# application/vnd.iptc.g2.knowledgeitem+xml +# application/vnd.iptc.g2.newsitem+xml +# application/vnd.iptc.g2.newsmessage+xml +# application/vnd.iptc.g2.packageitem+xml +# application/vnd.iptc.g2.planningitem+xml +application/vnd.ipunplugged.rcprofile rcprofile +application/vnd.irepository.package+xml irp +application/vnd.is-xpr xpr +application/vnd.isac.fcs fcs +application/vnd.jam jam +# application/vnd.japannet-directory-service +# application/vnd.japannet-jpnstore-wakeup +# application/vnd.japannet-payment-wakeup +# application/vnd.japannet-registration +# application/vnd.japannet-registration-wakeup +# application/vnd.japannet-setstore-wakeup +# application/vnd.japannet-verification +# application/vnd.japannet-verification-wakeup +application/vnd.jcp.javame.midlet-rms rms +application/vnd.jisp jisp +application/vnd.joost.joda-archive joda +application/vnd.kahootz ktz ktr +application/vnd.kde.karbon karbon +application/vnd.kde.kchart chrt +application/vnd.kde.kformula kfo +application/vnd.kde.kivio flw +application/vnd.kde.kontour kon +application/vnd.kde.kpresenter kpr kpt +application/vnd.kde.kspread ksp +application/vnd.kde.kword kwd kwt +application/vnd.kenameaapp htke +application/vnd.kidspiration kia +application/vnd.kinar kne knp +application/vnd.koan skp skd skt skm +application/vnd.kodak-descriptor sse +application/vnd.las.las+xml lasxml +# application/vnd.liberty-request+xml +application/vnd.llamagraphics.life-balance.desktop lbd +application/vnd.llamagraphics.life-balance.exchange+xml lbe +application/vnd.lotus-1-2-3 123 +application/vnd.lotus-approach apr +application/vnd.lotus-freelance pre +application/vnd.lotus-notes nsf +application/vnd.lotus-organizer org +application/vnd.lotus-screencam scm +application/vnd.lotus-wordpro lwp +application/vnd.macports.portpkg portpkg +# application/vnd.marlin.drm.actiontoken+xml +# application/vnd.marlin.drm.conftoken+xml +# application/vnd.marlin.drm.license+xml +# application/vnd.marlin.drm.mdcf +application/vnd.mcd mcd +application/vnd.medcalcdata mc1 +application/vnd.mediastation.cdkey cdkey +# application/vnd.meridian-slingshot +application/vnd.mfer mwf +application/vnd.mfmp mfm +application/vnd.micrografx.flo flo +application/vnd.micrografx.igx igx +application/vnd.mif mif +# application/vnd.minisoft-hp3000-save +# application/vnd.mitsubishi.misty-guard.trustweb +application/vnd.mobius.daf daf +application/vnd.mobius.dis dis +application/vnd.mobius.mbk mbk +application/vnd.mobius.mqy mqy +application/vnd.mobius.msl msl +application/vnd.mobius.plc plc +application/vnd.mobius.txf txf +application/vnd.mophun.application mpn +application/vnd.mophun.certificate mpc +# application/vnd.motorola.flexsuite +# application/vnd.motorola.flexsuite.adsi +# application/vnd.motorola.flexsuite.fis +# application/vnd.motorola.flexsuite.gotap +# application/vnd.motorola.flexsuite.kmr +# application/vnd.motorola.flexsuite.ttc +# application/vnd.motorola.flexsuite.wem +# application/vnd.motorola.iprm +application/vnd.mozilla.xul+xml xul +application/vnd.ms-artgalry cil +# application/vnd.ms-asf +application/vnd.ms-cab-compressed cab +# application/vnd.ms-color.iccprofile +application/vnd.ms-excel xls xlm xla xlc xlt xlw +application/vnd.ms-excel.addin.macroenabled.12 xlam +application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb +application/vnd.ms-excel.sheet.macroenabled.12 xlsm +application/vnd.ms-excel.template.macroenabled.12 xltm +application/vnd.ms-fontobject eot +application/vnd.ms-htmlhelp chm +application/vnd.ms-ims ims +application/vnd.ms-lrm lrm +# application/vnd.ms-office.activex+xml +application/vnd.ms-officetheme thmx +# application/vnd.ms-opentype +# application/vnd.ms-package.obfuscated-opentype +application/vnd.ms-pki.seccat cat +application/vnd.ms-pki.stl stl +# application/vnd.ms-playready.initiator+xml +application/vnd.ms-powerpoint ppt pps pot +application/vnd.ms-powerpoint.addin.macroenabled.12 ppam +application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm +application/vnd.ms-powerpoint.slide.macroenabled.12 sldm +application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm +application/vnd.ms-powerpoint.template.macroenabled.12 potm +# application/vnd.ms-printing.printticket+xml +application/vnd.ms-project mpp mpt +# application/vnd.ms-tnef +# application/vnd.ms-wmdrm.lic-chlg-req +# application/vnd.ms-wmdrm.lic-resp +# application/vnd.ms-wmdrm.meter-chlg-req +# application/vnd.ms-wmdrm.meter-resp +application/vnd.ms-word.document.macroenabled.12 docm +application/vnd.ms-word.template.macroenabled.12 dotm +application/vnd.ms-works wps wks wcm wdb +application/vnd.ms-wpl wpl +application/vnd.ms-xpsdocument xps +application/vnd.mseq mseq +# application/vnd.msign +# application/vnd.multiad.creator +# application/vnd.multiad.creator.cif +# application/vnd.music-niff +application/vnd.musician mus +application/vnd.muvee.style msty +application/vnd.mynfc taglet +# application/vnd.ncd.control +# application/vnd.ncd.reference +# application/vnd.nervana +# application/vnd.netfpx +application/vnd.neurolanguage.nlu nlu +application/vnd.nitf ntf nitf +application/vnd.noblenet-directory nnd +application/vnd.noblenet-sealer nns +application/vnd.noblenet-web nnw +# application/vnd.nokia.catalogs +# application/vnd.nokia.conml+wbxml +# application/vnd.nokia.conml+xml +# application/vnd.nokia.isds-radio-presets +# application/vnd.nokia.iptv.config+xml +# application/vnd.nokia.landmark+wbxml +# application/vnd.nokia.landmark+xml +# application/vnd.nokia.landmarkcollection+xml +# application/vnd.nokia.n-gage.ac+xml +application/vnd.nokia.n-gage.data ngdat +application/vnd.nokia.n-gage.symbian.install n-gage +# application/vnd.nokia.ncd +# application/vnd.nokia.pcd+wbxml +# application/vnd.nokia.pcd+xml +application/vnd.nokia.radio-preset rpst +application/vnd.nokia.radio-presets rpss +application/vnd.novadigm.edm edm +application/vnd.novadigm.edx edx +application/vnd.novadigm.ext ext +# application/vnd.ntt-local.file-transfer +# application/vnd.ntt-local.sip-ta_remote +# application/vnd.ntt-local.sip-ta_tcp_stream +application/vnd.oasis.opendocument.chart odc +application/vnd.oasis.opendocument.chart-template otc +application/vnd.oasis.opendocument.database odb +application/vnd.oasis.opendocument.formula odf +application/vnd.oasis.opendocument.formula-template odft +application/vnd.oasis.opendocument.graphics odg +application/vnd.oasis.opendocument.graphics-template otg +application/vnd.oasis.opendocument.image odi +application/vnd.oasis.opendocument.image-template oti +application/vnd.oasis.opendocument.presentation odp +application/vnd.oasis.opendocument.presentation-template otp +application/vnd.oasis.opendocument.spreadsheet ods +application/vnd.oasis.opendocument.spreadsheet-template ots +application/vnd.oasis.opendocument.text odt +application/vnd.oasis.opendocument.text-master odm +application/vnd.oasis.opendocument.text-template ott +application/vnd.oasis.opendocument.text-web oth +# application/vnd.obn +# application/vnd.oftn.l10n+json +# application/vnd.oipf.contentaccessdownload+xml +# application/vnd.oipf.contentaccessstreaming+xml +# application/vnd.oipf.cspg-hexbinary +# application/vnd.oipf.dae.svg+xml +# application/vnd.oipf.dae.xhtml+xml +# application/vnd.oipf.mippvcontrolmessage+xml +# application/vnd.oipf.pae.gem +# application/vnd.oipf.spdiscovery+xml +# application/vnd.oipf.spdlist+xml +# application/vnd.oipf.ueprofile+xml +# application/vnd.oipf.userprofile+xml +application/vnd.olpc-sugar xo +# application/vnd.oma-scws-config +# application/vnd.oma-scws-http-request +# application/vnd.oma-scws-http-response +# application/vnd.oma.bcast.associated-procedure-parameter+xml +# application/vnd.oma.bcast.drm-trigger+xml +# application/vnd.oma.bcast.imd+xml +# application/vnd.oma.bcast.ltkm +# application/vnd.oma.bcast.notification+xml +# application/vnd.oma.bcast.provisioningtrigger +# application/vnd.oma.bcast.sgboot +# application/vnd.oma.bcast.sgdd+xml +# application/vnd.oma.bcast.sgdu +# application/vnd.oma.bcast.simple-symbol-container +# application/vnd.oma.bcast.smartcard-trigger+xml +# application/vnd.oma.bcast.sprov+xml +# application/vnd.oma.bcast.stkm +# application/vnd.oma.cab-address-book+xml +# application/vnd.oma.cab-feature-handler+xml +# application/vnd.oma.cab-pcc+xml +# application/vnd.oma.cab-user-prefs+xml +# application/vnd.oma.dcd +# application/vnd.oma.dcdc +application/vnd.oma.dd2+xml dd2 +# application/vnd.oma.drm.risd+xml +# application/vnd.oma.group-usage-list+xml +# application/vnd.oma.pal+xml +# application/vnd.oma.poc.detailed-progress-report+xml +# application/vnd.oma.poc.final-report+xml +# application/vnd.oma.poc.groups+xml +# application/vnd.oma.poc.invocation-descriptor+xml +# application/vnd.oma.poc.optimized-progress-report+xml +# application/vnd.oma.push +# application/vnd.oma.scidm.messages+xml +# application/vnd.oma.xcap-directory+xml +# application/vnd.omads-email+xml +# application/vnd.omads-file+xml +# application/vnd.omads-folder+xml +# application/vnd.omaloc-supl-init +application/vnd.openofficeorg.extension oxt +# application/vnd.openxmlformats-officedocument.custom-properties+xml +# application/vnd.openxmlformats-officedocument.customxmlproperties+xml +# application/vnd.openxmlformats-officedocument.drawing+xml +# application/vnd.openxmlformats-officedocument.drawingml.chart+xml +# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml +# application/vnd.openxmlformats-officedocument.extended-properties+xml +# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml +# application/vnd.openxmlformats-officedocument.presentationml.comments+xml +# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml +# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml +# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml +application/vnd.openxmlformats-officedocument.presentationml.presentation pptx +# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml +application/vnd.openxmlformats-officedocument.presentationml.slide sldx +# application/vnd.openxmlformats-officedocument.presentationml.slide+xml +# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml +# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml +application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx +# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml +# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml +# application/vnd.openxmlformats-officedocument.presentationml.tags+xml +application/vnd.openxmlformats-officedocument.presentationml.template potx +# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx +# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml +application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx +# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml +# application/vnd.openxmlformats-officedocument.theme+xml +# application/vnd.openxmlformats-officedocument.themeoverride+xml +# application/vnd.openxmlformats-officedocument.vmldrawing +# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml +application/vnd.openxmlformats-officedocument.wordprocessingml.document docx +# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml +application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx +# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml +# application/vnd.openxmlformats-package.core-properties+xml +# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml +# application/vnd.openxmlformats-package.relationships+xml +# application/vnd.quobject-quoxdocument +# application/vnd.osa.netdeploy +application/vnd.osgeo.mapguide.package mgp +# application/vnd.osgi.bundle +application/vnd.osgi.dp dp +application/vnd.osgi.subsystem esa +# application/vnd.otps.ct-kip+xml +application/vnd.palm pdb pqa oprc +# application/vnd.paos.xml +application/vnd.pawaafile paw +application/vnd.pg.format str +application/vnd.pg.osasli ei6 +# application/vnd.piaccess.application-licence +application/vnd.picsel efif +application/vnd.pmi.widget wg +# application/vnd.poc.group-advertisement+xml +application/vnd.pocketlearn plf +application/vnd.powerbuilder6 pbd +# application/vnd.powerbuilder6-s +# application/vnd.powerbuilder7 +# application/vnd.powerbuilder7-s +# application/vnd.powerbuilder75 +# application/vnd.powerbuilder75-s +# application/vnd.preminet +application/vnd.previewsystems.box box +application/vnd.proteus.magazine mgz +application/vnd.publishare-delta-tree qps +application/vnd.pvi.ptid1 ptid +# application/vnd.pwg-multiplexed +# application/vnd.pwg-xhtml-print+xml +# application/vnd.qualcomm.brew-app-res +application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb +# application/vnd.radisys.moml+xml +# application/vnd.radisys.msml+xml +# application/vnd.radisys.msml-audit+xml +# application/vnd.radisys.msml-audit-conf+xml +# application/vnd.radisys.msml-audit-conn+xml +# application/vnd.radisys.msml-audit-dialog+xml +# application/vnd.radisys.msml-audit-stream+xml +# application/vnd.radisys.msml-conf+xml +# application/vnd.radisys.msml-dialog+xml +# application/vnd.radisys.msml-dialog-base+xml +# application/vnd.radisys.msml-dialog-fax-detect+xml +# application/vnd.radisys.msml-dialog-fax-sendrecv+xml +# application/vnd.radisys.msml-dialog-group+xml +# application/vnd.radisys.msml-dialog-speech+xml +# application/vnd.radisys.msml-dialog-transform+xml +# application/vnd.rainstor.data +# application/vnd.rapid +application/vnd.realvnc.bed bed +application/vnd.recordare.musicxml mxl +application/vnd.recordare.musicxml+xml musicxml +# application/vnd.renlearn.rlprint +application/vnd.rig.cryptonote cryptonote +application/vnd.rim.cod cod +application/vnd.rn-realmedia rm +application/vnd.rn-realmedia-vbr rmvb +application/vnd.route66.link66+xml link66 +# application/vnd.rs-274x +# application/vnd.ruckus.download +# application/vnd.s3sms +application/vnd.sailingtracker.track st +# application/vnd.sbm.cid +# application/vnd.sbm.mid2 +# application/vnd.scribus +# application/vnd.sealed.3df +# application/vnd.sealed.csf +# application/vnd.sealed.doc +# application/vnd.sealed.eml +# application/vnd.sealed.mht +# application/vnd.sealed.net +# application/vnd.sealed.ppt +# application/vnd.sealed.tiff +# application/vnd.sealed.xls +# application/vnd.sealedmedia.softseal.html +# application/vnd.sealedmedia.softseal.pdf +application/vnd.seemail see +application/vnd.sema sema +application/vnd.semd semd +application/vnd.semf semf +application/vnd.shana.informed.formdata ifm +application/vnd.shana.informed.formtemplate itp +application/vnd.shana.informed.interchange iif +application/vnd.shana.informed.package ipk +application/vnd.simtech-mindmapper twd twds +application/vnd.smaf mmf +# application/vnd.smart.notebook +application/vnd.smart.teacher teacher +# application/vnd.software602.filler.form+xml +# application/vnd.software602.filler.form-xml-zip +application/vnd.solent.sdkm+xml sdkm sdkd +application/vnd.spotfire.dxp dxp +application/vnd.spotfire.sfs sfs +# application/vnd.sss-cod +# application/vnd.sss-dtf +# application/vnd.sss-ntf +application/vnd.stardivision.calc sdc +application/vnd.stardivision.draw sda +application/vnd.stardivision.impress sdd +application/vnd.stardivision.math smf +application/vnd.stardivision.writer sdw vor +application/vnd.stardivision.writer-global sgl +application/vnd.stepmania.package smzip +application/vnd.stepmania.stepchart sm +# application/vnd.street-stream +application/vnd.sun.xml.calc sxc +application/vnd.sun.xml.calc.template stc +application/vnd.sun.xml.draw sxd +application/vnd.sun.xml.draw.template std +application/vnd.sun.xml.impress sxi +application/vnd.sun.xml.impress.template sti +application/vnd.sun.xml.math sxm +application/vnd.sun.xml.writer sxw +application/vnd.sun.xml.writer.global sxg +application/vnd.sun.xml.writer.template stw +# application/vnd.sun.wadl+xml +application/vnd.sus-calendar sus susp +application/vnd.svd svd +# application/vnd.swiftview-ics +application/vnd.symbian.install sis sisx +application/vnd.syncml+xml xsm +application/vnd.syncml.dm+wbxml bdm +application/vnd.syncml.dm+xml xdm +# application/vnd.syncml.dm.notification +# application/vnd.syncml.ds.notification +application/vnd.tao.intent-module-archive tao +application/vnd.tcpdump.pcap pcap cap dmp +application/vnd.tmobile-livetv tmo +application/vnd.trid.tpt tpt +application/vnd.triscape.mxs mxs +application/vnd.trueapp tra +# application/vnd.truedoc +# application/vnd.ubisoft.webplayer +application/vnd.ufdl ufd ufdl +application/vnd.uiq.theme utz +application/vnd.umajin umj +application/vnd.unity unityweb +application/vnd.uoml+xml uoml +# application/vnd.uplanet.alert +# application/vnd.uplanet.alert-wbxml +# application/vnd.uplanet.bearer-choice +# application/vnd.uplanet.bearer-choice-wbxml +# application/vnd.uplanet.cacheop +# application/vnd.uplanet.cacheop-wbxml +# application/vnd.uplanet.channel +# application/vnd.uplanet.channel-wbxml +# application/vnd.uplanet.list +# application/vnd.uplanet.list-wbxml +# application/vnd.uplanet.listcmd +# application/vnd.uplanet.listcmd-wbxml +# application/vnd.uplanet.signal +application/vnd.vcx vcx +# application/vnd.vd-study +# application/vnd.vectorworks +# application/vnd.verimatrix.vcas +# application/vnd.vidsoft.vidconference +application/vnd.visio vsd vst vss vsw +application/vnd.visionary vis +# application/vnd.vividence.scriptfile +application/vnd.vsf vsf +# application/vnd.wap.sic +# application/vnd.wap.slc +application/vnd.wap.wbxml wbxml +application/vnd.wap.wmlc wmlc +application/vnd.wap.wmlscriptc wmlsc +application/vnd.webturbo wtb +# application/vnd.wfa.wsc +# application/vnd.wmc +# application/vnd.wmf.bootstrap +# application/vnd.wolfram.mathematica +# application/vnd.wolfram.mathematica.package +application/vnd.wolfram.player nbp +application/vnd.wordperfect wpd +application/vnd.wqd wqd +# application/vnd.wrq-hp3000-labelled +application/vnd.wt.stf stf +# application/vnd.wv.csp+wbxml +# application/vnd.wv.csp+xml +# application/vnd.wv.ssp+xml +application/vnd.xara xar +application/vnd.xfdl xfdl +# application/vnd.xfdl.webform +# application/vnd.xmi+xml +# application/vnd.xmpie.cpkg +# application/vnd.xmpie.dpkg +# application/vnd.xmpie.plan +# application/vnd.xmpie.ppkg +# application/vnd.xmpie.xlim +application/vnd.yamaha.hv-dic hvd +application/vnd.yamaha.hv-script hvs +application/vnd.yamaha.hv-voice hvp +application/vnd.yamaha.openscoreformat osf +application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg +# application/vnd.yamaha.remote-setup +application/vnd.yamaha.smaf-audio saf +application/vnd.yamaha.smaf-phrase spf +# application/vnd.yamaha.through-ngn +# application/vnd.yamaha.tunnel-udpencap +application/vnd.yellowriver-custom-menu cmp +application/vnd.zul zir zirz +application/vnd.zzazz.deck+xml zaz +application/voicexml+xml vxml +# application/vq-rtcpxr +# application/watcherinfo+xml +# application/whoispp-query +# application/whoispp-response +application/widget wgt +application/winhlp hlp +# application/wita +# application/wordperfect5.1 +application/wsdl+xml wsdl +application/wspolicy+xml wspolicy +application/x-7z-compressed 7z +application/x-abiword abw +application/x-ace-compressed ace +# application/x-amf +application/x-apple-diskimage dmg +application/x-authorware-bin aab x32 u32 vox +application/x-authorware-map aam +application/x-authorware-seg aas +application/x-bcpio bcpio +application/x-bittorrent torrent +application/x-blorb blb blorb +application/x-bzip bz +application/x-bzip2 bz2 boz +application/x-cbr cbr cba cbt cbz cb7 +application/x-cdlink vcd +application/x-cfs-compressed cfs +application/x-chat chat +application/x-chess-pgn pgn +application/x-conference nsc +# application/x-compress +application/x-cpio cpio +application/x-csh csh +application/x-debian-package deb udeb +application/x-dgc-compressed dgc +application/x-director dir dcr dxr cst cct cxt w3d fgd swa +application/x-doom wad +application/x-dtbncx+xml ncx +application/x-dtbook+xml dtb +application/x-dtbresource+xml res +application/x-dvi dvi +application/x-envoy evy +application/x-eva eva +application/x-font-bdf bdf +# application/x-font-dos +# application/x-font-framemaker +application/x-font-ghostscript gsf +# application/x-font-libgrx +application/x-font-linux-psf psf +application/x-font-otf otf +application/x-font-pcf pcf +application/x-font-snf snf +# application/x-font-speedo +# application/x-font-sunos-news +application/x-font-ttf ttf ttc +application/x-font-type1 pfa pfb pfm afm +application/font-woff woff +# application/x-font-vfont +application/x-freearc arc +application/x-futuresplash spl +application/x-gca-compressed gca +application/x-glulx ulx +application/x-gnumeric gnumeric +application/x-gramps-xml gramps +application/x-gtar gtar +# application/x-gzip +application/x-hdf hdf +application/x-install-instructions install +application/x-iso9660-image iso +application/x-java-jnlp-file jnlp +application/x-latex latex +application/x-lzh-compressed lzh lha +application/x-mie mie +application/x-mobipocket-ebook prc mobi +application/x-ms-application application +application/x-ms-shortcut lnk +application/x-ms-wmd wmd +application/x-ms-wmz wmz +application/x-ms-xbap xbap +application/x-msaccess mdb +application/x-msbinder obd +application/x-mscardfile crd +application/x-msclip clp +application/x-msdownload exe dll com bat msi +application/x-msmediaview mvb m13 m14 +application/x-msmetafile wmf wmz emf emz +application/x-msmoney mny +application/x-mspublisher pub +application/x-msschedule scd +application/x-msterminal trm +application/x-mswrite wri +application/x-netcdf nc cdf +application/x-nzb nzb +application/x-pkcs12 p12 pfx +application/x-pkcs7-certificates p7b spc +application/x-pkcs7-certreqresp p7r +application/x-rar-compressed rar +application/x-research-info-systems ris +application/x-sh sh +application/x-shar shar +application/x-shockwave-flash swf +application/x-silverlight-app xap +application/x-sql sql +application/x-stuffit sit +application/x-stuffitx sitx +application/x-subrip srt +application/x-sv4cpio sv4cpio +application/x-sv4crc sv4crc +application/x-t3vm-image t3 +application/x-tads gam +application/x-tar tar +application/x-tcl tcl +application/x-tex tex +application/x-tex-tfm tfm +application/x-texinfo texinfo texi +application/x-tgif obj +application/x-ustar ustar +application/x-wais-source src +application/x-x509-ca-cert der crt +application/x-xfig fig +application/x-xliff+xml xlf +application/x-xpinstall xpi +application/x-xz xz +application/x-zmachine z1 z2 z3 z4 z5 z6 z7 z8 +# application/x400-bp +application/xaml+xml xaml +# application/xcap-att+xml +# application/xcap-caps+xml +application/xcap-diff+xml xdf +# application/xcap-el+xml +# application/xcap-error+xml +# application/xcap-ns+xml +# application/xcon-conference-info-diff+xml +# application/xcon-conference-info+xml +application/xenc+xml xenc +application/xhtml+xml xhtml xht +# application/xhtml-voice+xml +application/xml xml xsl +application/xml-dtd dtd +# application/xml-external-parsed-entity +# application/xmpp+xml +application/xop+xml xop +application/xproc+xml xpl +application/xslt+xml xslt +application/xspf+xml xspf +application/xv+xml mxml xhvml xvml xvm +application/yang yang +application/yin+xml yin +application/zip zip +# audio/1d-interleaved-parityfec +# audio/32kadpcm +# audio/3gpp +# audio/3gpp2 +# audio/ac3 +audio/adpcm adp +# audio/amr +# audio/amr-wb +# audio/amr-wb+ +# audio/asc +# audio/atrac-advanced-lossless +# audio/atrac-x +# audio/atrac3 +audio/basic au snd +# audio/bv16 +# audio/bv32 +# audio/clearmode +# audio/cn +# audio/dat12 +# audio/dls +# audio/dsr-es201108 +# audio/dsr-es202050 +# audio/dsr-es202211 +# audio/dsr-es202212 +# audio/dv +# audio/dvi4 +# audio/eac3 +# audio/evrc +# audio/evrc-qcp +# audio/evrc0 +# audio/evrc1 +# audio/evrcb +# audio/evrcb0 +# audio/evrcb1 +# audio/evrcwb +# audio/evrcwb0 +# audio/evrcwb1 +# audio/example +# audio/fwdred +# audio/g719 +# audio/g722 +# audio/g7221 +# audio/g723 +# audio/g726-16 +# audio/g726-24 +# audio/g726-32 +# audio/g726-40 +# audio/g728 +# audio/g729 +# audio/g7291 +# audio/g729d +# audio/g729e +# audio/gsm +# audio/gsm-efr +# audio/gsm-hr-08 +# audio/ilbc +# audio/ip-mr_v2.5 +# audio/isac +# audio/l16 +# audio/l20 +# audio/l24 +# audio/l8 +# audio/lpc +audio/midi mid midi kar rmi +# audio/mobile-xmf +audio/mp4 mp4a +# audio/mp4a-latm +# audio/mpa +# audio/mpa-robust +audio/mpeg mpga mp2 mp2a mp3 m2a m3a +# audio/mpeg4-generic +# audio/musepack +audio/ogg oga ogg spx +# audio/opus +# audio/parityfec +# audio/pcma +# audio/pcma-wb +# audio/pcmu-wb +# audio/pcmu +# audio/prs.sid +# audio/qcelp +# audio/red +# audio/rtp-enc-aescm128 +# audio/rtp-midi +# audio/rtx +audio/s3m s3m +audio/silk sil +# audio/smv +# audio/smv0 +# audio/smv-qcp +# audio/sp-midi +# audio/speex +# audio/t140c +# audio/t38 +# audio/telephone-event +# audio/tone +# audio/uemclip +# audio/ulpfec +# audio/vdvi +# audio/vmr-wb +# audio/vnd.3gpp.iufp +# audio/vnd.4sb +# audio/vnd.audiokoz +# audio/vnd.celp +# audio/vnd.cisco.nse +# audio/vnd.cmles.radio-events +# audio/vnd.cns.anp1 +# audio/vnd.cns.inf1 +audio/vnd.dece.audio uva uvva +audio/vnd.digital-winds eol +# audio/vnd.dlna.adts +# audio/vnd.dolby.heaac.1 +# audio/vnd.dolby.heaac.2 +# audio/vnd.dolby.mlp +# audio/vnd.dolby.mps +# audio/vnd.dolby.pl2 +# audio/vnd.dolby.pl2x +# audio/vnd.dolby.pl2z +# audio/vnd.dolby.pulse.1 +audio/vnd.dra dra +audio/vnd.dts dts +audio/vnd.dts.hd dtshd +# audio/vnd.dvb.file +# audio/vnd.everad.plj +# audio/vnd.hns.audio +audio/vnd.lucent.voice lvp +audio/vnd.ms-playready.media.pya pya +# audio/vnd.nokia.mobile-xmf +# audio/vnd.nortel.vbk +audio/vnd.nuera.ecelp4800 ecelp4800 +audio/vnd.nuera.ecelp7470 ecelp7470 +audio/vnd.nuera.ecelp9600 ecelp9600 +# audio/vnd.octel.sbc +# audio/vnd.qcelp +# audio/vnd.rhetorex.32kadpcm +audio/vnd.rip rip +# audio/vnd.sealedmedia.softseal.mpeg +# audio/vnd.vmx.cvsd +# audio/vorbis +# audio/vorbis-config +audio/webm weba +audio/x-aac aac +audio/x-aiff aif aiff aifc +audio/x-caf caf +audio/x-flac flac +audio/x-matroska mka +audio/x-mpegurl m3u +audio/x-ms-wax wax +audio/x-ms-wma wma +audio/x-pn-realaudio ram ra +audio/x-pn-realaudio-plugin rmp +# audio/x-tta +audio/x-wav wav +audio/xm xm +chemical/x-cdx cdx +chemical/x-cif cif +chemical/x-cmdf cmdf +chemical/x-cml cml +chemical/x-csml csml +# chemical/x-pdb +chemical/x-xyz xyz +image/bmp bmp +image/cgm cgm +# image/example +# image/fits +image/g3fax g3 +image/gif gif +image/ief ief +# image/jp2 +image/jpeg jpeg jpg jpe +# image/jpm +# image/jpx +image/ktx ktx +# image/naplps +image/png png +image/prs.btif btif +# image/prs.pti +image/sgi sgi +image/svg+xml svg svgz +# image/t38 +image/tiff tiff tif +# image/tiff-fx +image/vnd.adobe.photoshop psd +# image/vnd.cns.inf2 +image/vnd.dece.graphic uvi uvvi uvg uvvg +image/vnd.dvb.subtitle sub +image/vnd.djvu djvu djv +image/vnd.dwg dwg +image/vnd.dxf dxf +image/vnd.fastbidsheet fbs +image/vnd.fpx fpx +image/vnd.fst fst +image/vnd.fujixerox.edmics-mmr mmr +image/vnd.fujixerox.edmics-rlc rlc +# image/vnd.globalgraphics.pgb +# image/vnd.microsoft.icon +# image/vnd.mix +image/vnd.ms-modi mdi +image/vnd.ms-photo wdp +image/vnd.net-fpx npx +# image/vnd.radiance +# image/vnd.sealed.png +# image/vnd.sealedmedia.softseal.gif +# image/vnd.sealedmedia.softseal.jpg +# image/vnd.svf +image/vnd.wap.wbmp wbmp +image/vnd.xiff xif +image/webp webp +image/x-3ds 3ds +image/x-cmu-raster ras +image/x-cmx cmx +image/x-freehand fh fhc fh4 fh5 fh7 +image/x-icon ico +image/x-mrsid-image sid +image/x-pcx pcx +image/x-pict pic pct +image/x-portable-anymap pnm +image/x-portable-bitmap pbm +image/x-portable-graymap pgm +image/x-portable-pixmap ppm +image/x-rgb rgb +image/x-tga tga +image/x-xbitmap xbm +image/x-xpixmap xpm +image/x-xwindowdump xwd +# message/cpim +# message/delivery-status +# message/disposition-notification +# message/example +# message/external-body +# message/feedback-report +# message/global +# message/global-delivery-status +# message/global-disposition-notification +# message/global-headers +# message/http +# message/imdn+xml +# message/news +# message/partial +message/rfc822 eml mime +# message/s-http +# message/sip +# message/sipfrag +# message/tracking-status +# message/vnd.si.simp +# model/example +model/iges igs iges +model/mesh msh mesh silo +model/vnd.collada+xml dae +model/vnd.dwf dwf +# model/vnd.flatland.3dml +model/vnd.gdl gdl +# model/vnd.gs-gdl +# model/vnd.gs.gdl +model/vnd.gtw gtw +# model/vnd.moml+xml +model/vnd.mts mts +# model/vnd.parasolid.transmit.binary +# model/vnd.parasolid.transmit.text +model/vnd.vtu vtu +model/vrml wrl vrml +model/x3d+binary x3db x3dbz +model/x3d+vrml x3dv x3dvz +model/x3d+xml x3d x3dz +# multipart/alternative +# multipart/appledouble +# multipart/byteranges +# multipart/digest +# multipart/encrypted +# multipart/example +# multipart/form-data +# multipart/header-set +# multipart/mixed +# multipart/parallel +# multipart/related +# multipart/report +# multipart/signed +# multipart/voice-message +# text/1d-interleaved-parityfec +text/cache-manifest appcache +text/calendar ics ifb +text/css css +text/csv csv +# text/directory +# text/dns +# text/ecmascript +# text/enriched +# text/example +# text/fwdred +text/html html htm +# text/javascript +text/n3 n3 +# text/parityfec +text/plain txt text conf def list log in +# text/prs.fallenstein.rst +text/prs.lines.tag dsc +# text/vnd.radisys.msml-basic-layout +# text/red +# text/rfc822-headers +text/richtext rtx +# text/rtf +# text/rtp-enc-aescm128 +# text/rtx +text/sgml sgml sgm +# text/t140 +text/tab-separated-values tsv +text/troff t tr roff man me ms +text/turtle ttl +# text/ulpfec +text/uri-list uri uris urls +text/vcard vcard +# text/vnd.abc +text/vnd.curl curl +text/vnd.curl.dcurl dcurl +text/vnd.curl.scurl scurl +text/vnd.curl.mcurl mcurl +# text/vnd.dmclientscript +text/vnd.dvb.subtitle sub +# text/vnd.esmertec.theme-descriptor +text/vnd.fly fly +text/vnd.fmi.flexstor flx +text/vnd.graphviz gv +text/vnd.in3d.3dml 3dml +text/vnd.in3d.spot spot +# text/vnd.iptc.newsml +# text/vnd.iptc.nitf +# text/vnd.latex-z +# text/vnd.motorola.reflex +# text/vnd.ms-mediapackage +# text/vnd.net2phone.commcenter.command +# text/vnd.si.uricatalogue +text/vnd.sun.j2me.app-descriptor jad +# text/vnd.trolltech.linguist +# text/vnd.wap.si +# text/vnd.wap.sl +text/vnd.wap.wml wml +text/vnd.wap.wmlscript wmls +text/x-asm s asm +text/x-c c cc cxx cpp h hh dic +text/x-fortran f for f77 f90 +text/x-java-source java +text/x-opml opml +text/x-pascal p pas +text/x-nfo nfo +text/x-setext etx +text/x-sfv sfv +text/x-uuencode uu +text/x-vcalendar vcs +text/x-vcard vcf +# text/xml +# text/xml-external-parsed-entity +# video/1d-interleaved-parityfec +video/3gpp 3gp +# video/3gpp-tt +video/3gpp2 3g2 +# video/bmpeg +# video/bt656 +# video/celb +# video/dv +# video/example +video/h261 h261 +video/h263 h263 +# video/h263-1998 +# video/h263-2000 +video/h264 h264 +# video/h264-rcdo +# video/h264-svc +video/jpeg jpgv +# video/jpeg2000 +video/jpm jpm jpgm +video/mj2 mj2 mjp2 +# video/mp1s +# video/mp2p +video/mp2t ts +video/mp4 mp4 mp4v mpg4 m4s +# video/mp4v-es +video/mpeg mpeg mpg mpe m1v m2v +# video/mpeg4-generic +# video/mpv +# video/nv +video/ogg ogv +# video/parityfec +# video/pointer +video/quicktime qt mov +# video/raw +# video/rtp-enc-aescm128 +# video/rtx +# video/smpte292m +# video/ulpfec +# video/vc1 +# video/vnd.cctv +video/vnd.dece.hd uvh uvvh +video/vnd.dece.mobile uvm uvvm +# video/vnd.dece.mp4 +video/vnd.dece.pd uvp uvvp +video/vnd.dece.sd uvs uvvs +video/vnd.dece.video uvv uvvv +# video/vnd.directv.mpeg +# video/vnd.directv.mpeg-tts +# video/vnd.dlna.mpeg-tts +video/vnd.dvb.file dvb +video/vnd.fvt fvt +# video/vnd.hns.video +# video/vnd.iptvforum.1dparityfec-1010 +# video/vnd.iptvforum.1dparityfec-2005 +# video/vnd.iptvforum.2dparityfec-1010 +# video/vnd.iptvforum.2dparityfec-2005 +# video/vnd.iptvforum.ttsavc +# video/vnd.iptvforum.ttsmpeg2 +# video/vnd.motorola.video +# video/vnd.motorola.videop +video/vnd.mpegurl mxu m4u +video/vnd.ms-playready.media.pyv pyv +# video/vnd.nokia.interleaved-multimedia +# video/vnd.nokia.videovoip +# video/vnd.objectvideo +# video/vnd.sealed.mpeg1 +# video/vnd.sealed.mpeg4 +# video/vnd.sealed.swf +# video/vnd.sealedmedia.softseal.mov +video/vnd.uvvu.mp4 uvu uvvu +video/vnd.vivo viv +video/webm webm +video/x-f4v f4v +video/x-fli fli +video/x-flv flv +video/x-m4v m4v +video/x-matroska mkv mk3d mks +video/x-mng mng +video/x-ms-asf asf asx +video/x-ms-vob vob +video/x-ms-wm wm +video/x-ms-wmv wmv +video/x-ms-wmx wmx +video/x-ms-wvx wvx +video/x-msvideo avi +video/x-sgi-movie movie +video/x-smv smv +x-conference/x-cooltalk ice \ No newline at end of file diff --git a/test/ch/cyberduck/ui/controller/KeychainTest.cs b/core/src/test/csharp/ch/cyberduck/core/SystemCertificateStoreTest.cs similarity index 94% rename from test/ch/cyberduck/ui/controller/KeychainTest.cs rename to core/src/test/csharp/ch/cyberduck/core/SystemCertificateStoreTest.cs index c8232ac00e..29142de3bf 100644 --- a/test/ch/cyberduck/ui/controller/KeychainTest.cs +++ b/core/src/test/csharp/ch/cyberduck/core/SystemCertificateStoreTest.cs @@ -1,168 +1,168 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Text; -using ch.cyberduck.core; -using ch.cyberduck.core.preferences; -using Ch.Cyberduck.Ui.Core; -using java.io; -using java.security.cert; -using java.util; -using NUnit.Framework; -using Console = System.Console; -using List = java.util.List; - -namespace Ch.Cyberduck.Ui.Controller -{ - [TestFixture] - public class KeychainTest - { - private const string ExpiredSelfSigned = - "-----BEGIN CERTIFICATE-----\n" + "MIICnzCCAggCCQD/H0dWJzmTsjANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UEBhMC\n" + - "Q0gxDTALBgNVBAgMBEJlcm4xDTALBgNVBAcMBEJlcm4xFTATBgNVBAoMDGl0ZXJh\n" + - "dGUgR21iSDELMAkGA1UECwwCSVQxIDAeBgNVBAMMF3Rlc3Quc2VjdXJlLmV4YW1w\n" + - "bGUuY29tMSAwHgYJKoZIhvcNAQkBFhF5dmVzQGN5YmVyZHVjay5jaDAeFw0xMjEy\n" + - "MTkwNjU3MTZaFw0xMjEyMjAwNjU3MTZaMIGTMQswCQYDVQQGEwJDSDENMAsGA1UE\n" + - "CAwEQmVybjENMAsGA1UEBwwEQmVybjEVMBMGA1UECgwMaXRlcmF0ZSBHbWJIMQsw\n" + - "CQYDVQQLDAJJVDEgMB4GA1UEAwwXdGVzdC5zZWN1cmUuZXhhbXBsZS5jb20xIDAe\n" + - "BgkqhkiG9w0BCQEWEXl2ZXNAY3liZXJkdWNrLmNoMIGfMA0GCSqGSIb3DQEBAQUA\n" + - "A4GNADCBiQKBgQCnHajku6ggmIzMHylTBrGRLZrlGR76wHOHvdGxHlZusAeh0wBV\n" + - "k26qtRiU4cajTy4o5QavIsqtEkm0FZ1GXHdCEqOSE3ms4d22QEDfypE+6gorNp1G\n" + - "XNnZ8ecYus68J7LyEtLvu9QADCsIXhN+485gWcjVcGtkCgSE35yNa/LlMwIDAQAB\n" + - "MA0GCSqGSIb3DQEBBQUAA4GBAHU/rdAcd8PyouChNOMo/7hB0hdKVPbXFC6iQKxF\n" + - "RgDGXYev9EDCSVC6ywhOU9t4Sr6bY8qvBoxc2CEjmAKcWZ+mjCTqtvpVLV7GDUlE\n" + - "3ut1tSLWoFdgttiWv3pIAgdRxg+SSwea1S0rWF3vba3kB3IrkEYhZRYneqY8hczD\n" + "7T5f\n" + - "-----END CERTIFICATE-----\n"; - - [Test] - public void ExpiredSelfSignedCertificate() - { - CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); - InputStream inputStream = new ByteArrayInputStream(Encoding.ASCII.GetBytes(ExpiredSelfSigned)); - X509Certificate cert = (X509Certificate) certFactory.generateCertificate(inputStream); - const string hostName = "foo.secure.example.com"; - List certs = new ArrayList(); - certs.add(cert); - try - { - //no exception registered yet - CertificateStoreFactory.get().isTrusted(hostName, certs); - Assert.Fail(); - } - catch (EntryPointNotFoundException exception) - { - } - //register exception - PreferencesFactory.get() - .setProperty(hostName + ".certificate.accept", - SystemCertificateStore.ConvertCertificate(cert).SubjectName.Name); - Assert.IsTrue(CertificateStoreFactory.get().isTrusted(hostName, certs)); - } - - [Test] - public void UntrustedSelfSignedCertificate() - { - String host = "-----BEGIN CERTIFICATE-----\n" + - "MIIEcDCCAligAwIBAgIEAP+quzANBgkqhkiG9w0BAQUFADA2MQswCQYDVQQGEwJE\n" + - "RTELMAkGA1UECAwCQlcxDTALBgNVBAoMBFNZU1MxCzAJBgNVBAMMAkNBMB4XDTE0\n" + - "MDQxMDA3Mzg0MFoXDTE1MDQxMDA3Mzg0MFowQTELMAkGA1UEBhMCREUxCzAJBgNV\n" + - "BAgMAkJXMQ0wCwYDVQQKDARTWVNTMRYwFAYDVQQDDA13d3cuZ29vZ2xlLmNoMIIB\n" + - "IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8P4nPfLKOXtl+uOOUF7YO+mH\n" + - "ee9hYHuDLusgyDpLEQAqnBHtBi6RCP5XmArpunNfTF8yls5QdyjKogJ6nXafzlGa\n" + - "If1fe6iI/OMp9oUBdqJh2mU9OfZm5he9sLobunrVWqlm5fIbSRZkhZe5o8Dutcsa\n" + - "p74TClaHbXTcsVbw6/aScXibj5ARIK71JgtPFUNp1QanF78GmXUu2MOROaz2duUF\n" + - "LxzJJCxnNElNkt663LUjtgfbcEgKQDZ0k0uNchAyDHDIkNr6FmilgBmt1LI0sjdH\n" + - "llY6Z/r8waH9ztTqlf78jG1AhmUSTbBNtYU92rqdRqPa21WBbhaEhNtFg8EZywID\n" + - "AQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVy\n" + - "YXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQU48hgd+eZiIeWwiDJ3XPIb6PI+0gw\n" + - "HwYDVR0jBBgwFoAUWc4WPc0maSLX2fTyx9YLvqqPs8YwDQYJKoZIhvcNAQEFBQAD\n" + - "ggIBAA8T4LM8FKvRQh+/UWmKkMFFMVcSav2UYYHwbDQ1G+38lKT9G1pddslA450H\n" + - "XkaOZnRIb31+bgIK/WRt16sowt/wxK34p0kphKS7ubszF6SQI/rUF7Z/44MBnyng\n" + - "CsJhO+hu9vk7qTBSx7wL5MI9lsmalzwmQhEnNBKyYxxwBKRpZzlns6bX/nysfIPd\n" + - "lJ28Q01VfuFI4LZn6XoCgP3a5KMbvkFCcoQ0BWaJZUJXj8Taunn52+4yd02CojXJ\n" + - "6jnM8asmeZLME7k4BZrYGzmEZWqEWlArltpo315/lEdgPvmmIsSMn3N3wi8IJnlj\n" + - "1LRzDy3HF2m8Kk/3HPYorUKItEFdZ2yBHJd8SvrsoahoyqLN3rPkQ6TXFg5GD6XF\n" + - "76GUMSbr92sjKtWI4fta5CZi2iRnQEhiuAW9mvmsr9/g9fHAvNbs8QjLfYxdG8KW\n" + - "oLQIuTllXuQRiWJ6X33ea4seNDpD53I7rhZNhDxkns7YdEy9IsJjHJganVBY+/3f\n" + - "15bn34p3g3mQlsnLA2WMX2ZyLrVWaEt82iIZKAFzHjO38fANno6IXh0HP1xy6uQd\n" + - "37SZV2h0nUlJYw483RIUcJghkEBkKnIJInb6wGKXSpEZE2ObDJV0cH9vJflygh+G\n" + - "P6IvpzJ9dGNO8yNuyxvxcG7C+yDjgWjXkHqBYDS8lY9rM0yk\n" + "-----END CERTIFICATE-----\n"; - - String ca = "-----BEGIN CERTIFICATE-----\n" + - "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\n" + "ndIN\n" + - "-----END CERTIFICATE-----\n"; - - - CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); - InputStream his = new ByteArrayInputStream(Encoding.ASCII.GetBytes(host)); - X509Certificate hostCert = (X509Certificate) certFactory.generateCertificate(his); - InputStream cais = new ByteArrayInputStream(Encoding.ASCII.GetBytes(ca)); - X509Certificate caCert = (X509Certificate) certFactory.generateCertificate(cais); - - - const string hostName = "www.google.ch"; - List certs = new ArrayList(); - certs.add(hostCert); - certs.add(caCert); - - try - { - //no exception registered yet - CertificateStoreFactory.get().isTrusted(hostName, certs); - Assert.Fail(); - } - catch (EntryPointNotFoundException exception) - { - Console.WriteLine("TEST"); - } - //register exception - PreferencesFactory.get() - .setProperty(hostName + ".certificate.accept", - SystemCertificateStore.ConvertCertificate(hostCert).SubjectName.Name); - Assert.IsTrue(CertificateStoreFactory.get().isTrusted(hostName, certs)); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Text; +using ch.cyberduck.core; +using ch.cyberduck.core.preferences; +using Ch.Cyberduck.Ui.Core; +using java.io; +using java.security.cert; +using java.util; +using NUnit.Framework; +using Console = System.Console; +using List = java.util.List; + +namespace Ch.Cyberduck.Ui.Controller +{ + [TestFixture] + public class SystemCertificateStoreTest + { + private const string ExpiredSelfSigned = + "-----BEGIN CERTIFICATE-----\n" + "MIICnzCCAggCCQD/H0dWJzmTsjANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UEBhMC\n" + + "Q0gxDTALBgNVBAgMBEJlcm4xDTALBgNVBAcMBEJlcm4xFTATBgNVBAoMDGl0ZXJh\n" + + "dGUgR21iSDELMAkGA1UECwwCSVQxIDAeBgNVBAMMF3Rlc3Quc2VjdXJlLmV4YW1w\n" + + "bGUuY29tMSAwHgYJKoZIhvcNAQkBFhF5dmVzQGN5YmVyZHVjay5jaDAeFw0xMjEy\n" + + "MTkwNjU3MTZaFw0xMjEyMjAwNjU3MTZaMIGTMQswCQYDVQQGEwJDSDENMAsGA1UE\n" + + "CAwEQmVybjENMAsGA1UEBwwEQmVybjEVMBMGA1UECgwMaXRlcmF0ZSBHbWJIMQsw\n" + + "CQYDVQQLDAJJVDEgMB4GA1UEAwwXdGVzdC5zZWN1cmUuZXhhbXBsZS5jb20xIDAe\n" + + "BgkqhkiG9w0BCQEWEXl2ZXNAY3liZXJkdWNrLmNoMIGfMA0GCSqGSIb3DQEBAQUA\n" + + "A4GNADCBiQKBgQCnHajku6ggmIzMHylTBrGRLZrlGR76wHOHvdGxHlZusAeh0wBV\n" + + "k26qtRiU4cajTy4o5QavIsqtEkm0FZ1GXHdCEqOSE3ms4d22QEDfypE+6gorNp1G\n" + + "XNnZ8ecYus68J7LyEtLvu9QADCsIXhN+485gWcjVcGtkCgSE35yNa/LlMwIDAQAB\n" + + "MA0GCSqGSIb3DQEBBQUAA4GBAHU/rdAcd8PyouChNOMo/7hB0hdKVPbXFC6iQKxF\n" + + "RgDGXYev9EDCSVC6ywhOU9t4Sr6bY8qvBoxc2CEjmAKcWZ+mjCTqtvpVLV7GDUlE\n" + + "3ut1tSLWoFdgttiWv3pIAgdRxg+SSwea1S0rWF3vba3kB3IrkEYhZRYneqY8hczD\n" + "7T5f\n" + + "-----END CERTIFICATE-----\n"; + + [Test] + public void ExpiredSelfSignedCertificate() + { + CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); + InputStream inputStream = new ByteArrayInputStream(Encoding.ASCII.GetBytes(ExpiredSelfSigned)); + X509Certificate cert = (X509Certificate) certFactory.generateCertificate(inputStream); + const string hostName = "foo.secure.example.com"; + List certs = new ArrayList(); + certs.add(cert); + try + { + //no exception registered yet + new SystemCertificateStore().isTrusted(hostName, certs); + Assert.Fail(); + } + catch (EntryPointNotFoundException exception) + { + } + //register exception + PreferencesFactory.get() + .setProperty(hostName + ".certificate.accept", + SystemCertificateStore.ConvertCertificate(cert).SubjectName.Name); + Assert.IsTrue(new SystemCertificateStore().isTrusted(hostName, certs)); + } + + [Test] + public void UntrustedSelfSignedCertificate() + { + String host = "-----BEGIN CERTIFICATE-----\n" + + "MIIEcDCCAligAwIBAgIEAP+quzANBgkqhkiG9w0BAQUFADA2MQswCQYDVQQGEwJE\n" + + "RTELMAkGA1UECAwCQlcxDTALBgNVBAoMBFNZU1MxCzAJBgNVBAMMAkNBMB4XDTE0\n" + + "MDQxMDA3Mzg0MFoXDTE1MDQxMDA3Mzg0MFowQTELMAkGA1UEBhMCREUxCzAJBgNV\n" + + "BAgMAkJXMQ0wCwYDVQQKDARTWVNTMRYwFAYDVQQDDA13d3cuZ29vZ2xlLmNoMIIB\n" + + "IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8P4nPfLKOXtl+uOOUF7YO+mH\n" + + "ee9hYHuDLusgyDpLEQAqnBHtBi6RCP5XmArpunNfTF8yls5QdyjKogJ6nXafzlGa\n" + + "If1fe6iI/OMp9oUBdqJh2mU9OfZm5he9sLobunrVWqlm5fIbSRZkhZe5o8Dutcsa\n" + + "p74TClaHbXTcsVbw6/aScXibj5ARIK71JgtPFUNp1QanF78GmXUu2MOROaz2duUF\n" + + "LxzJJCxnNElNkt663LUjtgfbcEgKQDZ0k0uNchAyDHDIkNr6FmilgBmt1LI0sjdH\n" + + "llY6Z/r8waH9ztTqlf78jG1AhmUSTbBNtYU92rqdRqPa21WBbhaEhNtFg8EZywID\n" + + "AQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVy\n" + + "YXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQU48hgd+eZiIeWwiDJ3XPIb6PI+0gw\n" + + "HwYDVR0jBBgwFoAUWc4WPc0maSLX2fTyx9YLvqqPs8YwDQYJKoZIhvcNAQEFBQAD\n" + + "ggIBAA8T4LM8FKvRQh+/UWmKkMFFMVcSav2UYYHwbDQ1G+38lKT9G1pddslA450H\n" + + "XkaOZnRIb31+bgIK/WRt16sowt/wxK34p0kphKS7ubszF6SQI/rUF7Z/44MBnyng\n" + + "CsJhO+hu9vk7qTBSx7wL5MI9lsmalzwmQhEnNBKyYxxwBKRpZzlns6bX/nysfIPd\n" + + "lJ28Q01VfuFI4LZn6XoCgP3a5KMbvkFCcoQ0BWaJZUJXj8Taunn52+4yd02CojXJ\n" + + "6jnM8asmeZLME7k4BZrYGzmEZWqEWlArltpo315/lEdgPvmmIsSMn3N3wi8IJnlj\n" + + "1LRzDy3HF2m8Kk/3HPYorUKItEFdZ2yBHJd8SvrsoahoyqLN3rPkQ6TXFg5GD6XF\n" + + "76GUMSbr92sjKtWI4fta5CZi2iRnQEhiuAW9mvmsr9/g9fHAvNbs8QjLfYxdG8KW\n" + + "oLQIuTllXuQRiWJ6X33ea4seNDpD53I7rhZNhDxkns7YdEy9IsJjHJganVBY+/3f\n" + + "15bn34p3g3mQlsnLA2WMX2ZyLrVWaEt82iIZKAFzHjO38fANno6IXh0HP1xy6uQd\n" + + "37SZV2h0nUlJYw483RIUcJghkEBkKnIJInb6wGKXSpEZE2ObDJV0cH9vJflygh+G\n" + + "P6IvpzJ9dGNO8yNuyxvxcG7C+yDjgWjXkHqBYDS8lY9rM0yk\n" + "-----END CERTIFICATE-----\n"; + + String ca = "-----BEGIN CERTIFICATE-----\n" + + "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\n" + "ndIN\n" + + "-----END CERTIFICATE-----\n"; + + + CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); + InputStream his = new ByteArrayInputStream(Encoding.ASCII.GetBytes(host)); + X509Certificate hostCert = (X509Certificate) certFactory.generateCertificate(his); + InputStream cais = new ByteArrayInputStream(Encoding.ASCII.GetBytes(ca)); + X509Certificate caCert = (X509Certificate) certFactory.generateCertificate(cais); + + + const string hostName = "www.google.ch"; + List certs = new ArrayList(); + certs.add(hostCert); + certs.add(caCert); + + try + { + //no exception registered yet + new SystemCertificateStore().isTrusted(hostName, certs); + Assert.Fail(); + } + catch (EntryPointNotFoundException exception) + { + Console.WriteLine("TEST"); + } + //register exception + PreferencesFactory.get() + .setProperty(hostName + ".certificate.accept", + SystemCertificateStore.ConvertCertificate(hostCert).SubjectName.Name); + Assert.IsTrue(new SystemCertificateStore().isTrusted(hostName, certs)); + } + } } \ No newline at end of file diff --git a/test/ch/cyberduck/core/ssl/HostnameVerifierTest.cs b/core/src/test/csharp/ch/cyberduck/core/ssl/HostnameVerifierTest.cs similarity index 96% rename from test/ch/cyberduck/core/ssl/HostnameVerifierTest.cs rename to core/src/test/csharp/ch/cyberduck/core/ssl/HostnameVerifierTest.cs index 93d62c8e5f..c9349da8ac 100644 --- a/test/ch/cyberduck/core/ssl/HostnameVerifierTest.cs +++ b/core/src/test/csharp/ch/cyberduck/core/ssl/HostnameVerifierTest.cs @@ -1,37 +1,37 @@ -// -// Copyright (c) 2010-2012 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using NUnit.Framework; - -namespace Ch.Cyberduck.Core.Ssl -{ - [TestFixture] - internal class HostnameVerifierTest - { - [SetUp] - public void Init() - { - } - - [Test] - public void WilcardCertificate() - { - Assert.True(HostnameVerifier.Match("foo.secure.example.com", "*.secure.example.com")); - } - } +// +// Copyright (c) 2010-2012 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using NUnit.Framework; + +namespace Ch.Cyberduck.Core.Ssl +{ + [TestFixture] + internal class HostnameVerifierTest + { + [SetUp] + public void Init() + { + } + + [Test] + public void WilcardCertificate() + { + Assert.True(HostnameVerifier.Match("foo.secure.example.com", "*.secure.example.com")); + } + } } \ No newline at end of file diff --git a/test/ch/cyberduck/ui/AbstractControllerTest.java b/core/src/test/java/ch/cyberduck/core/AbstractControllerTest.java similarity index 96% rename from test/ch/cyberduck/ui/AbstractControllerTest.java rename to core/src/test/java/ch/cyberduck/core/AbstractControllerTest.java index e6d643d51e..0e4bc7135a 100644 --- a/test/ch/cyberduck/ui/AbstractControllerTest.java +++ b/core/src/test/java/ch/cyberduck/core/AbstractControllerTest.java @@ -1,7 +1,5 @@ -package ch.cyberduck.ui; +package ch.cyberduck.core; -import ch.cyberduck.core.AbstractController; -import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.threading.AbstractBackgroundAction; import ch.cyberduck.core.threading.DefaultMainAction; diff --git a/test/ch/cyberduck/core/AbstractTestCase.java b/core/src/test/java/ch/cyberduck/core/AbstractTestCase.java similarity index 55% rename from test/ch/cyberduck/core/AbstractTestCase.java rename to core/src/test/java/ch/cyberduck/core/AbstractTestCase.java index 385bc785d0..dd94798f09 100644 --- a/test/ch/cyberduck/core/AbstractTestCase.java +++ b/core/src/test/java/ch/cyberduck/core/AbstractTestCase.java @@ -20,9 +20,6 @@ package ch.cyberduck.core; */ import ch.cyberduck.core.preferences.PreferencesFactory; -import ch.cyberduck.core.serializer.impl.dd.PlistDeserializer; -import ch.cyberduck.core.serializer.impl.dd.ProfilePlistReader; -import ch.cyberduck.core.test.PlatformAwareClassRunner; import ch.cyberduck.core.threading.ActionOperationBatcher; import ch.cyberduck.core.threading.ActionOperationBatcherFactory; @@ -34,29 +31,16 @@ import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; -import org.junit.runner.RunWith; import java.io.IOException; import java.io.InputStream; import java.security.Security; import java.util.Locale; import java.util.Properties; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.Callable; -import java.util.concurrent.CompletionService; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorCompletionService; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.LinkedBlockingQueue; - -import static org.junit.Assert.assertNotNull; /** * @version $Id$ */ -@RunWith(PlatformAwareClassRunner.class) public class AbstractTestCase { static { @@ -87,13 +71,11 @@ public class AbstractTestCase { public static void setup() throws Exception { Locale.setDefault(Locale.ENGLISH); PreferencesFactory.set(new MemoryPreferences()); - ProtocolFactory.register(); - final ProfilePlistReader reader = new ProfilePlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - final Profile profile = reader.read( - new Local("profiles/Rackspace US.cyberduckprofile") - ); - assertNotNull(profile); - ProtocolFactory.register(profile); + } + + @BeforeClass + public static void protocols() throws Exception { + ProtocolFactory.register(new TestProtocol()); } @Before @@ -106,27 +88,4 @@ public class AbstractTestCase { public void post() { pool.operate(); } - - protected void repeat(final Callable c, int repeat) throws InterruptedException, ExecutionException { - final ExecutorService service = Executors.newCachedThreadPool(); - final BlockingQueue> queue = new LinkedBlockingQueue>(); - final CompletionService completion = new ExecutorCompletionService(service, queue); - for(int i = 0; i < repeat; i++) { - completion.submit(new Callable() { - @Override - public T call() throws Exception { - final ActionOperationBatcher p = ActionOperationBatcherFactory.get(); - try { - return c.call(); - } - finally { - p.operate(); - } - } - }); - } - for(int i = 0; i < repeat; i++) { - queue.take().get(); - } - } } \ No newline at end of file diff --git a/test/ch/cyberduck/core/AclTest.java b/core/src/test/java/ch/cyberduck/core/AclTest.java similarity index 100% rename from test/ch/cyberduck/core/AclTest.java rename to core/src/test/java/ch/cyberduck/core/AclTest.java diff --git a/test/ch/cyberduck/core/ArchiveTest.java b/core/src/test/java/ch/cyberduck/core/ArchiveTest.java similarity index 100% rename from test/ch/cyberduck/core/ArchiveTest.java rename to core/src/test/java/ch/cyberduck/core/ArchiveTest.java diff --git a/test/ch/cyberduck/core/AttributedListTest.java b/core/src/test/java/ch/cyberduck/core/AttributedListTest.java similarity index 100% rename from test/ch/cyberduck/core/AttributedListTest.java rename to core/src/test/java/ch/cyberduck/core/AttributedListTest.java diff --git a/test/ch/cyberduck/core/AttributesTest.java b/core/src/test/java/ch/cyberduck/core/AttributesTest.java similarity index 100% rename from test/ch/cyberduck/core/AttributesTest.java rename to core/src/test/java/ch/cyberduck/core/AttributesTest.java diff --git a/test/ch/cyberduck/core/BookmarkCollectionTest.java b/core/src/test/java/ch/cyberduck/core/BookmarkCollectionTest.java similarity index 100% rename from test/ch/cyberduck/core/BookmarkCollectionTest.java rename to core/src/test/java/ch/cyberduck/core/BookmarkCollectionTest.java diff --git a/test/ch/cyberduck/core/BookmarkNameProviderTest.java b/core/src/test/java/ch/cyberduck/core/BookmarkNameProviderTest.java similarity index 71% rename from test/ch/cyberduck/core/BookmarkNameProviderTest.java rename to core/src/test/java/ch/cyberduck/core/BookmarkNameProviderTest.java index d8c8334531..5996597e1f 100644 --- a/test/ch/cyberduck/core/BookmarkNameProviderTest.java +++ b/core/src/test/java/ch/cyberduck/core/BookmarkNameProviderTest.java @@ -18,8 +18,6 @@ package ch.cyberduck.core; * feedback@cyberduck.ch */ -import ch.cyberduck.core.dav.DAVProtocol; - import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -31,11 +29,17 @@ public class BookmarkNameProviderTest extends AbstractTestCase { @Test public void testToString() throws Exception { - assertEquals("h – FTP", BookmarkNameProvider.toString(new Host("h"))); - assertEquals("h – WebDAV (HTTP)", BookmarkNameProvider.toString(new Host(new DAVProtocol(), "h"))); - assertEquals("h – WebDAV (HTTP)", BookmarkNameProvider.toString(new Host(new DAVProtocol(), "h", new Credentials("u", null)))); - assertEquals("u@h – WebDAV (HTTP)", BookmarkNameProvider.toString(new Host(new DAVProtocol(), "h", new Credentials("u", null)), true)); - assertEquals("h – WebDAV (HTTP)", BookmarkNameProvider.toString(new Host(new DAVProtocol(), "h", new Credentials(null, null)), true)); - assertEquals("h – WebDAV (HTTP)", BookmarkNameProvider.toString(new Host(new DAVProtocol(), "h", new Credentials("", null)), true)); + assertEquals("h – FTP", BookmarkNameProvider.toString(new Host(new TestProtocol(Scheme.ftp), "h"))); + final TestProtocol dav = new TestProtocol(Scheme.http) { + @Override + public String getName() { + return "WebDAV (HTTP)"; + } + }; + assertEquals("h – WebDAV (HTTP)", BookmarkNameProvider.toString(new Host(dav, "h"))); + assertEquals("h – WebDAV (HTTP)", BookmarkNameProvider.toString(new Host(dav, "h", new Credentials("u", null)))); + assertEquals("u@h – WebDAV (HTTP)", BookmarkNameProvider.toString(new Host(dav, "h", new Credentials("u", null)), true)); + assertEquals("h – WebDAV (HTTP)", BookmarkNameProvider.toString(new Host(dav, "h", new Credentials(null, null)), true)); + assertEquals("h – WebDAV (HTTP)", BookmarkNameProvider.toString(new Host(dav, "h", new Credentials("", null)), true)); } } diff --git a/test/ch/cyberduck/core/CertificateStoreFactoryTest.java b/core/src/test/java/ch/cyberduck/core/CertificateStoreFactoryTest.java similarity index 100% rename from test/ch/cyberduck/core/CertificateStoreFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/CertificateStoreFactoryTest.java diff --git a/test/ch/cyberduck/core/CollectionTest.java b/core/src/test/java/ch/cyberduck/core/CollectionTest.java similarity index 100% rename from test/ch/cyberduck/core/CollectionTest.java rename to core/src/test/java/ch/cyberduck/core/CollectionTest.java diff --git a/test/ch/cyberduck/core/CredentialsConfiguratorFactoryTest.java b/core/src/test/java/ch/cyberduck/core/CredentialsConfiguratorFactoryTest.java similarity index 91% rename from test/ch/cyberduck/core/CredentialsConfiguratorFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/CredentialsConfiguratorFactoryTest.java index 085399c2b7..7f9fad8d39 100644 --- a/test/ch/cyberduck/core/CredentialsConfiguratorFactoryTest.java +++ b/core/src/test/java/ch/cyberduck/core/CredentialsConfiguratorFactoryTest.java @@ -29,8 +29,8 @@ public class CredentialsConfiguratorFactoryTest extends AbstractTestCase { @Test public void testGet() throws Exception { - final Host host = new Host(ProtocolFactory.FTP); + final Host host = new Host(new TestProtocol()); final Credentials credentials = host.getCredentials(); - assertSame(credentials, CredentialsConfiguratorFactory.get(ProtocolFactory.FTP).configure(host)); + assertSame(credentials, CredentialsConfiguratorFactory.get(new TestProtocol()).configure(host)); } } diff --git a/test/ch/cyberduck/core/CredentialsTest.java b/core/src/test/java/ch/cyberduck/core/CredentialsTest.java similarity index 73% rename from test/ch/cyberduck/core/CredentialsTest.java rename to core/src/test/java/ch/cyberduck/core/CredentialsTest.java index dce400a20b..26b3a491fa 100644 --- a/test/ch/cyberduck/core/CredentialsTest.java +++ b/core/src/test/java/ch/cyberduck/core/CredentialsTest.java @@ -1,10 +1,7 @@ package ch.cyberduck.core; -import ch.cyberduck.core.dav.DAVProtocol; -import ch.cyberduck.core.ftp.FTPProtocol; import ch.cyberduck.core.local.LocalTouchFactory; import ch.cyberduck.core.preferences.PreferencesFactory; -import ch.cyberduck.core.sftp.SFTPProtocol; import org.junit.Test; @@ -50,56 +47,56 @@ public class CredentialsTest extends AbstractTestCase { @Test public void testValidateEmpty() throws Exception { Credentials c = new Credentials("user", ""); - assertTrue(c.validate(new FTPProtocol(), new LoginOptions())); - assertFalse(c.validate(new DAVProtocol(), new LoginOptions())); - assertTrue(c.validate(new SFTPProtocol(), new LoginOptions())); + assertTrue(c.validate(new TestProtocol(Scheme.ftp), new LoginOptions())); + assertFalse(c.validate(new TestProtocol(Scheme.http), new LoginOptions())); + assertTrue(c.validate(new TestProtocol(Scheme.sftp), new LoginOptions())); } @Test public void testValidateBlank() throws Exception { Credentials c = new Credentials("user", " "); - assertTrue(c.validate(new FTPProtocol(), new LoginOptions())); - assertTrue(c.validate(new DAVProtocol(), new LoginOptions())); - assertTrue(c.validate(new SFTPProtocol(), new LoginOptions())); + assertTrue(c.validate(new TestProtocol(Scheme.ftp), new LoginOptions())); + assertTrue(c.validate(new TestProtocol(Scheme.http), new LoginOptions())); + assertTrue(c.validate(new TestProtocol(Scheme.sftp), new LoginOptions())); } @Test public void testLoginReasonable() { Credentials credentials = new Credentials("guest", "changeme"); - assertTrue(credentials.validate(new FTPProtocol(), new LoginOptions())); + assertTrue(credentials.validate(new TestProtocol(Scheme.ftp), new LoginOptions())); } @Test public void testLoginWithoutUsername() { Credentials credentials = new Credentials(null, PreferencesFactory.get().getProperty("connection.login.anon.pass")); - assertFalse(credentials.validate(new FTPProtocol(), new LoginOptions())); + assertFalse(credentials.validate(new TestProtocol(Scheme.ftp), new LoginOptions())); } @Test public void testLoginWithoutPass() { Credentials credentials = new Credentials("guest", null); - assertFalse(credentials.validate(new FTPProtocol(), new LoginOptions())); + assertFalse(credentials.validate(new TestProtocol(Scheme.ftp), new LoginOptions())); } @Test public void testLoginWithoutEmptyPass() { Credentials credentials = new Credentials("guest", ""); - assertTrue(credentials.validate(new FTPProtocol(), new LoginOptions())); + assertTrue(credentials.validate(new TestProtocol(Scheme.ftp), new LoginOptions())); } @Test public void testLoginAnonymous1() { Credentials credentials = new Credentials(PreferencesFactory.get().getProperty("connection.login.anon.name"), PreferencesFactory.get().getProperty("connection.login.anon.pass")); - assertTrue(credentials.validate(new FTPProtocol(), new LoginOptions())); + assertTrue(credentials.validate(new TestProtocol(Scheme.ftp), new LoginOptions())); } @Test public void testLoginAnonymous2() { Credentials credentials = new Credentials(PreferencesFactory.get().getProperty("connection.login.anon.name"), null); - assertTrue(credentials.validate(new FTPProtocol(), new LoginOptions())); + assertTrue(credentials.validate(new TestProtocol(Scheme.ftp), new LoginOptions())); } /** @@ -109,7 +106,7 @@ public class CredentialsTest extends AbstractTestCase { public void testLogin1204() { Credentials credentials = new Credentials("cyberduck.login", "1seCret"); - assertTrue(credentials.validate(new FTPProtocol(), new LoginOptions())); + assertTrue(credentials.validate(new TestProtocol(Scheme.ftp), new LoginOptions())); assertEquals("cyberduck.login", credentials.getUsername()); assertEquals("1seCret", credentials.getPassword()); } diff --git a/test/ch/cyberduck/core/DefaultIOExceptionMappingServiceTest.java b/core/src/test/java/ch/cyberduck/core/DefaultIOExceptionMappingServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/DefaultIOExceptionMappingServiceTest.java rename to core/src/test/java/ch/cyberduck/core/DefaultIOExceptionMappingServiceTest.java diff --git a/test/ch/cyberduck/core/DefaultPathKindDetectorTest.java b/core/src/test/java/ch/cyberduck/core/DefaultPathKindDetectorTest.java similarity index 100% rename from test/ch/cyberduck/core/DefaultPathKindDetectorTest.java rename to core/src/test/java/ch/cyberduck/core/DefaultPathKindDetectorTest.java diff --git a/test/ch/cyberduck/core/DefaultPathReferenceTest.java b/core/src/test/java/ch/cyberduck/core/DefaultPathReferenceTest.java similarity index 100% rename from test/ch/cyberduck/core/DefaultPathReferenceTest.java rename to core/src/test/java/ch/cyberduck/core/DefaultPathReferenceTest.java diff --git a/test/ch/cyberduck/core/DescriptiveUrlBagTest.java b/core/src/test/java/ch/cyberduck/core/DescriptiveUrlBagTest.java similarity index 100% rename from test/ch/cyberduck/core/DescriptiveUrlBagTest.java rename to core/src/test/java/ch/cyberduck/core/DescriptiveUrlBagTest.java diff --git a/test/ch/cyberduck/core/DescriptiveUrlTest.java b/core/src/test/java/ch/cyberduck/core/DescriptiveUrlTest.java similarity index 100% rename from test/ch/cyberduck/core/DescriptiveUrlTest.java rename to core/src/test/java/ch/cyberduck/core/DescriptiveUrlTest.java diff --git a/test/ch/cyberduck/core/FolderBookmarkCollectionTest.java b/core/src/test/java/ch/cyberduck/core/FolderBookmarkCollectionTest.java similarity index 89% rename from test/ch/cyberduck/core/FolderBookmarkCollectionTest.java rename to core/src/test/java/ch/cyberduck/core/FolderBookmarkCollectionTest.java index 752468d3eb..7a66b28a0c 100644 --- a/test/ch/cyberduck/core/FolderBookmarkCollectionTest.java +++ b/core/src/test/java/ch/cyberduck/core/FolderBookmarkCollectionTest.java @@ -1,7 +1,6 @@ package ch.cyberduck.core; import ch.cyberduck.core.local.LocalTouchFactory; -import ch.cyberduck.core.test.NullLocal; import org.junit.Test; @@ -31,7 +30,7 @@ public class FolderBookmarkCollectionTest extends AbstractTestCase { "\tPort\n" + "\t21\n" + "\tProtocol\n" + - "\tftp\n" + + "\ttest\n" + "\tUUID\n" + "\t4d6b034c-8635-4e2f-93b1-7306ba22da22\n" + "\tUsername\n" + @@ -59,9 +58,9 @@ public class FolderBookmarkCollectionTest extends AbstractTestCase { assertNotNull(bookmark.getUuid()); } }; - final Host d = new Host("c"); - final Host b = new Host("b"); - final Host a = new Host("a"); + final Host d = new Host(new TestProtocol(), "c"); + final Host b = new Host(new TestProtocol(), "b"); + final Host a = new Host(new TestProtocol(), "a"); c.add(a); c.add(b); assertEquals(a, c.get(0)); @@ -75,9 +74,9 @@ public class FolderBookmarkCollectionTest extends AbstractTestCase { @Test public void testMove() throws Exception { FolderBookmarkCollection f = new FolderBookmarkCollection(new NullLocal("", "f")); - final Host a = new Host("a"); - final Host b = new Host("b"); - final Host c = new Host("c"); + final Host a = new Host(new TestProtocol(), "a"); + final Host b = new Host(new TestProtocol(), "b"); + final Host c = new Host(new TestProtocol(), "c"); f.add(a); f.add(b); f.add(c); diff --git a/test/ch/cyberduck/core/HeaderTest.java b/core/src/test/java/ch/cyberduck/core/HeaderTest.java similarity index 100% rename from test/ch/cyberduck/core/HeaderTest.java rename to core/src/test/java/ch/cyberduck/core/HeaderTest.java diff --git a/test/ch/cyberduck/core/HistoryCollectionTest.java b/core/src/test/java/ch/cyberduck/core/HistoryCollectionTest.java similarity index 98% rename from test/ch/cyberduck/core/HistoryCollectionTest.java rename to core/src/test/java/ch/cyberduck/core/HistoryCollectionTest.java index 7c48ef0afa..5398ba834e 100644 --- a/test/ch/cyberduck/core/HistoryCollectionTest.java +++ b/core/src/test/java/ch/cyberduck/core/HistoryCollectionTest.java @@ -39,7 +39,7 @@ public class HistoryCollectionTest extends AbstractTestCase { final CountDownLatch lock = new CountDownLatch(1); final CountDownLatch loaded = new CountDownLatch(1); final CountDownLatch exit = new CountDownLatch(1); - final HistoryCollection c = new HistoryCollection(new Local("test/ch/cyberduck/core/history")) { + final HistoryCollection c = new HistoryCollection(new Local("src/test/resources/history")) { @Override protected void sort() { if(loaded.getCount() == 0) { diff --git a/test/ch/cyberduck/core/HostTest.java b/core/src/test/java/ch/cyberduck/core/HostTest.java similarity index 69% rename from test/ch/cyberduck/core/HostTest.java rename to core/src/test/java/ch/cyberduck/core/HostTest.java index 254c3992e7..6b09bb65f1 100644 --- a/test/ch/cyberduck/core/HostTest.java +++ b/core/src/test/java/ch/cyberduck/core/HostTest.java @@ -19,7 +19,6 @@ package ch.cyberduck.core; */ import ch.cyberduck.core.preferences.PreferencesFactory; -import ch.cyberduck.core.sftp.SFTPProtocol; import org.junit.Test; @@ -32,7 +31,7 @@ public class HostTest extends AbstractTestCase { @Test public void testWebURL() { - Host host = new Host("test"); + Host host = new Host(new TestProtocol(), "test"); host.setWebURL("http://localhost/~dkocher"); assertEquals("http://localhost/~dkocher", host.getWebURL()); } @@ -40,10 +39,10 @@ public class HostTest extends AbstractTestCase { @Test public void testCreate1() { final Credentials credentials = new Credentials("u", "p"); - final Host bookmark = new Host(ProtocolFactory.SFTP, "h", 555, "/h", credentials); + final Host bookmark = new Host(new TestProtocol(), "h", 555, "/h", credentials); assertNotSame(credentials, bookmark.getCredentials()); assertEquals(555, bookmark.getPort()); - assertEquals(Scheme.sftp, bookmark.getProtocol().getScheme()); + assertEquals(Scheme.http, bookmark.getProtocol().getScheme()); assertEquals("/h", bookmark.getDefaultPath()); assertEquals("u", bookmark.getCredentials().getUsername()); assertEquals("p", bookmark.getCredentials().getPassword()); @@ -52,7 +51,7 @@ public class HostTest extends AbstractTestCase { @Test public void testCreate2() { final Credentials credentials = new Credentials("u", "p"); - final Host bookmark = new Host(ProtocolFactory.SFTP, "h", credentials); + final Host bookmark = new Host(new TestProtocol(Scheme.sftp), "h", credentials); assertNotSame(credentials, bookmark.getCredentials()); assertEquals(22, bookmark.getPort()); assertEquals(Scheme.sftp, bookmark.getProtocol().getScheme()); @@ -64,7 +63,7 @@ public class HostTest extends AbstractTestCase { @Test public void testConfigure() { final Credentials credentials = new Credentials("u", "p"); - final Host bookmark = new Host(ProtocolFactory.SFTP, "h", credentials); + final Host bookmark = new Host(new TestProtocol(Scheme.sftp), "h", credentials); bookmark.configure(new HostnameConfigurator() { @Override public String getHostname(String alias) { @@ -92,7 +91,7 @@ public class HostTest extends AbstractTestCase { @Test public void testTrim() { - final Host bookmark = new Host(ProtocolFactory.SFTP); + final Host bookmark = new Host(new TestProtocol(Scheme.sftp)); bookmark.setHostname("h "); assertEquals("h", bookmark.getHostname()); } @@ -100,14 +99,14 @@ public class HostTest extends AbstractTestCase { @Test public void testInvalidProtocol() { PreferencesFactory.get().setProperty("connection.protocol.default", "me"); - final Host bookmark = new Host("h"); - assertEquals(ProtocolFactory.FTP, bookmark.getProtocol()); + final Host bookmark = new Host(new TestProtocol(Scheme.ftp), "h"); + assertEquals(new TestProtocol(Scheme.ftp), bookmark.getProtocol()); PreferencesFactory.get().deleteProperty("connection.protocol.default"); } @Test public void testTrimDefaultPath() { - Host host = new Host("localhost"); + Host host = new Host(new TestProtocol(Scheme.ftp), "localhost"); host.setDefaultPath("p"); assertEquals("p", host.getDefaultPath()); host.setDefaultPath("/p"); @@ -126,17 +125,17 @@ public class HostTest extends AbstractTestCase { @Test public void testCompare() { - assertEquals(0, new Host("a", 33).compareTo(new Host("a", 33))); - assertEquals(1, new Host("a", 22).compareTo(new Host("a", 33))); - assertEquals(-1, new Host("a", 33).compareTo(new Host("a", 22))); + assertEquals(0, new Host(new TestProtocol(Scheme.ftp), "a", 33).compareTo(new Host(new TestProtocol(Scheme.ftp), "a", 33))); + assertEquals(-1, new Host(new TestProtocol(Scheme.ftp), "a", 22).compareTo(new Host(new TestProtocol(Scheme.ftp), "a", 33))); + assertEquals(1, new Host(new TestProtocol(Scheme.ftp), "a", 33).compareTo(new Host(new TestProtocol(Scheme.ftp), "a", 22))); - assertEquals(1, new Host(new SFTPProtocol(), "a", 22, new Credentials("u", null)) - .compareTo(new Host(new SFTPProtocol(), "a", 22, new Credentials()))); - assertEquals(-1, new Host(new SFTPProtocol(), "a", 22, new Credentials()) - .compareTo(new Host(new SFTPProtocol(), "a", 22, new Credentials("u", null)))); + assertEquals(1, new Host(new TestProtocol(Scheme.sftp), "a", 22, new Credentials("u", null)) + .compareTo(new Host(new TestProtocol(Scheme.sftp), "a", 22, new Credentials()))); + assertEquals(-1, new Host(new TestProtocol(Scheme.sftp), "a", 22, new Credentials()) + .compareTo(new Host(new TestProtocol(Scheme.sftp), "a", 22, new Credentials("u", null)))); - assertEquals(0, new Host("a").compareTo((new Host("a")))); - assertEquals(-1, new Host("a").compareTo((new Host("b")))); - assertEquals(1, new Host("b").compareTo((new Host("a")))); + assertEquals(0, new Host(new TestProtocol(Scheme.ftp), "a").compareTo((new Host(new TestProtocol(Scheme.ftp), "a")))); + assertEquals(-1, new Host(new TestProtocol(Scheme.ftp), "a").compareTo((new Host(new TestProtocol(Scheme.ftp), "b")))); + assertEquals(1, new Host(new TestProtocol(Scheme.ftp), "b").compareTo((new Host(new TestProtocol(Scheme.ftp), "a")))); } } diff --git a/test/ch/cyberduck/core/HostUrlProviderTest.java b/core/src/test/java/ch/cyberduck/core/HostUrlProviderTest.java similarity index 64% rename from test/ch/cyberduck/core/HostUrlProviderTest.java rename to core/src/test/java/ch/cyberduck/core/HostUrlProviderTest.java index a459bc9b85..c3dc42c0a3 100644 --- a/test/ch/cyberduck/core/HostUrlProviderTest.java +++ b/core/src/test/java/ch/cyberduck/core/HostUrlProviderTest.java @@ -1,7 +1,5 @@ package ch.cyberduck.core; -import ch.cyberduck.core.sftp.SFTPProtocol; - import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -13,15 +11,15 @@ public class HostUrlProviderTest extends AbstractTestCase { @Test public void testToUrl() { - assertEquals("sftp://user@localhost", new HostUrlProvider().get(new Host(new SFTPProtocol(), "localhost", new Credentials("user", "p")))); - assertEquals("sftp://localhost", new HostUrlProvider(false, false).get(new Host(new SFTPProtocol(), "localhost", new Credentials("user", "p")))); + assertEquals("sftp://user@localhost", new HostUrlProvider().get(new Host(new TestProtocol(Scheme.sftp), "localhost", new Credentials("user", "p")))); + assertEquals("sftp://localhost", new HostUrlProvider(false, false).get(new Host(new TestProtocol(Scheme.sftp), "localhost", new Credentials("user", "p")))); assertEquals("sftp://localhost:222", - new HostUrlProvider(false, false).get(new Host(new SFTPProtocol(), "localhost", 222))); + new HostUrlProvider(false, false).get(new Host(new TestProtocol(Scheme.sftp), "localhost", 222))); } @Test public void testPath() { - final Host h = new Host(new SFTPProtocol(), "localhost", new Credentials("user", "p")); + final Host h = new Host(new TestProtocol(Scheme.sftp), "localhost", new Credentials("user", "p")); h.setDefaultPath("p"); assertEquals("sftp://user@localhost/p", new HostUrlProvider(true, true).get(h)); } diff --git a/test/ch/cyberduck/core/IOKitSleepPreventerTest.java b/core/src/test/java/ch/cyberduck/core/IOKitSleepPreventerTest.java similarity index 82% rename from test/ch/cyberduck/core/IOKitSleepPreventerTest.java rename to core/src/test/java/ch/cyberduck/core/IOKitSleepPreventerTest.java index e48db7a325..d3ada5c8d1 100644 --- a/test/ch/cyberduck/core/IOKitSleepPreventerTest.java +++ b/core/src/test/java/ch/cyberduck/core/IOKitSleepPreventerTest.java @@ -1,7 +1,5 @@ package ch.cyberduck.core; -import ch.cyberduck.core.test.Depends; - import org.junit.Test; import static org.junit.Assert.assertNotNull; @@ -9,7 +7,6 @@ import static org.junit.Assert.assertNotNull; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class IOKitSleepPreventerTest extends AbstractTestCase { @Test diff --git a/test/ch/cyberduck/core/KeychainLoginServiceTest.java b/core/src/test/java/ch/cyberduck/core/KeychainLoginServiceTest.java similarity index 85% rename from test/ch/cyberduck/core/KeychainLoginServiceTest.java rename to core/src/test/java/ch/cyberduck/core/KeychainLoginServiceTest.java index 4d9d3b66b7..bd6b176f78 100644 --- a/test/ch/cyberduck/core/KeychainLoginServiceTest.java +++ b/core/src/test/java/ch/cyberduck/core/KeychainLoginServiceTest.java @@ -1,13 +1,9 @@ package ch.cyberduck.core; -import ch.cyberduck.core.dav.DAVProtocol; -import ch.cyberduck.core.dav.DAVSession; +import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.exception.LoginCanceledException; -import ch.cyberduck.core.ftp.FTPProtocol; -import ch.cyberduck.core.ftp.FTPSession; import ch.cyberduck.core.preferences.PreferencesFactory; -import ch.cyberduck.core.sftp.SFTPProtocol; -import ch.cyberduck.core.test.NullLocal; +import ch.cyberduck.core.threading.CancelCallback; import org.junit.Test; @@ -22,11 +18,16 @@ public class KeychainLoginServiceTest extends AbstractTestCase { @Test(expected = LoginCanceledException.class) public void testMessages() throws Exception { - final Host host = new Host(new DAVProtocol(), "test.cyberduck.ch", new Credentials( + final Host host = new Host(new TestProtocol(), "test.cyberduck.ch", new Credentials( PreferencesFactory.get().getProperty("connection.login.anon.name"), null )); host.setDefaultPath("/dav/basic"); - final DAVSession session = new DAVSession(host); + final Session session = new NullSession(host) { + @Override + public void login(final HostPasswordStore keychain, final LoginCallback prompt, final CancelCallback cancel, final Cache cache) throws BackgroundException { + throw new LoginCanceledException(); + } + }; session.open(new DisabledHostKeyCallback(), new DisabledTranscriptListener()); LoginService l = new KeychainLoginService(new DisabledLoginCallback(), new DisabledPasswordStore()); l.authenticate(session, PathCache.empty(), new ProgressListener() { @@ -52,16 +53,16 @@ public class KeychainLoginServiceTest extends AbstractTestCase { @Test(expected = LoginCanceledException.class) public void testCancel() throws Exception { LoginService l = new KeychainLoginService(new DisabledLoginCallback(), new DisabledPasswordStore()); - l.validate(new Host(new FTPProtocol(), "h"), "", new LoginOptions()); + l.validate(new Host(new TestProtocol(), "h"), "", new LoginOptions()); } @Test(expected = LoginCanceledException.class) public void testConnectionWarning() throws Exception { - final Host host = new Host(new FTPProtocol(), "test.cyberduck.ch", new Credentials( + final Host host = new Host(new TestProtocol(), "test.cyberduck.ch", new Credentials( "u", "p" )); final AtomicBoolean warned = new AtomicBoolean(false); - final FTPSession session = new FTPSession(host); + final Session session = new NullSession(host); session.open(new DisabledHostKeyCallback(), new DisabledTranscriptListener()); LoginService l = new KeychainLoginService(new DisabledLoginCallback() { @Override @@ -119,7 +120,7 @@ public class KeychainLoginServiceTest extends AbstractTestCase { return true; } }); - final Host host = new Host(new SFTPProtocol(), "test.cyberduck.ch", credentials); + final Host host = new Host(new TestProtocol(), "test.cyberduck.ch", credentials); l.validate(host, "m", new LoginOptions(host.getProtocol()).publickey(true)); assertTrue(keychain.get()); assertTrue(select.get()); @@ -144,7 +145,7 @@ public class KeychainLoginServiceTest extends AbstractTestCase { ); final Credentials credentials = new Credentials(); credentials.setUsername("u"); - final Host host = new Host(new SFTPProtocol(), "test.cyberduck.ch", credentials); + final Host host = new Host(new TestProtocol(), "test.cyberduck.ch", credentials); l.validate(host, "m", new LoginOptions(host.getProtocol())); assertTrue(keychain.get()); assertFalse(host.getCredentials().isSaved()); diff --git a/test/ch/cyberduck/core/KeychainStoreTest.java b/core/src/test/java/ch/cyberduck/core/KeychainStoreTest.java similarity index 94% rename from test/ch/cyberduck/core/KeychainStoreTest.java rename to core/src/test/java/ch/cyberduck/core/KeychainStoreTest.java index a15a744e92..ff2f763ab4 100644 --- a/test/ch/cyberduck/core/KeychainStoreTest.java +++ b/core/src/test/java/ch/cyberduck/core/KeychainStoreTest.java @@ -19,7 +19,6 @@ package ch.cyberduck.core; */ import ch.cyberduck.core.ssl.CertificateStoreX509KeyManager; -import ch.cyberduck.core.test.Depends; import org.junit.Ignore; import org.junit.Test; @@ -32,11 +31,9 @@ import java.util.Arrays; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; -@Depends(platform = Factory.Platform.Name.mac) public class KeychainStoreTest extends AbstractTestCase { @Test - @Ignore public void testGetAliasesForIssuerDN() throws Exception { final CertificateStoreX509KeyManager m = new CertificateStoreX509KeyManager(new DisabledCertificateStore(), KeyStore.getInstance("KeychainStore", "Apple")).init(); diff --git a/core/src/test/java/ch/cyberduck/core/KeychainTest.java b/core/src/test/java/ch/cyberduck/core/KeychainTest.java new file mode 100644 index 0000000000..c4f955e367 --- /dev/null +++ b/core/src/test/java/ch/cyberduck/core/KeychainTest.java @@ -0,0 +1,52 @@ +package ch.cyberduck.core; + +import org.junit.Ignore; +import org.junit.Test; + +import java.io.FileInputStream; +import java.io.InputStream; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; +import java.util.Collections; + +import static org.junit.Assert.*; + +/** + * @version $Id$ + */ +@Ignore +public class KeychainTest extends AbstractTestCase { + + @Test + public void testFindPassword() throws Exception { + final Keychain k = new Keychain(); + assertNull(k.getPassword("cyberduck.ch", "u")); + assertNull(k.getPassword(Scheme.http, 80, "cyberduck.ch", "u")); + } + + @Test + public void testTrustedEmptyCertificates() throws Exception { + final Keychain k = new Keychain(); + assertFalse(k.isTrusted("cyberduck.ch", Collections.emptyList())); + } + + @Test + public void testTrusted() throws Exception { + final Keychain k = new Keychain(); + InputStream inStream = new FileInputStream("src/test/resources/OXxlRDVcWqdPEvFm.cer"); + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + final X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream); + final boolean trusted = k.isTrusted("test.cyberduck.ch", Collections.singletonList(cert)); + assertTrue(trusted); + } + + @Test + public void testTrustedHostnameMismatch() throws Exception { + final Keychain k = new Keychain(); + InputStream inStream = new FileInputStream("src/test/resources/OXxlRDVcWqdPEvFm.cer"); + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + final X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream); + final boolean trusted = k.isTrusted("s.test.cyberduck.ch", Collections.singletonList(cert)); + assertTrue(trusted); + } +} diff --git a/test/ch/cyberduck/core/LimitedListProgressListenerTest.java b/core/src/test/java/ch/cyberduck/core/LimitedListProgressListenerTest.java similarity index 100% rename from test/ch/cyberduck/core/LimitedListProgressListenerTest.java rename to core/src/test/java/ch/cyberduck/core/LimitedListProgressListenerTest.java diff --git a/test/ch/cyberduck/core/LocaleFactoryTest.java b/core/src/test/java/ch/cyberduck/core/LocaleFactoryTest.java similarity index 100% rename from test/ch/cyberduck/core/LocaleFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/LocaleFactoryTest.java diff --git a/test/ch/cyberduck/core/LoginConnectionServiceTest.java b/core/src/test/java/ch/cyberduck/core/LoginConnectionServiceTest.java similarity index 71% rename from test/ch/cyberduck/core/LoginConnectionServiceTest.java rename to core/src/test/java/ch/cyberduck/core/LoginConnectionServiceTest.java index 84a94a8409..2a98648a15 100644 --- a/test/ch/cyberduck/core/LoginConnectionServiceTest.java +++ b/core/src/test/java/ch/cyberduck/core/LoginConnectionServiceTest.java @@ -1,22 +1,11 @@ package ch.cyberduck.core; -import ch.cyberduck.core.dav.DAVSSLProtocol; -import ch.cyberduck.core.dav.DAVSession; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.exception.ConnectionCanceledException; import ch.cyberduck.core.exception.LoginCanceledException; import ch.cyberduck.core.exception.LoginFailureException; -import ch.cyberduck.core.ftp.FTPProtocol; -import ch.cyberduck.core.ftp.FTPSession; import ch.cyberduck.core.proxy.DisabledProxyFinder; import ch.cyberduck.core.proxy.Proxy; -import ch.cyberduck.core.s3.S3Protocol; -import ch.cyberduck.core.s3.S3Session; -import ch.cyberduck.core.sftp.SFTPProtocol; -import ch.cyberduck.core.sftp.SFTPSession; -import ch.cyberduck.core.ssl.CertificateStoreX509TrustManager; -import ch.cyberduck.core.ssl.DefaultX509KeyManager; -import ch.cyberduck.core.ssl.TrustManagerHostnameCallback; import ch.cyberduck.core.threading.CancelCallback; import org.junit.Test; @@ -24,12 +13,8 @@ import org.junit.Test; import java.net.SocketException; import java.net.UnknownHostException; import java.security.PublicKey; -import java.security.cert.X509Certificate; -import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; -import net.schmizz.sshj.SSHClient; - import static org.junit.Assert.*; /** @@ -39,20 +24,30 @@ public class LoginConnectionServiceTest extends AbstractTestCase { @Test(expected = LoginCanceledException.class) public void testNoResolveForHTTPProxy() throws Exception { - final Session session = new S3Session(new Host(new S3Protocol(), "unknownhost.local", new Credentials("user", ""))); + final Session session = new NullSession(new Host(new TestProtocol(), "unknownhost.local", new Credentials("user", ""))) { + @Override + public boolean isConnected() { + return false; + } + }; final LoginConnectionService s = new LoginConnectionService(new DisabledLoginCallback(), new DisabledHostKeyCallback(), new DisabledPasswordStore(), new DisabledProgressListener(), new DisabledTranscriptListener(), new DisabledProxyFinder() { - @Override - public Proxy find(final Host target) { - return new Proxy(Proxy.Type.HTTP, "proxy.local", 6666); - } + @Override + public Proxy find(final Host target) { + return new Proxy(Proxy.Type.HTTP, "proxy.local", 6666); + } }); s.check(session, PathCache.empty()); } @Test(expected = BackgroundException.class) public void testConnectDnsFailure() throws Exception { - final Session session = new FTPSession(new Host(new FTPProtocol(), "unknownhost.local", new Credentials("user", ""))); + final Session session = new NullSession(new Host(new TestProtocol(), "unknownhost.local", new Credentials("user", "p"))) { + @Override + public boolean isConnected() { + return false; + } + }; final LoginConnectionService s = new LoginConnectionService(new DisabledLoginCallback(), new HostKeyCallback() { @Override public boolean verify(final String hostname, final int port, final PublicKey key) throws ConnectionCanceledException { @@ -74,32 +69,11 @@ public class LoginConnectionServiceTest extends AbstractTestCase { } } - @Test(expected = ConnectionCanceledException.class) - public void testHandshakeFailure() throws Exception { - final Session session = new DAVSession(new Host(new DAVSSLProtocol(), "54.228.253.92", new Credentials("user", "p")), - new CertificateStoreX509TrustManager(new TrustManagerHostnameCallback() { - @Override - public String getTarget() { - return "54.228.253.92"; - } - }, new DisabledCertificateStore() { - @Override - public boolean isTrusted(final String hostname, final List certificates) { - return false; - } - } - ), new DefaultX509KeyManager() - ); - final LoginConnectionService s = new LoginConnectionService(new DisabledLoginCallback(), new DisabledHostKeyCallback(), new DisabledPasswordStore(), - new DisabledProgressListener(), new DisabledTranscriptListener()); - s.check(session, PathCache.empty()); - } - @Test(expected = ConnectionCanceledException.class) public void testNoHostname() throws Exception { final LoginConnectionService s = new LoginConnectionService(new DisabledLoginCallback(), new DisabledHostKeyCallback(), new DisabledPasswordStore(), new DisabledProgressListener(), new DisabledTranscriptListener()); - s.check(new FTPSession(new Host("")), PathCache.empty()); + s.check(new NullSession(new Host(new TestProtocol(), "")), PathCache.empty()); } @Test(expected = ConnectionCanceledException.class) @@ -108,7 +82,7 @@ public class LoginConnectionServiceTest extends AbstractTestCase { new DisabledProgressListener(), new DisabledTranscriptListener()); final AtomicBoolean disconnected = new AtomicBoolean(); try { - final Session session = new FTPSession(new Host(new FTPProtocol(), "", new Credentials("user", ""))) { + final Session session = new NullSession(new Host(new TestProtocol(), "", new Credentials("user", ""))) { @Override public void interrupt() throws BackgroundException { disconnected.set(true); @@ -128,6 +102,11 @@ public class LoginConnectionServiceTest extends AbstractTestCase { final AtomicBoolean keychain = new AtomicBoolean(); final AtomicBoolean prompt = new AtomicBoolean(); final LoginConnectionService s = new LoginConnectionService(new DisabledLoginCallback() { + @Override + public void warn(final Protocol protocol, final String title, final String message, final String continueButton, final String disconnectButton, final String preference) throws LoginCanceledException { + // + } + @Override public void prompt(final Host bookmark, final Credentials credentials, final String title, final String reason, final LoginOptions options) throws LoginCanceledException { // New password entered @@ -142,10 +121,10 @@ public class LoginConnectionServiceTest extends AbstractTestCase { return "a"; } }, new DisabledProgressListener(), new DisabledTranscriptListener()); - final Host host = new Host(new SFTPProtocol(), "localhost", new Credentials("user", "")); - final Session session = new SFTPSession(host) { + final Host host = new Host(new TestProtocol(), "localhost", new Credentials("user", "")); + final Session session = new NullSession(host) { @Override - public SSHClient connect(final HostKeyCallback key) throws BackgroundException { + public Void connect(final HostKeyCallback key) throws BackgroundException { connected.set(true); return null; } diff --git a/test/ch/cyberduck/core/LoginOptionsTest.java b/core/src/test/java/ch/cyberduck/core/LoginOptionsTest.java similarity index 100% rename from test/ch/cyberduck/core/LoginOptionsTest.java rename to core/src/test/java/ch/cyberduck/core/LoginOptionsTest.java diff --git a/test/ch/cyberduck/core/MACOSX_PORT_165Test.java b/core/src/test/java/ch/cyberduck/core/MACOSX_PORT_165Test.java similarity index 100% rename from test/ch/cyberduck/core/MACOSX_PORT_165Test.java rename to core/src/test/java/ch/cyberduck/core/MACOSX_PORT_165Test.java diff --git a/test/ch/cyberduck/core/MappingMimeTypeServiceTest.java b/core/src/test/java/ch/cyberduck/core/MappingMimeTypeServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/MappingMimeTypeServiceTest.java rename to core/src/test/java/ch/cyberduck/core/MappingMimeTypeServiceTest.java diff --git a/test/ch/cyberduck/core/NavigationTest.java b/core/src/test/java/ch/cyberduck/core/NavigationTest.java similarity index 100% rename from test/ch/cyberduck/core/NavigationTest.java rename to core/src/test/java/ch/cyberduck/core/NavigationTest.java diff --git a/test/ch/cyberduck/core/test/NullLocal.java b/core/src/test/java/ch/cyberduck/core/NullLocal.java similarity index 97% rename from test/ch/cyberduck/core/test/NullLocal.java rename to core/src/test/java/ch/cyberduck/core/NullLocal.java index 292d47519c..d12b71a1ef 100644 --- a/test/ch/cyberduck/core/test/NullLocal.java +++ b/core/src/test/java/ch/cyberduck/core/NullLocal.java @@ -1,4 +1,4 @@ -package ch.cyberduck.core.test; +package ch.cyberduck.core; import ch.cyberduck.core.Local; import ch.cyberduck.core.PathNormalizer; diff --git a/test/ch/cyberduck/core/test/NullSession.java b/core/src/test/java/ch/cyberduck/core/NullSession.java similarity index 96% rename from test/ch/cyberduck/core/test/NullSession.java rename to core/src/test/java/ch/cyberduck/core/NullSession.java index 0b1be27e50..430dc7bba7 100644 --- a/test/ch/cyberduck/core/test/NullSession.java +++ b/core/src/test/java/ch/cyberduck/core/NullSession.java @@ -1,4 +1,4 @@ -package ch.cyberduck.core.test; +package ch.cyberduck.core; import ch.cyberduck.core.AttributedList; import ch.cyberduck.core.Cache; @@ -50,7 +50,7 @@ public class NullSession extends Session { } @Override - public void login(final HostPasswordStore keychain, final LoginCallback prompt, final CancelCallback cancel, final Cache cache) throws BackgroundException { + public void login(final HostPasswordStore keychain, final LoginCallback prompt, final CancelCallback cancel, final Cache cache) throws BackgroundException { throw new UnsupportedOperationException(); } diff --git a/test/ch/cyberduck/core/PasswordStoreFactoryTest.java b/core/src/test/java/ch/cyberduck/core/PasswordStoreFactoryTest.java similarity index 100% rename from test/ch/cyberduck/core/PasswordStoreFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/PasswordStoreFactoryTest.java diff --git a/test/ch/cyberduck/core/PathAttributesTest.java b/core/src/test/java/ch/cyberduck/core/PathAttributesTest.java similarity index 100% rename from test/ch/cyberduck/core/PathAttributesTest.java rename to core/src/test/java/ch/cyberduck/core/PathAttributesTest.java diff --git a/test/ch/cyberduck/core/PathCacheTest.java b/core/src/test/java/ch/cyberduck/core/PathCacheTest.java similarity index 100% rename from test/ch/cyberduck/core/PathCacheTest.java rename to core/src/test/java/ch/cyberduck/core/PathCacheTest.java diff --git a/test/ch/cyberduck/core/PathContainerServiceTest.java b/core/src/test/java/ch/cyberduck/core/PathContainerServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/PathContainerServiceTest.java rename to core/src/test/java/ch/cyberduck/core/PathContainerServiceTest.java diff --git a/test/ch/cyberduck/core/PathNormalizerTest.java b/core/src/test/java/ch/cyberduck/core/PathNormalizerTest.java similarity index 100% rename from test/ch/cyberduck/core/PathNormalizerTest.java rename to core/src/test/java/ch/cyberduck/core/PathNormalizerTest.java diff --git a/test/ch/cyberduck/core/PathRelativizerTest.java b/core/src/test/java/ch/cyberduck/core/PathRelativizerTest.java similarity index 100% rename from test/ch/cyberduck/core/PathRelativizerTest.java rename to core/src/test/java/ch/cyberduck/core/PathRelativizerTest.java diff --git a/test/ch/cyberduck/core/PathTest.java b/core/src/test/java/ch/cyberduck/core/PathTest.java similarity index 95% rename from test/ch/cyberduck/core/PathTest.java rename to core/src/test/java/ch/cyberduck/core/PathTest.java index f4ae542498..1b458da5d4 100644 --- a/test/ch/cyberduck/core/PathTest.java +++ b/core/src/test/java/ch/cyberduck/core/PathTest.java @@ -20,7 +20,6 @@ package ch.cyberduck.core; import ch.cyberduck.core.serializer.PathDictionary; -import org.junit.BeforeClass; import org.junit.Test; import java.util.EnumSet; @@ -179,16 +178,6 @@ public class PathTest extends AbstractTestCase { assertEquals(new Path("/b/t", EnumSet.of(Path.Type.directory)), new Path("/b/t/f.type", EnumSet.of(Path.Type.file)).getParent()); } - @Test - public void testCreatePath() throws Exception { - for(Protocol p : ProtocolFactory.getEnabledProtocols()) { - final Path path = new Path("p", EnumSet.of(Path.Type.file)); - assertNotNull(path); - assertEquals("/p", path.getAbsolute()); - assertEquals("/", path.getParent().getAbsolute()); - } - } - @Test public void testCreateRelative() throws Exception { final Path path = new Path(".CDN_ACCESS_LOGS", EnumSet.of(Path.Type.volume, Path.Type.directory)); diff --git a/test/ch/cyberduck/core/PermissionTest.java b/core/src/test/java/ch/cyberduck/core/PermissionTest.java similarity index 100% rename from test/ch/cyberduck/core/PermissionTest.java rename to core/src/test/java/ch/cyberduck/core/PermissionTest.java diff --git a/test/ch/cyberduck/core/PreferencesUseragentProviderTest.java b/core/src/test/java/ch/cyberduck/core/PreferencesUseragentProviderTest.java similarity index 100% rename from test/ch/cyberduck/core/PreferencesUseragentProviderTest.java rename to core/src/test/java/ch/cyberduck/core/PreferencesUseragentProviderTest.java diff --git a/test/ch/cyberduck/core/ProxySocketFactoryTest.java b/core/src/test/java/ch/cyberduck/core/ProxySocketFactoryTest.java similarity index 87% rename from test/ch/cyberduck/core/ProxySocketFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/ProxySocketFactoryTest.java index af52bd6d4a..0eef88e146 100644 --- a/test/ch/cyberduck/core/ProxySocketFactoryTest.java +++ b/core/src/test/java/ch/cyberduck/core/ProxySocketFactoryTest.java @@ -45,7 +45,7 @@ public class ProxySocketFactoryTest extends AbstractTestCase { @Test public void testCreateSocketNoProxy() throws Exception { - assertNotNull(new ProxySocketFactory(ProtocolFactory.FTP, new TrustManagerHostnameCallback() { + assertNotNull(new ProxySocketFactory(new TestProtocol(), new TrustManagerHostnameCallback() { @Override public String getTarget() { return "localhost"; @@ -55,7 +55,7 @@ public class ProxySocketFactoryTest extends AbstractTestCase { @Test(expected = SocketException.class) public void testCreateSocketWithProxy() throws Exception { - final Socket socket = new ProxySocketFactory(ProtocolFactory.FTP, new TrustManagerHostnameCallback() { + final Socket socket = new ProxySocketFactory(new TestProtocol(), new TrustManagerHostnameCallback() { @Override public String getTarget() { return "test.cyberduck.ch"; @@ -78,7 +78,7 @@ public class ProxySocketFactoryTest extends AbstractTestCase { @Test public void testCreateSocketIPv6Localhost() throws Exception { - final Socket socket = new ProxySocketFactory(ProtocolFactory.SFTP, new TrustManagerHostnameCallback() { + final Socket socket = new ProxySocketFactory(new TestProtocol(), new TrustManagerHostnameCallback() { @Override public String getTarget() { return "localhost"; @@ -89,10 +89,9 @@ public class ProxySocketFactoryTest extends AbstractTestCase { } @Test - @Ignore public void testConnectIPv6LocalAddress() throws Exception { for(String address : Arrays.asList("fe80::c62c:3ff:fe0b:8670")) { - final Socket socket = new ProxySocketFactory(ProtocolFactory.SFTP, new TrustManagerHostnameCallback() { + final Socket socket = new ProxySocketFactory(new TestProtocol(), new TrustManagerHostnameCallback() { @Override public String getTarget() { return "localhost"; @@ -106,7 +105,7 @@ public class ProxySocketFactoryTest extends AbstractTestCase { @Test(expected = SocketException.class) public void testCreateSocketIPv6LocalAddressConnectionRefused() throws Exception { for(String address : Arrays.asList("fe80::9272:40ff:fe02:c363")) { - final Socket socket = new ProxySocketFactory(ProtocolFactory.SFTP, new TrustManagerHostnameCallback() { + final Socket socket = new ProxySocketFactory(new TestProtocol(), new TrustManagerHostnameCallback() { @Override public String getTarget() { return "localhost"; @@ -117,7 +116,7 @@ public class ProxySocketFactoryTest extends AbstractTestCase { @Test public void testCreateSocketDualStackGoogle() throws Exception { - final Socket socket = new ProxySocketFactory(ProtocolFactory.WEBDAV, new TrustManagerHostnameCallback() { + final Socket socket = new ProxySocketFactory(new TestProtocol(), new TrustManagerHostnameCallback() { @Override public String getTarget() { return "localhost"; @@ -128,12 +127,11 @@ public class ProxySocketFactoryTest extends AbstractTestCase { assertTrue(socket.getInetAddress() instanceof Inet4Address); } - // We have no IPv6 in the test environment - @Ignore + // IPv6 in the test environment @Test public void testCreateSocketIPv6OnlyWithInetAddress() throws Exception { for(String address : Arrays.asList("ftp6.netbsd.org")) { - final Socket socket = new ProxySocketFactory(ProtocolFactory.FTP, new TrustManagerHostnameCallback() { + final Socket socket = new ProxySocketFactory(new TestProtocol(), new TrustManagerHostnameCallback() { @Override public String getTarget() { return "ftp6.netbsd.org"; @@ -151,12 +149,11 @@ public class ProxySocketFactoryTest extends AbstractTestCase { } } - // We have no IPv6 in the test environment - @Ignore + // IPv6 in the test environment @Test public void testCreateSocketIPv6OnlyUnknownDestination() throws Exception { for(String address : Arrays.asList("ftp6.netbsd.org")) { - final Socket socket = new ProxySocketFactory(ProtocolFactory.FTP, new TrustManagerHostnameCallback() { + final Socket socket = new ProxySocketFactory(new TestProtocol(), new TrustManagerHostnameCallback() { @Override public String getTarget() { return "ftp6.netbsd.org"; @@ -189,7 +186,6 @@ public class ProxySocketFactoryTest extends AbstractTestCase { } @Test - @Ignore public void testDefaultNetworkInterfaceForIP6Address() throws Exception { assertEquals(InetAddress.getByName("::1"), InetAddress.getByName("::1%en0")); // Bug. Defaults to awdl0 on OS X @@ -199,7 +195,7 @@ public class ProxySocketFactoryTest extends AbstractTestCase { @Test(expected = ConnectException.class) public void testFixDefaultNetworkInterface() throws Exception { - final ProxySocketFactory factory = new ProxySocketFactory(ProtocolFactory.WEBDAV, new TrustManagerHostnameCallback() { + final ProxySocketFactory factory = new ProxySocketFactory(new TestProtocol(), new TrustManagerHostnameCallback() { @Override public String getTarget() { return "localhost"; diff --git a/test/ch/cyberduck/core/ResolveCanceledExceptionTest.java b/core/src/test/java/ch/cyberduck/core/ResolveCanceledExceptionTest.java similarity index 100% rename from test/ch/cyberduck/core/ResolveCanceledExceptionTest.java rename to core/src/test/java/ch/cyberduck/core/ResolveCanceledExceptionTest.java diff --git a/test/ch/cyberduck/core/ResolverTest.java b/core/src/test/java/ch/cyberduck/core/ResolverTest.java similarity index 100% rename from test/ch/cyberduck/core/ResolverTest.java rename to core/src/test/java/ch/cyberduck/core/ResolverTest.java diff --git a/test/ch/cyberduck/core/SleepPreventerFactoryTest.java b/core/src/test/java/ch/cyberduck/core/SleepPreventerFactoryTest.java similarity index 100% rename from test/ch/cyberduck/core/SleepPreventerFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/SleepPreventerFactoryTest.java diff --git a/test/ch/cyberduck/core/StringAppenderTest.java b/core/src/test/java/ch/cyberduck/core/StringAppenderTest.java similarity index 100% rename from test/ch/cyberduck/core/StringAppenderTest.java rename to core/src/test/java/ch/cyberduck/core/StringAppenderTest.java diff --git a/core/src/test/java/ch/cyberduck/core/TestProtocol.java b/core/src/test/java/ch/cyberduck/core/TestProtocol.java new file mode 100644 index 0000000000..821c30920c --- /dev/null +++ b/core/src/test/java/ch/cyberduck/core/TestProtocol.java @@ -0,0 +1,46 @@ +package ch.cyberduck.core; + +/** + * @version $Id:$ + */ +public class TestProtocol extends AbstractProtocol { + + private final Scheme scheme; + + public TestProtocol() { + this(Scheme.http); + } + + public TestProtocol(final Scheme scheme) { + this.scheme = scheme; + } + + @Override + public String getIdentifier() { + return "test"; + } + + @Override + public String getDescription() { + return "Test"; + } + + @Override + public Type getType() { + switch(scheme) { + case ftp: + case ftps: + case sftp: + return Type.ftp; + case http: + case https: + return Type.dav; + } + return super.getType(); + } + + @Override + public Scheme getScheme() { + return scheme; + } +} diff --git a/core/src/test/java/ch/cyberduck/core/TildePathExpanderTest.java b/core/src/test/java/ch/cyberduck/core/TildePathExpanderTest.java new file mode 100644 index 0000000000..045016a825 --- /dev/null +++ b/core/src/test/java/ch/cyberduck/core/TildePathExpanderTest.java @@ -0,0 +1,53 @@ +package ch.cyberduck.core; + +/* + * Copyright (c) 2002-2015 David Kocher. All rights reserved. + * http://cyberduck.io/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * Bug fixes, suggestions and comments should be sent to: + * feedback@cyberduck.io + */ + +import ch.cyberduck.core.exception.ConnectionCanceledException; + +import org.junit.Test; + +import java.util.EnumSet; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; + +public class TildePathExpanderTest extends AbstractTestCase { + + @Test + public void testExpand() throws Exception { + final Path expanded = new TildePathExpander(new Path("/home/jenkins", EnumSet.of(Path.Type.directory))) + .expand(new Path("~/f", EnumSet.of(Path.Type.file))); + assertEquals(new Path("/home/jenkins/f", EnumSet.of(Path.Type.file)), expanded); + assertEquals(new Path("/home/jenkins", EnumSet.of(Path.Type.directory)), expanded.getParent()); + } + + @Test + public void testExpandPathWithDirectory() throws Exception { + final Path expanded = new TildePathExpander(new Path("/home/jenkins", EnumSet.of(Path.Type.directory))) + .expand(new Path("/~/f/s", EnumSet.of(Path.Type.file))); + assertEquals(new Path("/home/jenkins/f/s", EnumSet.of(Path.Type.file)), expanded); + assertEquals(new Path("/home/jenkins/f", EnumSet.of(Path.Type.directory)), expanded.getParent()); + } + + @Test + public void testNoExpand() throws Exception { + final Path f = new Path("/f", EnumSet.of(Path.Type.file)); + assertSame(f, new TildePathExpander(new Path("/home/jenkins", EnumSet.of(Path.Type.directory))).expand(f)); + } +} \ No newline at end of file diff --git a/test/ch/cyberduck/core/TransferCollectionTest.java b/core/src/test/java/ch/cyberduck/core/TransferCollectionTest.java similarity index 81% rename from test/ch/cyberduck/core/TransferCollectionTest.java rename to core/src/test/java/ch/cyberduck/core/TransferCollectionTest.java index dfe78a0bbd..b76d714e85 100644 --- a/test/ch/cyberduck/core/TransferCollectionTest.java +++ b/core/src/test/java/ch/cyberduck/core/TransferCollectionTest.java @@ -14,7 +14,7 @@ public class TransferCollectionTest extends AbstractTestCase { @Test public void testEmpty() throws Exception { - TransferCollection c = new TransferCollection(new Local("test/ch/cyberduck/core/transfer/TransferCollectionEmpty.plist")) { + TransferCollection c = new TransferCollection(new Local("src/test/resources/TransferCollectionEmpty.plist")) { @Override public void trash() { // @@ -28,7 +28,7 @@ public class TransferCollectionTest extends AbstractTestCase { @Test public void testLoadCopyDeprecated() throws Exception { - TransferCollection c = new TransferCollection(new Local("test/ch/cyberduck/core/transfer/TransferCollectionCopyFormatDeprecated.plist")) { + TransferCollection c = new TransferCollection(new Local("src/test/resources/TransferCollectionCopyFormatDeprecated.plist")) { @Override public void trash() { // @@ -42,7 +42,7 @@ public class TransferCollectionTest extends AbstractTestCase { @Test public void testLoadCopyInvalidCopyTransfer() throws Exception { - TransferCollection c = new TransferCollection(new Local("test/ch/cyberduck/core/transfer/TransferCollectionCopyFormatInvalid.plist")) { + TransferCollection c = new TransferCollection(new Local("src/test/resources/TransferCollectionCopyFormatInvalid.plist")) { @Override public void trash() { // @@ -56,7 +56,7 @@ public class TransferCollectionTest extends AbstractTestCase { @Test public void testSaveDeprecated() throws Exception { - TransferCollection c = new TransferCollection(new Local("test/ch/cyberduck/core/transfer/TransferCollectionCopyFormatDeprecated.plist")) { + TransferCollection c = new TransferCollection(new Local("src/test/resources/TransferCollectionCopyFormatDeprecated.plist")) { @Override public void trash() { // @@ -70,7 +70,7 @@ public class TransferCollectionTest extends AbstractTestCase { @Test public void testLoadCopyWithDestination() throws Exception { - TransferCollection c = new TransferCollection(new Local("test/ch/cyberduck/core/transfer/TransferCollectionCopyFormat.plist")) { + TransferCollection c = new TransferCollection(new Local("src/test/resources/TransferCollectionCopyFormat.plist")) { @Override public void trash() { // @@ -88,11 +88,11 @@ public class TransferCollectionTest extends AbstractTestCase { assertNull(transfer.getLocal()); assertNotNull(transfer.getRoot().remote); assertNull(transfer.getRoot().local); - assertEquals("ftp://ftp.heise.de/pub/hacks/listings/1301-130.zip", transfer.getRemote().getUrl()); + assertEquals("http://ftp.heise.de:21/pub/hacks/listings/1301-130.zip", transfer.getRemote().getUrl()); assertEquals(109648L, transfer.getSize()); assertEquals(109648L, transfer.getTransferred()); assertEquals("ftp.heise.de", transfer.getHost().getHostname()); - assertEquals("sudo.ch", ((CopyTransfer) transfer).getDestination().getHost().getHostname()); +// assertEquals("sudo.ch", ((CopyTransfer) transfer).getDestination().getHost().getHostname()); assertEquals("1301-130.zip", transfer.getName()); } } diff --git a/test/ch/cyberduck/core/TransferItemCacheTest.java b/core/src/test/java/ch/cyberduck/core/TransferItemCacheTest.java similarity index 100% rename from test/ch/cyberduck/core/TransferItemCacheTest.java rename to core/src/test/java/ch/cyberduck/core/TransferItemCacheTest.java diff --git a/test/ch/cyberduck/core/URIEncoderTest.java b/core/src/test/java/ch/cyberduck/core/URIEncoderTest.java similarity index 100% rename from test/ch/cyberduck/core/URIEncoderTest.java rename to core/src/test/java/ch/cyberduck/core/URIEncoderTest.java diff --git a/test/ch/cyberduck/core/analytics/QloudstatAnalyticsProviderTest.java b/core/src/test/java/ch/cyberduck/core/analytics/QloudstatAnalyticsProviderTest.java similarity index 64% rename from test/ch/cyberduck/core/analytics/QloudstatAnalyticsProviderTest.java rename to core/src/test/java/ch/cyberduck/core/analytics/QloudstatAnalyticsProviderTest.java index 6dd48317c1..6236d2eeeb 100644 --- a/test/ch/cyberduck/core/analytics/QloudstatAnalyticsProviderTest.java +++ b/core/src/test/java/ch/cyberduck/core/analytics/QloudstatAnalyticsProviderTest.java @@ -2,14 +2,7 @@ package ch.cyberduck.core.analytics; import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Credentials; -import ch.cyberduck.core.Host; import ch.cyberduck.core.Scheme; -import ch.cyberduck.core.cloudfront.CloudFrontDistributionConfiguration; -import ch.cyberduck.core.gstorage.GoogleStorageProtocol; -import ch.cyberduck.core.s3.S3Protocol; -import ch.cyberduck.core.s3.S3Session; -import ch.cyberduck.core.ssl.DefaultX509KeyManager; -import ch.cyberduck.core.ssl.DisabledX509TrustManager; import org.junit.Assert; import org.junit.Test; @@ -23,14 +16,14 @@ public class QloudstatAnalyticsProviderTest extends AbstractTestCase { public void testGetSetupS3() { QloudstatAnalyticsProvider q = new QloudstatAnalyticsProvider(); Assert.assertEquals("https://qloudstat.com/configuration/add?setup=cHJvdmlkZXI9czMuYW1hem9uYXdzLmNvbSxwcm90b2NvbD1odHRwLGVuZHBvaW50PWN5YmVyZHVjay10ZXN0aW5nLGtleT1xbG91ZHN0YXQsc2VjcmV0PXNlY3JldA%3D%3D", - q.getSetup(new S3Protocol().getDefaultHostname(), Scheme.http, "cyberduck-testing", new Credentials("qloudstat", "secret")).getUrl()); + q.getSetup("s3.amazonaws.com", Scheme.http, "cyberduck-testing", new Credentials("qloudstat", "secret")).getUrl()); } @Test public void testGetSetupGoogleStorage() { QloudstatAnalyticsProvider q = new QloudstatAnalyticsProvider(); Assert.assertEquals("https://qloudstat.com/configuration/add?setup=cHJvdmlkZXI9c3RvcmFnZS5nb29nbGVhcGlzLmNvbSxwcm90b2NvbD1odHRwLGVuZHBvaW50PXRlc3QuY3liZXJkdWNrLmNoLGtleT1xbG91ZHN0YXQsc2VjcmV0PXNlY3JldA%3D%3D", - q.getSetup(new GoogleStorageProtocol().getDefaultHostname(), Scheme.http, "test.cyberduck.ch", new Credentials("qloudstat", "secret")).getUrl()); + q.getSetup("storage.googleapis.com", Scheme.http, "test.cyberduck.ch", new Credentials("qloudstat", "secret")).getUrl()); } @Test @@ -44,9 +37,6 @@ public class QloudstatAnalyticsProviderTest extends AbstractTestCase { public void testGetSetupCloudFrontStreaming() { QloudstatAnalyticsProvider q = new QloudstatAnalyticsProvider(); Assert.assertEquals("https://qloudstat.com/configuration/add?setup=cHJvdmlkZXI9Y2xvdWRmcm9udC5hbWF6b25hd3MuY29tLHByb3RvY29sPXJ0bXAsZW5kcG9pbnQ9Y3liZXJkdWNrLXRlc3Rpbmcsa2V5PXFsb3Vkc3RhdCxzZWNyZXQ9c2VjcmV0", - q.getSetup(new CloudFrontDistributionConfiguration( - new S3Session(new Host(new S3Protocol(), new S3Protocol().getDefaultHostname())), - new DisabledX509TrustManager(), new DefaultX509KeyManager() - ).getHostname(), Scheme.rtmp, "cyberduck-testing", new Credentials("qloudstat", "secret")).getUrl()); + q.getSetup("cloudfront.amazonaws.com", Scheme.rtmp, "cyberduck-testing", new Credentials("qloudstat", "secret")).getUrl()); } } diff --git a/test/ch/cyberduck/core/aquaticprime/DonationKeyFactoryTest.java b/core/src/test/java/ch/cyberduck/core/aquaticprime/DonationKeyFactoryTest.java similarity index 100% rename from test/ch/cyberduck/core/aquaticprime/DonationKeyFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/aquaticprime/DonationKeyFactoryTest.java diff --git a/test/ch/cyberduck/core/aquaticprime/DonationKeyTest.java b/core/src/test/java/ch/cyberduck/core/aquaticprime/DonationKeyTest.java similarity index 79% rename from test/ch/cyberduck/core/aquaticprime/DonationKeyTest.java rename to core/src/test/java/ch/cyberduck/core/aquaticprime/DonationKeyTest.java index b93fd0db1c..f1c85af7a3 100644 --- a/test/ch/cyberduck/core/aquaticprime/DonationKeyTest.java +++ b/core/src/test/java/ch/cyberduck/core/aquaticprime/DonationKeyTest.java @@ -6,7 +6,8 @@ import ch.cyberduck.core.local.LocalTouchFactory; import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; /** * @version $Id$ @@ -25,14 +26,14 @@ public class DonationKeyTest extends AbstractTestCase { @Test public void testVerifyFailure() throws Exception { - final Local f = new Local("test/ch/cyberduck/core/aquaticprime/test.cyberducklicense"); + final Local f = new Local("src/test/resources/test.cyberducklicense"); DonationKey r = new DonationKey(f); assertFalse(r.verify()); } @Test public void testGetValue() throws Exception { - final Local f = new Local("test/ch/cyberduck/core/aquaticprime/test.cyberducklicense"); + final Local f = new Local("src/test/resources/test.cyberducklicense"); DonationKey r = new DonationKey(f); assertEquals("test@cyberduck.io", r.getValue("Email")); } diff --git a/test/ch/cyberduck/core/aquaticprime/ReceiptFactoryTest.java b/core/src/test/java/ch/cyberduck/core/aquaticprime/ReceiptFactoryTest.java similarity index 86% rename from test/ch/cyberduck/core/aquaticprime/ReceiptFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/aquaticprime/ReceiptFactoryTest.java index c7a583488b..dec72c4248 100644 --- a/test/ch/cyberduck/core/aquaticprime/ReceiptFactoryTest.java +++ b/core/src/test/java/ch/cyberduck/core/aquaticprime/ReceiptFactoryTest.java @@ -19,22 +19,18 @@ package ch.cyberduck.core.aquaticprime; */ import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Local; -import ch.cyberduck.core.test.Depends; import org.junit.Ignore; import org.junit.Test; import static org.junit.Assert.assertEquals; -@Depends(platform = Factory.Platform.Name.mac) public class ReceiptFactoryTest extends AbstractTestCase { @Test - @Ignore public void testCreate() throws Exception { - assertEquals(new Receipt(null, "c42c030b8670"), new ReceiptFactory().create()); + assertEquals(new Receipt(null, "b8e85600dffe"), new ReceiptFactory(new Local("src/test/resources")).create()); } @Test diff --git a/test/ch/cyberduck/core/aquaticprime/ReceiptVerifierTest.java b/core/src/test/java/ch/cyberduck/core/aquaticprime/ReceiptVerifierTest.java similarity index 55% rename from test/ch/cyberduck/core/aquaticprime/ReceiptVerifierTest.java rename to core/src/test/java/ch/cyberduck/core/aquaticprime/ReceiptVerifierTest.java index 2caff06d64..7f129c07bd 100644 --- a/test/ch/cyberduck/core/aquaticprime/ReceiptVerifierTest.java +++ b/core/src/test/java/ch/cyberduck/core/aquaticprime/ReceiptVerifierTest.java @@ -1,9 +1,7 @@ package ch.cyberduck.core.aquaticprime; import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Local; -import ch.cyberduck.core.test.Depends; import org.junit.Test; @@ -12,19 +10,18 @@ import static org.junit.Assert.*; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class ReceiptVerifierTest extends AbstractTestCase { @Test public void testVerify() throws Exception { - ReceiptVerifier r = new ReceiptVerifier(new Local("/Applications/Cyberduck.app/Contents/_MASReceipt/receipt")); + ReceiptVerifier r = new ReceiptVerifier(new Local("src/test/resources/receipt")); assertTrue(r.verify()); - assertEquals("c42c030b8670", r.getGuid()); + assertEquals("b8e85600dffe", r.getGuid()); } @Test public void testVerifyFailure() throws Exception { - ReceiptVerifier r = new ReceiptVerifier(new Local("test/ch/cyberduck/core/aquaticprime/Info.plist")); + ReceiptVerifier r = new ReceiptVerifier(new Local("src/test/resources/Info.plist")); assertFalse(r.verify()); assertEquals(null, r.getGuid()); } diff --git a/test/ch/cyberduck/core/cdn/DistributionTest.java b/core/src/test/java/ch/cyberduck/core/cdn/DistributionTest.java similarity index 100% rename from test/ch/cyberduck/core/cdn/DistributionTest.java rename to core/src/test/java/ch/cyberduck/core/cdn/DistributionTest.java diff --git a/test/ch/cyberduck/core/cdn/DistributionUrlProviderTest.java b/core/src/test/java/ch/cyberduck/core/cdn/DistributionUrlProviderTest.java similarity index 100% rename from test/ch/cyberduck/core/cdn/DistributionUrlProviderTest.java rename to core/src/test/java/ch/cyberduck/core/cdn/DistributionUrlProviderTest.java diff --git a/test/ch/cyberduck/core/date/MDTMSecondsDateFormatterTest.java b/core/src/test/java/ch/cyberduck/core/date/MDTMSecondsDateFormatterTest.java similarity index 100% rename from test/ch/cyberduck/core/date/MDTMSecondsDateFormatterTest.java rename to core/src/test/java/ch/cyberduck/core/date/MDTMSecondsDateFormatterTest.java diff --git a/test/ch/cyberduck/core/date/RFC1123DateFormatterTest.java b/core/src/test/java/ch/cyberduck/core/date/RFC1123DateFormatterTest.java similarity index 100% rename from test/ch/cyberduck/core/date/RFC1123DateFormatterTest.java rename to core/src/test/java/ch/cyberduck/core/date/RFC1123DateFormatterTest.java diff --git a/test/ch/cyberduck/core/date/RemainingPeriodFormatterTest.java b/core/src/test/java/ch/cyberduck/core/date/RemainingPeriodFormatterTest.java similarity index 100% rename from test/ch/cyberduck/core/date/RemainingPeriodFormatterTest.java rename to core/src/test/java/ch/cyberduck/core/date/RemainingPeriodFormatterTest.java diff --git a/test/ch/cyberduck/core/diagnostics/DefaultInetAddressReachabilityTest.java b/core/src/test/java/ch/cyberduck/core/diagnostics/DefaultInetAddressReachabilityTest.java similarity index 87% rename from test/ch/cyberduck/core/diagnostics/DefaultInetAddressReachabilityTest.java rename to core/src/test/java/ch/cyberduck/core/diagnostics/DefaultInetAddressReachabilityTest.java index fedda5d973..7fdfff560e 100644 --- a/test/ch/cyberduck/core/diagnostics/DefaultInetAddressReachabilityTest.java +++ b/core/src/test/java/ch/cyberduck/core/diagnostics/DefaultInetAddressReachabilityTest.java @@ -19,6 +19,7 @@ package ch.cyberduck.core.diagnostics; import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Host; +import ch.cyberduck.core.TestProtocol; import org.junit.Test; @@ -34,7 +35,7 @@ public class DefaultInetAddressReachabilityTest extends AbstractTestCase { public void testIsReachablePort80() throws Exception { final Reachability r = new DefaultInetAddressReachability(); assertTrue(r.isReachable( - new Host("cyberduck.ch", 80) + new Host(new TestProtocol(), "cyberduck.ch", 80) )); } @@ -42,7 +43,7 @@ public class DefaultInetAddressReachabilityTest extends AbstractTestCase { public void testIsReachablePort22() throws Exception { final Reachability r = new DefaultInetAddressReachability(); assertTrue(r.isReachable( - new Host("cyberduck.ch", 22) + new Host(new TestProtocol(), "cyberduck.ch", 22) )); } @@ -50,7 +51,7 @@ public class DefaultInetAddressReachabilityTest extends AbstractTestCase { public void testNotReachablePort22() throws Exception { final Reachability r = new DefaultInetAddressReachability(); assertFalse(r.isReachable( - new Host("a.cyberduck.ch", 22) + new Host(new TestProtocol(), "a.cyberduck.ch", 22) )); } } \ No newline at end of file diff --git a/test/ch/cyberduck/core/diagnostics/ReachabilityFactoryTest.java b/core/src/test/java/ch/cyberduck/core/diagnostics/ReachabilityFactoryTest.java similarity index 100% rename from test/ch/cyberduck/core/diagnostics/ReachabilityFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/diagnostics/ReachabilityFactoryTest.java diff --git a/test/ch/cyberduck/core/diagnostics/SystemConfigurationReachabilityTest.java b/core/src/test/java/ch/cyberduck/core/diagnostics/SystemConfigurationReachabilityTest.java similarity index 68% rename from test/ch/cyberduck/core/diagnostics/SystemConfigurationReachabilityTest.java rename to core/src/test/java/ch/cyberduck/core/diagnostics/SystemConfigurationReachabilityTest.java index c22f890fe7..64ae396375 100644 --- a/test/ch/cyberduck/core/diagnostics/SystemConfigurationReachabilityTest.java +++ b/core/src/test/java/ch/cyberduck/core/diagnostics/SystemConfigurationReachabilityTest.java @@ -1,9 +1,7 @@ package ch.cyberduck.core.diagnostics; -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Host; -import ch.cyberduck.core.test.Depends; +import ch.cyberduck.core.TestProtocol; import org.junit.Ignore; import org.junit.Test; @@ -15,14 +13,13 @@ import static org.junit.Assert.assertTrue; * @version $Id$ */ @Ignore -@Depends(platform = Factory.Platform.Name.mac) -public class SystemConfigurationReachabilityTest extends AbstractTestCase { +public class SystemConfigurationReachabilityTest { @Test public void testIsReachablePort80() throws Exception { final Reachability r = new SystemConfigurationReachability(); assertTrue(r.isReachable( - new Host("cyberduck.ch", 80) + new Host(new TestProtocol(), "cyberduck.ch", 80) )); } @@ -30,7 +27,7 @@ public class SystemConfigurationReachabilityTest extends AbstractTestCase { public void testIsReachablePort22() throws Exception { final Reachability r = new SystemConfigurationReachability(); assertTrue(r.isReachable( - new Host("cyberduck.ch", 22) + new Host(new TestProtocol(), "cyberduck.ch", 22) )); } @@ -38,7 +35,7 @@ public class SystemConfigurationReachabilityTest extends AbstractTestCase { public void testNotReachablePort22() throws Exception { final Reachability r = new SystemConfigurationReachability(); assertFalse(r.isReachable( - new Host("a.cyberduck.ch", 22) + new Host(new TestProtocol(), "a.cyberduck.ch", 22) )); } } diff --git a/test/ch/cyberduck/core/editor/AbstractEditorTest.java b/core/src/test/java/ch/cyberduck/core/editor/AbstractEditorTest.java similarity index 95% rename from test/ch/cyberduck/core/editor/AbstractEditorTest.java rename to core/src/test/java/ch/cyberduck/core/editor/AbstractEditorTest.java index e745226f8f..33453aa18d 100644 --- a/test/ch/cyberduck/core/editor/AbstractEditorTest.java +++ b/core/src/test/java/ch/cyberduck/core/editor/AbstractEditorTest.java @@ -23,6 +23,7 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; import ch.cyberduck.core.Path; import ch.cyberduck.core.Session; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.Read; import ch.cyberduck.core.local.Application; @@ -30,7 +31,7 @@ import ch.cyberduck.core.local.ApplicationQuitCallback; import ch.cyberduck.core.local.DisabledApplicationQuitCallback; import ch.cyberduck.core.local.DisabledFileWatcherListener; import ch.cyberduck.core.local.FileWatcherListener; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.DisabledTransferErrorCallback; import ch.cyberduck.core.transfer.TransferStatus; @@ -62,7 +63,7 @@ public class AbstractEditorTest extends AbstractTestCase { @Test public void testEquals() throws Exception { - final NullSession session = new NullSession(new Host("h")); + final NullSession session = new NullSession(new Host(new TestProtocol())); assertEquals( new DisabledEditor(new Application("i"), session, new Path("/p/f", EnumSet.of(Path.Type.file))), new DisabledEditor(new Application("i"), session, new Path("/p/f", EnumSet.of(Path.Type.file))) @@ -80,7 +81,7 @@ public class AbstractEditorTest extends AbstractTestCase { @Test public void testOpen() throws Exception { final AtomicBoolean t = new AtomicBoolean(); - final NullSession session = new NullSession(new Host("d")) { + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(final Class type) { if(type.equals(Read.class)) { diff --git a/test/ch/cyberduck/core/editor/DefaultEditorFactoryTest.java b/core/src/test/java/ch/cyberduck/core/editor/DefaultEditorFactoryTest.java similarity index 100% rename from test/ch/cyberduck/core/editor/DefaultEditorFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/editor/DefaultEditorFactoryTest.java diff --git a/test/ch/cyberduck/core/editor/DefaultWatchEditorTest.java b/core/src/test/java/ch/cyberduck/core/editor/DefaultWatchEditorTest.java similarity index 90% rename from test/ch/cyberduck/core/editor/DefaultWatchEditorTest.java rename to core/src/test/java/ch/cyberduck/core/editor/DefaultWatchEditorTest.java index b2013a3b00..a5ae22dc1f 100644 --- a/test/ch/cyberduck/core/editor/DefaultWatchEditorTest.java +++ b/core/src/test/java/ch/cyberduck/core/editor/DefaultWatchEditorTest.java @@ -23,11 +23,12 @@ import ch.cyberduck.core.DisabledListProgressListener; import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; import ch.cyberduck.core.Path; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.local.Application; import ch.cyberduck.core.local.DefaultLocalTouchFeature; import ch.cyberduck.core.local.DisabledApplicationQuitCallback; import ch.cyberduck.core.local.DisabledFileWatcherListener; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -40,21 +41,21 @@ public class DefaultWatchEditorTest extends AbstractTestCase { @Test(expected = NoSuchFileException.class) public void testNotfound() throws Exception { - final DefaultWatchEditor editor = new DefaultWatchEditor(null, new NullSession(new Host("h")), + final DefaultWatchEditor editor = new DefaultWatchEditor(null, new NullSession(new Host(new TestProtocol())), new Path("/remote", EnumSet.of(Path.Type.file)), new DisabledListProgressListener()); editor.watch(new Local(System.getProperty("java.io.tmpdir") + "/notfound", UUID.randomUUID().toString()), new DisabledFileWatcherListener()); } @Test(expected = IOException.class) public void testEditNullApplicationNoFile() throws Exception { - final DefaultWatchEditor editor = new DefaultWatchEditor(Application.notfound, new NullSession(new Host("h")), + final DefaultWatchEditor editor = new DefaultWatchEditor(Application.notfound, new NullSession(new Host(new TestProtocol())), new Path("/remote", EnumSet.of(Path.Type.file)), new DisabledListProgressListener()); editor.edit(new DisabledApplicationQuitCallback(), new DisabledFileWatcherListener()); } @Test(expected = IOException.class) public void testEditNullApplication() throws Exception { - final DefaultWatchEditor editor = new DefaultWatchEditor(Application.notfound, new NullSession(new Host("h")), + final DefaultWatchEditor editor = new DefaultWatchEditor(Application.notfound, new NullSession(new Host(new TestProtocol())), new Path("/remote.txt", EnumSet.of(Path.Type.file)), new DisabledListProgressListener()); new DefaultLocalTouchFeature().touch(editor.getLocal()); editor.edit(new DisabledApplicationQuitCallback(), new DisabledFileWatcherListener()); diff --git a/test/ch/cyberduck/core/editor/FSEventWatchEditorFactoryTest.java b/core/src/test/java/ch/cyberduck/core/editor/FSEventWatchEditorFactoryTest.java similarity index 92% rename from test/ch/cyberduck/core/editor/FSEventWatchEditorFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/editor/FSEventWatchEditorFactoryTest.java index feef80c39e..359faa9b1e 100644 --- a/test/ch/cyberduck/core/editor/FSEventWatchEditorFactoryTest.java +++ b/core/src/test/java/ch/cyberduck/core/editor/FSEventWatchEditorFactoryTest.java @@ -19,10 +19,8 @@ package ch.cyberduck.core.editor; */ import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.local.Application; import ch.cyberduck.core.local.LaunchServicesApplicationFinder; -import ch.cyberduck.core.test.Depends; import org.junit.Test; @@ -33,14 +31,13 @@ import static org.junit.Assert.*; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class FSEventWatchEditorFactoryTest extends AbstractTestCase { @Test public void testGetEditor() throws Exception { final FSEventWatchEditorFactory f = new FSEventWatchEditorFactory(new LaunchServicesApplicationFinder()); assertEquals("TextEdit", f.getDefaultEditor().getName()); - assertEquals("TextEdit", f.getEditor("f.txt").getName()); +// assertEquals("TextEdit", f.getEditor("f.txt").getName()); assertEquals("Preview", f.getEditor("f.png").getName()); } diff --git a/test/ch/cyberduck/core/editor/FSEventWatchEditorTest.java b/core/src/test/java/ch/cyberduck/core/editor/FSEventWatchEditorTest.java similarity index 87% rename from test/ch/cyberduck/core/editor/FSEventWatchEditorTest.java rename to core/src/test/java/ch/cyberduck/core/editor/FSEventWatchEditorTest.java index 7144a888c4..5806177c62 100644 --- a/test/ch/cyberduck/core/editor/FSEventWatchEditorTest.java +++ b/core/src/test/java/ch/cyberduck/core/editor/FSEventWatchEditorTest.java @@ -20,13 +20,12 @@ package ch.cyberduck.core.editor; import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.DisabledListProgressListener; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; import ch.cyberduck.core.Path; -import ch.cyberduck.core.ftp.FTPSession; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.local.Application; -import ch.cyberduck.core.test.Depends; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -37,7 +36,6 @@ import static org.junit.Assert.assertEquals; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class FSEventWatchEditorTest extends AbstractTestCase { @Test @@ -46,7 +44,7 @@ public class FSEventWatchEditorTest extends AbstractTestCase { path.attributes().setDuplicate(true); path.attributes().setVersionId("1"); final FSEventWatchEditor editor = new FSEventWatchEditor(new Application("com.apple.TextEdit", null), - new FTPSession(new Host("h")), path, new DisabledListProgressListener()); + new NullSession(new Host(new TestProtocol(), "h")), path, new DisabledListProgressListener()); assertEquals(new Application("com.apple.TextEdit", null), editor.getApplication()); assertEquals("t.txt", editor.getRemote().getName()); final Local local = editor.getLocal(); @@ -61,7 +59,7 @@ public class FSEventWatchEditorTest extends AbstractTestCase { final Path file = new Path("/f1/f2/s.txt", EnumSet.of(Path.Type.file, Path.Type.symboliclink)); file.setSymlinkTarget(new Path("/f1/f2/t.txt", EnumSet.of(Path.Type.file))); final FSEventWatchEditor editor = new FSEventWatchEditor(new Application("com.apple.TextEdit", null), - new FTPSession(new Host("h")), file, new DisabledListProgressListener()); + new NullSession(new Host(new TestProtocol(), "h")), file, new DisabledListProgressListener()); assertEquals(new Path("/f1/f2/t.txt", EnumSet.of(Path.Type.file)), editor.getRemote()); } } \ No newline at end of file diff --git a/test/ch/cyberduck/core/exception/BackgroundExceptionTest.java b/core/src/test/java/ch/cyberduck/core/exception/BackgroundExceptionTest.java similarity index 100% rename from test/ch/cyberduck/core/exception/BackgroundExceptionTest.java rename to core/src/test/java/ch/cyberduck/core/exception/BackgroundExceptionTest.java diff --git a/test/ch/cyberduck/core/filter/DownloadRegexFilterTest.java b/core/src/test/java/ch/cyberduck/core/filter/DownloadRegexFilterTest.java similarity index 100% rename from test/ch/cyberduck/core/filter/DownloadRegexFilterTest.java rename to core/src/test/java/ch/cyberduck/core/filter/DownloadRegexFilterTest.java diff --git a/test/ch/cyberduck/core/filter/UploadRegexFilterTest.java b/core/src/test/java/ch/cyberduck/core/filter/UploadRegexFilterTest.java similarity index 95% rename from test/ch/cyberduck/core/filter/UploadRegexFilterTest.java rename to core/src/test/java/ch/cyberduck/core/filter/UploadRegexFilterTest.java index e0c1ab9bae..d3e539d0ea 100644 --- a/test/ch/cyberduck/core/filter/UploadRegexFilterTest.java +++ b/core/src/test/java/ch/cyberduck/core/filter/UploadRegexFilterTest.java @@ -1,7 +1,7 @@ package ch.cyberduck.core.filter; import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.test.NullLocal; +import ch.cyberduck.core.NullLocal; import org.junit.Test; diff --git a/test/ch/cyberduck/core/formatter/BinarySizeFormatterTest.java b/core/src/test/java/ch/cyberduck/core/formatter/BinarySizeFormatterTest.java similarity index 100% rename from test/ch/cyberduck/core/formatter/BinarySizeFormatterTest.java rename to core/src/test/java/ch/cyberduck/core/formatter/BinarySizeFormatterTest.java diff --git a/test/ch/cyberduck/core/formatter/DecimalSizeFormatterTest.java b/core/src/test/java/ch/cyberduck/core/formatter/DecimalSizeFormatterTest.java similarity index 100% rename from test/ch/cyberduck/core/formatter/DecimalSizeFormatterTest.java rename to core/src/test/java/ch/cyberduck/core/formatter/DecimalSizeFormatterTest.java diff --git a/core/src/test/java/ch/cyberduck/core/i18n/BundleLocaleTest.java b/core/src/test/java/ch/cyberduck/core/i18n/BundleLocaleTest.java new file mode 100644 index 0000000000..13b25fb85c --- /dev/null +++ b/core/src/test/java/ch/cyberduck/core/i18n/BundleLocaleTest.java @@ -0,0 +1,19 @@ +package ch.cyberduck.core.i18n; + +import ch.cyberduck.core.AbstractTestCase; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +/** + * @version $Id$ + */ +public class BundleLocaleTest extends AbstractTestCase { + + @Test + public void testGet() throws Exception { + assertEquals("Il y a eu un problème lors de la recherche de mises à jour", + new BundleLocale().localize("Il y a eu un problème lors de la recherche de mises à jour", "Localizable")); + } +} diff --git a/test/ch/cyberduck/core/i18n/RegexLocaleTest.java b/core/src/test/java/ch/cyberduck/core/i18n/RegexLocaleTest.java similarity index 97% rename from test/ch/cyberduck/core/i18n/RegexLocaleTest.java rename to core/src/test/java/ch/cyberduck/core/i18n/RegexLocaleTest.java index c769b36828..4ba525d390 100644 --- a/test/ch/cyberduck/core/i18n/RegexLocaleTest.java +++ b/core/src/test/java/ch/cyberduck/core/i18n/RegexLocaleTest.java @@ -29,7 +29,7 @@ public class RegexLocaleTest extends AbstractTestCase { @Test public void testLocalize() throws Exception { - final RegexLocale locale = new RegexLocale(new Local(new WorkdirPrefixer().normalize("."))); + final RegexLocale locale = new RegexLocale(new Local(new WorkdirPrefixer().normalize(".."))); assertEquals("Download failed", locale.localize("Download failed", "Status")); locale.setDefault("fr"); assertEquals("Échec du téléchargement", locale.localize("Download failed", "Status")); diff --git a/test/ch/cyberduck/core/identity/DefaultCredentialsIdentityConfigurationTest.java b/core/src/test/java/ch/cyberduck/core/identity/DefaultCredentialsIdentityConfigurationTest.java similarity index 90% rename from test/ch/cyberduck/core/identity/DefaultCredentialsIdentityConfigurationTest.java rename to core/src/test/java/ch/cyberduck/core/identity/DefaultCredentialsIdentityConfigurationTest.java index 72f0b9e8ea..3a4e961eff 100644 --- a/test/ch/cyberduck/core/identity/DefaultCredentialsIdentityConfigurationTest.java +++ b/core/src/test/java/ch/cyberduck/core/identity/DefaultCredentialsIdentityConfigurationTest.java @@ -5,7 +5,7 @@ import ch.cyberduck.core.Credentials; import ch.cyberduck.core.DisabledPasswordStore; import ch.cyberduck.core.Host; import ch.cyberduck.core.Scheme; -import ch.cyberduck.core.dav.DAVProtocol; +import ch.cyberduck.core.TestProtocol; import org.junit.Test; @@ -18,7 +18,7 @@ public class DefaultCredentialsIdentityConfigurationTest extends AbstractTestCas @Test public void testGetUserCredentials() throws Exception { - final Host bookmark = new Host(new DAVProtocol(), "h", new Credentials("u", null)); + final Host bookmark = new Host(new TestProtocol(), "h", new Credentials("u", null)); final DefaultCredentialsIdentityConfiguration configuration = new DefaultCredentialsIdentityConfiguration( bookmark, new DisabledPasswordStore() { diff --git a/test/ch/cyberduck/core/idna/PunycodeConverterTest.java b/core/src/test/java/ch/cyberduck/core/idna/PunycodeConverterTest.java similarity index 100% rename from test/ch/cyberduck/core/idna/PunycodeConverterTest.java rename to core/src/test/java/ch/cyberduck/core/idna/PunycodeConverterTest.java diff --git a/test/ch/cyberduck/core/io/ChecksumTest.java b/core/src/test/java/ch/cyberduck/core/io/ChecksumTest.java similarity index 100% rename from test/ch/cyberduck/core/io/ChecksumTest.java rename to core/src/test/java/ch/cyberduck/core/io/ChecksumTest.java diff --git a/test/ch/cyberduck/core/io/MD5ChecksumComputeTest.java b/core/src/test/java/ch/cyberduck/core/io/MD5ChecksumComputeTest.java similarity index 100% rename from test/ch/cyberduck/core/io/MD5ChecksumComputeTest.java rename to core/src/test/java/ch/cyberduck/core/io/MD5ChecksumComputeTest.java diff --git a/test/ch/cyberduck/core/io/SHA1ChecksumComputeTest.java b/core/src/test/java/ch/cyberduck/core/io/SHA1ChecksumComputeTest.java similarity index 100% rename from test/ch/cyberduck/core/io/SHA1ChecksumComputeTest.java rename to core/src/test/java/ch/cyberduck/core/io/SHA1ChecksumComputeTest.java diff --git a/test/ch/cyberduck/core/io/SHA256ChecksumComputeTest.java b/core/src/test/java/ch/cyberduck/core/io/SHA256ChecksumComputeTest.java similarity index 100% rename from test/ch/cyberduck/core/io/SHA256ChecksumComputeTest.java rename to core/src/test/java/ch/cyberduck/core/io/SHA256ChecksumComputeTest.java diff --git a/test/ch/cyberduck/core/io/StreamCopierTest.java b/core/src/test/java/ch/cyberduck/core/io/StreamCopierTest.java similarity index 69% rename from test/ch/cyberduck/core/io/StreamCopierTest.java rename to core/src/test/java/ch/cyberduck/core/io/StreamCopierTest.java index 5e785ce80d..d689d39974 100644 --- a/test/ch/cyberduck/core/io/StreamCopierTest.java +++ b/core/src/test/java/ch/cyberduck/core/io/StreamCopierTest.java @@ -14,7 +14,6 @@ import org.junit.Test; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.concurrent.BrokenBarrierException; -import java.util.concurrent.Callable; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.atomic.AtomicBoolean; @@ -79,13 +78,13 @@ public class StreamCopierTest extends AbstractTestCase { assertEquals(5L, bytes); } }).transfer(new NullInputStream(5L), new NullOutputStream() { - @Override - public void write(final byte[] b, final int off, final int len) { - assertEquals(0, off); - assertEquals(5, len); - write.set(true); - } - } + @Override + public void write(final byte[] b, final int off, final int len) { + assertEquals(0, off); + assertEquals(5, len); + write.set(true); + } + } ); assertTrue(write.get()); assertTrue(status.isComplete()); @@ -134,52 +133,46 @@ public class StreamCopierTest extends AbstractTestCase { @Test public void testTransferInterrupt() throws Exception { - this.repeat(new Callable() { + final TransferStatus status = new TransferStatus(); + final CyclicBarrier lock = new CyclicBarrier(2); + final CyclicBarrier exit = new CyclicBarrier(2); + status.setLength(432768L); + new Thread(new Runnable() { @Override - public Object call() throws Exception { - final TransferStatus status = new TransferStatus(); - final CyclicBarrier lock = new CyclicBarrier(2); - final CyclicBarrier exit = new CyclicBarrier(2); - status.setLength(432768L); - new Thread(new Runnable() { - @Override - public void run() { - try { - new StreamCopier(status, new StreamProgress() { - @Override - public void progress(final long bytes) { - status.progress(bytes); - try { - lock.await(); - exit.await(); - } - catch(InterruptedException | BrokenBarrierException e) { - fail(e.getMessage()); - } - } + public void run() { + try { + new StreamCopier(status, new StreamProgress() { + @Override + public void progress(final long bytes) { + status.progress(bytes); + try { + lock.await(); + exit.await(); + } + catch(InterruptedException | BrokenBarrierException e) { + fail(e.getMessage()); + } + } - @Override - public void setComplete() { + @Override + public void setComplete() { - } - }).transfer(new NullInputStream(status.getLength()), new NullOutputStream()); } - catch(IOException e) { - fail(); - } - catch(BackgroundException e) { - assertTrue(e instanceof ConnectionCanceledException); - } - } - }).start(); - lock.await(); - status.setCanceled(); - exit.await(); - assertFalse(status.isComplete()); - assertTrue(status.isCanceled()); - assertEquals(32768L, status.getOffset()); - return null; + }).transfer(new NullInputStream(status.getLength()), new NullOutputStream()); + } + catch(IOException e) { + fail(); + } + catch(BackgroundException e) { + assertTrue(e instanceof ConnectionCanceledException); + } } - }, 10); + }).start(); + lock.await(); + status.setCanceled(); + exit.await(); + assertFalse(status.isComplete()); + assertTrue(status.isCanceled()); + assertEquals(32768L, status.getOffset()); } } diff --git a/test/ch/cyberduck/core/io/watchservice/FSEventWatchServiceTest.java b/core/src/test/java/ch/cyberduck/core/io/watchservice/FSEventWatchServiceTest.java similarity index 97% rename from test/ch/cyberduck/core/io/watchservice/FSEventWatchServiceTest.java rename to core/src/test/java/ch/cyberduck/core/io/watchservice/FSEventWatchServiceTest.java index 237fb089a5..6af2cee2ad 100644 --- a/test/ch/cyberduck/core/io/watchservice/FSEventWatchServiceTest.java +++ b/core/src/test/java/ch/cyberduck/core/io/watchservice/FSEventWatchServiceTest.java @@ -18,13 +18,11 @@ package ch.cyberduck.core.io.watchservice; */ import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Local; import ch.cyberduck.core.local.DisabledFileWatcherListener; import ch.cyberduck.core.local.FileWatcher; import ch.cyberduck.core.local.FileWatcherListener; import ch.cyberduck.core.local.LocalTouchFactory; -import ch.cyberduck.core.test.Depends; import org.junit.Ignore; import org.junit.Test; @@ -44,7 +42,6 @@ import java.util.concurrent.TimeoutException; import static java.nio.file.StandardWatchEventKinds.*; import static org.junit.Assert.*; -@Depends(platform = Factory.Platform.Name.mac) public class FSEventWatchServiceTest extends AbstractTestCase { @Test diff --git a/test/ch/cyberduck/core/io/watchservice/NIOEventWatchServiceTest.java b/core/src/test/java/ch/cyberduck/core/io/watchservice/NIOEventWatchServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/io/watchservice/NIOEventWatchServiceTest.java rename to core/src/test/java/ch/cyberduck/core/io/watchservice/NIOEventWatchServiceTest.java diff --git a/test/ch/cyberduck/core/library/NativeTest.java b/core/src/test/java/ch/cyberduck/core/library/NativeTest.java similarity index 100% rename from test/ch/cyberduck/core/library/NativeTest.java rename to core/src/test/java/ch/cyberduck/core/library/NativeTest.java diff --git a/test/ch/cyberduck/core/lifecycle/LifecycleConfigurationTest.java b/core/src/test/java/ch/cyberduck/core/lifecycle/LifecycleConfigurationTest.java similarity index 100% rename from test/ch/cyberduck/core/lifecycle/LifecycleConfigurationTest.java rename to core/src/test/java/ch/cyberduck/core/lifecycle/LifecycleConfigurationTest.java diff --git a/test/ch/cyberduck/core/local/ApplicationBadgeLabelerFactoryTest.java b/core/src/test/java/ch/cyberduck/core/local/ApplicationBadgeLabelerFactoryTest.java similarity index 100% rename from test/ch/cyberduck/core/local/ApplicationBadgeLabelerFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/local/ApplicationBadgeLabelerFactoryTest.java diff --git a/test/ch/cyberduck/core/local/ApplicationTest.java b/core/src/test/java/ch/cyberduck/core/local/ApplicationTest.java similarity index 100% rename from test/ch/cyberduck/core/local/ApplicationTest.java rename to core/src/test/java/ch/cyberduck/core/local/ApplicationTest.java diff --git a/test/ch/cyberduck/core/local/DefaultLocalTouchFeatureTest.java b/core/src/test/java/ch/cyberduck/core/local/DefaultLocalTouchFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/local/DefaultLocalTouchFeatureTest.java rename to core/src/test/java/ch/cyberduck/core/local/DefaultLocalTouchFeatureTest.java diff --git a/test/ch/cyberduck/core/local/DisabledBrowserLauncherTest.java b/core/src/test/java/ch/cyberduck/core/local/DisabledBrowserLauncherTest.java similarity index 100% rename from test/ch/cyberduck/core/local/DisabledBrowserLauncherTest.java rename to core/src/test/java/ch/cyberduck/core/local/DisabledBrowserLauncherTest.java diff --git a/test/ch/cyberduck/core/local/FileWatcherTest.java b/core/src/test/java/ch/cyberduck/core/local/FileWatcherTest.java similarity index 97% rename from test/ch/cyberduck/core/local/FileWatcherTest.java rename to core/src/test/java/ch/cyberduck/core/local/FileWatcherTest.java index e313fc7527..c7131233c6 100644 --- a/test/ch/cyberduck/core/local/FileWatcherTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/FileWatcherTest.java @@ -1,10 +1,8 @@ package ch.cyberduck.core.local; import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Local; import ch.cyberduck.core.io.watchservice.DisabledWatchService; -import ch.cyberduck.core.test.Depends; import org.junit.Test; @@ -16,7 +14,6 @@ import static org.junit.Assert.assertTrue; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class FileWatcherTest extends AbstractTestCase { @Test diff --git a/test/ch/cyberduck/core/local/FinderLocalAttributesTest.java b/core/src/test/java/ch/cyberduck/core/local/FinderLocalAttributesTest.java similarity index 95% rename from test/ch/cyberduck/core/local/FinderLocalAttributesTest.java rename to core/src/test/java/ch/cyberduck/core/local/FinderLocalAttributesTest.java index 806f53f971..803a23d7c3 100644 --- a/test/ch/cyberduck/core/local/FinderLocalAttributesTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/FinderLocalAttributesTest.java @@ -1,9 +1,6 @@ package ch.cyberduck.core.local; -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Permission; -import ch.cyberduck.core.test.Depends; import org.junit.Test; @@ -15,8 +12,7 @@ import static org.junit.Assert.*; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) -public class FinderLocalAttributesTest extends AbstractTestCase { +public class FinderLocalAttributesTest { @Test public void testGetSize() throws Exception { diff --git a/test/ch/cyberduck/core/local/FinderLocalTest.java b/core/src/test/java/ch/cyberduck/core/local/FinderLocalTest.java similarity index 84% rename from test/ch/cyberduck/core/local/FinderLocalTest.java rename to core/src/test/java/ch/cyberduck/core/local/FinderLocalTest.java index 31d92a52da..0202f8b805 100644 --- a/test/ch/cyberduck/core/local/FinderLocalTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/FinderLocalTest.java @@ -1,27 +1,20 @@ package ch.cyberduck.core.local; -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.Local; -import ch.cyberduck.core.Permission; import ch.cyberduck.core.exception.LocalAccessDeniedException; import ch.cyberduck.core.exception.NotfoundException; -import ch.cyberduck.core.test.Depends; import org.apache.commons.lang3.StringUtils; import org.junit.Ignore; import org.junit.Test; import java.util.UUID; -import java.util.concurrent.Callable; import static org.junit.Assert.*; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) -public class FinderLocalTest extends AbstractTestCase { +public class FinderLocalTest { @Test public void testEqual() throws Exception { @@ -55,7 +48,7 @@ public class FinderLocalTest extends AbstractTestCase { @Test public void testList() throws Exception { - assertFalse(new FinderLocal("profiles").list().isEmpty()); + assertFalse(new FinderLocal("../profiles").list().isEmpty()); } @Test(expected = LocalAccessDeniedException.class) @@ -84,18 +77,18 @@ public class FinderLocalTest extends AbstractTestCase { @Test public void testWriteUnixPermission() throws Exception { - this.repeat(new Callable() { - @Override - public Local call() throws Exception { - Local l = new FinderLocal(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString()); - new DefaultLocalTouchFeature().touch(l); - final Permission permission = new Permission(644); - l.attributes().setPermission(permission); - assertEquals(permission, l.attributes().getPermission()); - l.delete(); - return l; - } - }, 10); +// this.repeat(new Callable() { +// @Override +// public Local call() throws Exception { +// Local l = new FinderLocal(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString()); +// new DefaultLocalTouchFeature().touch(l); +// final Permission permission = new Permission(644); +// l.attributes().setPermission(permission); +// assertEquals(permission, l.attributes().getPermission()); +// l.delete(); +// return l; +// } +// }, 10); } @Test diff --git a/test/ch/cyberduck/core/local/FinderSidebarServiceTest.java b/core/src/test/java/ch/cyberduck/core/local/FinderSidebarServiceTest.java similarity index 95% rename from test/ch/cyberduck/core/local/FinderSidebarServiceTest.java rename to core/src/test/java/ch/cyberduck/core/local/FinderSidebarServiceTest.java index 9ba66d1a6e..a02fef980b 100644 --- a/test/ch/cyberduck/core/local/FinderSidebarServiceTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/FinderSidebarServiceTest.java @@ -19,13 +19,10 @@ package ch.cyberduck.core.local; import ch.cyberduck.binding.application.NSWorkspace; import ch.cyberduck.binding.foundation.NSArray; -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Local; import ch.cyberduck.core.LocalFactory; import ch.cyberduck.core.exception.LocalAccessDeniedException; import ch.cyberduck.core.preferences.PreferencesFactory; -import ch.cyberduck.core.test.Depends; import org.junit.Ignore; import org.junit.Test; @@ -36,9 +33,8 @@ import java.util.UUID; /** * @version $Id:$ */ -@Depends(platform = Factory.Platform.Name.mac) @Ignore -public class FinderSidebarServiceTest extends AbstractTestCase { +public class FinderSidebarServiceTest { @Test public void testAddNotFound() throws Exception { diff --git a/test/ch/cyberduck/core/local/LaunchServicesApplicationFinderTest.java b/core/src/test/java/ch/cyberduck/core/local/LaunchServicesApplicationFinderTest.java similarity index 95% rename from test/ch/cyberduck/core/local/LaunchServicesApplicationFinderTest.java rename to core/src/test/java/ch/cyberduck/core/local/LaunchServicesApplicationFinderTest.java index edfba00b66..248d7e11d0 100644 --- a/test/ch/cyberduck/core/local/LaunchServicesApplicationFinderTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/LaunchServicesApplicationFinderTest.java @@ -19,8 +19,6 @@ package ch.cyberduck.core.local; */ import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.test.Depends; import org.junit.Test; @@ -31,7 +29,6 @@ import static org.junit.Assert.*; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class LaunchServicesApplicationFinderTest extends AbstractTestCase { @Test diff --git a/test/ch/cyberduck/core/local/LaunchServicesFileDescriptorTest.java b/core/src/test/java/ch/cyberduck/core/local/LaunchServicesFileDescriptorTest.java similarity index 91% rename from test/ch/cyberduck/core/local/LaunchServicesFileDescriptorTest.java rename to core/src/test/java/ch/cyberduck/core/local/LaunchServicesFileDescriptorTest.java index 5c92eb3901..f0a3ec1a75 100644 --- a/test/ch/cyberduck/core/local/LaunchServicesFileDescriptorTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/LaunchServicesFileDescriptorTest.java @@ -19,8 +19,6 @@ package ch.cyberduck.core.local; */ import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.test.Depends; import org.junit.Test; @@ -29,7 +27,6 @@ import static org.junit.Assert.assertTrue; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class LaunchServicesFileDescriptorTest extends AbstractTestCase { @Test diff --git a/test/ch/cyberduck/core/local/LaunchServicesQuarantineServiceTest.java b/core/src/test/java/ch/cyberduck/core/local/LaunchServicesQuarantineServiceTest.java similarity index 85% rename from test/ch/cyberduck/core/local/LaunchServicesQuarantineServiceTest.java rename to core/src/test/java/ch/cyberduck/core/local/LaunchServicesQuarantineServiceTest.java index f1f8a5b185..fa02a54dcb 100644 --- a/test/ch/cyberduck/core/local/LaunchServicesQuarantineServiceTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/LaunchServicesQuarantineServiceTest.java @@ -1,10 +1,7 @@ package ch.cyberduck.core.local; -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Local; -import ch.cyberduck.core.test.Depends; -import ch.cyberduck.core.test.NullLocal; +import ch.cyberduck.core.NullLocal; import org.apache.commons.lang3.StringUtils; import org.junit.Test; @@ -15,8 +12,8 @@ import java.util.concurrent.Callable; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) -public class LaunchServicesQuarantineServiceTest extends AbstractTestCase { +public class +LaunchServicesQuarantineServiceTest { @Test public void testSetQuarantineEmptyUrl() throws Exception { @@ -46,7 +43,7 @@ public class LaunchServicesQuarantineServiceTest extends AbstractTestCase { return l; } }; - this.repeat(c, 20); + c.call(); } @Test @@ -63,6 +60,6 @@ public class LaunchServicesQuarantineServiceTest extends AbstractTestCase { return l; } }; - this.repeat(c, 20); + c.call(); } } \ No newline at end of file diff --git a/test/ch/cyberduck/core/local/LibcWorkingDirectoryFinderTest.java b/core/src/test/java/ch/cyberduck/core/local/LibcWorkingDirectoryFinderTest.java similarity index 100% rename from test/ch/cyberduck/core/local/LibcWorkingDirectoryFinderTest.java rename to core/src/test/java/ch/cyberduck/core/local/LibcWorkingDirectoryFinderTest.java diff --git a/test/ch/cyberduck/core/local/LocalAttributesTest.java b/core/src/test/java/ch/cyberduck/core/local/LocalAttributesTest.java similarity index 100% rename from test/ch/cyberduck/core/local/LocalAttributesTest.java rename to core/src/test/java/ch/cyberduck/core/local/LocalAttributesTest.java diff --git a/test/ch/cyberduck/core/local/LocalTest.java b/core/src/test/java/ch/cyberduck/core/local/LocalTest.java similarity index 96% rename from test/ch/cyberduck/core/local/LocalTest.java rename to core/src/test/java/ch/cyberduck/core/local/LocalTest.java index 8b1ef65dab..33ae833fce 100644 --- a/test/ch/cyberduck/core/local/LocalTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/LocalTest.java @@ -20,8 +20,8 @@ public class LocalTest extends AbstractTestCase { @Test public void testList() throws Exception { - assertFalse(new Local("profiles").list().isEmpty()); - assertTrue(new Local("profiles").list(new Filter() { + assertFalse(new Local("../profiles").list().isEmpty()); + assertTrue(new Local("../profiles").list(new Filter() { @Override public boolean accept(final String file) { return false; diff --git a/test/ch/cyberduck/core/local/PanelSandboxBookmarkResolverTest.java b/core/src/test/java/ch/cyberduck/core/local/PanelSandboxBookmarkResolverTest.java similarity index 91% rename from test/ch/cyberduck/core/local/PanelSandboxBookmarkResolverTest.java rename to core/src/test/java/ch/cyberduck/core/local/PanelSandboxBookmarkResolverTest.java index 1db3eb7cb5..ea3587ed43 100644 --- a/test/ch/cyberduck/core/local/PanelSandboxBookmarkResolverTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/PanelSandboxBookmarkResolverTest.java @@ -18,6 +18,7 @@ package ch.cyberduck.core.local; */ import ch.cyberduck.core.AbstractTestCase; +import ch.cyberduck.core.Local; import ch.cyberduck.core.exception.LocalAccessDeniedException; import org.junit.Test; @@ -35,7 +36,7 @@ public class PanelSandboxBookmarkResolverTest extends AbstractTestCase { @Test(expected = LocalAccessDeniedException.class) public void testCreateNotFound() throws Exception { final String name = UUID.randomUUID().toString(); - FinderLocal l = new FinderLocal(System.getProperty("java.io.tmpdir"), name); + Local l = new Local(System.getProperty("java.io.tmpdir"), name); try { assertNull(new PanelSandboxBookmarkResolver().create(l)); } @@ -48,7 +49,7 @@ public class PanelSandboxBookmarkResolverTest extends AbstractTestCase { @Test(expected = LocalAccessDeniedException.class) public void testCreate() throws Exception { final String name = UUID.randomUUID().toString(); - FinderLocal l = new FinderLocal(System.getProperty("java.io.tmpdir"), name); + Local l = new Local(System.getProperty("java.io.tmpdir"), name); l.mkdir(); assertNotNull(new PanelSandboxBookmarkResolver().create(l)); } diff --git a/test/ch/cyberduck/core/local/RevealServiceFactoryTest.java b/core/src/test/java/ch/cyberduck/core/local/RevealServiceFactoryTest.java similarity index 100% rename from test/ch/cyberduck/core/local/RevealServiceFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/local/RevealServiceFactoryTest.java diff --git a/test/ch/cyberduck/core/local/TemporaryFileServiceTest.java b/core/src/test/java/ch/cyberduck/core/local/TemporaryFileServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/local/TemporaryFileServiceTest.java rename to core/src/test/java/ch/cyberduck/core/local/TemporaryFileServiceTest.java diff --git a/test/ch/cyberduck/core/local/TildeExpanderTest.java b/core/src/test/java/ch/cyberduck/core/local/TildeExpanderTest.java similarity index 100% rename from test/ch/cyberduck/core/local/TildeExpanderTest.java rename to core/src/test/java/ch/cyberduck/core/local/TildeExpanderTest.java diff --git a/test/ch/cyberduck/core/local/WorkdirPrefixerTest.java b/core/src/test/java/ch/cyberduck/core/local/WorkdirPrefixerTest.java similarity index 100% rename from test/ch/cyberduck/core/local/WorkdirPrefixerTest.java rename to core/src/test/java/ch/cyberduck/core/local/WorkdirPrefixerTest.java diff --git a/test/ch/cyberduck/core/local/WorkspaceApplicationBadgeLabelerTest.java b/core/src/test/java/ch/cyberduck/core/local/WorkspaceApplicationBadgeLabelerTest.java similarity index 73% rename from test/ch/cyberduck/core/local/WorkspaceApplicationBadgeLabelerTest.java rename to core/src/test/java/ch/cyberduck/core/local/WorkspaceApplicationBadgeLabelerTest.java index 038f9a4192..a8c58fc6e1 100644 --- a/test/ch/cyberduck/core/local/WorkspaceApplicationBadgeLabelerTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/WorkspaceApplicationBadgeLabelerTest.java @@ -1,15 +1,12 @@ package ch.cyberduck.core.local; import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.test.Depends; import org.junit.Test; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class WorkspaceApplicationBadgeLabelerTest extends AbstractTestCase{ @Test diff --git a/core/src/test/java/ch/cyberduck/core/local/WorkspaceApplicationLauncherTest.java b/core/src/test/java/ch/cyberduck/core/local/WorkspaceApplicationLauncherTest.java new file mode 100644 index 0000000000..e35d51db3d --- /dev/null +++ b/core/src/test/java/ch/cyberduck/core/local/WorkspaceApplicationLauncherTest.java @@ -0,0 +1,50 @@ +package ch.cyberduck.core.local; + +/* + * Copyright (c) 2012 David Kocher. All rights reserved. + * http://cyberduck.ch/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * Bug fixes, suggestions and comments should be sent to: + * dkocher@cyberduck.ch + */ + +import ch.cyberduck.core.AbstractTestCase; +import ch.cyberduck.core.NullLocal; + +import org.junit.Test; + +import java.util.UUID; + +/** + * @version $Id$ + */ +public class WorkspaceApplicationLauncherTest extends AbstractTestCase { + + @Test + public void testOpen() throws Exception { + new WorkspaceApplicationLauncher().open(new NullLocal("t")); + final NullLocal file = new NullLocal(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString()); + LocalTouchFactory.get().touch(file); + file.delete(true); + new WorkspaceApplicationLauncher().open(file); + } + + @Test + public void testBounce() throws Exception { + new WorkspaceApplicationLauncher().bounce(new NullLocal("t")); + final NullLocal file = new NullLocal(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString()); + LocalTouchFactory.get().touch(file); + file.delete(true); + new WorkspaceApplicationLauncher().bounce(file); + } +} diff --git a/test/ch/cyberduck/core/local/WorkspaceBrowserLauncherTest.java b/core/src/test/java/ch/cyberduck/core/local/WorkspaceBrowserLauncherTest.java similarity index 70% rename from test/ch/cyberduck/core/local/WorkspaceBrowserLauncherTest.java rename to core/src/test/java/ch/cyberduck/core/local/WorkspaceBrowserLauncherTest.java index 32d3a1dcff..95a9760f84 100644 --- a/test/ch/cyberduck/core/local/WorkspaceBrowserLauncherTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/WorkspaceBrowserLauncherTest.java @@ -1,8 +1,6 @@ package ch.cyberduck.core.local; import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.test.Depends; import org.junit.Ignore; import org.junit.Test; @@ -13,13 +11,10 @@ import static org.junit.Assert.assertTrue; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class WorkspaceBrowserLauncherTest extends AbstractTestCase { @Test - @Ignore public void testOpen() throws Exception { - assertTrue(new WorkspaceBrowserLauncher().open("http://cyberduck.ch")); assertFalse(new WorkspaceBrowserLauncher().open("")); assertFalse(new WorkspaceBrowserLauncher().open(null)); } diff --git a/test/ch/cyberduck/core/local/WorkspaceIconServiceTest.java b/core/src/test/java/ch/cyberduck/core/local/WorkspaceIconServiceTest.java similarity index 89% rename from test/ch/cyberduck/core/local/WorkspaceIconServiceTest.java rename to core/src/test/java/ch/cyberduck/core/local/WorkspaceIconServiceTest.java index b97e609517..84d9ef4ea4 100644 --- a/test/ch/cyberduck/core/local/WorkspaceIconServiceTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/WorkspaceIconServiceTest.java @@ -2,10 +2,8 @@ package ch.cyberduck.core.local; import ch.cyberduck.binding.application.NSImage; import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Local; import ch.cyberduck.core.preferences.PreferencesFactory; -import ch.cyberduck.core.test.Depends; import org.junit.Test; @@ -17,7 +15,6 @@ import static org.junit.Assert.assertTrue; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class WorkspaceIconServiceTest extends AbstractTestCase { @Test @@ -25,7 +22,7 @@ public class WorkspaceIconServiceTest extends AbstractTestCase { final WorkspaceIconService s = new WorkspaceIconService(); final Local file = new Local(PreferencesFactory.get().getProperty("tmp.dir"), UUID.randomUUID().toString()); - assertFalse(s.update(file, NSImage.imageWithContentsOfFile("img/download0.icns"))); + assertFalse(s.update(file, NSImage.imageWithContentsOfFile("../img/download0.icns"))); } @Test @@ -34,7 +31,7 @@ public class WorkspaceIconServiceTest extends AbstractTestCase { final Local file = new Local(PreferencesFactory.get().getProperty("tmp.dir"), UUID.randomUUID().toString()); file.mkdir(); - assertTrue(s.update(file, NSImage.imageWithContentsOfFile("img/download0.icns"))); + assertTrue(s.update(file, NSImage.imageWithContentsOfFile("../img/download0.icns"))); } @Test @@ -43,7 +40,7 @@ public class WorkspaceIconServiceTest extends AbstractTestCase { final Local file = new Local(PreferencesFactory.get().getProperty("tmp.dir"), UUID.randomUUID().toString()); LocalTouchFactory.get().touch(file); - assertTrue(s.update(file, NSImage.imageWithContentsOfFile("img/download0.icns"))); + assertTrue(s.update(file, NSImage.imageWithContentsOfFile("../img/download0.icns"))); file.delete(); } @@ -55,7 +52,7 @@ public class WorkspaceIconServiceTest extends AbstractTestCase { assertFalse(s.remove(file)); LocalTouchFactory.get().touch(file); assertFalse(s.remove(file)); - assertTrue(s.update(file, NSImage.imageWithContentsOfFile("img/download0.icns"))); + assertTrue(s.update(file, NSImage.imageWithContentsOfFile("../img/download0.icns"))); assertTrue(s.remove(file)); file.delete(); } diff --git a/test/ch/cyberduck/core/local/WorkspaceRevealServiceTest.java b/core/src/test/java/ch/cyberduck/core/local/WorkspaceRevealServiceTest.java similarity index 56% rename from test/ch/cyberduck/core/local/WorkspaceRevealServiceTest.java rename to core/src/test/java/ch/cyberduck/core/local/WorkspaceRevealServiceTest.java index f3c032bbda..8347366b15 100644 --- a/test/ch/cyberduck/core/local/WorkspaceRevealServiceTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/WorkspaceRevealServiceTest.java @@ -1,8 +1,7 @@ package ch.cyberduck.core.local; import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.test.Depends; +import ch.cyberduck.core.Local; import org.junit.Test; @@ -11,11 +10,10 @@ import static org.junit.Assert.assertTrue; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class WorkspaceRevealServiceTest extends AbstractTestCase { @Test public void testReveal() throws Exception { - assertTrue(new WorkspaceRevealService().reveal(new FinderLocal(System.getProperty("java.io.tmpdir")))); + assertTrue(new WorkspaceRevealService().reveal(new Local(System.getProperty("java.io.tmpdir")))); } } diff --git a/test/ch/cyberduck/core/local/WorkspaceSymlinkFeatureTest.java b/core/src/test/java/ch/cyberduck/core/local/WorkspaceSymlinkFeatureTest.java similarity index 89% rename from test/ch/cyberduck/core/local/WorkspaceSymlinkFeatureTest.java rename to core/src/test/java/ch/cyberduck/core/local/WorkspaceSymlinkFeatureTest.java index 9e30772eec..3ec74bf1c1 100644 --- a/test/ch/cyberduck/core/local/WorkspaceSymlinkFeatureTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/WorkspaceSymlinkFeatureTest.java @@ -1,10 +1,8 @@ package ch.cyberduck.core.local; import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Local; import ch.cyberduck.core.preferences.PreferencesFactory; -import ch.cyberduck.core.test.Depends; import org.junit.Test; @@ -16,7 +14,6 @@ import static org.junit.Assert.assertTrue; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class WorkspaceSymlinkFeatureTest extends AbstractTestCase { @Test diff --git a/test/ch/cyberduck/core/local/WorkspaceTrashFeatureTest.java b/core/src/test/java/ch/cyberduck/core/local/WorkspaceTrashFeatureTest.java similarity index 57% rename from test/ch/cyberduck/core/local/WorkspaceTrashFeatureTest.java rename to core/src/test/java/ch/cyberduck/core/local/WorkspaceTrashFeatureTest.java index 4b94ab4e4d..9778c030ce 100644 --- a/test/ch/cyberduck/core/local/WorkspaceTrashFeatureTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/WorkspaceTrashFeatureTest.java @@ -1,14 +1,11 @@ package ch.cyberduck.core.local; import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Local; -import ch.cyberduck.core.test.Depends; import org.junit.Test; import java.util.UUID; -import java.util.concurrent.Callable; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -16,7 +13,6 @@ import static org.junit.Assert.assertTrue; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class WorkspaceTrashFeatureTest extends AbstractTestCase { @Test @@ -31,16 +27,10 @@ public class WorkspaceTrashFeatureTest extends AbstractTestCase { @Test public void testTrashRepeated() throws Exception { final WorkspaceTrashFeature f = new WorkspaceTrashFeature(); - this.repeat(new Callable() { - @Override - public Local call() throws Exception { - Local l = new Local(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString()); - new DefaultLocalTouchFeature().touch(l); - assertTrue(l.exists()); - f.trash(l); - assertFalse(l.exists()); - return l; - } - }, 10); + Local l = new Local(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString()); + new DefaultLocalTouchFeature().touch(l); + assertTrue(l.exists()); + f.trash(l); + assertFalse(l.exists()); } } diff --git a/test/ch/cyberduck/core/local/features/DefaultSymlinkFeatureTest.java b/core/src/test/java/ch/cyberduck/core/local/features/DefaultSymlinkFeatureTest.java similarity index 96% rename from test/ch/cyberduck/core/local/features/DefaultSymlinkFeatureTest.java rename to core/src/test/java/ch/cyberduck/core/local/features/DefaultSymlinkFeatureTest.java index 2782d9b23a..19325c8f24 100644 --- a/test/ch/cyberduck/core/local/features/DefaultSymlinkFeatureTest.java +++ b/core/src/test/java/ch/cyberduck/core/local/features/DefaultSymlinkFeatureTest.java @@ -19,7 +19,6 @@ package ch.cyberduck.core.local.features; import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Local; -import ch.cyberduck.core.exception.NotfoundException; import ch.cyberduck.core.local.DefaultLocalTouchFeature; import ch.cyberduck.core.preferences.PreferencesFactory; diff --git a/test/ch/cyberduck/core/logging/LoggingConfigurationTest.java b/core/src/test/java/ch/cyberduck/core/logging/LoggingConfigurationTest.java similarity index 100% rename from test/ch/cyberduck/core/logging/LoggingConfigurationTest.java rename to core/src/test/java/ch/cyberduck/core/logging/LoggingConfigurationTest.java diff --git a/test/ch/cyberduck/core/logging/SystemLogAppenderTest.java b/core/src/test/java/ch/cyberduck/core/logging/SystemLogAppenderTest.java similarity index 84% rename from test/ch/cyberduck/core/logging/SystemLogAppenderTest.java rename to core/src/test/java/ch/cyberduck/core/logging/SystemLogAppenderTest.java index 0147b59ae7..86f2629ba0 100644 --- a/test/ch/cyberduck/core/logging/SystemLogAppenderTest.java +++ b/core/src/test/java/ch/cyberduck/core/logging/SystemLogAppenderTest.java @@ -1,8 +1,6 @@ package ch.cyberduck.core.logging; import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.test.Depends; import org.apache.log4j.Level; import org.apache.log4j.Logger; @@ -13,7 +11,6 @@ import org.junit.Test; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class SystemLogAppenderTest extends AbstractTestCase { @Test diff --git a/test/ch/cyberduck/core/notification/NotificationCenterTest.java b/core/src/test/java/ch/cyberduck/core/notification/NotificationCenterTest.java similarity index 100% rename from test/ch/cyberduck/core/notification/NotificationCenterTest.java rename to core/src/test/java/ch/cyberduck/core/notification/NotificationCenterTest.java diff --git a/test/ch/cyberduck/core/notification/NotificationServiceFactoryTest.java b/core/src/test/java/ch/cyberduck/core/notification/NotificationServiceFactoryTest.java similarity index 100% rename from test/ch/cyberduck/core/notification/NotificationServiceFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/notification/NotificationServiceFactoryTest.java diff --git a/test/ch/cyberduck/core/pasteboard/PathPasteboardFactoryTest.java b/core/src/test/java/ch/cyberduck/core/pasteboard/PathPasteboardFactoryTest.java similarity index 76% rename from test/ch/cyberduck/core/pasteboard/PathPasteboardFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/pasteboard/PathPasteboardFactoryTest.java index 6ac70ed6ce..d8d3f74135 100644 --- a/test/ch/cyberduck/core/pasteboard/PathPasteboardFactoryTest.java +++ b/core/src/test/java/ch/cyberduck/core/pasteboard/PathPasteboardFactoryTest.java @@ -2,9 +2,10 @@ package ch.cyberduck.core.pasteboard; import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Host; +import ch.cyberduck.core.Scheme; import ch.cyberduck.core.Session; -import ch.cyberduck.core.ftp.FTPSession; -import ch.cyberduck.core.sftp.SFTPProtocol; +import ch.cyberduck.core.TestProtocol; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -17,7 +18,7 @@ public class PathPasteboardFactoryTest extends AbstractTestCase { @Test public void testGetPasteboard() throws Exception { - final Session s = new FTPSession(new Host(new SFTPProtocol(), "l")); + final Session s = new NullSession(new Host(new TestProtocol(Scheme.ftp), "l")); final PathPasteboard pasteboard = PathPasteboardFactory.getPasteboard(s); assertNotNull(pasteboard); assertEquals(pasteboard, PathPasteboardFactory.getPasteboard(s)); diff --git a/test/ch/cyberduck/core/preferences/ApplicationSupportDirectoryFinderTest.java b/core/src/test/java/ch/cyberduck/core/preferences/ApplicationSupportDirectoryFinderTest.java similarity index 100% rename from test/ch/cyberduck/core/preferences/ApplicationSupportDirectoryFinderTest.java rename to core/src/test/java/ch/cyberduck/core/preferences/ApplicationSupportDirectoryFinderTest.java diff --git a/test/ch/cyberduck/core/preferences/BundleApplicationResourcesFinderTest.java b/core/src/test/java/ch/cyberduck/core/preferences/BundleApplicationResourcesFinderTest.java similarity index 85% rename from test/ch/cyberduck/core/preferences/BundleApplicationResourcesFinderTest.java rename to core/src/test/java/ch/cyberduck/core/preferences/BundleApplicationResourcesFinderTest.java index 00cede1045..f3e45c039d 100644 --- a/test/ch/cyberduck/core/preferences/BundleApplicationResourcesFinderTest.java +++ b/core/src/test/java/ch/cyberduck/core/preferences/BundleApplicationResourcesFinderTest.java @@ -20,18 +20,14 @@ package ch.cyberduck.core.preferences; import ch.cyberduck.binding.foundation.NSBundle; import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Local; import ch.cyberduck.core.exception.NotfoundException; -import ch.cyberduck.core.local.FinderLocal; -import ch.cyberduck.core.test.Depends; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -@Depends(platform = Factory.Platform.Name.mac) public class BundleApplicationResourcesFinderTest extends AbstractTestCase { @Test @@ -41,14 +37,14 @@ public class BundleApplicationResourcesFinderTest extends AbstractTestCase { @Test public void testSymbolicLink() throws Exception { - final NSBundle bundle = new BundleApplicationResourcesFinder().bundle(NSBundle.bundleWithPath("."), new FinderLocal("/usr/bin/java")); + final NSBundle bundle = new BundleApplicationResourcesFinder().bundle(NSBundle.bundleWithPath("."), new Local("/usr/bin/java")); assertNotNull(bundle); assertEquals(NSBundle.bundleWithPath("/System/Library/Frameworks/JavaVM.framework/Versions/A"), bundle); } @Test public void testAccessDenied() throws Exception { - final NSBundle bundle = new BundleApplicationResourcesFinder().bundle(NSBundle.bundleWithPath("."), new FinderLocal("/usr/bin/java") { + final NSBundle bundle = new BundleApplicationResourcesFinder().bundle(NSBundle.bundleWithPath("."), new Local("/usr/bin/java") { @Override public Local getSymlinkTarget() throws NotfoundException { throw new NotfoundException("f"); diff --git a/test/ch/cyberduck/core/preferences/SecurityApplicationGroupSupportDirectoryFinderTest.java b/core/src/test/java/ch/cyberduck/core/preferences/SecurityApplicationGroupSupportDirectoryFinderTest.java similarity index 100% rename from test/ch/cyberduck/core/preferences/SecurityApplicationGroupSupportDirectoryFinderTest.java rename to core/src/test/java/ch/cyberduck/core/preferences/SecurityApplicationGroupSupportDirectoryFinderTest.java diff --git a/test/ch/cyberduck/core/preferences/ServiceManagementApplicationLoginRegistryTest.java b/core/src/test/java/ch/cyberduck/core/preferences/ServiceManagementApplicationLoginRegistryTest.java similarity index 90% rename from test/ch/cyberduck/core/preferences/ServiceManagementApplicationLoginRegistryTest.java rename to core/src/test/java/ch/cyberduck/core/preferences/ServiceManagementApplicationLoginRegistryTest.java index 5bb90afd50..6a4a51b059 100644 --- a/test/ch/cyberduck/core/preferences/ServiceManagementApplicationLoginRegistryTest.java +++ b/core/src/test/java/ch/cyberduck/core/preferences/ServiceManagementApplicationLoginRegistryTest.java @@ -18,7 +18,6 @@ package ch.cyberduck.core.preferences; * feedback@cyberduck.io */ -import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.local.Application; import org.junit.Test; @@ -28,7 +27,7 @@ import static org.junit.Assert.assertFalse; /** * @version $Id$ */ -public class ServiceManagementApplicationLoginRegistryTest extends AbstractTestCase { +public class ServiceManagementApplicationLoginRegistryTest { @Test public void testRegister() throws Exception { diff --git a/test/ch/cyberduck/core/proxy/DefaultProxyFinderTest.java b/core/src/test/java/ch/cyberduck/core/proxy/DefaultProxyFinderTest.java similarity index 82% rename from test/ch/cyberduck/core/proxy/DefaultProxyFinderTest.java rename to core/src/test/java/ch/cyberduck/core/proxy/DefaultProxyFinderTest.java index f5651929d3..0211a30f93 100644 --- a/test/ch/cyberduck/core/proxy/DefaultProxyFinderTest.java +++ b/core/src/test/java/ch/cyberduck/core/proxy/DefaultProxyFinderTest.java @@ -19,7 +19,7 @@ package ch.cyberduck.core.proxy; import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Host; -import ch.cyberduck.core.ProtocolFactory; +import ch.cyberduck.core.TestProtocol; import org.junit.Test; @@ -34,7 +34,7 @@ public class DefaultProxyFinderTest extends AbstractTestCase { @Test public void testFind() throws Exception { final DefaultProxyFinder proxy = new DefaultProxyFinder(); - assertEquals(Proxy.Type.DIRECT, proxy.find(new Host("cyberduck.io")).getType()); + assertEquals(Proxy.Type.DIRECT, proxy.find(new Host(new TestProtocol(), "cyberduck.io")).getType()); // assertEquals(Proxy.Type.HTTP, proxy.find(new Host(ProtocolFactory.WEBDAV, "cyberduck.io")).getType()); } @@ -47,12 +47,12 @@ public class DefaultProxyFinderTest extends AbstractTestCase { @Test public void testExcludedLocalHost() throws Exception { final DefaultProxyFinder proxy = new DefaultProxyFinder(); - assertEquals(Proxy.Type.DIRECT, proxy.find(new Host("cyberduck.local")).getType()); + assertEquals(Proxy.Type.DIRECT, proxy.find(new Host(new TestProtocol(), "cyberduck.local")).getType()); } @Test public void testSimpleExcluded() throws Exception { final DefaultProxyFinder proxy = new DefaultProxyFinder(); - assertEquals(Proxy.Type.DIRECT, proxy.find(new Host(ProtocolFactory.WEBDAV, "simple")).getType()); + assertEquals(Proxy.Type.DIRECT, proxy.find(new Host(new TestProtocol(), "simple")).getType()); } } \ No newline at end of file diff --git a/test/ch/cyberduck/core/proxy/ProxyFinderTest.java b/core/src/test/java/ch/cyberduck/core/proxy/ProxyFinderTest.java similarity index 100% rename from test/ch/cyberduck/core/proxy/ProxyFinderTest.java rename to core/src/test/java/ch/cyberduck/core/proxy/ProxyFinderTest.java diff --git a/test/ch/cyberduck/core/SystemConfigurationProxyTest.java b/core/src/test/java/ch/cyberduck/core/proxy/SystemConfigurationProxyTest.java similarity index 66% rename from test/ch/cyberduck/core/SystemConfigurationProxyTest.java rename to core/src/test/java/ch/cyberduck/core/proxy/SystemConfigurationProxyTest.java index 942728f191..5fec224b68 100644 --- a/test/ch/cyberduck/core/SystemConfigurationProxyTest.java +++ b/core/src/test/java/ch/cyberduck/core/proxy/SystemConfigurationProxyTest.java @@ -1,9 +1,8 @@ -package ch.cyberduck.core; +package ch.cyberduck.core.proxy; -import ch.cyberduck.core.proxy.Proxy; -import ch.cyberduck.core.proxy.ProxyFinder; -import ch.cyberduck.core.proxy.SystemConfigurationProxy; -import ch.cyberduck.core.test.Depends; +import ch.cyberduck.core.AbstractTestCase; +import ch.cyberduck.core.Host; +import ch.cyberduck.core.TestProtocol; import org.junit.Test; @@ -13,13 +12,12 @@ import static org.junit.Assert.assertTrue; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class SystemConfigurationProxyTest extends AbstractTestCase { @Test public void testFind() throws Exception { final SystemConfigurationProxy proxy = new SystemConfigurationProxy(); - assertEquals(Proxy.Type.DIRECT, proxy.find(new Host("cyberduck.io")).getType()); + assertEquals(Proxy.Type.DIRECT, proxy.find(new Host(new TestProtocol(), "cyberduck.io")).getType()); // assertEquals(Proxy.Type.HTTP, proxy.find(new Host(ProtocolFactory.WEBDAV, "cyberduck.io")).getType()); // assertEquals(Proxy.Type.HTTPS, proxy.find(new Host(ProtocolFactory.WEBDAV_SSL, "cyberduck.io")).getType()); } @@ -33,12 +31,12 @@ public class SystemConfigurationProxyTest extends AbstractTestCase { @Test public void testExcludedLocalHost() throws Exception { final SystemConfigurationProxy proxy = new SystemConfigurationProxy(); - assertEquals(Proxy.Type.DIRECT, proxy.find(new Host("cyberduck.local")).getType()); + assertEquals(Proxy.Type.DIRECT, proxy.find(new Host(new TestProtocol(), "cyberduck.local")).getType()); } @Test public void testSimpleExcluded() throws Exception { final SystemConfigurationProxy proxy = new SystemConfigurationProxy(); - assertEquals(Proxy.Type.DIRECT, proxy.find(new Host(ProtocolFactory.WEBDAV, "simple")).getType()); + assertEquals(Proxy.Type.DIRECT, proxy.find(new Host(new TestProtocol(), "simple")).getType()); } } diff --git a/test/ch/cyberduck/core/resources/IconCacheFactoryTest.java b/core/src/test/java/ch/cyberduck/core/resources/IconCacheFactoryTest.java similarity index 100% rename from test/ch/cyberduck/core/resources/IconCacheFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/resources/IconCacheFactoryTest.java diff --git a/test/ch/cyberduck/core/sftp/openssh/OpenSSHCredentialsConfiguratorTest.java b/core/src/test/java/ch/cyberduck/core/sftp/openssh/OpenSSHCredentialsConfiguratorTest.java similarity index 74% rename from test/ch/cyberduck/core/sftp/openssh/OpenSSHCredentialsConfiguratorTest.java rename to core/src/test/java/ch/cyberduck/core/sftp/openssh/OpenSSHCredentialsConfiguratorTest.java index 9cda85da23..bba63a415d 100644 --- a/test/ch/cyberduck/core/sftp/openssh/OpenSSHCredentialsConfiguratorTest.java +++ b/core/src/test/java/ch/cyberduck/core/sftp/openssh/OpenSSHCredentialsConfiguratorTest.java @@ -22,10 +22,10 @@ import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Credentials; import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; -import ch.cyberduck.core.ProtocolFactory; -import ch.cyberduck.core.sftp.SFTPProtocol; +import ch.cyberduck.core.Scheme; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.sftp.openssh.config.transport.OpenSshConfig; -import ch.cyberduck.core.test.NullLocal; +import ch.cyberduck.core.NullLocal; import org.junit.Test; @@ -40,18 +40,18 @@ public class OpenSSHCredentialsConfiguratorTest extends AbstractTestCase { public void testNoConfigure() throws Exception { OpenSSHCredentialsConfigurator c = new OpenSSHCredentialsConfigurator( new OpenSshConfig( - new Local("test/ch/cyberduck/core/sftp", "openssh/config"))); + new Local("src/main/test/resources", "openssh/config"))); Credentials credentials = new Credentials("user", " "); credentials.setIdentity(new NullLocal("t")); - assertEquals("t", c.configure(new Host(new SFTPProtocol(), "t", credentials)).getIdentity().getName()); + assertEquals("t", c.configure(new Host(new TestProtocol(Scheme.sftp), "t", credentials)).getIdentity().getName()); } @Test public void testConfigureKnownHost() throws Exception { OpenSSHCredentialsConfigurator c = new OpenSSHCredentialsConfigurator( new OpenSshConfig( - new Local("test/ch/cyberduck/core/sftp", "openssh/config"))); - final Host host = new Host("alias"); + new Local("src/test/resources", "openssh/config"))); + final Host host = new Host(new TestProtocol(Scheme.sftp), "alias"); final Credentials credentials = c.configure(host); assertSame(host.getCredentials(), credentials); assertNotNull(credentials.getIdentity()); @@ -63,8 +63,8 @@ public class OpenSSHCredentialsConfiguratorTest extends AbstractTestCase { public void testConfigureDefaultKey() throws Exception { OpenSSHCredentialsConfigurator c = new OpenSSHCredentialsConfigurator( new OpenSshConfig( - new Local("test/ch/cyberduck/core/sftp", "openssh/config"))); - final Credentials credentials = c.configure(new Host("t")); + new Local("src/main/test/resources", "openssh/config"))); + final Credentials credentials = c.configure(new Host(new TestProtocol(Scheme.sftp), "t")); // ssh.authentication.publickey.default.enable assertNull(credentials.getIdentity()); } @@ -73,7 +73,7 @@ public class OpenSSHCredentialsConfiguratorTest extends AbstractTestCase { public void testNullHostname() throws Exception { OpenSSHCredentialsConfigurator c = new OpenSSHCredentialsConfigurator( new OpenSshConfig( - new Local("test/ch/cyberduck/core/sftp", "openssh/config"))); - assertNotNull(c.configure(new Host(ProtocolFactory.SFTP, null))); + new Local("src/main/test/resources", "openssh/config"))); + assertNotNull(c.configure(new Host(new TestProtocol(Scheme.sftp), null))); } } diff --git a/test/ch/cyberduck/core/sftp/openssh/OpenSSHHostnameConfiguratorTest.java b/core/src/test/java/ch/cyberduck/core/sftp/openssh/OpenSSHHostnameConfiguratorTest.java similarity index 89% rename from test/ch/cyberduck/core/sftp/openssh/OpenSSHHostnameConfiguratorTest.java rename to core/src/test/java/ch/cyberduck/core/sftp/openssh/OpenSSHHostnameConfiguratorTest.java index 64e47f3a6f..688a2819e5 100644 --- a/test/ch/cyberduck/core/sftp/openssh/OpenSSHHostnameConfiguratorTest.java +++ b/core/src/test/java/ch/cyberduck/core/sftp/openssh/OpenSSHHostnameConfiguratorTest.java @@ -35,7 +35,7 @@ public class OpenSSHHostnameConfiguratorTest extends AbstractTestCase { public void testLookup() throws Exception { OpenSSHHostnameConfigurator c = new OpenSSHHostnameConfigurator( new OpenSshConfig( - new Local("test/ch/cyberduck/core/sftp", "openssh/config"))); + new Local("src/test/resources", "openssh/config"))); assertEquals("cyberduck.ch", c.getHostname("alias")); } @@ -43,7 +43,7 @@ public class OpenSSHHostnameConfiguratorTest extends AbstractTestCase { public void testPort() throws Exception { OpenSSHHostnameConfigurator c = new OpenSSHHostnameConfigurator( new OpenSshConfig( - new Local("test/ch/cyberduck/core/sftp", "openssh/config"))); + new Local("src/test/resources", "openssh/config"))); assertEquals(555, c.getPort("portalias")); assertEquals(-1, c.getPort(null)); } diff --git a/test/ch/cyberduck/core/socket/NetworkInterfaceAwareSocketFactoryTest.java b/core/src/test/java/ch/cyberduck/core/socket/NetworkInterfaceAwareSocketFactoryTest.java similarity index 97% rename from test/ch/cyberduck/core/socket/NetworkInterfaceAwareSocketFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/socket/NetworkInterfaceAwareSocketFactoryTest.java index cd911c13c2..33331d26f7 100644 --- a/test/ch/cyberduck/core/socket/NetworkInterfaceAwareSocketFactoryTest.java +++ b/core/src/test/java/ch/cyberduck/core/socket/NetworkInterfaceAwareSocketFactoryTest.java @@ -19,7 +19,6 @@ package ch.cyberduck.core.socket; import ch.cyberduck.core.AbstractTestCase; -import org.junit.Ignore; import org.junit.Test; import java.net.Inet6Address; @@ -66,8 +65,7 @@ public class NetworkInterfaceAwareSocketFactoryTest extends AbstractTestCase { NetworkInterface.getByName("en0").getIndex()); } - // We have no IPv6 in the test environment - @Ignore + // IPv6 in the test environment @Test public void testFindEn0DefaultWithUnknownHost() throws Exception { final Socket socket = new NetworkInterfaceAwareSocketFactory(Arrays.asList("awdl0", "utun0")).createSocket(); diff --git a/test/ch/cyberduck/core/sparkle/SandboxTest.java b/core/src/test/java/ch/cyberduck/core/sparkle/SandboxTest.java similarity index 89% rename from test/ch/cyberduck/core/sparkle/SandboxTest.java rename to core/src/test/java/ch/cyberduck/core/sparkle/SandboxTest.java index 07f1d1ac83..2ad596cb5e 100644 --- a/test/ch/cyberduck/core/sparkle/SandboxTest.java +++ b/core/src/test/java/ch/cyberduck/core/sparkle/SandboxTest.java @@ -19,14 +19,11 @@ package ch.cyberduck.core.sparkle; */ import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.test.Depends; import org.junit.Test; import static org.junit.Assert.assertFalse; -@Depends(platform = Factory.Platform.Name.mac) public class SandboxTest extends AbstractTestCase{ @Test diff --git a/test/ch/cyberduck/core/sparkle/UpdaterTest.java b/core/src/test/java/ch/cyberduck/core/sparkle/UpdaterTest.java similarity index 89% rename from test/ch/cyberduck/core/sparkle/UpdaterTest.java rename to core/src/test/java/ch/cyberduck/core/sparkle/UpdaterTest.java index ca180f9e0d..9cf65e4c3f 100644 --- a/test/ch/cyberduck/core/sparkle/UpdaterTest.java +++ b/core/src/test/java/ch/cyberduck/core/sparkle/UpdaterTest.java @@ -19,15 +19,12 @@ package ch.cyberduck.core.sparkle; */ import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.test.Depends; import org.junit.Ignore; import org.junit.Test; import static org.junit.Assert.assertNotNull; -@Depends(platform = Factory.Platform.Name.mac) @Ignore public class UpdaterTest extends AbstractTestCase { diff --git a/test/ch/cyberduck/core/ssl/CertificateStoreX509KeyManagerTest.java b/core/src/test/java/ch/cyberduck/core/ssl/CertificateStoreX509KeyManagerTest.java similarity index 100% rename from test/ch/cyberduck/core/ssl/CertificateStoreX509KeyManagerTest.java rename to core/src/test/java/ch/cyberduck/core/ssl/CertificateStoreX509KeyManagerTest.java diff --git a/test/ch/cyberduck/core/ssl/CertificateStoreX509TrustManagerTest.java b/core/src/test/java/ch/cyberduck/core/ssl/CertificateStoreX509TrustManagerTest.java similarity index 91% rename from test/ch/cyberduck/core/ssl/CertificateStoreX509TrustManagerTest.java rename to core/src/test/java/ch/cyberduck/core/ssl/CertificateStoreX509TrustManagerTest.java index da36f62b47..252f0c2c71 100644 --- a/test/ch/cyberduck/core/ssl/CertificateStoreX509TrustManagerTest.java +++ b/core/src/test/java/ch/cyberduck/core/ssl/CertificateStoreX509TrustManagerTest.java @@ -28,7 +28,7 @@ public class CertificateStoreX509TrustManagerTest extends AbstractTestCase { }, new DefaultCertificateStore()); CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate) cf.generateCertificate( - new FileInputStream("test/ch/cyberduck/core/ssl/OXxlRDVcWqdPEvFm.cer") + new FileInputStream("src/test/resources//OXxlRDVcWqdPEvFm.cer") ); m.checkServerTrusted(new X509Certificate[]{cert}, "RSA"); } @@ -47,7 +47,7 @@ public class CertificateStoreX509TrustManagerTest extends AbstractTestCase { } } ); - InputStream inStream = new FileInputStream("test/ch/cyberduck/core/ssl/OXxlRDVcWqdPEvFm.cer"); + InputStream inStream = new FileInputStream("src/test/resources//OXxlRDVcWqdPEvFm.cer"); CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream); m.checkServerTrusted(new X509Certificate[]{cert}, "RSA"); diff --git a/test/ch/cyberduck/core/ssl/CustomTrustSSLProtocolSocketFactoryTest.java b/core/src/test/java/ch/cyberduck/core/ssl/CustomTrustSSLProtocolSocketFactoryTest.java similarity index 100% rename from test/ch/cyberduck/core/ssl/CustomTrustSSLProtocolSocketFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/ssl/CustomTrustSSLProtocolSocketFactoryTest.java diff --git a/test/ch/cyberduck/core/ssl/DEREncoderTest.java b/core/src/test/java/ch/cyberduck/core/ssl/DEREncoderTest.java similarity index 93% rename from test/ch/cyberduck/core/ssl/DEREncoderTest.java rename to core/src/test/java/ch/cyberduck/core/ssl/DEREncoderTest.java index 75255143e9..3b0c451025 100644 --- a/test/ch/cyberduck/core/ssl/DEREncoderTest.java +++ b/core/src/test/java/ch/cyberduck/core/ssl/DEREncoderTest.java @@ -36,7 +36,7 @@ public class DEREncoderTest extends AbstractTestCase { @Test public void testEncode() throws Exception { - InputStream inStream = new FileInputStream("test/ch/cyberduck/core/ssl/OXxlRDVcWqdPEvFm.cer"); + InputStream inStream = new FileInputStream("src/test/resources//OXxlRDVcWqdPEvFm.cer"); CertificateFactory cf = CertificateFactory.getInstance("X.509"); final X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream); assertEquals(1, new DEREncoder().encode(Collections.singletonList(cert)).length); diff --git a/test/ch/cyberduck/core/ssl/DefaultX509TrustManagerTest.java b/core/src/test/java/ch/cyberduck/core/ssl/DefaultX509TrustManagerTest.java similarity index 88% rename from test/ch/cyberduck/core/ssl/DefaultX509TrustManagerTest.java rename to core/src/test/java/ch/cyberduck/core/ssl/DefaultX509TrustManagerTest.java index 64717c2ea6..826ffb29a0 100644 --- a/test/ch/cyberduck/core/ssl/DefaultX509TrustManagerTest.java +++ b/core/src/test/java/ch/cyberduck/core/ssl/DefaultX509TrustManagerTest.java @@ -18,7 +18,7 @@ public class DefaultX509TrustManagerTest extends AbstractTestCase { @Test(expected = CertificateExpiredException.class) public void testCheckServerTrusted() throws Exception { final DefaultX509TrustManager m = new DefaultX509TrustManager(); - InputStream inStream = new FileInputStream("test/ch/cyberduck/core/ssl/OXxlRDVcWqdPEvFm.cer"); + InputStream inStream = new FileInputStream("src/test/resources/OXxlRDVcWqdPEvFm.cer"); CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream); m.checkServerTrusted(new X509Certificate[]{cert}, "RSA"); diff --git a/test/ch/cyberduck/core/ssl/FixedRandom.java b/core/src/test/java/ch/cyberduck/core/ssl/FixedRandom.java similarity index 100% rename from test/ch/cyberduck/core/ssl/FixedRandom.java rename to core/src/test/java/ch/cyberduck/core/ssl/FixedRandom.java diff --git a/test/ch/cyberduck/core/ssl/SSLExceptionMappingServiceTest.java b/core/src/test/java/ch/cyberduck/core/ssl/SSLExceptionMappingServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/ssl/SSLExceptionMappingServiceTest.java rename to core/src/test/java/ch/cyberduck/core/ssl/SSLExceptionMappingServiceTest.java diff --git a/test/ch/cyberduck/core/synchronization/ChecksumComparisonServiceTest.java b/core/src/test/java/ch/cyberduck/core/synchronization/ChecksumComparisonServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/synchronization/ChecksumComparisonServiceTest.java rename to core/src/test/java/ch/cyberduck/core/synchronization/ChecksumComparisonServiceTest.java diff --git a/test/ch/cyberduck/core/synchronization/ComparisonServiceFilterTest.java b/core/src/test/java/ch/cyberduck/core/synchronization/ComparisonServiceFilterTest.java similarity index 95% rename from test/ch/cyberduck/core/synchronization/ComparisonServiceFilterTest.java rename to core/src/test/java/ch/cyberduck/core/synchronization/ComparisonServiceFilterTest.java index f0ef90eb53..d2f4b0f705 100644 --- a/test/ch/cyberduck/core/synchronization/ComparisonServiceFilterTest.java +++ b/core/src/test/java/ch/cyberduck/core/synchronization/ComparisonServiceFilterTest.java @@ -7,13 +7,14 @@ import ch.cyberduck.core.LocalAttributes; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathAttributes; import ch.cyberduck.core.PathCache; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.Attributes; import ch.cyberduck.core.features.Find; import ch.cyberduck.core.io.Checksum; import ch.cyberduck.core.io.HashAlgorithm; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -63,7 +64,7 @@ public class ComparisonServiceFilterTest extends AbstractTestCase { return this; } }; - ComparisonServiceFilter s = new ComparisonServiceFilter(new NullSession(new Host("t")) { + ComparisonServiceFilter s = new ComparisonServiceFilter(new NullSession(new Host(new TestProtocol())) { }, TimeZone.getDefault(), new DisabledProgressListener()).withFinder(find).withAttributes(attributes); assertEquals(Comparison.equal, s.compare(new Path("t", EnumSet.of(Path.Type.file)), new NullLocal("t") { @Override @@ -100,7 +101,7 @@ public class ComparisonServiceFilterTest extends AbstractTestCase { return this; } }; - ComparisonServiceFilter s = new ComparisonServiceFilter(new NullSession(new Host("t")) { + ComparisonServiceFilter s = new ComparisonServiceFilter(new NullSession(new Host(new TestProtocol())) { }, TimeZone.getDefault(), new DisabledProgressListener()).withFinder(find); assertEquals(Comparison.equal, s.compare(new Path("t", EnumSet.of(Path.Type.directory)), new NullLocal("t") { @Override @@ -126,7 +127,7 @@ public class ComparisonServiceFilterTest extends AbstractTestCase { return this; } }; - ComparisonServiceFilter s = new ComparisonServiceFilter(new NullSession(new Host("t")) { + ComparisonServiceFilter s = new ComparisonServiceFilter(new NullSession(new Host(new TestProtocol())) { }, TimeZone.getDefault(), new DisabledProgressListener()).withFinder(find); assertEquals(Comparison.local, s.compare(new Path("t", EnumSet.of(Path.Type.directory)), new NullLocal("t") { @Override @@ -152,7 +153,7 @@ public class ComparisonServiceFilterTest extends AbstractTestCase { return this; } }; - ComparisonServiceFilter s = new ComparisonServiceFilter(new NullSession(new Host("t")) { + ComparisonServiceFilter s = new ComparisonServiceFilter(new NullSession(new Host(new TestProtocol())) { }, TimeZone.getDefault(), new DisabledProgressListener()).withFinder(find); assertEquals(Comparison.remote, s.compare(new Path("t", EnumSet.of(Path.Type.directory)), new NullLocal("t") { @Override @@ -208,7 +209,7 @@ public class ComparisonServiceFilterTest extends AbstractTestCase { return this; } }; - ComparisonServiceFilter s = new ComparisonServiceFilter(new NullSession(new Host("t")) { + ComparisonServiceFilter s = new ComparisonServiceFilter(new NullSession(new Host(new TestProtocol())) { }, TimeZone.getDefault(), new DisabledProgressListener()).withFinder(find).withAttributes(attributes); assertEquals(Comparison.local, s.compare(new Path("t", EnumSet.of(Path.Type.file)), new NullLocal("t") { @Override diff --git a/test/ch/cyberduck/core/synchronization/SizeComparisonServiceTest.java b/core/src/test/java/ch/cyberduck/core/synchronization/SizeComparisonServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/synchronization/SizeComparisonServiceTest.java rename to core/src/test/java/ch/cyberduck/core/synchronization/SizeComparisonServiceTest.java diff --git a/test/ch/cyberduck/core/synchronization/TimestampComparisonServiceTest.java b/core/src/test/java/ch/cyberduck/core/synchronization/TimestampComparisonServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/synchronization/TimestampComparisonServiceTest.java rename to core/src/test/java/ch/cyberduck/core/synchronization/TimestampComparisonServiceTest.java diff --git a/test/ch/cyberduck/core/text/NaturalOrderComparatorTest.java b/core/src/test/java/ch/cyberduck/core/text/NaturalOrderComparatorTest.java similarity index 100% rename from test/ch/cyberduck/core/text/NaturalOrderComparatorTest.java rename to core/src/test/java/ch/cyberduck/core/text/NaturalOrderComparatorTest.java diff --git a/test/ch/cyberduck/core/threading/AutoreleaseActionOperationBatcherTest.java b/core/src/test/java/ch/cyberduck/core/threading/AutoreleaseActionOperationBatcherTest.java similarity index 70% rename from test/ch/cyberduck/core/threading/AutoreleaseActionOperationBatcherTest.java rename to core/src/test/java/ch/cyberduck/core/threading/AutoreleaseActionOperationBatcherTest.java index 5ae90a0136..d0458d7921 100644 --- a/test/ch/cyberduck/core/threading/AutoreleaseActionOperationBatcherTest.java +++ b/core/src/test/java/ch/cyberduck/core/threading/AutoreleaseActionOperationBatcherTest.java @@ -19,27 +19,16 @@ package ch.cyberduck.core.threading; */ import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.test.Depends; import org.junit.Test; -import java.util.concurrent.Callable; - /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class AutoreleaseActionOperationBatcherTest extends AbstractTestCase { @Test public void testOperate() throws Exception { - this.repeat(new Callable() { - @Override - public Object call() throws Exception { - new AutoreleaseActionOperationBatcher().operate(); - return null; - } - }, 20); + new AutoreleaseActionOperationBatcher().operate(); } } diff --git a/test/ch/cyberduck/core/threading/BackgroundActionPauserTest.java b/core/src/test/java/ch/cyberduck/core/threading/BackgroundActionPauserTest.java similarity index 93% rename from test/ch/cyberduck/core/threading/BackgroundActionPauserTest.java rename to core/src/test/java/ch/cyberduck/core/threading/BackgroundActionPauserTest.java index ea55e5893c..6d95c8f444 100644 --- a/test/ch/cyberduck/core/threading/BackgroundActionPauserTest.java +++ b/core/src/test/java/ch/cyberduck/core/threading/BackgroundActionPauserTest.java @@ -24,9 +24,10 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.PathCache; import ch.cyberduck.core.ProgressListener; import ch.cyberduck.core.Session; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.TranscriptListener; import ch.cyberduck.core.exception.BackgroundException; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -40,7 +41,7 @@ public class BackgroundActionPauserTest extends AbstractTestCase { @Test public void testAwait() throws Exception { - final SessionBackgroundAction action = new SessionBackgroundAction(new NullSession(new Host("t")), PathCache.empty(), new AlertCallback() { + final SessionBackgroundAction action = new SessionBackgroundAction(new NullSession(new Host(new TestProtocol())), PathCache.empty(), new AlertCallback() { @Override public boolean alert(final Host host, final BackgroundException failure, final StringBuilder transcript) { return false; diff --git a/test/ch/cyberduck/core/threading/BackgroundActionRegistryTest.java b/core/src/test/java/ch/cyberduck/core/threading/BackgroundActionRegistryTest.java similarity index 100% rename from test/ch/cyberduck/core/threading/BackgroundActionRegistryTest.java rename to core/src/test/java/ch/cyberduck/core/threading/BackgroundActionRegistryTest.java diff --git a/test/ch/cyberduck/core/threading/BrowserBackgroundActionTest.java b/core/src/test/java/ch/cyberduck/core/threading/BrowserBackgroundActionTest.java similarity index 85% rename from test/ch/cyberduck/core/threading/BrowserBackgroundActionTest.java rename to core/src/test/java/ch/cyberduck/core/threading/BrowserBackgroundActionTest.java index d89bcc1a2f..b3894a0cc9 100644 --- a/test/ch/cyberduck/core/threading/BrowserBackgroundActionTest.java +++ b/core/src/test/java/ch/cyberduck/core/threading/BrowserBackgroundActionTest.java @@ -4,8 +4,9 @@ import ch.cyberduck.core.AbstractController; import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Host; import ch.cyberduck.core.PathCache; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -23,7 +24,7 @@ public class BrowserBackgroundActionTest extends AbstractTestCase { public void invoke(final MainAction runnable, final boolean wait) { throw new UnsupportedOperationException(); } - }, new NullSession(new Host("t")), PathCache.empty()) { + }, new NullSession(new Host(new TestProtocol())), PathCache.empty()) { @Override public Boolean run() throws BackgroundException { return false; diff --git a/test/ch/cyberduck/core/threading/ControllerMainActionTest.java b/core/src/test/java/ch/cyberduck/core/threading/ControllerMainActionTest.java similarity index 100% rename from test/ch/cyberduck/core/threading/ControllerMainActionTest.java rename to core/src/test/java/ch/cyberduck/core/threading/ControllerMainActionTest.java diff --git a/test/ch/cyberduck/core/threading/DefaultMainActionTest.java b/core/src/test/java/ch/cyberduck/core/threading/DefaultMainActionTest.java similarity index 100% rename from test/ch/cyberduck/core/threading/DefaultMainActionTest.java rename to core/src/test/java/ch/cyberduck/core/threading/DefaultMainActionTest.java diff --git a/test/ch/cyberduck/core/threading/SessionBackgroundActionTest.java b/core/src/test/java/ch/cyberduck/core/threading/SessionBackgroundActionTest.java similarity index 95% rename from test/ch/cyberduck/core/threading/SessionBackgroundActionTest.java rename to core/src/test/java/ch/cyberduck/core/threading/SessionBackgroundActionTest.java index adaa4aa9ec..57a73f274c 100644 --- a/test/ch/cyberduck/core/threading/SessionBackgroundActionTest.java +++ b/core/src/test/java/ch/cyberduck/core/threading/SessionBackgroundActionTest.java @@ -25,12 +25,13 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.PathCache; import ch.cyberduck.core.ProgressListener; import ch.cyberduck.core.Session; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.TranscriptListener; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.exception.ConnectionCanceledException; import ch.cyberduck.core.exception.LoginCanceledException; import ch.cyberduck.core.preferences.PreferencesFactory; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -84,7 +85,7 @@ public class SessionBackgroundActionTest extends AbstractTestCase { @Test public void testGetExceptionFailure() throws Exception { final BackgroundException failure = new BackgroundException(new RuntimeException()); - SessionBackgroundAction a = new SessionBackgroundAction(new NullSession(new Host("t")), PathCache.empty(), new AlertCallback() { + SessionBackgroundAction a = new SessionBackgroundAction(new NullSession(new Host(new TestProtocol(), "t")), PathCache.empty(), new AlertCallback() { @Override public boolean alert(final Host repeatableBackgroundAction, final BackgroundException f, final StringBuilder transcript) { assertEquals(failure, f); @@ -122,7 +123,7 @@ public class SessionBackgroundActionTest extends AbstractTestCase { @Test public void testGetExceptionCancel() throws Exception { final BackgroundException failure = new LoginCanceledException(); - SessionBackgroundAction a = new SessionBackgroundAction(new NullSession(new Host("t")), PathCache.empty(), new AlertCallback() { + SessionBackgroundAction a = new SessionBackgroundAction(new NullSession(new Host(new TestProtocol(), "t")), PathCache.empty(), new AlertCallback() { @Override public boolean alert(final Host repeatableBackgroundAction, final BackgroundException f, final StringBuilder transcript) { assertEquals(failure, f); @@ -160,7 +161,7 @@ public class SessionBackgroundActionTest extends AbstractTestCase { @Test public void testRetrySocket() throws Exception { final BackgroundException failure = new BackgroundException(new SocketTimeoutException("")); - SessionBackgroundAction a = new SessionBackgroundAction(new NullSession(new Host(("t"))), PathCache.empty(), new AlertCallback() { + SessionBackgroundAction a = new SessionBackgroundAction(new NullSession(new Host(new TestProtocol(), "t")), PathCache.empty(), new AlertCallback() { @Override public boolean alert(final Host repeatableBackgroundAction, final BackgroundException f, final StringBuilder transcript) { assertEquals(failure, f); diff --git a/test/ch/cyberduck/core/threading/ThreadPoolTest.java b/core/src/test/java/ch/cyberduck/core/threading/ThreadPoolTest.java similarity index 100% rename from test/ch/cyberduck/core/threading/ThreadPoolTest.java rename to core/src/test/java/ch/cyberduck/core/threading/ThreadPoolTest.java diff --git a/test/ch/cyberduck/core/transfer/NullTransferFilterTest.java b/core/src/test/java/ch/cyberduck/core/transfer/NullTransferFilterTest.java similarity index 100% rename from test/ch/cyberduck/core/transfer/NullTransferFilterTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/NullTransferFilterTest.java diff --git a/test/ch/cyberduck/core/transfer/SpeedometerTest.java b/core/src/test/java/ch/cyberduck/core/transfer/SpeedometerTest.java similarity index 100% rename from test/ch/cyberduck/core/transfer/SpeedometerTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/SpeedometerTest.java diff --git a/test/ch/cyberduck/core/transfer/SyncTransferTest.java b/core/src/test/java/ch/cyberduck/core/transfer/SyncTransferTest.java similarity index 79% rename from test/ch/cyberduck/core/transfer/SyncTransferTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/SyncTransferTest.java index 5c258e36f8..a1e17145a5 100644 --- a/test/ch/cyberduck/core/transfer/SyncTransferTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/SyncTransferTest.java @@ -27,11 +27,10 @@ import ch.cyberduck.core.ListProgressListener; import ch.cyberduck.core.Local; import ch.cyberduck.core.LocalAttributes; import ch.cyberduck.core.Path; -import ch.cyberduck.core.SerializerFactory; -import ch.cyberduck.core.serializer.TransferDictionary; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.synchronization.Comparison; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -50,7 +49,7 @@ public class SyncTransferTest extends AbstractTestCase { @Test public void testAction() throws Exception { final Path p = new Path("t", EnumSet.of(Path.Type.directory)); - Transfer t = new SyncTransfer(new Host("t"), new TransferItem(p, new NullLocal("p", "t") { + Transfer t = new SyncTransfer(new Host(new TestProtocol()), new TransferItem(p, new NullLocal("p", "t") { @Override public boolean exists() { return true; @@ -62,7 +61,7 @@ public class SyncTransferTest extends AbstractTestCase { } })); final AtomicBoolean prompt = new AtomicBoolean(); - assertEquals(null, t.action(new NullSession(new Host("t")), false, false, new DisabledTransferPrompt() { + assertEquals(null, t.action(new NullSession(new Host(new TestProtocol())), false, false, new DisabledTransferPrompt() { @Override public TransferAction prompt(final TransferItem file) { prompt.set(true); @@ -72,43 +71,11 @@ public class SyncTransferTest extends AbstractTestCase { assertTrue(prompt.get()); } - @Test - public void testSerializeLastSelectedAction() throws Exception { - final Path p = new Path("t", EnumSet.of(Path.Type.directory)); - final SyncTransfer transfer = new SyncTransfer(new Host("t"), new TransferItem(p, new NullLocal("p", "t") { - @Override - public boolean exists() { - return true; - } - - @Override - public AttributedList list() { - return new AttributedList(Arrays.asList(new NullLocal("p", "a"))); - } - })); - transfer.action(null, true, false, new DisabledTransferPrompt() { - @Override - public TransferAction prompt(final TransferItem file) { - return TransferAction.upload; - } - }, new DisabledListProgressListener()); - final Transfer serialized = new TransferDictionary().deserialize(transfer.serialize(SerializerFactory.get())); - assertNotSame(transfer, serialized); - assertEquals(TransferAction.upload, serialized.action(null, true, false, new DisabledTransferPrompt() { - @Override - public TransferAction prompt(final TransferItem file) { - fail(); - return null; - } - }, new DisabledListProgressListener())); - } - - @Test public void testFilterDownload() throws Exception { final Path p = new Path("t", EnumSet.of(Path.Type.directory)); - Transfer t = new SyncTransfer(new Host("t"), new TransferItem(p, new NullLocal(System.getProperty("java.io.tmpdir"), "t"))); - final TransferPathFilter filter = t.filter(new NullSession(new Host("t")) { + Transfer t = new SyncTransfer(new Host(new TestProtocol()), new TransferItem(p, new NullLocal(System.getProperty("java.io.tmpdir"), "t"))); + final TransferPathFilter filter = t.filter(new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { return AttributedList.emptyList(); @@ -122,8 +89,8 @@ public class SyncTransferTest extends AbstractTestCase { @Test public void testFilterUpload() throws Exception { final Path p = new Path("t", EnumSet.of(Path.Type.directory)); - Transfer t = new SyncTransfer(new Host("t"), new TransferItem(p, new NullLocal(System.getProperty("java.io.tmpdir"), "t"))); - final TransferPathFilter filter = t.filter(new NullSession(new Host("t")), TransferAction.upload, new DisabledProgressListener()); + Transfer t = new SyncTransfer(new Host(new TestProtocol()), new TransferItem(p, new NullLocal(System.getProperty("java.io.tmpdir"), "t"))); + final TransferPathFilter filter = t.filter(new NullSession(new Host(new TestProtocol())), TransferAction.upload, new DisabledProgressListener()); final Path test = new Path(p, "a", EnumSet.of(Path.Type.file)); assertTrue(filter.accept(test, new NullLocal(System.getProperty("java.io.tmpdir"), "a") { @Override @@ -147,8 +114,8 @@ public class SyncTransferTest extends AbstractTestCase { @Test public void testFilterMirror() throws Exception { final Path p = new Path("t", EnumSet.of(Path.Type.directory)); - SyncTransfer t = new SyncTransfer(new Host("t"), new TransferItem(p, new NullLocal(System.getProperty("java.io.tmpdir"), "t"))); - final TransferPathFilter filter = t.filter(new NullSession(new Host("t")), TransferAction.mirror, new DisabledProgressListener()); + SyncTransfer t = new SyncTransfer(new Host(new TestProtocol()), new TransferItem(p, new NullLocal(System.getProperty("java.io.tmpdir"), "t"))); + final TransferPathFilter filter = t.filter(new NullSession(new Host(new TestProtocol())), TransferAction.mirror, new DisabledProgressListener()); assertTrue(filter.accept(new Path(p, "a", EnumSet.of(Path.Type.file)), new NullLocal(System.getProperty("java.io.tmpdir"), "a") { @Override public boolean exists() { @@ -199,7 +166,7 @@ public class SyncTransferTest extends AbstractTestCase { }; final Path root = new Path("t", EnumSet.of(Path.Type.directory)); final Path remote = new Path(root, "a", EnumSet.of(Path.Type.file)); - final NullSession session = new NullSession(new Host("t")) { + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { final AttributedList list = new AttributedList(); @@ -213,7 +180,7 @@ public class SyncTransferTest extends AbstractTestCase { } }; directory.mkdir(); - Transfer t = new SyncTransfer(new Host("t"), new TransferItem(root, directory)); + Transfer t = new SyncTransfer(new Host(new TestProtocol()), new TransferItem(root, directory)); final List list = t.list(session, root, directory, new DisabledListProgressListener()); assertEquals(1, list.size()); } @@ -221,7 +188,7 @@ public class SyncTransferTest extends AbstractTestCase { @Test public void testChildrenLocalOnly() throws Exception { final Path root = new Path("t", EnumSet.of(Path.Type.directory)); - final NullSession session = new NullSession(new Host("t")) { + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { return AttributedList.emptyList(); @@ -241,7 +208,7 @@ public class SyncTransferTest extends AbstractTestCase { } }; directory.mkdir(); - Transfer t = new SyncTransfer(new Host("t"), new TransferItem(root, directory)); + Transfer t = new SyncTransfer(new Host(new TestProtocol()), new TransferItem(root, directory)); final List list = t.list(session, root, directory, new DisabledListProgressListener()); assertEquals(1, list.size()); final NullLocal local = new NullLocal(System.getProperty("java.io.tmpdir"), "a") { @@ -266,7 +233,7 @@ public class SyncTransferTest extends AbstractTestCase { } }; directory.mkdir(); - final NullSession session = new NullSession(new Host("t")) { + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { final AttributedList list = new AttributedList(); @@ -279,7 +246,7 @@ public class SyncTransferTest extends AbstractTestCase { return list; } }; - final Transfer t = new SyncTransfer(new Host("t"), new TransferItem(root, directory)); + final Transfer t = new SyncTransfer(new Host(new TestProtocol()), new TransferItem(root, directory)); final List list = t.list(session, root, directory, new DisabledListProgressListener()); assertEquals(1, list.size()); final NullLocal local = new NullLocal(directory, "a") { diff --git a/test/ch/cyberduck/core/transfer/TransferActionTest.java b/core/src/test/java/ch/cyberduck/core/transfer/TransferActionTest.java similarity index 100% rename from test/ch/cyberduck/core/transfer/TransferActionTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/TransferActionTest.java diff --git a/test/ch/cyberduck/core/transfer/TransferOptionsTest.java b/core/src/test/java/ch/cyberduck/core/transfer/TransferOptionsTest.java similarity index 100% rename from test/ch/cyberduck/core/transfer/TransferOptionsTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/TransferOptionsTest.java diff --git a/test/ch/cyberduck/core/transfer/TransferProgressTest.java b/core/src/test/java/ch/cyberduck/core/transfer/TransferProgressTest.java similarity index 100% rename from test/ch/cyberduck/core/transfer/TransferProgressTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/TransferProgressTest.java diff --git a/test/ch/cyberduck/core/transfer/TransferQueueTest.java b/core/src/test/java/ch/cyberduck/core/transfer/TransferQueueTest.java similarity index 87% rename from test/ch/cyberduck/core/transfer/TransferQueueTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/TransferQueueTest.java index 955af73489..a8c4423505 100644 --- a/test/ch/cyberduck/core/transfer/TransferQueueTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/TransferQueueTest.java @@ -21,6 +21,7 @@ import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.DisabledProgressListener; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; +import ch.cyberduck.core.TestProtocol; import org.junit.Test; @@ -41,8 +42,8 @@ public class TransferQueueTest extends AbstractTestCase { @Test public void testAddRemove() throws Exception { final TransferQueue queue = new TransferQueue(1); - final DownloadTransfer d1 = new DownloadTransfer(new Host("t"), new Path("/t1", EnumSet.of(Path.Type.directory)), null); - final DownloadTransfer d2 = new DownloadTransfer(new Host("t"), new Path("/t2", EnumSet.of(Path.Type.directory)), null); + final DownloadTransfer d1 = new DownloadTransfer(new Host(new TestProtocol()), new Path("/t1", EnumSet.of(Path.Type.directory)), null); + final DownloadTransfer d2 = new DownloadTransfer(new Host(new TestProtocol()), new Path("/t2", EnumSet.of(Path.Type.directory)), null); queue.add(d1, new DisabledProgressListener()); final CountDownLatch c = new CountDownLatch(1); new Thread(new Runnable() { @@ -61,14 +62,14 @@ public class TransferQueueTest extends AbstractTestCase { @Test public void testConcurrent() throws Exception { final TransferQueue queue = new TransferQueue(1); - final DownloadTransfer transfer = new DownloadTransfer(new Host("t"), new Path("/t", EnumSet.of(Path.Type.directory)), null); + final DownloadTransfer transfer = new DownloadTransfer(new Host(new TestProtocol()), new Path("/t", EnumSet.of(Path.Type.directory)), null); queue.add(transfer, new DisabledProgressListener()); final AtomicBoolean added = new AtomicBoolean(); final CyclicBarrier wait = new CyclicBarrier(2); new Thread(new Runnable() { @Override public void run() { - queue.add(new DownloadTransfer(new Host("t"), new Path("/t", EnumSet.of(Path.Type.directory)), null), new DisabledProgressListener()); + queue.add(new DownloadTransfer(new Host(new TestProtocol()), new Path("/t", EnumSet.of(Path.Type.directory)), null), new DisabledProgressListener()); added.set(true); try { wait.await(); @@ -87,8 +88,8 @@ public class TransferQueueTest extends AbstractTestCase { @Test public void testResize() throws Exception { final TransferQueue queue = new TransferQueue(1); - final DownloadTransfer d1 = new DownloadTransfer(new Host("t"), new Path("/t1", EnumSet.of(Path.Type.directory)), null); - final DownloadTransfer d2 = new DownloadTransfer(new Host("t"), new Path("/t2", EnumSet.of(Path.Type.directory)), null); + final DownloadTransfer d1 = new DownloadTransfer(new Host(new TestProtocol()), new Path("/t1", EnumSet.of(Path.Type.directory)), null); + final DownloadTransfer d2 = new DownloadTransfer(new Host(new TestProtocol()), new Path("/t2", EnumSet.of(Path.Type.directory)), null); queue.add(d1, new DisabledProgressListener()); final CountDownLatch c = new CountDownLatch(1); final AtomicBoolean set = new AtomicBoolean(); @@ -115,9 +116,9 @@ public class TransferQueueTest extends AbstractTestCase { @Test public void testResizeMultipleWaiting() throws Exception { final TransferQueue queue = new TransferQueue(1); - final DownloadTransfer d1 = new DownloadTransfer(new Host("t"), new Path("/t1", EnumSet.of(Path.Type.directory)), null); - final DownloadTransfer d2 = new DownloadTransfer(new Host("t"), new Path("/t2", EnumSet.of(Path.Type.directory)), null); - final DownloadTransfer d3 = new DownloadTransfer(new Host("t"), new Path("/t3", EnumSet.of(Path.Type.directory)), null); + final DownloadTransfer d1 = new DownloadTransfer(new Host(new TestProtocol()), new Path("/t1", EnumSet.of(Path.Type.directory)), null); + final DownloadTransfer d2 = new DownloadTransfer(new Host(new TestProtocol()), new Path("/t2", EnumSet.of(Path.Type.directory)), null); + final DownloadTransfer d3 = new DownloadTransfer(new Host(new TestProtocol()), new Path("/t3", EnumSet.of(Path.Type.directory)), null); queue.add(d1, new DisabledProgressListener()); final CountDownLatch c = new CountDownLatch(1); final AtomicBoolean set1 = new AtomicBoolean(); @@ -159,8 +160,8 @@ public class TransferQueueTest extends AbstractTestCase { @Test public void testRemoveWhileWaiting() throws Exception { final TransferQueue queue = new TransferQueue(1); - final DownloadTransfer d1 = new DownloadTransfer(new Host("t"), new Path("/t1", EnumSet.of(Path.Type.directory)), null); - final DownloadTransfer d2 = new DownloadTransfer(new Host("t"), new Path("/t2", EnumSet.of(Path.Type.directory)), null); + final DownloadTransfer d1 = new DownloadTransfer(new Host(new TestProtocol()), new Path("/t1", EnumSet.of(Path.Type.directory)), null); + final DownloadTransfer d2 = new DownloadTransfer(new Host(new TestProtocol()), new Path("/t2", EnumSet.of(Path.Type.directory)), null); queue.add(d1, new DisabledProgressListener()); final CountDownLatch c = new CountDownLatch(1); final AtomicBoolean set = new AtomicBoolean(); diff --git a/test/ch/cyberduck/core/transfer/TransferSpeedometerTest.java b/core/src/test/java/ch/cyberduck/core/transfer/TransferSpeedometerTest.java similarity index 93% rename from test/ch/cyberduck/core/transfer/TransferSpeedometerTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/TransferSpeedometerTest.java index d665b96855..f2718f3284 100644 --- a/test/ch/cyberduck/core/transfer/TransferSpeedometerTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/TransferSpeedometerTest.java @@ -22,6 +22,7 @@ import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; import ch.cyberduck.core.Path; +import ch.cyberduck.core.TestProtocol; import org.junit.Test; @@ -34,7 +35,7 @@ public class TransferSpeedometerTest extends AbstractTestCase { @Test public void testReset() throws Exception { - final DownloadTransfer transfer = new DownloadTransfer(new Host("h"), new Path("/p", EnumSet.of(Path.Type.file)), new Local("/t")); + final DownloadTransfer transfer = new DownloadTransfer(new Host(new TestProtocol()), new Path("/p", EnumSet.of(Path.Type.file)), new Local("/t")); final TransferSpeedometer s = new TransferSpeedometer(transfer); transfer.addSize(8L); assertEquals(8L, s.getStatus().getSize(), 0L); diff --git a/test/ch/cyberduck/core/transfer/TransferStatusTest.java b/core/src/test/java/ch/cyberduck/core/transfer/TransferStatusTest.java similarity index 100% rename from test/ch/cyberduck/core/transfer/TransferStatusTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/TransferStatusTest.java diff --git a/test/ch/cyberduck/core/transfer/TransferTransferQueueFactoryTest.java b/core/src/test/java/ch/cyberduck/core/transfer/TransferTransferQueueFactoryTest.java similarity index 100% rename from test/ch/cyberduck/core/transfer/TransferTransferQueueFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/TransferTransferQueueFactoryTest.java diff --git a/test/ch/cyberduck/core/transfer/copy/OverwriteFilterTest.java b/core/src/test/java/ch/cyberduck/core/transfer/copy/OverwriteFilterTest.java similarity index 92% rename from test/ch/cyberduck/core/transfer/copy/OverwriteFilterTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/copy/OverwriteFilterTest.java index e7261faf5b..1a34a1e5e1 100644 --- a/test/ch/cyberduck/core/transfer/copy/OverwriteFilterTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/copy/OverwriteFilterTest.java @@ -6,11 +6,12 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathCache; import ch.cyberduck.core.Permission; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.Find; import ch.cyberduck.core.features.Timestamp; import ch.cyberduck.core.features.UnixPermission; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.TransferOptions; import ch.cyberduck.core.transfer.TransferStatus; import ch.cyberduck.core.transfer.upload.UploadFilterOptions; @@ -32,8 +33,8 @@ public class OverwriteFilterTest extends AbstractTestCase { final HashMap files = new HashMap(); final Path source = new Path("a", EnumSet.of(Path.Type.directory)); files.put(source, new Path("a", EnumSet.of(Path.Type.directory))); - AbstractCopyFilter f = new OverwriteFilter(new NullSession(new Host("source")), - new NullSession(new Host("target")), files); + AbstractCopyFilter f = new OverwriteFilter(new NullSession(new Host(new TestProtocol())), + new NullSession(new Host(new TestProtocol())), files); assertTrue(f.accept(source, null, new TransferStatus())); } @@ -53,7 +54,7 @@ public class OverwriteFilterTest extends AbstractTestCase { return this; } }; - AbstractCopyFilter f = new OverwriteFilter(new NullSession(new Host("source")), new NullSession(new Host("h")) { + AbstractCopyFilter f = new OverwriteFilter(new NullSession(new Host(new TestProtocol())), new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(final Class type) { if(type.equals(Find.class)) { @@ -73,7 +74,7 @@ public class OverwriteFilterTest extends AbstractTestCase { final Path source = new Path("a", EnumSet.of(Path.Type.file)); source.attributes().setSize(1L); files.put(source, new Path("a", EnumSet.of(Path.Type.file))); - OverwriteFilter f = new OverwriteFilter(new NullSession(new Host("source")), new NullSession(new Host("target")), files); + OverwriteFilter f = new OverwriteFilter(new NullSession(new Host(new TestProtocol())), new NullSession(new Host(new TestProtocol())), files); final TransferStatus status = f.prepare(source, null, new TransferStatus()); assertEquals(1L, status.getLength()); } @@ -85,7 +86,7 @@ public class OverwriteFilterTest extends AbstractTestCase { source.attributes().setSize(1L); final Path target = new Path("a", EnumSet.of(Path.Type.directory)); files.put(source, target); - OverwriteFilter f = new OverwriteFilter(new NullSession(new Host("source")), new NullSession(new Host("target")), files); + OverwriteFilter f = new OverwriteFilter(new NullSession(new Host(new TestProtocol())), new NullSession(new Host(new TestProtocol())), files); final TransferStatus status = f.prepare(source, null, new TransferStatus()); assertEquals(0L, status.getLength()); } @@ -102,7 +103,7 @@ public class OverwriteFilterTest extends AbstractTestCase { final boolean[] permissionWrite = new boolean[1]; final Path target = new Path("a", EnumSet.of(Path.Type.file)); files.put(source, target); - OverwriteFilter f = new OverwriteFilter(new NullSession(new Host("source")), new NullSession(new Host("target")) { + OverwriteFilter f = new OverwriteFilter(new NullSession(new Host(new TestProtocol())), new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(final Class type) { if(type.equals(Timestamp.class)) { diff --git a/test/ch/cyberduck/core/transfer/download/CompareFilterTest.java b/core/src/test/java/ch/cyberduck/core/transfer/download/CompareFilterTest.java similarity index 81% rename from test/ch/cyberduck/core/transfer/download/CompareFilterTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/download/CompareFilterTest.java index 7c2f658236..4b5cf6f826 100644 --- a/test/ch/cyberduck/core/transfer/download/CompareFilterTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/download/CompareFilterTest.java @@ -22,11 +22,12 @@ import ch.cyberduck.core.DisabledProgressListener; import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; import ch.cyberduck.core.Path; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.synchronization.Comparison; import ch.cyberduck.core.synchronization.ComparisonServiceFilter; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.TransferStatus; import ch.cyberduck.core.transfer.symlink.DisabledDownloadSymlinkResolver; @@ -45,8 +46,8 @@ public class CompareFilterTest extends AbstractTestCase { @Test public void testAcceptEqual() throws Exception { final CompareFilter filter = new CompareFilter(new DisabledDownloadSymlinkResolver(), - new NullSession(new Host("t")), new DownloadFilterOptions(), new ComparisonServiceFilter( - new NullSession(new Host("t")), null, new DisabledProgressListener()) { + new NullSession(new Host(new TestProtocol())), new DownloadFilterOptions(), new ComparisonServiceFilter( + new NullSession(new Host(new TestProtocol())), null, new DisabledProgressListener()) { @Override public Comparison compare(final Path file, final Local local) throws BackgroundException { return Comparison.equal; @@ -62,8 +63,8 @@ public class CompareFilterTest extends AbstractTestCase { @Test public void testAcceptDirectory() throws Exception { final CompareFilter filter = new CompareFilter(new DisabledDownloadSymlinkResolver(), - new NullSession(new Host("t")), new DownloadFilterOptions(), new ComparisonServiceFilter( - new NullSession(new Host("t")), null, new DisabledProgressListener()) { + new NullSession(new Host(new TestProtocol())), new DownloadFilterOptions(), new ComparisonServiceFilter( + new NullSession(new Host(new TestProtocol())), null, new DisabledProgressListener()) { @Override public Comparison compare(final Path file, final Local local) throws BackgroundException { return Comparison.equal; diff --git a/test/ch/cyberduck/core/transfer/download/DownloadRegexPriorityComparatorTest.java b/core/src/test/java/ch/cyberduck/core/transfer/download/DownloadRegexPriorityComparatorTest.java similarity index 100% rename from test/ch/cyberduck/core/transfer/download/DownloadRegexPriorityComparatorTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/download/DownloadRegexPriorityComparatorTest.java diff --git a/test/ch/cyberduck/core/transfer/download/OverwriteFilterTest.java b/core/src/test/java/ch/cyberduck/core/transfer/download/OverwriteFilterTest.java similarity index 87% rename from test/ch/cyberduck/core/transfer/download/OverwriteFilterTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/download/OverwriteFilterTest.java index 44ddb94dc8..4770994dee 100644 --- a/test/ch/cyberduck/core/transfer/download/OverwriteFilterTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/download/OverwriteFilterTest.java @@ -5,10 +5,11 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.LocalAttributes; import ch.cyberduck.core.Path; import ch.cyberduck.core.Permission; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.AccessDeniedException; import ch.cyberduck.core.local.DefaultLocalTouchFeature; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.TransferStatus; import ch.cyberduck.core.transfer.symlink.DisabledDownloadSymlinkResolver; @@ -26,7 +27,7 @@ public class OverwriteFilterTest extends AbstractTestCase { @Test public void testAccept() throws Exception { - OverwriteFilter f = new OverwriteFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host("h"))); + OverwriteFilter f = new OverwriteFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); final Path p = new Path("a", EnumSet.of(Path.Type.file)); p.attributes().setSize(8L); assertTrue(f.accept(p, new NullLocal("a"), new TransferStatus())); @@ -34,7 +35,7 @@ public class OverwriteFilterTest extends AbstractTestCase { @Test public void testAcceptDirectory() throws Exception { - OverwriteFilter f = new OverwriteFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host("h"))); + OverwriteFilter f = new OverwriteFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); assertTrue(f.accept(new Path("a", EnumSet.of(Path.Type.directory)), new NullLocal("/", "a") { @Override public boolean exists() { @@ -51,7 +52,7 @@ public class OverwriteFilterTest extends AbstractTestCase { @Test public void testPrepare() throws Exception { - OverwriteFilter f = new OverwriteFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host("h"))); + OverwriteFilter f = new OverwriteFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); final Path p = new Path("a", EnumSet.of(Path.Type.file)); p.attributes().setSize(8L); final TransferStatus status = f.prepare(p, new NullLocal("a"), new TransferStatus()); @@ -60,7 +61,7 @@ public class OverwriteFilterTest extends AbstractTestCase { @Test public void testPrepareAttributes() throws Exception { - OverwriteFilter f = new OverwriteFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host("h"))); + OverwriteFilter f = new OverwriteFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); final Path p = new Path("a", EnumSet.of(Path.Type.file)); p.attributes().setSize(8L); p.attributes().setModificationDate(1L); @@ -88,13 +89,13 @@ public class OverwriteFilterTest extends AbstractTestCase { @Test(expected = AccessDeniedException.class) public void testOverrideDirectoryWithFile() throws Exception { - final OverwriteFilter f = new OverwriteFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host("h"))); + final OverwriteFilter f = new OverwriteFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); f.prepare(new Path("a", EnumSet.of(Path.Type.file)), new NullLocal(System.getProperty("java.io.tmpdir")), new TransferStatus().exists(true)); } @Test(expected = AccessDeniedException.class) public void testOverrideFileWithDirectory() throws Exception { - final OverwriteFilter f = new OverwriteFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host("h"))); + final OverwriteFilter f = new OverwriteFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); final NullLocal l = new NullLocal(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString()); new DefaultLocalTouchFeature().touch(l); f.prepare(new Path("a", EnumSet.of(Path.Type.directory)), l, new TransferStatus().exists(true)); diff --git a/test/ch/cyberduck/core/transfer/download/PathPriorityComparatorTest.java b/core/src/test/java/ch/cyberduck/core/transfer/download/PathPriorityComparatorTest.java similarity index 100% rename from test/ch/cyberduck/core/transfer/download/PathPriorityComparatorTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/download/PathPriorityComparatorTest.java diff --git a/test/ch/cyberduck/core/transfer/download/RenameExistingFilterTest.java b/core/src/test/java/ch/cyberduck/core/transfer/download/RenameExistingFilterTest.java similarity index 91% rename from test/ch/cyberduck/core/transfer/download/RenameExistingFilterTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/download/RenameExistingFilterTest.java index c2e61fea20..a5d2420f6c 100644 --- a/test/ch/cyberduck/core/transfer/download/RenameExistingFilterTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/download/RenameExistingFilterTest.java @@ -5,9 +5,10 @@ import ch.cyberduck.core.DisabledProgressListener; import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; import ch.cyberduck.core.Path; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.UserDateFormatterFactory; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.TransferStatus; import ch.cyberduck.core.transfer.symlink.DisabledDownloadSymlinkResolver; @@ -27,7 +28,7 @@ public class RenameExistingFilterTest extends AbstractTestCase { public void testPrepare() throws Exception { final DownloadFilterOptions options = new DownloadFilterOptions(); options.icon = false; - RenameExistingFilter f = new RenameExistingFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host("h")), + RenameExistingFilter f = new RenameExistingFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host(new TestProtocol())), options); final NullLocal local = new NullLocal(System.getProperty("java.io.tmpdir"), "t-1") { @Override @@ -49,7 +50,7 @@ public class RenameExistingFilterTest extends AbstractTestCase { @Test public void testPrepareRename() throws Exception { final AtomicBoolean r = new AtomicBoolean(); - RenameExistingFilter f = new RenameExistingFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host("h"))); + RenameExistingFilter f = new RenameExistingFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); final NullLocal local = new NullLocal(System.getProperty("java.io.tmpdir"), "t-2") { @Override public boolean exists() { diff --git a/test/ch/cyberduck/core/transfer/download/RenameFilterTest.java b/core/src/test/java/ch/cyberduck/core/transfer/download/RenameFilterTest.java similarity index 84% rename from test/ch/cyberduck/core/transfer/download/RenameFilterTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/download/RenameFilterTest.java index ee5ae01a9d..67a62d834a 100644 --- a/test/ch/cyberduck/core/transfer/download/RenameFilterTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/download/RenameFilterTest.java @@ -3,8 +3,9 @@ package ch.cyberduck.core.transfer.download; import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.TestProtocol; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.TransferStatus; import ch.cyberduck.core.transfer.symlink.DisabledDownloadSymlinkResolver; @@ -21,7 +22,7 @@ public class RenameFilterTest extends AbstractTestCase { @Test public void testPrepare() throws Exception { - RenameFilter f = new RenameFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host("h"))); + RenameFilter f = new RenameFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); final NullLocal local = new NullLocal("t") { @Override public boolean exists() { diff --git a/test/ch/cyberduck/core/transfer/download/ResumeFilterTest.java b/core/src/test/java/ch/cyberduck/core/transfer/download/ResumeFilterTest.java similarity index 90% rename from test/ch/cyberduck/core/transfer/download/ResumeFilterTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/download/ResumeFilterTest.java index 5286b0c711..e9ca31242b 100644 --- a/test/ch/cyberduck/core/transfer/download/ResumeFilterTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/download/ResumeFilterTest.java @@ -4,10 +4,11 @@ import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Host; import ch.cyberduck.core.LocalAttributes; import ch.cyberduck.core.Path; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.shared.DefaultDownloadFeature; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.TransferStatus; import ch.cyberduck.core.transfer.symlink.DisabledDownloadSymlinkResolver; @@ -24,7 +25,7 @@ public class ResumeFilterTest extends AbstractTestCase { @Test public void testAcceptDirectory() throws Exception { - ResumeFilter f = new ResumeFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host("h"))); + ResumeFilter f = new ResumeFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); Path p = new Path("a", EnumSet.of(Path.Type.directory)); assertTrue(f.accept(p, new NullLocal("d", "a") { @Override @@ -41,7 +42,7 @@ public class ResumeFilterTest extends AbstractTestCase { @Test public void testAcceptExistsFalse() throws Exception { - ResumeFilter f = new ResumeFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host("h"))); + ResumeFilter f = new ResumeFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); Path p = new Path("a", EnumSet.of(Path.Type.file)); p.attributes().setSize(2L); assertTrue(f.accept(p, new NullLocal("~/Downloads", "a") { @@ -54,7 +55,7 @@ public class ResumeFilterTest extends AbstractTestCase { @Test public void testPrepareFile() throws Exception { - final NullSession session = new NullSession(new Host("h")); + final NullSession session = new NullSession(new Host(new TestProtocol())); ResumeFilter f = new ResumeFilter(new DisabledDownloadSymlinkResolver(), session, new DownloadFilterOptions(), new DefaultDownloadFeature(session) { @Override @@ -93,7 +94,7 @@ public class ResumeFilterTest extends AbstractTestCase { @Test public void testPrepareDirectoryExists() throws Exception { - final NullSession session = new NullSession(new Host("h")); + final NullSession session = new NullSession(new Host(new TestProtocol())); ResumeFilter f = new ResumeFilter(new DisabledDownloadSymlinkResolver(), session, new DownloadFilterOptions(), new DefaultDownloadFeature(session) { @Override @@ -124,7 +125,7 @@ public class ResumeFilterTest extends AbstractTestCase { @Test public void testPrepareDirectoryExistsFalse() throws Exception { - final NullSession session = new NullSession(new Host("h")); + final NullSession session = new NullSession(new Host(new TestProtocol())); ResumeFilter f = new ResumeFilter(new DisabledDownloadSymlinkResolver(), session, new DownloadFilterOptions(), new DefaultDownloadFeature(session) { @Override diff --git a/test/ch/cyberduck/core/transfer/download/SkipFilterTest.java b/core/src/test/java/ch/cyberduck/core/transfer/download/SkipFilterTest.java similarity index 90% rename from test/ch/cyberduck/core/transfer/download/SkipFilterTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/download/SkipFilterTest.java index 049e13ad08..93e370766f 100644 --- a/test/ch/cyberduck/core/transfer/download/SkipFilterTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/download/SkipFilterTest.java @@ -3,8 +3,9 @@ package ch.cyberduck.core.transfer.download; import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.TestProtocol; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.TransferStatus; import ch.cyberduck.core.transfer.symlink.DisabledDownloadSymlinkResolver; @@ -22,7 +23,7 @@ public class SkipFilterTest extends AbstractTestCase { @Test public void testAccept() throws Exception { - SkipFilter f = new SkipFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host("h"))); + SkipFilter f = new SkipFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); assertTrue(f.accept(new Path("a", EnumSet.of(Path.Type.file)) { }, new NullLocal("a", "b") { @Override @@ -45,7 +46,7 @@ public class SkipFilterTest extends AbstractTestCase { @Test public void testAcceptDirectory() throws Exception { - SkipFilter f = new SkipFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host("h"))); + SkipFilter f = new SkipFilter(new DisabledDownloadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); assertTrue(f.accept(new Path("a", EnumSet.of(Path.Type.directory)) { }, new NullLocal("a", "b") { @Override diff --git a/test/ch/cyberduck/core/transfer/normalizer/CopyRootPathsNormalizerTest.java b/core/src/test/java/ch/cyberduck/core/transfer/normalizer/CopyRootPathsNormalizerTest.java similarity index 100% rename from test/ch/cyberduck/core/transfer/normalizer/CopyRootPathsNormalizerTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/normalizer/CopyRootPathsNormalizerTest.java diff --git a/test/ch/cyberduck/core/transfer/normalizer/DownloadRootPathsNormalizerTest.java b/core/src/test/java/ch/cyberduck/core/transfer/normalizer/DownloadRootPathsNormalizerTest.java similarity index 98% rename from test/ch/cyberduck/core/transfer/normalizer/DownloadRootPathsNormalizerTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/normalizer/DownloadRootPathsNormalizerTest.java index a0ac66aa61..952f8323ce 100644 --- a/test/ch/cyberduck/core/transfer/normalizer/DownloadRootPathsNormalizerTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/normalizer/DownloadRootPathsNormalizerTest.java @@ -2,7 +2,7 @@ package ch.cyberduck.core.transfer.normalizer; import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Path; -import ch.cyberduck.core.test.NullLocal; +import ch.cyberduck.core.NullLocal; import ch.cyberduck.core.transfer.TransferItem; import org.junit.Test; diff --git a/test/ch/cyberduck/core/transfer/normalizer/UploadRootPathsNormalizerTest.java b/core/src/test/java/ch/cyberduck/core/transfer/normalizer/UploadRootPathsNormalizerTest.java similarity index 98% rename from test/ch/cyberduck/core/transfer/normalizer/UploadRootPathsNormalizerTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/normalizer/UploadRootPathsNormalizerTest.java index 76fa66f7c3..4b47fa2550 100644 --- a/test/ch/cyberduck/core/transfer/normalizer/UploadRootPathsNormalizerTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/normalizer/UploadRootPathsNormalizerTest.java @@ -2,7 +2,7 @@ package ch.cyberduck.core.transfer.normalizer; import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Path; -import ch.cyberduck.core.test.NullLocal; +import ch.cyberduck.core.NullLocal; import ch.cyberduck.core.transfer.TransferItem; import org.junit.Test; diff --git a/test/ch/cyberduck/core/transfer/symlink/DownloadSymlinkResolverTest.java b/core/src/test/java/ch/cyberduck/core/transfer/symlink/DownloadSymlinkResolverTest.java similarity index 100% rename from test/ch/cyberduck/core/transfer/symlink/DownloadSymlinkResolverTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/symlink/DownloadSymlinkResolverTest.java diff --git a/test/ch/cyberduck/core/transfer/symlink/UploadSymlinkResolverTest.java b/core/src/test/java/ch/cyberduck/core/transfer/symlink/UploadSymlinkResolverTest.java similarity index 98% rename from test/ch/cyberduck/core/transfer/symlink/UploadSymlinkResolverTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/symlink/UploadSymlinkResolverTest.java index 8c720444e2..93293339c4 100644 --- a/test/ch/cyberduck/core/transfer/symlink/UploadSymlinkResolverTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/symlink/UploadSymlinkResolverTest.java @@ -5,7 +5,7 @@ import ch.cyberduck.core.Local; import ch.cyberduck.core.Path; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.Symlink; -import ch.cyberduck.core.test.NullLocal; +import ch.cyberduck.core.NullLocal; import ch.cyberduck.core.transfer.TransferItem; import org.junit.Test; diff --git a/test/ch/cyberduck/core/transfer/synchronisation/SynchronizationPathFilterTest.java b/core/src/test/java/ch/cyberduck/core/transfer/synchronisation/SynchronizationPathFilterTest.java similarity index 94% rename from test/ch/cyberduck/core/transfer/synchronisation/SynchronizationPathFilterTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/synchronisation/SynchronizationPathFilterTest.java index f72f456a69..4be4b3b22f 100644 --- a/test/ch/cyberduck/core/transfer/synchronisation/SynchronizationPathFilterTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/synchronisation/SynchronizationPathFilterTest.java @@ -7,12 +7,13 @@ import ch.cyberduck.core.Local; import ch.cyberduck.core.LocalAttributes; import ch.cyberduck.core.Path; import ch.cyberduck.core.Session; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.synchronization.ComparePathFilter; import ch.cyberduck.core.synchronization.Comparison; import ch.cyberduck.core.synchronization.ComparisonServiceFilter; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.TransferAction; import ch.cyberduck.core.transfer.TransferItem; import ch.cyberduck.core.transfer.TransferStatus; @@ -36,7 +37,7 @@ public class SynchronizationPathFilterTest extends AbstractTestCase { @Test public void testPrepare() throws Exception { final Path test = new Path("/t/a", EnumSet.of(Path.Type.file)); - Session session = new NullSession(new Host("t")); + Session session = new NullSession(new Host(new TestProtocol())); final NullLocal local = new NullLocal(System.getProperty("java.io.tmpdir"), "t") { @Override public boolean isSymbolicLink() { @@ -88,7 +89,7 @@ public class SynchronizationPathFilterTest extends AbstractTestCase { @Test public void testAcceptDirectory() throws Exception { - Session session = new NullSession(new Host("t")); + Session session = new NullSession(new Host(new TestProtocol())); final SynchronizationPathFilter mirror = new SynchronizationPathFilter(new ComparePathFilter() { @Override public Comparison compare(Path file, Local local) throws BackgroundException { diff --git a/test/ch/cyberduck/core/transfer/upload/CompareFilterTest.java b/core/src/test/java/ch/cyberduck/core/transfer/upload/CompareFilterTest.java similarity index 87% rename from test/ch/cyberduck/core/transfer/upload/CompareFilterTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/upload/CompareFilterTest.java index d1331cb29b..ef39bb8b69 100644 --- a/test/ch/cyberduck/core/transfer/upload/CompareFilterTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/upload/CompareFilterTest.java @@ -22,11 +22,12 @@ import ch.cyberduck.core.DisabledProgressListener; import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; import ch.cyberduck.core.Path; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.synchronization.Comparison; import ch.cyberduck.core.synchronization.ComparisonServiceFilter; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.TransferStatus; import ch.cyberduck.core.transfer.symlink.DisabledUploadSymlinkResolver; @@ -45,8 +46,8 @@ public class CompareFilterTest extends AbstractTestCase { @Test public void testAcceptEqual() throws Exception { final CompareFilter filter = new CompareFilter(new DisabledUploadSymlinkResolver(), - new NullSession(new Host("t")), new UploadFilterOptions(), - new ComparisonServiceFilter(new NullSession(new Host("t")), null, new DisabledProgressListener()) { + new NullSession(new Host(new TestProtocol())), new UploadFilterOptions(), + new ComparisonServiceFilter(new NullSession(new Host(new TestProtocol())), null, new DisabledProgressListener()) { @Override public Comparison compare(final Path file, final Local local) throws BackgroundException { return Comparison.equal; @@ -65,8 +66,8 @@ public class CompareFilterTest extends AbstractTestCase { @Test public void testAcceptDirectory() throws Exception { final CompareFilter filter = new CompareFilter(new DisabledUploadSymlinkResolver(), - new NullSession(new Host("t")), new UploadFilterOptions(), - new ComparisonServiceFilter(new NullSession(new Host("t")), null, new DisabledProgressListener()) { + new NullSession(new Host(new TestProtocol())), new UploadFilterOptions(), + new ComparisonServiceFilter(new NullSession(new Host(new TestProtocol())), null, new DisabledProgressListener()) { @Override public Comparison compare(final Path file, final Local local) throws BackgroundException { return Comparison.equal; diff --git a/test/ch/cyberduck/core/transfer/upload/LocalPriorityComparatorTest.java b/core/src/test/java/ch/cyberduck/core/transfer/upload/LocalPriorityComparatorTest.java similarity index 97% rename from test/ch/cyberduck/core/transfer/upload/LocalPriorityComparatorTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/upload/LocalPriorityComparatorTest.java index 8968815df6..23172a9d0e 100644 --- a/test/ch/cyberduck/core/transfer/upload/LocalPriorityComparatorTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/upload/LocalPriorityComparatorTest.java @@ -18,7 +18,7 @@ package ch.cyberduck.core.transfer.upload; */ import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.test.NullLocal; +import ch.cyberduck.core.NullLocal; import org.junit.Test; diff --git a/test/ch/cyberduck/core/transfer/upload/OverwriteFilterTest.java b/core/src/test/java/ch/cyberduck/core/transfer/upload/OverwriteFilterTest.java similarity index 89% rename from test/ch/cyberduck/core/transfer/upload/OverwriteFilterTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/upload/OverwriteFilterTest.java index 00e9273461..8f088dfd49 100644 --- a/test/ch/cyberduck/core/transfer/upload/OverwriteFilterTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/upload/OverwriteFilterTest.java @@ -7,12 +7,13 @@ import ch.cyberduck.core.LocalAttributes; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathCache; import ch.cyberduck.core.Permission; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.AccessDeniedException; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.exception.NotfoundException; import ch.cyberduck.core.features.Find; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.TransferStatus; import ch.cyberduck.core.transfer.symlink.DisabledUploadSymlinkResolver; @@ -29,7 +30,7 @@ public class OverwriteFilterTest extends AbstractTestCase { @Test(expected = NotfoundException.class) public void testAcceptNotFoundFile() throws Exception { - final OverwriteFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h"))); + final OverwriteFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); // Local file does not exist assertFalse(f.accept(new Path("a", EnumSet.of(Path.Type.file)) { }, new NullLocal("t") { @@ -43,7 +44,7 @@ public class OverwriteFilterTest extends AbstractTestCase { @Test(expected = NotfoundException.class) public void testAcceptNotFoundDirectory() throws Exception { - final OverwriteFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h"))); + final OverwriteFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); // Local file does not exist assertFalse(f.accept(new Path("a", EnumSet.of(Path.Type.directory)) { }, new NullLocal("t") { @@ -57,7 +58,7 @@ public class OverwriteFilterTest extends AbstractTestCase { @Test public void testAcceptRemoteExists() throws Exception { - final OverwriteFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h"))); + final OverwriteFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); assertTrue(f.accept(new Path("a", EnumSet.of(Path.Type.directory)) { }, new NullLocal("t") { @@ -81,7 +82,7 @@ public class OverwriteFilterTest extends AbstractTestCase { @Test public void testSize() throws Exception { - final OverwriteFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h"))); + final OverwriteFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); assertEquals(1L, f.prepare(new Path("/t", EnumSet.of(Path.Type.file)) { }, new NullLocal("/t") { @Override @@ -105,7 +106,7 @@ public class OverwriteFilterTest extends AbstractTestCase { @Test public void testPermissionsNoChange() throws Exception { - final OverwriteFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h"))); + final OverwriteFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); final Path file = new Path("/t", EnumSet.of(Path.Type.file)); assertFalse(f.prepare(file, new NullLocal("t"), new TransferStatus()).isComplete()); assertEquals(Acl.EMPTY, file.attributes().getAcl()); @@ -114,7 +115,7 @@ public class OverwriteFilterTest extends AbstractTestCase { @Test public void testPermissionsExistsNoChange() throws Exception { - final OverwriteFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h"))); + final OverwriteFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); final Path file = new Path("/t", EnumSet.of(Path.Type.file)); assertFalse(f.prepare(file, new NullLocal("/t"), new TransferStatus()).isComplete()); assertEquals(Acl.EMPTY, file.attributes().getAcl()); @@ -123,7 +124,7 @@ public class OverwriteFilterTest extends AbstractTestCase { @Test public void testTemporary() throws Exception { - final OverwriteFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h")), + final OverwriteFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol())), new UploadFilterOptions().withTemporary(true)); final Path file = new Path("/t", EnumSet.of(Path.Type.file)); final TransferStatus status = f.prepare(file, new NullLocal("t"), new TransferStatus()); @@ -136,7 +137,7 @@ public class OverwriteFilterTest extends AbstractTestCase { @Test(expected = AccessDeniedException.class) public void testOverrideDirectoryWithFile() throws Exception { - final AbstractUploadFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h"))).withFinder( + final AbstractUploadFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))).withFinder( new Find() { @Override public boolean find(final Path file) throws BackgroundException { @@ -157,7 +158,7 @@ public class OverwriteFilterTest extends AbstractTestCase { @Test(expected = AccessDeniedException.class) public void testOverrideFileWithDirectory() throws Exception { - final AbstractUploadFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h"))).withFinder( + final AbstractUploadFilter f = new OverwriteFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))).withFinder( new Find() { @Override public boolean find(final Path file) throws BackgroundException { diff --git a/test/ch/cyberduck/core/transfer/upload/RenameExistingFilterTest.java b/core/src/test/java/ch/cyberduck/core/transfer/upload/RenameExistingFilterTest.java similarity index 96% rename from test/ch/cyberduck/core/transfer/upload/RenameExistingFilterTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/upload/RenameExistingFilterTest.java index b52ab45517..022173aac1 100644 --- a/test/ch/cyberduck/core/transfer/upload/RenameExistingFilterTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/upload/RenameExistingFilterTest.java @@ -8,14 +8,15 @@ import ch.cyberduck.core.ListProgressListener; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathAttributes; import ch.cyberduck.core.PathCache; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.Attributes; import ch.cyberduck.core.features.Delete; import ch.cyberduck.core.features.Find; import ch.cyberduck.core.features.Move; import ch.cyberduck.core.features.Write; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.TransferOptions; import ch.cyberduck.core.transfer.TransferStatus; import ch.cyberduck.core.transfer.symlink.DisabledUploadSymlinkResolver; @@ -36,7 +37,7 @@ public class RenameExistingFilterTest extends AbstractTestCase { @Test public void testAccept() throws Exception { - final RenameExistingFilter f = new RenameExistingFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h"))); + final RenameExistingFilter f = new RenameExistingFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); final Path t = new Path("t", EnumSet.of(Path.Type.file)); assertTrue(f.accept(t, new NullLocal("/", "t") { @@ -51,7 +52,7 @@ public class RenameExistingFilterTest extends AbstractTestCase { @Test public void testPrepare() throws Exception { final AtomicBoolean c = new AtomicBoolean(); - final RenameExistingFilter f = new RenameExistingFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h")) { + final RenameExistingFilter f = new RenameExistingFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(final Class type) { if(type == Move.class) { @@ -121,7 +122,7 @@ public class RenameExistingFilterTest extends AbstractTestCase { return this; } }; - final NullSession session = new NullSession(new Host("h")) { + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(final Class type) { if(type.equals(Move.class)) { @@ -223,7 +224,7 @@ public class RenameExistingFilterTest extends AbstractTestCase { return this; } }; - final NullSession session = new NullSession(new Host("h")) { + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(final Class type) { if(type.equals(Move.class)) { diff --git a/test/ch/cyberduck/core/transfer/upload/RenameFilterTest.java b/core/src/test/java/ch/cyberduck/core/transfer/upload/RenameFilterTest.java similarity index 90% rename from test/ch/cyberduck/core/transfer/upload/RenameFilterTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/upload/RenameFilterTest.java index 4adce58518..627490b46e 100644 --- a/test/ch/cyberduck/core/transfer/upload/RenameFilterTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/upload/RenameFilterTest.java @@ -5,11 +5,12 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathAttributes; import ch.cyberduck.core.PathCache; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.Attributes; import ch.cyberduck.core.features.Find; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.TransferStatus; import ch.cyberduck.core.transfer.symlink.DisabledUploadSymlinkResolver; @@ -27,7 +28,7 @@ public class RenameFilterTest extends AbstractTestCase { @Test public void testPrepare() throws Exception { - RenameFilter f = new RenameFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h"))); + RenameFilter f = new RenameFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); final Path t = new Path("t", EnumSet.of(Path.Type.file)); f.prepare(t, new NullLocal("t"), new TransferStatus()); assertNotSame("t", t.getName()); @@ -64,7 +65,7 @@ public class RenameFilterTest extends AbstractTestCase { return this; } }; - final NullSession session = new NullSession(new Host("h")) { + final NullSession session = new NullSession(new Host(new TestProtocol())) { }; final RenameFilter f = new RenameFilter(new DisabledUploadSymlinkResolver(), session); f.withFinder(find).withAttributes(attributes); diff --git a/test/ch/cyberduck/core/transfer/upload/ResumeFilterTest.java b/core/src/test/java/ch/cyberduck/core/transfer/upload/ResumeFilterTest.java similarity index 93% rename from test/ch/cyberduck/core/transfer/upload/ResumeFilterTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/upload/ResumeFilterTest.java index f275e84698..05955b15b5 100644 --- a/test/ch/cyberduck/core/transfer/upload/ResumeFilterTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/upload/ResumeFilterTest.java @@ -7,14 +7,15 @@ import ch.cyberduck.core.ListProgressListener; import ch.cyberduck.core.LocalAttributes; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathCache; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.Attributes; import ch.cyberduck.core.features.Find; import ch.cyberduck.core.features.Write; import ch.cyberduck.core.shared.DefaultAttributesFeature; import ch.cyberduck.core.shared.DefaultUploadFeature; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.TransferStatus; import ch.cyberduck.core.transfer.symlink.DisabledUploadSymlinkResolver; @@ -32,7 +33,7 @@ public class ResumeFilterTest extends AbstractTestCase { @Test public void testAccept() throws Exception { - final ResumeFilter f = new ResumeFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h"))); + final ResumeFilter f = new ResumeFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol()))); assertTrue(f.accept(new Path("t", EnumSet.of(Path.Type.file)), new NullLocal("a") { @Override public boolean exists() { @@ -54,7 +55,7 @@ public class ResumeFilterTest extends AbstractTestCase { @Test public void testSkip() throws Exception { final Path file = new Path("t", EnumSet.of(Path.Type.file)); - final ResumeFilter f = new ResumeFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h")) { + final ResumeFilter f = new ResumeFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(final Class type) { if(type == Find.class) { @@ -100,7 +101,7 @@ public class ResumeFilterTest extends AbstractTestCase { @Test public void testPrepareFalse() throws Exception { - final ResumeFilter f = new ResumeFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h")), + final ResumeFilter f = new ResumeFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol())), new UploadFilterOptions().withTemporary(true)); final Path t = new Path("t", EnumSet.of(Path.Type.file)); t.attributes().setSize(7L); @@ -111,7 +112,7 @@ public class ResumeFilterTest extends AbstractTestCase { @Test public void testPrepare() throws Exception { - final ResumeFilter f = new ResumeFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h")) { + final ResumeFilter f = new ResumeFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { final Path f = new Path("t", EnumSet.of(Path.Type.file)); @@ -151,7 +152,7 @@ public class ResumeFilterTest extends AbstractTestCase { @Test public void testPrepare0() throws Exception { - final ResumeFilter f = new ResumeFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h")), + final ResumeFilter f = new ResumeFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol())), new UploadFilterOptions().withTemporary(true)); final Path t = new Path("t", EnumSet.of(Path.Type.file)); t.attributes().setSize(0L); @@ -163,7 +164,7 @@ public class ResumeFilterTest extends AbstractTestCase { @Test public void testAppendEqualSize() throws Exception { - final NullSession session = new NullSession(new Host("h")); + final NullSession session = new NullSession(new Host(new TestProtocol())); final ResumeFilter f = new ResumeFilter(new DisabledUploadSymlinkResolver(), session, new UploadFilterOptions().withTemporary(true), new DefaultUploadFeature(session) { @Override @@ -198,7 +199,7 @@ public class ResumeFilterTest extends AbstractTestCase { @Test public void testAppendSmallerSize() throws Exception { - final NullSession session = new NullSession(new Host("h")); + final NullSession session = new NullSession(new Host(new TestProtocol())); final ResumeFilter f = new ResumeFilter(new DisabledUploadSymlinkResolver(), session, new UploadFilterOptions().withTemporary(true), new DefaultUploadFeature(session) { @Override @@ -238,7 +239,7 @@ public class ResumeFilterTest extends AbstractTestCase { @Test public void testAppendLargerSize() throws Exception { - final NullSession session = new NullSession(new Host("h")); + final NullSession session = new NullSession(new Host(new TestProtocol())); final ResumeFilter f = new ResumeFilter(new DisabledUploadSymlinkResolver(), session, new UploadFilterOptions().withTemporary(true), new DefaultUploadFeature(session) { @Override diff --git a/test/ch/cyberduck/core/transfer/upload/SkipFilterTest.java b/core/src/test/java/ch/cyberduck/core/transfer/upload/SkipFilterTest.java similarity index 92% rename from test/ch/cyberduck/core/transfer/upload/SkipFilterTest.java rename to core/src/test/java/ch/cyberduck/core/transfer/upload/SkipFilterTest.java index 3e22f1086f..f0c1c07e43 100644 --- a/test/ch/cyberduck/core/transfer/upload/SkipFilterTest.java +++ b/core/src/test/java/ch/cyberduck/core/transfer/upload/SkipFilterTest.java @@ -7,12 +7,13 @@ import ch.cyberduck.core.ListProgressListener; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathAttributes; import ch.cyberduck.core.PathCache; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.exception.NotfoundException; import ch.cyberduck.core.features.Attributes; import ch.cyberduck.core.features.Find; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.TransferStatus; import ch.cyberduck.core.transfer.symlink.DisabledUploadSymlinkResolver; @@ -30,7 +31,7 @@ public class SkipFilterTest extends AbstractTestCase { @Test public void testAccept() throws Exception { - SkipFilter f = new SkipFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h")) { + SkipFilter f = new SkipFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(Class type) { if(type == Find.class) { @@ -59,7 +60,7 @@ public class SkipFilterTest extends AbstractTestCase { @Test public void testAcceptDirectory() throws Exception { - SkipFilter f = new SkipFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h")) { + SkipFilter f = new SkipFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { return AttributedList.emptyList(); @@ -86,7 +87,7 @@ public class SkipFilterTest extends AbstractTestCase { @Test(expected = NotfoundException.class) public void testNotFound() throws Exception { - SkipFilter f = new SkipFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host("h")) { + SkipFilter f = new SkipFilter(new DisabledUploadSymlinkResolver(), new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { return AttributedList.emptyList(); diff --git a/test/ch/cyberduck/core/urlhandler/LaunchServicesSchemeHandlerTest.java b/core/src/test/java/ch/cyberduck/core/urlhandler/LaunchServicesSchemeHandlerTest.java similarity index 83% rename from test/ch/cyberduck/core/urlhandler/LaunchServicesSchemeHandlerTest.java rename to core/src/test/java/ch/cyberduck/core/urlhandler/LaunchServicesSchemeHandlerTest.java index 1304b3ba6b..c2e9ce51df 100644 --- a/test/ch/cyberduck/core/urlhandler/LaunchServicesSchemeHandlerTest.java +++ b/core/src/test/java/ch/cyberduck/core/urlhandler/LaunchServicesSchemeHandlerTest.java @@ -1,12 +1,9 @@ package ch.cyberduck.core.urlhandler; -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Scheme; import ch.cyberduck.core.local.Application; import ch.cyberduck.core.local.LaunchServicesApplicationFinder; -import ch.cyberduck.core.test.Depends; import org.junit.Test; @@ -17,8 +14,7 @@ import static org.junit.Assert.*; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) -public class LaunchServicesSchemeHandlerTest extends AbstractTestCase { +public class LaunchServicesSchemeHandlerTest { @Test public void testSetDefaultHandlerForURLScheme() throws Exception { diff --git a/test/ch/cyberduck/core/urlhandler/SchemeHandlerFactoryTest.java b/core/src/test/java/ch/cyberduck/core/urlhandler/SchemeHandlerFactoryTest.java similarity index 100% rename from test/ch/cyberduck/core/urlhandler/SchemeHandlerFactoryTest.java rename to core/src/test/java/ch/cyberduck/core/urlhandler/SchemeHandlerFactoryTest.java diff --git a/test/ch/cyberduck/core/versioning/VersioningConfigurationTest.java b/core/src/test/java/ch/cyberduck/core/versioning/VersioningConfigurationTest.java similarity index 93% rename from test/ch/cyberduck/core/versioning/VersioningConfigurationTest.java rename to core/src/test/java/ch/cyberduck/core/versioning/VersioningConfigurationTest.java index 489d0011a4..f12d8cc53a 100644 --- a/test/ch/cyberduck/core/versioning/VersioningConfigurationTest.java +++ b/core/src/test/java/ch/cyberduck/core/versioning/VersioningConfigurationTest.java @@ -1,6 +1,6 @@ package ch.cyberduck.core.versioning; -import ch.cyberduck.core.s3.VersioningConfiguration; +import ch.cyberduck.core.VersioningConfiguration; import org.junit.Test; diff --git a/test/ch/cyberduck/core/worker/CalculateSizeWorkerTest.java b/core/src/test/java/ch/cyberduck/core/worker/CalculateSizeWorkerTest.java similarity index 90% rename from test/ch/cyberduck/core/worker/CalculateSizeWorkerTest.java rename to core/src/test/java/ch/cyberduck/core/worker/CalculateSizeWorkerTest.java index 6dbd4f5f66..0abf9efcf7 100644 --- a/test/ch/cyberduck/core/worker/CalculateSizeWorkerTest.java +++ b/core/src/test/java/ch/cyberduck/core/worker/CalculateSizeWorkerTest.java @@ -4,7 +4,8 @@ import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.DisabledProgressListener; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.TestProtocol; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -47,6 +48,6 @@ public class CalculateSizeWorkerTest extends AbstractTestCase { } i++; } - }.run(new NullSession(new Host(""))), 0L); + }.run(new NullSession(new Host(new TestProtocol()))), 0L); } } diff --git a/test/ch/cyberduck/core/worker/DeleteWorkerTest.java b/core/src/test/java/ch/cyberduck/core/worker/DeleteWorkerTest.java similarity index 91% rename from test/ch/cyberduck/core/worker/DeleteWorkerTest.java rename to core/src/test/java/ch/cyberduck/core/worker/DeleteWorkerTest.java index 9401971990..8028936c79 100644 --- a/test/ch/cyberduck/core/worker/DeleteWorkerTest.java +++ b/core/src/test/java/ch/cyberduck/core/worker/DeleteWorkerTest.java @@ -9,9 +9,11 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.ListProgressListener; import ch.cyberduck.core.LoginCallback; import ch.cyberduck.core.Path; +import ch.cyberduck.core.Session; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.Delete; -import ch.cyberduck.core.ftp.FTPSession; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -29,7 +31,7 @@ public class DeleteWorkerTest extends AbstractTestCase { @Test public void testCompile() throws Exception { - final FTPSession session = new FTPSession(new Host("t")) { + final Session session = new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(final Class type) { return (T) new Delete() { @@ -44,7 +46,7 @@ public class DeleteWorkerTest extends AbstractTestCase { } @Override - public AttributedList list(final Path file, final ListProgressListener listener) throws BackgroundException { + public AttributedList list(final Path file, final ListProgressListener listener) { if(file.equals(new Path("/t", EnumSet.of(Path.Type.directory)))) { return new AttributedList(Arrays.asList( new Path("/t/a", EnumSet.of(Path.Type.file)), @@ -68,7 +70,7 @@ public class DeleteWorkerTest extends AbstractTestCase { @Test public void testSymlink() throws Exception { - final FTPSession session = new FTPSession(new Host("t")) { + final Session session = new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(final Class type) { return (T) new Delete() { @@ -80,7 +82,7 @@ public class DeleteWorkerTest extends AbstractTestCase { } @Override - public AttributedList list(final Path file, final ListProgressListener listener) throws BackgroundException { + public AttributedList list(final Path file, final ListProgressListener listener) { fail(); return null; } diff --git a/test/ch/cyberduck/core/worker/ReadAclWorkerTest.java b/core/src/test/java/ch/cyberduck/core/worker/ReadAclWorkerTest.java similarity index 94% rename from test/ch/cyberduck/core/worker/ReadAclWorkerTest.java rename to core/src/test/java/ch/cyberduck/core/worker/ReadAclWorkerTest.java index 0e5f38b1c8..fdc065d35f 100644 --- a/test/ch/cyberduck/core/worker/ReadAclWorkerTest.java +++ b/core/src/test/java/ch/cyberduck/core/worker/ReadAclWorkerTest.java @@ -21,9 +21,10 @@ import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Acl; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.AclPermission; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -46,7 +47,7 @@ public class ReadAclWorkerTest extends AbstractTestCase { throw new UnsupportedOperationException(); } }; - assertEquals(1, worker.run(new NullSession(new Host("")) { + assertEquals(1, worker.run(new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(final Class type) { if(type == AclPermission.class) { diff --git a/test/ch/cyberduck/core/worker/ReadMetadataWorkerTest.java b/core/src/test/java/ch/cyberduck/core/worker/ReadMetadataWorkerTest.java similarity index 96% rename from test/ch/cyberduck/core/worker/ReadMetadataWorkerTest.java rename to core/src/test/java/ch/cyberduck/core/worker/ReadMetadataWorkerTest.java index 2234ab254c..45006425d7 100644 --- a/test/ch/cyberduck/core/worker/ReadMetadataWorkerTest.java +++ b/core/src/test/java/ch/cyberduck/core/worker/ReadMetadataWorkerTest.java @@ -3,9 +3,10 @@ package ch.cyberduck.core.worker; import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.Headers; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -32,7 +33,7 @@ public class ReadMetadataWorkerTest extends AbstractTestCase { fail(); } }; - assertTrue(worker.run(new NullSession(new Host("")) { + assertTrue(worker.run(new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(final Class type) { if(type == Headers.class) { @@ -65,7 +66,7 @@ public class ReadMetadataWorkerTest extends AbstractTestCase { fail(); } }; - final Map map = worker.run(new NullSession(new Host("")) { + final Map map = worker.run(new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(final Class type) { if(type == Headers.class) { @@ -112,7 +113,7 @@ public class ReadMetadataWorkerTest extends AbstractTestCase { fail(); } }; - final Map map = worker.run(new NullSession(new Host("")) { + final Map map = worker.run(new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(final Class type) { if(type == Headers.class) { diff --git a/test/ch/cyberduck/core/worker/ReadPermissionWorkerTest.java b/core/src/test/java/ch/cyberduck/core/worker/ReadPermissionWorkerTest.java similarity index 90% rename from test/ch/cyberduck/core/worker/ReadPermissionWorkerTest.java rename to core/src/test/java/ch/cyberduck/core/worker/ReadPermissionWorkerTest.java index a7ed09937e..d7aa2e8a75 100644 --- a/test/ch/cyberduck/core/worker/ReadPermissionWorkerTest.java +++ b/core/src/test/java/ch/cyberduck/core/worker/ReadPermissionWorkerTest.java @@ -21,7 +21,8 @@ import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; import ch.cyberduck.core.Permission; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.TestProtocol; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -46,7 +47,7 @@ public class ReadPermissionWorkerTest extends AbstractTestCase { // } }; - assertEquals(2, worker.run(new NullSession(new Host(""))).size()); + assertEquals(2, worker.run(new NullSession(new Host(new TestProtocol()))).size()); assertEquals("Getting permission of a… (Multiple files) (2)", worker.getActivity()); } } diff --git a/test/ch/cyberduck/core/worker/ReadSizeWorkerTest.java b/core/src/test/java/ch/cyberduck/core/worker/ReadSizeWorkerTest.java similarity index 81% rename from test/ch/cyberduck/core/worker/ReadSizeWorkerTest.java rename to core/src/test/java/ch/cyberduck/core/worker/ReadSizeWorkerTest.java index 5b39315488..3a9c240e31 100644 --- a/test/ch/cyberduck/core/worker/ReadSizeWorkerTest.java +++ b/core/src/test/java/ch/cyberduck/core/worker/ReadSizeWorkerTest.java @@ -3,7 +3,8 @@ package ch.cyberduck.core.worker; import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.TestProtocol; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -27,6 +28,6 @@ public class ReadSizeWorkerTest extends AbstractTestCase { // } }; - assertEquals(0L, worker.run(new NullSession(new Host(""))), 0L); + assertEquals(0L, worker.run(new NullSession(new Host(new TestProtocol()))), 0L); } } diff --git a/test/ch/cyberduck/core/worker/SingleTransferWorkerTest.java b/core/src/test/java/ch/cyberduck/core/worker/SingleTransferWorkerTest.java similarity index 94% rename from test/ch/cyberduck/core/worker/SingleTransferWorkerTest.java rename to core/src/test/java/ch/cyberduck/core/worker/SingleTransferWorkerTest.java index a5eca8f4c2..ab7ee35d68 100644 --- a/test/ch/cyberduck/core/worker/SingleTransferWorkerTest.java +++ b/core/src/test/java/ch/cyberduck/core/worker/SingleTransferWorkerTest.java @@ -7,8 +7,8 @@ import ch.cyberduck.core.exception.NotfoundException; import ch.cyberduck.core.features.Attributes; import ch.cyberduck.core.io.DisabledStreamListener; import ch.cyberduck.core.io.StreamListener; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.DisabledTransferErrorCallback; import ch.cyberduck.core.transfer.DisabledTransferItemCallback; import ch.cyberduck.core.transfer.DisabledTransferPrompt; @@ -62,7 +62,7 @@ public class SingleTransferWorkerTest extends AbstractTestCase { } }; final Cache cache = new TransferItemCache(Integer.MAX_VALUE); - final Transfer t = new UploadTransfer(new Host("t"), root, local) { + final Transfer t = new UploadTransfer(new Host(new TestProtocol()), root, local) { @Override public void transfer(final Session session, final Path file, Local local, final TransferOptions options, final TransferStatus status, @@ -71,7 +71,7 @@ public class SingleTransferWorkerTest extends AbstractTestCase { // } }; - final NullSession session = new NullSession(new Host("t")); + final NullSession session = new NullSession(new Host(new TestProtocol())); new SingleTransferWorker(session, t, new TransferOptions(), new TransferSpeedometer(t), new DisabledTransferPrompt() { @Override public TransferAction prompt(final TransferItem file) { @@ -121,7 +121,7 @@ public class SingleTransferWorkerTest extends AbstractTestCase { } }; final Cache cache = new TransferItemCache(Integer.MAX_VALUE); - final Transfer t = new UploadTransfer(new Host("t"), root, local) { + final Transfer t = new UploadTransfer(new Host(new TestProtocol()), root, local) { @Override public void transfer(final Session session, final Path file, Local local, final TransferOptions options, final TransferStatus status, @@ -135,7 +135,7 @@ public class SingleTransferWorkerTest extends AbstractTestCase { } } }; - final NullSession session = new NullSession(new Host("t")) { + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { return new AttributedList(Collections.singletonList(new Path("/t", EnumSet.of(Path.Type.directory)))); @@ -187,7 +187,7 @@ public class SingleTransferWorkerTest extends AbstractTestCase { return AttributedList.emptyList(); } }; - final Transfer t = new DownloadTransfer(new Host("t"), root, local) { + final Transfer t = new DownloadTransfer(new Host(new TestProtocol()), root, local) { @Override public void transfer(final Session session, final Path file, Local local, final TransferOptions options, final TransferStatus status, @@ -216,7 +216,7 @@ public class SingleTransferWorkerTest extends AbstractTestCase { }); } }; - final NullSession session = new NullSession(new Host("t")) { + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { final AttributedList children = new AttributedList(); @@ -251,7 +251,7 @@ public class SingleTransferWorkerTest extends AbstractTestCase { public void testUploadFileNotFound() throws Exception { // #7791 final Path root = new Path("/t", EnumSet.of(Path.Type.file)); - Transfer t = new UploadTransfer(new Host("t"), root, + Transfer t = new UploadTransfer(new Host(new TestProtocol()), root, new NullLocal("l") { @Override public boolean exists() { @@ -259,7 +259,7 @@ public class SingleTransferWorkerTest extends AbstractTestCase { return false; } }); - final NullSession session = new NullSession(new Host("t")) { + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { return new AttributedList(Collections.singletonList(new Path("/t", EnumSet.of(Path.Type.directory)))); diff --git a/test/ch/cyberduck/core/worker/WriteAclWorkerTest.java b/core/src/test/java/ch/cyberduck/core/worker/WriteAclWorkerTest.java similarity index 92% rename from test/ch/cyberduck/core/worker/WriteAclWorkerTest.java rename to core/src/test/java/ch/cyberduck/core/worker/WriteAclWorkerTest.java index b2d4cb1bc8..3b9c67222b 100644 --- a/test/ch/cyberduck/core/worker/WriteAclWorkerTest.java +++ b/core/src/test/java/ch/cyberduck/core/worker/WriteAclWorkerTest.java @@ -1,9 +1,15 @@ package ch.cyberduck.core.worker; -import ch.cyberduck.core.*; +import ch.cyberduck.core.AbstractTestCase; +import ch.cyberduck.core.Acl; +import ch.cyberduck.core.DisabledProgressListener; +import ch.cyberduck.core.Host; +import ch.cyberduck.core.Path; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.AclPermission; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullSession; + import org.junit.Test; import java.util.Collections; @@ -27,7 +33,7 @@ public class WriteAclWorkerTest extends AbstractTestCase { // } }; - worker.run(new NullSession(new Host("")) { + worker.run(new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(Class type) { if (type.equals(AclPermission.class)) { @@ -69,7 +75,7 @@ public class WriteAclWorkerTest extends AbstractTestCase { // } }; - worker.run(new NullSession(new Host("")) { + worker.run(new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(Class type) { if (type.equals(AclPermission.class)) { @@ -112,7 +118,7 @@ public class WriteAclWorkerTest extends AbstractTestCase { // } }; - worker.run(new NullSession(new Host("")) { + worker.run(new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(Class type) { if (type.equals(AclPermission.class)) { diff --git a/test/ch/cyberduck/core/worker/WriteMetadataWorkerTest.java b/core/src/test/java/ch/cyberduck/core/worker/WriteMetadataWorkerTest.java similarity index 94% rename from test/ch/cyberduck/core/worker/WriteMetadataWorkerTest.java rename to core/src/test/java/ch/cyberduck/core/worker/WriteMetadataWorkerTest.java index 49d26136ad..d3a083b730 100644 --- a/test/ch/cyberduck/core/worker/WriteMetadataWorkerTest.java +++ b/core/src/test/java/ch/cyberduck/core/worker/WriteMetadataWorkerTest.java @@ -4,9 +4,10 @@ import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.DisabledProgressListener; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.Headers; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -33,7 +34,7 @@ public class WriteMetadataWorkerTest extends AbstractTestCase { fail(); } }; - worker.run(new NullSession(new Host("")) { + worker.run(new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(final Class type) { if(type == Headers.class) { @@ -71,7 +72,7 @@ public class WriteMetadataWorkerTest extends AbstractTestCase { fail(); } }; - worker.run(new NullSession(new Host("")) { + worker.run(new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(final Class type) { if(type == Headers.class) { @@ -110,7 +111,7 @@ public class WriteMetadataWorkerTest extends AbstractTestCase { fail(); } }; - worker.run(new NullSession(new Host("")) { + worker.run(new NullSession(new Host(new TestProtocol())) { @Override public T getFeature(final Class type) { if(type == Headers.class) { diff --git a/test/ch/cyberduck/core/worker/WritePermissionWorkerTest.java b/core/src/test/java/ch/cyberduck/core/worker/WritePermissionWorkerTest.java similarity index 96% rename from test/ch/cyberduck/core/worker/WritePermissionWorkerTest.java rename to core/src/test/java/ch/cyberduck/core/worker/WritePermissionWorkerTest.java index 2fdc750881..4788f96890 100644 --- a/test/ch/cyberduck/core/worker/WritePermissionWorkerTest.java +++ b/core/src/test/java/ch/cyberduck/core/worker/WritePermissionWorkerTest.java @@ -25,9 +25,10 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.ListProgressListener; import ch.cyberduck.core.Path; import ch.cyberduck.core.Permission; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.UnixPermission; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -48,7 +49,7 @@ public class WritePermissionWorkerTest extends AbstractTestCase { final Path path = new Path("a", EnumSet.of(Path.Type.directory)); final WritePermissionWorker worker = new WritePermissionWorker(Collections.singletonList(path), permission, true, new DisabledProgressListener() ); - worker.run(new NullSession(new Host("")) { + worker.run(new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { final AttributedList children = new AttributedList(); @@ -95,7 +96,7 @@ public class WritePermissionWorkerTest extends AbstractTestCase { final Path a = new Path("a", EnumSet.of(Path.Type.directory)); final WritePermissionWorker worker = new WritePermissionWorker(Collections.singletonList(a), permission, true, new DisabledProgressListener() ); - worker.run(new NullSession(new Host("")) { + worker.run(new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { if(file.equals(a)) { @@ -153,7 +154,7 @@ public class WritePermissionWorkerTest extends AbstractTestCase { final Path d = new Path("d", EnumSet.of(Path.Type.directory)); final WritePermissionWorker worker = new WritePermissionWorker(Collections.singletonList(a), new Permission(775), true, new DisabledProgressListener() ); - worker.run(new NullSession(new Host("")) { + worker.run(new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { if(file.equals(a)) { @@ -208,7 +209,7 @@ public class WritePermissionWorkerTest extends AbstractTestCase { true, false, false)); final WritePermissionWorker worker = new WritePermissionWorker(Collections.singletonList(path), permission, true, new DisabledProgressListener() ); - worker.run(new NullSession(new Host("")) { + worker.run(new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { final AttributedList children = new AttributedList(); diff --git a/test/ch/cyberduck/core/aquaticprime/Info.plist b/core/src/test/resources/Info.plist similarity index 100% rename from test/ch/cyberduck/core/aquaticprime/Info.plist rename to core/src/test/resources/Info.plist diff --git a/test/ch/cyberduck/core/ssl/OXxlRDVcWqdPEvFm.cer b/core/src/test/resources/OXxlRDVcWqdPEvFm.cer similarity index 100% rename from test/ch/cyberduck/core/ssl/OXxlRDVcWqdPEvFm.cer rename to core/src/test/resources/OXxlRDVcWqdPEvFm.cer diff --git a/test/ch/cyberduck/core/transfer/TransferCollectionCopyFormat.plist b/core/src/test/resources/TransferCollectionCopyFormat.plist similarity index 97% rename from test/ch/cyberduck/core/transfer/TransferCollectionCopyFormat.plist rename to core/src/test/resources/TransferCollectionCopyFormat.plist index e15a1d8096..39dad93ac1 100644 --- a/test/ch/cyberduck/core/transfer/TransferCollectionCopyFormat.plist +++ b/core/src/test/resources/TransferCollectionCopyFormat.plist @@ -28,7 +28,7 @@ Port 21 Protocol - ftps + test Timezone Europe/Zurich UUID @@ -61,7 +61,7 @@ Port 21 Protocol - ftp + test Timezone Europe/Zurich UUID diff --git a/test/ch/cyberduck/core/transfer/TransferCollectionCopyFormatDeprecated.plist b/core/src/test/resources/TransferCollectionCopyFormatDeprecated.plist similarity index 98% rename from test/ch/cyberduck/core/transfer/TransferCollectionCopyFormatDeprecated.plist rename to core/src/test/resources/TransferCollectionCopyFormatDeprecated.plist index e4a37c4f19..f167428860 100644 --- a/test/ch/cyberduck/core/transfer/TransferCollectionCopyFormatDeprecated.plist +++ b/core/src/test/resources/TransferCollectionCopyFormatDeprecated.plist @@ -20,7 +20,7 @@ Port 21 Protocol - ftp + test Timezone Europe/Zurich UUID diff --git a/test/ch/cyberduck/core/transfer/TransferCollectionCopyFormatInvalid.plist b/core/src/test/resources/TransferCollectionCopyFormatInvalid.plist similarity index 98% rename from test/ch/cyberduck/core/transfer/TransferCollectionCopyFormatInvalid.plist rename to core/src/test/resources/TransferCollectionCopyFormatInvalid.plist index e4a37c4f19..f167428860 100644 --- a/test/ch/cyberduck/core/transfer/TransferCollectionCopyFormatInvalid.plist +++ b/core/src/test/resources/TransferCollectionCopyFormatInvalid.plist @@ -20,7 +20,7 @@ Port 21 Protocol - ftp + test Timezone Europe/Zurich UUID diff --git a/test/ch/cyberduck/core/transfer/TransferCollectionEmpty.plist b/core/src/test/resources/TransferCollectionEmpty.plist similarity index 100% rename from test/ch/cyberduck/core/transfer/TransferCollectionEmpty.plist rename to core/src/test/resources/TransferCollectionEmpty.plist diff --git a/test/ch/cyberduck/core/history/mirror.switch.ch – FTP.duck b/core/src/test/resources/history/mirror.switch.ch – FTP.duck similarity index 94% rename from test/ch/cyberduck/core/history/mirror.switch.ch – FTP.duck rename to core/src/test/resources/history/mirror.switch.ch – FTP.duck index 77289d5fc4..40c8d5b54c 100644 --- a/test/ch/cyberduck/core/history/mirror.switch.ch – FTP.duck +++ b/core/src/test/resources/history/mirror.switch.ch – FTP.duck @@ -2,19 +2,19 @@ - Access Timestamp - 1296634123295 - Hostname - mirror.switch.ch + Protocol + test Nickname mirror.switch.ch – FTP - Port - 21 - Protocol - ftp UUID 4d6b034c-8635-4e2f-93b1-7306ba22da24 + Hostname + mirror.switch.ch + Port + 21 Username anonymous + Access Timestamp + 1296634123295 - + \ No newline at end of file diff --git a/test/ch/cyberduck/core/sftp/openssh/config b/core/src/test/resources/openssh/config similarity index 100% rename from test/ch/cyberduck/core/sftp/openssh/config rename to core/src/test/resources/openssh/config diff --git a/core/src/test/resources/receipt b/core/src/test/resources/receipt new file mode 100644 index 0000000000..a6a9dac29b Binary files /dev/null and b/core/src/test/resources/receipt differ diff --git a/test/ch/cyberduck/core/aquaticprime/test.cyberducklicense b/core/src/test/resources/test.cyberducklicense similarity index 100% rename from test/ch/cyberduck/core/aquaticprime/test.cyberducklicense rename to core/src/test/resources/test.cyberducklicense diff --git a/fs/pom.xml b/fs/pom.xml new file mode 100644 index 0000000000..2ce14f4783 --- /dev/null +++ b/fs/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + + ch.cyberduck + parent + 4.8.0-SNAPSHOT + + fs + jar + + + + ch.cyberduck + protocols + pom + ${project.version} + + + ch.cyberduck + test + pom + test + ${project.version} + + + + diff --git a/source/ch/cyberduck/fs/Filesystem.java b/fs/src/main/java/ch/cyberduck/fs/Filesystem.java similarity index 100% rename from source/ch/cyberduck/fs/Filesystem.java rename to fs/src/main/java/ch/cyberduck/fs/Filesystem.java diff --git a/source/ch/cyberduck/fs/FilesystemFactory.java b/fs/src/main/java/ch/cyberduck/fs/FilesystemFactory.java similarity index 100% rename from source/ch/cyberduck/fs/FilesystemFactory.java rename to fs/src/main/java/ch/cyberduck/fs/FilesystemFactory.java diff --git a/source/ch/cyberduck/fs/FilesystemWorker.java b/fs/src/main/java/ch/cyberduck/fs/FilesystemWorker.java similarity index 100% rename from source/ch/cyberduck/fs/FilesystemWorker.java rename to fs/src/main/java/ch/cyberduck/fs/FilesystemWorker.java diff --git a/test/ch/cyberduck/fs/FilesystemFactoryTest.java b/fs/src/test/java/ch/cyberduck/fs/FilesystemFactoryTest.java similarity index 100% rename from test/ch/cyberduck/fs/FilesystemFactoryTest.java rename to fs/src/test/java/ch/cyberduck/fs/FilesystemFactoryTest.java diff --git a/ftp/pom.xml b/ftp/pom.xml new file mode 100644 index 0000000000..e8110e9366 --- /dev/null +++ b/ftp/pom.xml @@ -0,0 +1,31 @@ + + 4.0.0 + + ch.cyberduck + parent + 4.8.0-SNAPSHOT + + ftp + jar + + + + ch.cyberduck + core + ${project.version} + + + ch.cyberduck + s3 + ${project.version} + + + ch.cyberduck + test + pom + test + ${project.version} + + + + diff --git a/source/ch/cyberduck/core/ftp/DataConnectionAction.java b/ftp/src/main/java/ch/cyberduck/core/ftp/DataConnectionAction.java similarity index 100% rename from source/ch/cyberduck/core/ftp/DataConnectionAction.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/DataConnectionAction.java diff --git a/source/ch/cyberduck/core/ftp/FTPAttributesFeature.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPAttributesFeature.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPAttributesFeature.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPAttributesFeature.java diff --git a/source/ch/cyberduck/core/ftp/FTPClient.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPClient.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPClient.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPClient.java diff --git a/source/ch/cyberduck/core/ftp/FTPCommandFeature.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPCommandFeature.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPCommandFeature.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPCommandFeature.java diff --git a/source/ch/cyberduck/core/ftp/FTPDataFallback.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPDataFallback.java similarity index 95% rename from source/ch/cyberduck/core/ftp/FTPDataFallback.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPDataFallback.java index b45e81dc58..170ff0ae3e 100644 --- a/source/ch/cyberduck/core/ftp/FTPDataFallback.java +++ b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPDataFallback.java @@ -31,6 +31,7 @@ import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.exception.ConnectionTimeoutException; import ch.cyberduck.core.exception.InteroperabilityException; import ch.cyberduck.core.exception.NotfoundException; +import ch.cyberduck.core.preferences.Preferences; import ch.cyberduck.core.preferences.PreferencesFactory; import org.apache.log4j.Logger; @@ -49,6 +50,8 @@ public class FTPDataFallback { private final LoginCallback prompt; + private final Preferences preferences = PreferencesFactory.get(); + public FTPDataFallback(final FTPSession session) { this(session, new DisabledPasswordStore(), new DisabledLoginCallback()); } @@ -79,7 +82,7 @@ public class FTPDataFallback { catch(ConnectionTimeoutException failure) { log.warn(String.format("Timeout opening data socket %s", failure.getMessage())); // Fallback handling - if(PreferencesFactory.get().getBoolean("ftp.connectmode.fallback")) { + if(preferences.getBoolean("ftp.connectmode.fallback")) { try { try { session.getClient().completePendingCommand(); @@ -110,7 +113,7 @@ public class FTPDataFallback { catch(InteroperabilityException | NotfoundException | AccessDeniedException failure) { log.warn(String.format("Server denied data socket operation with %s", failure.getMessage())); // Fallback handling - if(PreferencesFactory.get().getBoolean("ftp.connectmode.fallback")) { + if(preferences.getBoolean("ftp.connectmode.fallback")) { try { return this.fallback(action); } diff --git a/source/ch/cyberduck/core/ftp/FTPDataResponseReader.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPDataResponseReader.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPDataResponseReader.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPDataResponseReader.java diff --git a/source/ch/cyberduck/core/ftp/FTPDefaultListService.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPDefaultListService.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPDefaultListService.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPDefaultListService.java diff --git a/source/ch/cyberduck/core/ftp/FTPDeleteFeature.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPDeleteFeature.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPDeleteFeature.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPDeleteFeature.java diff --git a/source/ch/cyberduck/core/ftp/FTPDirectoryFeature.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPDirectoryFeature.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPDirectoryFeature.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPDirectoryFeature.java diff --git a/source/ch/cyberduck/core/ftp/FTPException.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPException.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPException.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPException.java diff --git a/source/ch/cyberduck/core/ftp/FTPExceptionMappingService.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPExceptionMappingService.java similarity index 98% rename from source/ch/cyberduck/core/ftp/FTPExceptionMappingService.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPExceptionMappingService.java index c644dd2a5d..66384582e2 100644 --- a/source/ch/cyberduck/core/ftp/FTPExceptionMappingService.java +++ b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPExceptionMappingService.java @@ -67,6 +67,7 @@ public class FTPExceptionMappingService extends AbstractExceptionMappingService< case FTPReply.NEED_ACCOUNT: case FTPReply.NEED_ACCOUNT_FOR_STORING_FILES: case FTPReply.FILE_NAME_NOT_ALLOWED: + case FTPReply.ACTION_ABORTED: return new AccessDeniedException(buffer.toString(), e); case FTPReply.UNAVAILABLE_RESOURCE: case FTPReply.FILE_UNAVAILABLE: diff --git a/source/ch/cyberduck/core/ftp/FTPInvalidListException.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPInvalidListException.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPInvalidListException.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPInvalidListException.java diff --git a/source/ch/cyberduck/core/ftp/FTPListResponseReader.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPListResponseReader.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPListResponseReader.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPListResponseReader.java diff --git a/source/ch/cyberduck/core/ftp/FTPListService.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPListService.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPListService.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPListService.java diff --git a/source/ch/cyberduck/core/ftp/FTPMFMTTimestampFeature.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPMFMTTimestampFeature.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPMFMTTimestampFeature.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPMFMTTimestampFeature.java diff --git a/source/ch/cyberduck/core/ftp/FTPMlsdListResponseReader.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPMlsdListResponseReader.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPMlsdListResponseReader.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPMlsdListResponseReader.java diff --git a/source/ch/cyberduck/core/ftp/FTPMlsdListService.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPMlsdListService.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPMlsdListService.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPMlsdListService.java diff --git a/source/ch/cyberduck/core/ftp/FTPMoveFeature.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPMoveFeature.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPMoveFeature.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPMoveFeature.java diff --git a/source/ch/cyberduck/core/ftp/FTPParserFactory.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPParserFactory.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPParserFactory.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPParserFactory.java diff --git a/source/ch/cyberduck/core/ftp/FTPParserSelector.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPParserSelector.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPParserSelector.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPParserSelector.java diff --git a/source/ch/cyberduck/core/ftp/FTPProtocol.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPProtocol.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPProtocol.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPProtocol.java diff --git a/source/ch/cyberduck/core/ftp/FTPReadFeature.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPReadFeature.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPReadFeature.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPReadFeature.java diff --git a/source/ch/cyberduck/core/ftp/FTPSession.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPSession.java similarity index 96% rename from source/ch/cyberduck/core/ftp/FTPSession.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPSession.java index 883064bb1d..356b71a528 100644 --- a/source/ch/cyberduck/core/ftp/FTPSession.java +++ b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPSession.java @@ -27,7 +27,8 @@ import ch.cyberduck.core.ListProgressListener; import ch.cyberduck.core.LocaleFactory; import ch.cyberduck.core.LoginCallback; import ch.cyberduck.core.Path; -import ch.cyberduck.core.ProtocolFactory; +import ch.cyberduck.core.cdn.DistributionConfiguration; +import ch.cyberduck.core.cloudfront.CustomOriginCloudFrontDistributionConfiguration; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.exception.LoginCanceledException; import ch.cyberduck.core.features.Attributes; @@ -226,7 +227,7 @@ public class FTPSession extends SSLSession { callback.warn(host.getProtocol(), MessageFormat.format(LocaleFactory.localizedString("Unsecured {0} connection", "Credentials"), host.getProtocol().getName()), MessageFormat.format("{0} {1}.", MessageFormat.format(LocaleFactory.localizedString("The server supports encrypted connections. Do you want to switch to {0}?", "Credentials"), - ProtocolFactory.FTP_TLS.getName()), LocaleFactory.localizedString("Please contact your web hosting service provider for assistance", "Support")), + new FTPTLSProtocol().getName()), LocaleFactory.localizedString("Please contact your web hosting service provider for assistance", "Support")), LocaleFactory.localizedString("Continue", "Credentials"), LocaleFactory.localizedString("Change", "Credentials"), String.format("connection.unsecure.%s", host.getHostname())); @@ -234,7 +235,7 @@ public class FTPSession extends SSLSession { } catch(LoginCanceledException e) { // Protocol switch - host.setProtocol(ProtocolFactory.FTP_TLS); + host.setProtocol(new FTPTLSProtocol()); // Reconfigure client for TLS this.configure(client); client.execAUTH(); @@ -358,6 +359,9 @@ public class FTPSession extends SSLSession { if(type == Command.class) { return (T) new FTPCommandFeature(this); } + if(type == DistributionConfiguration.class) { + return (T) new CustomOriginCloudFrontDistributionConfiguration(host, this); + } return super.getFeature(type); } } \ No newline at end of file diff --git a/source/ch/cyberduck/core/ftp/FTPStatListService.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPStatListService.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPStatListService.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPStatListService.java diff --git a/source/ch/cyberduck/core/ftp/FTPSymlinkFeature.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPSymlinkFeature.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPSymlinkFeature.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPSymlinkFeature.java diff --git a/source/ch/cyberduck/core/ftp/FTPTLSProtocol.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPTLSProtocol.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPTLSProtocol.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPTLSProtocol.java diff --git a/source/ch/cyberduck/core/ftp/FTPUTIMETimestampFeature.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPUTIMETimestampFeature.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPUTIMETimestampFeature.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPUTIMETimestampFeature.java diff --git a/source/ch/cyberduck/core/ftp/FTPUnixPermissionFeature.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPUnixPermissionFeature.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPUnixPermissionFeature.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPUnixPermissionFeature.java diff --git a/source/ch/cyberduck/core/ftp/FTPWriteFeature.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPWriteFeature.java similarity index 100% rename from source/ch/cyberduck/core/ftp/FTPWriteFeature.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/FTPWriteFeature.java diff --git a/source/ch/cyberduck/core/ftp/LoggingProtocolCommandListener.java b/ftp/src/main/java/ch/cyberduck/core/ftp/LoggingProtocolCommandListener.java similarity index 100% rename from source/ch/cyberduck/core/ftp/LoggingProtocolCommandListener.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/LoggingProtocolCommandListener.java diff --git a/source/ch/cyberduck/core/ftp/parser/CommonUnixFTPEntryParser.java b/ftp/src/main/java/ch/cyberduck/core/ftp/parser/CommonUnixFTPEntryParser.java similarity index 100% rename from source/ch/cyberduck/core/ftp/parser/CommonUnixFTPEntryParser.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/parser/CommonUnixFTPEntryParser.java diff --git a/source/ch/cyberduck/core/ftp/parser/CompositeFileEntryParser.java b/ftp/src/main/java/ch/cyberduck/core/ftp/parser/CompositeFileEntryParser.java similarity index 100% rename from source/ch/cyberduck/core/ftp/parser/CompositeFileEntryParser.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/parser/CompositeFileEntryParser.java diff --git a/source/ch/cyberduck/core/ftp/parser/EPLFFTPEntryParser.java b/ftp/src/main/java/ch/cyberduck/core/ftp/parser/EPLFFTPEntryParser.java similarity index 100% rename from source/ch/cyberduck/core/ftp/parser/EPLFFTPEntryParser.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/parser/EPLFFTPEntryParser.java diff --git a/source/ch/cyberduck/core/ftp/parser/FTPExtendedFile.java b/ftp/src/main/java/ch/cyberduck/core/ftp/parser/FTPExtendedFile.java similarity index 100% rename from source/ch/cyberduck/core/ftp/parser/FTPExtendedFile.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/parser/FTPExtendedFile.java diff --git a/source/ch/cyberduck/core/ftp/parser/LaxUnixFTPEntryParser.java b/ftp/src/main/java/ch/cyberduck/core/ftp/parser/LaxUnixFTPEntryParser.java similarity index 100% rename from source/ch/cyberduck/core/ftp/parser/LaxUnixFTPEntryParser.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/parser/LaxUnixFTPEntryParser.java diff --git a/source/ch/cyberduck/core/ftp/parser/RumpusFTPEntryParser.java b/ftp/src/main/java/ch/cyberduck/core/ftp/parser/RumpusFTPEntryParser.java similarity index 100% rename from source/ch/cyberduck/core/ftp/parser/RumpusFTPEntryParser.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/parser/RumpusFTPEntryParser.java diff --git a/source/ch/cyberduck/core/ftp/parser/TrellixFTPEntryParser.java b/ftp/src/main/java/ch/cyberduck/core/ftp/parser/TrellixFTPEntryParser.java similarity index 100% rename from source/ch/cyberduck/core/ftp/parser/TrellixFTPEntryParser.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/parser/TrellixFTPEntryParser.java diff --git a/source/ch/cyberduck/core/ftp/parser/UnitreeFTPEntryParser.java b/ftp/src/main/java/ch/cyberduck/core/ftp/parser/UnitreeFTPEntryParser.java similarity index 100% rename from source/ch/cyberduck/core/ftp/parser/UnitreeFTPEntryParser.java rename to ftp/src/main/java/ch/cyberduck/core/ftp/parser/UnitreeFTPEntryParser.java diff --git a/ftp/src/test/java/ch/cyberduck/core/SessionFactoryTest.java b/ftp/src/test/java/ch/cyberduck/core/SessionFactoryTest.java new file mode 100644 index 0000000000..f8fefb76d3 --- /dev/null +++ b/ftp/src/test/java/ch/cyberduck/core/SessionFactoryTest.java @@ -0,0 +1,24 @@ +package ch.cyberduck.core; + +import ch.cyberduck.core.ftp.FTPProtocol; +import ch.cyberduck.core.ftp.FTPTLSProtocol; +import ch.cyberduck.core.ssl.DefaultX509KeyManager; +import ch.cyberduck.core.ssl.DefaultX509TrustManager; + +import org.junit.Test; + +import static org.junit.Assert.assertNotNull; + +/** + * @version $Id$ + */ +public class SessionFactoryTest extends AbstractTestCase { + + @Test + public void testCreateSession() throws Exception { + assertNotNull(SessionFactory.create(new Host(new FTPProtocol()), + new DefaultX509TrustManager(), new DefaultX509KeyManager())); + assertNotNull(SessionFactory.create(new Host(new FTPTLSProtocol()), + new DefaultX509TrustManager(), new DefaultX509KeyManager())); + } +} diff --git a/test/ch/cyberduck/core/ftp/FTPAttributesFeatureTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPAttributesFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPAttributesFeatureTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPAttributesFeatureTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPCommandFeatureTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPCommandFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPCommandFeatureTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPCommandFeatureTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPDataFallbackTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPDataFallbackTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPDataFallbackTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPDataFallbackTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPDefaultListServiceTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPDefaultListServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPDefaultListServiceTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPDefaultListServiceTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPDeleteFeatureTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPDeleteFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPDeleteFeatureTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPDeleteFeatureTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPDirectoryFeatureTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPDirectoryFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPDirectoryFeatureTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPDirectoryFeatureTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPExceptionMappingServiceTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPExceptionMappingServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPExceptionMappingServiceTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPExceptionMappingServiceTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPListResponseReaderTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPListResponseReaderTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPListResponseReaderTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPListResponseReaderTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPListServiceTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPListServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPListServiceTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPListServiceTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPMFMTTimestampFeatureTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPMFMTTimestampFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPMFMTTimestampFeatureTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPMFMTTimestampFeatureTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPMlsdListResponseReaderTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPMlsdListResponseReaderTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPMlsdListResponseReaderTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPMlsdListResponseReaderTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPMlsdListServiceTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPMlsdListServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPMlsdListServiceTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPMlsdListServiceTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPMoveFeatureTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPMoveFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPMoveFeatureTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPMoveFeatureTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPParserSelectorTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPParserSelectorTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPParserSelectorTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPParserSelectorTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPReadFeatureTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPReadFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPReadFeatureTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPReadFeatureTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPSessionTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPSessionTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPSessionTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPSessionTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPStatListServiceTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPStatListServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPStatListServiceTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPStatListServiceTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPUTIMETimestampFeatureTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPUTIMETimestampFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPUTIMETimestampFeatureTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPUTIMETimestampFeatureTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPUnixPermissionFeatureTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPUnixPermissionFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPUnixPermissionFeatureTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPUnixPermissionFeatureTest.java diff --git a/test/ch/cyberduck/core/ftp/FTPWriteFeatureTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPWriteFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/FTPWriteFeatureTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/FTPWriteFeatureTest.java diff --git a/test/ch/cyberduck/core/ftp/parser/EPLFEntryParserTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/parser/EPLFEntryParserTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/parser/EPLFEntryParserTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/parser/EPLFEntryParserTest.java diff --git a/test/ch/cyberduck/core/ftp/parser/FilezillaFTPEntryParserTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/parser/FilezillaFTPEntryParserTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/parser/FilezillaFTPEntryParserTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/parser/FilezillaFTPEntryParserTest.java diff --git a/test/ch/cyberduck/core/ftp/parser/FreeboxFTPEntryParserTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/parser/FreeboxFTPEntryParserTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/parser/FreeboxFTPEntryParserTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/parser/FreeboxFTPEntryParserTest.java diff --git a/test/ch/cyberduck/core/ftp/parser/HPTru64ParserTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/parser/HPTru64ParserTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/parser/HPTru64ParserTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/parser/HPTru64ParserTest.java diff --git a/test/ch/cyberduck/core/ftp/parser/MicrosoftFTPEntryParserTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/parser/MicrosoftFTPEntryParserTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/parser/MicrosoftFTPEntryParserTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/parser/MicrosoftFTPEntryParserTest.java diff --git a/test/ch/cyberduck/core/ftp/parser/NTFTPEntryParserTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/parser/NTFTPEntryParserTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/parser/NTFTPEntryParserTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/parser/NTFTPEntryParserTest.java diff --git a/test/ch/cyberduck/core/ftp/parser/NetwareFTPEntryParserTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/parser/NetwareFTPEntryParserTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/parser/NetwareFTPEntryParserTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/parser/NetwareFTPEntryParserTest.java diff --git a/test/ch/cyberduck/core/ftp/parser/OpensolarisFTPEntryParserTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/parser/OpensolarisFTPEntryParserTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/parser/OpensolarisFTPEntryParserTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/parser/OpensolarisFTPEntryParserTest.java diff --git a/test/ch/cyberduck/core/ftp/parser/RumpusFTPEntryParserTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/parser/RumpusFTPEntryParserTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/parser/RumpusFTPEntryParserTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/parser/RumpusFTPEntryParserTest.java diff --git a/test/ch/cyberduck/core/ftp/parser/StingrayFTPEntryParserTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/parser/StingrayFTPEntryParserTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/parser/StingrayFTPEntryParserTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/parser/StingrayFTPEntryParserTest.java diff --git a/test/ch/cyberduck/core/ftp/parser/TrellixFTPEntryParserTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/parser/TrellixFTPEntryParserTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/parser/TrellixFTPEntryParserTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/parser/TrellixFTPEntryParserTest.java diff --git a/test/ch/cyberduck/core/ftp/parser/UnixFTPEntryParserTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/parser/UnixFTPEntryParserTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/parser/UnixFTPEntryParserTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/parser/UnixFTPEntryParserTest.java diff --git a/test/ch/cyberduck/core/ftp/parser/WebstarFTPEntryParserTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/parser/WebstarFTPEntryParserTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/parser/WebstarFTPEntryParserTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/parser/WebstarFTPEntryParserTest.java diff --git a/test/ch/cyberduck/core/ftp/parser/vsFTPdEntryParserTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/parser/vsFTPdEntryParserTest.java similarity index 100% rename from test/ch/cyberduck/core/ftp/parser/vsFTPdEntryParserTest.java rename to ftp/src/test/java/ch/cyberduck/core/ftp/parser/vsFTPdEntryParserTest.java diff --git a/importer/pom.xml b/importer/pom.xml new file mode 100644 index 0000000000..eab0af374f --- /dev/null +++ b/importer/pom.xml @@ -0,0 +1,46 @@ + + + + parent + ch.cyberduck + 4.8.0-SNAPSHOT + + 4.0.0 + + importer + + + + ch.cyberduck + core + ${project.version} + + + ch.cyberduck + libcore + dylib + runtime + ${project.version} + + + ch.cyberduck + test + pom + test + ${project.version} + + + ch.cyberduck + binding + ${project.version} + + + ch.cyberduck + protocols + pom + ${project.version} + + + \ No newline at end of file diff --git a/source/ch/cyberduck/core/importer/CloudberryAzureBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/CloudberryAzureBookmarkCollection.java similarity index 100% rename from source/ch/cyberduck/core/importer/CloudberryAzureBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/CloudberryAzureBookmarkCollection.java diff --git a/source/ch/cyberduck/core/importer/CloudberryBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/CloudberryBookmarkCollection.java similarity index 85% rename from source/ch/cyberduck/core/importer/CloudberryBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/CloudberryBookmarkCollection.java index 144eb057bd..938c011891 100644 --- a/source/ch/cyberduck/core/importer/CloudberryBookmarkCollection.java +++ b/importer/src/main/java/ch/cyberduck/core/importer/CloudberryBookmarkCollection.java @@ -22,6 +22,8 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.exception.AccessDeniedException; +import ch.cyberduck.core.gstorage.GoogleStorageProtocol; +import ch.cyberduck.core.s3.S3Protocol; import org.apache.log4j.Logger; import org.xml.sax.Attributes; @@ -52,13 +54,13 @@ public abstract class CloudberryBookmarkCollection extends XmlBookmarkCollection if(name.equals("Settings")) { String type = attrs.getValue("xsi:type"); if("GoogleSettings".equals(type)) { - current = new Host(ProtocolFactory.GOOGLESTORAGE_SSL, ProtocolFactory.GOOGLESTORAGE_SSL.getDefaultHostname(), ProtocolFactory.GOOGLESTORAGE_SSL.getDefaultPort()); + current = new Host(new GoogleStorageProtocol(), new GoogleStorageProtocol().getDefaultHostname(), new GoogleStorageProtocol().getDefaultPort()); } else if("S3Settings".equals(type)) { - current = new Host(ProtocolFactory.S3_SSL, ProtocolFactory.S3_SSL.getDefaultHostname(), ProtocolFactory.S3_SSL.getDefaultPort()); + current = new Host(new S3Protocol(), new S3Protocol().getDefaultHostname(), new S3Protocol().getDefaultPort()); } else if("DunkelSettings".equals(type)) { - current = new Host(ProtocolFactory.S3_SSL, ProtocolFactory.S3_SSL.getDefaultHostname(), ProtocolFactory.S3_SSL.getDefaultPort()); + current = new Host(new S3Protocol(), new S3Protocol().getDefaultHostname(), new S3Protocol().getDefaultPort()); } else { log.warn("Unsupported connection type:" + type); diff --git a/source/ch/cyberduck/core/importer/CloudberryGoogleBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/CloudberryGoogleBookmarkCollection.java similarity index 100% rename from source/ch/cyberduck/core/importer/CloudberryGoogleBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/CloudberryGoogleBookmarkCollection.java diff --git a/source/ch/cyberduck/core/importer/CloudberryS3BookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/CloudberryS3BookmarkCollection.java similarity index 100% rename from source/ch/cyberduck/core/importer/CloudberryS3BookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/CloudberryS3BookmarkCollection.java diff --git a/source/ch/cyberduck/core/importer/CrossFtpBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/CrossFtpBookmarkCollection.java similarity index 85% rename from source/ch/cyberduck/core/importer/CrossFtpBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/CrossFtpBookmarkCollection.java index 2e6a557fea..d3cf5eeff7 100644 --- a/source/ch/cyberduck/core/importer/CrossFtpBookmarkCollection.java +++ b/importer/src/main/java/ch/cyberduck/core/importer/CrossFtpBookmarkCollection.java @@ -22,8 +22,13 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; import ch.cyberduck.core.LocalFactory; import ch.cyberduck.core.ProtocolFactory; +import ch.cyberduck.core.dav.DAVProtocol; +import ch.cyberduck.core.dav.DAVSSLProtocol; import ch.cyberduck.core.exception.AccessDeniedException; +import ch.cyberduck.core.ftp.FTPProtocol; +import ch.cyberduck.core.ftp.FTPTLSProtocol; import ch.cyberduck.core.preferences.PreferencesFactory; +import ch.cyberduck.core.s3.S3Protocol; import org.apache.log4j.Logger; import org.xml.sax.Attributes; @@ -70,7 +75,7 @@ public class CrossFtpBookmarkCollection extends XmlBookmarkCollection { @Override public void startElement(String uri, String name, String qName, Attributes attrs) { if(name.equals("site")) { - current = new Host(attrs.getValue("hName")); + current = new Host(new FTPProtocol(), attrs.getValue("hName")); current.setNickname(attrs.getValue("name")); current.getCredentials().setUsername(attrs.getValue("un")); current.setWebURL(attrs.getValue("wURL")); @@ -80,22 +85,22 @@ public class CrossFtpBookmarkCollection extends XmlBookmarkCollection { try { switch(Integer.valueOf(protocol)) { case 1: - current.setProtocol(ProtocolFactory.FTP); + current.setProtocol(new FTPProtocol()); break; case 2: case 3: case 4: - current.setProtocol(ProtocolFactory.FTP_TLS); + current.setProtocol(new FTPTLSProtocol()); break; case 6: - current.setProtocol(ProtocolFactory.WEBDAV); + current.setProtocol(new DAVProtocol()); break; case 7: - current.setProtocol(ProtocolFactory.WEBDAV_SSL); + current.setProtocol(new DAVSSLProtocol()); break; case 8: case 9: - current.setProtocol(ProtocolFactory.S3_SSL); + current.setProtocol(new S3Protocol()); break; } } diff --git a/source/ch/cyberduck/core/importer/Expandrive3BookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/Expandrive3BookmarkCollection.java similarity index 100% rename from source/ch/cyberduck/core/importer/Expandrive3BookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/Expandrive3BookmarkCollection.java diff --git a/source/ch/cyberduck/core/importer/Expandrive4BookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/Expandrive4BookmarkCollection.java similarity index 100% rename from source/ch/cyberduck/core/importer/Expandrive4BookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/Expandrive4BookmarkCollection.java diff --git a/source/ch/cyberduck/core/importer/Expandrive5BookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/Expandrive5BookmarkCollection.java similarity index 100% rename from source/ch/cyberduck/core/importer/Expandrive5BookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/Expandrive5BookmarkCollection.java diff --git a/source/ch/cyberduck/core/importer/ExpandriveBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/ExpandriveBookmarkCollection.java similarity index 95% rename from source/ch/cyberduck/core/importer/ExpandriveBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/ExpandriveBookmarkCollection.java index ad43fbf3ee..af3a6f7604 100644 --- a/source/ch/cyberduck/core/importer/ExpandriveBookmarkCollection.java +++ b/importer/src/main/java/ch/cyberduck/core/importer/ExpandriveBookmarkCollection.java @@ -24,6 +24,7 @@ import ch.cyberduck.core.Protocol; import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.exception.AccessDeniedException; import ch.cyberduck.core.exception.LocalAccessDeniedException; +import ch.cyberduck.core.ftp.FTPProtocol; import ch.cyberduck.core.preferences.PreferencesFactory; import org.apache.log4j.Logger; @@ -46,7 +47,7 @@ public abstract class ExpandriveBookmarkCollection extends ThirdpartyBookmarkCol reader.beginArray(); while(reader.hasNext()) { reader.beginObject(); - final Host current = new Host(PreferencesFactory.get().getProperty("connection.hostname.default")); + final Host current = new Host(new FTPProtocol(), PreferencesFactory.get().getProperty("connection.hostname.default")); while(reader.hasNext()) { final String name = reader.nextName(); switch(name) { diff --git a/source/ch/cyberduck/core/importer/FetchBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/FetchBookmarkCollection.java similarity index 100% rename from source/ch/cyberduck/core/importer/FetchBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/FetchBookmarkCollection.java diff --git a/source/ch/cyberduck/core/importer/FilezillaBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/FilezillaBookmarkCollection.java similarity index 93% rename from source/ch/cyberduck/core/importer/FilezillaBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/FilezillaBookmarkCollection.java index a572892822..2926eb41d4 100644 --- a/source/ch/cyberduck/core/importer/FilezillaBookmarkCollection.java +++ b/importer/src/main/java/ch/cyberduck/core/importer/FilezillaBookmarkCollection.java @@ -23,10 +23,12 @@ import ch.cyberduck.core.Local; import ch.cyberduck.core.LocalFactory; import ch.cyberduck.core.PasswordStore; import ch.cyberduck.core.Path; -import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.exception.AccessDeniedException; import ch.cyberduck.core.ftp.FTPConnectMode; +import ch.cyberduck.core.ftp.FTPProtocol; +import ch.cyberduck.core.ftp.FTPTLSProtocol; import ch.cyberduck.core.preferences.PreferencesFactory; +import ch.cyberduck.core.sftp.SFTPProtocol; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; @@ -85,7 +87,7 @@ public class FilezillaBookmarkCollection extends XmlBookmarkCollection { public void startElement(String name, Attributes attrs) { this.attrs = attrs; if(name.equals("Server")) { - current = new Host(PreferencesFactory.get().getProperty("connection.hostname.default")); + current = new Host(new FTPProtocol(), PreferencesFactory.get().getProperty("connection.hostname.default")); } } @@ -98,14 +100,14 @@ public class FilezillaBookmarkCollection extends XmlBookmarkCollection { try { switch(Integer.parseInt(elementText)) { case 0: - current.setProtocol(ProtocolFactory.FTP); + current.setProtocol(new FTPProtocol()); break; case 3: case 4: - current.setProtocol(ProtocolFactory.FTP_TLS); + current.setProtocol(new FTPTLSProtocol()); break; case 1: - current.setProtocol(ProtocolFactory.SFTP); + current.setProtocol(new SFTPProtocol()); break; } } diff --git a/source/ch/cyberduck/core/importer/FireFtpBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/FireFtpBookmarkCollection.java similarity index 94% rename from source/ch/cyberduck/core/importer/FireFtpBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/FireFtpBookmarkCollection.java index c4a9a1bace..5a32610ad5 100644 --- a/source/ch/cyberduck/core/importer/FireFtpBookmarkCollection.java +++ b/importer/src/main/java/ch/cyberduck/core/importer/FireFtpBookmarkCollection.java @@ -25,7 +25,10 @@ import ch.cyberduck.core.LocalFactory; import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.exception.AccessDeniedException; import ch.cyberduck.core.ftp.FTPConnectMode; +import ch.cyberduck.core.ftp.FTPProtocol; +import ch.cyberduck.core.ftp.FTPTLSProtocol; import ch.cyberduck.core.preferences.PreferencesFactory; +import ch.cyberduck.core.sftp.SFTPProtocol; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -117,10 +120,9 @@ public class FireFtpBookmarkCollection extends ThirdpartyBookmarkCollection { } private void read(final String entry) { - final Host current = new Host(PreferencesFactory.get().getProperty("connection.hostname.default")); + final Host current = new Host(new FTPProtocol(), PreferencesFactory.get().getProperty("connection.hostname.default")); current.getCredentials().setUsername( PreferencesFactory.get().getProperty("connection.login.anon.name")); - current.setProtocol(ProtocolFactory.FTP); for(String attribute : entry.split(", ")) { Scanner scanner = new Scanner(attribute); scanner.useDelimiter(":"); @@ -185,10 +187,10 @@ public class FireFtpBookmarkCollection extends ThirdpartyBookmarkCollection { } else if("security".equals(name)) { if("authtls".equals(value)) { - current.setProtocol(ProtocolFactory.FTP_TLS); + current.setProtocol(new FTPTLSProtocol()); } if("sftp".equals(value)) { - current.setProtocol(ProtocolFactory.SFTP); + current.setProtocol(new SFTPProtocol()); } } } diff --git a/source/ch/cyberduck/core/importer/FlashFxp3BookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/FlashFxp3BookmarkCollection.java similarity index 100% rename from source/ch/cyberduck/core/importer/FlashFxp3BookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/FlashFxp3BookmarkCollection.java diff --git a/source/ch/cyberduck/core/importer/FlashFxp4CommonBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/FlashFxp4CommonBookmarkCollection.java similarity index 100% rename from source/ch/cyberduck/core/importer/FlashFxp4CommonBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/FlashFxp4CommonBookmarkCollection.java diff --git a/source/ch/cyberduck/core/importer/FlashFxp4UserBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/FlashFxp4UserBookmarkCollection.java similarity index 100% rename from source/ch/cyberduck/core/importer/FlashFxp4UserBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/FlashFxp4UserBookmarkCollection.java diff --git a/source/ch/cyberduck/core/importer/FlashFxpBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/FlashFxpBookmarkCollection.java similarity index 96% rename from source/ch/cyberduck/core/importer/FlashFxpBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/FlashFxpBookmarkCollection.java index 7913ff587b..b857db35ae 100644 --- a/source/ch/cyberduck/core/importer/FlashFxpBookmarkCollection.java +++ b/importer/src/main/java/ch/cyberduck/core/importer/FlashFxpBookmarkCollection.java @@ -22,6 +22,7 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.exception.AccessDeniedException; +import ch.cyberduck.core.ftp.FTPProtocol; import ch.cyberduck.core.preferences.PreferencesFactory; import org.apache.commons.io.IOUtils; @@ -55,10 +56,9 @@ public abstract class FlashFxpBookmarkCollection extends ThirdpartyBookmarkColle String line; while((line = in.readLine()) != null) { if(line.startsWith("[")) { - current = new Host(PreferencesFactory.get().getProperty("connection.hostname.default")); + current = new Host(new FTPProtocol(), PreferencesFactory.get().getProperty("connection.hostname.default")); current.getCredentials().setUsername( PreferencesFactory.get().getProperty("connection.login.anon.name")); - current.setProtocol(ProtocolFactory.FTP); Pattern pattern = Pattern.compile("\\[(.*)\\]"); Matcher matcher = pattern.matcher(line); if(matcher.matches()) { diff --git a/source/ch/cyberduck/core/importer/FlowBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/FlowBookmarkCollection.java similarity index 87% rename from source/ch/cyberduck/core/importer/FlowBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/FlowBookmarkCollection.java index 05f973c306..5093a52735 100644 --- a/source/ch/cyberduck/core/importer/FlowBookmarkCollection.java +++ b/importer/src/main/java/ch/cyberduck/core/importer/FlowBookmarkCollection.java @@ -23,11 +23,16 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; import ch.cyberduck.core.LocalFactory; import ch.cyberduck.core.ProtocolFactory; +import ch.cyberduck.core.dav.DAVProtocol; +import ch.cyberduck.core.dav.DAVSSLProtocol; import ch.cyberduck.core.exception.AccessDeniedException; import ch.cyberduck.core.exception.LocalAccessDeniedException; import ch.cyberduck.core.ftp.FTPConnectMode; +import ch.cyberduck.core.ftp.FTPProtocol; import ch.cyberduck.core.preferences.PreferencesFactory; +import ch.cyberduck.core.s3.S3Protocol; import ch.cyberduck.core.serializer.impl.jna.PlistDeserializer; +import ch.cyberduck.core.sftp.SFTPProtocol; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; @@ -83,7 +88,7 @@ public class FlowBookmarkCollection extends ThirdpartyBookmarkCollection { if(null == server) { return false; } - final Host host = new Host(server); + final Host host = new Host(new FTPProtocol(), server); final String port = bookmark.stringForKey("Port"); if(StringUtils.isNotBlank(port)) { host.setPort(Integer.parseInt(port)); @@ -118,21 +123,21 @@ public class FlowBookmarkCollection extends ThirdpartyBookmarkCollection { try { switch(Integer.parseInt(protocol)) { case 0: - host.setProtocol(ProtocolFactory.FTP); + host.setProtocol(new FTPProtocol()); break; case 1: - host.setProtocol(ProtocolFactory.SFTP); + host.setProtocol(new SFTPProtocol()); break; case 3: - host.setProtocol(ProtocolFactory.S3_SSL); + host.setProtocol(new S3Protocol()); break; case 2: case 4: - if(host.getPort() == ProtocolFactory.WEBDAV_SSL.getDefaultPort()) { - host.setProtocol(ProtocolFactory.WEBDAV_SSL); + if(host.getPort() == new DAVSSLProtocol().getDefaultPort()) { + host.setProtocol(new DAVSSLProtocol()); } else { - host.setProtocol(ProtocolFactory.WEBDAV); + host.setProtocol(new DAVProtocol()); } break; } diff --git a/source/ch/cyberduck/core/importer/InterarchyBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/InterarchyBookmarkCollection.java similarity index 100% rename from source/ch/cyberduck/core/importer/InterarchyBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/InterarchyBookmarkCollection.java diff --git a/source/ch/cyberduck/core/importer/S3BrowserBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/S3BrowserBookmarkCollection.java similarity index 95% rename from source/ch/cyberduck/core/importer/S3BrowserBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/S3BrowserBookmarkCollection.java index de1744be48..e037ffb831 100644 --- a/source/ch/cyberduck/core/importer/S3BrowserBookmarkCollection.java +++ b/importer/src/main/java/ch/cyberduck/core/importer/S3BrowserBookmarkCollection.java @@ -24,6 +24,7 @@ import ch.cyberduck.core.LocalFactory; import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.exception.AccessDeniedException; import ch.cyberduck.core.preferences.PreferencesFactory; +import ch.cyberduck.core.s3.S3Protocol; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -69,7 +70,7 @@ public class S3BrowserBookmarkCollection extends ThirdpartyBookmarkCollection { String line; while((line = in.readLine()) != null) { if(line.startsWith("[account_")) { - current = new Host(ProtocolFactory.S3_SSL, ProtocolFactory.S3_SSL.getDefaultHostname(), ProtocolFactory.S3_SSL.getDefaultPort()); + current = new Host(new S3Protocol(), new S3Protocol().getDefaultHostname(), new S3Protocol().getDefaultPort()); } else if(StringUtils.isBlank(line)) { this.add(current); diff --git a/source/ch/cyberduck/core/importer/SmartFtpBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/SmartFtpBookmarkCollection.java similarity index 92% rename from source/ch/cyberduck/core/importer/SmartFtpBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/SmartFtpBookmarkCollection.java index 772e515a6a..f6b9597374 100644 --- a/source/ch/cyberduck/core/importer/SmartFtpBookmarkCollection.java +++ b/importer/src/main/java/ch/cyberduck/core/importer/SmartFtpBookmarkCollection.java @@ -27,7 +27,10 @@ import ch.cyberduck.core.date.ISO8601DateParser; import ch.cyberduck.core.date.InvalidDateException; import ch.cyberduck.core.exception.AccessDeniedException; import ch.cyberduck.core.ftp.FTPConnectMode; +import ch.cyberduck.core.ftp.FTPProtocol; +import ch.cyberduck.core.ftp.FTPTLSProtocol; import ch.cyberduck.core.preferences.PreferencesFactory; +import ch.cyberduck.core.sftp.SFTPProtocol; import org.apache.log4j.Logger; import org.xml.sax.Attributes; @@ -89,7 +92,7 @@ public class SmartFtpBookmarkCollection extends XmlBookmarkCollection { @Override public void startElement(String name, Attributes attrs) { if(name.equals("FavoriteItem")) { - current = new Host(PreferencesFactory.get().getProperty("connection.hostname.default")); + current = new Host(new FTPProtocol(), PreferencesFactory.get().getProperty("connection.hostname.default")); current.getCredentials().setUsername( PreferencesFactory.get().getProperty("connection.login.anon.name")); } @@ -105,14 +108,14 @@ public class SmartFtpBookmarkCollection extends XmlBookmarkCollection { try { switch(Integer.parseInt(elementText)) { case 1: - current.setProtocol(ProtocolFactory.FTP); + current.setProtocol(new FTPProtocol()); break; case 2: case 3: - current.setProtocol(ProtocolFactory.FTP_TLS); + current.setProtocol(new FTPTLSProtocol()); break; case 4: - current.setProtocol(ProtocolFactory.SFTP); + current.setProtocol(new SFTPProtocol()); break; } } diff --git a/source/ch/cyberduck/core/importer/ThirdpartyBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/ThirdpartyBookmarkCollection.java similarity index 100% rename from source/ch/cyberduck/core/importer/ThirdpartyBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/ThirdpartyBookmarkCollection.java diff --git a/source/ch/cyberduck/core/importer/TotalCommanderBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/TotalCommanderBookmarkCollection.java similarity index 96% rename from source/ch/cyberduck/core/importer/TotalCommanderBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/TotalCommanderBookmarkCollection.java index 77717a0c6b..5fb0968afd 100644 --- a/source/ch/cyberduck/core/importer/TotalCommanderBookmarkCollection.java +++ b/importer/src/main/java/ch/cyberduck/core/importer/TotalCommanderBookmarkCollection.java @@ -23,6 +23,7 @@ import ch.cyberduck.core.Local; import ch.cyberduck.core.LocalFactory; import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.exception.AccessDeniedException; +import ch.cyberduck.core.ftp.FTPProtocol; import ch.cyberduck.core.preferences.PreferencesFactory; import org.apache.commons.io.IOUtils; @@ -74,10 +75,9 @@ public class TotalCommanderBookmarkCollection extends ThirdpartyBookmarkCollecti if(current != null) { this.add(current); } - current = new Host(PreferencesFactory.get().getProperty("connection.hostname.default")); + current = new Host(new FTPProtocol(), PreferencesFactory.get().getProperty("connection.hostname.default")); current.getCredentials().setUsername( PreferencesFactory.get().getProperty("connection.login.anon.name")); - current.setProtocol(ProtocolFactory.FTP); Pattern pattern = Pattern.compile("\\[(.*)\\]"); Matcher matcher = pattern.matcher(line); if(matcher.matches()) { diff --git a/source/ch/cyberduck/core/importer/TransmitBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/TransmitBookmarkCollection.java similarity index 86% rename from source/ch/cyberduck/core/importer/TransmitBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/TransmitBookmarkCollection.java index 5fb7139a1f..c2b201091b 100644 --- a/source/ch/cyberduck/core/importer/TransmitBookmarkCollection.java +++ b/importer/src/main/java/ch/cyberduck/core/importer/TransmitBookmarkCollection.java @@ -29,9 +29,15 @@ import ch.cyberduck.core.Local; import ch.cyberduck.core.LocalFactory; import ch.cyberduck.core.Protocol; import ch.cyberduck.core.ProtocolFactory; +import ch.cyberduck.core.dav.DAVProtocol; +import ch.cyberduck.core.dav.DAVSSLProtocol; import ch.cyberduck.core.exception.AccessDeniedException; import ch.cyberduck.core.exception.LocalAccessDeniedException; +import ch.cyberduck.core.ftp.FTPProtocol; +import ch.cyberduck.core.ftp.FTPTLSProtocol; import ch.cyberduck.core.preferences.PreferencesFactory; +import ch.cyberduck.core.s3.S3Protocol; +import ch.cyberduck.core.sftp.SFTPProtocol; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; @@ -120,30 +126,29 @@ public class TransmitBookmarkCollection extends ThirdpartyBookmarkCollection { return; } Protocol protocol; - if("FTP".equals(protocolstring)) { - protocol = ProtocolFactory.FTP; - } - else if("SFTP".equals(protocolstring)) { - protocol = ProtocolFactory.SFTP; - } - else if("FTPTLS".equals(protocolstring)) { - protocol = ProtocolFactory.FTP_TLS; - } - else if("FTPSSL".equals(protocolstring)) { - protocol = ProtocolFactory.FTP_TLS; - } - else if("S3".equals(protocolstring)) { - protocol = ProtocolFactory.S3_SSL; - } - else if("WebDAV".equals(protocolstring)) { - protocol = ProtocolFactory.WEBDAV; - } - else if("WebDAVS".equals(protocolstring)) { - protocol = ProtocolFactory.WEBDAV_SSL; - } - else { - log.warn("Unknown protocol:" + protocolstring); - return; + switch(protocolstring) { + case "FTP": + protocol = new FTPProtocol(); + break; + case "SFTP": + protocol = new SFTPProtocol(); + break; + case "FTPTLS": + case "FTPSSL": + protocol = new FTPTLSProtocol(); + break; + case "S3": + protocol = new S3Protocol(); + break; + case "WebDAV": + protocol = new DAVProtocol(); + break; + case "WebDAVS": + protocol = new DAVSSLProtocol(); + break; + default: + log.warn(String.format("Unknown protocol %s", protocolstring)); + return; } Host bookmark = new Host(protocol, server, port); String nickname = favorite.nickname(); diff --git a/source/ch/cyberduck/core/importer/WinScpBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/WinScpBookmarkCollection.java similarity index 93% rename from source/ch/cyberduck/core/importer/WinScpBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/WinScpBookmarkCollection.java index 869a696985..4dcadcca02 100644 --- a/source/ch/cyberduck/core/importer/WinScpBookmarkCollection.java +++ b/importer/src/main/java/ch/cyberduck/core/importer/WinScpBookmarkCollection.java @@ -23,7 +23,9 @@ import ch.cyberduck.core.Local; import ch.cyberduck.core.LocalFactory; import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.exception.AccessDeniedException; +import ch.cyberduck.core.ftp.FTPProtocol; import ch.cyberduck.core.preferences.PreferencesFactory; +import ch.cyberduck.core.sftp.SFTPProtocol; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -70,10 +72,9 @@ public class WinScpBookmarkCollection extends ThirdpartyBookmarkCollection { String line; while((line = in.readLine()) != null) { if(line.startsWith("[Sessions\\")) { - current = new Host(PreferencesFactory.get().getProperty("connection.hostname.default")); + current = new Host(new SFTPProtocol(), PreferencesFactory.get().getProperty("connection.hostname.default")); current.getCredentials().setUsername( PreferencesFactory.get().getProperty("connection.login.anon.name")); - current.setProtocol(ProtocolFactory.SFTP); Pattern pattern = Pattern.compile("\\[Session\\\\(.*)\\]"); Matcher matcher = pattern.matcher(line); if(matcher.matches()) { @@ -121,10 +122,10 @@ public class WinScpBookmarkCollection extends ThirdpartyBookmarkCollection { case 0: case 1: case 2: - current.setProtocol(ProtocolFactory.SFTP); + current.setProtocol(new SFTPProtocol()); break; case 5: - current.setProtocol(ProtocolFactory.FTP); + current.setProtocol(new FTPProtocol()); break; } } diff --git a/source/ch/cyberduck/core/importer/WsFtpBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/WsFtpBookmarkCollection.java similarity index 93% rename from source/ch/cyberduck/core/importer/WsFtpBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/WsFtpBookmarkCollection.java index ba72521f92..848ae7dff6 100644 --- a/source/ch/cyberduck/core/importer/WsFtpBookmarkCollection.java +++ b/importer/src/main/java/ch/cyberduck/core/importer/WsFtpBookmarkCollection.java @@ -24,7 +24,10 @@ import ch.cyberduck.core.Local; import ch.cyberduck.core.LocalFactory; import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.exception.AccessDeniedException; +import ch.cyberduck.core.ftp.FTPProtocol; +import ch.cyberduck.core.ftp.FTPTLSProtocol; import ch.cyberduck.core.preferences.PreferencesFactory; +import ch.cyberduck.core.sftp.SFTPProtocol; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -96,10 +99,9 @@ public class WsFtpBookmarkCollection extends ThirdpartyBookmarkCollection { if(line.startsWith("[")) { this.add(current); - current = new Host(PreferencesFactory.get().getProperty("connection.hostname.default")); + current = new Host(new FTPProtocol(), PreferencesFactory.get().getProperty("connection.hostname.default")); current.getCredentials().setUsername( PreferencesFactory.get().getProperty("connection.login.anon.name")); - current.setProtocol(ProtocolFactory.FTP); Pattern pattern = Pattern.compile("\\[(.*)\\]"); Matcher matcher = pattern.matcher(line); if(matcher.matches()) { @@ -144,10 +146,10 @@ public class WsFtpBookmarkCollection extends ThirdpartyBookmarkCollection { try { switch(Integer.parseInt(value)) { case 4: - current.setProtocol(ProtocolFactory.SFTP); + current.setProtocol(new SFTPProtocol()); break; case 5: - current.setProtocol(ProtocolFactory.FTP_TLS); + current.setProtocol(new FTPTLSProtocol()); break; } } diff --git a/source/ch/cyberduck/core/importer/XmlBookmarkCollection.java b/importer/src/main/java/ch/cyberduck/core/importer/XmlBookmarkCollection.java similarity index 100% rename from source/ch/cyberduck/core/importer/XmlBookmarkCollection.java rename to importer/src/main/java/ch/cyberduck/core/importer/XmlBookmarkCollection.java diff --git a/source/ch/cyberduck/core/serializer/impl/jna/PlistDeserializer.java b/importer/src/main/java/ch/cyberduck/core/serializer/impl/jna/PlistDeserializer.java similarity index 100% rename from source/ch/cyberduck/core/serializer/impl/jna/PlistDeserializer.java rename to importer/src/main/java/ch/cyberduck/core/serializer/impl/jna/PlistDeserializer.java diff --git a/source/ch/cyberduck/core/serializer/impl/jna/PlistReader.java b/importer/src/main/java/ch/cyberduck/core/serializer/impl/jna/PlistReader.java similarity index 100% rename from source/ch/cyberduck/core/serializer/impl/jna/PlistReader.java rename to importer/src/main/java/ch/cyberduck/core/serializer/impl/jna/PlistReader.java diff --git a/source/ch/cyberduck/core/serializer/impl/jna/PlistSerializer.java b/importer/src/main/java/ch/cyberduck/core/serializer/impl/jna/PlistSerializer.java similarity index 100% rename from source/ch/cyberduck/core/serializer/impl/jna/PlistSerializer.java rename to importer/src/main/java/ch/cyberduck/core/serializer/impl/jna/PlistSerializer.java diff --git a/source/ch/cyberduck/core/serializer/impl/jna/PlistWriter.java b/importer/src/main/java/ch/cyberduck/core/serializer/impl/jna/PlistWriter.java similarity index 100% rename from source/ch/cyberduck/core/serializer/impl/jna/PlistWriter.java rename to importer/src/main/java/ch/cyberduck/core/serializer/impl/jna/PlistWriter.java diff --git a/source/ch/cyberduck/core/importer/CDTransmitImporter.h b/importer/src/main/objc/CDTransmitImporter.h similarity index 100% rename from source/ch/cyberduck/core/importer/CDTransmitImporter.h rename to importer/src/main/objc/CDTransmitImporter.h diff --git a/source/ch/cyberduck/core/importer/CDTransmitImporter.m b/importer/src/main/objc/CDTransmitImporter.m similarity index 100% rename from source/ch/cyberduck/core/importer/CDTransmitImporter.m rename to importer/src/main/objc/CDTransmitImporter.m diff --git a/test/ch/cyberduck/core/importer/Expandrive5BookmarkCollectionTest.java b/importer/src/test/java/ch/cyberduck/core/importer/Expandrive5BookmarkCollectionTest.java similarity index 94% rename from test/ch/cyberduck/core/importer/Expandrive5BookmarkCollectionTest.java rename to importer/src/test/java/ch/cyberduck/core/importer/Expandrive5BookmarkCollectionTest.java index dd7afefe37..33da51f598 100644 --- a/test/ch/cyberduck/core/importer/Expandrive5BookmarkCollectionTest.java +++ b/importer/src/test/java/ch/cyberduck/core/importer/Expandrive5BookmarkCollectionTest.java @@ -38,7 +38,7 @@ public class Expandrive5BookmarkCollectionTest { public void testParse() throws Exception { Expandrive5BookmarkCollection c = new Expandrive5BookmarkCollection(); assertEquals(0, c.size()); - c.parse(new Local("test/ch/cyberduck/core/importer/expandrive5.favorites.js")); + c.parse(new Local("src/test/resources/expandrive5.favorites.js")); assertEquals(2, c.size()); assertEquals("Imported from ExpanDrive 5", c.get(0).getComment()); assertEquals("c", c.get(0).getCredentials().getUsername()); diff --git a/test/ch/cyberduck/core/importer/FetchBookmarkCollectionTest.java b/importer/src/test/java/ch/cyberduck/core/importer/FetchBookmarkCollectionTest.java similarity index 65% rename from test/ch/cyberduck/core/importer/FetchBookmarkCollectionTest.java rename to importer/src/test/java/ch/cyberduck/core/importer/FetchBookmarkCollectionTest.java index 2aa1d5863a..d7b6769051 100644 --- a/test/ch/cyberduck/core/importer/FetchBookmarkCollectionTest.java +++ b/importer/src/test/java/ch/cyberduck/core/importer/FetchBookmarkCollectionTest.java @@ -1,10 +1,9 @@ package ch.cyberduck.core.importer; -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Local; +import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.exception.AccessDeniedException; -import ch.cyberduck.core.test.Depends; +import ch.cyberduck.core.ftp.FTPProtocol; import org.junit.Test; @@ -13,8 +12,7 @@ import static org.junit.Assert.assertEquals; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) -public class FetchBookmarkCollectionTest extends AbstractTestCase { +public class FetchBookmarkCollectionTest { @Test(expected = AccessDeniedException.class) public void testParseNotFound() throws Exception { @@ -23,9 +21,10 @@ public class FetchBookmarkCollectionTest extends AbstractTestCase { @Test public void testGetFile() throws Exception { + ProtocolFactory.register(new FTPProtocol()); FetchBookmarkCollection c = new FetchBookmarkCollection(); assertEquals(0, c.size()); - c.parse(new Local("test/ch/cyberduck/core/importer/com.fetchsoftworks.Fetch.Shortcuts.plist")); + c.parse(new Local("src/test/resources/com.fetchsoftworks.Fetch.Shortcuts.plist")); assertEquals(2, c.size()); } } diff --git a/test/ch/cyberduck/core/importer/FilezillaBookmarkCollectionTest.java b/importer/src/test/java/ch/cyberduck/core/importer/FilezillaBookmarkCollectionTest.java similarity index 87% rename from test/ch/cyberduck/core/importer/FilezillaBookmarkCollectionTest.java rename to importer/src/test/java/ch/cyberduck/core/importer/FilezillaBookmarkCollectionTest.java index 361ce5d9de..15287be70d 100644 --- a/test/ch/cyberduck/core/importer/FilezillaBookmarkCollectionTest.java +++ b/importer/src/test/java/ch/cyberduck/core/importer/FilezillaBookmarkCollectionTest.java @@ -15,13 +15,13 @@ import static org.junit.Assert.*; /** * @version $Id$ */ -public class FilezillaBookmarkCollectionTest extends AbstractTestCase { +public class FilezillaBookmarkCollectionTest { @Test public void testParse() throws Exception { FilezillaBookmarkCollection c = new FilezillaBookmarkCollection(); assertEquals(0, c.size()); - c.parse(new Local("test/ch/cyberduck/core/importer/org.filezilla-project.sitemanager.xml")); + c.parse(new Local("src/test/resources/org.filezilla-project.sitemanager.xml")); assertEquals(2, c.size()); } @@ -51,7 +51,7 @@ public class FilezillaBookmarkCollectionTest extends AbstractTestCase { } }); assertEquals(0, c.size()); - c.parse(new Local("test/ch/cyberduck/core/importer/org.filezilla-project.sitemanager-2.xml")); + c.parse(new Local("src/test/resources/org.filezilla-project.sitemanager-2.xml")); assertEquals(1, c.size()); final Host b = c.iterator().next(); assertTrue(saved.get()); diff --git a/test/ch/cyberduck/core/importer/FireFtpBookmarkCollectionTest.java b/importer/src/test/java/ch/cyberduck/core/importer/FireFtpBookmarkCollectionTest.java similarity index 80% rename from test/ch/cyberduck/core/importer/FireFtpBookmarkCollectionTest.java rename to importer/src/test/java/ch/cyberduck/core/importer/FireFtpBookmarkCollectionTest.java index b6abca4df3..2832ee403b 100644 --- a/test/ch/cyberduck/core/importer/FireFtpBookmarkCollectionTest.java +++ b/importer/src/test/java/ch/cyberduck/core/importer/FireFtpBookmarkCollectionTest.java @@ -11,7 +11,7 @@ import static org.junit.Assert.assertEquals; /** * @version $Id$ */ -public class FireFtpBookmarkCollectionTest extends AbstractTestCase { +public class FireFtpBookmarkCollectionTest { @Test(expected = AccessDeniedException.class) public void testParseNotFound() throws Exception { @@ -22,7 +22,7 @@ public class FireFtpBookmarkCollectionTest extends AbstractTestCase { public void testParse() throws Exception { FireFtpBookmarkCollection c = new FireFtpBookmarkCollection(); assertEquals(0, c.size()); - c.parse(new Local("test/ch/cyberduck/core/importer/org.mozdev.fireftp")); + c.parse(new Local("src/test/resources/org.mozdev.fireftp")); assertEquals(1, c.size()); } @@ -31,7 +31,7 @@ public class FireFtpBookmarkCollectionTest extends AbstractTestCase { FireFtpBookmarkCollection c = new FireFtpBookmarkCollection() { @Override public Local getFile() { - return new Local("test/ch/cyberduck/core/importer/org.mozdev.fireftp"); + return new Local("src/test/resources/org.mozdev.fireftp"); } }; assertEquals(0, c.size()); diff --git a/test/ch/cyberduck/core/importer/FlashFxp4UserBookmarkCollectionTest.java b/importer/src/test/java/ch/cyberduck/core/importer/FlashFxp4UserBookmarkCollectionTest.java similarity index 83% rename from test/ch/cyberduck/core/importer/FlashFxp4UserBookmarkCollectionTest.java rename to importer/src/test/java/ch/cyberduck/core/importer/FlashFxp4UserBookmarkCollectionTest.java index 10590fec06..0e4a50e8e9 100644 --- a/test/ch/cyberduck/core/importer/FlashFxp4UserBookmarkCollectionTest.java +++ b/importer/src/test/java/ch/cyberduck/core/importer/FlashFxp4UserBookmarkCollectionTest.java @@ -11,7 +11,7 @@ import static org.junit.Assert.assertEquals; /** * @version $Id$ */ -public class FlashFxp4UserBookmarkCollectionTest extends AbstractTestCase { +public class FlashFxp4UserBookmarkCollectionTest { @Test(expected = AccessDeniedException.class) public void testParseNotFound() throws Exception { @@ -22,7 +22,7 @@ public class FlashFxp4UserBookmarkCollectionTest extends AbstractTestCase { public void testParse() throws Exception { FlashFxpBookmarkCollection c = new FlashFxp4UserBookmarkCollection(); assertEquals(0, c.size()); - c.parse(new Local("test/ch/cyberduck/core/importer/FlashFXP-Sites.dat")); + c.parse(new Local("src/test/resources/FlashFXP-Sites.dat")); assertEquals(4, c.size()); assertEquals("ftp.intel.com", c.get(1).getHostname()); assertEquals("ftp.sierra.com", c.get(2).getHostname()); diff --git a/test/ch/cyberduck/core/importer/FlowBookmarkCollectionTest.java b/importer/src/test/java/ch/cyberduck/core/importer/FlowBookmarkCollectionTest.java similarity index 66% rename from test/ch/cyberduck/core/importer/FlowBookmarkCollectionTest.java rename to importer/src/test/java/ch/cyberduck/core/importer/FlowBookmarkCollectionTest.java index d301f93050..06009631cc 100644 --- a/test/ch/cyberduck/core/importer/FlowBookmarkCollectionTest.java +++ b/importer/src/test/java/ch/cyberduck/core/importer/FlowBookmarkCollectionTest.java @@ -1,10 +1,7 @@ package ch.cyberduck.core.importer; -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Local; import ch.cyberduck.core.exception.AccessDeniedException; -import ch.cyberduck.core.test.Depends; import org.junit.Test; @@ -13,8 +10,7 @@ import static org.junit.Assert.assertEquals; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) -public class FlowBookmarkCollectionTest extends AbstractTestCase { +public class FlowBookmarkCollectionTest { @Test(expected = AccessDeniedException.class) public void testParseNotFound() throws Exception { @@ -25,7 +21,7 @@ public class FlowBookmarkCollectionTest extends AbstractTestCase { public void testParse() throws AccessDeniedException { FlowBookmarkCollection c = new FlowBookmarkCollection(); assertEquals(0, c.size()); - c.parse(new Local("test/ch/cyberduck/core/importer/com.fivedetails.Bookmarks.plist")); + c.parse(new Local("src/test/resources/com.fivedetails.Bookmarks.plist")); assertEquals(3, c.size()); } } \ No newline at end of file diff --git a/test/ch/cyberduck/core/importer/SmartFtpBookmarkCollectionTest.java b/importer/src/test/java/ch/cyberduck/core/importer/SmartFtpBookmarkCollectionTest.java similarity index 100% rename from test/ch/cyberduck/core/importer/SmartFtpBookmarkCollectionTest.java rename to importer/src/test/java/ch/cyberduck/core/importer/SmartFtpBookmarkCollectionTest.java diff --git a/test/ch/cyberduck/core/importer/ThirdpartyBookmarkCollectionTest.java b/importer/src/test/java/ch/cyberduck/core/importer/ThirdpartyBookmarkCollectionTest.java similarity index 87% rename from test/ch/cyberduck/core/importer/ThirdpartyBookmarkCollectionTest.java rename to importer/src/test/java/ch/cyberduck/core/importer/ThirdpartyBookmarkCollectionTest.java index d38589f498..e0ab1ee44a 100644 --- a/test/ch/cyberduck/core/importer/ThirdpartyBookmarkCollectionTest.java +++ b/importer/src/test/java/ch/cyberduck/core/importer/ThirdpartyBookmarkCollectionTest.java @@ -1,9 +1,9 @@ package ch.cyberduck.core.importer; import ch.cyberduck.core.AbstractHostCollection; -import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.local.LocalTouchFactory; import ch.cyberduck.core.preferences.PreferencesFactory; @@ -20,7 +20,7 @@ import static org.junit.Assert.assertTrue; /** * @version $Id$ */ -public class ThirdpartyBookmarkCollectionTest extends AbstractTestCase { +public class ThirdpartyBookmarkCollectionTest { @Test public void testLoad() throws Exception { @@ -36,7 +36,7 @@ public class ThirdpartyBookmarkCollectionTest extends AbstractTestCase { @Override protected void parse(final Local file) { - this.add(new Host("h")); + this.add(new Host(new TestProtocol())); r.set(true); } @@ -47,7 +47,7 @@ public class ThirdpartyBookmarkCollectionTest extends AbstractTestCase { }; c.load(); assertTrue(r.get()); - assertTrue(c.iterator().next().compareTo(new Host("h")) == 0); + assertTrue(c.iterator().next().compareTo(new Host(new TestProtocol())) == 0); r.set(false); PreferencesFactory.get().setProperty(c.getConfiguration(), true); c.load(); @@ -62,7 +62,7 @@ public class ThirdpartyBookmarkCollectionTest extends AbstractTestCase { return "b"; } }; - bookmarks.add(new Host("h")); + bookmarks.add(new Host(new TestProtocol())); c.filter(bookmarks); assertTrue(c.isEmpty()); } diff --git a/test/ch/cyberduck/core/importer/TotalCommanderBookmarkCollectionTest.java b/importer/src/test/java/ch/cyberduck/core/importer/TotalCommanderBookmarkCollectionTest.java similarity index 89% rename from test/ch/cyberduck/core/importer/TotalCommanderBookmarkCollectionTest.java rename to importer/src/test/java/ch/cyberduck/core/importer/TotalCommanderBookmarkCollectionTest.java index 82cbc86173..e825090034 100644 --- a/test/ch/cyberduck/core/importer/TotalCommanderBookmarkCollectionTest.java +++ b/importer/src/test/java/ch/cyberduck/core/importer/TotalCommanderBookmarkCollectionTest.java @@ -18,7 +18,6 @@ package ch.cyberduck.core.importer; * feedback@cyberduck.io */ -import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Local; import ch.cyberduck.core.exception.AccessDeniedException; @@ -26,7 +25,7 @@ import org.junit.Test; import static org.junit.Assert.assertEquals; -public class TotalCommanderBookmarkCollectionTest extends AbstractTestCase{ +public class TotalCommanderBookmarkCollectionTest { @Test(expected = AccessDeniedException.class) public void testParseNotFound() throws Exception { @@ -37,7 +36,7 @@ public class TotalCommanderBookmarkCollectionTest extends AbstractTestCase{ public void testParse() throws Exception { TotalCommanderBookmarkCollection c = new TotalCommanderBookmarkCollection(); assertEquals(0, c.size()); - c.parse(new Local("test/ch/cyberduck/core/importer/wcx_ftp.ini")); + c.parse(new Local("src/test/resources/wcx_ftp.ini")); assertEquals(2, c.size()); assertEquals("sudo.ch", c.get(0).getHostname()); assertEquals("fo|cyberduck.io session bookmark", c.get(1).getNickname()); diff --git a/test/ch/cyberduck/core/importer/TransmitBookmarkCollectionTest.java b/importer/src/test/java/ch/cyberduck/core/importer/TransmitBookmarkCollectionTest.java similarity index 67% rename from test/ch/cyberduck/core/importer/TransmitBookmarkCollectionTest.java rename to importer/src/test/java/ch/cyberduck/core/importer/TransmitBookmarkCollectionTest.java index 2186567dfa..352c0b72d1 100644 --- a/test/ch/cyberduck/core/importer/TransmitBookmarkCollectionTest.java +++ b/importer/src/test/java/ch/cyberduck/core/importer/TransmitBookmarkCollectionTest.java @@ -1,10 +1,7 @@ package ch.cyberduck.core.importer; -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Local; import ch.cyberduck.core.exception.AccessDeniedException; -import ch.cyberduck.core.test.Depends; import org.junit.Ignore; import org.junit.Test; @@ -14,8 +11,7 @@ import static org.junit.Assert.assertEquals; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) -public class TransmitBookmarkCollectionTest extends AbstractTestCase { +public class TransmitBookmarkCollectionTest { @Test(expected = AccessDeniedException.class) public void testParseNotFound() throws Exception { @@ -27,7 +23,7 @@ public class TransmitBookmarkCollectionTest extends AbstractTestCase { public void testParse() throws Exception { TransmitBookmarkCollection c = new TransmitBookmarkCollection(); assertEquals(0, c.size()); - c.parse(new Local("test/ch/cyberduck/core/importer/com.panic.Transmit.plist")); + c.parse(new Local("src/test/resources/com.panic.Transmit.plist")); assertEquals(1, c.size()); } } \ No newline at end of file diff --git a/test/ch/cyberduck/core/importer/WinScpBookmarkCollectionTest.java b/importer/src/test/java/ch/cyberduck/core/importer/WinScpBookmarkCollectionTest.java similarity index 94% rename from test/ch/cyberduck/core/importer/WinScpBookmarkCollectionTest.java rename to importer/src/test/java/ch/cyberduck/core/importer/WinScpBookmarkCollectionTest.java index 0e815e4d29..7b06a17e9d 100644 --- a/test/ch/cyberduck/core/importer/WinScpBookmarkCollectionTest.java +++ b/importer/src/test/java/ch/cyberduck/core/importer/WinScpBookmarkCollectionTest.java @@ -26,7 +26,7 @@ import org.junit.Test; /** * @version $Id$ */ -public class WinScpBookmarkCollectionTest extends AbstractTestCase { +public class WinScpBookmarkCollectionTest { @Test(expected = AccessDeniedException.class) public void testParse() throws Exception { diff --git a/test/ch/cyberduck/core/importer/WsFtpBookmarkCollectionTest.java b/importer/src/test/java/ch/cyberduck/core/importer/WsFtpBookmarkCollectionTest.java similarity index 100% rename from test/ch/cyberduck/core/importer/WsFtpBookmarkCollectionTest.java rename to importer/src/test/java/ch/cyberduck/core/importer/WsFtpBookmarkCollectionTest.java diff --git a/test/ch/cyberduck/core/importer/FlashFXP-Sites.dat b/importer/src/test/resources/FlashFXP-Sites.dat similarity index 100% rename from test/ch/cyberduck/core/importer/FlashFXP-Sites.dat rename to importer/src/test/resources/FlashFXP-Sites.dat diff --git a/test/ch/cyberduck/core/importer/com.fetchsoftworks.Fetch.Shortcuts.plist b/importer/src/test/resources/com.fetchsoftworks.Fetch.Shortcuts.plist similarity index 100% rename from test/ch/cyberduck/core/importer/com.fetchsoftworks.Fetch.Shortcuts.plist rename to importer/src/test/resources/com.fetchsoftworks.Fetch.Shortcuts.plist diff --git a/test/ch/cyberduck/core/importer/com.fivedetails.Bookmarks.plist b/importer/src/test/resources/com.fivedetails.Bookmarks.plist similarity index 100% rename from test/ch/cyberduck/core/importer/com.fivedetails.Bookmarks.plist rename to importer/src/test/resources/com.fivedetails.Bookmarks.plist diff --git a/test/ch/cyberduck/core/importer/com.panic.Transmit.plist b/importer/src/test/resources/com.panic.Transmit.plist similarity index 100% rename from test/ch/cyberduck/core/importer/com.panic.Transmit.plist rename to importer/src/test/resources/com.panic.Transmit.plist diff --git a/test/ch/cyberduck/core/importer/expandrive5.favorites.js b/importer/src/test/resources/expandrive5.favorites.js similarity index 100% rename from test/ch/cyberduck/core/importer/expandrive5.favorites.js rename to importer/src/test/resources/expandrive5.favorites.js diff --git a/test/ch/cyberduck/core/importer/org.filezilla-project.sitemanager-2.xml b/importer/src/test/resources/org.filezilla-project.sitemanager-2.xml similarity index 100% rename from test/ch/cyberduck/core/importer/org.filezilla-project.sitemanager-2.xml rename to importer/src/test/resources/org.filezilla-project.sitemanager-2.xml diff --git a/test/ch/cyberduck/core/importer/org.filezilla-project.sitemanager.xml b/importer/src/test/resources/org.filezilla-project.sitemanager.xml similarity index 100% rename from test/ch/cyberduck/core/importer/org.filezilla-project.sitemanager.xml rename to importer/src/test/resources/org.filezilla-project.sitemanager.xml diff --git a/test/ch/cyberduck/core/importer/org.mozdev.fireftp/fjpxtvk8.default/fireFTPsites.dat b/importer/src/test/resources/org.mozdev.fireftp/fjpxtvk8.default/fireFTPsites.dat similarity index 100% rename from test/ch/cyberduck/core/importer/org.mozdev.fireftp/fjpxtvk8.default/fireFTPsites.dat rename to importer/src/test/resources/org.mozdev.fireftp/fjpxtvk8.default/fireFTPsites.dat diff --git a/test/ch/cyberduck/core/importer/wcx_ftp.ini b/importer/src/test/resources/wcx_ftp.ini similarity index 94% rename from test/ch/cyberduck/core/importer/wcx_ftp.ini rename to importer/src/test/resources/wcx_ftp.ini index c452501c27..cb7e62442e 100755 --- a/test/ch/cyberduck/core/importer/wcx_ftp.ini +++ b/importer/src/test/resources/wcx_ftp.ini @@ -1,18 +1,18 @@ -[connections] -1=sudo.ch -default=fo|cyberduck.io session bookmark -2=fo|cyberduck.io session bookmark -[sudo.ch] -host=sudo.ch -username=dkocher -pasvmode=0 -MLSD=-1 -[default] -pasvmode=1 -[fo|cyberduck.io session bookmark] -host=cyberduck.io -username= -pasvmode=1 -MLSD=1 -Encoding=1252 +[connections] +1=sudo.ch +default=fo|cyberduck.io session bookmark +2=fo|cyberduck.io session bookmark +[sudo.ch] +host=sudo.ch +username=dkocher +pasvmode=0 +MLSD=-1 +[default] +pasvmode=1 +[fo|cyberduck.io session bookmark] +host=cyberduck.io +username= +pasvmode=1 +MLSD=1 +Encoding=1252 directory=/remote \ No newline at end of file diff --git a/irods/pom.xml b/irods/pom.xml new file mode 100644 index 0000000000..1d37b77c99 --- /dev/null +++ b/irods/pom.xml @@ -0,0 +1,48 @@ + + 4.0.0 + + ch.cyberduck + parent + 4.8.0-SNAPSHOT + + irods + jar + + + + ch.cyberduck + core + ${project.version} + + + ch.cyberduck + test + pom + test + ${project.version} + + + org.irods.jargon + jargon-core + 4.0.2.4-RELEASE + + + + + + DICE + dice.repository + https://raw.github.com/DICE-UNC/DICE-Maven/master/releases + + true + + + true + always + warn + + + + + diff --git a/source/ch/cyberduck/core/irods/DefaultTransferOptionsConfigurer.java b/irods/src/main/java/ch/cyberduck/core/irods/DefaultTransferOptionsConfigurer.java similarity index 100% rename from source/ch/cyberduck/core/irods/DefaultTransferOptionsConfigurer.java rename to irods/src/main/java/ch/cyberduck/core/irods/DefaultTransferOptionsConfigurer.java diff --git a/source/ch/cyberduck/core/irods/DefaultTransferStatusCallbackListener.java b/irods/src/main/java/ch/cyberduck/core/irods/DefaultTransferStatusCallbackListener.java similarity index 100% rename from source/ch/cyberduck/core/irods/DefaultTransferStatusCallbackListener.java rename to irods/src/main/java/ch/cyberduck/core/irods/DefaultTransferStatusCallbackListener.java diff --git a/source/ch/cyberduck/core/irods/IRODSCopyFeature.java b/irods/src/main/java/ch/cyberduck/core/irods/IRODSCopyFeature.java similarity index 100% rename from source/ch/cyberduck/core/irods/IRODSCopyFeature.java rename to irods/src/main/java/ch/cyberduck/core/irods/IRODSCopyFeature.java diff --git a/source/ch/cyberduck/core/irods/IRODSDeleteFeature.java b/irods/src/main/java/ch/cyberduck/core/irods/IRODSDeleteFeature.java similarity index 100% rename from source/ch/cyberduck/core/irods/IRODSDeleteFeature.java rename to irods/src/main/java/ch/cyberduck/core/irods/IRODSDeleteFeature.java diff --git a/source/ch/cyberduck/core/irods/IRODSDirectoryFeature.java b/irods/src/main/java/ch/cyberduck/core/irods/IRODSDirectoryFeature.java similarity index 100% rename from source/ch/cyberduck/core/irods/IRODSDirectoryFeature.java rename to irods/src/main/java/ch/cyberduck/core/irods/IRODSDirectoryFeature.java diff --git a/source/ch/cyberduck/core/irods/IRODSDownloadFeature.java b/irods/src/main/java/ch/cyberduck/core/irods/IRODSDownloadFeature.java similarity index 100% rename from source/ch/cyberduck/core/irods/IRODSDownloadFeature.java rename to irods/src/main/java/ch/cyberduck/core/irods/IRODSDownloadFeature.java diff --git a/source/ch/cyberduck/core/irods/IRODSExceptionMappingService.java b/irods/src/main/java/ch/cyberduck/core/irods/IRODSExceptionMappingService.java similarity index 100% rename from source/ch/cyberduck/core/irods/IRODSExceptionMappingService.java rename to irods/src/main/java/ch/cyberduck/core/irods/IRODSExceptionMappingService.java diff --git a/source/ch/cyberduck/core/irods/IRODSFindFeature.java b/irods/src/main/java/ch/cyberduck/core/irods/IRODSFindFeature.java similarity index 100% rename from source/ch/cyberduck/core/irods/IRODSFindFeature.java rename to irods/src/main/java/ch/cyberduck/core/irods/IRODSFindFeature.java diff --git a/source/ch/cyberduck/core/irods/IRODSListService.java b/irods/src/main/java/ch/cyberduck/core/irods/IRODSListService.java similarity index 100% rename from source/ch/cyberduck/core/irods/IRODSListService.java rename to irods/src/main/java/ch/cyberduck/core/irods/IRODSListService.java diff --git a/source/ch/cyberduck/core/irods/IRODSMoveFeature.java b/irods/src/main/java/ch/cyberduck/core/irods/IRODSMoveFeature.java similarity index 100% rename from source/ch/cyberduck/core/irods/IRODSMoveFeature.java rename to irods/src/main/java/ch/cyberduck/core/irods/IRODSMoveFeature.java diff --git a/source/ch/cyberduck/core/irods/IRODSProtocol.java b/irods/src/main/java/ch/cyberduck/core/irods/IRODSProtocol.java similarity index 100% rename from source/ch/cyberduck/core/irods/IRODSProtocol.java rename to irods/src/main/java/ch/cyberduck/core/irods/IRODSProtocol.java diff --git a/source/ch/cyberduck/core/irods/IRODSReadFeature.java b/irods/src/main/java/ch/cyberduck/core/irods/IRODSReadFeature.java similarity index 100% rename from source/ch/cyberduck/core/irods/IRODSReadFeature.java rename to irods/src/main/java/ch/cyberduck/core/irods/IRODSReadFeature.java diff --git a/source/ch/cyberduck/core/irods/IRODSSession.java b/irods/src/main/java/ch/cyberduck/core/irods/IRODSSession.java similarity index 100% rename from source/ch/cyberduck/core/irods/IRODSSession.java rename to irods/src/main/java/ch/cyberduck/core/irods/IRODSSession.java diff --git a/source/ch/cyberduck/core/irods/IRODSTouchFeature.java b/irods/src/main/java/ch/cyberduck/core/irods/IRODSTouchFeature.java similarity index 100% rename from source/ch/cyberduck/core/irods/IRODSTouchFeature.java rename to irods/src/main/java/ch/cyberduck/core/irods/IRODSTouchFeature.java diff --git a/source/ch/cyberduck/core/irods/IRODSUploadFeature.java b/irods/src/main/java/ch/cyberduck/core/irods/IRODSUploadFeature.java similarity index 100% rename from source/ch/cyberduck/core/irods/IRODSUploadFeature.java rename to irods/src/main/java/ch/cyberduck/core/irods/IRODSUploadFeature.java diff --git a/source/ch/cyberduck/core/irods/IRODSWriteFeature.java b/irods/src/main/java/ch/cyberduck/core/irods/IRODSWriteFeature.java similarity index 100% rename from source/ch/cyberduck/core/irods/IRODSWriteFeature.java rename to irods/src/main/java/ch/cyberduck/core/irods/IRODSWriteFeature.java diff --git a/test/ch/cyberduck/core/irods/IRODSCopyFeatureTest.java b/irods/src/test/java/ch/cyberduck/core/irods/IRODSCopyFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/irods/IRODSCopyFeatureTest.java rename to irods/src/test/java/ch/cyberduck/core/irods/IRODSCopyFeatureTest.java diff --git a/test/ch/cyberduck/core/irods/IRODSDeleteFeatureTest.java b/irods/src/test/java/ch/cyberduck/core/irods/IRODSDeleteFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/irods/IRODSDeleteFeatureTest.java rename to irods/src/test/java/ch/cyberduck/core/irods/IRODSDeleteFeatureTest.java diff --git a/test/ch/cyberduck/core/irods/IRODSDirectoryFeatureTest.java b/irods/src/test/java/ch/cyberduck/core/irods/IRODSDirectoryFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/irods/IRODSDirectoryFeatureTest.java rename to irods/src/test/java/ch/cyberduck/core/irods/IRODSDirectoryFeatureTest.java diff --git a/test/ch/cyberduck/core/irods/IRODSExceptionMappingServiceTest.java b/irods/src/test/java/ch/cyberduck/core/irods/IRODSExceptionMappingServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/irods/IRODSExceptionMappingServiceTest.java rename to irods/src/test/java/ch/cyberduck/core/irods/IRODSExceptionMappingServiceTest.java diff --git a/test/ch/cyberduck/core/irods/IRODSFindFeatureTest.java b/irods/src/test/java/ch/cyberduck/core/irods/IRODSFindFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/irods/IRODSFindFeatureTest.java rename to irods/src/test/java/ch/cyberduck/core/irods/IRODSFindFeatureTest.java diff --git a/test/ch/cyberduck/core/irods/IRODSListServiceTest.java b/irods/src/test/java/ch/cyberduck/core/irods/IRODSListServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/irods/IRODSListServiceTest.java rename to irods/src/test/java/ch/cyberduck/core/irods/IRODSListServiceTest.java diff --git a/test/ch/cyberduck/core/irods/IRODSMoveFeatureTest.java b/irods/src/test/java/ch/cyberduck/core/irods/IRODSMoveFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/irods/IRODSMoveFeatureTest.java rename to irods/src/test/java/ch/cyberduck/core/irods/IRODSMoveFeatureTest.java diff --git a/test/ch/cyberduck/core/irods/IRODSReadFeatureTest.java b/irods/src/test/java/ch/cyberduck/core/irods/IRODSReadFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/irods/IRODSReadFeatureTest.java rename to irods/src/test/java/ch/cyberduck/core/irods/IRODSReadFeatureTest.java diff --git a/test/ch/cyberduck/core/irods/IRODSSessionTest.java b/irods/src/test/java/ch/cyberduck/core/irods/IRODSSessionTest.java similarity index 100% rename from test/ch/cyberduck/core/irods/IRODSSessionTest.java rename to irods/src/test/java/ch/cyberduck/core/irods/IRODSSessionTest.java diff --git a/test/ch/cyberduck/core/irods/IRODSTouchFeatureTest.java b/irods/src/test/java/ch/cyberduck/core/irods/IRODSTouchFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/irods/IRODSTouchFeatureTest.java rename to irods/src/test/java/ch/cyberduck/core/irods/IRODSTouchFeatureTest.java diff --git a/test/ch/cyberduck/core/irods/IRODSUploadFeatureTest.java b/irods/src/test/java/ch/cyberduck/core/irods/IRODSUploadFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/irods/IRODSUploadFeatureTest.java rename to irods/src/test/java/ch/cyberduck/core/irods/IRODSUploadFeatureTest.java diff --git a/test/ch/cyberduck/core/irods/IRODSWriteFeatureTest.java b/irods/src/test/java/ch/cyberduck/core/irods/IRODSWriteFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/irods/IRODSWriteFeatureTest.java rename to irods/src/test/java/ch/cyberduck/core/irods/IRODSWriteFeatureTest.java diff --git a/openstack/pom.xml b/openstack/pom.xml new file mode 100644 index 0000000000..4b4f813e89 --- /dev/null +++ b/openstack/pom.xml @@ -0,0 +1,49 @@ + + + + 4.0.0 + + ch.cyberduck + parent + 4.8.0-SNAPSHOT + + openstack + jar + + + + ch.cyberduck + core + ${project.version} + + + ch.cyberduck + test + pom + test + ${project.version} + + + ch.iterate.openstack + swift + 2.5.1 + + + + + diff --git a/source/ch/cyberduck/core/openstack/SwiftAttributesFeature.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftAttributesFeature.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftAttributesFeature.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftAttributesFeature.java diff --git a/source/ch/cyberduck/core/openstack/SwiftAuthenticationService.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftAuthenticationService.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftAuthenticationService.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftAuthenticationService.java diff --git a/source/ch/cyberduck/core/openstack/SwiftContainerListService.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftContainerListService.java similarity index 80% rename from source/ch/cyberduck/core/openstack/SwiftContainerListService.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftContainerListService.java index aef0cbd604..85b10f9aad 100644 --- a/source/ch/cyberduck/core/openstack/SwiftContainerListService.java +++ b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftContainerListService.java @@ -63,17 +63,21 @@ public class SwiftContainerListService implements RootListService { private boolean size; + private SwiftRegionService regionService; private SwiftLocationFeature.SwiftRegion region; - public SwiftContainerListService(final SwiftSession session, final SwiftLocationFeature.SwiftRegion region) { - this(session, region, + public SwiftContainerListService(final SwiftSession session, final SwiftRegionService regionService, final SwiftLocationFeature.SwiftRegion region) { + this(session, regionService, region, PreferencesFactory.get().getBoolean("openstack.cdn.preload"), PreferencesFactory.get().getBoolean("openstack.container.size.preload")); } - public SwiftContainerListService(final SwiftSession session, final SwiftLocationFeature.SwiftRegion region, + public SwiftContainerListService(final SwiftSession session, + final SwiftRegionService regionService, + final SwiftLocationFeature.SwiftRegion region, final boolean cdn, final boolean size) { this.session = session; + this.regionService = regionService; this.region = region; this.cdn = cdn; this.size = size; @@ -112,26 +116,24 @@ public class SwiftContainerListService implements RootListService { } while(!chunk.isEmpty()); if(cdn) { - final DistributionConfiguration feature = session.getFeature(DistributionConfiguration.class); - if(feature != null) { - for(final Path container : containers) { - pool.execute(new Runnable() { - @Override - public void run() { - for(Distribution.Method method : feature.getMethods(container)) { - try { - final Distribution distribution = feature.read(container, method, new DisabledLoginCallback()); - if(log.isInfoEnabled()) { - log.info(String.format("Cached distribution %s", distribution)); - } - } - catch(BackgroundException e) { - log.warn(String.format("Failure caching CDN configuration for container %s %s", container, e.getMessage())); + final DistributionConfiguration feature = new SwiftDistributionConfiguration(session, regionService); + for(final Path container : containers) { + pool.execute(new Runnable() { + @Override + public void run() { + for(Distribution.Method method : feature.getMethods(container)) { + try { + final Distribution distribution = feature.read(container, method, new DisabledLoginCallback()); + if(log.isInfoEnabled()) { + log.info(String.format("Cached distribution %s", distribution)); } } + catch(BackgroundException e) { + log.warn(String.format("Failure caching CDN configuration for container %s %s", container, e.getMessage())); + } } - }); - } + } + }); } } if(size) { diff --git a/source/ch/cyberduck/core/openstack/SwiftCopyFeature.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftCopyFeature.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftCopyFeature.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftCopyFeature.java diff --git a/source/ch/cyberduck/core/openstack/SwiftDeleteFeature.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftDeleteFeature.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftDeleteFeature.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftDeleteFeature.java diff --git a/source/ch/cyberduck/core/openstack/SwiftDirectoryFeature.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftDirectoryFeature.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftDirectoryFeature.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftDirectoryFeature.java diff --git a/source/ch/cyberduck/core/openstack/SwiftDistributionConfiguration.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftDistributionConfiguration.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftDistributionConfiguration.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftDistributionConfiguration.java diff --git a/source/ch/cyberduck/core/openstack/SwiftDistributionPurgeFeature.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftDistributionPurgeFeature.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftDistributionPurgeFeature.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftDistributionPurgeFeature.java diff --git a/source/ch/cyberduck/core/openstack/SwiftExceptionMappingService.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftExceptionMappingService.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftExceptionMappingService.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftExceptionMappingService.java diff --git a/source/ch/cyberduck/core/openstack/SwiftFindFeature.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftFindFeature.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftFindFeature.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftFindFeature.java diff --git a/source/ch/cyberduck/core/openstack/SwiftHomeFinderService.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftHomeFinderService.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftHomeFinderService.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftHomeFinderService.java diff --git a/source/ch/cyberduck/core/openstack/SwiftHpUrlProvider.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftHpUrlProvider.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftHpUrlProvider.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftHpUrlProvider.java diff --git a/source/ch/cyberduck/core/openstack/SwiftLargeObjectUploadFeature.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftLargeObjectUploadFeature.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftLargeObjectUploadFeature.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftLargeObjectUploadFeature.java diff --git a/source/ch/cyberduck/core/openstack/SwiftLocationFeature.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftLocationFeature.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftLocationFeature.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftLocationFeature.java diff --git a/source/ch/cyberduck/core/openstack/SwiftMetadataFeature.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftMetadataFeature.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftMetadataFeature.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftMetadataFeature.java diff --git a/source/ch/cyberduck/core/openstack/SwiftMoveFeature.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftMoveFeature.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftMoveFeature.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftMoveFeature.java diff --git a/source/ch/cyberduck/core/openstack/SwiftMultipleDeleteFeature.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftMultipleDeleteFeature.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftMultipleDeleteFeature.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftMultipleDeleteFeature.java diff --git a/source/ch/cyberduck/core/openstack/SwiftObjectListService.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftObjectListService.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftObjectListService.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftObjectListService.java diff --git a/source/ch/cyberduck/core/openstack/SwiftPathContainerService.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftPathContainerService.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftPathContainerService.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftPathContainerService.java diff --git a/source/ch/cyberduck/core/openstack/SwiftProtocol.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftProtocol.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftProtocol.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftProtocol.java diff --git a/source/ch/cyberduck/core/openstack/SwiftReadFeature.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftReadFeature.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftReadFeature.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftReadFeature.java diff --git a/source/ch/cyberduck/core/openstack/SwiftRegionService.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftRegionService.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftRegionService.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftRegionService.java diff --git a/source/ch/cyberduck/core/openstack/SwiftSegmentService.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftSegmentService.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftSegmentService.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftSegmentService.java diff --git a/source/ch/cyberduck/core/openstack/SwiftSession.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftSession.java similarity index 99% rename from source/ch/cyberduck/core/openstack/SwiftSession.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftSession.java index 9956760bf7..9fdfdd192e 100644 --- a/source/ch/cyberduck/core/openstack/SwiftSession.java +++ b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftSession.java @@ -189,7 +189,7 @@ public class SwiftSession extends HttpSession { @Override public AttributedList list(final Path directory, final ListProgressListener listener) throws BackgroundException { if(directory.isRoot()) { - return new AttributedList(new SwiftContainerListService(this, + return new AttributedList(new SwiftContainerListService(this, regionService, new SwiftLocationFeature.SwiftRegion(host.getRegion())).list(listener)); } else { diff --git a/source/ch/cyberduck/core/openstack/SwiftSmallObjectUploadFeature.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftSmallObjectUploadFeature.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftSmallObjectUploadFeature.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftSmallObjectUploadFeature.java diff --git a/source/ch/cyberduck/core/openstack/SwiftThresholdUploadService.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftThresholdUploadService.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftThresholdUploadService.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftThresholdUploadService.java diff --git a/source/ch/cyberduck/core/openstack/SwiftTouchFeature.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftTouchFeature.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftTouchFeature.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftTouchFeature.java diff --git a/source/ch/cyberduck/core/openstack/SwiftUrlProvider.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftUrlProvider.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftUrlProvider.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftUrlProvider.java diff --git a/source/ch/cyberduck/core/openstack/SwiftWriteFeature.java b/openstack/src/main/java/ch/cyberduck/core/openstack/SwiftWriteFeature.java similarity index 100% rename from source/ch/cyberduck/core/openstack/SwiftWriteFeature.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/SwiftWriteFeature.java diff --git a/source/ch/cyberduck/core/openstack/TenantCredentials.java b/openstack/src/main/java/ch/cyberduck/core/openstack/TenantCredentials.java similarity index 100% rename from source/ch/cyberduck/core/openstack/TenantCredentials.java rename to openstack/src/main/java/ch/cyberduck/core/openstack/TenantCredentials.java diff --git a/test/ch/cyberduck/core/SessionFactoryTest.java b/openstack/src/test/java/ch/cyberduck/core/SessionFactoryTest.java similarity index 57% rename from test/ch/cyberduck/core/SessionFactoryTest.java rename to openstack/src/test/java/ch/cyberduck/core/SessionFactoryTest.java index 269cd94d7f..521913958e 100644 --- a/test/ch/cyberduck/core/SessionFactoryTest.java +++ b/openstack/src/test/java/ch/cyberduck/core/SessionFactoryTest.java @@ -1,5 +1,6 @@ package ch.cyberduck.core; +import ch.cyberduck.core.openstack.SwiftProtocol; import ch.cyberduck.core.ssl.DefaultX509KeyManager; import ch.cyberduck.core.ssl.DefaultX509TrustManager; @@ -14,10 +15,7 @@ public class SessionFactoryTest extends AbstractTestCase { @Test public void testCreateSession() throws Exception { - for(Protocol protocol : ProtocolFactory.getEnabledProtocols()) { - final Host host = new Host(protocol, "h"); - assertNotNull(SessionFactory.create(host, - new DefaultX509TrustManager(), new DefaultX509KeyManager())); - } + assertNotNull(SessionFactory.create(new Host(new SwiftProtocol()), + new DefaultX509TrustManager(), new DefaultX509KeyManager())); } } diff --git a/test/ch/cyberduck/core/openstack/SwiftAttributesFeatureTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftAttributesFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftAttributesFeatureTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftAttributesFeatureTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftAuthenticationServiceTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftAuthenticationServiceTest.java similarity index 96% rename from test/ch/cyberduck/core/openstack/SwiftAuthenticationServiceTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftAuthenticationServiceTest.java index ea4be772ba..86f9690f0f 100644 --- a/test/ch/cyberduck/core/openstack/SwiftAuthenticationServiceTest.java +++ b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftAuthenticationServiceTest.java @@ -8,6 +8,7 @@ import ch.cyberduck.core.Local; import ch.cyberduck.core.LoginOptions; import ch.cyberduck.core.Profile; import ch.cyberduck.core.ProfileReaderFactory; +import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.exception.LoginCanceledException; import org.junit.Test; @@ -97,9 +98,10 @@ public class SwiftAuthenticationServiceTest extends AbstractTestCase { @Test public void testProfileHPCloud() throws Exception { + ProtocolFactory.register(new SwiftProtocol()); final SwiftAuthenticationService s = new SwiftAuthenticationService(); final Profile profile = ProfileReaderFactory.get().read( - new Local("profiles/HP Cloud Object Storage.cyberduckprofile")); + new Local("../profiles/HP Cloud Object Storage.cyberduckprofile")); final Host host = new Host(profile, profile.getDefaultHostname()); try { s.getRequest(host, new DisabledLoginCallback()); @@ -118,9 +120,10 @@ public class SwiftAuthenticationServiceTest extends AbstractTestCase { @Test public void testProfileLondon() throws Exception { + ProtocolFactory.register(new SwiftProtocol()); final SwiftAuthenticationService s = new SwiftAuthenticationService(); final Profile profile = ProfileReaderFactory.get().read( - new Local("profiles/Rackspace UK.cyberduckprofile")); + new Local("../profiles/Rackspace UK.cyberduckprofile")); final Host host = new Host(profile, profile.getDefaultHostname()); assertEquals("/v2.0/tokens", profile.getContext()); assertEquals(URI.create("https://lon.identity.api.rackspacecloud.com/v2.0/tokens"), s.getRequest(host, new DisabledLoginCallback()).iterator().next().getURI()); diff --git a/test/ch/cyberduck/core/openstack/SwiftContainerListServiceTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftContainerListServiceTest.java similarity index 94% rename from test/ch/cyberduck/core/openstack/SwiftContainerListServiceTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftContainerListServiceTest.java index 4ed68823c2..404910f95b 100644 --- a/test/ch/cyberduck/core/openstack/SwiftContainerListServiceTest.java +++ b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftContainerListServiceTest.java @@ -33,7 +33,7 @@ public class SwiftContainerListServiceTest extends AbstractTestCase { ))); session.open(new DisabledHostKeyCallback(), new DisabledTranscriptListener()); session.login(new DisabledPasswordStore(), new DisabledLoginCallback(), new DisabledCancelCallback()); - final List list = new SwiftContainerListService(session, new SwiftLocationFeature.SwiftRegion(null), + final List list = new SwiftContainerListService(session, new SwiftRegionService(session), new SwiftLocationFeature.SwiftRegion(null), false, false).list(new DisabledListProgressListener()); final Path container = new Path("test.cyberduck.ch", EnumSet.of(Path.Type.volume, Path.Type.directory)); container.attributes().setRegion("DFW"); @@ -54,7 +54,7 @@ public class SwiftContainerListServiceTest extends AbstractTestCase { ))); session.open(new DisabledHostKeyCallback(), new DisabledTranscriptListener()); session.login(new DisabledPasswordStore(), new DisabledLoginCallback(), new DisabledCancelCallback()); - final List list = new SwiftContainerListService(session, new SwiftLocationFeature.SwiftRegion("ORD"), + final List list = new SwiftContainerListService(session, new SwiftRegionService(session), new SwiftLocationFeature.SwiftRegion("ORD"), false, false).list(new DisabledListProgressListener()); final Path container = new Path("test.cyberduck.ch", EnumSet.of(Path.Type.volume, Path.Type.directory)); container.attributes().setRegion("DFW"); diff --git a/test/ch/cyberduck/core/openstack/SwiftCopyFeatureTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftCopyFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftCopyFeatureTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftCopyFeatureTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftDeleteFeatureTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftDeleteFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftDeleteFeatureTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftDeleteFeatureTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftDirectoryFeatureTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftDirectoryFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftDirectoryFeatureTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftDirectoryFeatureTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftDistributionConfigurationTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftDistributionConfigurationTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftDistributionConfigurationTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftDistributionConfigurationTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftDistributionPurgeFeatureTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftDistributionPurgeFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftDistributionPurgeFeatureTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftDistributionPurgeFeatureTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftExceptionMappingServiceTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftExceptionMappingServiceTest.java similarity index 76% rename from test/ch/cyberduck/core/openstack/SwiftExceptionMappingServiceTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftExceptionMappingServiceTest.java index b676dcdf33..58771ca685 100644 --- a/test/ch/cyberduck/core/openstack/SwiftExceptionMappingServiceTest.java +++ b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftExceptionMappingServiceTest.java @@ -19,10 +19,7 @@ package ch.cyberduck.core.openstack; */ import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Path; import ch.cyberduck.core.exception.AccessDeniedException; -import ch.cyberduck.core.exception.ConnectionTimeoutException; -import ch.cyberduck.core.ftp.FTPExceptionMappingService; import org.apache.http.Header; import org.apache.http.ProtocolVersion; @@ -30,9 +27,6 @@ import org.apache.http.StatusLine; import org.apache.http.message.BasicStatusLine; import org.junit.Test; -import java.net.SocketTimeoutException; -import java.util.EnumSet; - import ch.iterate.openstack.swift.exception.GenericException; import static org.junit.Assert.assertEquals; @@ -72,14 +66,4 @@ public class SwiftExceptionMappingServiceTest extends AbstractTestCase { } })).getDetail()); } - - @Test - public void testSocketTimeout() throws Exception { - assertEquals(ConnectionTimeoutException.class, new FTPExceptionMappingService() - .map(new SocketTimeoutException()).getClass()); - assertEquals(ConnectionTimeoutException.class, new FTPExceptionMappingService() - .map("message", new SocketTimeoutException()).getClass()); - assertEquals(ConnectionTimeoutException.class, new FTPExceptionMappingService() - .map("message", new SocketTimeoutException(), new Path("/f", EnumSet.of(Path.Type.file))).getClass()); - } } diff --git a/test/ch/cyberduck/core/openstack/SwiftFindFeatureTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftFindFeatureTest.java similarity index 95% rename from test/ch/cyberduck/core/openstack/SwiftFindFeatureTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftFindFeatureTest.java index 3a27f1fb22..b4a5e46c7f 100644 --- a/test/ch/cyberduck/core/openstack/SwiftFindFeatureTest.java +++ b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftFindFeatureTest.java @@ -77,7 +77,7 @@ public class SwiftFindFeatureTest extends AbstractTestCase { @Test public void testFindRoot() throws Exception { - assertTrue(new SwiftFindFeature(new SwiftSession(new Host("h"))).find(new Path("/", EnumSet.of(Path.Type.directory)))); + assertTrue(new SwiftFindFeature(new SwiftSession(new Host(new SwiftProtocol()))).find(new Path("/", EnumSet.of(Path.Type.directory)))); } @Test @@ -86,7 +86,7 @@ public class SwiftFindFeatureTest extends AbstractTestCase { final AttributedList list = new AttributedList(); cache.put(new Path("/g", EnumSet.of(Path.Type.directory)), list); final AtomicBoolean b = new AtomicBoolean(); - final Find finder = new SwiftFindFeature(new SwiftMetadataFeature(new SwiftSession(new Host("t")) { + final Find finder = new SwiftFindFeature(new SwiftMetadataFeature(new SwiftSession(new Host(new SwiftProtocol())) { @Override public Client getClient() { fail(); @@ -110,7 +110,7 @@ public class SwiftFindFeatureTest extends AbstractTestCase { final String name = UUID.randomUUID().toString(); list.attributes().addHidden(new Path("/g/" + name, EnumSet.of(Path.Type.file))); cache.put(new Path("/g", EnumSet.of(Path.Type.directory)), list); - final Find finder = new SwiftFindFeature(new SwiftMetadataFeature(new SwiftSession(new Host("t")) { + final Find finder = new SwiftFindFeature(new SwiftMetadataFeature(new SwiftSession(new Host(new SwiftProtocol())) { @Override public Client getClient() { fail(); @@ -132,7 +132,7 @@ public class SwiftFindFeatureTest extends AbstractTestCase { final String name = UUID.randomUUID().toString(); final AttributedList list = new AttributedList(Collections.singletonList(new Path("/g/" + name, EnumSet.of(Path.Type.file)))); cache.put(new Path("/g", EnumSet.of(Path.Type.directory)), list); - final Find finder = new SwiftFindFeature(new SwiftMetadataFeature(new SwiftSession(new Host("t")) { + final Find finder = new SwiftFindFeature(new SwiftMetadataFeature(new SwiftSession(new Host(new SwiftProtocol())) { @Override public Client getClient() { fail(); diff --git a/test/ch/cyberduck/core/openstack/SwiftHpUrlProviderTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftHpUrlProviderTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftHpUrlProviderTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftHpUrlProviderTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftLargeObjectUploadFeatureTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftLargeObjectUploadFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftLargeObjectUploadFeatureTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftLargeObjectUploadFeatureTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftLocationFeatureTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftLocationFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftLocationFeatureTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftLocationFeatureTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftMetadataFeatureTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftMetadataFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftMetadataFeatureTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftMetadataFeatureTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftMoveFeatureTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftMoveFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftMoveFeatureTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftMoveFeatureTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftMultipleDeleteFeatureTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftMultipleDeleteFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftMultipleDeleteFeatureTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftMultipleDeleteFeatureTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftObjectListServiceTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftObjectListServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftObjectListServiceTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftObjectListServiceTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftPathContainerServiceTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftPathContainerServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftPathContainerServiceTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftPathContainerServiceTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftReadFeatureTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftReadFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftReadFeatureTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftReadFeatureTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftRegionServiceTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftRegionServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftRegionServiceTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftRegionServiceTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftSegmentServiceTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftSegmentServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftSegmentServiceTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftSegmentServiceTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftSessionTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftSessionTest.java similarity index 98% rename from test/ch/cyberduck/core/openstack/SwiftSessionTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftSessionTest.java index 08d35702fa..ff5660202f 100644 --- a/test/ch/cyberduck/core/openstack/SwiftSessionTest.java +++ b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftSessionTest.java @@ -60,8 +60,9 @@ public class SwiftSessionTest extends AbstractTestCase { @Test public void testConnectRackspaceLon() throws Exception { + ProtocolFactory.register(new SwiftProtocol()); final Profile profile = ProfileReaderFactory.get().read( - new Local("profiles/Rackspace UK.cyberduckprofile")); + new Local("../profiles/Rackspace UK.cyberduckprofile")); final Host host = new Host(profile, profile.getDefaultHostname(), new Credentials( properties.getProperty("rackspace.key"), properties.getProperty("rackspace.secret") )); diff --git a/test/ch/cyberduck/core/openstack/SwiftSmallObjectUploadFeatureTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftSmallObjectUploadFeatureTest.java similarity index 91% rename from test/ch/cyberduck/core/openstack/SwiftSmallObjectUploadFeatureTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftSmallObjectUploadFeatureTest.java index 8c31fd46d2..747636cfc2 100644 --- a/test/ch/cyberduck/core/openstack/SwiftSmallObjectUploadFeatureTest.java +++ b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftSmallObjectUploadFeatureTest.java @@ -20,6 +20,7 @@ package ch.cyberduck.core.openstack; import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.exception.ChecksumException; import org.apache.commons.io.input.NullInputStream; @@ -41,12 +42,12 @@ public class SwiftSmallObjectUploadFeatureTest extends AbstractTestCase { public void testDecorate() throws Exception { final NullInputStream n = new NullInputStream(1L); assertSame(NullInputStream.class, new SwiftSmallObjectUploadFeature( - new SwiftSession(new Host("h"))).decorate(n, null).getClass()); + new SwiftSession(new Host(new SwiftProtocol()))).decorate(n, null).getClass()); } @Test public void testDigest() throws Exception { - assertNotNull(new SwiftSmallObjectUploadFeature(new SwiftSession(new Host("h"))).digest()); + assertNotNull(new SwiftSmallObjectUploadFeature(new SwiftSession(new Host(new SwiftProtocol()))).digest()); } @Test(expected = ChecksumException.class) @@ -54,7 +55,7 @@ public class SwiftSmallObjectUploadFeatureTest extends AbstractTestCase { final StorageObject o = new StorageObject("f"); o.setMd5sum("d41d8cd98f00b204e9800998ecf8427f"); try { - new SwiftSmallObjectUploadFeature(new SwiftSession(new Host("h"))).post( + new SwiftSmallObjectUploadFeature(new SwiftSession(new Host(new SwiftProtocol()))).post( new Path("/f", EnumSet.of(Path.Type.file)), MessageDigest.getInstance("MD5"), o ); } @@ -69,7 +70,7 @@ public class SwiftSmallObjectUploadFeatureTest extends AbstractTestCase { public void testPostChecksum() throws Exception { final StorageObject o = new StorageObject("f"); o.setMd5sum("d41d8cd98f00b204e9800998ecf8427e"); - new SwiftSmallObjectUploadFeature(new SwiftSession(new Host("h"))).post( + new SwiftSmallObjectUploadFeature(new SwiftSession(new Host(new SwiftProtocol()))).post( new Path("/f", EnumSet.of(Path.Type.file)), MessageDigest.getInstance("MD5"), o ); } diff --git a/test/ch/cyberduck/core/openstack/SwiftTouchFeatureTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftTouchFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftTouchFeatureTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftTouchFeatureTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftUrlProviderTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftUrlProviderTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftUrlProviderTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftUrlProviderTest.java diff --git a/test/ch/cyberduck/core/openstack/SwiftWriteFeatureTest.java b/openstack/src/test/java/ch/cyberduck/core/openstack/SwiftWriteFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/openstack/SwiftWriteFeatureTest.java rename to openstack/src/test/java/ch/cyberduck/core/openstack/SwiftWriteFeatureTest.java diff --git a/osx/build.xml b/osx/build.xml new file mode 100644 index 0000000000..3168591b3e --- /dev/null +++ b/osx/build.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/osx/pom.xml b/osx/pom.xml new file mode 100644 index 0000000000..d7bdec9e9e --- /dev/null +++ b/osx/pom.xml @@ -0,0 +1,189 @@ + + 4.0.0 + + ch.cyberduck + parent + 4.8.0-SNAPSHOT + + osx + jar + + + + windows + + + Windows + + + + true + + + + linux + + + Linux + + + + true + + + + mac + + + Mac + + + + + + maven-dependency-plugin + + + copy-dependencies-jar-bundle + generate-sources + + copy-dependencies + + + ${project.build.directory}/Cyberduck.app/Contents/Resources + jar + runtime + true + + + + copy-dependencies-dylib-bundle + generate-sources + + copy-dependencies + + + ${project.build.directory}/Cyberduck.app/Contents/Frameworks + dylib + runtime + true + true + + + + copy-artfifact-bundle + install + + copy + + + + + ${project.groupId} + ${project.artifactId} + ${project.version} + ${project.packaging} + + + ${project.build.directory}/Cyberduck.app/Contents/Resources + + + + + + maven-antrun-plugin + + + run-ant-build-target + package + + run + + + + + + + + + + + + + + + + run-ant-package-target + deploy + + run + + + + + + + + + + + + + + + + + + + + + + + + ch.cyberduck + core + ${project.version} + + + ch.cyberduck + libcore + dylib + runtime + ${project.version} + + + ch.cyberduck + test + pom + test + ${project.version} + + + ch.cyberduck + binding + ${project.version} + + + ch.cyberduck + ui + ${project.version} + + + ch.cyberduck + bonjour + ${project.version} + + + ch.cyberduck + protocols + pom + ${project.version} + + + ch.cyberduck + importer + ${project.version} + + + \ No newline at end of file diff --git a/source/ch/cyberduck/core/NSObjectPathReference.java b/osx/src/main/java/ch/cyberduck/core/NSObjectPathReference.java similarity index 100% rename from source/ch/cyberduck/core/NSObjectPathReference.java rename to osx/src/main/java/ch/cyberduck/core/NSObjectPathReference.java diff --git a/source/ch/cyberduck/core/resources/NSImageIconCache.java b/osx/src/main/java/ch/cyberduck/core/resources/NSImageIconCache.java similarity index 100% rename from source/ch/cyberduck/core/resources/NSImageIconCache.java rename to osx/src/main/java/ch/cyberduck/core/resources/NSImageIconCache.java diff --git a/source/ch/cyberduck/ui/cocoa/threading/AlertTransferErrorCallback.java b/osx/src/main/java/ch/cyberduck/core/threading/AlertTransferErrorCallback.java similarity index 95% rename from source/ch/cyberduck/ui/cocoa/threading/AlertTransferErrorCallback.java rename to osx/src/main/java/ch/cyberduck/core/threading/AlertTransferErrorCallback.java index 5808bed9a4..9b1381c21b 100644 --- a/source/ch/cyberduck/ui/cocoa/threading/AlertTransferErrorCallback.java +++ b/osx/src/main/java/ch/cyberduck/core/threading/AlertTransferErrorCallback.java @@ -1,4 +1,4 @@ -package ch.cyberduck.ui.cocoa.threading; +package ch.cyberduck.core.threading; /* * Copyright (c) 2002-2013 David Kocher. All rights reserved. @@ -24,8 +24,8 @@ import ch.cyberduck.binding.application.SheetCallback; import ch.cyberduck.core.LocaleFactory; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.transfer.TransferErrorCallback; -import ch.cyberduck.binding.AlertController; -import ch.cyberduck.binding.WindowController; +import ch.cyberduck.ui.cocoa.AlertController; +import ch.cyberduck.ui.cocoa.WindowController; import java.util.concurrent.atomic.AtomicBoolean; diff --git a/source/ch/cyberduck/ui/cocoa/threading/BrowserControllerBackgroundAction.java b/osx/src/main/java/ch/cyberduck/core/threading/BrowserControllerBackgroundAction.java similarity index 96% rename from source/ch/cyberduck/ui/cocoa/threading/BrowserControllerBackgroundAction.java rename to osx/src/main/java/ch/cyberduck/core/threading/BrowserControllerBackgroundAction.java index f71c8e9c35..a59fb7828b 100644 --- a/source/ch/cyberduck/ui/cocoa/threading/BrowserControllerBackgroundAction.java +++ b/osx/src/main/java/ch/cyberduck/core/threading/BrowserControllerBackgroundAction.java @@ -1,4 +1,4 @@ -package ch.cyberduck.ui.cocoa.threading; +package ch.cyberduck.core.threading; /* * Copyright (c) 2002-2013 David Kocher. All rights reserved. diff --git a/source/ch/cyberduck/ui/cocoa/threading/WindowMainAction.java b/osx/src/main/java/ch/cyberduck/core/threading/WindowMainAction.java similarity index 92% rename from source/ch/cyberduck/ui/cocoa/threading/WindowMainAction.java rename to osx/src/main/java/ch/cyberduck/core/threading/WindowMainAction.java index 6fab8d0e63..7deb885abb 100644 --- a/source/ch/cyberduck/ui/cocoa/threading/WindowMainAction.java +++ b/osx/src/main/java/ch/cyberduck/core/threading/WindowMainAction.java @@ -1,4 +1,4 @@ -package ch.cyberduck.ui.cocoa.threading; +package ch.cyberduck.core.threading; /* * Copyright (c) 2002-2013 David Kocher. All rights reserved. @@ -18,7 +18,7 @@ package ch.cyberduck.ui.cocoa.threading; */ import ch.cyberduck.core.threading.ControllerMainAction; -import ch.cyberduck.binding.WindowController; +import ch.cyberduck.ui.cocoa.WindowController; /** * @version $Id$ diff --git a/osx/src/main/java/ch/cyberduck/preferences/ApplicationPreferences.java b/osx/src/main/java/ch/cyberduck/preferences/ApplicationPreferences.java new file mode 100644 index 0000000000..51c1741e83 --- /dev/null +++ b/osx/src/main/java/ch/cyberduck/preferences/ApplicationPreferences.java @@ -0,0 +1,137 @@ +package ch.cyberduck.preferences; + +import ch.cyberduck.core.ApplescriptTerminalService; +import ch.cyberduck.core.Factory; +import ch.cyberduck.core.IOKitSleepPreventer; +import ch.cyberduck.core.Keychain; +import ch.cyberduck.core.aquaticprime.ReceiptFactory; +import ch.cyberduck.core.azure.AzureProtocol; +import ch.cyberduck.core.bonjour.RendezvousResponder; +import ch.cyberduck.core.dav.DAVProtocol; +import ch.cyberduck.core.dav.DAVSSLProtocol; +import ch.cyberduck.core.diagnostics.SystemConfigurationReachability; +import ch.cyberduck.core.editor.FSEventWatchEditorFactory; +import ch.cyberduck.core.ftp.FTPProtocol; +import ch.cyberduck.core.ftp.FTPTLSProtocol; +import ch.cyberduck.core.gstorage.GoogleStorageProtocol; +import ch.cyberduck.core.i18n.BundleLocale; +import ch.cyberduck.core.irods.IRODSProtocol; +import ch.cyberduck.core.local.FileManagerWorkingDirectoryFinder; +import ch.cyberduck.core.local.FinderLocal; +import ch.cyberduck.core.local.LaunchServicesApplicationFinder; +import ch.cyberduck.core.local.LaunchServicesFileDescriptor; +import ch.cyberduck.core.local.LaunchServicesQuarantineService; +import ch.cyberduck.core.local.WorkspaceApplicationBadgeLabeler; +import ch.cyberduck.core.local.WorkspaceApplicationLauncher; +import ch.cyberduck.core.local.WorkspaceBrowserLauncher; +import ch.cyberduck.core.local.WorkspaceIconService; +import ch.cyberduck.core.local.WorkspaceRevealService; +import ch.cyberduck.core.local.WorkspaceSymlinkFeature; +import ch.cyberduck.core.local.WorkspaceTrashFeature; +import ch.cyberduck.core.notification.NotificationCenter; +import ch.cyberduck.core.openstack.SwiftProtocol; +import ch.cyberduck.core.preferences.BundleApplicationResourcesFinder; +import ch.cyberduck.core.preferences.SecurityApplicationGroupSupportDirectoryFinder; +import ch.cyberduck.core.preferences.UserDefaultsPreferences; +import ch.cyberduck.core.proxy.SystemConfigurationProxy; +import ch.cyberduck.core.resources.NSImageIconCache; +import ch.cyberduck.core.s3.S3Protocol; +import ch.cyberduck.core.serializer.impl.dd.HostPlistReader; +import ch.cyberduck.core.serializer.impl.dd.PlistDeserializer; +import ch.cyberduck.core.serializer.impl.dd.PlistSerializer; +import ch.cyberduck.core.serializer.impl.dd.PlistWriter; +import ch.cyberduck.core.serializer.impl.dd.ProfilePlistReader; +import ch.cyberduck.core.serializer.impl.dd.TransferPlistReader; +import ch.cyberduck.core.sftp.SFTPProtocol; +import ch.cyberduck.core.sparkle.Updater; +import ch.cyberduck.core.threading.AutoreleaseActionOperationBatcher; +import ch.cyberduck.core.urlhandler.LaunchServicesSchemeHandler; +import ch.cyberduck.ui.browser.Column; + +/** + * @version $Id:$ + */ +public class ApplicationPreferences extends UserDefaultsPreferences { + + @Override + protected void setFactories() { + super.setFactories(); + + defaults.put("factory.supportdirectoryfinder.class", SecurityApplicationGroupSupportDirectoryFinder.class.getName()); + defaults.put("factory.applicationresourcesfinder.class", BundleApplicationResourcesFinder.class.getName()); + defaults.put("factory.autorelease.class", AutoreleaseActionOperationBatcher.class.getName()); + defaults.put("factory.local.class", FinderLocal.class.getName()); + defaults.put("factory.locale.class", BundleLocale.class.getName()); + defaults.put("factory.passwordstore.class", Keychain.class.getName()); + defaults.put("factory.certificatestore.class", Keychain.class.getName()); + defaults.put("factory.proxy.class", SystemConfigurationProxy.class.getName()); + defaults.put("factory.sleeppreventer.class", IOKitSleepPreventer.class.getName()); + defaults.put("factory.reachability.class", SystemConfigurationReachability.class.getName()); + defaults.put("factory.rendezvous.class", RendezvousResponder.class.getName()); + + defaults.put("factory.applicationfinder.class", LaunchServicesApplicationFinder.class.getName()); + defaults.put("factory.applicationlauncher.class", WorkspaceApplicationLauncher.class.getName()); + defaults.put("factory.browserlauncher.class", WorkspaceBrowserLauncher.class.getName()); + defaults.put("factory.reveal.class", WorkspaceRevealService.class.getName()); + defaults.put("factory.trash.class", WorkspaceTrashFeature.class.getName()); + defaults.put("factory.quarantine.class", LaunchServicesQuarantineService.class.getName()); + defaults.put("factory.symlink.class", WorkspaceSymlinkFeature.class.getName()); + defaults.put("factory.terminalservice.class", ApplescriptTerminalService.class.getName()); + defaults.put("factory.badgelabeler.class", WorkspaceApplicationBadgeLabeler.class.getName()); + defaults.put("factory.editorfactory.class", FSEventWatchEditorFactory.class.getName()); + if(null == Updater.getFeed()) { + defaults.put("factory.licensefactory.class", ReceiptFactory.class.getName()); + } + if(!Factory.Platform.osversion.matches("10\\.(5|6|7).*")) { + defaults.put("factory.notification.class", NotificationCenter.class.getName()); + } + defaults.put("factory.iconservice.class", WorkspaceIconService.class.getName()); + defaults.put("factory.filedescriptor.class", LaunchServicesFileDescriptor.class.getName()); + defaults.put("factory.schemehandler.class", LaunchServicesSchemeHandler.class.getName()); + defaults.put("factory.iconcache.class", NSImageIconCache.class.getName()); + defaults.put("factory.workingdirectory.class", FileManagerWorkingDirectoryFinder.class.getName()); + } + + @Override + protected void setDefaults() { + // Parent defaults + super.setDefaults(); + + defaults.put(String.format("browser.column.%s", Column.icon.name()), String.valueOf(true)); + defaults.put(String.format("browser.column.%s.width", Column.icon.name()), String.valueOf(20)); + defaults.put(String.format("browser.column.%s", Column.filename.name()), String.valueOf(true)); + defaults.put(String.format("browser.column.%s.width", Column.filename.name()), String.valueOf(250)); + defaults.put(String.format("browser.column.%s", Column.kind.name()), String.valueOf(false)); + defaults.put(String.format("browser.column.%s.width", Column.kind.name()), String.valueOf(80)); + defaults.put(String.format("browser.column.%s", Column.extension.name()), String.valueOf(false)); + defaults.put(String.format("browser.column.%s.width", Column.extension.name()), String.valueOf(80)); + defaults.put(String.format("browser.column.%s", Column.size.name()), String.valueOf(true)); + defaults.put(String.format("browser.column.%s.width", Column.size.name()), String.valueOf(80)); + defaults.put(String.format("browser.column.%s", Column.modified.name()), String.valueOf(true)); + defaults.put(String.format("browser.column.%s.width", Column.modified.name()), String.valueOf(150)); + defaults.put(String.format("browser.column.%s", Column.owner.name()), String.valueOf(false)); + defaults.put(String.format("browser.column.%s.width", Column.owner.name()), String.valueOf(80)); + defaults.put(String.format("browser.column.%s", Column.group.name()), String.valueOf(false)); + defaults.put(String.format("browser.column.%s.width", Column.group.name()), String.valueOf(80)); + defaults.put(String.format("browser.column.%s", Column.permission.name()), String.valueOf(false)); + defaults.put(String.format("browser.column.%s.width", Column.permission.name()), String.valueOf(100)); + defaults.put(String.format("browser.column.%s", Column.region.name()), String.valueOf(false)); + defaults.put(String.format("browser.column.%s.width", Column.region.name()), String.valueOf(80)); + defaults.put(String.format("browser.column.%s", Column.version.name()), String.valueOf(false)); + defaults.put(String.format("browser.column.%s.width", Column.version.name()), String.valueOf(80)); + + defaults.put("browser.sort.column", Column.filename.name()); + + defaults.put(String.format("connection.protocol.%s.enable", new FTPProtocol().getIdentifier()), String.valueOf(true)); + defaults.put(String.format("connection.protocol.%s.enable", new FTPTLSProtocol().getIdentifier()), String.valueOf(true)); + defaults.put(String.format("connection.protocol.%s.enable", new SFTPProtocol().getIdentifier()), String.valueOf(true)); + defaults.put(String.format("connection.protocol.%s.enable", new DAVProtocol().getIdentifier()), String.valueOf(true)); + defaults.put(String.format("connection.protocol.%s.enable", new DAVSSLProtocol().getIdentifier()), String.valueOf(true)); + defaults.put(String.format("connection.protocol.%s.enable", new SwiftProtocol().getIdentifier()), String.valueOf(true)); + defaults.put(String.format("connection.protocol.%s.enable", new S3Protocol().getIdentifier()), String.valueOf(true)); + defaults.put(String.format("connection.protocol.%s.enable", new GoogleStorageProtocol().getIdentifier()), String.valueOf(true)); + defaults.put(String.format("connection.protocol.%s.enable", new AzureProtocol().getIdentifier()), String.valueOf(true)); + defaults.put(String.format("connection.protocol.%s.enable", new IRODSProtocol().getIdentifier()), String.valueOf(false)); + + } +} diff --git a/source/ch/cyberduck/ui/cocoa/AbstractPathTableDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/AbstractPathTableDelegate.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/AbstractPathTableDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/AbstractPathTableDelegate.java index 8f0bbf95b7..9d60e094c4 100644 --- a/source/ch/cyberduck/ui/cocoa/AbstractPathTableDelegate.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/AbstractPathTableDelegate.java @@ -18,11 +18,11 @@ package ch.cyberduck.ui.cocoa; +import ch.cyberduck.binding.application.NSTableColumn; import ch.cyberduck.core.NullComparator; import ch.cyberduck.core.Path; import ch.cyberduck.ui.browser.Column; import ch.cyberduck.ui.browser.PathTooltipService; -import ch.cyberduck.binding.application.NSTableColumn; import ch.cyberduck.ui.comparator.ExtensionComparator; import ch.cyberduck.ui.comparator.FileTypeComparator; import ch.cyberduck.ui.comparator.FilenameComparator; diff --git a/source/ch/cyberduck/ui/cocoa/AbstractTableDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/AbstractTableDelegate.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/AbstractTableDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/AbstractTableDelegate.java index 7675f6708d..3c945da974 100644 --- a/source/ch/cyberduck/ui/cocoa/AbstractTableDelegate.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/AbstractTableDelegate.java @@ -18,7 +18,6 @@ package ch.cyberduck.ui.cocoa; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.ProxyController; import ch.cyberduck.binding.application.NSEvent; import ch.cyberduck.binding.application.NSOutlineView; import ch.cyberduck.binding.application.NSTableColumn; diff --git a/source/ch/cyberduck/ui/cocoa/ActivityController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/ActivityController.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/ActivityController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/ActivityController.java index 495e1fe00f..002bc29edb 100644 --- a/source/ch/cyberduck/ui/cocoa/ActivityController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/ActivityController.java @@ -20,7 +20,6 @@ package ch.cyberduck.ui.cocoa; import ch.cyberduck.binding.Delegate; import ch.cyberduck.binding.Outlet; -import ch.cyberduck.binding.WindowController; import ch.cyberduck.binding.application.NSTableColumn; import ch.cyberduck.binding.application.NSTableView; import ch.cyberduck.binding.application.NSView; diff --git a/source/ch/cyberduck/ui/cocoa/ActivityControllerFactory.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/ActivityControllerFactory.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/ActivityControllerFactory.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/ActivityControllerFactory.java diff --git a/source/ch/cyberduck/binding/AlertController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/AlertController.java similarity index 96% rename from source/ch/cyberduck/binding/AlertController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/AlertController.java index 92b5b714af..18343cac41 100644 --- a/source/ch/cyberduck/binding/AlertController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/AlertController.java @@ -1,4 +1,4 @@ -package ch.cyberduck.binding; +package ch.cyberduck.ui.cocoa; /* * Copyright (c) 2002-2009 David Kocher. All rights reserved. @@ -20,8 +20,6 @@ package ch.cyberduck.binding; */ import ch.cyberduck.binding.Action; -import ch.cyberduck.binding.SheetController; -import ch.cyberduck.binding.WindowController; import ch.cyberduck.binding.application.NSAlert; import ch.cyberduck.binding.application.NSButton; import ch.cyberduck.binding.application.NSView; diff --git a/source/ch/cyberduck/ui/cocoa/AlertHostKeyController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/AlertHostKeyController.java similarity index 97% rename from source/ch/cyberduck/ui/cocoa/AlertHostKeyController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/AlertHostKeyController.java index 8f6b01c04c..95a8094657 100644 --- a/source/ch/cyberduck/ui/cocoa/AlertHostKeyController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/AlertHostKeyController.java @@ -18,9 +18,6 @@ package ch.cyberduck.ui.cocoa; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.AlertController; -import ch.cyberduck.binding.SheetController; -import ch.cyberduck.binding.WindowController; import ch.cyberduck.binding.application.NSAlert; import ch.cyberduck.binding.application.NSCell; import ch.cyberduck.binding.application.SheetCallback; diff --git a/source/ch/cyberduck/core/preferences/ApplicationUserDefaultsPreferences.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/ApplicationUserDefaultsPreferences.java similarity index 81% rename from source/ch/cyberduck/core/preferences/ApplicationUserDefaultsPreferences.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/ApplicationUserDefaultsPreferences.java index c9e7395a94..d6227d8cfa 100644 --- a/source/ch/cyberduck/core/preferences/ApplicationUserDefaultsPreferences.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/ApplicationUserDefaultsPreferences.java @@ -1,4 +1,4 @@ -package ch.cyberduck.core.preferences; +package ch.cyberduck.ui.cocoa; /* * Copyright (c) 2015 David Kocher. All rights reserved. @@ -19,14 +19,8 @@ package ch.cyberduck.core.preferences; */ import ch.cyberduck.core.logging.SystemLogAppender; -import ch.cyberduck.ui.cocoa.AlertHostKeyController; -import ch.cyberduck.ui.cocoa.CopyPromptController; -import ch.cyberduck.ui.cocoa.DownloadPromptController; -import ch.cyberduck.ui.cocoa.PromptLoginController; -import ch.cyberduck.ui.cocoa.SyncPromptController; -import ch.cyberduck.ui.cocoa.UploadPromptController; -import ch.cyberduck.ui.cocoa.UserDefaultsDateFormatter; -import ch.cyberduck.ui.cocoa.threading.AlertTransferErrorCallback; +import ch.cyberduck.core.preferences.UserDefaultsPreferences; +import ch.cyberduck.core.threading.AlertTransferErrorCallback; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; diff --git a/source/ch/cyberduck/ui/cocoa/ArchiveController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/ArchiveController.java similarity index 97% rename from source/ch/cyberduck/ui/cocoa/ArchiveController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/ArchiveController.java index 1837a8b6a7..3c9cf77f9c 100644 --- a/source/ch/cyberduck/ui/cocoa/ArchiveController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/ArchiveController.java @@ -18,13 +18,12 @@ package ch.cyberduck.ui.cocoa; * feedback@cyberduck.io */ -import ch.cyberduck.binding.ProxyController; import ch.cyberduck.core.Archive; import ch.cyberduck.core.Path; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.Compress; import ch.cyberduck.core.threading.DefaultMainAction; -import ch.cyberduck.ui.cocoa.threading.BrowserControllerBackgroundAction; +import ch.cyberduck.core.threading.BrowserControllerBackgroundAction; import java.util.ArrayList; import java.util.Collections; diff --git a/source/ch/cyberduck/ui/cocoa/BookmarkController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/BookmarkController.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/BookmarkController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/BookmarkController.java index 8d71e920ce..550ec0d953 100644 --- a/source/ch/cyberduck/ui/cocoa/BookmarkController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/BookmarkController.java @@ -20,7 +20,6 @@ package ch.cyberduck.ui.cocoa; import ch.cyberduck.binding.Action; import ch.cyberduck.binding.Outlet; -import ch.cyberduck.binding.WindowController; import ch.cyberduck.binding.application.*; import ch.cyberduck.binding.foundation.NSArray; import ch.cyberduck.binding.foundation.NSData; @@ -40,6 +39,7 @@ import ch.cyberduck.core.LocalFactory; import ch.cyberduck.core.LocaleFactory; import ch.cyberduck.core.Protocol; import ch.cyberduck.core.ProtocolFactory; +import ch.cyberduck.core.Scheme; import ch.cyberduck.core.diagnostics.ReachabilityFactory; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.ftp.FTPConnectMode; @@ -630,7 +630,7 @@ public class BookmarkController extends WindowController { final String input = hostField.stringValue(); final Host parsed = HostParser.parse(input); host.setHostname(parsed.getHostname()); - if(ProtocolFactory.isURL(input)) { + if(Scheme.isURL(input)) { host.setProtocol(parsed.getProtocol()); host.setPort(parsed.getPort()); host.setDefaultPath(parsed.getDefaultPath()); @@ -763,7 +763,7 @@ public class BookmarkController extends WindowController { if(host.getProtocol().getType() == Protocol.Type.ftp) { connectmodePopup.selectItemAtIndex(connectmodePopup.indexOfItemWithRepresentedObject(host.getFTPConnectMode().name())); } - pkCheckbox.setEnabled(host.getProtocol().getType() == Protocol.Type.ssh); + pkCheckbox.setEnabled(host.getProtocol().getType() == Protocol.Type.sftp); if(host.getCredentials().isPublicKeyAuthentication()) { pkCheckbox.setState(NSCell.NSOnState); this.updateField(pkLabel, host.getCredentials().getIdentity().getAbbreviatedPath(), TRUNCATE_MIDDLE_ATTRIBUTES); diff --git a/source/ch/cyberduck/ui/cocoa/BookmarkControllerFactory.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/BookmarkControllerFactory.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/BookmarkControllerFactory.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/BookmarkControllerFactory.java diff --git a/source/ch/cyberduck/ui/cocoa/BookmarkTableDataSource.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/BookmarkTableDataSource.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/BookmarkTableDataSource.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/BookmarkTableDataSource.java index 34fe7ff220..6150e54f83 100644 --- a/source/ch/cyberduck/ui/cocoa/BookmarkTableDataSource.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/BookmarkTableDataSource.java @@ -43,7 +43,7 @@ import ch.cyberduck.core.threading.ScheduledThreadPool; import ch.cyberduck.core.transfer.Transfer; import ch.cyberduck.core.transfer.TransferItem; import ch.cyberduck.core.transfer.UploadTransfer; -import ch.cyberduck.ui.cocoa.threading.WindowMainAction; +import ch.cyberduck.core.threading.WindowMainAction; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; @@ -311,7 +311,7 @@ public class BookmarkTableDataSource extends ListDataSource { else if(draggingPasteboard.availableTypeFromArray(NSArray.arrayWithObject(NSPasteboard.StringPboardType)) != null) { String o = draggingPasteboard.stringForType(NSPasteboard.StringPboardType); if(o != null) { - if(ProtocolFactory.isURL(o)) { + if(Scheme.isURL(o)) { view.setDropRow(row, NSTableView.NSTableViewDropAbove); return NSDraggingInfo.NSDragOperationCopy; } @@ -344,7 +344,7 @@ public class BookmarkTableDataSource extends ListDataSource { if(o.isKindOfClass(Rococoa.createClass("NSArray", NSArray._Class.class))) { final NSArray elements = Rococoa.cast(o, NSArray.class); for(int i = 0; i < elements.count().intValue(); i++) { - if(ProtocolFactory.isURL(elements.objectAtIndex(new NSUInteger(i)).toString())) { + if(Scheme.isURL(elements.objectAtIndex(new NSUInteger(i)).toString())) { view.setDropRow(row, NSTableView.NSTableViewDropAbove); return NSDraggingInfo.NSDragOperationCopy; } diff --git a/source/ch/cyberduck/ui/cocoa/BrowserController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/BrowserController.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/BrowserController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/BrowserController.java index 172b8effa4..6f51c9e659 100644 --- a/source/ch/cyberduck/ui/cocoa/BrowserController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/BrowserController.java @@ -21,9 +21,6 @@ package ch.cyberduck.ui.cocoa; import ch.cyberduck.binding.Action; import ch.cyberduck.binding.Delegate; import ch.cyberduck.binding.Outlet; -import ch.cyberduck.binding.ProxyController; -import ch.cyberduck.binding.SheetController; -import ch.cyberduck.binding.WindowController; import ch.cyberduck.binding.application.*; import ch.cyberduck.binding.foundation.NSArray; import ch.cyberduck.binding.foundation.NSAttributedString; @@ -58,9 +55,6 @@ import ch.cyberduck.core.preferences.Preferences; import ch.cyberduck.core.preferences.PreferencesFactory; import ch.cyberduck.core.resources.IconCacheFactory; import ch.cyberduck.core.serializer.HostDictionary; -import ch.cyberduck.core.ssl.DefaultTrustManagerHostnameCallback; -import ch.cyberduck.core.ssl.KeychainX509KeyManager; -import ch.cyberduck.core.ssl.KeychainX509TrustManager; import ch.cyberduck.core.ssl.SSLSession; import ch.cyberduck.core.threading.BackgroundAction; import ch.cyberduck.core.threading.DefaultMainAction; @@ -97,7 +91,7 @@ import ch.cyberduck.ui.cocoa.quicklook.QLPreviewPanel; import ch.cyberduck.ui.cocoa.quicklook.QLPreviewPanelController; import ch.cyberduck.ui.cocoa.quicklook.QuickLook; import ch.cyberduck.ui.cocoa.quicklook.QuickLookFactory; -import ch.cyberduck.ui.cocoa.threading.WindowMainAction; +import ch.cyberduck.core.threading.WindowMainAction; import ch.cyberduck.ui.cocoa.view.BookmarkCell; import ch.cyberduck.ui.cocoa.view.OutlineCell; @@ -3208,9 +3202,7 @@ public class BrowserController extends WindowController * @return A session object bound to this browser controller */ private Session init(final Host host) { - session = SessionFactory.create(host, - new KeychainX509TrustManager(new DefaultTrustManagerHostnameCallback(host), this), - new KeychainX509KeyManager(this)); + session = SessionFactory.create(host); transcript.clear(); navigation.clear(); pasteboard = PathPasteboardFactory.getPasteboard(session); diff --git a/source/ch/cyberduck/ui/cocoa/BrowserListViewModel.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/BrowserListViewModel.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/BrowserListViewModel.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/BrowserListViewModel.java diff --git a/source/ch/cyberduck/ui/cocoa/BrowserOutlineViewModel.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/BrowserOutlineViewModel.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/BrowserOutlineViewModel.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/BrowserOutlineViewModel.java diff --git a/source/ch/cyberduck/ui/cocoa/BrowserTableDataSource.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/BrowserTableDataSource.java similarity index 97% rename from source/ch/cyberduck/ui/cocoa/BrowserTableDataSource.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/BrowserTableDataSource.java index eaefaacdc5..a8328fe7a9 100644 --- a/source/ch/cyberduck/ui/cocoa/BrowserTableDataSource.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/BrowserTableDataSource.java @@ -18,7 +18,6 @@ package ch.cyberduck.ui.cocoa; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.ProxyController; import ch.cyberduck.binding.application.NSApplication; import ch.cyberduck.binding.application.NSDraggingInfo; import ch.cyberduck.binding.application.NSDraggingSource; @@ -26,7 +25,6 @@ import ch.cyberduck.binding.application.NSEvent; import ch.cyberduck.binding.application.NSImage; import ch.cyberduck.binding.application.NSPasteboard; import ch.cyberduck.binding.application.NSTableView; -import ch.cyberduck.binding.application.TableCellAttributes; import ch.cyberduck.binding.foundation.NSArray; import ch.cyberduck.binding.foundation.NSAttributedString; import ch.cyberduck.binding.foundation.NSFileManager; @@ -37,6 +35,7 @@ import ch.cyberduck.binding.foundation.NSURL; import ch.cyberduck.core.Acl; import ch.cyberduck.core.AttributedList; import ch.cyberduck.core.Cache; +import ch.cyberduck.core.Host; import ch.cyberduck.core.HostParser; import ch.cyberduck.core.Local; import ch.cyberduck.core.LocalFactory; @@ -44,6 +43,8 @@ import ch.cyberduck.core.LocaleFactory; import ch.cyberduck.core.Path; import ch.cyberduck.core.Permission; import ch.cyberduck.core.ProtocolFactory; +import ch.cyberduck.core.Scheme; +import ch.cyberduck.core.SessionFactory; import ch.cyberduck.core.UserDateFormatterFactory; import ch.cyberduck.core.date.AbstractUserDateFormatter; import ch.cyberduck.core.exception.AccessDeniedException; @@ -60,6 +61,9 @@ import ch.cyberduck.core.preferences.Preferences; import ch.cyberduck.core.preferences.PreferencesFactory; import ch.cyberduck.core.resources.IconCache; import ch.cyberduck.core.resources.IconCacheFactory; +import ch.cyberduck.core.ssl.DefaultTrustManagerHostnameCallback; +import ch.cyberduck.core.ssl.KeychainX509KeyManager; +import ch.cyberduck.core.ssl.KeychainX509TrustManager; import ch.cyberduck.core.transfer.CopyTransfer; import ch.cyberduck.core.transfer.DownloadTransfer; import ch.cyberduck.core.transfer.TransferItem; @@ -343,7 +347,7 @@ public abstract class BrowserTableDataSource extends ProxyController implements if(o.isKindOfClass(Rococoa.createClass("NSArray", NSArray._Class.class))) { final NSArray elements = Rococoa.cast(o, NSArray.class); for(int i = 0; i < elements.count().intValue(); i++) { - if(ProtocolFactory.isURL(elements.objectAtIndex(new NSUInteger(i)).toString())) { + if(Scheme.isURL(elements.objectAtIndex(new NSUInteger(i)).toString())) { controller.mount(HostParser.parse(elements.objectAtIndex(new NSUInteger(i)).toString())); return true; } @@ -383,9 +387,11 @@ public abstract class BrowserTableDataSource extends ProxyController implements for(Path file : pasteboard) { files.put(file, new Path(destination, file.getName(), file.getType())); } + final Host target = controller.getSession().getHost(); controller.transfer(new CopyTransfer(pasteboard.getSession().getHost(), - controller.getSession().getHost(), - files), new ArrayList(files.values()), false); + SessionFactory.create(target), + files), + new ArrayList(files.values()), false); } else { // The file should be renamed @@ -423,7 +429,7 @@ public abstract class BrowserTableDataSource extends ProxyController implements final NSArray elements = Rococoa.cast(o, NSArray.class); for(int i = 0; i < elements.count().intValue(); i++) { // Validate if .webloc URLs dragged to browser window have a known protocol - if(ProtocolFactory.isURL(elements.objectAtIndex(new NSUInteger(i)).toString())) { + if(Scheme.isURL(elements.objectAtIndex(new NSUInteger(i)).toString())) { // Passing a value of –1 for row, and NSTableViewDropOn as the operation causes the // entire table view to be highlighted rather than a specific row. view.setDropRow(new NSInteger(-1), NSTableView.NSTableViewDropOn); diff --git a/source/ch/cyberduck/ui/cocoa/BrowserToolbarFactory.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/BrowserToolbarFactory.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/BrowserToolbarFactory.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/BrowserToolbarFactory.java diff --git a/source/ch/cyberduck/ui/cocoa/BrowserToolbarValidator.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/BrowserToolbarValidator.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/BrowserToolbarValidator.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/BrowserToolbarValidator.java index 2bfb45e1d0..c38a7e35c3 100644 --- a/source/ch/cyberduck/ui/cocoa/BrowserToolbarValidator.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/BrowserToolbarValidator.java @@ -304,7 +304,7 @@ public class BrowserToolbarValidator implements ToolbarValidator { } else if(action.equals(Foundation.selector("openTerminalButtonClicked:"))) { return this.isBrowser() && controller.isMounted() - && controller.getSession().getHost().getProtocol().getType() == Protocol.Type.ssh + && controller.getSession().getHost().getProtocol().getType() == Protocol.Type.sftp && TerminalServiceFactory.get() != null; } else if(action.equals(Foundation.selector("archiveButtonClicked:")) || action.equals(Foundation.selector("archiveMenuClicked:"))) { diff --git a/source/ch/cyberduck/binding/BundleController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/BundleController.java similarity index 97% rename from source/ch/cyberduck/binding/BundleController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/BundleController.java index ecf22bbb35..9ff4e9e3b2 100644 --- a/source/ch/cyberduck/binding/BundleController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/BundleController.java @@ -1,4 +1,4 @@ -package ch.cyberduck.binding; +package ch.cyberduck.ui.cocoa; /* * Copyright (c) 2007 David Kocher. All rights reserved. @@ -27,7 +27,6 @@ import ch.cyberduck.binding.foundation.NSAttributedString; import ch.cyberduck.binding.foundation.NSBundle; import ch.cyberduck.binding.foundation.NSDictionary; import ch.cyberduck.core.FactoryException; -import ch.cyberduck.binding.application.TableCellAttributes; import org.apache.log4j.Logger; diff --git a/source/ch/cyberduck/ui/cocoa/CommandController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/CommandController.java similarity index 97% rename from source/ch/cyberduck/ui/cocoa/CommandController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/CommandController.java index c261ca572b..8a874ba06e 100644 --- a/source/ch/cyberduck/ui/cocoa/CommandController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/CommandController.java @@ -20,8 +20,6 @@ package ch.cyberduck.ui.cocoa; import ch.cyberduck.binding.Action; import ch.cyberduck.binding.Outlet; -import ch.cyberduck.binding.SheetController; -import ch.cyberduck.binding.WindowController; import ch.cyberduck.binding.application.NSButton; import ch.cyberduck.binding.application.NSImage; import ch.cyberduck.binding.application.NSImageView; @@ -41,7 +39,7 @@ import ch.cyberduck.core.features.Command; import ch.cyberduck.core.local.Application; import ch.cyberduck.core.resources.IconCacheFactory; import ch.cyberduck.core.threading.ControllerBackgroundAction; -import ch.cyberduck.ui.cocoa.threading.WindowMainAction; +import ch.cyberduck.core.threading.WindowMainAction; import org.apache.commons.lang3.StringUtils; import org.rococoa.cocoa.foundation.NSUInteger; diff --git a/source/ch/cyberduck/ui/cocoa/ConnectionController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/ConnectionController.java similarity index 98% rename from source/ch/cyberduck/ui/cocoa/ConnectionController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/ConnectionController.java index c0f2602522..9c607e37e6 100644 --- a/source/ch/cyberduck/ui/cocoa/ConnectionController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/ConnectionController.java @@ -20,10 +20,6 @@ package ch.cyberduck.ui.cocoa; import ch.cyberduck.binding.Action; import ch.cyberduck.binding.Outlet; -import ch.cyberduck.binding.ProxyController; -import ch.cyberduck.binding.SheetController; -import ch.cyberduck.binding.WindowController; -import ch.cyberduck.binding.application.HyperlinkAttributedStringFactory; import ch.cyberduck.binding.application.NSButton; import ch.cyberduck.binding.application.NSCell; import ch.cyberduck.binding.application.NSColor; @@ -191,9 +187,9 @@ public class ConnectionController extends SheetController { */ private void updateIdentity() { final Protocol protocol = ProtocolFactory.forName(protocolPopup.selectedItem().representedObject()); - pkCheckbox.setEnabled(protocol.getType() == Protocol.Type.ssh); + pkCheckbox.setEnabled(protocol.getType() == Protocol.Type.sftp); if(StringUtils.isNotEmpty(hostField.stringValue())) { - final Credentials credentials = CredentialsConfiguratorFactory.get(protocol).configure(new Host(hostField.stringValue())); + final Credentials credentials = CredentialsConfiguratorFactory.get(protocol).configure(new Host(protocol, hostField.stringValue())); if(credentials.isPublicKeyAuthentication()) { // No previously manually selected key pkLabel.setStringValue(credentials.getIdentity().getAbbreviatedPath()); @@ -258,7 +254,7 @@ public class ConnectionController extends SheetController { } public void hostFieldTextDidChange(final NSNotification sender) { - if(ProtocolFactory.isURL(hostField.stringValue())) { + if(Scheme.isURL(hostField.stringValue())) { this.hostChanged(HostParser.parse(hostField.stringValue())); } this.updateURLLabel(); @@ -293,7 +289,9 @@ public class ConnectionController extends SheetController { if(!preferences.getBoolean("connection.hostname.check")) { return reachable = true; } - return reachable = ReachabilityFactory.get().isReachable(new Host(hostname)); + return reachable = ReachabilityFactory.get().isReachable(new Host(ProtocolFactory.forName( + protocolPopup.selectedItem().representedObject()), + hostname)); } @Override diff --git a/source/ch/cyberduck/ui/cocoa/ConnectionControllerFactory.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/ConnectionControllerFactory.java similarity index 97% rename from source/ch/cyberduck/ui/cocoa/ConnectionControllerFactory.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/ConnectionControllerFactory.java index 5ea218177e..4a6ecb54e5 100644 --- a/source/ch/cyberduck/ui/cocoa/ConnectionControllerFactory.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/ConnectionControllerFactory.java @@ -17,7 +17,6 @@ package ch.cyberduck.ui.cocoa; * Bug fixes, suggestions and comments should be sent to feedback@cyberduck.ch */ -import ch.cyberduck.binding.WindowController; import ch.cyberduck.binding.application.NSApplication; import java.util.HashMap; diff --git a/source/ch/cyberduck/ui/cocoa/CopyPromptController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/CopyPromptController.java similarity index 96% rename from source/ch/cyberduck/ui/cocoa/CopyPromptController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/CopyPromptController.java index 9d4e30479d..544f993d2d 100644 --- a/source/ch/cyberduck/ui/cocoa/CopyPromptController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/CopyPromptController.java @@ -17,7 +17,6 @@ package ch.cyberduck.ui.cocoa; * Bug fixes, suggestions and comments should be sent to feedback@cyberduck.ch */ -import ch.cyberduck.binding.WindowController; import ch.cyberduck.core.Session; import ch.cyberduck.core.transfer.CopyTransfer; diff --git a/source/ch/cyberduck/ui/cocoa/CreateFileController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/CreateFileController.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/CreateFileController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/CreateFileController.java diff --git a/source/ch/cyberduck/ui/cocoa/CreateSymlinkController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/CreateSymlinkController.java similarity index 98% rename from source/ch/cyberduck/ui/cocoa/CreateSymlinkController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/CreateSymlinkController.java index 9a48a785c2..d7c15caef5 100644 --- a/source/ch/cyberduck/ui/cocoa/CreateSymlinkController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/CreateSymlinkController.java @@ -28,7 +28,7 @@ import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.features.Symlink; import ch.cyberduck.core.preferences.PreferencesFactory; import ch.cyberduck.core.resources.IconCacheFactory; -import ch.cyberduck.ui.cocoa.threading.BrowserControllerBackgroundAction; +import ch.cyberduck.core.threading.BrowserControllerBackgroundAction; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; diff --git a/source/ch/cyberduck/ui/cocoa/DeleteController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/DeleteController.java similarity index 98% rename from source/ch/cyberduck/ui/cocoa/DeleteController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/DeleteController.java index 8727d8a296..1d432f34d0 100644 --- a/source/ch/cyberduck/ui/cocoa/DeleteController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/DeleteController.java @@ -18,7 +18,6 @@ package ch.cyberduck.ui.cocoa; * feedback@cyberduck.io */ -import ch.cyberduck.binding.ProxyController; import ch.cyberduck.binding.application.NSAlert; import ch.cyberduck.binding.application.SheetCallback; import ch.cyberduck.core.LocaleFactory; diff --git a/source/ch/cyberduck/ui/cocoa/DownloadController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/DownloadController.java similarity index 97% rename from source/ch/cyberduck/ui/cocoa/DownloadController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/DownloadController.java index ffac5beb1d..50128bd894 100644 --- a/source/ch/cyberduck/ui/cocoa/DownloadController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/DownloadController.java @@ -18,8 +18,6 @@ package ch.cyberduck.ui.cocoa; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.AlertController; -import ch.cyberduck.binding.WindowController; import ch.cyberduck.binding.application.NSAlert; import ch.cyberduck.binding.application.NSTextField; import ch.cyberduck.binding.application.NSWindow; diff --git a/source/ch/cyberduck/ui/cocoa/DownloadPromptController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/DownloadPromptController.java similarity index 96% rename from source/ch/cyberduck/ui/cocoa/DownloadPromptController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/DownloadPromptController.java index 6d3d645473..80d6b10a2f 100644 --- a/source/ch/cyberduck/ui/cocoa/DownloadPromptController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/DownloadPromptController.java @@ -18,7 +18,6 @@ package ch.cyberduck.ui.cocoa; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.WindowController; import ch.cyberduck.core.Session; import ch.cyberduck.core.transfer.DownloadTransfer; diff --git a/source/ch/cyberduck/ui/cocoa/DownloadPromptModel.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/DownloadPromptModel.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/DownloadPromptModel.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/DownloadPromptModel.java diff --git a/source/ch/cyberduck/ui/cocoa/DuplicateFileController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/DuplicateFileController.java similarity index 90% rename from source/ch/cyberduck/ui/cocoa/DuplicateFileController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/DuplicateFileController.java index 000c0ff900..6151db92d8 100644 --- a/source/ch/cyberduck/ui/cocoa/DuplicateFileController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/DuplicateFileController.java @@ -22,11 +22,16 @@ import ch.cyberduck.binding.application.NSAlert; import ch.cyberduck.binding.application.NSImage; import ch.cyberduck.binding.application.NSWindow; import ch.cyberduck.core.Cache; +import ch.cyberduck.core.Host; import ch.cyberduck.core.LocaleFactory; import ch.cyberduck.core.Path; +import ch.cyberduck.core.SessionFactory; import ch.cyberduck.core.UserDateFormatterFactory; import ch.cyberduck.core.preferences.PreferencesFactory; import ch.cyberduck.core.resources.IconCacheFactory; +import ch.cyberduck.core.ssl.DefaultTrustManagerHostnameCallback; +import ch.cyberduck.core.ssl.KeychainX509KeyManager; +import ch.cyberduck.core.ssl.KeychainX509TrustManager; import ch.cyberduck.core.threading.DefaultMainAction; import ch.cyberduck.core.transfer.CopyTransfer; @@ -93,7 +98,9 @@ public class DuplicateFileController extends FileController { new OverwriteController(parent).overwrite(new ArrayList(selected.values()), new DefaultMainAction() { @Override public void run() { - parent.transfer(new CopyTransfer(parent.getSession().getHost(), parent.getSession().getHost(), selected), + final Host target = parent.getSession().getHost(); + parent.transfer(new CopyTransfer(parent.getSession().getHost(), + SessionFactory.create(target), selected), new ArrayList(selected.values()), true); } }); diff --git a/source/ch/cyberduck/ui/cocoa/FileController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/FileController.java similarity index 98% rename from source/ch/cyberduck/ui/cocoa/FileController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/FileController.java index 53e1c182f7..e463efb384 100644 --- a/source/ch/cyberduck/ui/cocoa/FileController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/FileController.java @@ -18,7 +18,6 @@ package ch.cyberduck.ui.cocoa; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.AlertController; import ch.cyberduck.binding.Outlet; import ch.cyberduck.binding.application.NSAlert; import ch.cyberduck.binding.application.NSTextField; diff --git a/source/ch/cyberduck/ui/cocoa/FolderController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/FolderController.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/FolderController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/FolderController.java diff --git a/source/ch/cyberduck/ui/cocoa/GotoController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/GotoController.java similarity index 98% rename from source/ch/cyberduck/ui/cocoa/GotoController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/GotoController.java index 02efbafb4e..ea06516603 100644 --- a/source/ch/cyberduck/ui/cocoa/GotoController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/GotoController.java @@ -18,10 +18,8 @@ package ch.cyberduck.ui.cocoa; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.AlertController; import ch.cyberduck.binding.Delegate; import ch.cyberduck.binding.Outlet; -import ch.cyberduck.binding.ProxyController; import ch.cyberduck.binding.application.NSAlert; import ch.cyberduck.binding.application.NSComboBox; import ch.cyberduck.binding.application.NSImage; diff --git a/source/ch/cyberduck/binding/application/HyperlinkAttributedStringFactory.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/HyperlinkAttributedStringFactory.java similarity index 96% rename from source/ch/cyberduck/binding/application/HyperlinkAttributedStringFactory.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/HyperlinkAttributedStringFactory.java index 25f3f949dd..2ace54f1f3 100644 --- a/source/ch/cyberduck/binding/application/HyperlinkAttributedStringFactory.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/HyperlinkAttributedStringFactory.java @@ -1,4 +1,4 @@ -package ch.cyberduck.binding.application; +package ch.cyberduck.ui.cocoa; /* * Copyright (c) 2008 David Kocher. All rights reserved. @@ -18,13 +18,14 @@ package ch.cyberduck.binding.application; * dkocher@cyberduck.ch */ -import ch.cyberduck.core.DescriptiveUrl; -import ch.cyberduck.core.Local; +import ch.cyberduck.binding.application.NSColor; +import ch.cyberduck.binding.application.NSFont; import ch.cyberduck.binding.foundation.NSAttributedString; import ch.cyberduck.binding.foundation.NSMutableAttributedString; import ch.cyberduck.binding.foundation.NSNumber; import ch.cyberduck.binding.foundation.NSRange; -import ch.cyberduck.binding.BundleController; +import ch.cyberduck.core.DescriptiveUrl; +import ch.cyberduck.core.Local; import org.apache.commons.lang3.StringUtils; import org.rococoa.cocoa.foundation.NSUInteger; diff --git a/source/ch/cyberduck/ui/cocoa/InfoController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/InfoController.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/InfoController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/InfoController.java index 357858de22..e252e860a0 100644 --- a/source/ch/cyberduck/ui/cocoa/InfoController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/InfoController.java @@ -61,7 +61,8 @@ import ch.cyberduck.core.logging.LoggingConfiguration; import ch.cyberduck.core.preferences.Preferences; import ch.cyberduck.core.preferences.PreferencesFactory; import ch.cyberduck.core.resources.IconCacheFactory; -import ch.cyberduck.core.s3.VersioningConfiguration; +import ch.cyberduck.core.VersioningConfiguration; +import ch.cyberduck.core.s3.S3Protocol; import ch.cyberduck.core.threading.WorkerBackgroundAction; import ch.cyberduck.core.worker.CalculateSizeWorker; import ch.cyberduck.core.worker.ReadAclWorker; @@ -73,11 +74,12 @@ import ch.cyberduck.core.worker.WriteEncryptionWorker; import ch.cyberduck.core.worker.WriteMetadataWorker; import ch.cyberduck.core.worker.WritePermissionWorker; import ch.cyberduck.core.worker.WriteRedundancyWorker; -import ch.cyberduck.ui.cocoa.threading.BrowserControllerBackgroundAction; -import ch.cyberduck.ui.cocoa.threading.WindowMainAction; +import ch.cyberduck.core.threading.BrowserControllerBackgroundAction; +import ch.cyberduck.core.threading.WindowMainAction; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; +import org.jets3t.service.model.S3Object; import org.rococoa.Foundation; import org.rococoa.ID; import org.rococoa.Selector; @@ -658,6 +660,7 @@ public class InfoController extends ToolbarWindowController { controller.getSession().getFeature(Lifecycle.class).setConfiguration(containerService.getContainer(getSelected()), new LifecycleConfiguration( lifecycleTransitionCheckbox.state() == NSCell.NSOnState ? Integer.valueOf(lifecycleTransitionPopup.selectedItem().representedObject()) : null, + S3Object.STORAGE_CLASS_GLACIER, lifecycleDeleteCheckbox.state() == NSCell.NSOnState ? Integer.valueOf(lifecycleDeletePopup.selectedItem().representedObject()) : null) ); return null; @@ -1417,7 +1420,7 @@ public class InfoController extends ToolbarWindowController { } else { // CloudFront is the default for custom distributions - item.setImage(IconCacheFactory.get().iconNamed(ProtocolFactory.S3_SSL.disk(), 32)); + item.setImage(IconCacheFactory.get().iconNamed(new S3Protocol().disk(), 32)); } break; case s3: @@ -1428,8 +1431,8 @@ public class InfoController extends ToolbarWindowController { } else { // Currently these settings are only available for Amazon S3 - item.setLabel(ProtocolFactory.S3_SSL.getName()); - item.setImage(IconCacheFactory.get().iconNamed(ProtocolFactory.S3_SSL.disk(), 32)); + item.setLabel(new S3Protocol().getName()); + item.setImage(IconCacheFactory.get().iconNamed(new S3Protocol().disk(), 32)); } break; case metadata: diff --git a/source/ch/cyberduck/ui/cocoa/InfoControllerFactory.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/InfoControllerFactory.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/InfoControllerFactory.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/InfoControllerFactory.java index 3c6245618f..948bab3ee2 100644 --- a/source/ch/cyberduck/ui/cocoa/InfoControllerFactory.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/InfoControllerFactory.java @@ -1,8 +1,8 @@ package ch.cyberduck.ui.cocoa; +import ch.cyberduck.binding.foundation.NSNotification; import ch.cyberduck.core.Path; import ch.cyberduck.core.preferences.PreferencesFactory; -import ch.cyberduck.binding.foundation.NSNotification; import java.util.HashMap; import java.util.List; diff --git a/source/ch/cyberduck/ui/cocoa/ListDataSource.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/ListDataSource.java similarity index 98% rename from source/ch/cyberduck/ui/cocoa/ListDataSource.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/ListDataSource.java index 8c76b2a13d..af0f55d6bd 100644 --- a/source/ch/cyberduck/ui/cocoa/ListDataSource.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/ListDataSource.java @@ -18,7 +18,6 @@ package ch.cyberduck.ui.cocoa; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.ProxyController; import ch.cyberduck.binding.application.NSDraggingInfo; import ch.cyberduck.binding.application.NSDraggingSource; import ch.cyberduck.binding.application.NSImage; diff --git a/source/ch/cyberduck/ui/cocoa/MainApplication.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/MainApplication.java similarity index 83% rename from source/ch/cyberduck/ui/cocoa/MainApplication.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/MainApplication.java index e480b4e505..8cdbdb8074 100644 --- a/source/ch/cyberduck/ui/cocoa/MainApplication.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/MainApplication.java @@ -21,9 +21,18 @@ package ch.cyberduck.ui.cocoa; import ch.cyberduck.binding.application.NSApplication; import ch.cyberduck.binding.foundation.NSBundle; import ch.cyberduck.core.ProtocolFactory; -import ch.cyberduck.core.preferences.ApplicationUserDefaultsPreferences; +import ch.cyberduck.core.azure.AzureProtocol; +import ch.cyberduck.core.dav.DAVProtocol; +import ch.cyberduck.core.dav.DAVSSLProtocol; +import ch.cyberduck.core.ftp.FTPProtocol; +import ch.cyberduck.core.ftp.FTPTLSProtocol; +import ch.cyberduck.core.gstorage.GoogleStorageProtocol; +import ch.cyberduck.core.irods.IRODSProtocol; +import ch.cyberduck.core.openstack.SwiftProtocol; import ch.cyberduck.core.preferences.Preferences; import ch.cyberduck.core.preferences.PreferencesFactory; +import ch.cyberduck.core.s3.S3Protocol; +import ch.cyberduck.core.sftp.SFTPProtocol; import ch.cyberduck.core.threading.ActionOperationBatcher; import ch.cyberduck.core.threading.AutoreleaseActionOperationBatcher; import ch.cyberduck.core.threading.LoggingUncaughtExceptionHandler; @@ -57,7 +66,8 @@ public final class MainApplication { // Register factory implementations. final Preferences preferences = new ApplicationUserDefaultsPreferences(); PreferencesFactory.set(preferences); - ProtocolFactory.register(); + ProtocolFactory.register(new FTPProtocol(), new FTPTLSProtocol(), new SFTPProtocol(), new DAVProtocol(), new DAVSSLProtocol(), new SwiftProtocol(), new S3Protocol(), + new GoogleStorageProtocol(), new AzureProtocol(), new IRODSProtocol()); if(log.isInfoEnabled()) { log.info(String.format("Running version %s", NSBundle.mainBundle() diff --git a/source/ch/cyberduck/ui/cocoa/MainController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/MainController.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/MainController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/MainController.java index eba76c885e..896ad3d8be 100644 --- a/source/ch/cyberduck/ui/cocoa/MainController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/MainController.java @@ -19,13 +19,8 @@ package ch.cyberduck.ui.cocoa; */ import ch.cyberduck.binding.Action; -import ch.cyberduck.binding.AlertController; -import ch.cyberduck.binding.BundleController; import ch.cyberduck.binding.Delegate; import ch.cyberduck.binding.Outlet; -import ch.cyberduck.binding.ProxyController; -import ch.cyberduck.binding.SheetController; -import ch.cyberduck.binding.WindowController; import ch.cyberduck.binding.application.*; import ch.cyberduck.binding.foundation.NSAppleEventDescriptor; import ch.cyberduck.binding.foundation.NSAppleEventManager; @@ -979,6 +974,7 @@ public class MainController extends BundleController implements NSApplication.De } }); final Rendezvous bonjour = RendezvousFactory.instance(); + bonjour.addListener(new NotificationRendezvousListener(bonjour)); if(preferences.getBoolean("defaulthandler.reminder") && preferences.getInteger("uses") > 0) { diff --git a/source/ch/cyberduck/ui/cocoa/MoveController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/MoveController.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/MoveController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/MoveController.java index 16c4c574e4..3eb60f4191 100644 --- a/source/ch/cyberduck/ui/cocoa/MoveController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/MoveController.java @@ -18,7 +18,6 @@ package ch.cyberduck.ui.cocoa; * feedback@cyberduck.io */ -import ch.cyberduck.binding.ProxyController; import ch.cyberduck.binding.application.NSAlert; import ch.cyberduck.binding.application.NSCell; import ch.cyberduck.binding.application.SheetCallback; diff --git a/source/ch/cyberduck/ui/cocoa/OutlineDataSource.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/OutlineDataSource.java similarity index 98% rename from source/ch/cyberduck/ui/cocoa/OutlineDataSource.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/OutlineDataSource.java index 6de7aeef48..32950aa46f 100644 --- a/source/ch/cyberduck/ui/cocoa/OutlineDataSource.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/OutlineDataSource.java @@ -18,7 +18,6 @@ package ch.cyberduck.ui.cocoa; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.ProxyController; import ch.cyberduck.binding.application.NSDraggingInfo; import ch.cyberduck.binding.application.NSDraggingSource; import ch.cyberduck.binding.application.NSImage; diff --git a/source/ch/cyberduck/ui/cocoa/OutlineViewCellDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/OutlineViewCellDelegate.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/OutlineViewCellDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/OutlineViewCellDelegate.java diff --git a/source/ch/cyberduck/ui/cocoa/OverwriteController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/OverwriteController.java similarity index 98% rename from source/ch/cyberduck/ui/cocoa/OverwriteController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/OverwriteController.java index c0f9328c35..feb5b9423f 100644 --- a/source/ch/cyberduck/ui/cocoa/OverwriteController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/OverwriteController.java @@ -18,7 +18,6 @@ package ch.cyberduck.ui.cocoa; * feedback@cyberduck.io */ -import ch.cyberduck.binding.ProxyController; import ch.cyberduck.binding.application.NSAlert; import ch.cyberduck.binding.application.SheetCallback; import ch.cyberduck.core.LocaleFactory; diff --git a/source/ch/cyberduck/binding/PanelAlertCallback.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/PanelAlertCallback.java similarity index 94% rename from source/ch/cyberduck/binding/PanelAlertCallback.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/PanelAlertCallback.java index 5e8d5797ad..859537bb69 100644 --- a/source/ch/cyberduck/binding/PanelAlertCallback.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/PanelAlertCallback.java @@ -1,4 +1,4 @@ -package ch.cyberduck.binding; +package ch.cyberduck.ui.cocoa; /* * Copyright (c) 2002-2013 David Kocher. All rights reserved. @@ -29,9 +29,6 @@ import ch.cyberduck.core.notification.NotificationAlertCallback; import ch.cyberduck.core.threading.AlertCallback; import ch.cyberduck.core.threading.DefaultFailureDiagnostics; import ch.cyberduck.core.threading.FailureDiagnostics; -import ch.cyberduck.binding.AlertController; -import ch.cyberduck.ui.cocoa.TranscriptController; -import ch.cyberduck.binding.WindowController; import org.apache.commons.lang3.StringUtils; import org.rococoa.cocoa.foundation.NSRect; @@ -69,7 +66,7 @@ public class PanelAlertCallback implements AlertCallback { final AlertController c = new AlertController(controller, alert) { @Override public void callback(final int returncode) { - if(returncode == SheetCallback.ALTERNATE_OPTION) { + if(returncode == ALTERNATE_OPTION) { ReachabilityFactory.get().diagnose(host); } } diff --git a/source/ch/cyberduck/ui/cocoa/PreferencesController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/PreferencesController.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/PreferencesController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/PreferencesController.java index 06c2390bfb..6e2277538e 100644 --- a/source/ch/cyberduck/ui/cocoa/PreferencesController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/PreferencesController.java @@ -21,7 +21,6 @@ package ch.cyberduck.ui.cocoa; import ch.cyberduck.binding.Action; import ch.cyberduck.binding.Outlet; -import ch.cyberduck.binding.ProxyController; import ch.cyberduck.binding.application.*; import ch.cyberduck.binding.foundation.NSAppleScript; import ch.cyberduck.binding.foundation.NSArray; @@ -54,10 +53,11 @@ import ch.cyberduck.core.local.FileDescriptorFactory; import ch.cyberduck.core.preferences.Preferences; import ch.cyberduck.core.preferences.PreferencesFactory; import ch.cyberduck.core.resources.IconCacheFactory; +import ch.cyberduck.core.s3.S3Protocol; import ch.cyberduck.core.sparkle.Updater; import ch.cyberduck.core.transfer.TransferAction; import ch.cyberduck.core.urlhandler.SchemeHandlerFactory; -import ch.cyberduck.ui.cocoa.threading.WindowMainAction; +import ch.cyberduck.core.threading.WindowMainAction; import ch.cyberduck.ui.cocoa.view.BookmarkCell; import org.apache.commons.lang3.StringUtils; @@ -1912,7 +1912,7 @@ public class PreferencesController extends ToolbarWindowController { this.defaultBucketLocation = b; this.defaultBucketLocation.setAutoenablesItems(false); this.defaultBucketLocation.removeAllItems(); - for(Location.Name location : ProtocolFactory.S3_SSL.getRegions()) { + for(Location.Name location : new S3Protocol().getRegions()) { this.defaultBucketLocation.addItemWithTitle(location.toString()); this.defaultBucketLocation.lastItem().setRepresentedObject(location.getIdentifier()); } diff --git a/source/ch/cyberduck/ui/cocoa/PreferencesControllerFactory.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/PreferencesControllerFactory.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/PreferencesControllerFactory.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/PreferencesControllerFactory.java diff --git a/source/ch/cyberduck/ui/cocoa/ProgressController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/ProgressController.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/ProgressController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/ProgressController.java index c632071b5e..5fc171edfd 100644 --- a/source/ch/cyberduck/ui/cocoa/ProgressController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/ProgressController.java @@ -19,7 +19,6 @@ package ch.cyberduck.ui.cocoa; */ import ch.cyberduck.binding.Action; -import ch.cyberduck.binding.BundleController; import ch.cyberduck.binding.Delegate; import ch.cyberduck.binding.Outlet; import ch.cyberduck.binding.application.NSCell; @@ -32,7 +31,6 @@ import ch.cyberduck.binding.application.NSPopUpButton; import ch.cyberduck.binding.application.NSProgressIndicator; import ch.cyberduck.binding.application.NSTextField; import ch.cyberduck.binding.application.NSView; -import ch.cyberduck.binding.application.TableCellAttributes; import ch.cyberduck.binding.foundation.NSArray; import ch.cyberduck.binding.foundation.NSAttributedString; import ch.cyberduck.binding.foundation.NSDictionary; diff --git a/source/ch/cyberduck/ui/cocoa/PromptLimitedListProgressListener.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/PromptLimitedListProgressListener.java similarity index 97% rename from source/ch/cyberduck/ui/cocoa/PromptLimitedListProgressListener.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/PromptLimitedListProgressListener.java index 4500ca6484..a53cedd705 100644 --- a/source/ch/cyberduck/ui/cocoa/PromptLimitedListProgressListener.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/PromptLimitedListProgressListener.java @@ -18,8 +18,6 @@ package ch.cyberduck.ui.cocoa; * feedback@cyberduck.ch */ -import ch.cyberduck.binding.AlertController; -import ch.cyberduck.binding.WindowController; import ch.cyberduck.binding.application.NSAlert; import ch.cyberduck.binding.application.NSCell; import ch.cyberduck.binding.application.SheetCallback; diff --git a/source/ch/cyberduck/ui/cocoa/PromptLoginController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/PromptLoginController.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/PromptLoginController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/PromptLoginController.java index 7b1f1a97cb..7d0fbd94ba 100644 --- a/source/ch/cyberduck/ui/cocoa/PromptLoginController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/PromptLoginController.java @@ -20,9 +20,6 @@ package ch.cyberduck.ui.cocoa; import ch.cyberduck.binding.Action; import ch.cyberduck.binding.Outlet; -import ch.cyberduck.binding.SheetController; -import ch.cyberduck.binding.WindowController; -import ch.cyberduck.binding.application.HyperlinkAttributedStringFactory; import ch.cyberduck.binding.application.NSAlert; import ch.cyberduck.binding.application.NSButton; import ch.cyberduck.binding.application.NSCell; diff --git a/source/ch/cyberduck/ui/cocoa/PromptRedirectCallback.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/PromptRedirectCallback.java similarity index 94% rename from source/ch/cyberduck/ui/cocoa/PromptRedirectCallback.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/PromptRedirectCallback.java index 9c2229aa60..00cb607a4c 100644 --- a/source/ch/cyberduck/ui/cocoa/PromptRedirectCallback.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/PromptRedirectCallback.java @@ -18,9 +18,6 @@ package ch.cyberduck.ui.cocoa; * feedback@cyberduck.ch */ -import ch.cyberduck.binding.AlertController; -import ch.cyberduck.binding.SheetController; -import ch.cyberduck.binding.WindowController; import ch.cyberduck.binding.application.NSAlert; import ch.cyberduck.binding.application.SheetCallback; import ch.cyberduck.core.LocaleFactory; diff --git a/source/ch/cyberduck/binding/ProxyController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/ProxyController.java similarity index 58% rename from source/ch/cyberduck/binding/ProxyController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/ProxyController.java index 98ede69913..5540c7c390 100644 --- a/source/ch/cyberduck/binding/ProxyController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/ProxyController.java @@ -1,4 +1,4 @@ -package ch.cyberduck.binding; +package ch.cyberduck.ui.cocoa; /* * Copyright (c) 2005 David Kocher. All rights reserved. @@ -18,51 +18,23 @@ package ch.cyberduck.binding; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.foundation.NSNotificationCenter; -import ch.cyberduck.binding.foundation.NSObject; -import ch.cyberduck.binding.foundation.NSThread; +import ch.cyberduck.binding.Proxy; import ch.cyberduck.core.AbstractController; import ch.cyberduck.core.threading.MainAction; import org.apache.log4j.Logger; -import org.rococoa.Foundation; import org.rococoa.ID; -import org.rococoa.Rococoa; /** * @version $Id$ */ public class ProxyController extends AbstractController { - private static Logger log = Logger.getLogger(ProxyController.class); + private static final Logger log = Logger.getLogger(ProxyController.class); - /** - * You need to keep a reference to the returned value for as long as it is - * active. When it is GCd, it will release the Objective-C proxy. - */ - private NSObject proxy; - - private ID id; - - public NSObject proxy() { - return this.proxy(NSObject.class); - } - - protected NSObject proxy(Class type) { - if(null == proxy) { - proxy = Rococoa.proxy(this, type); - } - return proxy; - } + private final Proxy proxy = new Proxy(); public ID id() { - return this.id(NSObject.class); - } - - protected ID id(Class type) { - if(null == id) { - id = this.proxy(type).id(); - } - return id; + return proxy.id(); } /** @@ -74,9 +46,7 @@ public class ProxyController extends AbstractController { if(log.isDebugEnabled()) { log.debug(String.format("Invalidate controller %s", this)); } - if(id != null) { - NSNotificationCenter.defaultCenter().removeObserver(id); - } + proxy.invalidate(); super.invalidate(); } @@ -85,7 +55,7 @@ public class ProxyController extends AbstractController { * encompasses the application’s main run loop, and is where the NSApplication object receives * events. The message in this case is a method of the current object that you want to execute * on the thread. - *

+ *

* Execute the passed Runnable on the main thread also known as NSRunLoop.DefaultRunLoopMode * * @param runnable The Runnable to run @@ -100,24 +70,6 @@ public class ProxyController extends AbstractController { if(!runnable.isValid()) { return; } - if(NSThread.isMainThread()) { - if(log.isDebugEnabled()) { - log.debug(String.format("Already on main thread. Invoke %s directly.", runnable)); - } - runnable.run(); - return; - } - synchronized(runnable.lock()) { - if(log.isTraceEnabled()) { - log.trace(String.format("Invoke runnable %s on main thread", runnable)); - } - try { - //Defer to main thread - Foundation.runOnMainThread(runnable, wait); - } - catch(Exception e) { - log.error(String.format("Exception %s running task on main thread", e.getMessage()), e); - } - } + proxy.invoke(runnable, runnable.lock(), wait); } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/cocoa/RevertController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/RevertController.java similarity index 97% rename from source/ch/cyberduck/ui/cocoa/RevertController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/RevertController.java index 839da8ee6b..779d3d97e3 100644 --- a/source/ch/cyberduck/ui/cocoa/RevertController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/RevertController.java @@ -18,7 +18,6 @@ package ch.cyberduck.ui.cocoa; * feedback@cyberduck.io */ -import ch.cyberduck.binding.ProxyController; import ch.cyberduck.core.Path; import ch.cyberduck.core.threading.WorkerBackgroundAction; import ch.cyberduck.core.worker.RevertWorker; diff --git a/source/ch/cyberduck/binding/SheetController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/SheetController.java similarity index 98% rename from source/ch/cyberduck/binding/SheetController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/SheetController.java index 7fa0847f6d..262685bba6 100644 --- a/source/ch/cyberduck/binding/SheetController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/SheetController.java @@ -1,4 +1,4 @@ -package ch.cyberduck.binding; +package ch.cyberduck.ui.cocoa; /* * Copyright (c) 2005 David Kocher. All rights reserved. @@ -18,14 +18,15 @@ package ch.cyberduck.binding; * dkocher@cyberduck.ch */ +import ch.cyberduck.binding.Action; import ch.cyberduck.binding.application.AppKitFunctionsLibrary; import ch.cyberduck.binding.application.NSApplication; import ch.cyberduck.binding.application.NSButton; import ch.cyberduck.binding.application.NSWindow; +import ch.cyberduck.binding.application.PanelReturnCodeMapper; import ch.cyberduck.binding.application.SheetCallback; import ch.cyberduck.binding.foundation.NSThread; import ch.cyberduck.core.threading.ControllerMainAction; -import ch.cyberduck.binding.application.PanelReturnCodeMapper; import org.apache.log4j.Logger; import org.rococoa.Foundation; diff --git a/source/ch/cyberduck/ui/cocoa/SyncPromptController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/SyncPromptController.java similarity index 98% rename from source/ch/cyberduck/ui/cocoa/SyncPromptController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/SyncPromptController.java index 7565173bd4..00a06e52c6 100644 --- a/source/ch/cyberduck/ui/cocoa/SyncPromptController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/SyncPromptController.java @@ -18,7 +18,6 @@ package ch.cyberduck.ui.cocoa; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.WindowController; import ch.cyberduck.binding.application.NSOutlineView; import ch.cyberduck.binding.application.NSTableColumn; import ch.cyberduck.binding.application.NSText; diff --git a/source/ch/cyberduck/ui/cocoa/SyncPromptModel.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/SyncPromptModel.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/SyncPromptModel.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/SyncPromptModel.java diff --git a/source/ch/cyberduck/binding/application/TableCellAttributes.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/TableCellAttributes.java similarity index 98% rename from source/ch/cyberduck/binding/application/TableCellAttributes.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/TableCellAttributes.java index a4bd637655..46dede8176 100644 --- a/source/ch/cyberduck/binding/application/TableCellAttributes.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/TableCellAttributes.java @@ -1,4 +1,4 @@ -package ch.cyberduck.binding.application; +package ch.cyberduck.ui.cocoa; /* * Copyright (c) 2008 David Kocher. All rights reserved. @@ -18,7 +18,6 @@ package ch.cyberduck.binding.application; * dkocher@cyberduck.ch */ -import ch.cyberduck.core.preferences.PreferencesFactory; import ch.cyberduck.binding.application.NSFont; import ch.cyberduck.binding.application.NSMutableParagraphStyle; import ch.cyberduck.binding.application.NSParagraphStyle; @@ -26,6 +25,7 @@ import ch.cyberduck.binding.application.NSText; import ch.cyberduck.binding.foundation.NSArray; import ch.cyberduck.binding.foundation.NSAttributedString; import ch.cyberduck.binding.foundation.NSDictionary; +import ch.cyberduck.core.preferences.PreferencesFactory; /** * @version $Id$ diff --git a/source/ch/cyberduck/ui/cocoa/TableColumnFactory.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/TableColumnFactory.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/TableColumnFactory.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/TableColumnFactory.java diff --git a/source/ch/cyberduck/ui/cocoa/TableDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/TableDelegate.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/TableDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/TableDelegate.java diff --git a/source/ch/cyberduck/ui/cocoa/TableViewCellDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/TableViewCellDelegate.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/TableViewCellDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/TableViewCellDelegate.java diff --git a/source/ch/cyberduck/ui/cocoa/TaskController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/TaskController.java similarity index 98% rename from source/ch/cyberduck/ui/cocoa/TaskController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/TaskController.java index 4f0ee350d8..a9a5360b09 100644 --- a/source/ch/cyberduck/ui/cocoa/TaskController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/TaskController.java @@ -18,16 +18,15 @@ package ch.cyberduck.ui.cocoa; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.BundleController; import ch.cyberduck.binding.Outlet; -import ch.cyberduck.core.Host; -import ch.cyberduck.core.exception.BackgroundException; -import ch.cyberduck.core.threading.BackgroundAction; -import ch.cyberduck.core.threading.BackgroundActionListener; import ch.cyberduck.binding.application.NSButton; import ch.cyberduck.binding.application.NSProgressIndicator; import ch.cyberduck.binding.application.NSTextField; import ch.cyberduck.binding.application.NSView; +import ch.cyberduck.core.Host; +import ch.cyberduck.core.exception.BackgroundException; +import ch.cyberduck.core.threading.BackgroundAction; +import ch.cyberduck.core.threading.BackgroundActionListener; import org.rococoa.Foundation; import org.rococoa.ID; diff --git a/source/ch/cyberduck/ui/cocoa/ToolbarFactory.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/ToolbarFactory.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/ToolbarFactory.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/ToolbarFactory.java diff --git a/source/ch/cyberduck/ui/cocoa/ToolbarValidator.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/ToolbarValidator.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/ToolbarValidator.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/ToolbarValidator.java diff --git a/source/ch/cyberduck/ui/cocoa/ToolbarWindowController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/ToolbarWindowController.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/ToolbarWindowController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/ToolbarWindowController.java index efc5dd5a8e..0d7398247b 100644 --- a/source/ch/cyberduck/ui/cocoa/ToolbarWindowController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/ToolbarWindowController.java @@ -19,7 +19,6 @@ package ch.cyberduck.ui.cocoa; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.WindowController; import ch.cyberduck.binding.application.NSImage; import ch.cyberduck.binding.application.NSTabView; import ch.cyberduck.binding.application.NSTabViewItem; diff --git a/source/ch/cyberduck/ui/cocoa/TranscriptController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/TranscriptController.java similarity index 98% rename from source/ch/cyberduck/ui/cocoa/TranscriptController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/TranscriptController.java index d1d2e7caab..00875afe81 100644 --- a/source/ch/cyberduck/ui/cocoa/TranscriptController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/TranscriptController.java @@ -18,7 +18,6 @@ package ch.cyberduck.ui.cocoa; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.BundleController; import ch.cyberduck.binding.Outlet; import ch.cyberduck.binding.application.NSColor; import ch.cyberduck.binding.application.NSFont; diff --git a/source/ch/cyberduck/ui/cocoa/TransferController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/TransferController.java similarity index 98% rename from source/ch/cyberduck/ui/cocoa/TransferController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/TransferController.java index aece0839c6..93d54adc27 100644 --- a/source/ch/cyberduck/ui/cocoa/TransferController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/TransferController.java @@ -22,7 +22,6 @@ package ch.cyberduck.ui.cocoa; import ch.cyberduck.binding.Action; import ch.cyberduck.binding.Delegate; import ch.cyberduck.binding.Outlet; -import ch.cyberduck.binding.WindowController; import ch.cyberduck.binding.application.*; import ch.cyberduck.binding.foundation.NSArray; import ch.cyberduck.binding.foundation.NSIndexSet; @@ -49,9 +48,6 @@ import ch.cyberduck.core.pasteboard.PathPasteboardFactory; import ch.cyberduck.core.preferences.Preferences; import ch.cyberduck.core.preferences.PreferencesFactory; import ch.cyberduck.core.resources.IconCacheFactory; -import ch.cyberduck.core.ssl.DefaultTrustManagerHostnameCallback; -import ch.cyberduck.core.ssl.KeychainX509KeyManager; -import ch.cyberduck.core.ssl.KeychainX509TrustManager; import ch.cyberduck.core.threading.BackgroundAction; import ch.cyberduck.core.threading.BackgroundActionRegistry; import ch.cyberduck.core.threading.ControllerMainAction; @@ -68,7 +64,7 @@ import ch.cyberduck.core.transfer.TransferQueueFactory; import ch.cyberduck.core.transfer.TransferSpeedometer; import ch.cyberduck.ui.browser.DownloadDirectoryFinder; import ch.cyberduck.ui.cocoa.delegate.AbstractMenuDelegate; -import ch.cyberduck.ui.cocoa.threading.WindowMainAction; +import ch.cyberduck.core.threading.WindowMainAction; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; @@ -705,9 +701,7 @@ public final class TransferController extends WindowController implements NSTool */ public void start(final Transfer transfer, final TransferOptions options, final TransferCallback callback) { final ProgressController progress = transferTableModel.getController(transfer); - final Session session = SessionFactory.create(transfer.getHost(), - new KeychainX509TrustManager(new DefaultTrustManagerHostnameCallback(transfer.getHost()), this), - new KeychainX509KeyManager(this)); + final Session session = SessionFactory.create(transfer.getHost()); final BackgroundAction action = new TransferCollectionBackgroundAction(this, session, new TransferListener() { diff --git a/source/ch/cyberduck/ui/cocoa/TransferControllerFactory.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/TransferControllerFactory.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/TransferControllerFactory.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/TransferControllerFactory.java diff --git a/source/ch/cyberduck/ui/cocoa/TransferPromptController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/TransferPromptController.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/TransferPromptController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/TransferPromptController.java index 2b04b7d18d..d0c412406e 100644 --- a/source/ch/cyberduck/ui/cocoa/TransferPromptController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/TransferPromptController.java @@ -21,8 +21,6 @@ package ch.cyberduck.ui.cocoa; import ch.cyberduck.binding.Action; import ch.cyberduck.binding.Delegate; import ch.cyberduck.binding.Outlet; -import ch.cyberduck.binding.SheetController; -import ch.cyberduck.binding.WindowController; import ch.cyberduck.binding.application.*; import ch.cyberduck.binding.foundation.NSAttributedString; import ch.cyberduck.binding.foundation.NSNotification; diff --git a/source/ch/cyberduck/ui/cocoa/TransferPromptModel.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/TransferPromptModel.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/TransferPromptModel.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/TransferPromptModel.java index 0d7c123b93..7b1bc48cf1 100644 --- a/source/ch/cyberduck/ui/cocoa/TransferPromptModel.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/TransferPromptModel.java @@ -22,7 +22,6 @@ import ch.cyberduck.binding.application.NSCell; import ch.cyberduck.binding.application.NSImage; import ch.cyberduck.binding.application.NSOutlineView; import ch.cyberduck.binding.application.NSTableColumn; -import ch.cyberduck.binding.application.TableCellAttributes; import ch.cyberduck.binding.foundation.NSAttributedString; import ch.cyberduck.binding.foundation.NSNumber; import ch.cyberduck.binding.foundation.NSObject; diff --git a/source/ch/cyberduck/ui/cocoa/TransferTableDataSource.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/TransferTableDataSource.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/TransferTableDataSource.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/TransferTableDataSource.java diff --git a/source/ch/cyberduck/ui/cocoa/TransferToolbarFactory.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/TransferToolbarFactory.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/TransferToolbarFactory.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/TransferToolbarFactory.java diff --git a/source/ch/cyberduck/ui/cocoa/TransferToolbarValidator.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/TransferToolbarValidator.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/TransferToolbarValidator.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/TransferToolbarValidator.java diff --git a/source/ch/cyberduck/ui/cocoa/UploadPromptController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/UploadPromptController.java similarity index 96% rename from source/ch/cyberduck/ui/cocoa/UploadPromptController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/UploadPromptController.java index e8c592e283..2472680e1a 100644 --- a/source/ch/cyberduck/ui/cocoa/UploadPromptController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/UploadPromptController.java @@ -18,7 +18,6 @@ package ch.cyberduck.ui.cocoa; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.WindowController; import ch.cyberduck.core.Session; import ch.cyberduck.core.transfer.UploadTransfer; diff --git a/source/ch/cyberduck/ui/cocoa/UploadPromptModel.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/UploadPromptModel.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/UploadPromptModel.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/UploadPromptModel.java diff --git a/source/ch/cyberduck/ui/cocoa/UserDefaultsDateFormatter.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/UserDefaultsDateFormatter.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/UserDefaultsDateFormatter.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/UserDefaultsDateFormatter.java index 132b2ae903..eebd47dca9 100644 --- a/source/ch/cyberduck/ui/cocoa/UserDefaultsDateFormatter.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/UserDefaultsDateFormatter.java @@ -18,12 +18,12 @@ package ch.cyberduck.ui.cocoa; * dkocher@cyberduck.ch */ -import ch.cyberduck.core.LocaleFactory; -import ch.cyberduck.core.date.AbstractUserDateFormatter; -import ch.cyberduck.core.date.UserDateFormatter; import ch.cyberduck.binding.foundation.NSDate; import ch.cyberduck.binding.foundation.NSDateFormatter; import ch.cyberduck.binding.foundation.NSLocale; +import ch.cyberduck.core.LocaleFactory; +import ch.cyberduck.core.date.AbstractUserDateFormatter; +import ch.cyberduck.core.date.UserDateFormatter; /** * @version $Id$ diff --git a/source/ch/cyberduck/binding/WindowController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/WindowController.java similarity index 99% rename from source/ch/cyberduck/binding/WindowController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/WindowController.java index af8a513349..f6634482d1 100644 --- a/source/ch/cyberduck/binding/WindowController.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/WindowController.java @@ -1,4 +1,4 @@ -package ch.cyberduck.binding; +package ch.cyberduck.ui.cocoa; /* * Copyright (c) 2005 David Kocher. All rights reserved. @@ -18,6 +18,8 @@ package ch.cyberduck.binding; * dkocher@cyberduck.ch */ +import ch.cyberduck.binding.Action; +import ch.cyberduck.binding.Outlet; import ch.cyberduck.binding.application.NSAlert; import ch.cyberduck.binding.application.NSButton; import ch.cyberduck.binding.application.NSCell; @@ -29,6 +31,7 @@ import ch.cyberduck.binding.application.NSTextView; import ch.cyberduck.binding.application.NSView; import ch.cyberduck.binding.application.NSWindow; import ch.cyberduck.binding.application.SheetCallback; +import ch.cyberduck.binding.application.WindowListener; import ch.cyberduck.binding.foundation.NSAttributedString; import ch.cyberduck.binding.foundation.NSDictionary; import ch.cyberduck.binding.foundation.NSNotification; @@ -37,7 +40,6 @@ import ch.cyberduck.core.LocaleFactory; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.local.BrowserLauncherFactory; import ch.cyberduck.core.preferences.PreferencesFactory; -import ch.cyberduck.binding.application.WindowListener; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; diff --git a/source/ch/cyberduck/ui/cocoa/delegate/AbstractMenuDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/AbstractMenuDelegate.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/delegate/AbstractMenuDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/AbstractMenuDelegate.java index a94385f678..e6f8fdd2e5 100644 --- a/source/ch/cyberduck/ui/cocoa/delegate/AbstractMenuDelegate.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/AbstractMenuDelegate.java @@ -18,10 +18,10 @@ package ch.cyberduck.ui.cocoa.delegate; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.ProxyController; import ch.cyberduck.binding.application.NSEvent; import ch.cyberduck.binding.application.NSMenu; import ch.cyberduck.binding.application.NSMenuItem; +import ch.cyberduck.ui.cocoa.ProxyController; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; diff --git a/source/ch/cyberduck/ui/cocoa/delegate/ArchiveMenuDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/ArchiveMenuDelegate.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/delegate/ArchiveMenuDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/ArchiveMenuDelegate.java diff --git a/source/ch/cyberduck/ui/cocoa/delegate/BookmarkMenuDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/BookmarkMenuDelegate.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/delegate/BookmarkMenuDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/BookmarkMenuDelegate.java index 5858e9ab2f..d4d6751788 100644 --- a/source/ch/cyberduck/ui/cocoa/delegate/BookmarkMenuDelegate.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/BookmarkMenuDelegate.java @@ -18,6 +18,8 @@ package ch.cyberduck.ui.cocoa.delegate; * dkocher@cyberduck.ch */ +import ch.cyberduck.binding.Action; +import ch.cyberduck.binding.Delegate; import ch.cyberduck.binding.application.NSImage; import ch.cyberduck.binding.application.NSMenu; import ch.cyberduck.binding.application.NSMenuItem; @@ -31,8 +33,6 @@ import ch.cyberduck.core.local.ApplicationLauncherFactory; import ch.cyberduck.core.preferences.Preferences; import ch.cyberduck.core.preferences.PreferencesFactory; import ch.cyberduck.core.resources.IconCacheFactory; -import ch.cyberduck.binding.Action; -import ch.cyberduck.binding.Delegate; import ch.cyberduck.ui.cocoa.MainController; import org.apache.log4j.Logger; diff --git a/source/ch/cyberduck/ui/cocoa/delegate/CollectionMenuDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/CollectionMenuDelegate.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/delegate/CollectionMenuDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/CollectionMenuDelegate.java diff --git a/source/ch/cyberduck/ui/cocoa/delegate/CopyURLMenuDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/CopyURLMenuDelegate.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/delegate/CopyURLMenuDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/CopyURLMenuDelegate.java index a2e1302414..8d57d488c4 100644 --- a/source/ch/cyberduck/ui/cocoa/delegate/CopyURLMenuDelegate.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/CopyURLMenuDelegate.java @@ -19,14 +19,14 @@ package ch.cyberduck.ui.cocoa.delegate; * dkocher@cyberduck.ch */ -import ch.cyberduck.core.DescriptiveUrl; -import ch.cyberduck.core.Path; -import ch.cyberduck.core.UrlProvider; -import ch.cyberduck.core.cdn.DistributionConfiguration; import ch.cyberduck.binding.application.NSEvent; import ch.cyberduck.binding.application.NSPasteboard; import ch.cyberduck.binding.foundation.NSArray; import ch.cyberduck.binding.foundation.NSString; +import ch.cyberduck.core.DescriptiveUrl; +import ch.cyberduck.core.Path; +import ch.cyberduck.core.UrlProvider; +import ch.cyberduck.core.cdn.DistributionConfiguration; import org.apache.log4j.Logger; diff --git a/source/ch/cyberduck/ui/cocoa/delegate/EditMenuDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/EditMenuDelegate.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/delegate/EditMenuDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/EditMenuDelegate.java diff --git a/source/ch/cyberduck/ui/cocoa/delegate/HistoryMenuDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/HistoryMenuDelegate.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/delegate/HistoryMenuDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/HistoryMenuDelegate.java index 0f26efe9a7..417ae0a098 100644 --- a/source/ch/cyberduck/ui/cocoa/delegate/HistoryMenuDelegate.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/HistoryMenuDelegate.java @@ -18,6 +18,7 @@ package ch.cyberduck.ui.cocoa.delegate; * dkocher@cyberduck.ch */ +import ch.cyberduck.binding.Action; import ch.cyberduck.binding.application.NSColor; import ch.cyberduck.binding.application.NSFont; import ch.cyberduck.binding.application.NSImage; @@ -35,9 +36,8 @@ import ch.cyberduck.core.UserDateFormatterFactory; import ch.cyberduck.core.preferences.Preferences; import ch.cyberduck.core.preferences.PreferencesFactory; import ch.cyberduck.core.resources.IconCacheFactory; -import ch.cyberduck.binding.Action; import ch.cyberduck.ui.cocoa.MainController; -import ch.cyberduck.binding.application.TableCellAttributes; +import ch.cyberduck.ui.cocoa.TableCellAttributes; import org.apache.log4j.Logger; import org.rococoa.Foundation; diff --git a/source/ch/cyberduck/ui/cocoa/delegate/MenuCallback.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/MenuCallback.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/delegate/MenuCallback.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/MenuCallback.java diff --git a/source/ch/cyberduck/ui/cocoa/delegate/OpenURLMenuDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/OpenURLMenuDelegate.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/delegate/OpenURLMenuDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/OpenURLMenuDelegate.java index 1d6c56119d..ce4225de60 100644 --- a/source/ch/cyberduck/ui/cocoa/delegate/OpenURLMenuDelegate.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/OpenURLMenuDelegate.java @@ -18,12 +18,12 @@ package ch.cyberduck.ui.cocoa.delegate; * dkocher@cyberduck.ch */ +import ch.cyberduck.binding.application.NSEvent; import ch.cyberduck.core.DescriptiveUrl; import ch.cyberduck.core.Path; import ch.cyberduck.core.UrlProvider; import ch.cyberduck.core.cdn.DistributionConfiguration; import ch.cyberduck.core.local.BrowserLauncherFactory; -import ch.cyberduck.binding.application.NSEvent; import java.util.ArrayList; import java.util.List; diff --git a/source/ch/cyberduck/ui/cocoa/delegate/RendezvousMenuDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/RendezvousMenuDelegate.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/delegate/RendezvousMenuDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/RendezvousMenuDelegate.java index 8ec4861a57..701ffb8787 100644 --- a/source/ch/cyberduck/ui/cocoa/delegate/RendezvousMenuDelegate.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/RendezvousMenuDelegate.java @@ -18,6 +18,7 @@ package ch.cyberduck.ui.cocoa.delegate; * dkocher@cyberduck.ch */ +import ch.cyberduck.binding.Action; import ch.cyberduck.binding.application.NSImage; import ch.cyberduck.binding.application.NSMenu; import ch.cyberduck.binding.application.NSMenuItem; @@ -29,7 +30,6 @@ import ch.cyberduck.core.bonjour.RendezvousCollection; import ch.cyberduck.core.preferences.Preferences; import ch.cyberduck.core.preferences.PreferencesFactory; import ch.cyberduck.core.resources.IconCacheFactory; -import ch.cyberduck.binding.Action; import ch.cyberduck.ui.cocoa.MainController; import org.apache.log4j.Logger; diff --git a/source/ch/cyberduck/ui/cocoa/delegate/TransferMenuDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/TransferMenuDelegate.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/delegate/TransferMenuDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/TransferMenuDelegate.java index a22afc8fc1..ccb93587a8 100644 --- a/source/ch/cyberduck/ui/cocoa/delegate/TransferMenuDelegate.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/TransferMenuDelegate.java @@ -18,6 +18,7 @@ package ch.cyberduck.ui.cocoa.delegate; * dkocher@cyberduck.ch */ +import ch.cyberduck.binding.Action; import ch.cyberduck.binding.application.NSImage; import ch.cyberduck.binding.application.NSMenu; import ch.cyberduck.binding.application.NSMenuItem; @@ -27,7 +28,6 @@ import ch.cyberduck.core.local.RevealServiceFactory; import ch.cyberduck.core.resources.IconCacheFactory; import ch.cyberduck.core.transfer.Transfer; import ch.cyberduck.core.transfer.TransferItem; -import ch.cyberduck.binding.Action; import org.rococoa.Foundation; import org.rococoa.Selector; diff --git a/source/ch/cyberduck/ui/cocoa/delegate/URLMenuDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/URLMenuDelegate.java similarity index 99% rename from source/ch/cyberduck/ui/cocoa/delegate/URLMenuDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/URLMenuDelegate.java index 87ed2704aa..59448ff5a3 100644 --- a/source/ch/cyberduck/ui/cocoa/delegate/URLMenuDelegate.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/delegate/URLMenuDelegate.java @@ -19,6 +19,7 @@ package ch.cyberduck.ui.cocoa.delegate; * dkocher@cyberduck.ch */ +import ch.cyberduck.binding.Action; import ch.cyberduck.binding.application.NSColor; import ch.cyberduck.binding.application.NSFont; import ch.cyberduck.binding.application.NSImage; @@ -32,8 +33,7 @@ import ch.cyberduck.core.LocaleFactory; import ch.cyberduck.core.Path; import ch.cyberduck.core.Session; import ch.cyberduck.core.resources.IconCacheFactory; -import ch.cyberduck.binding.Action; -import ch.cyberduck.binding.application.TableCellAttributes; +import ch.cyberduck.ui.cocoa.TableCellAttributes; import org.apache.commons.lang3.StringUtils; import org.rococoa.Foundation; diff --git a/source/ch/cyberduck/ui/cocoa/quicklook/AbstractQuickLook.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/AbstractQuickLook.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/quicklook/AbstractQuickLook.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/AbstractQuickLook.java diff --git a/source/ch/cyberduck/ui/cocoa/quicklook/QLPreviewItem.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QLPreviewItem.java similarity index 96% rename from source/ch/cyberduck/ui/cocoa/quicklook/QLPreviewItem.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QLPreviewItem.java index 5b1ff7f524..38c110a190 100644 --- a/source/ch/cyberduck/ui/cocoa/quicklook/QLPreviewItem.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QLPreviewItem.java @@ -19,8 +19,8 @@ package ch.cyberduck.ui.cocoa.quicklook; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.ProxyController; import ch.cyberduck.binding.foundation.NSURL; +import ch.cyberduck.ui.cocoa.ProxyController; /** * @version $Id$ diff --git a/source/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanel.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanel.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanel.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanel.java diff --git a/source/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanelController.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanelController.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanelController.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanelController.java diff --git a/source/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanelDataSource.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanelDataSource.java similarity index 98% rename from source/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanelDataSource.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanelDataSource.java index 9b89dd2cee..fdef3fc801 100644 --- a/source/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanelDataSource.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanelDataSource.java @@ -19,7 +19,7 @@ package ch.cyberduck.ui.cocoa.quicklook; * dkocher@cyberduck.ch */ -import ch.cyberduck.binding.ProxyController; +import ch.cyberduck.ui.cocoa.ProxyController; import org.rococoa.ID; import org.rococoa.cocoa.foundation.NSInteger; diff --git a/source/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanelDelegate.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanelDelegate.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanelDelegate.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanelDelegate.java diff --git a/source/ch/cyberduck/ui/cocoa/quicklook/QuartzQuickLook.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QuartzQuickLook.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/quicklook/QuartzQuickLook.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QuartzQuickLook.java index 3fd14fe8f7..eb4bf49015 100644 --- a/source/ch/cyberduck/ui/cocoa/quicklook/QuartzQuickLook.java +++ b/osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QuartzQuickLook.java @@ -19,8 +19,8 @@ package ch.cyberduck.ui.cocoa.quicklook; * dkocher@cyberduck.ch */ -import ch.cyberduck.core.Local; import ch.cyberduck.binding.foundation.NSURL; +import ch.cyberduck.core.Local; import org.rococoa.ID; import org.rococoa.cocoa.foundation.NSInteger; diff --git a/source/ch/cyberduck/ui/cocoa/quicklook/QuickLook.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QuickLook.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/quicklook/QuickLook.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QuickLook.java diff --git a/source/ch/cyberduck/ui/cocoa/quicklook/QuickLookFactory.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QuickLookFactory.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/quicklook/QuickLookFactory.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/quicklook/QuickLookFactory.java diff --git a/source/ch/cyberduck/ui/cocoa/view/BookmarkCell.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/view/BookmarkCell.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/view/BookmarkCell.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/view/BookmarkCell.java diff --git a/source/ch/cyberduck/ui/cocoa/view/OutlineCell.java b/osx/src/main/java/ch/cyberduck/ui/cocoa/view/OutlineCell.java similarity index 100% rename from source/ch/cyberduck/ui/cocoa/view/OutlineCell.java rename to osx/src/main/java/ch/cyberduck/ui/cocoa/view/OutlineCell.java diff --git a/source/ch/cyberduck/ui/cocoa/view/CDBookmarkCell.h b/osx/src/main/objc/CDBookmarkCell.h similarity index 100% rename from source/ch/cyberduck/ui/cocoa/view/CDBookmarkCell.h rename to osx/src/main/objc/CDBookmarkCell.h diff --git a/source/ch/cyberduck/ui/cocoa/view/CDBookmarkCell.m b/osx/src/main/objc/CDBookmarkCell.m similarity index 100% rename from source/ch/cyberduck/ui/cocoa/view/CDBookmarkCell.m rename to osx/src/main/objc/CDBookmarkCell.m diff --git a/source/ch/cyberduck/ui/cocoa/view/CDListView.h b/osx/src/main/objc/CDListView.h similarity index 100% rename from source/ch/cyberduck/ui/cocoa/view/CDListView.h rename to osx/src/main/objc/CDListView.h diff --git a/source/ch/cyberduck/ui/cocoa/view/CDListView.m b/osx/src/main/objc/CDListView.m similarity index 100% rename from source/ch/cyberduck/ui/cocoa/view/CDListView.m rename to osx/src/main/objc/CDListView.m diff --git a/source/ch/cyberduck/ui/cocoa/view/CDOutlineCell.h b/osx/src/main/objc/CDOutlineCell.h similarity index 100% rename from source/ch/cyberduck/ui/cocoa/view/CDOutlineCell.h rename to osx/src/main/objc/CDOutlineCell.h diff --git a/source/ch/cyberduck/ui/cocoa/view/CDOutlineCell.m b/osx/src/main/objc/CDOutlineCell.m similarity index 100% rename from source/ch/cyberduck/ui/cocoa/view/CDOutlineCell.m rename to osx/src/main/objc/CDOutlineCell.m diff --git a/source/ch/cyberduck/ui/cocoa/view/CDOutlineView.h b/osx/src/main/objc/CDOutlineView.h similarity index 100% rename from source/ch/cyberduck/ui/cocoa/view/CDOutlineView.h rename to osx/src/main/objc/CDOutlineView.h diff --git a/source/ch/cyberduck/ui/cocoa/view/CDOutlineView.m b/osx/src/main/objc/CDOutlineView.m similarity index 100% rename from source/ch/cyberduck/ui/cocoa/view/CDOutlineView.m rename to osx/src/main/objc/CDOutlineView.m diff --git a/source/net/oofn/CTGradient.h b/osx/src/main/objc/CTGradient.h similarity index 100% rename from source/net/oofn/CTGradient.h rename to osx/src/main/objc/CTGradient.h diff --git a/source/net/oofn/CTGradient.m b/osx/src/main/objc/CTGradient.m similarity index 100% rename from source/net/oofn/CTGradient.m rename to osx/src/main/objc/CTGradient.m diff --git a/source/net/oofn/CTGradientView.h b/osx/src/main/objc/CTGradientView.h similarity index 100% rename from source/net/oofn/CTGradientView.h rename to osx/src/main/objc/CTGradientView.h diff --git a/source/net/oofn/CTGradientView.m b/osx/src/main/objc/CTGradientView.m similarity index 100% rename from source/net/oofn/CTGradientView.m rename to osx/src/main/objc/CTGradientView.m diff --git a/source/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanel.h b/osx/src/main/objc/QLPreviewPanel.h similarity index 100% rename from source/ch/cyberduck/ui/cocoa/quicklook/QLPreviewPanel.h rename to osx/src/main/objc/QLPreviewPanel.h diff --git a/source/com/snoize/SNDisclosableView.h b/osx/src/main/objc/SNDisclosableView.h similarity index 100% rename from source/com/snoize/SNDisclosableView.h rename to osx/src/main/objc/SNDisclosableView.h diff --git a/source/com/snoize/SNDisclosableView.m b/osx/src/main/objc/SNDisclosableView.m similarity index 100% rename from source/com/snoize/SNDisclosableView.m rename to osx/src/main/objc/SNDisclosableView.m diff --git a/source/ch/cyberduck/ui/cocoa/main.m b/osx/src/main/objc/main.m similarity index 100% rename from source/ch/cyberduck/ui/cocoa/main.m rename to osx/src/main/objc/main.m diff --git a/test/ch/cyberduck/binding/application/NSStatusBarTest.java b/osx/src/test/java/ch/cyberduck/binding/application/NSStatusBarTest.java similarity index 90% rename from test/ch/cyberduck/binding/application/NSStatusBarTest.java rename to osx/src/test/java/ch/cyberduck/binding/application/NSStatusBarTest.java index 35e45122c3..f23914e8d1 100644 --- a/test/ch/cyberduck/binding/application/NSStatusBarTest.java +++ b/osx/src/test/java/ch/cyberduck/binding/application/NSStatusBarTest.java @@ -18,8 +18,6 @@ package ch.cyberduck.binding.application; */ import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.test.Depends; import org.junit.Ignore; import org.junit.Test; @@ -29,7 +27,6 @@ import static org.junit.Assert.assertNotNull; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class NSStatusBarTest extends AbstractTestCase { @Test diff --git a/test/ch/cyberduck/binding/application/NSTextFieldTest.java b/osx/src/test/java/ch/cyberduck/binding/application/NSTextFieldTest.java similarity index 92% rename from test/ch/cyberduck/binding/application/NSTextFieldTest.java rename to osx/src/test/java/ch/cyberduck/binding/application/NSTextFieldTest.java index c20aff1f1e..8642895fd6 100644 --- a/test/ch/cyberduck/binding/application/NSTextFieldTest.java +++ b/osx/src/test/java/ch/cyberduck/binding/application/NSTextFieldTest.java @@ -19,8 +19,6 @@ package ch.cyberduck.binding.application; */ import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.test.Depends; import org.junit.Ignore; import org.junit.Test; @@ -31,7 +29,6 @@ import static org.junit.Assert.assertEquals; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class NSTextFieldTest extends AbstractTestCase { @Test diff --git a/test/ch/cyberduck/binding/foundation/NSFileManagerTest.java b/osx/src/test/java/ch/cyberduck/binding/foundation/NSFileManagerTest.java similarity index 100% rename from test/ch/cyberduck/binding/foundation/NSFileManagerTest.java rename to osx/src/test/java/ch/cyberduck/binding/foundation/NSFileManagerTest.java diff --git a/test/ch/cyberduck/binding/foundation/NSPointTest.java b/osx/src/test/java/ch/cyberduck/binding/foundation/NSPointTest.java similarity index 100% rename from test/ch/cyberduck/binding/foundation/NSPointTest.java rename to osx/src/test/java/ch/cyberduck/binding/foundation/NSPointTest.java diff --git a/test/ch/cyberduck/core/NSObjectPathReferenceTest.java b/osx/src/test/java/ch/cyberduck/core/NSObjectPathReferenceTest.java similarity index 96% rename from test/ch/cyberduck/core/NSObjectPathReferenceTest.java rename to osx/src/test/java/ch/cyberduck/core/NSObjectPathReferenceTest.java index 2c91c67a9c..551cae6544 100644 --- a/test/ch/cyberduck/core/NSObjectPathReferenceTest.java +++ b/osx/src/test/java/ch/cyberduck/core/NSObjectPathReferenceTest.java @@ -1,7 +1,6 @@ package ch.cyberduck.core; import ch.cyberduck.binding.foundation.NSString; -import ch.cyberduck.core.test.Depends; import org.junit.Test; @@ -13,7 +12,6 @@ import static org.junit.Assert.assertNotSame; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class NSObjectPathReferenceTest extends AbstractTestCase { @Test diff --git a/test/ch/cyberduck/core/resources/NSImageIconCacheTest.java b/osx/src/test/java/ch/cyberduck/core/resources/NSImageIconCacheTest.java similarity index 98% rename from test/ch/cyberduck/core/resources/NSImageIconCacheTest.java rename to osx/src/test/java/ch/cyberduck/core/resources/NSImageIconCacheTest.java index 95aaa73c71..fe69fb7269 100644 --- a/test/ch/cyberduck/core/resources/NSImageIconCacheTest.java +++ b/osx/src/test/java/ch/cyberduck/core/resources/NSImageIconCacheTest.java @@ -20,12 +20,10 @@ package ch.cyberduck.core.resources; import ch.cyberduck.binding.application.NSImage; import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Local; import ch.cyberduck.core.local.Application; import ch.cyberduck.core.local.FinderLocal; import ch.cyberduck.core.local.LocalTouchFactory; -import ch.cyberduck.core.test.Depends; import org.junit.Ignore; import org.junit.Test; @@ -37,7 +35,6 @@ import static org.junit.Assert.*; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) @Ignore public class NSImageIconCacheTest extends AbstractTestCase { diff --git a/test/ch/cyberduck/core/preferences/UserDefaultsPreferencesTest.java b/osx/src/test/java/ch/cyberduck/ui/UserDefaultsPreferencesTest.java similarity index 92% rename from test/ch/cyberduck/core/preferences/UserDefaultsPreferencesTest.java rename to osx/src/test/java/ch/cyberduck/ui/UserDefaultsPreferencesTest.java index ea4467ccaa..d1f6e99b31 100644 --- a/test/ch/cyberduck/core/preferences/UserDefaultsPreferencesTest.java +++ b/osx/src/test/java/ch/cyberduck/ui/UserDefaultsPreferencesTest.java @@ -1,8 +1,8 @@ -package ch.cyberduck.core.preferences; +package ch.cyberduck.ui; import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.test.Depends; +import ch.cyberduck.core.preferences.Preferences; +import ch.cyberduck.core.preferences.UserDefaultsPreferences; import org.junit.Test; @@ -14,7 +14,6 @@ import static org.junit.Assert.assertTrue; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class UserDefaultsPreferencesTest extends AbstractTestCase { @Test diff --git a/test/ch/cyberduck/ui/cocoa/HyperlinkAttributedStringFactoryTest.java b/osx/src/test/java/ch/cyberduck/ui/cocoa/HyperlinkAttributedStringFactoryTest.java similarity index 84% rename from test/ch/cyberduck/ui/cocoa/HyperlinkAttributedStringFactoryTest.java rename to osx/src/test/java/ch/cyberduck/ui/cocoa/HyperlinkAttributedStringFactoryTest.java index 6ef61a1d5d..f9c6486b35 100644 --- a/test/ch/cyberduck/ui/cocoa/HyperlinkAttributedStringFactoryTest.java +++ b/osx/src/test/java/ch/cyberduck/ui/cocoa/HyperlinkAttributedStringFactoryTest.java @@ -1,11 +1,8 @@ package ch.cyberduck.ui.cocoa; -import ch.cyberduck.binding.application.HyperlinkAttributedStringFactory; import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.DescriptiveUrl; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Local; -import ch.cyberduck.core.test.Depends; import org.junit.Test; @@ -14,7 +11,6 @@ import static org.junit.Assert.assertEquals; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class HyperlinkAttributedStringFactoryTest extends AbstractTestCase { @Test diff --git a/test/ch/cyberduck/binding/ProxyControllerTest.java b/osx/src/test/java/ch/cyberduck/ui/cocoa/ProxyControllerTest.java similarity index 60% rename from test/ch/cyberduck/binding/ProxyControllerTest.java rename to osx/src/test/java/ch/cyberduck/ui/cocoa/ProxyControllerTest.java index 50364dbb79..4adfb62c0c 100644 --- a/test/ch/cyberduck/binding/ProxyControllerTest.java +++ b/osx/src/test/java/ch/cyberduck/ui/cocoa/ProxyControllerTest.java @@ -1,16 +1,13 @@ -package ch.cyberduck.binding; +package ch.cyberduck.ui.cocoa; import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.exception.BackgroundException; -import ch.cyberduck.core.test.Depends; import ch.cyberduck.core.threading.AbstractBackgroundAction; import ch.cyberduck.core.threading.DefaultMainAction; import ch.cyberduck.core.threading.MainAction; import org.junit.Test; -import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -21,79 +18,66 @@ import static org.junit.Assert.*; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class ProxyControllerTest extends AbstractTestCase { @Test public void testInvokeNoWait() throws Exception { - this.repeat(new Callable() { + final CountDownLatch entry = new CountDownLatch(1); + final CountDownLatch invoked = new CountDownLatch(1); + final AtomicBoolean c = new AtomicBoolean(); + final ProxyController controller = new ProxyController() { @Override - public Void call() throws Exception { - final CountDownLatch entry = new CountDownLatch(1); - final CountDownLatch invoked = new CountDownLatch(1); - final AtomicBoolean c = new AtomicBoolean(); - final ProxyController controller = new ProxyController() { - @Override - public void invoke(final MainAction runnable, final boolean wait) { - assertFalse(wait); - super.invoke(runnable, wait); - assertFalse(c.get()); - entry.countDown(); - } - }; - new Thread() { + public void invoke(final MainAction runnable, final boolean wait) { + assertFalse(wait); + super.invoke(runnable, wait); + assertFalse(c.get()); + entry.countDown(); + } + }; + new Thread() { + @Override + public void run() { + controller.invoke(new DefaultMainAction() { @Override public void run() { - controller.invoke(new DefaultMainAction() { - @Override - public void run() { - c.set(true); - invoked.countDown(); + c.set(true); + invoked.countDown(); // assertEquals("main", Thread.currentThread().getName()); - } - }, false); } - }.start(); - entry.await(1, TimeUnit.SECONDS); - invoked.await(1, TimeUnit.SECONDS); - assertTrue(c.get()); - return null; + }, false); } - }, 5); + }.start(); + entry.await(1, TimeUnit.SECONDS); + invoked.await(1, TimeUnit.SECONDS); + assertTrue(c.get()); } @Test public void testInvokeWait() throws Exception { - this.repeat(new Callable() { + final CountDownLatch entry = new CountDownLatch(1); + final AtomicBoolean c = new AtomicBoolean(); + final ProxyController controller = new ProxyController() { @Override - public Void call() throws Exception { - final CountDownLatch entry = new CountDownLatch(1); - final AtomicBoolean c = new AtomicBoolean(); - final ProxyController controller = new ProxyController() { - @Override - public void invoke(final MainAction runnable, final boolean wait) { - assertTrue(wait); - super.invoke(runnable, wait); - entry.countDown(); - } - }; - new Thread() { + public void invoke(final MainAction runnable, final boolean wait) { + assertTrue(wait); + super.invoke(runnable, wait); + entry.countDown(); + } + }; + new Thread() { + @Override + public void run() { + controller.invoke(new DefaultMainAction() { @Override public void run() { - controller.invoke(new DefaultMainAction() { - @Override - public void run() { - c.set(true); + c.set(true); // assertEquals("main", Thread.currentThread().getName()); - } - }, true); } - }.start(); - entry.await(1, TimeUnit.SECONDS); - assertTrue(c.get()); - return null; + }, true); } - }, 5); + }.start(); + entry.await(1, TimeUnit.SECONDS); + assertTrue(c.get()); } @Test diff --git a/osx/src/test/java/ch/cyberduck/ui/cocoa/UserDefaultsDateFormatterTest.java b/osx/src/test/java/ch/cyberduck/ui/cocoa/UserDefaultsDateFormatterTest.java new file mode 100644 index 0000000000..3d4243bde4 --- /dev/null +++ b/osx/src/test/java/ch/cyberduck/ui/cocoa/UserDefaultsDateFormatterTest.java @@ -0,0 +1,35 @@ +package ch.cyberduck.ui.cocoa; + +import ch.cyberduck.core.AbstractTestCase; +import ch.cyberduck.core.date.UserDateFormatter; + +import org.junit.Test; + +import static org.junit.Assert.assertNotNull; + +/** + * @version $Id$ + */ +public class UserDefaultsDateFormatterTest extends AbstractTestCase { + + @Test + public void testGetShortFormat() throws Exception { + final UserDateFormatter f = new UserDefaultsDateFormatter(); + assertNotNull(f.getShortFormat(System.currentTimeMillis(), false)); + assertNotNull(f.getShortFormat(System.currentTimeMillis(), true)); + } + + @Test + public void testGetMediumFormat() throws Exception { + final UserDateFormatter f = new UserDefaultsDateFormatter(); + assertNotNull(f.getMediumFormat(System.currentTimeMillis(), false)); + assertNotNull(f.getMediumFormat(System.currentTimeMillis(), true)); + } + + @Test + public void testGetLongFormat() throws Exception { + final UserDateFormatter f = new UserDefaultsDateFormatter(); + assertNotNull(f.getLongFormat(System.currentTimeMillis(), false)); + assertNotNull(f.getLongFormat(System.currentTimeMillis(), true)); + } +} diff --git a/test/ch/cyberduck/ui/cocoa/threading/WindowMainActionTest.java b/osx/src/test/java/ch/cyberduck/ui/cocoa/WindowMainActionTest.java similarity index 73% rename from test/ch/cyberduck/ui/cocoa/threading/WindowMainActionTest.java rename to osx/src/test/java/ch/cyberduck/ui/cocoa/WindowMainActionTest.java index 68bc802e85..87776a3042 100644 --- a/test/ch/cyberduck/ui/cocoa/threading/WindowMainActionTest.java +++ b/osx/src/test/java/ch/cyberduck/ui/cocoa/WindowMainActionTest.java @@ -1,9 +1,7 @@ -package ch.cyberduck.ui.cocoa.threading; +package ch.cyberduck.ui.cocoa; import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.test.Depends; -import ch.cyberduck.binding.WindowController; +import ch.cyberduck.core.threading.WindowMainAction; import org.junit.Test; @@ -12,7 +10,6 @@ import static org.junit.Assert.assertFalse; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) public class WindowMainActionTest extends AbstractTestCase { @Test diff --git a/test/ch/cyberduck/ui/cocoa/quicklook/QuartzQuickLookTest.java b/osx/src/test/java/ch/cyberduck/ui/cocoa/quicklook/QuartzQuickLookTest.java similarity index 82% rename from test/ch/cyberduck/ui/cocoa/quicklook/QuartzQuickLookTest.java rename to osx/src/test/java/ch/cyberduck/ui/cocoa/quicklook/QuartzQuickLookTest.java index 857124b306..beee275525 100644 --- a/test/ch/cyberduck/ui/cocoa/quicklook/QuartzQuickLookTest.java +++ b/osx/src/test/java/ch/cyberduck/ui/cocoa/quicklook/QuartzQuickLookTest.java @@ -1,10 +1,8 @@ package ch.cyberduck.ui.cocoa.quicklook; import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Local; -import ch.cyberduck.core.test.Depends; -import ch.cyberduck.core.test.NullLocal; +import ch.cyberduck.core.NullLocal; import org.junit.Ignore; import org.junit.Test; @@ -17,7 +15,6 @@ import static org.junit.Assert.assertTrue; /** * @version $Id$ */ -@Depends(platform = Factory.Platform.Name.mac) @Ignore public class QuartzQuickLookTest extends AbstractTestCase { diff --git a/pom.xml b/pom.xml index 760f2d4abe..635cd987dd 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 ch.cyberduck @@ -8,15 +9,34 @@ 4.8.0-SNAPSHOT - pom/core - pom/config - pom/ui - pom/fs - pom/binding - pom/cli - pom/cocoa - pom/winforms - pom/bundle + + binding + config + core + core/dylib + core/dll + core/native + ui + fs + + bonjour + importer + + udt + irods + s3 + openstack + webdav + azure + ssh + ftp + protocols + + test + + osx + windows + cli @@ -34,20 +54,97 @@ net.java.dev.jna jna - 4.2.0 + 4.2.1 net.java.dev.jna jna-platform 4.2.0 + + net.java.dev.jets3t + jets3t + 0.9.4 + + + org.apache.httpcomponents + httpcore + 4.4.4 + + + org.apache.httpcomponents + httpclient + 4.5.1 + + + org.apache.httpcomponents + httpmime + 4.5.1 + + + org.bouncycastle + bcprov-jdk15on + 1.53 + + + org.bouncycastle + bcpkix-jdk15on + 1.53 + + + commons-codec + commons-codec + 1.10 + + + commons-net + commons-net + 3.4 + + + org.apache.commons + commons-pool2 + 2.4.2 + + + commons-io + commons-io + 2.4 + + + commons-collections + commons-collections + 3.2.2 + + + org.apache.commons + commons-lang3 + 3.4 + + + com.google.code.gson + gson + 2.2.4 + + + org.slf4j + slf4j-api + 1.7.12 + + + org.slf4j + slf4j-log4j12 + 1.7.12 + + + org.slf4j + jul-to-slf4j + 1.7.12 + - ${project.basedir}/build - ${project.basedir}/source - ${project.basedir}/test org.springframework.build @@ -58,32 +155,87 @@ - org.apache.maven.plugins - maven-install-plugin - 2.5.2 - - - org.codehaus.mojo - build-helper-maven-plugin - 1.9.1 - - - org.apache.maven.plugins maven-deploy-plugin 2.8.2 + + maven-compiler-plugin + 3.3 + + UTF-8 + + compact3 + + ${maven.compiler.source} + ${maven.compiler.target} + + org.apache.maven.plugins - maven-release-plugin + maven-jar-plugin + 2.6 + + + maven-install-plugin 2.5.2 + + maven-dependency-plugin + 2.10 + + + maven-source-plugin + 2.4 + + + org.codehaus.mojo + build-helper-maven-plugin + 1.10 + + + maven-resources-plugin + 2.7 + + UTF-8 + + + + maven-release-plugin + 2.5.3 + + -DskipTests + + + + maven-antrun-plugin + 1.8 + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + -Xdoclint:none + UTF-8 + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.19 + + + ${project.build.directory} + ${project.build.directory} + + + org.apache.maven.plugins maven-source-plugin - 2.4 attach-sources @@ -94,15 +246,60 @@ - org.apache.maven.plugins - maven-javadoc-plugin - 2.10.3 + ru.concerteza.buildnumber + maven-jgit-buildnumber-plugin + 1.2.10 - attach-javadocs + git-buildnumber - jar + extract-buildnumber + generate-sources + + + + + maven-dependency-plugin + + + copy-dependencies-dylib-target + generate-sources + + copy-dependencies + + + ${project.build.directory} + dylib + true + true + + + + copy-dependencies-dll-target + generate-sources + + copy-dependencies + + + ${project.build.directory} + dll + true + true + + + + copy-dependencies-so-target + generate-sources + + copy-dependencies + + + ${project.build.directory} + so + true + true + diff --git a/pom/binding/pom.xml b/pom/binding/pom.xml deleted file mode 100644 index a419376ea7..0000000000 --- a/pom/binding/pom.xml +++ /dev/null @@ -1,69 +0,0 @@ - - 4.0.0 - - ch.cyberduck - parent - ../../pom.xml - 4.8.0-SNAPSHOT - - binding - pom - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - install-binding - package - - attach-artifact - - - - - jar - ${project.basedir}/../../build/binding-${project.version}.jar - - - - - - - - - - - - ch.cyberduck - ui - ${project.version} - - - ch.cyberduck - librococoa - dylib - ${project.version} - - - org.rococoa - rococoa-core - 0.7 - - - net.java.dev.jna - jna - 4.2.0 - - - net.java.dev.jna - libjnidispatch - native - dylib - 4.2 - runtime - - - \ No newline at end of file diff --git a/pom/cli/pom.xml b/pom/cli/pom.xml deleted file mode 100644 index 155fa6d682..0000000000 --- a/pom/cli/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - - ch.cyberduck - parent - ../../pom.xml - 4.8.0-SNAPSHOT - - cli - pom - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - install-cli - package - - attach-artifact - - - - - jar - ${project.basedir}/../../build/cli-${project.version}.jar - - - - - - - - - - - - ch.cyberduck - core - ${project.version} - - - - diff --git a/pom/config/pom.xml b/pom/config/pom.xml deleted file mode 100644 index 86ed856cc9..0000000000 --- a/pom/config/pom.xml +++ /dev/null @@ -1,51 +0,0 @@ - - 4.0.0 - - ch.cyberduck - parent - ../../pom.xml - 4.8.0-SNAPSHOT - - config - pom - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - install-config - package - - attach-artifact - - - - - jar - ${project.basedir}/../../build/config-${project.version}.jar - - - - - - - - - - - - ch.cyberduck - core - ${project.version} - - - log4j - log4j - 1.2.17 - - - - diff --git a/pom/core/diagnostics/pom.xml b/pom/core/diagnostics/pom.xml deleted file mode 100644 index 594d526a19..0000000000 --- a/pom/core/diagnostics/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - 4.0.0 - - ch.cyberduck - core - ../pom.xml - 4.8.0-SNAPSHOT - - libdiagnostics - pom - - - - mac - - - Mac - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - package - - attach-artifact - - - - - dylib - ${project.basedir}/../../../build/${project.artifactId}.dylib - - - - - - - - - - - - diff --git a/pom/core/findersidebarservice/pom.xml b/pom/core/findersidebarservice/pom.xml deleted file mode 100644 index 9c2f7d87fe..0000000000 --- a/pom/core/findersidebarservice/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - 4.0.0 - - ch.cyberduck - core - ../pom.xml - 4.8.0-SNAPSHOT - - libfindersidebarservice - pom - - - - mac - - - Mac - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - package - - attach-artifact - - - - - dylib - ${project.basedir}/../../../build/${project.artifactId}.dylib - - - - - - - - - - - - diff --git a/pom/core/foundationprogressservice/pom.xml b/pom/core/foundationprogressservice/pom.xml deleted file mode 100644 index 50e49ac6e4..0000000000 --- a/pom/core/foundationprogressservice/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - 4.0.0 - - ch.cyberduck - core - ../pom.xml - 4.8.0-SNAPSHOT - - libfoundationprogressservice - pom - - - - mac - - - Mac - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - package - - attach-artifact - - - - - dylib - ${project.basedir}/../../../build/${project.artifactId}.dylib - - - - - - - - - - - - diff --git a/pom/core/iokitsleeppreventer/pom.xml b/pom/core/iokitsleeppreventer/pom.xml deleted file mode 100644 index 982811a5a0..0000000000 --- a/pom/core/iokitsleeppreventer/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - 4.0.0 - - ch.cyberduck - core - ../pom.xml - 4.8.0-SNAPSHOT - - libiokitsleeppreventer - pom - - - - mac - - - Mac - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - package - - attach-artifact - - - - - dylib - ${project.basedir}/../../../build/${project.artifactId}.dylib - - - - - - - - - - - - diff --git a/pom/core/keychain/pom.xml b/pom/core/keychain/pom.xml deleted file mode 100644 index af45965ca9..0000000000 --- a/pom/core/keychain/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - 4.0.0 - - ch.cyberduck - core - ../pom.xml - 4.8.0-SNAPSHOT - - libkeychain - pom - - - - mac - - - Mac - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - package - - attach-artifact - - - - - dylib - ${project.basedir}/../../../build/${project.artifactId}.dylib - - - - - - - - - - - - diff --git a/pom/core/launchservicesapplicationfinder/pom.xml b/pom/core/launchservicesapplicationfinder/pom.xml deleted file mode 100644 index 2a54daaabd..0000000000 --- a/pom/core/launchservicesapplicationfinder/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - 4.0.0 - - ch.cyberduck - core - ../pom.xml - 4.8.0-SNAPSHOT - - liblaunchservicesapplicationfinder - pom - - - - mac - - - Mac - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - package - - attach-artifact - - - - - dylib - ${project.basedir}/../../../build/${project.artifactId}.dylib - - - - - - - - - - - - diff --git a/pom/core/launchservicesfiledescriptor/pom.xml b/pom/core/launchservicesfiledescriptor/pom.xml deleted file mode 100644 index 20dc1cb411..0000000000 --- a/pom/core/launchservicesfiledescriptor/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - 4.0.0 - - ch.cyberduck - core - ../pom.xml - 4.8.0-SNAPSHOT - - liblaunchservicesfiledescriptor - pom - - - - mac - - - Mac - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - package - - attach-artifact - - - - - dylib - ${project.basedir}/../../../build/${project.artifactId}.dylib - - - - - - - - - - - - diff --git a/pom/core/launchservicesquarantineservice/pom.xml b/pom/core/launchservicesquarantineservice/pom.xml deleted file mode 100644 index 8d547d61eb..0000000000 --- a/pom/core/launchservicesquarantineservice/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - 4.0.0 - - ch.cyberduck - core - ../pom.xml - 4.8.0-SNAPSHOT - - liblaunchservicesquarantineservice - pom - - - - mac - - - Mac - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - package - - attach-artifact - - - - - dylib - ${project.basedir}/../../../build/${project.artifactId}.dylib - - - - - - - - - - - - diff --git a/pom/core/launchservicesschemehandler/pom.xml b/pom/core/launchservicesschemehandler/pom.xml deleted file mode 100644 index 8ac3f013a1..0000000000 --- a/pom/core/launchservicesschemehandler/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - 4.0.0 - - ch.cyberduck - core - ../pom.xml - 4.8.0-SNAPSHOT - - liblaunchservicesschemehandler - pom - - - - mac - - - Mac - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - package - - attach-artifact - - - - - dylib - ${project.basedir}/../../../build/${project.artifactId}.dylib - - - - - - - - - - - - diff --git a/pom/core/local/pom.xml b/pom/core/local/pom.xml deleted file mode 100644 index e2a280f4c6..0000000000 --- a/pom/core/local/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - 4.0.0 - - ch.cyberduck - core - ../pom.xml - 4.8.0-SNAPSHOT - - liblocal - pom - - - - mac - - - Mac - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - package - - attach-artifact - - - - - dylib - ${project.basedir}/../../../build/${project.artifactId}.dylib - - - - - - - - - - - - diff --git a/pom/core/native/pom.xml b/pom/core/native/pom.xml deleted file mode 100644 index 2850e38552..0000000000 --- a/pom/core/native/pom.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - 4.0.0 - - ch.cyberduck - core - ../pom.xml - 4.8.0-SNAPSHOT - - Cyberduck.Core - pom - - - - windows - - - Windows - - - - - - org.codehaus.mojo - build-helper-maven-plugin - false - - - install-core-dll - package - - attach-artifact - - - - - dll - ${project.basedir}/../../../build/Cyberduck.Core.dll - - - - - - - - - - - - diff --git a/pom/core/pom.xml b/pom/core/pom.xml deleted file mode 100644 index 0d9b2ab364..0000000000 --- a/pom/core/pom.xml +++ /dev/null @@ -1,244 +0,0 @@ - - 4.0.0 - - ch.cyberduck - parent - ../../pom.xml - 4.8.0-SNAPSHOT - - core - pom - - - diagnostics - foundationprogressservice - iokitsleeppreventer - keychain - launchservicesapplicationfinder - launchservicesfiledescriptor - launchservicesquarantineservice - launchservicesschemehandler - findersidebarservice - local - proxy - quicklook - rococoa - native - - - - - org.apache.httpcomponents - httpcore - 4.4.3 - - - org.apache.httpcomponents - httpclient - 4.5.1 - - - org.apache.httpcomponents - httpmime - 4.5.1 - - - com.github.lookfirst - sardine - 5.6 - - - ch.iterate.openstack - swift - 2.5.1 - - - net.java.dev.jets3t - jets3t - 0.9.4 - - - com.jamesmurty.utils - java-xmlbuilder - 1.1 - - - com.microsoft.azure - azure-storage - 4.0.0 - - - com.hierynomus - sshj - 0.14.0 - - - net.vrallev.ecc - ecc-25519-java - 1.0.1 - - - com.jcraft - jsch.agentproxy.sshj - 0.0.9 - - - net.schmizz - sshj - - - - - com.jcraft - jsch.agentproxy.sshagent - 0.0.9 - - - com.jcraft - jsch.agentproxy.pageant - 0.0.9 - - - com.jcraft - jsch.agentproxy.usocket-jna - 0.0.9 - - - com.barchart.udt - barchart-udt-bundle - 2.3.0 - - - commons-net - commons-net - 3.3 - - - org.apache.commons - commons-pool2 - 2.4.2 - - - commons-io - commons-io - 2.4 - - - commons-collections - commons-collections - 3.2.2 - - - org.apache.commons - commons-lang3 - 3.4 - - - org.bouncycastle - bcprov-jdk15on - 1.53 - - - org.slf4j - slf4j-api - 1.7.12 - - - org.slf4j - slf4j-log4j12 - 1.7.12 - - - org.slf4j - jul-to-slf4j - 1.7.12 - - - com.googlecode.plist - dd-plist - 1.16 - - - com.google.code.gson - gson - 2.2.4 - - - cglib - cglib - 2.2.2 - - - com.jcraft - jzlib - 1.1.3 - - - org.irods.jargon - jargon-core - 4.0.2.3 - - - - - - - maven-antrun-plugin - 1.8 - false - - - run-ant-clean-target - clean - - run - - - - - - - - - - run-ant-build-target - compile - - run - - - - - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - false - - - install-core - package - - attach-artifact - - - - - jar - ${project.basedir}/../../build/core-${project.version}.jar - - - - - - - - - - diff --git a/pom/core/proxy/pom.xml b/pom/core/proxy/pom.xml deleted file mode 100644 index e36686a034..0000000000 --- a/pom/core/proxy/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - 4.0.0 - - ch.cyberduck - core - ../pom.xml - 4.8.0-SNAPSHOT - - libproxy - pom - - - - mac - - - Mac - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - package - - attach-artifact - - - - - dylib - ${project.basedir}/../../../build/${project.artifactId}.dylib - - - - - - - - - - - - diff --git a/pom/core/quicklook/pom.xml b/pom/core/quicklook/pom.xml deleted file mode 100644 index 04f96a9f43..0000000000 --- a/pom/core/quicklook/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - 4.0.0 - - ch.cyberduck - core - ../pom.xml - 4.8.0-SNAPSHOT - - libquicklook - pom - - - - mac - - - Mac - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - package - - attach-artifact - - - - - dylib - ${project.basedir}/../../../build/${project.artifactId}.dylib - - - - - - - - - - - - diff --git a/pom/core/rococoa/pom.xml b/pom/core/rococoa/pom.xml deleted file mode 100644 index a8dd380ffd..0000000000 --- a/pom/core/rococoa/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - 4.0.0 - - ch.cyberduck - core - ../pom.xml - 4.8.0-SNAPSHOT - - librococoa - pom - - - - mac - - - Mac - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - package - - attach-artifact - - - - - dylib - ${project.basedir}/../../../build/${project.artifactId}.dylib - - - - - - - - - - - - diff --git a/pom/fs/pom.xml b/pom/fs/pom.xml deleted file mode 100644 index 6c8ef5fc78..0000000000 --- a/pom/fs/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - - ch.cyberduck - parent - ../../pom.xml - 4.8.0-SNAPSHOT - - fs - pom - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - install-fs - package - - attach-artifact - - - - - jar - ${project.basedir}/../../build/fs-${project.version}.jar - - - - - - - - - - - - ch.cyberduck - core - ${project.version} - - - - diff --git a/pom/ui/pom.xml b/pom/ui/pom.xml deleted file mode 100644 index f7d9bb8d89..0000000000 --- a/pom/ui/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - 4.0.0 - - ch.cyberduck - parent - ../../pom.xml - 4.8.0-SNAPSHOT - - ui - pom - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - install-ui - package - - attach-artifact - - - - - jar - ${project.basedir}/../../build/ui-${project.version}.jar - - - - - - - - - - - - ch.cyberduck - core - ${project.version} - - - \ No newline at end of file diff --git a/protocols/pom.xml b/protocols/pom.xml new file mode 100644 index 0000000000..35db7f905c --- /dev/null +++ b/protocols/pom.xml @@ -0,0 +1,63 @@ + + + + parent + ch.cyberduck + 4.8.0-SNAPSHOT + + 4.0.0 + pom + protocols + + + + ch.cyberduck + core + ${project.version} + + + ch.cyberduck + test + pom + test + ${project.version} + + + ch.cyberduck + ftp + ${project.version} + + + ch.cyberduck + ssh + ${project.version} + + + ch.cyberduck + s3 + ${project.version} + + + ch.cyberduck + openstack + ${project.version} + + + ch.cyberduck + azure + ${project.version} + + + ch.cyberduck + webdav + ${project.version} + + + ch.cyberduck + irods + ${project.version} + + + \ No newline at end of file diff --git a/test/ch/cyberduck/core/HostParserTest.java b/protocols/src/test/java/ch/cyberduck/core/HostParserTest.java similarity index 94% rename from test/ch/cyberduck/core/HostParserTest.java rename to protocols/src/test/java/ch/cyberduck/core/HostParserTest.java index f388407ae1..ccd3455d60 100644 --- a/test/ch/cyberduck/core/HostParserTest.java +++ b/protocols/src/test/java/ch/cyberduck/core/HostParserTest.java @@ -1,11 +1,18 @@ package ch.cyberduck.core; +import ch.cyberduck.core.azure.AzureProtocol; import ch.cyberduck.core.dav.DAVProtocol; +import ch.cyberduck.core.dav.DAVSSLProtocol; import ch.cyberduck.core.ftp.FTPProtocol; import ch.cyberduck.core.ftp.FTPTLSProtocol; +import ch.cyberduck.core.gstorage.GoogleStorageProtocol; +import ch.cyberduck.core.irods.IRODSProtocol; +import ch.cyberduck.core.openstack.SwiftProtocol; import ch.cyberduck.core.preferences.PreferencesFactory; +import ch.cyberduck.core.s3.S3Protocol; import ch.cyberduck.core.sftp.SFTPProtocol; +import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; @@ -15,6 +22,12 @@ import static org.junit.Assert.*; */ public class HostParserTest extends AbstractTestCase { + @BeforeClass + public static void register() { + ProtocolFactory.register(new FTPProtocol(), new FTPTLSProtocol(), new SFTPProtocol(), new DAVProtocol(), new DAVSSLProtocol(), new SwiftProtocol(), new S3Protocol(), + new GoogleStorageProtocol(), new AzureProtocol(), new IRODSProtocol()); + } + @Test public void testParseURLEmpty() { Host h = HostParser.parse(""); @@ -237,7 +250,7 @@ public class HostParserTest extends AbstractTestCase { public void testParseDefaultPathWithAtSign() { final Host host = HostParser.parse("https://mail.sgbio.com/dav/YourEmail@sgbio.com/Briefcase"); assertEquals("mail.sgbio.com", host.getHostname()); - assertEquals(ProtocolFactory.WEBDAV_SSL, host.getProtocol()); + assertEquals(new DAVSSLProtocol(), host.getProtocol()); assertEquals(Scheme.https, host.getProtocol().getScheme()); assertEquals("/dav/YourEmail@sgbio.com/Briefcase", host.getDefaultPath()); assertEquals("anonymous", host.getCredentials().getUsername()); @@ -247,7 +260,7 @@ public class HostParserTest extends AbstractTestCase { public void testParseUsernameDefaultPathWithAtSign() { final Host host = HostParser.parse("https://u@mail.sgbio.com/dav/YourEmail@sgbio.com/Briefcase"); assertEquals("mail.sgbio.com", host.getHostname()); - assertEquals(ProtocolFactory.WEBDAV_SSL, host.getProtocol()); + assertEquals(new DAVSSLProtocol(), host.getProtocol()); assertEquals(Scheme.https, host.getProtocol().getScheme()); assertEquals("/dav/YourEmail@sgbio.com/Briefcase", host.getDefaultPath()); assertEquals("u", host.getCredentials().getUsername()); @@ -257,7 +270,7 @@ public class HostParserTest extends AbstractTestCase { public void testParseUsernamePasswordDefaultPathWithAtSign() { final Host host = HostParser.parse("https://u:p@mail.sgbio.com/dav/YourEmail@sgbio.com/Briefcase"); assertEquals("mail.sgbio.com", host.getHostname()); - assertEquals(ProtocolFactory.WEBDAV_SSL, host.getProtocol()); + assertEquals(new DAVSSLProtocol(), host.getProtocol()); assertEquals(Scheme.https, host.getProtocol().getScheme()); assertEquals("/dav/YourEmail@sgbio.com/Briefcase", host.getDefaultPath()); assertEquals("u", host.getCredentials().getUsername()); @@ -329,7 +342,7 @@ public class HostParserTest extends AbstractTestCase { @Test public void testParseS3SchemeAccessKey() throws Exception { - assertTrue(new Host(ProtocolFactory.S3_SSL, "s3.amazonaws.com", 443, "/cyberduck-test/key", new Credentials("AWS456", null)) + assertTrue(new Host(new S3Protocol(), "s3.amazonaws.com", 443, "/cyberduck-test/key", new Credentials("AWS456", null)) .compareTo(HostParser.parse("s3://AWS456@cyberduck-test/key")) == 0); } diff --git a/test/ch/cyberduck/core/LoginCallbackTest.java b/protocols/src/test/java/ch/cyberduck/core/LoginCallbackTest.java similarity index 99% rename from test/ch/cyberduck/core/LoginCallbackTest.java rename to protocols/src/test/java/ch/cyberduck/core/LoginCallbackTest.java index 1c3990d787..244a67fdd4 100644 --- a/test/ch/cyberduck/core/LoginCallbackTest.java +++ b/protocols/src/test/java/ch/cyberduck/core/LoginCallbackTest.java @@ -5,6 +5,7 @@ import ch.cyberduck.core.exception.LoginCanceledException; import ch.cyberduck.core.ftp.FTPProtocol; import ch.cyberduck.core.sftp.SFTPProtocol; +import org.junit.Assert; import org.junit.Test; import static org.junit.Assert.*; diff --git a/test/ch/cyberduck/core/ProtocolFactoryTest.java b/protocols/src/test/java/ch/cyberduck/core/ProtocolFactoryTest.java similarity index 81% rename from test/ch/cyberduck/core/ProtocolFactoryTest.java rename to protocols/src/test/java/ch/cyberduck/core/ProtocolFactoryTest.java index e5f484e3d8..6ed45b5b61 100644 --- a/test/ch/cyberduck/core/ProtocolFactoryTest.java +++ b/protocols/src/test/java/ch/cyberduck/core/ProtocolFactoryTest.java @@ -8,6 +8,7 @@ import ch.cyberduck.core.irods.IRODSProtocol; import ch.cyberduck.core.openstack.SwiftProtocol; import ch.cyberduck.core.sftp.SFTPProtocol; +import org.junit.Assert; import org.junit.Test; import static org.junit.Assert.*; @@ -43,13 +44,13 @@ public class ProtocolFactoryTest extends AbstractTestCase { @Test public void testUrl() throws Exception { - assertTrue(ProtocolFactory.isURL("ftp://h.name")); - assertTrue(ProtocolFactory.isURL("ftps://h.name")); - assertTrue(ProtocolFactory.isURL("sftp://h.name")); - assertTrue(ProtocolFactory.isURL("http://h.name")); - assertTrue(ProtocolFactory.isURL("https://h.name")); - assertFalse(ProtocolFactory.isURL("irods://h.name")); - assertFalse(ProtocolFactory.isURL("h.name")); + assertTrue(Scheme.isURL("ftp://h.name")); + assertTrue(Scheme.isURL("ftps://h.name")); + assertTrue(Scheme.isURL("sftp://h.name")); + assertTrue(Scheme.isURL("http://h.name")); + assertTrue(Scheme.isURL("https://h.name")); + assertFalse(Scheme.isURL("irods://h.name")); + assertFalse(Scheme.isURL("h.name")); } @Test diff --git a/test/ch/cyberduck/core/ProtocolTest.java b/protocols/src/test/java/ch/cyberduck/core/ProtocolTest.java similarity index 98% rename from test/ch/cyberduck/core/ProtocolTest.java rename to protocols/src/test/java/ch/cyberduck/core/ProtocolTest.java index e67d16710a..39a1764c9d 100644 --- a/test/ch/cyberduck/core/ProtocolTest.java +++ b/protocols/src/test/java/ch/cyberduck/core/ProtocolTest.java @@ -9,6 +9,7 @@ import ch.cyberduck.core.openstack.SwiftProtocol; import ch.cyberduck.core.s3.S3Protocol; import ch.cyberduck.core.sftp.SFTPProtocol; +import org.junit.Assert; import org.junit.Test; import static org.junit.Assert.*; diff --git a/test/ch/cyberduck/core/serializer/HostDictionaryTest.java b/protocols/src/test/java/ch/cyberduck/core/serializer/HostDictionaryTest.java similarity index 100% rename from test/ch/cyberduck/core/serializer/HostDictionaryTest.java rename to protocols/src/test/java/ch/cyberduck/core/serializer/HostDictionaryTest.java diff --git a/protocols/src/test/java/ch/cyberduck/core/serializer/TransferDictionaryTest.java b/protocols/src/test/java/ch/cyberduck/core/serializer/TransferDictionaryTest.java new file mode 100644 index 0000000000..30c14593dd --- /dev/null +++ b/protocols/src/test/java/ch/cyberduck/core/serializer/TransferDictionaryTest.java @@ -0,0 +1,191 @@ +package ch.cyberduck.core.serializer; + +/* + * Copyright (c) 2002-2014 David Kocher. All rights reserved. + * http://cyberduck.io/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * Bug fixes, suggestions and comments should be sent to: + * feedback@cyberduck.io + */ + +import ch.cyberduck.core.AbstractTestCase; +import ch.cyberduck.core.AttributedList; +import ch.cyberduck.core.DisabledListProgressListener; +import ch.cyberduck.core.DisabledLoginCallback; +import ch.cyberduck.core.DisabledProgressListener; +import ch.cyberduck.core.Filter; +import ch.cyberduck.core.Host; +import ch.cyberduck.core.Local; +import ch.cyberduck.core.NullSession; +import ch.cyberduck.core.Path; +import ch.cyberduck.core.ProtocolFactory; +import ch.cyberduck.core.SerializerFactory; +import ch.cyberduck.core.TestProtocol; +import ch.cyberduck.core.azure.AzureProtocol; +import ch.cyberduck.core.dav.DAVProtocol; +import ch.cyberduck.core.dav.DAVSSLProtocol; +import ch.cyberduck.core.exception.AccessDeniedException; +import ch.cyberduck.core.ftp.FTPProtocol; +import ch.cyberduck.core.ftp.FTPTLSProtocol; +import ch.cyberduck.core.gstorage.GoogleStorageProtocol; +import ch.cyberduck.core.io.DisabledStreamListener; +import ch.cyberduck.core.irods.IRODSProtocol; +import ch.cyberduck.core.openstack.SwiftProtocol; +import ch.cyberduck.core.s3.S3Protocol; +import ch.cyberduck.core.sftp.SFTPProtocol; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.transfer.DisabledTransferErrorCallback; +import ch.cyberduck.core.transfer.DisabledTransferItemCallback; +import ch.cyberduck.core.transfer.DisabledTransferPrompt; +import ch.cyberduck.core.transfer.DownloadTransfer; +import ch.cyberduck.core.transfer.SyncTransfer; +import ch.cyberduck.core.transfer.Transfer; +import ch.cyberduck.core.transfer.TransferAction; +import ch.cyberduck.core.transfer.TransferItem; +import ch.cyberduck.core.transfer.TransferOptions; +import ch.cyberduck.core.transfer.TransferSpeedometer; +import ch.cyberduck.core.transfer.UploadTransfer; +import ch.cyberduck.core.worker.SingleTransferWorker; + +import org.junit.BeforeClass; +import org.junit.Test; + +import java.util.Arrays; +import java.util.EnumSet; +import java.util.UUID; + +import static org.junit.Assert.*; + +public class TransferDictionaryTest extends AbstractTestCase { + + @BeforeClass + public static void register() { + ProtocolFactory.register(new FTPProtocol(), new FTPTLSProtocol(), new SFTPProtocol(), new DAVProtocol(), new DAVSSLProtocol(), new SwiftProtocol(), new S3Protocol(), + new GoogleStorageProtocol(), new AzureProtocol(), new IRODSProtocol()); + } + + @Test + public void testSerializeDownloadTransfer() throws Exception { + final Path test = new Path("t", EnumSet.of(Path.Type.file)); + Transfer t = new DownloadTransfer(new Host(new TestProtocol(), "t"), test, new NullLocal(UUID.randomUUID().toString(), "transfer")); + t.addSize(4L); + t.addTransferred(3L); + final Transfer serialized = new TransferDictionary().deserialize(t.serialize(SerializerFactory.get())); + assertNotSame(t, serialized); + assertEquals(t.getRoots(), serialized.getRoots()); + assertEquals(t.getBandwidth(), serialized.getBandwidth()); + assertEquals(4L, serialized.getSize()); + assertEquals(3L, serialized.getTransferred()); + assertFalse(serialized.isComplete()); + } + + @Test + public void testSerializeUploadTransfer() throws Exception { + final Path test = new Path("t", EnumSet.of(Path.Type.file)); + Transfer t = new UploadTransfer(new Host(new TestProtocol(), "t"), test, + new Local(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString())); + t.addSize(4L); + t.addTransferred(3L); + final Transfer serialized = new TransferDictionary().deserialize(t.serialize(SerializerFactory.get())); + assertNotSame(t, serialized); + assertEquals(t.getRoots(), serialized.getRoots()); + assertEquals(t.getBandwidth(), serialized.getBandwidth()); + assertEquals(4L, serialized.getSize()); + assertEquals(3L, serialized.getTransferred()); + } + + @Test + public void testSyncTransfer() throws Exception { + Transfer t = new SyncTransfer(new Host(new TestProtocol(), "t"), + new TransferItem(new Path("t", EnumSet.of(Path.Type.file)), new NullLocal("/", "t"))); + t.addSize(4L); + t.addTransferred(3L); + final Transfer serialized = new TransferDictionary().deserialize(t.serialize(SerializerFactory.get())); + assertNotSame(t, serialized); + assertEquals(t.getRoots(), serialized.getRoots()); + assertEquals(t.getBandwidth(), serialized.getBandwidth()); + assertEquals(4L, serialized.getSize()); + assertEquals(3L, serialized.getTransferred()); + } + + @Test + public void testSerializeLastSelectedAction() throws Exception { + final Path p = new Path("t", EnumSet.of(Path.Type.directory)); + final SyncTransfer transfer = new SyncTransfer(new Host(new TestProtocol()), new TransferItem(p, new NullLocal("p", "t") { + @Override + public boolean exists() { + return true; + } + + @Override + public AttributedList list() { + return new AttributedList(Arrays.asList(new NullLocal("p", "a"))); + } + })); + transfer.action(null, true, false, new DisabledTransferPrompt() { + @Override + public TransferAction prompt(final TransferItem file) { + return TransferAction.upload; + } + }, new DisabledListProgressListener()); + final Transfer serialized = new TransferDictionary().deserialize(transfer.serialize(SerializerFactory.get())); + assertNotSame(transfer, serialized); + assertEquals(TransferAction.upload, serialized.action(null, true, false, new DisabledTransferPrompt() { + @Override + public TransferAction prompt(final TransferItem file) { + fail(); + return null; + } + }, new DisabledListProgressListener())); + } + + @Test + public void testSerializeComplete() throws Exception { + // Test transfer to complete with existing directory + final Host host = new Host(new TestProtocol()); + final Transfer t = new DownloadTransfer(host, new Path("/t", EnumSet.of(Path.Type.directory)), new NullLocal("t") { + @Override + public boolean exists() { + return true; + } + + @Override + public AttributedList list(final Filter filter) throws AccessDeniedException { + return AttributedList.emptyList(); + } + + @Override + public boolean isFile() { + return false; + } + + @Override + public boolean isDirectory() { + return true; + } + }); + final NullSession session = new NullSession(host); + new SingleTransferWorker(session, t, new TransferOptions(), + new TransferSpeedometer(t), new DisabledTransferPrompt() { + @Override + public TransferAction prompt(final TransferItem file) { + return TransferAction.overwrite; + } + }, new DisabledTransferErrorCallback(), new DisabledTransferItemCallback(), + new DisabledProgressListener(), new DisabledStreamListener(), new DisabledLoginCallback()).run(session); + assertTrue(t.isComplete()); + final Transfer serialized = new TransferDictionary().deserialize(t.serialize(SerializerFactory.get())); + assertNotSame(t, serialized); + assertTrue(serialized.isComplete()); + } +} \ No newline at end of file diff --git a/test/ch/cyberduck/core/serializer/impl/dd/HostPlistReaderTest.java b/protocols/src/test/java/ch/cyberduck/core/serializer/impl/dd/HostPlistReaderTest.java similarity index 82% rename from test/ch/cyberduck/core/serializer/impl/dd/HostPlistReaderTest.java rename to protocols/src/test/java/ch/cyberduck/core/serializer/impl/dd/HostPlistReaderTest.java index 54b1e9f3c3..c7fb06fabf 100644 --- a/test/ch/cyberduck/core/serializer/impl/dd/HostPlistReaderTest.java +++ b/protocols/src/test/java/ch/cyberduck/core/serializer/impl/dd/HostPlistReaderTest.java @@ -24,7 +24,8 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.exception.LocalAccessDeniedException; -import ch.cyberduck.core.local.FinderLocal; +import ch.cyberduck.core.s3.S3Protocol; +import ch.cyberduck.core.sftp.SFTPProtocol; import org.junit.Test; @@ -45,26 +46,26 @@ public class HostPlistReaderTest extends AbstractTestCase { public void testDeserializeDeprecatedProtocol() throws Exception { final HostPlistReader reader = new HostPlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); assertNull(reader.read( - new FinderLocal("test/ch/cyberduck/core/serializer/impl/1c158c34-db8a-4c32-a732-abd9447bb27c.duck"))); + new Local("src/test/resources/1c158c34-db8a-4c32-a732-abd9447bb27c.duck"))); } @Test public void testRead() throws Exception { HostPlistReader reader = new HostPlistReader(); final Host read = reader.read(new Local( - "test/ch/cyberduck/core/serializer/impl/s3.amazonaws.com – S3.duck")); + "src/test/resources/s3.amazonaws.com – S3.duck")); assertNotNull(read); assertEquals("Amazon Simple Storage Service & CloudFront CDN", read.getComment()); - assertEquals(ProtocolFactory.S3_SSL, read.getProtocol()); + assertEquals(new S3Protocol(), read.getProtocol()); } @Test public void testReadPrivateKey() throws Exception { HostPlistReader reader = new HostPlistReader(); final Host read = reader.read(new Local( - "test/ch/cyberduck/core/serializer/impl/Private Key Legacy.duck")); + "src/test/resources/Private Key Legacy.duck")); assertNotNull(read); - assertEquals(ProtocolFactory.SFTP, read.getProtocol()); + assertEquals(new SFTPProtocol(), read.getProtocol()); assertNotNull(read.getCredentials().getIdentity()); assertEquals("~/.ssh/key.pem", read.getCredentials().getIdentity().getAbbreviatedPath()); } @@ -73,9 +74,9 @@ public class HostPlistReaderTest extends AbstractTestCase { public void testReadPrivateKeyBookmark() throws Exception { HostPlistReader reader = new HostPlistReader(); final Host read = reader.read(new Local( - "test/ch/cyberduck/core/serializer/impl/Private Key.duck")); + "src/test/resources/Private Key.duck")); assertNotNull(read); - assertEquals(ProtocolFactory.SFTP, read.getProtocol()); + assertEquals(new SFTPProtocol(), read.getProtocol()); assertNotNull(read.getCredentials().getIdentity()); assertEquals("~/.ssh/key.pem", read.getCredentials().getIdentity().getAbbreviatedPath()); } diff --git a/test/ch/cyberduck/core/serializer/impl/dd/ProfilePlistReaderTest.java b/protocols/src/test/java/ch/cyberduck/core/serializer/impl/dd/ProfilePlistReaderTest.java similarity index 78% rename from test/ch/cyberduck/core/serializer/impl/dd/ProfilePlistReaderTest.java rename to protocols/src/test/java/ch/cyberduck/core/serializer/impl/dd/ProfilePlistReaderTest.java index 04109e5445..6076fd517b 100644 --- a/test/ch/cyberduck/core/serializer/impl/dd/ProfilePlistReaderTest.java +++ b/protocols/src/test/java/ch/cyberduck/core/serializer/impl/dd/ProfilePlistReaderTest.java @@ -23,13 +23,23 @@ import ch.cyberduck.core.Filter; import ch.cyberduck.core.Local; import ch.cyberduck.core.Profile; import ch.cyberduck.core.Protocol; +import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.Scheme; +import ch.cyberduck.core.azure.AzureProtocol; +import ch.cyberduck.core.dav.DAVProtocol; +import ch.cyberduck.core.dav.DAVSSLProtocol; import ch.cyberduck.core.features.Location; +import ch.cyberduck.core.ftp.FTPProtocol; +import ch.cyberduck.core.ftp.FTPTLSProtocol; +import ch.cyberduck.core.gstorage.GoogleStorageProtocol; +import ch.cyberduck.core.irods.IRODSProtocol; import ch.cyberduck.core.openstack.SwiftProtocol; import ch.cyberduck.core.s3.S3LocationFeature; import ch.cyberduck.core.s3.S3Protocol; +import ch.cyberduck.core.sftp.SFTPProtocol; import org.junit.Assert; +import org.junit.BeforeClass; import org.junit.Test; import java.util.Set; @@ -41,17 +51,23 @@ import static org.junit.Assert.*; */ public class ProfilePlistReaderTest extends AbstractTestCase { + @BeforeClass + public static void register() { + ProtocolFactory.register(new FTPProtocol(), new FTPTLSProtocol(), new SFTPProtocol(), new DAVProtocol(), new DAVSSLProtocol(), new SwiftProtocol(), new S3Protocol(), + new GoogleStorageProtocol(), new AzureProtocol(), new IRODSProtocol()); + } + @Test public void testDeserializeDropbox() throws Exception { final Profile profile = new ProfilePlistReader().read( - new Local("test/ch/cyberduck/core/serializer/impl/Dropbox.cyberduckprofile") + new Local("src/test/resources/Dropbox.cyberduckprofile") ); assertNull(profile); } @Test public void testAll() throws Exception { - for(Local l : new Local("profiles").list().filter(new Filter() { + for(Local l : new Local("../profiles").list().filter(new Filter() { @Override public boolean accept(final Local file) { return file.getName().endsWith(".cyberduckprofile"); @@ -65,7 +81,7 @@ public class ProfilePlistReaderTest extends AbstractTestCase { @Test public void testRegions() throws Exception { final Profile profile = new ProfilePlistReader().read( - new Local("test/ch/cyberduck/core/serializer/impl/Custom Regions S3.cyberduckprofile") + new Local("src/test/resources/Custom Regions S3.cyberduckprofile") ); assertNotNull(profile); final Set regions = profile.getRegions(); @@ -77,10 +93,10 @@ public class ProfilePlistReaderTest extends AbstractTestCase { @Test public void testEquals() throws Exception { final Profile profile = new ProfilePlistReader().read( - new Local("profiles/Eucalyptus Walrus S3.cyberduckprofile") + new Local("../profiles/Eucalyptus Walrus S3.cyberduckprofile") ); assertEquals(profile, new ProfilePlistReader().read( - new Local("profiles/Eucalyptus Walrus S3.cyberduckprofile") + new Local("../profiles/Eucalyptus Walrus S3.cyberduckprofile") )); Assert.assertEquals(Protocol.Type.s3, profile.getType()); assertEquals(new S3Protocol(), profile.getProtocol()); @@ -92,10 +108,10 @@ public class ProfilePlistReaderTest extends AbstractTestCase { @Test public void testEqualsDifferentScheme() throws Exception { final Profile https = new ProfilePlistReader().read( - new Local("profiles/Openstack Swift (Swauth).cyberduckprofile") + new Local("../profiles/Openstack Swift (Swauth).cyberduckprofile") ); final Profile http = new ProfilePlistReader().read( - new Local("profiles/Openstack Swift (Swauth HTTP).cyberduckprofile") + new Local("../profiles/Openstack Swift (Swauth HTTP).cyberduckprofile") ); assertNotEquals(https, http); } @@ -103,10 +119,10 @@ public class ProfilePlistReaderTest extends AbstractTestCase { @Test public void testEqualsContexts() throws Exception { final Profile keystone = new ProfilePlistReader().read( - new Local("profiles/Openstack Swift (Keystone).cyberduckprofile") + new Local("../profiles/Openstack Swift (Keystone).cyberduckprofile") ); final Profile swauth = new ProfilePlistReader().read( - new Local("profiles/Openstack Swift (Swauth).cyberduckprofile") + new Local("../profiles/Openstack Swift (Swauth).cyberduckprofile") ); assertNotEquals(keystone, swauth); } @@ -114,10 +130,10 @@ public class ProfilePlistReaderTest extends AbstractTestCase { @Test public void testProviderProfileHPCloud() throws Exception { final Profile profile = new ProfilePlistReader().read( - new Local("profiles/HP Cloud Object Storage.cyberduckprofile") + new Local("../profiles/HP Cloud Object Storage.cyberduckprofile") ); assertEquals(profile, new ProfilePlistReader().read( - new Local("profiles/HP Cloud Object Storage.cyberduckprofile") + new Local("../profiles/HP Cloud Object Storage.cyberduckprofile") )); assertEquals(Protocol.Type.swift, profile.getType()); assertEquals(new SwiftProtocol(), profile.getProtocol()); @@ -141,10 +157,10 @@ public class ProfilePlistReaderTest extends AbstractTestCase { @Test public void testProviderProfileS3HTTP() throws Exception { final Profile profile = new ProfilePlistReader().read( - new Local("profiles/S3 (HTTP).cyberduckprofile") + new Local("../profiles/S3 (HTTP).cyberduckprofile") ); assertEquals(profile, new ProfilePlistReader().read( - new Local("profiles/S3 (HTTP).cyberduckprofile") + new Local("../profiles/S3 (HTTP).cyberduckprofile") )); assertEquals(Protocol.Type.s3, profile.getType()); assertEquals(new S3Protocol(), profile.getProtocol()); @@ -164,10 +180,10 @@ public class ProfilePlistReaderTest extends AbstractTestCase { @Test public void testProviderProfileS3HTTPS() throws Exception { final Profile profile = new ProfilePlistReader().read( - new Local("profiles/S3 (HTTPS).cyberduckprofile") + new Local("../profiles/S3 (HTTPS).cyberduckprofile") ); assertEquals(profile, new ProfilePlistReader().read( - new Local("profiles/S3 (HTTPS).cyberduckprofile") + new Local("../profiles/S3 (HTTPS).cyberduckprofile") )); assertEquals(Protocol.Type.s3, profile.getType()); assertEquals(new S3Protocol(), profile.getProtocol()); diff --git a/test/ch/cyberduck/core/serializer/impl/dd/TransferPlistReaderTest.java b/protocols/src/test/java/ch/cyberduck/core/serializer/impl/dd/TransferPlistReaderTest.java similarity index 90% rename from test/ch/cyberduck/core/serializer/impl/dd/TransferPlistReaderTest.java rename to protocols/src/test/java/ch/cyberduck/core/serializer/impl/dd/TransferPlistReaderTest.java index e48c492ee6..eecf0d6dc5 100644 --- a/test/ch/cyberduck/core/serializer/impl/dd/TransferPlistReaderTest.java +++ b/protocols/src/test/java/ch/cyberduck/core/serializer/impl/dd/TransferPlistReaderTest.java @@ -38,7 +38,7 @@ public class TransferPlistReaderTest extends AbstractTestCase { @Test public void testDeserializeUpload() throws Exception { final Transfer t = new TransferPlistReader().read( - new Local("test/ch/cyberduck/core/serializer/impl/c44b5120-8dfe-41af-acd3-da99d87b811f.cyberducktransfer") + new Local("src/test/resources/c44b5120-8dfe-41af-acd3-da99d87b811f.cyberducktransfer") ); assertTrue(t instanceof UploadTransfer); assertEquals("identity.api.rackspacecloud.com", t.getHost().getHostname()); @@ -50,7 +50,7 @@ public class TransferPlistReaderTest extends AbstractTestCase { @Test public void testDeserializeDownload() throws Exception { final Transfer t = new TransferPlistReader().read( - new Local("test/ch/cyberduck/core/serializer/impl/fcea1809-1d75-42f1-92b5-99b38bc1d63e.cyberducktransfer") + new Local("src/test/resources/fcea1809-1d75-42f1-92b5-99b38bc1d63e.cyberducktransfer") ); assertTrue(t instanceof DownloadTransfer); assertEquals("s3.amazonaws.com", t.getHost().getHostname()); diff --git a/test/ch/cyberduck/core/shared/DefaultAttributesFeatureTest.java b/protocols/src/test/java/ch/cyberduck/core/shared/DefaultAttributesFeatureTest.java similarity index 83% rename from test/ch/cyberduck/core/shared/DefaultAttributesFeatureTest.java rename to protocols/src/test/java/ch/cyberduck/core/shared/DefaultAttributesFeatureTest.java index e83378833a..860cead11e 100644 --- a/test/ch/cyberduck/core/shared/DefaultAttributesFeatureTest.java +++ b/protocols/src/test/java/ch/cyberduck/core/shared/DefaultAttributesFeatureTest.java @@ -1,24 +1,11 @@ package ch.cyberduck.core.shared; -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.AttributedList; -import ch.cyberduck.core.Attributes; -import ch.cyberduck.core.Credentials; -import ch.cyberduck.core.DisabledCancelCallback; -import ch.cyberduck.core.DisabledHostKeyCallback; -import ch.cyberduck.core.DisabledLoginCallback; -import ch.cyberduck.core.DisabledPasswordStore; -import ch.cyberduck.core.DisabledTranscriptListener; -import ch.cyberduck.core.Host; -import ch.cyberduck.core.ListProgressListener; -import ch.cyberduck.core.Path; -import ch.cyberduck.core.PathCache; -import ch.cyberduck.core.Permission; +import ch.cyberduck.core.*; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.exception.NotfoundException; import ch.cyberduck.core.sftp.SFTPProtocol; import ch.cyberduck.core.sftp.SFTPSession; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -76,7 +63,7 @@ public class DefaultAttributesFeatureTest extends AbstractTestCase { @Test public void testFindPlaceholder() throws Exception { - assertNotNull(new DefaultAttributesFeature(new NullSession(new Host(("t"))) { + assertNotNull(new DefaultAttributesFeature(new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { return new AttributedList<>(Collections.singletonList(new Path("/a/b", EnumSet.of(Path.Type.directory, Path.Type.placeholder)))); diff --git a/test/ch/cyberduck/core/shared/DefaultDownloadFeatureTest.java b/protocols/src/test/java/ch/cyberduck/core/shared/DefaultDownloadFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/shared/DefaultDownloadFeatureTest.java rename to protocols/src/test/java/ch/cyberduck/core/shared/DefaultDownloadFeatureTest.java diff --git a/test/ch/cyberduck/core/shared/DefaultFindFeatureTest.java b/protocols/src/test/java/ch/cyberduck/core/shared/DefaultFindFeatureTest.java similarity index 93% rename from test/ch/cyberduck/core/shared/DefaultFindFeatureTest.java rename to protocols/src/test/java/ch/cyberduck/core/shared/DefaultFindFeatureTest.java index ce410a948d..30de262492 100644 --- a/test/ch/cyberduck/core/shared/DefaultFindFeatureTest.java +++ b/protocols/src/test/java/ch/cyberduck/core/shared/DefaultFindFeatureTest.java @@ -4,9 +4,10 @@ import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.AttributedList; import ch.cyberduck.core.Host; import ch.cyberduck.core.ListProgressListener; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathCache; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.TestProtocol; import org.junit.Test; @@ -24,7 +25,7 @@ public class DefaultFindFeatureTest extends AbstractTestCase { @Test public void testFind() throws Exception { final AtomicInteger count = new AtomicInteger(); - final DefaultFindFeature feature = new DefaultFindFeature(new NullSession(new Host("t")) { + final DefaultFindFeature feature = new DefaultFindFeature(new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(Path file, ListProgressListener listener) { count.incrementAndGet(); @@ -40,7 +41,7 @@ public class DefaultFindFeatureTest extends AbstractTestCase { @Test public void testFindCached() throws Exception { final AtomicInteger count = new AtomicInteger(); - final DefaultFindFeature feature = new DefaultFindFeature(new NullSession(new Host("t")) { + final DefaultFindFeature feature = new DefaultFindFeature(new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(Path file, ListProgressListener listener) { count.incrementAndGet(); @@ -55,7 +56,7 @@ public class DefaultFindFeatureTest extends AbstractTestCase { @Test public void testFindPlaceholder() throws Exception { - assertTrue(new DefaultFindFeature(new NullSession(new Host(("t"))) { + assertTrue(new DefaultFindFeature(new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { return new AttributedList<>(Collections.singletonList(new Path("/a/b", EnumSet.of(Path.Type.directory, Path.Type.placeholder)))); @@ -65,7 +66,7 @@ public class DefaultFindFeatureTest extends AbstractTestCase { @Test public void testCaseInsensitive() throws Exception { - assertTrue(new DefaultFindFeature(new NullSession(new Host(("t"))) { + assertTrue(new DefaultFindFeature(new NullSession(new Host(new TestProtocol())) { @Override public Case getCase() { return Case.insensitive; @@ -76,7 +77,7 @@ public class DefaultFindFeatureTest extends AbstractTestCase { return new AttributedList<>(Collections.singletonList(new Path("/a/B", EnumSet.of(Path.Type.file)))); } }).find(new Path("/a/b", EnumSet.of(Path.Type.file)))); - assertFalse(new DefaultFindFeature(new NullSession(new Host(("t"))) { + assertFalse(new DefaultFindFeature(new NullSession(new Host(new TestProtocol())) { @Override public Case getCase() { return Case.insensitive; @@ -87,7 +88,7 @@ public class DefaultFindFeatureTest extends AbstractTestCase { return new AttributedList<>(Collections.singletonList(new Path("/a/B", EnumSet.of(Path.Type.directory)))); } }).find(new Path("/a/b", EnumSet.of(Path.Type.file)))); - assertFalse(new DefaultFindFeature(new NullSession(new Host(("t"))) { + assertFalse(new DefaultFindFeature(new NullSession(new Host(new TestProtocol())) { @Override public Case getCase() { return Case.sensitive; diff --git a/test/ch/cyberduck/core/shared/DefaultHomeFinderServiceTest.java b/protocols/src/test/java/ch/cyberduck/core/shared/DefaultHomeFinderServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/shared/DefaultHomeFinderServiceTest.java rename to protocols/src/test/java/ch/cyberduck/core/shared/DefaultHomeFinderServiceTest.java diff --git a/test/ch/cyberduck/core/shared/DefaultUploadFeatureTest.java b/protocols/src/test/java/ch/cyberduck/core/shared/DefaultUploadFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/shared/DefaultUploadFeatureTest.java rename to protocols/src/test/java/ch/cyberduck/core/shared/DefaultUploadFeatureTest.java diff --git a/test/ch/cyberduck/core/shared/DefaultUrlProviderTest.java b/protocols/src/test/java/ch/cyberduck/core/shared/DefaultUrlProviderTest.java similarity index 90% rename from test/ch/cyberduck/core/shared/DefaultUrlProviderTest.java rename to protocols/src/test/java/ch/cyberduck/core/shared/DefaultUrlProviderTest.java index a900068516..ecb2ced1ca 100644 --- a/test/ch/cyberduck/core/shared/DefaultUrlProviderTest.java +++ b/protocols/src/test/java/ch/cyberduck/core/shared/DefaultUrlProviderTest.java @@ -5,7 +5,7 @@ import ch.cyberduck.core.Credentials; import ch.cyberduck.core.DescriptiveUrl; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; -import ch.cyberduck.core.dav.DAVProtocol; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.sftp.SFTPProtocol; import org.junit.Test; @@ -21,7 +21,7 @@ public class DefaultUrlProviderTest extends AbstractTestCase { @Test public void testDav() throws Exception { - final Host host = new Host(new DAVProtocol(), "test.cyberduck.ch", new Credentials( + final Host host = new Host(new TestProtocol(), "test.cyberduck.ch", new Credentials( "u", "p" )); host.setDefaultPath("/my/documentroot"); @@ -33,7 +33,7 @@ public class DefaultUrlProviderTest extends AbstractTestCase { @Test public void testWhitespace() throws Exception { - final Host host = new Host(new DAVProtocol(), "test.cyberduck.ch ", new Credentials( + final Host host = new Host(new TestProtocol(), "test.cyberduck.ch ", new Credentials( "u", "p" )); assertEquals("http://test.cyberduck.ch/f", @@ -56,7 +56,7 @@ public class DefaultUrlProviderTest extends AbstractTestCase { @Test public void testAbsoluteDocumentRoot() { - Host host = new Host("localhost"); + Host host = new Host(new TestProtocol(), "localhost"); host.setDefaultPath("/usr/home/dkocher/public_html"); Path path = new Path( "/usr/home/dkocher/public_html/file", EnumSet.of(Path.Type.directory)); @@ -67,7 +67,7 @@ public class DefaultUrlProviderTest extends AbstractTestCase { @Test public void testRelativeDocumentRoot() { - Host host = new Host("localhost"); + Host host = new Host(new TestProtocol(), "localhost"); host.setDefaultPath("public_html"); Path path = new Path( "/usr/home/dkocher/public_html/file", EnumSet.of(Path.Type.directory)); @@ -78,7 +78,7 @@ public class DefaultUrlProviderTest extends AbstractTestCase { @Test public void testDefaultPathRoot() { - Host host = new Host("localhost"); + Host host = new Host(new TestProtocol(), "localhost"); host.setDefaultPath("/"); Path path = new Path( "/file", EnumSet.of(Path.Type.directory)); diff --git a/test/ch/cyberduck/core/threading/TransferBackgroundActionTest.java b/protocols/src/test/java/ch/cyberduck/core/threading/TransferBackgroundActionTest.java similarity index 93% rename from test/ch/cyberduck/core/threading/TransferBackgroundActionTest.java rename to protocols/src/test/java/ch/cyberduck/core/threading/TransferBackgroundActionTest.java index 8e4a4755b8..fc56629ef0 100644 --- a/test/ch/cyberduck/core/threading/TransferBackgroundActionTest.java +++ b/protocols/src/test/java/ch/cyberduck/core/threading/TransferBackgroundActionTest.java @@ -29,6 +29,7 @@ import ch.cyberduck.core.Session; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.exception.ConnectionRefusedException; import ch.cyberduck.core.features.Delete; +import ch.cyberduck.core.ftp.FTPProtocol; import ch.cyberduck.core.ftp.FTPSession; import ch.cyberduck.core.ftp.FTPTLSProtocol; import ch.cyberduck.core.openstack.SwiftSession; @@ -36,9 +37,7 @@ import ch.cyberduck.core.s3.S3Session; import ch.cyberduck.core.sftp.SFTPDeleteFeature; import ch.cyberduck.core.sftp.SFTPProtocol; import ch.cyberduck.core.sftp.SFTPSession; -import ch.cyberduck.core.ssl.DefaultX509KeyManager; -import ch.cyberduck.core.ssl.DefaultX509TrustManager; -import ch.cyberduck.core.test.NullLocal; +import ch.cyberduck.core.NullLocal; import ch.cyberduck.core.transfer.CopyTransfer; import ch.cyberduck.core.transfer.DownloadTransfer; import ch.cyberduck.core.transfer.Transfer; @@ -54,8 +53,6 @@ import ch.cyberduck.core.worker.SingleTransferWorker; import org.junit.Test; import java.net.SocketException; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; import java.util.Collections; import java.util.EnumSet; import java.util.UUID; @@ -76,7 +73,7 @@ public class TransferBackgroundActionTest extends AbstractTestCase { runnable.run(); } }; - final Host host = new Host("l"); + final Host host = new Host(new FTPProtocol(), "l"); host.setTransfer(Host.TransferType.newconnection); assertEquals(SingleTransferWorker.class, new TransferBackgroundAction(controller, new SFTPSession(host), PathCache.empty(), new TransferAdapter(), new UploadTransfer(host, Collections.emptyList()), new TransferOptions()).worker.getClass()); @@ -95,7 +92,7 @@ public class TransferBackgroundActionTest extends AbstractTestCase { runnable.run(); } }; - final Host host = new Host("l"); + final Host host = new Host(new FTPProtocol(), "l"); host.setTransfer(Host.TransferType.concurrent); assertEquals(ConcurrentTransferWorker.class, new TransferBackgroundAction(controller, new SFTPSession(host), PathCache.empty(), new TransferAdapter(), new UploadTransfer(host, Collections.emptyList()), new TransferOptions()).worker.getClass()); @@ -131,8 +128,7 @@ public class TransferBackgroundActionTest extends AbstractTestCase { test.attributes().setSize(5L); final Path copy = new Path(directory, UUID.randomUUID().toString(), EnumSet.of(Path.Type.file)); - final CopyTransfer t = new CopyTransfer(host, host, Collections.singletonMap(test, copy), - new DefaultX509TrustManager(), new DefaultX509KeyManager()); + final CopyTransfer t = new CopyTransfer(host, new SFTPSession(host), Collections.singletonMap(test, copy)); final AbstractController controller = new AbstractController() { @Override @@ -193,13 +189,7 @@ public class TransferBackgroundActionTest extends AbstractTestCase { test.attributes().setSize(5L); final Path copy = new Path(new Path("/transfer", EnumSet.of(Path.Type.directory)), UUID.randomUUID().toString(), EnumSet.of(Path.Type.file)); - final Transfer t = new CopyTransfer(session.getHost(), destination.getHost(), - Collections.singletonMap(test, copy), new DefaultX509TrustManager() { - @Override - public void checkServerTrusted(final X509Certificate[] certs, final String cipher) throws CertificateException { - // - } - }, new DefaultX509KeyManager()); + final Transfer t = new CopyTransfer(session.getHost(), new FTPSession(destination.getHost()), Collections.singletonMap(test, copy)); final AbstractController controller = new AbstractController() { @Override @@ -278,8 +268,6 @@ public class TransferBackgroundActionTest extends AbstractTestCase { return false; } }; - final AtomicBoolean start = new AtomicBoolean(); - final AtomicBoolean stop = new AtomicBoolean(); final Host host = new Host(new SFTPProtocol(), "test.cyberduck.ch"); final SFTPSession session = new SFTPSession(host); final TransferOptions options = new TransferOptions(); diff --git a/test/ch/cyberduck/core/transfer/CopyTransferTest.java b/protocols/src/test/java/ch/cyberduck/core/transfer/CopyTransferTest.java similarity index 88% rename from test/ch/cyberduck/core/transfer/CopyTransferTest.java rename to protocols/src/test/java/ch/cyberduck/core/transfer/CopyTransferTest.java index 86a58a9d62..05a554ad54 100644 --- a/test/ch/cyberduck/core/transfer/CopyTransferTest.java +++ b/protocols/src/test/java/ch/cyberduck/core/transfer/CopyTransferTest.java @@ -25,13 +25,13 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.ListProgressListener; import ch.cyberduck.core.Path; import ch.cyberduck.core.SerializerFactory; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.ftp.FTPProtocol; +import ch.cyberduck.core.ftp.FTPSession; import ch.cyberduck.core.io.BandwidthThrottle; import ch.cyberduck.core.serializer.TransferDictionary; import ch.cyberduck.core.sftp.SFTPProtocol; -import ch.cyberduck.core.ssl.DefaultX509KeyManager; -import ch.cyberduck.core.ssl.DefaultX509TrustManager; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullSession; import org.junit.Test; @@ -49,9 +49,8 @@ public class CopyTransferTest extends AbstractTestCase { @Test public void testSerialize() throws Exception { final Path test = new Path("t", EnumSet.of(Path.Type.file)); - CopyTransfer t = new CopyTransfer(new Host(new SFTPProtocol(), "t"), - new Host(new FTPProtocol(), "t"), Collections.singletonMap(test, new Path("d", EnumSet.of(Path.Type.file))), - new DefaultX509TrustManager(), new DefaultX509KeyManager()); + CopyTransfer t = new CopyTransfer(new Host(new SFTPProtocol()), + new FTPSession(new Host(new FTPProtocol())), Collections.singletonMap(test, new Path("d", EnumSet.of(Path.Type.file)))); t.addSize(4L); t.addTransferred(3L); final Transfer serialized = new TransferDictionary().deserialize(t.serialize(SerializerFactory.get())); @@ -90,10 +89,11 @@ public class CopyTransferTest extends AbstractTestCase { @Test public void testList() throws Exception { - Transfer t = new CopyTransfer(new Host("s"), new Host("t"), Collections.singletonMap( + Transfer t = new CopyTransfer(new Host(new TestProtocol()), + new NullSession(new Host(new TestProtocol())), Collections.singletonMap( new Path("/s", EnumSet.of(Path.Type.directory)), - new Path("/t", EnumSet.of(Path.Type.directory))), new DefaultX509TrustManager(), new DefaultX509KeyManager()); - final NullSession session = new NullSession(new Host("t")) { + new Path("/t", EnumSet.of(Path.Type.directory)))); + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { final AttributedList children = new AttributedList(); diff --git a/test/ch/cyberduck/core/transfer/DownloadTransferTest.java b/protocols/src/test/java/ch/cyberduck/core/transfer/DownloadTransferTest.java similarity index 80% rename from test/ch/cyberduck/core/transfer/DownloadTransferTest.java rename to protocols/src/test/java/ch/cyberduck/core/transfer/DownloadTransferTest.java index 2a8f620ccd..4eb323541a 100644 --- a/test/ch/cyberduck/core/transfer/DownloadTransferTest.java +++ b/protocols/src/test/java/ch/cyberduck/core/transfer/DownloadTransferTest.java @@ -3,7 +3,6 @@ package ch.cyberduck.core.transfer; import ch.cyberduck.core.*; import ch.cyberduck.core.dav.DAVSSLProtocol; import ch.cyberduck.core.dav.DAVSession; -import ch.cyberduck.core.exception.AccessDeniedException; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.filter.DownloadRegexFilter; import ch.cyberduck.core.ftp.FTPSession; @@ -11,10 +10,9 @@ import ch.cyberduck.core.ftp.FTPTLSProtocol; import ch.cyberduck.core.io.DisabledStreamListener; import ch.cyberduck.core.local.LocalTouchFactory; import ch.cyberduck.core.preferences.PreferencesFactory; -import ch.cyberduck.core.serializer.TransferDictionary; import ch.cyberduck.core.shared.DefaultDownloadFeature; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; +import ch.cyberduck.core.NullLocal; +import ch.cyberduck.core.NullSession; import ch.cyberduck.core.transfer.download.AbstractDownloadFilter; import ch.cyberduck.core.transfer.download.DownloadFilterOptions; import ch.cyberduck.core.transfer.download.DownloadRegexPriorityComparator; @@ -42,51 +40,11 @@ import static org.junit.Assert.*; */ public class DownloadTransferTest extends AbstractTestCase { - @Test - public void testSerializeComplete() throws Exception { - // Test transfer to complete with existing directory - final Host host = new Host("t"); - final Transfer t = new DownloadTransfer(host, new Path("/t", EnumSet.of(Path.Type.directory)), new NullLocal("t") { - @Override - public boolean exists() { - return true; - } - - @Override - public AttributedList list(final Filter filter) throws AccessDeniedException { - return AttributedList.emptyList(); - } - - @Override - public boolean isFile() { - return false; - } - - @Override - public boolean isDirectory() { - return true; - } - }); - final NullSession session = new NullSession(host); - new SingleTransferWorker(session, t, new TransferOptions(), - new TransferSpeedometer(t), new DisabledTransferPrompt() { - @Override - public TransferAction prompt(final TransferItem file) { - return TransferAction.overwrite; - } - }, new DisabledTransferErrorCallback(), new DisabledTransferItemCallback(), - new DisabledProgressListener(), new DisabledStreamListener(), new DisabledLoginCallback()).run(session); - assertTrue(t.isComplete()); - final Transfer serialized = new TransferDictionary().deserialize(t.serialize(SerializerFactory.get())); - assertNotSame(t, serialized); - assertTrue(serialized.isComplete()); - } - @Test public void testList() throws Exception { final Path root = new Path("/t", EnumSet.of(Path.Type.directory)); - Transfer t = new DownloadTransfer(new Host("t"), root, new NullLocal("l")); - final NullSession session = new NullSession(new Host("t")) { + Transfer t = new DownloadTransfer(new Host(new TestProtocol()), root, new NullLocal("l")); + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { final AttributedList children = new AttributedList(); @@ -107,7 +65,7 @@ public class DownloadTransferTest extends AbstractTestCase { @Test public void testListSorted() throws Exception { final Path root = new Path("/t", EnumSet.of(Path.Type.directory)); - final NullSession session = new NullSession(new Host("t")) { + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { final AttributedList children = new AttributedList(); @@ -117,7 +75,7 @@ public class DownloadTransferTest extends AbstractTestCase { } }; { - Transfer t = new DownloadTransfer(new Host("t"), Collections.singletonList(new TransferItem(root, new NullLocal("l"))), new DownloadRegexFilter(), + Transfer t = new DownloadTransfer(new Host(new TestProtocol()), Collections.singletonList(new TransferItem(root, new NullLocal("l"))), new DownloadRegexFilter(), new DownloadRegexPriorityComparator(".*\\.html")); final List list = t.list(session, root, new NullLocal("t") { @Override @@ -129,7 +87,7 @@ public class DownloadTransferTest extends AbstractTestCase { assertEquals(new Path("/t/c", EnumSet.of(Path.Type.file)), list.get(1).remote); } { - Transfer t = new DownloadTransfer(new Host("t"), Collections.singletonList(new TransferItem(root, new NullLocal("l"))), new DownloadRegexFilter(), + Transfer t = new DownloadTransfer(new Host(new TestProtocol()), Collections.singletonList(new TransferItem(root, new NullLocal("l"))), new DownloadRegexFilter(), new DownloadRegexPriorityComparator()); final List list = t.list(session, root, new NullLocal("t") { @Override @@ -145,8 +103,8 @@ public class DownloadTransferTest extends AbstractTestCase { @Test public void testChildrenEmpty() throws Exception { final Path root = new Path("/t", EnumSet.of(Path.Type.directory)); - final Transfer t = new DownloadTransfer(new Host("t"), root, null); - final NullSession session = new NullSession(new Host("t")) { + final Transfer t = new DownloadTransfer(new Host(new TestProtocol()), root, null); + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { return AttributedList.emptyList(); @@ -170,7 +128,7 @@ public class DownloadTransferTest extends AbstractTestCase { new DisabledPasswordStore(), new DisabledProgressListener(), new DisabledTranscriptListener()); service.connect(session, PathCache.empty()); final Path test = new Path("/Cyberduck-4.6.zip", EnumSet.of(Path.Type.file)); - final Transfer transfer = new DownloadTransfer(new Host("t"), test, new NullLocal(UUID.randomUUID().toString(), "transfer")); + final Transfer transfer = new DownloadTransfer(new Host(new TestProtocol()), test, new NullLocal(UUID.randomUUID().toString(), "transfer")); final SingleTransferWorker worker = new SingleTransferWorker(session, transfer, new TransferOptions(), new TransferSpeedometer(transfer), new DisabledTransferPrompt(), new DisabledTransferErrorCallback(), new DisabledTransferItemCallback(), new DisabledProgressListener(), new DisabledStreamListener(), new DisabledLoginCallback()); @@ -188,7 +146,7 @@ public class DownloadTransferTest extends AbstractTestCase { session.open(new DisabledHostKeyCallback(), new DisabledTranscriptListener()); session.login(new DisabledPasswordStore(), new DisabledLoginCallback(), new DisabledCancelCallback()); final Path test = new Path("/transfer", EnumSet.of(Path.Type.directory)); - final Transfer transfer = new DownloadTransfer(new Host("t"), test, new NullLocal(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + final Transfer transfer = new DownloadTransfer(new Host(new TestProtocol()), test, new NullLocal(UUID.randomUUID().toString(), UUID.randomUUID().toString())); final Map table = new HashMap(); final SingleTransferWorker worker = new SingleTransferWorker(session, transfer, new TransferOptions(), @@ -233,7 +191,7 @@ public class DownloadTransferTest extends AbstractTestCase { @Override public AbstractDownloadFilter filter(final Session session, final TransferAction action, final ProgressListener listener) { return new ResumeFilter(new DownloadSymlinkResolver(Collections.singletonList(new TransferItem(test))), - new NullSession(new Host("h")), new DownloadFilterOptions(), new DefaultDownloadFeature(session) { + new NullSession(new Host(new TestProtocol())), new DownloadFilterOptions(), new DefaultDownloadFeature(session) { @Override public boolean offset(final Path file) throws BackgroundException { return true; @@ -268,7 +226,7 @@ public class DownloadTransferTest extends AbstractTestCase { @Test public void testActionFileExistsTrue() throws Exception { final Path root = new Path("t", EnumSet.of(Path.Type.file)); - Transfer t = new DownloadTransfer(new Host("t"), root, new NullLocal("p", "t") { + Transfer t = new DownloadTransfer(new Host(new TestProtocol()), root, new NullLocal("p", "t") { @Override public boolean exists() { return true; @@ -280,7 +238,7 @@ public class DownloadTransferTest extends AbstractTestCase { } }); final AtomicBoolean prompt = new AtomicBoolean(); - assertEquals(TransferAction.callback, t.action(new NullSession(new Host("t")), false, false, new DisabledTransferPrompt() { + assertEquals(TransferAction.callback, t.action(new NullSession(new Host(new TestProtocol())), false, false, new DisabledTransferPrompt() { @Override public TransferAction prompt(final TransferItem file) { prompt.set(true); @@ -293,7 +251,7 @@ public class DownloadTransferTest extends AbstractTestCase { @Test public void testActionFileExistsFalse() throws Exception { final Path root = new Path("t", EnumSet.of(Path.Type.file)); - final Transfer t = new DownloadTransfer(new Host("t"), root, new NullLocal("p", "t") { + final Transfer t = new DownloadTransfer(new Host(new TestProtocol()), root, new NullLocal("p", "t") { @Override public boolean exists() { return false; @@ -305,7 +263,7 @@ public class DownloadTransferTest extends AbstractTestCase { } }); final AtomicBoolean prompt = new AtomicBoolean(); - assertEquals(TransferAction.overwrite, t.action(new NullSession(new Host("t")), false, false, new DisabledTransferPrompt() { + assertEquals(TransferAction.overwrite, t.action(new NullSession(new Host(new TestProtocol())), false, false, new DisabledTransferPrompt() { @Override public TransferAction prompt(final TransferItem file) { fail(); @@ -318,7 +276,7 @@ public class DownloadTransferTest extends AbstractTestCase { @Test public void testActionDirectoryExistsTrue() throws Exception { final Path root = new Path("t", EnumSet.of(Path.Type.directory)); - final Transfer t = new DownloadTransfer(new Host("t"), root, new NullLocal("p", "t") { + final Transfer t = new DownloadTransfer(new Host(new TestProtocol()), root, new NullLocal("p", "t") { @Override public boolean exists() { return true; @@ -330,7 +288,7 @@ public class DownloadTransferTest extends AbstractTestCase { } }); final AtomicBoolean prompt = new AtomicBoolean(); - assertEquals(TransferAction.callback, t.action(new NullSession(new Host("t")), false, false, new DisabledTransferPrompt() { + assertEquals(TransferAction.callback, t.action(new NullSession(new Host(new TestProtocol())), false, false, new DisabledTransferPrompt() { @Override public TransferAction prompt(final TransferItem file) { prompt.set(true); @@ -343,7 +301,7 @@ public class DownloadTransferTest extends AbstractTestCase { @Test public void testActionDirectoryExistsFalse() throws Exception { final Path root = new Path("t", EnumSet.of(Path.Type.directory)); - final Transfer t = new DownloadTransfer(new Host("t"), root, new NullLocal("p", "t") { + final Transfer t = new DownloadTransfer(new Host(new TestProtocol()), root, new NullLocal("p", "t") { @Override public boolean exists() { return false; @@ -355,7 +313,7 @@ public class DownloadTransferTest extends AbstractTestCase { } }); final AtomicBoolean prompt = new AtomicBoolean(); - assertEquals(TransferAction.overwrite, t.action(new NullSession(new Host("t")), false, false, new DisabledTransferPrompt() { + assertEquals(TransferAction.overwrite, t.action(new NullSession(new Host(new TestProtocol())), false, false, new DisabledTransferPrompt() { @Override public TransferAction prompt(final TransferItem file) { fail(); @@ -368,8 +326,8 @@ public class DownloadTransferTest extends AbstractTestCase { @Test public void testActionResume() throws Exception { final Path root = new Path("t", EnumSet.of(Path.Type.file)); - final Transfer t = new DownloadTransfer(new Host("t"), root, new NullLocal(System.getProperty("java.io.tmpdir"))); - assertEquals(TransferAction.resume, t.action(new NullSession(new Host("t")), true, false, new DisabledTransferPrompt() { + final Transfer t = new DownloadTransfer(new Host(new TestProtocol()), root, new NullLocal(System.getProperty("java.io.tmpdir"))); + assertEquals(TransferAction.resume, t.action(new NullSession(new Host(new TestProtocol())), true, false, new DisabledTransferPrompt() { @Override public TransferAction prompt(final TransferItem file) { fail(); @@ -381,7 +339,7 @@ public class DownloadTransferTest extends AbstractTestCase { @Test public void testStatus() throws Exception { final Path parent = new Path("t", EnumSet.of(Path.Type.file)); - final Transfer t = new DownloadTransfer(new Host("t"), parent, new NullLocal(System.getProperty("java.io.tmpdir"))); + final Transfer t = new DownloadTransfer(new Host(new TestProtocol()), parent, new NullLocal(System.getProperty("java.io.tmpdir"))); assertFalse(t.isRunning()); assertFalse(t.isReset()); assertNull(t.getTimestamp()); @@ -390,8 +348,8 @@ public class DownloadTransferTest extends AbstractTestCase { @Test public void testRegexFilter() throws Exception { final Path parent = new Path("t", EnumSet.of(Path.Type.directory)); - final Transfer t = new DownloadTransfer(new Host("t"), parent, new NullLocal(System.getProperty("java.io.tmpdir"))); - final NullSession session = new NullSession(new Host("t")) { + final Transfer t = new DownloadTransfer(new Host(new TestProtocol()), parent, new NullLocal(System.getProperty("java.io.tmpdir"))); + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { final AttributedList l = new AttributedList(); @@ -410,8 +368,8 @@ public class DownloadTransferTest extends AbstractTestCase { @Test public void testDownloadDuplicateNameFolderAndFile() throws Exception { final Path parent = new Path("t", EnumSet.of(Path.Type.directory)); - final Transfer t = new DownloadTransfer(new Host("t"), parent, new NullLocal(System.getProperty("java.io.tmpdir"))); - final NullSession session = new NullSession(new Host("t")) { + final Transfer t = new DownloadTransfer(new Host(new TestProtocol()), parent, new NullLocal(System.getProperty("java.io.tmpdir"))); + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { final AttributedList l = new AttributedList(); diff --git a/test/ch/cyberduck/core/transfer/UploadTransferTest.java b/protocols/src/test/java/ch/cyberduck/core/transfer/UploadTransferTest.java similarity index 93% rename from test/ch/cyberduck/core/transfer/UploadTransferTest.java rename to protocols/src/test/java/ch/cyberduck/core/transfer/UploadTransferTest.java index bc3f46400b..840b0d8e2b 100644 --- a/test/ch/cyberduck/core/transfer/UploadTransferTest.java +++ b/protocols/src/test/java/ch/cyberduck/core/transfer/UploadTransferTest.java @@ -15,8 +15,6 @@ import ch.cyberduck.core.io.StreamListener; import ch.cyberduck.core.local.LocalTouchFactory; import ch.cyberduck.core.openstack.SwiftSession; import ch.cyberduck.core.s3.S3Session; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.test.NullSession; import ch.cyberduck.core.transfer.upload.AbstractUploadFilter; import ch.cyberduck.core.transfer.upload.UploadFilterOptions; import ch.cyberduck.core.transfer.upload.UploadRegexPriorityComparator; @@ -47,9 +45,9 @@ public class UploadTransferTest extends AbstractTestCase { public void testChildrenEmpty() throws Exception { final Path root = new Path("/t", EnumSet.of(Path.Type.directory)) { }; - Transfer t = new UploadTransfer(new Host("t"), root, + Transfer t = new UploadTransfer(new Host(new TestProtocol()), root, new Local(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString())); - assertTrue(t.list(new NullSession(new Host("t")), root, new NullLocal("t") { + assertTrue(t.list(new NullSession(new Host(new TestProtocol())), root, new NullLocal("t") { @Override public AttributedList list() { return AttributedList.emptyList(); @@ -68,9 +66,9 @@ public class UploadTransferTest extends AbstractTestCase { } }; final Path root = new Path("/t", EnumSet.of(Path.Type.file)); - Transfer t = new UploadTransfer(new Host("t"), root, local); + Transfer t = new UploadTransfer(new Host(new TestProtocol()), root, local); assertEquals(Collections.singletonList(new TransferItem(new Path("/t/c", EnumSet.of(Path.Type.file)), new NullLocal("t/c"))), - t.list(new NullSession(new Host("t")), root, local, new DisabledListProgressListener())); + t.list(new NullSession(new Host(new TestProtocol())), root, local, new DisabledListProgressListener())); } @Test @@ -86,15 +84,15 @@ public class UploadTransferTest extends AbstractTestCase { }; final Path root = new Path("/t", EnumSet.of(Path.Type.file)); { - Transfer t = new UploadTransfer(new Host("t"), Collections.singletonList(new TransferItem(root, local)), + Transfer t = new UploadTransfer(new Host(new TestProtocol()), Collections.singletonList(new TransferItem(root, local)), new UploadRegexFilter(), new UploadRegexPriorityComparator(".*\\.html")); - final List list = t.list(new NullSession(new Host("t")), root, local, new DisabledListProgressListener()); + final List list = t.list(new NullSession(new Host(new TestProtocol())), root, local, new DisabledListProgressListener()); assertEquals(new NullLocal(local.getAbsolute(), "c.html"), list.get(0).local); assertEquals(new NullLocal(local.getAbsolute(), "c"), list.get(1).local); } { - Transfer t = new UploadTransfer(new Host("t"), root, local, new UploadRegexFilter()); - final List list = t.list(new NullSession(new Host("t")), root, local, new DisabledListProgressListener()); + Transfer t = new UploadTransfer(new Host(new TestProtocol()), root, local, new UploadRegexFilter()); + final List list = t.list(new NullSession(new Host(new TestProtocol())), root, local, new DisabledListProgressListener()); assertEquals(new NullLocal(local.getAbsolute(), "c.html"), list.get(1).local); assertEquals(new NullLocal(local.getAbsolute(), "c"), list.get(0).local); } @@ -134,7 +132,7 @@ public class UploadTransferTest extends AbstractTestCase { } }; final Path root = new Path("/t", EnumSet.of(Path.Type.directory)); - final NullSession session = new NullSession(new Host("t")) { + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { if(file.equals(root.getParent())) { @@ -143,7 +141,7 @@ public class UploadTransferTest extends AbstractTestCase { return AttributedList.emptyList(); } }; - Transfer t = new UploadTransfer(new Host("t"), root, local) { + Transfer t = new UploadTransfer(new Host(new TestProtocol()), root, local) { @Override public void transfer(final Session session, final Path file, Local local, final TransferOptions options, final TransferStatus status, @@ -199,14 +197,14 @@ public class UploadTransferTest extends AbstractTestCase { } }; final Path root = new Path("/t", EnumSet.of(Path.Type.directory)); - final NullSession session = new NullSession(new Host("t")) { + final NullSession session = new NullSession(new Host(new TestProtocol())) { @Override public AttributedList list(final Path file, final ListProgressListener listener) { c.incrementAndGet(); return AttributedList.emptyList(); } }; - Transfer t = new UploadTransfer(new Host("t"), root, local) { + Transfer t = new UploadTransfer(new Host(new TestProtocol()), root, local) { @Override public void transfer(final Session session, final Path file, Local local, final TransferOptions options, final TransferStatus status, @@ -308,7 +306,7 @@ public class UploadTransferTest extends AbstractTestCase { public void testUploadTemporaryName() throws Exception { final Path test = new Path("/f", EnumSet.of(Path.Type.file)); final AtomicBoolean moved = new AtomicBoolean(); - final Host host = new Host("t"); + final Host host = new Host(new TestProtocol()); final Session session = new NullSession(host) { @Override public T getFeature(final Class type) { @@ -419,7 +417,7 @@ public class UploadTransferTest extends AbstractTestCase { @Test public void testTemporaryDisabledLargeUpload() throws Exception { - final Host h = new Host("h"); + final Host h = new Host(new TestProtocol()); final AbstractUploadFilter f = new UploadTransfer(h, Collections.emptyList()) .filter(new SwiftSession(h), TransferAction.overwrite, new DisabledProgressListener()); final Path file = new Path("/t", EnumSet.of(Path.Type.file)); @@ -430,7 +428,7 @@ public class UploadTransferTest extends AbstractTestCase { @Test public void testTemporaryDisabledMultipartUpload() throws Exception { - final Host h = new Host("h"); + final Host h = new Host(new TestProtocol()); final AbstractUploadFilter f = new UploadTransfer(h, Collections.emptyList()) .filter(new S3Session(h), TransferAction.overwrite, new DisabledProgressListener()); final Path file = new Path("/t", EnumSet.of(Path.Type.file)); diff --git a/test/ch/cyberduck/core/worker/ConcurrentTransferWorkerTest.java b/protocols/src/test/java/ch/cyberduck/core/worker/ConcurrentTransferWorkerTest.java similarity index 97% rename from test/ch/cyberduck/core/worker/ConcurrentTransferWorkerTest.java rename to protocols/src/test/java/ch/cyberduck/core/worker/ConcurrentTransferWorkerTest.java index 6a2302237d..a135cd735c 100644 --- a/test/ch/cyberduck/core/worker/ConcurrentTransferWorkerTest.java +++ b/protocols/src/test/java/ch/cyberduck/core/worker/ConcurrentTransferWorkerTest.java @@ -27,7 +27,7 @@ import ch.cyberduck.core.sftp.SFTPProtocol; import ch.cyberduck.core.ssl.CertificateStoreX509KeyManager; import ch.cyberduck.core.ssl.CertificateStoreX509TrustManager; import ch.cyberduck.core.ssl.DefaultTrustManagerHostnameCallback; -import ch.cyberduck.core.test.NullLocal; +import ch.cyberduck.core.NullLocal; import ch.cyberduck.core.transfer.DisabledTransferErrorCallback; import ch.cyberduck.core.transfer.DisabledTransferItemCallback; import ch.cyberduck.core.transfer.DisabledTransferPrompt; @@ -84,7 +84,7 @@ public class ConcurrentTransferWorkerTest extends AbstractTestCase { @Test public void testDoubleRelease() throws Exception { - final Host host = new Host("test.cyberduck.ch"); + final Host host = new Host(new FTPProtocol(), "test.cyberduck.ch"); final Transfer t = new UploadTransfer(host, new Path("/t", EnumSet.of(Path.Type.directory)), new NullLocal("l")); @@ -113,7 +113,7 @@ public class ConcurrentTransferWorkerTest extends AbstractTestCase { @Test(expected = LoginCanceledException.class) public void testBorrowMissingLoginCredentials() throws Exception { - final Host host = new Host("test.cyberduck.ch"); + final Host host = new Host(new FTPProtocol(), "test.cyberduck.ch"); final Transfer t = new UploadTransfer(host, new Path("/t", EnumSet.of(Path.Type.directory)), new NullLocal("l")); @@ -129,7 +129,7 @@ public class ConcurrentTransferWorkerTest extends AbstractTestCase { @Test public void testBorrow() throws Exception { - final Host host = new Host("test.cyberduck.ch"); + final Host host = new Host(new FTPProtocol(), "test.cyberduck.ch"); final Transfer t = new UploadTransfer(host, new Path("/t", EnumSet.of(Path.Type.directory)), new NullLocal("l")); @@ -156,7 +156,7 @@ public class ConcurrentTransferWorkerTest extends AbstractTestCase { @Test public void testSessionReuse() throws Exception { - final Host host = new Host("test.cyberduck.ch"); + final Host host = new Host(new FTPProtocol(), "test.cyberduck.ch"); final Transfer t = new UploadTransfer(host, new Path("/t", EnumSet.of(Path.Type.directory)), new NullLocal("l")); @@ -217,7 +217,7 @@ public class ConcurrentTransferWorkerTest extends AbstractTestCase { for(int i = 1; i <= files; i++) { list.add(new TransferItem(new Path("/t" + i, EnumSet.of(Path.Type.file)), new NullLocal("/t" + i))); } - final Host host = new Host("test.cyberduck.ch"); + final Host host = new Host(new FTPProtocol(), "test.cyberduck.ch"); final Transfer t = new DownloadTransfer(host, list ) { diff --git a/test/ch/cyberduck/core/worker/MountWorkerTest.java b/protocols/src/test/java/ch/cyberduck/core/worker/MountWorkerTest.java similarity index 97% rename from test/ch/cyberduck/core/worker/MountWorkerTest.java rename to protocols/src/test/java/ch/cyberduck/core/worker/MountWorkerTest.java index 647ea27e59..6c140d6b47 100644 --- a/test/ch/cyberduck/core/worker/MountWorkerTest.java +++ b/protocols/src/test/java/ch/cyberduck/core/worker/MountWorkerTest.java @@ -12,6 +12,7 @@ import ch.cyberduck.core.DisabledTranscriptListener; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathCache; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.sftp.SFTPProtocol; import ch.cyberduck.core.sftp.SFTPSession; diff --git a/test/ch/cyberduck/core/worker/SessionListWorkerTest.java b/protocols/src/test/java/ch/cyberduck/core/worker/SessionListWorkerTest.java similarity index 100% rename from test/ch/cyberduck/core/worker/SessionListWorkerTest.java rename to protocols/src/test/java/ch/cyberduck/core/worker/SessionListWorkerTest.java diff --git a/test/ch/cyberduck/core/serializer/impl/1c158c34-db8a-4c32-a732-abd9447bb27c.duck b/protocols/src/test/resources/1c158c34-db8a-4c32-a732-abd9447bb27c.duck similarity index 96% rename from test/ch/cyberduck/core/serializer/impl/1c158c34-db8a-4c32-a732-abd9447bb27c.duck rename to protocols/src/test/resources/1c158c34-db8a-4c32-a732-abd9447bb27c.duck index 47ee780289..b15910d406 100644 --- a/test/ch/cyberduck/core/serializer/impl/1c158c34-db8a-4c32-a732-abd9447bb27c.duck +++ b/protocols/src/test/resources/1c158c34-db8a-4c32-a732-abd9447bb27c.duck @@ -1,17 +1,17 @@ - - - - Protocol - dropbox - Nickname - api.getdropbox.com – Dropbox - UUID - 1c158c34-db8a-4c32-a732-abd9447bb27c - Hostname - api.getdropbox.com - Port - 443 - Username - yla - + + + + Protocol + dropbox + Nickname + api.getdropbox.com – Dropbox + UUID + 1c158c34-db8a-4c32-a732-abd9447bb27c + Hostname + api.getdropbox.com + Port + 443 + Username + yla + \ No newline at end of file diff --git a/test/ch/cyberduck/core/serializer/impl/Custom Regions S3.cyberduckprofile b/protocols/src/test/resources/Custom Regions S3.cyberduckprofile similarity index 97% rename from test/ch/cyberduck/core/serializer/impl/Custom Regions S3.cyberduckprofile rename to protocols/src/test/resources/Custom Regions S3.cyberduckprofile index 499f324613..ba2a22195c 100644 --- a/test/ch/cyberduck/core/serializer/impl/Custom Regions S3.cyberduckprofile +++ b/protocols/src/test/resources/Custom Regions S3.cyberduckprofile @@ -1,41 +1,41 @@ - - - - - - - Protocol - s3 - Vendor - eucalyptus - Description - Eucalyptus Walrus S3 - Default Hostname - ecc.eucalyptus.com - Default Port - 8773 - Context - /services/objectstorage - Regions - - custom - custom2 - - + + + + + + + Protocol + s3 + Vendor + eucalyptus + Description + Eucalyptus Walrus S3 + Default Hostname + ecc.eucalyptus.com + Default Port + 8773 + Context + /services/objectstorage + Regions + + custom + custom2 + + \ No newline at end of file diff --git a/test/ch/cyberduck/core/serializer/impl/Dropbox.cyberduckprofile b/protocols/src/test/resources/Dropbox.cyberduckprofile similarity index 100% rename from test/ch/cyberduck/core/serializer/impl/Dropbox.cyberduckprofile rename to protocols/src/test/resources/Dropbox.cyberduckprofile diff --git a/test/ch/cyberduck/core/serializer/impl/Private Key Legacy.duck b/protocols/src/test/resources/Private Key Legacy.duck similarity index 100% rename from test/ch/cyberduck/core/serializer/impl/Private Key Legacy.duck rename to protocols/src/test/resources/Private Key Legacy.duck diff --git a/test/ch/cyberduck/core/serializer/impl/Private Key.duck b/protocols/src/test/resources/Private Key.duck similarity index 100% rename from test/ch/cyberduck/core/serializer/impl/Private Key.duck rename to protocols/src/test/resources/Private Key.duck diff --git a/test/ch/cyberduck/core/serializer/impl/c44b5120-8dfe-41af-acd3-da99d87b811f.cyberducktransfer b/protocols/src/test/resources/c44b5120-8dfe-41af-acd3-da99d87b811f.cyberducktransfer similarity index 96% rename from test/ch/cyberduck/core/serializer/impl/c44b5120-8dfe-41af-acd3-da99d87b811f.cyberducktransfer rename to protocols/src/test/resources/c44b5120-8dfe-41af-acd3-da99d87b811f.cyberducktransfer index 16170856b1..bf6f5006cc 100755 --- a/test/ch/cyberduck/core/serializer/impl/c44b5120-8dfe-41af-acd3-da99d87b811f.cyberducktransfer +++ b/protocols/src/test/resources/c44b5120-8dfe-41af-acd3-da99d87b811f.cyberducktransfer @@ -1,59 +1,59 @@ - - - - Kind - 1 - Host - - Protocol - swift - Provider - rackspace - Nickname - Rackspace Cloudfiles - UUID - 5bd92e36-8263-4138-a00b-242bb6bca8ba - Hostname - identity.api.rackspacecloud.com - Port - 443 - Username - rackcloud02 - Path - / - Access Timestamp - 1383924960218 - - Roots - - - Remote - /test.cyberduck.ch/bookmarks_en.png - Local - C:\Users\Yves Langisch\Pictures\bookmarks_en.png - Local Dictionary - - Path - C:\Users\Yves Langisch\Pictures\bookmarks_en.png - - Attributes - - Type - 1 - Duplicate - false - - - - UUID - 1c65e96c-b67b-490f-8476-f7c9a0afa907 - Size - 0 - Current - 0 - Timestamp - 1383924966131 - Bandwidth - -1.0 - + + + + Kind + 1 + Host + + Protocol + swift + Provider + rackspace + Nickname + Rackspace Cloudfiles + UUID + 5bd92e36-8263-4138-a00b-242bb6bca8ba + Hostname + identity.api.rackspacecloud.com + Port + 443 + Username + rackcloud02 + Path + / + Access Timestamp + 1383924960218 + + Roots + + + Remote + /test.cyberduck.ch/bookmarks_en.png + Local + C:\Users\Yves Langisch\Pictures\bookmarks_en.png + Local Dictionary + + Path + C:\Users\Yves Langisch\Pictures\bookmarks_en.png + + Attributes + + Type + 1 + Duplicate + false + + + + UUID + 1c65e96c-b67b-490f-8476-f7c9a0afa907 + Size + 0 + Current + 0 + Timestamp + 1383924966131 + Bandwidth + -1.0 + \ No newline at end of file diff --git a/test/ch/cyberduck/core/serializer/impl/fcea1809-1d75-42f1-92b5-99b38bc1d63e.cyberducktransfer b/protocols/src/test/resources/fcea1809-1d75-42f1-92b5-99b38bc1d63e.cyberducktransfer similarity index 96% rename from test/ch/cyberduck/core/serializer/impl/fcea1809-1d75-42f1-92b5-99b38bc1d63e.cyberducktransfer rename to protocols/src/test/resources/fcea1809-1d75-42f1-92b5-99b38bc1d63e.cyberducktransfer index 63d8a752ff..c6db748b9b 100755 --- a/test/ch/cyberduck/core/serializer/impl/fcea1809-1d75-42f1-92b5-99b38bc1d63e.cyberducktransfer +++ b/protocols/src/test/resources/fcea1809-1d75-42f1-92b5-99b38bc1d63e.cyberducktransfer @@ -1,64 +1,64 @@ - - - - Kind - 0 - Host - - Protocol - s3 - Nickname - Amazon (HTTPS) - UUID - 66eabef6-0686-4b51-8044-dab4fd053132 - Hostname - s3.amazonaws.com - Port - 443 - Username - AKIAIUTN5UDAA36D3RLQ - Path - / - Access Timestamp - 1395838863886 - - Items - - - Remote - - Type - [file] - Remote - /cyberduck/Cyberduck-3.3.zip - Attributes - - Size - 16486273 - Modified - 1280149932000 - Duplicate - false - Storage Class - REDUCED_REDUNDANCY - - - Local Dictionary - - Path - C:\Users\Yves Langisch\Desktop\Cyberduck-3.3.zip - - - - UUID - 34413a55-4434-453d-9560-6fabe4803b88 - Size - 16486273 - Current - 16486273 - Timestamp - 1395838870454 - Bandwidth - -1.0 - + + + + Kind + 0 + Host + + Protocol + s3 + Nickname + Amazon (HTTPS) + UUID + 66eabef6-0686-4b51-8044-dab4fd053132 + Hostname + s3.amazonaws.com + Port + 443 + Username + AKIAIUTN5UDAA36D3RLQ + Path + / + Access Timestamp + 1395838863886 + + Items + + + Remote + + Type + [file] + Remote + /cyberduck/Cyberduck-3.3.zip + Attributes + + Size + 16486273 + Modified + 1280149932000 + Duplicate + false + Storage Class + REDUCED_REDUNDANCY + + + Local Dictionary + + Path + C:\Users\Yves Langisch\Desktop\Cyberduck-3.3.zip + + + + UUID + 34413a55-4434-453d-9560-6fabe4803b88 + Size + 16486273 + Current + 16486273 + Timestamp + 1395838870454 + Bandwidth + -1.0 + \ No newline at end of file diff --git a/test/ch/cyberduck/core/serializer/impl/s3.amazonaws.com – S3.duck b/protocols/src/test/resources/s3.amazonaws.com – S3.duck similarity index 100% rename from test/ch/cyberduck/core/serializer/impl/s3.amazonaws.com – S3.duck rename to protocols/src/test/resources/s3.amazonaws.com – S3.duck diff --git a/runtime.xml b/runtime.xml new file mode 100644 index 0000000000..374318f36f --- /dev/null +++ b/runtime.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s3/pom.xml b/s3/pom.xml new file mode 100644 index 0000000000..77225c5444 --- /dev/null +++ b/s3/pom.xml @@ -0,0 +1,67 @@ + + + + 4.0.0 + + ch.cyberduck + parent + 4.8.0-SNAPSHOT + + s3 + jar + + + + ch.cyberduck + core + ${project.version} + + + ch.cyberduck + webdav + ${project.version} + + + ch.cyberduck + udt + ${project.version} + + + ch.cyberduck + test + pom + test + ${project.version} + + + net.java.dev.jets3t + jets3t + + + com.jamesmurty.utils + java-xmlbuilder + 1.1 + + + com.amazonaws + aws-java-sdk-iam + 1.10.34 + + + + diff --git a/source/ch/cyberduck/core/cloudfront/CloudFrontDistributionConfiguration.java b/s3/src/main/java/ch/cyberduck/core/cloudfront/CloudFrontDistributionConfiguration.java similarity index 99% rename from source/ch/cyberduck/core/cloudfront/CloudFrontDistributionConfiguration.java rename to s3/src/main/java/ch/cyberduck/core/cloudfront/CloudFrontDistributionConfiguration.java index 79353d3209..c39ccd986e 100644 --- a/source/ch/cyberduck/core/cloudfront/CloudFrontDistributionConfiguration.java +++ b/s3/src/main/java/ch/cyberduck/core/cloudfront/CloudFrontDistributionConfiguration.java @@ -29,7 +29,6 @@ import ch.cyberduck.core.PasswordStoreFactory; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathContainerService; import ch.cyberduck.core.PreferencesUseragentProvider; -import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.Scheme; import ch.cyberduck.core.analytics.AnalyticsProvider; import ch.cyberduck.core.analytics.QloudstatAnalyticsProvider; @@ -49,6 +48,7 @@ import ch.cyberduck.core.identity.IdentityConfiguration; import ch.cyberduck.core.preferences.PreferencesFactory; import ch.cyberduck.core.proxy.ProxyFactory; import ch.cyberduck.core.s3.S3BucketListService; +import ch.cyberduck.core.s3.S3Protocol; import ch.cyberduck.core.s3.S3Session; import ch.cyberduck.core.ssl.X509KeyManager; import ch.cyberduck.core.ssl.X509TrustManager; @@ -255,7 +255,7 @@ public class CloudFrontDistributionConfiguration if(StringUtils.isNotBlank(distribution.getLoggingContainer())) { // Make bucket name fully qualified final String loggingTarget = ServiceUtils.generateS3HostnameForBucket(distribution.getLoggingContainer(), - false, ProtocolFactory.S3_SSL.getDefaultHostname()); + false, new S3Protocol().getDefaultHostname()); if(log.isDebugEnabled()) { log.debug(String.format("Set logging target for %s to %s", distribution, loggingTarget)); } @@ -539,12 +539,12 @@ public class CloudFrontDistributionConfiguration if(null == distributionConfig.getLoggingStatus()) { // Default logging target to origin itself loggingTarget = ServiceUtils.findBucketNameInHostname(d.getConfig().getOrigin().getDomainName(), - ProtocolFactory.S3_SSL.getDefaultHostname()); + new S3Protocol().getDefaultHostname()); } else { // Make s3.amazonaws.com loggingTarget = ServiceUtils.findBucketNameInHostname(distributionConfig.getLoggingStatus().getBucket(), - ProtocolFactory.S3_SSL.getDefaultHostname()); + new S3Protocol().getDefaultHostname()); } final Distribution distribution = new Distribution(this.getOrigin(container, method), method, d.getConfig().isEnabled()); distribution.setId(d.getId()); diff --git a/source/ch/cyberduck/core/cloudfront/CloudFrontServiceExceptionMappingService.java b/s3/src/main/java/ch/cyberduck/core/cloudfront/CloudFrontServiceExceptionMappingService.java similarity index 100% rename from source/ch/cyberduck/core/cloudfront/CloudFrontServiceExceptionMappingService.java rename to s3/src/main/java/ch/cyberduck/core/cloudfront/CloudFrontServiceExceptionMappingService.java diff --git a/source/ch/cyberduck/core/cloudfront/CustomOriginCloudFrontDistributionConfiguration.java b/s3/src/main/java/ch/cyberduck/core/cloudfront/CustomOriginCloudFrontDistributionConfiguration.java similarity index 93% rename from source/ch/cyberduck/core/cloudfront/CustomOriginCloudFrontDistributionConfiguration.java rename to s3/src/main/java/ch/cyberduck/core/cloudfront/CustomOriginCloudFrontDistributionConfiguration.java index 62de88b732..ece00ca878 100644 --- a/source/ch/cyberduck/core/cloudfront/CustomOriginCloudFrontDistributionConfiguration.java +++ b/s3/src/main/java/ch/cyberduck/core/cloudfront/CustomOriginCloudFrontDistributionConfiguration.java @@ -23,10 +23,10 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.LoginCallback; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathNormalizer; -import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.TranscriptListener; import ch.cyberduck.core.cdn.Distribution; import ch.cyberduck.core.exception.BackgroundException; +import ch.cyberduck.core.s3.S3Protocol; import ch.cyberduck.core.s3.S3Session; import ch.cyberduck.core.ssl.DefaultTrustManagerHostnameCallback; import ch.cyberduck.core.ssl.KeychainX509KeyManager; @@ -55,7 +55,7 @@ public class CustomOriginCloudFrontDistributionConfiguration extends CloudFrontD final TranscriptListener transcript) { this(origin, new KeychainX509TrustManager(new DefaultTrustManagerHostnameCallback( - new Host(ProtocolFactory.S3_SSL, ProtocolFactory.S3_SSL.getDefaultHostname())) + new Host(new S3Protocol(), new S3Protocol().getDefaultHostname())) ), new KeychainX509KeyManager(), transcript); @@ -66,8 +66,8 @@ public class CustomOriginCloudFrontDistributionConfiguration extends CloudFrontD final X509KeyManager key, final TranscriptListener transcript) { // Configure with the same host as S3 to get the same credentials from the keychain. - super(new S3Session(new Host(ProtocolFactory.S3_SSL, - ProtocolFactory.S3_SSL.getDefaultHostname(), origin.getCdnCredentials()), trust, key), trust, key); + super(new S3Session(new Host(new S3Protocol(), + new S3Protocol().getDefaultHostname(), origin.getCdnCredentials()), trust, key), trust, key); this.origin = origin; this.transcript = transcript; } diff --git a/source/ch/cyberduck/core/cloudfront/WebsiteCloudFrontDistributionConfiguration.java b/s3/src/main/java/ch/cyberduck/core/cloudfront/WebsiteCloudFrontDistributionConfiguration.java similarity index 100% rename from source/ch/cyberduck/core/cloudfront/WebsiteCloudFrontDistributionConfiguration.java rename to s3/src/main/java/ch/cyberduck/core/cloudfront/WebsiteCloudFrontDistributionConfiguration.java diff --git a/source/ch/cyberduck/core/gstorage/GoogleStorageAccessControlListFeature.java b/s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageAccessControlListFeature.java similarity index 100% rename from source/ch/cyberduck/core/gstorage/GoogleStorageAccessControlListFeature.java rename to s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageAccessControlListFeature.java diff --git a/source/ch/cyberduck/core/gstorage/GoogleStorageBucketCreateService.java b/s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageBucketCreateService.java similarity index 100% rename from source/ch/cyberduck/core/gstorage/GoogleStorageBucketCreateService.java rename to s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageBucketCreateService.java diff --git a/source/ch/cyberduck/core/gstorage/GoogleStorageDirectoryFeature.java b/s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageDirectoryFeature.java similarity index 100% rename from source/ch/cyberduck/core/gstorage/GoogleStorageDirectoryFeature.java rename to s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageDirectoryFeature.java diff --git a/source/ch/cyberduck/core/gstorage/GoogleStorageLoggingFeature.java b/s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageLoggingFeature.java similarity index 100% rename from source/ch/cyberduck/core/gstorage/GoogleStorageLoggingFeature.java rename to s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageLoggingFeature.java diff --git a/source/ch/cyberduck/core/gstorage/GoogleStorageProtocol.java b/s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageProtocol.java similarity index 95% rename from source/ch/cyberduck/core/gstorage/GoogleStorageProtocol.java rename to s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageProtocol.java index b3a0a094e2..73da275cdc 100644 --- a/source/ch/cyberduck/core/gstorage/GoogleStorageProtocol.java +++ b/s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageProtocol.java @@ -61,6 +61,12 @@ public final class GoogleStorageProtocol extends AbstractProtocol { return false; } + @Override + public boolean isPasswordConfigurable() { + // Only provide Project ID or Number + return false; + } + @Override public String getDefaultHostname() { return "storage.googleapis.com"; diff --git a/source/ch/cyberduck/core/gstorage/GoogleStorageSession.java b/s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageSession.java similarity index 98% rename from source/ch/cyberduck/core/gstorage/GoogleStorageSession.java rename to s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageSession.java index c5458e5b8f..1ace6dec29 100644 --- a/source/ch/cyberduck/core/gstorage/GoogleStorageSession.java +++ b/s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageSession.java @@ -41,6 +41,7 @@ import ch.cyberduck.core.features.Logging; import ch.cyberduck.core.features.Redundancy; import ch.cyberduck.core.features.Upload; import ch.cyberduck.core.features.Versioning; +import ch.cyberduck.core.features.Write; import ch.cyberduck.core.http.HttpResponseExceptionMappingService; import ch.cyberduck.core.identity.DefaultCredentialsIdentityConfiguration; import ch.cyberduck.core.identity.IdentityConfiguration; @@ -48,8 +49,10 @@ import ch.cyberduck.core.preferences.Preferences; import ch.cyberduck.core.preferences.PreferencesFactory; import ch.cyberduck.core.proxy.ProxyFinder; import ch.cyberduck.core.s3.S3DefaultDeleteFeature; +import ch.cyberduck.core.s3.S3MultipartWriteFeature; import ch.cyberduck.core.s3.S3Session; import ch.cyberduck.core.s3.S3SingleUploadService; +import ch.cyberduck.core.s3.S3WriteFeature; import ch.cyberduck.core.ssl.X509KeyManager; import ch.cyberduck.core.ssl.X509TrustManager; import ch.cyberduck.core.threading.CancelCallback; @@ -251,6 +254,9 @@ public class GoogleStorageSession extends S3Session { if(type == Upload.class) { return (T) new S3SingleUploadService(this); } + if(type == Write.class) { + return (T) new S3WriteFeature(this); + } if(type == Delete.class) { return (T) new S3DefaultDeleteFeature(this); } diff --git a/source/ch/cyberduck/core/gstorage/GoogleStorageUrlProvider.java b/s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageUrlProvider.java similarity index 100% rename from source/ch/cyberduck/core/gstorage/GoogleStorageUrlProvider.java rename to s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageUrlProvider.java diff --git a/source/ch/cyberduck/core/gstorage/GoogleStorageWebsiteDistributionConfiguration.java b/s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageWebsiteDistributionConfiguration.java similarity index 98% rename from source/ch/cyberduck/core/gstorage/GoogleStorageWebsiteDistributionConfiguration.java rename to s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageWebsiteDistributionConfiguration.java index 4a0d4c2220..09aae4fe16 100644 --- a/source/ch/cyberduck/core/gstorage/GoogleStorageWebsiteDistributionConfiguration.java +++ b/s3/src/main/java/ch/cyberduck/core/gstorage/GoogleStorageWebsiteDistributionConfiguration.java @@ -24,7 +24,6 @@ import ch.cyberduck.core.LoginCallback; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathContainerService; import ch.cyberduck.core.PathNormalizer; -import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.analytics.AnalyticsProvider; import ch.cyberduck.core.analytics.QloudstatAnalyticsProvider; import ch.cyberduck.core.cdn.Distribution; @@ -167,6 +166,6 @@ public class GoogleStorageWebsiteDistributionConfiguration implements Distributi @Override public String getHostname() { - return ProtocolFactory.GOOGLESTORAGE_SSL.getDefaultHostname(); + return new GoogleStorageProtocol().getDefaultHostname(); } } diff --git a/source/ch/cyberduck/core/iam/AmazonIdentityConfiguration.java b/s3/src/main/java/ch/cyberduck/core/iam/AmazonIdentityConfiguration.java similarity index 99% rename from source/ch/cyberduck/core/iam/AmazonIdentityConfiguration.java rename to s3/src/main/java/ch/cyberduck/core/iam/AmazonIdentityConfiguration.java index b25db6a24d..62936e1c13 100644 --- a/source/ch/cyberduck/core/iam/AmazonIdentityConfiguration.java +++ b/s3/src/main/java/ch/cyberduck/core/iam/AmazonIdentityConfiguration.java @@ -129,7 +129,7 @@ public class AmazonIdentityConfiguration implements IdentityConfiguration { if(log.isDebugEnabled()) { log.debug(String.format("Delete access key %s for user %s", key, username)); } - client.deleteAccessKey(new DeleteAccessKeyRequest(key.getAccessKeyId()).withUserName(username)); + client.deleteAccessKey(new DeleteAccessKeyRequest(username, key.getAccessKeyId())); } final ListUserPoliciesResult policies = client.listUserPolicies(new ListUserPoliciesRequest(username)); diff --git a/source/ch/cyberduck/core/iam/AmazonServiceExceptionMappingService.java b/s3/src/main/java/ch/cyberduck/core/iam/AmazonServiceExceptionMappingService.java similarity index 100% rename from source/ch/cyberduck/core/iam/AmazonServiceExceptionMappingService.java rename to s3/src/main/java/ch/cyberduck/core/iam/AmazonServiceExceptionMappingService.java diff --git a/source/ch/cyberduck/core/s3/MultifactorCredentials.java b/s3/src/main/java/ch/cyberduck/core/s3/MultifactorCredentials.java similarity index 100% rename from source/ch/cyberduck/core/s3/MultifactorCredentials.java rename to s3/src/main/java/ch/cyberduck/core/s3/MultifactorCredentials.java diff --git a/source/ch/cyberduck/core/s3/RequestEntityRestStorageService.java b/s3/src/main/java/ch/cyberduck/core/s3/RequestEntityRestStorageService.java similarity index 100% rename from source/ch/cyberduck/core/s3/RequestEntityRestStorageService.java rename to s3/src/main/java/ch/cyberduck/core/s3/RequestEntityRestStorageService.java diff --git a/source/ch/cyberduck/core/s3/S3AccessControlListFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3AccessControlListFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3AccessControlListFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3AccessControlListFeature.java diff --git a/source/ch/cyberduck/core/s3/S3AttributesFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3AttributesFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3AttributesFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3AttributesFeature.java diff --git a/source/ch/cyberduck/core/s3/S3BucketCreateService.java b/s3/src/main/java/ch/cyberduck/core/s3/S3BucketCreateService.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3BucketCreateService.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3BucketCreateService.java diff --git a/source/ch/cyberduck/core/s3/S3BucketListService.java b/s3/src/main/java/ch/cyberduck/core/s3/S3BucketListService.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3BucketListService.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3BucketListService.java diff --git a/source/ch/cyberduck/core/s3/S3CopyFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3CopyFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3CopyFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3CopyFeature.java diff --git a/source/ch/cyberduck/core/s3/S3DefaultDeleteFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3DefaultDeleteFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3DefaultDeleteFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3DefaultDeleteFeature.java diff --git a/source/ch/cyberduck/core/s3/S3DirectoryFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3DirectoryFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3DirectoryFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3DirectoryFeature.java diff --git a/source/ch/cyberduck/core/s3/S3EncryptionFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3EncryptionFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3EncryptionFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3EncryptionFeature.java diff --git a/source/ch/cyberduck/core/s3/S3FindFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3FindFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3FindFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3FindFeature.java diff --git a/source/ch/cyberduck/core/s3/S3HomeFinderService.java b/s3/src/main/java/ch/cyberduck/core/s3/S3HomeFinderService.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3HomeFinderService.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3HomeFinderService.java diff --git a/source/ch/cyberduck/core/s3/S3HttpRequestRetryHandler.java b/s3/src/main/java/ch/cyberduck/core/s3/S3HttpRequestRetryHandler.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3HttpRequestRetryHandler.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3HttpRequestRetryHandler.java diff --git a/source/ch/cyberduck/core/s3/S3LifecycleConfiguration.java b/s3/src/main/java/ch/cyberduck/core/s3/S3LifecycleConfiguration.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3LifecycleConfiguration.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3LifecycleConfiguration.java diff --git a/source/ch/cyberduck/core/s3/S3LocationFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3LocationFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3LocationFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3LocationFeature.java diff --git a/source/ch/cyberduck/core/s3/S3LoggingFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3LoggingFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3LoggingFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3LoggingFeature.java diff --git a/source/ch/cyberduck/core/s3/S3MetadataFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3MetadataFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3MetadataFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3MetadataFeature.java diff --git a/source/ch/cyberduck/core/s3/S3MoveFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3MoveFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3MoveFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3MoveFeature.java diff --git a/source/ch/cyberduck/core/s3/S3MultipartCopyFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3MultipartCopyFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3MultipartCopyFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3MultipartCopyFeature.java diff --git a/source/ch/cyberduck/core/s3/S3MultipartService.java b/s3/src/main/java/ch/cyberduck/core/s3/S3MultipartService.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3MultipartService.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3MultipartService.java diff --git a/source/ch/cyberduck/core/s3/S3MultipartUploadService.java b/s3/src/main/java/ch/cyberduck/core/s3/S3MultipartUploadService.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3MultipartUploadService.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3MultipartUploadService.java diff --git a/source/ch/cyberduck/core/s3/S3MultipartWriteFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3MultipartWriteFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3MultipartWriteFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3MultipartWriteFeature.java diff --git a/source/ch/cyberduck/core/s3/S3MultipleDeleteFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3MultipleDeleteFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3MultipleDeleteFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3MultipleDeleteFeature.java diff --git a/source/ch/cyberduck/core/s3/S3ObjectListService.java b/s3/src/main/java/ch/cyberduck/core/s3/S3ObjectListService.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3ObjectListService.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3ObjectListService.java diff --git a/source/ch/cyberduck/core/s3/S3PathContainerService.java b/s3/src/main/java/ch/cyberduck/core/s3/S3PathContainerService.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3PathContainerService.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3PathContainerService.java diff --git a/source/ch/cyberduck/core/s3/S3PresignedUrlProvider.java b/s3/src/main/java/ch/cyberduck/core/s3/S3PresignedUrlProvider.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3PresignedUrlProvider.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3PresignedUrlProvider.java diff --git a/source/ch/cyberduck/core/s3/S3Protocol.java b/s3/src/main/java/ch/cyberduck/core/s3/S3Protocol.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3Protocol.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3Protocol.java diff --git a/source/ch/cyberduck/core/s3/S3ReadFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3ReadFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3ReadFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3ReadFeature.java diff --git a/source/ch/cyberduck/core/s3/S3Session.java b/s3/src/main/java/ch/cyberduck/core/s3/S3Session.java similarity index 98% rename from source/ch/cyberduck/core/s3/S3Session.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3Session.java index bf1c5cc066..330775079f 100644 --- a/source/ch/cyberduck/core/s3/S3Session.java +++ b/s3/src/main/java/ch/cyberduck/core/s3/S3Session.java @@ -29,7 +29,7 @@ import ch.cyberduck.core.ListProgressListener; import ch.cyberduck.core.LoginCallback; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathNormalizer; -import ch.cyberduck.core.ProtocolFactory; +import ch.cyberduck.core.Scheme; import ch.cyberduck.core.UrlProvider; import ch.cyberduck.core.analytics.AnalyticsProvider; import ch.cyberduck.core.analytics.QloudstatAnalyticsProvider; @@ -167,7 +167,7 @@ public class S3Session extends HttpSession { } configuration.setProperty("s3service.enable-storage-classes", String.valueOf(true)); if(StringUtils.isNotBlank(host.getProtocol().getContext())) { - if(!ProtocolFactory.isURL(host.getProtocol().getContext())) { + if(!Scheme.isURL(host.getProtocol().getContext())) { configuration.setProperty("s3service.s3-endpoint-virtual-path", PathNormalizer.normalize(host.getProtocol().getContext())); } @@ -201,7 +201,7 @@ public class S3Session extends HttpSession { public void login(final HostPasswordStore keychain, final LoginCallback prompt, final CancelCallback cancel, final Cache cache) throws BackgroundException { - if(ProtocolFactory.isURL(host.getProtocol().getContext())) { + if(Scheme.isURL(host.getProtocol().getContext())) { try { client.setProviderCredentials(new S3SessionCredentialsRetriever(this, host.getProtocol().getContext()).get()); } diff --git a/source/ch/cyberduck/core/s3/S3SessionCredentialsRetriever.java b/s3/src/main/java/ch/cyberduck/core/s3/S3SessionCredentialsRetriever.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3SessionCredentialsRetriever.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3SessionCredentialsRetriever.java diff --git a/source/ch/cyberduck/core/s3/S3SingleUploadService.java b/s3/src/main/java/ch/cyberduck/core/s3/S3SingleUploadService.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3SingleUploadService.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3SingleUploadService.java diff --git a/source/ch/cyberduck/core/s3/S3StorageClassFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3StorageClassFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3StorageClassFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3StorageClassFeature.java diff --git a/source/ch/cyberduck/core/s3/S3ThresholdCopyFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3ThresholdCopyFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3ThresholdCopyFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3ThresholdCopyFeature.java diff --git a/source/ch/cyberduck/core/s3/S3ThresholdDownloadService.java b/s3/src/main/java/ch/cyberduck/core/s3/S3ThresholdDownloadService.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3ThresholdDownloadService.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3ThresholdDownloadService.java diff --git a/source/ch/cyberduck/core/s3/S3ThresholdUploadService.java b/s3/src/main/java/ch/cyberduck/core/s3/S3ThresholdUploadService.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3ThresholdUploadService.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3ThresholdUploadService.java diff --git a/source/ch/cyberduck/core/s3/S3TorrentUrlProvider.java b/s3/src/main/java/ch/cyberduck/core/s3/S3TorrentUrlProvider.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3TorrentUrlProvider.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3TorrentUrlProvider.java diff --git a/source/ch/cyberduck/core/s3/S3TouchFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3TouchFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3TouchFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3TouchFeature.java diff --git a/source/ch/cyberduck/core/s3/S3UrlProvider.java b/s3/src/main/java/ch/cyberduck/core/s3/S3UrlProvider.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3UrlProvider.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3UrlProvider.java diff --git a/source/ch/cyberduck/core/s3/S3VersioningFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3VersioningFeature.java similarity index 99% rename from source/ch/cyberduck/core/s3/S3VersioningFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3VersioningFeature.java index 3fdceb0e37..c6725d56c8 100644 --- a/source/ch/cyberduck/core/s3/S3VersioningFeature.java +++ b/s3/src/main/java/ch/cyberduck/core/s3/S3VersioningFeature.java @@ -23,6 +23,7 @@ import ch.cyberduck.core.LoginCallback; import ch.cyberduck.core.LoginOptions; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathContainerService; +import ch.cyberduck.core.VersioningConfiguration; import ch.cyberduck.core.exception.AccessDeniedException; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.exception.ConnectionCanceledException; diff --git a/source/ch/cyberduck/core/s3/S3WriteFeature.java b/s3/src/main/java/ch/cyberduck/core/s3/S3WriteFeature.java similarity index 100% rename from source/ch/cyberduck/core/s3/S3WriteFeature.java rename to s3/src/main/java/ch/cyberduck/core/s3/S3WriteFeature.java diff --git a/source/ch/cyberduck/core/s3/ServiceExceptionMappingService.java b/s3/src/main/java/ch/cyberduck/core/s3/ServiceExceptionMappingService.java similarity index 100% rename from source/ch/cyberduck/core/s3/ServiceExceptionMappingService.java rename to s3/src/main/java/ch/cyberduck/core/s3/ServiceExceptionMappingService.java diff --git a/test/ch/cyberduck/core/ProfileTest.java b/s3/src/test/java/ch/cyberduck/core/ProfileTest.java similarity index 63% rename from test/ch/cyberduck/core/ProfileTest.java rename to s3/src/test/java/ch/cyberduck/core/ProfileTest.java index 44e384aef1..a82836cdcc 100644 --- a/test/ch/cyberduck/core/ProfileTest.java +++ b/s3/src/test/java/ch/cyberduck/core/ProfileTest.java @@ -17,7 +17,7 @@ package ch.cyberduck.core; * Bug fixes, suggestions and comments should be sent to feedback@cyberduck.ch */ -import ch.cyberduck.core.ftp.FTPProtocol; +import ch.cyberduck.core.s3.S3Protocol; import org.junit.Test; @@ -28,25 +28,28 @@ public class ProfileTest extends AbstractTestCase { @Test public void testEquals() throws Exception { + ProtocolFactory.register(new S3Protocol()); assertEquals(ProfileReaderFactory.get().read( - new Local("profiles/S3 (Temporary Credentials).cyberduckprofile")), + new Local("../profiles/S3 (Temporary Credentials).cyberduckprofile")), ProfileReaderFactory.get().read( - new Local("profiles/S3 (Temporary Credentials).cyberduckprofile"))); + new Local("../profiles/S3 (Temporary Credentials).cyberduckprofile"))); } @Test public void testCompareTo() throws Exception { + ProtocolFactory.register(new S3Protocol()); assertEquals(0, ProfileReaderFactory.get().read( - new Local("profiles/S3 (Temporary Credentials).cyberduckprofile")).compareTo(ProfileReaderFactory.get().read( - new Local("profiles/S3 (Temporary Credentials).cyberduckprofile")))); + new Local("../profiles/S3 (Temporary Credentials).cyberduckprofile")).compareTo(ProfileReaderFactory.get().read( + new Local("../profiles/S3 (Temporary Credentials).cyberduckprofile")))); assertNotEquals(0, ProfileReaderFactory.get().read( - new Local("profiles/S3 (Temporary Credentials).cyberduckprofile")).compareTo(new FTPProtocol())); + new Local("../profiles/S3 (Temporary Credentials).cyberduckprofile")).compareTo(new TestProtocol())); } @Test public void testCompareMultipleRegions() throws Exception { + ProtocolFactory.register(new S3Protocol()); assertEquals(0, ProfileReaderFactory.get().read( - new Local("profiles/Verizon Cloud Storage (AMS1A).cyberduckprofile")).compareTo(ProfileReaderFactory.get().read( - new Local("profiles/Verizon Cloud Storage (IAD3A).cyberduckprofile")))); + new Local("../profiles/Verizon Cloud Storage (AMS1A).cyberduckprofile")).compareTo(ProfileReaderFactory.get().read( + new Local("../profiles/Verizon Cloud Storage (IAD3A).cyberduckprofile")))); } } \ No newline at end of file diff --git a/s3/src/test/java/ch/cyberduck/core/SessionFactoryTest.java b/s3/src/test/java/ch/cyberduck/core/SessionFactoryTest.java new file mode 100644 index 0000000000..d08786a2e8 --- /dev/null +++ b/s3/src/test/java/ch/cyberduck/core/SessionFactoryTest.java @@ -0,0 +1,24 @@ +package ch.cyberduck.core; + +import ch.cyberduck.core.gstorage.GoogleStorageProtocol; +import ch.cyberduck.core.s3.S3Protocol; +import ch.cyberduck.core.ssl.DefaultX509KeyManager; +import ch.cyberduck.core.ssl.DefaultX509TrustManager; + +import org.junit.Test; + +import static org.junit.Assert.assertNotNull; + +/** + * @version $Id$ + */ +public class SessionFactoryTest extends AbstractTestCase { + + @Test + public void testCreateSession() throws Exception { + assertNotNull(SessionFactory.create(new Host(new S3Protocol()), + new DefaultX509TrustManager(), new DefaultX509KeyManager())); + assertNotNull(SessionFactory.create(new Host(new GoogleStorageProtocol()), + new DefaultX509TrustManager(), new DefaultX509KeyManager())); + } +} diff --git a/test/ch/cyberduck/core/cloudfront/CloudFrontDistributionConfigurationTest.java b/s3/src/test/java/ch/cyberduck/core/cloudfront/CloudFrontDistributionConfigurationTest.java similarity index 100% rename from test/ch/cyberduck/core/cloudfront/CloudFrontDistributionConfigurationTest.java rename to s3/src/test/java/ch/cyberduck/core/cloudfront/CloudFrontDistributionConfigurationTest.java diff --git a/test/ch/cyberduck/core/cloudfront/CloudFrontServiceExceptionMappingServiceTest.java b/s3/src/test/java/ch/cyberduck/core/cloudfront/CloudFrontServiceExceptionMappingServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/cloudfront/CloudFrontServiceExceptionMappingServiceTest.java rename to s3/src/test/java/ch/cyberduck/core/cloudfront/CloudFrontServiceExceptionMappingServiceTest.java diff --git a/test/ch/cyberduck/core/cloudfront/CustomOriginCloudFrontDistributionConfigurationTest.java b/s3/src/test/java/ch/cyberduck/core/cloudfront/CustomOriginCloudFrontDistributionConfigurationTest.java similarity index 93% rename from test/ch/cyberduck/core/cloudfront/CustomOriginCloudFrontDistributionConfigurationTest.java rename to s3/src/test/java/ch/cyberduck/core/cloudfront/CustomOriginCloudFrontDistributionConfigurationTest.java index 34ed1d81d7..5e15310762 100644 --- a/test/ch/cyberduck/core/cloudfront/CustomOriginCloudFrontDistributionConfigurationTest.java +++ b/s3/src/test/java/ch/cyberduck/core/cloudfront/CustomOriginCloudFrontDistributionConfigurationTest.java @@ -6,11 +6,11 @@ import ch.cyberduck.core.DisabledLoginCallback; import ch.cyberduck.core.DisabledTranscriptListener; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.cdn.Distribution; import ch.cyberduck.core.exception.LoginCanceledException; import ch.cyberduck.core.s3.S3Protocol; import ch.cyberduck.core.s3.S3Session; -import ch.cyberduck.core.sftp.SFTPProtocol; import ch.cyberduck.core.ssl.DefaultX509KeyManager; import ch.cyberduck.core.ssl.DefaultX509TrustManager; @@ -34,13 +34,13 @@ public class CustomOriginCloudFrontDistributionConfigurationTest extends Abstrac @Test public void testGetMethods() throws Exception { assertEquals(Arrays.asList(Distribution.CUSTOM), - new CustomOriginCloudFrontDistributionConfiguration(new Host("o"), new DefaultX509TrustManager(), new DefaultX509KeyManager(), new DisabledTranscriptListener()).getMethods( + new CustomOriginCloudFrontDistributionConfiguration(new Host(new TestProtocol()), new DefaultX509TrustManager(), new DefaultX509KeyManager(), new DisabledTranscriptListener()).getMethods( new Path("/bbb", EnumSet.of(Path.Type.directory, Path.Type.volume)))); } @Test public void testGetOrigin() throws Exception { - final Host h = new Host("m"); + final Host h = new Host(new TestProtocol()); final Path container = new Path("/", EnumSet.of(Path.Type.directory, Path.Type.volume)); h.setWebURL("http://w.example.net"); final S3Session session = new S3Session(new Host(new S3Protocol(), new S3Protocol().getDefaultHostname())); @@ -56,7 +56,7 @@ public class CustomOriginCloudFrontDistributionConfigurationTest extends Abstrac @Test public void testGetOriginCustomHttpPort() throws Exception { - final Host h = new Host("m"); + final Host h = new Host(new TestProtocol()); final Path container = new Path("/", EnumSet.of(Path.Type.directory, Path.Type.volume)); h.setWebURL("http://w.example.net:8080"); final S3Session session = new S3Session(new Host(new S3Protocol(), new S3Protocol().getDefaultHostname())); @@ -71,7 +71,7 @@ public class CustomOriginCloudFrontDistributionConfigurationTest extends Abstrac @Test public void testGetOriginCustomHttpsPort() throws Exception { - final Host h = new Host("m"); + final Host h = new Host(new TestProtocol()); final Path container = new Path("/", EnumSet.of(Path.Type.directory, Path.Type.volume)); h.setWebURL("https://w.example.net:4444"); final S3Session session = new S3Session(new Host(new S3Protocol(), new S3Protocol().getDefaultHostname())); @@ -87,7 +87,7 @@ public class CustomOriginCloudFrontDistributionConfigurationTest extends Abstrac @Test public void testReadNoConfiguredDistributionForOrigin() throws Exception { - final Host origin = new Host("myhost.localdomain"); + final Host origin = new Host(new TestProtocol(), "myhost.localdomain"); origin.getCdnCredentials().setUsername(properties.getProperty("s3.key")); origin.getCdnCredentials().setPassword(properties.getProperty("s3.secret")); final CustomOriginCloudFrontDistributionConfiguration configuration @@ -107,7 +107,7 @@ public class CustomOriginCloudFrontDistributionConfigurationTest extends Abstrac @Test public void testRead() throws Exception { - final Host origin = new Host("myhost.localdomain"); + final Host origin = new Host(new TestProtocol(), "myhost.localdomain"); origin.setWebURL("http://test.cyberduck.ch"); origin.setDefaultPath("public_html"); origin.getCdnCredentials().setUsername(properties.getProperty("s3.key")); @@ -132,7 +132,7 @@ public class CustomOriginCloudFrontDistributionConfigurationTest extends Abstrac @Test(expected = LoginCanceledException.class) public void testReadMissingCredentials() throws Exception { - final Host bookmark = new Host(new SFTPProtocol(), "myhost.localdomain"); + final Host bookmark = new Host(new TestProtocol(), "myhost.localdomain"); final CustomOriginCloudFrontDistributionConfiguration configuration = new CustomOriginCloudFrontDistributionConfiguration(bookmark, new DefaultX509TrustManager(), new DefaultX509KeyManager(), new DisabledTranscriptListener()); diff --git a/test/ch/cyberduck/core/cloudfront/WebsiteCloudFrontDistributionConfigurationTest.java b/s3/src/test/java/ch/cyberduck/core/cloudfront/WebsiteCloudFrontDistributionConfigurationTest.java similarity index 98% rename from test/ch/cyberduck/core/cloudfront/WebsiteCloudFrontDistributionConfigurationTest.java rename to s3/src/test/java/ch/cyberduck/core/cloudfront/WebsiteCloudFrontDistributionConfigurationTest.java index b3b3de4a3d..5616f25f7e 100644 --- a/test/ch/cyberduck/core/cloudfront/WebsiteCloudFrontDistributionConfigurationTest.java +++ b/s3/src/test/java/ch/cyberduck/core/cloudfront/WebsiteCloudFrontDistributionConfigurationTest.java @@ -6,6 +6,7 @@ import ch.cyberduck.core.DisabledLoginCallback; import ch.cyberduck.core.DisabledTranscriptListener; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.cdn.Distribution; import ch.cyberduck.core.cdn.features.Cname; import ch.cyberduck.core.cdn.features.DistributionLogging; @@ -49,7 +50,7 @@ public class WebsiteCloudFrontDistributionConfigurationTest extends AbstractTest @Test public void testGetMethodsNonAWS() throws Exception { - final S3Session session = new S3Session(new Host("custom")); + final S3Session session = new S3Session(new Host(new TestProtocol())); final WebsiteCloudFrontDistributionConfiguration configuration = new WebsiteCloudFrontDistributionConfiguration(session, new DisabledX509TrustManager(), new DefaultX509KeyManager()); assertFalse(configuration.getMethods( diff --git a/test/ch/cyberduck/core/gstorage/GoogleStorageAccessControlListFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/gstorage/GoogleStorageAccessControlListFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/gstorage/GoogleStorageAccessControlListFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/gstorage/GoogleStorageAccessControlListFeatureTest.java diff --git a/test/ch/cyberduck/core/gstorage/GoogleStorageBucketCreateServiceTest.java b/s3/src/test/java/ch/cyberduck/core/gstorage/GoogleStorageBucketCreateServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/gstorage/GoogleStorageBucketCreateServiceTest.java rename to s3/src/test/java/ch/cyberduck/core/gstorage/GoogleStorageBucketCreateServiceTest.java diff --git a/test/ch/cyberduck/core/gstorage/GoogleStorageDirectoryFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/gstorage/GoogleStorageDirectoryFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/gstorage/GoogleStorageDirectoryFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/gstorage/GoogleStorageDirectoryFeatureTest.java diff --git a/test/ch/cyberduck/core/gstorage/GoogleStorageSessionTest.java b/s3/src/test/java/ch/cyberduck/core/gstorage/GoogleStorageSessionTest.java similarity index 93% rename from test/ch/cyberduck/core/gstorage/GoogleStorageSessionTest.java rename to s3/src/test/java/ch/cyberduck/core/gstorage/GoogleStorageSessionTest.java index b3a779443e..30488709d7 100644 --- a/test/ch/cyberduck/core/gstorage/GoogleStorageSessionTest.java +++ b/s3/src/test/java/ch/cyberduck/core/gstorage/GoogleStorageSessionTest.java @@ -22,6 +22,7 @@ import ch.cyberduck.core.features.Logging; import ch.cyberduck.core.features.Versioning; import ch.cyberduck.core.identity.IdentityConfiguration; import ch.cyberduck.core.preferences.PreferencesFactory; +import ch.cyberduck.core.s3.S3Protocol; import org.junit.Ignore; import org.junit.Test; @@ -168,13 +169,13 @@ public class GoogleStorageSessionTest extends AbstractTestCase { @Test public void testFeatures() { - assertNotNull(new GoogleStorageSession(new Host("t")).getFeature(AclPermission.class)); - assertNotNull(new GoogleStorageSession(new Host("t")).getFeature(DistributionConfiguration.class)); - assertNotNull(new GoogleStorageSession(new Host("t")).getFeature(IdentityConfiguration.class)); - assertNotNull(new GoogleStorageSession(new Host("t")).getFeature(Logging.class)); - assertNotNull(new GoogleStorageSession(new Host("t")).getFeature(Headers.class)); - assertNull(new GoogleStorageSession(new Host("t")).getFeature(Lifecycle.class)); - assertNull(new GoogleStorageSession(new Host("t")).getFeature(Versioning.class)); + assertNotNull(new GoogleStorageSession(new Host(new S3Protocol())).getFeature(AclPermission.class)); + assertNotNull(new GoogleStorageSession(new Host(new S3Protocol())).getFeature(DistributionConfiguration.class)); + assertNotNull(new GoogleStorageSession(new Host(new S3Protocol())).getFeature(IdentityConfiguration.class)); + assertNotNull(new GoogleStorageSession(new Host(new S3Protocol())).getFeature(Logging.class)); + assertNotNull(new GoogleStorageSession(new Host(new S3Protocol())).getFeature(Headers.class)); + assertNull(new GoogleStorageSession(new Host(new S3Protocol())).getFeature(Lifecycle.class)); + assertNull(new GoogleStorageSession(new Host(new S3Protocol())).getFeature(Versioning.class)); } @Test(expected = LoginCanceledException.class) diff --git a/test/ch/cyberduck/core/gstorage/GoogleStorageUrlProviderTest.java b/s3/src/test/java/ch/cyberduck/core/gstorage/GoogleStorageUrlProviderTest.java similarity index 100% rename from test/ch/cyberduck/core/gstorage/GoogleStorageUrlProviderTest.java rename to s3/src/test/java/ch/cyberduck/core/gstorage/GoogleStorageUrlProviderTest.java diff --git a/test/ch/cyberduck/core/gstorage/GoogleStorageWebsiteDistributionConfigurationTest.java b/s3/src/test/java/ch/cyberduck/core/gstorage/GoogleStorageWebsiteDistributionConfigurationTest.java similarity index 100% rename from test/ch/cyberduck/core/gstorage/GoogleStorageWebsiteDistributionConfigurationTest.java rename to s3/src/test/java/ch/cyberduck/core/gstorage/GoogleStorageWebsiteDistributionConfigurationTest.java diff --git a/test/ch/cyberduck/core/iam/AmazonIdentityConfigurationTest.java b/s3/src/test/java/ch/cyberduck/core/iam/AmazonIdentityConfigurationTest.java similarity index 100% rename from test/ch/cyberduck/core/iam/AmazonIdentityConfigurationTest.java rename to s3/src/test/java/ch/cyberduck/core/iam/AmazonIdentityConfigurationTest.java diff --git a/test/ch/cyberduck/core/iam/AmazonServiceExceptionMappingServiceTest.java b/s3/src/test/java/ch/cyberduck/core/iam/AmazonServiceExceptionMappingServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/iam/AmazonServiceExceptionMappingServiceTest.java rename to s3/src/test/java/ch/cyberduck/core/iam/AmazonServiceExceptionMappingServiceTest.java diff --git a/test/ch/cyberduck/core/s3/S3AccessControlListFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3AccessControlListFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3AccessControlListFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3AccessControlListFeatureTest.java diff --git a/test/ch/cyberduck/core/s3/S3AttributesFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3AttributesFeatureTest.java similarity index 97% rename from test/ch/cyberduck/core/s3/S3AttributesFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3AttributesFeatureTest.java index 3c064f93ec..3cb04434fd 100644 --- a/test/ch/cyberduck/core/s3/S3AttributesFeatureTest.java +++ b/s3/src/test/java/ch/cyberduck/core/s3/S3AttributesFeatureTest.java @@ -11,8 +11,6 @@ import ch.cyberduck.core.DisabledTranscriptListener; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathAttributes; -import ch.cyberduck.core.Protocol; -import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.exception.NotfoundException; import ch.cyberduck.core.features.Delete; @@ -119,7 +117,7 @@ public class S3AttributesFeatureTest extends AbstractTestCase { @Test public void testVersioning() throws Exception { final S3Session session = new S3Session( - new Host(ProtocolFactory.forName(Protocol.Type.s3.name()), ProtocolFactory.forName(Protocol.Type.s3.name()).getDefaultHostname(), + new Host(new S3Protocol(), new S3Protocol().getDefaultHostname(), new Credentials( properties.getProperty("s3.key"), properties.getProperty("s3.secret") ))); diff --git a/test/ch/cyberduck/core/s3/S3BucketCreateServiceTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3BucketCreateServiceTest.java similarity index 96% rename from test/ch/cyberduck/core/s3/S3BucketCreateServiceTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3BucketCreateServiceTest.java index 0ba7e0de06..63dc32b7a8 100644 --- a/test/ch/cyberduck/core/s3/S3BucketCreateServiceTest.java +++ b/s3/src/test/java/ch/cyberduck/core/s3/S3BucketCreateServiceTest.java @@ -24,7 +24,6 @@ import ch.cyberduck.core.DisabledLoginCallback; import ch.cyberduck.core.DisabledTranscriptListener; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; -import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.exception.AccessDeniedException; import ch.cyberduck.core.features.Delete; import ch.cyberduck.core.features.Location; @@ -55,7 +54,7 @@ public class S3BucketCreateServiceTest extends AbstractTestCase { final S3FindFeature find = new S3FindFeature(session); final S3DefaultDeleteFeature delete = new S3DefaultDeleteFeature(session); final S3BucketCreateService create = new S3BucketCreateService(session); - for(Location.Name region : ProtocolFactory.S3_SSL.getRegions()) { + for(Location.Name region : new S3Protocol().getRegions()) { final Path bucket = new Path(UUID.randomUUID().toString(), EnumSet.of(Path.Type.directory, Path.Type.volume)); create.create(bucket, region.getIdentifier()); bucket.attributes().setRegion(region.getIdentifier()); diff --git a/test/ch/cyberduck/core/s3/S3BucketListServiceTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3BucketListServiceTest.java similarity index 93% rename from test/ch/cyberduck/core/s3/S3BucketListServiceTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3BucketListServiceTest.java index 13b0337403..928b4d6914 100644 --- a/test/ch/cyberduck/core/s3/S3BucketListServiceTest.java +++ b/s3/src/test/java/ch/cyberduck/core/s3/S3BucketListServiceTest.java @@ -22,8 +22,8 @@ public class S3BucketListServiceTest extends AbstractTestCase { @Test public void testGetContainer() throws Exception { - assertEquals("bucketname", new S3BucketListService(new S3Session(new Host("t"))).getContainer(new Host(new S3Protocol(), "bucketname.s3.amazonaws.com"))); - assertEquals(null, new S3BucketListService(new S3Session(new Host("t"))).getContainer(new Host("bucketname.s3.amazonaws.com"))); + assertEquals("bucketname", new S3BucketListService(new S3Session(new Host(new S3Protocol()))).getContainer(new Host(new S3Protocol(), "bucketname.s3.amazonaws.com"))); + assertEquals(null, new S3BucketListService(new S3Session(new Host(new S3Protocol()))).getContainer(new Host(new S3Protocol(), "bucketname.s3.amazonaws.com"))); } @Test diff --git a/test/ch/cyberduck/core/s3/S3CopyFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3CopyFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3CopyFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3CopyFeatureTest.java diff --git a/test/ch/cyberduck/core/s3/S3DefaultDeleteFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3DefaultDeleteFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3DefaultDeleteFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3DefaultDeleteFeatureTest.java diff --git a/test/ch/cyberduck/core/s3/S3DirectoryFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3DirectoryFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3DirectoryFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3DirectoryFeatureTest.java diff --git a/test/ch/cyberduck/core/s3/S3EncryptionFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3EncryptionFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3EncryptionFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3EncryptionFeatureTest.java diff --git a/test/ch/cyberduck/core/s3/S3FindFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3FindFeatureTest.java similarity index 94% rename from test/ch/cyberduck/core/s3/S3FindFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3FindFeatureTest.java index d5c6c3b481..b935947460 100644 --- a/test/ch/cyberduck/core/s3/S3FindFeatureTest.java +++ b/s3/src/test/java/ch/cyberduck/core/s3/S3FindFeatureTest.java @@ -12,8 +12,6 @@ import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathAttributes; import ch.cyberduck.core.PathCache; -import ch.cyberduck.core.Protocol; -import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.features.Find; import org.junit.Test; @@ -72,7 +70,7 @@ public class S3FindFeatureTest extends AbstractTestCase { @Test public void testFindRoot() throws Exception { - assertTrue(new S3FindFeature(new S3Session(new Host("h"))).find(new Path("/", EnumSet.of(Path.Type.directory)))); + assertTrue(new S3FindFeature(new S3Session(new Host(new S3Protocol()))).find(new Path("/", EnumSet.of(Path.Type.directory)))); } @Test @@ -81,7 +79,7 @@ public class S3FindFeatureTest extends AbstractTestCase { final AttributedList list = new AttributedList(); list.attributes().addHidden(new Path("/g/gd", EnumSet.of(Path.Type.file))); cache.put(new Path("/g", EnumSet.of(Path.Type.directory)), list); - final Find finder = new S3FindFeature(new S3Session(new Host("t")) { + final Find finder = new S3FindFeature(new S3Session(new Host(new S3Protocol())) { @Override public RequestEntityRestStorageService getClient() { fail(); @@ -96,7 +94,7 @@ public class S3FindFeatureTest extends AbstractTestCase { final PathCache cache = new PathCache(1); final AttributedList list = new AttributedList(Collections.singletonList(new Path("/g/gd", EnumSet.of(Path.Type.file)))); cache.put(new Path("/g", EnumSet.of(Path.Type.directory)), list); - final Find finder = new S3FindFeature(new S3Session(new Host("t")) { + final Find finder = new S3FindFeature(new S3Session(new Host(new S3Protocol())) { @Override public RequestEntityRestStorageService getClient() { fail(); @@ -109,7 +107,7 @@ public class S3FindFeatureTest extends AbstractTestCase { @Test public void testVersioning() throws Exception { final S3Session session = new S3Session( - new Host(ProtocolFactory.forName(Protocol.Type.s3.name()), ProtocolFactory.forName(Protocol.Type.s3.name()).getDefaultHostname(), + new Host(new S3Protocol(), new S3Protocol().getDefaultHostname(), new Credentials( properties.getProperty("s3.key"), properties.getProperty("s3.secret") ))); diff --git a/test/ch/cyberduck/core/s3/S3HttpRequestRetryHandlerTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3HttpRequestRetryHandlerTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3HttpRequestRetryHandlerTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3HttpRequestRetryHandlerTest.java diff --git a/test/ch/cyberduck/core/s3/S3LifecycleConfigurationTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3LifecycleConfigurationTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3LifecycleConfigurationTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3LifecycleConfigurationTest.java diff --git a/test/ch/cyberduck/core/s3/S3LocationFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3LocationFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3LocationFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3LocationFeatureTest.java diff --git a/test/ch/cyberduck/core/s3/S3LoggingFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3LoggingFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3LoggingFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3LoggingFeatureTest.java diff --git a/test/ch/cyberduck/core/s3/S3MetadataFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3MetadataFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3MetadataFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3MetadataFeatureTest.java diff --git a/test/ch/cyberduck/core/s3/S3MoveFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3MoveFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3MoveFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3MoveFeatureTest.java diff --git a/test/ch/cyberduck/core/s3/S3MultipartCopyFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3MultipartCopyFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3MultipartCopyFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3MultipartCopyFeatureTest.java diff --git a/test/ch/cyberduck/core/s3/S3MultipartServiceTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3MultipartServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3MultipartServiceTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3MultipartServiceTest.java diff --git a/test/ch/cyberduck/core/s3/S3MultipartUploadServiceTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3MultipartUploadServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3MultipartUploadServiceTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3MultipartUploadServiceTest.java diff --git a/test/ch/cyberduck/core/s3/S3MultipartWriteFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3MultipartWriteFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3MultipartWriteFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3MultipartWriteFeatureTest.java diff --git a/test/ch/cyberduck/core/s3/S3MultipleDeleteFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3MultipleDeleteFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3MultipleDeleteFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3MultipleDeleteFeatureTest.java diff --git a/test/ch/cyberduck/core/s3/S3ObjectListServiceTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3ObjectListServiceTest.java similarity index 98% rename from test/ch/cyberduck/core/s3/S3ObjectListServiceTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3ObjectListServiceTest.java index 1a323bed80..44425e8a4b 100644 --- a/test/ch/cyberduck/core/s3/S3ObjectListServiceTest.java +++ b/s3/src/test/java/ch/cyberduck/core/s3/S3ObjectListServiceTest.java @@ -29,8 +29,6 @@ import ch.cyberduck.core.DisabledTranscriptListener; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; import ch.cyberduck.core.PathAttributes; -import ch.cyberduck.core.Protocol; -import ch.cyberduck.core.ProtocolFactory; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.exception.NotfoundException; import ch.cyberduck.core.features.Delete; @@ -165,7 +163,7 @@ public class S3ObjectListServiceTest extends AbstractTestCase { @Test public void testListVersioning() throws Exception { final S3Session session = new S3Session( - new Host(ProtocolFactory.forName(Protocol.Type.s3.name()), ProtocolFactory.forName(Protocol.Type.s3.name()).getDefaultHostname(), + new Host(new S3Protocol(), new S3Protocol().getDefaultHostname(), new Credentials( properties.getProperty("s3.key"), properties.getProperty("s3.secret") ))); diff --git a/test/ch/cyberduck/core/s3/S3PresignedUrlProviderTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3PresignedUrlProviderTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3PresignedUrlProviderTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3PresignedUrlProviderTest.java diff --git a/test/ch/cyberduck/core/s3/S3ReadFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3ReadFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3ReadFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3ReadFeatureTest.java diff --git a/test/ch/cyberduck/core/s3/S3SessionCredentialsRetrieverTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3SessionCredentialsRetrieverTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3SessionCredentialsRetrieverTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3SessionCredentialsRetrieverTest.java diff --git a/test/ch/cyberduck/core/s3/S3SessionTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3SessionTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3SessionTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3SessionTest.java diff --git a/test/ch/cyberduck/core/s3/S3SingleUploadServiceTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3SingleUploadServiceTest.java similarity index 98% rename from test/ch/cyberduck/core/s3/S3SingleUploadServiceTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3SingleUploadServiceTest.java index 95d7138e6c..cdc857cb5b 100644 --- a/test/ch/cyberduck/core/s3/S3SingleUploadServiceTest.java +++ b/s3/src/test/java/ch/cyberduck/core/s3/S3SingleUploadServiceTest.java @@ -43,12 +43,12 @@ public class S3SingleUploadServiceTest extends AbstractTestCase { @Test public void testDecorate() throws Exception { final NullInputStream n = new NullInputStream(1L); - assertSame(NullInputStream.class, new S3SingleUploadService(new S3Session(new Host("h"))).decorate(n, null).getClass()); + assertSame(NullInputStream.class, new S3SingleUploadService(new S3Session(new Host(new S3Protocol()))).decorate(n, null).getClass()); } @Test public void testDigest() throws Exception { - assertNotNull(new S3SingleUploadService(new S3Session(new Host("h"))).digest()); + assertNotNull(new S3SingleUploadService(new S3Session(new Host(new S3Protocol()))).digest()); } @Test diff --git a/test/ch/cyberduck/core/s3/S3StorageClassFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3StorageClassFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3StorageClassFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3StorageClassFeatureTest.java diff --git a/test/ch/cyberduck/core/s3/S3ThresholdUploadServiceTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3ThresholdUploadServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3ThresholdUploadServiceTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3ThresholdUploadServiceTest.java diff --git a/test/ch/cyberduck/core/s3/S3TouchFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3TouchFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3TouchFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3TouchFeatureTest.java diff --git a/test/ch/cyberduck/core/s3/S3UrlProviderTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3UrlProviderTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/S3UrlProviderTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3UrlProviderTest.java diff --git a/test/ch/cyberduck/core/s3/S3VersioningFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3VersioningFeatureTest.java similarity index 91% rename from test/ch/cyberduck/core/s3/S3VersioningFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3VersioningFeatureTest.java index 76dc2e8b76..a00e241acf 100644 --- a/test/ch/cyberduck/core/s3/S3VersioningFeatureTest.java +++ b/s3/src/test/java/ch/cyberduck/core/s3/S3VersioningFeatureTest.java @@ -26,8 +26,7 @@ import ch.cyberduck.core.DisabledPasswordStore; import ch.cyberduck.core.DisabledTranscriptListener; import ch.cyberduck.core.Host; import ch.cyberduck.core.Path; -import ch.cyberduck.core.Protocol; -import ch.cyberduck.core.ProtocolFactory; +import ch.cyberduck.core.VersioningConfiguration; import ch.cyberduck.core.features.Delete; import ch.cyberduck.core.features.Versioning; import ch.cyberduck.core.preferences.PreferencesFactory; @@ -48,7 +47,7 @@ public class S3VersioningFeatureTest extends AbstractTestCase { @Test public void testGetConfigurationDisabled() throws Exception { final S3Session session = new S3Session( - new Host(ProtocolFactory.forName(Protocol.Type.s3.name()), ProtocolFactory.forName(Protocol.Type.s3.name()).getDefaultHostname(), + new Host(new S3Protocol(), new S3Protocol().getDefaultHostname(), new Credentials( properties.getProperty("s3.key"), properties.getProperty("s3.secret") ))); @@ -65,7 +64,7 @@ public class S3VersioningFeatureTest extends AbstractTestCase { @Test public void testGetConfigurationEnabled() throws Exception { final S3Session session = new S3Session( - new Host(ProtocolFactory.forName(Protocol.Type.s3.name()), ProtocolFactory.forName(Protocol.Type.s3.name()).getDefaultHostname(), + new Host(new S3Protocol(), new S3Protocol().getDefaultHostname(), new Credentials( properties.getProperty("s3.key"), properties.getProperty("s3.secret") ))); @@ -81,7 +80,7 @@ public class S3VersioningFeatureTest extends AbstractTestCase { @Test public void testSetConfiguration() throws Exception { final S3Session session = new S3Session( - new Host(ProtocolFactory.forName(Protocol.Type.s3.name()), ProtocolFactory.forName(Protocol.Type.s3.name()).getDefaultHostname(), + new Host(new S3Protocol(), new S3Protocol().getDefaultHostname(), new Credentials( properties.getProperty("s3.key"), properties.getProperty("s3.secret") ))); diff --git a/test/ch/cyberduck/core/s3/S3WriteFeatureTest.java b/s3/src/test/java/ch/cyberduck/core/s3/S3WriteFeatureTest.java similarity index 97% rename from test/ch/cyberduck/core/s3/S3WriteFeatureTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/S3WriteFeatureTest.java index 64ccd5b1ea..c18edff40d 100644 --- a/test/ch/cyberduck/core/s3/S3WriteFeatureTest.java +++ b/s3/src/test/java/ch/cyberduck/core/s3/S3WriteFeatureTest.java @@ -35,7 +35,7 @@ public class S3WriteFeatureTest extends AbstractTestCase { @Test public void testAppendBelowLimit() throws Exception { - final S3Session session = new S3Session(new Host("h")); + final S3Session session = new S3Session(new Host(new S3Protocol())); final S3WriteFeature feature = new S3WriteFeature(session, null, new Find() { @Override public boolean find(final Path file) throws BackgroundException { @@ -63,7 +63,7 @@ public class S3WriteFeatureTest extends AbstractTestCase { @Test public void testSize() throws Exception { - final S3Session session = new S3Session(new Host("h")); + final S3Session session = new S3Session(new Host(new S3Protocol())); final S3WriteFeature feature = new S3WriteFeature(session, null, new Find() { @Override public boolean find(final Path file) throws BackgroundException { diff --git a/test/ch/cyberduck/core/s3/ServiceExceptionMappingServiceTest.java b/s3/src/test/java/ch/cyberduck/core/s3/ServiceExceptionMappingServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/s3/ServiceExceptionMappingServiceTest.java rename to s3/src/test/java/ch/cyberduck/core/s3/ServiceExceptionMappingServiceTest.java diff --git a/test/ch/cyberduck/core/udt/LocalhostProxyProvider.java b/s3/src/test/java/ch/cyberduck/core/udt/LocalhostProxyProvider.java similarity index 100% rename from test/ch/cyberduck/core/udt/LocalhostProxyProvider.java rename to s3/src/test/java/ch/cyberduck/core/udt/LocalhostProxyProvider.java diff --git a/test/ch/cyberduck/core/udt/UDTProxyConfiguratorTest.java b/s3/src/test/java/ch/cyberduck/core/udt/UDTProxyConfiguratorTest.java similarity index 100% rename from test/ch/cyberduck/core/udt/UDTProxyConfiguratorTest.java rename to s3/src/test/java/ch/cyberduck/core/udt/UDTProxyConfiguratorTest.java diff --git a/setup/brew/duck.source.rb b/setup/brew/duck.source.rb index cd788a5091..436a8328a0 100644 --- a/setup/brew/duck.source.rb +++ b/setup/brew/duck.source.rb @@ -9,11 +9,12 @@ class Duck < Formula depends_on :java => ["1.8+", :build] depends_on :xcode => :build depends_on "ant" => :build + depends_on "maven32" => :build def install revision = version.to_s.rpartition(".").last - system "ant", "-Dbuild.compile.target=1.8", "-Drevision=#{revision}", "cli" - libexec.install Dir["build/duck.bundle/*"] + system "mvn", "-Drevision=#{revision}", "package" + libexec.install Dir["cli/target/duck.bundle/*"] bin.install_symlink "#{libexec}/Contents/MacOS/duck" => "duck" end diff --git a/source/ch/cyberduck/Cyberduck.csproj b/source/ch/cyberduck/Cyberduck.csproj deleted file mode 100644 index 4b758c450d..0000000000 --- a/source/ch/cyberduck/Cyberduck.csproj +++ /dev/null @@ -1,663 +0,0 @@ - - - - Debug - x86 - 9.0.21022 - 2.0 - {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30} - WinExe - Library - Properties - Ch.Cyberduck - Cyberduck - v4.0 - 512 - ..\..\..\cyberduck-application.ico - LocalIntranet - false - properties\app.manifest - false - true - - - - - 3.5 - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - - - Ch.Cyberduck.Ui.Controller.MainController - - - true - ..\..\..\build\ - DEBUG;TRACE - true - full - x86 - prompt - 1 - - - ..\..\..\build\ - TRACE - true - true - pdbonly - x86 - prompt - - - - - ..\..\..\build\dll - TRACE - true - true - pdbonly - x86 - prompt - - - - False - ..\..\..\lib\ActiveButtons.dll - - - False - ..\..\..\lib\AutomaticUpdater.dll - - - False - ..\..\..\build\Cyberduck.Core.dll - - - ..\..\..\lib\CustomOpenFileFolderDialog.dll - - - ..\..\..\lib\ExceptionReporter.WinForms.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Beans.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Charsets.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Core.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Jdbc.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Localedata.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Management.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Naming.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Security.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.SwingAWT.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Text.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Util.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.API.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Bind.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Parse.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Transform.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.XPath.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.Runtime.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.Runtime.JNI.dll - - - - False - ..\..\..\lib\ObjectListView.dll - - - False - ..\..\..\lib\StructureMap.dll - - - - - ..\..\..\lib\System.Core.dll - - - - - - - - - - ..\..\..\lib\VistaBridgeLibrary.dll - - - ..\..\..\lib\Windows7.DesktopIntegration.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Form - - - CommandForm.cs - - - Component - - - Component - - - Component - - - UserControl - - - SearchTextBox2.cs - - - UserControl - - - TransferControl.cs - - - - Component - - - Form - - - CreateSymlinkPromptForm.cs - - - - Form - - - GotoPromptForm.cs - - - - - Form - - - UpdateForm.cs - - - - ResXFileCodeGenerator - Designer - ResourcesBundle.Designer.cs - - - AboutBox.cs - Designer - - - ActivityForm.cs - Designer - - - BaseForm.cs - Designer - - - BookmarkForm.cs - Designer - - - BrowserForm.cs - Designer - - - CommandForm.cs - - - ConnectionForm.cs - Designer - - - TransferControl.cs - Designer - - - CreateSymlinkPromptForm.cs - Designer - - - CreateFilePromptForm.cs - Designer - - - DonationForm.cs - Designer - - - ErrorForm.cs - Designer - - - InfoForm.cs - Designer - - - LoginForm.cs - Designer - - - NewFolderPromptForm.cs - Designer - - - PreferencesForm.cs - Designer - - - PromptForm.cs - Designer - - - TaskDialogForm.cs - Designer - - - TransferForm.cs - Designer - - - TransferPromptForm.cs - Designer - - - UpdateForm.cs - - - - Designer - - - True - True - Settings.settings - - - - True - True - ResourcesBundle.resx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Component - - - Component - - - Component - - - - - Component - - - - - - - - - - - - - Form - - - AboutBox.cs - - - Form - - - ActivityForm.cs - - - Form - - - BaseForm.cs - - - Form - - - BookmarkForm.cs - - - Form - - - BrowserForm.cs - - - Form - - - ConnectionForm.cs - - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - SearchTextBox.cs - - - Form - - - CreateFilePromptForm.cs - - - Form - - - DonationForm.cs - - - Form - - - DuplicateFilePromptForm.cs - - - Form - - - ErrorForm.cs - - - Form - - - InfoForm.cs - - - Form - - - LoginForm.cs - - - Form - - - NewFolderPromptForm.cs - - - Form - - - PreferencesForm.cs - - - Form - - - PromptForm.cs - - - Component - - - CommandButton.cs - - - - Form - - - TaskDialogForm.cs - - - - - Component - - - - - Form - - - ToolbarBaseForm.cs - - - Form - - - TransferForm.cs - - - Form - - - TransferPromptForm.cs - - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {18FBED6D-F2B7-4EC8-A4A4-46282E635308} - 1 - 0 - 0 - tlbimp - False - False - - - - - {ac161b73-0b4b-4a32-b0d7-205ac89d83a5} - Windows Core - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if exist "$(TargetPath).locked" del "$(TargetPath).locked" - if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked - - - \ No newline at end of file diff --git a/source/ch/cyberduck/Windows Core.csproj b/source/ch/cyberduck/Windows Core.csproj deleted file mode 100644 index b4d624e25b..0000000000 --- a/source/ch/cyberduck/Windows Core.csproj +++ /dev/null @@ -1,160 +0,0 @@ - - - - - Debug - x86 - {AC161B73-0B4B-4A32-B0D7-205AC89D83A5} - Library - Properties - Core - Cyberduck.Core.Native - v4.0 - 512 - - - true - ..\..\..\build\ - DEBUG;TRACE - true - full - x86 - prompt - 1 - - - ..\..\..\build\ - TRACE - true - true - pdbonly - x86 - prompt - - - - ..\..\..\build\Cyberduck.Core.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Beans.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Charsets.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Core.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Jdbc.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Localedata.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Security.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.Text.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.API.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Bind.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Parse.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.Transform.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.OpenJDK.XML.XPath.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.Runtime.dll - - - ..\..\..\lib\ikvm-8.1.5717.0\bin\IKVM.Runtime.JNI.dll - - - - - - - - - - - - - - - {18FBED6D-F2B7-4EC8-A4A4-46282E635308} - 1 - 0 - 0 - tlbimp - False - False - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/ch/cyberduck/core/SessionFactory.java b/source/ch/cyberduck/core/SessionFactory.java deleted file mode 100644 index b17f8aff2d..0000000000 --- a/source/ch/cyberduck/core/SessionFactory.java +++ /dev/null @@ -1,67 +0,0 @@ -package ch.cyberduck.core; - -/* - * Copyright (c) 2012 David Kocher. All rights reserved. - * http://cyberduck.ch/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Bug fixes, suggestions and comments should be sent to: - * dkocher@cyberduck.ch - */ - -import ch.cyberduck.core.azure.AzureSession; -import ch.cyberduck.core.dav.DAVSession; -import ch.cyberduck.core.ftp.FTPSession; -import ch.cyberduck.core.gstorage.GoogleStorageSession; -import ch.cyberduck.core.irods.IRODSSession; -import ch.cyberduck.core.openstack.SwiftSession; -import ch.cyberduck.core.s3.S3Session; -import ch.cyberduck.core.sftp.SFTPSession; -import ch.cyberduck.core.ssl.X509KeyManager; -import ch.cyberduck.core.ssl.X509TrustManager; - -import org.apache.log4j.Logger; - -public final class SessionFactory { - private static final Logger log = Logger.getLogger(SessionFactory.class); - - private SessionFactory() { - // - } - - public static Session create(final Host host, final X509TrustManager trust, final X509KeyManager key) { - if(log.isDebugEnabled()) { - log.debug(String.format("Create session for %s", host)); - } - final Protocol protocol = host.getProtocol(); - switch(protocol.getType()) { - case ftp: - return new FTPSession(host, trust, key); - case ssh: - return new SFTPSession(host); - case s3: - return new S3Session(host, trust, key); - case googlestorage: - return new GoogleStorageSession(host, trust, key); - case swift: - return new SwiftSession(host, trust, key); - case dav: - return new DAVSession(host, trust, key); - case azure: - return new AzureSession(host, trust, key); - case irods: - return new IRODSSession(host, trust, key); - default: - throw new FactoryException(protocol.getType().name()); - } - } -} diff --git a/source/ch/cyberduck/core/serializer/impl/jna/HostPlistReader.java b/source/ch/cyberduck/core/serializer/impl/jna/HostPlistReader.java deleted file mode 100644 index bb7ae489f3..0000000000 --- a/source/ch/cyberduck/core/serializer/impl/jna/HostPlistReader.java +++ /dev/null @@ -1,45 +0,0 @@ -package ch.cyberduck.core.serializer.impl.jna; - -/* - * Copyright (c) 2009 David Kocher. All rights reserved. - * http://cyberduck.ch/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Bug fixes, suggestions and comments should be sent to: - * dkocher@cyberduck.ch - */ - -import ch.cyberduck.core.DeserializerFactory; -import ch.cyberduck.core.Host; -import ch.cyberduck.core.serializer.HostDictionary; -import ch.cyberduck.binding.foundation.NSDictionary; - -/** - * @version $Id$ - */ -public class HostPlistReader extends PlistReader { - - private DeserializerFactory deserializer; - - public HostPlistReader() { - this.deserializer = new DeserializerFactory(); - } - - public HostPlistReader(final DeserializerFactory deserializer) { - this.deserializer = deserializer; - } - - @Override - public Host deserialize(final NSDictionary dict) { - return new HostDictionary(deserializer).deserialize(dict); - } -} \ No newline at end of file diff --git a/source/ch/cyberduck/core/serializer/impl/jna/ProfilePlistReader.java b/source/ch/cyberduck/core/serializer/impl/jna/ProfilePlistReader.java deleted file mode 100644 index 674ee51760..0000000000 --- a/source/ch/cyberduck/core/serializer/impl/jna/ProfilePlistReader.java +++ /dev/null @@ -1,46 +0,0 @@ -package ch.cyberduck.core.serializer.impl.jna; - -/* - * Copyright (c) 2002-2011 David Kocher. All rights reserved. - * - * http://cyberduck.ch/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Bug fixes, suggestions and comments should be sent to: - * dkocher@cyberduck.ch - */ - -import ch.cyberduck.core.DeserializerFactory; -import ch.cyberduck.core.Profile; -import ch.cyberduck.core.serializer.ProfileDictionary; -import ch.cyberduck.binding.foundation.NSDictionary; - -/** - * @version $Id$ - */ -public class ProfilePlistReader extends PlistReader { - - private DeserializerFactory deserializer; - - public ProfilePlistReader() { - this.deserializer = new DeserializerFactory(); - } - - public ProfilePlistReader(final DeserializerFactory deserializer) { - this.deserializer = deserializer; - } - - @Override - public Profile deserialize(final NSDictionary dict) { - return new ProfileDictionary(deserializer).deserialize(dict); - } -} \ No newline at end of file diff --git a/source/ch/cyberduck/core/serializer/impl/jna/TransferPlistReader.java b/source/ch/cyberduck/core/serializer/impl/jna/TransferPlistReader.java deleted file mode 100644 index b9514e88c0..0000000000 --- a/source/ch/cyberduck/core/serializer/impl/jna/TransferPlistReader.java +++ /dev/null @@ -1,45 +0,0 @@ -package ch.cyberduck.core.serializer.impl.jna; - -/* - * Copyright (c) 2009 David Kocher. All rights reserved. - * http://cyberduck.ch/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Bug fixes, suggestions and comments should be sent to: - * dkocher@cyberduck.ch - */ - -import ch.cyberduck.core.DeserializerFactory; -import ch.cyberduck.core.serializer.TransferDictionary; -import ch.cyberduck.core.transfer.Transfer; -import ch.cyberduck.binding.foundation.NSDictionary; - -/** - * @version $Id$ - */ -public class TransferPlistReader extends PlistReader { - - private DeserializerFactory deserializer; - - public TransferPlistReader() { - this.deserializer = new DeserializerFactory(); - } - - public TransferPlistReader(final DeserializerFactory deserializer) { - this.deserializer = deserializer; - } - - @Override - public Transfer deserialize(final NSDictionary dict) { - return new TransferDictionary(deserializer).deserialize(dict); - } -} diff --git a/source/ch/cyberduck/ui/cocoa/quicklook/QuickLook.h b/source/ch/cyberduck/ui/cocoa/quicklook/QuickLook.h deleted file mode 100644 index 10d73cfc22..0000000000 --- a/source/ch/cyberduck/ui/cocoa/quicklook/QuickLook.h +++ /dev/null @@ -1,54 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook */ - -#ifndef _Included_ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook -#define _Included_ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Class: ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook - * Method: select - * Signature: (Ljava/lang/String;)V - */ -JNIEXPORT void JNICALL Java_ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook_selectNative - (JNIEnv *, jobject, jobjectArray); - -/* - * Class: ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook - * Method: isAvailable - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook_isAvailableNative - (JNIEnv *, jobject); - -/* - * Class: ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook - * Method: isOpen - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook_isOpenNative - (JNIEnv *, jobject); - -/* - * Class: ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook - * Method: open - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook_openNative - (JNIEnv *, jobject); - -/* - * Class: ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook - * Method: close - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook_closeNative - (JNIEnv *, jobject); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/source/ch/cyberduck/ui/cocoa/quicklook/QuickLook.m b/source/ch/cyberduck/ui/cocoa/quicklook/QuickLook.m deleted file mode 100644 index c210840041..0000000000 --- a/source/ch/cyberduck/ui/cocoa/quicklook/QuickLook.m +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2008 David Kocher. All rights reserved. - * http://cyberduck.ch/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Bug fixes, suggestions and comments should be sent to: - * dkocher@cyberduck.ch - */ - -#import -#import -#import -#import "QLPreviewPanel.h" -#define QLPreviewPanel NSClassFromString(@"QLPreviewPanel") - -// First, load the private Quick Look framework if available (10.5+) -#define QUICK_LOOK_AVAILABLE [[NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/QuickLookUI.framework"] load] - -JNIEXPORT void JNICALL Java_ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook_selectNative(JNIEnv *env, jobject this, jobjectArray paths) -{ - if(QUICK_LOOK_AVAILABLE) { - NSMutableArray* URLs = nil; - URLs = [NSMutableArray arrayWithCapacity:(*env)->GetArrayLength(env, paths)]; - int i; - for(i = 0; i < (*env)->GetArrayLength(env, paths); i++) { - [URLs addObject:[NSURL fileURLWithPath:JNFJavaToNSString(env, (jstring)(*env)->GetObjectArrayElement(env, paths, i))]]; - } - [[QLPreviewPanel sharedPreviewPanel] setURLs:URLs currentIndex:0 preservingDisplayState:YES]; - } -} - -JNIEXPORT jboolean JNICALL Java_ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook_isAvailableNative - (JNIEnv *env, jobject this) -{ - return QUICK_LOOK_AVAILABLE; -} - -JNIEXPORT jboolean JNICALL Java_ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook_isOpenNative - (JNIEnv *env, jobject this) -{ - if(QUICK_LOOK_AVAILABLE) { - return [[QLPreviewPanel sharedPreviewPanel] isOpen]; - } - return NO; -} - -JNIEXPORT void JNICALL Java_ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook_openNative - (JNIEnv *env, jobject this) -{ - if(QUICK_LOOK_AVAILABLE) { - if(![[QLPreviewPanel sharedPreviewPanel] isOpen]) { - // And then display the panel - [[QLPreviewPanel sharedPreviewPanel] makeKeyAndOrderFrontWithEffect:2]; - } - } -} - -JNIEXPORT void JNICALL Java_ch_cyberduck_ui_cocoa_quicklook_DeprecatedQuickLook_closeNative - (JNIEnv *env, jobject this) -{ - if(QUICK_LOOK_AVAILABLE) { - if([[QLPreviewPanel sharedPreviewPanel] isOpen]) { - // If the user presses space when the preview panel is open then we close it - [[QLPreviewPanel sharedPreviewPanel] closeWithEffect:2]; - } - } -} \ No newline at end of file diff --git a/source/org/rococoa/native/ProxyForJava.h b/source/org/rococoa/native/ProxyForJava.h deleted file mode 100644 index 1436d31510..0000000000 --- a/source/org/rococoa/native/ProxyForJava.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2007, 2008 Duncan McGregor - * - * This file is part of Rococoa, a library to allow Java to talk to Cocoa. - * - * Rococoa is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Rococoa is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Rococoa. If not, see . - */ - -#import - -id proxyForJavaObject(void* methodInvokedCallback, void* methodSignatureCallback); - -@interface ProxyForJava : NSObject { - -void (*methodInvokedCallback)(const char*, id); -char* (*methodSignatureCallback)(const char*); - -} - -- (id) initWithMethodInvokedCallback: (void*) theMethodInvokedCallback methodSignatureCallback: (void*) theMethodSignatureCallback; - -- (void)forwardInvocation:(NSInvocation *) anInvocation; - -- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector; - -@end diff --git a/source/org/rococoa/native/ProxyForJava.m b/source/org/rococoa/native/ProxyForJava.m deleted file mode 100644 index 24f63c1565..0000000000 --- a/source/org/rococoa/native/ProxyForJava.m +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2007, 2008 Duncan McGregor - * - * This file is part of Rococoa, a library to allow Java to talk to Cocoa. - * - * Rococoa is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Rococoa is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Rococoa. If not, see . - */ - -#import "ProxyForJava.h" - -id proxyForJavaObject(void* methodInvokedCallback, void* methodSignatureCallback) { - return [[ProxyForJava alloc] initWithMethodInvokedCallback: methodInvokedCallback methodSignatureCallback: methodSignatureCallback]; -} - -@interface ProxyForJava (Private) -+ (const char *)cstringPtrForSelector:(CFStringRef) cfstring; -@end - -@implementation ProxyForJava - -- (id) initWithMethodInvokedCallback: (void*) theMethodInvokedCallback methodSignatureCallback: (void*) theMethodSignatureCallback { - self = [super init]; - if (self != nil) { - methodInvokedCallback = theMethodInvokedCallback; - methodSignatureCallback = theMethodSignatureCallback; - } - return self; -} - -// Passes a given invocation to the real object the proxy represents. -- (void)forwardInvocation:(NSInvocation *) anInvocation { - // calls back to Java on methodInvokedCallback, - SEL selector = [anInvocation selector]; - NSString* selectorName = NSStringFromSelector(selector); - // NSLog(@"forwardInvocation for %@", selectorName); - methodInvokedCallback([ProxyForJava cstringPtrForSelector:(CFStringRef) selectorName], anInvocation); -} - -- (BOOL)respondsToSelector:(SEL)aSelector { - // NSString* selectorName = NSStringFromSelector(aSelector); - // NSLog(@"respondsToSelector %@", selectorName); - NSMethodSignature* signature = [self methodSignatureForSelector:aSelector]; - return signature != nil; -} - -// Override this method in your concrete subclass to return a proper NSMethodSignature object for the -// given selector and the class your proxy objects stand in for. -- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { - NSString* selectorName = NSStringFromSelector(aSelector); - // NSLog(@"methodSignatureForSelector %@", selectorName); - if (aSelector == @selector(hash) || aSelector == @selector(isEqual:)) { - return [super methodSignatureForSelector: aSelector]; - } - const char* methodSignature = methodSignatureCallback([ProxyForJava cstringPtrForSelector:(CFStringRef) selectorName]); - if (NULL == methodSignature) { - // No method with signature of selector implemented - // NSLog(@"No method with signature of selector implemented: %@", selectorName); - return nil; - } - NSMethodSignature* result = [NSMethodSignature signatureWithObjCTypes: methodSignature]; - return result; -} - -+ (const char *)cstringPtrForSelector:(CFStringRef) selectorName { - static CFStringEncoding encoding = kCFStringEncodingUTF8; - const char* selectorNameChar = CFStringGetCStringPtr(selectorName, encoding); - if (NULL == selectorNameChar) { - // NSLog(@"CFStringGetCStringPtr failed for selector %@ with encoding %u", selectorName, encoding); - // May return NULL at any time. NULL if the internal storage of theString does not allow this to be returned efficiently. - CFIndex maxSize = CFStringGetMaximumSizeForEncoding(CFStringGetLength(selectorName), encoding); - char *buffer = (char *)malloc(maxSize); - if(CFStringGetCString(selectorName, buffer, maxSize, encoding)) { - return buffer; - } - NSLog(@"CFStringGetCString failed for selector %@ with encoding %u", selectorName, encoding); - } - return selectorNameChar; -} - -@end diff --git a/source/org/rococoa/native/Rococoa.h b/source/org/rococoa/native/Rococoa.h deleted file mode 100644 index 427b07f40b..0000000000 --- a/source/org/rococoa/native/Rococoa.h +++ /dev/null @@ -1,10 +0,0 @@ -#import -#include - -void callOnMainThread(void (*fn)(), BOOL waitUntilDone); - -@interface RococoaHelper : NSObject -+ (void) callback: (NSValue*) fn; -@end - - diff --git a/source/org/rococoa/native/Rococoa.m b/source/org/rococoa/native/Rococoa.m deleted file mode 100644 index 5caadffd23..0000000000 --- a/source/org/rococoa/native/Rococoa.m +++ /dev/null @@ -1,20 +0,0 @@ -#include "Rococoa.h" - -void callOnMainThread(void (*fn)(), BOOL waitUntilDone) { - // NSLog(@"callOnMainThread function at address %p", fn); - // Pool is required as we're being called from Java, which probably doesn't have a pool to - // allocate the NSValue from. - NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; - [RococoaHelper performSelectorOnMainThread: @selector(callback:) - withObject: [NSValue valueWithPointer: fn] waitUntilDone: waitUntilDone]; - [pool release]; -} - -@implementation RococoaHelper : NSObject - -+ (void) callback: (NSValue*) fnAsValue { - void (*fn)() = [fnAsValue pointerValue]; - (*fn)(); -} - -@end diff --git a/spectra/pom.xml b/spectra/pom.xml new file mode 100644 index 0000000000..c4186c41eb --- /dev/null +++ b/spectra/pom.xml @@ -0,0 +1,48 @@ + + + + 4.0.0 + + ch.cyberduck + parent + 4.8.0-SNAPSHOT + + spectra + jar + + + + ch.cyberduck + core + ${project.version} + + + com.spectralogic.ds3 + ds3-sdk + 1.2.0-RC2 + + + + + + spectra + http://dl.bintray.com/spectralogic/ds3 + + + \ No newline at end of file diff --git a/ssh/pom.xml b/ssh/pom.xml new file mode 100644 index 0000000000..205b5dcac6 --- /dev/null +++ b/ssh/pom.xml @@ -0,0 +1,72 @@ + + 4.0.0 + + ch.cyberduck + parent + 4.8.0-SNAPSHOT + + ssh + jar + + + + ch.cyberduck + core + ${project.version} + + + ch.cyberduck + test + pom + test + ${project.version} + + + ch.cyberduck + s3 + ${project.version} + + + com.hierynomus + sshj + 0.14.0 + + + net.vrallev.ecc + ecc-25519-java + 1.0.1 + + + com.jcraft + jzlib + 1.1.3 + + + com.jcraft + jsch.agentproxy.sshj + 0.0.9 + + + net.schmizz + sshj + + + + + com.jcraft + jsch.agentproxy.sshagent + 0.0.9 + + + com.jcraft + jsch.agentproxy.pageant + 0.0.9 + + + com.jcraft + jsch.agentproxy.usocket-jna + 0.0.9 + + + + diff --git a/source/ch/cyberduck/core/sftp/AbstractHostKeyCallback.java b/ssh/src/main/java/ch/cyberduck/core/sftp/AbstractHostKeyCallback.java similarity index 100% rename from source/ch/cyberduck/core/sftp/AbstractHostKeyCallback.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/AbstractHostKeyCallback.java diff --git a/source/ch/cyberduck/core/sftp/AgentAuthenticator.java b/ssh/src/main/java/ch/cyberduck/core/sftp/AgentAuthenticator.java similarity index 100% rename from source/ch/cyberduck/core/sftp/AgentAuthenticator.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/AgentAuthenticator.java diff --git a/source/ch/cyberduck/core/sftp/PreferencesHostKeyVerifier.java b/ssh/src/main/java/ch/cyberduck/core/sftp/PreferencesHostKeyVerifier.java similarity index 100% rename from source/ch/cyberduck/core/sftp/PreferencesHostKeyVerifier.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/PreferencesHostKeyVerifier.java diff --git a/source/ch/cyberduck/core/sftp/SFTPAgentAuthentication.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPAgentAuthentication.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPAgentAuthentication.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPAgentAuthentication.java diff --git a/source/ch/cyberduck/core/sftp/SFTPAttributesFeature.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPAttributesFeature.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPAttributesFeature.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPAttributesFeature.java diff --git a/source/ch/cyberduck/core/sftp/SFTPAuthentication.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPAuthentication.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPAuthentication.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPAuthentication.java diff --git a/source/ch/cyberduck/core/sftp/SFTPChallengeResponseAuthentication.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPChallengeResponseAuthentication.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPChallengeResponseAuthentication.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPChallengeResponseAuthentication.java diff --git a/source/ch/cyberduck/core/sftp/SFTPCommandFeature.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPCommandFeature.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPCommandFeature.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPCommandFeature.java diff --git a/source/ch/cyberduck/core/sftp/SFTPCompressFeature.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPCompressFeature.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPCompressFeature.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPCompressFeature.java diff --git a/source/ch/cyberduck/core/sftp/SFTPDeleteFeature.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPDeleteFeature.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPDeleteFeature.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPDeleteFeature.java diff --git a/source/ch/cyberduck/core/sftp/SFTPDirectoryFeature.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPDirectoryFeature.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPDirectoryFeature.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPDirectoryFeature.java diff --git a/source/ch/cyberduck/core/sftp/SFTPExceptionMappingService.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPExceptionMappingService.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPExceptionMappingService.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPExceptionMappingService.java diff --git a/source/ch/cyberduck/core/sftp/SFTPFindFeature.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPFindFeature.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPFindFeature.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPFindFeature.java diff --git a/source/ch/cyberduck/core/sftp/SFTPListService.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPListService.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPListService.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPListService.java diff --git a/source/ch/cyberduck/core/sftp/SFTPMoveFeature.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPMoveFeature.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPMoveFeature.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPMoveFeature.java diff --git a/source/ch/cyberduck/core/sftp/SFTPNoneAuthentication.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPNoneAuthentication.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPNoneAuthentication.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPNoneAuthentication.java diff --git a/source/ch/cyberduck/core/sftp/SFTPPasswordAuthentication.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPPasswordAuthentication.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPPasswordAuthentication.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPPasswordAuthentication.java diff --git a/source/ch/cyberduck/core/sftp/SFTPProtocol.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPProtocol.java similarity index 98% rename from source/ch/cyberduck/core/sftp/SFTPProtocol.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPProtocol.java index 2e9e616424..2ec40f5295 100644 --- a/source/ch/cyberduck/core/sftp/SFTPProtocol.java +++ b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPProtocol.java @@ -28,7 +28,7 @@ public final class SFTPProtocol extends AbstractProtocol { @Override public Type getType() { - return Type.ssh; + return Type.sftp; } @Override diff --git a/source/ch/cyberduck/core/sftp/SFTPPublicKeyAuthentication.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPPublicKeyAuthentication.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPPublicKeyAuthentication.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPPublicKeyAuthentication.java diff --git a/source/ch/cyberduck/core/sftp/SFTPReadFeature.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPReadFeature.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPReadFeature.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPReadFeature.java diff --git a/source/ch/cyberduck/core/sftp/SFTPSession.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPSession.java similarity index 98% rename from source/ch/cyberduck/core/sftp/SFTPSession.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPSession.java index 3e4d5a8ff6..92c36946e9 100644 --- a/source/ch/cyberduck/core/sftp/SFTPSession.java +++ b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPSession.java @@ -19,6 +19,8 @@ package ch.cyberduck.core.sftp; */ import ch.cyberduck.core.*; +import ch.cyberduck.core.cdn.DistributionConfiguration; +import ch.cyberduck.core.cloudfront.CustomOriginCloudFrontDistributionConfiguration; import ch.cyberduck.core.exception.BackgroundException; import ch.cyberduck.core.exception.ChecksumException; import ch.cyberduck.core.exception.ConnectionCanceledException; @@ -426,6 +428,9 @@ public class SFTPSession extends Session { if(type == Compress.class) { return (T) new SFTPCompressFeature(this); } + if(type == DistributionConfiguration.class) { + return (T) new CustomOriginCloudFrontDistributionConfiguration(host, this); + } return super.getFeature(type); } diff --git a/source/ch/cyberduck/core/sftp/SFTPSymlinkFeature.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPSymlinkFeature.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPSymlinkFeature.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPSymlinkFeature.java diff --git a/source/ch/cyberduck/core/sftp/SFTPTimestampFeature.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPTimestampFeature.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPTimestampFeature.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPTimestampFeature.java diff --git a/source/ch/cyberduck/core/sftp/SFTPTouchFeature.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPTouchFeature.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPTouchFeature.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPTouchFeature.java diff --git a/source/ch/cyberduck/core/sftp/SFTPUnixPermissionFeature.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPUnixPermissionFeature.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPUnixPermissionFeature.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPUnixPermissionFeature.java diff --git a/source/ch/cyberduck/core/sftp/SFTPWriteFeature.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SFTPWriteFeature.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SFTPWriteFeature.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SFTPWriteFeature.java diff --git a/source/ch/cyberduck/core/sftp/SSHFingerprintGenerator.java b/ssh/src/main/java/ch/cyberduck/core/sftp/SSHFingerprintGenerator.java similarity index 100% rename from source/ch/cyberduck/core/sftp/SSHFingerprintGenerator.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/SSHFingerprintGenerator.java diff --git a/source/ch/cyberduck/core/sftp/openssh/OpenSSHAgentAuthenticator.java b/ssh/src/main/java/ch/cyberduck/core/sftp/openssh/OpenSSHAgentAuthenticator.java similarity index 100% rename from source/ch/cyberduck/core/sftp/openssh/OpenSSHAgentAuthenticator.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/openssh/OpenSSHAgentAuthenticator.java diff --git a/source/ch/cyberduck/core/sftp/openssh/OpenSSHHostKeyVerifier.java b/ssh/src/main/java/ch/cyberduck/core/sftp/openssh/OpenSSHHostKeyVerifier.java similarity index 100% rename from source/ch/cyberduck/core/sftp/openssh/OpenSSHHostKeyVerifier.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/openssh/OpenSSHHostKeyVerifier.java diff --git a/source/ch/cyberduck/core/sftp/putty/PageantAuthenticator.java b/ssh/src/main/java/ch/cyberduck/core/sftp/putty/PageantAuthenticator.java similarity index 100% rename from source/ch/cyberduck/core/sftp/putty/PageantAuthenticator.java rename to ssh/src/main/java/ch/cyberduck/core/sftp/putty/PageantAuthenticator.java diff --git a/ssh/src/test/java/ch/cyberduck/core/SessionFactoryTest.java b/ssh/src/test/java/ch/cyberduck/core/SessionFactoryTest.java new file mode 100644 index 0000000000..69569aa653 --- /dev/null +++ b/ssh/src/test/java/ch/cyberduck/core/SessionFactoryTest.java @@ -0,0 +1,21 @@ +package ch.cyberduck.core; + +import ch.cyberduck.core.sftp.SFTPProtocol; +import ch.cyberduck.core.ssl.DefaultX509KeyManager; +import ch.cyberduck.core.ssl.DefaultX509TrustManager; + +import org.junit.Test; + +import static org.junit.Assert.assertNotNull; + +/** + * @version $Id$ + */ +public class SessionFactoryTest extends AbstractTestCase { + + @Test + public void testCreateSession() throws Exception { + assertNotNull(SessionFactory.create(new Host(new SFTPProtocol()), + new DefaultX509TrustManager(), new DefaultX509KeyManager())); + } +} diff --git a/test/ch/cyberduck/core/sftp/PreferencesHostKeyVerifierTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/PreferencesHostKeyVerifierTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/PreferencesHostKeyVerifierTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/PreferencesHostKeyVerifierTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPAttributesFeatureTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPAttributesFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPAttributesFeatureTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPAttributesFeatureTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPChallengeResponseAuthenticationTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPChallengeResponseAuthenticationTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPChallengeResponseAuthenticationTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPChallengeResponseAuthenticationTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPCommandFeatureTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPCommandFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPCommandFeatureTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPCommandFeatureTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPCompressFeatureTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPCompressFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPCompressFeatureTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPCompressFeatureTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPDeleteFeatureTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPDeleteFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPDeleteFeatureTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPDeleteFeatureTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPDirectoryFeatureTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPDirectoryFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPDirectoryFeatureTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPDirectoryFeatureTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPExceptionMappingServiceTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPExceptionMappingServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPExceptionMappingServiceTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPExceptionMappingServiceTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPFindFeatureTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPFindFeatureTest.java similarity index 97% rename from test/ch/cyberduck/core/sftp/SFTPFindFeatureTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPFindFeatureTest.java index bcec0a274c..33d96f3116 100644 --- a/test/ch/cyberduck/core/sftp/SFTPFindFeatureTest.java +++ b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPFindFeatureTest.java @@ -63,6 +63,6 @@ public class SFTPFindFeatureTest extends AbstractTestCase { @Test public void testFindRoot() throws Exception { - assertTrue(new SFTPFindFeature(new SFTPSession(new Host("h"))).find(new Path("/", EnumSet.of(Path.Type.directory)))); + assertTrue(new SFTPFindFeature(new SFTPSession(new Host(new SFTPProtocol()))).find(new Path("/", EnumSet.of(Path.Type.directory)))); } } diff --git a/test/ch/cyberduck/core/sftp/SFTPListServiceTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPListServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPListServiceTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPListServiceTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPMoveFeatureTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPMoveFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPMoveFeatureTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPMoveFeatureTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPNoneAuthenticationTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPNoneAuthenticationTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPNoneAuthenticationTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPNoneAuthenticationTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPPasswordAuthenticationTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPPasswordAuthenticationTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPPasswordAuthenticationTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPPasswordAuthenticationTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPProtocolTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPProtocolTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPProtocolTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPProtocolTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPPublicKeyAuthenticationTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPPublicKeyAuthenticationTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPPublicKeyAuthenticationTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPPublicKeyAuthenticationTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPReadFeatureTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPReadFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPReadFeatureTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPReadFeatureTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPSessionTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPSessionTest.java similarity index 99% rename from test/ch/cyberduck/core/sftp/SFTPSessionTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPSessionTest.java index c7f241776c..4d25b09dc2 100644 --- a/test/ch/cyberduck/core/sftp/SFTPSessionTest.java +++ b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPSessionTest.java @@ -18,7 +18,6 @@ import ch.cyberduck.core.proxy.ProxySocketFactory; import ch.cyberduck.core.sftp.openssh.OpenSSHHostKeyVerifier; import ch.cyberduck.core.socket.DefaultSocketConfigurator; import ch.cyberduck.core.ssl.DefaultTrustManagerHostnameCallback; -import ch.cyberduck.core.test.NullLocal; import org.junit.Test; diff --git a/test/ch/cyberduck/core/sftp/SFTPSymlinkFeatureTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPSymlinkFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPSymlinkFeatureTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPSymlinkFeatureTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPTimestampFeatureTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPTimestampFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPTimestampFeatureTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPTimestampFeatureTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPTouchFeatureTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPTouchFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPTouchFeatureTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPTouchFeatureTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPUnixPermissionFeatureTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPUnixPermissionFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPUnixPermissionFeatureTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPUnixPermissionFeatureTest.java diff --git a/test/ch/cyberduck/core/sftp/SFTPWriteFeatureTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SFTPWriteFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SFTPWriteFeatureTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SFTPWriteFeatureTest.java diff --git a/test/ch/cyberduck/core/sftp/SSHFingerprintGeneratorTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/SSHFingerprintGeneratorTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/SSHFingerprintGeneratorTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/SSHFingerprintGeneratorTest.java diff --git a/test/ch/cyberduck/core/sftp/openssh/OpenSSHAgentAuthenticatorTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/openssh/OpenSSHAgentAuthenticatorTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/openssh/OpenSSHAgentAuthenticatorTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/openssh/OpenSSHAgentAuthenticatorTest.java diff --git a/test/ch/cyberduck/core/sftp/openssh/OpenSSHHostKeyVerifierTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/openssh/OpenSSHHostKeyVerifierTest.java similarity index 96% rename from test/ch/cyberduck/core/sftp/openssh/OpenSSHHostKeyVerifierTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/openssh/OpenSSHHostKeyVerifierTest.java index 14ce14193d..452404b5ca 100644 --- a/test/ch/cyberduck/core/sftp/openssh/OpenSSHHostKeyVerifierTest.java +++ b/ssh/src/test/java/ch/cyberduck/core/sftp/openssh/OpenSSHHostKeyVerifierTest.java @@ -52,7 +52,7 @@ public class OpenSSHHostKeyVerifierTest extends AbstractTestCase { @Test public void testVerifyIndexError() throws Exception { final OpenSSHHostKeyVerifier v = new OpenSSHHostKeyVerifier( - new Local("test/ch/cyberduck/core/sftp", "openssh/known_hosts.invalidline")) { + new Local("test/resources", "known_hosts.invalidline")) { @Override protected boolean isUnknownKeyAccepted(final String hostname, final PublicKey key) throws ConnectionCanceledException { return false; @@ -71,7 +71,7 @@ public class OpenSSHHostKeyVerifierTest extends AbstractTestCase { // |1|Gf2LppqPUrz9Tfl4QyS/bDqX0yw=|EWSG6Gl45mO6ZX1ENbmQUGCndF8= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLcNI58jw4+R7St2mDugzg46mEexty3p8AjWmc7OCy5vHoJRXzJwiKdUlbgE0YglnCz8MNvwQwKK0dnQDI3uJZ8= final OpenSSHHostKeyVerifier v = new OpenSSHHostKeyVerifier( - new Local("test/ch/cyberduck/core/sftp", "openssh/known_hosts.ecdsa")) { + new Local("test/resources", "known_hosts.ecdsa")) { @Override protected boolean isUnknownKeyAccepted(final String hostname, final PublicKey key) throws ConnectionCanceledException { return false; diff --git a/test/ch/cyberduck/core/sftp/openssh/known_hosts.ecdsa b/ssh/src/test/java/ch/cyberduck/core/sftp/openssh/known_hosts.ecdsa similarity index 100% rename from test/ch/cyberduck/core/sftp/openssh/known_hosts.ecdsa rename to ssh/src/test/java/ch/cyberduck/core/sftp/openssh/known_hosts.ecdsa diff --git a/test/ch/cyberduck/core/sftp/openssh/known_hosts.invalidline b/ssh/src/test/java/ch/cyberduck/core/sftp/openssh/known_hosts.invalidline similarity index 100% rename from test/ch/cyberduck/core/sftp/openssh/known_hosts.invalidline rename to ssh/src/test/java/ch/cyberduck/core/sftp/openssh/known_hosts.invalidline diff --git a/test/ch/cyberduck/core/sftp/putty/PageantAuthenticatorTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/putty/PageantAuthenticatorTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/putty/PageantAuthenticatorTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/putty/PageantAuthenticatorTest.java diff --git a/test/ch/cyberduck/core/sftp/putty/PuTTYKeyTest.java b/ssh/src/test/java/ch/cyberduck/core/sftp/putty/PuTTYKeyTest.java similarity index 100% rename from test/ch/cyberduck/core/sftp/putty/PuTTYKeyTest.java rename to ssh/src/test/java/ch/cyberduck/core/sftp/putty/PuTTYKeyTest.java diff --git a/ssh/src/test/resources/known_hosts.ecdsa b/ssh/src/test/resources/known_hosts.ecdsa new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ssh/src/test/resources/known_hosts.invalidline b/ssh/src/test/resources/known_hosts.invalidline new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/ch/cyberduck/core/KeychainTest.java b/test/ch/cyberduck/core/KeychainTest.java deleted file mode 100644 index 8f58136595..0000000000 --- a/test/ch/cyberduck/core/KeychainTest.java +++ /dev/null @@ -1,70 +0,0 @@ -package ch.cyberduck.core; - -import ch.cyberduck.core.test.Depends; - -import org.junit.Ignore; -import org.junit.Test; - -import java.io.FileInputStream; -import java.io.InputStream; -import java.security.cert.CertificateFactory; -import java.security.cert.X509Certificate; -import java.util.Collections; -import java.util.concurrent.Callable; - -import static org.junit.Assert.*; - -/** - * @version $Id$ - */ -@Depends(platform = Factory.Platform.Name.mac) -public class KeychainTest extends AbstractTestCase { - - @Test - public void testFindPassword() throws Exception { - final PasswordStore k = new Keychain(); - assertNull(k.getPassword("cyberduck.ch", "u")); - assertNull(k.getPassword(Scheme.http, 80, "cyberduck.ch", "u")); - } - - @Test - @Ignore - public void testTrustedEmptyCertificates() throws Exception { - final CertificateStore k = new Keychain(); - assertFalse(k.isTrusted("cyberduck.ch", Collections.emptyList())); - } - - @Test - @Ignore - public void testTrusted() throws Exception { - final CertificateStore k = new Keychain(); - InputStream inStream = new FileInputStream("test/ch/cyberduck/core/ssl/OXxlRDVcWqdPEvFm.cer"); - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - final X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream); - this.repeat(new Callable() { - @Override - public Boolean call() throws Exception { - final boolean trusted = k.isTrusted("test.cyberduck.ch", Collections.singletonList(cert)); - assertTrue(trusted); - return trusted; - } - }, 1); - } - - @Test - @Ignore - public void testTrustedHostnameMismatch() throws Exception { - final CertificateStore k = new Keychain(); - InputStream inStream = new FileInputStream("test/ch/cyberduck/core/ssl/OXxlRDVcWqdPEvFm.cer"); - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - final X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream); - this.repeat(new Callable() { - @Override - public Boolean call() throws Exception { - final boolean trusted = k.isTrusted("s.test.cyberduck.ch", Collections.singletonList(cert)); - assertTrue(trusted); - return trusted; - } - }, 1); - } -} diff --git a/test/ch/cyberduck/core/TildePathExpanderTest.java b/test/ch/cyberduck/core/TildePathExpanderTest.java deleted file mode 100644 index 9f1d7a51d1..0000000000 --- a/test/ch/cyberduck/core/TildePathExpanderTest.java +++ /dev/null @@ -1,83 +0,0 @@ -package ch.cyberduck.core; - -/* - * Copyright (c) 2002-2015 David Kocher. All rights reserved. - * http://cyberduck.io/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Bug fixes, suggestions and comments should be sent to: - * feedback@cyberduck.io - */ - -import ch.cyberduck.core.exception.ConnectionCanceledException; -import ch.cyberduck.core.sftp.SFTPProtocol; -import ch.cyberduck.core.sftp.SFTPSession; - -import org.junit.Test; - -import java.util.EnumSet; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertSame; - -public class TildePathExpanderTest extends AbstractTestCase { - - @Test(expected = ConnectionCanceledException.class) - public void testExpandNotConnected() throws Exception { - final Host host = new Host(new SFTPProtocol(), "test.cyberduck.ch", new Credentials( - properties.getProperty("sftp.user"), properties.getProperty("sftp.password") - )); - final SFTPSession session = new SFTPSession(host); - new TildePathExpander(session).expand(new Path("~/f", EnumSet.of(Path.Type.file))); - } - - @Test - public void testExpand() throws Exception { - final Host host = new Host(new SFTPProtocol(), "test.cyberduck.ch", new Credentials( - properties.getProperty("sftp.user"), properties.getProperty("sftp.password") - )); - final SFTPSession session = new SFTPSession(host); - session.open(new DisabledHostKeyCallback(), new DisabledTranscriptListener()); - session.login(new DisabledPasswordStore(), new DisabledLoginCallback(), new DisabledCancelCallback()); - final Path expanded = new TildePathExpander(session).expand(new Path("~/f", EnumSet.of(Path.Type.file))); - assertEquals(new Path("/home/jenkins/f", EnumSet.of(Path.Type.file)), expanded); - assertEquals(new Path("/home/jenkins", EnumSet.of(Path.Type.directory)), expanded.getParent()); - session.close(); - } - - @Test - public void testExpandPathWithDirectory() throws Exception { - final Host host = new Host(new SFTPProtocol(), "test.cyberduck.ch", new Credentials( - properties.getProperty("sftp.user"), properties.getProperty("sftp.password") - )); - final SFTPSession session = new SFTPSession(host); - session.open(new DisabledHostKeyCallback(), new DisabledTranscriptListener()); - session.login(new DisabledPasswordStore(), new DisabledLoginCallback(), new DisabledCancelCallback()); - final Path expanded = new TildePathExpander(session).expand(new Path("/~/f/s", EnumSet.of(Path.Type.file))); - assertEquals(new Path("/home/jenkins/f/s", EnumSet.of(Path.Type.file)), expanded); - assertEquals(new Path("/home/jenkins/f", EnumSet.of(Path.Type.directory)), expanded.getParent()); - session.close(); - } - - @Test - public void testNoExpand() throws Exception { - final Host host = new Host(new SFTPProtocol(), "test.cyberduck.ch", new Credentials( - properties.getProperty("sftp.user"), properties.getProperty("sftp.password") - )); - final SFTPSession session = new SFTPSession(host); - session.open(new DisabledHostKeyCallback(), new DisabledTranscriptListener()); - session.login(new DisabledPasswordStore(), new DisabledLoginCallback(), new DisabledCancelCallback()); - final Path f = new Path("/f", EnumSet.of(Path.Type.file)); - assertSame(f, new TildePathExpander(session).expand(f)); - session.close(); - } -} \ No newline at end of file diff --git a/test/ch/cyberduck/core/bonjour/RendezvousCollectionTest.java b/test/ch/cyberduck/core/bonjour/RendezvousCollectionTest.java deleted file mode 100644 index b81c15d977..0000000000 --- a/test/ch/cyberduck/core/bonjour/RendezvousCollectionTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package ch.cyberduck.core.bonjour; - -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Host; -import ch.cyberduck.core.sftp.SFTPProtocol; - -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * @version $Id$ - */ -public class RendezvousCollectionTest extends AbstractTestCase { - - @Test - public void testAdd() throws Exception { - final RendezvousCollection c = RendezvousCollection.defaultCollection(); - assertFalse(c.allowsAdd()); - assertFalse(c.allowsDelete()); - assertFalse(c.allowsEdit()); - final Rendezvous rendezvous = RendezvousFactory.instance(); - rendezvous.init(); - final Host h = new Host(new SFTPProtocol(), "h"); - ((AbstractRendezvous) rendezvous).add("h_sftp", h); - assertEquals(1, c.size()); - assertEquals(h, c.get(0)); - assertNotNull(c.get(0).getUuid()); - ((AbstractRendezvous) rendezvous).remove("h_sftp"); - assertEquals(0, c.size()); - assertTrue(c.isEmpty()); - } -} diff --git a/test/ch/cyberduck/core/date/UserDefaultsDateFormatterTest.java b/test/ch/cyberduck/core/date/UserDefaultsDateFormatterTest.java deleted file mode 100644 index 12f521d726..0000000000 --- a/test/ch/cyberduck/core/date/UserDefaultsDateFormatterTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package ch.cyberduck.core.date; - -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.test.Depends; -import ch.cyberduck.ui.cocoa.UserDefaultsDateFormatter; - -import org.junit.Test; - -import java.util.concurrent.Callable; - -import static org.junit.Assert.assertNotNull; - -/** - * @version $Id$ - */ -@Depends(platform = Factory.Platform.Name.mac) -public class UserDefaultsDateFormatterTest extends AbstractTestCase { - - @Test - public void testGetShortFormat() throws Exception { - final UserDateFormatter f = new UserDefaultsDateFormatter(); - this.repeat(new Callable() { - @Override - public Void call() throws Exception { - assertNotNull(f.getShortFormat(System.currentTimeMillis(), false)); - assertNotNull(f.getShortFormat(System.currentTimeMillis(), true)); - return null; - } - }, 10); - } - - @Test - public void testGetMediumFormat() throws Exception { - final UserDateFormatter f = new UserDefaultsDateFormatter(); - this.repeat(new Callable() { - @Override - public Void call() throws Exception { - assertNotNull(f.getMediumFormat(System.currentTimeMillis(), false)); - assertNotNull(f.getMediumFormat(System.currentTimeMillis(), true)); - return null; - } - }, 10); - } - - @Test - public void testGetLongFormat() throws Exception { - final UserDateFormatter f = new UserDefaultsDateFormatter(); - this.repeat(new Callable() { - @Override - public Void call() throws Exception { - assertNotNull(f.getLongFormat(System.currentTimeMillis(), false)); - assertNotNull(f.getLongFormat(System.currentTimeMillis(), true)); - return null; - } - }, 10); - } -} diff --git a/test/ch/cyberduck/core/i18n/BundleLocaleTest.java b/test/ch/cyberduck/core/i18n/BundleLocaleTest.java deleted file mode 100644 index f85c9b861e..0000000000 --- a/test/ch/cyberduck/core/i18n/BundleLocaleTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package ch.cyberduck.core.i18n; - -import ch.cyberduck.binding.foundation.NSBundle; -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.local.WorkdirPrefixer; -import ch.cyberduck.core.test.Depends; - -import org.junit.Ignore; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @version $Id$ - */ -@Depends(platform = Factory.Platform.Name.mac) -public class BundleLocaleTest extends AbstractTestCase { - - @Test - public void testGet() throws Exception { - assertEquals("Il y a eu un problème lors de la recherche de mises à jour", - new BundleLocale().localize("Il y a eu un problème lors de la recherche de mises à jour", "Localizable")); - } - - @Test - @Ignore - public void testLocalize() throws Exception { - assertEquals("Échec du téléchargement", - new BundleLocale(NSBundle.bundleWithPath(new WorkdirPrefixer().normalize("."))).localize("Download failed", "Status")); - } -} - - diff --git a/test/ch/cyberduck/core/local/WorkspaceApplicationLauncherTest.java b/test/ch/cyberduck/core/local/WorkspaceApplicationLauncherTest.java deleted file mode 100644 index e4bba0a740..0000000000 --- a/test/ch/cyberduck/core/local/WorkspaceApplicationLauncherTest.java +++ /dev/null @@ -1,78 +0,0 @@ -package ch.cyberduck.core.local; - -/* - * Copyright (c) 2012 David Kocher. All rights reserved. - * http://cyberduck.ch/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Bug fixes, suggestions and comments should be sent to: - * dkocher@cyberduck.ch - */ - -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.test.Depends; -import ch.cyberduck.core.test.NullLocal; - -import org.junit.Test; - -import java.util.UUID; -import java.util.concurrent.Callable; - -/** - * @version $Id$ - */ -@Depends(platform = Factory.Platform.Name.mac) -public class WorkspaceApplicationLauncherTest extends AbstractTestCase { - - @Test - public void testOpen() throws Exception { - this.repeat(new Callable() { - @Override - public Void call() throws Exception { - new WorkspaceApplicationLauncher().open(new NullLocal("t")); - return null; - } - }, 5); - this.repeat(new Callable() { - @Override - public Void call() throws Exception { - final NullLocal file = new NullLocal(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString()); - LocalTouchFactory.get().touch(file); - file.delete(true); - new WorkspaceApplicationLauncher().open(file); - return null; - } - }, 5); - } - - @Test - public void testBounce() throws Exception { - this.repeat(new Callable() { - @Override - public Void call() throws Exception { - new WorkspaceApplicationLauncher().bounce(new NullLocal("t")); - return null; - } - }, 5); - this.repeat(new Callable() { - @Override - public Void call() throws Exception { - final NullLocal file = new NullLocal(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString()); - LocalTouchFactory.get().touch(file); - file.delete(true); - new WorkspaceApplicationLauncher().bounce(file); - return null; - } - }, 5); - } -} diff --git a/test/ch/cyberduck/core/serializer/TransferDictionaryTest.java b/test/ch/cyberduck/core/serializer/TransferDictionaryTest.java deleted file mode 100644 index d6b0300b19..0000000000 --- a/test/ch/cyberduck/core/serializer/TransferDictionaryTest.java +++ /dev/null @@ -1,85 +0,0 @@ -package ch.cyberduck.core.serializer; - -/* - * Copyright (c) 2002-2014 David Kocher. All rights reserved. - * http://cyberduck.io/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Bug fixes, suggestions and comments should be sent to: - * feedback@cyberduck.io - */ - -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Host; -import ch.cyberduck.core.Local; -import ch.cyberduck.core.Path; -import ch.cyberduck.core.SerializerFactory; -import ch.cyberduck.core.test.NullLocal; -import ch.cyberduck.core.transfer.DownloadTransfer; -import ch.cyberduck.core.transfer.SyncTransfer; -import ch.cyberduck.core.transfer.Transfer; -import ch.cyberduck.core.transfer.TransferItem; -import ch.cyberduck.core.transfer.UploadTransfer; - -import org.junit.Test; - -import java.util.EnumSet; -import java.util.UUID; - -import static org.junit.Assert.*; - -public class TransferDictionaryTest extends AbstractTestCase { - - @Test - public void testSerializeDownloadTransfer() throws Exception { - final Path test = new Path("t", EnumSet.of(Path.Type.file)); - Transfer t = new DownloadTransfer(new Host("t"), test, new NullLocal(UUID.randomUUID().toString(), "transfer")); - t.addSize(4L); - t.addTransferred(3L); - final Transfer serialized = new TransferDictionary().deserialize(t.serialize(SerializerFactory.get())); - assertNotSame(t, serialized); - assertEquals(t.getRoots(), serialized.getRoots()); - assertEquals(t.getBandwidth(), serialized.getBandwidth()); - assertEquals(4L, serialized.getSize()); - assertEquals(3L, serialized.getTransferred()); - assertFalse(serialized.isComplete()); - } - - @Test - public void testSerializeUploadTransfer() throws Exception { - final Path test = new Path("t", EnumSet.of(Path.Type.file)); - Transfer t = new UploadTransfer(new Host("t"), test, - new Local(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString())); - t.addSize(4L); - t.addTransferred(3L); - final Transfer serialized = new TransferDictionary().deserialize(t.serialize(SerializerFactory.get())); - assertNotSame(t, serialized); - assertEquals(t.getRoots(), serialized.getRoots()); - assertEquals(t.getBandwidth(), serialized.getBandwidth()); - assertEquals(4L, serialized.getSize()); - assertEquals(3L, serialized.getTransferred()); - } - - @Test - public void testSyncTransfer() throws Exception { - Transfer t = new SyncTransfer(new Host("t"), - new TransferItem(new Path("t", EnumSet.of(Path.Type.file)), new NullLocal("/", "t"))); - t.addSize(4L); - t.addTransferred(3L); - final Transfer serialized = new TransferDictionary().deserialize(t.serialize(SerializerFactory.get())); - assertNotSame(t, serialized); - assertEquals(t.getRoots(), serialized.getRoots()); - assertEquals(t.getBandwidth(), serialized.getBandwidth()); - assertEquals(4L, serialized.getSize()); - assertEquals(3L, serialized.getTransferred()); - } -} \ No newline at end of file diff --git a/test/ch/cyberduck/core/serializer/impl/jna/HostPlistReaderTest.java b/test/ch/cyberduck/core/serializer/impl/jna/HostPlistReaderTest.java deleted file mode 100644 index 2b55d1230e..0000000000 --- a/test/ch/cyberduck/core/serializer/impl/jna/HostPlistReaderTest.java +++ /dev/null @@ -1,75 +0,0 @@ -package ch.cyberduck.core.serializer.impl.jna; - -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.DeserializerFactory; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.Host; -import ch.cyberduck.core.Local; -import ch.cyberduck.core.ProtocolFactory; -import ch.cyberduck.core.exception.LocalAccessDeniedException; -import ch.cyberduck.core.local.FinderLocal; -import ch.cyberduck.core.test.Depends; - -import org.junit.Test; - -import java.util.UUID; - -import static org.junit.Assert.*; - -/** - * @version $Id$ - */ -@Depends(platform = Factory.Platform.Name.mac) -public class HostPlistReaderTest extends AbstractTestCase { - - @Test(expected = LocalAccessDeniedException.class) - public void testDeserializeNoSuchFile() throws Exception { - final HostPlistReader reader = new HostPlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - assertNull(reader.read(new Local(UUID.randomUUID().toString()))); - } - - @Test - public void testDeserializeDeprecatedProtocol() throws Exception { - final HostPlistReader reader = new HostPlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - assertNull(reader.read( - new FinderLocal("test/ch/cyberduck/core/serializer/impl/1c158c34-db8a-4c32-a732-abd9447bb27c.duck"))); - } - - @Test - public void testRead() throws Exception { - final HostPlistReader reader = new HostPlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - final Host read = reader.read(new FinderLocal( - "test/ch/cyberduck/core/serializer/impl/s3.amazonaws.com – S3.duck")); - assertNotNull(read); - assertEquals("Amazon Simple Storage Service & CloudFront CDN", read.getComment()); - assertEquals(ProtocolFactory.S3_SSL, read.getProtocol()); - } - - @Test - public void testReadPrivateKey() throws Exception { - final HostPlistReader reader = new HostPlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - final Host read = reader.read(new FinderLocal( - "test/ch/cyberduck/core/serializer/impl/Private Key Legacy.duck")); - assertNotNull(read); - assertEquals(ProtocolFactory.SFTP, read.getProtocol()); - assertNotNull(read.getCredentials().getIdentity()); - assertEquals("~/.ssh/key.pem", read.getCredentials().getIdentity().getAbbreviatedPath()); - } - - @Test - public void testReadPrivateKeyBookmark() throws Exception { - final HostPlistReader reader = new HostPlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - final Host read = reader.read(new FinderLocal( - "test/ch/cyberduck/core/serializer/impl/Private Key.duck")); - assertNotNull(read); - assertEquals(ProtocolFactory.SFTP, read.getProtocol()); - assertNotNull(read.getCredentials().getIdentity()); - assertEquals("~/.ssh/key.pem", read.getCredentials().getIdentity().getAbbreviatedPath()); - } - - @Test(expected = LocalAccessDeniedException.class) - public void testReadNotFound() throws Exception { - final HostPlistReader reader = new HostPlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - reader.read(new FinderLocal("notfound.duck")); - } -} diff --git a/test/ch/cyberduck/core/serializer/impl/jna/ProfilePlistReaderTest.java b/test/ch/cyberduck/core/serializer/impl/jna/ProfilePlistReaderTest.java deleted file mode 100644 index f05728dd50..0000000000 --- a/test/ch/cyberduck/core/serializer/impl/jna/ProfilePlistReaderTest.java +++ /dev/null @@ -1,183 +0,0 @@ -package ch.cyberduck.core.serializer.impl.jna; - -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.DeserializerFactory; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.Filter; -import ch.cyberduck.core.Local; -import ch.cyberduck.core.LocalFactory; -import ch.cyberduck.core.Profile; -import ch.cyberduck.core.Protocol; -import ch.cyberduck.core.Scheme; -import ch.cyberduck.core.features.Location; -import ch.cyberduck.core.local.FinderLocal; -import ch.cyberduck.core.openstack.SwiftProtocol; -import ch.cyberduck.core.s3.S3LocationFeature; -import ch.cyberduck.core.s3.S3Protocol; -import ch.cyberduck.core.test.Depends; - -import org.junit.Assert; -import org.junit.Test; - -import java.util.Set; - -import static org.junit.Assert.*; - -/** - * @version $Id$ - */ -@Depends(platform = Factory.Platform.Name.mac) -public class ProfilePlistReaderTest extends AbstractTestCase { - - @Test - public void testDeserializeDropbox() throws Exception { - final ProfilePlistReader reader = new ProfilePlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - final Profile profile = reader.read( - new FinderLocal("test/ch/cyberduck/core/serializer/impl/Dropbox.cyberduckprofile") - ); - assertNull(profile); - } - - @Test - public void testAll() throws Exception { - for(Local l : new FinderLocal("profiles").list().filter(new Filter() { - @Override - public boolean accept(final Local file) { - return file.getName().endsWith(".cyberduckprofile"); - } - })) { - final ProfilePlistReader reader = new ProfilePlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - final Profile profile = reader.read(l); - assertNotNull(profile); - } - } - - @Test - public void testRegions() throws Exception { - final ProfilePlistReader reader = new ProfilePlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - final Profile profile = reader.read( - LocalFactory.get("test/ch/cyberduck/core/serializer/impl/Custom Regions S3.cyberduckprofile") - ); - assertNotNull(profile); - final Set regions = profile.getRegions(); - assertEquals(2, regions.size()); - assertTrue("custom", regions.contains(new S3LocationFeature.S3Region("custom"))); - assertTrue("custom2", regions.contains(new S3LocationFeature.S3Region("custom2"))); - } - - @Test - public void testEquals() throws Exception { - final ProfilePlistReader reader = new ProfilePlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - final Profile profile = reader.read( - new FinderLocal("profiles/Eucalyptus Walrus S3.cyberduckprofile") - ); - assertEquals(profile, reader.read( - new FinderLocal("profiles/Eucalyptus Walrus S3.cyberduckprofile") - )); - Assert.assertEquals(Protocol.Type.s3, profile.getType()); - assertEquals(new S3Protocol(), profile.getProtocol()); - assertNotSame(new S3Protocol().getDefaultHostname(), profile.getDefaultHostname()); - assertEquals(new S3Protocol().getScheme(), profile.getScheme()); - assertEquals("eucalyptus", profile.getProvider()); - } - - @Test - public void testEqualsDifferentScheme() throws Exception { - final ProfilePlistReader reader = new ProfilePlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - final Profile https = reader.read( - new FinderLocal("profiles/Openstack Swift (Swauth).cyberduckprofile") - ); - final Profile http = reader.read( - new FinderLocal("profiles/Openstack Swift (Swauth HTTP).cyberduckprofile") - ); - assertNotEquals(https, http); - } - - @Test - public void testEqualsContexts() throws Exception { - final ProfilePlistReader reader = new ProfilePlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - final Profile keystone = reader.read( - new FinderLocal("profiles/Openstack Swift (Keystone).cyberduckprofile") - ); - final Profile swauth = reader.read( - new FinderLocal("profiles/Openstack Swift (Swauth).cyberduckprofile") - ); - assertNotEquals(keystone, swauth); - } - - @Test - public void testProviderProfileHPCloud() throws Exception { - final ProfilePlistReader reader = new ProfilePlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - final Profile profile = reader.read( - new FinderLocal("profiles/HP Cloud Object Storage.cyberduckprofile") - ); - assertEquals(profile, reader.read( - new FinderLocal("profiles/HP Cloud Object Storage.cyberduckprofile") - )); - assertEquals(Protocol.Type.swift, profile.getType()); - assertEquals(new SwiftProtocol(), profile.getProtocol()); - assertFalse(profile.isHostnameConfigurable()); - assertFalse(profile.isPortConfigurable()); - assertEquals("swift", profile.getIdentifier()); - assertNotSame("identity.api.rackspacecloud.com", profile.getDefaultHostname()); - Assert.assertEquals(Scheme.https, profile.getScheme()); - assertNotNull(profile.disk()); - assertEquals(profile.disk(), profile.disk()); - assertEquals(profile.icon(), profile.disk()); - assertEquals("Tenant ID:Access Key", profile.getUsernamePlaceholder()); - assertEquals("Secret Key", profile.getPasswordPlaceholder()); - assertEquals(35357, profile.getDefaultPort()); - assertEquals("region-a.geo-1.identity.hpcloudsvc.com", profile.getDefaultHostname()); - assertEquals("/v2.0/tokens", profile.getContext()); - assertFalse(profile.disk().equals(new SwiftProtocol().disk())); - assertNotNull(profile.getProvider()); - } - - @Test - public void testProviderProfileS3HTTP() throws Exception { - final ProfilePlistReader reader = new ProfilePlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - final Profile profile = reader.read( - new FinderLocal("profiles/S3 (HTTP).cyberduckprofile") - ); - assertEquals(profile, reader.read( - new FinderLocal("profiles/S3 (HTTP).cyberduckprofile") - )); - assertEquals(Protocol.Type.s3, profile.getType()); - assertEquals(new S3Protocol(), profile.getProtocol()); - assertTrue(profile.isHostnameConfigurable()); - assertTrue(profile.isPortConfigurable()); - assertEquals("s3", profile.getIdentifier()); - assertEquals(Scheme.http, profile.getScheme()); - assertNotNull(profile.disk()); - assertEquals(profile.disk(), profile.disk()); - assertEquals(profile.icon(), profile.disk()); - assertEquals(80, profile.getDefaultPort()); - assertEquals(new S3Protocol().getDefaultHostname(), profile.getDefaultHostname()); - assertTrue(profile.disk().equals(new S3Protocol().disk())); - assertNotNull(profile.getProvider()); - } - - @Test - public void testProviderProfileS3HTTPS() throws Exception { - final ProfilePlistReader reader = new ProfilePlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - final Profile profile = reader.read( - new FinderLocal("profiles/S3 (HTTPS).cyberduckprofile") - ); - assertEquals(profile, reader.read( - new FinderLocal("profiles/S3 (HTTPS).cyberduckprofile") - )); - assertEquals(Protocol.Type.s3, profile.getType()); - assertEquals(new S3Protocol(), profile.getProtocol()); - assertTrue(profile.isHostnameConfigurable()); - assertTrue(profile.isPortConfigurable()); - assertEquals("s3", profile.getIdentifier()); - assertEquals(Scheme.https, profile.getScheme()); - assertNotNull(profile.disk()); - assertEquals(profile.disk(), profile.disk()); - assertEquals(profile.icon(), profile.disk()); - assertEquals(443, profile.getDefaultPort()); - assertEquals(new S3Protocol().getDefaultHostname(), profile.getDefaultHostname()); - assertTrue(profile.disk().equals(new S3Protocol().disk())); - assertNotNull(profile.getProvider()); - } -} diff --git a/test/ch/cyberduck/core/serializer/impl/jna/TransferPlistReaderTest.java b/test/ch/cyberduck/core/serializer/impl/jna/TransferPlistReaderTest.java deleted file mode 100644 index 3c77247884..0000000000 --- a/test/ch/cyberduck/core/serializer/impl/jna/TransferPlistReaderTest.java +++ /dev/null @@ -1,67 +0,0 @@ -package ch.cyberduck.core.serializer.impl.jna; - -/* - * Copyright (c) 2002-2014 David Kocher. All rights reserved. - * http://cyberduck.ch/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Bug fixes, suggestions and comments should be sent to: - * feedback@cyberduck.ch - */ - -import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.DeserializerFactory; -import ch.cyberduck.core.Factory; -import ch.cyberduck.core.Protocol; -import ch.cyberduck.core.local.FinderLocal; -import ch.cyberduck.core.test.Depends; -import ch.cyberduck.core.transfer.DownloadTransfer; -import ch.cyberduck.core.transfer.Transfer; -import ch.cyberduck.core.transfer.UploadTransfer; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * @version $Id$ - */ -@Depends(platform = Factory.Platform.Name.mac) -public class TransferPlistReaderTest extends AbstractTestCase { - - @Test - public void testDeserializeUpload() throws Exception { - final TransferPlistReader reader = new TransferPlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - final Transfer t = reader.read( - new FinderLocal("test/ch/cyberduck/core/serializer/impl/c44b5120-8dfe-41af-acd3-da99d87b811f.cyberducktransfer") - ); - assertTrue(t instanceof UploadTransfer); - assertEquals("identity.api.rackspacecloud.com", t.getHost().getHostname()); - assertEquals(Protocol.Type.swift, t.getHost().getProtocol().getType()); - assertEquals("/test.cyberduck.ch/bookmarks_en.png", t.getRoot().remote.getAbsolute()); - assertEquals("C:\\Users\\Yves Langisch\\Pictures\\bookmarks_en.png", t.getRoot().local.getAbsolute()); - } - - @Test - public void testDeserializeDownload() throws Exception { - final TransferPlistReader reader = new TransferPlistReader(new DeserializerFactory(PlistDeserializer.class.getName())); - final Transfer t = reader.read( - new FinderLocal("test/ch/cyberduck/core/serializer/impl/fcea1809-1d75-42f1-92b5-99b38bc1d63e.cyberducktransfer") - ); - assertTrue(t instanceof DownloadTransfer); - assertEquals("s3.amazonaws.com", t.getHost().getHostname()); - assertEquals(Protocol.Type.s3, t.getHost().getProtocol().getType()); - assertEquals("/cyberduck/Cyberduck-3.3.zip", t.getRoot().remote.getAbsolute()); - assertEquals("C:\\Users\\Yves Langisch\\Desktop\\Cyberduck-3.3.zip", t.getRoot().local.getAbsolute()); - } -} diff --git a/test/ch/cyberduck/core/test/Depends.java b/test/ch/cyberduck/core/test/Depends.java deleted file mode 100644 index 81ddf647cc..0000000000 --- a/test/ch/cyberduck/core/test/Depends.java +++ /dev/null @@ -1,32 +0,0 @@ -package ch.cyberduck.core.test; - -/* - * Copyright (c) 2002-2014 David Kocher. All rights reserved. - * http://cyberduck.io/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Bug fixes, suggestions and comments should be sent to: - * feedback@cyberduck.io - */ - -import ch.cyberduck.core.Factory; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -/** - * @version $Id$ - */ -@Retention(RetentionPolicy.RUNTIME) -public @interface Depends { - Factory.Platform.Name platform(); -} diff --git a/test/ch/cyberduck/core/test/PlatformAwareClassRunner.java b/test/ch/cyberduck/core/test/PlatformAwareClassRunner.java deleted file mode 100644 index 1ef8855065..0000000000 --- a/test/ch/cyberduck/core/test/PlatformAwareClassRunner.java +++ /dev/null @@ -1,53 +0,0 @@ -package ch.cyberduck.core.test; - -/* - * Copyright (c) 2002-2014 David Kocher. All rights reserved. - * http://cyberduck.io/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Bug fixes, suggestions and comments should be sent to: - * feedback@cyberduck.io - */ - -import ch.cyberduck.core.Factory; - -import org.junit.runner.notification.RunNotifier; -import org.junit.runners.BlockJUnit4ClassRunner; -import org.junit.runners.model.FrameworkMethod; -import org.junit.runners.model.InitializationError; - -/** - * @version $Id$ - */ -public final class PlatformAwareClassRunner extends BlockJUnit4ClassRunner { - private Depends depends; - - public PlatformAwareClassRunner(final Class klass) throws InitializationError { - super(klass); - depends = klass.getAnnotation(Depends.class); - } - - private static Factory.Platform.Name p = Factory.Platform.getDefault(); - - @Override - protected void runChild(FrameworkMethod method, RunNotifier notifier) { - if(depends == null) { - super.runChild(method, notifier); - } - else if(p.equals(depends.platform())) { - super.runChild(method, notifier); - } - else { - notifier.fireTestIgnored(describeChild(method)); - } - } -} diff --git a/test/pom.xml b/test/pom.xml new file mode 100644 index 0000000000..0eb89ae007 --- /dev/null +++ b/test/pom.xml @@ -0,0 +1,31 @@ + + + + ch.cyberduck + parent + 4.8.0-SNAPSHOT + + 4.0.0 + pom + test + + + + ch.cyberduck + core + test-jar + ${project.version} + + + junit + junit + 4.12 + + + commons-io + commons-io + + + \ No newline at end of file diff --git a/udt/pom.xml b/udt/pom.xml new file mode 100644 index 0000000000..533957b480 --- /dev/null +++ b/udt/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + + parent + ch.cyberduck + 4.8.0-SNAPSHOT + + + udt + + + + ch.cyberduck + core + ${project.version} + + + ch.cyberduck + test + pom + test + ${project.version} + + + com.barchart.udt + barchart-udt-bundle + 2.3.0 + + + \ No newline at end of file diff --git a/source/ch/cyberduck/core/udt/DisabledUDTSocketCallback.java b/udt/src/main/java/ch/cyberduck/core/udt/DisabledUDTSocketCallback.java similarity index 100% rename from source/ch/cyberduck/core/udt/DisabledUDTSocketCallback.java rename to udt/src/main/java/ch/cyberduck/core/udt/DisabledUDTSocketCallback.java diff --git a/source/ch/cyberduck/core/udt/DisabledUDTTransferOption.java b/udt/src/main/java/ch/cyberduck/core/udt/DisabledUDTTransferOption.java similarity index 100% rename from source/ch/cyberduck/core/udt/DisabledUDTTransferOption.java rename to udt/src/main/java/ch/cyberduck/core/udt/DisabledUDTTransferOption.java diff --git a/source/ch/cyberduck/core/udt/UDTExceptionMappingService.java b/udt/src/main/java/ch/cyberduck/core/udt/UDTExceptionMappingService.java similarity index 100% rename from source/ch/cyberduck/core/udt/UDTExceptionMappingService.java rename to udt/src/main/java/ch/cyberduck/core/udt/UDTExceptionMappingService.java diff --git a/source/ch/cyberduck/core/udt/UDTProtocol.java b/udt/src/main/java/ch/cyberduck/core/udt/UDTProtocol.java similarity index 100% rename from source/ch/cyberduck/core/udt/UDTProtocol.java rename to udt/src/main/java/ch/cyberduck/core/udt/UDTProtocol.java diff --git a/source/ch/cyberduck/core/udt/UDTProxyConfigurator.java b/udt/src/main/java/ch/cyberduck/core/udt/UDTProxyConfigurator.java similarity index 100% rename from source/ch/cyberduck/core/udt/UDTProxyConfigurator.java rename to udt/src/main/java/ch/cyberduck/core/udt/UDTProxyConfigurator.java diff --git a/source/ch/cyberduck/core/udt/UDTProxyProvider.java b/udt/src/main/java/ch/cyberduck/core/udt/UDTProxyProvider.java similarity index 100% rename from source/ch/cyberduck/core/udt/UDTProxyProvider.java rename to udt/src/main/java/ch/cyberduck/core/udt/UDTProxyProvider.java diff --git a/source/ch/cyberduck/core/udt/UDTSocket.java b/udt/src/main/java/ch/cyberduck/core/udt/UDTSocket.java similarity index 100% rename from source/ch/cyberduck/core/udt/UDTSocket.java rename to udt/src/main/java/ch/cyberduck/core/udt/UDTSocket.java diff --git a/source/ch/cyberduck/core/udt/UDTSocketCallback.java b/udt/src/main/java/ch/cyberduck/core/udt/UDTSocketCallback.java similarity index 100% rename from source/ch/cyberduck/core/udt/UDTSocketCallback.java rename to udt/src/main/java/ch/cyberduck/core/udt/UDTSocketCallback.java diff --git a/source/ch/cyberduck/core/udt/UDTTLSProtocol.java b/udt/src/main/java/ch/cyberduck/core/udt/UDTTLSProtocol.java similarity index 100% rename from source/ch/cyberduck/core/udt/UDTTLSProtocol.java rename to udt/src/main/java/ch/cyberduck/core/udt/UDTTLSProtocol.java diff --git a/source/ch/cyberduck/core/udt/UDTTransferOption.java b/udt/src/main/java/ch/cyberduck/core/udt/UDTTransferOption.java similarity index 100% rename from source/ch/cyberduck/core/udt/UDTTransferOption.java rename to udt/src/main/java/ch/cyberduck/core/udt/UDTTransferOption.java diff --git a/source/ch/cyberduck/core/udt/qloudsonic/InvalidReceiptException.java b/udt/src/main/java/ch/cyberduck/core/udt/qloudsonic/InvalidReceiptException.java similarity index 100% rename from source/ch/cyberduck/core/udt/qloudsonic/InvalidReceiptException.java rename to udt/src/main/java/ch/cyberduck/core/udt/qloudsonic/InvalidReceiptException.java diff --git a/source/ch/cyberduck/core/udt/qloudsonic/MissingReceiptException.java b/udt/src/main/java/ch/cyberduck/core/udt/qloudsonic/MissingReceiptException.java similarity index 100% rename from source/ch/cyberduck/core/udt/qloudsonic/MissingReceiptException.java rename to udt/src/main/java/ch/cyberduck/core/udt/qloudsonic/MissingReceiptException.java diff --git a/source/ch/cyberduck/core/udt/qloudsonic/QloudsonicProxyProvider.java b/udt/src/main/java/ch/cyberduck/core/udt/qloudsonic/QloudsonicProxyProvider.java similarity index 100% rename from source/ch/cyberduck/core/udt/qloudsonic/QloudsonicProxyProvider.java rename to udt/src/main/java/ch/cyberduck/core/udt/qloudsonic/QloudsonicProxyProvider.java diff --git a/source/ch/cyberduck/core/udt/qloudsonic/QloudsonicTransferOption.java b/udt/src/main/java/ch/cyberduck/core/udt/qloudsonic/QloudsonicTransferOption.java similarity index 100% rename from source/ch/cyberduck/core/udt/qloudsonic/QloudsonicTransferOption.java rename to udt/src/main/java/ch/cyberduck/core/udt/qloudsonic/QloudsonicTransferOption.java diff --git a/source/ch/cyberduck/core/udt/qloudsonic/QloudsonicVoucherFinder.java b/udt/src/main/java/ch/cyberduck/core/udt/qloudsonic/QloudsonicVoucherFinder.java similarity index 100% rename from source/ch/cyberduck/core/udt/qloudsonic/QloudsonicVoucherFinder.java rename to udt/src/main/java/ch/cyberduck/core/udt/qloudsonic/QloudsonicVoucherFinder.java diff --git a/test/ch/cyberduck/core/udt/UDTSocketTest.java b/udt/src/test/java/ch/cyberduck/core/udt/UDTSocketTest.java similarity index 100% rename from test/ch/cyberduck/core/udt/UDTSocketTest.java rename to udt/src/test/java/ch/cyberduck/core/udt/UDTSocketTest.java diff --git a/test/ch/cyberduck/core/udt/qloudsonic/QloudsonicProxyProviderTest.java b/udt/src/test/java/ch/cyberduck/core/udt/qloudsonic/QloudsonicProxyProviderTest.java similarity index 100% rename from test/ch/cyberduck/core/udt/qloudsonic/QloudsonicProxyProviderTest.java rename to udt/src/test/java/ch/cyberduck/core/udt/qloudsonic/QloudsonicProxyProviderTest.java diff --git a/test/ch/cyberduck/core/udt/qloudsonic/QloudsonicTestVoucher.java b/udt/src/test/java/ch/cyberduck/core/udt/qloudsonic/QloudsonicTestVoucher.java similarity index 100% rename from test/ch/cyberduck/core/udt/qloudsonic/QloudsonicTestVoucher.java rename to udt/src/test/java/ch/cyberduck/core/udt/qloudsonic/QloudsonicTestVoucher.java diff --git a/test/ch/cyberduck/core/udt/qloudsonic/QloudsonicTestVoucherFinder.java b/udt/src/test/java/ch/cyberduck/core/udt/qloudsonic/QloudsonicTestVoucherFinder.java similarity index 100% rename from test/ch/cyberduck/core/udt/qloudsonic/QloudsonicTestVoucherFinder.java rename to udt/src/test/java/ch/cyberduck/core/udt/qloudsonic/QloudsonicTestVoucherFinder.java diff --git a/ui/pom.xml b/ui/pom.xml new file mode 100644 index 0000000000..95bcc78e35 --- /dev/null +++ b/ui/pom.xml @@ -0,0 +1,30 @@ + + 4.0.0 + + ch.cyberduck + parent + 4.8.0-SNAPSHOT + + ui + jar + + + + ch.cyberduck + core + ${project.version} + + + ch.cyberduck + test + pom + test + ${project.version} + + + org.apache.commons + commons-lang3 + 3.4 + + + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/browser/Column.java b/ui/src/main/java/ch/cyberduck/ui/browser/Column.java similarity index 100% rename from source/ch/cyberduck/ui/browser/Column.java rename to ui/src/main/java/ch/cyberduck/ui/browser/Column.java diff --git a/source/ch/cyberduck/ui/browser/DirectoryFinder.java b/ui/src/main/java/ch/cyberduck/ui/browser/DirectoryFinder.java similarity index 100% rename from source/ch/cyberduck/ui/browser/DirectoryFinder.java rename to ui/src/main/java/ch/cyberduck/ui/browser/DirectoryFinder.java diff --git a/source/ch/cyberduck/ui/browser/DownloadDirectoryFinder.java b/ui/src/main/java/ch/cyberduck/ui/browser/DownloadDirectoryFinder.java similarity index 100% rename from source/ch/cyberduck/ui/browser/DownloadDirectoryFinder.java rename to ui/src/main/java/ch/cyberduck/ui/browser/DownloadDirectoryFinder.java diff --git a/source/ch/cyberduck/ui/browser/PathReloadFinder.java b/ui/src/main/java/ch/cyberduck/ui/browser/PathReloadFinder.java similarity index 100% rename from source/ch/cyberduck/ui/browser/PathReloadFinder.java rename to ui/src/main/java/ch/cyberduck/ui/browser/PathReloadFinder.java diff --git a/source/ch/cyberduck/ui/browser/PathTooltipService.java b/ui/src/main/java/ch/cyberduck/ui/browser/PathTooltipService.java similarity index 100% rename from source/ch/cyberduck/ui/browser/PathTooltipService.java rename to ui/src/main/java/ch/cyberduck/ui/browser/PathTooltipService.java diff --git a/source/ch/cyberduck/ui/browser/RegexFilter.java b/ui/src/main/java/ch/cyberduck/ui/browser/RegexFilter.java similarity index 100% rename from source/ch/cyberduck/ui/browser/RegexFilter.java rename to ui/src/main/java/ch/cyberduck/ui/browser/RegexFilter.java diff --git a/source/ch/cyberduck/ui/browser/SearchFilter.java b/ui/src/main/java/ch/cyberduck/ui/browser/SearchFilter.java similarity index 100% rename from source/ch/cyberduck/ui/browser/SearchFilter.java rename to ui/src/main/java/ch/cyberduck/ui/browser/SearchFilter.java diff --git a/source/ch/cyberduck/ui/browser/UploadDirectoryFinder.java b/ui/src/main/java/ch/cyberduck/ui/browser/UploadDirectoryFinder.java similarity index 100% rename from source/ch/cyberduck/ui/browser/UploadDirectoryFinder.java rename to ui/src/main/java/ch/cyberduck/ui/browser/UploadDirectoryFinder.java diff --git a/source/ch/cyberduck/ui/browser/UploadTargetFinder.java b/ui/src/main/java/ch/cyberduck/ui/browser/UploadTargetFinder.java similarity index 100% rename from source/ch/cyberduck/ui/browser/UploadTargetFinder.java rename to ui/src/main/java/ch/cyberduck/ui/browser/UploadTargetFinder.java diff --git a/source/ch/cyberduck/ui/comparator/BrowserComparator.java b/ui/src/main/java/ch/cyberduck/ui/comparator/BrowserComparator.java similarity index 100% rename from source/ch/cyberduck/ui/comparator/BrowserComparator.java rename to ui/src/main/java/ch/cyberduck/ui/comparator/BrowserComparator.java diff --git a/source/ch/cyberduck/ui/comparator/ExtensionComparator.java b/ui/src/main/java/ch/cyberduck/ui/comparator/ExtensionComparator.java similarity index 100% rename from source/ch/cyberduck/ui/comparator/ExtensionComparator.java rename to ui/src/main/java/ch/cyberduck/ui/comparator/ExtensionComparator.java diff --git a/source/ch/cyberduck/ui/comparator/FileTypeComparator.java b/ui/src/main/java/ch/cyberduck/ui/comparator/FileTypeComparator.java similarity index 100% rename from source/ch/cyberduck/ui/comparator/FileTypeComparator.java rename to ui/src/main/java/ch/cyberduck/ui/comparator/FileTypeComparator.java diff --git a/source/ch/cyberduck/ui/comparator/FilenameComparator.java b/ui/src/main/java/ch/cyberduck/ui/comparator/FilenameComparator.java similarity index 100% rename from source/ch/cyberduck/ui/comparator/FilenameComparator.java rename to ui/src/main/java/ch/cyberduck/ui/comparator/FilenameComparator.java diff --git a/source/ch/cyberduck/ui/comparator/GroupComparator.java b/ui/src/main/java/ch/cyberduck/ui/comparator/GroupComparator.java similarity index 100% rename from source/ch/cyberduck/ui/comparator/GroupComparator.java rename to ui/src/main/java/ch/cyberduck/ui/comparator/GroupComparator.java diff --git a/source/ch/cyberduck/ui/comparator/OwnerComparator.java b/ui/src/main/java/ch/cyberduck/ui/comparator/OwnerComparator.java similarity index 100% rename from source/ch/cyberduck/ui/comparator/OwnerComparator.java rename to ui/src/main/java/ch/cyberduck/ui/comparator/OwnerComparator.java diff --git a/source/ch/cyberduck/ui/comparator/PermissionsComparator.java b/ui/src/main/java/ch/cyberduck/ui/comparator/PermissionsComparator.java similarity index 100% rename from source/ch/cyberduck/ui/comparator/PermissionsComparator.java rename to ui/src/main/java/ch/cyberduck/ui/comparator/PermissionsComparator.java diff --git a/source/ch/cyberduck/ui/comparator/RegionComparator.java b/ui/src/main/java/ch/cyberduck/ui/comparator/RegionComparator.java similarity index 100% rename from source/ch/cyberduck/ui/comparator/RegionComparator.java rename to ui/src/main/java/ch/cyberduck/ui/comparator/RegionComparator.java diff --git a/source/ch/cyberduck/ui/comparator/SizeComparator.java b/ui/src/main/java/ch/cyberduck/ui/comparator/SizeComparator.java similarity index 100% rename from source/ch/cyberduck/ui/comparator/SizeComparator.java rename to ui/src/main/java/ch/cyberduck/ui/comparator/SizeComparator.java diff --git a/source/ch/cyberduck/ui/comparator/TimestampComparator.java b/ui/src/main/java/ch/cyberduck/ui/comparator/TimestampComparator.java similarity index 100% rename from source/ch/cyberduck/ui/comparator/TimestampComparator.java rename to ui/src/main/java/ch/cyberduck/ui/comparator/TimestampComparator.java diff --git a/source/ch/cyberduck/ui/comparator/VersionComparator.java b/ui/src/main/java/ch/cyberduck/ui/comparator/VersionComparator.java similarity index 100% rename from source/ch/cyberduck/ui/comparator/VersionComparator.java rename to ui/src/main/java/ch/cyberduck/ui/comparator/VersionComparator.java diff --git a/test/ch/cyberduck/ui/browser/DownloadDirectoryFinderTest.java b/ui/src/test/java/ch/cyberduck/ui/browser/DownloadDirectoryFinderTest.java similarity index 90% rename from test/ch/cyberduck/ui/browser/DownloadDirectoryFinderTest.java rename to ui/src/test/java/ch/cyberduck/ui/browser/DownloadDirectoryFinderTest.java index 02e1f8f769..04d13617b6 100644 --- a/test/ch/cyberduck/ui/browser/DownloadDirectoryFinderTest.java +++ b/ui/src/test/java/ch/cyberduck/ui/browser/DownloadDirectoryFinderTest.java @@ -19,22 +19,20 @@ package ch.cyberduck.ui.browser; */ import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Factory; import ch.cyberduck.core.Host; +import ch.cyberduck.core.TestProtocol; import ch.cyberduck.core.local.FinderLocal; -import ch.cyberduck.core.test.Depends; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; -@Depends(platform = Factory.Platform.Name.mac) public class DownloadDirectoryFinderTest extends AbstractTestCase { @Test public void testFind() throws Exception { - final Host host = new Host("localhost"); + final Host host = new Host(new TestProtocol()); assertNull(host.getDownloadFolder()); final DownloadDirectoryFinder finder = new DownloadDirectoryFinder(); assertEquals(System.getProperty("user.dir"), finder.find(host).getAbsolute()); diff --git a/test/ch/cyberduck/ui/browser/PathTooltipServiceTest.java b/ui/src/test/java/ch/cyberduck/ui/browser/PathTooltipServiceTest.java similarity index 100% rename from test/ch/cyberduck/ui/browser/PathTooltipServiceTest.java rename to ui/src/test/java/ch/cyberduck/ui/browser/PathTooltipServiceTest.java diff --git a/test/ch/cyberduck/ui/browser/RegexFilterTest.java b/ui/src/test/java/ch/cyberduck/ui/browser/RegexFilterTest.java similarity index 100% rename from test/ch/cyberduck/ui/browser/RegexFilterTest.java rename to ui/src/test/java/ch/cyberduck/ui/browser/RegexFilterTest.java diff --git a/test/ch/cyberduck/ui/browser/UploadDirectoryFinderTest.java b/ui/src/test/java/ch/cyberduck/ui/browser/UploadDirectoryFinderTest.java similarity index 93% rename from test/ch/cyberduck/ui/browser/UploadDirectoryFinderTest.java rename to ui/src/test/java/ch/cyberduck/ui/browser/UploadDirectoryFinderTest.java index 7ca4804a38..4604aab097 100644 --- a/test/ch/cyberduck/ui/browser/UploadDirectoryFinderTest.java +++ b/ui/src/test/java/ch/cyberduck/ui/browser/UploadDirectoryFinderTest.java @@ -21,6 +21,7 @@ package ch.cyberduck.ui.browser; import ch.cyberduck.core.AbstractTestCase; import ch.cyberduck.core.Host; import ch.cyberduck.core.Local; +import ch.cyberduck.core.TestProtocol; import org.junit.Test; @@ -31,7 +32,7 @@ public class UploadDirectoryFinderTest extends AbstractTestCase { @Test public void testFind() throws Exception { - final Host host = new Host("localhost"); + final Host host = new Host(new TestProtocol()); assertNull(host.getDownloadFolder()); final UploadDirectoryFinder finder = new UploadDirectoryFinder(); assertEquals(new Local(System.getProperty("user.home")), finder.find(host)); diff --git a/test/ch/cyberduck/ui/browser/UploadTargetFinderTest.java b/ui/src/test/java/ch/cyberduck/ui/browser/UploadTargetFinderTest.java similarity index 100% rename from test/ch/cyberduck/ui/browser/UploadTargetFinderTest.java rename to ui/src/test/java/ch/cyberduck/ui/browser/UploadTargetFinderTest.java diff --git a/test/ch/cyberduck/ui/comparator/ExtensionComparatorTest.java b/ui/src/test/java/ch/cyberduck/ui/comparator/ExtensionComparatorTest.java similarity index 100% rename from test/ch/cyberduck/ui/comparator/ExtensionComparatorTest.java rename to ui/src/test/java/ch/cyberduck/ui/comparator/ExtensionComparatorTest.java diff --git a/test/ch/cyberduck/ui/comparator/FileTypeComparatorTest.java b/ui/src/test/java/ch/cyberduck/ui/comparator/FileTypeComparatorTest.java similarity index 100% rename from test/ch/cyberduck/ui/comparator/FileTypeComparatorTest.java rename to ui/src/test/java/ch/cyberduck/ui/comparator/FileTypeComparatorTest.java diff --git a/test/ch/cyberduck/ui/comparator/FilenameComparatorTest.java b/ui/src/test/java/ch/cyberduck/ui/comparator/FilenameComparatorTest.java similarity index 100% rename from test/ch/cyberduck/ui/comparator/FilenameComparatorTest.java rename to ui/src/test/java/ch/cyberduck/ui/comparator/FilenameComparatorTest.java diff --git a/test/ch/cyberduck/ui/comparator/GroupComparatorTest.java b/ui/src/test/java/ch/cyberduck/ui/comparator/GroupComparatorTest.java similarity index 100% rename from test/ch/cyberduck/ui/comparator/GroupComparatorTest.java rename to ui/src/test/java/ch/cyberduck/ui/comparator/GroupComparatorTest.java diff --git a/test/ch/cyberduck/ui/comparator/OwnerComparatorTest.java b/ui/src/test/java/ch/cyberduck/ui/comparator/OwnerComparatorTest.java similarity index 100% rename from test/ch/cyberduck/ui/comparator/OwnerComparatorTest.java rename to ui/src/test/java/ch/cyberduck/ui/comparator/OwnerComparatorTest.java diff --git a/test/ch/cyberduck/ui/comparator/PermissionsComparatorTest.java b/ui/src/test/java/ch/cyberduck/ui/comparator/PermissionsComparatorTest.java similarity index 100% rename from test/ch/cyberduck/ui/comparator/PermissionsComparatorTest.java rename to ui/src/test/java/ch/cyberduck/ui/comparator/PermissionsComparatorTest.java diff --git a/test/ch/cyberduck/ui/comparator/RegionComparatorTest.java b/ui/src/test/java/ch/cyberduck/ui/comparator/RegionComparatorTest.java similarity index 100% rename from test/ch/cyberduck/ui/comparator/RegionComparatorTest.java rename to ui/src/test/java/ch/cyberduck/ui/comparator/RegionComparatorTest.java diff --git a/test/ch/cyberduck/ui/comparator/SizeComparatorTest.java b/ui/src/test/java/ch/cyberduck/ui/comparator/SizeComparatorTest.java similarity index 100% rename from test/ch/cyberduck/ui/comparator/SizeComparatorTest.java rename to ui/src/test/java/ch/cyberduck/ui/comparator/SizeComparatorTest.java diff --git a/test/ch/cyberduck/ui/comparator/TimestampComparatorTest.java b/ui/src/test/java/ch/cyberduck/ui/comparator/TimestampComparatorTest.java similarity index 100% rename from test/ch/cyberduck/ui/comparator/TimestampComparatorTest.java rename to ui/src/test/java/ch/cyberduck/ui/comparator/TimestampComparatorTest.java diff --git a/webdav/pom.xml b/webdav/pom.xml new file mode 100644 index 0000000000..6e127dd8b8 --- /dev/null +++ b/webdav/pom.xml @@ -0,0 +1,48 @@ + + + + 4.0.0 + + ch.cyberduck + parent + 4.8.0-SNAPSHOT + + webdav + jar + + + + ch.cyberduck + core + ${project.version} + + + ch.cyberduck + test + pom + test + ${project.version} + + + com.github.lookfirst + sardine + 5.6 + + + + diff --git a/source/ch/cyberduck/core/dav/DAVAttributesFeature.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVAttributesFeature.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVAttributesFeature.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVAttributesFeature.java diff --git a/source/ch/cyberduck/core/dav/DAVClient.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVClient.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVClient.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVClient.java diff --git a/source/ch/cyberduck/core/dav/DAVCopyFeature.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVCopyFeature.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVCopyFeature.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVCopyFeature.java diff --git a/source/ch/cyberduck/core/dav/DAVDeleteFeature.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVDeleteFeature.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVDeleteFeature.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVDeleteFeature.java diff --git a/source/ch/cyberduck/core/dav/DAVDirectoryFeature.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVDirectoryFeature.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVDirectoryFeature.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVDirectoryFeature.java diff --git a/source/ch/cyberduck/core/dav/DAVExceptionMappingService.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVExceptionMappingService.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVExceptionMappingService.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVExceptionMappingService.java diff --git a/source/ch/cyberduck/core/dav/DAVFindFeature.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVFindFeature.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVFindFeature.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVFindFeature.java diff --git a/source/ch/cyberduck/core/dav/DAVListService.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVListService.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVListService.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVListService.java diff --git a/source/ch/cyberduck/core/dav/DAVMetadataFeature.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVMetadataFeature.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVMetadataFeature.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVMetadataFeature.java diff --git a/source/ch/cyberduck/core/dav/DAVMoveFeature.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVMoveFeature.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVMoveFeature.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVMoveFeature.java diff --git a/source/ch/cyberduck/core/dav/DAVPathEncoder.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVPathEncoder.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVPathEncoder.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVPathEncoder.java diff --git a/source/ch/cyberduck/core/dav/DAVProtocol.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVProtocol.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVProtocol.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVProtocol.java diff --git a/source/ch/cyberduck/core/dav/DAVReadFeature.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVReadFeature.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVReadFeature.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVReadFeature.java diff --git a/source/ch/cyberduck/core/dav/DAVSSLProtocol.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVSSLProtocol.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVSSLProtocol.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVSSLProtocol.java diff --git a/source/ch/cyberduck/core/dav/DAVSession.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVSession.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVSession.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVSession.java diff --git a/source/ch/cyberduck/core/dav/DAVUploadFeature.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVUploadFeature.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVUploadFeature.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVUploadFeature.java diff --git a/source/ch/cyberduck/core/dav/DAVWriteFeature.java b/webdav/src/main/java/ch/cyberduck/core/dav/DAVWriteFeature.java similarity index 100% rename from source/ch/cyberduck/core/dav/DAVWriteFeature.java rename to webdav/src/main/java/ch/cyberduck/core/dav/DAVWriteFeature.java diff --git a/webdav/src/test/java/ch/cyberduck/core/SessionFactoryTest.java b/webdav/src/test/java/ch/cyberduck/core/SessionFactoryTest.java new file mode 100644 index 0000000000..e3a0764baf --- /dev/null +++ b/webdav/src/test/java/ch/cyberduck/core/SessionFactoryTest.java @@ -0,0 +1,24 @@ +package ch.cyberduck.core; + +import ch.cyberduck.core.dav.DAVProtocol; +import ch.cyberduck.core.dav.DAVSSLProtocol; +import ch.cyberduck.core.ssl.DefaultX509KeyManager; +import ch.cyberduck.core.ssl.DefaultX509TrustManager; + +import org.junit.Test; + +import static org.junit.Assert.assertNotNull; + +/** + * @version $Id$ + */ +public class SessionFactoryTest extends AbstractTestCase { + + @Test + public void testCreateSession() throws Exception { + assertNotNull(SessionFactory.create(new Host(new DAVProtocol()), + new DefaultX509TrustManager(), new DefaultX509KeyManager())); + assertNotNull(SessionFactory.create(new Host(new DAVSSLProtocol()), + new DefaultX509TrustManager(), new DefaultX509KeyManager())); + } +} diff --git a/test/ch/cyberduck/core/dav/DAVAttributesFeatureTest.java b/webdav/src/test/java/ch/cyberduck/core/dav/DAVAttributesFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/dav/DAVAttributesFeatureTest.java rename to webdav/src/test/java/ch/cyberduck/core/dav/DAVAttributesFeatureTest.java diff --git a/test/ch/cyberduck/core/dav/DAVCopyFeatureTest.java b/webdav/src/test/java/ch/cyberduck/core/dav/DAVCopyFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/dav/DAVCopyFeatureTest.java rename to webdav/src/test/java/ch/cyberduck/core/dav/DAVCopyFeatureTest.java diff --git a/test/ch/cyberduck/core/dav/DAVDeleteFeatureTest.java b/webdav/src/test/java/ch/cyberduck/core/dav/DAVDeleteFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/dav/DAVDeleteFeatureTest.java rename to webdav/src/test/java/ch/cyberduck/core/dav/DAVDeleteFeatureTest.java diff --git a/test/ch/cyberduck/core/dav/DAVDirectoryFeatureTest.java b/webdav/src/test/java/ch/cyberduck/core/dav/DAVDirectoryFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/dav/DAVDirectoryFeatureTest.java rename to webdav/src/test/java/ch/cyberduck/core/dav/DAVDirectoryFeatureTest.java diff --git a/test/ch/cyberduck/core/dav/DAVExceptionMappingServiceTest.java b/webdav/src/test/java/ch/cyberduck/core/dav/DAVExceptionMappingServiceTest.java similarity index 67% rename from test/ch/cyberduck/core/dav/DAVExceptionMappingServiceTest.java rename to webdav/src/test/java/ch/cyberduck/core/dav/DAVExceptionMappingServiceTest.java index 4cb452d13a..4c0fd93e6e 100644 --- a/test/ch/cyberduck/core/dav/DAVExceptionMappingServiceTest.java +++ b/webdav/src/test/java/ch/cyberduck/core/dav/DAVExceptionMappingServiceTest.java @@ -18,19 +18,13 @@ package ch.cyberduck.core.dav; */ import ch.cyberduck.core.AbstractTestCase; -import ch.cyberduck.core.Path; import ch.cyberduck.core.exception.AccessDeniedException; -import ch.cyberduck.core.exception.ConnectionTimeoutException; import ch.cyberduck.core.exception.LoginFailureException; import ch.cyberduck.core.exception.NotfoundException; -import ch.cyberduck.core.ftp.FTPExceptionMappingService; import org.junit.Assert; import org.junit.Test; -import java.net.SocketTimeoutException; -import java.util.EnumSet; - import com.github.sardine.impl.SardineException; import static org.junit.Assert.assertEquals; @@ -49,14 +43,4 @@ public class DAVExceptionMappingServiceTest extends AbstractTestCase { assertEquals(NotfoundException.class, new DAVExceptionMappingService().map(new SardineException("m", 404, "r")).getClass()); } - - @Test - public void testSocketTimeout() throws Exception { - assertEquals(ConnectionTimeoutException.class, new FTPExceptionMappingService() - .map(new SocketTimeoutException()).getClass()); - assertEquals(ConnectionTimeoutException.class, new FTPExceptionMappingService() - .map("message", new SocketTimeoutException()).getClass()); - assertEquals(ConnectionTimeoutException.class, new FTPExceptionMappingService() - .map("message", new SocketTimeoutException(), new Path("/f", EnumSet.of(Path.Type.file))).getClass()); - } } diff --git a/test/ch/cyberduck/core/dav/DAVFindFeatureTest.java b/webdav/src/test/java/ch/cyberduck/core/dav/DAVFindFeatureTest.java similarity index 95% rename from test/ch/cyberduck/core/dav/DAVFindFeatureTest.java rename to webdav/src/test/java/ch/cyberduck/core/dav/DAVFindFeatureTest.java index 598f31fc88..2959f1a213 100644 --- a/test/ch/cyberduck/core/dav/DAVFindFeatureTest.java +++ b/webdav/src/test/java/ch/cyberduck/core/dav/DAVFindFeatureTest.java @@ -66,7 +66,7 @@ public class DAVFindFeatureTest extends AbstractTestCase { @Test public void testFindRoot() throws Exception { - assertTrue(new DAVFindFeature(new DAVSession(new Host("h"))).find(new Path("/", EnumSet.of(Path.Type.directory)))); + assertTrue(new DAVFindFeature(new DAVSession(new Host(new DAVProtocol(), "h"))).find(new Path("/", EnumSet.of(Path.Type.directory)))); } @Test @@ -75,7 +75,7 @@ public class DAVFindFeatureTest extends AbstractTestCase { final AttributedList list = new AttributedList(); list.attributes().addHidden(new Path("/g/gd", EnumSet.of(Path.Type.file))); cache.put(new Path("/g", EnumSet.of(Path.Type.directory)), list); - final Find finder = new DAVFindFeature(new DAVSession(new Host("t")) { + final Find finder = new DAVFindFeature(new DAVSession(new Host(new DAVProtocol(), "h")) { @Override public DAVClient getClient() { fail(); @@ -90,7 +90,7 @@ public class DAVFindFeatureTest extends AbstractTestCase { final PathCache cache = new PathCache(1); final AttributedList list = new AttributedList(Collections.singletonList(new Path("/g/gd", EnumSet.of(Path.Type.file)))); cache.put(new Path("/g", EnumSet.of(Path.Type.directory)), list); - final Find finder = new DAVFindFeature(new DAVSession(new Host("t")) { + final Find finder = new DAVFindFeature(new DAVSession(new Host(new DAVProtocol(), "h")) { @Override public DAVClient getClient() { fail(); diff --git a/test/ch/cyberduck/core/dav/DAVListServiceTest.java b/webdav/src/test/java/ch/cyberduck/core/dav/DAVListServiceTest.java similarity index 100% rename from test/ch/cyberduck/core/dav/DAVListServiceTest.java rename to webdav/src/test/java/ch/cyberduck/core/dav/DAVListServiceTest.java diff --git a/test/ch/cyberduck/core/dav/DAVMetadataFeatureTest.java b/webdav/src/test/java/ch/cyberduck/core/dav/DAVMetadataFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/dav/DAVMetadataFeatureTest.java rename to webdav/src/test/java/ch/cyberduck/core/dav/DAVMetadataFeatureTest.java diff --git a/test/ch/cyberduck/core/dav/DAVMoveFeatureTest.java b/webdav/src/test/java/ch/cyberduck/core/dav/DAVMoveFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/dav/DAVMoveFeatureTest.java rename to webdav/src/test/java/ch/cyberduck/core/dav/DAVMoveFeatureTest.java diff --git a/test/ch/cyberduck/core/dav/DAVPathEncoderTest.java b/webdav/src/test/java/ch/cyberduck/core/dav/DAVPathEncoderTest.java similarity index 100% rename from test/ch/cyberduck/core/dav/DAVPathEncoderTest.java rename to webdav/src/test/java/ch/cyberduck/core/dav/DAVPathEncoderTest.java diff --git a/test/ch/cyberduck/core/dav/DAVReadFeatureTest.java b/webdav/src/test/java/ch/cyberduck/core/dav/DAVReadFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/dav/DAVReadFeatureTest.java rename to webdav/src/test/java/ch/cyberduck/core/dav/DAVReadFeatureTest.java diff --git a/test/ch/cyberduck/core/dav/DAVSessionTest.java b/webdav/src/test/java/ch/cyberduck/core/dav/DAVSessionTest.java similarity index 96% rename from test/ch/cyberduck/core/dav/DAVSessionTest.java rename to webdav/src/test/java/ch/cyberduck/core/dav/DAVSessionTest.java index 63758b46c5..f3ac75b0b1 100644 --- a/test/ch/cyberduck/core/dav/DAVSessionTest.java +++ b/webdav/src/test/java/ch/cyberduck/core/dav/DAVSessionTest.java @@ -29,6 +29,7 @@ import ch.cyberduck.core.ssl.DefaultX509KeyManager; import ch.cyberduck.core.ssl.DefaultX509TrustManager; import ch.cyberduck.core.ssl.DisabledX509TrustManager; import ch.cyberduck.core.ssl.KeychainX509KeyManager; +import ch.cyberduck.core.ssl.TrustManagerHostnameCallback; import org.junit.Ignore; import org.junit.Test; @@ -40,6 +41,7 @@ import java.security.cert.X509Certificate; import java.util.Arrays; import java.util.Collections; import java.util.EnumSet; +import java.util.List; import java.util.UUID; import java.util.concurrent.atomic.AtomicBoolean; @@ -411,7 +413,7 @@ public class DAVSessionTest extends AbstractTestCase { @Test public void testFeatures() throws Exception { - final Session session = new DAVSession(new Host("h")); + final Session session = new DAVSession(new Host(new DAVProtocol(), "h")); assertNull(session.getFeature(UnixPermission.class)); assertNull(session.getFeature(Timestamp.class)); assertNotNull(session.getFeature(Copy.class)); @@ -735,4 +737,25 @@ public class DAVSessionTest extends AbstractTestCase { assertTrue(verified.get()); session.close(); } + + @Test(expected = ConnectionCanceledException.class) + public void testHandshakeFailure() throws Exception { + final Session session = new DAVSession(new Host(new DAVSSLProtocol(), "54.228.253.92", new Credentials("user", "p")), + new CertificateStoreX509TrustManager(new TrustManagerHostnameCallback() { + @Override + public String getTarget() { + return "54.228.253.92"; + } + }, new DisabledCertificateStore() { + @Override + public boolean isTrusted(final String hostname, final List certificates) { + return false; + } + } + ), new DefaultX509KeyManager() + ); + final LoginConnectionService s = new LoginConnectionService(new DisabledLoginCallback(), new DisabledHostKeyCallback(), new DisabledPasswordStore(), + new DisabledProgressListener(), new DisabledTranscriptListener()); + s.check(session, PathCache.empty()); + } } diff --git a/test/ch/cyberduck/core/dav/DAVUploadFeatureTest.java b/webdav/src/test/java/ch/cyberduck/core/dav/DAVUploadFeatureTest.java similarity index 97% rename from test/ch/cyberduck/core/dav/DAVUploadFeatureTest.java rename to webdav/src/test/java/ch/cyberduck/core/dav/DAVUploadFeatureTest.java index 1eb032dd3d..b53537a569 100644 --- a/test/ch/cyberduck/core/dav/DAVUploadFeatureTest.java +++ b/webdav/src/test/java/ch/cyberduck/core/dav/DAVUploadFeatureTest.java @@ -55,12 +55,12 @@ public class DAVUploadFeatureTest extends AbstractTestCase { @Test public void testDecorate() throws Exception { final NullInputStream n = new NullInputStream(1L); - assertSame(NullInputStream.class, new DAVUploadFeature(new DAVSession(new Host("h"))).decorate(n, null).getClass()); + assertSame(NullInputStream.class, new DAVUploadFeature(new DAVSession(new Host(new DAVProtocol(), "h"))).decorate(n, null).getClass()); } @Test public void testDigest() throws Exception { - assertNull(new DAVUploadFeature(new DAVSession(new Host("h"))).digest()); + assertNull(new DAVUploadFeature(new DAVSession(new Host(new DAVProtocol(), "h"))).digest()); } @Test diff --git a/test/ch/cyberduck/core/dav/DAVWriteFeatureTest.java b/webdav/src/test/java/ch/cyberduck/core/dav/DAVWriteFeatureTest.java similarity index 100% rename from test/ch/cyberduck/core/dav/DAVWriteFeatureTest.java rename to webdav/src/test/java/ch/cyberduck/core/dav/DAVWriteFeatureTest.java diff --git a/build-windows.xml b/windows/build.xml similarity index 50% rename from build-windows.xml rename to windows/build.xml index 0d121ba0d3..970d3c2c1e 100644 --- a/build-windows.xml +++ b/windows/build.xml @@ -21,7 +21,7 @@ --> - + @@ -31,12 +31,12 @@ + - @@ -48,10 +48,7 @@ - - - - + - + @@ -75,69 +72,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -179,38 +116,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/windows/pom.xml b/windows/pom.xml new file mode 100644 index 0000000000..011bec9b7e --- /dev/null +++ b/windows/pom.xml @@ -0,0 +1,127 @@ + + + + parent + ch.cyberduck + 4.8.0-SNAPSHOT + + 4.0.0 + + windows + + + + windows + + + Windows + + + + + + maven-dependency-plugin + + + copy-dependencies-jar-target + generate-sources + + copy-dependencies + + + ${project.build.directory} + jar + runtime + true + + + + + + maven-antrun-plugin + + + run-ant-build-target + package + + run + + + + + + + + + + + run-ant-package-target + deploy + + run + + + + + + + + + + + + + + + + + + + ch.cyberduck + Cyberduck.Core + dll + ${project.version} + runtime + + + ch.cyberduck + Cyberduck.Core.Native + dll + ${project.version} + + + ch.cyberduck + protocols + pom + ${project.version} + + + ch.cyberduck + importer + ${project.version} + + + ch.cyberduck + ui + ${project.version} + + + objectlistview + objectlistview + native + dll + 2.5.1.35588 + runtime + + + net.structuremap + structuremap + native + dll + 2.6.1 + runtime + + + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/StructureMapBootstrapper.cs b/windows/src/main/csharp/ch/cyberduck/ui/StructureMapBootstrapper.cs similarity index 97% rename from source/ch/cyberduck/ui/StructureMapBootstrapper.cs rename to windows/src/main/csharp/ch/cyberduck/ui/StructureMapBootstrapper.cs index 0fcba73cd3..58f6f84c6c 100644 --- a/source/ch/cyberduck/ui/StructureMapBootstrapper.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/StructureMapBootstrapper.cs @@ -1,78 +1,78 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using Ch.Cyberduck.Ui.Controller; -using Ch.Cyberduck.Ui.Winforms; -using Ch.Cyberduck.Ui.Winforms.Controls; -using StructureMap; - -namespace Ch.Cyberduck.Ui -{ - public class StructureMapBootstrapper : IBootstrapper - { - private static bool _hasStarted; - - public void BootstrapStructureMap() - { - ObjectFactory.Initialize(x => - { - x.For().Use(); - x.For().Use(); - x.For().Use(); - x.For().Use(); - x.For().Use(); - x.For().Use(); - x.For().Use(); - x.For().Use(); - x.For().Use(); - x.For().Use(); - x.For().Use(); - x.For().Use(); - x.For().Use(); - x.For().Use(); - x.For().Use(); - x.For().Use(); - x.For().Use(); - - // Singletons - x.For().Singleton().Use(); - - // might be a singleton - x.For().Use(); - }); - } - - public static void Restart() - { - if (_hasStarted) - { - ObjectFactory.ResetDefaults(); - } - else - { - Bootstrap(); - _hasStarted = true; - } - } - - public static void Bootstrap() - { - new StructureMapBootstrapper().BootstrapStructureMap(); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using Ch.Cyberduck.Ui.Controller; +using Ch.Cyberduck.Ui.Winforms; +using Ch.Cyberduck.Ui.Winforms.Controls; +using StructureMap; + +namespace Ch.Cyberduck.Ui +{ + public class StructureMapBootstrapper : IBootstrapper + { + private static bool _hasStarted; + + public void BootstrapStructureMap() + { + ObjectFactory.Initialize(x => + { + x.For().Use(); + x.For().Use(); + x.For().Use(); + x.For().Use(); + x.For().Use(); + x.For().Use(); + x.For().Use(); + x.For().Use(); + x.For().Use(); + x.For().Use(); + x.For().Use(); + x.For().Use(); + x.For().Use(); + x.For().Use(); + x.For().Use(); + x.For().Use(); + x.For().Use(); + + // Singletons + x.For().Singleton().Use(); + + // might be a singleton + x.For().Use(); + }); + } + + public static void Restart() + { + if (_hasStarted) + { + ObjectFactory.ResetDefaults(); + } + else + { + Bootstrap(); + _hasStarted = true; + } + } + + public static void Bootstrap() + { + new StructureMapBootstrapper().BootstrapStructureMap(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/ActivityController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/ActivityController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/ActivityController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/ActivityController.cs index e983fd1123..2b72e86f0c 100644 --- a/source/ch/cyberduck/ui/controller/ActivityController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/ActivityController.cs @@ -1,199 +1,199 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Collections; -using Ch.Cyberduck.Ui.Controller.Threading; -using StructureMap; -using ch.cyberduck.core; -using ch.cyberduck.core.exception; -using ch.cyberduck.core.threading; -using java.lang; -using org.apache.log4j; -using Exception = System.Exception; -using Object = System.Object; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal sealed class ActivityController : WindowController - { - private static readonly Logger Log = Logger.getLogger(typeof (ActivityController).FullName); - - private static readonly object SyncRoot = new Object(); - private static volatile ActivityController _instance; - - private ActivityController() - { - View = ObjectFactory.GetInstance(); - Init(); - } - - public static ActivityController Instance - { - get - { - if (_instance == null) - { - lock (SyncRoot) - { - if (_instance == null) - _instance = new ActivityController(); - } - } - return _instance; - } - } - - private void Init() - { - View.ModelTitleGetter = - delegate(object rowObject) { return ((AbstractBackgroundAction) rowObject).toString(); }; - View.ModelDescriptionGetter = - delegate(object rowObject) { return ((BackgroundAction) rowObject).getActivity(); }; - View.ModelIsRunningGetter = - delegate(object rowObject) { return ((BackgroundAction) rowObject).isRunning(); }; - View.StopActionEvent += View_StopActionEvent; - - BackgroundActionRegistry.global().addListener(new BackgroundActionListener(this)); - // Add already running background actions - ArrayList tasks = new ArrayList(); - int size = BackgroundActionRegistry.global().size(); - for (int i = 0; i < size; i++) - { - try - { - BackgroundAction action = (BackgroundAction) BackgroundActionRegistry.global().get(i); - tasks.Add(action); - } - catch (Exception) - { - Log.debug("BackgroundActionRegistry modified while iterating"); - // collection has been modified by another thread, continue - } - } - tasks.Reverse(); - View.SetModel(tasks); - } - - private void View_StopActionEvent() - { - BackgroundAction action = View.SelectedTask; - if (null != action) - { - Log.debug("Cancel action:" + action); - action.cancel(); - } - } - - private class BackgroundActionListener : AbstractCollectionListener - { - private readonly Hashtable _actionListener = Hashtable.Synchronized(new Hashtable()); - private readonly ActivityController _controller; - - public BackgroundActionListener(ActivityController controller) - { - _controller = controller; - } - - public override void collectionItemAdded(object item) - { - BackgroundAction action = item as BackgroundAction; - TaskListener listener = new TaskListener(_controller, action); - _actionListener.Add(action, listener); - _controller.Invoke(new AddTaskAction(_controller, action)); - } - - public override void collectionItemRemoved(object item) - { - BackgroundAction action = item as BackgroundAction; - _actionListener.Remove(action); - _controller.Invoke(new RemoveTaskAction(_controller, action)); - } - - private class AddTaskAction : WindowMainAction - { - private static readonly Logger Log = Logger.getLogger(typeof (AddTaskAction).FullName); - private readonly BackgroundAction _action; - private readonly ActivityController _controller; - - public AddTaskAction(ActivityController controller, BackgroundAction action) : base(controller) - { - _action = action; - _controller = controller; - } - - public override void run() - { - Log.debug("collectionItemAdded:" + _action); - _controller.View.AddTask(_action); - } - } - - private class RemoveTaskAction : WindowMainAction - { - private static readonly Logger Log = Logger.getLogger(typeof (AddTaskAction).FullName); - private readonly BackgroundAction _action; - private readonly ActivityController _controller; - - public RemoveTaskAction(ActivityController controller, BackgroundAction action) : base(controller) - { - _action = action; - _controller = controller; - } - - public override void run() - { - Log.debug("collectionItemRemoved:" + _action); - _controller.View.RemoveTask(_action); - } - } - - private class TaskListener : ch.cyberduck.core.threading.BackgroundActionListener - { - private readonly BackgroundAction _action; - private readonly ActivityController _controller; - - public TaskListener(ActivityController controller, BackgroundAction action) - { - _action = action; - _controller = controller; - } - - public void cancel(BackgroundAction ba) - { - _controller.View.RefreshTask(_action); - } - - public void start(BackgroundAction ba) - { - _controller.View.RefreshTask(_action); - } - - public void stop(BackgroundAction ba) - { - _controller.View.RefreshTask(_action); - } - - - public bool alert(Host host, BackgroundException be, StringBuilder sb) - { - return false; - } - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Collections; +using Ch.Cyberduck.Ui.Controller.Threading; +using StructureMap; +using ch.cyberduck.core; +using ch.cyberduck.core.exception; +using ch.cyberduck.core.threading; +using java.lang; +using org.apache.log4j; +using Exception = System.Exception; +using Object = System.Object; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal sealed class ActivityController : WindowController + { + private static readonly Logger Log = Logger.getLogger(typeof (ActivityController).FullName); + + private static readonly object SyncRoot = new Object(); + private static volatile ActivityController _instance; + + private ActivityController() + { + View = ObjectFactory.GetInstance(); + Init(); + } + + public static ActivityController Instance + { + get + { + if (_instance == null) + { + lock (SyncRoot) + { + if (_instance == null) + _instance = new ActivityController(); + } + } + return _instance; + } + } + + private void Init() + { + View.ModelTitleGetter = + delegate(object rowObject) { return ((AbstractBackgroundAction) rowObject).toString(); }; + View.ModelDescriptionGetter = + delegate(object rowObject) { return ((BackgroundAction) rowObject).getActivity(); }; + View.ModelIsRunningGetter = + delegate(object rowObject) { return ((BackgroundAction) rowObject).isRunning(); }; + View.StopActionEvent += View_StopActionEvent; + + BackgroundActionRegistry.global().addListener(new BackgroundActionListener(this)); + // Add already running background actions + ArrayList tasks = new ArrayList(); + int size = BackgroundActionRegistry.global().size(); + for (int i = 0; i < size; i++) + { + try + { + BackgroundAction action = (BackgroundAction) BackgroundActionRegistry.global().get(i); + tasks.Add(action); + } + catch (Exception) + { + Log.debug("BackgroundActionRegistry modified while iterating"); + // collection has been modified by another thread, continue + } + } + tasks.Reverse(); + View.SetModel(tasks); + } + + private void View_StopActionEvent() + { + BackgroundAction action = View.SelectedTask; + if (null != action) + { + Log.debug("Cancel action:" + action); + action.cancel(); + } + } + + private class BackgroundActionListener : AbstractCollectionListener + { + private readonly Hashtable _actionListener = Hashtable.Synchronized(new Hashtable()); + private readonly ActivityController _controller; + + public BackgroundActionListener(ActivityController controller) + { + _controller = controller; + } + + public override void collectionItemAdded(object item) + { + BackgroundAction action = item as BackgroundAction; + TaskListener listener = new TaskListener(_controller, action); + _actionListener.Add(action, listener); + _controller.Invoke(new AddTaskAction(_controller, action)); + } + + public override void collectionItemRemoved(object item) + { + BackgroundAction action = item as BackgroundAction; + _actionListener.Remove(action); + _controller.Invoke(new RemoveTaskAction(_controller, action)); + } + + private class AddTaskAction : WindowMainAction + { + private static readonly Logger Log = Logger.getLogger(typeof (AddTaskAction).FullName); + private readonly BackgroundAction _action; + private readonly ActivityController _controller; + + public AddTaskAction(ActivityController controller, BackgroundAction action) : base(controller) + { + _action = action; + _controller = controller; + } + + public override void run() + { + Log.debug("collectionItemAdded:" + _action); + _controller.View.AddTask(_action); + } + } + + private class RemoveTaskAction : WindowMainAction + { + private static readonly Logger Log = Logger.getLogger(typeof (AddTaskAction).FullName); + private readonly BackgroundAction _action; + private readonly ActivityController _controller; + + public RemoveTaskAction(ActivityController controller, BackgroundAction action) : base(controller) + { + _action = action; + _controller = controller; + } + + public override void run() + { + Log.debug("collectionItemRemoved:" + _action); + _controller.View.RemoveTask(_action); + } + } + + private class TaskListener : ch.cyberduck.core.threading.BackgroundActionListener + { + private readonly BackgroundAction _action; + private readonly ActivityController _controller; + + public TaskListener(ActivityController controller, BackgroundAction action) + { + _action = action; + _controller = controller; + } + + public void cancel(BackgroundAction ba) + { + _controller.View.RefreshTask(_action); + } + + public void start(BackgroundAction ba) + { + _controller.View.RefreshTask(_action); + } + + public void stop(BackgroundAction ba) + { + _controller.View.RefreshTask(_action); + } + + + public bool alert(Host host, BackgroundException be, StringBuilder sb) + { + return false; + } + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/AsyncController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/AsyncController.cs similarity index 96% rename from source/ch/cyberduck/ui/controller/AsyncController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/AsyncController.cs index ba10d38337..f385433766 100644 --- a/source/ch/cyberduck/ui/controller/AsyncController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/AsyncController.cs @@ -1,164 +1,164 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using ch.cyberduck.core; -using ch.cyberduck.core.threading; -using Ch.Cyberduck.Ui.Controller.Threading; -using Ch.Cyberduck.Ui.Core; -using java.lang; -using org.apache.log4j; -using Exception = System.Exception; - -namespace Ch.Cyberduck.Ui.Controller -{ - public abstract class AsyncController : AbstractController - { - public delegate void AsyncDelegate(); - - public delegate void SyncDelegate(); - - private static readonly Logger Log = Logger.getLogger(typeof (AsyncController).Name); - - protected AsyncController() : base(new ExceptionHandler()) - { - } - - public virtual IView View { get; set; } - - public void Background(AsyncDelegate del, AsyncDelegate cleanup) - { - // Move to background thread - background(new AsyncDelegateBackgroundAction(del, cleanup)); - } - - public void Background(BackgroundAction backgroundAction) - { - // Move to background thread - background(backgroundAction); - } - - public void Invoke(AsyncDelegate del, bool wait) - { - ControllerMainAction mainAction = new SimpleDefaultMainAction(this, del); - invoke(mainAction, wait); - } - - public void BeginInvoke(AsyncDelegate del) - { - ControllerMainAction mainAction = new SimpleDefaultMainAction(this, del); - try - { - if (!View.IsHandleCreated) - { - return; - } - View.BeginInvoke(new AsyncDelegate(mainAction.run), null); - } - catch (ObjectDisposedException) - { - //happens because there is no synchronization between the lifecycle of a form and callbacks of background threads. - //catch silently - } - } - - public void Invoke(AsyncDelegate del) - { - Invoke(del, false); - } - - public void Invoke(MainAction mainAction) - { - invoke(mainAction); - } - - public override void invoke(MainAction runnable, bool wait) - { - if (!runnable.isValid()) - { - return; - } - try - { - if (!View.IsHandleCreated) - { - return; - } - - if (View.InvokeRequired) - { - //currently only sync - if (true) - { - View.Invoke(new AsyncDelegate(runnable.run), null); - } - else - { - View.BeginInvoke(new AsyncDelegate(runnable.run), null); - } - } - else - { - runnable.run(); - } - } - catch (ObjectDisposedException) - { - //happens because there is no synchronization between the lifecycle of a form and callbacks of background threads. - //catch silently - } - catch (Exception e) - { - Log.error("Unhandled exception during invoke", e); - throw e; - } - } - } - - internal class ExceptionHandler : Thread.UncaughtExceptionHandler - { - public void uncaughtException(Thread t, Exception e) - { - CrashReporter.Instance.Write(e); - } - } - - public class AsyncDelegateBackgroundAction : AbstractBackgroundAction - { - private readonly AsyncController.AsyncDelegate _background; - private readonly AsyncController.AsyncDelegate _cleanup; - - public AsyncDelegateBackgroundAction(AsyncController.AsyncDelegate background, - AsyncController.AsyncDelegate cleanup) - { - _background = background; - _cleanup = cleanup; - } - - public override object run() - { - _background(); - return true; - } - - public override void cleanup() - { - _cleanup(); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using ch.cyberduck.core; +using ch.cyberduck.core.threading; +using Ch.Cyberduck.Ui.Controller.Threading; +using Ch.Cyberduck.Ui.Core; +using java.lang; +using org.apache.log4j; +using Exception = System.Exception; + +namespace Ch.Cyberduck.Ui.Controller +{ + public abstract class AsyncController : AbstractController + { + public delegate void AsyncDelegate(); + + public delegate void SyncDelegate(); + + private static readonly Logger Log = Logger.getLogger(typeof (AsyncController).Name); + + protected AsyncController() : base(new ExceptionHandler()) + { + } + + public virtual IView View { get; set; } + + public void Background(AsyncDelegate del, AsyncDelegate cleanup) + { + // Move to background thread + background(new AsyncDelegateBackgroundAction(del, cleanup)); + } + + public void Background(BackgroundAction backgroundAction) + { + // Move to background thread + background(backgroundAction); + } + + public void Invoke(AsyncDelegate del, bool wait) + { + ControllerMainAction mainAction = new SimpleDefaultMainAction(this, del); + invoke(mainAction, wait); + } + + public void BeginInvoke(AsyncDelegate del) + { + ControllerMainAction mainAction = new SimpleDefaultMainAction(this, del); + try + { + if (!View.IsHandleCreated) + { + return; + } + View.BeginInvoke(new AsyncDelegate(mainAction.run), null); + } + catch (ObjectDisposedException) + { + //happens because there is no synchronization between the lifecycle of a form and callbacks of background threads. + //catch silently + } + } + + public void Invoke(AsyncDelegate del) + { + Invoke(del, false); + } + + public void Invoke(MainAction mainAction) + { + invoke(mainAction); + } + + public override void invoke(MainAction runnable, bool wait) + { + if (!runnable.isValid()) + { + return; + } + try + { + if (!View.IsHandleCreated) + { + return; + } + + if (View.InvokeRequired) + { + //currently only sync + if (true) + { + View.Invoke(new AsyncDelegate(runnable.run), null); + } + else + { + View.BeginInvoke(new AsyncDelegate(runnable.run), null); + } + } + else + { + runnable.run(); + } + } + catch (ObjectDisposedException) + { + //happens because there is no synchronization between the lifecycle of a form and callbacks of background threads. + //catch silently + } + catch (Exception e) + { + Log.error("Unhandled exception during invoke", e); + throw e; + } + } + } + + internal class ExceptionHandler : Thread.UncaughtExceptionHandler + { + public void uncaughtException(Thread t, Exception e) + { + CrashReporter.Instance.Write(e); + } + } + + public class AsyncDelegateBackgroundAction : AbstractBackgroundAction + { + private readonly AsyncController.AsyncDelegate _background; + private readonly AsyncController.AsyncDelegate _cleanup; + + public AsyncDelegateBackgroundAction(AsyncController.AsyncDelegate background, + AsyncController.AsyncDelegate cleanup) + { + _background = background; + _cleanup = cleanup; + } + + public override object run() + { + _background(); + return true; + } + + public override void cleanup() + { + _cleanup(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/BaseController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/BaseController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/BaseController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/BaseController.cs index f2280a5453..0b66cbc731 100644 --- a/source/ch/cyberduck/ui/controller/BaseController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/BaseController.cs @@ -1,37 +1,37 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using ch.cyberduck.core; -using ch.cyberduck.core.threading; - -namespace Ch.Cyberduck.Ui.Controller -{ - public class BaseController : AbstractController - { - public override void invoke(MainAction mainAction, bool wait) - { - mainAction.run(); - } - - public void Background(AsyncController.AsyncDelegate del, AsyncController.AsyncDelegate cleanup) - { - // Move to background thread - background(new AsyncDelegateBackgroundAction(del, cleanup)); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using ch.cyberduck.core; +using ch.cyberduck.core.threading; + +namespace Ch.Cyberduck.Ui.Controller +{ + public class BaseController : AbstractController + { + public override void invoke(MainAction mainAction, bool wait) + { + mainAction.run(); + } + + public void Background(AsyncController.AsyncDelegate del, AsyncController.AsyncDelegate cleanup) + { + // Move to background thread + background(new AsyncDelegateBackgroundAction(del, cleanup)); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/BookmarkController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/BookmarkController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/BookmarkController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/BookmarkController.cs index df904bd2a9..80e20cf330 100644 --- a/source/ch/cyberduck/ui/controller/BookmarkController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/BookmarkController.cs @@ -1,648 +1,648 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Net; -using System.Text.RegularExpressions; -using System.Threading; -using ch.cyberduck.core; -using ch.cyberduck.core.diagnostics; -using ch.cyberduck.core.ftp; -using ch.cyberduck.core.local; -using ch.cyberduck.core.preferences; -using ch.cyberduck.core.threading; -using ch.cyberduck.ui.browser; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Ui.Core.Preferences; -using Ch.Cyberduck.Ui.Winforms.Controls; -using org.apache.log4j; -using StructureMap; -using Object = java.lang.Object; -using TimeZone = java.util.TimeZone; - -namespace Ch.Cyberduck.Ui.Controller -{ - public sealed class BookmarkController : WindowController - { - private const String TimezoneIdPrefixes = "^(Africa|America|Asia|Atlantic|Australia|Europe|Indian|Pacific)/.*"; - public const int SmallBookmarkSize = 16; - public const int MediumBookmarkSize = 32; - public const int LargeBookmarkSize = 64; - private static readonly string Auto = LocaleFactory.localizedString("Auto"); - private static readonly string Default = LocaleFactory.localizedString("Default"); - private static readonly Logger Log = Logger.getLogger(typeof (BookmarkController).FullName); - private static readonly TimeZone UTC = TimeZone.getTimeZone("UTC"); - private readonly AbstractCollectionListener _bookmarkCollectionListener; - private readonly Host _host; - private readonly Object _syncRootFavicon = new Object(); - private readonly Object _syncRootReachability = new Object(); - private readonly Timer _ticklerFavicon; - private readonly Timer _ticklerReachability; - - private BookmarkController(IBookmarkView view, Host host) - { - _host = host; - View = view; - - _ticklerReachability = new Timer(OnRechability, null, Timeout.Infinite, Timeout.Infinite); - _ticklerFavicon = new Timer(OnFavicon, null, Timeout.Infinite, Timeout.Infinite); - - View.ToggleOptions += View_ToggleOptions; - View.OptionsVisible = PreferencesFactory.get().getBoolean("bookmark.toggle.options"); - - Init(); - } - - private BookmarkController(Host host) : this(ObjectFactory.GetInstance(), host) - { - _bookmarkCollectionListener = new RemovedCollectionListener(this, host); - } - - private void OnFavicon(object state) - { - Log.debug("OnFavicon"); - background(new FaviconAction(this, _host)); - } - - private void OnRechability(object state) - { - Log.debug("OnRechability"); - background(new ReachabilityAction(this, _host)); - } - - private void View_ToggleOptions() - { - View.OptionsVisible = !View.OptionsVisible; - } - - protected override void Invalidate() - { - _ticklerReachability.Change(Timeout.Infinite, Timeout.Infinite); - _ticklerFavicon.Change(Timeout.Infinite, Timeout.Infinite); - PreferencesFactory.get().setProperty("bookmark.toggle.options", View.OptionsVisible); - BookmarkCollection.defaultCollection().removeListener(_bookmarkCollectionListener); - base.Invalidate(); - } - - private void InitTransferModes() - { - List> modes = new List>(); - Host.TransferType unknown = Host.TransferType.unknown; - modes.Add(new KeyValuePair(unknown.toString(), unknown)); - foreach (String name in Utils.ConvertFromJavaList(PreferencesFactory.get().getList("queue.transfer.type.enabled"))) - { - Host.TransferType t = Host.TransferType.valueOf(name); - modes.Add(new KeyValuePair(t.toString(), t)); - } - View.PopulateTransferModes(modes); - } - - private void View_ChangedCommentEvent() - { - _host.setComment(View.Notes); - ItemChanged(); - } - - private void View_ChangedWebURLEvent() - { - _host.setWebURL(View.WebURL); - UpdateFavicon(); - ItemChanged(); - } - - private void View_ChangedNicknameEvent() - { - _host.setNickname(View.Nickname); - ItemChanged(); - Update(); - } - - internal void View_ChangedPathEvent() - { - _host.setDefaultPath(View.Path); - ItemChanged(); - Update(); - } - - internal void View_ChangedPortEvent() - { - int port; - if (int.TryParse(View.Port, out port)) - { - _host.setPort(port); - } - else - { - _host.setPort(-1); - } - ItemChanged(); - Update(); - Reachable(); - } - - private void View_ChangedPublicKeyCheckboxEvent() - { - if (View.PkCheckboxState) - { - string selectedKeyFile = PreferencesFactory.get().getProperty("local.user.home"); - if (null != _host.getCredentials().getIdentity()) - { - selectedKeyFile = _host.getCredentials().getIdentity().getAbsolute(); - } - - View.ShowPrivateKeyBrowser(selectedKeyFile); - } - else - { - View_ChangedPrivateKey(this, new PrivateKeyArgs(null)); - } - } - - private void View_ChangedTransferEvent() - { - _host.setTransfer(View.SelectedTransferMode); - ItemChanged(); - } - - private void View_ChangedConnectModeEvent() - { - _host.setFTPConnectMode(View.SelectedConnectMode); - ItemChanged(); - } - - private void View_ChangedTimezoneEvent() - { - string selected = View.SelectedTimezone; - if (selected.Equals(Auto)) - { - _host.setTimezone(null); - } - else - { - string[] ids = TimeZone.getAvailableIDs(); - foreach (string id in ids) - { - TimeZone tz; - if ((tz = TimeZone.getTimeZone(id)).getID().Equals(selected)) - { - _host.setTimezone(tz); - break; - } - } - } - ItemChanged(); - } - - private void View_OpenWebUrl() - { - BrowserLauncherFactory.get().open(_host.getWebURL()); - } - - private void View_ChangedEncodingEvent() - { - if (View.SelectedEncoding.Equals(Default)) - { - _host.setEncoding(null); - } - else - { - _host.setEncoding(View.SelectedEncoding); - } - ItemChanged(); - } - - private void UpdateFavicon() - { - if (PreferencesFactory.get().getBoolean("bookmark.favicon.download")) - { - // Delay to 2 second. When typing changes we don't have to check the reachbility for each stroke. - _ticklerFavicon.Change(2000, Timeout.Infinite); - } - } - - internal void View_ChangedServerEvent() - { - String input = View.Hostname; - Host parsed = HostParser.parse(input); - _host.setHostname(parsed.getHostname()); - if (ProtocolFactory.isURL(input)) - { - _host.setProtocol(parsed.getProtocol()); - _host.setPort(parsed.getPort()); - _host.setDefaultPath(parsed.getDefaultPath()); - } - ItemChanged(); - Update(); - Reachable(); - } - - private void InitEncodings() - { - List encodings = new List {Default}; - encodings.AddRange(new DefaultCharsetProvider().availableCharsets()); - View.PopulateEncodings(encodings); - } - - private void InitTimezones() - { - List timezones = new List {UTC.getID()}; - - string[] allTimezones = TimeZone.getAvailableIDs(); - Array.Sort(allTimezones); - - foreach (string timezone in allTimezones) - { - if (Regex.IsMatch(timezone, TimezoneIdPrefixes)) - { - timezones.Add(TimeZone.getTimeZone(timezone).getID()); - } - } - View.PopulateTimezones(timezones); - } - - private void InitConnectModes() - { - List> modes = new List>(); - foreach (FTPConnectMode m in FTPConnectMode.values()) - { - modes.Add(new KeyValuePair(m.toString(), m)); - } - View.PopulateConnectModes(modes); - } - - private void View_ChangedProtocolEvent() - { - Protocol selected = View.SelectedProtocol; - _host.setPort(selected.getDefaultPort()); - if (!_host.getProtocol().isHostnameConfigurable()) - { - // Previously selected protocol had a default hostname. Change to default - // of newly selected protocol. - _host.setHostname(selected.getDefaultHostname()); - } - if (!selected.isHostnameConfigurable()) - { - // Hostname of newly selected protocol is not configurable. Change to default. - _host.setHostname(selected.getDefaultHostname()); - } - if (Utils.IsNotBlank(selected.getDefaultHostname())) - { - // Prefill with default hostname - _host.setHostname(selected.getDefaultHostname()); - } - _host.setProtocol(selected); - ItemChanged(); - Update(); - Reachable(); - } - - private void ItemChanged() - { - BookmarkCollection.defaultCollection().collectionItemChanged(_host); - } - - private void Reachable() - { - if (Utils.IsNotBlank(_host.getHostname())) - { - // Delay to 2 second. When typing changes we don't have to check the reachbility for each stroke. - _ticklerReachability.Change(2000, Timeout.Infinite); - } - else - { - View.AlertIconEnabled = false; - } - } - - internal void View_ChangedUsernameEvent() - { - _host.getCredentials().setUsername(View.Username); - ItemChanged(); - Update(); - } - - public void Init() - { - //set default favicon - View.Favicon = IconCache.Instance.IconForName("site", 16); - - InitProtocols(); - InitConnectModes(); - InitEncodings(); - InitTimezones(); - InitTransferModes(); - Update(); - - View.ChangedProtocolEvent += View_ChangedProtocolEvent; - View.ChangedPortEvent += View_ChangedPortEvent; - View.ChangedUsernameEvent += View_ChangedUsernameEvent; - View.ChangedServerEvent += View_ChangedServerEvent; - View.ChangedEncodingEvent += View_ChangedEncodingEvent; - View.ChangedPathEvent += View_ChangedPathEvent; - View.ChangedTimezoneEvent += View_ChangedTimezoneEvent; - View.ChangedConnectModeEvent += View_ChangedConnectModeEvent; - View.ChangedTransferEvent += View_ChangedTransferEvent; - View.ChangedPublicKeyCheckboxEvent += View_ChangedPublicKeyCheckboxEvent; - View.ChangedPrivateKey += View_ChangedPrivateKey; - View.ChangedAnonymousCheckboxEvent += View_ChangedAnonymousCheckboxEvent; - View.ChangedNicknameEvent += View_ChangedNicknameEvent; - View.ChangedWebURLEvent += View_ChangedWebURLEvent; - View.ChangedCommentEvent += View_ChangedCommentEvent; - View.ChangedBrowserDownloadPathEvent += View_ChangedBrowserDownloadPathEvent; - View.OpenDownloadFolderBrowserEvent += View_OpenDownloadFolderBrowserEvent; - View.OpenDownloadFolderEvent += View_OpenDownloadFolderEvent; - View.OpenUrl += View_OpenUrl; - View.OpenWebUrl += View_OpenWebUrl; - } - - private void View_ChangedPrivateKey(object sender, PrivateKeyArgs e) - { - _host.getCredentials().setIdentity(null == e.KeyFile ? null : LocalFactory.get(e.KeyFile)); - Update(); - ItemChanged(); - } - - private void View_OpenUrl() - { - BrowserLauncherFactory.get().open(new HostUrlProvider().get(_host)); - } - - private void View_OpenDownloadFolderEvent() - { - Local folder = new DownloadDirectoryFinder().find(_host); - ApplicationLauncherFactory.get().open(LocalFactory.get(folder.getAbsolute())); - } - - private void View_ChangedAnonymousCheckboxEvent() - { - if (View.AnonymousChecked) - { - View.UsernameEnabled = false; - View.Username = PreferencesFactory.get().getProperty("connection.login.anon.name"); - } - else - { - View.UsernameEnabled = true; - if ( - PreferencesFactory.get() - .getProperty("connection.login.name") - .Equals(PreferencesFactory.get().getProperty("connection.login.anon.name"))) - { - View.Username = String.Empty; - } - else - { - View.Username = PreferencesFactory.get().getProperty("connection.login.name"); - } - } - ItemChanged(); - Update(); - } - - private void View_OpenDownloadFolderBrowserEvent() - { - Local folder = new DownloadDirectoryFinder().find(_host); - View.ShowDownloadFolderBrowser(folder.getAbsolute()); - } - - private void View_ChangedBrowserDownloadPathEvent() - { - _host.setDownloadFolder(LocalFactory.get(View.SelectedDownloadFolder)); - ItemChanged(); - Update(); - } - - private void InitProtocols() - { - List> protocols = new List>(); - foreach (Protocol p in ProtocolFactory.getEnabledProtocols().toArray(new Protocol[] {})) - { - protocols.Add(new KeyValueIconTriple(p, p.getDescription(), p.getProvider())); - } - View.PopulateProtocols(protocols); - } - - ///

- /// Gets the image from URL. - /// - /// The URL. - /// - private static Image GetImageFromUrl(string url) - { - try - { - // Note: First call takes a long time since proxy settings are being detected - HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url); - request.Proxy = null; // disable proxy auto-detection - request.Timeout = 5000; - request.ReadWriteTimeout = 10000; - HttpWebResponse response = (HttpWebResponse) request.GetResponse(); - if (request.HaveResponse) - { - return Image.FromStream(response.GetResponseStream()); - } - return null; - } - catch (Exception) - { - return null; - } - } - - private void Update() - { - View.WindowTitle = BookmarkNameProvider.toString(_host); - View.Hostname = _host.getHostname(); - View.HostFieldEnabled = _host.getProtocol().isHostnameConfigurable(); - View.Nickname = BookmarkNameProvider.toString(_host); - View.DownloadFolder = new DownloadDirectoryFinder().find(_host).getAbsolute(); - View.URL = new HostUrlProvider(true, true).get(_host); - View.Port = _host.getPort().ToString(); - View.PortFieldEnabled = _host.getProtocol().isPortConfigurable(); - View.Path = _host.getDefaultPath(); - View.Username = _host.getCredentials().getUsername(); - View.UsernameEnabled = !_host.getCredentials().isAnonymousLogin(); - View.UsernameLabel = _host.getProtocol().getUsernamePlaceholder() + ":"; - View.AnonymousEnabled = _host.getProtocol().isAnonymousConfigurable(); - View.AnonymousChecked = _host.getCredentials().isAnonymousLogin(); - View.SelectedProtocol = _host.getProtocol(); - View.SelectedTransferMode = _host.getTransfer(); - View.SelectedEncoding = _host.getEncoding() == null ? Default : _host.getEncoding(); - View.EncodingFieldEnabled = _host.getProtocol().isEncodingConfigurable(); - View.ConnectModeFieldEnabled = _host.getProtocol().getType() == Protocol.Type.ftp; - if (_host.getProtocol().getType() == Protocol.Type.ftp) - { - View.SelectedConnectMode = _host.getFTPConnectMode(); - } - View.PkCheckboxEnabled = _host.getProtocol().getType() == Protocol.Type.ssh; - if (_host.getCredentials().isPublicKeyAuthentication()) - { - View.PkCheckboxState = true; - View.PkLabel = _host.getCredentials().getIdentity().getAbbreviatedPath(); - } - else - { - View.PkCheckboxState = false; - View.PkLabel = LocaleFactory.localizedString("No Private Key selected"); - } - View.WebUrlButtonToolTip = _host.getWebURL(); - View.WebURL = _host.getWebURL(); - View.Notes = _host.getComment(); - View.TimezoneFieldEnabled = !_host.getProtocol().isUTCTimezone(); - if (null == _host.getTimezone()) - { - if (_host.getProtocol().isUTCTimezone()) - { - View.SelectedTimezone = UTC.getID(); - } - else - { - if (PreferencesFactory.get().getBoolean("ftp.timezone.auto")) - { - View.SelectedTimezone = Auto; - } - else - { - View.SelectedTimezone = - TimeZone.getTimeZone(PreferencesFactory.get().getProperty("ftp.timezone.default")).getID(); - } - } - } - else - { - View.SelectedTimezone = _host.getTimezone().getID(); - } - } - - public static class Factory - { - private static readonly IDictionary Open = - new Dictionary(); - - public static BookmarkController Create(Host host) - { - BookmarkController c; - if (Open.TryGetValue(host, out c)) - { - return c; - } - c = new BookmarkController(host); - c.View.ViewClosedEvent += () => Open.Remove(host); - Open.Add(host, c); - return c; - } - } - - private class FaviconAction : AbstractBackgroundAction - { - private readonly BookmarkController _controller; - private readonly Host _host; - private Image _favicon; - - public FaviconAction(BookmarkController controller, Host host) - { - _controller = controller; - _host = host; - } - - public override object run() - { - //try to find the favicon in the root folder - try - { - Uri url = new Uri(_host.getWebURL()); - UriBuilder builder = new UriBuilder(url.Scheme, url.Host, url.Port); - _favicon = GetImageFromUrl(builder.Uri + "/favicon.ico"); - } - catch - { - //catch silently - } - return true; - } - - public override void cleanup() - { - if (null != _favicon) - { - _controller.View.Favicon = _favicon; - } - else - { - _controller.View.Favicon = IconCache.Instance.IconForName("site", 16); - } - } - - public override object @lock() - { - return _controller._syncRootFavicon; - } - } - - private class ReachabilityAction : AbstractBackgroundAction - { - private readonly BookmarkController _controller; - private readonly Host _host; - private bool _reachable; - - public ReachabilityAction(BookmarkController controller, Host host) - { - _controller = controller; - _host = host; - } - - public override object run() - { - _reachable = ReachabilityFactory.get().isReachable(_host); - return true; - } - - public override void cleanup() - { - _controller.View.AlertIconEnabled = !_reachable; - } - - public override object @lock() - { - return _controller._syncRootReachability; - } - } - - private class RemovedCollectionListener : AbstractCollectionListener - { - private readonly BookmarkController _controller; - private readonly Host _host; - - public RemovedCollectionListener(BookmarkController controller, Host host) - { - _controller = controller; - _host = host; - } - - public override void collectionItemRemoved(object item) - { - if (item.Equals(_host)) - { - _controller.View.Close(); - } - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Net; +using System.Text.RegularExpressions; +using System.Threading; +using ch.cyberduck.core; +using ch.cyberduck.core.diagnostics; +using ch.cyberduck.core.ftp; +using ch.cyberduck.core.local; +using ch.cyberduck.core.preferences; +using ch.cyberduck.core.threading; +using ch.cyberduck.ui.browser; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Ui.Core.Preferences; +using Ch.Cyberduck.Ui.Winforms.Controls; +using org.apache.log4j; +using StructureMap; +using Object = java.lang.Object; +using TimeZone = java.util.TimeZone; + +namespace Ch.Cyberduck.Ui.Controller +{ + public sealed class BookmarkController : WindowController + { + private const String TimezoneIdPrefixes = "^(Africa|America|Asia|Atlantic|Australia|Europe|Indian|Pacific)/.*"; + public const int SmallBookmarkSize = 16; + public const int MediumBookmarkSize = 32; + public const int LargeBookmarkSize = 64; + private static readonly string Auto = LocaleFactory.localizedString("Auto"); + private static readonly string Default = LocaleFactory.localizedString("Default"); + private static readonly Logger Log = Logger.getLogger(typeof (BookmarkController).FullName); + private static readonly TimeZone UTC = TimeZone.getTimeZone("UTC"); + private readonly AbstractCollectionListener _bookmarkCollectionListener; + private readonly Host _host; + private readonly Object _syncRootFavicon = new Object(); + private readonly Object _syncRootReachability = new Object(); + private readonly Timer _ticklerFavicon; + private readonly Timer _ticklerReachability; + + private BookmarkController(IBookmarkView view, Host host) + { + _host = host; + View = view; + + _ticklerReachability = new Timer(OnRechability, null, Timeout.Infinite, Timeout.Infinite); + _ticklerFavicon = new Timer(OnFavicon, null, Timeout.Infinite, Timeout.Infinite); + + View.ToggleOptions += View_ToggleOptions; + View.OptionsVisible = PreferencesFactory.get().getBoolean("bookmark.toggle.options"); + + Init(); + } + + private BookmarkController(Host host) : this(ObjectFactory.GetInstance(), host) + { + _bookmarkCollectionListener = new RemovedCollectionListener(this, host); + } + + private void OnFavicon(object state) + { + Log.debug("OnFavicon"); + background(new FaviconAction(this, _host)); + } + + private void OnRechability(object state) + { + Log.debug("OnRechability"); + background(new ReachabilityAction(this, _host)); + } + + private void View_ToggleOptions() + { + View.OptionsVisible = !View.OptionsVisible; + } + + protected override void Invalidate() + { + _ticklerReachability.Change(Timeout.Infinite, Timeout.Infinite); + _ticklerFavicon.Change(Timeout.Infinite, Timeout.Infinite); + PreferencesFactory.get().setProperty("bookmark.toggle.options", View.OptionsVisible); + BookmarkCollection.defaultCollection().removeListener(_bookmarkCollectionListener); + base.Invalidate(); + } + + private void InitTransferModes() + { + List> modes = new List>(); + Host.TransferType unknown = Host.TransferType.unknown; + modes.Add(new KeyValuePair(unknown.toString(), unknown)); + foreach (String name in Utils.ConvertFromJavaList(PreferencesFactory.get().getList("queue.transfer.type.enabled"))) + { + Host.TransferType t = Host.TransferType.valueOf(name); + modes.Add(new KeyValuePair(t.toString(), t)); + } + View.PopulateTransferModes(modes); + } + + private void View_ChangedCommentEvent() + { + _host.setComment(View.Notes); + ItemChanged(); + } + + private void View_ChangedWebURLEvent() + { + _host.setWebURL(View.WebURL); + UpdateFavicon(); + ItemChanged(); + } + + private void View_ChangedNicknameEvent() + { + _host.setNickname(View.Nickname); + ItemChanged(); + Update(); + } + + internal void View_ChangedPathEvent() + { + _host.setDefaultPath(View.Path); + ItemChanged(); + Update(); + } + + internal void View_ChangedPortEvent() + { + int port; + if (int.TryParse(View.Port, out port)) + { + _host.setPort(port); + } + else + { + _host.setPort(-1); + } + ItemChanged(); + Update(); + Reachable(); + } + + private void View_ChangedPublicKeyCheckboxEvent() + { + if (View.PkCheckboxState) + { + string selectedKeyFile = PreferencesFactory.get().getProperty("local.user.home"); + if (null != _host.getCredentials().getIdentity()) + { + selectedKeyFile = _host.getCredentials().getIdentity().getAbsolute(); + } + + View.ShowPrivateKeyBrowser(selectedKeyFile); + } + else + { + View_ChangedPrivateKey(this, new PrivateKeyArgs(null)); + } + } + + private void View_ChangedTransferEvent() + { + _host.setTransfer(View.SelectedTransferMode); + ItemChanged(); + } + + private void View_ChangedConnectModeEvent() + { + _host.setFTPConnectMode(View.SelectedConnectMode); + ItemChanged(); + } + + private void View_ChangedTimezoneEvent() + { + string selected = View.SelectedTimezone; + if (selected.Equals(Auto)) + { + _host.setTimezone(null); + } + else + { + string[] ids = TimeZone.getAvailableIDs(); + foreach (string id in ids) + { + TimeZone tz; + if ((tz = TimeZone.getTimeZone(id)).getID().Equals(selected)) + { + _host.setTimezone(tz); + break; + } + } + } + ItemChanged(); + } + + private void View_OpenWebUrl() + { + BrowserLauncherFactory.get().open(_host.getWebURL()); + } + + private void View_ChangedEncodingEvent() + { + if (View.SelectedEncoding.Equals(Default)) + { + _host.setEncoding(null); + } + else + { + _host.setEncoding(View.SelectedEncoding); + } + ItemChanged(); + } + + private void UpdateFavicon() + { + if (PreferencesFactory.get().getBoolean("bookmark.favicon.download")) + { + // Delay to 2 second. When typing changes we don't have to check the reachbility for each stroke. + _ticklerFavicon.Change(2000, Timeout.Infinite); + } + } + + internal void View_ChangedServerEvent() + { + String input = View.Hostname; + Host parsed = HostParser.parse(input); + _host.setHostname(parsed.getHostname()); + if (ProtocolFactory.isURL(input)) + { + _host.setProtocol(parsed.getProtocol()); + _host.setPort(parsed.getPort()); + _host.setDefaultPath(parsed.getDefaultPath()); + } + ItemChanged(); + Update(); + Reachable(); + } + + private void InitEncodings() + { + List encodings = new List {Default}; + encodings.AddRange(new DefaultCharsetProvider().availableCharsets()); + View.PopulateEncodings(encodings); + } + + private void InitTimezones() + { + List timezones = new List {UTC.getID()}; + + string[] allTimezones = TimeZone.getAvailableIDs(); + Array.Sort(allTimezones); + + foreach (string timezone in allTimezones) + { + if (Regex.IsMatch(timezone, TimezoneIdPrefixes)) + { + timezones.Add(TimeZone.getTimeZone(timezone).getID()); + } + } + View.PopulateTimezones(timezones); + } + + private void InitConnectModes() + { + List> modes = new List>(); + foreach (FTPConnectMode m in FTPConnectMode.values()) + { + modes.Add(new KeyValuePair(m.toString(), m)); + } + View.PopulateConnectModes(modes); + } + + private void View_ChangedProtocolEvent() + { + Protocol selected = View.SelectedProtocol; + _host.setPort(selected.getDefaultPort()); + if (!_host.getProtocol().isHostnameConfigurable()) + { + // Previously selected protocol had a default hostname. Change to default + // of newly selected protocol. + _host.setHostname(selected.getDefaultHostname()); + } + if (!selected.isHostnameConfigurable()) + { + // Hostname of newly selected protocol is not configurable. Change to default. + _host.setHostname(selected.getDefaultHostname()); + } + if (Utils.IsNotBlank(selected.getDefaultHostname())) + { + // Prefill with default hostname + _host.setHostname(selected.getDefaultHostname()); + } + _host.setProtocol(selected); + ItemChanged(); + Update(); + Reachable(); + } + + private void ItemChanged() + { + BookmarkCollection.defaultCollection().collectionItemChanged(_host); + } + + private void Reachable() + { + if (Utils.IsNotBlank(_host.getHostname())) + { + // Delay to 2 second. When typing changes we don't have to check the reachbility for each stroke. + _ticklerReachability.Change(2000, Timeout.Infinite); + } + else + { + View.AlertIconEnabled = false; + } + } + + internal void View_ChangedUsernameEvent() + { + _host.getCredentials().setUsername(View.Username); + ItemChanged(); + Update(); + } + + public void Init() + { + //set default favicon + View.Favicon = IconCache.Instance.IconForName("site", 16); + + InitProtocols(); + InitConnectModes(); + InitEncodings(); + InitTimezones(); + InitTransferModes(); + Update(); + + View.ChangedProtocolEvent += View_ChangedProtocolEvent; + View.ChangedPortEvent += View_ChangedPortEvent; + View.ChangedUsernameEvent += View_ChangedUsernameEvent; + View.ChangedServerEvent += View_ChangedServerEvent; + View.ChangedEncodingEvent += View_ChangedEncodingEvent; + View.ChangedPathEvent += View_ChangedPathEvent; + View.ChangedTimezoneEvent += View_ChangedTimezoneEvent; + View.ChangedConnectModeEvent += View_ChangedConnectModeEvent; + View.ChangedTransferEvent += View_ChangedTransferEvent; + View.ChangedPublicKeyCheckboxEvent += View_ChangedPublicKeyCheckboxEvent; + View.ChangedPrivateKey += View_ChangedPrivateKey; + View.ChangedAnonymousCheckboxEvent += View_ChangedAnonymousCheckboxEvent; + View.ChangedNicknameEvent += View_ChangedNicknameEvent; + View.ChangedWebURLEvent += View_ChangedWebURLEvent; + View.ChangedCommentEvent += View_ChangedCommentEvent; + View.ChangedBrowserDownloadPathEvent += View_ChangedBrowserDownloadPathEvent; + View.OpenDownloadFolderBrowserEvent += View_OpenDownloadFolderBrowserEvent; + View.OpenDownloadFolderEvent += View_OpenDownloadFolderEvent; + View.OpenUrl += View_OpenUrl; + View.OpenWebUrl += View_OpenWebUrl; + } + + private void View_ChangedPrivateKey(object sender, PrivateKeyArgs e) + { + _host.getCredentials().setIdentity(null == e.KeyFile ? null : LocalFactory.get(e.KeyFile)); + Update(); + ItemChanged(); + } + + private void View_OpenUrl() + { + BrowserLauncherFactory.get().open(new HostUrlProvider().get(_host)); + } + + private void View_OpenDownloadFolderEvent() + { + Local folder = new DownloadDirectoryFinder().find(_host); + ApplicationLauncherFactory.get().open(LocalFactory.get(folder.getAbsolute())); + } + + private void View_ChangedAnonymousCheckboxEvent() + { + if (View.AnonymousChecked) + { + View.UsernameEnabled = false; + View.Username = PreferencesFactory.get().getProperty("connection.login.anon.name"); + } + else + { + View.UsernameEnabled = true; + if ( + PreferencesFactory.get() + .getProperty("connection.login.name") + .Equals(PreferencesFactory.get().getProperty("connection.login.anon.name"))) + { + View.Username = String.Empty; + } + else + { + View.Username = PreferencesFactory.get().getProperty("connection.login.name"); + } + } + ItemChanged(); + Update(); + } + + private void View_OpenDownloadFolderBrowserEvent() + { + Local folder = new DownloadDirectoryFinder().find(_host); + View.ShowDownloadFolderBrowser(folder.getAbsolute()); + } + + private void View_ChangedBrowserDownloadPathEvent() + { + _host.setDownloadFolder(LocalFactory.get(View.SelectedDownloadFolder)); + ItemChanged(); + Update(); + } + + private void InitProtocols() + { + List> protocols = new List>(); + foreach (Protocol p in ProtocolFactory.getEnabledProtocols().toArray(new Protocol[] {})) + { + protocols.Add(new KeyValueIconTriple(p, p.getDescription(), p.getProvider())); + } + View.PopulateProtocols(protocols); + } + + /// + /// Gets the image from URL. + /// + /// The URL. + /// + private static Image GetImageFromUrl(string url) + { + try + { + // Note: First call takes a long time since proxy settings are being detected + HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url); + request.Proxy = null; // disable proxy auto-detection + request.Timeout = 5000; + request.ReadWriteTimeout = 10000; + HttpWebResponse response = (HttpWebResponse) request.GetResponse(); + if (request.HaveResponse) + { + return Image.FromStream(response.GetResponseStream()); + } + return null; + } + catch (Exception) + { + return null; + } + } + + private void Update() + { + View.WindowTitle = BookmarkNameProvider.toString(_host); + View.Hostname = _host.getHostname(); + View.HostFieldEnabled = _host.getProtocol().isHostnameConfigurable(); + View.Nickname = BookmarkNameProvider.toString(_host); + View.DownloadFolder = new DownloadDirectoryFinder().find(_host).getAbsolute(); + View.URL = new HostUrlProvider(true, true).get(_host); + View.Port = _host.getPort().ToString(); + View.PortFieldEnabled = _host.getProtocol().isPortConfigurable(); + View.Path = _host.getDefaultPath(); + View.Username = _host.getCredentials().getUsername(); + View.UsernameEnabled = !_host.getCredentials().isAnonymousLogin(); + View.UsernameLabel = _host.getProtocol().getUsernamePlaceholder() + ":"; + View.AnonymousEnabled = _host.getProtocol().isAnonymousConfigurable(); + View.AnonymousChecked = _host.getCredentials().isAnonymousLogin(); + View.SelectedProtocol = _host.getProtocol(); + View.SelectedTransferMode = _host.getTransfer(); + View.SelectedEncoding = _host.getEncoding() == null ? Default : _host.getEncoding(); + View.EncodingFieldEnabled = _host.getProtocol().isEncodingConfigurable(); + View.ConnectModeFieldEnabled = _host.getProtocol().getType() == Protocol.Type.ftp; + if (_host.getProtocol().getType() == Protocol.Type.ftp) + { + View.SelectedConnectMode = _host.getFTPConnectMode(); + } + View.PkCheckboxEnabled = _host.getProtocol().getType() == Protocol.Type.ssh; + if (_host.getCredentials().isPublicKeyAuthentication()) + { + View.PkCheckboxState = true; + View.PkLabel = _host.getCredentials().getIdentity().getAbbreviatedPath(); + } + else + { + View.PkCheckboxState = false; + View.PkLabel = LocaleFactory.localizedString("No Private Key selected"); + } + View.WebUrlButtonToolTip = _host.getWebURL(); + View.WebURL = _host.getWebURL(); + View.Notes = _host.getComment(); + View.TimezoneFieldEnabled = !_host.getProtocol().isUTCTimezone(); + if (null == _host.getTimezone()) + { + if (_host.getProtocol().isUTCTimezone()) + { + View.SelectedTimezone = UTC.getID(); + } + else + { + if (PreferencesFactory.get().getBoolean("ftp.timezone.auto")) + { + View.SelectedTimezone = Auto; + } + else + { + View.SelectedTimezone = + TimeZone.getTimeZone(PreferencesFactory.get().getProperty("ftp.timezone.default")).getID(); + } + } + } + else + { + View.SelectedTimezone = _host.getTimezone().getID(); + } + } + + public static class Factory + { + private static readonly IDictionary Open = + new Dictionary(); + + public static BookmarkController Create(Host host) + { + BookmarkController c; + if (Open.TryGetValue(host, out c)) + { + return c; + } + c = new BookmarkController(host); + c.View.ViewClosedEvent += () => Open.Remove(host); + Open.Add(host, c); + return c; + } + } + + private class FaviconAction : AbstractBackgroundAction + { + private readonly BookmarkController _controller; + private readonly Host _host; + private Image _favicon; + + public FaviconAction(BookmarkController controller, Host host) + { + _controller = controller; + _host = host; + } + + public override object run() + { + //try to find the favicon in the root folder + try + { + Uri url = new Uri(_host.getWebURL()); + UriBuilder builder = new UriBuilder(url.Scheme, url.Host, url.Port); + _favicon = GetImageFromUrl(builder.Uri + "/favicon.ico"); + } + catch + { + //catch silently + } + return true; + } + + public override void cleanup() + { + if (null != _favicon) + { + _controller.View.Favicon = _favicon; + } + else + { + _controller.View.Favicon = IconCache.Instance.IconForName("site", 16); + } + } + + public override object @lock() + { + return _controller._syncRootFavicon; + } + } + + private class ReachabilityAction : AbstractBackgroundAction + { + private readonly BookmarkController _controller; + private readonly Host _host; + private bool _reachable; + + public ReachabilityAction(BookmarkController controller, Host host) + { + _controller = controller; + _host = host; + } + + public override object run() + { + _reachable = ReachabilityFactory.get().isReachable(_host); + return true; + } + + public override void cleanup() + { + _controller.View.AlertIconEnabled = !_reachable; + } + + public override object @lock() + { + return _controller._syncRootReachability; + } + } + + private class RemovedCollectionListener : AbstractCollectionListener + { + private readonly BookmarkController _controller; + private readonly Host _host; + + public RemovedCollectionListener(BookmarkController controller, Host host) + { + _controller = controller; + _host = host; + } + + public override void collectionItemRemoved(object item) + { + if (item.Equals(_host)) + { + _controller.View.Close(); + } + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/BookmarkModel.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/BookmarkModel.cs similarity index 96% rename from source/ch/cyberduck/ui/controller/BookmarkModel.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/BookmarkModel.cs index e80acc3bc2..3203cbd927 100644 --- a/source/ch/cyberduck/ui/controller/BookmarkModel.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/BookmarkModel.cs @@ -1,240 +1,240 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using ch.cyberduck.core; -using ch.cyberduck.core.preferences; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal class BookmarkModel - { - private readonly BrowserController _controller; - private HostFilter _filter; - private AbstractHostCollection _filtered; - private CollectionListener _listener; - private AbstractHostCollection _source = AbstractHostCollection.empty(); - - public BookmarkModel(BrowserController controller, AbstractHostCollection source) - { - _controller = controller; - Source = source; - } - - public AbstractHostCollection Source - { - //The filtered collection currently to be displayed within the constraints - //given by the comparision with the HostFilter - get - { - if (null == _filter) - { - return _source; - } - if (null == _filtered) - { - _filtered = new FilterBookmarkCollection(_source); - foreach (Host bookmark in _source) - { - if (_filter.accept(bookmark)) - { - _filtered.add(bookmark); - } - } - _filtered.addListener(new FilterBookmarkListener(_source)); - } - return _filtered; - } - - set - { - if (null != value) - { - _source.removeListener(_listener); //remove previous listener - _source = value; - _source.addListener(_listener = new BookmarkListener(_controller)); - } - else - { - _source.removeListener(_listener); //remove previous listener - _source = value; - } - Filter = null; - } - } - - public HostFilter Filter - { - set - { - _filter = value; - _filtered = null; - } - } - - public object GetBookmarkImage(object host) - { - Host h = (Host) host; - return - IconCache.Instance.GetProtocolImages(PreferencesFactory.get().getInteger("bookmark.icon.size")).Images[ - h.getProtocol().getProvider()]; - } - - public object GetHostname(object host) - { - return ((Host) host).getHostname(); - } - - public object GetUrl(object host) - { - Host h = (Host) host; - return new HostUrlProvider(true, true).get(h); - } - - public object GetNotes(object host) - { - Host h = (Host) host; - return Source != null ? Source.getComment(h) : string.Empty; - } - - public object GetBookmarkStatusImage(object rowobject) - { - if (_controller.HasSession()) - { - Session session = _controller.Session; - if (((Host) rowobject).Equals(session.getHost())) - { - if (session.getState().Equals(Session.State.open)) - { - return IconCache.Instance.IconForName("statusGreen", 16); - } - if (session.getState().Equals(Session.State.closing) || - session.getState().Equals(Session.State.opening)) - { - return IconCache.Instance.IconForName("statusYellow", 16); - } - } - } - return null; - } - - public object GetNickname(object host) - { - return BookmarkNameProvider.toString(((Host) host)); - } - - private class BookmarkListener : CollectionListener - { - private readonly BrowserController _controller; - - public BookmarkListener(BrowserController controller) - { - _controller = controller; - } - - public void collectionLoaded() - { - ; - } - - public void collectionItemAdded(object host) - { - _controller.Invoke(() => _controller.ReloadBookmarks()); - } - - public void collectionItemRemoved(object host) - { - _controller.Invoke(() => _controller.ReloadBookmarks(host as Host)); - } - - public void collectionItemChanged(object host) - { - _controller.Invoke(() => _controller.View.RefreshBookmark(host as Host)); - } - } - - private class FilterBookmarkCollection : AbstractHostCollection - { - private readonly AbstractHostCollection _source; - - public FilterBookmarkCollection(AbstractHostCollection source) - { - _source = source; - } - - public override string getName() - { - return _source.getName(); - } - - public override bool allowsAdd() - { - return _source.allowsAdd(); - } - - public override bool allowsDelete() - { - return _source.allowsDelete(); - } - - public override bool allowsEdit() - { - return _source.allowsEdit(); - } - - public override void save() - { - _source.save(); - } - - public override void load() - { - _source.load(); - } - } - - private class FilterBookmarkListener : CollectionListener - { - private readonly AbstractHostCollection _source; - - public FilterBookmarkListener(AbstractHostCollection source) - { - _source = source; - } - - public void collectionLoaded() - { - _source.collectionLoaded(); - } - - public void collectionItemAdded(object host) - { - _source.add(host as Host); - } - - public void collectionItemRemoved(object host) - { - _source.remove(host as Host); - } - - public void collectionItemChanged(object host) - { - _source.collectionItemChanged(host); - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using ch.cyberduck.core; +using ch.cyberduck.core.preferences; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal class BookmarkModel + { + private readonly BrowserController _controller; + private HostFilter _filter; + private AbstractHostCollection _filtered; + private CollectionListener _listener; + private AbstractHostCollection _source = AbstractHostCollection.empty(); + + public BookmarkModel(BrowserController controller, AbstractHostCollection source) + { + _controller = controller; + Source = source; + } + + public AbstractHostCollection Source + { + //The filtered collection currently to be displayed within the constraints + //given by the comparision with the HostFilter + get + { + if (null == _filter) + { + return _source; + } + if (null == _filtered) + { + _filtered = new FilterBookmarkCollection(_source); + foreach (Host bookmark in _source) + { + if (_filter.accept(bookmark)) + { + _filtered.add(bookmark); + } + } + _filtered.addListener(new FilterBookmarkListener(_source)); + } + return _filtered; + } + + set + { + if (null != value) + { + _source.removeListener(_listener); //remove previous listener + _source = value; + _source.addListener(_listener = new BookmarkListener(_controller)); + } + else + { + _source.removeListener(_listener); //remove previous listener + _source = value; + } + Filter = null; + } + } + + public HostFilter Filter + { + set + { + _filter = value; + _filtered = null; + } + } + + public object GetBookmarkImage(object host) + { + Host h = (Host) host; + return + IconCache.Instance.GetProtocolImages(PreferencesFactory.get().getInteger("bookmark.icon.size")).Images[ + h.getProtocol().getProvider()]; + } + + public object GetHostname(object host) + { + return ((Host) host).getHostname(); + } + + public object GetUrl(object host) + { + Host h = (Host) host; + return new HostUrlProvider(true, true).get(h); + } + + public object GetNotes(object host) + { + Host h = (Host) host; + return Source != null ? Source.getComment(h) : string.Empty; + } + + public object GetBookmarkStatusImage(object rowobject) + { + if (_controller.HasSession()) + { + Session session = _controller.Session; + if (((Host) rowobject).Equals(session.getHost())) + { + if (session.getState().Equals(Session.State.open)) + { + return IconCache.Instance.IconForName("statusGreen", 16); + } + if (session.getState().Equals(Session.State.closing) || + session.getState().Equals(Session.State.opening)) + { + return IconCache.Instance.IconForName("statusYellow", 16); + } + } + } + return null; + } + + public object GetNickname(object host) + { + return BookmarkNameProvider.toString(((Host) host)); + } + + private class BookmarkListener : CollectionListener + { + private readonly BrowserController _controller; + + public BookmarkListener(BrowserController controller) + { + _controller = controller; + } + + public void collectionLoaded() + { + ; + } + + public void collectionItemAdded(object host) + { + _controller.Invoke(() => _controller.ReloadBookmarks()); + } + + public void collectionItemRemoved(object host) + { + _controller.Invoke(() => _controller.ReloadBookmarks(host as Host)); + } + + public void collectionItemChanged(object host) + { + _controller.Invoke(() => _controller.View.RefreshBookmark(host as Host)); + } + } + + private class FilterBookmarkCollection : AbstractHostCollection + { + private readonly AbstractHostCollection _source; + + public FilterBookmarkCollection(AbstractHostCollection source) + { + _source = source; + } + + public override string getName() + { + return _source.getName(); + } + + public override bool allowsAdd() + { + return _source.allowsAdd(); + } + + public override bool allowsDelete() + { + return _source.allowsDelete(); + } + + public override bool allowsEdit() + { + return _source.allowsEdit(); + } + + public override void save() + { + _source.save(); + } + + public override void load() + { + _source.load(); + } + } + + private class FilterBookmarkListener : CollectionListener + { + private readonly AbstractHostCollection _source; + + public FilterBookmarkListener(AbstractHostCollection source) + { + _source = source; + } + + public void collectionLoaded() + { + _source.collectionLoaded(); + } + + public void collectionItemAdded(object host) + { + _source.add(host as Host); + } + + public void collectionItemRemoved(object host) + { + _source.remove(host as Host); + } + + public void collectionItemChanged(object host) + { + _source.collectionItemChanged(host); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/BrowserController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/BrowserController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/BrowserController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/BrowserController.cs index 6b6187a474..7dd5b3e806 100644 --- a/source/ch/cyberduck/ui/controller/BrowserController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/BrowserController.cs @@ -1,3297 +1,3297 @@ -// -// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. -// http://cyberduck.io/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// feedback@cyberduck.io -// - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Collections.Specialized; -using System.IO; -using System.Windows.Forms; -using BrightIdeasSoftware; -using ch.cyberduck.core; -using ch.cyberduck.core.bonjour; -using ch.cyberduck.core.cdn; -using ch.cyberduck.core.editor; -using ch.cyberduck.core.exception; -using ch.cyberduck.core.features; -using ch.cyberduck.core.local; -using ch.cyberduck.core.pasteboard; -using ch.cyberduck.core.preferences; -using ch.cyberduck.core.serializer; -using ch.cyberduck.core.sftp; -using ch.cyberduck.core.ssl; -using ch.cyberduck.core.threading; -using ch.cyberduck.core.transfer; -using ch.cyberduck.core.worker; -using ch.cyberduck.ui.browser; -using ch.cyberduck.ui.comparator; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Core.Local; -using Ch.Cyberduck.Ui.Controller.Threading; -using Ch.Cyberduck.Ui.Winforms; -using Ch.Cyberduck.Ui.Winforms.Taskdialog; -using java.lang; -using java.util; -using org.apache.log4j; -using StructureMap; -using Application = ch.cyberduck.core.local.Application; -using Exception = System.Exception; -using Path = ch.cyberduck.core.Path; -using String = System.String; -using StringBuilder = System.Text.StringBuilder; - -namespace Ch.Cyberduck.Ui.Controller -{ - public class BrowserController : WindowController, TranscriptListener, CollectionListener, - ProgressListener - { - public delegate void CallbackDelegate(); - - public delegate bool DialogCallbackDelegate(DialogResult result); - - internal static readonly Filter HiddenFilter = new RegexFilter(); - private static readonly Logger Log = Logger.getLogger(typeof (BrowserController).FullName); - private static readonly Filter NullFilter = new NullFilter(); - protected static string DEFAULT = LocaleFactory.localizedString("Default"); - private readonly BookmarkCollection _bookmarkCollection = BookmarkCollection.defaultCollection(); - private readonly BookmarkModel _bookmarkModel; - private readonly TreeBrowserModel _browserModel; - private readonly PathCache _cache = new PathCache(PreferencesFactory.get().getInteger("browser.cache.size")); - private readonly ListProgressListener _limitListener; - private readonly Navigation _navigation = new Navigation(); - private readonly IList _temporaryWatcher = new List(); - private Comparator _comparator = new NullComparator(); - private String _dropFolder; // holds the drop folder of the current drag operation - private InfoController _inspector; - private BrowserView _lastBookmarkView = BrowserView.Bookmark; - private PathPasteboard _pasteboard; - private bool _showHiddenFiles; - - public BrowserController(IBrowserView view) - { - View = view; - - ShowHiddenFiles = PreferencesFactory.get().getBoolean("browser.showHidden"); - - _limitListener = new DialogLimitedListProgressListener(this); - _browserModel = new TreeBrowserModel(this, _cache, _limitListener); - _bookmarkModel = new BookmarkModel(this, _bookmarkCollection); - View.ViewClosedEvent += delegate { _bookmarkModel.Source = null; }; - - //default view is the bookmark view - ToggleView(BrowserView.Bookmark); - View.StopActivityAnimation(); - - View.SetComparator += View_SetComparator; - View.ChangeBrowserView += View_ChangeBrowserView; - - View.QuickConnect += View_QuickConnect; - View.BrowserDoubleClicked += View_BrowserDoubleClicked; - View.BrowserSelectionChanged += View_BrowserSelectionChanged; - View.PathSelectionChanged += View_PathSelectionChanged; - View.EditEvent += View_EditEvent; - View.ItemsChanged += View_ItemsChanged; - - View.ShowTransfers += View_ShowTransfers; - - View.BrowserCanDrop += View_BrowserCanDrop; - View.HostCanDrop += View_HostCanDrop; - View.BrowserModelCanDrop += View_BrowserModelCanDrop; - View.HostModelCanDrop += View_HostModelCanDrop; - View.BrowserDropped += View_BrowserDropped; - View.HostDropped += View_HostDropped; - View.HostModelDropped += View_HostModelDropped; - View.BrowserModelDropped += View_BrowserModelDropped; - View.BrowserDrag += View_BrowserDrag; - View.HostDrag += View_HostDrag; - View.BrowserEndDrag += View_BrowserEndDrag; - View.HostEndDrag += View_HostEndDrag; - View.SearchFieldChanged += View_SearchFieldChanged; - - - View.ContextMenuEnabled += View_ContextMenuEnabled; - - #region Commands - File - - View.NewBrowser += View_NewBrowser; - View.ValidateNewBrowser += View_ValidateNewBrowser; - View.OpenConnection += View_OpenConnection; - View.ValidateOpenConnection += () => true; - View.NewDownload += View_NewDownload; - View.ValidateNewDownload += () => false; //todo implement - View.NewFolder += View_NewFolder; - View.ValidateNewFolder += View_ValidateNewFolder; - View.NewFile += View_NewFile; - View.ValidateNewFile += View_ValidateNewFile; - View.NewSymbolicLink += View_NewSymbolicLink; - View.ValidateNewSymbolicLink += View_ValidateNewSymbolicLink; - View.RenameFile += View_RenameFile; - View.ValidateRenameFile += View_ValidateRenameFile; - View.DuplicateFile += View_DuplicateFile; - View.ValidateDuplicateFile += View_ValidateDuplicateFile; - View.OpenUrl += View_OpenUrl; - View.ValidateOpenWebUrl += View_ValidateOpenWebUrl; - View.ValidateEditWith += View_ValidateEditWith; - View.ShowInspector += View_ShowInspector; - View.ValidateShowInspector += View_ValidateShowInspector; - View.Download += View_Download; - View.ValidateDownload += View_ValidateDownload; - View.DownloadAs += View_DownloadAs; - View.ValidateDownloadAs += View_ValidateDownloadAs; - View.DownloadTo += View_DownloadTo; - View.ValidateDownloadTo += View_ValidateDownload; //use same validation handler - View.Upload += View_Upload; - View.ValidateUpload += View_ValidateUpload; - View.Synchronize += View_Synchronize; - View.ValidateSynchronize += View_ValidateSynchronize; - View.Delete += View_Delete; - View.ValidateDelete += View_ValidateDelete; - View.RevertFile += View_RevertFile; - View.ValidateRevertFile += View_ValidateRevertFile; - View.GetArchives += View_GetArchives; - View.GetCopyUrls += View_GetCopyUrls; - View.GetOpenUrls += View_GetOpenUrls; - View.CreateArchive += View_CreateArchive; - View.ValidateCreateArchive += View_ValidateCreateArchive; - View.ExpandArchive += View_ExpandArchive; - View.ValidateExpandArchive += View_ValidateExpandArchive; - - #endregion - - #region Commands - Edit - - View.Cut += View_Cut; - View.ValidateCut += View_ValidateCut; - View.Copy += View_Copy; - View.ValidateCopy += View_ValidateCopy; - View.Paste += View_Paste; - View.ValidatePaste += View_ValidatePaste; - View.ShowPreferences += View_ShowPreferences; - - #endregion - - #region Commands - View - - View.ToggleToolbar += View_ToggleToolbar; - View.ShowHiddenFiles += View_ShowHiddenFiles; - View.ValidateTextEncoding += View_ValidateTextEncoding; - View.EncodingChanged += View_EncodingChanged; - View.ToggleLogDrawer += View_ToggleLogDrawer; - - #endregion - - #region Commands - Go - - View.RefreshBrowser += View_RefreshBrowser; - View.ValidateRefresh += View_ValidateRefresh; - View.GotoFolder += View_GotoFolder; - View.ValidateGotoFolder += View_ValidateGotoFolder; - View.HistoryBack += View_HistoryBack; - View.ValidateHistoryBack += View_ValidateHistoryBack; - View.HistoryForward += View_HistoryForward; - View.ValidateHistoryForward += View_ValidateHistoryForward; - View.FolderUp += View_FolderUp; - View.ValidateFolderUp += View_ValidateFolderUp; - View.FolderInside += View_FolderInside; - View.ValidateFolderInside += View_ValidateFolderInside; - View.Search += View_Search; - View.SendCustomCommand += View_SendCustomCommand; - View.ValidateSendCustomCommand += View_ValidateSendCustomCommand; - View.OpenInTerminal += View_OpenInTerminal; - View.ValidateOpenInTerminal += View_ValidateOpenInTerminal; - View.Stop += View_Disconnect; - View.ValidateStop += View_ValidateStop; - View.Disconnect += View_Disconnect; - View.ValidateDisconnect += View_ValidateDisconnect; - - #endregion - - #region Commands - Bookmark - - View.ToggleBookmarks += View_ToggleBookmarks; - View.SortBookmarksByHostname += View_SortBookmarksByHostname; - View.SortBookmarksByNickname += View_SortBookmarksByNickname; - View.SortBookmarksByProtocol += View_SortBookmarksByProtocol; - - View.ConnectBookmark += View_ConnectBookmark; - View.ValidateConnectBookmark += View_ValidateConnectBookmark; - View.NewBookmark += View_NewBookmark; - View.ValidateNewBookmark += View_ValidateNewBookmark; - View.EditBookmark += View_EditBookmark; - View.ValidateEditBookmark += View_ValidateEditBookmark; - View.DeleteBookmark += View_DeleteBookmark; - View.ValidateDeleteBookmark += View_ValidateDeleteBookmark; - View.DuplicateBookmark += View_DuplicateBookmark; - View.ValidateDuplicateBookmark += View_ValidateDuplicateBookmark; - - #endregion - - #region Browser model delegates - - View.ModelCanExpandDelegate = _browserModel.CanExpand; - View.ModelChildrenGetterDelegate = _browserModel.ChildrenGetter; - View.ModelFilenameGetter = _browserModel.GetName; - View.ModelIconGetter = _browserModel.GetIcon; - View.ModelSizeGetter = _browserModel.GetSize; - View.ModelSizeAsStringGetter = _browserModel.GetSizeAsString; - View.ModelModifiedGetter = _browserModel.GetModified; - View.ModelModifiedAsStringGetter = _browserModel.GetModifiedAsString; - View.ModelOwnerGetter = _browserModel.GetOwner; - View.ModelGroupGetter = _browserModel.GetGroup; - View.ModelPermissionsGetter = _browserModel.GetPermission; - View.ModelKindGetter = _browserModel.GetKind; - View.ModelActiveGetter = _browserModel.GetActive; - View.ModelExtensionGetter = _browserModel.GetExtension; - View.ModelRegionGetter = _browserModel.GetRegion; - View.ModelVersionGetter = _browserModel.GetVersion; - - #endregion - - #region Bookmark model delegates - - View.BookmarkImageGetter = _bookmarkModel.GetBookmarkImage; - View.BookmarkNicknameGetter = _bookmarkModel.GetNickname; - View.BookmarkHostnameGetter = _bookmarkModel.GetHostname; - View.BookmarkUrlGetter = _bookmarkModel.GetUrl; - View.BookmarkNotesGetter = _bookmarkModel.GetNotes; - View.BookmarkStatusImageGetter = _bookmarkModel.GetBookmarkStatusImage; - - #endregion - - _bookmarkCollection.addListener(this); - View.ViewClosedEvent += delegate { _bookmarkCollection.removeListener(this); }; - - PopulateQuickConnect(); - PopulateEncodings(); - UpdateOpenIcon(); - - View.ToolbarVisible = PreferencesFactory.get().getBoolean("browser.toolbar"); - View.LogDrawerVisible = PreferencesFactory.get().getBoolean("browser.transcript.open"); - - View.GetEditorsForSelection += View_GetEditorsForSelection; - View.GetBookmarks += View_GetBookmarks; - View.GetHistory += View_GetHistory; - View.GetBonjourHosts += View_GetBonjourHosts; - View.ClearHistory += View_ClearHistory; - View.ShowCertificate += View_Certificate; - - View.ValidatePathsCombobox += View_ValidatePathsCombobox; - View.ValidateSearchField += View_ValidateSearchField; - - View.Exit += View_Exit; - View.SetBookmarkModel(_bookmarkCollection, null); - } - - public BrowserController() : this(ObjectFactory.GetInstance()) - { - } - - /// - /// The first selected path found or null if there is no selection - /// - public Path SelectedPath - { - get - { - IList selectedPaths = View.SelectedPaths; - if (selectedPaths.Count > 0) - { - return selectedPaths[0]; - } - return null; - } - } - - public Path Workdir { get; set; } - - /// - /// - /// - /// - /// All selected paths or an empty list if there is no selection - /// - public IList SelectedPaths - { - get - { - if (IsMounted()) - { - return View.SelectedPaths; - } - return new List(); - } - set { View.SelectedPaths = value; } - } - - public bool ShowHiddenFiles - { - get { return _showHiddenFiles; } - set - { - FilenameFilter = value ? NullFilter : HiddenFilter; - _showHiddenFiles = value; - View.HiddenFilesVisible = _showHiddenFiles; - } - } - - public PathCache Cache - { - get { return _cache; } - } - - public Filter FilenameFilter { get; set; } - - public Comparator FilenameComparator - { - get { return _comparator; } - set { _comparator = value; } - } - - public Session Session { get; private set; } - - public void collectionLoaded() - { - AsyncDelegate mainAction = delegate { ReloadBookmarks(); }; - Invoke(mainAction); - } - - public void collectionItemAdded(object obj) - { - AsyncDelegate mainAction = delegate { PopulateQuickConnect(); }; - Invoke(mainAction); - } - - public void collectionItemRemoved(object obj) - { - AsyncDelegate mainAction = delegate { PopulateQuickConnect(); }; - Invoke(mainAction); - } - - public void collectionItemChanged(object obj) - { - AsyncDelegate mainAction = delegate { PopulateQuickConnect(); }; - Invoke(mainAction); - } - - public override void message(string msg) - { - string label; - if (Utils.IsNotBlank(msg)) - { - label = msg; - } - else - { - if (View.CurrentView == BrowserView.Bookmark || View.CurrentView == BrowserView.History || - View.CurrentView == BrowserView.Bonjour) - { - label = String.Format("{0} {1}", View.NumberOfBookmarks, LocaleFactory.localizedString("Bookmarks")); - } - else - { - if (IsConnected()) - { - label = String.Format(LocaleFactory.localizedString("{0} Files"), View.NumberOfFiles); - } - else - { - label = String.Empty; - } - } - } - AsyncDelegate updateLabel = delegate { View.StatusLabel = label; }; - Invoke(updateLabel); - } - - public override void log(bool request, string transcript) - { - if (View.LogDrawerVisible) - { - AsyncDelegate mainAction = delegate { View.AddTranscriptEntry(request, transcript); }; - Invoke(mainAction); - } - } - - public void RemoveDonateButton() - { - View.RemoveDonateButton(); - } - - private void View_NewSymbolicLink() - { - CreateSymlinkController slc = - new CreateSymlinkController(ObjectFactory.GetInstance(), this); - slc.Show(); - } - - private bool View_ValidateNewSymbolicLink() - { - return IsMounted() && Session.getFeature(typeof (Symlink)) != null && SelectedPaths.Count == 1; - } - - private void View_SortBookmarksByProtocol() - { - BookmarkCollection.defaultCollection().sortByProtocol(); - ReloadBookmarks(); - } - - private void View_SortBookmarksByNickname() - { - BookmarkCollection.defaultCollection().sortByNickname(); - ReloadBookmarks(); - } - - private void View_SortBookmarksByHostname() - { - BookmarkCollection.defaultCollection().sortByHostname(); - ReloadBookmarks(); - } - - private bool View_ValidateOpenInTerminal() - { - return IsMounted() && Session is SFTPSession; - } - - private void View_OpenInTerminal() - { - Host host = Session.getHost(); - Path workdir = null; - if (SelectedPaths.Count == 1) - { - Path selected = SelectedPath; - if (selected.isDirectory()) - { - workdir = selected; - } - } - if (null == workdir) - { - workdir = Workdir; - } - if (!File.Exists(PreferencesFactory.get().getProperty("terminal.command.ssh"))) - { - OpenFileDialog selectDialog = new OpenFileDialog(); - selectDialog.Filter = "PuTTY executable (.exe)|*.exe"; - selectDialog.FilterIndex = 1; - if (selectDialog.ShowDialog() == DialogResult.OK) - { - PreferencesFactory.get().setProperty("terminal.command.ssh", selectDialog.FileName); - } - else - { - return; - } - } - new SshTerminalService().open(host, workdir); - } - - private void View_SetComparator(BrowserComparator comparator) - { - if (!comparator.equals(_comparator)) - { - _comparator = comparator; - ReloadData(true); - } - } - - private IList View_GetEditorsForSelection() - { - Path p = SelectedPath; - if (null != p) - { - if (p.isFile()) - { - return Utils.ConvertFromJavaList(EditorFactory.instance().getEditors(p.getName()), null); - } - } - return new List(); - } - - private bool View_ValidateNewBrowser() - { - return IsMounted(); - } - - private List>> View_GetCopyUrls() - { - List>> items = new List>>(); - IList selected = View.SelectedPaths; - if (selected.Count == 0) - { - items.Add(new KeyValuePair>(LocaleFactory.localizedString("None"), - new List())); - } - else - { - UrlProvider urlProvider = ((UrlProvider) Session.getFeature(typeof (UrlProvider))); - if (urlProvider != null) - { - for (int i = 0; i < urlProvider.toUrl(SelectedPath).size(); i++) - { - DescriptiveUrl descUrl = (DescriptiveUrl) urlProvider.toUrl(SelectedPath).toArray()[i]; - KeyValuePair> entry = - new KeyValuePair>(descUrl.getHelp(), new List()); - items.Add(entry); - foreach (Path path in selected) - { - entry.Value.Add(((DescriptiveUrl) urlProvider.toUrl(path).toArray()[i]).getUrl()); - } - } - } - UrlProvider distributionConfiguration = - ((UrlProvider) Session.getFeature(typeof (DistributionConfiguration))); - if (distributionConfiguration != null) - { - for (int i = 0; i < distributionConfiguration.toUrl(SelectedPath).size(); i++) - { - DescriptiveUrl descUrl = - (DescriptiveUrl) distributionConfiguration.toUrl(SelectedPath).toArray()[i]; - KeyValuePair> entry = - new KeyValuePair>(descUrl.getHelp(), new List()); - items.Add(entry); - foreach (Path path in selected) - { - entry.Value.Add( - ((DescriptiveUrl) distributionConfiguration.toUrl(path).toArray()[i]).getUrl()); - } - } - } - } - return items; - } - - private bool IsBrowser() - { - return View.CurrentView == BrowserView.File; - } - - private IList>> View_GetOpenUrls() - { - IList>> items = new List>>(); - IList selected = View.SelectedPaths; - if (selected.Count == 0) - { - items.Add(new KeyValuePair>(LocaleFactory.localizedString("None"), - new List())); - } - else - { - DescriptiveUrlBag urls = - ((UrlProvider) Session.getFeature(typeof (UrlProvider))).toUrl(SelectedPath) - .filter(DescriptiveUrl.Type.http, DescriptiveUrl.Type.cname, DescriptiveUrl.Type.cdn, - DescriptiveUrl.Type.signed, DescriptiveUrl.Type.authenticated, DescriptiveUrl.Type.torrent); - for (int i = 0; i < urls.size(); i++) - { - DescriptiveUrl descUrl = (DescriptiveUrl) urls.toArray()[i]; - KeyValuePair> entry = new KeyValuePair>( - descUrl.getHelp(), new List()); - items.Add(entry); - - foreach (Path path in selected) - { - entry.Value.Add(((DescriptiveUrl) urls.toArray()[i]).getUrl()); - } - } - } - return items; - } - - public void UpdateBookmarks() - { - View.UpdateBookmarks(); - } - - private bool View_ValidateDuplicateBookmark() - { - return _bookmarkModel.Source.allowsEdit() && View.SelectedBookmarks.Count == 1; - } - - private void View_DuplicateBookmark() - { - ToggleView(BrowserView.Bookmark); - Host duplicate = new HostDictionary().deserialize(View.SelectedBookmark.serialize(SerializerFactory.get())); - // Make sure a new UUID is asssigned for duplicate - duplicate.setUuid(null); - AddBookmark(duplicate); - } - - private void View_HostModelDropped(ModelDropEventArgs dropargs) - { - int sourceIndex = _bookmarkModel.Source.indexOf(dropargs.SourceModels[0]); - int destIndex = dropargs.DropTargetIndex; - if (dropargs.DropTargetLocation == DropTargetLocation.BelowItem) - { - destIndex++; - } - if (dropargs.Effect == DragDropEffects.Copy) - { - Host host = - new HostDictionary().deserialize(((Host) dropargs.SourceModels[0]).serialize(SerializerFactory.get())); - host.setUuid(null); - AddBookmark(host, destIndex); - } - if (dropargs.Effect == DragDropEffects.Move) - { - if (sourceIndex < destIndex) - { - destIndex--; - } - foreach (Host promisedDragBookmark in dropargs.SourceModels) - { - _bookmarkModel.Source.remove(promisedDragBookmark); - if (destIndex > _bookmarkModel.Source.size()) - { - _bookmarkModel.Source.add(promisedDragBookmark); - } - else - { - _bookmarkModel.Source.add(destIndex, promisedDragBookmark); - } - //view.selectRowIndexes(NSIndexSet.indexSetWithIndex(row), false); - //view.scrollRowToVisible(row); - } - } - } - - private void View_HostModelCanDrop(ModelDropEventArgs args) - { - if (!_bookmarkModel.Source.allowsEdit()) - { - // Do not allow drags for non writable collections - args.Effect = DragDropEffects.None; - args.DropTargetLocation = DropTargetLocation.None; - return; - } - switch (args.DropTargetLocation) - { - case DropTargetLocation.BelowItem: - case DropTargetLocation.AboveItem: - if (args.SourceModels.Count > 1) - { - args.Effect = DragDropEffects.Move; - } - break; - default: - args.Effect = DragDropEffects.None; - args.DropTargetLocation = DropTargetLocation.None; - return; - } - } - - private void View_HostDropped(OlvDropEventArgs e) - { - if (e.DataObject is DataObject && ((DataObject) e.DataObject).ContainsFileDropList()) - { - DataObject data = (DataObject) e.DataObject; - - if (e.DropTargetLocation == DropTargetLocation.Item) - { - IList roots = new List(); - Host host = null; - foreach (string filename in data.GetFileDropList()) - { - //check if we received at least one non-duck file - if (!".duck".Equals(Utils.GetSafeExtension(filename))) - { - // The bookmark this file has been dropped onto - Host destination = (Host) e.DropTargetItem.RowObject; - if (null == host) - { - host = destination; - } - Local local = LocalFactory.get(filename); - // Upload to the remote host this bookmark points to - roots.Add( - new TransferItem( - new Path( - new Path(PathNormalizer.normalize(destination.getDefaultPath(), true), - EnumSet.of(AbstractPath.Type.directory)), local.getName(), - EnumSet.of(AbstractPath.Type.file)), local)); - } - } - if (roots.Count > 0) - { - UploadTransfer q = new UploadTransfer(host, Utils.ConvertToJavaList(roots)); - // If anything has been added to the queue, then process the queue - if (q.getRoots().size() > 0) - { - TransferController.Instance.StartTransfer(q); - } - } - return; - } - - if (e.DropTargetLocation == DropTargetLocation.AboveItem) - { - Host destination = (Host) e.DropTargetItem.RowObject; - foreach (string file in data.GetFileDropList()) - { - _bookmarkModel.Source.add(_bookmarkModel.Source.indexOf(destination), - HostReaderFactory.get().read(LocalFactory.get(file))); - } - } - if (e.DropTargetLocation == DropTargetLocation.BelowItem) - { - Host destination = (Host) e.DropTargetItem.RowObject; - foreach (string file in data.GetFileDropList()) - { - _bookmarkModel.Source.add(_bookmarkModel.Source.indexOf(destination) + 1, - HostReaderFactory.get().read(LocalFactory.get(file))); - } - } - if (e.DropTargetLocation == DropTargetLocation.Background) - { - foreach (string file in data.GetFileDropList()) - { - _bookmarkModel.Source.add(HostReaderFactory.get().read(LocalFactory.get(file))); - } - } - } - } - - private void View_HostCanDrop(OlvDropEventArgs args) - { - if (!_bookmarkModel.Source.allowsEdit()) - { - // Do not allow drags for non writable collections - args.Effect = DragDropEffects.None; - args.DropTargetLocation = DropTargetLocation.None; - return; - } - - DataObject dataObject = (DataObject) args.DataObject; - if (dataObject.ContainsFileDropList()) - { - //check if all files are .duck files - foreach (string file in dataObject.GetFileDropList()) - { - string ext = Utils.GetSafeExtension(file); - if (!".duck".Equals(ext)) - { - //if at least one non-duck file we prepare for uploading - args.Effect = DragDropEffects.Copy; - if (args.DropTargetLocation == DropTargetLocation.Item) - { - Host destination = (Host) args.DropTargetItem.RowObject; - (args.DataObject as DataObject).SetDropDescription((DropImageType) args.Effect, - "Upload to %1", BookmarkNameProvider.toString(destination)); - } - args.DropTargetLocation = DropTargetLocation.Item; - return; - } - } - - //at least one .duck file - args.Effect = DragDropEffects.Copy; - if (args.DropTargetLocation == DropTargetLocation.Item) - { - args.DropTargetLocation = DropTargetLocation.Background; - } - return; - } - args.Effect = DragDropEffects.None; - } - - private void View_HostEndDrag(DataObject data) - { - RemoveTemporaryFiles(data); - RemoveTemporaryFilesystemWatcher(); - } - - private string CreateAndWatchTemporaryFile(FileSystemEventHandler del) - { - string tfile = System.IO.Path.Combine(System.IO.Path.GetTempPath(), Guid.NewGuid().ToString()); - using (File.Create(tfile)) - { - FileInfo tmpFile = new FileInfo(tfile); - tmpFile.Attributes |= FileAttributes.Hidden; - } - DriveInfo[] allDrives = DriveInfo.GetDrives(); - foreach (DriveInfo d in allDrives) - { - if (d.IsReady && d.DriveType != DriveType.CDRom) - { - try - { - FileSystemWatcher watcher = new FileSystemWatcher(@d.Name, System.IO.Path.GetFileName(tfile)); - watcher.BeginInit(); - watcher.IncludeSubdirectories = true; - watcher.EnableRaisingEvents = true; - watcher.Created += del; - watcher.EndInit(); - _temporaryWatcher.Add(watcher); - } - catch (Exception e) - { - Log.info(string.Format("Cannot watch drive {0}", d), e); - } - } - } - return tfile; - } - - private DataObject View_HostDrag(ObjectListView list) - { - DataObject data = new DataObject(DataFormats.FileDrop, - new[] - { - CreateAndWatchTemporaryFile(delegate(object sender, FileSystemEventArgs args) - { - Invoke(delegate - { - _dropFolder = System.IO.Path.GetDirectoryName(args.FullPath); - foreach (Host host in - View.SelectedBookmarks) - { - string filename = BookmarkNameProvider.toString(host) + ".duck"; - foreach (char c in - System.IO.Path.GetInvalidFileNameChars()) - { - filename = filename.Replace(c.ToString(), String.Empty); - } - - Local file = LocalFactory.get(_dropFolder, filename); - HostWriterFactory.get().write(host, file); - } - }); - }) - }); - return data; - } - - private void View_BrowserModelCanDrop(ModelDropEventArgs args) - { - if (IsMounted()) - { - Path destination; - switch (args.DropTargetLocation) - { - case DropTargetLocation.Item: - destination = (Path) args.DropTargetItem.RowObject; - if (!destination.isDirectory()) - { - //dragging over file - destination = destination.getParent(); - } - break; - case DropTargetLocation.Background: - destination = Workdir; - break; - default: - args.Effect = DragDropEffects.None; - args.DropTargetLocation = DropTargetLocation.None; - return; - } - Touch feature = (Touch) Session.getFeature(typeof (Touch)); - if (!feature.isSupported(destination)) - { - args.Effect = DragDropEffects.None; - args.DropTargetLocation = DropTargetLocation.None; - return; - } - foreach (Path sourcePath in args.SourceModels) - { - if (args.ListView == args.SourceListView) - { - // Use drag action from user - } - else - { - // If copying between sessions is supported - args.Effect = DragDropEffects.Copy; - } - if (sourcePath.isDirectory() && sourcePath.equals(destination)) - { - // Do not allow dragging onto myself. - args.Effect = DragDropEffects.None; - args.DropTargetLocation = DropTargetLocation.None; - return; - } - if (sourcePath.isDirectory() && destination.isChild(sourcePath)) - { - // Do not allow dragging a directory into its own containing items - args.Effect = DragDropEffects.None; - args.DropTargetLocation = DropTargetLocation.None; - return; - } - if (sourcePath.isFile() && sourcePath.getParent().equals(destination)) - { - // Moving file to the same destination makes no sense - args.Effect = DragDropEffects.None; - args.DropTargetLocation = DropTargetLocation.None; - return; - } - } - if (Workdir == destination) - { - args.DropTargetLocation = DropTargetLocation.Background; - } - else - { - args.DropTargetItem = args.ListView.ModelToItem(destination); - } - } - } - - /// - /// A file dragged within the browser has been received - /// - /// - private void View_BrowserModelDropped(ModelDropEventArgs dropargs) - { - Path destination; - switch (dropargs.DropTargetLocation) - { - case DropTargetLocation.Item: - destination = (Path) dropargs.DropTargetItem.RowObject; - break; - case DropTargetLocation.Background: - destination = Workdir; - break; - default: - destination = null; - break; - } - if (null != destination) - { - IDictionary files = new Dictionary(); - foreach (Path next in dropargs.SourceModels) - { - Path renamed = new Path(destination, next.getName(), next.getType()); - files.Add(next, renamed); - } - if (files.Count > 0) - { - if (dropargs.Effect == DragDropEffects.Copy) - { - foreach (BrowserController controller in MainController.Browsers) - { - // Find source browser - if (controller.View.Browser.Equals(dropargs.SourceListView)) - { - controller.transfer( - new CopyTransfer(controller.Session.getHost(), Session.getHost(), - Utils.ConvertToJavaMap(files)), new List(files.Values), false); - break; - } - } - } - if (dropargs.Effect == DragDropEffects.Move) - { - // The file should be renamed - RenamePaths(files); - } - } - } - } - - private void View_Download() - { - Download(SelectedPaths, new DownloadDirectoryFinder().find(Session.getHost())); - } - - private bool View_ValidateRevertFile() - { - if (IsMounted() && SelectedPaths.Count == 1) - { - return Session.getFeature(typeof (Versioning)) != null; - } - return false; - } - - private void View_RevertFile() - { - RevertPaths(SelectedPaths); - } - - private void RevertPaths(IList files) - { - Background(new RevertAction(this, files)); - } - - private void View_ToggleBookmarks() - { - if (View.CurrentView == BrowserView.File) - { - View.CurrentView = _lastBookmarkView; - } - else - { - _lastBookmarkView = View.CurrentView; - View.CurrentView = BrowserView.File; - } - } - - private bool View_ValidateSearchField() - { - return IsMounted() || View.CurrentView != BrowserView.File; - } - - private bool View_ValidatePathsCombobox() - { - return IsMounted(); - } - - private void View_ItemsChanged() - { - SetStatus(); - } - - private void View_Certificate() - { - if (Session is SSLSession) - { - SSLSession secured = (SSLSession) Session; - List certificates = secured.getAcceptedIssuers(); - CertificateStoreFactory.get().display(certificates); - } - } - - private void View_ClearHistory() - { - HistoryCollection.defaultCollection().clear(); - } - - private List View_GetBonjourHosts() - { - List b = new List(); - foreach (Host h in RendezvousCollection.defaultCollection()) - { - b.Add(h); - } - return b; - } - - private List View_GetHistory() - { - List b = new List(); - foreach (Host h in HistoryCollection.defaultCollection()) - { - b.Add(h); - } - return b; - } - - private List View_GetBookmarks() - { - List b = new List(); - foreach (Host h in BookmarkCollection.defaultCollection()) - { - b.Add(h); - } - return b; - } - - private void PopulateEncodings() - { - List list = new List(); - list.AddRange(new DefaultCharsetProvider().availableCharsets()); - View.PopulateEncodings(list); - View.SelectedEncoding = PreferencesFactory.get().getProperty("browser.charset.encoding"); - } - - private void View_EncodingChanged(object sender, EncodingChangedArgs e) - { - string encoding = e.Encoding; - if (Utils.IsBlank(encoding)) - { - return; - } - View.SelectedEncoding = encoding; - if (IsMounted()) - { - if (Session.getEncoding().Equals(encoding)) - { - return; - } - Session.getHost().setEncoding(encoding); - Mount(Session.getHost()); - } - } - - private void View_ConnectBookmark(object sender, ConnectBookmarkArgs connectBookmarkArgs) - { - Mount(connectBookmarkArgs.Bookmark); - } - - private bool View_ValidateConnectBookmark() - { - return View.SelectedBookmarks.Count == 1; - } - - private bool View_ValidateDeleteBookmark() - { - return _bookmarkModel.Source.allowsDelete() && View.SelectedBookmarks.Count > 0; - } - - private bool View_ValidateEditBookmark() - { - return _bookmarkModel.Source.allowsEdit() && View.SelectedBookmarks.Count == 1; - } - - private bool View_ValidateNewBookmark() - { - return _bookmarkModel.Source.allowsAdd(); - } - - private void View_ChangeBrowserView(object sender, ChangeBrowserViewArgs e) - { - ToggleView(e.View); - } - - private void View_EditBookmark() - { - if (View.SelectedBookmarks.Count == 1) - { - BookmarkController.Factory.Create(View.SelectedBookmark).View.Show(View); - } - } - - private void View_NewBookmark() - { - Host bookmark; - if (IsMounted()) - { - Path selected = SelectedPath; - if (null == selected || !selected.isDirectory()) - { - selected = Workdir; - } - bookmark = new HostDictionary().deserialize(Session.getHost().serialize(SerializerFactory.get())); - bookmark.setUuid(null); - bookmark.setDefaultPath(selected.getAbsolute()); - } - else - { - bookmark = - new Host( - ProtocolFactory.forName(PreferencesFactory.get().getProperty("connection.protocol.default")), - PreferencesFactory.get().getProperty("connection.hostname.default"), - PreferencesFactory.get().getInteger("connection.port.default")); - } - ToggleView(BrowserView.Bookmark); - AddBookmark(bookmark); - } - - public void AddBookmark(Host item) - { - AddBookmark(item, -1); - } - - private void AddBookmark(Host item, int index) - { - _bookmarkModel.Filter = null; - if (index != -1) - { - _bookmarkModel.Source.add(index, item); - } - else - { - _bookmarkModel.Source.add(item); - } - View.SelectBookmark(item); - View.EnsureBookmarkVisible(item); - BookmarkController.Factory.Create(item).View.Show(View); - } - - private void View_DeleteBookmark() - { - List selected = View.SelectedBookmarks; - StringBuilder alertText = new StringBuilder(); - int i = 0; - foreach (Host host in selected) - { - if (i > 0) - { - alertText.Append("\n"); - } - alertText.Append(Character.toString('\u2022')).Append(" ").Append(BookmarkNameProvider.toString(host)); - i++; - if (i > 10) - { - break; - } - } - DialogResult result = QuestionBox(LocaleFactory.localizedString("Delete Bookmark"), - LocaleFactory.localizedString("Do you want to delete the selected bookmark?"), alertText.ToString(), - String.Format("{0}", LocaleFactory.localizedString("Delete")), true); - if (result == DialogResult.OK) - { - _bookmarkModel.Source.removeAll(Utils.ConvertToJavaList(selected)); - } - } - - public override bool ViewShouldClose() - { - return Unmount(); - } - - private void View_OpenUrl() - { - DescriptiveUrlBag list; - if (SelectedPaths.Count == 1) - { - list = ((UrlProvider) Session.getFeature(typeof (UrlProvider))).toUrl(SelectedPath); - } - else - { - list = ((UrlProvider) Session.getFeature(typeof (UrlProvider))).toUrl(Workdir); - } - if (!list.isEmpty()) - { - BrowserLauncherFactory.get().open(list.find(DescriptiveUrl.Type.http).getUrl()); - } - } - - private void View_SearchFieldChanged() - { - if (View.CurrentView == BrowserView.File) - { - SetPathFilter(View.SearchString); - } - else - { - SetBookmarkFilter(View.SearchString); - } - } - - private void SetBookmarkFilter(string searchString) - { - if (Utils.IsBlank(searchString)) - { - View.SearchString = String.Empty; - _bookmarkModel.Filter = null; - } - else - { - _bookmarkModel.Filter = new BookmarkFilter(searchString); - } - ReloadBookmarks(); - } - - private bool View_ValidateDisconnect() - { - // disconnect/stop button update - View.ActivityRunning = isActivityRunning(); - if (!IsConnected()) - { - return isActivityRunning(); - } - return IsConnected(); - } - - private bool View_ValidateStop() - { - return isActivityRunning(); - } - - private bool View_ValidateSendCustomCommand() - { - return IsMounted() && Session.getFeature(typeof (Command)) != null; - } - - private bool View_ValidateFolderInside() - { - return IsMounted() && SelectedPaths.Count > 0; - } - - private bool View_ValidateFolderUp() - { - return IsMounted() && !Workdir.isRoot(); - } - - private bool View_ValidateHistoryForward() - { - return IsMounted() && _navigation.getForward().size() > 0; - } - - private bool View_ValidateHistoryBack() - { - return IsMounted() && _navigation.getBack().size() > 1; - } - - private bool View_ValidateGotoFolder() - { - return IsMounted(); - } - - private bool View_ValidateRefresh() - { - return IsMounted(); - } - - private void View_Disconnect() - { - if (isActivityRunning()) - { - // Remove all pending actions) - foreach (BackgroundAction action in getActions().toArray(new BackgroundAction[getActions().size()])) - { - action.cancel(); - } - } - CallbackDelegate run = delegate - { - if (PreferencesFactory.get().getBoolean("browser.disconnect.bookmarks.show")) - { - ToggleView(BrowserView.Bookmark); - } - else - { - ToggleView(BrowserView.File); - } - }; - Disconnect(run); - } - - /** - * Unmount this session - */ - - private void Disconnect(CallbackDelegate runnable) - { - InfoController infoController = _inspector; - if (infoController != null) - { - infoController.View.Close(); - } - if (HasSession()) - { - Background(new DisconnectAction(this, runnable)); - } - else - { - runnable(); - } - } - - private void View_SendCustomCommand() - { - new CommandController(this, Session).View.ShowDialog(); - } - - private void View_Search() - { - View.StartSearch(); - } - - private void View_FolderInside() - { - Path selected = SelectedPath; - if (null == selected) - { - return; - } - if (selected.isDirectory()) - { - SetWorkdir(selected); - } - else if (selected.isFile() || View.SelectedPaths.Count > 1) - { - if (PreferencesFactory.get().getBoolean("browser.doubleclick.edit")) - { - View_EditEvent(null); - } - else - { - View_Download(); - } - } - } - - public void Download(IList downloads, Local downloadFolder) - { - if (downloads.Count > 0) - { - IList items = new List(); - foreach (Path selected in downloads) - { - items.Add(new TransferItem(selected, LocalFactory.get(downloadFolder, selected.getName()))); - } - Transfer q = new DownloadTransfer(Session.getHost(), Utils.ConvertToJavaList(items)); - transfer(q, downloads); - } - } - - private void View_GotoFolder() - { - GotoController gc = new GotoController(ObjectFactory.GetInstance(), this); - gc.Show(); - } - - private void View_RefreshBrowser() - { - if (IsMounted()) - { - _cache.invalidate(Workdir); - foreach (Path path in View.VisiblePaths) - { - if (null == path) continue; - _cache.invalidate(path); - } - ReloadData(true); - } - } - - private bool View_ValidateTextEncoding() - { - return IsMounted() && !isActivityRunning(); - } - - private void View_ToggleLogDrawer() - { - View.LogDrawerVisible = !View.LogDrawerVisible; - PreferencesFactory.get().setProperty("browser.transcript.open", View.LogDrawerVisible); - } - - private void View_ShowHiddenFiles() - { - ShowHiddenFiles = !ShowHiddenFiles; - if (IsMounted()) - { - ReloadData(true); - } - } - - private void View_ToggleToolbar() - { - View.ToolbarVisible = !View.ToolbarVisible; - PreferencesFactory.get().setProperty("browser.toolbar", View.ToolbarVisible); - } - - private bool View_ValidatePaste() - { - return IsBrowser() && IsMounted() && !_pasteboard.isEmpty(); - } - - private void View_Paste() - { - IDictionary files = new Dictionary(); - Path parent = Workdir; - for (int i = 0; i < _pasteboard.size(); i++) - { - Path next = (Path) _pasteboard.get(i); - Path renamed = new Path(parent, next.getName(), next.getType()); - files.Add(next, renamed); - } - _pasteboard.clear(); - if (_pasteboard.isCut()) - { - RenamePaths(files); - } - if (_pasteboard.isCopy()) - { - DuplicatePaths(files); - } - } - - private bool View_ValidateCopy() - { - return IsBrowser() && IsMounted() && SelectedPaths.Count > 0; - } - - private void View_Copy() - { - _pasteboard.clear(); - _pasteboard.setCopy(true); - foreach (Path p in SelectedPaths) - { - // Writing data for private use when the item gets dragged to the transfer queue. - _pasteboard.add(p); - } - } - - private bool View_ValidateCut() - { - return IsBrowser() && IsMounted() && SelectedPaths.Count > 0; - } - - private void View_Cut() - { - _pasteboard.clear(); - _pasteboard.setCut(true); - foreach (Path s in SelectedPaths) - { - // Writing data for private use when the item gets dragged to the transfer queue. - _pasteboard.add(s); - } - } - - private void View_ShowPreferences() - { - PreferencesController.Instance.View.Show(); - } - - private bool View_ContextMenuEnabled() - { - //context menu is always enabled - return true; - } - - private void View_Exit() - { - MainController.Exit(); - } - - private List View_GetArchives() - { - List result = new List(); - Archive[] archives = Archive.getKnownArchives(); - foreach (Archive archive in archives) - { - List selected = Utils.ConvertToJavaList(SelectedPaths, null); - result.Add(archive.getTitle(selected)); - } - return result; - } - - private bool View_ValidateExpandArchive() - { - if (IsMounted()) - { - if (Session.getFeature(typeof (Compress)) == null) - { - return false; - } - if (SelectedPaths.Count > 0) - { - foreach (Path selected in SelectedPaths) - { - if (selected.isDirectory()) - { - return false; - } - if (!Archive.isArchive(selected.getName())) - { - return false; - } - } - return true; - } - } - return false; - } - - private void View_ExpandArchive() - { - List expanded = new List(); - foreach (Path selected in SelectedPaths) - { - Archive archive = Archive.forName(selected.getName()); - if (null == archive) - { - continue; - } - if (CheckOverwrite(Utils.ConvertFromJavaList(archive.getExpanded(new ArrayList {selected})))) - { - background(new UnarchiveAction(this, archive, selected, expanded)); - } - } - } - - private bool View_ValidateCreateArchive() - { - if (IsMounted()) - { - if (Session.getFeature(typeof (Compress)) == null) - { - return false; - } - if (SelectedPaths.Count > 0) - { - foreach (Path selected in SelectedPaths) - { - if (selected.isFile() && Archive.isArchive(selected.getName())) - { - // At least one file selected is already an archive. No distinct action possible - return false; - } - } - return true; - } - } - return false; - } - - private void View_CreateArchive(object sender, CreateArchiveEventArgs createArchiveEventArgs) - { - Archive archive = Archive.forName(createArchiveEventArgs.ArchiveName); - IList selected = SelectedPaths; - if (CheckOverwrite(new List {archive.getArchive(Utils.ConvertToJavaList(selected))})) - { - background(new CreateArchiveAction(this, archive, selected)); - } - } - - private bool View_ValidateDelete() - { - return IsMounted() && SelectedPaths.Count > 0; - } - - private bool View_ValidateSynchronize() - { - return IsMounted(); - } - - private void View_Synchronize() - { - Path selected; - if (SelectedPaths.Count == 1 && SelectedPath.isDirectory()) - { - selected = SelectedPath; - } - else - { - selected = Workdir; - } - string folder = - View.SynchronizeDialog( - String.Format(LocaleFactory.localizedString("Synchronize {0} with"), selected.getName()), - new UploadDirectoryFinder().find(Session.getHost()), null); - if (null != folder) - { - Local target = LocalFactory.get(folder); - new UploadDirectoryFinder().save(Session.getHost(), target.getParent()); - transfer(new SyncTransfer(Session.getHost(), new TransferItem(selected, target))); - } - } - - private bool View_ValidateNewFile() - { - return IsMounted() && - ((Touch) Session.getFeature(typeof (Touch))).isSupported( - new UploadTargetFinder(Workdir).find(SelectedPath)); - } - - private bool View_ValidateUpload() - { - return IsMounted() && - ((Touch) Session.getFeature(typeof (Touch))).isSupported( - new UploadTargetFinder(Workdir).find(SelectedPath)); - } - - private void View_Upload() - { - // Due to the limited functionality of the OpenFileDialog class it is - // currently not possible to select a folder. May be we should provide - // a second menu item which allows to select a folder to upload - string[] paths = View.UploadDialog(null); - if (null == paths || paths.Length == 0) return; - - Path destination = new UploadTargetFinder(Workdir).find(SelectedPath); - List uploads = Utils.ConvertToJavaList(paths, delegate(string path) - { - Local local = LocalFactory.get(path); - new UploadDirectoryFinder().save(Session.getHost(), local.getParent()); - return - new TransferItem( - new Path(destination, local.getName(), - local.isDirectory() - ? EnumSet.of(AbstractPath.Type.directory) - : EnumSet.of(AbstractPath.Type.file)), local); - }); - transfer(new UploadTransfer(Session.getHost(), uploads)); - } - - private void View_DownloadTo() - { - string folder = View.DownloadToDialog(LocaleFactory.localizedString("Download To…"), - new DownloadDirectoryFinder().find(Session.getHost()), null); - if (null != folder && SelectedPaths.Count > 0) - { - Local target = LocalFactory.get(folder); - new DownloadDirectoryFinder().save(Session.getHost(), target); - IList downloads = new List(); - foreach (Path file in SelectedPaths) - { - downloads.Add(new TransferItem(file, LocalFactory.get(target, file.getName()))); - } - transfer(new DownloadTransfer(Session.getHost(), Utils.ConvertToJavaList(downloads)), SelectedPaths); - } - } - - private bool View_ValidateDownloadAs() - { - return IsMounted() && SelectedPaths.Count == 1; - } - - private void View_DownloadAs() - { - string filename = View.DownloadAsDialog(new DownloadDirectoryFinder().find(Session.getHost()), - SelectedPath.getName()); - if (null != filename) - { - Local target = LocalFactory.get(filename); - Path selected = SelectedPath; - new DownloadDirectoryFinder().save(Session.getHost(), target.getParent()); - IList downloads = new List(); - downloads.Add(new TransferItem(selected, target)); - List seletionList = new List(); - seletionList.Add(selected); - transfer(new DownloadTransfer(Session.getHost(), Utils.ConvertToJavaList(downloads)), seletionList); - } - } - - private bool View_ValidateDownload() - { - return IsMounted() && SelectedPaths.Count > 0; - } - - private bool View_ValidateShowInspector() - { - return IsMounted() && SelectedPaths.Count > 0; - } - - private bool View_ValidateOpenWebUrl() - { - return IsMounted(); - } - - private bool View_ValidateEditWith() - { - if (IsMounted() && SelectedPaths.Count > 0) - { - foreach (Path selected in SelectedPaths) - { - if (!IsEditable(selected)) - { - return false; - } - } - return true; - } - return false; - } - - /// - /// True if the selected path is editable (not a directory) - private bool IsEditable(Path selected) - { - if (Session.getHost().getCredentials().isAnonymousLogin()) - { - return false; - } - return selected.isFile(); - } - - private bool View_ValidateDuplicateFile() - { - return IsMounted() && SelectedPaths.Count == 1; - } - - private bool View_ValidateRenameFile() - { - if (IsMounted() && SelectedPaths.Count == 1) - { - if (null == SelectedPath) - { - return false; - } - return ((Move) Session.getFeature(typeof (Move))).isSupported(SelectedPath); - } - return false; - } - - private void View_NewDownload() - { - throw new NotImplementedException(); - } - - private void View_OpenConnection() - { - ConnectionController c = ConnectionController.Instance(this); - DialogResult result = c.View.ShowDialog(View); - if (result == DialogResult.OK) - { - Mount(c.ConfiguredHost); - } - } - - private bool View_ValidateNewFolder() - { - return IsMounted(); - } - - private void View_DuplicateFile() - { - DuplicateFileController dc = - new DuplicateFileController(ObjectFactory.GetInstance(), this); - dc.Show(); - } - - private void View_NewFile() - { - CreateFileController fc = new CreateFileController(ObjectFactory.GetInstance(), this); - fc.Show(); - } - - private void View_Delete() - { - DeletePaths(SelectedPaths); - } - - private void View_NewFolder() - { - Location feature = (Location) Session.getFeature(typeof (Location)); - FolderController fc = new FolderController(ObjectFactory.GetInstance(), this, - feature != null - ? (IList) Utils.ConvertFromJavaList(feature.getLocations()) - : new List()); - fc.Show(); - } - - private bool View_RenameFile(Path path, string newName) - { - if (!String.IsNullOrEmpty(newName) && !newName.Equals(path.getName())) - { - Path renamed = new Path(path.getParent(), newName, path.getType()); - RenamePath(path, renamed); - } - return false; - } - - private DataObject View_BrowserDrag(ObjectListView listView) - { - DataObject data = new DataObject(DataFormats.FileDrop, - new[] - { - CreateAndWatchTemporaryFile(delegate(object sender, FileSystemEventArgs args) - { - _dropFolder = System.IO.Path.GetDirectoryName(args.FullPath); - Invoke(delegate { Download(SelectedPaths, LocalFactory.get(_dropFolder)); }); - }) - }); - return data; - } - - private void RemoveTemporaryFilesystemWatcher() - { - BeginInvoke(delegate - { - foreach (FileSystemWatcher watcher in _temporaryWatcher) - { - watcher.Dispose(); - } - _temporaryWatcher.Clear(); - }); - } - - private void RemoveTemporaryFiles(DataObject data) - { - if (data.ContainsFileDropList()) - { - foreach (string tmpFile in data.GetFileDropList()) - { - try - { - if (File.Exists(tmpFile)) - { - File.Delete(tmpFile); - } - if (null != _dropFolder) - { - string tmpDestFile = System.IO.Path.Combine(_dropFolder, System.IO.Path.GetFileName(tmpFile)); - if (File.Exists(tmpDestFile)) - { - File.Delete(tmpDestFile); - } - } - } - catch (IOException e) - { - Log.error("Could not remove temporary files.", e); - } - } - } - } - - private void View_BrowserEndDrag(DataObject data) - { - RemoveTemporaryFiles(data); - RemoveTemporaryFilesystemWatcher(); - } - - private void View_BrowserDropped(OlvDropEventArgs e) - { - if (IsMounted() && e.DataObject is DataObject && ((DataObject) e.DataObject).ContainsFileDropList()) - { - Path destination; - switch (e.DropTargetLocation) - { - case DropTargetLocation.Item: - destination = (Path) e.DropTargetItem.RowObject; - break; - case DropTargetLocation.Background: - destination = Workdir; - break; - default: - destination = null; - break; - } - - StringCollection dropList = (e.DataObject as DataObject).GetFileDropList(); - if (dropList.Count > 0) - { - IList roots = new List(); - foreach (string file in dropList) - { - Local local = LocalFactory.get(file); - roots.Add( - new TransferItem( - new Path(destination, local.getName(), - local.isDirectory() - ? EnumSet.of(AbstractPath.Type.directory) - : EnumSet.of(AbstractPath.Type.file)), local)); - } - UploadDroppedPath(roots, destination); - } - } - } - - public void UploadDroppedPath(IList roots, Path destination) - { - if (IsMounted()) - { - UploadTransfer q = new UploadTransfer(Session.getHost(), Utils.ConvertToJavaList(roots)); - if (q.getRoots().size() > 0) - { - transfer(q); - } - } - } - - /// - /// Check if we accept drag operation from an external program - /// - /// - private void View_BrowserCanDrop(OlvDropEventArgs args) - { - Log.trace("Entering View_BrowserCanDrop with " + args.Effect); - if (IsMounted() && !(args.DataObject is OLVDataObject)) - { - if (args.DataObject is DataObject && ((DataObject) args.DataObject).ContainsFileDropList()) - { - Path destination; - switch (args.DropTargetLocation) - { - case DropTargetLocation.Item: - destination = (Path) args.DropTargetItem.RowObject; - if (!destination.isDirectory()) - { - //dragging over file - destination = destination.getParent(); - } - break; - case DropTargetLocation.Background: - destination = Workdir; - break; - default: - args.Effect = DragDropEffects.None; - args.DropTargetLocation = DropTargetLocation.None; - return; - } - Touch feature = (Touch) Session.getFeature(typeof (Touch)); - if (!feature.isSupported(destination)) - { - Log.trace("Session does not allow file creation"); - args.Effect = DragDropEffects.None; - args.DropTargetLocation = DropTargetLocation.None; - return; - } - Log.trace("Setting effect to copy"); - args.Effect = DragDropEffects.Copy; - if (Workdir == destination) - { - args.DropTargetLocation = DropTargetLocation.Background; - } - else - { - args.DropTargetItem = args.ListView.ModelToItem(destination); - } - (args.DataObject as DataObject).SetDropDescription((DropImageType) args.Effect, "Copy to %1", - destination.getName()); - } - } - } - - private void View_ShowTransfers() - { - TransferController.Instance.View.Show(); - } - - private void View_ShowInspector() - { - IList selected = SelectedPaths; - if (selected.Count > 0) - { - if (PreferencesFactory.get().getBoolean("browser.info.inspector")) - { - if (null == _inspector || _inspector.View.IsDisposed) - { - _inspector = InfoController.Factory.Create(this, selected); - } - else - { - _inspector.Files = selected; - } - _inspector.View.Show(View); - } - else - { - InfoController c = InfoController.Factory.Create(this, selected); - c.View.Show(View); - } - } - } - - private void View_EditEvent(string exe) - { - foreach (Path selected in SelectedPaths) - { - Editor editor; - if (Utils.IsBlank(exe)) - { - editor = EditorFactory.instance().create(this, Session, selected); - } - else - { - editor = EditorFactory.instance().create(this, Session, new Application(exe, null), selected); - } - this.edit(editor); - } - } - - public void edit(Editor editor) - { - this.background(new WorkerBackgroundAction(this, Session, - editor.open(new DisabledApplicationQuitCallback(), new DisabledTransferErrorCallback(), - new DefaultEditorListener(this, Session, editor)))); - } - - private void UpdateEditIcon() - { - Path selected = SelectedPath; - if (null != selected) - { - if (IsEditable(selected)) - { - Application app = EditorFactory.instance().getEditor(selected.getName()); - string editCommand = app != null ? app.getIdentifier() : null; - if (Utils.IsNotBlank(editCommand)) - { - try - { - View.EditIcon = - IconCache.Instance.GetFileIconFromExecutable( - WindowsApplicationLauncher.GetExecutableCommand(editCommand), - IconCache.IconSize.Large).ToBitmap(); - return; - } - catch (ObjectDisposedException) - { - } - } - } - } - View.EditIcon = IconCache.Instance.IconForName("pencil", 32); - } - - private void UpdateOpenIcon() - { - View.OpenIcon = IconCache.Instance.GetDefaultBrowserIcon(); - } - - private void View_BrowserSelectionChanged() - { - UpdateEditIcon(); - - // update inspector content if available - IList selectedPaths = SelectedPaths; - - if (PreferencesFactory.get().getBoolean("browser.info.inspector")) - { - if (_inspector != null && _inspector.Visible) - { - if (selectedPaths.Count > 0) - { - _inspector.Files = selectedPaths; - } - } - } - } - - private void View_PathSelectionChanged() - { - string selected = View.SelectedComboboxPath; - if (selected != null) - { - Path workdir = Workdir; - Path p = workdir; - while (!p.getAbsolute().Equals(selected)) - { - p = p.getParent(); - } - SetWorkdir(p); - if (workdir.getParent().equals(p)) - { - SetWorkdir(p, workdir); - } - else - { - SetWorkdir(p); - } - } - } - - private void View_FolderUp() - { - Path previous = Workdir; - SetWorkdir(previous.getParent(), previous); - } - - private void View_HistoryBack() - { - Path selected = _navigation.back(); - if (selected != null) - { - Path previous = Workdir; - if (previous.getParent().equals(selected)) - { - SetWorkdir(selected, previous); - } - else - { - SetWorkdir(selected); - } - } - } - - private void View_HistoryForward() - { - Path selected = _navigation.forward(); - if (selected != null) - { - SetWorkdir(selected); - } - } - - private void View_BrowserDoubleClicked() - { - View_FolderInside(); - } - - private void View_QuickConnect() - { - if (string.IsNullOrEmpty(View.QuickConnectValue)) - { - return; - } - string input = View.QuickConnectValue.Trim(); - - // First look for equivalent bookmarks - BookmarkCollection bookmarkCollection = BookmarkCollection.defaultCollection(); - foreach (Host host in bookmarkCollection) - { - if (BookmarkNameProvider.toString(host).Equals(input)) - { - Mount(host); - return; - } - } - Mount(HostParser.parse(input)); - } - - /// - /// Open a new browser with the current selected folder as the working directory - /// - private void View_NewBrowser(object sender, NewBrowserEventArgs newBrowserEventArgs) - { - if (newBrowserEventArgs.SelectedAsWorkingDir) - { - Path selected = SelectedPath; - if (null == selected || !selected.isDirectory()) - { - selected = Workdir; - } - BrowserController c = MainController.NewBrowser(true); - - Host host = new HostDictionary().deserialize(Session.getHost().serialize(SerializerFactory.get())); - host.setDefaultPath(selected.getAbsolute()); - c.Mount(host); - } - else - { - BrowserController c = MainController.NewBrowser(true); - MainController.OpenDefaultBookmark(c); - } - } - - protected void transfer(Transfer transfer) - { - this.transfer(transfer, Utils.ConvertFromJavaList(transfer.getRoots(), delegate(object o) - { - TransferItem item = (TransferItem) o; - return item.remote; - })); - } - - /// - /// Transfers the files either using the queue or using - /// the browser session if #connection.pool.max is 1 - /// - /// - protected void transfer(Transfer transfer, IList selected) - { - this.transfer(transfer, selected, Session.getTransferType().equals(Host.TransferType.browser)); - } - - /// - /// - /// - /// - /// - /// - public void transfer(Transfer transfer, IList selected, bool browser) - { - TransferCallback callback = new ReloadTransferCallback(this, selected); - if (browser) - { - Background(new CallbackTransferBackgroundAction(callback, this, new ProgressTransferAdapter(this), this, - this, transfer, new TransferOptions())); - } - else - { - TransferController.Instance.StartTransfer(transfer, new TransferOptions(), callback); - } - } - - /// - /// - /// - /// true if a connection is being opened or is already initialized - public bool HasSession() - { - return Session != null; - } - - public bool IsMounted() - { - return HasSession() && Workdir != null; - } - - /// - /// - /// - /// All selected files should be reselected after reloading the view - public void ReloadData(bool preserveSelection) - { - if (preserveSelection) - { - //Remember the previously selected paths - ReloadData(SelectedPaths); - } - else - { - ReloadData(new List()); - } - } - - public void RefreshParentPath(Path changed) - { - RefreshParentPaths(new Collection {changed}); - } - - public void RefreshParentPaths(IList changed) - { - RefreshParentPaths(changed, new List()); - } - - public override void start(BackgroundAction action) - { - Invoke(delegate { View.StartActivityAnimation(); }); - } - - public override void stop(BackgroundAction action) - { - Invoke(delegate { View.StopActivityAnimation(); }); - } - - public void RefreshParentPaths(IList changed, IList selected) - { - bool rootRefreshed = false; //prevent multiple root updates - foreach (Path path in changed) - { - _cache.invalidate(path.getParent()); - if (Workdir.equals(path.getParent())) - { - if (rootRefreshed) - { - continue; - } - View.SetBrowserModel(_browserModel.ChildrenGetter(Workdir)); - rootRefreshed = true; - } - else - { - View.RefreshBrowserObject(path.getParent()); - } - } - SelectedPaths = selected; - } - - public void ReloadData(Path directory, bool preserveSelection) - { - if (Workdir.equals(directory)) - { - ReloadData(true); - } - else - { - View.RefreshBrowserObject(directory); - } - } - - protected void ReloadData(IList selected) - { - if (null != Workdir) - { - IEnumerable children = _browserModel.ChildrenGetter(Workdir); - //clear selection before resetting model. Otherwise we have weird selection effects. - SelectedPaths = new List(); - int savedIndex = View.TopItemIndex; - View.BeginBrowserUpdate(); - View.SetBrowserModel(null); // #7670 - View.SetBrowserModel(children); - View.TopItemIndex = savedIndex; - SelectedPaths = selected; - List toUpdate = new List(); - foreach (Path path in View.VisiblePaths) - { - if (path.isDirectory()) - { - toUpdate.Add(path); - } - } - View.RefreshBrowserObjects(toUpdate); - View.EndBrowserUpdate(); - } - else - { - View.SetBrowserModel(null); - } - SelectedPaths = selected; - SetStatus(); - } - - public void SetWorkdir(Path directory) - { - SetWorkdir(directory, new List()); - } - - public void SetWorkdir(Path directory, Path selected) - { - SetWorkdir(directory, new List {selected}); - } - - /// - /// Sets the current working directory. This will udpate the path selection dropdown button - /// and also add this path to the browsing history. If the path cannot be a working directory (e.g. permission - /// issues trying to enter the directory), reloading the browser view is canceled and the working directory - /// not changed. - /// - /// The new working directory to display or null to detach any working directory from the browser - /// - public void SetWorkdir(Path directory, List selected) - { - Workdir = directory; - // Remove any custom file filter - SetPathFilter(null); - // Change to last selected browser view - ReloadData(Workdir != null ? selected : new List()); - SetNavigation(IsMounted()); - } - - private void SetNavigation(bool enabled) - { - View.SearchEnabled = enabled; - if (!enabled) - { - View.SearchString = String.Empty; - } - List paths = new List(); - if (enabled) - { - // Update the current working directory - _navigation.add(Workdir); - Path p = Workdir; - do - { - paths.Add(p.getAbsolute()); - p = p.getParent(); - } while (!p.isRoot()); - View.PopulatePaths(paths); - } - View.ComboboxPathEnabled = enabled; - View.HistoryBackEnabled = enabled && _navigation.getBack().size() > 1; - View.HistoryForwardEnabled = enabled && _navigation.getForward().size() > 0; - View.ParentPathEnabled = enabled && !Workdir.isRoot(); - } - - public void RefreshObject(Path path, bool preserveSelection) - { - if (preserveSelection) - { - RefreshObject(path, View.SelectedPaths); - } - else - { - RefreshObject(path, new List()); - } - } - - public void RefreshObject(Path path, IList selected) - { - if (Workdir.Equals(path)) - { - View.SetBrowserModel(_browserModel.ChildrenGetter(path)); - } - else - { - if (!path.isDirectory()) - { - View.RefreshBrowserObject(path.getParent()); - } - else - { - View.RefreshBrowserObject(path); - } - } - SelectedPaths = selected; - SetStatus(); - } - - public void Mount(Host host) - { - if (Log.isDebugEnabled()) - { - Log.debug(string.Format("Mount session for {0}", host)); - } - CallbackDelegate callbackDelegate = delegate - { - // The browser has no session, we are allowed to proceed - // Initialize the browser with the new session attaching all listeners - Session session = Init(host); - background(new MountAction(this, session, host, _limitListener)); - }; - Unmount(callbackDelegate); - } - - /// - /// Initializes a session for the passed host. Setting up the listeners and adding any callback - /// controllers needed for login, trust management and hostkey verification. - /// - /// - /// A session object bound to this browser controller - private Session Init(Host host) - { - Session = SessionFactory.create(host, - new KeychainX509TrustManager(new DefaultTrustManagerHostnameCallback(host)), - new KeychainX509KeyManager()); - SetWorkdir(null); - View.SelectedEncoding = Session.getEncoding(); - View.ClearTranscript(); - _navigation.clear(); - _pasteboard = PathPasteboardFactory.getPasteboard(Session); - return Session; - } - - // some simple caching as _session.isConnected() throws a ConnectionCanceledException if not connected - - /// - /// - /// - /// true if mounted and the connection to the server is alive - public bool IsConnected() - { - if (IsMounted()) - { - return Session.isConnected(); - } - return false; - } - - public static bool ApplicationShouldTerminate() - { - // Determine if there are any open connections - foreach (BrowserController controller in new List(MainController.Browsers)) - { - BrowserController c = controller; - if (!controller.Unmount(delegate(DialogResult result) - { - if (DialogResult.OK == result) - { - c.View.Dispose(); - return true; - } - return false; - }, delegate { })) - { - return false; // Disconnect cancelled - } - } - return true; - } - - public bool Unmount() - { - return Unmount(() => { }); - } - - public bool Unmount(CallbackDelegate disconnected) - { - return Unmount(result => - { - if (DialogResult.OK == result) - { - UnmountImpl(disconnected); - return true; - } - // No unmount yet - return false; - }, disconnected); - } - - /// - /// - /// - /// - /// - /// True if the unmount process is in progress or has been finished, false if cancelled - public bool Unmount(DialogCallbackDelegate unmountImpl, CallbackDelegate disconnected) - { - if (IsConnected() || isActivityRunning()) - { - if (PreferencesFactory.get().getBoolean("browser.disconnect.confirm")) - { - DialogResult result = CommandBox(LocaleFactory.localizedString("Disconnect"), - String.Format(LocaleFactory.localizedString("Disconnect from {0}"), - Session.getHost().getHostname()), - LocaleFactory.localizedString("The connection will be closed."), - String.Format("{0}", LocaleFactory.localizedString("Disconnect")), true, - LocaleFactory.localizedString("Don't ask again", "Configuration"), SysIcons.Question, - delegate(int option, bool verificationChecked) - { - if (verificationChecked) - { - // Never show again. - PreferencesFactory.get().setProperty("browser.disconnect.confirm", false); - } - switch (option) - { - case 0: // Disconnect - unmountImpl(DialogResult.OK); - break; - } - }); - return DialogResult.OK == result; - } - } - UnmountImpl(disconnected); - // Unmount succeeded - return true; - } - - private void UnmountImpl(CallbackDelegate disconnected) - { - CallbackDelegate run = delegate - { - _cache.clear(); - View.WindowTitle = PreferencesFactory.get().getProperty("application.name"); - disconnected(); - }; - - Disconnect(run); - } - - public void SetStatus() - { - BackgroundAction current = getActions().getCurrent(); - message(null != current ? current.getActivity() : null); - } - - public void SetStatus(string label) - { - View.StatusLabel = label; - } - - private void PopulateQuickConnect() - { - List nicknames = new List(); - foreach (Host host in _bookmarkCollection) - { - nicknames.Add(BookmarkNameProvider.toString(host)); - } - View.PopulateQuickConnect(nicknames); - } - - /// - /// - /// - /// The existing file - /// The renamed file - protected internal void RenamePath(Path path, Path renamed) - { - RenamePaths(new Dictionary {{path, renamed}}); - } - - /// - /// - /// - /// - /// A dictionary with the original files as the key and - /// the destination files as the value - /// - protected internal void RenamePaths(IDictionary selected) - { - if (CheckMove(selected)) - { - List changed = new List(); - changed.AddRange(selected.Keys); - changed.AddRange(selected.Values); - MoveAction move = new MoveAction(this, Utils.ConvertToJavaMap(selected), changed); - Background(move); - } - } - - /// - /// Displays a warning dialog about files to be moved - /// - /// The files to check for existence - /// - private bool CheckMove(IDictionary selected) - { - if (PreferencesFactory.get().getBoolean("browser.move.confirm")) - { - StringBuilder alertText = - new StringBuilder(LocaleFactory.localizedString("Do you want to move the selected files?")); - - StringBuilder content = new StringBuilder(); - int i = 0; - bool rename = false; - IEnumerator> enumerator = null; - for (enumerator = selected.GetEnumerator(); i < 10 && enumerator.MoveNext();) - { - KeyValuePair next = enumerator.Current; - if (next.Key.getParent().equals(next.Value.getParent())) - { - rename = true; - } - // u2022 = Bullet - content.Append("\n" + Character.toString('\u2022') + " " + next.Key.getName()); - i++; - } - if (enumerator.MoveNext()) - { - content.Append("\n" + Character.toString('\u2022') + " ...)"); - } - bool result = false; - CommandBox( - rename - ? LocaleFactory.localizedString("Rename", "Transfer") - : LocaleFactory.localizedString("Move", "Transfer"), alertText.ToString(), content.ToString(), - String.Format("{0}", - rename - ? LocaleFactory.localizedString("Rename", "Transfer") - : LocaleFactory.localizedString("Move", "Transfer")), true, - LocaleFactory.localizedString("Don't ask again", "Configuration"), SysIcons.Question, - delegate(int option, bool verificationChecked) - { - if (verificationChecked) - { - // Never show again. - PreferencesFactory.get().setProperty("browser.move.confirm", false); - } - if (option == 0) - { - result = CheckOverwrite(selected.Values); - } - }); - return result; - } - return CheckOverwrite(selected.Values); - } - - /// - /// Recursively deletes the files - /// - /// The files selected in the browser to delete - public void DeletePaths(ICollection selected) - { - ICollection normalized = - Utils.ConvertFromJavaList(PathNormalizer.normalize(Utils.ConvertToJavaList(selected))); - if (normalized.Count == 0) - { - return; - } - - StringBuilder alertText = - new StringBuilder( - LocaleFactory.localizedString("Really delete the following files? This cannot be undone.")); - - StringBuilder content = new StringBuilder(); - int i = 0; - IEnumerator enumerator; - for (enumerator = selected.GetEnumerator(); i < 10 && enumerator.MoveNext();) - { - Path item = enumerator.Current; - if (i > 0) content.AppendLine(); - // u2022 = Bullet - content.Append(Character.toString('\u2022') + " " + item.getName()); - i++; - } - if (enumerator.MoveNext()) - { - content.Append("\n" + Character.toString('\u2022') + " ...)"); - } - DialogResult r = QuestionBox(LocaleFactory.localizedString("Delete"), alertText.ToString(), - content.ToString(), String.Format("{0}", LocaleFactory.localizedString("Delete")), true); - if (r == DialogResult.OK) - { - DeletePathsImpl(normalized); - } - } - - private void DeletePathsImpl(ICollection files) - { - background(new DeleteAction(this, LoginCallbackFactory.get(this), Utils.ConvertToJavaList(files))); - } - - public void SetPathFilter(string searchString) - { - if (Utils.IsBlank(searchString)) - { - View.SearchString = String.Empty; - // Revert to the last used default filter - if (ShowHiddenFiles) - { - FilenameFilter = new NullFilter(); - } - else - { - FilenameFilter = new RegexFilter(); - } - } - else - { - // Setting up a custom filter for the directory listing - FilenameFilter = new CustomPathFilter(searchString); - } - ReloadData(true); - } - - /// - /// Displays a warning dialog about already existing files - /// - /// The files to check for existance - private bool CheckOverwrite(ICollection selected) - { - StringBuilder alertText = - new StringBuilder( - LocaleFactory.localizedString( - "A file with the same name already exists. Do you want to replace the existing file?")); - - StringBuilder content = new StringBuilder(); - int i = 0; - IEnumerator enumerator = null; - bool shouldWarn = false; - for (enumerator = selected.GetEnumerator(); enumerator.MoveNext();) - { - Path item = enumerator.Current; - if (_cache.get(item.getParent()).contains(item)) - { - if (i < 10) - { - // u2022 = Bullet - content.Append("\n" + Character.toString('\u2022') + " " + item.getName()); - } - shouldWarn = true; - } - i++; - } - if (i >= 10) - { - content.Append("\n" + Character.toString('\u2022') + " ...)"); - } - if (shouldWarn) - { - DialogResult r = QuestionBox(LocaleFactory.localizedString("Overwrite"), alertText.ToString(), - content.ToString(), String.Format("{0}", LocaleFactory.localizedString("Overwrite")), true); - return r == DialogResult.OK; - } - else - { - return true; - } - } - - /// - /// - /// - /// The original file to duplicate - /// The destination of the duplicated file - protected internal void DuplicatePath(Path source, Path destination) - { - DuplicatePaths(new Dictionary {{source, destination}}); - } - - /// - /// - /// - /// A dictionary with the original files as the key and the destination files as the value - /// - protected internal void DuplicatePaths(IDictionary selected) - { - if (CheckOverwrite(selected.Values)) - { - CopyTransfer copy = new CopyTransfer(Session.getHost(), Session.getHost(), - Utils.ConvertToJavaMap(selected)); - List changed = new List(); - changed.AddRange(selected.Values); - transfer(copy, changed, true); - } - } - - /// - /// - /// - /// The view to show - public void ToggleView(BrowserView view) - { - Log.debug("ToggleView:" + view); - if (View.CurrentView == view) return; - - SetBookmarkFilter(null); - switch (view) - { - case BrowserView.File: - View.CurrentView = BrowserView.File; - SetPathFilter(null); - ReloadData(true); - break; - case BrowserView.Bookmark: - View.CurrentView = BrowserView.Bookmark; - _bookmarkModel.Source = BookmarkCollection.defaultCollection(); - ReloadBookmarks(); - SelectHost(); - break; - case BrowserView.History: - View.CurrentView = BrowserView.History; - _bookmarkModel.Source = HistoryCollection.defaultCollection(); - ReloadBookmarks(); - SelectHost(); - break; - case BrowserView.Bonjour: - View.CurrentView = BrowserView.Bonjour; - _bookmarkModel.Source = RendezvousCollection.defaultCollection(); - ReloadBookmarks(); - SelectHost(); - break; - } - } - - private void SelectHost() - { - if (IsMounted()) - { - View.SelectBookmark(Session.getHost()); - } - } - - /// - /// Reload bookmarks table from the currently selected model - /// - public void ReloadBookmarks() - { - ReloadBookmarks(null); - } - - /// - /// Reload bookmarks table from the currently selected model - /// - public void ReloadBookmarks(Host selected) - { - //Note: expensive for a big bookmark list (might need a refactoring) - View.SetBookmarkModel(_bookmarkModel.Source, selected); - SetStatus(); - } - - private class BookmarkFilter : HostFilter - { - private readonly string _searchString; - - public BookmarkFilter(String searchString) - { - _searchString = searchString; - } - - public bool accept(Host host) - { - return BookmarkNameProvider.toString(host).ToLower().Contains(_searchString.ToLower()) || - (null == host.getComment() - ? false - : host.getComment().ToLower().Contains(_searchString.ToLower())) || - (null == host.getCredentials().getUsername() - ? false - : host.getCredentials().getUsername().ToLower().Contains(_searchString.ToLower())) || - host.getHostname().ToLower().Contains(_searchString.ToLower()); - } - } - - private class CallbackTransferBackgroundAction : TransferBackgroundAction - { - private readonly TransferCallback _callback; - private readonly Transfer _transfer; - - public CallbackTransferBackgroundAction(TransferCallback callback, BrowserController controller, - TransferListener transferListener, ProgressListener progressListener, - TranscriptListener transcriptListener, Transfer transfer, TransferOptions options) - : base( - controller, controller.Session, controller._cache, transferListener, progressListener, - transcriptListener, transfer, options) - { - _callback = callback; - _transfer = transfer; - } - - public override void finish() - { - if (_transfer.isComplete()) - { - _callback.complete(_transfer); - } - base.finish(); - } - } - - private class CreateArchiveAction : BrowserControllerBackgroundAction - { - private readonly Archive _archive; - private readonly IList _selected; - private readonly List _selectedJava; - - public CreateArchiveAction(BrowserController controller, Archive archive, IList selected) - : base(controller) - { - _archive = archive; - _selectedJava = Utils.ConvertToJavaList(selected); - _selected = selected; - } - - public override object run() - { - ((Compress) BrowserController.Session.getFeature(typeof (Compress))).archive(_archive, - BrowserController.Workdir, _selectedJava, BrowserController, BrowserController); - return true; - } - - public override string getActivity() - { - return _archive.getCompressCommand(BrowserController.Workdir, _selectedJava); - } - - public override void cleanup() - { - base.cleanup(); - BrowserController.RefreshParentPaths(_selected, new List {_archive.getArchive(_selectedJava)}); - } - } - - private class CustomPathFilter : SearchFilter, IModelFilter - { - public CustomPathFilter(String searchString) : base(searchString) - { - } - - public bool Filter(object modelObject) - { - return accept(modelObject); - } - } - - private class DeleteAction : WorkerBackgroundAction - { - public DeleteAction(BrowserController controller, LoginCallback prompt, List files) - : base(controller, controller.Session, new InnerDeleteWorker(controller, prompt, files)) - { - } - - private class InnerDeleteWorker : DeleteWorker - { - private readonly BrowserController _controller; - private readonly List _files; - - public InnerDeleteWorker(BrowserController controller, LoginCallback prompt, List files) - : base(prompt, files, controller) - { - _controller = controller; - _files = files; - } - - public override void cleanup(object result) - { - _controller.RefreshParentPaths((IList) Utils.ConvertFromJavaList((List) result)); - } - } - } - - private class DisconnectAction : WorkerBackgroundAction - { - private readonly BrowserController _controller; - - public DisconnectAction(BrowserController controller, CallbackDelegate callback) - : base(controller, controller.Session, controller.Cache, new InnerDisconnectWorker(controller, callback) - ) - { - _controller = controller; - } - - public override void prepare() - { - if (null == _controller.Session) - { - throw new ConnectionCanceledException(); - } - if (!_controller.Session.isConnected()) - { - throw new ConnectionCanceledException(); - } - base.prepare(); - } - - private class InnerDisconnectWorker : DisconnectWorker - { - private readonly CallbackDelegate _callback; - - public InnerDisconnectWorker(BrowserController controller, CallbackDelegate callback) - : base(controller.Session.getHost()) - { - _callback = callback; - } - - public override void cleanup(object wd) - { - base.cleanup(wd); - _callback(); - } - } - } - - private class MountAction : WorkerBackgroundAction - { - private readonly BrowserController _controller; - private readonly Host _host; - - public MountAction(BrowserController controller, Session session, Host host, ListProgressListener listener) - : base(controller, controller.Session, new InnerMountWorker(controller, session, listener)) - { - _controller = controller; - _host = host; - } - - public override void init() - { - base.init(); - _controller.View.WindowTitle = BookmarkNameProvider.toString(_host, true); - _controller.View.RefreshBookmark(_controller.Session.getHost()); - } - - private class InnerMountWorker : MountWorker - { - private readonly BrowserController _controller; - private readonly Session _session; - - public InnerMountWorker(BrowserController controller, Session session, ListProgressListener listener) - : base(session.getHost(), controller._cache, listener) - { - _controller = controller; - _session = session; - } - - public override void cleanup(object wd) - { - Path workdir = (Path) wd; - if (null == workdir) - { - _controller.Unmount(); - } - else - { - // Set the working directory - _controller.SetWorkdir(workdir); - _controller.View.RefreshBookmark(_session.getHost()); - _controller.ToggleView(BrowserView.File); - _controller.View.SecureConnection = _session is SSLSession; - _controller.View.CertBasedConnection = _session is SSLSession; - _controller.View.SecureConnectionVisible = true; - } - } - } - } - - private class MoveAction : WorkerBackgroundAction - { - public MoveAction(BrowserController controller, Map selected, IList changed) - : base(controller, controller.Session, new InnerMoveWorker(controller, selected, changed)) - { - } - - private class InnerMoveWorker : MoveWorker - { - private readonly IList _changed; - private readonly BrowserController _controller; - private readonly Map _files; - - public InnerMoveWorker(BrowserController controller, Map files, IList changed) - : base(files, controller) - { - _controller = controller; - _files = files; - _changed = changed; - } - - public override void cleanup(object result) - { - _controller.RefreshParentPaths(_changed, - (IList) Utils.ConvertFromJavaList(_files.values())); - } - } - } - - private class ProgressTransferAdapter : TransferAdapter - { - private readonly BrowserController _controller; - - public ProgressTransferAdapter(BrowserController controller) - { - _controller = controller; - } - - public override void progress(TransferProgress status) - { - _controller.message(status.getProgress()); - } - } - - private class ReloadTransferCallback : TransferCallback - { - private readonly IList _changed; - private readonly BrowserController _controller; - - public ReloadTransferCallback(BrowserController controller, IList changed) - { - _controller = controller; - _changed = changed; - } - - public void complete(Transfer t) - { - _controller.invoke(new ReloadAction(_controller, _changed)); - } - - private class ReloadAction : WindowMainAction - { - private readonly IList _changed; - - public ReloadAction(BrowserController c, IList changed) : base(c) - { - _changed = changed; - } - - public override bool isValid() - { - return base.isValid() && ((BrowserController) Controller).IsConnected(); - } - - public override void run() - { - ((BrowserController) Controller).RefreshParentPaths(_changed, _changed); - } - } - } - - private class RevertAction : WorkerBackgroundAction - { - public RevertAction(BrowserController controller, IList files) - : base(controller, controller.Session, new InnerRevertWorker(controller, files)) - { - } - - private class InnerRevertWorker : RevertWorker - { - private readonly BrowserController _controller; - private readonly IList _files; - - public InnerRevertWorker(BrowserController controller, IList files) - : base(Utils.ConvertToJavaList(files)) - { - _controller = controller; - _files = files; - } - - public override void cleanup(object result) - { - _controller.RefreshParentPaths((IList) Utils.ConvertFromJavaList((List) result)); - } - } - } - - private class UnarchiveAction : BrowserControllerBackgroundAction - { - private readonly Archive _archive; - private readonly List _expanded; - private readonly Path _selected; - - public UnarchiveAction(BrowserController controller, Archive archive, Path selected, List expanded) - : base(controller) - { - _archive = archive; - _expanded = expanded; - _selected = selected; - } - - public override object run() - { - ((Compress) BrowserController.Session.getFeature(typeof (Compress))).unarchive(_archive, _selected, - BrowserController, BrowserController); - return true; - } - - public override string getActivity() - { - return _archive.getDecompressCommand(_selected); - } - - public override void cleanup() - { - base.cleanup(); - _expanded.AddRange(Utils.ConvertFromJavaList(_archive.getExpanded(new ArrayList {_selected}))); - BrowserController.RefreshParentPaths(_expanded, _expanded); - } - } - } +// +// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. +// http://cyberduck.io/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// feedback@cyberduck.io +// + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Collections.Specialized; +using System.IO; +using System.Windows.Forms; +using BrightIdeasSoftware; +using ch.cyberduck.core; +using ch.cyberduck.core.bonjour; +using ch.cyberduck.core.cdn; +using ch.cyberduck.core.editor; +using ch.cyberduck.core.exception; +using ch.cyberduck.core.features; +using ch.cyberduck.core.local; +using ch.cyberduck.core.pasteboard; +using ch.cyberduck.core.preferences; +using ch.cyberduck.core.serializer; +using ch.cyberduck.core.sftp; +using ch.cyberduck.core.ssl; +using ch.cyberduck.core.threading; +using ch.cyberduck.core.transfer; +using ch.cyberduck.core.worker; +using ch.cyberduck.ui.browser; +using ch.cyberduck.ui.comparator; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Core.Local; +using Ch.Cyberduck.Ui.Controller.Threading; +using Ch.Cyberduck.Ui.Winforms; +using Ch.Cyberduck.Ui.Winforms.Taskdialog; +using java.lang; +using java.util; +using org.apache.log4j; +using StructureMap; +using Application = ch.cyberduck.core.local.Application; +using Exception = System.Exception; +using Path = ch.cyberduck.core.Path; +using String = System.String; +using StringBuilder = System.Text.StringBuilder; + +namespace Ch.Cyberduck.Ui.Controller +{ + public class BrowserController : WindowController, TranscriptListener, CollectionListener, + ProgressListener + { + public delegate void CallbackDelegate(); + + public delegate bool DialogCallbackDelegate(DialogResult result); + + internal static readonly Filter HiddenFilter = new RegexFilter(); + private static readonly Logger Log = Logger.getLogger(typeof (BrowserController).FullName); + private static readonly Filter NullFilter = new NullFilter(); + protected static string DEFAULT = LocaleFactory.localizedString("Default"); + private readonly BookmarkCollection _bookmarkCollection = BookmarkCollection.defaultCollection(); + private readonly BookmarkModel _bookmarkModel; + private readonly TreeBrowserModel _browserModel; + private readonly PathCache _cache = new PathCache(PreferencesFactory.get().getInteger("browser.cache.size")); + private readonly ListProgressListener _limitListener; + private readonly Navigation _navigation = new Navigation(); + private readonly IList _temporaryWatcher = new List(); + private Comparator _comparator = new NullComparator(); + private String _dropFolder; // holds the drop folder of the current drag operation + private InfoController _inspector; + private BrowserView _lastBookmarkView = BrowserView.Bookmark; + private PathPasteboard _pasteboard; + private bool _showHiddenFiles; + + public BrowserController(IBrowserView view) + { + View = view; + + ShowHiddenFiles = PreferencesFactory.get().getBoolean("browser.showHidden"); + + _limitListener = new DialogLimitedListProgressListener(this); + _browserModel = new TreeBrowserModel(this, _cache, _limitListener); + _bookmarkModel = new BookmarkModel(this, _bookmarkCollection); + View.ViewClosedEvent += delegate { _bookmarkModel.Source = null; }; + + //default view is the bookmark view + ToggleView(BrowserView.Bookmark); + View.StopActivityAnimation(); + + View.SetComparator += View_SetComparator; + View.ChangeBrowserView += View_ChangeBrowserView; + + View.QuickConnect += View_QuickConnect; + View.BrowserDoubleClicked += View_BrowserDoubleClicked; + View.BrowserSelectionChanged += View_BrowserSelectionChanged; + View.PathSelectionChanged += View_PathSelectionChanged; + View.EditEvent += View_EditEvent; + View.ItemsChanged += View_ItemsChanged; + + View.ShowTransfers += View_ShowTransfers; + + View.BrowserCanDrop += View_BrowserCanDrop; + View.HostCanDrop += View_HostCanDrop; + View.BrowserModelCanDrop += View_BrowserModelCanDrop; + View.HostModelCanDrop += View_HostModelCanDrop; + View.BrowserDropped += View_BrowserDropped; + View.HostDropped += View_HostDropped; + View.HostModelDropped += View_HostModelDropped; + View.BrowserModelDropped += View_BrowserModelDropped; + View.BrowserDrag += View_BrowserDrag; + View.HostDrag += View_HostDrag; + View.BrowserEndDrag += View_BrowserEndDrag; + View.HostEndDrag += View_HostEndDrag; + View.SearchFieldChanged += View_SearchFieldChanged; + + + View.ContextMenuEnabled += View_ContextMenuEnabled; + + #region Commands - File + + View.NewBrowser += View_NewBrowser; + View.ValidateNewBrowser += View_ValidateNewBrowser; + View.OpenConnection += View_OpenConnection; + View.ValidateOpenConnection += () => true; + View.NewDownload += View_NewDownload; + View.ValidateNewDownload += () => false; //todo implement + View.NewFolder += View_NewFolder; + View.ValidateNewFolder += View_ValidateNewFolder; + View.NewFile += View_NewFile; + View.ValidateNewFile += View_ValidateNewFile; + View.NewSymbolicLink += View_NewSymbolicLink; + View.ValidateNewSymbolicLink += View_ValidateNewSymbolicLink; + View.RenameFile += View_RenameFile; + View.ValidateRenameFile += View_ValidateRenameFile; + View.DuplicateFile += View_DuplicateFile; + View.ValidateDuplicateFile += View_ValidateDuplicateFile; + View.OpenUrl += View_OpenUrl; + View.ValidateOpenWebUrl += View_ValidateOpenWebUrl; + View.ValidateEditWith += View_ValidateEditWith; + View.ShowInspector += View_ShowInspector; + View.ValidateShowInspector += View_ValidateShowInspector; + View.Download += View_Download; + View.ValidateDownload += View_ValidateDownload; + View.DownloadAs += View_DownloadAs; + View.ValidateDownloadAs += View_ValidateDownloadAs; + View.DownloadTo += View_DownloadTo; + View.ValidateDownloadTo += View_ValidateDownload; //use same validation handler + View.Upload += View_Upload; + View.ValidateUpload += View_ValidateUpload; + View.Synchronize += View_Synchronize; + View.ValidateSynchronize += View_ValidateSynchronize; + View.Delete += View_Delete; + View.ValidateDelete += View_ValidateDelete; + View.RevertFile += View_RevertFile; + View.ValidateRevertFile += View_ValidateRevertFile; + View.GetArchives += View_GetArchives; + View.GetCopyUrls += View_GetCopyUrls; + View.GetOpenUrls += View_GetOpenUrls; + View.CreateArchive += View_CreateArchive; + View.ValidateCreateArchive += View_ValidateCreateArchive; + View.ExpandArchive += View_ExpandArchive; + View.ValidateExpandArchive += View_ValidateExpandArchive; + + #endregion + + #region Commands - Edit + + View.Cut += View_Cut; + View.ValidateCut += View_ValidateCut; + View.Copy += View_Copy; + View.ValidateCopy += View_ValidateCopy; + View.Paste += View_Paste; + View.ValidatePaste += View_ValidatePaste; + View.ShowPreferences += View_ShowPreferences; + + #endregion + + #region Commands - View + + View.ToggleToolbar += View_ToggleToolbar; + View.ShowHiddenFiles += View_ShowHiddenFiles; + View.ValidateTextEncoding += View_ValidateTextEncoding; + View.EncodingChanged += View_EncodingChanged; + View.ToggleLogDrawer += View_ToggleLogDrawer; + + #endregion + + #region Commands - Go + + View.RefreshBrowser += View_RefreshBrowser; + View.ValidateRefresh += View_ValidateRefresh; + View.GotoFolder += View_GotoFolder; + View.ValidateGotoFolder += View_ValidateGotoFolder; + View.HistoryBack += View_HistoryBack; + View.ValidateHistoryBack += View_ValidateHistoryBack; + View.HistoryForward += View_HistoryForward; + View.ValidateHistoryForward += View_ValidateHistoryForward; + View.FolderUp += View_FolderUp; + View.ValidateFolderUp += View_ValidateFolderUp; + View.FolderInside += View_FolderInside; + View.ValidateFolderInside += View_ValidateFolderInside; + View.Search += View_Search; + View.SendCustomCommand += View_SendCustomCommand; + View.ValidateSendCustomCommand += View_ValidateSendCustomCommand; + View.OpenInTerminal += View_OpenInTerminal; + View.ValidateOpenInTerminal += View_ValidateOpenInTerminal; + View.Stop += View_Disconnect; + View.ValidateStop += View_ValidateStop; + View.Disconnect += View_Disconnect; + View.ValidateDisconnect += View_ValidateDisconnect; + + #endregion + + #region Commands - Bookmark + + View.ToggleBookmarks += View_ToggleBookmarks; + View.SortBookmarksByHostname += View_SortBookmarksByHostname; + View.SortBookmarksByNickname += View_SortBookmarksByNickname; + View.SortBookmarksByProtocol += View_SortBookmarksByProtocol; + + View.ConnectBookmark += View_ConnectBookmark; + View.ValidateConnectBookmark += View_ValidateConnectBookmark; + View.NewBookmark += View_NewBookmark; + View.ValidateNewBookmark += View_ValidateNewBookmark; + View.EditBookmark += View_EditBookmark; + View.ValidateEditBookmark += View_ValidateEditBookmark; + View.DeleteBookmark += View_DeleteBookmark; + View.ValidateDeleteBookmark += View_ValidateDeleteBookmark; + View.DuplicateBookmark += View_DuplicateBookmark; + View.ValidateDuplicateBookmark += View_ValidateDuplicateBookmark; + + #endregion + + #region Browser model delegates + + View.ModelCanExpandDelegate = _browserModel.CanExpand; + View.ModelChildrenGetterDelegate = _browserModel.ChildrenGetter; + View.ModelFilenameGetter = _browserModel.GetName; + View.ModelIconGetter = _browserModel.GetIcon; + View.ModelSizeGetter = _browserModel.GetSize; + View.ModelSizeAsStringGetter = _browserModel.GetSizeAsString; + View.ModelModifiedGetter = _browserModel.GetModified; + View.ModelModifiedAsStringGetter = _browserModel.GetModifiedAsString; + View.ModelOwnerGetter = _browserModel.GetOwner; + View.ModelGroupGetter = _browserModel.GetGroup; + View.ModelPermissionsGetter = _browserModel.GetPermission; + View.ModelKindGetter = _browserModel.GetKind; + View.ModelActiveGetter = _browserModel.GetActive; + View.ModelExtensionGetter = _browserModel.GetExtension; + View.ModelRegionGetter = _browserModel.GetRegion; + View.ModelVersionGetter = _browserModel.GetVersion; + + #endregion + + #region Bookmark model delegates + + View.BookmarkImageGetter = _bookmarkModel.GetBookmarkImage; + View.BookmarkNicknameGetter = _bookmarkModel.GetNickname; + View.BookmarkHostnameGetter = _bookmarkModel.GetHostname; + View.BookmarkUrlGetter = _bookmarkModel.GetUrl; + View.BookmarkNotesGetter = _bookmarkModel.GetNotes; + View.BookmarkStatusImageGetter = _bookmarkModel.GetBookmarkStatusImage; + + #endregion + + _bookmarkCollection.addListener(this); + View.ViewClosedEvent += delegate { _bookmarkCollection.removeListener(this); }; + + PopulateQuickConnect(); + PopulateEncodings(); + UpdateOpenIcon(); + + View.ToolbarVisible = PreferencesFactory.get().getBoolean("browser.toolbar"); + View.LogDrawerVisible = PreferencesFactory.get().getBoolean("browser.transcript.open"); + + View.GetEditorsForSelection += View_GetEditorsForSelection; + View.GetBookmarks += View_GetBookmarks; + View.GetHistory += View_GetHistory; + View.GetBonjourHosts += View_GetBonjourHosts; + View.ClearHistory += View_ClearHistory; + View.ShowCertificate += View_Certificate; + + View.ValidatePathsCombobox += View_ValidatePathsCombobox; + View.ValidateSearchField += View_ValidateSearchField; + + View.Exit += View_Exit; + View.SetBookmarkModel(_bookmarkCollection, null); + } + + public BrowserController() : this(ObjectFactory.GetInstance()) + { + } + + /// + /// The first selected path found or null if there is no selection + /// + public Path SelectedPath + { + get + { + IList selectedPaths = View.SelectedPaths; + if (selectedPaths.Count > 0) + { + return selectedPaths[0]; + } + return null; + } + } + + public Path Workdir { get; set; } + + /// + /// + /// + /// + /// All selected paths or an empty list if there is no selection + /// + public IList SelectedPaths + { + get + { + if (IsMounted()) + { + return View.SelectedPaths; + } + return new List(); + } + set { View.SelectedPaths = value; } + } + + public bool ShowHiddenFiles + { + get { return _showHiddenFiles; } + set + { + FilenameFilter = value ? NullFilter : HiddenFilter; + _showHiddenFiles = value; + View.HiddenFilesVisible = _showHiddenFiles; + } + } + + public PathCache Cache + { + get { return _cache; } + } + + public Filter FilenameFilter { get; set; } + + public Comparator FilenameComparator + { + get { return _comparator; } + set { _comparator = value; } + } + + public Session Session { get; private set; } + + public void collectionLoaded() + { + AsyncDelegate mainAction = delegate { ReloadBookmarks(); }; + Invoke(mainAction); + } + + public void collectionItemAdded(object obj) + { + AsyncDelegate mainAction = delegate { PopulateQuickConnect(); }; + Invoke(mainAction); + } + + public void collectionItemRemoved(object obj) + { + AsyncDelegate mainAction = delegate { PopulateQuickConnect(); }; + Invoke(mainAction); + } + + public void collectionItemChanged(object obj) + { + AsyncDelegate mainAction = delegate { PopulateQuickConnect(); }; + Invoke(mainAction); + } + + public override void message(string msg) + { + string label; + if (Utils.IsNotBlank(msg)) + { + label = msg; + } + else + { + if (View.CurrentView == BrowserView.Bookmark || View.CurrentView == BrowserView.History || + View.CurrentView == BrowserView.Bonjour) + { + label = String.Format("{0} {1}", View.NumberOfBookmarks, LocaleFactory.localizedString("Bookmarks")); + } + else + { + if (IsConnected()) + { + label = String.Format(LocaleFactory.localizedString("{0} Files"), View.NumberOfFiles); + } + else + { + label = String.Empty; + } + } + } + AsyncDelegate updateLabel = delegate { View.StatusLabel = label; }; + Invoke(updateLabel); + } + + public override void log(bool request, string transcript) + { + if (View.LogDrawerVisible) + { + AsyncDelegate mainAction = delegate { View.AddTranscriptEntry(request, transcript); }; + Invoke(mainAction); + } + } + + public void RemoveDonateButton() + { + View.RemoveDonateButton(); + } + + private void View_NewSymbolicLink() + { + CreateSymlinkController slc = + new CreateSymlinkController(ObjectFactory.GetInstance(), this); + slc.Show(); + } + + private bool View_ValidateNewSymbolicLink() + { + return IsMounted() && Session.getFeature(typeof (Symlink)) != null && SelectedPaths.Count == 1; + } + + private void View_SortBookmarksByProtocol() + { + BookmarkCollection.defaultCollection().sortByProtocol(); + ReloadBookmarks(); + } + + private void View_SortBookmarksByNickname() + { + BookmarkCollection.defaultCollection().sortByNickname(); + ReloadBookmarks(); + } + + private void View_SortBookmarksByHostname() + { + BookmarkCollection.defaultCollection().sortByHostname(); + ReloadBookmarks(); + } + + private bool View_ValidateOpenInTerminal() + { + return IsMounted() && Session is SFTPSession; + } + + private void View_OpenInTerminal() + { + Host host = Session.getHost(); + Path workdir = null; + if (SelectedPaths.Count == 1) + { + Path selected = SelectedPath; + if (selected.isDirectory()) + { + workdir = selected; + } + } + if (null == workdir) + { + workdir = Workdir; + } + if (!File.Exists(PreferencesFactory.get().getProperty("terminal.command.ssh"))) + { + OpenFileDialog selectDialog = new OpenFileDialog(); + selectDialog.Filter = "PuTTY executable (.exe)|*.exe"; + selectDialog.FilterIndex = 1; + if (selectDialog.ShowDialog() == DialogResult.OK) + { + PreferencesFactory.get().setProperty("terminal.command.ssh", selectDialog.FileName); + } + else + { + return; + } + } + new SshTerminalService().open(host, workdir); + } + + private void View_SetComparator(BrowserComparator comparator) + { + if (!comparator.equals(_comparator)) + { + _comparator = comparator; + ReloadData(true); + } + } + + private IList View_GetEditorsForSelection() + { + Path p = SelectedPath; + if (null != p) + { + if (p.isFile()) + { + return Utils.ConvertFromJavaList(EditorFactory.instance().getEditors(p.getName()), null); + } + } + return new List(); + } + + private bool View_ValidateNewBrowser() + { + return IsMounted(); + } + + private List>> View_GetCopyUrls() + { + List>> items = new List>>(); + IList selected = View.SelectedPaths; + if (selected.Count == 0) + { + items.Add(new KeyValuePair>(LocaleFactory.localizedString("None"), + new List())); + } + else + { + UrlProvider urlProvider = ((UrlProvider) Session.getFeature(typeof (UrlProvider))); + if (urlProvider != null) + { + for (int i = 0; i < urlProvider.toUrl(SelectedPath).size(); i++) + { + DescriptiveUrl descUrl = (DescriptiveUrl) urlProvider.toUrl(SelectedPath).toArray()[i]; + KeyValuePair> entry = + new KeyValuePair>(descUrl.getHelp(), new List()); + items.Add(entry); + foreach (Path path in selected) + { + entry.Value.Add(((DescriptiveUrl) urlProvider.toUrl(path).toArray()[i]).getUrl()); + } + } + } + UrlProvider distributionConfiguration = + ((UrlProvider) Session.getFeature(typeof (DistributionConfiguration))); + if (distributionConfiguration != null) + { + for (int i = 0; i < distributionConfiguration.toUrl(SelectedPath).size(); i++) + { + DescriptiveUrl descUrl = + (DescriptiveUrl) distributionConfiguration.toUrl(SelectedPath).toArray()[i]; + KeyValuePair> entry = + new KeyValuePair>(descUrl.getHelp(), new List()); + items.Add(entry); + foreach (Path path in selected) + { + entry.Value.Add( + ((DescriptiveUrl) distributionConfiguration.toUrl(path).toArray()[i]).getUrl()); + } + } + } + } + return items; + } + + private bool IsBrowser() + { + return View.CurrentView == BrowserView.File; + } + + private IList>> View_GetOpenUrls() + { + IList>> items = new List>>(); + IList selected = View.SelectedPaths; + if (selected.Count == 0) + { + items.Add(new KeyValuePair>(LocaleFactory.localizedString("None"), + new List())); + } + else + { + DescriptiveUrlBag urls = + ((UrlProvider) Session.getFeature(typeof (UrlProvider))).toUrl(SelectedPath) + .filter(DescriptiveUrl.Type.http, DescriptiveUrl.Type.cname, DescriptiveUrl.Type.cdn, + DescriptiveUrl.Type.signed, DescriptiveUrl.Type.authenticated, DescriptiveUrl.Type.torrent); + for (int i = 0; i < urls.size(); i++) + { + DescriptiveUrl descUrl = (DescriptiveUrl) urls.toArray()[i]; + KeyValuePair> entry = new KeyValuePair>( + descUrl.getHelp(), new List()); + items.Add(entry); + + foreach (Path path in selected) + { + entry.Value.Add(((DescriptiveUrl) urls.toArray()[i]).getUrl()); + } + } + } + return items; + } + + public void UpdateBookmarks() + { + View.UpdateBookmarks(); + } + + private bool View_ValidateDuplicateBookmark() + { + return _bookmarkModel.Source.allowsEdit() && View.SelectedBookmarks.Count == 1; + } + + private void View_DuplicateBookmark() + { + ToggleView(BrowserView.Bookmark); + Host duplicate = new HostDictionary().deserialize(View.SelectedBookmark.serialize(SerializerFactory.get())); + // Make sure a new UUID is asssigned for duplicate + duplicate.setUuid(null); + AddBookmark(duplicate); + } + + private void View_HostModelDropped(ModelDropEventArgs dropargs) + { + int sourceIndex = _bookmarkModel.Source.indexOf(dropargs.SourceModels[0]); + int destIndex = dropargs.DropTargetIndex; + if (dropargs.DropTargetLocation == DropTargetLocation.BelowItem) + { + destIndex++; + } + if (dropargs.Effect == DragDropEffects.Copy) + { + Host host = + new HostDictionary().deserialize(((Host) dropargs.SourceModels[0]).serialize(SerializerFactory.get())); + host.setUuid(null); + AddBookmark(host, destIndex); + } + if (dropargs.Effect == DragDropEffects.Move) + { + if (sourceIndex < destIndex) + { + destIndex--; + } + foreach (Host promisedDragBookmark in dropargs.SourceModels) + { + _bookmarkModel.Source.remove(promisedDragBookmark); + if (destIndex > _bookmarkModel.Source.size()) + { + _bookmarkModel.Source.add(promisedDragBookmark); + } + else + { + _bookmarkModel.Source.add(destIndex, promisedDragBookmark); + } + //view.selectRowIndexes(NSIndexSet.indexSetWithIndex(row), false); + //view.scrollRowToVisible(row); + } + } + } + + private void View_HostModelCanDrop(ModelDropEventArgs args) + { + if (!_bookmarkModel.Source.allowsEdit()) + { + // Do not allow drags for non writable collections + args.Effect = DragDropEffects.None; + args.DropTargetLocation = DropTargetLocation.None; + return; + } + switch (args.DropTargetLocation) + { + case DropTargetLocation.BelowItem: + case DropTargetLocation.AboveItem: + if (args.SourceModels.Count > 1) + { + args.Effect = DragDropEffects.Move; + } + break; + default: + args.Effect = DragDropEffects.None; + args.DropTargetLocation = DropTargetLocation.None; + return; + } + } + + private void View_HostDropped(OlvDropEventArgs e) + { + if (e.DataObject is DataObject && ((DataObject) e.DataObject).ContainsFileDropList()) + { + DataObject data = (DataObject) e.DataObject; + + if (e.DropTargetLocation == DropTargetLocation.Item) + { + IList roots = new List(); + Host host = null; + foreach (string filename in data.GetFileDropList()) + { + //check if we received at least one non-duck file + if (!".duck".Equals(Utils.GetSafeExtension(filename))) + { + // The bookmark this file has been dropped onto + Host destination = (Host) e.DropTargetItem.RowObject; + if (null == host) + { + host = destination; + } + Local local = LocalFactory.get(filename); + // Upload to the remote host this bookmark points to + roots.Add( + new TransferItem( + new Path( + new Path(PathNormalizer.normalize(destination.getDefaultPath(), true), + EnumSet.of(AbstractPath.Type.directory)), local.getName(), + EnumSet.of(AbstractPath.Type.file)), local)); + } + } + if (roots.Count > 0) + { + UploadTransfer q = new UploadTransfer(host, Utils.ConvertToJavaList(roots)); + // If anything has been added to the queue, then process the queue + if (q.getRoots().size() > 0) + { + TransferController.Instance.StartTransfer(q); + } + } + return; + } + + if (e.DropTargetLocation == DropTargetLocation.AboveItem) + { + Host destination = (Host) e.DropTargetItem.RowObject; + foreach (string file in data.GetFileDropList()) + { + _bookmarkModel.Source.add(_bookmarkModel.Source.indexOf(destination), + HostReaderFactory.get().read(LocalFactory.get(file))); + } + } + if (e.DropTargetLocation == DropTargetLocation.BelowItem) + { + Host destination = (Host) e.DropTargetItem.RowObject; + foreach (string file in data.GetFileDropList()) + { + _bookmarkModel.Source.add(_bookmarkModel.Source.indexOf(destination) + 1, + HostReaderFactory.get().read(LocalFactory.get(file))); + } + } + if (e.DropTargetLocation == DropTargetLocation.Background) + { + foreach (string file in data.GetFileDropList()) + { + _bookmarkModel.Source.add(HostReaderFactory.get().read(LocalFactory.get(file))); + } + } + } + } + + private void View_HostCanDrop(OlvDropEventArgs args) + { + if (!_bookmarkModel.Source.allowsEdit()) + { + // Do not allow drags for non writable collections + args.Effect = DragDropEffects.None; + args.DropTargetLocation = DropTargetLocation.None; + return; + } + + DataObject dataObject = (DataObject) args.DataObject; + if (dataObject.ContainsFileDropList()) + { + //check if all files are .duck files + foreach (string file in dataObject.GetFileDropList()) + { + string ext = Utils.GetSafeExtension(file); + if (!".duck".Equals(ext)) + { + //if at least one non-duck file we prepare for uploading + args.Effect = DragDropEffects.Copy; + if (args.DropTargetLocation == DropTargetLocation.Item) + { + Host destination = (Host) args.DropTargetItem.RowObject; + (args.DataObject as DataObject).SetDropDescription((DropImageType) args.Effect, + "Upload to %1", BookmarkNameProvider.toString(destination)); + } + args.DropTargetLocation = DropTargetLocation.Item; + return; + } + } + + //at least one .duck file + args.Effect = DragDropEffects.Copy; + if (args.DropTargetLocation == DropTargetLocation.Item) + { + args.DropTargetLocation = DropTargetLocation.Background; + } + return; + } + args.Effect = DragDropEffects.None; + } + + private void View_HostEndDrag(DataObject data) + { + RemoveTemporaryFiles(data); + RemoveTemporaryFilesystemWatcher(); + } + + private string CreateAndWatchTemporaryFile(FileSystemEventHandler del) + { + string tfile = System.IO.Path.Combine(System.IO.Path.GetTempPath(), Guid.NewGuid().ToString()); + using (File.Create(tfile)) + { + FileInfo tmpFile = new FileInfo(tfile); + tmpFile.Attributes |= FileAttributes.Hidden; + } + DriveInfo[] allDrives = DriveInfo.GetDrives(); + foreach (DriveInfo d in allDrives) + { + if (d.IsReady && d.DriveType != DriveType.CDRom) + { + try + { + FileSystemWatcher watcher = new FileSystemWatcher(@d.Name, System.IO.Path.GetFileName(tfile)); + watcher.BeginInit(); + watcher.IncludeSubdirectories = true; + watcher.EnableRaisingEvents = true; + watcher.Created += del; + watcher.EndInit(); + _temporaryWatcher.Add(watcher); + } + catch (Exception e) + { + Log.info(string.Format("Cannot watch drive {0}", d), e); + } + } + } + return tfile; + } + + private DataObject View_HostDrag(ObjectListView list) + { + DataObject data = new DataObject(DataFormats.FileDrop, + new[] + { + CreateAndWatchTemporaryFile(delegate(object sender, FileSystemEventArgs args) + { + Invoke(delegate + { + _dropFolder = System.IO.Path.GetDirectoryName(args.FullPath); + foreach (Host host in + View.SelectedBookmarks) + { + string filename = BookmarkNameProvider.toString(host) + ".duck"; + foreach (char c in + System.IO.Path.GetInvalidFileNameChars()) + { + filename = filename.Replace(c.ToString(), String.Empty); + } + + Local file = LocalFactory.get(_dropFolder, filename); + HostWriterFactory.get().write(host, file); + } + }); + }) + }); + return data; + } + + private void View_BrowserModelCanDrop(ModelDropEventArgs args) + { + if (IsMounted()) + { + Path destination; + switch (args.DropTargetLocation) + { + case DropTargetLocation.Item: + destination = (Path) args.DropTargetItem.RowObject; + if (!destination.isDirectory()) + { + //dragging over file + destination = destination.getParent(); + } + break; + case DropTargetLocation.Background: + destination = Workdir; + break; + default: + args.Effect = DragDropEffects.None; + args.DropTargetLocation = DropTargetLocation.None; + return; + } + Touch feature = (Touch) Session.getFeature(typeof (Touch)); + if (!feature.isSupported(destination)) + { + args.Effect = DragDropEffects.None; + args.DropTargetLocation = DropTargetLocation.None; + return; + } + foreach (Path sourcePath in args.SourceModels) + { + if (args.ListView == args.SourceListView) + { + // Use drag action from user + } + else + { + // If copying between sessions is supported + args.Effect = DragDropEffects.Copy; + } + if (sourcePath.isDirectory() && sourcePath.equals(destination)) + { + // Do not allow dragging onto myself. + args.Effect = DragDropEffects.None; + args.DropTargetLocation = DropTargetLocation.None; + return; + } + if (sourcePath.isDirectory() && destination.isChild(sourcePath)) + { + // Do not allow dragging a directory into its own containing items + args.Effect = DragDropEffects.None; + args.DropTargetLocation = DropTargetLocation.None; + return; + } + if (sourcePath.isFile() && sourcePath.getParent().equals(destination)) + { + // Moving file to the same destination makes no sense + args.Effect = DragDropEffects.None; + args.DropTargetLocation = DropTargetLocation.None; + return; + } + } + if (Workdir == destination) + { + args.DropTargetLocation = DropTargetLocation.Background; + } + else + { + args.DropTargetItem = args.ListView.ModelToItem(destination); + } + } + } + + /// + /// A file dragged within the browser has been received + /// + /// + private void View_BrowserModelDropped(ModelDropEventArgs dropargs) + { + Path destination; + switch (dropargs.DropTargetLocation) + { + case DropTargetLocation.Item: + destination = (Path) dropargs.DropTargetItem.RowObject; + break; + case DropTargetLocation.Background: + destination = Workdir; + break; + default: + destination = null; + break; + } + if (null != destination) + { + IDictionary files = new Dictionary(); + foreach (Path next in dropargs.SourceModels) + { + Path renamed = new Path(destination, next.getName(), next.getType()); + files.Add(next, renamed); + } + if (files.Count > 0) + { + if (dropargs.Effect == DragDropEffects.Copy) + { + foreach (BrowserController controller in MainController.Browsers) + { + // Find source browser + if (controller.View.Browser.Equals(dropargs.SourceListView)) + { + controller.transfer( + new CopyTransfer(controller.Session.getHost(), Session.getHost(), + Utils.ConvertToJavaMap(files)), new List(files.Values), false); + break; + } + } + } + if (dropargs.Effect == DragDropEffects.Move) + { + // The file should be renamed + RenamePaths(files); + } + } + } + } + + private void View_Download() + { + Download(SelectedPaths, new DownloadDirectoryFinder().find(Session.getHost())); + } + + private bool View_ValidateRevertFile() + { + if (IsMounted() && SelectedPaths.Count == 1) + { + return Session.getFeature(typeof (Versioning)) != null; + } + return false; + } + + private void View_RevertFile() + { + RevertPaths(SelectedPaths); + } + + private void RevertPaths(IList files) + { + Background(new RevertAction(this, files)); + } + + private void View_ToggleBookmarks() + { + if (View.CurrentView == BrowserView.File) + { + View.CurrentView = _lastBookmarkView; + } + else + { + _lastBookmarkView = View.CurrentView; + View.CurrentView = BrowserView.File; + } + } + + private bool View_ValidateSearchField() + { + return IsMounted() || View.CurrentView != BrowserView.File; + } + + private bool View_ValidatePathsCombobox() + { + return IsMounted(); + } + + private void View_ItemsChanged() + { + SetStatus(); + } + + private void View_Certificate() + { + if (Session is SSLSession) + { + SSLSession secured = (SSLSession) Session; + List certificates = secured.getAcceptedIssuers(); + CertificateStoreFactory.get().display(certificates); + } + } + + private void View_ClearHistory() + { + HistoryCollection.defaultCollection().clear(); + } + + private List View_GetBonjourHosts() + { + List b = new List(); + foreach (Host h in RendezvousCollection.defaultCollection()) + { + b.Add(h); + } + return b; + } + + private List View_GetHistory() + { + List b = new List(); + foreach (Host h in HistoryCollection.defaultCollection()) + { + b.Add(h); + } + return b; + } + + private List View_GetBookmarks() + { + List b = new List(); + foreach (Host h in BookmarkCollection.defaultCollection()) + { + b.Add(h); + } + return b; + } + + private void PopulateEncodings() + { + List list = new List(); + list.AddRange(new DefaultCharsetProvider().availableCharsets()); + View.PopulateEncodings(list); + View.SelectedEncoding = PreferencesFactory.get().getProperty("browser.charset.encoding"); + } + + private void View_EncodingChanged(object sender, EncodingChangedArgs e) + { + string encoding = e.Encoding; + if (Utils.IsBlank(encoding)) + { + return; + } + View.SelectedEncoding = encoding; + if (IsMounted()) + { + if (Session.getEncoding().Equals(encoding)) + { + return; + } + Session.getHost().setEncoding(encoding); + Mount(Session.getHost()); + } + } + + private void View_ConnectBookmark(object sender, ConnectBookmarkArgs connectBookmarkArgs) + { + Mount(connectBookmarkArgs.Bookmark); + } + + private bool View_ValidateConnectBookmark() + { + return View.SelectedBookmarks.Count == 1; + } + + private bool View_ValidateDeleteBookmark() + { + return _bookmarkModel.Source.allowsDelete() && View.SelectedBookmarks.Count > 0; + } + + private bool View_ValidateEditBookmark() + { + return _bookmarkModel.Source.allowsEdit() && View.SelectedBookmarks.Count == 1; + } + + private bool View_ValidateNewBookmark() + { + return _bookmarkModel.Source.allowsAdd(); + } + + private void View_ChangeBrowserView(object sender, ChangeBrowserViewArgs e) + { + ToggleView(e.View); + } + + private void View_EditBookmark() + { + if (View.SelectedBookmarks.Count == 1) + { + BookmarkController.Factory.Create(View.SelectedBookmark).View.Show(View); + } + } + + private void View_NewBookmark() + { + Host bookmark; + if (IsMounted()) + { + Path selected = SelectedPath; + if (null == selected || !selected.isDirectory()) + { + selected = Workdir; + } + bookmark = new HostDictionary().deserialize(Session.getHost().serialize(SerializerFactory.get())); + bookmark.setUuid(null); + bookmark.setDefaultPath(selected.getAbsolute()); + } + else + { + bookmark = + new Host( + ProtocolFactory.forName(PreferencesFactory.get().getProperty("connection.protocol.default")), + PreferencesFactory.get().getProperty("connection.hostname.default"), + PreferencesFactory.get().getInteger("connection.port.default")); + } + ToggleView(BrowserView.Bookmark); + AddBookmark(bookmark); + } + + public void AddBookmark(Host item) + { + AddBookmark(item, -1); + } + + private void AddBookmark(Host item, int index) + { + _bookmarkModel.Filter = null; + if (index != -1) + { + _bookmarkModel.Source.add(index, item); + } + else + { + _bookmarkModel.Source.add(item); + } + View.SelectBookmark(item); + View.EnsureBookmarkVisible(item); + BookmarkController.Factory.Create(item).View.Show(View); + } + + private void View_DeleteBookmark() + { + List selected = View.SelectedBookmarks; + StringBuilder alertText = new StringBuilder(); + int i = 0; + foreach (Host host in selected) + { + if (i > 0) + { + alertText.Append("\n"); + } + alertText.Append(Character.toString('\u2022')).Append(" ").Append(BookmarkNameProvider.toString(host)); + i++; + if (i > 10) + { + break; + } + } + DialogResult result = QuestionBox(LocaleFactory.localizedString("Delete Bookmark"), + LocaleFactory.localizedString("Do you want to delete the selected bookmark?"), alertText.ToString(), + String.Format("{0}", LocaleFactory.localizedString("Delete")), true); + if (result == DialogResult.OK) + { + _bookmarkModel.Source.removeAll(Utils.ConvertToJavaList(selected)); + } + } + + public override bool ViewShouldClose() + { + return Unmount(); + } + + private void View_OpenUrl() + { + DescriptiveUrlBag list; + if (SelectedPaths.Count == 1) + { + list = ((UrlProvider) Session.getFeature(typeof (UrlProvider))).toUrl(SelectedPath); + } + else + { + list = ((UrlProvider) Session.getFeature(typeof (UrlProvider))).toUrl(Workdir); + } + if (!list.isEmpty()) + { + BrowserLauncherFactory.get().open(list.find(DescriptiveUrl.Type.http).getUrl()); + } + } + + private void View_SearchFieldChanged() + { + if (View.CurrentView == BrowserView.File) + { + SetPathFilter(View.SearchString); + } + else + { + SetBookmarkFilter(View.SearchString); + } + } + + private void SetBookmarkFilter(string searchString) + { + if (Utils.IsBlank(searchString)) + { + View.SearchString = String.Empty; + _bookmarkModel.Filter = null; + } + else + { + _bookmarkModel.Filter = new BookmarkFilter(searchString); + } + ReloadBookmarks(); + } + + private bool View_ValidateDisconnect() + { + // disconnect/stop button update + View.ActivityRunning = isActivityRunning(); + if (!IsConnected()) + { + return isActivityRunning(); + } + return IsConnected(); + } + + private bool View_ValidateStop() + { + return isActivityRunning(); + } + + private bool View_ValidateSendCustomCommand() + { + return IsMounted() && Session.getFeature(typeof (Command)) != null; + } + + private bool View_ValidateFolderInside() + { + return IsMounted() && SelectedPaths.Count > 0; + } + + private bool View_ValidateFolderUp() + { + return IsMounted() && !Workdir.isRoot(); + } + + private bool View_ValidateHistoryForward() + { + return IsMounted() && _navigation.getForward().size() > 0; + } + + private bool View_ValidateHistoryBack() + { + return IsMounted() && _navigation.getBack().size() > 1; + } + + private bool View_ValidateGotoFolder() + { + return IsMounted(); + } + + private bool View_ValidateRefresh() + { + return IsMounted(); + } + + private void View_Disconnect() + { + if (isActivityRunning()) + { + // Remove all pending actions) + foreach (BackgroundAction action in getActions().toArray(new BackgroundAction[getActions().size()])) + { + action.cancel(); + } + } + CallbackDelegate run = delegate + { + if (PreferencesFactory.get().getBoolean("browser.disconnect.bookmarks.show")) + { + ToggleView(BrowserView.Bookmark); + } + else + { + ToggleView(BrowserView.File); + } + }; + Disconnect(run); + } + + /** + * Unmount this session + */ + + private void Disconnect(CallbackDelegate runnable) + { + InfoController infoController = _inspector; + if (infoController != null) + { + infoController.View.Close(); + } + if (HasSession()) + { + Background(new DisconnectAction(this, runnable)); + } + else + { + runnable(); + } + } + + private void View_SendCustomCommand() + { + new CommandController(this, Session).View.ShowDialog(); + } + + private void View_Search() + { + View.StartSearch(); + } + + private void View_FolderInside() + { + Path selected = SelectedPath; + if (null == selected) + { + return; + } + if (selected.isDirectory()) + { + SetWorkdir(selected); + } + else if (selected.isFile() || View.SelectedPaths.Count > 1) + { + if (PreferencesFactory.get().getBoolean("browser.doubleclick.edit")) + { + View_EditEvent(null); + } + else + { + View_Download(); + } + } + } + + public void Download(IList downloads, Local downloadFolder) + { + if (downloads.Count > 0) + { + IList items = new List(); + foreach (Path selected in downloads) + { + items.Add(new TransferItem(selected, LocalFactory.get(downloadFolder, selected.getName()))); + } + Transfer q = new DownloadTransfer(Session.getHost(), Utils.ConvertToJavaList(items)); + transfer(q, downloads); + } + } + + private void View_GotoFolder() + { + GotoController gc = new GotoController(ObjectFactory.GetInstance(), this); + gc.Show(); + } + + private void View_RefreshBrowser() + { + if (IsMounted()) + { + _cache.invalidate(Workdir); + foreach (Path path in View.VisiblePaths) + { + if (null == path) continue; + _cache.invalidate(path); + } + ReloadData(true); + } + } + + private bool View_ValidateTextEncoding() + { + return IsMounted() && !isActivityRunning(); + } + + private void View_ToggleLogDrawer() + { + View.LogDrawerVisible = !View.LogDrawerVisible; + PreferencesFactory.get().setProperty("browser.transcript.open", View.LogDrawerVisible); + } + + private void View_ShowHiddenFiles() + { + ShowHiddenFiles = !ShowHiddenFiles; + if (IsMounted()) + { + ReloadData(true); + } + } + + private void View_ToggleToolbar() + { + View.ToolbarVisible = !View.ToolbarVisible; + PreferencesFactory.get().setProperty("browser.toolbar", View.ToolbarVisible); + } + + private bool View_ValidatePaste() + { + return IsBrowser() && IsMounted() && !_pasteboard.isEmpty(); + } + + private void View_Paste() + { + IDictionary files = new Dictionary(); + Path parent = Workdir; + for (int i = 0; i < _pasteboard.size(); i++) + { + Path next = (Path) _pasteboard.get(i); + Path renamed = new Path(parent, next.getName(), next.getType()); + files.Add(next, renamed); + } + _pasteboard.clear(); + if (_pasteboard.isCut()) + { + RenamePaths(files); + } + if (_pasteboard.isCopy()) + { + DuplicatePaths(files); + } + } + + private bool View_ValidateCopy() + { + return IsBrowser() && IsMounted() && SelectedPaths.Count > 0; + } + + private void View_Copy() + { + _pasteboard.clear(); + _pasteboard.setCopy(true); + foreach (Path p in SelectedPaths) + { + // Writing data for private use when the item gets dragged to the transfer queue. + _pasteboard.add(p); + } + } + + private bool View_ValidateCut() + { + return IsBrowser() && IsMounted() && SelectedPaths.Count > 0; + } + + private void View_Cut() + { + _pasteboard.clear(); + _pasteboard.setCut(true); + foreach (Path s in SelectedPaths) + { + // Writing data for private use when the item gets dragged to the transfer queue. + _pasteboard.add(s); + } + } + + private void View_ShowPreferences() + { + PreferencesController.Instance.View.Show(); + } + + private bool View_ContextMenuEnabled() + { + //context menu is always enabled + return true; + } + + private void View_Exit() + { + MainController.Exit(); + } + + private List View_GetArchives() + { + List result = new List(); + Archive[] archives = Archive.getKnownArchives(); + foreach (Archive archive in archives) + { + List selected = Utils.ConvertToJavaList(SelectedPaths, null); + result.Add(archive.getTitle(selected)); + } + return result; + } + + private bool View_ValidateExpandArchive() + { + if (IsMounted()) + { + if (Session.getFeature(typeof (Compress)) == null) + { + return false; + } + if (SelectedPaths.Count > 0) + { + foreach (Path selected in SelectedPaths) + { + if (selected.isDirectory()) + { + return false; + } + if (!Archive.isArchive(selected.getName())) + { + return false; + } + } + return true; + } + } + return false; + } + + private void View_ExpandArchive() + { + List expanded = new List(); + foreach (Path selected in SelectedPaths) + { + Archive archive = Archive.forName(selected.getName()); + if (null == archive) + { + continue; + } + if (CheckOverwrite(Utils.ConvertFromJavaList(archive.getExpanded(new ArrayList {selected})))) + { + background(new UnarchiveAction(this, archive, selected, expanded)); + } + } + } + + private bool View_ValidateCreateArchive() + { + if (IsMounted()) + { + if (Session.getFeature(typeof (Compress)) == null) + { + return false; + } + if (SelectedPaths.Count > 0) + { + foreach (Path selected in SelectedPaths) + { + if (selected.isFile() && Archive.isArchive(selected.getName())) + { + // At least one file selected is already an archive. No distinct action possible + return false; + } + } + return true; + } + } + return false; + } + + private void View_CreateArchive(object sender, CreateArchiveEventArgs createArchiveEventArgs) + { + Archive archive = Archive.forName(createArchiveEventArgs.ArchiveName); + IList selected = SelectedPaths; + if (CheckOverwrite(new List {archive.getArchive(Utils.ConvertToJavaList(selected))})) + { + background(new CreateArchiveAction(this, archive, selected)); + } + } + + private bool View_ValidateDelete() + { + return IsMounted() && SelectedPaths.Count > 0; + } + + private bool View_ValidateSynchronize() + { + return IsMounted(); + } + + private void View_Synchronize() + { + Path selected; + if (SelectedPaths.Count == 1 && SelectedPath.isDirectory()) + { + selected = SelectedPath; + } + else + { + selected = Workdir; + } + string folder = + View.SynchronizeDialog( + String.Format(LocaleFactory.localizedString("Synchronize {0} with"), selected.getName()), + new UploadDirectoryFinder().find(Session.getHost()), null); + if (null != folder) + { + Local target = LocalFactory.get(folder); + new UploadDirectoryFinder().save(Session.getHost(), target.getParent()); + transfer(new SyncTransfer(Session.getHost(), new TransferItem(selected, target))); + } + } + + private bool View_ValidateNewFile() + { + return IsMounted() && + ((Touch) Session.getFeature(typeof (Touch))).isSupported( + new UploadTargetFinder(Workdir).find(SelectedPath)); + } + + private bool View_ValidateUpload() + { + return IsMounted() && + ((Touch) Session.getFeature(typeof (Touch))).isSupported( + new UploadTargetFinder(Workdir).find(SelectedPath)); + } + + private void View_Upload() + { + // Due to the limited functionality of the OpenFileDialog class it is + // currently not possible to select a folder. May be we should provide + // a second menu item which allows to select a folder to upload + string[] paths = View.UploadDialog(null); + if (null == paths || paths.Length == 0) return; + + Path destination = new UploadTargetFinder(Workdir).find(SelectedPath); + List uploads = Utils.ConvertToJavaList(paths, delegate(string path) + { + Local local = LocalFactory.get(path); + new UploadDirectoryFinder().save(Session.getHost(), local.getParent()); + return + new TransferItem( + new Path(destination, local.getName(), + local.isDirectory() + ? EnumSet.of(AbstractPath.Type.directory) + : EnumSet.of(AbstractPath.Type.file)), local); + }); + transfer(new UploadTransfer(Session.getHost(), uploads)); + } + + private void View_DownloadTo() + { + string folder = View.DownloadToDialog(LocaleFactory.localizedString("Download To…"), + new DownloadDirectoryFinder().find(Session.getHost()), null); + if (null != folder && SelectedPaths.Count > 0) + { + Local target = LocalFactory.get(folder); + new DownloadDirectoryFinder().save(Session.getHost(), target); + IList downloads = new List(); + foreach (Path file in SelectedPaths) + { + downloads.Add(new TransferItem(file, LocalFactory.get(target, file.getName()))); + } + transfer(new DownloadTransfer(Session.getHost(), Utils.ConvertToJavaList(downloads)), SelectedPaths); + } + } + + private bool View_ValidateDownloadAs() + { + return IsMounted() && SelectedPaths.Count == 1; + } + + private void View_DownloadAs() + { + string filename = View.DownloadAsDialog(new DownloadDirectoryFinder().find(Session.getHost()), + SelectedPath.getName()); + if (null != filename) + { + Local target = LocalFactory.get(filename); + Path selected = SelectedPath; + new DownloadDirectoryFinder().save(Session.getHost(), target.getParent()); + IList downloads = new List(); + downloads.Add(new TransferItem(selected, target)); + List seletionList = new List(); + seletionList.Add(selected); + transfer(new DownloadTransfer(Session.getHost(), Utils.ConvertToJavaList(downloads)), seletionList); + } + } + + private bool View_ValidateDownload() + { + return IsMounted() && SelectedPaths.Count > 0; + } + + private bool View_ValidateShowInspector() + { + return IsMounted() && SelectedPaths.Count > 0; + } + + private bool View_ValidateOpenWebUrl() + { + return IsMounted(); + } + + private bool View_ValidateEditWith() + { + if (IsMounted() && SelectedPaths.Count > 0) + { + foreach (Path selected in SelectedPaths) + { + if (!IsEditable(selected)) + { + return false; + } + } + return true; + } + return false; + } + + /// + /// True if the selected path is editable (not a directory) + private bool IsEditable(Path selected) + { + if (Session.getHost().getCredentials().isAnonymousLogin()) + { + return false; + } + return selected.isFile(); + } + + private bool View_ValidateDuplicateFile() + { + return IsMounted() && SelectedPaths.Count == 1; + } + + private bool View_ValidateRenameFile() + { + if (IsMounted() && SelectedPaths.Count == 1) + { + if (null == SelectedPath) + { + return false; + } + return ((Move) Session.getFeature(typeof (Move))).isSupported(SelectedPath); + } + return false; + } + + private void View_NewDownload() + { + throw new NotImplementedException(); + } + + private void View_OpenConnection() + { + ConnectionController c = ConnectionController.Instance(this); + DialogResult result = c.View.ShowDialog(View); + if (result == DialogResult.OK) + { + Mount(c.ConfiguredHost); + } + } + + private bool View_ValidateNewFolder() + { + return IsMounted(); + } + + private void View_DuplicateFile() + { + DuplicateFileController dc = + new DuplicateFileController(ObjectFactory.GetInstance(), this); + dc.Show(); + } + + private void View_NewFile() + { + CreateFileController fc = new CreateFileController(ObjectFactory.GetInstance(), this); + fc.Show(); + } + + private void View_Delete() + { + DeletePaths(SelectedPaths); + } + + private void View_NewFolder() + { + Location feature = (Location) Session.getFeature(typeof (Location)); + FolderController fc = new FolderController(ObjectFactory.GetInstance(), this, + feature != null + ? (IList) Utils.ConvertFromJavaList(feature.getLocations()) + : new List()); + fc.Show(); + } + + private bool View_RenameFile(Path path, string newName) + { + if (!String.IsNullOrEmpty(newName) && !newName.Equals(path.getName())) + { + Path renamed = new Path(path.getParent(), newName, path.getType()); + RenamePath(path, renamed); + } + return false; + } + + private DataObject View_BrowserDrag(ObjectListView listView) + { + DataObject data = new DataObject(DataFormats.FileDrop, + new[] + { + CreateAndWatchTemporaryFile(delegate(object sender, FileSystemEventArgs args) + { + _dropFolder = System.IO.Path.GetDirectoryName(args.FullPath); + Invoke(delegate { Download(SelectedPaths, LocalFactory.get(_dropFolder)); }); + }) + }); + return data; + } + + private void RemoveTemporaryFilesystemWatcher() + { + BeginInvoke(delegate + { + foreach (FileSystemWatcher watcher in _temporaryWatcher) + { + watcher.Dispose(); + } + _temporaryWatcher.Clear(); + }); + } + + private void RemoveTemporaryFiles(DataObject data) + { + if (data.ContainsFileDropList()) + { + foreach (string tmpFile in data.GetFileDropList()) + { + try + { + if (File.Exists(tmpFile)) + { + File.Delete(tmpFile); + } + if (null != _dropFolder) + { + string tmpDestFile = System.IO.Path.Combine(_dropFolder, System.IO.Path.GetFileName(tmpFile)); + if (File.Exists(tmpDestFile)) + { + File.Delete(tmpDestFile); + } + } + } + catch (IOException e) + { + Log.error("Could not remove temporary files.", e); + } + } + } + } + + private void View_BrowserEndDrag(DataObject data) + { + RemoveTemporaryFiles(data); + RemoveTemporaryFilesystemWatcher(); + } + + private void View_BrowserDropped(OlvDropEventArgs e) + { + if (IsMounted() && e.DataObject is DataObject && ((DataObject) e.DataObject).ContainsFileDropList()) + { + Path destination; + switch (e.DropTargetLocation) + { + case DropTargetLocation.Item: + destination = (Path) e.DropTargetItem.RowObject; + break; + case DropTargetLocation.Background: + destination = Workdir; + break; + default: + destination = null; + break; + } + + StringCollection dropList = (e.DataObject as DataObject).GetFileDropList(); + if (dropList.Count > 0) + { + IList roots = new List(); + foreach (string file in dropList) + { + Local local = LocalFactory.get(file); + roots.Add( + new TransferItem( + new Path(destination, local.getName(), + local.isDirectory() + ? EnumSet.of(AbstractPath.Type.directory) + : EnumSet.of(AbstractPath.Type.file)), local)); + } + UploadDroppedPath(roots, destination); + } + } + } + + public void UploadDroppedPath(IList roots, Path destination) + { + if (IsMounted()) + { + UploadTransfer q = new UploadTransfer(Session.getHost(), Utils.ConvertToJavaList(roots)); + if (q.getRoots().size() > 0) + { + transfer(q); + } + } + } + + /// + /// Check if we accept drag operation from an external program + /// + /// + private void View_BrowserCanDrop(OlvDropEventArgs args) + { + Log.trace("Entering View_BrowserCanDrop with " + args.Effect); + if (IsMounted() && !(args.DataObject is OLVDataObject)) + { + if (args.DataObject is DataObject && ((DataObject) args.DataObject).ContainsFileDropList()) + { + Path destination; + switch (args.DropTargetLocation) + { + case DropTargetLocation.Item: + destination = (Path) args.DropTargetItem.RowObject; + if (!destination.isDirectory()) + { + //dragging over file + destination = destination.getParent(); + } + break; + case DropTargetLocation.Background: + destination = Workdir; + break; + default: + args.Effect = DragDropEffects.None; + args.DropTargetLocation = DropTargetLocation.None; + return; + } + Touch feature = (Touch) Session.getFeature(typeof (Touch)); + if (!feature.isSupported(destination)) + { + Log.trace("Session does not allow file creation"); + args.Effect = DragDropEffects.None; + args.DropTargetLocation = DropTargetLocation.None; + return; + } + Log.trace("Setting effect to copy"); + args.Effect = DragDropEffects.Copy; + if (Workdir == destination) + { + args.DropTargetLocation = DropTargetLocation.Background; + } + else + { + args.DropTargetItem = args.ListView.ModelToItem(destination); + } + (args.DataObject as DataObject).SetDropDescription((DropImageType) args.Effect, "Copy to %1", + destination.getName()); + } + } + } + + private void View_ShowTransfers() + { + TransferController.Instance.View.Show(); + } + + private void View_ShowInspector() + { + IList selected = SelectedPaths; + if (selected.Count > 0) + { + if (PreferencesFactory.get().getBoolean("browser.info.inspector")) + { + if (null == _inspector || _inspector.View.IsDisposed) + { + _inspector = InfoController.Factory.Create(this, selected); + } + else + { + _inspector.Files = selected; + } + _inspector.View.Show(View); + } + else + { + InfoController c = InfoController.Factory.Create(this, selected); + c.View.Show(View); + } + } + } + + private void View_EditEvent(string exe) + { + foreach (Path selected in SelectedPaths) + { + Editor editor; + if (Utils.IsBlank(exe)) + { + editor = EditorFactory.instance().create(this, Session, selected); + } + else + { + editor = EditorFactory.instance().create(this, Session, new Application(exe, null), selected); + } + this.edit(editor); + } + } + + public void edit(Editor editor) + { + this.background(new WorkerBackgroundAction(this, Session, + editor.open(new DisabledApplicationQuitCallback(), new DisabledTransferErrorCallback(), + new DefaultEditorListener(this, Session, editor)))); + } + + private void UpdateEditIcon() + { + Path selected = SelectedPath; + if (null != selected) + { + if (IsEditable(selected)) + { + Application app = EditorFactory.instance().getEditor(selected.getName()); + string editCommand = app != null ? app.getIdentifier() : null; + if (Utils.IsNotBlank(editCommand)) + { + try + { + View.EditIcon = + IconCache.Instance.GetFileIconFromExecutable( + WindowsApplicationLauncher.GetExecutableCommand(editCommand), + IconCache.IconSize.Large).ToBitmap(); + return; + } + catch (ObjectDisposedException) + { + } + } + } + } + View.EditIcon = IconCache.Instance.IconForName("pencil", 32); + } + + private void UpdateOpenIcon() + { + View.OpenIcon = IconCache.Instance.GetDefaultBrowserIcon(); + } + + private void View_BrowserSelectionChanged() + { + UpdateEditIcon(); + + // update inspector content if available + IList selectedPaths = SelectedPaths; + + if (PreferencesFactory.get().getBoolean("browser.info.inspector")) + { + if (_inspector != null && _inspector.Visible) + { + if (selectedPaths.Count > 0) + { + _inspector.Files = selectedPaths; + } + } + } + } + + private void View_PathSelectionChanged() + { + string selected = View.SelectedComboboxPath; + if (selected != null) + { + Path workdir = Workdir; + Path p = workdir; + while (!p.getAbsolute().Equals(selected)) + { + p = p.getParent(); + } + SetWorkdir(p); + if (workdir.getParent().equals(p)) + { + SetWorkdir(p, workdir); + } + else + { + SetWorkdir(p); + } + } + } + + private void View_FolderUp() + { + Path previous = Workdir; + SetWorkdir(previous.getParent(), previous); + } + + private void View_HistoryBack() + { + Path selected = _navigation.back(); + if (selected != null) + { + Path previous = Workdir; + if (previous.getParent().equals(selected)) + { + SetWorkdir(selected, previous); + } + else + { + SetWorkdir(selected); + } + } + } + + private void View_HistoryForward() + { + Path selected = _navigation.forward(); + if (selected != null) + { + SetWorkdir(selected); + } + } + + private void View_BrowserDoubleClicked() + { + View_FolderInside(); + } + + private void View_QuickConnect() + { + if (string.IsNullOrEmpty(View.QuickConnectValue)) + { + return; + } + string input = View.QuickConnectValue.Trim(); + + // First look for equivalent bookmarks + BookmarkCollection bookmarkCollection = BookmarkCollection.defaultCollection(); + foreach (Host host in bookmarkCollection) + { + if (BookmarkNameProvider.toString(host).Equals(input)) + { + Mount(host); + return; + } + } + Mount(HostParser.parse(input)); + } + + /// + /// Open a new browser with the current selected folder as the working directory + /// + private void View_NewBrowser(object sender, NewBrowserEventArgs newBrowserEventArgs) + { + if (newBrowserEventArgs.SelectedAsWorkingDir) + { + Path selected = SelectedPath; + if (null == selected || !selected.isDirectory()) + { + selected = Workdir; + } + BrowserController c = MainController.NewBrowser(true); + + Host host = new HostDictionary().deserialize(Session.getHost().serialize(SerializerFactory.get())); + host.setDefaultPath(selected.getAbsolute()); + c.Mount(host); + } + else + { + BrowserController c = MainController.NewBrowser(true); + MainController.OpenDefaultBookmark(c); + } + } + + protected void transfer(Transfer transfer) + { + this.transfer(transfer, Utils.ConvertFromJavaList(transfer.getRoots(), delegate(object o) + { + TransferItem item = (TransferItem) o; + return item.remote; + })); + } + + /// + /// Transfers the files either using the queue or using + /// the browser session if #connection.pool.max is 1 + /// + /// + protected void transfer(Transfer transfer, IList selected) + { + this.transfer(transfer, selected, Session.getTransferType().equals(Host.TransferType.browser)); + } + + /// + /// + /// + /// + /// + /// + public void transfer(Transfer transfer, IList selected, bool browser) + { + TransferCallback callback = new ReloadTransferCallback(this, selected); + if (browser) + { + Background(new CallbackTransferBackgroundAction(callback, this, new ProgressTransferAdapter(this), this, + this, transfer, new TransferOptions())); + } + else + { + TransferController.Instance.StartTransfer(transfer, new TransferOptions(), callback); + } + } + + /// + /// + /// + /// true if a connection is being opened or is already initialized + public bool HasSession() + { + return Session != null; + } + + public bool IsMounted() + { + return HasSession() && Workdir != null; + } + + /// + /// + /// + /// All selected files should be reselected after reloading the view + public void ReloadData(bool preserveSelection) + { + if (preserveSelection) + { + //Remember the previously selected paths + ReloadData(SelectedPaths); + } + else + { + ReloadData(new List()); + } + } + + public void RefreshParentPath(Path changed) + { + RefreshParentPaths(new Collection {changed}); + } + + public void RefreshParentPaths(IList changed) + { + RefreshParentPaths(changed, new List()); + } + + public override void start(BackgroundAction action) + { + Invoke(delegate { View.StartActivityAnimation(); }); + } + + public override void stop(BackgroundAction action) + { + Invoke(delegate { View.StopActivityAnimation(); }); + } + + public void RefreshParentPaths(IList changed, IList selected) + { + bool rootRefreshed = false; //prevent multiple root updates + foreach (Path path in changed) + { + _cache.invalidate(path.getParent()); + if (Workdir.equals(path.getParent())) + { + if (rootRefreshed) + { + continue; + } + View.SetBrowserModel(_browserModel.ChildrenGetter(Workdir)); + rootRefreshed = true; + } + else + { + View.RefreshBrowserObject(path.getParent()); + } + } + SelectedPaths = selected; + } + + public void ReloadData(Path directory, bool preserveSelection) + { + if (Workdir.equals(directory)) + { + ReloadData(true); + } + else + { + View.RefreshBrowserObject(directory); + } + } + + protected void ReloadData(IList selected) + { + if (null != Workdir) + { + IEnumerable children = _browserModel.ChildrenGetter(Workdir); + //clear selection before resetting model. Otherwise we have weird selection effects. + SelectedPaths = new List(); + int savedIndex = View.TopItemIndex; + View.BeginBrowserUpdate(); + View.SetBrowserModel(null); // #7670 + View.SetBrowserModel(children); + View.TopItemIndex = savedIndex; + SelectedPaths = selected; + List toUpdate = new List(); + foreach (Path path in View.VisiblePaths) + { + if (path.isDirectory()) + { + toUpdate.Add(path); + } + } + View.RefreshBrowserObjects(toUpdate); + View.EndBrowserUpdate(); + } + else + { + View.SetBrowserModel(null); + } + SelectedPaths = selected; + SetStatus(); + } + + public void SetWorkdir(Path directory) + { + SetWorkdir(directory, new List()); + } + + public void SetWorkdir(Path directory, Path selected) + { + SetWorkdir(directory, new List {selected}); + } + + /// + /// Sets the current working directory. This will udpate the path selection dropdown button + /// and also add this path to the browsing history. If the path cannot be a working directory (e.g. permission + /// issues trying to enter the directory), reloading the browser view is canceled and the working directory + /// not changed. + /// + /// The new working directory to display or null to detach any working directory from the browser + /// + public void SetWorkdir(Path directory, List selected) + { + Workdir = directory; + // Remove any custom file filter + SetPathFilter(null); + // Change to last selected browser view + ReloadData(Workdir != null ? selected : new List()); + SetNavigation(IsMounted()); + } + + private void SetNavigation(bool enabled) + { + View.SearchEnabled = enabled; + if (!enabled) + { + View.SearchString = String.Empty; + } + List paths = new List(); + if (enabled) + { + // Update the current working directory + _navigation.add(Workdir); + Path p = Workdir; + do + { + paths.Add(p.getAbsolute()); + p = p.getParent(); + } while (!p.isRoot()); + View.PopulatePaths(paths); + } + View.ComboboxPathEnabled = enabled; + View.HistoryBackEnabled = enabled && _navigation.getBack().size() > 1; + View.HistoryForwardEnabled = enabled && _navigation.getForward().size() > 0; + View.ParentPathEnabled = enabled && !Workdir.isRoot(); + } + + public void RefreshObject(Path path, bool preserveSelection) + { + if (preserveSelection) + { + RefreshObject(path, View.SelectedPaths); + } + else + { + RefreshObject(path, new List()); + } + } + + public void RefreshObject(Path path, IList selected) + { + if (Workdir.Equals(path)) + { + View.SetBrowserModel(_browserModel.ChildrenGetter(path)); + } + else + { + if (!path.isDirectory()) + { + View.RefreshBrowserObject(path.getParent()); + } + else + { + View.RefreshBrowserObject(path); + } + } + SelectedPaths = selected; + SetStatus(); + } + + public void Mount(Host host) + { + if (Log.isDebugEnabled()) + { + Log.debug(string.Format("Mount session for {0}", host)); + } + CallbackDelegate callbackDelegate = delegate + { + // The browser has no session, we are allowed to proceed + // Initialize the browser with the new session attaching all listeners + Session session = Init(host); + background(new MountAction(this, session, host, _limitListener)); + }; + Unmount(callbackDelegate); + } + + /// + /// Initializes a session for the passed host. Setting up the listeners and adding any callback + /// controllers needed for login, trust management and hostkey verification. + /// + /// + /// A session object bound to this browser controller + private Session Init(Host host) + { + Session = SessionFactory.create(host, + new KeychainX509TrustManager(new DefaultTrustManagerHostnameCallback(host)), + new KeychainX509KeyManager()); + SetWorkdir(null); + View.SelectedEncoding = Session.getEncoding(); + View.ClearTranscript(); + _navigation.clear(); + _pasteboard = PathPasteboardFactory.getPasteboard(Session); + return Session; + } + + // some simple caching as _session.isConnected() throws a ConnectionCanceledException if not connected + + /// + /// + /// + /// true if mounted and the connection to the server is alive + public bool IsConnected() + { + if (IsMounted()) + { + return Session.isConnected(); + } + return false; + } + + public static bool ApplicationShouldTerminate() + { + // Determine if there are any open connections + foreach (BrowserController controller in new List(MainController.Browsers)) + { + BrowserController c = controller; + if (!controller.Unmount(delegate(DialogResult result) + { + if (DialogResult.OK == result) + { + c.View.Dispose(); + return true; + } + return false; + }, delegate { })) + { + return false; // Disconnect cancelled + } + } + return true; + } + + public bool Unmount() + { + return Unmount(() => { }); + } + + public bool Unmount(CallbackDelegate disconnected) + { + return Unmount(result => + { + if (DialogResult.OK == result) + { + UnmountImpl(disconnected); + return true; + } + // No unmount yet + return false; + }, disconnected); + } + + /// + /// + /// + /// + /// + /// True if the unmount process is in progress or has been finished, false if cancelled + public bool Unmount(DialogCallbackDelegate unmountImpl, CallbackDelegate disconnected) + { + if (IsConnected() || isActivityRunning()) + { + if (PreferencesFactory.get().getBoolean("browser.disconnect.confirm")) + { + DialogResult result = CommandBox(LocaleFactory.localizedString("Disconnect"), + String.Format(LocaleFactory.localizedString("Disconnect from {0}"), + Session.getHost().getHostname()), + LocaleFactory.localizedString("The connection will be closed."), + String.Format("{0}", LocaleFactory.localizedString("Disconnect")), true, + LocaleFactory.localizedString("Don't ask again", "Configuration"), SysIcons.Question, + delegate(int option, bool verificationChecked) + { + if (verificationChecked) + { + // Never show again. + PreferencesFactory.get().setProperty("browser.disconnect.confirm", false); + } + switch (option) + { + case 0: // Disconnect + unmountImpl(DialogResult.OK); + break; + } + }); + return DialogResult.OK == result; + } + } + UnmountImpl(disconnected); + // Unmount succeeded + return true; + } + + private void UnmountImpl(CallbackDelegate disconnected) + { + CallbackDelegate run = delegate + { + _cache.clear(); + View.WindowTitle = PreferencesFactory.get().getProperty("application.name"); + disconnected(); + }; + + Disconnect(run); + } + + public void SetStatus() + { + BackgroundAction current = getActions().getCurrent(); + message(null != current ? current.getActivity() : null); + } + + public void SetStatus(string label) + { + View.StatusLabel = label; + } + + private void PopulateQuickConnect() + { + List nicknames = new List(); + foreach (Host host in _bookmarkCollection) + { + nicknames.Add(BookmarkNameProvider.toString(host)); + } + View.PopulateQuickConnect(nicknames); + } + + /// + /// + /// + /// The existing file + /// The renamed file + protected internal void RenamePath(Path path, Path renamed) + { + RenamePaths(new Dictionary {{path, renamed}}); + } + + /// + /// + /// + /// + /// A dictionary with the original files as the key and + /// the destination files as the value + /// + protected internal void RenamePaths(IDictionary selected) + { + if (CheckMove(selected)) + { + List changed = new List(); + changed.AddRange(selected.Keys); + changed.AddRange(selected.Values); + MoveAction move = new MoveAction(this, Utils.ConvertToJavaMap(selected), changed); + Background(move); + } + } + + /// + /// Displays a warning dialog about files to be moved + /// + /// The files to check for existence + /// + private bool CheckMove(IDictionary selected) + { + if (PreferencesFactory.get().getBoolean("browser.move.confirm")) + { + StringBuilder alertText = + new StringBuilder(LocaleFactory.localizedString("Do you want to move the selected files?")); + + StringBuilder content = new StringBuilder(); + int i = 0; + bool rename = false; + IEnumerator> enumerator = null; + for (enumerator = selected.GetEnumerator(); i < 10 && enumerator.MoveNext();) + { + KeyValuePair next = enumerator.Current; + if (next.Key.getParent().equals(next.Value.getParent())) + { + rename = true; + } + // u2022 = Bullet + content.Append("\n" + Character.toString('\u2022') + " " + next.Key.getName()); + i++; + } + if (enumerator.MoveNext()) + { + content.Append("\n" + Character.toString('\u2022') + " ...)"); + } + bool result = false; + CommandBox( + rename + ? LocaleFactory.localizedString("Rename", "Transfer") + : LocaleFactory.localizedString("Move", "Transfer"), alertText.ToString(), content.ToString(), + String.Format("{0}", + rename + ? LocaleFactory.localizedString("Rename", "Transfer") + : LocaleFactory.localizedString("Move", "Transfer")), true, + LocaleFactory.localizedString("Don't ask again", "Configuration"), SysIcons.Question, + delegate(int option, bool verificationChecked) + { + if (verificationChecked) + { + // Never show again. + PreferencesFactory.get().setProperty("browser.move.confirm", false); + } + if (option == 0) + { + result = CheckOverwrite(selected.Values); + } + }); + return result; + } + return CheckOverwrite(selected.Values); + } + + /// + /// Recursively deletes the files + /// + /// The files selected in the browser to delete + public void DeletePaths(ICollection selected) + { + ICollection normalized = + Utils.ConvertFromJavaList(PathNormalizer.normalize(Utils.ConvertToJavaList(selected))); + if (normalized.Count == 0) + { + return; + } + + StringBuilder alertText = + new StringBuilder( + LocaleFactory.localizedString("Really delete the following files? This cannot be undone.")); + + StringBuilder content = new StringBuilder(); + int i = 0; + IEnumerator enumerator; + for (enumerator = selected.GetEnumerator(); i < 10 && enumerator.MoveNext();) + { + Path item = enumerator.Current; + if (i > 0) content.AppendLine(); + // u2022 = Bullet + content.Append(Character.toString('\u2022') + " " + item.getName()); + i++; + } + if (enumerator.MoveNext()) + { + content.Append("\n" + Character.toString('\u2022') + " ...)"); + } + DialogResult r = QuestionBox(LocaleFactory.localizedString("Delete"), alertText.ToString(), + content.ToString(), String.Format("{0}", LocaleFactory.localizedString("Delete")), true); + if (r == DialogResult.OK) + { + DeletePathsImpl(normalized); + } + } + + private void DeletePathsImpl(ICollection files) + { + background(new DeleteAction(this, LoginCallbackFactory.get(this), Utils.ConvertToJavaList(files))); + } + + public void SetPathFilter(string searchString) + { + if (Utils.IsBlank(searchString)) + { + View.SearchString = String.Empty; + // Revert to the last used default filter + if (ShowHiddenFiles) + { + FilenameFilter = new NullFilter(); + } + else + { + FilenameFilter = new RegexFilter(); + } + } + else + { + // Setting up a custom filter for the directory listing + FilenameFilter = new CustomPathFilter(searchString); + } + ReloadData(true); + } + + /// + /// Displays a warning dialog about already existing files + /// + /// The files to check for existance + private bool CheckOverwrite(ICollection selected) + { + StringBuilder alertText = + new StringBuilder( + LocaleFactory.localizedString( + "A file with the same name already exists. Do you want to replace the existing file?")); + + StringBuilder content = new StringBuilder(); + int i = 0; + IEnumerator enumerator = null; + bool shouldWarn = false; + for (enumerator = selected.GetEnumerator(); enumerator.MoveNext();) + { + Path item = enumerator.Current; + if (_cache.get(item.getParent()).contains(item)) + { + if (i < 10) + { + // u2022 = Bullet + content.Append("\n" + Character.toString('\u2022') + " " + item.getName()); + } + shouldWarn = true; + } + i++; + } + if (i >= 10) + { + content.Append("\n" + Character.toString('\u2022') + " ...)"); + } + if (shouldWarn) + { + DialogResult r = QuestionBox(LocaleFactory.localizedString("Overwrite"), alertText.ToString(), + content.ToString(), String.Format("{0}", LocaleFactory.localizedString("Overwrite")), true); + return r == DialogResult.OK; + } + else + { + return true; + } + } + + /// + /// + /// + /// The original file to duplicate + /// The destination of the duplicated file + protected internal void DuplicatePath(Path source, Path destination) + { + DuplicatePaths(new Dictionary {{source, destination}}); + } + + /// + /// + /// + /// A dictionary with the original files as the key and the destination files as the value + /// + protected internal void DuplicatePaths(IDictionary selected) + { + if (CheckOverwrite(selected.Values)) + { + CopyTransfer copy = new CopyTransfer(Session.getHost(), Session.getHost(), + Utils.ConvertToJavaMap(selected)); + List changed = new List(); + changed.AddRange(selected.Values); + transfer(copy, changed, true); + } + } + + /// + /// + /// + /// The view to show + public void ToggleView(BrowserView view) + { + Log.debug("ToggleView:" + view); + if (View.CurrentView == view) return; + + SetBookmarkFilter(null); + switch (view) + { + case BrowserView.File: + View.CurrentView = BrowserView.File; + SetPathFilter(null); + ReloadData(true); + break; + case BrowserView.Bookmark: + View.CurrentView = BrowserView.Bookmark; + _bookmarkModel.Source = BookmarkCollection.defaultCollection(); + ReloadBookmarks(); + SelectHost(); + break; + case BrowserView.History: + View.CurrentView = BrowserView.History; + _bookmarkModel.Source = HistoryCollection.defaultCollection(); + ReloadBookmarks(); + SelectHost(); + break; + case BrowserView.Bonjour: + View.CurrentView = BrowserView.Bonjour; + _bookmarkModel.Source = RendezvousCollection.defaultCollection(); + ReloadBookmarks(); + SelectHost(); + break; + } + } + + private void SelectHost() + { + if (IsMounted()) + { + View.SelectBookmark(Session.getHost()); + } + } + + /// + /// Reload bookmarks table from the currently selected model + /// + public void ReloadBookmarks() + { + ReloadBookmarks(null); + } + + /// + /// Reload bookmarks table from the currently selected model + /// + public void ReloadBookmarks(Host selected) + { + //Note: expensive for a big bookmark list (might need a refactoring) + View.SetBookmarkModel(_bookmarkModel.Source, selected); + SetStatus(); + } + + private class BookmarkFilter : HostFilter + { + private readonly string _searchString; + + public BookmarkFilter(String searchString) + { + _searchString = searchString; + } + + public bool accept(Host host) + { + return BookmarkNameProvider.toString(host).ToLower().Contains(_searchString.ToLower()) || + (null == host.getComment() + ? false + : host.getComment().ToLower().Contains(_searchString.ToLower())) || + (null == host.getCredentials().getUsername() + ? false + : host.getCredentials().getUsername().ToLower().Contains(_searchString.ToLower())) || + host.getHostname().ToLower().Contains(_searchString.ToLower()); + } + } + + private class CallbackTransferBackgroundAction : TransferBackgroundAction + { + private readonly TransferCallback _callback; + private readonly Transfer _transfer; + + public CallbackTransferBackgroundAction(TransferCallback callback, BrowserController controller, + TransferListener transferListener, ProgressListener progressListener, + TranscriptListener transcriptListener, Transfer transfer, TransferOptions options) + : base( + controller, controller.Session, controller._cache, transferListener, progressListener, + transcriptListener, transfer, options) + { + _callback = callback; + _transfer = transfer; + } + + public override void finish() + { + if (_transfer.isComplete()) + { + _callback.complete(_transfer); + } + base.finish(); + } + } + + private class CreateArchiveAction : BrowserControllerBackgroundAction + { + private readonly Archive _archive; + private readonly IList _selected; + private readonly List _selectedJava; + + public CreateArchiveAction(BrowserController controller, Archive archive, IList selected) + : base(controller) + { + _archive = archive; + _selectedJava = Utils.ConvertToJavaList(selected); + _selected = selected; + } + + public override object run() + { + ((Compress) BrowserController.Session.getFeature(typeof (Compress))).archive(_archive, + BrowserController.Workdir, _selectedJava, BrowserController, BrowserController); + return true; + } + + public override string getActivity() + { + return _archive.getCompressCommand(BrowserController.Workdir, _selectedJava); + } + + public override void cleanup() + { + base.cleanup(); + BrowserController.RefreshParentPaths(_selected, new List {_archive.getArchive(_selectedJava)}); + } + } + + private class CustomPathFilter : SearchFilter, IModelFilter + { + public CustomPathFilter(String searchString) : base(searchString) + { + } + + public bool Filter(object modelObject) + { + return accept(modelObject); + } + } + + private class DeleteAction : WorkerBackgroundAction + { + public DeleteAction(BrowserController controller, LoginCallback prompt, List files) + : base(controller, controller.Session, new InnerDeleteWorker(controller, prompt, files)) + { + } + + private class InnerDeleteWorker : DeleteWorker + { + private readonly BrowserController _controller; + private readonly List _files; + + public InnerDeleteWorker(BrowserController controller, LoginCallback prompt, List files) + : base(prompt, files, controller) + { + _controller = controller; + _files = files; + } + + public override void cleanup(object result) + { + _controller.RefreshParentPaths((IList) Utils.ConvertFromJavaList((List) result)); + } + } + } + + private class DisconnectAction : WorkerBackgroundAction + { + private readonly BrowserController _controller; + + public DisconnectAction(BrowserController controller, CallbackDelegate callback) + : base(controller, controller.Session, controller.Cache, new InnerDisconnectWorker(controller, callback) + ) + { + _controller = controller; + } + + public override void prepare() + { + if (null == _controller.Session) + { + throw new ConnectionCanceledException(); + } + if (!_controller.Session.isConnected()) + { + throw new ConnectionCanceledException(); + } + base.prepare(); + } + + private class InnerDisconnectWorker : DisconnectWorker + { + private readonly CallbackDelegate _callback; + + public InnerDisconnectWorker(BrowserController controller, CallbackDelegate callback) + : base(controller.Session.getHost()) + { + _callback = callback; + } + + public override void cleanup(object wd) + { + base.cleanup(wd); + _callback(); + } + } + } + + private class MountAction : WorkerBackgroundAction + { + private readonly BrowserController _controller; + private readonly Host _host; + + public MountAction(BrowserController controller, Session session, Host host, ListProgressListener listener) + : base(controller, controller.Session, new InnerMountWorker(controller, session, listener)) + { + _controller = controller; + _host = host; + } + + public override void init() + { + base.init(); + _controller.View.WindowTitle = BookmarkNameProvider.toString(_host, true); + _controller.View.RefreshBookmark(_controller.Session.getHost()); + } + + private class InnerMountWorker : MountWorker + { + private readonly BrowserController _controller; + private readonly Session _session; + + public InnerMountWorker(BrowserController controller, Session session, ListProgressListener listener) + : base(session.getHost(), controller._cache, listener) + { + _controller = controller; + _session = session; + } + + public override void cleanup(object wd) + { + Path workdir = (Path) wd; + if (null == workdir) + { + _controller.Unmount(); + } + else + { + // Set the working directory + _controller.SetWorkdir(workdir); + _controller.View.RefreshBookmark(_session.getHost()); + _controller.ToggleView(BrowserView.File); + _controller.View.SecureConnection = _session is SSLSession; + _controller.View.CertBasedConnection = _session is SSLSession; + _controller.View.SecureConnectionVisible = true; + } + } + } + } + + private class MoveAction : WorkerBackgroundAction + { + public MoveAction(BrowserController controller, Map selected, IList changed) + : base(controller, controller.Session, new InnerMoveWorker(controller, selected, changed)) + { + } + + private class InnerMoveWorker : MoveWorker + { + private readonly IList _changed; + private readonly BrowserController _controller; + private readonly Map _files; + + public InnerMoveWorker(BrowserController controller, Map files, IList changed) + : base(files, controller) + { + _controller = controller; + _files = files; + _changed = changed; + } + + public override void cleanup(object result) + { + _controller.RefreshParentPaths(_changed, + (IList) Utils.ConvertFromJavaList(_files.values())); + } + } + } + + private class ProgressTransferAdapter : TransferAdapter + { + private readonly BrowserController _controller; + + public ProgressTransferAdapter(BrowserController controller) + { + _controller = controller; + } + + public override void progress(TransferProgress status) + { + _controller.message(status.getProgress()); + } + } + + private class ReloadTransferCallback : TransferCallback + { + private readonly IList _changed; + private readonly BrowserController _controller; + + public ReloadTransferCallback(BrowserController controller, IList changed) + { + _controller = controller; + _changed = changed; + } + + public void complete(Transfer t) + { + _controller.invoke(new ReloadAction(_controller, _changed)); + } + + private class ReloadAction : WindowMainAction + { + private readonly IList _changed; + + public ReloadAction(BrowserController c, IList changed) : base(c) + { + _changed = changed; + } + + public override bool isValid() + { + return base.isValid() && ((BrowserController) Controller).IsConnected(); + } + + public override void run() + { + ((BrowserController) Controller).RefreshParentPaths(_changed, _changed); + } + } + } + + private class RevertAction : WorkerBackgroundAction + { + public RevertAction(BrowserController controller, IList files) + : base(controller, controller.Session, new InnerRevertWorker(controller, files)) + { + } + + private class InnerRevertWorker : RevertWorker + { + private readonly BrowserController _controller; + private readonly IList _files; + + public InnerRevertWorker(BrowserController controller, IList files) + : base(Utils.ConvertToJavaList(files)) + { + _controller = controller; + _files = files; + } + + public override void cleanup(object result) + { + _controller.RefreshParentPaths((IList) Utils.ConvertFromJavaList((List) result)); + } + } + } + + private class UnarchiveAction : BrowserControllerBackgroundAction + { + private readonly Archive _archive; + private readonly List _expanded; + private readonly Path _selected; + + public UnarchiveAction(BrowserController controller, Archive archive, Path selected, List expanded) + : base(controller) + { + _archive = archive; + _expanded = expanded; + _selected = selected; + } + + public override object run() + { + ((Compress) BrowserController.Session.getFeature(typeof (Compress))).unarchive(_archive, _selected, + BrowserController, BrowserController); + return true; + } + + public override string getActivity() + { + return _archive.getDecompressCommand(_selected); + } + + public override void cleanup() + { + base.cleanup(); + _expanded.AddRange(Utils.ConvertFromJavaList(_archive.getExpanded(new ArrayList {_selected}))); + BrowserController.RefreshParentPaths(_expanded, _expanded); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/CommandController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/CommandController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/CommandController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/CommandController.cs index 93cf6dc69b..f81bb09f98 100644 --- a/source/ch/cyberduck/ui/controller/CommandController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/CommandController.cs @@ -1,99 +1,99 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using ch.cyberduck.core; -using ch.cyberduck.core.features; -using ch.cyberduck.core.threading; -using Ch.Cyberduck.Core; -using StructureMap; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal class CommandController : WindowController, TranscriptListener - { - private readonly WindowController _parent; - private readonly Session _session; - - public CommandController(WindowController parent, Session session) - : this(parent, session, ObjectFactory.GetInstance()) - { - } - - private CommandController(WindowController parent, Session session, ICommandView view) - { - View = view; - _parent = parent; - _session = session; - View.SendEvent += View_SendEvent; - } - - public override void log(bool request, string message) - { - AsyncDelegate mainAction = delegate { View.AddTranscriptEntry(message); }; - Invoke(mainAction); - } - - private void View_SendEvent() - { - string command = View.Command; - if (Utils.IsNotBlank(command)) - { - View.StartActivityAnimation(); - _parent.Background(new CommandControllerBackgroundAction(this, _session, PathCache.empty(), command)); - } - } - - private class CommandControllerBackgroundAction : ControllerBackgroundAction - { - private readonly string _command; - private readonly CommandController _controller; - private readonly Session _session; - - public CommandControllerBackgroundAction(CommandController controller, Session session, PathCache cache, - string command) : base(controller, session, cache) - { - _controller = controller; - _session = session; - _command = command; - } - - public override bool alert() - { - return false; - } - - public override object run() - { - Command feature = (Command) _session.getFeature(typeof (Command)); - feature.send(_command, this, _controller); - return null; - } - - public override void cleanup() - { - base.cleanup(); - _controller.View.StopActivityAnimation(); - } - - public override string getActivity() - { - return _command; - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using ch.cyberduck.core; +using ch.cyberduck.core.features; +using ch.cyberduck.core.threading; +using Ch.Cyberduck.Core; +using StructureMap; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal class CommandController : WindowController, TranscriptListener + { + private readonly WindowController _parent; + private readonly Session _session; + + public CommandController(WindowController parent, Session session) + : this(parent, session, ObjectFactory.GetInstance()) + { + } + + private CommandController(WindowController parent, Session session, ICommandView view) + { + View = view; + _parent = parent; + _session = session; + View.SendEvent += View_SendEvent; + } + + public override void log(bool request, string message) + { + AsyncDelegate mainAction = delegate { View.AddTranscriptEntry(message); }; + Invoke(mainAction); + } + + private void View_SendEvent() + { + string command = View.Command; + if (Utils.IsNotBlank(command)) + { + View.StartActivityAnimation(); + _parent.Background(new CommandControllerBackgroundAction(this, _session, PathCache.empty(), command)); + } + } + + private class CommandControllerBackgroundAction : ControllerBackgroundAction + { + private readonly string _command; + private readonly CommandController _controller; + private readonly Session _session; + + public CommandControllerBackgroundAction(CommandController controller, Session session, PathCache cache, + string command) : base(controller, session, cache) + { + _controller = controller; + _session = session; + _command = command; + } + + public override bool alert() + { + return false; + } + + public override object run() + { + Command feature = (Command) _session.getFeature(typeof (Command)); + feature.send(_command, this, _controller); + return null; + } + + public override void cleanup() + { + base.cleanup(); + _controller.View.StopActivityAnimation(); + } + + public override string getActivity() + { + return _command; + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/ConnectionController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/ConnectionController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/ConnectionController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/ConnectionController.cs index 481dbf144c..531f4e20e3 100644 --- a/source/ch/cyberduck/ui/controller/ConnectionController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/ConnectionController.cs @@ -1,479 +1,479 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Collections.Generic; -using System.Media; -using System.Threading; -using ch.cyberduck.core; -using ch.cyberduck.core.diagnostics; -using ch.cyberduck.core.ftp; -using ch.cyberduck.core.local; -using ch.cyberduck.core.preferences; -using ch.cyberduck.core.threading; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Ui.Core.Preferences; -using Ch.Cyberduck.Ui.Winforms.Controls; -using java.lang; -using org.apache.log4j; -using StructureMap; -using Object = System.Object; -using String = System.String; - -namespace Ch.Cyberduck.Ui.Controller -{ - public sealed class ConnectionController : WindowController - { - private static readonly IDictionary Controllers = - new Dictionary(); - - private static readonly string Default = LocaleFactory.localizedString("Default"); - private static readonly Logger Log = Logger.getLogger(typeof (ConnectionController).FullName); - private readonly Object _syncRootReachability = new Object(); - private readonly Timer _ticklerReachability; - - private HostPasswordStore keychain - = PasswordStoreFactory.get(); - - private ConnectionController(IConnectionView view) - { - View = view; - - _ticklerReachability = new Timer(OnReachability, null, Timeout.Infinite, Timeout.Infinite); - - View.ToggleOptions += View_ToggleOptions; - View.OptionsVisible = PreferencesFactory.get().getBoolean("connection.toggle.options"); - View.ViewClosedEvent += - delegate { PreferencesFactory.get().setProperty("connection.toggle.options", View.OptionsVisible); }; - - Init(); - } - - private ConnectionController() : this(ObjectFactory.GetInstance()) - { - } - - public override bool Singleton - { - get { return true; } - } - - public Host ConfiguredHost - { - get - { - Protocol protocol = View.SelectedProtocol; - Host parsed = new Host(protocol, View.Hostname, Integer.parseInt(View.Port), View.Path); - if (protocol.getType() == Protocol.Type.ftp) - { - parsed.setFTPConnectMode(View.SelectedConnectMode); - } - Credentials credentials = parsed.getCredentials(); - credentials.setUsername(View.Username); - credentials.setPassword(View.Password); - credentials.setSaved(View.SavePasswordChecked); - if (protocol.getType() == Protocol.Type.ssh) - { - if (View.PkCheckboxState) - { - credentials.setIdentity(LocalFactory.get(View.PkLabel)); - } - } - if (View.SelectedEncoding.Equals(Default)) - { - parsed.setEncoding(null); - } - else - { - parsed.setEncoding(View.SelectedEncoding); - } - return parsed; - } - } - - public static ConnectionController Instance(WindowController parent) - { - ConnectionController c; - if (!Controllers.TryGetValue(parent, out c)) - { - c = new ConnectionController(); - Controllers.Add(parent, c); - parent.View.ViewClosedEvent += delegate - { - Controllers.Remove(parent); - c.View.Close(); - }; - } - return c; - } - - public override bool ViewShouldClose() - { - if (Utils.IsBlank(View.Hostname)) - { - SystemSounds.Beep.Play(); - return false; - } - if (Utils.IsBlank(View.Username)) - { - SystemSounds.Beep.Play(); - return false; - } - return true; - } - - private void Init() - { - InitProtocols(); - InitConnectModes(); - InitEncodings(); - - View.Username = PreferencesFactory.get().getProperty("connection.login.name"); - View.PkLabel = LocaleFactory.localizedString("No private key selected"); - View.SavePasswordChecked = PreferencesFactory.get().getBoolean("connection.login.useKeychain") && - PreferencesFactory.get().getBoolean("connection.login.addKeychain"); - View.AnonymousChecked = false; - View.PkCheckboxState = false; - View.SelectedEncoding = Default; - View.SelectedConnectMode = FTPConnectMode.unknown; - View.ChangedProtocolEvent += View_ChangedProtocolEvent; - View.ChangedPortEvent += View_ChangedPortEvent; - View.ChangedUsernameEvent += View_ChangedUsernameEvent; - View.ChangedServerEvent += View_ChangedServerEvent; - View.ChangedEncodingEvent += View_ChangedEncodingEvent; - View.ChangedPathEvent += View_ChangedPathEvent; - View.ChangedPublicKeyCheckboxEvent += View_ChangedPublicKeyCheckboxEvent; - View.ChangedAnonymousCheckboxEvent += View_ChangedAnonymousCheckboxEvent; - View.ChangedSavePasswordCheckboxEvent += View_ChangedSavePasswordCheckboxEvent; - View.ChangedPrivateKey += View_ChangedPrivateKey; - View.OpenUrl += View_OpenUrl; - - View_ChangedProtocolEvent(); - } - - private void View_ChangedPrivateKey(object sender, PrivateKeyArgs e) - { - if (null != e.KeyFile) - { - View.PkLabel = e.KeyFile; - View.PasswordEnabled = false; - } - else - { - View.PkLabel = LocaleFactory.localizedString("No private key selected"); - } - } - - private void View_ChangedSavePasswordCheckboxEvent() - { - PreferencesFactory.get().setProperty("connection.login.addKeychain", View.SavePasswordChecked); - } - - private void View_OpenUrl() - { - BrowserLauncherFactory.get().open(View.URL); - } - - private void View_ChangedAnonymousCheckboxEvent() - { - if (View.AnonymousChecked) - { - View.UsernameEnabled = false; - View.Username = PreferencesFactory.get().getProperty("connection.login.anon.name"); - View.PasswordEnabled = false; - View.Password = string.Empty; - } - else - { - View.UsernameEnabled = true; - View.Username = PreferencesFactory.get().getProperty("connection.login.name"); - View.PasswordEnabled = true; - } - UpdateUrlLabel(); - } - - private void View_ChangedPublicKeyCheckboxEvent() - { - string s = LocaleFactory.localizedString("No private key selected"); - if (View.PkCheckboxState) - { - string selectedKeyFile = PreferencesFactory.get().getProperty("local.user.home"); - if (!s.Equals(View.PkLabel)) - { - selectedKeyFile = View.PkLabel; - } - - View.PasswordEnabled = true; - View.ShowPrivateKeyBrowser(selectedKeyFile); - } - else - { - View_ChangedPrivateKey(this, new PrivateKeyArgs(null)); - } - } - - private void View_ChangedPathEvent() - { - UpdateUrlLabel(); - } - - private void View_ChangedEncodingEvent() - { - ; - } - - private void View_ChangedServerEvent() - { - if (ProtocolFactory.isURL(View.Hostname)) - { - Host parsed = HostParser.parse(View.Hostname); - View.Hostname = parsed.getHostname(); - View.SelectedProtocol = parsed.getProtocol(); - View.Port = parsed.getPort().ToString(); - View.Username = parsed.getCredentials().getUsername(); - View.Path = parsed.getDefaultPath(); - View.AnonymousChecked = parsed.getCredentials().isAnonymousLogin(); - } - UpdateUrlLabel(); - UpdateIdentity(); - ReadPasswordFromKeychain(); - Reachable(); - } - - public void ReadPasswordFromKeychain() - { - if (PreferencesFactory.get().getBoolean("connection.login.useKeychain")) - { - if (string.IsNullOrEmpty(View.Hostname)) - { - return; - } - if (string.IsNullOrEmpty(View.Port)) - { - return; - } - if (string.IsNullOrEmpty(View.Username)) - { - return; - } - Protocol protocol = View.SelectedProtocol; - string password = keychain.getPassword(protocol.getScheme(), Integer.parseInt(View.Port), View.Hostname, View.Username); - if (Utils.IsBlank(password)) { - View.Password = password; - } - } - } - - private void Reachable() - { - if (!string.IsNullOrEmpty(View.Hostname)) - { - // Delay to 2 second. When typing changes we don't have to check the reachbility for each stroke. - _ticklerReachability.Change(2000, Timeout.Infinite); - } - else - { - View.AlertIconEnabled = false; - } - } - - private void View_ChangedUsernameEvent() - { - UpdateUrlLabel(); - ReadPasswordFromKeychain(); - } - - private void View_ChangedPortEvent() - { - //if empty we set the default port the selected protocol - if (String.IsNullOrEmpty(View.Port)) - { - View.Port = View.SelectedProtocol.getDefaultPort().ToString(); - } - UpdateUrlLabel(); - Reachable(); - } - - private void View_ChangedProtocolEvent() - { - Log.debug("View_ChangedProtocolEvent"); - Protocol protocol = View.SelectedProtocol; - - View.Port = protocol.getDefaultPort().ToString(); - View.PortFieldEnabled = protocol.isPortConfigurable(); - if (!protocol.isHostnameConfigurable()) - { - View.HostFieldEnabled = false; - View.Hostname = protocol.getDefaultHostname(); - View.PathEnabled = true; - } - else - { - if (!View.HostFieldEnabled) - { - // Was previously configured with a static configuration - View.Hostname = string.Empty; - } - if (!View.PathEnabled) - { - // Was previously configured with a static configuration - View.Path = string.Empty; - } - if (Utils.IsNotBlank(protocol.getDefaultHostname())) - { - // Prefill with default hostname - View.Hostname = protocol.getDefaultHostname(); - } - - View.UsernameEnabled = true; - View.HostFieldEnabled = true; - View.PathEnabled = true; - } - View.UsernameLabel = protocol.getUsernamePlaceholder() + ":"; - View.PasswordLabel = protocol.getPasswordPlaceholder() + ":"; - View.ConnectModeFieldEnabled = protocol.getType() == Protocol.Type.ftp; - if (!protocol.isEncodingConfigurable()) - { - View.SelectedEncoding = Default; - } - View.EncodingFieldEnabled = protocol.isEncodingConfigurable(); - View.AnonymousEnabled = protocol.isAnonymousConfigurable(); - - UpdateIdentity(); - UpdateUrlLabel(); - ReadPasswordFromKeychain(); - Reachable(); - } - - private void UpdateUrlLabel() - { - if (!string.IsNullOrEmpty(View.Hostname)) - { - String url = View.SelectedProtocol.getScheme().toString() + "://" + View.Username + "@" + View.Hostname + - ":" + View.Port + PathNormalizer.normalize(View.Path); - View.URL = url; - } - else - { - View.URL = String.Empty; - } - } - - /// - /// Update Private Key selection - /// - private void UpdateIdentity() - { - View.PkCheckboxEnabled = View.SelectedProtocol.Equals(ProtocolFactory.SFTP); - if (Utils.IsNotBlank(View.Hostname)) - { - Credentials credentials = - CredentialsConfiguratorFactory.get(View.SelectedProtocol).configure(new Host(View.Hostname)); - if (credentials.isPublicKeyAuthentication()) - { - // No previously manually selected key - View.PkCheckboxState = true; - View.PkLabel = credentials.getIdentity().getAbbreviatedPath(); - } - else - { - View.PkCheckboxState = false; - View.PkLabel = LocaleFactory.localizedString("No private key selected"); - } - if (Utils.IsNotBlank(credentials.getUsername())) - { - View.Username = credentials.getUsername(); - } - } - } - - private void InitEncodings() - { - List encodings = new List {Default}; - encodings.AddRange(new DefaultCharsetProvider().availableCharsets()); - View.PopulateEncodings(encodings); - } - - private void InitProtocols() - { - List> protocols = new List>(); - foreach (Protocol p in ProtocolFactory.getEnabledProtocols().toArray(new Protocol[] {})) - { - protocols.Add(new KeyValueIconTriple(p, p.getDescription(), p.getProvider())); - } - View.PopulateProtocols(protocols); - View.SelectedProtocol = - ProtocolFactory.forName(PreferencesFactory.get().getProperty("connection.protocol.default")); - } - - private void InitConnectModes() - { - List> modes = new List>(); - foreach (FTPConnectMode m in FTPConnectMode.values()) - { - modes.Add(new KeyValuePair(m.toString(), m)); - } - View.PopulateConnectModes(modes); - } - - private void View_ToggleOptions() - { - View.OptionsVisible = !View.OptionsVisible; - } - - private void OnReachability(object state) - { - background(new ReachabilityAction(this, View.Hostname)); - } - - private class ReachabilityAction : AbstractBackgroundAction - { - private readonly ConnectionController _controller; - private readonly string _hostname; - private bool _reachable; - - public ReachabilityAction(ConnectionController controller, String hostname) - { - _controller = controller; - _hostname = hostname; - } - - public override object run() - { - if (!String.IsNullOrEmpty(_hostname)) - { - _reachable = ReachabilityFactory.get().isReachable(new Host(_hostname)); - } - else - { - _reachable = false; - } - return _reachable; - } - - public override void cleanup() - { - _controller.View.AlertIconEnabled = !_reachable; - } - - public override object @lock() - { - return _controller._syncRootReachability; - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Collections.Generic; +using System.Media; +using System.Threading; +using ch.cyberduck.core; +using ch.cyberduck.core.diagnostics; +using ch.cyberduck.core.ftp; +using ch.cyberduck.core.local; +using ch.cyberduck.core.preferences; +using ch.cyberduck.core.threading; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Ui.Core.Preferences; +using Ch.Cyberduck.Ui.Winforms.Controls; +using java.lang; +using org.apache.log4j; +using StructureMap; +using Object = System.Object; +using String = System.String; + +namespace Ch.Cyberduck.Ui.Controller +{ + public sealed class ConnectionController : WindowController + { + private static readonly IDictionary Controllers = + new Dictionary(); + + private static readonly string Default = LocaleFactory.localizedString("Default"); + private static readonly Logger Log = Logger.getLogger(typeof (ConnectionController).FullName); + private readonly Object _syncRootReachability = new Object(); + private readonly Timer _ticklerReachability; + + private HostPasswordStore keychain + = PasswordStoreFactory.get(); + + private ConnectionController(IConnectionView view) + { + View = view; + + _ticklerReachability = new Timer(OnReachability, null, Timeout.Infinite, Timeout.Infinite); + + View.ToggleOptions += View_ToggleOptions; + View.OptionsVisible = PreferencesFactory.get().getBoolean("connection.toggle.options"); + View.ViewClosedEvent += + delegate { PreferencesFactory.get().setProperty("connection.toggle.options", View.OptionsVisible); }; + + Init(); + } + + private ConnectionController() : this(ObjectFactory.GetInstance()) + { + } + + public override bool Singleton + { + get { return true; } + } + + public Host ConfiguredHost + { + get + { + Protocol protocol = View.SelectedProtocol; + Host parsed = new Host(protocol, View.Hostname, Integer.parseInt(View.Port), View.Path); + if (protocol.getType() == Protocol.Type.ftp) + { + parsed.setFTPConnectMode(View.SelectedConnectMode); + } + Credentials credentials = parsed.getCredentials(); + credentials.setUsername(View.Username); + credentials.setPassword(View.Password); + credentials.setSaved(View.SavePasswordChecked); + if (protocol.getType() == Protocol.Type.ssh) + { + if (View.PkCheckboxState) + { + credentials.setIdentity(LocalFactory.get(View.PkLabel)); + } + } + if (View.SelectedEncoding.Equals(Default)) + { + parsed.setEncoding(null); + } + else + { + parsed.setEncoding(View.SelectedEncoding); + } + return parsed; + } + } + + public static ConnectionController Instance(WindowController parent) + { + ConnectionController c; + if (!Controllers.TryGetValue(parent, out c)) + { + c = new ConnectionController(); + Controllers.Add(parent, c); + parent.View.ViewClosedEvent += delegate + { + Controllers.Remove(parent); + c.View.Close(); + }; + } + return c; + } + + public override bool ViewShouldClose() + { + if (Utils.IsBlank(View.Hostname)) + { + SystemSounds.Beep.Play(); + return false; + } + if (Utils.IsBlank(View.Username)) + { + SystemSounds.Beep.Play(); + return false; + } + return true; + } + + private void Init() + { + InitProtocols(); + InitConnectModes(); + InitEncodings(); + + View.Username = PreferencesFactory.get().getProperty("connection.login.name"); + View.PkLabel = LocaleFactory.localizedString("No private key selected"); + View.SavePasswordChecked = PreferencesFactory.get().getBoolean("connection.login.useKeychain") && + PreferencesFactory.get().getBoolean("connection.login.addKeychain"); + View.AnonymousChecked = false; + View.PkCheckboxState = false; + View.SelectedEncoding = Default; + View.SelectedConnectMode = FTPConnectMode.unknown; + View.ChangedProtocolEvent += View_ChangedProtocolEvent; + View.ChangedPortEvent += View_ChangedPortEvent; + View.ChangedUsernameEvent += View_ChangedUsernameEvent; + View.ChangedServerEvent += View_ChangedServerEvent; + View.ChangedEncodingEvent += View_ChangedEncodingEvent; + View.ChangedPathEvent += View_ChangedPathEvent; + View.ChangedPublicKeyCheckboxEvent += View_ChangedPublicKeyCheckboxEvent; + View.ChangedAnonymousCheckboxEvent += View_ChangedAnonymousCheckboxEvent; + View.ChangedSavePasswordCheckboxEvent += View_ChangedSavePasswordCheckboxEvent; + View.ChangedPrivateKey += View_ChangedPrivateKey; + View.OpenUrl += View_OpenUrl; + + View_ChangedProtocolEvent(); + } + + private void View_ChangedPrivateKey(object sender, PrivateKeyArgs e) + { + if (null != e.KeyFile) + { + View.PkLabel = e.KeyFile; + View.PasswordEnabled = false; + } + else + { + View.PkLabel = LocaleFactory.localizedString("No private key selected"); + } + } + + private void View_ChangedSavePasswordCheckboxEvent() + { + PreferencesFactory.get().setProperty("connection.login.addKeychain", View.SavePasswordChecked); + } + + private void View_OpenUrl() + { + BrowserLauncherFactory.get().open(View.URL); + } + + private void View_ChangedAnonymousCheckboxEvent() + { + if (View.AnonymousChecked) + { + View.UsernameEnabled = false; + View.Username = PreferencesFactory.get().getProperty("connection.login.anon.name"); + View.PasswordEnabled = false; + View.Password = string.Empty; + } + else + { + View.UsernameEnabled = true; + View.Username = PreferencesFactory.get().getProperty("connection.login.name"); + View.PasswordEnabled = true; + } + UpdateUrlLabel(); + } + + private void View_ChangedPublicKeyCheckboxEvent() + { + string s = LocaleFactory.localizedString("No private key selected"); + if (View.PkCheckboxState) + { + string selectedKeyFile = PreferencesFactory.get().getProperty("local.user.home"); + if (!s.Equals(View.PkLabel)) + { + selectedKeyFile = View.PkLabel; + } + + View.PasswordEnabled = true; + View.ShowPrivateKeyBrowser(selectedKeyFile); + } + else + { + View_ChangedPrivateKey(this, new PrivateKeyArgs(null)); + } + } + + private void View_ChangedPathEvent() + { + UpdateUrlLabel(); + } + + private void View_ChangedEncodingEvent() + { + ; + } + + private void View_ChangedServerEvent() + { + if (ProtocolFactory.isURL(View.Hostname)) + { + Host parsed = HostParser.parse(View.Hostname); + View.Hostname = parsed.getHostname(); + View.SelectedProtocol = parsed.getProtocol(); + View.Port = parsed.getPort().ToString(); + View.Username = parsed.getCredentials().getUsername(); + View.Path = parsed.getDefaultPath(); + View.AnonymousChecked = parsed.getCredentials().isAnonymousLogin(); + } + UpdateUrlLabel(); + UpdateIdentity(); + ReadPasswordFromKeychain(); + Reachable(); + } + + public void ReadPasswordFromKeychain() + { + if (PreferencesFactory.get().getBoolean("connection.login.useKeychain")) + { + if (string.IsNullOrEmpty(View.Hostname)) + { + return; + } + if (string.IsNullOrEmpty(View.Port)) + { + return; + } + if (string.IsNullOrEmpty(View.Username)) + { + return; + } + Protocol protocol = View.SelectedProtocol; + string password = keychain.getPassword(protocol.getScheme(), Integer.parseInt(View.Port), View.Hostname, View.Username); + if (Utils.IsBlank(password)) { + View.Password = password; + } + } + } + + private void Reachable() + { + if (!string.IsNullOrEmpty(View.Hostname)) + { + // Delay to 2 second. When typing changes we don't have to check the reachbility for each stroke. + _ticklerReachability.Change(2000, Timeout.Infinite); + } + else + { + View.AlertIconEnabled = false; + } + } + + private void View_ChangedUsernameEvent() + { + UpdateUrlLabel(); + ReadPasswordFromKeychain(); + } + + private void View_ChangedPortEvent() + { + //if empty we set the default port the selected protocol + if (String.IsNullOrEmpty(View.Port)) + { + View.Port = View.SelectedProtocol.getDefaultPort().ToString(); + } + UpdateUrlLabel(); + Reachable(); + } + + private void View_ChangedProtocolEvent() + { + Log.debug("View_ChangedProtocolEvent"); + Protocol protocol = View.SelectedProtocol; + + View.Port = protocol.getDefaultPort().ToString(); + View.PortFieldEnabled = protocol.isPortConfigurable(); + if (!protocol.isHostnameConfigurable()) + { + View.HostFieldEnabled = false; + View.Hostname = protocol.getDefaultHostname(); + View.PathEnabled = true; + } + else + { + if (!View.HostFieldEnabled) + { + // Was previously configured with a static configuration + View.Hostname = string.Empty; + } + if (!View.PathEnabled) + { + // Was previously configured with a static configuration + View.Path = string.Empty; + } + if (Utils.IsNotBlank(protocol.getDefaultHostname())) + { + // Prefill with default hostname + View.Hostname = protocol.getDefaultHostname(); + } + + View.UsernameEnabled = true; + View.HostFieldEnabled = true; + View.PathEnabled = true; + } + View.UsernameLabel = protocol.getUsernamePlaceholder() + ":"; + View.PasswordLabel = protocol.getPasswordPlaceholder() + ":"; + View.ConnectModeFieldEnabled = protocol.getType() == Protocol.Type.ftp; + if (!protocol.isEncodingConfigurable()) + { + View.SelectedEncoding = Default; + } + View.EncodingFieldEnabled = protocol.isEncodingConfigurable(); + View.AnonymousEnabled = protocol.isAnonymousConfigurable(); + + UpdateIdentity(); + UpdateUrlLabel(); + ReadPasswordFromKeychain(); + Reachable(); + } + + private void UpdateUrlLabel() + { + if (!string.IsNullOrEmpty(View.Hostname)) + { + String url = View.SelectedProtocol.getScheme().toString() + "://" + View.Username + "@" + View.Hostname + + ":" + View.Port + PathNormalizer.normalize(View.Path); + View.URL = url; + } + else + { + View.URL = String.Empty; + } + } + + /// + /// Update Private Key selection + /// + private void UpdateIdentity() + { + View.PkCheckboxEnabled = View.SelectedProtocol.Equals(ProtocolFactory.SFTP); + if (Utils.IsNotBlank(View.Hostname)) + { + Credentials credentials = + CredentialsConfiguratorFactory.get(View.SelectedProtocol).configure(new Host(View.Hostname)); + if (credentials.isPublicKeyAuthentication()) + { + // No previously manually selected key + View.PkCheckboxState = true; + View.PkLabel = credentials.getIdentity().getAbbreviatedPath(); + } + else + { + View.PkCheckboxState = false; + View.PkLabel = LocaleFactory.localizedString("No private key selected"); + } + if (Utils.IsNotBlank(credentials.getUsername())) + { + View.Username = credentials.getUsername(); + } + } + } + + private void InitEncodings() + { + List encodings = new List {Default}; + encodings.AddRange(new DefaultCharsetProvider().availableCharsets()); + View.PopulateEncodings(encodings); + } + + private void InitProtocols() + { + List> protocols = new List>(); + foreach (Protocol p in ProtocolFactory.getEnabledProtocols().toArray(new Protocol[] {})) + { + protocols.Add(new KeyValueIconTriple(p, p.getDescription(), p.getProvider())); + } + View.PopulateProtocols(protocols); + View.SelectedProtocol = + ProtocolFactory.forName(PreferencesFactory.get().getProperty("connection.protocol.default")); + } + + private void InitConnectModes() + { + List> modes = new List>(); + foreach (FTPConnectMode m in FTPConnectMode.values()) + { + modes.Add(new KeyValuePair(m.toString(), m)); + } + View.PopulateConnectModes(modes); + } + + private void View_ToggleOptions() + { + View.OptionsVisible = !View.OptionsVisible; + } + + private void OnReachability(object state) + { + background(new ReachabilityAction(this, View.Hostname)); + } + + private class ReachabilityAction : AbstractBackgroundAction + { + private readonly ConnectionController _controller; + private readonly string _hostname; + private bool _reachable; + + public ReachabilityAction(ConnectionController controller, String hostname) + { + _controller = controller; + _hostname = hostname; + } + + public override object run() + { + if (!String.IsNullOrEmpty(_hostname)) + { + _reachable = ReachabilityFactory.get().isReachable(new Host(_hostname)); + } + else + { + _reachable = false; + } + return _reachable; + } + + public override void cleanup() + { + _controller.View.AlertIconEnabled = !_reachable; + } + + public override object @lock() + { + return _controller._syncRootReachability; + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/Controller.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/Controller.cs similarity index 96% rename from source/ch/cyberduck/ui/controller/Controller.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/Controller.cs index 3483fb04c3..f520c21fea 100644 --- a/source/ch/cyberduck/ui/controller/Controller.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/Controller.cs @@ -1,41 +1,41 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Windows.Forms; -using ch.cyberduck.core; -using ch.cyberduck.core.threading; - -namespace Ch.Cyberduck.Ui.Controller -{ - public class Controller : AbstractController - { - private readonly Control _mainControl; - - public Controller(Control masterControl) - { - _mainControl = masterControl; - } - - public override void invoke(MainAction mainAction, bool wait) - { - _mainControl.BeginInvoke(new Invoker(mainAction.run)); - } - - private delegate void Invoker(); - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Windows.Forms; +using ch.cyberduck.core; +using ch.cyberduck.core.threading; + +namespace Ch.Cyberduck.Ui.Controller +{ + public class Controller : AbstractController + { + private readonly Control _mainControl; + + public Controller(Control masterControl) + { + _mainControl = masterControl; + } + + public override void invoke(MainAction mainAction, bool wait) + { + _mainControl.BeginInvoke(new Invoker(mainAction.run)); + } + + private delegate void Invoker(); + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/CreateFileController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/CreateFileController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/CreateFileController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/CreateFileController.cs index cb1cb168b9..fed21c77d8 100644 --- a/source/ch/cyberduck/ui/controller/CreateFileController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/CreateFileController.cs @@ -1,102 +1,102 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.ObjectModel; -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Controller.Threading; -using ch.cyberduck.core; -using ch.cyberduck.core.editor; -using ch.cyberduck.core.features; -using UploadTargetFinder = ch.cyberduck.ui.browser.UploadTargetFinder; -using DisabledApplicationQuitCallback = ch.cyberduck.core.local.DisabledApplicationQuitCallback; -using DisabledTransferErrorCallback = ch.cyberduck.core.transfer.DisabledTransferErrorCallback; -using java.util; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal class CreateFileController : FileController - { - public CreateFileController(IPromptView view, BrowserController browserController) - : base(view, browserController) - { - } - - public override void Callback(DialogResult result) - { - if (!String.IsNullOrEmpty(View.InputText) && !View.InputText.Trim().Equals(string.Empty)) - { - Path parent = new UploadTargetFinder(Workdir).find(BrowserController.SelectedPath); - if (DialogResult.OK == result) - { - BrowserController.background(new CreateFileAction(BrowserController, parent, View.InputText, false)); - } - if (DialogResult.Yes == result) - { - BrowserController.background(new CreateFileAction(BrowserController, parent, View.InputText, true)); - } - } - } - - private class CreateFileAction : BrowserControllerBackgroundAction - { - private readonly bool _edit; - private readonly Path _file; - private readonly string _filename; - private readonly Path _workdir; - - public CreateFileAction(BrowserController controller, Path workdir, string filename, bool edit) - : base(controller) - { - _workdir = workdir; - _filename = filename; - _edit = edit; - _file = new Path(_workdir, _filename, EnumSet.of(AbstractPath.Type.file)); - } - - public override object run() - { - Session session = BrowserController.Session; - Touch feature = (Touch) session.getFeature(typeof (Touch)); - feature.touch(_file); - if (_edit) - { - _file.attributes().setSize(0L); - Editor editor = EditorFactory.instance().create(BrowserController, session, _file); - BrowserController.edit(editor); - } - return true; - } - - public override void cleanup() - { - base.cleanup(); - if (_filename.StartsWith(".")) - { - BrowserController.ShowHiddenFiles = true; - } - BrowserController.RefreshParentPaths(new Collection {_file}, new Collection {_file}); - } - - public override string getActivity() - { - return String.Format(LocaleFactory.localizedString("Uploading {0}", "Status"), _file.getName()); - } - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.ObjectModel; +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Controller.Threading; +using ch.cyberduck.core; +using ch.cyberduck.core.editor; +using ch.cyberduck.core.features; +using UploadTargetFinder = ch.cyberduck.ui.browser.UploadTargetFinder; +using DisabledApplicationQuitCallback = ch.cyberduck.core.local.DisabledApplicationQuitCallback; +using DisabledTransferErrorCallback = ch.cyberduck.core.transfer.DisabledTransferErrorCallback; +using java.util; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal class CreateFileController : FileController + { + public CreateFileController(IPromptView view, BrowserController browserController) + : base(view, browserController) + { + } + + public override void Callback(DialogResult result) + { + if (!String.IsNullOrEmpty(View.InputText) && !View.InputText.Trim().Equals(string.Empty)) + { + Path parent = new UploadTargetFinder(Workdir).find(BrowserController.SelectedPath); + if (DialogResult.OK == result) + { + BrowserController.background(new CreateFileAction(BrowserController, parent, View.InputText, false)); + } + if (DialogResult.Yes == result) + { + BrowserController.background(new CreateFileAction(BrowserController, parent, View.InputText, true)); + } + } + } + + private class CreateFileAction : BrowserControllerBackgroundAction + { + private readonly bool _edit; + private readonly Path _file; + private readonly string _filename; + private readonly Path _workdir; + + public CreateFileAction(BrowserController controller, Path workdir, string filename, bool edit) + : base(controller) + { + _workdir = workdir; + _filename = filename; + _edit = edit; + _file = new Path(_workdir, _filename, EnumSet.of(AbstractPath.Type.file)); + } + + public override object run() + { + Session session = BrowserController.Session; + Touch feature = (Touch) session.getFeature(typeof (Touch)); + feature.touch(_file); + if (_edit) + { + _file.attributes().setSize(0L); + Editor editor = EditorFactory.instance().create(BrowserController, session, _file); + BrowserController.edit(editor); + } + return true; + } + + public override void cleanup() + { + base.cleanup(); + if (_filename.StartsWith(".")) + { + BrowserController.ShowHiddenFiles = true; + } + BrowserController.RefreshParentPaths(new Collection {_file}, new Collection {_file}); + } + + public override string getActivity() + { + return String.Format(LocaleFactory.localizedString("Uploading {0}", "Status"), _file.getName()); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/CreateSymlinkController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/CreateSymlinkController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/CreateSymlinkController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/CreateSymlinkController.cs index 03acca99f8..323c04b2b1 100644 --- a/source/ch/cyberduck/ui/controller/CreateSymlinkController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/CreateSymlinkController.cs @@ -1,95 +1,95 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Drawing; -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Controller.Threading; -using ch.cyberduck.core; -using ch.cyberduck.core.features; -using ch.cyberduck.core.preferences; -using java.util; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal class CreateSymlinkController : FileController - { - public CreateSymlinkController(ICreateSymlinkPromptView view, BrowserController browserController) - : base(view, browserController) - { - view.LinkForFile = browserController.SelectedPath.getName(); - } - - public override Bitmap IconView - { - get { return IconCache.Instance.OverlayIcon("_unknown", "aliasbadge", IconCache.IconSize.Large); } - } - - public override void Callback(DialogResult result) - { - if (DialogResult.OK == result && !String.IsNullOrEmpty(View.InputText) && - !View.InputText.Trim().Equals(string.Empty)) - { - BrowserController.background(new CreateSymlinkAction(BrowserController, Workdir, View.InputText)); - } - } - - private class CreateSymlinkAction : BrowserControllerBackgroundAction - { - private readonly Path _link; - private readonly string _symlink; - private readonly string _target; - private readonly Path _workdir; - - public CreateSymlinkAction(BrowserController controller, Path workdir, string symlink) : base(controller) - { - _workdir = workdir; - _symlink = symlink; - _link = new Path(_workdir, _symlink, EnumSet.of(AbstractPath.Type.file)); - if(PreferencesFactory.get().getBoolean( - String.Format("{0}.symlink.absolute", BrowserController.Session.getHost().getProtocol().getScheme().name()))) { - _target = BrowserController.SelectedPath.getAbsolute(); - } - else { - _target = BrowserController.SelectedPath.getName(); - } - } - - public override object run() - { - // Symlink pointing to existing file - ((Symlink) BrowserController.Session.getFeature(typeof (Symlink))).symlink(_link, _target); - return true; - } - - public override void cleanup() - { - if (_symlink.StartsWith(".")) - { - BrowserController.ShowHiddenFiles = true; - } - BrowserController.RefreshParentPath(_link); - } - - public override string getActivity() - { - return String.Format(LocaleFactory.localizedString("Uploading {0}", "Status"), _symlink); - } - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Drawing; +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Controller.Threading; +using ch.cyberduck.core; +using ch.cyberduck.core.features; +using ch.cyberduck.core.preferences; +using java.util; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal class CreateSymlinkController : FileController + { + public CreateSymlinkController(ICreateSymlinkPromptView view, BrowserController browserController) + : base(view, browserController) + { + view.LinkForFile = browserController.SelectedPath.getName(); + } + + public override Bitmap IconView + { + get { return IconCache.Instance.OverlayIcon("_unknown", "aliasbadge", IconCache.IconSize.Large); } + } + + public override void Callback(DialogResult result) + { + if (DialogResult.OK == result && !String.IsNullOrEmpty(View.InputText) && + !View.InputText.Trim().Equals(string.Empty)) + { + BrowserController.background(new CreateSymlinkAction(BrowserController, Workdir, View.InputText)); + } + } + + private class CreateSymlinkAction : BrowserControllerBackgroundAction + { + private readonly Path _link; + private readonly string _symlink; + private readonly string _target; + private readonly Path _workdir; + + public CreateSymlinkAction(BrowserController controller, Path workdir, string symlink) : base(controller) + { + _workdir = workdir; + _symlink = symlink; + _link = new Path(_workdir, _symlink, EnumSet.of(AbstractPath.Type.file)); + if(PreferencesFactory.get().getBoolean( + String.Format("{0}.symlink.absolute", BrowserController.Session.getHost().getProtocol().getScheme().name()))) { + _target = BrowserController.SelectedPath.getAbsolute(); + } + else { + _target = BrowserController.SelectedPath.getName(); + } + } + + public override object run() + { + // Symlink pointing to existing file + ((Symlink) BrowserController.Session.getFeature(typeof (Symlink))).symlink(_link, _target); + return true; + } + + public override void cleanup() + { + if (_symlink.StartsWith(".")) + { + BrowserController.ShowHiddenFiles = true; + } + BrowserController.RefreshParentPath(_link); + } + + public override string getActivity() + { + return String.Format(LocaleFactory.localizedString("Uploading {0}", "Status"), _symlink); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/DonationController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/DonationController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/DonationController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/DonationController.cs index 852e11ef68..07cd0e2959 100644 --- a/source/ch/cyberduck/ui/controller/DonationController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/DonationController.cs @@ -1,62 +1,62 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Reflection; -using System.Windows.Forms; -using ch.cyberduck.core; -using ch.cyberduck.core.local; -using ch.cyberduck.core.preferences; -using StructureMap; - -namespace Ch.Cyberduck.Ui.Controller -{ - public class DonationController : WindowController - { - public DonationController() : this(ObjectFactory.GetInstance()) - { - } - - public DonationController(IDonationView view) - { - View = view; - } - - public void Show() - { - int uses = PreferencesFactory.get().getInteger("uses"); - View.Title = LocaleFactory.localizedString("Please Donate", "Donate") + " (" + uses + ")"; - View.NeverShowDonation = - Assembly.GetExecutingAssembly() - .GetName() - .Version.ToString() - .Equals(PreferencesFactory.get().getProperty("donate.reminder")); - if (DialogResult.OK == View.ShowDialog()) - { - BrowserLauncherFactory.get().open(PreferencesFactory.get().getProperty("website.donate")); - } - if (View.NeverShowDonation) - { - PreferencesFactory.get() - .setProperty("donate.reminder", Assembly.GetExecutingAssembly().GetName().Version.ToString()); - } - // Remeber this reminder date - PreferencesFactory.get().setProperty("donate.reminder.date", DateTime.Now.Ticks); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Reflection; +using System.Windows.Forms; +using ch.cyberduck.core; +using ch.cyberduck.core.local; +using ch.cyberduck.core.preferences; +using StructureMap; + +namespace Ch.Cyberduck.Ui.Controller +{ + public class DonationController : WindowController + { + public DonationController() : this(ObjectFactory.GetInstance()) + { + } + + public DonationController(IDonationView view) + { + View = view; + } + + public void Show() + { + int uses = PreferencesFactory.get().getInteger("uses"); + View.Title = LocaleFactory.localizedString("Please Donate", "Donate") + " (" + uses + ")"; + View.NeverShowDonation = + Assembly.GetExecutingAssembly() + .GetName() + .Version.ToString() + .Equals(PreferencesFactory.get().getProperty("donate.reminder")); + if (DialogResult.OK == View.ShowDialog()) + { + BrowserLauncherFactory.get().open(PreferencesFactory.get().getProperty("website.donate")); + } + if (View.NeverShowDonation) + { + PreferencesFactory.get() + .setProperty("donate.reminder", Assembly.GetExecutingAssembly().GetName().Version.ToString()); + } + // Remeber this reminder date + PreferencesFactory.get().setProperty("donate.reminder.date", DateTime.Now.Ticks); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/DownloadPromptController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/DownloadPromptController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/DownloadPromptController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/DownloadPromptController.cs index 81ecd9384b..84b291e70d 100644 --- a/source/ch/cyberduck/ui/controller/DownloadPromptController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/DownloadPromptController.cs @@ -1,37 +1,37 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using ch.cyberduck.core; -using ch.cyberduck.core.transfer; - -namespace Ch.Cyberduck.Ui.Controller -{ - public class DownloadPromptController : TransferPromptController - { - public DownloadPromptController(WindowController parent, Transfer transfer, Session session) - : base(parent, transfer, session) - { - TransferPromptModel = new DownloadPromptModel(this, Session, Transfer); - } - - protected override string TransferName - { - get { return "Download"; } - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using ch.cyberduck.core; +using ch.cyberduck.core.transfer; + +namespace Ch.Cyberduck.Ui.Controller +{ + public class DownloadPromptController : TransferPromptController + { + public DownloadPromptController(WindowController parent, Transfer transfer, Session session) + : base(parent, transfer, session) + { + TransferPromptModel = new DownloadPromptModel(this, Session, Transfer); + } + + protected override string TransferName + { + get { return "Download"; } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/DownloadPromptModel.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/DownloadPromptModel.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/DownloadPromptModel.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/DownloadPromptModel.cs index b112126ff8..fe5ec1ceb6 100644 --- a/source/ch/cyberduck/ui/controller/DownloadPromptModel.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/DownloadPromptModel.cs @@ -1,35 +1,35 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using ch.cyberduck.core; -using ch.cyberduck.core.transfer; -using org.apache.log4j; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal class DownloadPromptModel : TransferPromptModel - { - private static readonly Logger Log = Logger.getLogger(typeof (DownloadPromptModel).Name); - - public DownloadPromptModel(TransferPromptController controller, Session session, Transfer transfer) - : base(controller, session, transfer) - { - ; - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using ch.cyberduck.core; +using ch.cyberduck.core.transfer; +using org.apache.log4j; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal class DownloadPromptModel : TransferPromptModel + { + private static readonly Logger Log = Logger.getLogger(typeof (DownloadPromptModel).Name); + + public DownloadPromptModel(TransferPromptController controller, Session session, Transfer transfer) + : base(controller, session, transfer) + { + ; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/DuplicateFileController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/DuplicateFileController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/DuplicateFileController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/DuplicateFileController.cs index 535bc05c5f..eac013d8d8 100644 --- a/source/ch/cyberduck/ui/controller/DuplicateFileController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/DuplicateFileController.cs @@ -1,74 +1,74 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Winforms; -using ch.cyberduck.core; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal class DuplicateFileController : FileController - { - public DuplicateFileController(IPromptView view, BrowserController browserController) - : base(view, browserController) - { - Path selected = browserController.SelectedPath; - StringBuilder proposal = new StringBuilder(); - proposal.Append(System.IO.Path.GetFileNameWithoutExtension(selected.getName())); - string shortDate = UserDefaultsDateFormatter.GetShortFormat(DateTime.Now) - .Replace('/', '.') - .Replace(':', '.'); - proposal.Append(" (").Append(shortDate).Append(")"); - if (!string.IsNullOrEmpty(selected.getExtension())) - { - proposal.Append(".").Append(selected.getExtension()); - } - PrefilledText = proposal.ToString(); - } - - public override Bitmap IconView - { - get - { - return - IconCache.Instance.IconForPath(BrowserController.SelectedPath, IconCache.IconSize.Large); - } - } - - public override void Callback(DialogResult result) - { - if (!String.IsNullOrEmpty(View.InputText) && - !View.InputText.Trim().Equals(string.Empty)) - { - if (DialogResult.OK == result) - { - DuplicateFile(BrowserController.SelectedPath, View.InputText); - } - } - } - - private void DuplicateFile(Path selected, String filename) - { - Path duplicate = new Path(selected.getParent(), filename, selected.getType()); - BrowserController.DuplicatePath(selected, duplicate); - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Winforms; +using ch.cyberduck.core; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal class DuplicateFileController : FileController + { + public DuplicateFileController(IPromptView view, BrowserController browserController) + : base(view, browserController) + { + Path selected = browserController.SelectedPath; + StringBuilder proposal = new StringBuilder(); + proposal.Append(System.IO.Path.GetFileNameWithoutExtension(selected.getName())); + string shortDate = UserDefaultsDateFormatter.GetShortFormat(DateTime.Now) + .Replace('/', '.') + .Replace(':', '.'); + proposal.Append(" (").Append(shortDate).Append(")"); + if (!string.IsNullOrEmpty(selected.getExtension())) + { + proposal.Append(".").Append(selected.getExtension()); + } + PrefilledText = proposal.ToString(); + } + + public override Bitmap IconView + { + get + { + return + IconCache.Instance.IconForPath(BrowserController.SelectedPath, IconCache.IconSize.Large); + } + } + + public override void Callback(DialogResult result) + { + if (!String.IsNullOrEmpty(View.InputText) && + !View.InputText.Trim().Equals(string.Empty)) + { + if (DialogResult.OK == result) + { + DuplicateFile(BrowserController.SelectedPath, View.InputText); + } + } + } + + private void DuplicateFile(Path selected, String filename) + { + Path duplicate = new Path(selected.getParent(), filename, selected.getType()); + BrowserController.DuplicatePath(selected, duplicate); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/Events.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/Events.cs similarity index 96% rename from source/ch/cyberduck/ui/controller/Events.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/Events.cs index 2f710f066a..eb9b51ce40 100644 --- a/source/ch/cyberduck/ui/controller/Events.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/Events.cs @@ -1,142 +1,142 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Windows.Forms; -using BrightIdeasSoftware; -using ch.cyberduck.core; -using ch.cyberduck.ui.comparator; -using Application = ch.cyberduck.core.local.Application; - -namespace Ch.Cyberduck.Ui.Controller -{ - public delegate void VoidHandler(); - - public delegate DataObject DragHandler(ObjectListView list); - - public delegate void EndDragHandler(DataObject data); - - public delegate void DropHandler(OlvDropEventArgs dropArgs); - - public delegate void ModelDropHandler(ModelDropEventArgs dropArgs); - - public delegate bool RenamePathname(Path path, string newName); - - public delegate void EditWithHandler(String exe); - - public delegate IList EditorsHandler(); - - public delegate IList ArchivesHandler(); - - public delegate IList>> CopyUrlHandler(); - - public delegate IList>> OpenUrlHandler(); - - public delegate IList BookmarksHandler(); - - public delegate void SetComparatorHandler(BrowserComparator comparator); - - /// - /// This event is triggered by the new browser shortcut (main menu) and the context menu item. - /// - public class NewBrowserEventArgs : EventArgs - { - /// - /// Open a new browser with the current selected folder as the working directory - /// - public bool SelectedAsWorkingDir; - - public NewBrowserEventArgs(bool selectedAsWorkingDir) - { - SelectedAsWorkingDir = selectedAsWorkingDir; - } - } - - /// - /// This event is triggered by the 'Create Archive' submenu items. - /// - public class CreateArchiveEventArgs : EventArgs - { - public string ArchiveName; - - public CreateArchiveEventArgs(string archiveName) - { - ArchiveName = archiveName; - } - } - - public class ChangeBrowserViewArgs : EventArgs - { - public BrowserView View; - - public ChangeBrowserViewArgs(BrowserView view) - { - View = view; - } - } - - public class EncodingChangedArgs : EventArgs - { - public string Encoding; - - public EncodingChangedArgs(string encoding) - { - Encoding = encoding; - } - } - - public class InfoHelpArgs : EventArgs - { - public enum Context - { - General, - Permissions, - Metdadata, - Cdn, - S3 - } - - public Context Section; - - public InfoHelpArgs(Context section) - { - Section = section; - } - } - - public class ConnectBookmarkArgs : EventArgs - { - public Host Bookmark; - - public ConnectBookmarkArgs(Host bookmark) - { - Bookmark = bookmark; - } - } - - public class PrivateKeyArgs : EventArgs - { - public readonly string KeyFile; - - public PrivateKeyArgs(String keyFile) - { - KeyFile = keyFile; - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using BrightIdeasSoftware; +using ch.cyberduck.core; +using ch.cyberduck.ui.comparator; +using Application = ch.cyberduck.core.local.Application; + +namespace Ch.Cyberduck.Ui.Controller +{ + public delegate void VoidHandler(); + + public delegate DataObject DragHandler(ObjectListView list); + + public delegate void EndDragHandler(DataObject data); + + public delegate void DropHandler(OlvDropEventArgs dropArgs); + + public delegate void ModelDropHandler(ModelDropEventArgs dropArgs); + + public delegate bool RenamePathname(Path path, string newName); + + public delegate void EditWithHandler(String exe); + + public delegate IList EditorsHandler(); + + public delegate IList ArchivesHandler(); + + public delegate IList>> CopyUrlHandler(); + + public delegate IList>> OpenUrlHandler(); + + public delegate IList BookmarksHandler(); + + public delegate void SetComparatorHandler(BrowserComparator comparator); + + /// + /// This event is triggered by the new browser shortcut (main menu) and the context menu item. + /// + public class NewBrowserEventArgs : EventArgs + { + /// + /// Open a new browser with the current selected folder as the working directory + /// + public bool SelectedAsWorkingDir; + + public NewBrowserEventArgs(bool selectedAsWorkingDir) + { + SelectedAsWorkingDir = selectedAsWorkingDir; + } + } + + /// + /// This event is triggered by the 'Create Archive' submenu items. + /// + public class CreateArchiveEventArgs : EventArgs + { + public string ArchiveName; + + public CreateArchiveEventArgs(string archiveName) + { + ArchiveName = archiveName; + } + } + + public class ChangeBrowserViewArgs : EventArgs + { + public BrowserView View; + + public ChangeBrowserViewArgs(BrowserView view) + { + View = view; + } + } + + public class EncodingChangedArgs : EventArgs + { + public string Encoding; + + public EncodingChangedArgs(string encoding) + { + Encoding = encoding; + } + } + + public class InfoHelpArgs : EventArgs + { + public enum Context + { + General, + Permissions, + Metdadata, + Cdn, + S3 + } + + public Context Section; + + public InfoHelpArgs(Context section) + { + Section = section; + } + } + + public class ConnectBookmarkArgs : EventArgs + { + public Host Bookmark; + + public ConnectBookmarkArgs(Host bookmark) + { + Bookmark = bookmark; + } + } + + public class PrivateKeyArgs : EventArgs + { + public readonly string KeyFile; + + public PrivateKeyArgs(String keyFile) + { + KeyFile = keyFile; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/FileController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/FileController.cs similarity index 96% rename from source/ch/cyberduck/ui/controller/FileController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/FileController.cs index ed156309d7..9e79ec30c3 100644 --- a/source/ch/cyberduck/ui/controller/FileController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/FileController.cs @@ -1,96 +1,96 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Drawing; -using System.Windows.Forms; -using ch.cyberduck.core; -using java.util; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal abstract class FileController : WindowController - { - protected readonly BrowserController BrowserController; - private string _input = string.Empty; - - public FileController(IPromptView view, BrowserController browserController) - { - BrowserController = browserController; - View = view; - - View.ValidateInput += ValidateInput; - } - - public virtual Bitmap IconView - { - get { return IconCache.Instance.IconForFilename("_unknown", IconCache.IconSize.Large); } - } - - public virtual Path Workdir - { - get - { - if (BrowserController.SelectedPaths.Count == 1) - { - return BrowserController.SelectedPath.getParent(); - } - return BrowserController.Workdir; - } - } - - protected string PrefilledText - { - get { return _input; } - set { _input = value; } - } - - protected Session Session - { - get { return BrowserController.Session; } - } - - protected virtual bool ValidateInput() - { - string t = View.InputText.Trim(); - if (t.IndexOf('/') != -1) - { - return false; - } - if (!string.IsNullOrEmpty(t)) - { - if(BrowserController.Cache.get(BrowserController.Workdir).contains(new Path(BrowserController.Workdir, t, EnumSet.of(Path.Type.file)))) { - return false; - } - if(BrowserController.Cache.get(BrowserController.Workdir).contains(new Path(BrowserController.Workdir, t, EnumSet.of(Path.Type.directory)))) { - return false; - } - return true; - } - return false; - } - - public abstract void Callback(DialogResult result); - - public void Show() - { - View.InputText = PrefilledText; - View.IconView = IconView; - Callback(View.ShowDialog(BrowserController.View)); - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Drawing; +using System.Windows.Forms; +using ch.cyberduck.core; +using java.util; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal abstract class FileController : WindowController + { + protected readonly BrowserController BrowserController; + private string _input = string.Empty; + + public FileController(IPromptView view, BrowserController browserController) + { + BrowserController = browserController; + View = view; + + View.ValidateInput += ValidateInput; + } + + public virtual Bitmap IconView + { + get { return IconCache.Instance.IconForFilename("_unknown", IconCache.IconSize.Large); } + } + + public virtual Path Workdir + { + get + { + if (BrowserController.SelectedPaths.Count == 1) + { + return BrowserController.SelectedPath.getParent(); + } + return BrowserController.Workdir; + } + } + + protected string PrefilledText + { + get { return _input; } + set { _input = value; } + } + + protected Session Session + { + get { return BrowserController.Session; } + } + + protected virtual bool ValidateInput() + { + string t = View.InputText.Trim(); + if (t.IndexOf('/') != -1) + { + return false; + } + if (!string.IsNullOrEmpty(t)) + { + if(BrowserController.Cache.get(BrowserController.Workdir).contains(new Path(BrowserController.Workdir, t, EnumSet.of(Path.Type.file)))) { + return false; + } + if(BrowserController.Cache.get(BrowserController.Workdir).contains(new Path(BrowserController.Workdir, t, EnumSet.of(Path.Type.directory)))) { + return false; + } + return true; + } + return false; + } + + public abstract void Callback(DialogResult result); + + public void Show() + { + View.InputText = PrefilledText; + View.IconView = IconView; + Callback(View.ShowDialog(BrowserController.View)); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/FirefoxStyleRenderer.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/FirefoxStyleRenderer.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/FirefoxStyleRenderer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/FirefoxStyleRenderer.cs index ca353c413e..66c4a650e9 100644 --- a/source/ch/cyberduck/ui/controller/FirefoxStyleRenderer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/FirefoxStyleRenderer.cs @@ -1,75 +1,75 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Drawing; -using System.Windows.Forms; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal class FirefoxStyleRenderer : ToolStripSystemRenderer - { - protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) - { - Rectangle rect = e.AffectedBounds; - using (SolidBrush brush = new SolidBrush(Color.White)) - { - e.Graphics.FillRectangle(brush, rect); - } - } - - protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) - { - base.OnRenderToolStripBorder(e); - Rectangle rect = e.AffectedBounds; - e.Graphics.DrawLine(new Pen(Color.FromKnownColor(KnownColor.ControlDark)), - rect.Left, rect.Bottom, - rect.Right, rect.Bottom); - return; - } - - protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) - { - if (e.Item is ToolStripButton) - { - ToolStripButton button = (ToolStripButton) e.Item; - SolidBrush solidBrush = null; - using (solidBrush) - { - if (button.Pressed || button.Checked) - { - solidBrush = new SolidBrush(Color.FromArgb(193, 210, 238)); - } - else if (button.Selected) - { - solidBrush = new SolidBrush(Color.FromArgb(224, 232, 246)); - } - else - { - base.OnRenderButtonBackground(e); - return; - } - e.Graphics.FillRectangle(solidBrush, 0, 0, e.Item.Width, e.Item.Height); - } - } - else - { - base.OnRenderButtonBackground(e); - } - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Drawing; +using System.Windows.Forms; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal class FirefoxStyleRenderer : ToolStripSystemRenderer + { + protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) + { + Rectangle rect = e.AffectedBounds; + using (SolidBrush brush = new SolidBrush(Color.White)) + { + e.Graphics.FillRectangle(brush, rect); + } + } + + protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) + { + base.OnRenderToolStripBorder(e); + Rectangle rect = e.AffectedBounds; + e.Graphics.DrawLine(new Pen(Color.FromKnownColor(KnownColor.ControlDark)), + rect.Left, rect.Bottom, + rect.Right, rect.Bottom); + return; + } + + protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) + { + if (e.Item is ToolStripButton) + { + ToolStripButton button = (ToolStripButton) e.Item; + SolidBrush solidBrush = null; + using (solidBrush) + { + if (button.Pressed || button.Checked) + { + solidBrush = new SolidBrush(Color.FromArgb(193, 210, 238)); + } + else if (button.Selected) + { + solidBrush = new SolidBrush(Color.FromArgb(224, 232, 246)); + } + else + { + base.OnRenderButtonBackground(e); + return; + } + e.Graphics.FillRectangle(solidBrush, 0, 0, e.Item.Width, e.Item.Height); + } + } + else + { + base.OnRenderButtonBackground(e); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/FolderController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/FolderController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/FolderController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/FolderController.cs index 4f32513c7b..7dbad786bb 100644 --- a/source/ch/cyberduck/ui/controller/FolderController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/FolderController.cs @@ -1,114 +1,114 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Controller.Threading; -using ch.cyberduck.core; -using ch.cyberduck.core.features; -using ch.cyberduck.ui.browser; -using java.util; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal class FolderController : FileController - { - private readonly IList _regions; - private readonly INewFolderPromptView _view; - - public FolderController(INewFolderPromptView view, BrowserController browserController, - IList regions) : base(view, browserController) - { - _view = view; - _regions = regions; - if (HasLocation()) - { - view.RegionsEnabled = true; - IList> r = new List>(); - foreach (Location.Name region in regions) - { - r.Add(new KeyValuePair(region.getIdentifier(), region.toString())); - } - view.PopulateRegions(r); - } - } - - public override Bitmap IconView - { - get { return IconCache.Instance.IconForName("newfolder", 64); } - } - - private bool HasLocation() - { - return _regions.Count > 0 && new UploadTargetFinder(Workdir).find(BrowserController.SelectedPath).isRoot(); - } - - public override void Callback(DialogResult result) - { - if (DialogResult.OK == result && !String.IsNullOrEmpty(View.InputText) && - !View.InputText.Trim().Equals(String.Empty)) - { - BrowserController.background(new CreateFolderAction(BrowserController, - new UploadTargetFinder(Workdir).find( - BrowserController.SelectedPath), View.InputText, - HasLocation() ? _view.Region : null)); - } - } - - private class CreateFolderAction : BrowserControllerBackgroundAction - { - private readonly string _filename; - private readonly Path _folder; - private readonly string _region; - private readonly Path _workdir; - - public CreateFolderAction(BrowserController controller, Path workdir, string filename, string region) - : base(controller) - { - _workdir = workdir; - _filename = filename; - _region = region; - _folder = new Path(_workdir, _filename, EnumSet.of(AbstractPath.Type.directory)); - } - - public override object run() - { - Directory feature = (Directory) BrowserController.Session.getFeature(typeof (Directory)); - feature.mkdir(_folder, _region); - return true; - } - - public override void cleanup() - { - base.cleanup(); - if (_filename.StartsWith(".")) - { - BrowserController.ShowHiddenFiles = true; - } - BrowserController.RefreshParentPath(_folder); - } - - public override string getActivity() - { - return String.Format(LocaleFactory.localizedString("Making directory {0}", "Status"), _folder.getName()); - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Controller.Threading; +using ch.cyberduck.core; +using ch.cyberduck.core.features; +using ch.cyberduck.ui.browser; +using java.util; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal class FolderController : FileController + { + private readonly IList _regions; + private readonly INewFolderPromptView _view; + + public FolderController(INewFolderPromptView view, BrowserController browserController, + IList regions) : base(view, browserController) + { + _view = view; + _regions = regions; + if (HasLocation()) + { + view.RegionsEnabled = true; + IList> r = new List>(); + foreach (Location.Name region in regions) + { + r.Add(new KeyValuePair(region.getIdentifier(), region.toString())); + } + view.PopulateRegions(r); + } + } + + public override Bitmap IconView + { + get { return IconCache.Instance.IconForName("newfolder", 64); } + } + + private bool HasLocation() + { + return _regions.Count > 0 && new UploadTargetFinder(Workdir).find(BrowserController.SelectedPath).isRoot(); + } + + public override void Callback(DialogResult result) + { + if (DialogResult.OK == result && !String.IsNullOrEmpty(View.InputText) && + !View.InputText.Trim().Equals(String.Empty)) + { + BrowserController.background(new CreateFolderAction(BrowserController, + new UploadTargetFinder(Workdir).find( + BrowserController.SelectedPath), View.InputText, + HasLocation() ? _view.Region : null)); + } + } + + private class CreateFolderAction : BrowserControllerBackgroundAction + { + private readonly string _filename; + private readonly Path _folder; + private readonly string _region; + private readonly Path _workdir; + + public CreateFolderAction(BrowserController controller, Path workdir, string filename, string region) + : base(controller) + { + _workdir = workdir; + _filename = filename; + _region = region; + _folder = new Path(_workdir, _filename, EnumSet.of(AbstractPath.Type.directory)); + } + + public override object run() + { + Directory feature = (Directory) BrowserController.Session.getFeature(typeof (Directory)); + feature.mkdir(_folder, _region); + return true; + } + + public override void cleanup() + { + base.cleanup(); + if (_filename.StartsWith(".")) + { + BrowserController.ShowHiddenFiles = true; + } + BrowserController.RefreshParentPath(_folder); + } + + public override string getActivity() + { + return String.Format(LocaleFactory.localizedString("Making directory {0}", "Status"), _folder.getName()); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/FolderItems.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/FolderItems.cs similarity index 96% rename from source/ch/cyberduck/ui/controller/FolderItems.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/FolderItems.cs index ec4ee9de3c..73f5713fe4 100644 --- a/source/ch/cyberduck/ui/controller/FolderItems.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/FolderItems.cs @@ -1,177 +1,177 @@ -// -// Copyright (c) 2010-2012 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Drawing; -using System.IO; -using ch.cyberduck.core.formatter; -using java.text; -using java.util; -using Path = ch.cyberduck.core.Path; - -namespace Ch.Cyberduck.Ui.Controller -{ - public abstract class BaseItem - { - public Path Path; - private string _date = String.Empty; - private string _path = String.Empty; - private string _size = String.Empty; - - - public string ItemPath - { - get { return _path; } - set { _path = value; } - } - - public Image Icon { get; set; } - - public virtual string Size - { - get { return _size; } - set { _size = value; } - } - - public virtual string Date - { - get { return _date; } - set { _date = value; } - } - - public abstract string Name { get; set; } - - public BaseItem Parent { get; set; } - } - - public class RootItem : BaseItem - { - public RootItem(string name) - { - ItemPath = name; - } - - public override string Name - { - get { return ItemPath; } - set { } - } - } - - public class FolderItem : BaseItem - { - public FolderItem(string name, BaseItem parent) - { - ItemPath = name; - Parent = parent; - } - - public override string Name - { - get { return System.IO.Path.GetFileName(ItemPath); } - set - { - string dir = System.IO.Path.GetDirectoryName(ItemPath); - string destination = System.IO.Path.Combine(dir, value); - Directory.Move(ItemPath, destination); - ItemPath = destination; - } - } - } - - public class FileItem : BaseItem - { - public FileItem(string name, BaseItem parent) - { - ItemPath = name; - Parent = parent; - } - - public override string Name - { - get { return System.IO.Path.GetFileName(ItemPath); } - set - { - string dir = System.IO.Path.GetDirectoryName(ItemPath); - string destination = System.IO.Path.Combine(dir, value); - File.Move(ItemPath, destination); - ItemPath = destination; - } - } - } - - public class CDItem : BaseItem - { - public CDItem(Path path, BaseItem parent) - { - Path = path; - Parent = parent; - } - - public override string Size - { - get { return SizeFormatterFactory.get().format(Path.attributes().getSize()); } - set { } - } - - public override string Date - { - get - { - DateFormat df = DateFormat.getDateInstance(); - return df.format(new Date(Path.attributes().getModificationDate())); - } - set { } - } - - public override string Name - { - get { return Path.getName(); } - set { } - } - } - - public class CDRootItem : CDItem - { - public CDRootItem(Path path) : base(path, null) - { - } - - public override string Size - { - get { return SizeFormatterFactory.get().format(Path.attributes().getSize()); } - set { } - } - - public override string Date - { - get - { - DateFormat df = DateFormat.getDateInstance(); - return df.format(new Date(Path.attributes().getModificationDate())); - } - set { } - } - - public override string Name - { - get { return Path.getName(); } - set { } - } - } +// +// Copyright (c) 2010-2012 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Drawing; +using System.IO; +using ch.cyberduck.core.formatter; +using java.text; +using java.util; +using Path = ch.cyberduck.core.Path; + +namespace Ch.Cyberduck.Ui.Controller +{ + public abstract class BaseItem + { + public Path Path; + private string _date = String.Empty; + private string _path = String.Empty; + private string _size = String.Empty; + + + public string ItemPath + { + get { return _path; } + set { _path = value; } + } + + public Image Icon { get; set; } + + public virtual string Size + { + get { return _size; } + set { _size = value; } + } + + public virtual string Date + { + get { return _date; } + set { _date = value; } + } + + public abstract string Name { get; set; } + + public BaseItem Parent { get; set; } + } + + public class RootItem : BaseItem + { + public RootItem(string name) + { + ItemPath = name; + } + + public override string Name + { + get { return ItemPath; } + set { } + } + } + + public class FolderItem : BaseItem + { + public FolderItem(string name, BaseItem parent) + { + ItemPath = name; + Parent = parent; + } + + public override string Name + { + get { return System.IO.Path.GetFileName(ItemPath); } + set + { + string dir = System.IO.Path.GetDirectoryName(ItemPath); + string destination = System.IO.Path.Combine(dir, value); + Directory.Move(ItemPath, destination); + ItemPath = destination; + } + } + } + + public class FileItem : BaseItem + { + public FileItem(string name, BaseItem parent) + { + ItemPath = name; + Parent = parent; + } + + public override string Name + { + get { return System.IO.Path.GetFileName(ItemPath); } + set + { + string dir = System.IO.Path.GetDirectoryName(ItemPath); + string destination = System.IO.Path.Combine(dir, value); + File.Move(ItemPath, destination); + ItemPath = destination; + } + } + } + + public class CDItem : BaseItem + { + public CDItem(Path path, BaseItem parent) + { + Path = path; + Parent = parent; + } + + public override string Size + { + get { return SizeFormatterFactory.get().format(Path.attributes().getSize()); } + set { } + } + + public override string Date + { + get + { + DateFormat df = DateFormat.getDateInstance(); + return df.format(new Date(Path.attributes().getModificationDate())); + } + set { } + } + + public override string Name + { + get { return Path.getName(); } + set { } + } + } + + public class CDRootItem : CDItem + { + public CDRootItem(Path path) : base(path, null) + { + } + + public override string Size + { + get { return SizeFormatterFactory.get().format(Path.attributes().getSize()); } + set { } + } + + public override string Date + { + get + { + DateFormat df = DateFormat.getDateInstance(); + return df.format(new Date(Path.attributes().getModificationDate())); + } + set { } + } + + public override string Name + { + get { return Path.getName(); } + set { } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/GotoController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/GotoController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/GotoController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/GotoController.cs index fc9c5b5cbb..4788c03fb5 100644 --- a/source/ch/cyberduck/ui/controller/GotoController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/GotoController.cs @@ -1,67 +1,67 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Drawing; -using System.Windows.Forms; -using Ch.Cyberduck.Core; -using ch.cyberduck.core; -using ch.cyberduck.core.features; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal class GotoController : FileController - { - public GotoController(IPromptView view, BrowserController browserController) : base(view, browserController) - { - PrefilledText = browserController.Workdir.getAbsolute(); - } - - public override Bitmap IconView - { - get { return IconCache.Instance.IconForFolder(IconCache.IconSize.Large); } - } - - public override void Callback(DialogResult result) - { - if (DialogResult.OK == result && !String.IsNullOrEmpty(View.InputText) && - !View.InputText.Trim().Equals(String.Empty)) - { - GotoFolder(BrowserController.Workdir, View.InputText); - } - } - - protected override bool ValidateInput() - { - return Utils.IsNotBlank(View.InputText); - } - - private void GotoFolder(Path workdir, String filename) - { - Path dir = ((Home) BrowserController.Session.getFeature(typeof (Home))).find(workdir, filename); - if (workdir.getParent().Equals(dir)) - { - BrowserController.SetWorkdir(dir, workdir); - } - else - { - BrowserController.SetWorkdir(dir); - } - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Drawing; +using System.Windows.Forms; +using Ch.Cyberduck.Core; +using ch.cyberduck.core; +using ch.cyberduck.core.features; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal class GotoController : FileController + { + public GotoController(IPromptView view, BrowserController browserController) : base(view, browserController) + { + PrefilledText = browserController.Workdir.getAbsolute(); + } + + public override Bitmap IconView + { + get { return IconCache.Instance.IconForFolder(IconCache.IconSize.Large); } + } + + public override void Callback(DialogResult result) + { + if (DialogResult.OK == result && !String.IsNullOrEmpty(View.InputText) && + !View.InputText.Trim().Equals(String.Empty)) + { + GotoFolder(BrowserController.Workdir, View.InputText); + } + } + + protected override bool ValidateInput() + { + return Utils.IsNotBlank(View.InputText); + } + + private void GotoFolder(Path workdir, String filename) + { + Path dir = ((Home) BrowserController.Session.getFeature(typeof (Home))).find(workdir, filename); + if (workdir.getParent().Equals(dir)) + { + BrowserController.SetWorkdir(dir, workdir); + } + else + { + BrowserController.SetWorkdir(dir); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/HostKeyController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/HostKeyController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/HostKeyController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/HostKeyController.cs index 10c9407bb5..c688ff570b 100644 --- a/source/ch/cyberduck/ui/controller/HostKeyController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/HostKeyController.cs @@ -1,111 +1,111 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using Ch.Cyberduck.Ui.Winforms.Taskdialog; -using ch.cyberduck.core; -using ch.cyberduck.core.preferences; -using ch.cyberduck.core.exception; -using ch.cyberduck.core.io; -using ch.cyberduck.core.sftp; -using ch.cyberduck.ui; -using java.io; -using java.security; -using org.apache.log4j; - -using KeyType = net.schmizz.sshj.common.KeyType; - -namespace Ch.Cyberduck.Ui.Controller -{ - public class HostKeyController : PreferencesHostKeyVerifier - { - private static readonly Logger Log = Logger.getLogger(typeof (HostKeyController).FullName); - - /// - /// Parent browser - /// - private readonly WindowController _parent; - - public HostKeyController(WindowController c) - { - _parent = c; - } - - protected override bool isUnknownKeyAccepted(string hostname, PublicKey key) - { - AsyncController.AsyncDelegate d = delegate - { - _parent.CommandBox( - String.Format(LocaleFactory.localizedString("Unknown fingerprint", "Sftp"), hostname), - String.Format(LocaleFactory.localizedString("Unknown fingerprint", "Sftp"), hostname), - String.Format( - LocaleFactory.localizedString( - "The fingerprint for the {1} key sent by the server is {0}.", "Sftp"), - new SSHFingerprintGenerator().fingerprint(key), KeyType.fromKey(key).name()), - String.Format("{0}|{1}", LocaleFactory.localizedString("Allow"), - LocaleFactory.localizedString("Deny")), false, - LocaleFactory.localizedString("Always"), SysIcons.Question, - PreferencesFactory.get().getProperty("website.help") + "/" + Scheme.sftp.name(), - delegate(int option, bool verificationChecked) - { - switch (option) - { - case 0: - allow(hostname, key, verificationChecked); - break; - case 1: - Log.warn("Cannot continue without a valid host key"); - throw new ConnectionCanceledException(); - } - }); - }; - _parent.Invoke(d, true); - return true; - } - - protected override bool isChangedKeyAccepted(string hostname, PublicKey key) - { - AsyncController.AsyncDelegate d = delegate - { - _parent.CommandBox( - String.Format(LocaleFactory.localizedString("Changed fingerprint", "Sftp"), hostname), - String.Format(LocaleFactory.localizedString("Changed fingerprint", "Sftp"), hostname), - String.Format(LocaleFactory.localizedString("The fingerprint for the {1} key sent by the server is {0}.", "Sftp"), - new SSHFingerprintGenerator().fingerprint(key), KeyType.fromKey(key).name()), - String.Format("{0}|{1}", LocaleFactory.localizedString("Allow"), - LocaleFactory.localizedString("Deny")), false, - LocaleFactory.localizedString("Always"), SysIcons.Warning, - PreferencesFactory.get().getProperty("website.help") + "/" + Scheme.sftp.name(), - delegate(int option, bool verificationChecked) - { - switch (option) - { - case 0: - allow(hostname, key, verificationChecked); - break; - case 1: - Log.warn("Cannot continue without a valid host key"); - throw new ConnectionCanceledException(); - } - }); - }; - _parent.Invoke(d, true); - return true; - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using Ch.Cyberduck.Ui.Winforms.Taskdialog; +using ch.cyberduck.core; +using ch.cyberduck.core.preferences; +using ch.cyberduck.core.exception; +using ch.cyberduck.core.io; +using ch.cyberduck.core.sftp; +using ch.cyberduck.ui; +using java.io; +using java.security; +using org.apache.log4j; + +using KeyType = net.schmizz.sshj.common.KeyType; + +namespace Ch.Cyberduck.Ui.Controller +{ + public class HostKeyController : PreferencesHostKeyVerifier + { + private static readonly Logger Log = Logger.getLogger(typeof (HostKeyController).FullName); + + /// + /// Parent browser + /// + private readonly WindowController _parent; + + public HostKeyController(WindowController c) + { + _parent = c; + } + + protected override bool isUnknownKeyAccepted(string hostname, PublicKey key) + { + AsyncController.AsyncDelegate d = delegate + { + _parent.CommandBox( + String.Format(LocaleFactory.localizedString("Unknown fingerprint", "Sftp"), hostname), + String.Format(LocaleFactory.localizedString("Unknown fingerprint", "Sftp"), hostname), + String.Format( + LocaleFactory.localizedString( + "The fingerprint for the {1} key sent by the server is {0}.", "Sftp"), + new SSHFingerprintGenerator().fingerprint(key), KeyType.fromKey(key).name()), + String.Format("{0}|{1}", LocaleFactory.localizedString("Allow"), + LocaleFactory.localizedString("Deny")), false, + LocaleFactory.localizedString("Always"), SysIcons.Question, + PreferencesFactory.get().getProperty("website.help") + "/" + Scheme.sftp.name(), + delegate(int option, bool verificationChecked) + { + switch (option) + { + case 0: + allow(hostname, key, verificationChecked); + break; + case 1: + Log.warn("Cannot continue without a valid host key"); + throw new ConnectionCanceledException(); + } + }); + }; + _parent.Invoke(d, true); + return true; + } + + protected override bool isChangedKeyAccepted(string hostname, PublicKey key) + { + AsyncController.AsyncDelegate d = delegate + { + _parent.CommandBox( + String.Format(LocaleFactory.localizedString("Changed fingerprint", "Sftp"), hostname), + String.Format(LocaleFactory.localizedString("Changed fingerprint", "Sftp"), hostname), + String.Format(LocaleFactory.localizedString("The fingerprint for the {1} key sent by the server is {0}.", "Sftp"), + new SSHFingerprintGenerator().fingerprint(key), KeyType.fromKey(key).name()), + String.Format("{0}|{1}", LocaleFactory.localizedString("Allow"), + LocaleFactory.localizedString("Deny")), false, + LocaleFactory.localizedString("Always"), SysIcons.Warning, + PreferencesFactory.get().getProperty("website.help") + "/" + Scheme.sftp.name(), + delegate(int option, bool verificationChecked) + { + switch (option) + { + case 0: + allow(hostname, key, verificationChecked); + break; + case 1: + Log.warn("Cannot continue without a valid host key"); + throw new ConnectionCanceledException(); + } + }); + }; + _parent.Invoke(d, true); + return true; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/IActivityView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/IActivityView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/IActivityView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/IActivityView.cs index a5a1e0f85b..35518e4917 100644 --- a/source/ch/cyberduck/ui/controller/IActivityView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/IActivityView.cs @@ -1,38 +1,38 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System.Collections; -using BrightIdeasSoftware; -using ch.cyberduck.core.threading; - -namespace Ch.Cyberduck.Ui.Controller -{ - public interface IActivityView : IView - { - BackgroundAction SelectedTask { get; } - - AspectGetterDelegate ModelTitleGetter { set; } - AspectGetterDelegate ModelDescriptionGetter { set; } - AspectGetterDelegate ModelIsRunningGetter { set; } - void SetModel(IEnumerable model); - void RefreshTask(BackgroundAction action); - void AddTask(BackgroundAction action); - void RemoveTask(BackgroundAction action); - - event VoidHandler StopActionEvent; - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System.Collections; +using BrightIdeasSoftware; +using ch.cyberduck.core.threading; + +namespace Ch.Cyberduck.Ui.Controller +{ + public interface IActivityView : IView + { + BackgroundAction SelectedTask { get; } + + AspectGetterDelegate ModelTitleGetter { set; } + AspectGetterDelegate ModelDescriptionGetter { set; } + AspectGetterDelegate ModelIsRunningGetter { set; } + void SetModel(IEnumerable model); + void RefreshTask(BackgroundAction action); + void AddTask(BackgroundAction action); + void RemoveTask(BackgroundAction action); + + event VoidHandler StopActionEvent; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/IBookmarkManagerView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/IBookmarkManagerView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/IBookmarkManagerView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/IBookmarkManagerView.cs index 953c43171c..8cdc7f6fe5 100644 --- a/source/ch/cyberduck/ui/controller/IBookmarkManagerView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/IBookmarkManagerView.cs @@ -1,50 +1,50 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Collections; -using BrightIdeasSoftware; -using ch.cyberduck.core; -using Ch.Cyberduck.Ui.Core; - -namespace Ch.Cyberduck.Ui.Controller -{ - public interface IBookmarkManagerView : IView - { - Host SelectedBookmark { get; } - ImageGetterDelegate BookmarkImageGetter { set; } - AspectGetterDelegate BookmarkNicknameGetter { set; } - AspectGetterDelegate BookmarkHostnameGetter { set; } - AspectGetterDelegate BookmarkUrlGetter { set; } - AspectGetterDelegate BookmarkNotesGetter { set; } - ImageGetterDelegate BookmarkStatusImageGetter { set; } - void SetBookmarkModel(IEnumerable hosts, Host selected); - void RefreshBookmark(Host host); - void AddBookmark(Host host); - void RemoveBookmark(Host host); - void EnsureBookmarkVisible(Host host); - void SelectBookmark(Host host); - event VoidHandler NewBookmark; - event ValidateCommand ValidateNewBookmark; - event VoidHandler EditBookmark; - event ValidateCommand ValidateEditBookmark; - event VoidHandler DeleteBookmark; - event ValidateCommand ValidateDeleteBookmark; - event VoidHandler DuplicateBookmark; - event ValidateCommand ValidateDuplicateBookmark; - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Collections; +using BrightIdeasSoftware; +using ch.cyberduck.core; +using Ch.Cyberduck.Ui.Core; + +namespace Ch.Cyberduck.Ui.Controller +{ + public interface IBookmarkManagerView : IView + { + Host SelectedBookmark { get; } + ImageGetterDelegate BookmarkImageGetter { set; } + AspectGetterDelegate BookmarkNicknameGetter { set; } + AspectGetterDelegate BookmarkHostnameGetter { set; } + AspectGetterDelegate BookmarkUrlGetter { set; } + AspectGetterDelegate BookmarkNotesGetter { set; } + ImageGetterDelegate BookmarkStatusImageGetter { set; } + void SetBookmarkModel(IEnumerable hosts, Host selected); + void RefreshBookmark(Host host); + void AddBookmark(Host host); + void RemoveBookmark(Host host); + void EnsureBookmarkVisible(Host host); + void SelectBookmark(Host host); + event VoidHandler NewBookmark; + event ValidateCommand ValidateNewBookmark; + event VoidHandler EditBookmark; + event ValidateCommand ValidateEditBookmark; + event VoidHandler DeleteBookmark; + event ValidateCommand ValidateDeleteBookmark; + event VoidHandler DuplicateBookmark; + event ValidateCommand ValidateDuplicateBookmark; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/IBookmarkView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/IBookmarkView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/IBookmarkView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/IBookmarkView.cs index 2e65c71894..a57b7f7b9b 100644 --- a/source/ch/cyberduck/ui/controller/IBookmarkView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/IBookmarkView.cs @@ -1,104 +1,104 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Drawing; -using Ch.Cyberduck.Ui.Winforms.Controls; -using ch.cyberduck.core; -using ch.cyberduck.core.ftp; - -namespace Ch.Cyberduck.Ui.Controller -{ - public interface IBookmarkView : IView - { - // Properties - Image Favicon { set; } - - bool ConnectModeFieldEnabled { set; } - bool EncodingFieldEnabled { set; } - bool WebUrlFieldEnabled { set; } - bool TimezoneFieldEnabled { set; } - bool AlertIconEnabled { set; } - - bool OptionsVisible { get; set; } - - string Nickname { get; set; } - string URL { get; set; } - string DownloadFolder { set; } - FTPConnectMode SelectedConnectMode { get; set; } - string SelectedEncoding { get; set; } - Host.TransferType SelectedTransferMode { get; set; } - string SelectedDownloadFolder { get; } - string WebURL { get; set; } - string WebUrlButtonToolTip { set; } - string Notes { get; set; } - string SelectedTimezone { get; set; } - string WindowTitle { set; } - bool PkCheckboxState { get; set; } - bool PkCheckboxEnabled { set; } - string PkLabel { get; set; } - string UsernameLabel { set; } - bool HostFieldEnabled { get; set; } - bool PortFieldEnabled { set; } - Protocol SelectedProtocol { get; set; } - string Hostname { get; set; } - string Port { get; set; } - string Username { get; set; } - bool UsernameEnabled { set; } - string Path { get; set; } - bool PathEnabled { get; set; } - bool AnonymousChecked { get; set; } - bool AnonymousEnabled { get; set; } - event VoidHandler ToggleOptions; - - void PopulateProtocols(List> protocols); - void PopulateEncodings(List encodings); - void PopulateTimezones(List timezones); - void PopulateConnectModes(List> connectModes); - void PopulateTransferModes(List> modes); - - void ShowDownloadFolderBrowser(string path); - void ShowPrivateKeyBrowser(string path); - // Delegates - event VoidHandler ChangedEncodingEvent; - event VoidHandler ChangedNicknameEvent; - event VoidHandler ChangedTimezoneEvent; - event VoidHandler ChangedConnectModeEvent; - event VoidHandler ChangedTransferEvent; - event VoidHandler ChangedWebURLEvent; - event VoidHandler ChangedCommentEvent; - event VoidHandler ChangedBrowserDownloadPathEvent; - event VoidHandler ChangedProtocolEvent; - event VoidHandler ChangedPortEvent; - event VoidHandler ChangedServerEvent; - event VoidHandler ChangedUsernameEvent; - event VoidHandler ChangedPathEvent; - event VoidHandler ChangedAnonymousCheckboxEvent; - event VoidHandler ChangedPublicKeyCheckboxEvent; - event VoidHandler OpenUrl; - event VoidHandler OpenWebUrl; - event VoidHandler OpenDownloadFolderBrowserEvent; - event VoidHandler OpenDownloadFolderEvent; - - event EventHandler ChangedPrivateKey; - - //todo - event VoidHandler LaunchNetworkAssistantEvent; - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Drawing; +using Ch.Cyberduck.Ui.Winforms.Controls; +using ch.cyberduck.core; +using ch.cyberduck.core.ftp; + +namespace Ch.Cyberduck.Ui.Controller +{ + public interface IBookmarkView : IView + { + // Properties + Image Favicon { set; } + + bool ConnectModeFieldEnabled { set; } + bool EncodingFieldEnabled { set; } + bool WebUrlFieldEnabled { set; } + bool TimezoneFieldEnabled { set; } + bool AlertIconEnabled { set; } + + bool OptionsVisible { get; set; } + + string Nickname { get; set; } + string URL { get; set; } + string DownloadFolder { set; } + FTPConnectMode SelectedConnectMode { get; set; } + string SelectedEncoding { get; set; } + Host.TransferType SelectedTransferMode { get; set; } + string SelectedDownloadFolder { get; } + string WebURL { get; set; } + string WebUrlButtonToolTip { set; } + string Notes { get; set; } + string SelectedTimezone { get; set; } + string WindowTitle { set; } + bool PkCheckboxState { get; set; } + bool PkCheckboxEnabled { set; } + string PkLabel { get; set; } + string UsernameLabel { set; } + bool HostFieldEnabled { get; set; } + bool PortFieldEnabled { set; } + Protocol SelectedProtocol { get; set; } + string Hostname { get; set; } + string Port { get; set; } + string Username { get; set; } + bool UsernameEnabled { set; } + string Path { get; set; } + bool PathEnabled { get; set; } + bool AnonymousChecked { get; set; } + bool AnonymousEnabled { get; set; } + event VoidHandler ToggleOptions; + + void PopulateProtocols(List> protocols); + void PopulateEncodings(List encodings); + void PopulateTimezones(List timezones); + void PopulateConnectModes(List> connectModes); + void PopulateTransferModes(List> modes); + + void ShowDownloadFolderBrowser(string path); + void ShowPrivateKeyBrowser(string path); + // Delegates + event VoidHandler ChangedEncodingEvent; + event VoidHandler ChangedNicknameEvent; + event VoidHandler ChangedTimezoneEvent; + event VoidHandler ChangedConnectModeEvent; + event VoidHandler ChangedTransferEvent; + event VoidHandler ChangedWebURLEvent; + event VoidHandler ChangedCommentEvent; + event VoidHandler ChangedBrowserDownloadPathEvent; + event VoidHandler ChangedProtocolEvent; + event VoidHandler ChangedPortEvent; + event VoidHandler ChangedServerEvent; + event VoidHandler ChangedUsernameEvent; + event VoidHandler ChangedPathEvent; + event VoidHandler ChangedAnonymousCheckboxEvent; + event VoidHandler ChangedPublicKeyCheckboxEvent; + event VoidHandler OpenUrl; + event VoidHandler OpenWebUrl; + event VoidHandler OpenDownloadFolderBrowserEvent; + event VoidHandler OpenDownloadFolderEvent; + + event EventHandler ChangedPrivateKey; + + //todo + event VoidHandler LaunchNetworkAssistantEvent; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/IBrowserView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/IBrowserView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/IBrowserView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/IBrowserView.cs index b0e51a748e..4b87ab853e 100644 --- a/source/ch/cyberduck/ui/controller/IBrowserView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/IBrowserView.cs @@ -1,224 +1,224 @@ -// -// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. -// http://cyberduck.io/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// feedback@cyberduck.io -// - -using System; -using System.Collections.Generic; -using System.Drawing; -using BrightIdeasSoftware; -using ch.cyberduck.core; -using Ch.Cyberduck.Ui.Core; -using Ch.Cyberduck.Ui.Winforms.Controls; - -namespace Ch.Cyberduck.Ui.Controller -{ - public enum BrowserView - { - File, - Bookmark, - History, - Bonjour - }; - - public interface IBrowserView : IBookmarkManagerView - { - BrowserView CurrentView { set; get; } - ObjectListView Browser { get; } - string WindowTitle { set; } - string StatusLabel { set; } - IList SelectedPaths { get; set; } - List SelectedBookmarks { get; } - int NumberOfFiles { get; } - int NumberOfBookmarks { get; } - string QuickConnectValue { get; } - bool HistoryBackEnabled { set; } - bool HistoryForwardEnabled { set; } - bool ParentPathEnabled { set; } - string SelectedComboboxPath { get; } - Bitmap EditIcon { set; } - Bitmap OpenIcon { set; } - string SelectedEncoding { set; } - bool SecureConnection { set; } - bool SecureConnectionVisible { set; } - bool CertBasedConnection { set; } - bool ActivityRunning { set; } - bool ShowActivityEnabled { set; } - bool ComboboxPathEnabled { set; } - bool HiddenFilesVisible { set; } - bool LogDrawerVisible { get; set; } - Filter FilenameFilter { set; } - string SearchString { set; get; } - bool SearchEnabled { set; } - IList VisiblePaths { get; } - bool ToolbarVisible { set; get; } - int TopItemIndex { set; get; } - TreeListView.CanExpandGetterDelegate ModelCanExpandDelegate { set; } - TreeListView.ChildrenGetterDelegate ModelChildrenGetterDelegate { set; } - TypedColumn.TypedAspectGetterDelegate ModelFilenameGetter { set; } - TypedColumn.TypedImageGetterDelegate ModelIconGetter { set; } - TypedColumn.TypedAspectGetterDelegate ModelSizeGetter { set; } - AspectToStringConverterDelegate ModelSizeAsStringGetter { set; } - TypedColumn.TypedAspectGetterDelegate ModelModifiedGetter { set; } - AspectToStringConverterDelegate ModelModifiedAsStringGetter { set; } - TypedColumn.TypedAspectGetterDelegate ModelOwnerGetter { set; } - TypedColumn.TypedAspectGetterDelegate ModelGroupGetter { set; } - TypedColumn.TypedAspectGetterDelegate ModelPermissionsGetter { set; } - TypedColumn.TypedAspectGetterDelegate ModelKindGetter { set; } - TypedColumn.TypedAspectGetterDelegate ModelExtensionGetter { set; } - TypedColumn.TypedAspectGetterDelegate ModelRegionGetter { set; } - TypedColumn.TypedAspectGetterDelegate ModelVersionGetter { set; } - MulticolorTreeListView.ActiveGetterPathDelegate ModelActiveGetter { set; } - event EventHandler ChangeBrowserView; - // mainly used to detect a change of displayed items to update the status label - event VoidHandler ItemsChanged; - event ValidateCommand ValidatePathsCombobox; //path history combobox - void StartActivityAnimation(); - void StopActivityAnimation(); - void UpdateBookmarks(); - event ValidateCommand ValidateSearchField; - event SetComparatorHandler SetComparator; - void StartRenaming(Path path); - void PopulateQuickConnect(List nicknames); - void PopulatePaths(List paths); - void PopulateEncodings(List encodings); - void StartSearch(); - String DownloadAsDialog(Local initialDirectory, string fileName); - String DownloadToDialog(string description, Local initialDirectory, string selectedPath); - String[] UploadDialog(Local initialDirectory); - String SynchronizeDialog(string description, Local initialDirectory, string selectedPath); - event ValidateCommand ContextMenuEnabled; - // Menu - File - event EventHandler NewBrowser; - event ValidateCommand ValidateNewBrowser; - event VoidHandler OpenConnection; - event ValidateCommand ValidateOpenConnection; - event VoidHandler NewDownload; - event ValidateCommand ValidateNewDownload; - event VoidHandler NewFolder; - event ValidateCommand ValidateNewFolder; - event VoidHandler NewFile; - event ValidateCommand ValidateNewFile; - event VoidHandler NewSymbolicLink; - event ValidateCommand ValidateNewSymbolicLink; - event RenamePathname RenameFile; - event ValidateCommand ValidateRenameFile; - event VoidHandler DuplicateFile; - event ValidateCommand ValidateDuplicateFile; - event VoidHandler OpenUrl; - event ValidateCommand ValidateOpenWebUrl; - event ValidateCommand ValidateEditWith; - event EditorsHandler GetEditorsForSelection; - event VoidHandler ShowInspector; - event ValidateCommand ValidateShowInspector; - event VoidHandler Download; - event ValidateCommand ValidateDownload; - event VoidHandler DownloadAs; - event ValidateCommand ValidateDownloadAs; - event VoidHandler DownloadTo; - event ValidateCommand ValidateDownloadTo; - event VoidHandler Upload; - event ValidateCommand ValidateUpload; - event VoidHandler Synchronize; - event ValidateCommand ValidateSynchronize; - event VoidHandler Delete; - event ValidateCommand ValidateDelete; - event VoidHandler RevertFile; - event ValidateCommand ValidateRevertFile; - event ArchivesHandler GetArchives; - event CopyUrlHandler GetCopyUrls; - event OpenUrlHandler GetOpenUrls; - event BookmarksHandler GetBookmarks; - event BookmarksHandler GetHistory; - event VoidHandler ClearHistory; - event BookmarksHandler GetBonjourHosts; - event EventHandler CreateArchive; - event ValidateCommand ValidateCreateArchive; - event VoidHandler ExpandArchive; - event ValidateCommand ValidateExpandArchive; - event VoidHandler Exit; - event VoidHandler Cut; - event ValidateCommand ValidateCut; - event VoidHandler Copy; - event ValidateCommand ValidateCopy; - event VoidHandler Paste; - event ValidateCommand ValidatePaste; - event ValidateCommand ValidateSelectAll; - event VoidHandler ShowPreferences; - event VoidHandler ToggleToolbar; - event VoidHandler ShowHiddenFiles; - event EventHandler EncodingChanged; - event ValidateCommand ValidateTextEncoding; - event VoidHandler ToggleLogDrawer; - event VoidHandler RefreshBrowser; - event ValidateCommand ValidateRefresh; - event VoidHandler GotoFolder; - event ValidateCommand ValidateGotoFolder; - event VoidHandler HistoryBack; - event ValidateCommand ValidateHistoryBack; - event VoidHandler HistoryForward; - event ValidateCommand ValidateHistoryForward; - event VoidHandler FolderUp; - event ValidateCommand ValidateFolderUp; - event VoidHandler FolderInside; - event ValidateCommand ValidateFolderInside; - event VoidHandler Search; - event VoidHandler SendCustomCommand; - event ValidateCommand ValidateSendCustomCommand; - event VoidHandler OpenInTerminal; - event ValidateCommand ValidateOpenInTerminal; - event VoidHandler Stop; - event ValidateCommand ValidateStop; - event VoidHandler Disconnect; - event ValidateCommand ValidateDisconnect; - event VoidHandler ToggleBookmarks; - event VoidHandler SortBookmarksByNickname; - event VoidHandler SortBookmarksByHostname; - event VoidHandler SortBookmarksByProtocol; - event EventHandler ConnectBookmark; - event ValidateCommand ValidateConnectBookmark; - event VoidHandler SearchFieldChanged; - event VoidHandler QuickConnect; - event VoidHandler BrowserDoubleClicked; - event VoidHandler BrowserSelectionChanged; - event VoidHandler PathSelectionChanged; - event EditWithHandler EditEvent; - event VoidHandler ShowTransfers; - event VoidHandler ShowCertificate; - event DropHandler BrowserCanDrop; - event ModelDropHandler BrowserModelCanDrop; - event DropHandler BrowserDropped; - event ModelDropHandler BrowserModelDropped; - event DragHandler BrowserDrag; - event EndDragHandler BrowserEndDrag; - event DropHandler HostCanDrop; - event ModelDropHandler HostModelCanDrop; - event DropHandler HostDropped; - event ModelDropHandler HostModelDropped; - event DragHandler HostDrag; - event EndDragHandler HostEndDrag; - void BeginBrowserUpdate(); - void EndBrowserUpdate(); - void SetBrowserModel(IEnumerable model); - void RefreshBrowserObject(Path path); - void RefreshBrowserObjects(List list); - void BrowserActiveStateChanged(); - void AddTranscriptEntry(bool request, string entry); - void ClearTranscript(); - void FocusBrowser(); - void RemoveDonateButton(); - } +// +// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. +// http://cyberduck.io/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// feedback@cyberduck.io +// + +using System; +using System.Collections.Generic; +using System.Drawing; +using BrightIdeasSoftware; +using ch.cyberduck.core; +using Ch.Cyberduck.Ui.Core; +using Ch.Cyberduck.Ui.Winforms.Controls; + +namespace Ch.Cyberduck.Ui.Controller +{ + public enum BrowserView + { + File, + Bookmark, + History, + Bonjour + }; + + public interface IBrowserView : IBookmarkManagerView + { + BrowserView CurrentView { set; get; } + ObjectListView Browser { get; } + string WindowTitle { set; } + string StatusLabel { set; } + IList SelectedPaths { get; set; } + List SelectedBookmarks { get; } + int NumberOfFiles { get; } + int NumberOfBookmarks { get; } + string QuickConnectValue { get; } + bool HistoryBackEnabled { set; } + bool HistoryForwardEnabled { set; } + bool ParentPathEnabled { set; } + string SelectedComboboxPath { get; } + Bitmap EditIcon { set; } + Bitmap OpenIcon { set; } + string SelectedEncoding { set; } + bool SecureConnection { set; } + bool SecureConnectionVisible { set; } + bool CertBasedConnection { set; } + bool ActivityRunning { set; } + bool ShowActivityEnabled { set; } + bool ComboboxPathEnabled { set; } + bool HiddenFilesVisible { set; } + bool LogDrawerVisible { get; set; } + Filter FilenameFilter { set; } + string SearchString { set; get; } + bool SearchEnabled { set; } + IList VisiblePaths { get; } + bool ToolbarVisible { set; get; } + int TopItemIndex { set; get; } + TreeListView.CanExpandGetterDelegate ModelCanExpandDelegate { set; } + TreeListView.ChildrenGetterDelegate ModelChildrenGetterDelegate { set; } + TypedColumn.TypedAspectGetterDelegate ModelFilenameGetter { set; } + TypedColumn.TypedImageGetterDelegate ModelIconGetter { set; } + TypedColumn.TypedAspectGetterDelegate ModelSizeGetter { set; } + AspectToStringConverterDelegate ModelSizeAsStringGetter { set; } + TypedColumn.TypedAspectGetterDelegate ModelModifiedGetter { set; } + AspectToStringConverterDelegate ModelModifiedAsStringGetter { set; } + TypedColumn.TypedAspectGetterDelegate ModelOwnerGetter { set; } + TypedColumn.TypedAspectGetterDelegate ModelGroupGetter { set; } + TypedColumn.TypedAspectGetterDelegate ModelPermissionsGetter { set; } + TypedColumn.TypedAspectGetterDelegate ModelKindGetter { set; } + TypedColumn.TypedAspectGetterDelegate ModelExtensionGetter { set; } + TypedColumn.TypedAspectGetterDelegate ModelRegionGetter { set; } + TypedColumn.TypedAspectGetterDelegate ModelVersionGetter { set; } + MulticolorTreeListView.ActiveGetterPathDelegate ModelActiveGetter { set; } + event EventHandler ChangeBrowserView; + // mainly used to detect a change of displayed items to update the status label + event VoidHandler ItemsChanged; + event ValidateCommand ValidatePathsCombobox; //path history combobox + void StartActivityAnimation(); + void StopActivityAnimation(); + void UpdateBookmarks(); + event ValidateCommand ValidateSearchField; + event SetComparatorHandler SetComparator; + void StartRenaming(Path path); + void PopulateQuickConnect(List nicknames); + void PopulatePaths(List paths); + void PopulateEncodings(List encodings); + void StartSearch(); + String DownloadAsDialog(Local initialDirectory, string fileName); + String DownloadToDialog(string description, Local initialDirectory, string selectedPath); + String[] UploadDialog(Local initialDirectory); + String SynchronizeDialog(string description, Local initialDirectory, string selectedPath); + event ValidateCommand ContextMenuEnabled; + // Menu - File + event EventHandler NewBrowser; + event ValidateCommand ValidateNewBrowser; + event VoidHandler OpenConnection; + event ValidateCommand ValidateOpenConnection; + event VoidHandler NewDownload; + event ValidateCommand ValidateNewDownload; + event VoidHandler NewFolder; + event ValidateCommand ValidateNewFolder; + event VoidHandler NewFile; + event ValidateCommand ValidateNewFile; + event VoidHandler NewSymbolicLink; + event ValidateCommand ValidateNewSymbolicLink; + event RenamePathname RenameFile; + event ValidateCommand ValidateRenameFile; + event VoidHandler DuplicateFile; + event ValidateCommand ValidateDuplicateFile; + event VoidHandler OpenUrl; + event ValidateCommand ValidateOpenWebUrl; + event ValidateCommand ValidateEditWith; + event EditorsHandler GetEditorsForSelection; + event VoidHandler ShowInspector; + event ValidateCommand ValidateShowInspector; + event VoidHandler Download; + event ValidateCommand ValidateDownload; + event VoidHandler DownloadAs; + event ValidateCommand ValidateDownloadAs; + event VoidHandler DownloadTo; + event ValidateCommand ValidateDownloadTo; + event VoidHandler Upload; + event ValidateCommand ValidateUpload; + event VoidHandler Synchronize; + event ValidateCommand ValidateSynchronize; + event VoidHandler Delete; + event ValidateCommand ValidateDelete; + event VoidHandler RevertFile; + event ValidateCommand ValidateRevertFile; + event ArchivesHandler GetArchives; + event CopyUrlHandler GetCopyUrls; + event OpenUrlHandler GetOpenUrls; + event BookmarksHandler GetBookmarks; + event BookmarksHandler GetHistory; + event VoidHandler ClearHistory; + event BookmarksHandler GetBonjourHosts; + event EventHandler CreateArchive; + event ValidateCommand ValidateCreateArchive; + event VoidHandler ExpandArchive; + event ValidateCommand ValidateExpandArchive; + event VoidHandler Exit; + event VoidHandler Cut; + event ValidateCommand ValidateCut; + event VoidHandler Copy; + event ValidateCommand ValidateCopy; + event VoidHandler Paste; + event ValidateCommand ValidatePaste; + event ValidateCommand ValidateSelectAll; + event VoidHandler ShowPreferences; + event VoidHandler ToggleToolbar; + event VoidHandler ShowHiddenFiles; + event EventHandler EncodingChanged; + event ValidateCommand ValidateTextEncoding; + event VoidHandler ToggleLogDrawer; + event VoidHandler RefreshBrowser; + event ValidateCommand ValidateRefresh; + event VoidHandler GotoFolder; + event ValidateCommand ValidateGotoFolder; + event VoidHandler HistoryBack; + event ValidateCommand ValidateHistoryBack; + event VoidHandler HistoryForward; + event ValidateCommand ValidateHistoryForward; + event VoidHandler FolderUp; + event ValidateCommand ValidateFolderUp; + event VoidHandler FolderInside; + event ValidateCommand ValidateFolderInside; + event VoidHandler Search; + event VoidHandler SendCustomCommand; + event ValidateCommand ValidateSendCustomCommand; + event VoidHandler OpenInTerminal; + event ValidateCommand ValidateOpenInTerminal; + event VoidHandler Stop; + event ValidateCommand ValidateStop; + event VoidHandler Disconnect; + event ValidateCommand ValidateDisconnect; + event VoidHandler ToggleBookmarks; + event VoidHandler SortBookmarksByNickname; + event VoidHandler SortBookmarksByHostname; + event VoidHandler SortBookmarksByProtocol; + event EventHandler ConnectBookmark; + event ValidateCommand ValidateConnectBookmark; + event VoidHandler SearchFieldChanged; + event VoidHandler QuickConnect; + event VoidHandler BrowserDoubleClicked; + event VoidHandler BrowserSelectionChanged; + event VoidHandler PathSelectionChanged; + event EditWithHandler EditEvent; + event VoidHandler ShowTransfers; + event VoidHandler ShowCertificate; + event DropHandler BrowserCanDrop; + event ModelDropHandler BrowserModelCanDrop; + event DropHandler BrowserDropped; + event ModelDropHandler BrowserModelDropped; + event DragHandler BrowserDrag; + event EndDragHandler BrowserEndDrag; + event DropHandler HostCanDrop; + event ModelDropHandler HostModelCanDrop; + event DropHandler HostDropped; + event ModelDropHandler HostModelDropped; + event DragHandler HostDrag; + event EndDragHandler HostEndDrag; + void BeginBrowserUpdate(); + void EndBrowserUpdate(); + void SetBrowserModel(IEnumerable model); + void RefreshBrowserObject(Path path); + void RefreshBrowserObjects(List list); + void BrowserActiveStateChanged(); + void AddTranscriptEntry(bool request, string entry); + void ClearTranscript(); + void FocusBrowser(); + void RemoveDonateButton(); + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/ICommandView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/ICommandView.cs similarity index 96% rename from source/ch/cyberduck/ui/controller/ICommandView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/ICommandView.cs index db001b36cd..d339355642 100644 --- a/source/ch/cyberduck/ui/controller/ICommandView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/ICommandView.cs @@ -1,32 +1,32 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -namespace Ch.Cyberduck.Ui.Controller -{ - public interface ICommandView : IView - { - string Command { get; } - - void AddTranscriptEntry(string message); - - void StartActivityAnimation(); - void StopActivityAnimation(); - - event VoidHandler SendEvent; - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +namespace Ch.Cyberduck.Ui.Controller +{ + public interface ICommandView : IView + { + string Command { get; } + + void AddTranscriptEntry(string message); + + void StartActivityAnimation(); + void StopActivityAnimation(); + + event VoidHandler SendEvent; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/IConnectionView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/IConnectionView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/IConnectionView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/IConnectionView.cs index ef8d473b7b..c8747bca5f 100644 --- a/source/ch/cyberduck/ui/controller/IConnectionView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/IConnectionView.cs @@ -1,32 +1,32 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -namespace Ch.Cyberduck.Ui.Controller -{ - public interface IConnectionView : IBookmarkView - { - string Password { get; set; } - bool PasswordEnabled { set; } - string PasswordLabel { set; } - - bool SavePasswordChecked { get; set; } - bool SavePasswordEnabled { set; } - - event VoidHandler ChangedSavePasswordCheckboxEvent; - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +namespace Ch.Cyberduck.Ui.Controller +{ + public interface IConnectionView : IBookmarkView + { + string Password { get; set; } + bool PasswordEnabled { set; } + string PasswordLabel { set; } + + bool SavePasswordChecked { get; set; } + bool SavePasswordEnabled { set; } + + event VoidHandler ChangedSavePasswordCheckboxEvent; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/ICreateFilePromptView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/ICreateFilePromptView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/ICreateFilePromptView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/ICreateFilePromptView.cs index b7868f7cf3..6e39a46c35 100644 --- a/source/ch/cyberduck/ui/controller/ICreateFilePromptView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/ICreateFilePromptView.cs @@ -1,23 +1,23 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -namespace Ch.Cyberduck.Ui.Controller -{ - internal interface ICreateFilePromptView : IPromptView - { - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +namespace Ch.Cyberduck.Ui.Controller +{ + internal interface ICreateFilePromptView : IPromptView + { + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/ICreateSymlinkPromptView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/ICreateSymlinkPromptView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/ICreateSymlinkPromptView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/ICreateSymlinkPromptView.cs index 40e380d4a1..6da76a7c02 100644 --- a/source/ch/cyberduck/ui/controller/ICreateSymlinkPromptView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/ICreateSymlinkPromptView.cs @@ -1,24 +1,24 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -namespace Ch.Cyberduck.Ui.Controller -{ - internal interface ICreateSymlinkPromptView : IPromptView - { - string LinkForFile { set; } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +namespace Ch.Cyberduck.Ui.Controller +{ + internal interface ICreateSymlinkPromptView : IPromptView + { + string LinkForFile { set; } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/IDonationView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/IDonationView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/IDonationView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/IDonationView.cs index def09600f3..6f969c10a5 100644 --- a/source/ch/cyberduck/ui/controller/IDonationView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/IDonationView.cs @@ -1,25 +1,25 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -namespace Ch.Cyberduck.Ui.Controller -{ - public interface IDonationView : IView - { - bool NeverShowDonation { get; set; } - string Title { set; } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +namespace Ch.Cyberduck.Ui.Controller +{ + public interface IDonationView : IView + { + bool NeverShowDonation { get; set; } + string Title { set; } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/IDuplicateFilePromptView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/IDuplicateFilePromptView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/IDuplicateFilePromptView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/IDuplicateFilePromptView.cs index 63ee38f880..38b2d23b6b 100644 --- a/source/ch/cyberduck/ui/controller/IDuplicateFilePromptView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/IDuplicateFilePromptView.cs @@ -1,23 +1,23 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -namespace Ch.Cyberduck.Ui.Controller -{ - internal interface IDuplicateFilePromptView : IPromptView - { - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +namespace Ch.Cyberduck.Ui.Controller +{ + internal interface IDuplicateFilePromptView : IPromptView + { + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/IErrorView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/IErrorView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/IErrorView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/IErrorView.cs index 0077c25b89..967733bbef 100644 --- a/source/ch/cyberduck/ui/controller/IErrorView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/IErrorView.cs @@ -1,38 +1,38 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Collections.Generic; -using BrightIdeasSoftware; -using ch.cyberduck.core.exception; - -namespace Ch.Cyberduck.Ui.Controller -{ - public interface IErrorView : IView - { - AspectGetterDelegate ModelErrorMessageGetter { set; } - AspectGetterDelegate ModelHostGetter { set; } - AspectGetterDelegate ModelDescriptionGetter { set; } - - string Transcript { set; } - bool TranscriptEnabled { set; } - bool TranscriptVisible { get; set; } - void SetModel(IEnumerable model); - - event VoidHandler ToggleTranscriptEvent; - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Collections.Generic; +using BrightIdeasSoftware; +using ch.cyberduck.core.exception; + +namespace Ch.Cyberduck.Ui.Controller +{ + public interface IErrorView : IView + { + AspectGetterDelegate ModelErrorMessageGetter { set; } + AspectGetterDelegate ModelHostGetter { set; } + AspectGetterDelegate ModelDescriptionGetter { set; } + + string Transcript { set; } + bool TranscriptEnabled { set; } + bool TranscriptVisible { get; set; } + void SetModel(IEnumerable model); + + event VoidHandler ToggleTranscriptEvent; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/IGotoPromptView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/IGotoPromptView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/IGotoPromptView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/IGotoPromptView.cs index 3eb6d0f5a9..5c70643a49 100644 --- a/source/ch/cyberduck/ui/controller/IGotoPromptView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/IGotoPromptView.cs @@ -1,24 +1,24 @@ -// -// Copyright (c) 2010-2011 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -namespace Ch.Cyberduck.Ui.Controller -{ - internal interface IGotoPromptView : IPromptView - { - } +// +// Copyright (c) 2010-2011 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +namespace Ch.Cyberduck.Ui.Controller +{ + internal interface IGotoPromptView : IPromptView + { + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/IInfoView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/IInfoView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/IInfoView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/IInfoView.cs index 5724e252cd..06595808f7 100644 --- a/source/ch/cyberduck/ui/controller/IInfoView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/IInfoView.cs @@ -1,228 +1,228 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Windows.Forms; -using ch.cyberduck.core.cdn; - -namespace Ch.Cyberduck.Ui.Controller -{ - public enum InfoTab - { - General, - Permissions, - Acl, - Distribution, - S3, - Metadata - } - - public interface IInfoView : IView - { - InfoTab ActiveTab { set; get; } - - Image ToolbarDistributionImage { set; } - bool ToolbarDistributionEnabled { set; } - bool ToolbarS3Enabled { set; } - Image ToolbarS3Image { set; } - String ToolbarS3Label { set; } - bool ToolbarPermissionsEnabled { set; } - bool ToolbarMetadataEnabled { set; } - - Image FileIcon { set; } - string Filename { set; get; } - bool FilenameEnabled { set; } - bool SizeButtonEnabled { set; } - bool SizeAnimationActive { set; } - bool PermissionAnimationActive { set; } - string FileSize { set; } - string Path { set; } - string PathToolTip { set; } - string WebUrl { set; } - string WebUrlTooltip { set; } - string Kind { set; } - string Permissions { set; } - string FileOwner { set; } - string Group { set; } - string FileCreated { set; } - string Modified { set; } - string Checksum { set; } - - CheckState OwnerRead { set; get; } - bool OwnerReadEnabled { set; get; } - CheckState OwnerWrite { set; get; } - bool OwnerWriteEnabled { set; get; } - CheckState OwnerExecute { set; get; } - bool OwnerExecuteEnabled { set; get; } - CheckState GroupRead { set; get; } - bool GroupReadEnabled { set; get; } - CheckState GroupWrite { set; get; } - bool GroupWriteEnabled { set; get; } - CheckState GroupExecute { set; get; } - bool GroupExecuteEnabled { set; get; } - CheckState OtherRead { set; get; } - bool OtherReadEnabled { set; get; } - CheckState OtherWrite { set; get; } - bool OtherWriteEnabled { set; get; } - CheckState OtherExecute { set; get; } - bool OtherExecuteEnabled { set; get; } - bool RecursivePermissionsEnabled { set; } - string OctalPermissions { get; set; } - bool OctalPermissionsEnabled { set; } - - List SelectedAclEntries { get; } - bool AclPanel { set; } - - BindingList AclDataSource { set; } - bool AclTableEnabled { set; } - bool AclAddEnabled { set; } - bool AclRemoveEnabled { set; } - bool AclAnimationActive { set; } - string AclUrl { set; } - bool AclUrlEnabled { set; } - string AclUrlTooltip { set; } - - bool MetadataTableEnabled { set; } - bool MetadataAddEnabled { set; } - bool MetadataRemoveEnabled { set; } - bool MetadataAnimationActive { set; } - - BindingList MetadataDataSource { set; } - List SelectedMetadataEntries { get; } - - Distribution.Method DistributionDeliveryMethod { set; get; } - bool DistributionDeliveryMethodEnabled { set; } - bool Distribution { set; get; } - bool DistributionEnabled { set; } - string DistributionTitle { set; } - string DistributionStatus { set; } - bool DistributionLoggingCheckbox { set; get; } - bool DistributionLoggingCheckboxEnabled { set; } - string DistributionLoggingPopup { set; get; } - bool DistributionLoggingPopupEnabled { set; } - string DistributionUrl { set; } - string DistributionUrlTooltip { set; } - bool DistributionUrlEnabled { set; } - string DistributionOrigin { set; } - string DistributionCname { set; get; } - string DistributionCnameUrl { set; } - bool DistributionCnameUrlEnabled { set; } - string DistributionCnameUrlTooltip { set; } - bool DistributionCnameEnabled { set; } - bool DistributionAnimationActive { set; } - string DistributionDefaultRoot { set; get; } - bool DistributionDefaultRootEnabled { set; } - string DistributionInvalidationStatus { set; } - string DistributionInvalidateObjectsTooltip { set; } - bool DistributionInvalidateObjectsEnabled { set; } - bool DistributionAnalyticsCheckbox { set; get; } - bool DistributionAnalyticsCheckboxEnabled { set; } - string DistributionAnalyticsSetupUrl { set; } - bool DistributionAnalyticsSetupUrlEnabled { set; } - - string BucketLocation { set; } - bool Encryption { set; get; } - bool EncryptionEnabled { set; get; } - string StorageClass { set; get; } - bool StorageClassEnabled { set; } - string BucketLoggingPopup { set; get; } - bool BucketLoggingPopupEnabled { set; } - string S3PublicUrl { set; } - bool S3PublicUrlEnabled { set; } - string S3PublicUrlTooltip { set; } - string S3PublicUrlValidity { set; } - string S3TorrentUrl { set; } - bool S3TorrentUrlEnabled { set; } - string S3TorrentUrlTooltip { set; } - bool S3AnimationActive { set; } - bool BucketLoggingCheckbox { set; get; } - bool BucketLoggingCheckboxEnabled { set; } - string BucketLoggingTooltip { set; } - bool BucketAnalyticsCheckbox { set; get; } - bool BucketAnalyticsCheckboxEnabled { set; } - string BucketAnalyticsSetupUrl { set; } - bool BucketAnalyticsSetupUrlEnabled { set; } - bool BucketVersioning { get; set; } - bool BucketVersioningEnabled { set; } - bool BucketMfa { set; get; } - bool BucketMfaEnabled { set; } - bool LifecycleTransitionCheckbox { set; get; } - bool LifecycleTransitionCheckboxEnabled { set; } - bool LifecycleDeleteCheckbox { set; get; } - bool LifecycleDeleteCheckboxEnabled { set; } - string LifecycleTransition { get; set; } - bool LifecycleTransitionPopupEnabled { set; } - string LifecycleDelete { get; set; } - bool LifecycleDeletePopupEnabled { set; } - - event VoidHandler FilenameChanged; - event VoidHandler CalculateSize; - event VoidHandler OwnerReadChanged; - event VoidHandler OwnerWriteChanged; - event VoidHandler OwnerExecuteChanged; - event VoidHandler GroupReadChanged; - event VoidHandler GroupWriteChanged; - event VoidHandler GroupExecuteChanged; - event VoidHandler OtherReadChanged; - event VoidHandler OtherWriteChanged; - event VoidHandler OtherExecuteChanged; - event VoidHandler ApplyRecursivePermissions; - event VoidHandler OctalPermissionsChanged; - - event EventHandler ShowHelp; - void PopulateAclUsers(IDictionary users); - void PopulateAclRoles(IList roles); - void PopulateMetadata(IDictionary metadata); - void EditAclRow(InfoController.UserAndRoleEntry aclEntry, bool selectRole); - void EditMetadataRow(InfoController.CustomHeaderEntry headerEntry, bool selectValue); - void PopulateDistributionDeliveryMethod(IList> methods); - void PopulateDefaultRoot(IList> roots); - void PopulateBucketLogging(IList buckets); - void PopulateDistributionLogging(IList buckets); - void PopulateLifecycleTransitionPeriod(IList> periods); - void PopulateLifecycleDeletePeriod(IList> periods); - - event VoidHandler DistributionDeliveryMethodChanged; - event VoidHandler DistributionEnabledChanged; - event VoidHandler DistributionLoggingCheckboxChanged; - event VoidHandler DistributionLoggingPopupChanged; - event VoidHandler DistributionAnalyticsCheckboxChanged; - event VoidHandler DistributionCnameChanged; - event VoidHandler DistributionDefaultRootChanged; - event VoidHandler DistributionInvalidateObjects; - - void PopulateStorageClass(IList> classes); - - event VoidHandler BucketLoggingCheckboxChanged; - event VoidHandler BucketAnalyticsCheckboxChanged; - event VoidHandler BucketLoggingPopupChanged; - event VoidHandler EncryptionChanged; - event VoidHandler StorageClassChanged; - event VoidHandler BucketVersioningChanged; - event VoidHandler BucketMfaChanged; - event VoidHandler LifecycleTransitionCheckboxChanged; - event VoidHandler LifecycleTransitionPopupChanged; - event VoidHandler LifecycleDeleteCheckboxChanged; - event VoidHandler LifecycleDeletePopupChanged; - - event VoidHandler ActiveTabChanged; - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; +using ch.cyberduck.core.cdn; + +namespace Ch.Cyberduck.Ui.Controller +{ + public enum InfoTab + { + General, + Permissions, + Acl, + Distribution, + S3, + Metadata + } + + public interface IInfoView : IView + { + InfoTab ActiveTab { set; get; } + + Image ToolbarDistributionImage { set; } + bool ToolbarDistributionEnabled { set; } + bool ToolbarS3Enabled { set; } + Image ToolbarS3Image { set; } + String ToolbarS3Label { set; } + bool ToolbarPermissionsEnabled { set; } + bool ToolbarMetadataEnabled { set; } + + Image FileIcon { set; } + string Filename { set; get; } + bool FilenameEnabled { set; } + bool SizeButtonEnabled { set; } + bool SizeAnimationActive { set; } + bool PermissionAnimationActive { set; } + string FileSize { set; } + string Path { set; } + string PathToolTip { set; } + string WebUrl { set; } + string WebUrlTooltip { set; } + string Kind { set; } + string Permissions { set; } + string FileOwner { set; } + string Group { set; } + string FileCreated { set; } + string Modified { set; } + string Checksum { set; } + + CheckState OwnerRead { set; get; } + bool OwnerReadEnabled { set; get; } + CheckState OwnerWrite { set; get; } + bool OwnerWriteEnabled { set; get; } + CheckState OwnerExecute { set; get; } + bool OwnerExecuteEnabled { set; get; } + CheckState GroupRead { set; get; } + bool GroupReadEnabled { set; get; } + CheckState GroupWrite { set; get; } + bool GroupWriteEnabled { set; get; } + CheckState GroupExecute { set; get; } + bool GroupExecuteEnabled { set; get; } + CheckState OtherRead { set; get; } + bool OtherReadEnabled { set; get; } + CheckState OtherWrite { set; get; } + bool OtherWriteEnabled { set; get; } + CheckState OtherExecute { set; get; } + bool OtherExecuteEnabled { set; get; } + bool RecursivePermissionsEnabled { set; } + string OctalPermissions { get; set; } + bool OctalPermissionsEnabled { set; } + + List SelectedAclEntries { get; } + bool AclPanel { set; } + + BindingList AclDataSource { set; } + bool AclTableEnabled { set; } + bool AclAddEnabled { set; } + bool AclRemoveEnabled { set; } + bool AclAnimationActive { set; } + string AclUrl { set; } + bool AclUrlEnabled { set; } + string AclUrlTooltip { set; } + + bool MetadataTableEnabled { set; } + bool MetadataAddEnabled { set; } + bool MetadataRemoveEnabled { set; } + bool MetadataAnimationActive { set; } + + BindingList MetadataDataSource { set; } + List SelectedMetadataEntries { get; } + + Distribution.Method DistributionDeliveryMethod { set; get; } + bool DistributionDeliveryMethodEnabled { set; } + bool Distribution { set; get; } + bool DistributionEnabled { set; } + string DistributionTitle { set; } + string DistributionStatus { set; } + bool DistributionLoggingCheckbox { set; get; } + bool DistributionLoggingCheckboxEnabled { set; } + string DistributionLoggingPopup { set; get; } + bool DistributionLoggingPopupEnabled { set; } + string DistributionUrl { set; } + string DistributionUrlTooltip { set; } + bool DistributionUrlEnabled { set; } + string DistributionOrigin { set; } + string DistributionCname { set; get; } + string DistributionCnameUrl { set; } + bool DistributionCnameUrlEnabled { set; } + string DistributionCnameUrlTooltip { set; } + bool DistributionCnameEnabled { set; } + bool DistributionAnimationActive { set; } + string DistributionDefaultRoot { set; get; } + bool DistributionDefaultRootEnabled { set; } + string DistributionInvalidationStatus { set; } + string DistributionInvalidateObjectsTooltip { set; } + bool DistributionInvalidateObjectsEnabled { set; } + bool DistributionAnalyticsCheckbox { set; get; } + bool DistributionAnalyticsCheckboxEnabled { set; } + string DistributionAnalyticsSetupUrl { set; } + bool DistributionAnalyticsSetupUrlEnabled { set; } + + string BucketLocation { set; } + bool Encryption { set; get; } + bool EncryptionEnabled { set; get; } + string StorageClass { set; get; } + bool StorageClassEnabled { set; } + string BucketLoggingPopup { set; get; } + bool BucketLoggingPopupEnabled { set; } + string S3PublicUrl { set; } + bool S3PublicUrlEnabled { set; } + string S3PublicUrlTooltip { set; } + string S3PublicUrlValidity { set; } + string S3TorrentUrl { set; } + bool S3TorrentUrlEnabled { set; } + string S3TorrentUrlTooltip { set; } + bool S3AnimationActive { set; } + bool BucketLoggingCheckbox { set; get; } + bool BucketLoggingCheckboxEnabled { set; } + string BucketLoggingTooltip { set; } + bool BucketAnalyticsCheckbox { set; get; } + bool BucketAnalyticsCheckboxEnabled { set; } + string BucketAnalyticsSetupUrl { set; } + bool BucketAnalyticsSetupUrlEnabled { set; } + bool BucketVersioning { get; set; } + bool BucketVersioningEnabled { set; } + bool BucketMfa { set; get; } + bool BucketMfaEnabled { set; } + bool LifecycleTransitionCheckbox { set; get; } + bool LifecycleTransitionCheckboxEnabled { set; } + bool LifecycleDeleteCheckbox { set; get; } + bool LifecycleDeleteCheckboxEnabled { set; } + string LifecycleTransition { get; set; } + bool LifecycleTransitionPopupEnabled { set; } + string LifecycleDelete { get; set; } + bool LifecycleDeletePopupEnabled { set; } + + event VoidHandler FilenameChanged; + event VoidHandler CalculateSize; + event VoidHandler OwnerReadChanged; + event VoidHandler OwnerWriteChanged; + event VoidHandler OwnerExecuteChanged; + event VoidHandler GroupReadChanged; + event VoidHandler GroupWriteChanged; + event VoidHandler GroupExecuteChanged; + event VoidHandler OtherReadChanged; + event VoidHandler OtherWriteChanged; + event VoidHandler OtherExecuteChanged; + event VoidHandler ApplyRecursivePermissions; + event VoidHandler OctalPermissionsChanged; + + event EventHandler ShowHelp; + void PopulateAclUsers(IDictionary users); + void PopulateAclRoles(IList roles); + void PopulateMetadata(IDictionary metadata); + void EditAclRow(InfoController.UserAndRoleEntry aclEntry, bool selectRole); + void EditMetadataRow(InfoController.CustomHeaderEntry headerEntry, bool selectValue); + void PopulateDistributionDeliveryMethod(IList> methods); + void PopulateDefaultRoot(IList> roots); + void PopulateBucketLogging(IList buckets); + void PopulateDistributionLogging(IList buckets); + void PopulateLifecycleTransitionPeriod(IList> periods); + void PopulateLifecycleDeletePeriod(IList> periods); + + event VoidHandler DistributionDeliveryMethodChanged; + event VoidHandler DistributionEnabledChanged; + event VoidHandler DistributionLoggingCheckboxChanged; + event VoidHandler DistributionLoggingPopupChanged; + event VoidHandler DistributionAnalyticsCheckboxChanged; + event VoidHandler DistributionCnameChanged; + event VoidHandler DistributionDefaultRootChanged; + event VoidHandler DistributionInvalidateObjects; + + void PopulateStorageClass(IList> classes); + + event VoidHandler BucketLoggingCheckboxChanged; + event VoidHandler BucketAnalyticsCheckboxChanged; + event VoidHandler BucketLoggingPopupChanged; + event VoidHandler EncryptionChanged; + event VoidHandler StorageClassChanged; + event VoidHandler BucketVersioningChanged; + event VoidHandler BucketMfaChanged; + event VoidHandler LifecycleTransitionCheckboxChanged; + event VoidHandler LifecycleTransitionPopupChanged; + event VoidHandler LifecycleDeleteCheckboxChanged; + event VoidHandler LifecycleDeletePopupChanged; + + event VoidHandler ActiveTabChanged; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/ILoginView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/ILoginView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/ILoginView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/ILoginView.cs index a2ad8c8e80..424a2c6953 100644 --- a/source/ch/cyberduck/ui/controller/ILoginView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/ILoginView.cs @@ -1,59 +1,59 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@langisch.ch -// -using System; -using System.Drawing; - -namespace Ch.Cyberduck.Ui.Controller -{ - public interface ILoginView : IView - { - // Properties - string Title { set; } - string Message { set; } - string Username { get; set; } - string Password { get; set; } - Image DiskIcon { set; } - - bool SavePasswordState { get; set; } - bool SavePasswordEnabled { set; } - bool UsernameEnabled { set; } - bool PasswordEnabled { set; } - bool AnonymousState { get; set; } - bool AnonymousEnabled { set; } - bool PkCheckboxState { get; set; } - bool PkCheckboxEnabled { set; } - string PkLabel { get; set; } - - string PasswordLabel { set; } - string UsernameLabel { set; } - - void ShowPrivateKeyBrowser(string path); - - #region Events - - event VoidHandler ChangedUsernameEvent; - event VoidHandler ChangedPasswordEvent; - event VoidHandler ChangedSavePasswordCheckboxEvent; - event VoidHandler ChangedAnonymousCheckboxEvent; - event VoidHandler ChangedPkCheckboxEvent; - event EventHandler ChangedPrivateKey; - event ValidateInputHandler ValidateInput; - - #endregion - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@langisch.ch +// +using System; +using System.Drawing; + +namespace Ch.Cyberduck.Ui.Controller +{ + public interface ILoginView : IView + { + // Properties + string Title { set; } + string Message { set; } + string Username { get; set; } + string Password { get; set; } + Image DiskIcon { set; } + + bool SavePasswordState { get; set; } + bool SavePasswordEnabled { set; } + bool UsernameEnabled { set; } + bool PasswordEnabled { set; } + bool AnonymousState { get; set; } + bool AnonymousEnabled { set; } + bool PkCheckboxState { get; set; } + bool PkCheckboxEnabled { set; } + string PkLabel { get; set; } + + string PasswordLabel { set; } + string UsernameLabel { set; } + + void ShowPrivateKeyBrowser(string path); + + #region Events + + event VoidHandler ChangedUsernameEvent; + event VoidHandler ChangedPasswordEvent; + event VoidHandler ChangedSavePasswordCheckboxEvent; + event VoidHandler ChangedAnonymousCheckboxEvent; + event VoidHandler ChangedPkCheckboxEvent; + event EventHandler ChangedPrivateKey; + event ValidateInputHandler ValidateInput; + + #endregion + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/INewFolderPromptView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/INewFolderPromptView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/INewFolderPromptView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/INewFolderPromptView.cs index bddc81546f..d308bbd4b6 100644 --- a/source/ch/cyberduck/ui/controller/INewFolderPromptView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/INewFolderPromptView.cs @@ -1,30 +1,30 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Collections.Generic; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal interface INewFolderPromptView : IPromptView - { - bool RegionsEnabled { set; } - string Region { set; get; } - - void PopulateRegions(IList> regions); - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Collections.Generic; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal interface INewFolderPromptView : IPromptView + { + bool RegionsEnabled { set; } + string Region { set; get; } + + void PopulateRegions(IList> regions); + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/IPreferencesView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/IPreferencesView.cs similarity index 98% rename from source/ch/cyberduck/ui/controller/IPreferencesView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/IPreferencesView.cs index a305f73039..9b804a4089 100644 --- a/source/ch/cyberduck/ui/controller/IPreferencesView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/IPreferencesView.cs @@ -1,214 +1,214 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Collections.Generic; -using ch.cyberduck.core; -using ch.cyberduck.core.local; -using Ch.Cyberduck.Ui.Winforms.Controls; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal interface IPreferencesView : IView - { - bool SaveWorkspace { set; get; } - bool NewBrowserOnStartup { set; get; } - Host DefaultBookmark { set; get; } - bool UseKeychain { set; get; } - bool ConfirmDisconnect { set; get; } - Protocol DefaultProtocol { set; get; } - Application DefaultEditor { set; get; } - bool AlwaysUseDefaultEditor { set; get; } - bool ShowHiddenFiles { set; get; } - bool DoubleClickEditor { set; get; } - bool ReturnKeyRenames { set; get; } - bool InfoWindowShowsCurrentSelection { set; get; } - int BookmarkSize { set; get; } - bool AlternatingRowBackground { set; get; } - bool HorizontalLines { set; get; } - bool VerticalLines { set; get; } - string DefaultEncoding { set; get; } - Host.TransferType TransferMode { set; get; } - bool TransfersToFront { set; get; } - bool TransfersToBack { set; get; } - bool RemoveFromTransfers { set; get; } - bool OpenAfterDownload { set; get; } - string DownloadFolder { set; get; } - string DuplicateDownloadAction { set; get; } - string DuplicateUploadAction { set; get; } - bool DuplicateDownloadOverwrite { set; get; } - bool DuplicateUploadOverwrite { set; get; } - bool UploadWithTemporaryFilename { set; get; } - bool ChmodDownload { set; get; } - bool ChmodDownloadUseDefault { set; get; } - string ChmodDownloadType { set; get; } - bool DownloadOwnerRead { set; get; } - bool DownloadOwnerWrite { set; get; } - bool DownloadOwnerExecute { set; get; } - bool DownloadGroupRead { set; get; } - bool DownloadGroupWrite { set; get; } - bool DownloadGroupExecute { set; get; } - bool DownloadOtherRead { set; get; } - bool DownloadOtherWrite { set; get; } - bool DownloadOtherExecute { set; get; } - bool ChmodDownloadEnabled { set; } - bool ChmodDownloadDefaultEnabled { set; } - bool ChmodUpload { set; get; } - bool ChmodUploadUseDefault { set; get; } - string ChmodUploadType { set; get; } - bool UploadOwnerRead { set; get; } - bool UploadOwnerWrite { set; get; } - bool UploadOwnerExecute { set; get; } - bool UploadGroupRead { set; get; } - bool UploadGroupWrite { set; get; } - bool UploadGroupExecute { set; get; } - bool UploadOtherRead { set; get; } - bool UploadOtherWrite { set; get; } - bool UploadOtherExecute { set; get; } - bool ChmodUploadEnabled { set; } - bool ChmodUploadDefaultEnabled { set; } - bool PreserveModificationDownload { set; get; } - bool PreserveModificationUpload { set; get; } - bool DownloadSkip { set; get; } - string DownloadSkipRegex { set; get; } - bool DownloadSkipRegexEnabled { set; } - bool UploadSkip { set; get; } - string UploadSkipRegex { set; get; } - bool UploadSkipRegexEnabled { set; } - string DefaultBucketLocation { set; get; } - string DefaultStorageClass { set; get; } - string DefaultEncryption { set; get; } - float DefaultDownloadThrottle { set; get; } - float DefaultUploadThrottle { set; get; } - int ConnectionTimeout { set; get; } - int RetryDelay { set; get; } - int Retries { set; get; } - string DocumentExportFormat { set; get; } - string PresentationExportFormat { set; get; } - string SpreadsheetExportFormat { set; get; } - bool ConvertUploads { set; get; } - bool OcrUploads { set; get; } - string CurrentLocale { set; get; } - bool AutomaticUpdateCheck { set; get; } - string LastUpdateCheck { set; } - string UpdateFeed { set; get; } - bool UseSystemProxy { set; get; } - void PopulateBookmarkSize(IList> sizes); - void MarkDownloadSkipRegex(int position); - void MarkUploadSkipRegex(int position); - void PopulateDocumentExportFormats(IList> formats); - void PopulatePresentationExportFormats(IList> formats); - void PopulateSpreadsheetExportFormats(IList> formats); - event VoidHandler DocumentExportFormatChanged; - event VoidHandler PresentationExportFormatChanged; - event VoidHandler SpreadsheetExportFormatChanged; - event VoidHandler ConvertUploadsChanged; - event VoidHandler OcrUploadsChanged; - void PopulateLocales(IList> locales); - event VoidHandler LocaleChanged; - event VoidHandler AutomaticUpdateChangedEvent; - event VoidHandler CheckForUpdateEvent; - event VoidHandler UpdateFeedChangedEvent; - event VoidHandler BookmarkSizeChangedEvent; - event VoidHandler UseSystemProxyChangedEvent; - event VoidHandler ChangeSystemProxyEvent; - event VoidHandler SaveWorkspaceChangedEvent; - event VoidHandler NewBrowserOnStartupChangedEvent; - event VoidHandler DefaultBookmarkChangedEvent; - event VoidHandler UseKeychainChangedEvent; - event VoidHandler ConfirmDisconnectChangedEvent; - event VoidHandler DefaultProtocolChangedEvent; - event VoidHandler ShowHiddenFilesChangedEvent; - event VoidHandler DoubleClickEditorChangedEvent; - event VoidHandler ReturnKeyRenamesChangedEvent; - event VoidHandler InfoWindowShowsCurrentSelectionChangedEvent; - event VoidHandler AlternatingRowBackgroundChangedEvent; - event VoidHandler HorizontalLinesChangedEvent; - event VoidHandler VerticalLinesChangedEvent; - event VoidHandler DefaultEncodingChangedEvent; - event VoidHandler TransferModeChangedEvent; - event VoidHandler TransfersToFrontChangedEvent; - event VoidHandler TransfersToBackChangedEvent; - event VoidHandler RemoveFromTransfersChangedEvent; - event VoidHandler OpenAfterDownloadChangedEvent; - event VoidHandler DownloadFolderChangedEvent; - event VoidHandler DuplicateDownloadActionChangedEvent; - event VoidHandler DuplicateUploadActionChangedEvent; - event VoidHandler DuplicateDownloadOverwriteChangedEvent; - event VoidHandler DuplicateUploadOverwriteChangedEvent; - event VoidHandler UploadWithTemporaryFilenameChangedEvent; - event VoidHandler DefaultEditorChangedEvent; - event VoidHandler RepopulateEditorsEvent; - event VoidHandler AlwaysUseDefaultEditorChangedEvent; - event VoidHandler ChmodDownloadChangedEvent; - event VoidHandler ChmodDownloadUseDefaultChangedEvent; - event VoidHandler ChmodDownloadTypeChangedEvent; - event VoidHandler DownloadOwnerReadChangedEvent; - event VoidHandler DownloadOwnerWriteChangedEvent; - event VoidHandler DownloadOwnerExecuteChangedEvent; - event VoidHandler DownloadGroupReadChangedEvent; - event VoidHandler DownloadGroupWriteChangedEvent; - event VoidHandler DownloadGroupExecuteChangedEvent; - event VoidHandler DownloadOtherReadChangedEvent; - event VoidHandler DownloadOtherWriteChangedEvent; - event VoidHandler DownloadOtherExecuteChangedEvent; - event VoidHandler ChmodUploadChangedEvent; - event VoidHandler ChmodUploadUseDefaultChangedEvent; - event VoidHandler ChmodUploadTypeChangedEvent; - event VoidHandler UploadOwnerReadChangedEvent; - event VoidHandler UploadOwnerWriteChangedEvent; - event VoidHandler UploadOwnerExecuteChangedEvent; - event VoidHandler UploadGroupReadChangedEvent; - event VoidHandler UploadGroupWriteChangedEvent; - event VoidHandler UploadGroupExecuteChangedEvent; - event VoidHandler UploadOtherReadChangedEvent; - event VoidHandler UploadOtherWriteChangedEvent; - event VoidHandler UploadOtherExecuteChangedEvent; - event VoidHandler PreserveModificationDownloadChangedEvent; - event VoidHandler PreserveModificationUploadChangedEvent; - event VoidHandler DownloadSkipChangedEvent; - event VoidHandler DownloadSkipRegexChangedEvent; - event VoidHandler DownloadSkipRegexDefaultEvent; - event VoidHandler UploadSkipChangedEvent; - event VoidHandler UploadSkipRegexChangedEvent; - event VoidHandler UploadSkipRegexDefaultEvent; - event VoidHandler DefaultBucketLocationChangedEvent; - event VoidHandler DefaultStorageClassChangedEvent; - event VoidHandler DefaultEncryptionChangedEvent; - event VoidHandler DefaultDownloadThrottleChangedEvent; - event VoidHandler DefaultUploadThrottleChangedEvent; - event VoidHandler ConnectionTimeoutChangedEvent; - event VoidHandler RetryDelayChangedEvent; - event VoidHandler RetriesChangedEvent; - //todo introduce Enums to handle the objects directly instead of using strings - void PopulateBookmarks(List> bookmarks); - void PopulateEditors(List> editors); - void PopulateProtocols(List> protocols); - void PopulateEncodings(List encodings); - void PopulateTransferModes(List> modes); - void PopulateDuplicateDownloadActions(List actions); - void PopulateDuplicateUploadActions(List actions); - void PopulateChmodDownloadTypes(List types); - void PopulateChmodUploadTypes(List types); - void PopulateDefaultBucketLocations(IList> locations); - void PopulateDefaultStorageClasses(IList> classes); - void PopulateDefaultEncryption(IList> algorithms); - void PopulateDefaultDownloadThrottleList(IList> throttles); - void PopulateDefaultUploadThrottleList(IList> throttles); - void PopulateUpdateFeeds(IList> feeds); - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Collections.Generic; +using ch.cyberduck.core; +using ch.cyberduck.core.local; +using Ch.Cyberduck.Ui.Winforms.Controls; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal interface IPreferencesView : IView + { + bool SaveWorkspace { set; get; } + bool NewBrowserOnStartup { set; get; } + Host DefaultBookmark { set; get; } + bool UseKeychain { set; get; } + bool ConfirmDisconnect { set; get; } + Protocol DefaultProtocol { set; get; } + Application DefaultEditor { set; get; } + bool AlwaysUseDefaultEditor { set; get; } + bool ShowHiddenFiles { set; get; } + bool DoubleClickEditor { set; get; } + bool ReturnKeyRenames { set; get; } + bool InfoWindowShowsCurrentSelection { set; get; } + int BookmarkSize { set; get; } + bool AlternatingRowBackground { set; get; } + bool HorizontalLines { set; get; } + bool VerticalLines { set; get; } + string DefaultEncoding { set; get; } + Host.TransferType TransferMode { set; get; } + bool TransfersToFront { set; get; } + bool TransfersToBack { set; get; } + bool RemoveFromTransfers { set; get; } + bool OpenAfterDownload { set; get; } + string DownloadFolder { set; get; } + string DuplicateDownloadAction { set; get; } + string DuplicateUploadAction { set; get; } + bool DuplicateDownloadOverwrite { set; get; } + bool DuplicateUploadOverwrite { set; get; } + bool UploadWithTemporaryFilename { set; get; } + bool ChmodDownload { set; get; } + bool ChmodDownloadUseDefault { set; get; } + string ChmodDownloadType { set; get; } + bool DownloadOwnerRead { set; get; } + bool DownloadOwnerWrite { set; get; } + bool DownloadOwnerExecute { set; get; } + bool DownloadGroupRead { set; get; } + bool DownloadGroupWrite { set; get; } + bool DownloadGroupExecute { set; get; } + bool DownloadOtherRead { set; get; } + bool DownloadOtherWrite { set; get; } + bool DownloadOtherExecute { set; get; } + bool ChmodDownloadEnabled { set; } + bool ChmodDownloadDefaultEnabled { set; } + bool ChmodUpload { set; get; } + bool ChmodUploadUseDefault { set; get; } + string ChmodUploadType { set; get; } + bool UploadOwnerRead { set; get; } + bool UploadOwnerWrite { set; get; } + bool UploadOwnerExecute { set; get; } + bool UploadGroupRead { set; get; } + bool UploadGroupWrite { set; get; } + bool UploadGroupExecute { set; get; } + bool UploadOtherRead { set; get; } + bool UploadOtherWrite { set; get; } + bool UploadOtherExecute { set; get; } + bool ChmodUploadEnabled { set; } + bool ChmodUploadDefaultEnabled { set; } + bool PreserveModificationDownload { set; get; } + bool PreserveModificationUpload { set; get; } + bool DownloadSkip { set; get; } + string DownloadSkipRegex { set; get; } + bool DownloadSkipRegexEnabled { set; } + bool UploadSkip { set; get; } + string UploadSkipRegex { set; get; } + bool UploadSkipRegexEnabled { set; } + string DefaultBucketLocation { set; get; } + string DefaultStorageClass { set; get; } + string DefaultEncryption { set; get; } + float DefaultDownloadThrottle { set; get; } + float DefaultUploadThrottle { set; get; } + int ConnectionTimeout { set; get; } + int RetryDelay { set; get; } + int Retries { set; get; } + string DocumentExportFormat { set; get; } + string PresentationExportFormat { set; get; } + string SpreadsheetExportFormat { set; get; } + bool ConvertUploads { set; get; } + bool OcrUploads { set; get; } + string CurrentLocale { set; get; } + bool AutomaticUpdateCheck { set; get; } + string LastUpdateCheck { set; } + string UpdateFeed { set; get; } + bool UseSystemProxy { set; get; } + void PopulateBookmarkSize(IList> sizes); + void MarkDownloadSkipRegex(int position); + void MarkUploadSkipRegex(int position); + void PopulateDocumentExportFormats(IList> formats); + void PopulatePresentationExportFormats(IList> formats); + void PopulateSpreadsheetExportFormats(IList> formats); + event VoidHandler DocumentExportFormatChanged; + event VoidHandler PresentationExportFormatChanged; + event VoidHandler SpreadsheetExportFormatChanged; + event VoidHandler ConvertUploadsChanged; + event VoidHandler OcrUploadsChanged; + void PopulateLocales(IList> locales); + event VoidHandler LocaleChanged; + event VoidHandler AutomaticUpdateChangedEvent; + event VoidHandler CheckForUpdateEvent; + event VoidHandler UpdateFeedChangedEvent; + event VoidHandler BookmarkSizeChangedEvent; + event VoidHandler UseSystemProxyChangedEvent; + event VoidHandler ChangeSystemProxyEvent; + event VoidHandler SaveWorkspaceChangedEvent; + event VoidHandler NewBrowserOnStartupChangedEvent; + event VoidHandler DefaultBookmarkChangedEvent; + event VoidHandler UseKeychainChangedEvent; + event VoidHandler ConfirmDisconnectChangedEvent; + event VoidHandler DefaultProtocolChangedEvent; + event VoidHandler ShowHiddenFilesChangedEvent; + event VoidHandler DoubleClickEditorChangedEvent; + event VoidHandler ReturnKeyRenamesChangedEvent; + event VoidHandler InfoWindowShowsCurrentSelectionChangedEvent; + event VoidHandler AlternatingRowBackgroundChangedEvent; + event VoidHandler HorizontalLinesChangedEvent; + event VoidHandler VerticalLinesChangedEvent; + event VoidHandler DefaultEncodingChangedEvent; + event VoidHandler TransferModeChangedEvent; + event VoidHandler TransfersToFrontChangedEvent; + event VoidHandler TransfersToBackChangedEvent; + event VoidHandler RemoveFromTransfersChangedEvent; + event VoidHandler OpenAfterDownloadChangedEvent; + event VoidHandler DownloadFolderChangedEvent; + event VoidHandler DuplicateDownloadActionChangedEvent; + event VoidHandler DuplicateUploadActionChangedEvent; + event VoidHandler DuplicateDownloadOverwriteChangedEvent; + event VoidHandler DuplicateUploadOverwriteChangedEvent; + event VoidHandler UploadWithTemporaryFilenameChangedEvent; + event VoidHandler DefaultEditorChangedEvent; + event VoidHandler RepopulateEditorsEvent; + event VoidHandler AlwaysUseDefaultEditorChangedEvent; + event VoidHandler ChmodDownloadChangedEvent; + event VoidHandler ChmodDownloadUseDefaultChangedEvent; + event VoidHandler ChmodDownloadTypeChangedEvent; + event VoidHandler DownloadOwnerReadChangedEvent; + event VoidHandler DownloadOwnerWriteChangedEvent; + event VoidHandler DownloadOwnerExecuteChangedEvent; + event VoidHandler DownloadGroupReadChangedEvent; + event VoidHandler DownloadGroupWriteChangedEvent; + event VoidHandler DownloadGroupExecuteChangedEvent; + event VoidHandler DownloadOtherReadChangedEvent; + event VoidHandler DownloadOtherWriteChangedEvent; + event VoidHandler DownloadOtherExecuteChangedEvent; + event VoidHandler ChmodUploadChangedEvent; + event VoidHandler ChmodUploadUseDefaultChangedEvent; + event VoidHandler ChmodUploadTypeChangedEvent; + event VoidHandler UploadOwnerReadChangedEvent; + event VoidHandler UploadOwnerWriteChangedEvent; + event VoidHandler UploadOwnerExecuteChangedEvent; + event VoidHandler UploadGroupReadChangedEvent; + event VoidHandler UploadGroupWriteChangedEvent; + event VoidHandler UploadGroupExecuteChangedEvent; + event VoidHandler UploadOtherReadChangedEvent; + event VoidHandler UploadOtherWriteChangedEvent; + event VoidHandler UploadOtherExecuteChangedEvent; + event VoidHandler PreserveModificationDownloadChangedEvent; + event VoidHandler PreserveModificationUploadChangedEvent; + event VoidHandler DownloadSkipChangedEvent; + event VoidHandler DownloadSkipRegexChangedEvent; + event VoidHandler DownloadSkipRegexDefaultEvent; + event VoidHandler UploadSkipChangedEvent; + event VoidHandler UploadSkipRegexChangedEvent; + event VoidHandler UploadSkipRegexDefaultEvent; + event VoidHandler DefaultBucketLocationChangedEvent; + event VoidHandler DefaultStorageClassChangedEvent; + event VoidHandler DefaultEncryptionChangedEvent; + event VoidHandler DefaultDownloadThrottleChangedEvent; + event VoidHandler DefaultUploadThrottleChangedEvent; + event VoidHandler ConnectionTimeoutChangedEvent; + event VoidHandler RetryDelayChangedEvent; + event VoidHandler RetriesChangedEvent; + //todo introduce Enums to handle the objects directly instead of using strings + void PopulateBookmarks(List> bookmarks); + void PopulateEditors(List> editors); + void PopulateProtocols(List> protocols); + void PopulateEncodings(List encodings); + void PopulateTransferModes(List> modes); + void PopulateDuplicateDownloadActions(List actions); + void PopulateDuplicateUploadActions(List actions); + void PopulateChmodDownloadTypes(List types); + void PopulateChmodUploadTypes(List types); + void PopulateDefaultBucketLocations(IList> locations); + void PopulateDefaultStorageClasses(IList> classes); + void PopulateDefaultEncryption(IList> algorithms); + void PopulateDefaultDownloadThrottleList(IList> throttles); + void PopulateDefaultUploadThrottleList(IList> throttles); + void PopulateUpdateFeeds(IList> feeds); + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/IProgressView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/IProgressView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/IProgressView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/IProgressView.cs index 91bba1a7fa..394e252da3 100644 --- a/source/ch/cyberduck/ui/controller/IProgressView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/IProgressView.cs @@ -1,40 +1,40 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Collections.Generic; -using Ch.Cyberduck.Ui.Winforms.Controls; - -namespace Ch.Cyberduck.Ui.Controller -{ - // we do not inherit from IView as we have user controls - // implementing this interface - public interface IProgressView : IView - { - bool Selected { get; set; } - - string StatusText { set; } - string ProgressText { set; } - string MessageText { set; } - TransferStatus TransferStatus { set; } - TransferDirection TransferDirection { set; } - int ProgressMaximum { set; } - int ProgressValue { set; } - bool ProgressIndeterminate { set; } - void PopulateRoots(IList roots); - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Collections.Generic; +using Ch.Cyberduck.Ui.Winforms.Controls; + +namespace Ch.Cyberduck.Ui.Controller +{ + // we do not inherit from IView as we have user controls + // implementing this interface + public interface IProgressView : IView + { + bool Selected { get; set; } + + string StatusText { set; } + string ProgressText { set; } + string MessageText { set; } + TransferStatus TransferStatus { set; } + TransferDirection TransferDirection { set; } + int ProgressMaximum { set; } + int ProgressValue { set; } + bool ProgressIndeterminate { set; } + void PopulateRoots(IList roots); + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/IPromptView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/IPromptView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/IPromptView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/IPromptView.cs index d33416a36a..024ef6df99 100644 --- a/source/ch/cyberduck/ui/controller/IPromptView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/IPromptView.cs @@ -1,31 +1,31 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System.Drawing; - -namespace Ch.Cyberduck.Ui.Controller -{ - public delegate bool ValidateInputHandler(); - - internal interface IPromptView : IView - { - string InputText { set; get; } - Bitmap IconView { set; } - - event ValidateInputHandler ValidateInput; - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System.Drawing; + +namespace Ch.Cyberduck.Ui.Controller +{ + public delegate bool ValidateInputHandler(); + + internal interface IPromptView : IView + { + string InputText { set; get; } + Bitmap IconView { set; } + + event ValidateInputHandler ValidateInput; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/ITransferPromptView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/ITransferPromptView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/ITransferPromptView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/ITransferPromptView.cs index 6bada49b0d..e2fa9a25eb 100644 --- a/source/ch/cyberduck/ui/controller/ITransferPromptView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/ITransferPromptView.cs @@ -1,70 +1,70 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Collections.Generic; -using BrightIdeasSoftware; -using Ch.Cyberduck.Ui.Winforms.Controls; -using ch.cyberduck.core.transfer; - -namespace Ch.Cyberduck.Ui.Controller -{ - public interface ITransferPromptView : IView - { - string Title { set; } - TransferAction SelectedAction { get; set; } - TransferItem SelectedItem { get; set; } - string LocalFileUrl { set; } - string LocalFileSize { set; } - string LocalFileModificationDate { set; } - string RemoteFileUrl { set; } - string RemoteFileSize { set; } - string RemoteFileModificationDate { set; } - bool DetailsVisible { set; get; } - int NumberOfFiles { get; } - - CheckStateGetterDelegate ModelCheckStateGetter { set; } - CheckStatePutterDelegate ModelCheckStateSetter { set; } - - TreeListView.CanExpandGetterDelegate ModelCanExpandDelegate { set; } - TreeListView.ChildrenGetterDelegate ModelChildrenGetterDelegate { set; } - - TypedColumn.TypedImageGetterDelegate ModelIconGetter { set; } - TypedColumn.TypedAspectGetterDelegate ModelFilenameGetter { set; } - TypedColumn.TypedAspectGetterDelegate ModelSizeGetter { set; } - AspectToStringConverterDelegate ModelSizeAsStringGetter { set; } - TypedColumn.TypedImageGetterDelegate ModelWarningGetter { set; } - TypedColumn.TypedImageGetterDelegate ModelCreateGetter { set; } - TypedColumn.TypedImageGetterDelegate ModelSyncGetter { set; } - MulticolorTreeListView.ActiveGetterTransferItemDelegate ModelActiveGetter { set; } - string StatusLabel { set; } - IList VisibleItems { get; } - void SetModel(IEnumerable model); - void RefreshBrowserObject(TransferItem item); - void PopulateActions(IDictionary actions); - - event VoidHandler ChangedActionEvent; - event VoidHandler ChangedSelectionEvent; - event VoidHandler ToggleDetailsEvent; - - void StartActivityAnimation(); - void StopActivityAnimation(); - - // mainly used to detect a change of displayed items to update the status label - event VoidHandler ItemsChanged; - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Collections.Generic; +using BrightIdeasSoftware; +using Ch.Cyberduck.Ui.Winforms.Controls; +using ch.cyberduck.core.transfer; + +namespace Ch.Cyberduck.Ui.Controller +{ + public interface ITransferPromptView : IView + { + string Title { set; } + TransferAction SelectedAction { get; set; } + TransferItem SelectedItem { get; set; } + string LocalFileUrl { set; } + string LocalFileSize { set; } + string LocalFileModificationDate { set; } + string RemoteFileUrl { set; } + string RemoteFileSize { set; } + string RemoteFileModificationDate { set; } + bool DetailsVisible { set; get; } + int NumberOfFiles { get; } + + CheckStateGetterDelegate ModelCheckStateGetter { set; } + CheckStatePutterDelegate ModelCheckStateSetter { set; } + + TreeListView.CanExpandGetterDelegate ModelCanExpandDelegate { set; } + TreeListView.ChildrenGetterDelegate ModelChildrenGetterDelegate { set; } + + TypedColumn.TypedImageGetterDelegate ModelIconGetter { set; } + TypedColumn.TypedAspectGetterDelegate ModelFilenameGetter { set; } + TypedColumn.TypedAspectGetterDelegate ModelSizeGetter { set; } + AspectToStringConverterDelegate ModelSizeAsStringGetter { set; } + TypedColumn.TypedImageGetterDelegate ModelWarningGetter { set; } + TypedColumn.TypedImageGetterDelegate ModelCreateGetter { set; } + TypedColumn.TypedImageGetterDelegate ModelSyncGetter { set; } + MulticolorTreeListView.ActiveGetterTransferItemDelegate ModelActiveGetter { set; } + string StatusLabel { set; } + IList VisibleItems { get; } + void SetModel(IEnumerable model); + void RefreshBrowserObject(TransferItem item); + void PopulateActions(IDictionary actions); + + event VoidHandler ChangedActionEvent; + event VoidHandler ChangedSelectionEvent; + event VoidHandler ToggleDetailsEvent; + + void StartActivityAnimation(); + void StopActivityAnimation(); + + // mainly used to detect a change of displayed items to update the status label + event VoidHandler ItemsChanged; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/ITransferView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/ITransferView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/ITransferView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/ITransferView.cs index 8e9fcaa278..465a842aec 100644 --- a/source/ch/cyberduck/ui/controller/ITransferView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/ITransferView.cs @@ -1,64 +1,64 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Collections.Generic; -using System.Drawing; -using Ch.Cyberduck.Ui.Core; - -namespace Ch.Cyberduck.Ui.Controller -{ - public interface ITransferView : IView - { - string Url { set; } - string Local { set; } - Image FileIcon { set; } - float Bandwidth { set; get; } - bool BandwidthEnabled { set; } - int QueueSize { set; get; } - bool TranscriptVisible { get; set; } - int TranscriptHeight { get; set; } - IList SelectedTransfers { get; } - void SelectTransfer(IProgressView view); - void AddTransfer(IProgressView view); - void RemoveTransfer(IProgressView view); - void AddTranscriptEntry(bool request, string entry); - event VoidHandler ResumeEvent; - event ValidateCommand ValidateResumeEvent; - event VoidHandler ReloadEvent; - event ValidateCommand ValidateReloadEvent; - event VoidHandler StopEvent; - event ValidateCommand ValidateStopEvent; - event VoidHandler RemoveEvent; - event ValidateCommand ValidateRemoveEvent; - event VoidHandler CleanEvent; - event ValidateCommand ValidateCleanEvent; - event VoidHandler OpenEvent; - event ValidateCommand ValidateOpenEvent; - event VoidHandler ShowEvent; - event ValidateCommand ValidateShowEvent; - event VoidHandler ToggleTranscriptEvent; - event VoidHandler TrashEvent; - event VoidHandler TranscriptHeightChangedEvent; - event VoidHandler SelectionChangedEvent; - event VoidHandler BandwidthChangedEvent; - event VoidHandler QueueSizeChangedEvent; - void PopulateBandwidthList(IList> throttles); - void TaskbarOverlayIcon(Icon icon, string text); - void UpdateOverallProgressState(long progress, long maximum); - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Collections.Generic; +using System.Drawing; +using Ch.Cyberduck.Ui.Core; + +namespace Ch.Cyberduck.Ui.Controller +{ + public interface ITransferView : IView + { + string Url { set; } + string Local { set; } + Image FileIcon { set; } + float Bandwidth { set; get; } + bool BandwidthEnabled { set; } + int QueueSize { set; get; } + bool TranscriptVisible { get; set; } + int TranscriptHeight { get; set; } + IList SelectedTransfers { get; } + void SelectTransfer(IProgressView view); + void AddTransfer(IProgressView view); + void RemoveTransfer(IProgressView view); + void AddTranscriptEntry(bool request, string entry); + event VoidHandler ResumeEvent; + event ValidateCommand ValidateResumeEvent; + event VoidHandler ReloadEvent; + event ValidateCommand ValidateReloadEvent; + event VoidHandler StopEvent; + event ValidateCommand ValidateStopEvent; + event VoidHandler RemoveEvent; + event ValidateCommand ValidateRemoveEvent; + event VoidHandler CleanEvent; + event ValidateCommand ValidateCleanEvent; + event VoidHandler OpenEvent; + event ValidateCommand ValidateOpenEvent; + event VoidHandler ShowEvent; + event ValidateCommand ValidateShowEvent; + event VoidHandler ToggleTranscriptEvent; + event VoidHandler TrashEvent; + event VoidHandler TranscriptHeightChangedEvent; + event VoidHandler SelectionChangedEvent; + event VoidHandler BandwidthChangedEvent; + event VoidHandler QueueSizeChangedEvent; + void PopulateBandwidthList(IList> throttles); + void TaskbarOverlayIcon(Icon icon, string text); + void UpdateOverallProgressState(long progress, long maximum); + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/IUpdateView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/IUpdateView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/IUpdateView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/IUpdateView.cs index b38f0e6840..c03ca8214f 100644 --- a/source/ch/cyberduck/ui/controller/IUpdateView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/IUpdateView.cs @@ -1,26 +1,26 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -namespace Ch.Cyberduck.Ui.Controller -{ - public interface IUpdateView : IView - { - bool AboutToInstallUpdate { get; } - void CheckForUpdates(bool background); - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +namespace Ch.Cyberduck.Ui.Controller +{ + public interface IUpdateView : IView + { + bool AboutToInstallUpdate { get; } + void CheckForUpdates(bool background); + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/IView.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/IView.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/IView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/IView.cs index 29c235b923..f35b83db17 100644 --- a/source/ch/cyberduck/ui/controller/IView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/IView.cs @@ -1,65 +1,65 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.ComponentModel; -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Winforms.Taskdialog; - -namespace Ch.Cyberduck.Ui.Controller -{ - public delegate void DialogResponseHandler(int option, bool verificationChecked); - - public interface IView : ISynchronizeInvoke - { - bool Visible { get; set; } - bool ReleaseWhenClose { set; } - bool IsHandleCreated { get; } - bool IsDisposed { get; } - bool Disposing { get; } - DialogResult ModalResult { get; } - void Close(); - void Dispose(); - void Show(); - void Show(IWin32Window owner); - void Show(IView owner); - void Activate(); - void BringToFront(); - - DialogResult ShowDialog(); - DialogResult ShowDialog(IWin32Window owner); - DialogResult ShowDialog(IView owner); - - DialogResult MessageBox(string title, string message, string content, string expandedInfo, string help, - string verificationText, DialogResponseHandler handler); - - DialogResult MessageBox(string title, string message, string content, TaskDialogButtons buttons, SysIcons icons); - - DialogResult CommandBox(string title, string mainInstruction, string content, string expandedInfo, string help, - string verificationText, string commandButtons, bool showCancelButton, SysIcons mainIcon, - SysIcons footerIcon, DialogResponseHandler handler); - - //todo evtl. extend form that implements these events - event VoidHandler PositionSizeRestoredEvent; - event VoidHandler ViewShownEvent; - event VoidHandler ViewClosedEvent; - event FormClosingEventHandler ViewClosingEvent; - event VoidHandler ViewDisposedEvent; - - void ValidateCommands(); - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.ComponentModel; +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Winforms.Taskdialog; + +namespace Ch.Cyberduck.Ui.Controller +{ + public delegate void DialogResponseHandler(int option, bool verificationChecked); + + public interface IView : ISynchronizeInvoke + { + bool Visible { get; set; } + bool ReleaseWhenClose { set; } + bool IsHandleCreated { get; } + bool IsDisposed { get; } + bool Disposing { get; } + DialogResult ModalResult { get; } + void Close(); + void Dispose(); + void Show(); + void Show(IWin32Window owner); + void Show(IView owner); + void Activate(); + void BringToFront(); + + DialogResult ShowDialog(); + DialogResult ShowDialog(IWin32Window owner); + DialogResult ShowDialog(IView owner); + + DialogResult MessageBox(string title, string message, string content, string expandedInfo, string help, + string verificationText, DialogResponseHandler handler); + + DialogResult MessageBox(string title, string message, string content, TaskDialogButtons buttons, SysIcons icons); + + DialogResult CommandBox(string title, string mainInstruction, string content, string expandedInfo, string help, + string verificationText, string commandButtons, bool showCancelButton, SysIcons mainIcon, + SysIcons footerIcon, DialogResponseHandler handler); + + //todo evtl. extend form that implements these events + event VoidHandler PositionSizeRestoredEvent; + event VoidHandler ViewShownEvent; + event VoidHandler ViewClosedEvent; + event FormClosingEventHandler ViewClosingEvent; + event VoidHandler ViewDisposedEvent; + + void ValidateCommands(); + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/IconCache.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/IconCache.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/IconCache.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/IconCache.cs index 6a8ab3faa4..62fe883c79 100644 --- a/source/ch/cyberduck/ui/controller/IconCache.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/IconCache.cs @@ -1,636 +1,636 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Drawing.Imaging; -using System.IO; -using System.Runtime.InteropServices; -using System.Windows.Forms; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Core.Collections; -using ch.cyberduck.core; -using ch.cyberduck.core.preferences; -using org.apache.commons.io; -using org.apache.log4j; -using Path = ch.cyberduck.core.Path; - -namespace Ch.Cyberduck.Ui.Controller -{ - /// - /// Provides static methods to read images for both folders and files. Does not provide any caching actually. - /// - public sealed class IconCache - { - /// - /// Options to specify the size of icons to return. - /// - public enum IconSize - { - /// - /// Specify large icon - 32 pixels by 32 pixels. - /// - Large = 0, - - /// - /// Specify small icon - 16 pixels by 16 pixels. - /// - Small = 1 - } - - private static readonly Logger Log = Logger.getLogger(typeof (IconCache).FullName); - - private static readonly IconCache instance = new IconCache(); - - private readonly TypedLRUCache _bitmapCache = - new TypedLRUCache(PreferencesFactory.get().getInteger("icon.cache.size")); - - /// - /// Cache limited to n entries - /// - private readonly TypedLRUCache _iconCache = - new TypedLRUCache(PreferencesFactory.get().getInteger("icon.cache.size")); - - private readonly Dictionary _protocolImages = new Dictionary(); - - /// - /// 16x16 protocol icons - /// - private ImageList _protocolIcons; - - public static IconCache Instance - { - get { return instance; } - } - - private Bitmap OverlayImages(Bitmap original, Bitmap overlay) - { - if (null == original) - return null; - Image cloned = (Image) original.Clone(); - using (Graphics gra = Graphics.FromImage(cloned)) - { - gra.DrawImage(overlay, new Point(0, 0)); - } - return (Bitmap) cloned; - } - - public Bitmap OverlayIcon(string file, string overlay, IconSize size) - { - return OverlayImages(IconForFilename(file, size), IconForName(overlay, size)); - } - - /// - /// Return a bitmap for a given path - /// - /// - /// - public Bitmap IconForPath(Path path, IconSize size) - { - if (path.isSymbolicLink()) - { - Bitmap overlay = IconForName("aliasbadge", size); - if (path.isDirectory()) - { - return IconForFolder(overlay, size); - } - Bitmap symlink = IconForFilename(path.getName(), size); - return OverlayImages(symlink, overlay); - } - if (path.isFile()) - { - if (String.IsNullOrEmpty(path.getExtension())) - { - if (path.attributes().getPermission().isExecutable()) - { - return IconForName("executable", size); - } - } - return IconForFilename(path.getName(), size); - } - if (path.isDirectory()) - { - if (!Permission.EMPTY.equals(path.attributes().getPermission())) - { - if (!path.attributes().getPermission().isExecutable()) - { - return IconForFolder(IconForName("privatefolderbadge", size), size); - } - if (!path.attributes().getPermission().isReadable()) - { - if (path.attributes().getPermission().isWritable()) - { - return IconForFolder(IconForName("dropfolderbadge", size), size); - } - } - if (!path.attributes().getPermission().isWritable()) - { - return IconForFolder(IconForName("readonlyfolderbadge", size), size); - } - } - return IconForFolder(size); - } - return ResizeImage(IconForName("notfound", size), size); - } - - private Bitmap ResizeImage(Image imgToResize, IconSize size) - { - return ResizeImage(imgToResize, size == IconSize.Small ? 16 : 32); - } - - public Bitmap IconForName(string name, IconSize size) - { - return IconForName(name, size == IconSize.Small ? 16 : 32); - } - - public Bitmap IconForName(string name) - { - return IconForName(name, 0); - } - - /// - /// Find a bitmap in the ResourcesBundle for a given name - /// - /// - /// - public Bitmap IconForName(string name, int size) - { - Bitmap image = _bitmapCache.Get(name, size); - if (null == image) - { - if (FilenameUtils.getPrefix(name) != string.Empty) - { - try - { - image = new Icon(name, size, size).ToBitmap(); - } - catch (ArgumentException) - { - //was not an icon, try as plain bitmap - image = (Bitmap) Image.FromFile(name); - if (size > 0) - { - image = ResizeImage(image, new Size(size, size)); - } - } - } - else - { - object obj = ResourcesBundle.ResourceManager.GetObject(FilenameUtils.getBaseName(name), - ResourcesBundle.Culture); - if (obj is Icon) - { - image = (new Icon(obj as Icon, size, size)).ToBitmap(); - } - else if (obj is Bitmap) - { - image = (Bitmap) obj; - } - } - if (image != null && image.RawFormat == ImageFormat.Tiff) - { - // handle multi-page tiffs - image = GetTiffImage(image, size); - } - else if (size > 0) - { - image = ResizeImage(image, new Size(size, size)); - } - _bitmapCache.Put(name, image, size); - } - return image; - } - - public Bitmap VolumeIcon(Protocol protocol, IconSize size) - { - return IconForName(protocol.disk(), size); - } - - /// - /// Get an overlayed folder icon - /// - /// - /// - public Bitmap IconForFolder(Bitmap overlay, IconSize size) - { - return OverlayImages(IconForFolder(size), overlay); - } - - /// - /// Return our standard folder image - /// - /// - public Bitmap IconForFolder(IconSize size) - { - int s = size == IconSize.Small ? 16 : 32; - Icon icon = _iconCache.Get("folder", s); - if (null == icon) - { - icon = GetFolderIcon(size, FolderType.Open); - _iconCache.Put("folder", icon, s); - } - if (null == icon) - { - return IconForName("notfound", s); - } - return icon.ToBitmap(); - } - - public Bitmap GetDefaultBrowserIcon() - { - Bitmap bitmap = _bitmapCache.Get("defaultbrowser", 32); - if (null != bitmap) return bitmap; - - string browser = Utils.GetSystemDefaultBrowser(); - try - { - if (null != browser) - { - Icon i = Icon.ExtractAssociatedIcon(browser); - if (null != i) - { - Bitmap res = i.ToBitmap(); - _bitmapCache.Put("defaultbrowser", res, 32); - return res; - } - } - } - catch - { - //return default icon - } - return IconForName("notfound", 32); - } - - public Bitmap ExtractIconFromExecutable(string exe, IconSize size) - { - int s = size == IconSize.Small ? 16 : 32; - - Bitmap bitmap = _bitmapCache.Get(exe, s); - if (null != bitmap) return bitmap; - - try - { - using (Icon icon = Icon.ExtractAssociatedIcon(exe)) - { - if (null != icon) - { - Bitmap res = icon.ToBitmap(); - if (size == IconSize.Small) - { - res = ResizeImage(res, s); - } - _bitmapCache.Put(exe, res, s); - return res; - } - } - } - catch - { - } - //return default icon - return IconForName("notfound", s); - } - - public Bitmap ExtractIconForFilename(string file) - { - try - { - using (Icon icon = Icon.ExtractAssociatedIcon(file)) - { - if (null != icon) - { - return icon.ToBitmap(); - } - } - } - catch (Exception) - { - } - return null; - } - - /// - /// Get the associated icon for a given file type (according to its extension) - /// - /// - /// - public Bitmap IconForFilename(string file, IconSize size) - { - Icon icon = GetFileIconFromExtension(file, size, false); - if (null == icon) - { - return IconForName("notfound", size); - } - Bitmap iconForFilename = icon.ToBitmap(); - return iconForFilename; - } - - /// - /// Returns an icon for a given file - indicated by the name parameter. - /// - /// Pathname for file. - /// Large or small - /// Whether to include the link icon - /// System.Drawing.Icon - private Icon GetFileIconFromExtension(string filename, IconSize size, bool linkOverlay) - { - return GetFileIconFromExtension(filename, false, size, linkOverlay); - } - - public ImageList GetProtocolImages(int size) - { - ImageList list; - if (!_protocolImages.TryGetValue(size, out list)) - { - list = new ImageList(); - list.ImageSize = new Size(size, size); - list.ColorDepth = ColorDepth.Depth32Bit; - foreach (Protocol p in ProtocolFactory.getEnabledProtocols().toArray(new Protocol[] {})) - { - list.Images.Add(p.getProvider(), IconForName(p.disk(), size)); - } - _protocolImages.Add(size, list); - } - return list; - } - - public ImageList GetProtocolIcons() - { - if (null == _protocolIcons) - { - _protocolIcons = new ImageList(); - _protocolIcons.ImageSize = new Size(16, 16); - _protocolIcons.ColorDepth = ColorDepth.Depth32Bit; - _protocolIcons.Images.Clear(); - foreach (Protocol p in ProtocolFactory.getEnabledProtocols().toArray(new Protocol[] {})) - { - _protocolIcons.Images.Add(p.getProvider(), IconForName(p.icon(), 16)); - } - } - return _protocolIcons; - } - - private Icon GetFileIconFromExtension(string filename, bool isFolder, IconSize size, bool linkOverlay) - { - //by extension - string key = Utils.GetSafeExtension(filename); - if (isFolder) - { - key += "-folder"; - } - if (linkOverlay) - { - key += "-overlay"; - } - int s = size == IconSize.Small ? 16 : 32; - Icon icon = _iconCache.Get(key, s); - if (null == icon) - { - Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO(); - uint flags = Shell32.SHGFI_ICON | Shell32.SHGFI_USEFILEATTRIBUTES; - - if (linkOverlay) flags += Shell32.SHGFI_LINKOVERLAY; - - /* Check the size specified for return. */ - if (IconSize.Small == size) - { - flags += Shell32.SHGFI_SMALLICON; - } - else - { - flags += Shell32.SHGFI_LARGEICON; - } - - uint fileAttributes = 0; - if (isFolder) - { - fileAttributes = Shell32.FILE_ATTRIBUTE_DIRECTORY; - } - else - { - fileAttributes = Shell32.FILE_ATTRIBUTE_NORMAL; - } - - IntPtr hSuccess = Shell32.SHGetFileInfo(filename, fileAttributes, ref shfi, (uint) Marshal.SizeOf(shfi), - flags); - if (hSuccess != IntPtr.Zero) - { - // Copy (clone) the returned icon to a new object, thus allowing us to clean-up properly - try - { - icon = (Icon) Icon.FromHandle(shfi.hIcon).Clone(); - } - catch (Exception) - { - Log.error("Cannot get icon for " + filename); - return Icon.FromHandle(IconForName("notfound", size).GetHicon()); - } - _iconCache.Put(key, icon, s); - // Release icon handle - User32.DestroyIcon(shfi.hIcon); - } - } - return icon; - } - - public Icon GetFileIconFromExecutable(string filename, IconSize size) - { - string key = filename; - int s = size == IconSize.Small ? 16 : 32; - Icon icon = _iconCache.Get(key, s); - if (null == icon) - { - Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO(); - uint flags = Shell32.SHGFI_ICON | Shell32.SHGFI_USEFILEATTRIBUTES; - if (IconSize.Small == size) - { - flags += Shell32.SHGFI_SMALLICON; - } - else - { - flags += Shell32.SHGFI_LARGEICON; - } - IntPtr hSuccess = Shell32.SHGetFileInfo(filename, Shell32.FILE_ATTRIBUTE_NORMAL, ref shfi, - (uint) Marshal.SizeOf(shfi), flags); - if (hSuccess != IntPtr.Zero) - { - // Copy (clone) the returned icon to a new object, thus allowing us to clean-up properly - icon = (Icon) Icon.FromHandle(shfi.hIcon).Clone(); - _iconCache.Put(key, icon, s); - // Release icon handle - User32.DestroyIcon(shfi.hIcon); - } - } - return icon; - } - - /// - /// Used to access system folder icons. - /// - /// Specify large or small icons. - /// Specify open or closed FolderType. - /// System.Drawing.Icon - private Icon GetFolderIcon(IconSize size, FolderType folderType) - { - // Need to add size check, although errors generated at present! - uint flags = Shell32.SHGFI_ICON | Shell32.SHGFI_USEFILEATTRIBUTES; - - if (FolderType.Open == folderType) - { - flags += Shell32.SHGFI_OPENICON; - } - - if (IconSize.Small == size) - { - flags += Shell32.SHGFI_SMALLICON; - } - else - { - flags += Shell32.SHGFI_LARGEICON; - } - - // Get the folder icon - Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO(); - IntPtr hSuccess = Shell32.SHGetFileInfo("_unknown", Shell32.FILE_ATTRIBUTE_DIRECTORY, ref shfi, - (uint) Marshal.SizeOf(shfi), flags); - if (hSuccess != IntPtr.Zero) - { - Icon.FromHandle(shfi.hIcon); // Load the icon from an HICON handle - - // Now clone the icon, so that it can be successfully stored in an ImageList - Icon icon = (Icon) Icon.FromHandle(shfi.hIcon).Clone(); - - User32.DestroyIcon(shfi.hIcon); // Cleanup - return icon; - } - return null; - } - - private static Bitmap ResizeImage(Image imgToResize, int size) - { - return ResizeImage(imgToResize, new Size(size, size)); - } - - public static Bitmap ResizeImage(Image imgToResize, Size size) - { - if (imgToResize == null) - { - return null; - } - Bitmap b = new Bitmap(size.Width, size.Height); - using (Graphics g = Graphics.FromImage(b)) - { - g.InterpolationMode = InterpolationMode.HighQualityBicubic; - g.DrawImage(imgToResize, 0, 0, size.Width, size.Height); - } - return b; - } - - private static Bitmap[] GetTiffImages(Image sourceImage) - { - int pageCount = sourceImage.GetFrameCount(FrameDimension.Page); - - Bitmap[] returnImage = new Bitmap[pageCount]; - - Guid objGuid = sourceImage.FrameDimensionsList[0]; - FrameDimension objDimension = new FrameDimension(objGuid); - - for (int i = 0; i < pageCount; i++) - { - using (MemoryStream ms = new MemoryStream()) - { - sourceImage.SelectActiveFrame(objDimension, i); - sourceImage.Save(ms, ImageFormat.Tiff); - returnImage[i] = new Bitmap(ms); - } - } - - return returnImage; - } - - private static Bitmap GetTiffImage(Bitmap image, int size) - { - Bitmap[] images = GetTiffImages(image); - Bitmap biggest = null; - foreach (Bitmap bitmap in images) - { - if (bitmap.Size.Width == size) return bitmap; - if (null == biggest || bitmap.Size.Width > biggest.Size.Width) - { - biggest = bitmap; - } - } - return ResizeImage(biggest, size); - } - - /// - /// Options to specify whether folders should be in the open or closed state. - /// - private enum FolderType - { - /// - /// Specify open folder. - /// - Open = 0, - - /// - /// Specify closed folder. - /// - Closed = 1 - } - - private class TypedLRUCache : LRUCache> - { - public TypedLRUCache(int capacity) : base(capacity) - { - } - - public void Put(String key, T image, int size) - { - IDictionary versions; - if (ContainsKey(key)) - { - versions = this[key]; - } - else - { - versions = new Dictionary(); - Add(key, versions); - } - versions[size] = image; - //versions.Add(size, image); - } - - public T Get(String key, int size) - { - IDictionary versions; - if (!TryGetValue(key, out versions)) - { - Log.warn("No cached image for " + key); - return default(T); - } - T result; - versions.TryGetValue(size, out result); - return result; - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.IO; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Core.Collections; +using ch.cyberduck.core; +using ch.cyberduck.core.preferences; +using org.apache.commons.io; +using org.apache.log4j; +using Path = ch.cyberduck.core.Path; + +namespace Ch.Cyberduck.Ui.Controller +{ + /// + /// Provides static methods to read images for both folders and files. Does not provide any caching actually. + /// + public sealed class IconCache + { + /// + /// Options to specify the size of icons to return. + /// + public enum IconSize + { + /// + /// Specify large icon - 32 pixels by 32 pixels. + /// + Large = 0, + + /// + /// Specify small icon - 16 pixels by 16 pixels. + /// + Small = 1 + } + + private static readonly Logger Log = Logger.getLogger(typeof (IconCache).FullName); + + private static readonly IconCache instance = new IconCache(); + + private readonly TypedLRUCache _bitmapCache = + new TypedLRUCache(PreferencesFactory.get().getInteger("icon.cache.size")); + + /// + /// Cache limited to n entries + /// + private readonly TypedLRUCache _iconCache = + new TypedLRUCache(PreferencesFactory.get().getInteger("icon.cache.size")); + + private readonly Dictionary _protocolImages = new Dictionary(); + + /// + /// 16x16 protocol icons + /// + private ImageList _protocolIcons; + + public static IconCache Instance + { + get { return instance; } + } + + private Bitmap OverlayImages(Bitmap original, Bitmap overlay) + { + if (null == original) + return null; + Image cloned = (Image) original.Clone(); + using (Graphics gra = Graphics.FromImage(cloned)) + { + gra.DrawImage(overlay, new Point(0, 0)); + } + return (Bitmap) cloned; + } + + public Bitmap OverlayIcon(string file, string overlay, IconSize size) + { + return OverlayImages(IconForFilename(file, size), IconForName(overlay, size)); + } + + /// + /// Return a bitmap for a given path + /// + /// + /// + public Bitmap IconForPath(Path path, IconSize size) + { + if (path.isSymbolicLink()) + { + Bitmap overlay = IconForName("aliasbadge", size); + if (path.isDirectory()) + { + return IconForFolder(overlay, size); + } + Bitmap symlink = IconForFilename(path.getName(), size); + return OverlayImages(symlink, overlay); + } + if (path.isFile()) + { + if (String.IsNullOrEmpty(path.getExtension())) + { + if (path.attributes().getPermission().isExecutable()) + { + return IconForName("executable", size); + } + } + return IconForFilename(path.getName(), size); + } + if (path.isDirectory()) + { + if (!Permission.EMPTY.equals(path.attributes().getPermission())) + { + if (!path.attributes().getPermission().isExecutable()) + { + return IconForFolder(IconForName("privatefolderbadge", size), size); + } + if (!path.attributes().getPermission().isReadable()) + { + if (path.attributes().getPermission().isWritable()) + { + return IconForFolder(IconForName("dropfolderbadge", size), size); + } + } + if (!path.attributes().getPermission().isWritable()) + { + return IconForFolder(IconForName("readonlyfolderbadge", size), size); + } + } + return IconForFolder(size); + } + return ResizeImage(IconForName("notfound", size), size); + } + + private Bitmap ResizeImage(Image imgToResize, IconSize size) + { + return ResizeImage(imgToResize, size == IconSize.Small ? 16 : 32); + } + + public Bitmap IconForName(string name, IconSize size) + { + return IconForName(name, size == IconSize.Small ? 16 : 32); + } + + public Bitmap IconForName(string name) + { + return IconForName(name, 0); + } + + /// + /// Find a bitmap in the ResourcesBundle for a given name + /// + /// + /// + public Bitmap IconForName(string name, int size) + { + Bitmap image = _bitmapCache.Get(name, size); + if (null == image) + { + if (FilenameUtils.getPrefix(name) != string.Empty) + { + try + { + image = new Icon(name, size, size).ToBitmap(); + } + catch (ArgumentException) + { + //was not an icon, try as plain bitmap + image = (Bitmap) Image.FromFile(name); + if (size > 0) + { + image = ResizeImage(image, new Size(size, size)); + } + } + } + else + { + object obj = ResourcesBundle.ResourceManager.GetObject(FilenameUtils.getBaseName(name), + ResourcesBundle.Culture); + if (obj is Icon) + { + image = (new Icon(obj as Icon, size, size)).ToBitmap(); + } + else if (obj is Bitmap) + { + image = (Bitmap) obj; + } + } + if (image != null && image.RawFormat == ImageFormat.Tiff) + { + // handle multi-page tiffs + image = GetTiffImage(image, size); + } + else if (size > 0) + { + image = ResizeImage(image, new Size(size, size)); + } + _bitmapCache.Put(name, image, size); + } + return image; + } + + public Bitmap VolumeIcon(Protocol protocol, IconSize size) + { + return IconForName(protocol.disk(), size); + } + + /// + /// Get an overlayed folder icon + /// + /// + /// + public Bitmap IconForFolder(Bitmap overlay, IconSize size) + { + return OverlayImages(IconForFolder(size), overlay); + } + + /// + /// Return our standard folder image + /// + /// + public Bitmap IconForFolder(IconSize size) + { + int s = size == IconSize.Small ? 16 : 32; + Icon icon = _iconCache.Get("folder", s); + if (null == icon) + { + icon = GetFolderIcon(size, FolderType.Open); + _iconCache.Put("folder", icon, s); + } + if (null == icon) + { + return IconForName("notfound", s); + } + return icon.ToBitmap(); + } + + public Bitmap GetDefaultBrowserIcon() + { + Bitmap bitmap = _bitmapCache.Get("defaultbrowser", 32); + if (null != bitmap) return bitmap; + + string browser = Utils.GetSystemDefaultBrowser(); + try + { + if (null != browser) + { + Icon i = Icon.ExtractAssociatedIcon(browser); + if (null != i) + { + Bitmap res = i.ToBitmap(); + _bitmapCache.Put("defaultbrowser", res, 32); + return res; + } + } + } + catch + { + //return default icon + } + return IconForName("notfound", 32); + } + + public Bitmap ExtractIconFromExecutable(string exe, IconSize size) + { + int s = size == IconSize.Small ? 16 : 32; + + Bitmap bitmap = _bitmapCache.Get(exe, s); + if (null != bitmap) return bitmap; + + try + { + using (Icon icon = Icon.ExtractAssociatedIcon(exe)) + { + if (null != icon) + { + Bitmap res = icon.ToBitmap(); + if (size == IconSize.Small) + { + res = ResizeImage(res, s); + } + _bitmapCache.Put(exe, res, s); + return res; + } + } + } + catch + { + } + //return default icon + return IconForName("notfound", s); + } + + public Bitmap ExtractIconForFilename(string file) + { + try + { + using (Icon icon = Icon.ExtractAssociatedIcon(file)) + { + if (null != icon) + { + return icon.ToBitmap(); + } + } + } + catch (Exception) + { + } + return null; + } + + /// + /// Get the associated icon for a given file type (according to its extension) + /// + /// + /// + public Bitmap IconForFilename(string file, IconSize size) + { + Icon icon = GetFileIconFromExtension(file, size, false); + if (null == icon) + { + return IconForName("notfound", size); + } + Bitmap iconForFilename = icon.ToBitmap(); + return iconForFilename; + } + + /// + /// Returns an icon for a given file - indicated by the name parameter. + /// + /// Pathname for file. + /// Large or small + /// Whether to include the link icon + /// System.Drawing.Icon + private Icon GetFileIconFromExtension(string filename, IconSize size, bool linkOverlay) + { + return GetFileIconFromExtension(filename, false, size, linkOverlay); + } + + public ImageList GetProtocolImages(int size) + { + ImageList list; + if (!_protocolImages.TryGetValue(size, out list)) + { + list = new ImageList(); + list.ImageSize = new Size(size, size); + list.ColorDepth = ColorDepth.Depth32Bit; + foreach (Protocol p in ProtocolFactory.getEnabledProtocols().toArray(new Protocol[] {})) + { + list.Images.Add(p.getProvider(), IconForName(p.disk(), size)); + } + _protocolImages.Add(size, list); + } + return list; + } + + public ImageList GetProtocolIcons() + { + if (null == _protocolIcons) + { + _protocolIcons = new ImageList(); + _protocolIcons.ImageSize = new Size(16, 16); + _protocolIcons.ColorDepth = ColorDepth.Depth32Bit; + _protocolIcons.Images.Clear(); + foreach (Protocol p in ProtocolFactory.getEnabledProtocols().toArray(new Protocol[] {})) + { + _protocolIcons.Images.Add(p.getProvider(), IconForName(p.icon(), 16)); + } + } + return _protocolIcons; + } + + private Icon GetFileIconFromExtension(string filename, bool isFolder, IconSize size, bool linkOverlay) + { + //by extension + string key = Utils.GetSafeExtension(filename); + if (isFolder) + { + key += "-folder"; + } + if (linkOverlay) + { + key += "-overlay"; + } + int s = size == IconSize.Small ? 16 : 32; + Icon icon = _iconCache.Get(key, s); + if (null == icon) + { + Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO(); + uint flags = Shell32.SHGFI_ICON | Shell32.SHGFI_USEFILEATTRIBUTES; + + if (linkOverlay) flags += Shell32.SHGFI_LINKOVERLAY; + + /* Check the size specified for return. */ + if (IconSize.Small == size) + { + flags += Shell32.SHGFI_SMALLICON; + } + else + { + flags += Shell32.SHGFI_LARGEICON; + } + + uint fileAttributes = 0; + if (isFolder) + { + fileAttributes = Shell32.FILE_ATTRIBUTE_DIRECTORY; + } + else + { + fileAttributes = Shell32.FILE_ATTRIBUTE_NORMAL; + } + + IntPtr hSuccess = Shell32.SHGetFileInfo(filename, fileAttributes, ref shfi, (uint) Marshal.SizeOf(shfi), + flags); + if (hSuccess != IntPtr.Zero) + { + // Copy (clone) the returned icon to a new object, thus allowing us to clean-up properly + try + { + icon = (Icon) Icon.FromHandle(shfi.hIcon).Clone(); + } + catch (Exception) + { + Log.error("Cannot get icon for " + filename); + return Icon.FromHandle(IconForName("notfound", size).GetHicon()); + } + _iconCache.Put(key, icon, s); + // Release icon handle + User32.DestroyIcon(shfi.hIcon); + } + } + return icon; + } + + public Icon GetFileIconFromExecutable(string filename, IconSize size) + { + string key = filename; + int s = size == IconSize.Small ? 16 : 32; + Icon icon = _iconCache.Get(key, s); + if (null == icon) + { + Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO(); + uint flags = Shell32.SHGFI_ICON | Shell32.SHGFI_USEFILEATTRIBUTES; + if (IconSize.Small == size) + { + flags += Shell32.SHGFI_SMALLICON; + } + else + { + flags += Shell32.SHGFI_LARGEICON; + } + IntPtr hSuccess = Shell32.SHGetFileInfo(filename, Shell32.FILE_ATTRIBUTE_NORMAL, ref shfi, + (uint) Marshal.SizeOf(shfi), flags); + if (hSuccess != IntPtr.Zero) + { + // Copy (clone) the returned icon to a new object, thus allowing us to clean-up properly + icon = (Icon) Icon.FromHandle(shfi.hIcon).Clone(); + _iconCache.Put(key, icon, s); + // Release icon handle + User32.DestroyIcon(shfi.hIcon); + } + } + return icon; + } + + /// + /// Used to access system folder icons. + /// + /// Specify large or small icons. + /// Specify open or closed FolderType. + /// System.Drawing.Icon + private Icon GetFolderIcon(IconSize size, FolderType folderType) + { + // Need to add size check, although errors generated at present! + uint flags = Shell32.SHGFI_ICON | Shell32.SHGFI_USEFILEATTRIBUTES; + + if (FolderType.Open == folderType) + { + flags += Shell32.SHGFI_OPENICON; + } + + if (IconSize.Small == size) + { + flags += Shell32.SHGFI_SMALLICON; + } + else + { + flags += Shell32.SHGFI_LARGEICON; + } + + // Get the folder icon + Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO(); + IntPtr hSuccess = Shell32.SHGetFileInfo("_unknown", Shell32.FILE_ATTRIBUTE_DIRECTORY, ref shfi, + (uint) Marshal.SizeOf(shfi), flags); + if (hSuccess != IntPtr.Zero) + { + Icon.FromHandle(shfi.hIcon); // Load the icon from an HICON handle + + // Now clone the icon, so that it can be successfully stored in an ImageList + Icon icon = (Icon) Icon.FromHandle(shfi.hIcon).Clone(); + + User32.DestroyIcon(shfi.hIcon); // Cleanup + return icon; + } + return null; + } + + private static Bitmap ResizeImage(Image imgToResize, int size) + { + return ResizeImage(imgToResize, new Size(size, size)); + } + + public static Bitmap ResizeImage(Image imgToResize, Size size) + { + if (imgToResize == null) + { + return null; + } + Bitmap b = new Bitmap(size.Width, size.Height); + using (Graphics g = Graphics.FromImage(b)) + { + g.InterpolationMode = InterpolationMode.HighQualityBicubic; + g.DrawImage(imgToResize, 0, 0, size.Width, size.Height); + } + return b; + } + + private static Bitmap[] GetTiffImages(Image sourceImage) + { + int pageCount = sourceImage.GetFrameCount(FrameDimension.Page); + + Bitmap[] returnImage = new Bitmap[pageCount]; + + Guid objGuid = sourceImage.FrameDimensionsList[0]; + FrameDimension objDimension = new FrameDimension(objGuid); + + for (int i = 0; i < pageCount; i++) + { + using (MemoryStream ms = new MemoryStream()) + { + sourceImage.SelectActiveFrame(objDimension, i); + sourceImage.Save(ms, ImageFormat.Tiff); + returnImage[i] = new Bitmap(ms); + } + } + + return returnImage; + } + + private static Bitmap GetTiffImage(Bitmap image, int size) + { + Bitmap[] images = GetTiffImages(image); + Bitmap biggest = null; + foreach (Bitmap bitmap in images) + { + if (bitmap.Size.Width == size) return bitmap; + if (null == biggest || bitmap.Size.Width > biggest.Size.Width) + { + biggest = bitmap; + } + } + return ResizeImage(biggest, size); + } + + /// + /// Options to specify whether folders should be in the open or closed state. + /// + private enum FolderType + { + /// + /// Specify open folder. + /// + Open = 0, + + /// + /// Specify closed folder. + /// + Closed = 1 + } + + private class TypedLRUCache : LRUCache> + { + public TypedLRUCache(int capacity) : base(capacity) + { + } + + public void Put(String key, T image, int size) + { + IDictionary versions; + if (ContainsKey(key)) + { + versions = this[key]; + } + else + { + versions = new Dictionary(); + Add(key, versions); + } + versions[size] = image; + //versions.Add(size, image); + } + + public T Get(String key, int size) + { + IDictionary versions; + if (!TryGetValue(key, out versions)) + { + Log.warn("No cached image for " + key); + return default(T); + } + T result; + versions.TryGetValue(size, out result); + return result; + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/InfoController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/InfoController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/InfoController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/InfoController.cs index df7e3a9217..70b7d11831 100644 --- a/source/ch/cyberduck/ui/controller/InfoController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/InfoController.cs @@ -1,2650 +1,2650 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Globalization; -using System.Media; -using System.Windows.Forms; -using ch.cyberduck.core; -using ch.cyberduck.core.analytics; -using ch.cyberduck.core.cdn; -using ch.cyberduck.core.cdn.features; -using ch.cyberduck.core.features; -using ch.cyberduck.core.formatter; -using ch.cyberduck.core.identity; -using ch.cyberduck.core.lifecycle; -using ch.cyberduck.core.local; -using ch.cyberduck.core.logging; -using ch.cyberduck.core.preferences; -using ch.cyberduck.core.s3; -using ch.cyberduck.core.threading; -using ch.cyberduck.core.worker; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Ui.Controller.Threading; -using java.lang; -using java.text; -using java.util; -using org.apache.commons.lang3; -using org.apache.log4j; -using StructureMap; -using Boolean = java.lang.Boolean; -using Object = System.Object; -using String = System.String; -using StringBuilder = System.Text.StringBuilder; - -namespace Ch.Cyberduck.Ui.Controller -{ - public sealed class InfoController : WindowController - { - private static readonly Logger Log = Logger.getLogger(typeof (InfoController).FullName); - private readonly BrowserController _controller; - private readonly FileDescriptor _descriptor = FileDescriptorFactory.get(); - private readonly string _multipleFilesString = "(" + LocaleFactory.localizedString("Multiple files") + ")"; - private readonly LoginCallback _prompt; - private readonly PathContainerService containerService = new PathContainerService(); - private BindingList _acl = new BindingList(); - private IList _files; - private IList> _lifecycleDeletePeriods; - private IList> _lifecycleTransitionPeriods; - private BindingList _metadata = new BindingList(); - - private InfoController(BrowserController controller, IList files) - { - View = ObjectFactory.GetInstance(); - _controller = controller; - _prompt = LoginCallbackFactory.get(this); - Files = files; - - _controller.View.ViewClosedEvent += delegate - { - if (!View.IsDisposed) - { - View.Close(); - } - }; - - View.ActiveTabChanged += View_ActiveTabChanged; - } - - public override bool Singleton - { - get { return PreferencesFactory.get().getBoolean("browser.info.inspector"); } - } - - public IList Files - { - private get { return _files; } - set - { - if (value.Count == 0) - { - return; - } - - _files = value; - - ConfigureToolbar(); - ConfigureHelp(); - InitTab(View.ActiveTab); - } - } - - private int NumberOfFiles - { - get { return null == _files ? 0 : _files.Count; } - } - - private string Name - { - get - { - if (NumberOfFiles > 1) - { - return _multipleFilesString; - } - foreach (Path file in _files) - { - return file.getName(); - } - return null; - } - } - - private Path SelectedPath - { - get - { - if (_files.Count == 0) return null; - - return _files[0]; - } - } - - private void View_ActiveTabChanged() - { - InitTab(View.ActiveTab); - } - - private void InitTab(InfoTab activeTab) - { - switch (activeTab) - { - case InfoTab.General: - InitGeneral(); - InitPermissions(); - break; - case InfoTab.Permissions: - InitPermissions(); - break; - case InfoTab.Acl: - InitAcl(); - break; - case InfoTab.Distribution: - InitDistribution(); - break; - case InfoTab.S3: - InitS3(); - break; - case InfoTab.Metadata: - InitMetadata(); - break; - } - } - - private Map ConvertMetadataToMap() - { - TreeMap map = new TreeMap(); - foreach (CustomHeaderEntry header in _metadata) - { - map.Add(header.Name, header.Value); - } - return map; - } - - private void ConfigureToolbar() - { - Session session = _controller.Session; - bool anonymous = session.getHost().getCredentials().isAnonymousLogin(); - - if (session.getHost().getProtocol().getType() == Protocol.Type.s3 || - session.getHost().getProtocol().getType() == Protocol.Type.googlestorage) - { - // Set icon of cloud service provider - View.ToolbarS3Label = session.getHost().getProtocol().getName(); - View.ToolbarS3Image = - IconCache.Instance.GetProtocolImages(32).Images[session.getHost().getProtocol().getProvider()]; - } - else - { - // Currently these settings are only available for Amazon S3 - View.ToolbarS3Label = ProtocolFactory.S3_SSL.getName(); - View.ToolbarS3Image = - IconCache.Instance.GetProtocolImages(32).Images[ProtocolFactory.S3_SSL.getProvider()]; - } - //ACL or permission view - View.AclPanel = session.getFeature(typeof (AclPermission)) != null; - if (anonymous) - { - // Anonymous never has the right to update permissions - View.ToolbarPermissionsEnabled = false; - } - else - { - View.ToolbarPermissionsEnabled = session.getFeature(typeof (AclPermission)) != null || - session.getFeature(typeof (UnixPermission)) != null; - } - if (anonymous) - { - View.ToolbarDistributionEnabled = false; - View.ToolbarDistributionImage = - IconCache.Instance.GetProtocolImages(32).Images[ProtocolFactory.S3_SSL.getProvider()]; - } - else - { - bool distribution = session.getFeature(typeof (DistributionConfiguration)) != null; - View.ToolbarDistributionEnabled = distribution; - if (distribution) - { - View.ToolbarDistributionImage = - IconCache.Instance.GetProtocolImages(32).Images[session.getHost().getProtocol().getProvider()]; - } - else - { - View.ToolbarDistributionImage = - IconCache.Instance.GetProtocolImages(32).Images[ProtocolFactory.S3_SSL.getProvider()]; - } - } - if (anonymous) - { - View.ToolbarS3Enabled = false; - } - else - { - View.ToolbarS3Enabled = session.getHost().getProtocol().getType() == Protocol.Type.s3; - } - - if (anonymous) - { - // Anonymous never has the right to update permissions - View.ToolbarMetadataEnabled = false; - } - else - { - View.ToolbarMetadataEnabled = session.getFeature(typeof (Headers)) != null; - } - } - - /// - /// Read custom metadata HTTP headers from cloud provider - /// - private void InitMetadata() - { - SetMetadata(new List()); - if (ToggleMetadataSettings(false)) - { - PopulateMetadata(); - _controller.Background(new ReadMetadataBackgroundAction(_controller, this)); - } - } - - /// - /// Toggle settings before and after update - /// - /// Enable controls and stop progress spinner - /// True if progress animation has started and settings are toggled - private bool ToggleMetadataSettings(bool stop) - { - Session session = _controller.Session; - Credentials credentials = session.getHost().getCredentials(); - bool enable = !credentials.isAnonymousLogin() && session.getFeature(typeof (Headers)) != null; - View.MetadataTableEnabled = stop && enable; - View.MetadataAddEnabled = stop && enable; - bool selection = View.SelectedMetadataEntries.Count > 0; - View.MetadataRemoveEnabled = stop && enable && selection; - if (stop) - { - View.MetadataAnimationActive = false; - } - else if (enable) - { - View.MetadataAnimationActive = true; - } - return enable; - } - - private void SetMetadata(IList metadata) - { - _metadata = new BindingList(metadata); - View.MetadataDataSource = _metadata; - _metadata.ListChanged += delegate(object sender, ListChangedEventArgs args) - { - switch (args.ListChangedType) - { - case ListChangedType.ItemDeleted: - if (ToggleMetadataSettings(false)) - { - Background(new WriteMetadataBackgroundAction(_controller, this)); - } - break; - - case ListChangedType.ItemChanged: - if (args.NewIndex < _metadata.Count && Utils.IsNotBlank(_metadata[args.NewIndex].Name) && - Utils.IsNotBlank(_metadata[args.NewIndex].Value)) - { - if (ToggleMetadataSettings(false)) - { - Background(new WriteMetadataBackgroundAction(_controller, this)); - } - } - break; - } - }; - } - - private void AddAclEntry(Acl.User user, Acl.Role role) - { - Log.debug("AddAclItem:" + user.getDisplayName()); - UserAndRoleEntry entry = new UserAndRoleEntry(user, role); - _acl.Add(entry); - View.EditAclRow(entry, !user.isEditable()); - } - - /// - /// Add new metadata row and selects the name column - /// - private void AddMetadataItem(string name) - { - AddMetadataItem(name, string.Empty, false); - } - - /// - /// Add new metadata row and selects the name column - /// - private void AddMetadataItem(string name, string value) - { - AddMetadataItem(name, value, true); - } - - /// - /// - /// - /// HTTP header name - /// HTTP header value - /// Select the value field or the name header field - private void AddMetadataItem(string name, string value, bool selectValue) - { - Log.debug("AddMetadataItem:" + name); - CustomHeaderEntry newHeaderEntry = new CustomHeaderEntry(name, value); - _metadata.Add(newHeaderEntry); - View.EditMetadataRow(newHeaderEntry, selectValue); - } - - private void PopulateMetadata() - { - IDictionary metadata = new Dictionary(); - metadata.Add(LocaleFactory.localizedString("Custom Header"), - () => AddMetadataItem(LocaleFactory.localizedString("Unknown"))); - metadata.Add("Content-Disposition", () => AddMetadataItem("Content-Disposition", "attachment", true)); - metadata.Add(LocaleFactory.localizedString("Cache-Control"), - () => - AddMetadataItem("Cache-Control", - "public,max-age=" + PreferencesFactory.get().getInteger("s3.cache.seconds"))); - metadata.Add(LocaleFactory.localizedString("Expires"), delegate - { - DateTimeFormatInfo format = new CultureInfo("en-US").DateTimeFormat; - DateTime expires = DateTime.Now.AddSeconds(PreferencesFactory.get().getInteger("s3.cache.seconds")); - AddMetadataItem("Expires", expires.ToString("r", format)); // RFC1123 format - }); - metadata.Add("Pragma", () => AddMetadataItem("Pragma", String.Empty, true)); - metadata.Add("Content-Type", () => AddMetadataItem("Content-Type", String.Empty, true)); - metadata.Add("x-amz-website-redirect-location", - () => AddMetadataItem("x-amz-website-redirect-location", String.Empty, true)); - - metadata.Add(LocaleFactory.localizedString("Remove"), RemoveMetadata); - - View.PopulateMetadata(metadata); - } - - private void PopulateLifecycleTransitionPeriod() - { - if (_lifecycleTransitionPeriods == null) - { - _lifecycleTransitionPeriods = - Utils.ConvertFromJavaList(PreferencesFactory.get().getList("s3.lifecycle.transition.options"), - item => - new KeyValuePair( - MessageFormat.format(LocaleFactory.localizedString("after {0} Days", "S3"), - item.ToString()), item.ToString())); - } - View.PopulateLifecycleTransitionPeriod(_lifecycleTransitionPeriods); - } - - private void PopulateLifecycleDeletePeriod() - { - if (_lifecycleDeletePeriods == null) - { - _lifecycleDeletePeriods = - Utils.ConvertFromJavaList(PreferencesFactory.get().getList("s3.lifecycle.delete.options"), - item => - new KeyValuePair( - MessageFormat.format(LocaleFactory.localizedString("after {0} Days", "S3"), - item.ToString()), item.ToString())); - } - View.PopulateLifecycleDeletePeriod(_lifecycleDeletePeriods); - } - - private void RemoveMetadata() - { - List entries = View.SelectedMetadataEntries; - foreach (CustomHeaderEntry entry in entries) - { - _metadata.Remove(entry); - } - } - - private void ConfigureHelp() - { - View.ShowHelp += delegate(object sender, InfoHelpArgs args) - { - StringBuilder site = new StringBuilder(PreferencesFactory.get().getProperty("website.help")); - switch (args.Section) - { - case InfoHelpArgs.Context.General: - site.Append("/howto/info"); - break; - case InfoHelpArgs.Context.Permissions: - site.Append("/howto/info"); - break; - case InfoHelpArgs.Context.Metdadata: - site.Append("/").Append(_controller.Session.getHost().getProtocol().getProvider()); - break; - case InfoHelpArgs.Context.Cdn: - site.Append("/howto/cdn"); - break; - case InfoHelpArgs.Context.S3: - site.Append("/").Append(_controller.Session.getHost().getProtocol().getProvider()); - break; - } - BrowserLauncherFactory.get().open(site.ToString()); - }; - } - - /// - /// Read grants in the background - /// - private void InitAcl() - { - SetAcl(new List()); - View.AclUrl = LocaleFactory.localizedString("None"); - View.AclUrlEnabled = false; - if (ToggleAclSettings(false)) - { - PopulateAclUsers(); - PopulateAclRoles(); - if (NumberOfFiles > 1) - { - View.AclUrl = _multipleFilesString; - View.AclUrlTooltip = null; - } - else - { - foreach (Path file in _files) - { - if (file.isFile()) - { - DescriptiveUrl authenticated = - ((UrlProvider) _controller.Session.getFeature(typeof (UrlProvider))).toUrl(file) - .find(DescriptiveUrl.Type.authenticated); - if (!authenticated.equals(DescriptiveUrl.EMPTY)) - { - View.AclUrl = authenticated.getUrl(); - View.AclUrlEnabled = true; - View.AclUrlTooltip = authenticated.getHelp(); - } - } - } - } - _controller.Background(new ReadAclBackgroundAction(_controller, this)); - } - } - - private void PopulateAclUsers() - { - AclPermission feature = (AclPermission) _controller.Session.getFeature(typeof (AclPermission)); - IDictionary mapping = new Dictionary(); - List aclUsers = feature.getAvailableAclUsers(); - for (int i = 0; i < aclUsers.size(); i++) - { - Acl.User user = (Acl.User) aclUsers.get(i); - mapping.Add(user.getPlaceholder(), () => AddAclEntry(user, new Acl.Role(String.Empty))); - } - mapping.Add(LocaleFactory.localizedString("Remove"), RemoveAcl); - View.PopulateAclUsers(mapping); - } - - private void PopulateAclRoles() - { - AclPermission feature = (AclPermission) _controller.Session.getFeature(typeof (AclPermission)); - IList roles = Utils.ConvertFromJavaList( - feature.getAvailableAclRoles(Utils.ConvertToJavaList(Files)), item => ((Acl.Role) item).getName()); - View.PopulateAclRoles(roles); - } - - private void SetAcl(IList userAndRoleEntries) - { - _acl = new BindingList(userAndRoleEntries); - View.AclDataSource = _acl; - _acl.ListChanged += delegate(object sender, ListChangedEventArgs args) - { - switch (args.ListChangedType) - { - case ListChangedType.ItemDeleted: - if (ToggleAclSettings(false)) - { - Background(new WriteAclBackgroundAction(_controller, this)); - } - break; - - case ListChangedType.ItemChanged: - if (Utils.IsNotBlank(_acl[args.NewIndex].getUser().getIdentifier()) && - Utils.IsNotBlank(_acl[args.NewIndex].getRole().getName())) - { - if (ToggleAclSettings(false)) - { - Background(new WriteAclBackgroundAction(_controller, this)); - } - } - break; - } - }; - } - - /// - /// Toggle settings before and after update - /// - /// Enable controls and stop progress spinner - /// True if progress animation has started and settings are toggled - private bool ToggleAclSettings(bool stop) - { - Session session = _controller.Session; - Credentials credentials = session.getHost().getCredentials(); - bool enable = !credentials.isAnonymousLogin() && session.getFeature(typeof (AclPermission)) != null; - View.AclTableEnabled = stop && enable; - View.AclAddEnabled = stop && enable; - bool selection = View.SelectedAclEntries.Count > 0; - View.AclRemoveEnabled = stop && enable && selection; - if (stop) - { - View.AclAnimationActive = false; - } - else if (enable) - { - View.AclAnimationActive = true; - } - return enable; - } - - private void CalculateSize() - { - if (ToggleSizeSettings(false)) - { - _controller.background(new RecursiveSizeAction(_controller, this, _files)); - } - } - - private void FilenameChanged() - { - if (NumberOfFiles == 1) - { - Path current = _files[0]; - - if (!View.Filename.Equals(current.getName())) - { - if (View.Filename.Contains(Path.DELIMITER.ToString())) - { - SystemSounds.Beep.Play(); - return; - } - if (string.IsNullOrEmpty(View.Filename)) - { - View.Filename = current.getName(); - } - else - { - Path renamed = new Path(current.getParent(), View.Filename, current.getType()); - _controller.RenamePath(current, renamed); - InitWebUrl(); - } - } - } - } - - private void BucketLoggingCheckboxChanged() - { - if (ToggleS3Settings(false)) - { - _controller.background(new SetBucketLoggingBackgroundAction(_controller, this)); - } - } - - private void DistributionApply() - { - if (ToggleDistributionSettings(false)) - { - _controller.background(new WriteDistributionBackgroundAction(_controller, this, _files)); - } - } - - private void DistributionCnameChanged() - { - if (ToggleDistributionSettings(false)) - { - _controller.background(new WriteDistributionBackgroundAction(_controller, this, _files)); - } - } - - private void DistributionDeliveryMethodChanged() - { - if (ToggleDistributionSettings(false)) - { - _controller.background(new ReadDistributionBackgroundAction(_controller, this)); - } - } - - /// - /// Toggle settings before and after update - /// - /// Enable controls and stop progress spinner - /// True if controls are enabled for the given protocol in idle state - private bool ToggleDistributionSettings(bool stop) - { - Session session = _controller.Session; - Credentials credentials = session.getHost().getCredentials(); - DistributionConfiguration cdn = - (DistributionConfiguration) session.getFeature(typeof (DistributionConfiguration)); - bool enable = !credentials.isAnonymousLogin() && cdn != null; - Path container = containerService.getContainer(SelectedPath); - if (enable) - { - // Not enabled if multiple files selected with not same parent container - foreach (Path next in _files) - { - if (containerService.getContainer(next).Equals(container)) - { - continue; - } - enable = false; - break; - } - } - View.DistributionEnabled = stop && enable; - View.DistributionDeliveryMethodEnabled = stop && enable; - View.DistributionLoggingCheckboxEnabled = stop && enable && - cdn.getFeature(typeof (DistributionLogging), - View.DistributionDeliveryMethod) != null; - View.DistributionLoggingPopupEnabled = stop && enable && - cdn.getFeature(typeof (DistributionLogging), - View.DistributionDeliveryMethod) != null; - View.DistributionCnameEnabled = stop && enable && - cdn.getFeature(typeof (Cname), View.DistributionDeliveryMethod) != null; - View.DistributionInvalidateObjectsEnabled = stop && enable && - cdn.getFeature(typeof (Purge), View.DistributionDeliveryMethod) != - null; - View.DistributionDefaultRootEnabled = stop && enable && - cdn.getFeature(typeof (Index), View.DistributionDeliveryMethod) != - null; - if (enable) - { - AnalyticsProvider analyticsFeature = (AnalyticsProvider) session.getFeature(typeof (AnalyticsProvider)); - IdentityConfiguration identityFeature = - (IdentityConfiguration) session.getFeature(typeof (IdentityConfiguration)); - - if (null == analyticsFeature || null == identityFeature) - { - View.DistributionAnalyticsCheckboxEnabled = false; - } - else - { - if (ObjectUtils.equals(identityFeature.getCredentials(analyticsFeature.getName()), credentials)) - { - // No need to create new IAM credentials when same as session credentials - View.DistributionAnalyticsCheckboxEnabled = false; - } - else - { - View.DistributionAnalyticsCheckboxEnabled = stop; - } - } - } - else - { - View.DistributionAnalyticsCheckboxEnabled = false; - } - if (stop) - { - View.DistributionAnimationActive = false; - } - else if (enable) - { - View.DistributionAnimationActive = true; - } - return enable; - } - - private void AttachPermissionHandlers() - { - View.OwnerReadChanged += OwnerReadChanged; - View.OwnerWriteChanged += OwnerWriteChanged; - View.OwnerExecuteChanged += OwnerExecuteChanged; - View.GroupReadChanged += GroupReadChanged; - View.GroupWriteChanged += GroupWriteChanged; - View.GroupExecuteChanged += GroupExecuteChanged; - View.OtherReadChanged += OtherReadChanged; - View.OtherWriteChanged += OtherWriteChanged; - View.OtherExecuteChanged += OtherExecuteChanged; - View.ApplyRecursivePermissions += ApplyRecursivePermissions; - View.OctalPermissionsChanged += OctalPermissionsChanged; - } - - private void RemoveAcl() - { - List entries = View.SelectedAclEntries; - foreach (UserAndRoleEntry entry in entries) - { - _acl.Remove(entry); - } - } - - private void AttachDistributionHandlers() - { - DetachDistributionHandlers(); - View.DistributionDeliveryMethodChanged += DistributionDeliveryMethodChanged; - View.DistributionCnameChanged += DistributionCnameChanged; - View.DistributionEnabledChanged += DistributionApply; - View.DistributionLoggingCheckboxChanged += DistributionApply; - View.DistributionLoggingPopupChanged += DistributionLoggingPopupChanged; - View.DistributionDefaultRootChanged += DistributionApply; - View.DistributionInvalidateObjects += DistributionInvalidateObjects; - View.DistributionAnalyticsCheckboxChanged += DistributionAnalyticsCheckboxChanged; - } - - private void DistributionLoggingPopupChanged() - { - if (View.DistributionLoggingCheckbox) - { - // Only write change if logging is already enabled - DistributionApply(); - } - } - - private void DistributionInvalidateObjects() - { - if (ToggleDistributionSettings(false)) - { - _controller.Background(new InvalidateObjectsBackgroundAction(_controller, this)); - } - } - - private void AttachGeneralHandlers() - { - View.CalculateSize += CalculateSize; - View.FilenameChanged += FilenameChanged; - } - - private void AttachS3Handlers() - { - DetachS3Handlers(); - View.BucketLoggingCheckboxChanged += BucketLoggingCheckboxChanged; - View.BucketLoggingPopupChanged += BucketLoggingPopupChanged; - View.EncryptionChanged += EncryptionChanged; - View.StorageClassChanged += StorageClassChanged; - View.BucketVersioningChanged += BucketVersioningChanged; - View.BucketMfaChanged += BucketMfaChanged; - View.BucketAnalyticsCheckboxChanged += BucketAnalyticsCheckboxChanged; - View.LifecycleTransitionCheckboxChanged += LifecycleChanged; - View.LifecycleTransitionPopupChanged += LifecycleChanged; - View.LifecycleDeleteCheckboxChanged += LifecycleChanged; - View.LifecycleDeletePopupChanged += LifecycleChanged; - } - - private void BucketAnalyticsCheckboxChanged() - { - if (ToggleS3Settings(false)) - { - _controller.background(new SetBucketAnalyticsUrlBackgroundAction(_controller, this)); - } - } - - private void BucketLoggingPopupChanged() - { - if (View.BucketLoggingCheckbox) - { - // Only write change if logging is already enabled - BucketLoggingCheckboxChanged(); - } - } - - private void BucketVersioningChanged() - { - if (ToggleS3Settings(false)) - { - _controller.Background(new SetBucketVersioningAndMfaBackgroundAction(_controller, this)); - } - } - - private void StorageClassChanged() - { - if (ToggleS3Settings(false)) - { - _controller.Background(new SetStorageClassBackgroundAction(_controller, this, _files, View.StorageClass)); - } - } - - private void EncryptionChanged() - { - if (ToggleS3Settings(false)) - { - Encryption feature = (Encryption)_controller.Session.getFeature(typeof(Encryption)); - String encryption = View.Encryption ? (string) feature.getAlgorithms().iterator().next() : null; - _controller.Background(new SetEncryptionBackgroundAction(_controller, this, _files, encryption)); - } - } - - private void DetachS3Handlers() - { - View.BucketLoggingCheckboxChanged -= BucketLoggingCheckboxChanged; - View.BucketLoggingPopupChanged -= BucketLoggingPopupChanged; - View.EncryptionChanged -= EncryptionChanged; - View.StorageClassChanged -= StorageClassChanged; - View.BucketVersioningChanged -= BucketVersioningChanged; - View.BucketMfaChanged -= BucketMfaChanged; - View.BucketAnalyticsCheckboxChanged -= BucketAnalyticsCheckboxChanged; - View.LifecycleTransitionCheckboxChanged -= LifecycleChanged; - View.LifecycleTransitionPopupChanged -= LifecycleChanged; - View.LifecycleDeleteCheckboxChanged -= LifecycleChanged; - View.LifecycleDeletePopupChanged -= LifecycleChanged; - } - - private void LifecycleChanged() - { - if (ToggleS3Settings(false)) - { - _controller.Background(new LifecycleBackgroundAction(_controller, this)); - } - } - - private void BucketMfaChanged() - { - BucketVersioningChanged(); - } - - private void DetachGeneralHandlers() - { - View.CalculateSize -= CalculateSize; - View.FilenameChanged -= FilenameChanged; - } - - private void DetachDistributionHandlers() - { - View.DistributionDeliveryMethodChanged -= DistributionDeliveryMethodChanged; - View.DistributionCnameChanged -= DistributionCnameChanged; - View.DistributionEnabledChanged -= DistributionApply; - View.DistributionLoggingCheckboxChanged -= DistributionApply; - View.DistributionLoggingPopupChanged -= DistributionLoggingPopupChanged; - View.DistributionDefaultRootChanged -= DistributionApply; - View.DistributionInvalidateObjects -= DistributionInvalidateObjects; - View.DistributionAnalyticsCheckboxChanged -= DistributionAnalyticsCheckboxChanged; - } - - private void DistributionAnalyticsCheckboxChanged() - { - if (ToggleDistributionSettings(false)) - { - _controller.background(new SetDistributionAnalyticsUrlBackgroundAction(_controller, this)); - } - } - - private void OtherExecuteChanged() - { - DetachPermissionHandlers(); - if (View.OtherExecute == CheckState.Indeterminate) - { - View.OtherExecute = CheckState.Unchecked; - } - PermissionsChanged(); - } - - private void OtherWriteChanged() - { - DetachPermissionHandlers(); - if (View.OtherWrite == CheckState.Indeterminate) - { - View.OtherWrite = CheckState.Unchecked; - } - PermissionsChanged(); - } - - private void OtherReadChanged() - { - DetachPermissionHandlers(); - if (View.OtherRead == CheckState.Indeterminate) - { - View.OtherRead = CheckState.Unchecked; - } - PermissionsChanged(); - } - - private void GroupExecuteChanged() - { - DetachPermissionHandlers(); - if (View.GroupExecute == CheckState.Indeterminate) - { - View.GroupExecute = CheckState.Unchecked; - } - PermissionsChanged(); - } - - private void GroupWriteChanged() - { - DetachPermissionHandlers(); - if (View.GroupWrite == CheckState.Indeterminate) - { - View.GroupWrite = CheckState.Unchecked; - } - PermissionsChanged(); - } - - private void GroupReadChanged() - { - DetachPermissionHandlers(); - if (View.GroupRead == CheckState.Indeterminate) - { - View.GroupRead = CheckState.Unchecked; - } - PermissionsChanged(); - } - - private void OwnerExecuteChanged() - { - DetachPermissionHandlers(); - if (View.OwnerExecute == CheckState.Indeterminate) - { - View.OwnerExecute = CheckState.Unchecked; - } - PermissionsChanged(); - } - - private void OwnerWriteChanged() - { - DetachPermissionHandlers(); - if (View.OwnerWrite == CheckState.Indeterminate) - { - View.OwnerWrite = CheckState.Unchecked; - } - PermissionsChanged(); - } - - private void OwnerReadChanged() - { - DetachPermissionHandlers(); - if (View.OwnerRead == CheckState.Indeterminate) - { - View.OwnerRead = CheckState.Unchecked; - } - PermissionsChanged(); - } - - private void DetachPermissionHandlers() - { - View.OwnerReadChanged -= OwnerReadChanged; - View.OwnerWriteChanged -= OwnerWriteChanged; - View.OwnerExecuteChanged -= OwnerExecuteChanged; - View.GroupReadChanged -= GroupReadChanged; - View.GroupWriteChanged -= GroupWriteChanged; - View.GroupExecuteChanged -= GroupExecuteChanged; - View.OtherReadChanged -= OtherReadChanged; - View.OtherWriteChanged -= OtherWriteChanged; - View.OtherExecuteChanged -= OtherExecuteChanged; - View.ApplyRecursivePermissions -= ApplyRecursivePermissions; - View.OctalPermissionsChanged -= OctalPermissionsChanged; - } - - private void ApplyRecursivePermissions() - { - ChangePermissions(GetPermissionFromCheckboxes(), true); - } - - private void OctalPermissionsChanged() - { - Permission permission = GetPermissionsFromOctalField(); - if (null == permission) - { - SystemSounds.Beep.Play(); - InitPermissions(); - } - else - { - bool change = false; - foreach (Path path in _files) - { - if (!path.attributes().getPermission().Equals(permission)) - { - change = true; - } - } - if (change) - { - ChangePermissions(permission, false); - } - } - } - - private Permission GetPermissionsFromOctalField() - { - if (!String.IsNullOrEmpty(View.OctalPermissions)) - { - if (View.OctalPermissions.Length >= 3) - { - if (Utils.IsInt(View.OctalPermissions)) - { - return new Permission(int.Parse(View.OctalPermissions)); - } - } - } - return null; - } - - private void PermissionsChanged() - { - ChangePermissions(GetPermissionFromCheckboxes(), false); - } - - /// - /// Write altered permissions to the server - /// - /// UNIX permissions to apply to files - /// Recursively apply to child of directories - private void ChangePermissions(Permission permission, bool recursive) - { - if (TogglePermissionSettings(false)) - { - _controller.background(new WritePermissionBackgroundAction(_controller, this, permission, recursive)); - } - } - - private Permission GetPermissionFromCheckboxes() - { - Permission.Action u = Permission.Action.none; - if (View.OwnerRead == CheckState.Checked) - { - u = u.or(Permission.Action.read); - } - if (View.OwnerWrite == CheckState.Checked) - { - u = u.or(Permission.Action.write); - } - if (View.OwnerExecute == CheckState.Checked) - { - u = u.or(Permission.Action.execute); - } - - Permission.Action g = Permission.Action.none; - if (View.GroupRead == CheckState.Checked) - { - g = g.or(Permission.Action.read); - } - if (View.GroupWrite == CheckState.Checked) - { - g = g.or(Permission.Action.write); - } - if (View.GroupExecute == CheckState.Checked) - { - g = g.or(Permission.Action.execute); - } - - Permission.Action o = Permission.Action.none; - if (View.OtherRead == CheckState.Checked) - { - o = o.or(Permission.Action.read); - } - if (View.OtherWrite == CheckState.Checked) - { - o = o.or(Permission.Action.write); - } - if (View.OtherExecute == CheckState.Checked) - { - o = o.or(Permission.Action.execute); - } - return new Permission(u, g, o); - } - - private void InitGeneral() - { - int count = NumberOfFiles; - if (count > 0) - { - DetachGeneralHandlers(); - - Path file = _files[0]; - View.Filename = Name; - - View.FilenameEnabled = (1 == count && - ((Move) _controller.Session.getFeature(typeof (Move))).isSupported(file)); - string path; - if (file.isSymbolicLink()) - { - path = file.getSymlinkTarget().getAbsolute(); - } - else - { - path = file.getParent().getAbsolute(); - } - View.Path = path; - View.PathToolTip = path; - View.Group = count > 1 ? _multipleFilesString : file.attributes().getGroup(); - if (count > 1) - { - View.Kind = _multipleFilesString; - View.Checksum = _multipleFilesString; - View.Modified = _multipleFilesString; - View.FileCreated = _multipleFilesString; - } - else - { - View.Kind = _descriptor.getKind(file); - if (-1 == file.attributes().getModificationDate()) - { - View.Modified = LocaleFactory.localizedString("Unknown"); - } - else - { - View.Modified = - UserDateFormatterFactory.get().getLongFormat(file.attributes().getModificationDate()); - } - if (-1 == file.attributes().getCreationDate()) - { - View.FileCreated = LocaleFactory.localizedString("Unknown"); - } - else - { - View.FileCreated = - UserDateFormatterFactory.get().getLongFormat(file.attributes().getCreationDate()); - } - } - View.FileOwner = count > 1 - ? _multipleFilesString - : Utils.IsBlank(file.attributes().getOwner()) - ? LocaleFactory.localizedString("Unknown") - : file.attributes().getOwner(); - ; - - if (count > 1) - { - View.FileIcon = IconCache.Instance.IconForName("multiple"); - } - else - { - View.FileIcon = IconCache.Instance.IconForPath(_files[0], IconCache.IconSize.Large); - } - } - - // Sum of files - InitSize(); - InitChecksum(); - InitPermissions(); - // Read HTTP URL - InitWebUrl(); - } - - private void InitS3() - { - DetachS3Handlers(); - - View.BucketLocation = LocaleFactory.localizedString("Unknown"); - View.BucketLoggingTooltip = LocaleFactory.localizedString("Unknown"); - - View.BucketAnalyticsSetupUrl = LocaleFactory.localizedString("None"); - View.BucketAnalyticsSetupUrlEnabled = false; - - IList none = new List {LocaleFactory.localizedString("None")}; - View.PopulateBucketLogging(none); - - View.S3PublicUrl = LocaleFactory.localizedString("None"); - View.S3PublicUrlEnabled = false; - View.S3PublicUrlValidity = LocaleFactory.localizedString("Unknown"); - View.S3TorrentUrl = LocaleFactory.localizedString("None"); - View.S3TorrentUrlEnabled = false; - - IList> classes = new List>(); - classes.Add(new KeyValuePair(LocaleFactory.localizedString("Unknown"), "Unknown")); - View.PopulateStorageClass(classes); - View.StorageClass = "Unknown"; - PopulateLifecycleTransitionPeriod(); - PopulateLifecycleDeletePeriod(); - - Session session = _controller.Session; - - if (ToggleS3Settings(false)) - { - if (session.getFeature(typeof (Redundancy)) != null) - { - List list = ((Redundancy) session.getFeature(typeof (Redundancy))).getClasses(); - for (int i = 0; i < list.size(); i++) - { - string redundancy = (string) list.get(i); - classes.Add(new KeyValuePair(LocaleFactory.localizedString(redundancy, "S3"), - redundancy)); - } - View.PopulateStorageClass(classes); - } - - if (NumberOfFiles > 1) - { - View.S3PublicUrl = _multipleFilesString; - View.S3PublicUrlTooltip = null; - View.S3TorrentUrl = _multipleFilesString; - View.S3TorrentUrlTooltip = null; - } - else - { - Path file = SelectedPath; - String redundancy = file.attributes().getStorageClass(); - if (Utils.IsNotBlank(redundancy)) - { - View.PopulateStorageClass(classes); - View.StorageClass = redundancy; - } - if (file.isFile()) - { - if (session.getHost().getProtocol().getType() == Protocol.Type.s3) - { - DescriptiveUrl signed = - ((UrlProvider) session.getFeature(typeof (UrlProvider))).toUrl(file) - .find(DescriptiveUrl.Type.signed); - if (!signed.equals(DescriptiveUrl.EMPTY)) - { - View.S3PublicUrl = signed.getUrl(); - View.S3PublicUrlEnabled = true; - View.S3PublicUrlTooltip = signed.getUrl(); - View.S3PublicUrlValidity = signed.getHelp(); - } - DescriptiveUrl torrent = - ((UrlProvider) session.getFeature(typeof (UrlProvider))).toUrl(file) - .find(DescriptiveUrl.Type.torrent); - if (!torrent.equals(DescriptiveUrl.EMPTY)) - { - View.S3TorrentUrl = torrent.getUrl(); - View.S3TorrentUrlEnabled = true; - View.S3TorrentUrlTooltip = torrent.getUrl(); - } - } - } - } - _controller.background(new FetchS3BackgroundAction(_controller, this)); - } - else - { - AttachS3Handlers(); - } - } - - /// - /// Toggle settings before and after update - /// - /// Enable controls and stop progress spinner - private bool ToggleS3Settings(bool stop) - { - Session session = _controller.Session; - Credentials credentials = session.getHost().getCredentials(); - bool enable = session.getHost().getProtocol().getType() == Protocol.Type.s3 || - session.getHost().getProtocol().getType() == Protocol.Type.googlestorage; - if (enable) - { - enable = !credentials.isAnonymousLogin(); - } - bool logging = false; - bool analytics = false; - bool versioning = false; - bool storageclass = false; - bool encryption = false; - bool lifecycle = false; - if (enable) - { - logging = session.getFeature(typeof (Logging)) != null; - analytics = session.getFeature(typeof (AnalyticsProvider)) != null; - versioning = session.getFeature(typeof (Versioning)) != null; - lifecycle = session.getFeature(typeof (Lifecycle)) != null; - encryption = session.getFeature(typeof (Encryption)) != null; - storageclass = session.getFeature(typeof (Redundancy)) != null; - } - View.BucketVersioningEnabled = stop && enable && versioning; - View.BucketMfaEnabled = stop && enable && versioning && View.BucketVersioning; - View.BucketLoggingCheckboxEnabled = stop && enable && logging; - View.BucketLoggingPopupEnabled = stop && enable && logging; - View.StorageClassEnabled = stop && enable && storageclass; - View.EncryptionEnabled = stop && enable && encryption; - - - IdentityConfiguration identityFeature = - (IdentityConfiguration) _controller.Session.getFeature(typeof (IdentityConfiguration)); - AnalyticsProvider analyticsFeature = - (AnalyticsProvider) _controller.Session.getFeature(typeof (AnalyticsProvider)); - if (analytics && ObjectUtils.equals(identityFeature.getCredentials(analyticsFeature.getName()), credentials)) - { - // No need to create new IAM credentials when same as session credentials - View.BucketAnalyticsCheckboxEnabled = false; - } - else - { - View.BucketAnalyticsCheckboxEnabled = stop && enable && analytics; - } - View.LifecycleDeleteCheckboxEnabled = stop && enable && lifecycle; - View.LifecycleDeletePopupEnabled = stop && enable && lifecycle; - View.LifecycleTransitionCheckboxEnabled = stop && enable && lifecycle; - View.LifecycleTransitionPopupEnabled = stop && enable && lifecycle; - if (stop) - { - View.S3AnimationActive = false; - } - else if (enable) - { - View.S3AnimationActive = true; - } - return enable; - } - - /// - /// Read content distribution settings - /// - private void InitDistribution() - { - DetachDistributionHandlers(); - - View.DistributionStatus = LocaleFactory.localizedString("Unknown"); - View.DistributionUrl = LocaleFactory.localizedString("Unknown"); - View.DistributionUrlEnabled = false; - View.DistributionCname = LocaleFactory.localizedString("None"); - View.DistributionCnameUrlEnabled = false; - - // Remember last selection - Distribution.Method selected = View.DistributionDeliveryMethod; - - IList> methods = - new List> - { - new KeyValuePair(LocaleFactory.localizedString("None"), null) - }; - View.PopulateDistributionDeliveryMethod(methods); - View.PopulateDefaultRoot(new List> - { - new KeyValuePair(LocaleFactory.localizedString("None"), String.Empty) - }); - - Session session = _controller.Session; - DistributionConfiguration cdn = - (DistributionConfiguration) session.getFeature(typeof (DistributionConfiguration)); - View.DistributionTitle = String.Format(LocaleFactory.localizedString("Enable {0} Distribution", "Status"), - cdn.getName()); - methods = new List>(); - Path container = containerService.getContainer(SelectedPath); - List list = cdn.getMethods(container); - for (int i = 0; i < list.size(); i++) - { - Distribution.Method method = (Distribution.Method) list.get(i); - methods.Add(new KeyValuePair(method.ToString(), method)); - } - View.PopulateDistributionDeliveryMethod(methods); - if (null == selected) - { - // Select first distribution option - View.DistributionDeliveryMethod = (Distribution.Method) cdn.getMethods(container).iterator().next(); - } - else - { - View.DistributionDeliveryMethod = selected; - } - IList none = new List {LocaleFactory.localizedString("None")}; - View.PopulateDistributionLogging(none); - DistributionDeliveryMethodChanged(); - View.DistributionAnalyticsSetupUrl = LocaleFactory.localizedString("None"); - View.DistributionAnalyticsSetupUrlEnabled = false; - //AttachDistributionHandlers(); - } - - private void InitPermissions() - { - DetachPermissionHandlers(); - - View.Permissions = LocaleFactory.localizedString("Unknown"); - View.OctalPermissions = LocaleFactory.localizedString("Unknown"); - if (TogglePermissionSettings(false)) - { - _controller.background(new FetchPermissionsBackgroundAction(_controller, this)); - } - } - - /// - /// Toggle settings before and after update - /// - /// Enable controls and stop progress spinner - /// True if controls are enabled for the given protocol in idle state - private bool TogglePermissionSettings(bool stop) - { - if (!stop) - { - DetachPermissionHandlers(); - } - Session session = _controller.Session; - Credentials credentials = session.getHost().getCredentials(); - bool enable = !credentials.isAnonymousLogin() && session.getFeature(typeof (UnixPermission)) != null; - View.RecursivePermissionsEnabled = stop && enable; - foreach (Path next in _files) - { - if (next.isFile()) - { - View.RecursivePermissionsEnabled = false; - break; - } - } - View.OctalPermissionsEnabled = stop && enable; - View.OwnerReadEnabled = stop && enable; - View.OwnerWriteEnabled = stop && enable; - View.OwnerExecuteEnabled = stop && enable; - View.GroupReadEnabled = stop && enable; - View.GroupWriteEnabled = stop && enable; - View.GroupExecuteEnabled = stop && enable; - View.OtherReadEnabled = stop && enable; - View.OtherWriteEnabled = stop && enable; - View.OtherExecuteEnabled = stop && enable; - - if (stop) - { - View.PermissionAnimationActive = false; - AttachPermissionHandlers(); - } - else if (enable) - { - View.PermissionAnimationActive = true; - } - return enable; - } - - private void InitWebUrl() - { - if (NumberOfFiles > 1) - { - View.WebUrl = _multipleFilesString; - View.WebUrlTooltip = null; - } - else - { - DescriptiveUrl http = - ((UrlProvider) _controller.Session.getFeature(typeof (UrlProvider))).toUrl(SelectedPath) - .find(DescriptiveUrl.Type.http); - if (!http.Equals(DescriptiveUrl.EMPTY)) - { - View.WebUrl = http.getUrl(); - View.WebUrlTooltip = LocaleFactory.localizedString("Open in Web Browser"); - } - else - { - View.WebUrl = LocaleFactory.localizedString("Unknown"); - } - } - } - - private void InitChecksum() - { - DetachGeneralHandlers(); - if (NumberOfFiles > 1) - { - View.Checksum = _multipleFilesString; - } - else - { - Path file = SelectedPath; - if (null == file.attributes().getChecksum()) - { - View.Checksum = LocaleFactory.localizedString("Unknown"); - } - else - { - View.Checksum = file.attributes().getChecksum().hash; - } - } - AttachGeneralHandlers(); - } - - /// - /// Updates the size field by iterating over all files and - /// reading the cached size value in the attributes of the path - /// - private void InitSize() - { - DetachGeneralHandlers(); - if (ToggleSizeSettings(false)) - { - _controller.background(new ReadSizeBackgroundAction(_controller, this)); - } - } - - /// - /// - /// Enable controls and stop progress spinner - /// True if progress animation has started and settings are toggled - private bool ToggleSizeSettings(bool stop) - { - View.SizeButtonEnabled = false; - foreach (Path aPath in _files) - { - if (aPath.isDirectory()) - { - View.SizeButtonEnabled = stop; - break; - } - } - View.SizeAnimationActive = !stop; - return true; - } - - private void UpdateSize(long size) - { - View.FileSize = SizeFormatterFactory.get().format(size, true); - } - - public class CustomHeaderEntry : INotifyPropertyChanged - { - private string _name; - private string _value; - - public CustomHeaderEntry(string name, string value) - { - _name = name; - _value = value; - } - - public string Name - { - get { return _name; } - set - { - if (Utils.IsNotBlank(value)) - { - _name = value; - NotifyPropertyChanged("Name"); - } - } - } - - public string Value - { - get { return _value; } - set - { - if (Utils.IsNotBlank(value)) - { - _value = value; - NotifyPropertyChanged("Value"); - } - } - } - - public event PropertyChangedEventHandler PropertyChanged; - - private void NotifyPropertyChanged(String info) - { - if (PropertyChanged != null) - { - PropertyChanged(this, new PropertyChangedEventArgs(info)); - } - } - } - - public static class Factory - { - private static readonly IDictionary Open = - new Dictionary(); - - private static readonly object SyncRoot = new Object(); - - public static InfoController Create(BrowserController controller, IList files) - { - if (PreferencesFactory.get().getBoolean("browser.info.inspector")) - { - if (Open.ContainsKey(controller)) - { - lock (SyncRoot) - { - InfoController ic = Open[controller]; - ic.Files = files; - return ic; - } - } - } - InfoController c = new InfoController(controller, files); - c.View.ViewClosedEvent += delegate - { - lock (SyncRoot) - { - Open.Remove(controller); - } - }; - - lock (SyncRoot) - { - Open.Add(controller, c); - } - return c; - } - - /// - /// - /// - /// - /// Null if the browser does not have an Info window. - public static InfoController Get(BrowserController controller) - { - InfoController result; - Open.TryGetValue(controller, out result); - return result; - } - } - - private class FetchPermissionsBackgroundAction : WorkerBackgroundAction - { - public FetchPermissionsBackgroundAction(BrowserController browserController, InfoController infoController) - : base( - browserController, browserController.Session, - new InnerReadPermissionWorker(infoController, Utils.ConvertToJavaList(infoController._files))) - { - } - - private class InnerReadPermissionWorker : ReadPermissionWorker - { - private readonly InfoController _infoController; - - public InnerReadPermissionWorker(InfoController infoController, List files) : base(files) - { - _infoController = infoController; - } - - public override void cleanup(object obj) - { - IInfoView view = _infoController.View; - ICollection permissions = Utils.ConvertFromJavaList((List) obj); - bool overwrite = true; - foreach (Permission permission in permissions) - { - view.OwnerRead = GetCheckboxState(view.OwnerRead, overwrite, - permission.getUser().implies(Permission.Action.read)); - view.OwnerWrite = GetCheckboxState(view.OwnerWrite, overwrite, - permission.getUser().implies(Permission.Action.write)); - view.OwnerExecute = GetCheckboxState(view.OwnerExecute, overwrite, - permission.getUser().implies(Permission.Action.execute)); - view.GroupRead = GetCheckboxState(view.GroupRead, overwrite, - permission.getGroup().implies(Permission.Action.read)); - view.GroupWrite = GetCheckboxState(view.GroupWrite, overwrite, - permission.getGroup().implies(Permission.Action.write)); - view.GroupExecute = GetCheckboxState(view.GroupExecute, overwrite, - permission.getGroup().implies(Permission.Action.execute)); - view.OtherRead = GetCheckboxState(view.OtherRead, overwrite, - permission.getOther().implies(Permission.Action.read)); - view.OtherWrite = GetCheckboxState(view.OtherWrite, overwrite, - permission.getOther().implies(Permission.Action.write)); - view.OtherExecute = GetCheckboxState(view.OtherExecute, overwrite, - permission.getOther().implies(Permission.Action.execute)); - - overwrite = false; - } - - if (permissions.Count > 1) - { - view.Permissions = _infoController._multipleFilesString; - } - else - { - foreach (Permission permission in permissions) - { - view.OctalPermissions = permission.getMode(); - view.Permissions = permission.toString(); - } - } - _infoController.TogglePermissionSettings(true); - } - - private static CheckState GetCheckboxState(CheckState state, bool overwrite, bool condition) - { - // Gets the state which can be CheckState.Checked, CheckState.Unchecked, or CheckState.Indeterminate. - if ((state == CheckState.Unchecked || overwrite) && !condition) - { - return CheckState.Unchecked; - } - if ((state == CheckState.Checked || overwrite) && condition) - { - return CheckState.Checked; - } - return CheckState.Indeterminate; - } - } - } - - private class FetchS3BackgroundAction : BrowserControllerBackgroundAction - { - private readonly Path _container; - private readonly IList _containers = new List(); - private readonly InfoController _infoController; - private readonly Path _selected; - private readonly IInfoView _view; - private Credentials _credentials; - private String _encryption; - private LifecycleConfiguration _lifecycle; - private Location.Name _location; - private LoggingConfiguration _logging; - private VersioningConfiguration _versioning; - - public FetchS3BackgroundAction(BrowserController browserController, InfoController infoController) - : base(browserController) - { - _infoController = infoController; - _view = infoController.View; - _selected = infoController.SelectedPath; - _container = _infoController.containerService.getContainer(_selected); - } - - public override object run() - { - Session s = BrowserController.Session; - if (s.getFeature(typeof (Location)) != null) - { - _location = ((Location) s.getFeature(typeof (Location))).getLocation(_container); - } - if (s.getFeature(typeof (Logging)) != null) - { - _logging = ((Logging) s.getFeature(typeof (Logging))).getConfiguration(_container); - AttributedList children = _infoController._controller.Session.list(_container.getParent(), - new DisabledListProgressListener()); - foreach (AbstractPath c in children) - { - _containers.Add(c.getName()); - } - } - if (s.getFeature(typeof (Versioning)) != null) - { - _versioning = ((Versioning) s.getFeature(typeof (Versioning))).getConfiguration(_container); - } - if (s.getFeature(typeof (Lifecycle)) != null) - { - _lifecycle = ((Lifecycle) s.getFeature(typeof (Lifecycle))).getConfiguration(_container); - } - if (s.getFeature(typeof (AnalyticsProvider)) != null) - { - if (s.getFeature(typeof (IdentityConfiguration)) != null) - { - _credentials = - ((IdentityConfiguration) s.getFeature(typeof (IdentityConfiguration))).getCredentials( - ((AnalyticsProvider) s.getFeature(typeof (AnalyticsProvider))).getName()); - } - } - if (_infoController.NumberOfFiles == 1) - { - _encryption = _selected.attributes().getEncryption(); - } - return true; - } - - public override void cleanup() - { - base.cleanup(); - try - { - if (_logging != null) - { - _view.BucketLoggingCheckbox = _logging.isEnabled(); - if (_containers.Count > 0) - { - _view.PopulateBucketLogging(_containers); - } - if (_logging.isEnabled()) - { - _view.BucketLoggingPopup = _logging.getLoggingTarget(); - } - else - { - // Default to write log files to origin bucket - _view.BucketLoggingPopup = _selected.getName(); - } - } - - if (_location != null) - { - _view.BucketLocation = LocaleFactory.localizedString(_location.toString(), "S3"); - } - - if (_versioning != null) - { - _view.BucketVersioning = _versioning.isEnabled(); - _view.BucketMfa = _versioning.isMultifactor(); - } - - _view.Encryption = Utils.IsNotBlank(_encryption); - if (null != _credentials) - { - Session s = BrowserController.Session; - _view.BucketAnalyticsSetupUrl = - ((AnalyticsProvider) s.getFeature(typeof (AnalyticsProvider))).getSetup( - s.getHost().getProtocol().getDefaultHostname(), s.getHost().getProtocol().getScheme(), - _container.getName(), _credentials).getUrl(); - } - _view.BucketAnalyticsCheckbox = null != _credentials; - - if (_lifecycle != null) - { - _view.LifecycleDeleteCheckbox = null != _lifecycle.getExpiration(); - if (_lifecycle.getExpiration() != null) - { - _view.LifecycleDelete = _lifecycle.getExpiration().toString(); - if (null == _view.LifecycleDelete) - { - _infoController._lifecycleDeletePeriods.Add( - new KeyValuePair( - MessageFormat.format(LocaleFactory.localizedString("after {0} Days", "S3"), - _lifecycle.getExpiration().toString()), - _lifecycle.getExpiration().toString())); - _infoController.PopulateLifecycleDeletePeriod(); - _view.LifecycleDelete = _lifecycle.getExpiration().toString(); - } - } - _view.LifecycleTransitionCheckbox = null != _lifecycle.getTransition(); - if (_lifecycle.getTransition() != null) - { - _view.LifecycleTransition = _lifecycle.getTransition().toString(); - if (null == _view.LifecycleTransition) - { - _infoController._lifecycleTransitionPeriods.Add( - new KeyValuePair( - MessageFormat.format(LocaleFactory.localizedString("after {0} Days", "S3"), - _lifecycle.getTransition().toString()), - _lifecycle.getTransition().toString())); - _infoController.PopulateLifecycleTransitionPeriod(); - _view.LifecycleTransition = _lifecycle.getTransition().toString(); - } - } - } - } - finally - { - _infoController.ToggleS3Settings(true); - _infoController.AttachS3Handlers(); - } - } - } - - private class InvalidateObjectsBackgroundAction : BrowserControllerBackgroundAction - { - private readonly InfoController _infoController; - private readonly Distribution.Method _method; - - public InvalidateObjectsBackgroundAction(BrowserController browserController, InfoController infoController) - : base(browserController) - { - _infoController = infoController; - _method = _infoController.View.DistributionDeliveryMethod; - } - - public override object run() - { - Session session = BrowserController.Session; - DistributionConfiguration cdn = - (DistributionConfiguration) session.getFeature(typeof (DistributionConfiguration)); - Purge feature = (Purge) cdn.getFeature(typeof (Purge), _method); - feature.invalidate(_infoController.containerService.getContainer(_infoController.SelectedPath), _method, - Utils.ConvertToJavaList(_infoController._files), _infoController._prompt); - return true; - } - - public override void cleanup() - { - base.cleanup(); - // Refresh the current distribution status - _infoController.DistributionDeliveryMethodChanged(); - } - - public override string getActivity() - { - return String.Format(LocaleFactory.localizedString("Writing CDN configuration of {0}", "Status"), - _infoController.containerService.getContainer(_infoController.SelectedPath).getName()); - } - } - - private class LifecycleBackgroundAction : BrowserControllerBackgroundAction - { - private readonly bool _deleteEnabled; - private readonly string _deletePeriod; - private readonly InfoController _infoController; - private readonly Path _selected; - private readonly bool _transitionEnabled; - private readonly string _transitionPeriod; - private readonly IInfoView _view; - - public LifecycleBackgroundAction(BrowserController browserController, InfoController infoController) - : base(browserController) - { - _infoController = infoController; - _view = infoController.View; - _selected = infoController.SelectedPath; - - _deleteEnabled = _view.LifecycleDeleteCheckbox; - _transitionEnabled = _view.LifecycleTransitionCheckbox; - _deletePeriod = _view.LifecycleDelete; - _transitionPeriod = _view.LifecycleTransition; - } - - public override object run() - { - Lifecycle lifecycle = (Lifecycle) BrowserController.Session.getFeature(typeof (Lifecycle)); - lifecycle.setConfiguration(_infoController.containerService.getContainer(_selected), - new LifecycleConfiguration(_transitionEnabled ? Integer.valueOf(_transitionPeriod) : null, - _deleteEnabled ? Integer.valueOf(_deletePeriod) : null)); - return true; - } - - public override void cleanup() - { - base.cleanup(); - _infoController.ToggleS3Settings(true); - _infoController.InitS3(); - } - } - - private class ReadAclBackgroundAction : WorkerBackgroundAction - { - public ReadAclBackgroundAction(BrowserController browserController, InfoController infoController) - : base( - browserController, browserController.Session, - new InnerReadAclWorker(browserController, infoController, - Utils.ConvertToJavaList(infoController._files))) - { - } - - private class InnerReadAclWorker : ReadAclWorker - { - private readonly InfoController _infoController; - - public InnerReadAclWorker(BrowserController browserController, InfoController infoController, List files) - : base(files) - { - _infoController = infoController; - } - - public override void cleanup(object obj) - { - if (obj != null) - { - IList entries = Utils.ConvertFromJavaList((List) obj, delegate(object item) - { - Acl.UserAndRole entry = (Acl.UserAndRole) item; - return new UserAndRoleEntry(entry.getUser(), entry.getRole()); - }); - _infoController.SetAcl(entries); - } - _infoController.ToggleAclSettings(true); - } - } - } - - private class ReadDistributionBackgroundAction : BrowserControllerBackgroundAction - { - private readonly Distribution.Method _deliveryMethod; - private readonly InfoController _infoController; - private readonly List _rootDocuments = new ArrayList(); - private readonly Session _session; - private readonly IInfoView _view; - private Distribution _distribution; - - public ReadDistributionBackgroundAction(BrowserController browserController, InfoController infoController) - : base(browserController) - { - _infoController = infoController; - _view = infoController.View; - _deliveryMethod = _view.DistributionDeliveryMethod; - _session = BrowserController.Session; - _distribution = new Distribution(_deliveryMethod, false); - } - - public override object run() - { - Path container = _infoController.containerService.getContainer(_infoController.SelectedPath); - - DistributionConfiguration cdn = - (DistributionConfiguration) _session.getFeature(typeof (DistributionConfiguration)); - _distribution = cdn.read(container, _deliveryMethod, _infoController._prompt); - if (cdn.getFeature(typeof (Index), _distribution.getMethod()) != null) - { - // Make sure container items are cached for default root object. - _rootDocuments.addAll(_session.list(container, new DisabledListProgressListener())); - } - return _distribution; - } - - public override void cleanup() - { - base.cleanup(); - try - { - _infoController.DetachDistributionHandlers(); - Path container = _infoController.containerService.getContainer(_infoController.SelectedPath); - DistributionConfiguration cdn = - (DistributionConfiguration) _session.getFeature(typeof (DistributionConfiguration)); - _view.DistributionTitle = - String.Format(LocaleFactory.localizedString("Enable {0} Distribution", "Status"), - cdn.getName(_deliveryMethod)); - //Path file = _infoController.SelectedPath; - _view.Distribution = _distribution.isEnabled(); - _view.DistributionStatus = _distribution.getStatus(); - _view.DistributionLoggingCheckboxEnabled = _distribution.isEnabled(); - _view.DistributionLoggingCheckbox = _distribution.isLogging(); - - - List containers = _distribution.getContainers(); - IList buckets = new List(); - bool containerForSelectionAvailable = false; - for (Iterator iter = containers.iterator(); iter.hasNext();) - { - Path c = (Path) iter.next(); - buckets.Add(c.getName()); - if (!containerForSelectionAvailable && c.Equals(c.getName())) - { - containerForSelectionAvailable = true; - } - } - _view.PopulateDistributionLogging(buckets); - if (Utils.IsNotBlank(_distribution.getLoggingContainer())) - { - // Select configured logging container if any - _view.DistributionLoggingPopup = _distribution.getLoggingContainer(); - } - else - { - if (containerForSelectionAvailable) - { - _view.DistributionLoggingPopup = container.getName(); - } - } - if (null == _view.DistributionLoggingPopup) - { - _view.DistributionLoggingPopup = LocaleFactory.localizedString("None"); - } - AnalyticsProvider analyticsFeature = - (AnalyticsProvider) cdn.getFeature(typeof (AnalyticsProvider), _deliveryMethod); - IdentityConfiguration identityFeature = - (IdentityConfiguration) cdn.getFeature(typeof (IdentityConfiguration), _deliveryMethod); - if (analyticsFeature != null && identityFeature != null) - { - Credentials credentials = identityFeature.getCredentials(analyticsFeature.getName()); - _view.DistributionAnalyticsCheckbox = credentials != null; - if (credentials != null) - { - _view.DistributionAnalyticsSetupUrl = - analyticsFeature.getSetup(cdn.getHostname(), _distribution.getMethod().getScheme(), - container.getName(), credentials).getUrl(); - } - } - DescriptiveUrl origin = cdn.toUrl(_infoController.SelectedPath).find(DescriptiveUrl.Type.origin); - if (!origin.equals(DescriptiveUrl.EMPTY)) - { - _view.DistributionOrigin = origin.getUrl(); - } - // Concatenate URLs - if (_infoController.NumberOfFiles > 1) - { - _view.DistributionUrl = _infoController._multipleFilesString; - _view.DistributionUrlTooltip = null; - _view.DistributionCnameUrl = _infoController._multipleFilesString; - } - else - { - DescriptiveUrl url = cdn.toUrl(_infoController.SelectedPath).find(DescriptiveUrl.Type.cdn); - if (!url.equals(DescriptiveUrl.EMPTY)) - { - _view.DistributionUrl = url.getUrl(); - _view.DistributionUrlEnabled = true; - _view.DistributionUrlTooltip = LocaleFactory.localizedString("CDN URL"); - } - else - { - _view.DistributionUrl = LocaleFactory.localizedString("None"); - _view.DistributionUrlTooltip = null; - } - } - string[] cnames = _distribution.getCNAMEs(); - if (0 == cnames.Length) - { - _view.DistributionCname = string.Empty; - _view.DistributionCnameUrl = string.Empty; - _view.DistributionCnameUrlTooltip = null; - } - else - { - _view.DistributionCname = string.Join(" ", cnames); - DescriptiveUrl url = cdn.toUrl(_infoController.SelectedPath).find(DescriptiveUrl.Type.cname); - if (!url.equals(DescriptiveUrl.EMPTY)) - { - // We only support one CNAME URL to be displayed - _view.DistributionCnameUrl = url.getUrl(); - _view.DistributionCnameUrlEnabled = true; - _view.DistributionCnameUrlTooltip = LocaleFactory.localizedString("CDN URL"); - } - } - KeyValuePair noneEntry = - new KeyValuePair(LocaleFactory.localizedString("None"), String.Empty); - - if (cdn.getFeature(typeof (Index), _view.DistributionDeliveryMethod) != null) - { - List> defaultRoots = new List> - { - noneEntry - }; - foreach (Path next in Utils.ConvertFromJavaList(_rootDocuments)) - { - if (next.isFile()) - { - defaultRoots.Add(new KeyValuePair(next.getName(), next.getName())); - } - } - _view.PopulateDefaultRoot(defaultRoots); - } - String defaultRoot = _distribution.getIndexDocument(); - if (Utils.IsNotBlank(defaultRoot)) - { - _view.DistributionDefaultRoot = defaultRoot; - } - else - { - _view.DistributionDefaultRoot = LocaleFactory.localizedString("None"); - } - StringBuilder tooltip = new StringBuilder(); - int i = 0; - foreach (Path f in _infoController._files) - { - if (i > 0) tooltip.Append(Environment.NewLine); - tooltip.Append(f.getAbsolute()); - i++; - } - - _infoController.View.DistributionInvalidateObjectsTooltip = tooltip.ToString(); - _infoController.View.DistributionInvalidationStatus = _distribution.getInvalidationStatus(); - _infoController.ToggleDistributionSettings(true); - } - finally - { - _infoController.AttachDistributionHandlers(); - } - } - - public override string getActivity() - { - return String.Format(LocaleFactory.localizedString("Reading CDN configuration of {0}", "Status"), - toString(Utils.ConvertToJavaList(_infoController.Files))); - } - } - - private class ReadMetadataBackgroundAction : WorkerBackgroundAction - { - public ReadMetadataBackgroundAction(BrowserController controller, InfoController infoController) - : base( - controller, controller.Session, - new InnerReadMetadataWorker(controller, infoController, - Utils.ConvertToJavaList(infoController._files))) - { - } - - private class InnerReadMetadataWorker : ReadMetadataWorker - { - private readonly InfoController _infoController; - - public InnerReadMetadataWorker(BrowserController browserController, InfoController infoController, - List files) : base(files) - { - _infoController = infoController; - } - - public override void cleanup(object obj) - { - Map updated = (Map) obj; - Iterator it = updated.entrySet().iterator(); - IList metadata = new List(); - if (updated != null) - { - while (it.hasNext()) - { - Map.Entry pair = (Map.Entry) it.next(); - metadata.Add(new CustomHeaderEntry((string) pair.getKey(), (string) pair.getValue())); - } - } - _infoController.ToggleMetadataSettings(true); - _infoController.SetMetadata(metadata); - } - } - } - - private class ReadSizeBackgroundAction : WorkerBackgroundAction - { - public ReadSizeBackgroundAction(BrowserController browserController, InfoController infoController) - : base( - browserController, browserController.Session, - new InnerReadSizeWorker(infoController, Utils.ConvertToJavaList(infoController._files))) - { - } - - private class InnerReadSizeWorker : ReadSizeWorker - { - private readonly InfoController _infoController; - - public InnerReadSizeWorker(InfoController infoController, List files) : base(files) - { - _infoController = infoController; - } - - public override void cleanup(object obj) - { - long size = ((Long) obj).longValue(); - _infoController.UpdateSize(size); - _infoController.ToggleSizeSettings(true); - _infoController.AttachGeneralHandlers(); - } - } - } - - private class RecursiveSizeAction : WorkerBackgroundAction - { - public RecursiveSizeAction(BrowserController controller, InfoController infoController, IList files) - : base( - controller, controller.Session, - new InnerCalculateSizeWorker(infoController, Utils.ConvertToJavaList(files))) - { - } - - private class InnerCalculateSizeWorker : CalculateSizeWorker - { - private readonly InfoController _infoController; - - public InnerCalculateSizeWorker(InfoController infoController, List files) - : base(files, infoController._controller) - { - _infoController = infoController; - } - - public override void cleanup(object obj) - { - _infoController.InitSize(); - _infoController.ToggleSizeSettings(true); - } - - protected override void update(long l) - { - _infoController.Invoke(() => _infoController.UpdateSize(l)); - } - } - } - - private class SetBucketAnalyticsUrlBackgroundAction : BrowserControllerBackgroundAction - { - private readonly bool _bucketAnalyticsCheckBox; - private readonly InfoController _infoController; - - public SetBucketAnalyticsUrlBackgroundAction(BrowserController browserController, - InfoController infoController) : base(browserController) - { - _infoController = infoController; - _bucketAnalyticsCheckBox = _infoController.View.BucketAnalyticsCheckbox; - } - - public override object run() - { - Session session = BrowserController.Session; - IdentityConfiguration iam = (IdentityConfiguration) session.getFeature(typeof (IdentityConfiguration)); - AnalyticsProvider analytics = (AnalyticsProvider) session.getFeature(typeof (AnalyticsProvider)); - if (_bucketAnalyticsCheckBox) - { - String document = PreferencesFactory.get().getProperty("analytics.provider.qloudstat.iam.policy"); - iam.create(analytics.getName(), document, _infoController._prompt); - } - else - { - iam.delete(analytics.getName(), _infoController._prompt); - } - return true; - } - - public override void cleanup() - { - base.cleanup(); - _infoController.ToggleS3Settings(true); - _infoController.InitS3(); - } - } - - private class SetBucketLoggingBackgroundAction : BrowserControllerBackgroundAction - { - private readonly bool _bucketLoggingCheckbox; - private readonly string _bucketLoggingPopup; - private readonly InfoController _infoController; - - public SetBucketLoggingBackgroundAction(BrowserController browserController, InfoController infoController) - : base(browserController) - { - _infoController = infoController; - _bucketLoggingCheckbox = _infoController.View.BucketLoggingCheckbox; - _bucketLoggingPopup = _infoController.View.BucketLoggingPopup; - } - - public override object run() - { - ((Logging) BrowserController.Session.getFeature(typeof (Logging))).setConfiguration( - _infoController.containerService.getContainer(_infoController.SelectedPath), - new LoggingConfiguration(_bucketLoggingCheckbox, _bucketLoggingPopup)); - return true; - } - - public override void cleanup() - { - base.cleanup(); - _infoController.ToggleS3Settings(true); - _infoController.InitS3(); - } - - public override string getActivity() - { - return String.Format(LocaleFactory.localizedString("Writing metadata of {0}", "Status"), - toString(Utils.ConvertToJavaList(_infoController.Files))); - } - } - - private class SetBucketVersioningAndMfaBackgroundAction : BrowserControllerBackgroundAction - { - private readonly bool _bucketMfa; - private readonly bool _bucketVersioning; - private readonly InfoController _infoController; - - public SetBucketVersioningAndMfaBackgroundAction(BrowserController browserController, - InfoController infoController) : base(browserController) - { - _infoController = infoController; - _bucketMfa = _infoController.View.BucketMfa; - _bucketVersioning = _infoController.View.BucketVersioning; - } - - public override object run() - { - foreach (Path next in _infoController._files) - { - ((Versioning) BrowserController.Session.getFeature(typeof (Versioning))).setConfiguration( - _infoController.containerService.getContainer(_infoController.SelectedPath), - _infoController._prompt, new VersioningConfiguration(_bucketVersioning, _bucketMfa)); - break; - } - return true; - } - - public override void cleanup() - { - base.cleanup(); - _infoController.ToggleS3Settings(true); - _infoController.InitS3(); - } - } - - private class SetDistributionAnalyticsUrlBackgroundAction : BrowserControllerBackgroundAction - { - private readonly bool _distributionAnalyticsCheckBox; - private readonly InfoController _infoController; - - public SetDistributionAnalyticsUrlBackgroundAction(BrowserController browserController, - InfoController infoController) : base(browserController) - { - _infoController = infoController; - _distributionAnalyticsCheckBox = _infoController.View.DistributionAnalyticsCheckbox; - } - - public override object run() - { - Session session = BrowserController.Session; - IdentityConfiguration iam = (IdentityConfiguration) session.getFeature(typeof (IdentityConfiguration)); - AnalyticsProvider analytics = (AnalyticsProvider) session.getFeature(typeof (AnalyticsProvider)); - if (_distributionAnalyticsCheckBox) - { - String document = PreferencesFactory.get().getProperty("analytics.provider.qloudstat.iam.policy"); - iam.create(analytics.getName(), document, _infoController._prompt); - } - else - { - iam.delete(analytics.getName(), _infoController._prompt); - } - return true; - } - - public override void cleanup() - { - base.cleanup(); - _infoController.ToggleDistributionSettings(true); - _infoController.InitDistribution(); - } - } - - private class SetEncryptionBackgroundAction : WorkerBackgroundAction - { - public SetEncryptionBackgroundAction(BrowserController controller, InfoController infoController, IList files, String algorithm) - : base(controller, controller.Session, controller.Cache, new InnerWriteEncryptionWorker(controller, infoController, Utils.ConvertToJavaList(files), algorithm)) - { - } - - private class InnerWriteEncryptionWorker : WriteEncryptionWorker - { - private readonly InfoController _infoController; - - public InnerWriteEncryptionWorker(BrowserController controller, InfoController infoController, List files, String algorithm) - : base(files, algorithm, true, controller) - { - _infoController = infoController; - } - - public override void cleanup(object obj) - { - _infoController.ToggleS3Settings(true); - _infoController.InitS3(); - } - } - } - - private class SetStorageClassBackgroundAction : WorkerBackgroundAction - { - public SetStorageClassBackgroundAction(BrowserController controller, InfoController infoController, IList files, String redundancy) - : base(controller, controller.Session, controller.Cache, new InnerWriteRedundancyWorker(controller, infoController, Utils.ConvertToJavaList(files), redundancy)) - { - } - - private class InnerWriteRedundancyWorker : WriteRedundancyWorker - { - private readonly InfoController _infoController; - - public InnerWriteRedundancyWorker(BrowserController controller, InfoController infoController, List files, String redundancy) - : base(files, redundancy, true, controller) - { - _infoController = infoController; - } - - public override void cleanup(object obj) - { - _infoController.ToggleS3Settings(true); - _infoController.InitS3(); - } - } - } - - public class UserAndRoleEntry : Acl.UserAndRole, INotifyPropertyChanged - { - public UserAndRoleEntry(Acl.User user, Acl.Role role) : base(user, role) - { - } - - public string User - { - get { return base.getUser().getDisplayName(); } - set - { - base.getUser().setIdentifier(value ?? string.Empty); - NotifyPropertyChanged("User"); - } - } - - public string Role - { - get { return base.getRole().getName(); } - set - { - base.getRole().setName(value); - NotifyPropertyChanged("Role"); - } - } - - public event PropertyChangedEventHandler PropertyChanged; - - private void NotifyPropertyChanged(String info) - { - if (PropertyChanged != null) - { - PropertyChanged(this, new PropertyChangedEventArgs(info)); - } - } - } - - private class WriteAclBackgroundAction : WorkerBackgroundAction - { - public WriteAclBackgroundAction(BrowserController browserController, InfoController infoController) - : base( - browserController, browserController.Session, - new InnerWriteAclWorker(browserController, infoController, - Utils.ConvertToJavaList(infoController._files), GetAcl(infoController))) - { - } - - private static Acl GetAcl(InfoController infoController) - { - Acl.UserAndRole[] aclEntries = new Acl.UserAndRole[infoController._acl.Count]; - for (int index = 0; index < infoController._acl.Count; index++) - { - aclEntries[index] = infoController._acl[index]; - } - Acl acl = new Acl(); - acl.addAll(aclEntries); - return acl; - } - - private class InnerWriteAclWorker : WriteAclWorker - { - private readonly InfoController _infoController; - - public InnerWriteAclWorker(BrowserController controller, InfoController infoController, List files, - Acl acl) : base(files, acl, true, controller) - { - _infoController = infoController; - } - - public override void cleanup(object obj) - { - _infoController.ToggleAclSettings(true); - _infoController.InitAcl(); - } - } - } - - private class WriteDistributionBackgroundAction : BrowserControllerBackgroundAction - { - private readonly string _cname; - private readonly String _defaultRoot; - private readonly Distribution.Method _deliveryMethod; - private readonly bool _distribution; - private readonly string _distributionLogging; - private readonly IList _files; - private readonly InfoController _infoController; - private readonly bool _logging; - private readonly IInfoView _view; - - public WriteDistributionBackgroundAction(BrowserController browserController, InfoController infoController, - IList files) : base(browserController) - { - _files = files; - _infoController = infoController; - _view = infoController.View; - - _deliveryMethod = _view.DistributionDeliveryMethod; - _logging = _view.DistributionLoggingCheckbox; - _cname = _view.DistributionCname; - _distribution = _view.Distribution; - _defaultRoot = Utils.IsBlank(_view.DistributionDefaultRoot) ? null : _view.DistributionDefaultRoot; - _distributionLogging = _view.DistributionLoggingPopup; - } - - public override object run() - { - Session session = BrowserController.Session; - DistributionConfiguration cdn = - (DistributionConfiguration) session.getFeature(typeof (DistributionConfiguration)); - Distribution configuration = new Distribution(_deliveryMethod, _distribution); - configuration.setIndexDocument(_defaultRoot); - configuration.setLogging(_logging); - configuration.setLoggingContainer(_distributionLogging); - configuration.setCNAMEs(StringUtils.split(_cname)); - Path container = _infoController.containerService.getContainer(_infoController.SelectedPath); - cdn.write(container, configuration, _infoController._prompt); - return true; - } - - public override void cleanup() - { - base.cleanup(); - // Refresh the current distribution status - _infoController.DistributionDeliveryMethodChanged(); - } - - public override string getActivity() - { - return String.Format(LocaleFactory.localizedString("Writing CDN configuration of {0}", "Status"), - toString(Utils.ConvertToJavaList(_files))); - } - } - - private class WriteMetadataBackgroundAction : WorkerBackgroundAction - { - public WriteMetadataBackgroundAction(BrowserController controller, InfoController infoController) - : base( - controller, controller.Session, - new InnerWriteMetadataWorker(infoController, Utils.ConvertToJavaList(infoController._files), - infoController.ConvertMetadataToMap())) - { - } - - private class InnerWriteMetadataWorker : WriteMetadataWorker - { - private readonly InfoController _infoController; - - public InnerWriteMetadataWorker(InfoController infoController, List files, Map metadata) - : base(files, metadata, infoController._controller) - { - _infoController = infoController; - } - - public override void cleanup(object obj) - { - _infoController.ToggleMetadataSettings(true); - } - } - } - - private class WritePermissionBackgroundAction : WorkerBackgroundAction - { - public WritePermissionBackgroundAction(BrowserController browserController, InfoController infoController, - Permission permission, bool recursive) - : base( - browserController, browserController.Session, - new InnerWritePermissionWorker(infoController, Utils.ConvertToJavaList(infoController._files), - permission, recursive)) - { - } - - private class InnerWritePermissionWorker : WritePermissionWorker - { - private readonly InfoController _infoController; - - public InnerWritePermissionWorker(InfoController infoController, List files, Permission permission, - bool recursive) - : base(files, permission, recursive, infoController._controller) - { - _infoController = infoController; - } - - public override void cleanup(object obj) - { - _infoController.TogglePermissionSettings(true); - } - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Globalization; +using System.Media; +using System.Windows.Forms; +using ch.cyberduck.core; +using ch.cyberduck.core.analytics; +using ch.cyberduck.core.cdn; +using ch.cyberduck.core.cdn.features; +using ch.cyberduck.core.features; +using ch.cyberduck.core.formatter; +using ch.cyberduck.core.identity; +using ch.cyberduck.core.lifecycle; +using ch.cyberduck.core.local; +using ch.cyberduck.core.logging; +using ch.cyberduck.core.preferences; +using ch.cyberduck.core.s3; +using ch.cyberduck.core.threading; +using ch.cyberduck.core.worker; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Ui.Controller.Threading; +using java.lang; +using java.text; +using java.util; +using org.apache.commons.lang3; +using org.apache.log4j; +using StructureMap; +using Boolean = java.lang.Boolean; +using Object = System.Object; +using String = System.String; +using StringBuilder = System.Text.StringBuilder; + +namespace Ch.Cyberduck.Ui.Controller +{ + public sealed class InfoController : WindowController + { + private static readonly Logger Log = Logger.getLogger(typeof (InfoController).FullName); + private readonly BrowserController _controller; + private readonly FileDescriptor _descriptor = FileDescriptorFactory.get(); + private readonly string _multipleFilesString = "(" + LocaleFactory.localizedString("Multiple files") + ")"; + private readonly LoginCallback _prompt; + private readonly PathContainerService containerService = new PathContainerService(); + private BindingList _acl = new BindingList(); + private IList _files; + private IList> _lifecycleDeletePeriods; + private IList> _lifecycleTransitionPeriods; + private BindingList _metadata = new BindingList(); + + private InfoController(BrowserController controller, IList files) + { + View = ObjectFactory.GetInstance(); + _controller = controller; + _prompt = LoginCallbackFactory.get(this); + Files = files; + + _controller.View.ViewClosedEvent += delegate + { + if (!View.IsDisposed) + { + View.Close(); + } + }; + + View.ActiveTabChanged += View_ActiveTabChanged; + } + + public override bool Singleton + { + get { return PreferencesFactory.get().getBoolean("browser.info.inspector"); } + } + + public IList Files + { + private get { return _files; } + set + { + if (value.Count == 0) + { + return; + } + + _files = value; + + ConfigureToolbar(); + ConfigureHelp(); + InitTab(View.ActiveTab); + } + } + + private int NumberOfFiles + { + get { return null == _files ? 0 : _files.Count; } + } + + private string Name + { + get + { + if (NumberOfFiles > 1) + { + return _multipleFilesString; + } + foreach (Path file in _files) + { + return file.getName(); + } + return null; + } + } + + private Path SelectedPath + { + get + { + if (_files.Count == 0) return null; + + return _files[0]; + } + } + + private void View_ActiveTabChanged() + { + InitTab(View.ActiveTab); + } + + private void InitTab(InfoTab activeTab) + { + switch (activeTab) + { + case InfoTab.General: + InitGeneral(); + InitPermissions(); + break; + case InfoTab.Permissions: + InitPermissions(); + break; + case InfoTab.Acl: + InitAcl(); + break; + case InfoTab.Distribution: + InitDistribution(); + break; + case InfoTab.S3: + InitS3(); + break; + case InfoTab.Metadata: + InitMetadata(); + break; + } + } + + private Map ConvertMetadataToMap() + { + TreeMap map = new TreeMap(); + foreach (CustomHeaderEntry header in _metadata) + { + map.Add(header.Name, header.Value); + } + return map; + } + + private void ConfigureToolbar() + { + Session session = _controller.Session; + bool anonymous = session.getHost().getCredentials().isAnonymousLogin(); + + if (session.getHost().getProtocol().getType() == Protocol.Type.s3 || + session.getHost().getProtocol().getType() == Protocol.Type.googlestorage) + { + // Set icon of cloud service provider + View.ToolbarS3Label = session.getHost().getProtocol().getName(); + View.ToolbarS3Image = + IconCache.Instance.GetProtocolImages(32).Images[session.getHost().getProtocol().getProvider()]; + } + else + { + // Currently these settings are only available for Amazon S3 + View.ToolbarS3Label = ProtocolFactory.S3_SSL.getName(); + View.ToolbarS3Image = + IconCache.Instance.GetProtocolImages(32).Images[ProtocolFactory.S3_SSL.getProvider()]; + } + //ACL or permission view + View.AclPanel = session.getFeature(typeof (AclPermission)) != null; + if (anonymous) + { + // Anonymous never has the right to update permissions + View.ToolbarPermissionsEnabled = false; + } + else + { + View.ToolbarPermissionsEnabled = session.getFeature(typeof (AclPermission)) != null || + session.getFeature(typeof (UnixPermission)) != null; + } + if (anonymous) + { + View.ToolbarDistributionEnabled = false; + View.ToolbarDistributionImage = + IconCache.Instance.GetProtocolImages(32).Images[ProtocolFactory.S3_SSL.getProvider()]; + } + else + { + bool distribution = session.getFeature(typeof (DistributionConfiguration)) != null; + View.ToolbarDistributionEnabled = distribution; + if (distribution) + { + View.ToolbarDistributionImage = + IconCache.Instance.GetProtocolImages(32).Images[session.getHost().getProtocol().getProvider()]; + } + else + { + View.ToolbarDistributionImage = + IconCache.Instance.GetProtocolImages(32).Images[ProtocolFactory.S3_SSL.getProvider()]; + } + } + if (anonymous) + { + View.ToolbarS3Enabled = false; + } + else + { + View.ToolbarS3Enabled = session.getHost().getProtocol().getType() == Protocol.Type.s3; + } + + if (anonymous) + { + // Anonymous never has the right to update permissions + View.ToolbarMetadataEnabled = false; + } + else + { + View.ToolbarMetadataEnabled = session.getFeature(typeof (Headers)) != null; + } + } + + /// + /// Read custom metadata HTTP headers from cloud provider + /// + private void InitMetadata() + { + SetMetadata(new List()); + if (ToggleMetadataSettings(false)) + { + PopulateMetadata(); + _controller.Background(new ReadMetadataBackgroundAction(_controller, this)); + } + } + + /// + /// Toggle settings before and after update + /// + /// Enable controls and stop progress spinner + /// True if progress animation has started and settings are toggled + private bool ToggleMetadataSettings(bool stop) + { + Session session = _controller.Session; + Credentials credentials = session.getHost().getCredentials(); + bool enable = !credentials.isAnonymousLogin() && session.getFeature(typeof (Headers)) != null; + View.MetadataTableEnabled = stop && enable; + View.MetadataAddEnabled = stop && enable; + bool selection = View.SelectedMetadataEntries.Count > 0; + View.MetadataRemoveEnabled = stop && enable && selection; + if (stop) + { + View.MetadataAnimationActive = false; + } + else if (enable) + { + View.MetadataAnimationActive = true; + } + return enable; + } + + private void SetMetadata(IList metadata) + { + _metadata = new BindingList(metadata); + View.MetadataDataSource = _metadata; + _metadata.ListChanged += delegate(object sender, ListChangedEventArgs args) + { + switch (args.ListChangedType) + { + case ListChangedType.ItemDeleted: + if (ToggleMetadataSettings(false)) + { + Background(new WriteMetadataBackgroundAction(_controller, this)); + } + break; + + case ListChangedType.ItemChanged: + if (args.NewIndex < _metadata.Count && Utils.IsNotBlank(_metadata[args.NewIndex].Name) && + Utils.IsNotBlank(_metadata[args.NewIndex].Value)) + { + if (ToggleMetadataSettings(false)) + { + Background(new WriteMetadataBackgroundAction(_controller, this)); + } + } + break; + } + }; + } + + private void AddAclEntry(Acl.User user, Acl.Role role) + { + Log.debug("AddAclItem:" + user.getDisplayName()); + UserAndRoleEntry entry = new UserAndRoleEntry(user, role); + _acl.Add(entry); + View.EditAclRow(entry, !user.isEditable()); + } + + /// + /// Add new metadata row and selects the name column + /// + private void AddMetadataItem(string name) + { + AddMetadataItem(name, string.Empty, false); + } + + /// + /// Add new metadata row and selects the name column + /// + private void AddMetadataItem(string name, string value) + { + AddMetadataItem(name, value, true); + } + + /// + /// + /// + /// HTTP header name + /// HTTP header value + /// Select the value field or the name header field + private void AddMetadataItem(string name, string value, bool selectValue) + { + Log.debug("AddMetadataItem:" + name); + CustomHeaderEntry newHeaderEntry = new CustomHeaderEntry(name, value); + _metadata.Add(newHeaderEntry); + View.EditMetadataRow(newHeaderEntry, selectValue); + } + + private void PopulateMetadata() + { + IDictionary metadata = new Dictionary(); + metadata.Add(LocaleFactory.localizedString("Custom Header"), + () => AddMetadataItem(LocaleFactory.localizedString("Unknown"))); + metadata.Add("Content-Disposition", () => AddMetadataItem("Content-Disposition", "attachment", true)); + metadata.Add(LocaleFactory.localizedString("Cache-Control"), + () => + AddMetadataItem("Cache-Control", + "public,max-age=" + PreferencesFactory.get().getInteger("s3.cache.seconds"))); + metadata.Add(LocaleFactory.localizedString("Expires"), delegate + { + DateTimeFormatInfo format = new CultureInfo("en-US").DateTimeFormat; + DateTime expires = DateTime.Now.AddSeconds(PreferencesFactory.get().getInteger("s3.cache.seconds")); + AddMetadataItem("Expires", expires.ToString("r", format)); // RFC1123 format + }); + metadata.Add("Pragma", () => AddMetadataItem("Pragma", String.Empty, true)); + metadata.Add("Content-Type", () => AddMetadataItem("Content-Type", String.Empty, true)); + metadata.Add("x-amz-website-redirect-location", + () => AddMetadataItem("x-amz-website-redirect-location", String.Empty, true)); + + metadata.Add(LocaleFactory.localizedString("Remove"), RemoveMetadata); + + View.PopulateMetadata(metadata); + } + + private void PopulateLifecycleTransitionPeriod() + { + if (_lifecycleTransitionPeriods == null) + { + _lifecycleTransitionPeriods = + Utils.ConvertFromJavaList(PreferencesFactory.get().getList("s3.lifecycle.transition.options"), + item => + new KeyValuePair( + MessageFormat.format(LocaleFactory.localizedString("after {0} Days", "S3"), + item.ToString()), item.ToString())); + } + View.PopulateLifecycleTransitionPeriod(_lifecycleTransitionPeriods); + } + + private void PopulateLifecycleDeletePeriod() + { + if (_lifecycleDeletePeriods == null) + { + _lifecycleDeletePeriods = + Utils.ConvertFromJavaList(PreferencesFactory.get().getList("s3.lifecycle.delete.options"), + item => + new KeyValuePair( + MessageFormat.format(LocaleFactory.localizedString("after {0} Days", "S3"), + item.ToString()), item.ToString())); + } + View.PopulateLifecycleDeletePeriod(_lifecycleDeletePeriods); + } + + private void RemoveMetadata() + { + List entries = View.SelectedMetadataEntries; + foreach (CustomHeaderEntry entry in entries) + { + _metadata.Remove(entry); + } + } + + private void ConfigureHelp() + { + View.ShowHelp += delegate(object sender, InfoHelpArgs args) + { + StringBuilder site = new StringBuilder(PreferencesFactory.get().getProperty("website.help")); + switch (args.Section) + { + case InfoHelpArgs.Context.General: + site.Append("/howto/info"); + break; + case InfoHelpArgs.Context.Permissions: + site.Append("/howto/info"); + break; + case InfoHelpArgs.Context.Metdadata: + site.Append("/").Append(_controller.Session.getHost().getProtocol().getProvider()); + break; + case InfoHelpArgs.Context.Cdn: + site.Append("/howto/cdn"); + break; + case InfoHelpArgs.Context.S3: + site.Append("/").Append(_controller.Session.getHost().getProtocol().getProvider()); + break; + } + BrowserLauncherFactory.get().open(site.ToString()); + }; + } + + /// + /// Read grants in the background + /// + private void InitAcl() + { + SetAcl(new List()); + View.AclUrl = LocaleFactory.localizedString("None"); + View.AclUrlEnabled = false; + if (ToggleAclSettings(false)) + { + PopulateAclUsers(); + PopulateAclRoles(); + if (NumberOfFiles > 1) + { + View.AclUrl = _multipleFilesString; + View.AclUrlTooltip = null; + } + else + { + foreach (Path file in _files) + { + if (file.isFile()) + { + DescriptiveUrl authenticated = + ((UrlProvider) _controller.Session.getFeature(typeof (UrlProvider))).toUrl(file) + .find(DescriptiveUrl.Type.authenticated); + if (!authenticated.equals(DescriptiveUrl.EMPTY)) + { + View.AclUrl = authenticated.getUrl(); + View.AclUrlEnabled = true; + View.AclUrlTooltip = authenticated.getHelp(); + } + } + } + } + _controller.Background(new ReadAclBackgroundAction(_controller, this)); + } + } + + private void PopulateAclUsers() + { + AclPermission feature = (AclPermission) _controller.Session.getFeature(typeof (AclPermission)); + IDictionary mapping = new Dictionary(); + List aclUsers = feature.getAvailableAclUsers(); + for (int i = 0; i < aclUsers.size(); i++) + { + Acl.User user = (Acl.User) aclUsers.get(i); + mapping.Add(user.getPlaceholder(), () => AddAclEntry(user, new Acl.Role(String.Empty))); + } + mapping.Add(LocaleFactory.localizedString("Remove"), RemoveAcl); + View.PopulateAclUsers(mapping); + } + + private void PopulateAclRoles() + { + AclPermission feature = (AclPermission) _controller.Session.getFeature(typeof (AclPermission)); + IList roles = Utils.ConvertFromJavaList( + feature.getAvailableAclRoles(Utils.ConvertToJavaList(Files)), item => ((Acl.Role) item).getName()); + View.PopulateAclRoles(roles); + } + + private void SetAcl(IList userAndRoleEntries) + { + _acl = new BindingList(userAndRoleEntries); + View.AclDataSource = _acl; + _acl.ListChanged += delegate(object sender, ListChangedEventArgs args) + { + switch (args.ListChangedType) + { + case ListChangedType.ItemDeleted: + if (ToggleAclSettings(false)) + { + Background(new WriteAclBackgroundAction(_controller, this)); + } + break; + + case ListChangedType.ItemChanged: + if (Utils.IsNotBlank(_acl[args.NewIndex].getUser().getIdentifier()) && + Utils.IsNotBlank(_acl[args.NewIndex].getRole().getName())) + { + if (ToggleAclSettings(false)) + { + Background(new WriteAclBackgroundAction(_controller, this)); + } + } + break; + } + }; + } + + /// + /// Toggle settings before and after update + /// + /// Enable controls and stop progress spinner + /// True if progress animation has started and settings are toggled + private bool ToggleAclSettings(bool stop) + { + Session session = _controller.Session; + Credentials credentials = session.getHost().getCredentials(); + bool enable = !credentials.isAnonymousLogin() && session.getFeature(typeof (AclPermission)) != null; + View.AclTableEnabled = stop && enable; + View.AclAddEnabled = stop && enable; + bool selection = View.SelectedAclEntries.Count > 0; + View.AclRemoveEnabled = stop && enable && selection; + if (stop) + { + View.AclAnimationActive = false; + } + else if (enable) + { + View.AclAnimationActive = true; + } + return enable; + } + + private void CalculateSize() + { + if (ToggleSizeSettings(false)) + { + _controller.background(new RecursiveSizeAction(_controller, this, _files)); + } + } + + private void FilenameChanged() + { + if (NumberOfFiles == 1) + { + Path current = _files[0]; + + if (!View.Filename.Equals(current.getName())) + { + if (View.Filename.Contains(Path.DELIMITER.ToString())) + { + SystemSounds.Beep.Play(); + return; + } + if (string.IsNullOrEmpty(View.Filename)) + { + View.Filename = current.getName(); + } + else + { + Path renamed = new Path(current.getParent(), View.Filename, current.getType()); + _controller.RenamePath(current, renamed); + InitWebUrl(); + } + } + } + } + + private void BucketLoggingCheckboxChanged() + { + if (ToggleS3Settings(false)) + { + _controller.background(new SetBucketLoggingBackgroundAction(_controller, this)); + } + } + + private void DistributionApply() + { + if (ToggleDistributionSettings(false)) + { + _controller.background(new WriteDistributionBackgroundAction(_controller, this, _files)); + } + } + + private void DistributionCnameChanged() + { + if (ToggleDistributionSettings(false)) + { + _controller.background(new WriteDistributionBackgroundAction(_controller, this, _files)); + } + } + + private void DistributionDeliveryMethodChanged() + { + if (ToggleDistributionSettings(false)) + { + _controller.background(new ReadDistributionBackgroundAction(_controller, this)); + } + } + + /// + /// Toggle settings before and after update + /// + /// Enable controls and stop progress spinner + /// True if controls are enabled for the given protocol in idle state + private bool ToggleDistributionSettings(bool stop) + { + Session session = _controller.Session; + Credentials credentials = session.getHost().getCredentials(); + DistributionConfiguration cdn = + (DistributionConfiguration) session.getFeature(typeof (DistributionConfiguration)); + bool enable = !credentials.isAnonymousLogin() && cdn != null; + Path container = containerService.getContainer(SelectedPath); + if (enable) + { + // Not enabled if multiple files selected with not same parent container + foreach (Path next in _files) + { + if (containerService.getContainer(next).Equals(container)) + { + continue; + } + enable = false; + break; + } + } + View.DistributionEnabled = stop && enable; + View.DistributionDeliveryMethodEnabled = stop && enable; + View.DistributionLoggingCheckboxEnabled = stop && enable && + cdn.getFeature(typeof (DistributionLogging), + View.DistributionDeliveryMethod) != null; + View.DistributionLoggingPopupEnabled = stop && enable && + cdn.getFeature(typeof (DistributionLogging), + View.DistributionDeliveryMethod) != null; + View.DistributionCnameEnabled = stop && enable && + cdn.getFeature(typeof (Cname), View.DistributionDeliveryMethod) != null; + View.DistributionInvalidateObjectsEnabled = stop && enable && + cdn.getFeature(typeof (Purge), View.DistributionDeliveryMethod) != + null; + View.DistributionDefaultRootEnabled = stop && enable && + cdn.getFeature(typeof (Index), View.DistributionDeliveryMethod) != + null; + if (enable) + { + AnalyticsProvider analyticsFeature = (AnalyticsProvider) session.getFeature(typeof (AnalyticsProvider)); + IdentityConfiguration identityFeature = + (IdentityConfiguration) session.getFeature(typeof (IdentityConfiguration)); + + if (null == analyticsFeature || null == identityFeature) + { + View.DistributionAnalyticsCheckboxEnabled = false; + } + else + { + if (ObjectUtils.equals(identityFeature.getCredentials(analyticsFeature.getName()), credentials)) + { + // No need to create new IAM credentials when same as session credentials + View.DistributionAnalyticsCheckboxEnabled = false; + } + else + { + View.DistributionAnalyticsCheckboxEnabled = stop; + } + } + } + else + { + View.DistributionAnalyticsCheckboxEnabled = false; + } + if (stop) + { + View.DistributionAnimationActive = false; + } + else if (enable) + { + View.DistributionAnimationActive = true; + } + return enable; + } + + private void AttachPermissionHandlers() + { + View.OwnerReadChanged += OwnerReadChanged; + View.OwnerWriteChanged += OwnerWriteChanged; + View.OwnerExecuteChanged += OwnerExecuteChanged; + View.GroupReadChanged += GroupReadChanged; + View.GroupWriteChanged += GroupWriteChanged; + View.GroupExecuteChanged += GroupExecuteChanged; + View.OtherReadChanged += OtherReadChanged; + View.OtherWriteChanged += OtherWriteChanged; + View.OtherExecuteChanged += OtherExecuteChanged; + View.ApplyRecursivePermissions += ApplyRecursivePermissions; + View.OctalPermissionsChanged += OctalPermissionsChanged; + } + + private void RemoveAcl() + { + List entries = View.SelectedAclEntries; + foreach (UserAndRoleEntry entry in entries) + { + _acl.Remove(entry); + } + } + + private void AttachDistributionHandlers() + { + DetachDistributionHandlers(); + View.DistributionDeliveryMethodChanged += DistributionDeliveryMethodChanged; + View.DistributionCnameChanged += DistributionCnameChanged; + View.DistributionEnabledChanged += DistributionApply; + View.DistributionLoggingCheckboxChanged += DistributionApply; + View.DistributionLoggingPopupChanged += DistributionLoggingPopupChanged; + View.DistributionDefaultRootChanged += DistributionApply; + View.DistributionInvalidateObjects += DistributionInvalidateObjects; + View.DistributionAnalyticsCheckboxChanged += DistributionAnalyticsCheckboxChanged; + } + + private void DistributionLoggingPopupChanged() + { + if (View.DistributionLoggingCheckbox) + { + // Only write change if logging is already enabled + DistributionApply(); + } + } + + private void DistributionInvalidateObjects() + { + if (ToggleDistributionSettings(false)) + { + _controller.Background(new InvalidateObjectsBackgroundAction(_controller, this)); + } + } + + private void AttachGeneralHandlers() + { + View.CalculateSize += CalculateSize; + View.FilenameChanged += FilenameChanged; + } + + private void AttachS3Handlers() + { + DetachS3Handlers(); + View.BucketLoggingCheckboxChanged += BucketLoggingCheckboxChanged; + View.BucketLoggingPopupChanged += BucketLoggingPopupChanged; + View.EncryptionChanged += EncryptionChanged; + View.StorageClassChanged += StorageClassChanged; + View.BucketVersioningChanged += BucketVersioningChanged; + View.BucketMfaChanged += BucketMfaChanged; + View.BucketAnalyticsCheckboxChanged += BucketAnalyticsCheckboxChanged; + View.LifecycleTransitionCheckboxChanged += LifecycleChanged; + View.LifecycleTransitionPopupChanged += LifecycleChanged; + View.LifecycleDeleteCheckboxChanged += LifecycleChanged; + View.LifecycleDeletePopupChanged += LifecycleChanged; + } + + private void BucketAnalyticsCheckboxChanged() + { + if (ToggleS3Settings(false)) + { + _controller.background(new SetBucketAnalyticsUrlBackgroundAction(_controller, this)); + } + } + + private void BucketLoggingPopupChanged() + { + if (View.BucketLoggingCheckbox) + { + // Only write change if logging is already enabled + BucketLoggingCheckboxChanged(); + } + } + + private void BucketVersioningChanged() + { + if (ToggleS3Settings(false)) + { + _controller.Background(new SetBucketVersioningAndMfaBackgroundAction(_controller, this)); + } + } + + private void StorageClassChanged() + { + if (ToggleS3Settings(false)) + { + _controller.Background(new SetStorageClassBackgroundAction(_controller, this, _files, View.StorageClass)); + } + } + + private void EncryptionChanged() + { + if (ToggleS3Settings(false)) + { + Encryption feature = (Encryption)_controller.Session.getFeature(typeof(Encryption)); + String encryption = View.Encryption ? (string) feature.getAlgorithms().iterator().next() : null; + _controller.Background(new SetEncryptionBackgroundAction(_controller, this, _files, encryption)); + } + } + + private void DetachS3Handlers() + { + View.BucketLoggingCheckboxChanged -= BucketLoggingCheckboxChanged; + View.BucketLoggingPopupChanged -= BucketLoggingPopupChanged; + View.EncryptionChanged -= EncryptionChanged; + View.StorageClassChanged -= StorageClassChanged; + View.BucketVersioningChanged -= BucketVersioningChanged; + View.BucketMfaChanged -= BucketMfaChanged; + View.BucketAnalyticsCheckboxChanged -= BucketAnalyticsCheckboxChanged; + View.LifecycleTransitionCheckboxChanged -= LifecycleChanged; + View.LifecycleTransitionPopupChanged -= LifecycleChanged; + View.LifecycleDeleteCheckboxChanged -= LifecycleChanged; + View.LifecycleDeletePopupChanged -= LifecycleChanged; + } + + private void LifecycleChanged() + { + if (ToggleS3Settings(false)) + { + _controller.Background(new LifecycleBackgroundAction(_controller, this)); + } + } + + private void BucketMfaChanged() + { + BucketVersioningChanged(); + } + + private void DetachGeneralHandlers() + { + View.CalculateSize -= CalculateSize; + View.FilenameChanged -= FilenameChanged; + } + + private void DetachDistributionHandlers() + { + View.DistributionDeliveryMethodChanged -= DistributionDeliveryMethodChanged; + View.DistributionCnameChanged -= DistributionCnameChanged; + View.DistributionEnabledChanged -= DistributionApply; + View.DistributionLoggingCheckboxChanged -= DistributionApply; + View.DistributionLoggingPopupChanged -= DistributionLoggingPopupChanged; + View.DistributionDefaultRootChanged -= DistributionApply; + View.DistributionInvalidateObjects -= DistributionInvalidateObjects; + View.DistributionAnalyticsCheckboxChanged -= DistributionAnalyticsCheckboxChanged; + } + + private void DistributionAnalyticsCheckboxChanged() + { + if (ToggleDistributionSettings(false)) + { + _controller.background(new SetDistributionAnalyticsUrlBackgroundAction(_controller, this)); + } + } + + private void OtherExecuteChanged() + { + DetachPermissionHandlers(); + if (View.OtherExecute == CheckState.Indeterminate) + { + View.OtherExecute = CheckState.Unchecked; + } + PermissionsChanged(); + } + + private void OtherWriteChanged() + { + DetachPermissionHandlers(); + if (View.OtherWrite == CheckState.Indeterminate) + { + View.OtherWrite = CheckState.Unchecked; + } + PermissionsChanged(); + } + + private void OtherReadChanged() + { + DetachPermissionHandlers(); + if (View.OtherRead == CheckState.Indeterminate) + { + View.OtherRead = CheckState.Unchecked; + } + PermissionsChanged(); + } + + private void GroupExecuteChanged() + { + DetachPermissionHandlers(); + if (View.GroupExecute == CheckState.Indeterminate) + { + View.GroupExecute = CheckState.Unchecked; + } + PermissionsChanged(); + } + + private void GroupWriteChanged() + { + DetachPermissionHandlers(); + if (View.GroupWrite == CheckState.Indeterminate) + { + View.GroupWrite = CheckState.Unchecked; + } + PermissionsChanged(); + } + + private void GroupReadChanged() + { + DetachPermissionHandlers(); + if (View.GroupRead == CheckState.Indeterminate) + { + View.GroupRead = CheckState.Unchecked; + } + PermissionsChanged(); + } + + private void OwnerExecuteChanged() + { + DetachPermissionHandlers(); + if (View.OwnerExecute == CheckState.Indeterminate) + { + View.OwnerExecute = CheckState.Unchecked; + } + PermissionsChanged(); + } + + private void OwnerWriteChanged() + { + DetachPermissionHandlers(); + if (View.OwnerWrite == CheckState.Indeterminate) + { + View.OwnerWrite = CheckState.Unchecked; + } + PermissionsChanged(); + } + + private void OwnerReadChanged() + { + DetachPermissionHandlers(); + if (View.OwnerRead == CheckState.Indeterminate) + { + View.OwnerRead = CheckState.Unchecked; + } + PermissionsChanged(); + } + + private void DetachPermissionHandlers() + { + View.OwnerReadChanged -= OwnerReadChanged; + View.OwnerWriteChanged -= OwnerWriteChanged; + View.OwnerExecuteChanged -= OwnerExecuteChanged; + View.GroupReadChanged -= GroupReadChanged; + View.GroupWriteChanged -= GroupWriteChanged; + View.GroupExecuteChanged -= GroupExecuteChanged; + View.OtherReadChanged -= OtherReadChanged; + View.OtherWriteChanged -= OtherWriteChanged; + View.OtherExecuteChanged -= OtherExecuteChanged; + View.ApplyRecursivePermissions -= ApplyRecursivePermissions; + View.OctalPermissionsChanged -= OctalPermissionsChanged; + } + + private void ApplyRecursivePermissions() + { + ChangePermissions(GetPermissionFromCheckboxes(), true); + } + + private void OctalPermissionsChanged() + { + Permission permission = GetPermissionsFromOctalField(); + if (null == permission) + { + SystemSounds.Beep.Play(); + InitPermissions(); + } + else + { + bool change = false; + foreach (Path path in _files) + { + if (!path.attributes().getPermission().Equals(permission)) + { + change = true; + } + } + if (change) + { + ChangePermissions(permission, false); + } + } + } + + private Permission GetPermissionsFromOctalField() + { + if (!String.IsNullOrEmpty(View.OctalPermissions)) + { + if (View.OctalPermissions.Length >= 3) + { + if (Utils.IsInt(View.OctalPermissions)) + { + return new Permission(int.Parse(View.OctalPermissions)); + } + } + } + return null; + } + + private void PermissionsChanged() + { + ChangePermissions(GetPermissionFromCheckboxes(), false); + } + + /// + /// Write altered permissions to the server + /// + /// UNIX permissions to apply to files + /// Recursively apply to child of directories + private void ChangePermissions(Permission permission, bool recursive) + { + if (TogglePermissionSettings(false)) + { + _controller.background(new WritePermissionBackgroundAction(_controller, this, permission, recursive)); + } + } + + private Permission GetPermissionFromCheckboxes() + { + Permission.Action u = Permission.Action.none; + if (View.OwnerRead == CheckState.Checked) + { + u = u.or(Permission.Action.read); + } + if (View.OwnerWrite == CheckState.Checked) + { + u = u.or(Permission.Action.write); + } + if (View.OwnerExecute == CheckState.Checked) + { + u = u.or(Permission.Action.execute); + } + + Permission.Action g = Permission.Action.none; + if (View.GroupRead == CheckState.Checked) + { + g = g.or(Permission.Action.read); + } + if (View.GroupWrite == CheckState.Checked) + { + g = g.or(Permission.Action.write); + } + if (View.GroupExecute == CheckState.Checked) + { + g = g.or(Permission.Action.execute); + } + + Permission.Action o = Permission.Action.none; + if (View.OtherRead == CheckState.Checked) + { + o = o.or(Permission.Action.read); + } + if (View.OtherWrite == CheckState.Checked) + { + o = o.or(Permission.Action.write); + } + if (View.OtherExecute == CheckState.Checked) + { + o = o.or(Permission.Action.execute); + } + return new Permission(u, g, o); + } + + private void InitGeneral() + { + int count = NumberOfFiles; + if (count > 0) + { + DetachGeneralHandlers(); + + Path file = _files[0]; + View.Filename = Name; + + View.FilenameEnabled = (1 == count && + ((Move) _controller.Session.getFeature(typeof (Move))).isSupported(file)); + string path; + if (file.isSymbolicLink()) + { + path = file.getSymlinkTarget().getAbsolute(); + } + else + { + path = file.getParent().getAbsolute(); + } + View.Path = path; + View.PathToolTip = path; + View.Group = count > 1 ? _multipleFilesString : file.attributes().getGroup(); + if (count > 1) + { + View.Kind = _multipleFilesString; + View.Checksum = _multipleFilesString; + View.Modified = _multipleFilesString; + View.FileCreated = _multipleFilesString; + } + else + { + View.Kind = _descriptor.getKind(file); + if (-1 == file.attributes().getModificationDate()) + { + View.Modified = LocaleFactory.localizedString("Unknown"); + } + else + { + View.Modified = + UserDateFormatterFactory.get().getLongFormat(file.attributes().getModificationDate()); + } + if (-1 == file.attributes().getCreationDate()) + { + View.FileCreated = LocaleFactory.localizedString("Unknown"); + } + else + { + View.FileCreated = + UserDateFormatterFactory.get().getLongFormat(file.attributes().getCreationDate()); + } + } + View.FileOwner = count > 1 + ? _multipleFilesString + : Utils.IsBlank(file.attributes().getOwner()) + ? LocaleFactory.localizedString("Unknown") + : file.attributes().getOwner(); + ; + + if (count > 1) + { + View.FileIcon = IconCache.Instance.IconForName("multiple"); + } + else + { + View.FileIcon = IconCache.Instance.IconForPath(_files[0], IconCache.IconSize.Large); + } + } + + // Sum of files + InitSize(); + InitChecksum(); + InitPermissions(); + // Read HTTP URL + InitWebUrl(); + } + + private void InitS3() + { + DetachS3Handlers(); + + View.BucketLocation = LocaleFactory.localizedString("Unknown"); + View.BucketLoggingTooltip = LocaleFactory.localizedString("Unknown"); + + View.BucketAnalyticsSetupUrl = LocaleFactory.localizedString("None"); + View.BucketAnalyticsSetupUrlEnabled = false; + + IList none = new List {LocaleFactory.localizedString("None")}; + View.PopulateBucketLogging(none); + + View.S3PublicUrl = LocaleFactory.localizedString("None"); + View.S3PublicUrlEnabled = false; + View.S3PublicUrlValidity = LocaleFactory.localizedString("Unknown"); + View.S3TorrentUrl = LocaleFactory.localizedString("None"); + View.S3TorrentUrlEnabled = false; + + IList> classes = new List>(); + classes.Add(new KeyValuePair(LocaleFactory.localizedString("Unknown"), "Unknown")); + View.PopulateStorageClass(classes); + View.StorageClass = "Unknown"; + PopulateLifecycleTransitionPeriod(); + PopulateLifecycleDeletePeriod(); + + Session session = _controller.Session; + + if (ToggleS3Settings(false)) + { + if (session.getFeature(typeof (Redundancy)) != null) + { + List list = ((Redundancy) session.getFeature(typeof (Redundancy))).getClasses(); + for (int i = 0; i < list.size(); i++) + { + string redundancy = (string) list.get(i); + classes.Add(new KeyValuePair(LocaleFactory.localizedString(redundancy, "S3"), + redundancy)); + } + View.PopulateStorageClass(classes); + } + + if (NumberOfFiles > 1) + { + View.S3PublicUrl = _multipleFilesString; + View.S3PublicUrlTooltip = null; + View.S3TorrentUrl = _multipleFilesString; + View.S3TorrentUrlTooltip = null; + } + else + { + Path file = SelectedPath; + String redundancy = file.attributes().getStorageClass(); + if (Utils.IsNotBlank(redundancy)) + { + View.PopulateStorageClass(classes); + View.StorageClass = redundancy; + } + if (file.isFile()) + { + if (session.getHost().getProtocol().getType() == Protocol.Type.s3) + { + DescriptiveUrl signed = + ((UrlProvider) session.getFeature(typeof (UrlProvider))).toUrl(file) + .find(DescriptiveUrl.Type.signed); + if (!signed.equals(DescriptiveUrl.EMPTY)) + { + View.S3PublicUrl = signed.getUrl(); + View.S3PublicUrlEnabled = true; + View.S3PublicUrlTooltip = signed.getUrl(); + View.S3PublicUrlValidity = signed.getHelp(); + } + DescriptiveUrl torrent = + ((UrlProvider) session.getFeature(typeof (UrlProvider))).toUrl(file) + .find(DescriptiveUrl.Type.torrent); + if (!torrent.equals(DescriptiveUrl.EMPTY)) + { + View.S3TorrentUrl = torrent.getUrl(); + View.S3TorrentUrlEnabled = true; + View.S3TorrentUrlTooltip = torrent.getUrl(); + } + } + } + } + _controller.background(new FetchS3BackgroundAction(_controller, this)); + } + else + { + AttachS3Handlers(); + } + } + + /// + /// Toggle settings before and after update + /// + /// Enable controls and stop progress spinner + private bool ToggleS3Settings(bool stop) + { + Session session = _controller.Session; + Credentials credentials = session.getHost().getCredentials(); + bool enable = session.getHost().getProtocol().getType() == Protocol.Type.s3 || + session.getHost().getProtocol().getType() == Protocol.Type.googlestorage; + if (enable) + { + enable = !credentials.isAnonymousLogin(); + } + bool logging = false; + bool analytics = false; + bool versioning = false; + bool storageclass = false; + bool encryption = false; + bool lifecycle = false; + if (enable) + { + logging = session.getFeature(typeof (Logging)) != null; + analytics = session.getFeature(typeof (AnalyticsProvider)) != null; + versioning = session.getFeature(typeof (Versioning)) != null; + lifecycle = session.getFeature(typeof (Lifecycle)) != null; + encryption = session.getFeature(typeof (Encryption)) != null; + storageclass = session.getFeature(typeof (Redundancy)) != null; + } + View.BucketVersioningEnabled = stop && enable && versioning; + View.BucketMfaEnabled = stop && enable && versioning && View.BucketVersioning; + View.BucketLoggingCheckboxEnabled = stop && enable && logging; + View.BucketLoggingPopupEnabled = stop && enable && logging; + View.StorageClassEnabled = stop && enable && storageclass; + View.EncryptionEnabled = stop && enable && encryption; + + + IdentityConfiguration identityFeature = + (IdentityConfiguration) _controller.Session.getFeature(typeof (IdentityConfiguration)); + AnalyticsProvider analyticsFeature = + (AnalyticsProvider) _controller.Session.getFeature(typeof (AnalyticsProvider)); + if (analytics && ObjectUtils.equals(identityFeature.getCredentials(analyticsFeature.getName()), credentials)) + { + // No need to create new IAM credentials when same as session credentials + View.BucketAnalyticsCheckboxEnabled = false; + } + else + { + View.BucketAnalyticsCheckboxEnabled = stop && enable && analytics; + } + View.LifecycleDeleteCheckboxEnabled = stop && enable && lifecycle; + View.LifecycleDeletePopupEnabled = stop && enable && lifecycle; + View.LifecycleTransitionCheckboxEnabled = stop && enable && lifecycle; + View.LifecycleTransitionPopupEnabled = stop && enable && lifecycle; + if (stop) + { + View.S3AnimationActive = false; + } + else if (enable) + { + View.S3AnimationActive = true; + } + return enable; + } + + /// + /// Read content distribution settings + /// + private void InitDistribution() + { + DetachDistributionHandlers(); + + View.DistributionStatus = LocaleFactory.localizedString("Unknown"); + View.DistributionUrl = LocaleFactory.localizedString("Unknown"); + View.DistributionUrlEnabled = false; + View.DistributionCname = LocaleFactory.localizedString("None"); + View.DistributionCnameUrlEnabled = false; + + // Remember last selection + Distribution.Method selected = View.DistributionDeliveryMethod; + + IList> methods = + new List> + { + new KeyValuePair(LocaleFactory.localizedString("None"), null) + }; + View.PopulateDistributionDeliveryMethod(methods); + View.PopulateDefaultRoot(new List> + { + new KeyValuePair(LocaleFactory.localizedString("None"), String.Empty) + }); + + Session session = _controller.Session; + DistributionConfiguration cdn = + (DistributionConfiguration) session.getFeature(typeof (DistributionConfiguration)); + View.DistributionTitle = String.Format(LocaleFactory.localizedString("Enable {0} Distribution", "Status"), + cdn.getName()); + methods = new List>(); + Path container = containerService.getContainer(SelectedPath); + List list = cdn.getMethods(container); + for (int i = 0; i < list.size(); i++) + { + Distribution.Method method = (Distribution.Method) list.get(i); + methods.Add(new KeyValuePair(method.ToString(), method)); + } + View.PopulateDistributionDeliveryMethod(methods); + if (null == selected) + { + // Select first distribution option + View.DistributionDeliveryMethod = (Distribution.Method) cdn.getMethods(container).iterator().next(); + } + else + { + View.DistributionDeliveryMethod = selected; + } + IList none = new List {LocaleFactory.localizedString("None")}; + View.PopulateDistributionLogging(none); + DistributionDeliveryMethodChanged(); + View.DistributionAnalyticsSetupUrl = LocaleFactory.localizedString("None"); + View.DistributionAnalyticsSetupUrlEnabled = false; + //AttachDistributionHandlers(); + } + + private void InitPermissions() + { + DetachPermissionHandlers(); + + View.Permissions = LocaleFactory.localizedString("Unknown"); + View.OctalPermissions = LocaleFactory.localizedString("Unknown"); + if (TogglePermissionSettings(false)) + { + _controller.background(new FetchPermissionsBackgroundAction(_controller, this)); + } + } + + /// + /// Toggle settings before and after update + /// + /// Enable controls and stop progress spinner + /// True if controls are enabled for the given protocol in idle state + private bool TogglePermissionSettings(bool stop) + { + if (!stop) + { + DetachPermissionHandlers(); + } + Session session = _controller.Session; + Credentials credentials = session.getHost().getCredentials(); + bool enable = !credentials.isAnonymousLogin() && session.getFeature(typeof (UnixPermission)) != null; + View.RecursivePermissionsEnabled = stop && enable; + foreach (Path next in _files) + { + if (next.isFile()) + { + View.RecursivePermissionsEnabled = false; + break; + } + } + View.OctalPermissionsEnabled = stop && enable; + View.OwnerReadEnabled = stop && enable; + View.OwnerWriteEnabled = stop && enable; + View.OwnerExecuteEnabled = stop && enable; + View.GroupReadEnabled = stop && enable; + View.GroupWriteEnabled = stop && enable; + View.GroupExecuteEnabled = stop && enable; + View.OtherReadEnabled = stop && enable; + View.OtherWriteEnabled = stop && enable; + View.OtherExecuteEnabled = stop && enable; + + if (stop) + { + View.PermissionAnimationActive = false; + AttachPermissionHandlers(); + } + else if (enable) + { + View.PermissionAnimationActive = true; + } + return enable; + } + + private void InitWebUrl() + { + if (NumberOfFiles > 1) + { + View.WebUrl = _multipleFilesString; + View.WebUrlTooltip = null; + } + else + { + DescriptiveUrl http = + ((UrlProvider) _controller.Session.getFeature(typeof (UrlProvider))).toUrl(SelectedPath) + .find(DescriptiveUrl.Type.http); + if (!http.Equals(DescriptiveUrl.EMPTY)) + { + View.WebUrl = http.getUrl(); + View.WebUrlTooltip = LocaleFactory.localizedString("Open in Web Browser"); + } + else + { + View.WebUrl = LocaleFactory.localizedString("Unknown"); + } + } + } + + private void InitChecksum() + { + DetachGeneralHandlers(); + if (NumberOfFiles > 1) + { + View.Checksum = _multipleFilesString; + } + else + { + Path file = SelectedPath; + if (null == file.attributes().getChecksum()) + { + View.Checksum = LocaleFactory.localizedString("Unknown"); + } + else + { + View.Checksum = file.attributes().getChecksum().hash; + } + } + AttachGeneralHandlers(); + } + + /// + /// Updates the size field by iterating over all files and + /// reading the cached size value in the attributes of the path + /// + private void InitSize() + { + DetachGeneralHandlers(); + if (ToggleSizeSettings(false)) + { + _controller.background(new ReadSizeBackgroundAction(_controller, this)); + } + } + + /// + /// + /// Enable controls and stop progress spinner + /// True if progress animation has started and settings are toggled + private bool ToggleSizeSettings(bool stop) + { + View.SizeButtonEnabled = false; + foreach (Path aPath in _files) + { + if (aPath.isDirectory()) + { + View.SizeButtonEnabled = stop; + break; + } + } + View.SizeAnimationActive = !stop; + return true; + } + + private void UpdateSize(long size) + { + View.FileSize = SizeFormatterFactory.get().format(size, true); + } + + public class CustomHeaderEntry : INotifyPropertyChanged + { + private string _name; + private string _value; + + public CustomHeaderEntry(string name, string value) + { + _name = name; + _value = value; + } + + public string Name + { + get { return _name; } + set + { + if (Utils.IsNotBlank(value)) + { + _name = value; + NotifyPropertyChanged("Name"); + } + } + } + + public string Value + { + get { return _value; } + set + { + if (Utils.IsNotBlank(value)) + { + _value = value; + NotifyPropertyChanged("Value"); + } + } + } + + public event PropertyChangedEventHandler PropertyChanged; + + private void NotifyPropertyChanged(String info) + { + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs(info)); + } + } + } + + public static class Factory + { + private static readonly IDictionary Open = + new Dictionary(); + + private static readonly object SyncRoot = new Object(); + + public static InfoController Create(BrowserController controller, IList files) + { + if (PreferencesFactory.get().getBoolean("browser.info.inspector")) + { + if (Open.ContainsKey(controller)) + { + lock (SyncRoot) + { + InfoController ic = Open[controller]; + ic.Files = files; + return ic; + } + } + } + InfoController c = new InfoController(controller, files); + c.View.ViewClosedEvent += delegate + { + lock (SyncRoot) + { + Open.Remove(controller); + } + }; + + lock (SyncRoot) + { + Open.Add(controller, c); + } + return c; + } + + /// + /// + /// + /// + /// Null if the browser does not have an Info window. + public static InfoController Get(BrowserController controller) + { + InfoController result; + Open.TryGetValue(controller, out result); + return result; + } + } + + private class FetchPermissionsBackgroundAction : WorkerBackgroundAction + { + public FetchPermissionsBackgroundAction(BrowserController browserController, InfoController infoController) + : base( + browserController, browserController.Session, + new InnerReadPermissionWorker(infoController, Utils.ConvertToJavaList(infoController._files))) + { + } + + private class InnerReadPermissionWorker : ReadPermissionWorker + { + private readonly InfoController _infoController; + + public InnerReadPermissionWorker(InfoController infoController, List files) : base(files) + { + _infoController = infoController; + } + + public override void cleanup(object obj) + { + IInfoView view = _infoController.View; + ICollection permissions = Utils.ConvertFromJavaList((List) obj); + bool overwrite = true; + foreach (Permission permission in permissions) + { + view.OwnerRead = GetCheckboxState(view.OwnerRead, overwrite, + permission.getUser().implies(Permission.Action.read)); + view.OwnerWrite = GetCheckboxState(view.OwnerWrite, overwrite, + permission.getUser().implies(Permission.Action.write)); + view.OwnerExecute = GetCheckboxState(view.OwnerExecute, overwrite, + permission.getUser().implies(Permission.Action.execute)); + view.GroupRead = GetCheckboxState(view.GroupRead, overwrite, + permission.getGroup().implies(Permission.Action.read)); + view.GroupWrite = GetCheckboxState(view.GroupWrite, overwrite, + permission.getGroup().implies(Permission.Action.write)); + view.GroupExecute = GetCheckboxState(view.GroupExecute, overwrite, + permission.getGroup().implies(Permission.Action.execute)); + view.OtherRead = GetCheckboxState(view.OtherRead, overwrite, + permission.getOther().implies(Permission.Action.read)); + view.OtherWrite = GetCheckboxState(view.OtherWrite, overwrite, + permission.getOther().implies(Permission.Action.write)); + view.OtherExecute = GetCheckboxState(view.OtherExecute, overwrite, + permission.getOther().implies(Permission.Action.execute)); + + overwrite = false; + } + + if (permissions.Count > 1) + { + view.Permissions = _infoController._multipleFilesString; + } + else + { + foreach (Permission permission in permissions) + { + view.OctalPermissions = permission.getMode(); + view.Permissions = permission.toString(); + } + } + _infoController.TogglePermissionSettings(true); + } + + private static CheckState GetCheckboxState(CheckState state, bool overwrite, bool condition) + { + // Gets the state which can be CheckState.Checked, CheckState.Unchecked, or CheckState.Indeterminate. + if ((state == CheckState.Unchecked || overwrite) && !condition) + { + return CheckState.Unchecked; + } + if ((state == CheckState.Checked || overwrite) && condition) + { + return CheckState.Checked; + } + return CheckState.Indeterminate; + } + } + } + + private class FetchS3BackgroundAction : BrowserControllerBackgroundAction + { + private readonly Path _container; + private readonly IList _containers = new List(); + private readonly InfoController _infoController; + private readonly Path _selected; + private readonly IInfoView _view; + private Credentials _credentials; + private String _encryption; + private LifecycleConfiguration _lifecycle; + private Location.Name _location; + private LoggingConfiguration _logging; + private VersioningConfiguration _versioning; + + public FetchS3BackgroundAction(BrowserController browserController, InfoController infoController) + : base(browserController) + { + _infoController = infoController; + _view = infoController.View; + _selected = infoController.SelectedPath; + _container = _infoController.containerService.getContainer(_selected); + } + + public override object run() + { + Session s = BrowserController.Session; + if (s.getFeature(typeof (Location)) != null) + { + _location = ((Location) s.getFeature(typeof (Location))).getLocation(_container); + } + if (s.getFeature(typeof (Logging)) != null) + { + _logging = ((Logging) s.getFeature(typeof (Logging))).getConfiguration(_container); + AttributedList children = _infoController._controller.Session.list(_container.getParent(), + new DisabledListProgressListener()); + foreach (AbstractPath c in children) + { + _containers.Add(c.getName()); + } + } + if (s.getFeature(typeof (Versioning)) != null) + { + _versioning = ((Versioning) s.getFeature(typeof (Versioning))).getConfiguration(_container); + } + if (s.getFeature(typeof (Lifecycle)) != null) + { + _lifecycle = ((Lifecycle) s.getFeature(typeof (Lifecycle))).getConfiguration(_container); + } + if (s.getFeature(typeof (AnalyticsProvider)) != null) + { + if (s.getFeature(typeof (IdentityConfiguration)) != null) + { + _credentials = + ((IdentityConfiguration) s.getFeature(typeof (IdentityConfiguration))).getCredentials( + ((AnalyticsProvider) s.getFeature(typeof (AnalyticsProvider))).getName()); + } + } + if (_infoController.NumberOfFiles == 1) + { + _encryption = _selected.attributes().getEncryption(); + } + return true; + } + + public override void cleanup() + { + base.cleanup(); + try + { + if (_logging != null) + { + _view.BucketLoggingCheckbox = _logging.isEnabled(); + if (_containers.Count > 0) + { + _view.PopulateBucketLogging(_containers); + } + if (_logging.isEnabled()) + { + _view.BucketLoggingPopup = _logging.getLoggingTarget(); + } + else + { + // Default to write log files to origin bucket + _view.BucketLoggingPopup = _selected.getName(); + } + } + + if (_location != null) + { + _view.BucketLocation = LocaleFactory.localizedString(_location.toString(), "S3"); + } + + if (_versioning != null) + { + _view.BucketVersioning = _versioning.isEnabled(); + _view.BucketMfa = _versioning.isMultifactor(); + } + + _view.Encryption = Utils.IsNotBlank(_encryption); + if (null != _credentials) + { + Session s = BrowserController.Session; + _view.BucketAnalyticsSetupUrl = + ((AnalyticsProvider) s.getFeature(typeof (AnalyticsProvider))).getSetup( + s.getHost().getProtocol().getDefaultHostname(), s.getHost().getProtocol().getScheme(), + _container.getName(), _credentials).getUrl(); + } + _view.BucketAnalyticsCheckbox = null != _credentials; + + if (_lifecycle != null) + { + _view.LifecycleDeleteCheckbox = null != _lifecycle.getExpiration(); + if (_lifecycle.getExpiration() != null) + { + _view.LifecycleDelete = _lifecycle.getExpiration().toString(); + if (null == _view.LifecycleDelete) + { + _infoController._lifecycleDeletePeriods.Add( + new KeyValuePair( + MessageFormat.format(LocaleFactory.localizedString("after {0} Days", "S3"), + _lifecycle.getExpiration().toString()), + _lifecycle.getExpiration().toString())); + _infoController.PopulateLifecycleDeletePeriod(); + _view.LifecycleDelete = _lifecycle.getExpiration().toString(); + } + } + _view.LifecycleTransitionCheckbox = null != _lifecycle.getTransition(); + if (_lifecycle.getTransition() != null) + { + _view.LifecycleTransition = _lifecycle.getTransition().toString(); + if (null == _view.LifecycleTransition) + { + _infoController._lifecycleTransitionPeriods.Add( + new KeyValuePair( + MessageFormat.format(LocaleFactory.localizedString("after {0} Days", "S3"), + _lifecycle.getTransition().toString()), + _lifecycle.getTransition().toString())); + _infoController.PopulateLifecycleTransitionPeriod(); + _view.LifecycleTransition = _lifecycle.getTransition().toString(); + } + } + } + } + finally + { + _infoController.ToggleS3Settings(true); + _infoController.AttachS3Handlers(); + } + } + } + + private class InvalidateObjectsBackgroundAction : BrowserControllerBackgroundAction + { + private readonly InfoController _infoController; + private readonly Distribution.Method _method; + + public InvalidateObjectsBackgroundAction(BrowserController browserController, InfoController infoController) + : base(browserController) + { + _infoController = infoController; + _method = _infoController.View.DistributionDeliveryMethod; + } + + public override object run() + { + Session session = BrowserController.Session; + DistributionConfiguration cdn = + (DistributionConfiguration) session.getFeature(typeof (DistributionConfiguration)); + Purge feature = (Purge) cdn.getFeature(typeof (Purge), _method); + feature.invalidate(_infoController.containerService.getContainer(_infoController.SelectedPath), _method, + Utils.ConvertToJavaList(_infoController._files), _infoController._prompt); + return true; + } + + public override void cleanup() + { + base.cleanup(); + // Refresh the current distribution status + _infoController.DistributionDeliveryMethodChanged(); + } + + public override string getActivity() + { + return String.Format(LocaleFactory.localizedString("Writing CDN configuration of {0}", "Status"), + _infoController.containerService.getContainer(_infoController.SelectedPath).getName()); + } + } + + private class LifecycleBackgroundAction : BrowserControllerBackgroundAction + { + private readonly bool _deleteEnabled; + private readonly string _deletePeriod; + private readonly InfoController _infoController; + private readonly Path _selected; + private readonly bool _transitionEnabled; + private readonly string _transitionPeriod; + private readonly IInfoView _view; + + public LifecycleBackgroundAction(BrowserController browserController, InfoController infoController) + : base(browserController) + { + _infoController = infoController; + _view = infoController.View; + _selected = infoController.SelectedPath; + + _deleteEnabled = _view.LifecycleDeleteCheckbox; + _transitionEnabled = _view.LifecycleTransitionCheckbox; + _deletePeriod = _view.LifecycleDelete; + _transitionPeriod = _view.LifecycleTransition; + } + + public override object run() + { + Lifecycle lifecycle = (Lifecycle) BrowserController.Session.getFeature(typeof (Lifecycle)); + lifecycle.setConfiguration(_infoController.containerService.getContainer(_selected), + new LifecycleConfiguration(_transitionEnabled ? Integer.valueOf(_transitionPeriod) : null, + _deleteEnabled ? Integer.valueOf(_deletePeriod) : null)); + return true; + } + + public override void cleanup() + { + base.cleanup(); + _infoController.ToggleS3Settings(true); + _infoController.InitS3(); + } + } + + private class ReadAclBackgroundAction : WorkerBackgroundAction + { + public ReadAclBackgroundAction(BrowserController browserController, InfoController infoController) + : base( + browserController, browserController.Session, + new InnerReadAclWorker(browserController, infoController, + Utils.ConvertToJavaList(infoController._files))) + { + } + + private class InnerReadAclWorker : ReadAclWorker + { + private readonly InfoController _infoController; + + public InnerReadAclWorker(BrowserController browserController, InfoController infoController, List files) + : base(files) + { + _infoController = infoController; + } + + public override void cleanup(object obj) + { + if (obj != null) + { + IList entries = Utils.ConvertFromJavaList((List) obj, delegate(object item) + { + Acl.UserAndRole entry = (Acl.UserAndRole) item; + return new UserAndRoleEntry(entry.getUser(), entry.getRole()); + }); + _infoController.SetAcl(entries); + } + _infoController.ToggleAclSettings(true); + } + } + } + + private class ReadDistributionBackgroundAction : BrowserControllerBackgroundAction + { + private readonly Distribution.Method _deliveryMethod; + private readonly InfoController _infoController; + private readonly List _rootDocuments = new ArrayList(); + private readonly Session _session; + private readonly IInfoView _view; + private Distribution _distribution; + + public ReadDistributionBackgroundAction(BrowserController browserController, InfoController infoController) + : base(browserController) + { + _infoController = infoController; + _view = infoController.View; + _deliveryMethod = _view.DistributionDeliveryMethod; + _session = BrowserController.Session; + _distribution = new Distribution(_deliveryMethod, false); + } + + public override object run() + { + Path container = _infoController.containerService.getContainer(_infoController.SelectedPath); + + DistributionConfiguration cdn = + (DistributionConfiguration) _session.getFeature(typeof (DistributionConfiguration)); + _distribution = cdn.read(container, _deliveryMethod, _infoController._prompt); + if (cdn.getFeature(typeof (Index), _distribution.getMethod()) != null) + { + // Make sure container items are cached for default root object. + _rootDocuments.addAll(_session.list(container, new DisabledListProgressListener())); + } + return _distribution; + } + + public override void cleanup() + { + base.cleanup(); + try + { + _infoController.DetachDistributionHandlers(); + Path container = _infoController.containerService.getContainer(_infoController.SelectedPath); + DistributionConfiguration cdn = + (DistributionConfiguration) _session.getFeature(typeof (DistributionConfiguration)); + _view.DistributionTitle = + String.Format(LocaleFactory.localizedString("Enable {0} Distribution", "Status"), + cdn.getName(_deliveryMethod)); + //Path file = _infoController.SelectedPath; + _view.Distribution = _distribution.isEnabled(); + _view.DistributionStatus = _distribution.getStatus(); + _view.DistributionLoggingCheckboxEnabled = _distribution.isEnabled(); + _view.DistributionLoggingCheckbox = _distribution.isLogging(); + + + List containers = _distribution.getContainers(); + IList buckets = new List(); + bool containerForSelectionAvailable = false; + for (Iterator iter = containers.iterator(); iter.hasNext();) + { + Path c = (Path) iter.next(); + buckets.Add(c.getName()); + if (!containerForSelectionAvailable && c.Equals(c.getName())) + { + containerForSelectionAvailable = true; + } + } + _view.PopulateDistributionLogging(buckets); + if (Utils.IsNotBlank(_distribution.getLoggingContainer())) + { + // Select configured logging container if any + _view.DistributionLoggingPopup = _distribution.getLoggingContainer(); + } + else + { + if (containerForSelectionAvailable) + { + _view.DistributionLoggingPopup = container.getName(); + } + } + if (null == _view.DistributionLoggingPopup) + { + _view.DistributionLoggingPopup = LocaleFactory.localizedString("None"); + } + AnalyticsProvider analyticsFeature = + (AnalyticsProvider) cdn.getFeature(typeof (AnalyticsProvider), _deliveryMethod); + IdentityConfiguration identityFeature = + (IdentityConfiguration) cdn.getFeature(typeof (IdentityConfiguration), _deliveryMethod); + if (analyticsFeature != null && identityFeature != null) + { + Credentials credentials = identityFeature.getCredentials(analyticsFeature.getName()); + _view.DistributionAnalyticsCheckbox = credentials != null; + if (credentials != null) + { + _view.DistributionAnalyticsSetupUrl = + analyticsFeature.getSetup(cdn.getHostname(), _distribution.getMethod().getScheme(), + container.getName(), credentials).getUrl(); + } + } + DescriptiveUrl origin = cdn.toUrl(_infoController.SelectedPath).find(DescriptiveUrl.Type.origin); + if (!origin.equals(DescriptiveUrl.EMPTY)) + { + _view.DistributionOrigin = origin.getUrl(); + } + // Concatenate URLs + if (_infoController.NumberOfFiles > 1) + { + _view.DistributionUrl = _infoController._multipleFilesString; + _view.DistributionUrlTooltip = null; + _view.DistributionCnameUrl = _infoController._multipleFilesString; + } + else + { + DescriptiveUrl url = cdn.toUrl(_infoController.SelectedPath).find(DescriptiveUrl.Type.cdn); + if (!url.equals(DescriptiveUrl.EMPTY)) + { + _view.DistributionUrl = url.getUrl(); + _view.DistributionUrlEnabled = true; + _view.DistributionUrlTooltip = LocaleFactory.localizedString("CDN URL"); + } + else + { + _view.DistributionUrl = LocaleFactory.localizedString("None"); + _view.DistributionUrlTooltip = null; + } + } + string[] cnames = _distribution.getCNAMEs(); + if (0 == cnames.Length) + { + _view.DistributionCname = string.Empty; + _view.DistributionCnameUrl = string.Empty; + _view.DistributionCnameUrlTooltip = null; + } + else + { + _view.DistributionCname = string.Join(" ", cnames); + DescriptiveUrl url = cdn.toUrl(_infoController.SelectedPath).find(DescriptiveUrl.Type.cname); + if (!url.equals(DescriptiveUrl.EMPTY)) + { + // We only support one CNAME URL to be displayed + _view.DistributionCnameUrl = url.getUrl(); + _view.DistributionCnameUrlEnabled = true; + _view.DistributionCnameUrlTooltip = LocaleFactory.localizedString("CDN URL"); + } + } + KeyValuePair noneEntry = + new KeyValuePair(LocaleFactory.localizedString("None"), String.Empty); + + if (cdn.getFeature(typeof (Index), _view.DistributionDeliveryMethod) != null) + { + List> defaultRoots = new List> + { + noneEntry + }; + foreach (Path next in Utils.ConvertFromJavaList(_rootDocuments)) + { + if (next.isFile()) + { + defaultRoots.Add(new KeyValuePair(next.getName(), next.getName())); + } + } + _view.PopulateDefaultRoot(defaultRoots); + } + String defaultRoot = _distribution.getIndexDocument(); + if (Utils.IsNotBlank(defaultRoot)) + { + _view.DistributionDefaultRoot = defaultRoot; + } + else + { + _view.DistributionDefaultRoot = LocaleFactory.localizedString("None"); + } + StringBuilder tooltip = new StringBuilder(); + int i = 0; + foreach (Path f in _infoController._files) + { + if (i > 0) tooltip.Append(Environment.NewLine); + tooltip.Append(f.getAbsolute()); + i++; + } + + _infoController.View.DistributionInvalidateObjectsTooltip = tooltip.ToString(); + _infoController.View.DistributionInvalidationStatus = _distribution.getInvalidationStatus(); + _infoController.ToggleDistributionSettings(true); + } + finally + { + _infoController.AttachDistributionHandlers(); + } + } + + public override string getActivity() + { + return String.Format(LocaleFactory.localizedString("Reading CDN configuration of {0}", "Status"), + toString(Utils.ConvertToJavaList(_infoController.Files))); + } + } + + private class ReadMetadataBackgroundAction : WorkerBackgroundAction + { + public ReadMetadataBackgroundAction(BrowserController controller, InfoController infoController) + : base( + controller, controller.Session, + new InnerReadMetadataWorker(controller, infoController, + Utils.ConvertToJavaList(infoController._files))) + { + } + + private class InnerReadMetadataWorker : ReadMetadataWorker + { + private readonly InfoController _infoController; + + public InnerReadMetadataWorker(BrowserController browserController, InfoController infoController, + List files) : base(files) + { + _infoController = infoController; + } + + public override void cleanup(object obj) + { + Map updated = (Map) obj; + Iterator it = updated.entrySet().iterator(); + IList metadata = new List(); + if (updated != null) + { + while (it.hasNext()) + { + Map.Entry pair = (Map.Entry) it.next(); + metadata.Add(new CustomHeaderEntry((string) pair.getKey(), (string) pair.getValue())); + } + } + _infoController.ToggleMetadataSettings(true); + _infoController.SetMetadata(metadata); + } + } + } + + private class ReadSizeBackgroundAction : WorkerBackgroundAction + { + public ReadSizeBackgroundAction(BrowserController browserController, InfoController infoController) + : base( + browserController, browserController.Session, + new InnerReadSizeWorker(infoController, Utils.ConvertToJavaList(infoController._files))) + { + } + + private class InnerReadSizeWorker : ReadSizeWorker + { + private readonly InfoController _infoController; + + public InnerReadSizeWorker(InfoController infoController, List files) : base(files) + { + _infoController = infoController; + } + + public override void cleanup(object obj) + { + long size = ((Long) obj).longValue(); + _infoController.UpdateSize(size); + _infoController.ToggleSizeSettings(true); + _infoController.AttachGeneralHandlers(); + } + } + } + + private class RecursiveSizeAction : WorkerBackgroundAction + { + public RecursiveSizeAction(BrowserController controller, InfoController infoController, IList files) + : base( + controller, controller.Session, + new InnerCalculateSizeWorker(infoController, Utils.ConvertToJavaList(files))) + { + } + + private class InnerCalculateSizeWorker : CalculateSizeWorker + { + private readonly InfoController _infoController; + + public InnerCalculateSizeWorker(InfoController infoController, List files) + : base(files, infoController._controller) + { + _infoController = infoController; + } + + public override void cleanup(object obj) + { + _infoController.InitSize(); + _infoController.ToggleSizeSettings(true); + } + + protected override void update(long l) + { + _infoController.Invoke(() => _infoController.UpdateSize(l)); + } + } + } + + private class SetBucketAnalyticsUrlBackgroundAction : BrowserControllerBackgroundAction + { + private readonly bool _bucketAnalyticsCheckBox; + private readonly InfoController _infoController; + + public SetBucketAnalyticsUrlBackgroundAction(BrowserController browserController, + InfoController infoController) : base(browserController) + { + _infoController = infoController; + _bucketAnalyticsCheckBox = _infoController.View.BucketAnalyticsCheckbox; + } + + public override object run() + { + Session session = BrowserController.Session; + IdentityConfiguration iam = (IdentityConfiguration) session.getFeature(typeof (IdentityConfiguration)); + AnalyticsProvider analytics = (AnalyticsProvider) session.getFeature(typeof (AnalyticsProvider)); + if (_bucketAnalyticsCheckBox) + { + String document = PreferencesFactory.get().getProperty("analytics.provider.qloudstat.iam.policy"); + iam.create(analytics.getName(), document, _infoController._prompt); + } + else + { + iam.delete(analytics.getName(), _infoController._prompt); + } + return true; + } + + public override void cleanup() + { + base.cleanup(); + _infoController.ToggleS3Settings(true); + _infoController.InitS3(); + } + } + + private class SetBucketLoggingBackgroundAction : BrowserControllerBackgroundAction + { + private readonly bool _bucketLoggingCheckbox; + private readonly string _bucketLoggingPopup; + private readonly InfoController _infoController; + + public SetBucketLoggingBackgroundAction(BrowserController browserController, InfoController infoController) + : base(browserController) + { + _infoController = infoController; + _bucketLoggingCheckbox = _infoController.View.BucketLoggingCheckbox; + _bucketLoggingPopup = _infoController.View.BucketLoggingPopup; + } + + public override object run() + { + ((Logging) BrowserController.Session.getFeature(typeof (Logging))).setConfiguration( + _infoController.containerService.getContainer(_infoController.SelectedPath), + new LoggingConfiguration(_bucketLoggingCheckbox, _bucketLoggingPopup)); + return true; + } + + public override void cleanup() + { + base.cleanup(); + _infoController.ToggleS3Settings(true); + _infoController.InitS3(); + } + + public override string getActivity() + { + return String.Format(LocaleFactory.localizedString("Writing metadata of {0}", "Status"), + toString(Utils.ConvertToJavaList(_infoController.Files))); + } + } + + private class SetBucketVersioningAndMfaBackgroundAction : BrowserControllerBackgroundAction + { + private readonly bool _bucketMfa; + private readonly bool _bucketVersioning; + private readonly InfoController _infoController; + + public SetBucketVersioningAndMfaBackgroundAction(BrowserController browserController, + InfoController infoController) : base(browserController) + { + _infoController = infoController; + _bucketMfa = _infoController.View.BucketMfa; + _bucketVersioning = _infoController.View.BucketVersioning; + } + + public override object run() + { + foreach (Path next in _infoController._files) + { + ((Versioning) BrowserController.Session.getFeature(typeof (Versioning))).setConfiguration( + _infoController.containerService.getContainer(_infoController.SelectedPath), + _infoController._prompt, new VersioningConfiguration(_bucketVersioning, _bucketMfa)); + break; + } + return true; + } + + public override void cleanup() + { + base.cleanup(); + _infoController.ToggleS3Settings(true); + _infoController.InitS3(); + } + } + + private class SetDistributionAnalyticsUrlBackgroundAction : BrowserControllerBackgroundAction + { + private readonly bool _distributionAnalyticsCheckBox; + private readonly InfoController _infoController; + + public SetDistributionAnalyticsUrlBackgroundAction(BrowserController browserController, + InfoController infoController) : base(browserController) + { + _infoController = infoController; + _distributionAnalyticsCheckBox = _infoController.View.DistributionAnalyticsCheckbox; + } + + public override object run() + { + Session session = BrowserController.Session; + IdentityConfiguration iam = (IdentityConfiguration) session.getFeature(typeof (IdentityConfiguration)); + AnalyticsProvider analytics = (AnalyticsProvider) session.getFeature(typeof (AnalyticsProvider)); + if (_distributionAnalyticsCheckBox) + { + String document = PreferencesFactory.get().getProperty("analytics.provider.qloudstat.iam.policy"); + iam.create(analytics.getName(), document, _infoController._prompt); + } + else + { + iam.delete(analytics.getName(), _infoController._prompt); + } + return true; + } + + public override void cleanup() + { + base.cleanup(); + _infoController.ToggleDistributionSettings(true); + _infoController.InitDistribution(); + } + } + + private class SetEncryptionBackgroundAction : WorkerBackgroundAction + { + public SetEncryptionBackgroundAction(BrowserController controller, InfoController infoController, IList files, String algorithm) + : base(controller, controller.Session, controller.Cache, new InnerWriteEncryptionWorker(controller, infoController, Utils.ConvertToJavaList(files), algorithm)) + { + } + + private class InnerWriteEncryptionWorker : WriteEncryptionWorker + { + private readonly InfoController _infoController; + + public InnerWriteEncryptionWorker(BrowserController controller, InfoController infoController, List files, String algorithm) + : base(files, algorithm, true, controller) + { + _infoController = infoController; + } + + public override void cleanup(object obj) + { + _infoController.ToggleS3Settings(true); + _infoController.InitS3(); + } + } + } + + private class SetStorageClassBackgroundAction : WorkerBackgroundAction + { + public SetStorageClassBackgroundAction(BrowserController controller, InfoController infoController, IList files, String redundancy) + : base(controller, controller.Session, controller.Cache, new InnerWriteRedundancyWorker(controller, infoController, Utils.ConvertToJavaList(files), redundancy)) + { + } + + private class InnerWriteRedundancyWorker : WriteRedundancyWorker + { + private readonly InfoController _infoController; + + public InnerWriteRedundancyWorker(BrowserController controller, InfoController infoController, List files, String redundancy) + : base(files, redundancy, true, controller) + { + _infoController = infoController; + } + + public override void cleanup(object obj) + { + _infoController.ToggleS3Settings(true); + _infoController.InitS3(); + } + } + } + + public class UserAndRoleEntry : Acl.UserAndRole, INotifyPropertyChanged + { + public UserAndRoleEntry(Acl.User user, Acl.Role role) : base(user, role) + { + } + + public string User + { + get { return base.getUser().getDisplayName(); } + set + { + base.getUser().setIdentifier(value ?? string.Empty); + NotifyPropertyChanged("User"); + } + } + + public string Role + { + get { return base.getRole().getName(); } + set + { + base.getRole().setName(value); + NotifyPropertyChanged("Role"); + } + } + + public event PropertyChangedEventHandler PropertyChanged; + + private void NotifyPropertyChanged(String info) + { + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs(info)); + } + } + } + + private class WriteAclBackgroundAction : WorkerBackgroundAction + { + public WriteAclBackgroundAction(BrowserController browserController, InfoController infoController) + : base( + browserController, browserController.Session, + new InnerWriteAclWorker(browserController, infoController, + Utils.ConvertToJavaList(infoController._files), GetAcl(infoController))) + { + } + + private static Acl GetAcl(InfoController infoController) + { + Acl.UserAndRole[] aclEntries = new Acl.UserAndRole[infoController._acl.Count]; + for (int index = 0; index < infoController._acl.Count; index++) + { + aclEntries[index] = infoController._acl[index]; + } + Acl acl = new Acl(); + acl.addAll(aclEntries); + return acl; + } + + private class InnerWriteAclWorker : WriteAclWorker + { + private readonly InfoController _infoController; + + public InnerWriteAclWorker(BrowserController controller, InfoController infoController, List files, + Acl acl) : base(files, acl, true, controller) + { + _infoController = infoController; + } + + public override void cleanup(object obj) + { + _infoController.ToggleAclSettings(true); + _infoController.InitAcl(); + } + } + } + + private class WriteDistributionBackgroundAction : BrowserControllerBackgroundAction + { + private readonly string _cname; + private readonly String _defaultRoot; + private readonly Distribution.Method _deliveryMethod; + private readonly bool _distribution; + private readonly string _distributionLogging; + private readonly IList _files; + private readonly InfoController _infoController; + private readonly bool _logging; + private readonly IInfoView _view; + + public WriteDistributionBackgroundAction(BrowserController browserController, InfoController infoController, + IList files) : base(browserController) + { + _files = files; + _infoController = infoController; + _view = infoController.View; + + _deliveryMethod = _view.DistributionDeliveryMethod; + _logging = _view.DistributionLoggingCheckbox; + _cname = _view.DistributionCname; + _distribution = _view.Distribution; + _defaultRoot = Utils.IsBlank(_view.DistributionDefaultRoot) ? null : _view.DistributionDefaultRoot; + _distributionLogging = _view.DistributionLoggingPopup; + } + + public override object run() + { + Session session = BrowserController.Session; + DistributionConfiguration cdn = + (DistributionConfiguration) session.getFeature(typeof (DistributionConfiguration)); + Distribution configuration = new Distribution(_deliveryMethod, _distribution); + configuration.setIndexDocument(_defaultRoot); + configuration.setLogging(_logging); + configuration.setLoggingContainer(_distributionLogging); + configuration.setCNAMEs(StringUtils.split(_cname)); + Path container = _infoController.containerService.getContainer(_infoController.SelectedPath); + cdn.write(container, configuration, _infoController._prompt); + return true; + } + + public override void cleanup() + { + base.cleanup(); + // Refresh the current distribution status + _infoController.DistributionDeliveryMethodChanged(); + } + + public override string getActivity() + { + return String.Format(LocaleFactory.localizedString("Writing CDN configuration of {0}", "Status"), + toString(Utils.ConvertToJavaList(_files))); + } + } + + private class WriteMetadataBackgroundAction : WorkerBackgroundAction + { + public WriteMetadataBackgroundAction(BrowserController controller, InfoController infoController) + : base( + controller, controller.Session, + new InnerWriteMetadataWorker(infoController, Utils.ConvertToJavaList(infoController._files), + infoController.ConvertMetadataToMap())) + { + } + + private class InnerWriteMetadataWorker : WriteMetadataWorker + { + private readonly InfoController _infoController; + + public InnerWriteMetadataWorker(InfoController infoController, List files, Map metadata) + : base(files, metadata, infoController._controller) + { + _infoController = infoController; + } + + public override void cleanup(object obj) + { + _infoController.ToggleMetadataSettings(true); + } + } + } + + private class WritePermissionBackgroundAction : WorkerBackgroundAction + { + public WritePermissionBackgroundAction(BrowserController browserController, InfoController infoController, + Permission permission, bool recursive) + : base( + browserController, browserController.Session, + new InnerWritePermissionWorker(infoController, Utils.ConvertToJavaList(infoController._files), + permission, recursive)) + { + } + + private class InnerWritePermissionWorker : WritePermissionWorker + { + private readonly InfoController _infoController; + + public InnerWritePermissionWorker(InfoController infoController, List files, Permission permission, + bool recursive) + : base(files, permission, recursive, infoController._controller) + { + _infoController = infoController; + } + + public override void cleanup(object obj) + { + _infoController.TogglePermissionSettings(true); + } + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/MainController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/MainController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/MainController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/MainController.cs index 88211c5b7c..64a8bfb15b 100644 --- a/source/ch/cyberduck/ui/controller/MainController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/MainController.cs @@ -1,786 +1,786 @@ -// -// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. -// http://cyberduck.io/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// feedback@cyberduck.io -// - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics; -using System.Reflection; -using System.Runtime.InteropServices; -using System.Threading; -using System.Windows.Forms; -using Windows7.DesktopIntegration; -using ch.cyberduck.core; -using ch.cyberduck.core.aquaticprime; -using ch.cyberduck.core.bonjour; -using ch.cyberduck.core.importer; -using ch.cyberduck.core.notification; -using ch.cyberduck.core.preferences; -using ch.cyberduck.core.serializer; -using Ch.Cyberduck.Ui.Core; -using Ch.Cyberduck.Ui.Core.Preferences; -using Ch.Cyberduck.Ui.Core.Urlhandler; -using Ch.Cyberduck.Ui.Winforms.Taskdialog; -using java.util; -using Microsoft.VisualBasic.ApplicationServices; -using org.apache.log4j; -using ArrayList = System.Collections.ArrayList; -using Path = System.IO.Path; -using UnhandledExceptionEventArgs = System.UnhandledExceptionEventArgs; - -namespace Ch.Cyberduck.Ui.Controller -{ - /// - /// A potential alternative for the VB.WindowsFormsApplicationBase: http://www.ai.uga.edu/mc/SingleInstance.html - /// - internal class MainController : WindowsFormsApplicationBase, CollectionListener - { - private static readonly Logger Logger = Logger.getLogger(typeof (MainController).FullName); - public static readonly string StartupLanguage; - private static readonly IList _browsers = new List(); - private static MainController _application; - private static JumpListManager _jumpListManager; - private readonly BaseController _controller = new BaseController(); - - /// - /// Saved browsers - /// - private readonly AbstractHostCollection _sessions = - new FolderBookmarkCollection( - LocalFactory.get(PreferencesFactory.get().getProperty("application.support.path"), "Sessions"), - "session"); - - /// - /// Helper controller to ensure STA when running threads while launching - /// - /// - private BrowserController _bc; - - static MainController() - { - StructureMapBootstrapper.Bootstrap(); - PreferencesFactory.set(new SettingsDictionaryPreferences()); - ProtocolFactory.register(); - - if (!Debugger.IsAttached) - { - // Add the event handler for handling UI thread exceptions to the event. - System.Windows.Forms.Application.ThreadException += ExceptionHandler; - - // Set the unhandled exception mode to force all Windows Forms errors to go through - // our handler. - System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); - - // Add the event handler for handling non-UI thread exceptions to the event. - AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler; - } - //make sure that a language change takes effect after a restart only - StartupLanguage = PreferencesFactory.get().getProperty("application.language"); - } - - /// - /// Constructor that intializes the authentication mode for this app. - /// - /// Mode in which to run app. - public MainController(AuthenticationMode mode) : base(mode) - { - InitializeAppProperties(); - } - - /// - /// Default constructor. - /// - private MainController() - { - InitializeAppProperties(); - SaveMySettingsOnExit = true; - Startup += ApplicationDidFinishLaunching; - StartupNextInstance += StartupNextInstanceHandler; - Shutdown += delegate - { - try - { - RendezvousFactory.instance().quit(); - } - catch (SystemException se) - { - Logger.warn("No Bonjour support available", se); - } - PreferencesFactory.get().setProperty("uses", PreferencesFactory.get().getInteger("uses") + 1); - PreferencesFactory.get().save(); - }; - } - - internal static MainController Application - { - get { return _application ?? (_application = new MainController()); } - } - - public Form ActiveMainForm - { - get { return MainForm; } - } - - public static IList Browsers - { - get { return _browsers; } - } - - public void collectionLoaded() - { - RefreshJumpList(); - } - - public void collectionItemAdded(object obj) - { - RefreshJumpList(); - } - - public void collectionItemRemoved(object obj) - { - RefreshJumpList(); - } - - public void collectionItemChanged(object obj) - { - RefreshJumpList(); - } - - private void StartupNextInstanceHandler(object sender, StartupNextInstanceEventArgs e) - { - NewBrowser(); - IList stripped = new List(e.CommandLine); - stripped.RemoveAt(0); // remove executable - CommandsAfterLaunch(stripped); - } - - /// - /// The main entry point for the application. - /// - [STAThread] - private static void Main() - { - System.Windows.Forms.Application.EnableVisualStyles(); - System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false); - Application.Run(); - } - - public static void ExceptionHandler(object sender, ThreadExceptionEventArgs e) - { - CrashReporter.Instance.Write(e.Exception); - Environment.Exit(1); - } - - /// - /// Initializes this application with the appropriate settings. - /// - protected virtual void InitializeAppProperties() - { - IsSingleInstance = true; - // Needed for multiple SDI because no form is the main form - ShutdownStyle = ShutdownMode.AfterAllFormsClose; - } - - private void CommandsAfterLaunch(IList args) - { - if (args.Count > 0) - { - string filename = args[0]; - Logger.debug("applicationOpenFile:" + filename); - Local f = LocalFactory.get(filename); - if (f.exists()) - { - if ("cyberducklicense".Equals(f.getExtension())) - { - License license = LicenseFactory.get(f); - if (license.verify()) - { - f.copy(LocalFactory.get(PreferencesFactory.get().getProperty("application.support.path"), - f.getName())); - if (DialogResult.OK == - _bc.InfoBox(license.ToString(), - LocaleFactory.localizedString( - "Thanks for your support! Your contribution helps to further advance development to make Cyberduck even better.", - "License"), - LocaleFactory.localizedString( - "Your donation key has been copied to the Application Support folder.", - "License"), - String.Format("{0}", LocaleFactory.localizedString("Continue", "License")), null, - false)) - { - foreach (BrowserController controller in new List(Browsers)) - { - controller.RemoveDonateButton(); - } - } - } - else - { - if (DialogResult.OK == - _bc.WarningBox(LocaleFactory.localizedString("Not a valid donation key", "License"), - LocaleFactory.localizedString("Not a valid donation key", "License"), - LocaleFactory.localizedString("This donation key does not appear to be valid.", - "License"), null, - String.Format("{0}", LocaleFactory.localizedString("Continue", "License")), false, - PreferencesFactory.get().getProperty("website.help") + "/faq", delegate { })) - { - ; - } - } - } - else if ("cyberduckprofile".Equals(f.getExtension())) - { - Protocol profile = (Protocol) ProfileReaderFactory.get().read(f); - if (null == profile) - { - return; - } - if (profile.isEnabled()) - { - ProtocolFactory.register(profile); - Host host = new Host(profile, profile.getDefaultHostname(), profile.getDefaultPort()); - NewBrowser().AddBookmark(host); - // Register in application support - Local profiles = - LocalFactory.get(PreferencesFactory.get().getProperty("application.support.path"), - PreferencesFactory.get().getProperty("profiles.folder.name")); - profiles.mkdir(); - f.copy(LocalFactory.get(profiles, f.getName())); - } - } - else if ("duck".Equals(f.getExtension())) - { - Host bookmark = (Host) HostReaderFactory.get().read(f); - if (null == bookmark) - { - return; - } - NewBrowser().Mount(bookmark); - } - } - } - } - - /// - /// Run the application - /// - public virtual void Run() - { - // set up the main form. - _bc = NewBrowser(true, true); - MainForm = _bc.View as Form; - // then, run the the main form. - Run(CommandLineArgs); - } - - /// - /// A normal (non-single-instance) application raises the Startup event every time it starts. - /// A single-instance application raises the Startup event when it starts only if the application - /// is not already active; otherwise, it raises the StartupNextInstance event. - /// - /// - /// - /// - private void ApplicationDidFinishLaunching(object sender, StartupEventArgs e) - { - Logger.debug("ApplicationDidFinishLaunching"); - CommandsAfterLaunch(CommandLineArgs); - HistoryCollection.defaultCollection().addListener(this); - UpdateController.Instance.CheckForUpdatesIfNecessary(); - - if (PreferencesFactory.get().getBoolean("browser.serialize")) - { - _controller.Background(delegate { _sessions.load(); }, delegate - { - foreach (Host host in _sessions) - { - Host h = host; - _bc.Invoke(delegate - { - BrowserController bc = NewBrowser(); - bc.Mount(h); - }); - } - _sessions.clear(); - }); - } - NotificationServiceFactory.get().setup(); - - // User bookmarks and thirdparty applications - CountdownEvent bookmarksSemaphore = new CountdownEvent(1); - CountdownEvent thirdpartySemaphore = new CountdownEvent(1); - - // Load all bookmarks in background - _controller.Background(delegate - { - BookmarkCollection c = BookmarkCollection.defaultCollection(); - c.load(); - bookmarksSemaphore.Signal(); - }, delegate - { - if (PreferencesFactory.get().getBoolean("browser.open.untitled")) - { - if (PreferencesFactory.get().getProperty("browser.open.bookmark.default") != null) - { - _bc.Invoke(delegate - { - BrowserController bc = NewBrowser(); - OpenDefaultBookmark(bc); - }); - } - } - }); - _controller.Background(delegate { HistoryCollection.defaultCollection().load(); }, delegate { }); - _controller.Background(delegate - { - lock (TransferCollection.defaultCollection()) - { - TransferCollection.defaultCollection().load(); - } - }, delegate - { - if (PreferencesFactory.get().getBoolean("queue.window.open.default")) - { - _bc.Invoke(delegate { TransferController.Instance.View.Show(); }); - } - }); - - // Bonjour initialization - ThreadStart start = delegate - { - try - { - RendezvousFactory.instance().init(); - } - catch (COMException) - { - Logger.warn("No Bonjour support available"); - } - }; - Thread thread = new Thread(start); - thread.SetApartmentState(ApartmentState.STA); - thread.Start(); - if (PreferencesFactory.get().getBoolean("defaulthandler.reminder") && - PreferencesFactory.get().getInteger("uses") > 0) - { - if (!URLSchemeHandlerConfiguration.Instance.IsDefaultApplicationForFtp() || - !URLSchemeHandlerConfiguration.Instance.IsDefaultApplicationForSftp()) - { - Utils.CommandBox(LocaleFactory.localizedString("Default Protocol Handler", "Preferences"), - LocaleFactory.localizedString( - "Set Cyberduck as default application for FTP and SFTP locations?", "Configuration"), - LocaleFactory.localizedString( - "As the default application, Cyberduck will open when you click on FTP or SFTP links in other applications, such as your web browser. You can change this setting in the Preferences later.", - "Configuration"), - String.Format("{0}|{1}", LocaleFactory.localizedString("Change", "Configuration"), - LocaleFactory.localizedString("Cancel", "Configuration")), false, - LocaleFactory.localizedString("Don't ask again", "Configuration"), SysIcons.Question, - delegate(int option, bool verificationChecked) - { - if (verificationChecked) - { - // Never show again. - PreferencesFactory.get().setProperty("defaulthandler.reminder", false); - } - switch (option) - { - case 0: - URLSchemeHandlerConfiguration.Instance.RegisterFtpProtocol(); - URLSchemeHandlerConfiguration.Instance.RegisterSftpProtocol(); - break; - } - }); - } - } - // Import thirdparty bookmarks. - IList thirdpartyBookmarks = GetThirdpartyBookmarks(); - _controller.Background(delegate - { - foreach (ThirdpartyBookmarkCollection c in thirdpartyBookmarks) - { - if (!c.isInstalled()) - { - Logger.info("No application installed for " + c.getBundleIdentifier()); - continue; - } - c.load(); - if (c.isEmpty()) - { - // Flag as imported - PreferencesFactory.get().setProperty(c.getConfiguration(), true); - } - } - bookmarksSemaphore.Wait(); - }, delegate - { - foreach (ThirdpartyBookmarkCollection c in thirdpartyBookmarks) - { - BookmarkCollection bookmarks = BookmarkCollection.defaultCollection(); - c.filter(bookmarks); - if (!c.isEmpty()) - { - ThirdpartyBookmarkCollection c1 = c; - Utils.CommandBox(LocaleFactory.localizedString("Import", "Configuration"), - String.Format(LocaleFactory.localizedString("Import {0} Bookmarks", "Configuration"), - c.getName()), - String.Format( - LocaleFactory.localizedString( - "{0} bookmarks found. Do you want to add these to your bookmarks?", "Configuration"), - c.size()), - String.Format("{0}", LocaleFactory.localizedString("Import", "Configuration")), true, - LocaleFactory.localizedString("Don't ask again", "Configuration"), SysIcons.Question, - delegate(int option, bool verificationChecked) - { - if (verificationChecked) - { - // Flag as imported - PreferencesFactory.get().setProperty(c1.getConfiguration(), true); - } - switch (option) - { - case 0: - BookmarkCollection.defaultCollection().addAll(c1); - // Flag as imported - PreferencesFactory.get().setProperty(c1.getConfiguration(), true); - break; - } - }); - } - else - { - PreferencesFactory.get().setProperty(c.getConfiguration(), true); - } - } - thirdpartySemaphore.Signal(); - }); - } - - private IList GetThirdpartyBookmarks() - { - return new List - { - new FilezillaBookmarkCollection(), - new WinScpBookmarkCollection(), - new SmartFtpBookmarkCollection(), - new TotalCommanderBookmarkCollection(), - new FlashFxp4UserBookmarkCollection(), - new FlashFxp4CommonBookmarkCollection(), - new FlashFxp3BookmarkCollection(), - new WsFtpBookmarkCollection(), - new FireFtpBookmarkCollection(), - new CrossFtpBookmarkCollection(), - new CloudberryS3BookmarkCollection(), - new CloudberryGoogleBookmarkCollection(), - new CloudberryAzureBookmarkCollection(), - new S3BrowserBookmarkCollection() - }; - } - - /// - /// Runs this.MainForm in this application context. Converts the command - /// line arguments correctly for the base this.Run method. - /// - /// Command line collection. - private void Run(ICollection commandLineArgs) - { - // convert the Collection to string[], so that it can be used - // in the Run method. - ArrayList list = new ArrayList(commandLineArgs); - string[] commandLine = (string[]) list.ToArray(typeof (string)); - base.Run(commandLine); - } - - public static BrowserController NewBrowser() - { - return NewBrowser(false); - } - - /// - /// Mounts the default bookmark if any - /// - /// - public static void OpenDefaultBookmark(BrowserController controller) - { - String defaultBookmark = PreferencesFactory.get().getProperty("browser.open.bookmark.default"); - if (null == defaultBookmark) - { - return; //No default bookmark given - } - Host bookmark = BookmarkCollection.defaultCollection().lookup(defaultBookmark); - if (null == bookmark) - { - Logger.info("Default bookmark no more available"); - return; - } - foreach (BrowserController browser in Browsers) - { - if (browser.HasSession()) - { - if (browser.Session.getHost().equals(bookmark)) - { - Logger.debug("Default bookmark already mounted"); - return; - } - } - } - Logger.debug("Mounting default bookmark " + bookmark); - controller.Mount(bookmark); - } - - /// - /// Makes a unmounted browser window the key window and brings it to the front - /// - /// If true, open a new browser regardeless of any unused browser window - /// A reference to a browser window - public static BrowserController NewBrowser(bool force) - { - return NewBrowser(force, true); - } - - public static bool ApplicationShouldTerminateAfterDonationPrompt() - { - Logger.debug("ApplicationShouldTerminateAfterDonationPrompt"); - License l = LicenseFactory.find(); - if (!l.verify()) - { - string appVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); - String lastversion = PreferencesFactory.get().getProperty("donate.reminder"); - if (appVersion.Equals(lastversion)) - { - // Do not display if same version is installed - return true; - } - - DateTime nextReminder = new DateTime(PreferencesFactory.get().getLong("donate.reminder.date")); - // Display donationPrompt every n days - nextReminder.AddDays(PreferencesFactory.get().getLong("donate.reminder.interval")); - Logger.debug("Next reminder: " + nextReminder); - // Display after upgrade - if (nextReminder.CompareTo(DateTime.Now) == 1) - { - // Do not display if shown in the reminder interval - return true; - } - DonationController controller = new DonationController(); - controller.Show(); - } - return true; - } - - /// - /// - /// - /// Return true to allow the application to terminate - public static bool ApplicationShouldTerminate() - { - Logger.debug("ApplicationShouldTerminate"); - // Check if the automatic updater wants to install an update - if (UpdateController.Instance.AboutToInstallUpdate) - { - return true; - } - - // Determine if there are any running transfers - bool terminate = TransferController.ApplicationShouldTerminate(); - if (!terminate) - { - return false; - } - - // Determine if there are any open connections - foreach (BrowserController controller in new List(Browsers)) - { - if (PreferencesFactory.get().getBoolean("browser.serialize")) - { - if (controller.IsMounted()) - { - // The workspace should be saved. Serialize all open browser sessions - Host serialized = - new HostDictionary().deserialize( - controller.Session.getHost().serialize(SerializerFactory.get())); - serialized.setWorkdir(controller.Workdir); - Application._sessions.add(serialized); - } - } - } - return true; - } - - public static void Exit() - { - foreach (BrowserController controller in new List(Browsers)) - { - if (controller.IsConnected()) - { - if (PreferencesFactory.get().getBoolean("browser.disconnect.confirm")) - { - controller.CommandBox(LocaleFactory.localizedString("Quit"), - LocaleFactory.localizedString( - "You are connected to at least one remote site. Do you want to review open browsers?"), - null, - String.Format("{0}|{1}", LocaleFactory.localizedString("Review…"), - LocaleFactory.localizedString("Quit Anyway")), true, - LocaleFactory.localizedString("Don't ask again", "Configuration"), SysIcons.Warning, - delegate(int option, bool verificationChecked) - { - if (verificationChecked) - { - // Never show again. - PreferencesFactory.get().setProperty("browser.disconnect.confirm", false); - } - switch (option) - { - case -1: // Cancel - // Quit has been interrupted. Delete any saved sessions so far. - Application._sessions.clear(); - return; - case 0: // Review - if (BrowserController.ApplicationShouldTerminate()) - { - break; - } - return; - case 1: // Quit - foreach (BrowserController c in - new List(Browsers)) - { - c.View.Dispose(); - } - break; - } - }); - } - else - { - controller.Unmount(); - } - } - } - NotificationServiceFactory.get().unregister(); - ApplicationShouldTerminateAfterDonationPrompt(); - System.Windows.Forms.Application.Exit(); - } - - private static BrowserController NewBrowser(bool force, bool show) - { - InitJumpList(); - Logger.debug("NewBrowser"); - if (!force) - { - foreach (BrowserController c in Browsers) - { - if (!c.HasSession()) - { - c.Invoke(delegate { c.View.BringToFront(); }); - - return c; - } - } - } - BrowserController controller = new BrowserController(); - controller.View.ViewClosingEvent += delegate(object sender, FormClosingEventArgs args) - { - if (args.Cancel) - { - return; - } - if (1 == Browsers.Count) - { - // last browser is about to close, check if we can terminate - args.Cancel = !ApplicationShouldTerminate(); - } - }; - controller.View.ViewDisposedEvent += delegate - { - Browsers.Remove(controller); - if (0 == Browsers.Count) - { - // Close/Dispose all non-browser forms (e.g. Transfers) to allow shutdown - FormCollection forms = _application.OpenForms; - for (int i = forms.Count - 1; i >= 0; i--) - { - forms[i].Dispose(); - } - Exit(); - } - else - { - _application.MainForm = Browsers[0].View as Form; - } - }; - if (show) - { - controller.View.Show(); - } - _application.MainForm = controller.View as Form; - Browsers.Add(controller); - return controller; - } - - private static void InitJumpList() - { - if (Cyberduck.Core.Utils.IsWin7OrLater) - { - try - { - Windows7Taskbar.SetCurrentProcessAppId(PreferencesFactory.get().getProperty("application.name")); - _jumpListManager = new JumpListManager(PreferencesFactory.get().getProperty("application.name")); - _jumpListManager.UserRemovedItems += (o, e) => { }; - } - catch (Exception exception) - { - Logger.warn("Exception while initializing jump list", exception); - } - } - } - - public static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e) - { - CrashReporter.Instance.Write(e.ExceptionObject as Exception); - } - - private void RefreshJumpList() - { - if (Cyberduck.Core.Utils.IsWin7OrLater) - { - try - { - _jumpListManager.ClearCustomDestinations(); - Iterator iterator = HistoryCollection.defaultCollection().iterator(); - while (iterator.hasNext()) - { - Host host = (Host) iterator.next(); - _jumpListManager.AddCustomDestination(new ShellLink - { - Path = FolderBookmarkCollection.favoritesCollection().getFile(host).getAbsolute(), - Title = BookmarkNameProvider.toString(host, true), - Category = LocaleFactory.localizedString("History"), - IconLocation = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "cyberduck-document.ico"), - IconIndex = 0 - }); - } - _jumpListManager.Refresh(); - } - catch (Exception exception) - { - Logger.warn("Exception while refreshing jump list", exception); - } - } - } - } +// +// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. +// http://cyberduck.io/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// feedback@cyberduck.io +// + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Threading; +using System.Windows.Forms; +using Windows7.DesktopIntegration; +using ch.cyberduck.core; +using ch.cyberduck.core.aquaticprime; +using ch.cyberduck.core.bonjour; +using ch.cyberduck.core.importer; +using ch.cyberduck.core.notification; +using ch.cyberduck.core.preferences; +using ch.cyberduck.core.serializer; +using Ch.Cyberduck.Ui.Core; +using Ch.Cyberduck.Ui.Core.Preferences; +using Ch.Cyberduck.Ui.Core.Urlhandler; +using Ch.Cyberduck.Ui.Winforms.Taskdialog; +using java.util; +using Microsoft.VisualBasic.ApplicationServices; +using org.apache.log4j; +using ArrayList = System.Collections.ArrayList; +using Path = System.IO.Path; +using UnhandledExceptionEventArgs = System.UnhandledExceptionEventArgs; + +namespace Ch.Cyberduck.Ui.Controller +{ + /// + /// A potential alternative for the VB.WindowsFormsApplicationBase: http://www.ai.uga.edu/mc/SingleInstance.html + /// + internal class MainController : WindowsFormsApplicationBase, CollectionListener + { + private static readonly Logger Logger = Logger.getLogger(typeof (MainController).FullName); + public static readonly string StartupLanguage; + private static readonly IList _browsers = new List(); + private static MainController _application; + private static JumpListManager _jumpListManager; + private readonly BaseController _controller = new BaseController(); + + /// + /// Saved browsers + /// + private readonly AbstractHostCollection _sessions = + new FolderBookmarkCollection( + LocalFactory.get(PreferencesFactory.get().getProperty("application.support.path"), "Sessions"), + "session"); + + /// + /// Helper controller to ensure STA when running threads while launching + /// + /// + private BrowserController _bc; + + static MainController() + { + StructureMapBootstrapper.Bootstrap(); + PreferencesFactory.set(new SettingsDictionaryPreferences()); + ProtocolFactory.register(); + + if (!Debugger.IsAttached) + { + // Add the event handler for handling UI thread exceptions to the event. + System.Windows.Forms.Application.ThreadException += ExceptionHandler; + + // Set the unhandled exception mode to force all Windows Forms errors to go through + // our handler. + System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); + + // Add the event handler for handling non-UI thread exceptions to the event. + AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler; + } + //make sure that a language change takes effect after a restart only + StartupLanguage = PreferencesFactory.get().getProperty("application.language"); + } + + /// + /// Constructor that intializes the authentication mode for this app. + /// + /// Mode in which to run app. + public MainController(AuthenticationMode mode) : base(mode) + { + InitializeAppProperties(); + } + + /// + /// Default constructor. + /// + private MainController() + { + InitializeAppProperties(); + SaveMySettingsOnExit = true; + Startup += ApplicationDidFinishLaunching; + StartupNextInstance += StartupNextInstanceHandler; + Shutdown += delegate + { + try + { + RendezvousFactory.instance().quit(); + } + catch (SystemException se) + { + Logger.warn("No Bonjour support available", se); + } + PreferencesFactory.get().setProperty("uses", PreferencesFactory.get().getInteger("uses") + 1); + PreferencesFactory.get().save(); + }; + } + + internal static MainController Application + { + get { return _application ?? (_application = new MainController()); } + } + + public Form ActiveMainForm + { + get { return MainForm; } + } + + public static IList Browsers + { + get { return _browsers; } + } + + public void collectionLoaded() + { + RefreshJumpList(); + } + + public void collectionItemAdded(object obj) + { + RefreshJumpList(); + } + + public void collectionItemRemoved(object obj) + { + RefreshJumpList(); + } + + public void collectionItemChanged(object obj) + { + RefreshJumpList(); + } + + private void StartupNextInstanceHandler(object sender, StartupNextInstanceEventArgs e) + { + NewBrowser(); + IList stripped = new List(e.CommandLine); + stripped.RemoveAt(0); // remove executable + CommandsAfterLaunch(stripped); + } + + /// + /// The main entry point for the application. + /// + [STAThread] + private static void Main() + { + System.Windows.Forms.Application.EnableVisualStyles(); + System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false); + Application.Run(); + } + + public static void ExceptionHandler(object sender, ThreadExceptionEventArgs e) + { + CrashReporter.Instance.Write(e.Exception); + Environment.Exit(1); + } + + /// + /// Initializes this application with the appropriate settings. + /// + protected virtual void InitializeAppProperties() + { + IsSingleInstance = true; + // Needed for multiple SDI because no form is the main form + ShutdownStyle = ShutdownMode.AfterAllFormsClose; + } + + private void CommandsAfterLaunch(IList args) + { + if (args.Count > 0) + { + string filename = args[0]; + Logger.debug("applicationOpenFile:" + filename); + Local f = LocalFactory.get(filename); + if (f.exists()) + { + if ("cyberducklicense".Equals(f.getExtension())) + { + License license = LicenseFactory.get(f); + if (license.verify()) + { + f.copy(LocalFactory.get(PreferencesFactory.get().getProperty("application.support.path"), + f.getName())); + if (DialogResult.OK == + _bc.InfoBox(license.ToString(), + LocaleFactory.localizedString( + "Thanks for your support! Your contribution helps to further advance development to make Cyberduck even better.", + "License"), + LocaleFactory.localizedString( + "Your donation key has been copied to the Application Support folder.", + "License"), + String.Format("{0}", LocaleFactory.localizedString("Continue", "License")), null, + false)) + { + foreach (BrowserController controller in new List(Browsers)) + { + controller.RemoveDonateButton(); + } + } + } + else + { + if (DialogResult.OK == + _bc.WarningBox(LocaleFactory.localizedString("Not a valid donation key", "License"), + LocaleFactory.localizedString("Not a valid donation key", "License"), + LocaleFactory.localizedString("This donation key does not appear to be valid.", + "License"), null, + String.Format("{0}", LocaleFactory.localizedString("Continue", "License")), false, + PreferencesFactory.get().getProperty("website.help") + "/faq", delegate { })) + { + ; + } + } + } + else if ("cyberduckprofile".Equals(f.getExtension())) + { + Protocol profile = (Protocol) ProfileReaderFactory.get().read(f); + if (null == profile) + { + return; + } + if (profile.isEnabled()) + { + ProtocolFactory.register(profile); + Host host = new Host(profile, profile.getDefaultHostname(), profile.getDefaultPort()); + NewBrowser().AddBookmark(host); + // Register in application support + Local profiles = + LocalFactory.get(PreferencesFactory.get().getProperty("application.support.path"), + PreferencesFactory.get().getProperty("profiles.folder.name")); + profiles.mkdir(); + f.copy(LocalFactory.get(profiles, f.getName())); + } + } + else if ("duck".Equals(f.getExtension())) + { + Host bookmark = (Host) HostReaderFactory.get().read(f); + if (null == bookmark) + { + return; + } + NewBrowser().Mount(bookmark); + } + } + } + } + + /// + /// Run the application + /// + public virtual void Run() + { + // set up the main form. + _bc = NewBrowser(true, true); + MainForm = _bc.View as Form; + // then, run the the main form. + Run(CommandLineArgs); + } + + /// + /// A normal (non-single-instance) application raises the Startup event every time it starts. + /// A single-instance application raises the Startup event when it starts only if the application + /// is not already active; otherwise, it raises the StartupNextInstance event. + /// + /// + /// + /// + private void ApplicationDidFinishLaunching(object sender, StartupEventArgs e) + { + Logger.debug("ApplicationDidFinishLaunching"); + CommandsAfterLaunch(CommandLineArgs); + HistoryCollection.defaultCollection().addListener(this); + UpdateController.Instance.CheckForUpdatesIfNecessary(); + + if (PreferencesFactory.get().getBoolean("browser.serialize")) + { + _controller.Background(delegate { _sessions.load(); }, delegate + { + foreach (Host host in _sessions) + { + Host h = host; + _bc.Invoke(delegate + { + BrowserController bc = NewBrowser(); + bc.Mount(h); + }); + } + _sessions.clear(); + }); + } + NotificationServiceFactory.get().setup(); + + // User bookmarks and thirdparty applications + CountdownEvent bookmarksSemaphore = new CountdownEvent(1); + CountdownEvent thirdpartySemaphore = new CountdownEvent(1); + + // Load all bookmarks in background + _controller.Background(delegate + { + BookmarkCollection c = BookmarkCollection.defaultCollection(); + c.load(); + bookmarksSemaphore.Signal(); + }, delegate + { + if (PreferencesFactory.get().getBoolean("browser.open.untitled")) + { + if (PreferencesFactory.get().getProperty("browser.open.bookmark.default") != null) + { + _bc.Invoke(delegate + { + BrowserController bc = NewBrowser(); + OpenDefaultBookmark(bc); + }); + } + } + }); + _controller.Background(delegate { HistoryCollection.defaultCollection().load(); }, delegate { }); + _controller.Background(delegate + { + lock (TransferCollection.defaultCollection()) + { + TransferCollection.defaultCollection().load(); + } + }, delegate + { + if (PreferencesFactory.get().getBoolean("queue.window.open.default")) + { + _bc.Invoke(delegate { TransferController.Instance.View.Show(); }); + } + }); + + // Bonjour initialization + ThreadStart start = delegate + { + try + { + RendezvousFactory.instance().init(); + } + catch (COMException) + { + Logger.warn("No Bonjour support available"); + } + }; + Thread thread = new Thread(start); + thread.SetApartmentState(ApartmentState.STA); + thread.Start(); + if (PreferencesFactory.get().getBoolean("defaulthandler.reminder") && + PreferencesFactory.get().getInteger("uses") > 0) + { + if (!URLSchemeHandlerConfiguration.Instance.IsDefaultApplicationForFtp() || + !URLSchemeHandlerConfiguration.Instance.IsDefaultApplicationForSftp()) + { + Utils.CommandBox(LocaleFactory.localizedString("Default Protocol Handler", "Preferences"), + LocaleFactory.localizedString( + "Set Cyberduck as default application for FTP and SFTP locations?", "Configuration"), + LocaleFactory.localizedString( + "As the default application, Cyberduck will open when you click on FTP or SFTP links in other applications, such as your web browser. You can change this setting in the Preferences later.", + "Configuration"), + String.Format("{0}|{1}", LocaleFactory.localizedString("Change", "Configuration"), + LocaleFactory.localizedString("Cancel", "Configuration")), false, + LocaleFactory.localizedString("Don't ask again", "Configuration"), SysIcons.Question, + delegate(int option, bool verificationChecked) + { + if (verificationChecked) + { + // Never show again. + PreferencesFactory.get().setProperty("defaulthandler.reminder", false); + } + switch (option) + { + case 0: + URLSchemeHandlerConfiguration.Instance.RegisterFtpProtocol(); + URLSchemeHandlerConfiguration.Instance.RegisterSftpProtocol(); + break; + } + }); + } + } + // Import thirdparty bookmarks. + IList thirdpartyBookmarks = GetThirdpartyBookmarks(); + _controller.Background(delegate + { + foreach (ThirdpartyBookmarkCollection c in thirdpartyBookmarks) + { + if (!c.isInstalled()) + { + Logger.info("No application installed for " + c.getBundleIdentifier()); + continue; + } + c.load(); + if (c.isEmpty()) + { + // Flag as imported + PreferencesFactory.get().setProperty(c.getConfiguration(), true); + } + } + bookmarksSemaphore.Wait(); + }, delegate + { + foreach (ThirdpartyBookmarkCollection c in thirdpartyBookmarks) + { + BookmarkCollection bookmarks = BookmarkCollection.defaultCollection(); + c.filter(bookmarks); + if (!c.isEmpty()) + { + ThirdpartyBookmarkCollection c1 = c; + Utils.CommandBox(LocaleFactory.localizedString("Import", "Configuration"), + String.Format(LocaleFactory.localizedString("Import {0} Bookmarks", "Configuration"), + c.getName()), + String.Format( + LocaleFactory.localizedString( + "{0} bookmarks found. Do you want to add these to your bookmarks?", "Configuration"), + c.size()), + String.Format("{0}", LocaleFactory.localizedString("Import", "Configuration")), true, + LocaleFactory.localizedString("Don't ask again", "Configuration"), SysIcons.Question, + delegate(int option, bool verificationChecked) + { + if (verificationChecked) + { + // Flag as imported + PreferencesFactory.get().setProperty(c1.getConfiguration(), true); + } + switch (option) + { + case 0: + BookmarkCollection.defaultCollection().addAll(c1); + // Flag as imported + PreferencesFactory.get().setProperty(c1.getConfiguration(), true); + break; + } + }); + } + else + { + PreferencesFactory.get().setProperty(c.getConfiguration(), true); + } + } + thirdpartySemaphore.Signal(); + }); + } + + private IList GetThirdpartyBookmarks() + { + return new List + { + new FilezillaBookmarkCollection(), + new WinScpBookmarkCollection(), + new SmartFtpBookmarkCollection(), + new TotalCommanderBookmarkCollection(), + new FlashFxp4UserBookmarkCollection(), + new FlashFxp4CommonBookmarkCollection(), + new FlashFxp3BookmarkCollection(), + new WsFtpBookmarkCollection(), + new FireFtpBookmarkCollection(), + new CrossFtpBookmarkCollection(), + new CloudberryS3BookmarkCollection(), + new CloudberryGoogleBookmarkCollection(), + new CloudberryAzureBookmarkCollection(), + new S3BrowserBookmarkCollection() + }; + } + + /// + /// Runs this.MainForm in this application context. Converts the command + /// line arguments correctly for the base this.Run method. + /// + /// Command line collection. + private void Run(ICollection commandLineArgs) + { + // convert the Collection to string[], so that it can be used + // in the Run method. + ArrayList list = new ArrayList(commandLineArgs); + string[] commandLine = (string[]) list.ToArray(typeof (string)); + base.Run(commandLine); + } + + public static BrowserController NewBrowser() + { + return NewBrowser(false); + } + + /// + /// Mounts the default bookmark if any + /// + /// + public static void OpenDefaultBookmark(BrowserController controller) + { + String defaultBookmark = PreferencesFactory.get().getProperty("browser.open.bookmark.default"); + if (null == defaultBookmark) + { + return; //No default bookmark given + } + Host bookmark = BookmarkCollection.defaultCollection().lookup(defaultBookmark); + if (null == bookmark) + { + Logger.info("Default bookmark no more available"); + return; + } + foreach (BrowserController browser in Browsers) + { + if (browser.HasSession()) + { + if (browser.Session.getHost().equals(bookmark)) + { + Logger.debug("Default bookmark already mounted"); + return; + } + } + } + Logger.debug("Mounting default bookmark " + bookmark); + controller.Mount(bookmark); + } + + /// + /// Makes a unmounted browser window the key window and brings it to the front + /// + /// If true, open a new browser regardeless of any unused browser window + /// A reference to a browser window + public static BrowserController NewBrowser(bool force) + { + return NewBrowser(force, true); + } + + public static bool ApplicationShouldTerminateAfterDonationPrompt() + { + Logger.debug("ApplicationShouldTerminateAfterDonationPrompt"); + License l = LicenseFactory.find(); + if (!l.verify()) + { + string appVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); + String lastversion = PreferencesFactory.get().getProperty("donate.reminder"); + if (appVersion.Equals(lastversion)) + { + // Do not display if same version is installed + return true; + } + + DateTime nextReminder = new DateTime(PreferencesFactory.get().getLong("donate.reminder.date")); + // Display donationPrompt every n days + nextReminder.AddDays(PreferencesFactory.get().getLong("donate.reminder.interval")); + Logger.debug("Next reminder: " + nextReminder); + // Display after upgrade + if (nextReminder.CompareTo(DateTime.Now) == 1) + { + // Do not display if shown in the reminder interval + return true; + } + DonationController controller = new DonationController(); + controller.Show(); + } + return true; + } + + /// + /// + /// + /// Return true to allow the application to terminate + public static bool ApplicationShouldTerminate() + { + Logger.debug("ApplicationShouldTerminate"); + // Check if the automatic updater wants to install an update + if (UpdateController.Instance.AboutToInstallUpdate) + { + return true; + } + + // Determine if there are any running transfers + bool terminate = TransferController.ApplicationShouldTerminate(); + if (!terminate) + { + return false; + } + + // Determine if there are any open connections + foreach (BrowserController controller in new List(Browsers)) + { + if (PreferencesFactory.get().getBoolean("browser.serialize")) + { + if (controller.IsMounted()) + { + // The workspace should be saved. Serialize all open browser sessions + Host serialized = + new HostDictionary().deserialize( + controller.Session.getHost().serialize(SerializerFactory.get())); + serialized.setWorkdir(controller.Workdir); + Application._sessions.add(serialized); + } + } + } + return true; + } + + public static void Exit() + { + foreach (BrowserController controller in new List(Browsers)) + { + if (controller.IsConnected()) + { + if (PreferencesFactory.get().getBoolean("browser.disconnect.confirm")) + { + controller.CommandBox(LocaleFactory.localizedString("Quit"), + LocaleFactory.localizedString( + "You are connected to at least one remote site. Do you want to review open browsers?"), + null, + String.Format("{0}|{1}", LocaleFactory.localizedString("Review…"), + LocaleFactory.localizedString("Quit Anyway")), true, + LocaleFactory.localizedString("Don't ask again", "Configuration"), SysIcons.Warning, + delegate(int option, bool verificationChecked) + { + if (verificationChecked) + { + // Never show again. + PreferencesFactory.get().setProperty("browser.disconnect.confirm", false); + } + switch (option) + { + case -1: // Cancel + // Quit has been interrupted. Delete any saved sessions so far. + Application._sessions.clear(); + return; + case 0: // Review + if (BrowserController.ApplicationShouldTerminate()) + { + break; + } + return; + case 1: // Quit + foreach (BrowserController c in + new List(Browsers)) + { + c.View.Dispose(); + } + break; + } + }); + } + else + { + controller.Unmount(); + } + } + } + NotificationServiceFactory.get().unregister(); + ApplicationShouldTerminateAfterDonationPrompt(); + System.Windows.Forms.Application.Exit(); + } + + private static BrowserController NewBrowser(bool force, bool show) + { + InitJumpList(); + Logger.debug("NewBrowser"); + if (!force) + { + foreach (BrowserController c in Browsers) + { + if (!c.HasSession()) + { + c.Invoke(delegate { c.View.BringToFront(); }); + + return c; + } + } + } + BrowserController controller = new BrowserController(); + controller.View.ViewClosingEvent += delegate(object sender, FormClosingEventArgs args) + { + if (args.Cancel) + { + return; + } + if (1 == Browsers.Count) + { + // last browser is about to close, check if we can terminate + args.Cancel = !ApplicationShouldTerminate(); + } + }; + controller.View.ViewDisposedEvent += delegate + { + Browsers.Remove(controller); + if (0 == Browsers.Count) + { + // Close/Dispose all non-browser forms (e.g. Transfers) to allow shutdown + FormCollection forms = _application.OpenForms; + for (int i = forms.Count - 1; i >= 0; i--) + { + forms[i].Dispose(); + } + Exit(); + } + else + { + _application.MainForm = Browsers[0].View as Form; + } + }; + if (show) + { + controller.View.Show(); + } + _application.MainForm = controller.View as Form; + Browsers.Add(controller); + return controller; + } + + private static void InitJumpList() + { + if (Cyberduck.Core.Utils.IsWin7OrLater) + { + try + { + Windows7Taskbar.SetCurrentProcessAppId(PreferencesFactory.get().getProperty("application.name")); + _jumpListManager = new JumpListManager(PreferencesFactory.get().getProperty("application.name")); + _jumpListManager.UserRemovedItems += (o, e) => { }; + } + catch (Exception exception) + { + Logger.warn("Exception while initializing jump list", exception); + } + } + } + + public static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e) + { + CrashReporter.Instance.Write(e.ExceptionObject as Exception); + } + + private void RefreshJumpList() + { + if (Cyberduck.Core.Utils.IsWin7OrLater) + { + try + { + _jumpListManager.ClearCustomDestinations(); + Iterator iterator = HistoryCollection.defaultCollection().iterator(); + while (iterator.hasNext()) + { + Host host = (Host) iterator.next(); + _jumpListManager.AddCustomDestination(new ShellLink + { + Path = FolderBookmarkCollection.favoritesCollection().getFile(host).getAbsolute(), + Title = BookmarkNameProvider.toString(host, true), + Category = LocaleFactory.localizedString("History"), + IconLocation = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "cyberduck-document.ico"), + IconIndex = 0 + }); + } + _jumpListManager.Refresh(); + } + catch (Exception exception) + { + Logger.warn("Exception while refreshing jump list", exception); + } + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/PathClipboard.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/PathClipboard.cs similarity index 96% rename from source/ch/cyberduck/ui/controller/PathClipboard.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/PathClipboard.cs index 496633e789..f06253d9fa 100644 --- a/source/ch/cyberduck/ui/controller/PathClipboard.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/PathClipboard.cs @@ -1,60 +1,60 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System.Collections.Generic; -using System.Xml; -using ch.cyberduck.core; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal class PathClipboard : List - { - private static readonly PathClipboardDictionary Instances = - new PathClipboardDictionary(); - - private PathClipboard() - { - } - - public static PathClipboard GetClipboard(Host host) - { - if (!Instances.ContainsKey(host)) - { - Instances.Add(host, new PathClipboard()); - } - return Instances[host]; - } - } - - internal class PathClipboardDictionary : Dictionary - { - public bool Empty - { - get - { - foreach (PathClipboard clipboard in Values) - { - if (clipboard.Count > 0) - { - return false; - } - } - return true; - } - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System.Collections.Generic; +using System.Xml; +using ch.cyberduck.core; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal class PathClipboard : List + { + private static readonly PathClipboardDictionary Instances = + new PathClipboardDictionary(); + + private PathClipboard() + { + } + + public static PathClipboard GetClipboard(Host host) + { + if (!Instances.ContainsKey(host)) + { + Instances.Add(host, new PathClipboard()); + } + return Instances[host]; + } + } + + internal class PathClipboardDictionary : Dictionary + { + public bool Empty + { + get + { + foreach (PathClipboard clipboard in Values) + { + if (clipboard.Count > 0) + { + return false; + } + } + return true; + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/PersistentFormHandler.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/PersistentFormHandler.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/PersistentFormHandler.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/PersistentFormHandler.cs index c6ee1c917e..55eb274c85 100644 --- a/source/ch/cyberduck/ui/controller/PersistentFormHandler.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/PersistentFormHandler.cs @@ -1,182 +1,182 @@ -// -// Copyright (c) 2010-2011 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using System.Drawing; -using System.IO; -using System.Text; -using System.Xml; -using System.Xml.Serialization; -using ch.cyberduck.core; -using ch.cyberduck.core.preferences; - -namespace Ch.Cyberduck.Ui.Controller -{ - /// - /// Uses the application settings mechanism to persist UI settings like form postition and state - /// - /// - public sealed class PersistentFormHandler - { - /// - /// Instantiates new persistent form handler. - /// - /// The will be used as . - /// Default state of the window. - /// Default bounds of the window. - public PersistentFormHandler(Type windowType, int defaultWindowState, Rectangle defaultWindowBounds) - : this(windowType, null, defaultWindowState, defaultWindowBounds) - { - } - - /// - /// Instantiates new persistent form handler. - /// - /// The will be used as base . - /// Use this if you need to separate windows of same type. Will be appended to . - /// Default state of the window. - /// Default bounds of the window. - public PersistentFormHandler(Type windowType, string id, int defaultWindowState, Rectangle defaultWindowBounds) - { - Name = string.IsNullOrEmpty(id) - ? windowType.Name + "." - : windowType.Name + ":" + id + "."; - - DefaultWindowState = defaultWindowState; - DefaultWindowBounds = defaultWindowBounds; - } - - private Rectangle DefaultWindowBounds { get; set; } - - private int DefaultWindowState { get; set; } - - /// The form identifier in storage. - public string Name { get; private set; } - - /// Gets and sets the window state. (int instead of enum so that it can be in a BI layer, and not require a reference to WinForms) - public int WindowState - { - get { return Get("WindowState", DefaultWindowState); } - set { Set("WindowState", value); } - } - - /// Gets and sets the window bounds. (X, Y, Width and Height) - public Rectangle WindowBounds - { - get { return Get("WindowBounds", DefaultWindowBounds); } - set { Set("WindowBounds", value); } - } - - /// - /// - /// - /// - /// - /// - public String SerializeObject(T pObject) - { - try - { - XmlSerializer xs = new XmlSerializer(typeof (T)); - XmlWriterSettings writerSettings = new XmlWriterSettings - {OmitXmlDeclaration = true, Encoding = Encoding.UTF8}; - StringBuilder sb = new StringBuilder(); - using (XmlWriter xmlWriter = XmlWriter.Create(new StringWriter(sb), - writerSettings)) - { - xs.Serialize(xmlWriter, pObject); - } - return sb.ToString(); - } - catch (Exception) - { - return null; - } - } - - /// - /// - /// - /// - /// - /// - /// - public T DeserializeObject(String xml, T fallback) - { - try - { - XmlSerializer xs = new XmlSerializer(typeof (T)); - using (XmlReader reader = XmlReader.Create(new StringReader(xml))) - { - T obj = (T) xs.Deserialize(reader); - return obj; - } - } - catch (Exception) - { - return fallback; - } - } - - /// - /// Adds the given to the collection of values that will be - /// stored in database on . - /// - /// Type of object. - /// The key you want to use for this value. - /// The value to store. - public void Set(string key, T value) - { - string xmlString = SerializeObject(value); - if (xmlString == null) { - return; - } - string base64String = Convert.ToBase64String(Encoding.UTF8.GetBytes(xmlString)); - PreferencesFactory.get().setProperty("ui." + Name + key, base64String); - } - - /// - /// Same as , but uses default() as fallback value. - /// - /// Type of object - /// The key used on . - /// The stored object, or the default() object if something went wrong. - public T Get(string key) - { - return Get(key, default(T)); - } - - /// - /// Gets the value identified by the given . - /// - /// Type of object - /// The key used on . - /// Value to return if the given could not be found. - /// In other words, if you haven't used yet. - /// The stored object, or the object if something went wrong. - public T Get(string key, T fallback) - { - String val = PreferencesFactory.get().getProperty("ui." + Name + key); - if (null == val) - { - return fallback; - } - String xml = Encoding.UTF8.GetString(Convert.FromBase64String(val)); - return DeserializeObject(xml, fallback); - } - } +// +// Copyright (c) 2010-2011 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using System.Drawing; +using System.IO; +using System.Text; +using System.Xml; +using System.Xml.Serialization; +using ch.cyberduck.core; +using ch.cyberduck.core.preferences; + +namespace Ch.Cyberduck.Ui.Controller +{ + /// + /// Uses the application settings mechanism to persist UI settings like form postition and state + /// + /// + public sealed class PersistentFormHandler + { + /// + /// Instantiates new persistent form handler. + /// + /// The will be used as . + /// Default state of the window. + /// Default bounds of the window. + public PersistentFormHandler(Type windowType, int defaultWindowState, Rectangle defaultWindowBounds) + : this(windowType, null, defaultWindowState, defaultWindowBounds) + { + } + + /// + /// Instantiates new persistent form handler. + /// + /// The will be used as base . + /// Use this if you need to separate windows of same type. Will be appended to . + /// Default state of the window. + /// Default bounds of the window. + public PersistentFormHandler(Type windowType, string id, int defaultWindowState, Rectangle defaultWindowBounds) + { + Name = string.IsNullOrEmpty(id) + ? windowType.Name + "." + : windowType.Name + ":" + id + "."; + + DefaultWindowState = defaultWindowState; + DefaultWindowBounds = defaultWindowBounds; + } + + private Rectangle DefaultWindowBounds { get; set; } + + private int DefaultWindowState { get; set; } + + /// The form identifier in storage. + public string Name { get; private set; } + + /// Gets and sets the window state. (int instead of enum so that it can be in a BI layer, and not require a reference to WinForms) + public int WindowState + { + get { return Get("WindowState", DefaultWindowState); } + set { Set("WindowState", value); } + } + + /// Gets and sets the window bounds. (X, Y, Width and Height) + public Rectangle WindowBounds + { + get { return Get("WindowBounds", DefaultWindowBounds); } + set { Set("WindowBounds", value); } + } + + /// + /// + /// + /// + /// + /// + public String SerializeObject(T pObject) + { + try + { + XmlSerializer xs = new XmlSerializer(typeof (T)); + XmlWriterSettings writerSettings = new XmlWriterSettings + {OmitXmlDeclaration = true, Encoding = Encoding.UTF8}; + StringBuilder sb = new StringBuilder(); + using (XmlWriter xmlWriter = XmlWriter.Create(new StringWriter(sb), + writerSettings)) + { + xs.Serialize(xmlWriter, pObject); + } + return sb.ToString(); + } + catch (Exception) + { + return null; + } + } + + /// + /// + /// + /// + /// + /// + /// + public T DeserializeObject(String xml, T fallback) + { + try + { + XmlSerializer xs = new XmlSerializer(typeof (T)); + using (XmlReader reader = XmlReader.Create(new StringReader(xml))) + { + T obj = (T) xs.Deserialize(reader); + return obj; + } + } + catch (Exception) + { + return fallback; + } + } + + /// + /// Adds the given to the collection of values that will be + /// stored in database on . + /// + /// Type of object. + /// The key you want to use for this value. + /// The value to store. + public void Set(string key, T value) + { + string xmlString = SerializeObject(value); + if (xmlString == null) { + return; + } + string base64String = Convert.ToBase64String(Encoding.UTF8.GetBytes(xmlString)); + PreferencesFactory.get().setProperty("ui." + Name + key, base64String); + } + + /// + /// Same as , but uses default() as fallback value. + /// + /// Type of object + /// The key used on . + /// The stored object, or the default() object if something went wrong. + public T Get(string key) + { + return Get(key, default(T)); + } + + /// + /// Gets the value identified by the given . + /// + /// Type of object + /// The key used on . + /// Value to return if the given could not be found. + /// In other words, if you haven't used yet. + /// The stored object, or the object if something went wrong. + public T Get(string key, T fallback) + { + String val = PreferencesFactory.get().getProperty("ui." + Name + key); + if (null == val) + { + return fallback; + } + String xml = Encoding.UTF8.GetString(Convert.FromBase64String(val)); + return DeserializeObject(xml, fallback); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/PreferencesController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/PreferencesController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/PreferencesController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/PreferencesController.cs index e97e2d5a43..6b7bba87c8 100644 --- a/source/ch/cyberduck/ui/controller/PreferencesController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/PreferencesController.cs @@ -1,1315 +1,1315 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using ch.cyberduck.core; -using ch.cyberduck.core.editor; -using ch.cyberduck.core.features; -using ch.cyberduck.core.formatter; -using ch.cyberduck.core.io; -using ch.cyberduck.core.local; -using ch.cyberduck.core.preferences; -using ch.cyberduck.core.transfer; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Ui.Winforms; -using Ch.Cyberduck.Ui.Winforms.Controls; -using java.util; -using java.util.regex; -using org.apache.log4j; -using org.jets3t.service.model; -using StructureMap; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal class PreferencesController : WindowController, CollectionListener - { - private static readonly string ForFiles = LocaleFactory.localizedString("for Files", "Preferences"); - private static readonly string ForFolders = LocaleFactory.localizedString("for Folders", "Preferences"); - private static readonly Logger Log = Logger.getLogger(typeof (PreferencesController).FullName); - - private static readonly KeyValueIconTriple NoneBookmark = - new KeyValueIconTriple(null, LocaleFactory.localizedString("None"), null); - - private static readonly String NullString = "null"; - private static PreferencesController _instance; - private bool _downloadRegexInvalid; - private bool _uploadRegexInvalid; - - private PreferencesController(IPreferencesView view) - { - View = view; - Init(); - - View.SaveWorkspaceChangedEvent += View_SaveWorkspaceChangedEvent; - View.NewBrowserOnStartupChangedEvent += View_NewBrowserOnStartupChangedEvent; - View.DefaultBookmarkChangedEvent += View_DefaultBookmarkChangedEvent; - View.UseKeychainChangedEvent += View_UseKeychainChangedEvent; - View.ConfirmDisconnectChangedEvent += View_ConfirmDisconnectChangedEvent; - View.DefaultProtocolChangedEvent += View_DefaultProtocolChangedEvent; - View.DefaultEditorChangedEvent += View_DefaultEditorChangedEvent; - View.RepopulateEditorsEvent += View_RepopulateEditorsEvent; - View.AlwaysUseDefaultEditorChangedEvent += View_AlwaysUseDefaultEditorChangedEvent; - View.ShowHiddenFilesChangedEvent += View_ShowHiddenFilesChangedEvent; - View.DoubleClickEditorChangedEvent += View_DoubleClickEditorChangedEvent; - View.ReturnKeyRenamesChangedEvent += View_ReturnKeyRenamesChangedEvent; - View.InfoWindowShowsCurrentSelectionChangedEvent += View_InfoWindowShowsCurrentSelectionChangedEvent; - View.AlternatingRowBackgroundChangedEvent += View_AlternatingRowBackgroundChangedEvent; - View.HorizontalLinesChangedEvent += View_HorizontalLinesChangedEvent; - View.VerticalLinesChangedEvent += View_VerticalLinesChangedEvent; - View.DefaultEncodingChangedEvent += View_DefaultEncodingChangedEvent; - View.TransferModeChangedEvent += View_TransferModeChangedEvent; - View.TransfersToFrontChangedEvent += View_TransfersToFrontChangedEvent; - View.TransfersToBackChangedEvent += View_TransfersToBackChangedEvent; - View.RemoveFromTransfersChangedEvent += View_RemoveFromTransfersChangedEvent; - View.OpenAfterDownloadChangedEvent += View_OpenAfterDownloadChangedEvent; - View.DownloadFolderChangedEvent += View_DownloadFolderChangedEvent; - View.DuplicateDownloadActionChangedEvent += View_DuplicateDownloadActionChangedEvent; - View.DuplicateUploadActionChangedEvent += View_DuplicateUploadActionChangedEvent; - View.DuplicateDownloadOverwriteChangedEvent += View_DuplicateDownloadOverwriteChangedEvent; - View.DuplicateUploadOverwriteChangedEvent += View_DuplicateUploadOverwriteChangedEvent; - View.UploadWithTemporaryFilenameChangedEvent += View_UploadWithTemporaryFilenameChangedEvent; - View.BookmarkSizeChangedEvent += View_BookmarkSizeChangedEvent; - - View.ChmodDownloadChangedEvent += View_ChmodDownloadChangedEvent; - View.ChmodDownloadUseDefaultChangedEvent += View_ChmodDownloadUseDefaultChangedEvent; - View.ChmodDownloadTypeChangedEvent += View_ChmodDownloadTypeChangedEvent; - View.DownloadOwnerReadChangedEvent += View_DownloadDefaultPermissionsChangedEvent; - View.DownloadOwnerWriteChangedEvent += View_DownloadDefaultPermissionsChangedEvent; - View.DownloadOwnerExecuteChangedEvent += View_DownloadDefaultPermissionsChangedEvent; - View.DownloadGroupReadChangedEvent += View_DownloadDefaultPermissionsChangedEvent; - View.DownloadGroupWriteChangedEvent += View_DownloadDefaultPermissionsChangedEvent; - View.DownloadGroupExecuteChangedEvent += View_DownloadDefaultPermissionsChangedEvent; - View.DownloadOtherReadChangedEvent += View_DownloadDefaultPermissionsChangedEvent; - View.DownloadOtherWriteChangedEvent += View_DownloadDefaultPermissionsChangedEvent; - View.DownloadOtherExecuteChangedEvent += View_DownloadDefaultPermissionsChangedEvent; - View.ChmodUploadChangedEvent += View_ChmodUploadChangedEvent; - View.ChmodUploadUseDefaultChangedEvent += View_ChmodUploadUseDefaultChangedEvent; - View.ChmodUploadTypeChangedEvent += View_ChmodUploadTypeChangedEvent; - View.UploadOwnerReadChangedEvent += View_UploadDefaultPermissionsChangedEvent; - View.UploadOwnerWriteChangedEvent += View_UploadDefaultPermissionsChangedEvent; - View.UploadOwnerExecuteChangedEvent += View_UploadDefaultPermissionsChangedEvent; - View.UploadGroupReadChangedEvent += View_UploadDefaultPermissionsChangedEvent; - View.UploadGroupWriteChangedEvent += View_UploadDefaultPermissionsChangedEvent; - View.UploadGroupExecuteChangedEvent += View_UploadDefaultPermissionsChangedEvent; - View.UploadOtherReadChangedEvent += View_UploadDefaultPermissionsChangedEvent; - View.UploadOtherWriteChangedEvent += View_UploadDefaultPermissionsChangedEvent; - View.UploadOtherExecuteChangedEvent += View_UploadDefaultPermissionsChangedEvent; - - View.PreserveModificationDownloadChangedEvent += View_PreserveModificationDownloadChangedEvent; - View.PreserveModificationUploadChangedEvent += View_PreserveModificationUploadChangedEvent; - - View.DownloadSkipChangedEvent += View_DownloadSkipChangedEvent; - View.DownloadSkipRegexChangedEvent += View_DownloadSkipRegexChangedEvent; - View.DownloadSkipRegexDefaultEvent += View_DownloadSkipRegexDefaultEvent; - View.UploadSkipChangedEvent += View_UploadSkipChangedEvent; - View.UploadSkipRegexChangedEvent += View_UploadSkipRegexChangedEvent; - View.UploadSkipRegexDefaultEvent += View_UploadSkipRegexDefaultEvent; - - View.DefaultDownloadThrottleChangedEvent += View_DefaultDownloadThrottleChangedEvent; - View.DefaultUploadThrottleChangedEvent += View_DefaultUploadThrottleChangedEvent; - - View.ConnectionTimeoutChangedEvent += View_ConnectionTimeoutChangedEvent; - View.RetryDelayChangedEvent += View_RetryDelayChangedEvent; - View.RetriesChangedEvent += View_RetriesChangedEvent; - - View.UseSystemProxyChangedEvent += View_UseSystemProxyChangedEvent; - View.ChangeSystemProxyEvent += View_ChangeSystemProxyEvent; - - #region S3 - - View.DefaultBucketLocationChangedEvent += View_DefaultBucketLocationChangedEvent; - View.DefaultStorageClassChangedEvent += View_DefaultStorageClassChangedEvent; - View.DefaultEncryptionChangedEvent += View_DefaultEncryptionChangedEvent; - - #endregion - - #region Google Docs - - View.DocumentExportFormatChanged += View_DocumentExportFormatChanged; - View.PresentationExportFormatChanged += View_PresentationExportFormatChanged; - View.SpreadsheetExportFormatChanged += View_SpreadsheetExportFormatChanged; - View.ConvertUploadsChanged += View_ConvertUploadsChanged; - View.OcrUploadsChanged += View_OcrUploadsChanged; - - #endregion - - #region Language - - View.LocaleChanged += View_LocaleChanged; - - #endregion - - #region Update - - View.AutomaticUpdateChangedEvent += View_AutomaticUpdateChangedEvent; - View.CheckForUpdateEvent += View_CheckForUpdateEvent; - View.UpdateFeedChangedEvent += View_UpdateFeedChangedEvent; - - #endregion - } - - public static PreferencesController Instance - { - get - { - if (null == _instance) - { - _instance = new PreferencesController(ObjectFactory.GetInstance()); - } - return _instance; - } - } - - public override bool Singleton - { - get { return true; } - } - - public void collectionLoaded() - { - ; - } - - public void collectionItemAdded(object obj) - { - Invoke(delegate - { - Host selected = View.DefaultBookmark; - PopulateBookmarks(); - SelectDefaultBookmark(selected); - }); - } - - public void collectionItemRemoved(object obj) - { - Invoke(delegate - { - Host selected = View.DefaultBookmark; - PopulateBookmarks(); - SelectDefaultBookmark(selected); - }); - } - - public void collectionItemChanged(object obj) - { - Invoke(delegate - { - Host selected = View.DefaultBookmark; - PopulateBookmarks(); - SelectDefaultBookmark(selected); - }); - } - - private void View_BookmarkSizeChangedEvent() - { - PreferencesFactory.get().setProperty("bookmark.icon.size", View.BookmarkSize); - foreach (BrowserController b in MainController.Browsers) - { - b.UpdateBookmarks(); - } - } - - private void View_DefaultEncryptionChangedEvent() - { - PreferencesFactory.get() - .setProperty("s3.encryption.algorithm", - NullString.Equals(View.DefaultEncryption) ? null : View.DefaultEncryption); - } - - private void View_AlwaysUseDefaultEditorChangedEvent() - { - PreferencesFactory.get().setProperty("editor.alwaysUseDefault", View.AlwaysUseDefaultEditor); - } - - private void View_RepopulateEditorsEvent() - { - PopulateAndSelectEditor(); - } - - private void View_DefaultEditorChangedEvent() - { - Application selected = View.DefaultEditor; - PreferencesFactory.get().setProperty("editor.bundleIdentifier", selected.getIdentifier()); - } - - private void View_ChangeSystemProxyEvent() - { - LaunchIEOptions(4); - } - - /// - /// - /// - /// Register to select (connections settings=4) - private void LaunchIEOptions(int activeRegister) - { - ApplicationLauncherFactory.get() - .open(new Application("rundll32.exe"), "shell32.dll,Control_RunDLL inetcpl.cpl,," + activeRegister); - } - - private void View_UpdateFeedChangedEvent() - { - PreferencesFactory.get().setProperty("update.feed", View.UpdateFeed); - } - - private void View_UploadWithTemporaryFilenameChangedEvent() - { - PreferencesFactory.get().setProperty("queue.upload.file.temporary", View.UploadWithTemporaryFilename); - } - - private void View_UseSystemProxyChangedEvent() - { - PreferencesFactory.get().setProperty("connection.proxy.enable", View.UseSystemProxy); - } - - private void View_CheckForUpdateEvent() - { - UpdateController.Instance.ForceCheckForUpdates(false); - } - - private void View_AutomaticUpdateChangedEvent() - { - PreferencesFactory.get().setProperty("update.check", View.AutomaticUpdateCheck); - } - - private void View_LocaleChanged() - { - if ("default".Equals(View.CurrentLocale)) - { - PreferencesFactory.get().deleteProperty("application.language"); - PreferencesFactory.get().setProperty("application.language.custom", false.ToString()); - } - else - { - PreferencesFactory.get().setProperty("application.language", View.CurrentLocale); - PreferencesFactory.get().setProperty("application.language.custom", true.ToString()); - } - } - - private void View_OcrUploadsChanged() - { - PreferencesFactory.get().setProperty("google.docs.upload.ocr", View.OcrUploads); - } - - private void View_ConvertUploadsChanged() - { - PreferencesFactory.get().setProperty("google.docs.upload.convert", View.ConvertUploads); - } - - private void View_SpreadsheetExportFormatChanged() - { - PreferencesFactory.get().setProperty("google.docs.export.spreadsheet", View.SpreadsheetExportFormat); - } - - private void View_PresentationExportFormatChanged() - { - PreferencesFactory.get().setProperty("google.docs.export.presentation", View.PresentationExportFormat); - } - - private void View_DocumentExportFormatChanged() - { - PreferencesFactory.get().setProperty("google.docs.export.document", View.DocumentExportFormat); - } - - private void View_DefaultStorageClassChangedEvent() - { - PreferencesFactory.get().setProperty("s3.storage.class", View.DefaultStorageClass); - } - - private void View_RetriesChangedEvent() - { - PreferencesFactory.get().setProperty("connection.retry", View.Retries); - } - - private void View_RetryDelayChangedEvent() - { - PreferencesFactory.get().setProperty("connection.retry.delay", View.RetryDelay); - } - - private void View_ConnectionTimeoutChangedEvent() - { - PreferencesFactory.get().setProperty("connection.timeout.seconds", View.ConnectionTimeout); - } - - private void View_DefaultUploadThrottleChangedEvent() - { - PreferencesFactory.get().setProperty("queue.upload.bandwidth.bytes", View.DefaultUploadThrottle); - } - - private void View_DefaultDownloadThrottleChangedEvent() - { - PreferencesFactory.get().setProperty("queue.download.bandwidth.bytes", View.DefaultDownloadThrottle); - } - - private void View_DefaultBucketLocationChangedEvent() - { - PreferencesFactory.get().setProperty("s3.location", View.DefaultBucketLocation); - } - - private void View_UploadSkipRegexDefaultEvent() - { - string regex = PreferencesFactory.get().getProperty("queue.upload.skip.regex.default"); - View.UploadSkipRegex = regex; - PreferencesFactory.get().setProperty("queue.upload.skip.regex", regex); - } - - private void View_UploadSkipRegexChangedEvent() - { - string value = View.UploadSkipRegex.Trim(); - if (string.IsNullOrEmpty(value)) - { - PreferencesFactory.get().setProperty("queue.upload.skip.enable", false); - PreferencesFactory.get().setProperty("queue.upload.skip.regex", value); - View.UploadSkip = false; - } - try - { - Pattern compiled = Pattern.compile(value); - PreferencesFactory.get().setProperty("queue.upload.skip.regex", compiled.pattern()); - if (_uploadRegexInvalid) - { - View.MarkUploadSkipRegex(-1); - } - _uploadRegexInvalid = false; - } - catch (PatternSyntaxException ex) - { - _uploadRegexInvalid = true; - View.MarkUploadSkipRegex(ex.getIndex()); - } - } - - private void View_UploadSkipChangedEvent() - { - PreferencesFactory.get().setProperty("queue.upload.skip.enable", View.DownloadSkip); - View.UploadSkipRegexEnabled = View.UploadSkip; - } - - private void View_DownloadSkipRegexDefaultEvent() - { - string regex = PreferencesFactory.get().getProperty("queue.download.skip.regex.default"); - View.DownloadSkipRegex = regex; - PreferencesFactory.get().setProperty("queue.download.skip.regex", regex); - } - - private void View_DownloadSkipChangedEvent() - { - PreferencesFactory.get().setProperty("queue.download.skip.enable", View.DownloadSkip); - View.DownloadSkipRegexEnabled = View.DownloadSkip; - } - - private void View_DownloadSkipRegexChangedEvent() - { - string value = View.DownloadSkipRegex.Trim(); - if (string.IsNullOrEmpty(value)) - { - PreferencesFactory.get().setProperty("queue.download.skip.enable", false); - PreferencesFactory.get().setProperty("queue.download.skip.regex", value); - View.DownloadSkip = false; - } - try - { - Pattern compiled = Pattern.compile(value); - PreferencesFactory.get().setProperty("queue.download.skip.regex", compiled.pattern()); - if (_downloadRegexInvalid) - { - View.MarkDownloadSkipRegex(-1); - } - _downloadRegexInvalid = false; - } - catch (PatternSyntaxException ex) - { - _downloadRegexInvalid = true; - View.MarkDownloadSkipRegex(ex.getIndex()); - } - } - - private void View_PreserveModificationUploadChangedEvent() - { - PreferencesFactory.get().setProperty("queue.upload.timestamp.change", View.PreserveModificationUpload); - } - - private void View_PreserveModificationDownloadChangedEvent() - { - PreferencesFactory.get().setProperty("queue.download.timestamp.change", View.PreserveModificationDownload); - } - - private void View_ChmodUploadTypeChangedEvent() - { - Permission p = null; - if (ForFiles.Equals(View.ChmodUploadType)) - { - p = new Permission(PreferencesFactory.get().getInteger("queue.upload.permissions.file.default")); - } - if (ForFolders.Equals(View.ChmodUploadType)) - { - p = new Permission(PreferencesFactory.get().getInteger("queue.upload.permissions.folder.default")); - } - if (null == p) - { - Log.error("No selected item"); - return; - } - Permission.Action ownerPerm = p.getUser(); - Permission.Action groupPerm = p.getGroup(); - Permission.Action otherPerm = p.getOther(); - - View.UploadOwnerRead = ownerPerm.implies(Permission.Action.read); - View.UploadOwnerWrite = ownerPerm.implies(Permission.Action.write); - View.UploadOwnerExecute = ownerPerm.implies(Permission.Action.execute); - - View.UploadGroupRead = groupPerm.implies(Permission.Action.read); - View.UploadGroupWrite = groupPerm.implies(Permission.Action.write); - View.UploadGroupExecute = groupPerm.implies(Permission.Action.execute); - - View.UploadOtherRead = otherPerm.implies(Permission.Action.read); - View.UploadOtherWrite = otherPerm.implies(Permission.Action.write); - View.UploadOtherExecute = otherPerm.implies(Permission.Action.execute); - } - - private void View_ChmodUploadUseDefaultChangedEvent() - { - PreferencesFactory.get().setProperty("queue.upload.permissions.default", View.ChmodUploadUseDefault); - View.ChmodUploadDefaultEnabled = View.ChmodUploadUseDefault; - } - - private void View_ChmodUploadChangedEvent() - { - PreferencesFactory.get().setProperty("queue.upload.permissions.change", View.ChmodUpload); - View.ChmodUploadEnabled = View.ChmodUpload; - } - - private void View_ChmodDownloadTypeChangedEvent() - { - Permission p = null; - if (ForFiles.Equals(View.ChmodDownloadType)) - { - p = new Permission(PreferencesFactory.get().getInteger("queue.download.permissions.file.default")); - } - if (ForFolders.Equals(View.ChmodDownloadType)) - { - p = new Permission(PreferencesFactory.get().getInteger("queue.download.permissions.folder.default")); - } - if (null == p) - { - Log.error("No selected item"); - return; - } - Permission.Action ownerPerm = p.getUser(); - Permission.Action groupPerm = p.getGroup(); - Permission.Action otherPerm = p.getOther(); - - View.DownloadOwnerRead = ownerPerm.implies(Permission.Action.read); - View.DownloadOwnerWrite = ownerPerm.implies(Permission.Action.write); - View.DownloadOwnerExecute = ownerPerm.implies(Permission.Action.execute); - - View.DownloadGroupRead = groupPerm.implies(Permission.Action.read); - View.DownloadGroupWrite = groupPerm.implies(Permission.Action.write); - View.DownloadGroupExecute = groupPerm.implies(Permission.Action.execute); - - View.DownloadOtherRead = otherPerm.implies(Permission.Action.read); - View.DownloadOtherWrite = otherPerm.implies(Permission.Action.write); - View.DownloadOtherExecute = otherPerm.implies(Permission.Action.execute); - } - - private void View_ChmodDownloadUseDefaultChangedEvent() - { - PreferencesFactory.get().setProperty("queue.download.permissions.default", View.ChmodDownloadUseDefault); - View.ChmodDownloadDefaultEnabled = View.ChmodDownloadUseDefault; - } - - private void View_ChmodDownloadChangedEvent() - { - PreferencesFactory.get().setProperty("queue.download.permissions.change", View.ChmodDownload); - View.ChmodDownloadEnabled = View.ChmodDownload; - } - - private void View_UploadDefaultPermissionsChangedEvent() - { - Permission.Action u = Permission.Action.none; - if (View.UploadOwnerRead) - { - u = u.or(Permission.Action.read); - } - if (View.UploadOwnerWrite) - { - u = u.or(Permission.Action.write); - } - if (View.UploadOwnerExecute) - { - u = u.or(Permission.Action.execute); - } - Permission.Action g = Permission.Action.none; - if (View.UploadGroupRead) - { - g = g.or(Permission.Action.read); - } - if (View.UploadGroupWrite) - { - g = g.or(Permission.Action.write); - } - if (View.UploadGroupExecute) - { - g = g.or(Permission.Action.execute); - } - Permission.Action o = Permission.Action.none; - if (View.UploadOtherRead) - { - o = o.or(Permission.Action.read); - } - if (View.UploadOtherWrite) - { - o = o.or(Permission.Action.write); - } - if (View.UploadOtherExecute) - { - o = o.or(Permission.Action.execute); - } - Permission permission = new Permission(u, g, o); - if (ForFiles.Equals(View.ChmodUploadType)) - { - PreferencesFactory.get().setProperty("queue.upload.permissions.file.default", permission.getMode()); - } - if (ForFolders.Equals(View.ChmodUploadType)) - { - PreferencesFactory.get().setProperty("queue.upload.permissions.folder.default", permission.getMode()); - } - } - - private void View_DownloadDefaultPermissionsChangedEvent() - { - Permission.Action u = Permission.Action.none; - if (View.DownloadOwnerRead) - { - u = u.or(Permission.Action.read); - } - if (View.DownloadOwnerWrite) - { - u = u.or(Permission.Action.write); - } - if (View.DownloadOwnerExecute) - { - u = u.or(Permission.Action.execute); - } - Permission.Action g = Permission.Action.none; - if (View.DownloadGroupRead) - { - g = g.or(Permission.Action.read); - } - if (View.DownloadGroupWrite) - { - g = g.or(Permission.Action.write); - } - if (View.DownloadGroupExecute) - { - g = g.or(Permission.Action.execute); - } - Permission.Action o = Permission.Action.none; - if (View.DownloadOtherRead) - { - o = o.or(Permission.Action.read); - } - if (View.DownloadOtherWrite) - { - o = o.or(Permission.Action.write); - } - if (View.DownloadOtherExecute) - { - o = o.or(Permission.Action.execute); - } - Permission permission = new Permission(u, g, o); - if (ForFiles.Equals(View.ChmodDownloadType)) - { - PreferencesFactory.get().setProperty("queue.download.permissions.file.default", permission.getMode()); - } - if (ForFolders.Equals(View.ChmodDownloadType)) - { - PreferencesFactory.get().setProperty("queue.download.permissions.folder.default", permission.getMode()); - } - } - - private void View_DuplicateUploadOverwriteChangedEvent() - { - if (View.DuplicateUploadOverwrite) - { - PreferencesFactory.get().setProperty("queue.upload.reload.action", TransferAction.overwrite.toString()); - } - else - { - PreferencesFactory.get() - .setProperty("queue.upload.reload.action", - PreferencesFactory.get().getProperty("queue.upload.action")); - } - } - - private void View_DuplicateDownloadOverwriteChangedEvent() - { - if (View.DuplicateDownloadOverwrite) - { - PreferencesFactory.get() - .setProperty("queue.download.reload.action", TransferAction.overwrite.toString()); - } - else - { - PreferencesFactory.get() - .setProperty("queue.download.reload.action", - PreferencesFactory.get().getProperty("queue.download.action")); - } - } - - private void View_DuplicateUploadActionChangedEvent() - { - duplicateComboboxClicked(View.DuplicateUploadAction, "queue.upload.action"); - View_DuplicateUploadOverwriteChangedEvent(); - } - - private void duplicateComboboxClicked(String selected, String property) - { - if (selected.Equals(TransferAction.callback.getTitle())) - { - PreferencesFactory.get().setProperty(property, TransferAction.callback.toString()); - } - else if (selected.Equals(TransferAction.overwrite.getTitle())) - { - PreferencesFactory.get().setProperty(property, TransferAction.overwrite.toString()); - } - else if (selected.Equals(TransferAction.resume.getTitle())) - { - PreferencesFactory.get().setProperty(property, TransferAction.resume.toString()); - } - else if (selected.Equals(TransferAction.rename.getTitle())) - { - PreferencesFactory.get().setProperty(property, TransferAction.rename.toString()); - } - else if (selected.Equals(TransferAction.renameexisting.getTitle())) - { - PreferencesFactory.get().setProperty(property, TransferAction.renameexisting.toString()); - } - else if (selected.Equals(TransferAction.comparison.getTitle())) - { - PreferencesFactory.get().setProperty(property, TransferAction.comparison.toString()); - } - else if (selected.Equals(TransferAction.skip.getTitle())) - { - PreferencesFactory.get().setProperty(property, TransferAction.skip.toString()); - } - } - - private void View_DuplicateDownloadActionChangedEvent() - { - duplicateComboboxClicked(View.DuplicateDownloadAction, "queue.download.action"); - View_DuplicateDownloadOverwriteChangedEvent(); - } - - private void View_DownloadFolderChangedEvent() - { - PreferencesFactory.get().setProperty("queue.download.folder", View.DownloadFolder); - } - - private void View_OpenAfterDownloadChangedEvent() - { - PreferencesFactory.get().setProperty("queue.download.complete.open", View.OpenAfterDownload); - } - - private void View_RemoveFromTransfersChangedEvent() - { - PreferencesFactory.get().setProperty("queue.removeItemWhenComplete", View.RemoveFromTransfers); - } - - private void View_TransfersToBackChangedEvent() - { - PreferencesFactory.get().setProperty("queue.window.open.transfer.stop", View.TransfersToBack); - } - - private void View_TransfersToFrontChangedEvent() - { - PreferencesFactory.get().setProperty("queue.window.open.transfer.start", View.TransfersToFront); - } - - private void View_TransferModeChangedEvent() - { - PreferencesFactory.get().setProperty("queue.transfer.type", View.TransferMode.name()); - } - - private void View_DefaultEncodingChangedEvent() - { - PreferencesFactory.get().setProperty("browser.charset.encoding", View.DefaultEncoding); - } - - private void View_VerticalLinesChangedEvent() - { - PreferencesFactory.get().setProperty("browser.verticalLines", View.VerticalLines); - //todo - //BrowserController.updateBrowserTableAttributes(); - } - - private void View_HorizontalLinesChangedEvent() - { - PreferencesFactory.get().setProperty("browser.horizontalLines", View.HorizontalLines); - //todo - //BrowserController.updateBrowserTableAttributes(); - } - - private void View_AlternatingRowBackgroundChangedEvent() - { - PreferencesFactory.get().setProperty("browser.alternatingRows", View.AlternatingRowBackground); - //todo - //BrowserController.updateBrowserTableAttributes(); - } - - private void View_InfoWindowShowsCurrentSelectionChangedEvent() - { - PreferencesFactory.get().setProperty("browser.info.inspector", View.InfoWindowShowsCurrentSelection); - } - - private void View_DoubleClickEditorChangedEvent() - { - PreferencesFactory.get().setProperty("browser.doubleclick.edit", View.DoubleClickEditor); - } - - private void View_ReturnKeyRenamesChangedEvent() - { - PreferencesFactory.get().setProperty("browser.enterkey.rename", View.ReturnKeyRenames); - } - - private void View_ShowHiddenFilesChangedEvent() - { - PreferencesFactory.get().setProperty("browser.showHidden", View.ShowHiddenFiles); - } - - private void View_DefaultProtocolChangedEvent() - { - Protocol selected = View.DefaultProtocol; - PreferencesFactory.get().setProperty("connection.protocol.default", selected.getProvider()); - PreferencesFactory.get().setProperty("connection.port.default", selected.getDefaultPort()); - } - - private void View_ConfirmDisconnectChangedEvent() - { - PreferencesFactory.get().setProperty("browser.confirmDisconnect", View.ConfirmDisconnect); - } - - private void View_UseKeychainChangedEvent() - { - PreferencesFactory.get().setProperty("connection.login.useKeychain", View.UseKeychain); - } - - private void View_DefaultBookmarkChangedEvent() - { - if (null == View.DefaultBookmark) - { - PreferencesFactory.get().deleteProperty("browser.open.bookmark.default"); - } - else - { - PreferencesFactory.get().setProperty("browser.open.bookmark.default", View.DefaultBookmark.getUuid()); - } - } - - private void SelectDefaultBookmark(Host host) - { - if (BookmarkCollection.defaultCollection().contains(host)) - { - View.DefaultBookmark = host; - } - else - { - View.DefaultBookmark = null; - } - } - - private void SelectDefaultBookmark(string nickname) - { - if (null == nickname) - { - View.DefaultBookmark = null; - } - else - { - bool bookmarkFound = false; - foreach (Host host in BookmarkCollection.defaultCollection()) - { - if (nickname.Equals(host.getUuid())) - { - View.DefaultBookmark = host; - bookmarkFound = true; - break; - } - } - if (!bookmarkFound) - { - View.DefaultBookmark = null; - } - } - } - - private void View_NewBrowserOnStartupChangedEvent() - { - PreferencesFactory.get().setProperty("browser.openUntitled", View.NewBrowserOnStartup); - } - - private void View_SaveWorkspaceChangedEvent() - { - PreferencesFactory.get().setProperty("browser.serialize", View.SaveWorkspace); - } - - private void Init() - { - #region General - - View.SaveWorkspace = PreferencesFactory.get().getBoolean("browser.serialize"); - View.NewBrowserOnStartup = PreferencesFactory.get().getBoolean("browser.openUntitled"); - PopulateBookmarks(); - BookmarkCollection.defaultCollection().addListener(this); - View.ViewClosedEvent += delegate { BookmarkCollection.defaultCollection().removeListener(this); }; - SelectDefaultBookmark(PreferencesFactory.get().getProperty("browser.open.bookmark.default")); - View.ConfirmDisconnect = PreferencesFactory.get().getBoolean("browser.confirmDisconnect"); - View.UseKeychain = PreferencesFactory.get().getBoolean("connection.login.useKeychain"); - PopulateDefaultProtocols(); - View.DefaultProtocol = - ProtocolFactory.forName(PreferencesFactory.get().getProperty("connection.protocol.default")); - View.AlternatingRowBackground = PreferencesFactory.get().getBoolean("browser.alternatingRows"); - View.VerticalLines = PreferencesFactory.get().getBoolean("browser.verticalLines"); - View.HorizontalLines = PreferencesFactory.get().getBoolean("browser.horizontalLines"); - PopulateEncodings(); - View.DefaultEncoding = PreferencesFactory.get().getProperty("browser.charset.encoding"); - - #endregion - - #region Browser - - View.InfoWindowShowsCurrentSelection = PreferencesFactory.get().getBoolean("browser.info.inspector"); - View.ShowHiddenFiles = PreferencesFactory.get().getBoolean("browser.showHidden"); - View.DoubleClickEditor = PreferencesFactory.get().getBoolean("browser.doubleclick.edit"); - View.ReturnKeyRenames = PreferencesFactory.get().getBoolean("browser.enterkey.rename"); - PopulateBookmarkSize(); - View.BookmarkSize = PreferencesFactory.get().getInteger("bookmark.icon.size"); - - #endregion - - #region Transfers - General - - PopulateTransferModes(); - View.TransferMode = Host.TransferType.valueOf(PreferencesFactory.get().getProperty("queue.transfer.type")); - View.TransfersToFront = PreferencesFactory.get().getBoolean("queue.window.open.transfer.start"); - View.TransfersToBack = PreferencesFactory.get().getBoolean("queue.window.open.transfer.stop"); - View.RemoveFromTransfers = PreferencesFactory.get().getBoolean("queue.removeItemWhenComplete"); - View.OpenAfterDownload = PreferencesFactory.get().getBoolean("queue.download.complete.open"); - View.DownloadFolder = PreferencesFactory.get().getProperty("queue.download.folder"); - PopulateDuplicateActions(); - View.DuplicateDownloadAction = GetDuplicateAction("queue.download.action"); - View.DuplicateUploadAction = GetDuplicateAction("queue.upload.action"); - View.DuplicateDownloadOverwrite = - PreferencesFactory.get() - .getProperty("queue.download.reload.action") - .Equals(TransferAction.overwrite.toString()) - ? true - : false; - View.DuplicateUploadOverwrite = - PreferencesFactory.get() - .getProperty("queue.upload.reload.action") - .Equals(TransferAction.overwrite.toString()) - ? true - : false; - View.UploadWithTemporaryFilename = PreferencesFactory.get().getBoolean("queue.upload.file.temporary"); - - #endregion - - #region Editor - - PopulateAndSelectEditor(); - View.AlwaysUseDefaultEditor = PreferencesFactory.get().getBoolean("editor.alwaysUseDefault"); - - #endregion - - #region Transfers - Permissions - - PopulateChmodTypes(); - View.ChmodDownload = PreferencesFactory.get().getBoolean("queue.download.permissions.change"); - View.ChmodDownloadEnabled = View.ChmodDownload; - View.ChmodDownloadUseDefault = PreferencesFactory.get().getBoolean("queue.download.permissions.default"); - View.ChmodDownloadDefaultEnabled = View.ChmodDownloadUseDefault; - View.ChmodDownloadType = ForFiles; - View_ChmodDownloadTypeChangedEvent(); - View.ChmodUpload = PreferencesFactory.get().getBoolean("queue.upload.permissions.change"); - View.ChmodUploadEnabled = View.ChmodUpload; - View.ChmodUploadUseDefault = PreferencesFactory.get().getBoolean("queue.upload.permissions.default"); - View.ChmodUploadDefaultEnabled = PreferencesFactory.get().getBoolean("queue.upload.permissions.change") && - PreferencesFactory.get().getBoolean("queue.upload.permissions.default"); - View.ChmodUploadType = ForFiles; - View_ChmodUploadTypeChangedEvent(); - - #endregion - - #region Transfers - Timestamps - - View.PreserveModificationDownload = PreferencesFactory.get().getBoolean("queue.download.timestamp.change"); - View.PreserveModificationUpload = PreferencesFactory.get().getBoolean("queue.upload.timestamp.change"); - - #endregion - - #region Transfers - Advanced - - View.DownloadSkip = PreferencesFactory.get().getBoolean("queue.download.skip.enable"); - View.DownloadSkipRegex = PreferencesFactory.get().getProperty("queue.download.skip.regex"); - View.DownloadSkipRegexEnabled = View.DownloadSkip; - View.UploadSkip = PreferencesFactory.get().getBoolean("queue.upload.skip.enable"); - View.UploadSkipRegex = PreferencesFactory.get().getProperty("queue.upload.skip.regex"); - View.UploadSkipRegexEnabled = View.UploadSkip; - - PopulateDefaultDownloadThrottleList(); - PopulateDefaultUploadThrottleList(); - View.DefaultDownloadThrottle = PreferencesFactory.get().getFloat("queue.download.bandwidth.bytes"); - View.DefaultUploadThrottle = PreferencesFactory.get().getFloat("queue.upload.bandwidth.bytes"); - View.Retries = PreferencesFactory.get().getInteger("connection.retry"); - View.RetryDelay = PreferencesFactory.get().getInteger("connection.retry.delay"); - View.ConnectionTimeout = PreferencesFactory.get().getInteger("connection.timeout.seconds"); - View.UseSystemProxy = PreferencesFactory.get().getBoolean("connection.proxy.enable"); - - #endregion - - #region S3 - - PopulateDefaultBucketLocations(); - View.DefaultBucketLocation = PreferencesFactory.get().getProperty("s3.location"); - PopulateDefaultStorageClasses(); - View.DefaultStorageClass = PreferencesFactory.get().getProperty("s3.storage.class"); - PopulateDefaultEncryption(); - String algorithm = PreferencesFactory.get().getProperty("s3.encryption.algorithm"); - View.DefaultEncryption = Utils.IsNotBlank(algorithm) ? algorithm : NullString; - - #endregion - - #region Google Docs - - PopulateDocumentExportFormats(); - View.DocumentExportFormat = PreferencesFactory.get().getProperty("google.docs.export.document"); - PopulatePresentationExportFormats(); - View.PresentationExportFormat = PreferencesFactory.get().getProperty("google.docs.export.presentation"); - PopulateSpreadsheetExportFormats(); - View.SpreadsheetExportFormat = PreferencesFactory.get().getProperty("google.docs.export.spreadsheet"); - View.ConvertUploads = PreferencesFactory.get().getBoolean("google.docs.upload.convert"); - View.OcrUploads = PreferencesFactory.get().getBoolean("google.docs.upload.ocr"); - - #endregion - - #region Update - - View.AutomaticUpdateCheck = PreferencesFactory.get().getBoolean("update.check"); - long lastCheck = PreferencesFactory.get().getLong("update.check.last"); - View.LastUpdateCheck = 0 == lastCheck - ? String.Empty - : UserDefaultsDateFormatter.GetLongFormat( - new DateTime(PreferencesFactory.get().getLong("update.check.last"))); - PopulateFeeds(); - View.UpdateFeed = PreferencesFactory.get().getProperty("update.feed"); - - #endregion - - #region Language - - PopulateLanguages(); - string userLanguage = PreferencesFactory.get().getProperty("application.language"); - - if (PreferencesFactory.get().getBoolean("application.language.custom")) - { - View.CurrentLocale = userLanguage; - } - else - { - View.CurrentLocale = "default"; - } - - #endregion - } - - private void PopulateBookmarkSize() - { - List> sizes = new List>(); - sizes.Add(new KeyValuePair(BookmarkController.SmallBookmarkSize, - LocaleFactory.localizedString("Use Small Icons", "Preferences"))); - sizes.Add(new KeyValuePair(BookmarkController.MediumBookmarkSize, - LocaleFactory.localizedString("Use Medium Icons", "Preferences"))); - sizes.Add(new KeyValuePair(BookmarkController.LargeBookmarkSize, - LocaleFactory.localizedString("Use Large Icons", "Preferences"))); - View.PopulateBookmarkSize(sizes); - } - - private void PopulateDefaultEncryption() - { - IList> algorithms = new List>(); - algorithms.Add(new KeyValuePair(NullString, LocaleFactory.localizedString("None"))); - algorithms.Add(new KeyValuePair("AES256", LocaleFactory.localizedString("AES256", "S3"))); - View.PopulateDefaultEncryption(algorithms); - } - - private void PopulateFeeds() - { - IList> feeds = new List>(); - feeds.Add(new KeyValuePair("release", LocaleFactory.localizedString("Release"))); - feeds.Add(new KeyValuePair("beta", LocaleFactory.localizedString("Beta"))); - feeds.Add(new KeyValuePair("nightly", LocaleFactory.localizedString("Snapshot Builds"))); - View.PopulateUpdateFeeds(feeds); - } - - private void PopulateLanguages() - { - IList> locales = new List>(); - - List appLocales = PreferencesFactory.get().applicationLocales(); - locales.Add(new KeyValuePair("default", LocaleFactory.localizedString("Default"))); - for (int i = 0; i < appLocales.size(); i++) - { - string locale = (string) appLocales.get(i); - locales.Add(new KeyValuePair(locale, PreferencesFactory.get().getDisplayName(locale))); - } - View.PopulateLocales(locales); - } - - private void PopulateSpreadsheetExportFormats() - { - IList> f = new List>(); - string formats = PreferencesFactory.get().getProperty("google.docs.export.spreadsheet.formats"); - foreach (string s in formats.Split(',')) - { - string ext = "." + s; - f.Add(new KeyValuePair(s, - String.Format("{0} ({1})", FileDescriptorFactory.get().getKind(ext), ext))); - } - View.PopulateSpreadsheetExportFormats(f); - } - - private void PopulatePresentationExportFormats() - { - IList> f = new List>(); - string formats = PreferencesFactory.get().getProperty("google.docs.export.presentation.formats"); - foreach (string s in formats.Split(',')) - { - string ext = "." + s; - f.Add(new KeyValuePair(s, - String.Format("{0} ({1})", FileDescriptorFactory.get().getKind(ext), ext))); - } - View.PopulatePresentationExportFormats(f); - } - - private void PopulateDocumentExportFormats() - { - IList> f = new List>(); - string formats = PreferencesFactory.get().getProperty("google.docs.export.document.formats"); - foreach (string s in formats.Split(',')) - { - string ext = "." + s; - f.Add(new KeyValuePair(s, - String.Format("{0} ({1})", FileDescriptorFactory.get().getKind(ext), ext))); - } - View.PopulateDocumentExportFormats(f); - } - - private void PopulateDefaultUploadThrottleList() - { - IList> list = new List>(); - list.Add(new KeyValuePair(BandwidthThrottle.UNLIMITED, - LocaleFactory.localizedString("Unlimited Bandwidth", "Preferences"))); - foreach (String option in - PreferencesFactory.get() - .getProperty("queue.bandwidth.options") - .Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries)) - { - list.Add(new KeyValuePair(Convert.ToInt32(option.Trim()), - (SizeFormatterFactory.get().format(Convert.ToInt32(option.Trim())) + "/s"))); - } - View.PopulateDefaultUploadThrottleList(list); - } - - private void PopulateDefaultDownloadThrottleList() - { - IList> list = new List>(); - list.Add(new KeyValuePair(BandwidthThrottle.UNLIMITED, - LocaleFactory.localizedString("Unlimited Bandwidth", "Preferences"))); - foreach (String option in - PreferencesFactory.get() - .getProperty("queue.bandwidth.options") - .Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries)) - { - list.Add(new KeyValuePair(Convert.ToInt32(option.Trim()), - (SizeFormatterFactory.get().format(Convert.ToInt32(option.Trim())) + "/s"))); - } - View.PopulateDefaultDownloadThrottleList(list); - } - - private void PopulateDefaultBucketLocations() - { - IList> defaultBucketLocations = new List>(); - Set locations = ProtocolFactory.S3_SSL.getRegions(); - Iterator iter = locations.iterator(); - while (iter.hasNext()) - { - Location.Name location = (Location.Name) iter.next(); - defaultBucketLocations.Add(new KeyValuePair(location.getIdentifier(), - location.toString())); - } - View.PopulateDefaultBucketLocations(defaultBucketLocations); - } - - private void PopulateDefaultStorageClasses() - { - IList> storageClasses = new List>(); - storageClasses.Add(new KeyValuePair(S3Object.STORAGE_CLASS_STANDARD, - LocaleFactory.localizedString(S3Object.STORAGE_CLASS_STANDARD, "S3")) - ); - storageClasses.Add(new KeyValuePair("STANDARD_IA", - LocaleFactory.localizedString("STANDARD_IA", "S3")) - ); - storageClasses.Add(new KeyValuePair(S3Object.STORAGE_CLASS_REDUCED_REDUNDANCY, - LocaleFactory.localizedString(S3Object.STORAGE_CLASS_REDUCED_REDUNDANCY, "S3")) - ); - View.PopulateDefaultStorageClasses(storageClasses); - } - - private void PopulateChmodTypes() - { - List chmodDownloadTypes = new List(); - chmodDownloadTypes.Add(ForFiles); - chmodDownloadTypes.Add(ForFolders); - View.PopulateChmodDownloadTypes(chmodDownloadTypes); - - List chmodUploadTypes = new List(); - chmodUploadTypes.Add(ForFiles); - chmodUploadTypes.Add(ForFolders); - View.PopulateChmodUploadTypes(chmodUploadTypes); - } - - private string GetDuplicateAction(string property) - { - return TransferAction.forName(PreferencesFactory.get().getProperty(property)).getTitle(); - } - - private void PopulateDuplicateActions() - { - List downloadActions = new List(); - downloadActions.Add(TransferAction.callback.getTitle()); - downloadActions.Add(TransferAction.overwrite.getTitle()); - downloadActions.Add(TransferAction.resume.getTitle()); - downloadActions.Add(TransferAction.rename.getTitle()); - downloadActions.Add(TransferAction.renameexisting.getTitle()); - downloadActions.Add(TransferAction.comparison.getTitle()); - downloadActions.Add(TransferAction.skip.getTitle()); - View.PopulateDuplicateDownloadActions(downloadActions); - - List uploadActions = new List(); - uploadActions.Add(TransferAction.callback.getTitle()); - uploadActions.Add(TransferAction.overwrite.getTitle()); - uploadActions.Add(TransferAction.resume.getTitle()); - uploadActions.Add(TransferAction.rename.getTitle()); - uploadActions.Add(TransferAction.renameexisting.getTitle()); - uploadActions.Add(TransferAction.comparison.getTitle()); - uploadActions.Add(TransferAction.skip.getTitle()); - View.PopulateDuplicateUploadActions(uploadActions); - } - - private void PopulateTransferModes() - { - List> modes = new List>(); - foreach ( - String name in - Utils.ConvertFromJavaList(PreferencesFactory.get().getList("queue.transfer.type.enabled"))) - { - Host.TransferType t = Host.TransferType.valueOf(name); - modes.Add(new KeyValuePair(t.toString(), t)); - } - View.PopulateTransferModes(modes); - } - - private void PopulateEncodings() - { - List encodings = new List(); - encodings.AddRange(new DefaultCharsetProvider().availableCharsets()); - View.PopulateEncodings(encodings); - } - - private void PopulateDefaultProtocols() - { - List> protocols = new List>(); - foreach (Protocol p in ProtocolFactory.getEnabledProtocols().toArray(new Protocol[] {})) - { - protocols.Add(new KeyValueIconTriple(p, p.getDescription(), p.getProvider())); - } - View.PopulateProtocols(protocols); - } - - private void PopulateBookmarks() - { - List> bookmarks = new List>(); - bookmarks.Add(NoneBookmark); - foreach (Host host in BookmarkCollection.defaultCollection()) - { - bookmarks.Add(new KeyValueIconTriple(host, BookmarkNameProvider.toString(host), - host.getProtocol().getProvider())); - } - View.PopulateBookmarks(bookmarks); - } - - private void PopulateAndSelectEditor() - { - List> editors = new List>(); - - Application defaultEditor = EditorFactory.instance().getDefaultEditor(); - String defaultEditorLocation = null; - if (defaultEditor != null && Utils.IsNotBlank(defaultEditor.getIdentifier())) - { - defaultEditorLocation = defaultEditor.getIdentifier(); - } - bool defaultEditorAdded = false; - - foreach (Application editor in Utils.ConvertFromJavaList(EditorFactory.instance().getEditors()) - ) - { - if (ApplicationFinderFactory.get().isInstalled(editor)) - { - editors.Add(new KeyValueIconTriple(editor, editor.getName(), editor.getName())); - if (defaultEditorLocation != null && editor.getIdentifier().Equals(defaultEditorLocation)) - { - defaultEditorAdded = true; - } - } - } - if (!defaultEditorAdded) - { - if (defaultEditor != null && ApplicationFinderFactory.get().isInstalled(defaultEditor)) - { - editors.Insert(0, - new KeyValueIconTriple(defaultEditor, defaultEditor.getName(), - defaultEditor.getName())); - } - } - editors.Add(new KeyValueIconTriple(new Application(null, null), - LocaleFactory.localizedString("Choose") + "…", String.Empty)); - View.PopulateEditors(editors); - if (defaultEditor != null) - { - View.DefaultEditor = defaultEditor; - } - else - { - //dummy editor which leads to an empty selection - View.DefaultEditor = new Application(null, null); - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using ch.cyberduck.core; +using ch.cyberduck.core.editor; +using ch.cyberduck.core.features; +using ch.cyberduck.core.formatter; +using ch.cyberduck.core.io; +using ch.cyberduck.core.local; +using ch.cyberduck.core.preferences; +using ch.cyberduck.core.transfer; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Ui.Winforms; +using Ch.Cyberduck.Ui.Winforms.Controls; +using java.util; +using java.util.regex; +using org.apache.log4j; +using org.jets3t.service.model; +using StructureMap; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal class PreferencesController : WindowController, CollectionListener + { + private static readonly string ForFiles = LocaleFactory.localizedString("for Files", "Preferences"); + private static readonly string ForFolders = LocaleFactory.localizedString("for Folders", "Preferences"); + private static readonly Logger Log = Logger.getLogger(typeof (PreferencesController).FullName); + + private static readonly KeyValueIconTriple NoneBookmark = + new KeyValueIconTriple(null, LocaleFactory.localizedString("None"), null); + + private static readonly String NullString = "null"; + private static PreferencesController _instance; + private bool _downloadRegexInvalid; + private bool _uploadRegexInvalid; + + private PreferencesController(IPreferencesView view) + { + View = view; + Init(); + + View.SaveWorkspaceChangedEvent += View_SaveWorkspaceChangedEvent; + View.NewBrowserOnStartupChangedEvent += View_NewBrowserOnStartupChangedEvent; + View.DefaultBookmarkChangedEvent += View_DefaultBookmarkChangedEvent; + View.UseKeychainChangedEvent += View_UseKeychainChangedEvent; + View.ConfirmDisconnectChangedEvent += View_ConfirmDisconnectChangedEvent; + View.DefaultProtocolChangedEvent += View_DefaultProtocolChangedEvent; + View.DefaultEditorChangedEvent += View_DefaultEditorChangedEvent; + View.RepopulateEditorsEvent += View_RepopulateEditorsEvent; + View.AlwaysUseDefaultEditorChangedEvent += View_AlwaysUseDefaultEditorChangedEvent; + View.ShowHiddenFilesChangedEvent += View_ShowHiddenFilesChangedEvent; + View.DoubleClickEditorChangedEvent += View_DoubleClickEditorChangedEvent; + View.ReturnKeyRenamesChangedEvent += View_ReturnKeyRenamesChangedEvent; + View.InfoWindowShowsCurrentSelectionChangedEvent += View_InfoWindowShowsCurrentSelectionChangedEvent; + View.AlternatingRowBackgroundChangedEvent += View_AlternatingRowBackgroundChangedEvent; + View.HorizontalLinesChangedEvent += View_HorizontalLinesChangedEvent; + View.VerticalLinesChangedEvent += View_VerticalLinesChangedEvent; + View.DefaultEncodingChangedEvent += View_DefaultEncodingChangedEvent; + View.TransferModeChangedEvent += View_TransferModeChangedEvent; + View.TransfersToFrontChangedEvent += View_TransfersToFrontChangedEvent; + View.TransfersToBackChangedEvent += View_TransfersToBackChangedEvent; + View.RemoveFromTransfersChangedEvent += View_RemoveFromTransfersChangedEvent; + View.OpenAfterDownloadChangedEvent += View_OpenAfterDownloadChangedEvent; + View.DownloadFolderChangedEvent += View_DownloadFolderChangedEvent; + View.DuplicateDownloadActionChangedEvent += View_DuplicateDownloadActionChangedEvent; + View.DuplicateUploadActionChangedEvent += View_DuplicateUploadActionChangedEvent; + View.DuplicateDownloadOverwriteChangedEvent += View_DuplicateDownloadOverwriteChangedEvent; + View.DuplicateUploadOverwriteChangedEvent += View_DuplicateUploadOverwriteChangedEvent; + View.UploadWithTemporaryFilenameChangedEvent += View_UploadWithTemporaryFilenameChangedEvent; + View.BookmarkSizeChangedEvent += View_BookmarkSizeChangedEvent; + + View.ChmodDownloadChangedEvent += View_ChmodDownloadChangedEvent; + View.ChmodDownloadUseDefaultChangedEvent += View_ChmodDownloadUseDefaultChangedEvent; + View.ChmodDownloadTypeChangedEvent += View_ChmodDownloadTypeChangedEvent; + View.DownloadOwnerReadChangedEvent += View_DownloadDefaultPermissionsChangedEvent; + View.DownloadOwnerWriteChangedEvent += View_DownloadDefaultPermissionsChangedEvent; + View.DownloadOwnerExecuteChangedEvent += View_DownloadDefaultPermissionsChangedEvent; + View.DownloadGroupReadChangedEvent += View_DownloadDefaultPermissionsChangedEvent; + View.DownloadGroupWriteChangedEvent += View_DownloadDefaultPermissionsChangedEvent; + View.DownloadGroupExecuteChangedEvent += View_DownloadDefaultPermissionsChangedEvent; + View.DownloadOtherReadChangedEvent += View_DownloadDefaultPermissionsChangedEvent; + View.DownloadOtherWriteChangedEvent += View_DownloadDefaultPermissionsChangedEvent; + View.DownloadOtherExecuteChangedEvent += View_DownloadDefaultPermissionsChangedEvent; + View.ChmodUploadChangedEvent += View_ChmodUploadChangedEvent; + View.ChmodUploadUseDefaultChangedEvent += View_ChmodUploadUseDefaultChangedEvent; + View.ChmodUploadTypeChangedEvent += View_ChmodUploadTypeChangedEvent; + View.UploadOwnerReadChangedEvent += View_UploadDefaultPermissionsChangedEvent; + View.UploadOwnerWriteChangedEvent += View_UploadDefaultPermissionsChangedEvent; + View.UploadOwnerExecuteChangedEvent += View_UploadDefaultPermissionsChangedEvent; + View.UploadGroupReadChangedEvent += View_UploadDefaultPermissionsChangedEvent; + View.UploadGroupWriteChangedEvent += View_UploadDefaultPermissionsChangedEvent; + View.UploadGroupExecuteChangedEvent += View_UploadDefaultPermissionsChangedEvent; + View.UploadOtherReadChangedEvent += View_UploadDefaultPermissionsChangedEvent; + View.UploadOtherWriteChangedEvent += View_UploadDefaultPermissionsChangedEvent; + View.UploadOtherExecuteChangedEvent += View_UploadDefaultPermissionsChangedEvent; + + View.PreserveModificationDownloadChangedEvent += View_PreserveModificationDownloadChangedEvent; + View.PreserveModificationUploadChangedEvent += View_PreserveModificationUploadChangedEvent; + + View.DownloadSkipChangedEvent += View_DownloadSkipChangedEvent; + View.DownloadSkipRegexChangedEvent += View_DownloadSkipRegexChangedEvent; + View.DownloadSkipRegexDefaultEvent += View_DownloadSkipRegexDefaultEvent; + View.UploadSkipChangedEvent += View_UploadSkipChangedEvent; + View.UploadSkipRegexChangedEvent += View_UploadSkipRegexChangedEvent; + View.UploadSkipRegexDefaultEvent += View_UploadSkipRegexDefaultEvent; + + View.DefaultDownloadThrottleChangedEvent += View_DefaultDownloadThrottleChangedEvent; + View.DefaultUploadThrottleChangedEvent += View_DefaultUploadThrottleChangedEvent; + + View.ConnectionTimeoutChangedEvent += View_ConnectionTimeoutChangedEvent; + View.RetryDelayChangedEvent += View_RetryDelayChangedEvent; + View.RetriesChangedEvent += View_RetriesChangedEvent; + + View.UseSystemProxyChangedEvent += View_UseSystemProxyChangedEvent; + View.ChangeSystemProxyEvent += View_ChangeSystemProxyEvent; + + #region S3 + + View.DefaultBucketLocationChangedEvent += View_DefaultBucketLocationChangedEvent; + View.DefaultStorageClassChangedEvent += View_DefaultStorageClassChangedEvent; + View.DefaultEncryptionChangedEvent += View_DefaultEncryptionChangedEvent; + + #endregion + + #region Google Docs + + View.DocumentExportFormatChanged += View_DocumentExportFormatChanged; + View.PresentationExportFormatChanged += View_PresentationExportFormatChanged; + View.SpreadsheetExportFormatChanged += View_SpreadsheetExportFormatChanged; + View.ConvertUploadsChanged += View_ConvertUploadsChanged; + View.OcrUploadsChanged += View_OcrUploadsChanged; + + #endregion + + #region Language + + View.LocaleChanged += View_LocaleChanged; + + #endregion + + #region Update + + View.AutomaticUpdateChangedEvent += View_AutomaticUpdateChangedEvent; + View.CheckForUpdateEvent += View_CheckForUpdateEvent; + View.UpdateFeedChangedEvent += View_UpdateFeedChangedEvent; + + #endregion + } + + public static PreferencesController Instance + { + get + { + if (null == _instance) + { + _instance = new PreferencesController(ObjectFactory.GetInstance()); + } + return _instance; + } + } + + public override bool Singleton + { + get { return true; } + } + + public void collectionLoaded() + { + ; + } + + public void collectionItemAdded(object obj) + { + Invoke(delegate + { + Host selected = View.DefaultBookmark; + PopulateBookmarks(); + SelectDefaultBookmark(selected); + }); + } + + public void collectionItemRemoved(object obj) + { + Invoke(delegate + { + Host selected = View.DefaultBookmark; + PopulateBookmarks(); + SelectDefaultBookmark(selected); + }); + } + + public void collectionItemChanged(object obj) + { + Invoke(delegate + { + Host selected = View.DefaultBookmark; + PopulateBookmarks(); + SelectDefaultBookmark(selected); + }); + } + + private void View_BookmarkSizeChangedEvent() + { + PreferencesFactory.get().setProperty("bookmark.icon.size", View.BookmarkSize); + foreach (BrowserController b in MainController.Browsers) + { + b.UpdateBookmarks(); + } + } + + private void View_DefaultEncryptionChangedEvent() + { + PreferencesFactory.get() + .setProperty("s3.encryption.algorithm", + NullString.Equals(View.DefaultEncryption) ? null : View.DefaultEncryption); + } + + private void View_AlwaysUseDefaultEditorChangedEvent() + { + PreferencesFactory.get().setProperty("editor.alwaysUseDefault", View.AlwaysUseDefaultEditor); + } + + private void View_RepopulateEditorsEvent() + { + PopulateAndSelectEditor(); + } + + private void View_DefaultEditorChangedEvent() + { + Application selected = View.DefaultEditor; + PreferencesFactory.get().setProperty("editor.bundleIdentifier", selected.getIdentifier()); + } + + private void View_ChangeSystemProxyEvent() + { + LaunchIEOptions(4); + } + + /// + /// + /// + /// Register to select (connections settings=4) + private void LaunchIEOptions(int activeRegister) + { + ApplicationLauncherFactory.get() + .open(new Application("rundll32.exe"), "shell32.dll,Control_RunDLL inetcpl.cpl,," + activeRegister); + } + + private void View_UpdateFeedChangedEvent() + { + PreferencesFactory.get().setProperty("update.feed", View.UpdateFeed); + } + + private void View_UploadWithTemporaryFilenameChangedEvent() + { + PreferencesFactory.get().setProperty("queue.upload.file.temporary", View.UploadWithTemporaryFilename); + } + + private void View_UseSystemProxyChangedEvent() + { + PreferencesFactory.get().setProperty("connection.proxy.enable", View.UseSystemProxy); + } + + private void View_CheckForUpdateEvent() + { + UpdateController.Instance.ForceCheckForUpdates(false); + } + + private void View_AutomaticUpdateChangedEvent() + { + PreferencesFactory.get().setProperty("update.check", View.AutomaticUpdateCheck); + } + + private void View_LocaleChanged() + { + if ("default".Equals(View.CurrentLocale)) + { + PreferencesFactory.get().deleteProperty("application.language"); + PreferencesFactory.get().setProperty("application.language.custom", false.ToString()); + } + else + { + PreferencesFactory.get().setProperty("application.language", View.CurrentLocale); + PreferencesFactory.get().setProperty("application.language.custom", true.ToString()); + } + } + + private void View_OcrUploadsChanged() + { + PreferencesFactory.get().setProperty("google.docs.upload.ocr", View.OcrUploads); + } + + private void View_ConvertUploadsChanged() + { + PreferencesFactory.get().setProperty("google.docs.upload.convert", View.ConvertUploads); + } + + private void View_SpreadsheetExportFormatChanged() + { + PreferencesFactory.get().setProperty("google.docs.export.spreadsheet", View.SpreadsheetExportFormat); + } + + private void View_PresentationExportFormatChanged() + { + PreferencesFactory.get().setProperty("google.docs.export.presentation", View.PresentationExportFormat); + } + + private void View_DocumentExportFormatChanged() + { + PreferencesFactory.get().setProperty("google.docs.export.document", View.DocumentExportFormat); + } + + private void View_DefaultStorageClassChangedEvent() + { + PreferencesFactory.get().setProperty("s3.storage.class", View.DefaultStorageClass); + } + + private void View_RetriesChangedEvent() + { + PreferencesFactory.get().setProperty("connection.retry", View.Retries); + } + + private void View_RetryDelayChangedEvent() + { + PreferencesFactory.get().setProperty("connection.retry.delay", View.RetryDelay); + } + + private void View_ConnectionTimeoutChangedEvent() + { + PreferencesFactory.get().setProperty("connection.timeout.seconds", View.ConnectionTimeout); + } + + private void View_DefaultUploadThrottleChangedEvent() + { + PreferencesFactory.get().setProperty("queue.upload.bandwidth.bytes", View.DefaultUploadThrottle); + } + + private void View_DefaultDownloadThrottleChangedEvent() + { + PreferencesFactory.get().setProperty("queue.download.bandwidth.bytes", View.DefaultDownloadThrottle); + } + + private void View_DefaultBucketLocationChangedEvent() + { + PreferencesFactory.get().setProperty("s3.location", View.DefaultBucketLocation); + } + + private void View_UploadSkipRegexDefaultEvent() + { + string regex = PreferencesFactory.get().getProperty("queue.upload.skip.regex.default"); + View.UploadSkipRegex = regex; + PreferencesFactory.get().setProperty("queue.upload.skip.regex", regex); + } + + private void View_UploadSkipRegexChangedEvent() + { + string value = View.UploadSkipRegex.Trim(); + if (string.IsNullOrEmpty(value)) + { + PreferencesFactory.get().setProperty("queue.upload.skip.enable", false); + PreferencesFactory.get().setProperty("queue.upload.skip.regex", value); + View.UploadSkip = false; + } + try + { + Pattern compiled = Pattern.compile(value); + PreferencesFactory.get().setProperty("queue.upload.skip.regex", compiled.pattern()); + if (_uploadRegexInvalid) + { + View.MarkUploadSkipRegex(-1); + } + _uploadRegexInvalid = false; + } + catch (PatternSyntaxException ex) + { + _uploadRegexInvalid = true; + View.MarkUploadSkipRegex(ex.getIndex()); + } + } + + private void View_UploadSkipChangedEvent() + { + PreferencesFactory.get().setProperty("queue.upload.skip.enable", View.DownloadSkip); + View.UploadSkipRegexEnabled = View.UploadSkip; + } + + private void View_DownloadSkipRegexDefaultEvent() + { + string regex = PreferencesFactory.get().getProperty("queue.download.skip.regex.default"); + View.DownloadSkipRegex = regex; + PreferencesFactory.get().setProperty("queue.download.skip.regex", regex); + } + + private void View_DownloadSkipChangedEvent() + { + PreferencesFactory.get().setProperty("queue.download.skip.enable", View.DownloadSkip); + View.DownloadSkipRegexEnabled = View.DownloadSkip; + } + + private void View_DownloadSkipRegexChangedEvent() + { + string value = View.DownloadSkipRegex.Trim(); + if (string.IsNullOrEmpty(value)) + { + PreferencesFactory.get().setProperty("queue.download.skip.enable", false); + PreferencesFactory.get().setProperty("queue.download.skip.regex", value); + View.DownloadSkip = false; + } + try + { + Pattern compiled = Pattern.compile(value); + PreferencesFactory.get().setProperty("queue.download.skip.regex", compiled.pattern()); + if (_downloadRegexInvalid) + { + View.MarkDownloadSkipRegex(-1); + } + _downloadRegexInvalid = false; + } + catch (PatternSyntaxException ex) + { + _downloadRegexInvalid = true; + View.MarkDownloadSkipRegex(ex.getIndex()); + } + } + + private void View_PreserveModificationUploadChangedEvent() + { + PreferencesFactory.get().setProperty("queue.upload.timestamp.change", View.PreserveModificationUpload); + } + + private void View_PreserveModificationDownloadChangedEvent() + { + PreferencesFactory.get().setProperty("queue.download.timestamp.change", View.PreserveModificationDownload); + } + + private void View_ChmodUploadTypeChangedEvent() + { + Permission p = null; + if (ForFiles.Equals(View.ChmodUploadType)) + { + p = new Permission(PreferencesFactory.get().getInteger("queue.upload.permissions.file.default")); + } + if (ForFolders.Equals(View.ChmodUploadType)) + { + p = new Permission(PreferencesFactory.get().getInteger("queue.upload.permissions.folder.default")); + } + if (null == p) + { + Log.error("No selected item"); + return; + } + Permission.Action ownerPerm = p.getUser(); + Permission.Action groupPerm = p.getGroup(); + Permission.Action otherPerm = p.getOther(); + + View.UploadOwnerRead = ownerPerm.implies(Permission.Action.read); + View.UploadOwnerWrite = ownerPerm.implies(Permission.Action.write); + View.UploadOwnerExecute = ownerPerm.implies(Permission.Action.execute); + + View.UploadGroupRead = groupPerm.implies(Permission.Action.read); + View.UploadGroupWrite = groupPerm.implies(Permission.Action.write); + View.UploadGroupExecute = groupPerm.implies(Permission.Action.execute); + + View.UploadOtherRead = otherPerm.implies(Permission.Action.read); + View.UploadOtherWrite = otherPerm.implies(Permission.Action.write); + View.UploadOtherExecute = otherPerm.implies(Permission.Action.execute); + } + + private void View_ChmodUploadUseDefaultChangedEvent() + { + PreferencesFactory.get().setProperty("queue.upload.permissions.default", View.ChmodUploadUseDefault); + View.ChmodUploadDefaultEnabled = View.ChmodUploadUseDefault; + } + + private void View_ChmodUploadChangedEvent() + { + PreferencesFactory.get().setProperty("queue.upload.permissions.change", View.ChmodUpload); + View.ChmodUploadEnabled = View.ChmodUpload; + } + + private void View_ChmodDownloadTypeChangedEvent() + { + Permission p = null; + if (ForFiles.Equals(View.ChmodDownloadType)) + { + p = new Permission(PreferencesFactory.get().getInteger("queue.download.permissions.file.default")); + } + if (ForFolders.Equals(View.ChmodDownloadType)) + { + p = new Permission(PreferencesFactory.get().getInteger("queue.download.permissions.folder.default")); + } + if (null == p) + { + Log.error("No selected item"); + return; + } + Permission.Action ownerPerm = p.getUser(); + Permission.Action groupPerm = p.getGroup(); + Permission.Action otherPerm = p.getOther(); + + View.DownloadOwnerRead = ownerPerm.implies(Permission.Action.read); + View.DownloadOwnerWrite = ownerPerm.implies(Permission.Action.write); + View.DownloadOwnerExecute = ownerPerm.implies(Permission.Action.execute); + + View.DownloadGroupRead = groupPerm.implies(Permission.Action.read); + View.DownloadGroupWrite = groupPerm.implies(Permission.Action.write); + View.DownloadGroupExecute = groupPerm.implies(Permission.Action.execute); + + View.DownloadOtherRead = otherPerm.implies(Permission.Action.read); + View.DownloadOtherWrite = otherPerm.implies(Permission.Action.write); + View.DownloadOtherExecute = otherPerm.implies(Permission.Action.execute); + } + + private void View_ChmodDownloadUseDefaultChangedEvent() + { + PreferencesFactory.get().setProperty("queue.download.permissions.default", View.ChmodDownloadUseDefault); + View.ChmodDownloadDefaultEnabled = View.ChmodDownloadUseDefault; + } + + private void View_ChmodDownloadChangedEvent() + { + PreferencesFactory.get().setProperty("queue.download.permissions.change", View.ChmodDownload); + View.ChmodDownloadEnabled = View.ChmodDownload; + } + + private void View_UploadDefaultPermissionsChangedEvent() + { + Permission.Action u = Permission.Action.none; + if (View.UploadOwnerRead) + { + u = u.or(Permission.Action.read); + } + if (View.UploadOwnerWrite) + { + u = u.or(Permission.Action.write); + } + if (View.UploadOwnerExecute) + { + u = u.or(Permission.Action.execute); + } + Permission.Action g = Permission.Action.none; + if (View.UploadGroupRead) + { + g = g.or(Permission.Action.read); + } + if (View.UploadGroupWrite) + { + g = g.or(Permission.Action.write); + } + if (View.UploadGroupExecute) + { + g = g.or(Permission.Action.execute); + } + Permission.Action o = Permission.Action.none; + if (View.UploadOtherRead) + { + o = o.or(Permission.Action.read); + } + if (View.UploadOtherWrite) + { + o = o.or(Permission.Action.write); + } + if (View.UploadOtherExecute) + { + o = o.or(Permission.Action.execute); + } + Permission permission = new Permission(u, g, o); + if (ForFiles.Equals(View.ChmodUploadType)) + { + PreferencesFactory.get().setProperty("queue.upload.permissions.file.default", permission.getMode()); + } + if (ForFolders.Equals(View.ChmodUploadType)) + { + PreferencesFactory.get().setProperty("queue.upload.permissions.folder.default", permission.getMode()); + } + } + + private void View_DownloadDefaultPermissionsChangedEvent() + { + Permission.Action u = Permission.Action.none; + if (View.DownloadOwnerRead) + { + u = u.or(Permission.Action.read); + } + if (View.DownloadOwnerWrite) + { + u = u.or(Permission.Action.write); + } + if (View.DownloadOwnerExecute) + { + u = u.or(Permission.Action.execute); + } + Permission.Action g = Permission.Action.none; + if (View.DownloadGroupRead) + { + g = g.or(Permission.Action.read); + } + if (View.DownloadGroupWrite) + { + g = g.or(Permission.Action.write); + } + if (View.DownloadGroupExecute) + { + g = g.or(Permission.Action.execute); + } + Permission.Action o = Permission.Action.none; + if (View.DownloadOtherRead) + { + o = o.or(Permission.Action.read); + } + if (View.DownloadOtherWrite) + { + o = o.or(Permission.Action.write); + } + if (View.DownloadOtherExecute) + { + o = o.or(Permission.Action.execute); + } + Permission permission = new Permission(u, g, o); + if (ForFiles.Equals(View.ChmodDownloadType)) + { + PreferencesFactory.get().setProperty("queue.download.permissions.file.default", permission.getMode()); + } + if (ForFolders.Equals(View.ChmodDownloadType)) + { + PreferencesFactory.get().setProperty("queue.download.permissions.folder.default", permission.getMode()); + } + } + + private void View_DuplicateUploadOverwriteChangedEvent() + { + if (View.DuplicateUploadOverwrite) + { + PreferencesFactory.get().setProperty("queue.upload.reload.action", TransferAction.overwrite.toString()); + } + else + { + PreferencesFactory.get() + .setProperty("queue.upload.reload.action", + PreferencesFactory.get().getProperty("queue.upload.action")); + } + } + + private void View_DuplicateDownloadOverwriteChangedEvent() + { + if (View.DuplicateDownloadOverwrite) + { + PreferencesFactory.get() + .setProperty("queue.download.reload.action", TransferAction.overwrite.toString()); + } + else + { + PreferencesFactory.get() + .setProperty("queue.download.reload.action", + PreferencesFactory.get().getProperty("queue.download.action")); + } + } + + private void View_DuplicateUploadActionChangedEvent() + { + duplicateComboboxClicked(View.DuplicateUploadAction, "queue.upload.action"); + View_DuplicateUploadOverwriteChangedEvent(); + } + + private void duplicateComboboxClicked(String selected, String property) + { + if (selected.Equals(TransferAction.callback.getTitle())) + { + PreferencesFactory.get().setProperty(property, TransferAction.callback.toString()); + } + else if (selected.Equals(TransferAction.overwrite.getTitle())) + { + PreferencesFactory.get().setProperty(property, TransferAction.overwrite.toString()); + } + else if (selected.Equals(TransferAction.resume.getTitle())) + { + PreferencesFactory.get().setProperty(property, TransferAction.resume.toString()); + } + else if (selected.Equals(TransferAction.rename.getTitle())) + { + PreferencesFactory.get().setProperty(property, TransferAction.rename.toString()); + } + else if (selected.Equals(TransferAction.renameexisting.getTitle())) + { + PreferencesFactory.get().setProperty(property, TransferAction.renameexisting.toString()); + } + else if (selected.Equals(TransferAction.comparison.getTitle())) + { + PreferencesFactory.get().setProperty(property, TransferAction.comparison.toString()); + } + else if (selected.Equals(TransferAction.skip.getTitle())) + { + PreferencesFactory.get().setProperty(property, TransferAction.skip.toString()); + } + } + + private void View_DuplicateDownloadActionChangedEvent() + { + duplicateComboboxClicked(View.DuplicateDownloadAction, "queue.download.action"); + View_DuplicateDownloadOverwriteChangedEvent(); + } + + private void View_DownloadFolderChangedEvent() + { + PreferencesFactory.get().setProperty("queue.download.folder", View.DownloadFolder); + } + + private void View_OpenAfterDownloadChangedEvent() + { + PreferencesFactory.get().setProperty("queue.download.complete.open", View.OpenAfterDownload); + } + + private void View_RemoveFromTransfersChangedEvent() + { + PreferencesFactory.get().setProperty("queue.removeItemWhenComplete", View.RemoveFromTransfers); + } + + private void View_TransfersToBackChangedEvent() + { + PreferencesFactory.get().setProperty("queue.window.open.transfer.stop", View.TransfersToBack); + } + + private void View_TransfersToFrontChangedEvent() + { + PreferencesFactory.get().setProperty("queue.window.open.transfer.start", View.TransfersToFront); + } + + private void View_TransferModeChangedEvent() + { + PreferencesFactory.get().setProperty("queue.transfer.type", View.TransferMode.name()); + } + + private void View_DefaultEncodingChangedEvent() + { + PreferencesFactory.get().setProperty("browser.charset.encoding", View.DefaultEncoding); + } + + private void View_VerticalLinesChangedEvent() + { + PreferencesFactory.get().setProperty("browser.verticalLines", View.VerticalLines); + //todo + //BrowserController.updateBrowserTableAttributes(); + } + + private void View_HorizontalLinesChangedEvent() + { + PreferencesFactory.get().setProperty("browser.horizontalLines", View.HorizontalLines); + //todo + //BrowserController.updateBrowserTableAttributes(); + } + + private void View_AlternatingRowBackgroundChangedEvent() + { + PreferencesFactory.get().setProperty("browser.alternatingRows", View.AlternatingRowBackground); + //todo + //BrowserController.updateBrowserTableAttributes(); + } + + private void View_InfoWindowShowsCurrentSelectionChangedEvent() + { + PreferencesFactory.get().setProperty("browser.info.inspector", View.InfoWindowShowsCurrentSelection); + } + + private void View_DoubleClickEditorChangedEvent() + { + PreferencesFactory.get().setProperty("browser.doubleclick.edit", View.DoubleClickEditor); + } + + private void View_ReturnKeyRenamesChangedEvent() + { + PreferencesFactory.get().setProperty("browser.enterkey.rename", View.ReturnKeyRenames); + } + + private void View_ShowHiddenFilesChangedEvent() + { + PreferencesFactory.get().setProperty("browser.showHidden", View.ShowHiddenFiles); + } + + private void View_DefaultProtocolChangedEvent() + { + Protocol selected = View.DefaultProtocol; + PreferencesFactory.get().setProperty("connection.protocol.default", selected.getProvider()); + PreferencesFactory.get().setProperty("connection.port.default", selected.getDefaultPort()); + } + + private void View_ConfirmDisconnectChangedEvent() + { + PreferencesFactory.get().setProperty("browser.confirmDisconnect", View.ConfirmDisconnect); + } + + private void View_UseKeychainChangedEvent() + { + PreferencesFactory.get().setProperty("connection.login.useKeychain", View.UseKeychain); + } + + private void View_DefaultBookmarkChangedEvent() + { + if (null == View.DefaultBookmark) + { + PreferencesFactory.get().deleteProperty("browser.open.bookmark.default"); + } + else + { + PreferencesFactory.get().setProperty("browser.open.bookmark.default", View.DefaultBookmark.getUuid()); + } + } + + private void SelectDefaultBookmark(Host host) + { + if (BookmarkCollection.defaultCollection().contains(host)) + { + View.DefaultBookmark = host; + } + else + { + View.DefaultBookmark = null; + } + } + + private void SelectDefaultBookmark(string nickname) + { + if (null == nickname) + { + View.DefaultBookmark = null; + } + else + { + bool bookmarkFound = false; + foreach (Host host in BookmarkCollection.defaultCollection()) + { + if (nickname.Equals(host.getUuid())) + { + View.DefaultBookmark = host; + bookmarkFound = true; + break; + } + } + if (!bookmarkFound) + { + View.DefaultBookmark = null; + } + } + } + + private void View_NewBrowserOnStartupChangedEvent() + { + PreferencesFactory.get().setProperty("browser.openUntitled", View.NewBrowserOnStartup); + } + + private void View_SaveWorkspaceChangedEvent() + { + PreferencesFactory.get().setProperty("browser.serialize", View.SaveWorkspace); + } + + private void Init() + { + #region General + + View.SaveWorkspace = PreferencesFactory.get().getBoolean("browser.serialize"); + View.NewBrowserOnStartup = PreferencesFactory.get().getBoolean("browser.openUntitled"); + PopulateBookmarks(); + BookmarkCollection.defaultCollection().addListener(this); + View.ViewClosedEvent += delegate { BookmarkCollection.defaultCollection().removeListener(this); }; + SelectDefaultBookmark(PreferencesFactory.get().getProperty("browser.open.bookmark.default")); + View.ConfirmDisconnect = PreferencesFactory.get().getBoolean("browser.confirmDisconnect"); + View.UseKeychain = PreferencesFactory.get().getBoolean("connection.login.useKeychain"); + PopulateDefaultProtocols(); + View.DefaultProtocol = + ProtocolFactory.forName(PreferencesFactory.get().getProperty("connection.protocol.default")); + View.AlternatingRowBackground = PreferencesFactory.get().getBoolean("browser.alternatingRows"); + View.VerticalLines = PreferencesFactory.get().getBoolean("browser.verticalLines"); + View.HorizontalLines = PreferencesFactory.get().getBoolean("browser.horizontalLines"); + PopulateEncodings(); + View.DefaultEncoding = PreferencesFactory.get().getProperty("browser.charset.encoding"); + + #endregion + + #region Browser + + View.InfoWindowShowsCurrentSelection = PreferencesFactory.get().getBoolean("browser.info.inspector"); + View.ShowHiddenFiles = PreferencesFactory.get().getBoolean("browser.showHidden"); + View.DoubleClickEditor = PreferencesFactory.get().getBoolean("browser.doubleclick.edit"); + View.ReturnKeyRenames = PreferencesFactory.get().getBoolean("browser.enterkey.rename"); + PopulateBookmarkSize(); + View.BookmarkSize = PreferencesFactory.get().getInteger("bookmark.icon.size"); + + #endregion + + #region Transfers - General + + PopulateTransferModes(); + View.TransferMode = Host.TransferType.valueOf(PreferencesFactory.get().getProperty("queue.transfer.type")); + View.TransfersToFront = PreferencesFactory.get().getBoolean("queue.window.open.transfer.start"); + View.TransfersToBack = PreferencesFactory.get().getBoolean("queue.window.open.transfer.stop"); + View.RemoveFromTransfers = PreferencesFactory.get().getBoolean("queue.removeItemWhenComplete"); + View.OpenAfterDownload = PreferencesFactory.get().getBoolean("queue.download.complete.open"); + View.DownloadFolder = PreferencesFactory.get().getProperty("queue.download.folder"); + PopulateDuplicateActions(); + View.DuplicateDownloadAction = GetDuplicateAction("queue.download.action"); + View.DuplicateUploadAction = GetDuplicateAction("queue.upload.action"); + View.DuplicateDownloadOverwrite = + PreferencesFactory.get() + .getProperty("queue.download.reload.action") + .Equals(TransferAction.overwrite.toString()) + ? true + : false; + View.DuplicateUploadOverwrite = + PreferencesFactory.get() + .getProperty("queue.upload.reload.action") + .Equals(TransferAction.overwrite.toString()) + ? true + : false; + View.UploadWithTemporaryFilename = PreferencesFactory.get().getBoolean("queue.upload.file.temporary"); + + #endregion + + #region Editor + + PopulateAndSelectEditor(); + View.AlwaysUseDefaultEditor = PreferencesFactory.get().getBoolean("editor.alwaysUseDefault"); + + #endregion + + #region Transfers - Permissions + + PopulateChmodTypes(); + View.ChmodDownload = PreferencesFactory.get().getBoolean("queue.download.permissions.change"); + View.ChmodDownloadEnabled = View.ChmodDownload; + View.ChmodDownloadUseDefault = PreferencesFactory.get().getBoolean("queue.download.permissions.default"); + View.ChmodDownloadDefaultEnabled = View.ChmodDownloadUseDefault; + View.ChmodDownloadType = ForFiles; + View_ChmodDownloadTypeChangedEvent(); + View.ChmodUpload = PreferencesFactory.get().getBoolean("queue.upload.permissions.change"); + View.ChmodUploadEnabled = View.ChmodUpload; + View.ChmodUploadUseDefault = PreferencesFactory.get().getBoolean("queue.upload.permissions.default"); + View.ChmodUploadDefaultEnabled = PreferencesFactory.get().getBoolean("queue.upload.permissions.change") && + PreferencesFactory.get().getBoolean("queue.upload.permissions.default"); + View.ChmodUploadType = ForFiles; + View_ChmodUploadTypeChangedEvent(); + + #endregion + + #region Transfers - Timestamps + + View.PreserveModificationDownload = PreferencesFactory.get().getBoolean("queue.download.timestamp.change"); + View.PreserveModificationUpload = PreferencesFactory.get().getBoolean("queue.upload.timestamp.change"); + + #endregion + + #region Transfers - Advanced + + View.DownloadSkip = PreferencesFactory.get().getBoolean("queue.download.skip.enable"); + View.DownloadSkipRegex = PreferencesFactory.get().getProperty("queue.download.skip.regex"); + View.DownloadSkipRegexEnabled = View.DownloadSkip; + View.UploadSkip = PreferencesFactory.get().getBoolean("queue.upload.skip.enable"); + View.UploadSkipRegex = PreferencesFactory.get().getProperty("queue.upload.skip.regex"); + View.UploadSkipRegexEnabled = View.UploadSkip; + + PopulateDefaultDownloadThrottleList(); + PopulateDefaultUploadThrottleList(); + View.DefaultDownloadThrottle = PreferencesFactory.get().getFloat("queue.download.bandwidth.bytes"); + View.DefaultUploadThrottle = PreferencesFactory.get().getFloat("queue.upload.bandwidth.bytes"); + View.Retries = PreferencesFactory.get().getInteger("connection.retry"); + View.RetryDelay = PreferencesFactory.get().getInteger("connection.retry.delay"); + View.ConnectionTimeout = PreferencesFactory.get().getInteger("connection.timeout.seconds"); + View.UseSystemProxy = PreferencesFactory.get().getBoolean("connection.proxy.enable"); + + #endregion + + #region S3 + + PopulateDefaultBucketLocations(); + View.DefaultBucketLocation = PreferencesFactory.get().getProperty("s3.location"); + PopulateDefaultStorageClasses(); + View.DefaultStorageClass = PreferencesFactory.get().getProperty("s3.storage.class"); + PopulateDefaultEncryption(); + String algorithm = PreferencesFactory.get().getProperty("s3.encryption.algorithm"); + View.DefaultEncryption = Utils.IsNotBlank(algorithm) ? algorithm : NullString; + + #endregion + + #region Google Docs + + PopulateDocumentExportFormats(); + View.DocumentExportFormat = PreferencesFactory.get().getProperty("google.docs.export.document"); + PopulatePresentationExportFormats(); + View.PresentationExportFormat = PreferencesFactory.get().getProperty("google.docs.export.presentation"); + PopulateSpreadsheetExportFormats(); + View.SpreadsheetExportFormat = PreferencesFactory.get().getProperty("google.docs.export.spreadsheet"); + View.ConvertUploads = PreferencesFactory.get().getBoolean("google.docs.upload.convert"); + View.OcrUploads = PreferencesFactory.get().getBoolean("google.docs.upload.ocr"); + + #endregion + + #region Update + + View.AutomaticUpdateCheck = PreferencesFactory.get().getBoolean("update.check"); + long lastCheck = PreferencesFactory.get().getLong("update.check.last"); + View.LastUpdateCheck = 0 == lastCheck + ? String.Empty + : UserDefaultsDateFormatter.GetLongFormat( + new DateTime(PreferencesFactory.get().getLong("update.check.last"))); + PopulateFeeds(); + View.UpdateFeed = PreferencesFactory.get().getProperty("update.feed"); + + #endregion + + #region Language + + PopulateLanguages(); + string userLanguage = PreferencesFactory.get().getProperty("application.language"); + + if (PreferencesFactory.get().getBoolean("application.language.custom")) + { + View.CurrentLocale = userLanguage; + } + else + { + View.CurrentLocale = "default"; + } + + #endregion + } + + private void PopulateBookmarkSize() + { + List> sizes = new List>(); + sizes.Add(new KeyValuePair(BookmarkController.SmallBookmarkSize, + LocaleFactory.localizedString("Use Small Icons", "Preferences"))); + sizes.Add(new KeyValuePair(BookmarkController.MediumBookmarkSize, + LocaleFactory.localizedString("Use Medium Icons", "Preferences"))); + sizes.Add(new KeyValuePair(BookmarkController.LargeBookmarkSize, + LocaleFactory.localizedString("Use Large Icons", "Preferences"))); + View.PopulateBookmarkSize(sizes); + } + + private void PopulateDefaultEncryption() + { + IList> algorithms = new List>(); + algorithms.Add(new KeyValuePair(NullString, LocaleFactory.localizedString("None"))); + algorithms.Add(new KeyValuePair("AES256", LocaleFactory.localizedString("AES256", "S3"))); + View.PopulateDefaultEncryption(algorithms); + } + + private void PopulateFeeds() + { + IList> feeds = new List>(); + feeds.Add(new KeyValuePair("release", LocaleFactory.localizedString("Release"))); + feeds.Add(new KeyValuePair("beta", LocaleFactory.localizedString("Beta"))); + feeds.Add(new KeyValuePair("nightly", LocaleFactory.localizedString("Snapshot Builds"))); + View.PopulateUpdateFeeds(feeds); + } + + private void PopulateLanguages() + { + IList> locales = new List>(); + + List appLocales = PreferencesFactory.get().applicationLocales(); + locales.Add(new KeyValuePair("default", LocaleFactory.localizedString("Default"))); + for (int i = 0; i < appLocales.size(); i++) + { + string locale = (string) appLocales.get(i); + locales.Add(new KeyValuePair(locale, PreferencesFactory.get().getDisplayName(locale))); + } + View.PopulateLocales(locales); + } + + private void PopulateSpreadsheetExportFormats() + { + IList> f = new List>(); + string formats = PreferencesFactory.get().getProperty("google.docs.export.spreadsheet.formats"); + foreach (string s in formats.Split(',')) + { + string ext = "." + s; + f.Add(new KeyValuePair(s, + String.Format("{0} ({1})", FileDescriptorFactory.get().getKind(ext), ext))); + } + View.PopulateSpreadsheetExportFormats(f); + } + + private void PopulatePresentationExportFormats() + { + IList> f = new List>(); + string formats = PreferencesFactory.get().getProperty("google.docs.export.presentation.formats"); + foreach (string s in formats.Split(',')) + { + string ext = "." + s; + f.Add(new KeyValuePair(s, + String.Format("{0} ({1})", FileDescriptorFactory.get().getKind(ext), ext))); + } + View.PopulatePresentationExportFormats(f); + } + + private void PopulateDocumentExportFormats() + { + IList> f = new List>(); + string formats = PreferencesFactory.get().getProperty("google.docs.export.document.formats"); + foreach (string s in formats.Split(',')) + { + string ext = "." + s; + f.Add(new KeyValuePair(s, + String.Format("{0} ({1})", FileDescriptorFactory.get().getKind(ext), ext))); + } + View.PopulateDocumentExportFormats(f); + } + + private void PopulateDefaultUploadThrottleList() + { + IList> list = new List>(); + list.Add(new KeyValuePair(BandwidthThrottle.UNLIMITED, + LocaleFactory.localizedString("Unlimited Bandwidth", "Preferences"))); + foreach (String option in + PreferencesFactory.get() + .getProperty("queue.bandwidth.options") + .Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries)) + { + list.Add(new KeyValuePair(Convert.ToInt32(option.Trim()), + (SizeFormatterFactory.get().format(Convert.ToInt32(option.Trim())) + "/s"))); + } + View.PopulateDefaultUploadThrottleList(list); + } + + private void PopulateDefaultDownloadThrottleList() + { + IList> list = new List>(); + list.Add(new KeyValuePair(BandwidthThrottle.UNLIMITED, + LocaleFactory.localizedString("Unlimited Bandwidth", "Preferences"))); + foreach (String option in + PreferencesFactory.get() + .getProperty("queue.bandwidth.options") + .Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries)) + { + list.Add(new KeyValuePair(Convert.ToInt32(option.Trim()), + (SizeFormatterFactory.get().format(Convert.ToInt32(option.Trim())) + "/s"))); + } + View.PopulateDefaultDownloadThrottleList(list); + } + + private void PopulateDefaultBucketLocations() + { + IList> defaultBucketLocations = new List>(); + Set locations = ProtocolFactory.S3_SSL.getRegions(); + Iterator iter = locations.iterator(); + while (iter.hasNext()) + { + Location.Name location = (Location.Name) iter.next(); + defaultBucketLocations.Add(new KeyValuePair(location.getIdentifier(), + location.toString())); + } + View.PopulateDefaultBucketLocations(defaultBucketLocations); + } + + private void PopulateDefaultStorageClasses() + { + IList> storageClasses = new List>(); + storageClasses.Add(new KeyValuePair(S3Object.STORAGE_CLASS_STANDARD, + LocaleFactory.localizedString(S3Object.STORAGE_CLASS_STANDARD, "S3")) + ); + storageClasses.Add(new KeyValuePair("STANDARD_IA", + LocaleFactory.localizedString("STANDARD_IA", "S3")) + ); + storageClasses.Add(new KeyValuePair(S3Object.STORAGE_CLASS_REDUCED_REDUNDANCY, + LocaleFactory.localizedString(S3Object.STORAGE_CLASS_REDUCED_REDUNDANCY, "S3")) + ); + View.PopulateDefaultStorageClasses(storageClasses); + } + + private void PopulateChmodTypes() + { + List chmodDownloadTypes = new List(); + chmodDownloadTypes.Add(ForFiles); + chmodDownloadTypes.Add(ForFolders); + View.PopulateChmodDownloadTypes(chmodDownloadTypes); + + List chmodUploadTypes = new List(); + chmodUploadTypes.Add(ForFiles); + chmodUploadTypes.Add(ForFolders); + View.PopulateChmodUploadTypes(chmodUploadTypes); + } + + private string GetDuplicateAction(string property) + { + return TransferAction.forName(PreferencesFactory.get().getProperty(property)).getTitle(); + } + + private void PopulateDuplicateActions() + { + List downloadActions = new List(); + downloadActions.Add(TransferAction.callback.getTitle()); + downloadActions.Add(TransferAction.overwrite.getTitle()); + downloadActions.Add(TransferAction.resume.getTitle()); + downloadActions.Add(TransferAction.rename.getTitle()); + downloadActions.Add(TransferAction.renameexisting.getTitle()); + downloadActions.Add(TransferAction.comparison.getTitle()); + downloadActions.Add(TransferAction.skip.getTitle()); + View.PopulateDuplicateDownloadActions(downloadActions); + + List uploadActions = new List(); + uploadActions.Add(TransferAction.callback.getTitle()); + uploadActions.Add(TransferAction.overwrite.getTitle()); + uploadActions.Add(TransferAction.resume.getTitle()); + uploadActions.Add(TransferAction.rename.getTitle()); + uploadActions.Add(TransferAction.renameexisting.getTitle()); + uploadActions.Add(TransferAction.comparison.getTitle()); + uploadActions.Add(TransferAction.skip.getTitle()); + View.PopulateDuplicateUploadActions(uploadActions); + } + + private void PopulateTransferModes() + { + List> modes = new List>(); + foreach ( + String name in + Utils.ConvertFromJavaList(PreferencesFactory.get().getList("queue.transfer.type.enabled"))) + { + Host.TransferType t = Host.TransferType.valueOf(name); + modes.Add(new KeyValuePair(t.toString(), t)); + } + View.PopulateTransferModes(modes); + } + + private void PopulateEncodings() + { + List encodings = new List(); + encodings.AddRange(new DefaultCharsetProvider().availableCharsets()); + View.PopulateEncodings(encodings); + } + + private void PopulateDefaultProtocols() + { + List> protocols = new List>(); + foreach (Protocol p in ProtocolFactory.getEnabledProtocols().toArray(new Protocol[] {})) + { + protocols.Add(new KeyValueIconTriple(p, p.getDescription(), p.getProvider())); + } + View.PopulateProtocols(protocols); + } + + private void PopulateBookmarks() + { + List> bookmarks = new List>(); + bookmarks.Add(NoneBookmark); + foreach (Host host in BookmarkCollection.defaultCollection()) + { + bookmarks.Add(new KeyValueIconTriple(host, BookmarkNameProvider.toString(host), + host.getProtocol().getProvider())); + } + View.PopulateBookmarks(bookmarks); + } + + private void PopulateAndSelectEditor() + { + List> editors = new List>(); + + Application defaultEditor = EditorFactory.instance().getDefaultEditor(); + String defaultEditorLocation = null; + if (defaultEditor != null && Utils.IsNotBlank(defaultEditor.getIdentifier())) + { + defaultEditorLocation = defaultEditor.getIdentifier(); + } + bool defaultEditorAdded = false; + + foreach (Application editor in Utils.ConvertFromJavaList(EditorFactory.instance().getEditors()) + ) + { + if (ApplicationFinderFactory.get().isInstalled(editor)) + { + editors.Add(new KeyValueIconTriple(editor, editor.getName(), editor.getName())); + if (defaultEditorLocation != null && editor.getIdentifier().Equals(defaultEditorLocation)) + { + defaultEditorAdded = true; + } + } + } + if (!defaultEditorAdded) + { + if (defaultEditor != null && ApplicationFinderFactory.get().isInstalled(defaultEditor)) + { + editors.Insert(0, + new KeyValueIconTriple(defaultEditor, defaultEditor.getName(), + defaultEditor.getName())); + } + } + editors.Add(new KeyValueIconTriple(new Application(null, null), + LocaleFactory.localizedString("Choose") + "…", String.Empty)); + View.PopulateEditors(editors); + if (defaultEditor != null) + { + View.DefaultEditor = defaultEditor; + } + else + { + //dummy editor which leads to an empty selection + View.DefaultEditor = new Application(null, null); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/ProgressController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/ProgressController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/ProgressController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/ProgressController.cs index 65a390b1aa..d6eacfa792 100644 --- a/source/ch/cyberduck/ui/controller/ProgressController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/ProgressController.cs @@ -1,227 +1,227 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Text; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Ui.Controller.Threading; -using Ch.Cyberduck.Ui.Winforms.Controls; -using StructureMap; -using ch.cyberduck.core; -using ch.cyberduck.core.formatter; -using ch.cyberduck.core.transfer; -using java.util; -using TransferStatus = Ch.Cyberduck.Ui.Winforms.Controls.TransferStatus; - -namespace Ch.Cyberduck.Ui.Controller -{ - public class ProgressController : WindowController, TransferListener, ProgressListener - { - /** - * Formatter for file size - */ - private readonly SizeFormatter _sizeFormatter = SizeFormatterFactory.get(); - private readonly Transfer _transfer; - - /// - /// The current connection status message - /// - private String _messageText; - - public ProgressController(Transfer transfer) - { - _transfer = transfer; - View = ObjectFactory.GetInstance(); - Init(); - } - - public override void message(string message) - { - _messageText = message; - StringBuilder b = new StringBuilder(); - if (null == _messageText) - { - // Do not display any progress text when transfer is stopped - Date timestamp = _transfer.getTimestamp(); - if (null != timestamp) - { - _messageText = UserDateFormatterFactory.get().getLongFormat(timestamp.getTime()); - } - } - if (null != _messageText) - { - b.Append(_messageText); - } - AsyncDelegate d = () => View.MessageText = b.ToString(); - invoke(new SimpleDefaultMainAction(this, d)); - } - - public void start(Transfer t) - { - AsyncDelegate d = delegate - { - View.TransferStatus = TransferStatus.InProgress; - View.ProgressIndeterminate = true; - Progress(String.Empty); - View.StatusText = String.Empty; - }; - invoke(new SimpleDefaultMainAction(this, d)); - } - - public void stop(Transfer t) - { - AsyncDelegate d = delegate - { - View.ProgressIndeterminate = true; - message(String.Empty); - Progress(String.Format(LocaleFactory.localizedString("{0} of {1}"), - _sizeFormatter.format(_transfer.getTransferred()), - _sizeFormatter.format(_transfer.getSize()))); - View.StatusText = - LocaleFactory.localizedString( - LocaleFactory.localizedString( - _transfer.isComplete() - ? String.Format("{0} complete", - CultureInfo.CurrentCulture.TextInfo.ToTitleCase( - _transfer.getType().name())) - : "Transfer incomplete", "Status"), "Status"); - View.TransferStatus = t.isComplete() ? TransferStatus.Complete : TransferStatus.Incomplete; - UpdateOverallProgress(); - }; - invoke(new SimpleDefaultMainAction(this, d)); - } - - public void progress(TransferProgress tp) - { - Progress(tp.getProgress()); - AsyncDelegate d = delegate - { - double transferred = _transfer.getTransferred(); - double size = _transfer.getSize(); - if (transferred > 0 && size > 0) - { - View.ProgressIndeterminate = false; - // normalize double to int if size is too big - if (size > int.MaxValue) - { - View.ProgressMaximum = int.MaxValue; - View.ProgressValue = Convert.ToInt32(int.MaxValue*transferred/size); - } - else - { - View.ProgressMaximum = Convert.ToInt32(size); - View.ProgressValue = Convert.ToInt32(transferred); - } - } - else - { - View.ProgressIndeterminate = true; - } - UpdateOverallProgress(); - }; - invoke(new SimpleDefaultMainAction(this, d)); - } - - private void UpdateOverallProgress() - { - if (Utils.IsVistaOrLater) - { - TransferProgress progress = TransferCollection.defaultCollection().getProgress(); - TransferController.Instance.View.UpdateOverallProgressState( - TransferCollection.defaultCollection().numberOfRunningTransfers() == 0 - ? 0 - : progress.getTransferred().longValue(), progress.getSize().longValue()); - } - } - - private void Init() - { - Progress(String.Format(LocaleFactory.localizedString("{0} of {1}"), - _sizeFormatter.format(_transfer.getTransferred()), - _sizeFormatter.format(_transfer.getSize()))); - - SetIcon(); - SetMessageText(); - SetRootPaths(); - SetTransferStatus(); - View.StatusText = - LocaleFactory.localizedString( - LocaleFactory.localizedString( - _transfer.isComplete() - ? String.Format("{0} complete", - CultureInfo.CurrentCulture.TextInfo.ToTitleCase(_transfer.getType().name())) - : "Transfer incomplete", "Status"), "Status"); - } - - private void Progress(String message) - { - invoke(new SimpleDefaultMainAction(this, () => View.ProgressText = message)); - } - - private void SetRootPaths() - { - List srcRoots = _transfer.getRoots(); - IList roots = new List(); - for (int i = 0; i < srcRoots.size(); i++) - { - TransferItem item = (TransferItem) srcRoots.get(i); - roots.Add(item.remote.getName()); - } - View.PopulateRoots(roots); - } - - private void SetTransferStatus() - { - if (_transfer.isRunning()) - { - View.TransferStatus = TransferStatus.InProgress; - } - else - { - View.TransferStatus = _transfer.isComplete() ? TransferStatus.Complete : TransferStatus.Incomplete; - } - } - - private void SetMessageText() - { - message(null); - } - - private void SetIcon() - { - if (_transfer is DownloadTransfer) - { - View.TransferDirection = TransferDirection.Download; - } - else if (_transfer is UploadTransfer) - { - View.TransferDirection = TransferDirection.Upload; - } - else if (_transfer is CopyTransfer) - { - View.TransferDirection = TransferDirection.Upload; - } - else if (_transfer is SyncTransfer) - { - View.TransferDirection = TransferDirection.Sync; - } - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Ui.Controller.Threading; +using Ch.Cyberduck.Ui.Winforms.Controls; +using StructureMap; +using ch.cyberduck.core; +using ch.cyberduck.core.formatter; +using ch.cyberduck.core.transfer; +using java.util; +using TransferStatus = Ch.Cyberduck.Ui.Winforms.Controls.TransferStatus; + +namespace Ch.Cyberduck.Ui.Controller +{ + public class ProgressController : WindowController, TransferListener, ProgressListener + { + /** + * Formatter for file size + */ + private readonly SizeFormatter _sizeFormatter = SizeFormatterFactory.get(); + private readonly Transfer _transfer; + + /// + /// The current connection status message + /// + private String _messageText; + + public ProgressController(Transfer transfer) + { + _transfer = transfer; + View = ObjectFactory.GetInstance(); + Init(); + } + + public override void message(string message) + { + _messageText = message; + StringBuilder b = new StringBuilder(); + if (null == _messageText) + { + // Do not display any progress text when transfer is stopped + Date timestamp = _transfer.getTimestamp(); + if (null != timestamp) + { + _messageText = UserDateFormatterFactory.get().getLongFormat(timestamp.getTime()); + } + } + if (null != _messageText) + { + b.Append(_messageText); + } + AsyncDelegate d = () => View.MessageText = b.ToString(); + invoke(new SimpleDefaultMainAction(this, d)); + } + + public void start(Transfer t) + { + AsyncDelegate d = delegate + { + View.TransferStatus = TransferStatus.InProgress; + View.ProgressIndeterminate = true; + Progress(String.Empty); + View.StatusText = String.Empty; + }; + invoke(new SimpleDefaultMainAction(this, d)); + } + + public void stop(Transfer t) + { + AsyncDelegate d = delegate + { + View.ProgressIndeterminate = true; + message(String.Empty); + Progress(String.Format(LocaleFactory.localizedString("{0} of {1}"), + _sizeFormatter.format(_transfer.getTransferred()), + _sizeFormatter.format(_transfer.getSize()))); + View.StatusText = + LocaleFactory.localizedString( + LocaleFactory.localizedString( + _transfer.isComplete() + ? String.Format("{0} complete", + CultureInfo.CurrentCulture.TextInfo.ToTitleCase( + _transfer.getType().name())) + : "Transfer incomplete", "Status"), "Status"); + View.TransferStatus = t.isComplete() ? TransferStatus.Complete : TransferStatus.Incomplete; + UpdateOverallProgress(); + }; + invoke(new SimpleDefaultMainAction(this, d)); + } + + public void progress(TransferProgress tp) + { + Progress(tp.getProgress()); + AsyncDelegate d = delegate + { + double transferred = _transfer.getTransferred(); + double size = _transfer.getSize(); + if (transferred > 0 && size > 0) + { + View.ProgressIndeterminate = false; + // normalize double to int if size is too big + if (size > int.MaxValue) + { + View.ProgressMaximum = int.MaxValue; + View.ProgressValue = Convert.ToInt32(int.MaxValue*transferred/size); + } + else + { + View.ProgressMaximum = Convert.ToInt32(size); + View.ProgressValue = Convert.ToInt32(transferred); + } + } + else + { + View.ProgressIndeterminate = true; + } + UpdateOverallProgress(); + }; + invoke(new SimpleDefaultMainAction(this, d)); + } + + private void UpdateOverallProgress() + { + if (Utils.IsVistaOrLater) + { + TransferProgress progress = TransferCollection.defaultCollection().getProgress(); + TransferController.Instance.View.UpdateOverallProgressState( + TransferCollection.defaultCollection().numberOfRunningTransfers() == 0 + ? 0 + : progress.getTransferred().longValue(), progress.getSize().longValue()); + } + } + + private void Init() + { + Progress(String.Format(LocaleFactory.localizedString("{0} of {1}"), + _sizeFormatter.format(_transfer.getTransferred()), + _sizeFormatter.format(_transfer.getSize()))); + + SetIcon(); + SetMessageText(); + SetRootPaths(); + SetTransferStatus(); + View.StatusText = + LocaleFactory.localizedString( + LocaleFactory.localizedString( + _transfer.isComplete() + ? String.Format("{0} complete", + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(_transfer.getType().name())) + : "Transfer incomplete", "Status"), "Status"); + } + + private void Progress(String message) + { + invoke(new SimpleDefaultMainAction(this, () => View.ProgressText = message)); + } + + private void SetRootPaths() + { + List srcRoots = _transfer.getRoots(); + IList roots = new List(); + for (int i = 0; i < srcRoots.size(); i++) + { + TransferItem item = (TransferItem) srcRoots.get(i); + roots.Add(item.remote.getName()); + } + View.PopulateRoots(roots); + } + + private void SetTransferStatus() + { + if (_transfer.isRunning()) + { + View.TransferStatus = TransferStatus.InProgress; + } + else + { + View.TransferStatus = _transfer.isComplete() ? TransferStatus.Complete : TransferStatus.Incomplete; + } + } + + private void SetMessageText() + { + message(null); + } + + private void SetIcon() + { + if (_transfer is DownloadTransfer) + { + View.TransferDirection = TransferDirection.Download; + } + else if (_transfer is UploadTransfer) + { + View.TransferDirection = TransferDirection.Upload; + } + else if (_transfer is CopyTransfer) + { + View.TransferDirection = TransferDirection.Upload; + } + else if (_transfer is SyncTransfer) + { + View.TransferDirection = TransferDirection.Sync; + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/PromptLoginController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/PromptLoginController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/PromptLoginController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/PromptLoginController.cs index 8606b90ff9..64af283c48 100644 --- a/source/ch/cyberduck/ui/controller/PromptLoginController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/PromptLoginController.cs @@ -1,230 +1,230 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Windows.Forms; -using ch.cyberduck.core; -using ch.cyberduck.core.exception; -using ch.cyberduck.core.preferences; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Ui.Core.Preferences; -using Ch.Cyberduck.Ui.Winforms.Taskdialog; -using org.apache.log4j; -using StructureMap; - -namespace Ch.Cyberduck.Ui.Controller -{ - public class PromptLoginController : LoginCallback - { - private static readonly Logger Log = Logger.getLogger(typeof (PromptLoginController).FullName); - private readonly WindowController _browser; - private Credentials _credentials; - private LoginOptions _options; - private Host _bookmark; - - private HostPasswordStore keychain - = PasswordStoreFactory.get(); - - public PromptLoginController(WindowController c) - { - _browser = c; - } - - public ILoginView View { get; set; } - - public void warn(Protocol protocol, String title, String message, String continueButton, String disconnectButton, - String preference) - { - AsyncController.AsyncDelegate d = delegate - { - _browser.CommandBox(title, title, message, String.Format("{0}|{1}", continueButton, disconnectButton), - false, LocaleFactory.localizedString("Don't show again", "Credentials"), SysIcons.Question, - PreferencesFactory.get().getProperty("website.help") + "/" + protocol.getScheme().name(), - delegate(int option, Boolean verificationChecked) - { - if (verificationChecked) - { - // Never show again. - PreferencesFactory.get().setProperty(preference, true); - } - switch (option) - { - case 1: - throw new LoginCanceledException(); - } - }); - }; - _browser.Invoke(d); - //Proceed nevertheless. - } - - public void prompt(Host bookmark, Credentials credentials, String title, String reason, LoginOptions options) - { - View = ObjectFactory.GetInstance(); - InitEventHandlers(); - - _bookmark = bookmark; - _credentials = credentials; - _options = options; - - View.Title = LocaleFactory.localizedString(title, "Credentials"); - View.Message = LocaleFactory.localizedString(reason, "Credentials"); - View.Username = credentials.getUsername(); - View.SavePasswordState = PreferencesFactory.get().getBoolean("connection.login.useKeychain") && - PreferencesFactory.get().getBoolean("connection.login.addKeychain"); - View.DiskIcon = IconCache.Instance.IconForName(_bookmark.getProtocol().disk(), 64); - - Update(); - - AsyncController.AsyncDelegate d = delegate - { - if (DialogResult.Cancel == View.ShowDialog(_browser.View)) - { - throw new LoginCanceledException(); - } - credentials.setSaved(View.SavePasswordState); - credentials.setUsername(Utils.SafeString(View.Username)); - credentials.setPassword(Utils.SafeString(View.Password)); - }; - _browser.Invoke(d); - } - - public Local select(Local identity) - { - return identity; - } - - private void View_ChangedPkCheckboxEvent() - { - if (View.PkCheckboxState) - { - string selectedKeyFile = PreferencesFactory.get().getProperty("local.user.home"); - if (null != _credentials.getIdentity()) - { - selectedKeyFile = _credentials.getIdentity().getAbsolute(); - } - - View.ShowPrivateKeyBrowser(selectedKeyFile); - } - else - { - View_ChangedPrivateKey(this, new PrivateKeyArgs(null)); - } - } - - private void View_ChangedAnonymousCheckboxEvent() - { - if (View.AnonymousState) - { - _credentials.setUsername(PreferencesFactory.get().getProperty("connection.login.anon.name")); - _credentials.setPassword(PreferencesFactory.get().getProperty("connection.login.anon.pass")); - } - else - { - _credentials.setUsername(PreferencesFactory.get().getProperty("connection.login.name")); - _credentials.setPassword(null); - } - View.Username = _credentials.getUsername(); - View.Password = _credentials.getPassword(); - Update(); - } - - private void View_ChangedSavePasswordCheckboxEvent() - { - PreferencesFactory.get().setProperty("connection.login.addKeychain", View.SavePasswordState); - } - - private void View_ChangedPasswordEvent() - { - _credentials.setPassword(View.Password); - } - - private void View_ChangedUsernameEvent() - { - _credentials.setUsername(View.Username); - if (Utils.IsNotBlank(_credentials.getUsername())) - { - String password = keychain.getPassword(_bookmark.getProtocol().getScheme(), - _bookmark.getPort(), _bookmark.getHostname(), _credentials.getUsername()); - if (Utils.IsNotBlank(password)) - { - View.Password = password; - } - } - Update(); - } - - private void InitEventHandlers() - { - View.ChangedUsernameEvent += View_ChangedUsernameEvent; - View.ChangedPasswordEvent += View_ChangedPasswordEvent; - View.ChangedSavePasswordCheckboxEvent += View_ChangedSavePasswordCheckboxEvent; - View.ChangedAnonymousCheckboxEvent += View_ChangedAnonymousCheckboxEvent; - View.ChangedPkCheckboxEvent += View_ChangedPkCheckboxEvent; - View.ChangedPrivateKey += View_ChangedPrivateKey; - View.ValidateInput += View_ValidateInput; - } - - private bool View_ValidateInput() - { - return _credentials.validate(_bookmark.getProtocol(), _options); - } - - private void View_ChangedPrivateKey(object sender, PrivateKeyArgs e) - { - _credentials.setIdentity(null == e.KeyFile ? null : LocalFactory.get(e.KeyFile)); - Update(); - } - - private void Update() - { - View.UsernameEnabled = _options.user() && !_credentials.isAnonymousLogin(); - View.PasswordEnabled = _options.password() && !_credentials.isAnonymousLogin(); - View.UsernameLabel = _credentials.getUsernamePlaceholder() + ":"; - View.PasswordLabel = _credentials.getPasswordPlaceholder() + ":"; - { - bool enable = _options.isKeychain() && !_credentials.isAnonymousLogin(); - View.SavePasswordEnabled = enable; - if (!enable) - { - View.SavePasswordState = false; - } - } - View.AnonymousEnabled = _options.isAnonymous(); - if (_options.isAnonymous() && _credentials.isAnonymousLogin()) - { - View.AnonymousState = true; - } - else - { - View.AnonymousState = false; - } - View.PkCheckboxEnabled = _options.isPublickey(); - if (_options.isPublickey() && _credentials.isPublicKeyAuthentication()) - { - View.PkCheckboxState = true; - View.PkLabel = _credentials.getIdentity().getAbbreviatedPath(); - } - else - { - View.PkCheckboxState = false; - View.PkLabel = LocaleFactory.localizedString("No Private Key selected", "Credentials"); - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Windows.Forms; +using ch.cyberduck.core; +using ch.cyberduck.core.exception; +using ch.cyberduck.core.preferences; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Ui.Core.Preferences; +using Ch.Cyberduck.Ui.Winforms.Taskdialog; +using org.apache.log4j; +using StructureMap; + +namespace Ch.Cyberduck.Ui.Controller +{ + public class PromptLoginController : LoginCallback + { + private static readonly Logger Log = Logger.getLogger(typeof (PromptLoginController).FullName); + private readonly WindowController _browser; + private Credentials _credentials; + private LoginOptions _options; + private Host _bookmark; + + private HostPasswordStore keychain + = PasswordStoreFactory.get(); + + public PromptLoginController(WindowController c) + { + _browser = c; + } + + public ILoginView View { get; set; } + + public void warn(Protocol protocol, String title, String message, String continueButton, String disconnectButton, + String preference) + { + AsyncController.AsyncDelegate d = delegate + { + _browser.CommandBox(title, title, message, String.Format("{0}|{1}", continueButton, disconnectButton), + false, LocaleFactory.localizedString("Don't show again", "Credentials"), SysIcons.Question, + PreferencesFactory.get().getProperty("website.help") + "/" + protocol.getScheme().name(), + delegate(int option, Boolean verificationChecked) + { + if (verificationChecked) + { + // Never show again. + PreferencesFactory.get().setProperty(preference, true); + } + switch (option) + { + case 1: + throw new LoginCanceledException(); + } + }); + }; + _browser.Invoke(d); + //Proceed nevertheless. + } + + public void prompt(Host bookmark, Credentials credentials, String title, String reason, LoginOptions options) + { + View = ObjectFactory.GetInstance(); + InitEventHandlers(); + + _bookmark = bookmark; + _credentials = credentials; + _options = options; + + View.Title = LocaleFactory.localizedString(title, "Credentials"); + View.Message = LocaleFactory.localizedString(reason, "Credentials"); + View.Username = credentials.getUsername(); + View.SavePasswordState = PreferencesFactory.get().getBoolean("connection.login.useKeychain") && + PreferencesFactory.get().getBoolean("connection.login.addKeychain"); + View.DiskIcon = IconCache.Instance.IconForName(_bookmark.getProtocol().disk(), 64); + + Update(); + + AsyncController.AsyncDelegate d = delegate + { + if (DialogResult.Cancel == View.ShowDialog(_browser.View)) + { + throw new LoginCanceledException(); + } + credentials.setSaved(View.SavePasswordState); + credentials.setUsername(Utils.SafeString(View.Username)); + credentials.setPassword(Utils.SafeString(View.Password)); + }; + _browser.Invoke(d); + } + + public Local select(Local identity) + { + return identity; + } + + private void View_ChangedPkCheckboxEvent() + { + if (View.PkCheckboxState) + { + string selectedKeyFile = PreferencesFactory.get().getProperty("local.user.home"); + if (null != _credentials.getIdentity()) + { + selectedKeyFile = _credentials.getIdentity().getAbsolute(); + } + + View.ShowPrivateKeyBrowser(selectedKeyFile); + } + else + { + View_ChangedPrivateKey(this, new PrivateKeyArgs(null)); + } + } + + private void View_ChangedAnonymousCheckboxEvent() + { + if (View.AnonymousState) + { + _credentials.setUsername(PreferencesFactory.get().getProperty("connection.login.anon.name")); + _credentials.setPassword(PreferencesFactory.get().getProperty("connection.login.anon.pass")); + } + else + { + _credentials.setUsername(PreferencesFactory.get().getProperty("connection.login.name")); + _credentials.setPassword(null); + } + View.Username = _credentials.getUsername(); + View.Password = _credentials.getPassword(); + Update(); + } + + private void View_ChangedSavePasswordCheckboxEvent() + { + PreferencesFactory.get().setProperty("connection.login.addKeychain", View.SavePasswordState); + } + + private void View_ChangedPasswordEvent() + { + _credentials.setPassword(View.Password); + } + + private void View_ChangedUsernameEvent() + { + _credentials.setUsername(View.Username); + if (Utils.IsNotBlank(_credentials.getUsername())) + { + String password = keychain.getPassword(_bookmark.getProtocol().getScheme(), + _bookmark.getPort(), _bookmark.getHostname(), _credentials.getUsername()); + if (Utils.IsNotBlank(password)) + { + View.Password = password; + } + } + Update(); + } + + private void InitEventHandlers() + { + View.ChangedUsernameEvent += View_ChangedUsernameEvent; + View.ChangedPasswordEvent += View_ChangedPasswordEvent; + View.ChangedSavePasswordCheckboxEvent += View_ChangedSavePasswordCheckboxEvent; + View.ChangedAnonymousCheckboxEvent += View_ChangedAnonymousCheckboxEvent; + View.ChangedPkCheckboxEvent += View_ChangedPkCheckboxEvent; + View.ChangedPrivateKey += View_ChangedPrivateKey; + View.ValidateInput += View_ValidateInput; + } + + private bool View_ValidateInput() + { + return _credentials.validate(_bookmark.getProtocol(), _options); + } + + private void View_ChangedPrivateKey(object sender, PrivateKeyArgs e) + { + _credentials.setIdentity(null == e.KeyFile ? null : LocalFactory.get(e.KeyFile)); + Update(); + } + + private void Update() + { + View.UsernameEnabled = _options.user() && !_credentials.isAnonymousLogin(); + View.PasswordEnabled = _options.password() && !_credentials.isAnonymousLogin(); + View.UsernameLabel = _credentials.getUsernamePlaceholder() + ":"; + View.PasswordLabel = _credentials.getPasswordPlaceholder() + ":"; + { + bool enable = _options.isKeychain() && !_credentials.isAnonymousLogin(); + View.SavePasswordEnabled = enable; + if (!enable) + { + View.SavePasswordState = false; + } + } + View.AnonymousEnabled = _options.isAnonymous(); + if (_options.isAnonymous() && _credentials.isAnonymousLogin()) + { + View.AnonymousState = true; + } + else + { + View.AnonymousState = false; + } + View.PkCheckboxEnabled = _options.isPublickey(); + if (_options.isPublickey() && _credentials.isPublicKeyAuthentication()) + { + View.PkCheckboxState = true; + View.PkLabel = _credentials.getIdentity().getAbbreviatedPath(); + } + else + { + View.PkCheckboxState = false; + View.PkLabel = LocaleFactory.localizedString("No Private Key selected", "Credentials"); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/Renderers.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/Renderers.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/Renderers.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/Renderers.cs index c452f9cb4d..3fccc37ed4 100644 --- a/source/ch/cyberduck/ui/controller/Renderers.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/Renderers.cs @@ -1,1074 +1,1074 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.ComponentModel; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Globalization; -using System.Windows.Forms; -using System.Windows.Forms.VisualStyles; -using BrightIdeasSoftware; -using Ch.Cyberduck.Core; - -namespace Ch.Cyberduck.Ui.Controller -{ - public class AnimatedImageRenderer : ImageRenderer - { - public AnimatedImageRenderer() - { - } - - public AnimatedImageRenderer(bool startAnimations) : base(startAnimations) - { - } - - public AspectGetterDelegate AnimationRunningAspectGetter { get; set; } - - public override void Render(Graphics g, Rectangle r) - { - if (null != AnimationRunningAspectGetter) - { - IConvertible convertable = AnimationRunningAspectGetter(RowObject) as IConvertible; - if (convertable != null) - { - bool aspectValue = convertable.ToBoolean(NumberFormatInfo.InvariantInfo); - if (aspectValue) - { - Pause(); - Unpause(); - } - else - { - // remove image if aspect is false - DrawBackground(g, r); - return; - } - } - } - base.Render(g, r); - } - - protected override void HandleHitTest(Graphics g, OlvListViewHitTestInfo hti, int x, int y) - { - Rectangle r = CalculateAlignedRectangle(g, Bounds); - - // Did they hit a check box? - int width = CalculateCheckBoxWidth(g); - Rectangle r2 = r; - r2.Width = width; - if (r2.Contains(x, y)) - { - hti.HitTestLocation = HitTestLocation.CheckBox; - return; - } - - // Did they hit the image? If they hit the image of a - // non-primary column that has a checkbox, it counts as a - // checkbox hit - r.X += width; - r.Width -= width; - width = CalculateImageWidth(g, GetImageSelector()); - r2 = r; - r2.Width = width; - Image img = GetImageSelector() as Image; - // fix for vertical hitting (w/o the entire vertical column surrounding the image) - if (null != img) - { - r2.Y += (r.Height - img.Height)/2; - r2.Height = img.Height; - } - // end fix - if (r2.Contains(x, y)) - { - if (Column.Index > 0 && Column.CheckBoxes) - hti.HitTestLocation = HitTestLocation.CheckBox; - else - hti.HitTestLocation = HitTestLocation.Image; - return; - } - - // Did they hit the text? - r.X += width; - r.Width -= width; - width = CalculateTextWidth(g, GetText()); - r2 = r; - r2.Width = width; - if (r2.Contains(x, y)) - { - hti.HitTestLocation = HitTestLocation.Text; - return; - } - - hti.HitTestLocation = HitTestLocation.InCell; - } - - protected override Image GetImage(object imageSelector) - { - Image img = base.GetImage(imageSelector); - if (null != img) - { - return img; - } - if (imageSelector is string) - { - return - (Image) ResourcesBundle.ResourceManager.GetObject((string) imageSelector, ResourcesBundle.Culture); - } - return null; - } - } - - public class TaskRenderer : DescribedTaskRenderer - { - private int _titleDescriptionSpace = 3; - - /// - /// Space between title and description - /// - public int TitleDescriptionSpace - { - get { return _titleDescriptionSpace; } - set { _titleDescriptionSpace = value; } - } - - /// - /// Title delegate. - /// - /// - /// This delegate has precedence over DescriptionAspectName - /// - public AspectGetterDelegate DescriptionAspectGetter { get; set; } - - protected override string GetDescription() - { - if (null != DescriptionAspectGetter) - { - return (string) DescriptionAspectGetter(RowObject); - } - return base.GetDescription(); - } - - protected override void DrawDescribedTask(Graphics g, Rectangle r, string title, string description, Image image) - { - Rectangle cellBounds = r; - cellBounds.Inflate(-CellPadding.Value.Width, -CellPadding.Value.Height); - Rectangle textBounds = cellBounds; - - if (image != null) - { - g.DrawImage(image, cellBounds.Location); - int gapToText = image.Width + ImageTextSpace; - textBounds.X += gapToText; - textBounds.Width -= gapToText; - } - - // Color the background if the row is selected and we're not using a translucent selection - if (IsItemSelected && !ListView.UseTranslucentSelection) - { - using (SolidBrush b = new SolidBrush(GetTextBackgroundColor())) - { - g.FillRectangle(b, textBounds); - } - } - - // Draw the title - if (!String.IsNullOrEmpty(title)) - { - using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) - { - fmt.Trimming = StringTrimming.EllipsisCharacter; - fmt.Alignment = StringAlignment.Near; - fmt.LineAlignment = StringAlignment.Near; - Font f = TitleFontOrDefault; - using (SolidBrush b = new SolidBrush(TitleColorOrDefault)) - { - g.DrawString(title, f, b, textBounds, fmt); - } - - // How tall was the title? - SizeF size = g.MeasureString(title, f, textBounds.Width, fmt); - textBounds.Y += (int) size.Height; - textBounds.Y += TitleDescriptionSpace; - textBounds.Height -= (int) size.Height; - } - } - - // Draw the description - if (!String.IsNullOrEmpty(description)) - { - using (StringFormat fmt2 = new StringFormat()) - { - fmt2.Trimming = StringTrimming.EllipsisCharacter; - using (SolidBrush b = new SolidBrush(DescriptionColorOrDefault)) - { - g.DrawString(description, DescriptionFontOrDefault, b, textBounds, fmt2); - } - } - } - } - } - - /// - /// This renderer draws an error - /// - /// - /// This class works best with FullRowSelect = true. - /// It's not designed to work with cell editing -- it will work but will look odd. - /// - public class ErrorRenderer : BaseRenderer - { - private Size cellPadding = new Size(2, 2); - private Color descriptionColor = Color.Red; - private Color errorColor = Color.Black; - private Color hostColor = Color.Black; - - /// - /// Gets or set the color of the host of the error - /// - /// This color is used when the error is not selected or when the listview - /// has a translucent selection mechanism. - [Category("Appearance - ObjectListView"), Description("The color of the host"), - DefaultValue(typeof (Color), "Black")] - public Color HostColor - { - get { return hostColor; } - set { hostColor = value; } - } - - /// - /// Return the color of the host of the error or a reasonable default - /// - [Browsable(false)] - public Color HostColorOrDefault - { - get - { - if (HostColor.IsEmpty || (IsItemSelected && ListView.Focused && !ListView.UseTranslucentSelection)) - return GetForegroundColor(); - else - return HostColor; - } - } - - /// - /// Gets or set the font that will be used to draw the description of the task - /// - /// If this is null, the ListView's font will be used - [Category("Appearance - ObjectListView"), - Description("The font that will be used to draw the host field of the error"), DefaultValue(null)] - public Font HostFont { get; set; } - - /// - /// Return a font that has been set for the host or a reasonable default - /// - [Browsable(false)] - public Font HostFontOrDefault - { - get { return HostFont ?? ListView.Font; } - } - - /// - /// Gets or set the color of the description of the task - /// - /// This color is used when the task is not selected or when the listview - /// has a translucent selection mechanism. - [Category("Appearance - ObjectListView"), Description("The color of the description"), - DefaultValue(typeof (Color), "Red")] - public Color DescriptionColor - { - get { return descriptionColor; } - set { descriptionColor = value; } - } - - /// - /// Return the color of the description of the task or a reasonable default - /// - [Browsable(false)] - public Color DescriptionColorOrDefault - { - get - { - if (DescriptionColor.IsEmpty || - (IsItemSelected && ListView.Focused && !ListView.UseTranslucentSelection)) - return GetForegroundColor(); - else - return DescriptionColor; - } - } - - /// - /// Gets or set the font that will be used to draw the description of the task - /// - /// If this is null, the ListView's font will be used - [Category("Appearance - ObjectListView"), - Description("The font that will be used to draw the description of the task"), DefaultValue(null)] - public Font DescriptionFont { get; set; } - - /// - /// Return a font that has been set for the title or a reasonable default - /// - [Browsable(false)] - public Font DescriptionFontOrDefault - { - get { return DescriptionFont ?? ListView.Font; } - } - - /// - /// Gets or set the font that will be used to draw the error message - /// - /// If this is null, the ListView's font will be used - [Category("Appearance - ObjectListView"), Description("The font that will be used to draw the error message"), - DefaultValue(null)] - public Font ErrorFont { get; set; } - - /// - /// Return a font that has been set for the error message or a reasonable default - /// - [Browsable(false)] - public Font ErrorFontOrDefault - { - get { return ErrorFont ?? ListView.Font; } - } - - /// - /// Gets or set the color of the error message - /// - /// This color is used when the error is not selected or when the listview - /// has a translucent selection mechanism. - [Category("Appearance - ObjectListView"), Description("The color of the error message"), - DefaultValue(typeof (Color), "Black")] - public Color ErrorColor - { - get { return errorColor; } - set { errorColor = value; } - } - - /// - /// Return the color of the title of the task or a reasonable default - /// - [Browsable(false)] - public Color ErrorColorOrDefault - { - get - { - if (ErrorColor.IsEmpty || (IsItemSelected && ListView.Focused && !ListView.UseTranslucentSelection)) - return GetForegroundColor(); - else - return ErrorColor; - } - } - - /// - /// Gets or sets the number of pixels that renderer will leave empty around the edge of the cell - /// - [Category("Appearance - ObjectListView"), - Description("The number of pixels that renderer will leave empty around the edge of the cell"), - DefaultValue(typeof (Size), "2,2")] - public Size CellPadding - { - get { return cellPadding; } - set { cellPadding = value; } - } - - /// - /// Gets or sets the number of pixels that will be left between the host and the description field - /// - [Category("Appearance - ObjectListView"), - Description("The number of pixels that will be left between the host and the description field"), - DefaultValue(4)] - public int ErrorHostSpace { get; set; } - - /// - /// Gets or sets the number of pixels that will be left between the description and the error field - /// - [Category("Appearance - ObjectListView"), - Description("The number of pixels that will be left between the description and the error field"), - DefaultValue(4)] - public int HostDescriptionSpace { get; set; } - - /// - /// Gets or sets the delegate of the aspect of the model object that contains the description - /// - public AspectGetterDelegate DescriptionAspectGetter { get; set; } - - /// - /// Gets or sets the delegate of the aspect of the model object that contains the error message - /// - public AspectGetterDelegate ErrorAspectGetter { get; set; } - - public override void Render(Graphics g, Rectangle r) - { - DrawBackground(g, r); - DrawError(g, r, Aspect as String, DescriptionAspectGetter(RowObject) as String, - ErrorAspectGetter(RowObject) as String); - } - - public virtual void DrawError(Graphics g, Rectangle r, String host, String description, String error) - { - Rectangle cellBounds = r; - cellBounds.Inflate(-CellPadding.Width, -CellPadding.Height); - Rectangle textBounds = cellBounds; - - // Color the background if the row is selected and we're not using a translucent selection - if (IsItemSelected && !ListView.UseTranslucentSelection) - { - using (SolidBrush b = new SolidBrush(GetTextBackgroundColor())) - { - g.FillRectangle(b, textBounds); - } - } - - // Draw the error field - if (!String.IsNullOrEmpty(error)) - { - using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) - { - fmt.Trimming = StringTrimming.EllipsisCharacter; - fmt.Alignment = StringAlignment.Near; - fmt.LineAlignment = StringAlignment.Near; - Font f = ErrorFontOrDefault; - using (SolidBrush b = new SolidBrush(ErrorColorOrDefault)) - { - g.DrawString(error, f, b, textBounds, fmt); - } - - // How tall was the error field? - SizeF size = g.MeasureString(error, f, textBounds.Width, fmt); - textBounds.Y += (int) size.Height; - textBounds.Y += ErrorHostSpace; - textBounds.Height -= (int) size.Height; - } - } - - // Draw the host field - if (!String.IsNullOrEmpty(host)) - { - using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) - { - fmt.Trimming = StringTrimming.EllipsisPath; - fmt.Alignment = StringAlignment.Near; - fmt.LineAlignment = StringAlignment.Near; - Font f = HostFontOrDefault; - using (SolidBrush b = new SolidBrush(HostColorOrDefault)) - { - g.DrawString(host, f, b, textBounds, fmt); - } - - // How tall was the host field? - SizeF size = g.MeasureString(host, f, textBounds.Width, fmt); - textBounds.Y += (int) size.Height; - textBounds.Y += HostDescriptionSpace; - textBounds.Height -= (int) size.Height; - } - } - - // Draw the description field - if (!String.IsNullOrEmpty(description)) - { - using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) - { - fmt.Trimming = StringTrimming.EllipsisCharacter; - fmt.Alignment = StringAlignment.Near; - fmt.LineAlignment = StringAlignment.Near; - Font f = DescriptionFontOrDefault; - using (SolidBrush b = new SolidBrush(DescriptionColorOrDefault)) - { - g.DrawString(description, f, b, textBounds, fmt); - } - - // How tall was the description field? - SizeF size = g.MeasureString(error, f, textBounds.Width, fmt); - textBounds.Y += (int) size.Height; - //textBounds.Y += HostDescriptionSpace; - textBounds.Height -= (int) size.Height; - } - } - } - - protected override void HandleHitTest(Graphics g, OlvListViewHitTestInfo hti, int x, int y) - { - if (Bounds.Contains(x, y)) - hti.HitTestLocation = HitTestLocation.Text; - } - } - - public abstract class AbstractBookmarkRenderer : BaseRenderer - { - private Size cellPadding = new Size(2, 2); - private Color hostnameColor = Color.Black; - private Color nicknameColor = Color.Black; - private Color notesColor = Color.Black; - private Color urlColor = Color.Black; - - /// - /// Gets or set the color of the description of the task - /// - /// This color is used when the task is not selected or when the listview - /// has a translucent selection mechanism. - public Color NicknameColor - { - get { return nicknameColor; } - set { nicknameColor = value; } - } - - /// - /// Return the color of the nickname or a reasonable default - /// - public Color NicknameColorOrDefault - { - get - { - if (NicknameColor.IsEmpty || (IsItemSelected && ListView.Focused && !ListView.UseTranslucentSelection)) - return GetForegroundColor(); - else - return NicknameColor; - } - } - - /// - /// Gets or set the font that will be used to draw the nickname of the bookmark - /// - /// If this is null, the ListView's font will be used - public Font NicknameFont { get; set; } - - /// - /// Return a font that has been set for the host or a reasonable default - /// - public Font NicknameFontOrDefault - { - get { return NicknameFont ?? ListView.Font; } - } - - /// - /// Gets or set the color of the hostname - /// - /// This color is used when the task is not selected or when the listview - /// has a translucent selection mechanism. - public Color HostnameColor - { - get { return hostnameColor; } - set { hostnameColor = value; } - } - - /// - /// Return the color of the hostname or a reasonable default - /// - public Color HostnameColorOrDefault - { - get - { - if (HostnameColor.IsEmpty || (IsItemSelected && ListView.Focused && !ListView.UseTranslucentSelection)) - { - return GetForegroundColor(); - } - return HostnameColor; - } - } - - /// - /// Gets or set the font that will be used to draw the hostname of the bookmark - /// - /// If this is null, the ListView's font will be used - public Font HostnameFont { get; set; } - - /// - /// Return a font that has been set for the hostname or a reasonable default - /// - public Font HostnameFontOrDefault - { - get { return HostnameFont ?? ListView.Font; } - } - - /// - /// Gets or set the color of the URL - /// - /// This color is used when the task is not selected or when the listview - /// has a translucent selection mechanism. - public Color UrlColor - { - get { return urlColor; } - set { urlColor = value; } - } - - /// - /// Return the color of the URL or a reasonable default - /// - public Color UrlColorOrDefault - { - get - { - if (UrlColor.IsEmpty || (IsItemSelected && ListView.Focused && !ListView.UseTranslucentSelection)) - return GetForegroundColor(); - else - return UrlColor; - } - } - - /// - /// Gets or set the font that will be used to draw the URL of the bookmark - /// - /// If this is null, the ListView's font will be used - public Font UrlFont { get; set; } - - /// - /// Return a font that has been set for the hostname or a reasonable default - /// - [Browsable(false)] - public Font UrlFontOrDefault - { - get { return UrlFont ?? ListView.Font; } - } - - /// - /// Gets or set the color of the notes - /// - /// This color is used when the task is not selected or when the listview - /// has a translucent selection mechanism. - public Color NotesColor - { - get { return notesColor; } - set { notesColor = value; } - } - - /// - /// Return the color of the notes or a reasonable default - /// - public Color NotesColorOrDefault - { - get - { - if (NotesColor.IsEmpty || (IsItemSelected && ListView.Focused && !ListView.UseTranslucentSelection)) - return GetForegroundColor(); - else - return NotesColor; - } - } - - /// - /// Gets or set the font that will be used to draw the notes of the bookmark - /// - /// If this is null, the ListView's font will be used - public Font NotesFont { get; set; } - - /// - /// Return a font that has been set for the hostname or a reasonable default - /// - public Font NotesFontOrDefault - { - get { return NotesFont ?? ListView.Font; } - } - - /// - /// Gets or sets the number of pixels that renderer will leave empty around the edge of the cell - /// - public Size CellPadding - { - get { return cellPadding; } - set { cellPadding = value; } - } - - /// - /// Gets or sets the number of pixels that will be left between the nickname and the server field - /// - public int NicknameHostnameSpace { get; set; } - - /// - /// Gets or sets the number of pixels that will be left between the Hostname and the URL field - /// - public int HostnameUrlSpace { get; set; } - - /// - /// Gets or sets the number of pixels that will be left between the URL and the notes field - /// - public int UrlNotesSpace { get; set; } - - /// - /// Gets or sets the delegate of the aspect of the model object that contains the hostname - /// - public AspectGetterDelegate HostnameAspectGetter { get; set; } - - /// - /// Gets or sets the delegate of the aspect of the model object that contains the URL - /// - public AspectGetterDelegate UrlAspectGetter { get; set; } - - /// - /// Gets or sets the delegate of the aspect of the model object that contains the notes - /// - public AspectGetterDelegate NotesAspectGetter { get; set; } - - public override void Render(Graphics g, Rectangle r) - { - DrawBackground(g, r); - DrawBookmark(g, r, Aspect as String, HostnameAspectGetter(RowObject) as String, - UrlAspectGetter(RowObject) as String, NotesAspectGetter(RowObject) as String); - } - - public abstract void DrawBookmark(Graphics g, Rectangle r, String nickname, String hostname, String url, - String notes); - - protected override void HandleHitTest(Graphics g, OlvListViewHitTestInfo hti, int x, int y) - { - if (Bounds.Contains(x, y)) - hti.HitTestLocation = HitTestLocation.Text; - } - } - - public class SmallBookmarkRenderer : AbstractBookmarkRenderer - { - public override void DrawBookmark(Graphics g, Rectangle r, String nickname, String hostname, String url, - String notes) - { - Rectangle cellBounds = r; - cellBounds.Inflate(-CellPadding.Width, -CellPadding.Height); - Rectangle textBounds = cellBounds; - - // Color the background if the row is selected and we're not using a translucent selection - if (IsItemSelected && !ListView.UseTranslucentSelection) - { - using (SolidBrush b = new SolidBrush(GetTextBackgroundColor())) - { - g.FillRectangle(b, textBounds); - } - } - - // Draw the nickname field - if (!String.IsNullOrEmpty(nickname)) - { - using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) - { - fmt.Trimming = StringTrimming.EllipsisCharacter; - fmt.Alignment = StringAlignment.Near; - fmt.LineAlignment = StringAlignment.Near; - Font f = NicknameFontOrDefault; - using (SolidBrush b = new SolidBrush(NicknameColorOrDefault)) - { - g.DrawString(nickname, f, b, textBounds, fmt); - } - - // How tall was the URL field? - SizeF size = g.MeasureString(nickname, f, textBounds.Width, fmt); - textBounds.Y += (int) size.Height; - textBounds.Y += NicknameHostnameSpace; - textBounds.Height -= (int) size.Height; - } - } - } - } - - public class MediumBookmarkRenderer : AbstractBookmarkRenderer - { - public override void DrawBookmark(Graphics g, Rectangle r, string nickname, string hostname, string url, - string notes) - { - Rectangle cellBounds = r; - cellBounds.Inflate(-CellPadding.Width, -CellPadding.Height); - Rectangle textBounds = cellBounds; - - // Color the background if the row is selected and we're not using a translucent selection - if (IsItemSelected && !ListView.UseTranslucentSelection) - { - using (SolidBrush b = new SolidBrush(GetTextBackgroundColor())) - { - g.FillRectangle(b, textBounds); - } - } - - // Draw the nickname field - if (!String.IsNullOrEmpty(nickname)) - { - using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) - { - fmt.Trimming = StringTrimming.EllipsisCharacter; - fmt.Alignment = StringAlignment.Near; - fmt.LineAlignment = StringAlignment.Near; - Font f = NicknameFontOrDefault; - using (SolidBrush b = new SolidBrush(NicknameColorOrDefault)) - { - g.DrawString(nickname, f, b, textBounds, fmt); - } - SizeF size = g.MeasureString(nickname, f, textBounds.Width, fmt); - textBounds.Y += (int)size.Height; - textBounds.Y += NicknameHostnameSpace; - textBounds.Height -= (int)size.Height; - } - } - - // Draw the hostname field - if (!String.IsNullOrEmpty(hostname)) - { - using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) - { - fmt.Trimming = StringTrimming.EllipsisCharacter; - fmt.Alignment = StringAlignment.Near; - fmt.LineAlignment = StringAlignment.Near; - Font f = HostnameFontOrDefault; - using (SolidBrush b = new SolidBrush(HostnameColorOrDefault)) - { - g.DrawString(hostname, f, b, textBounds, fmt); - } - SizeF size = g.MeasureString(hostname, f, textBounds.Width, fmt); - textBounds.Y += (int)size.Height; - textBounds.Y += HostnameUrlSpace; - textBounds.Height -= (int)size.Height; - } - } - - // Draw the URL field - if (!String.IsNullOrEmpty(url)) - { - using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) - { - fmt.Trimming = StringTrimming.EllipsisPath; - fmt.Alignment = StringAlignment.Near; - fmt.LineAlignment = StringAlignment.Near; - Font f = UrlFontOrDefault; - using (SolidBrush b = new SolidBrush(UrlColorOrDefault)) - { - g.DrawString(url, f, b, textBounds, fmt); - } - SizeF size = g.MeasureString(url, f, textBounds.Width, fmt); - textBounds.Y += (int)size.Height; - textBounds.Y += UrlNotesSpace; - textBounds.Height -= (int)size.Height; - } - } - } - } - - /// - /// This renderer draws a bookmark - /// - /// - /// This class works best with FullRowSelect = true. - /// It's not designed to work with cell editing -- it will work but will look odd. - /// - public class LargeBookmarkRenderer : AbstractBookmarkRenderer - { - public override void DrawBookmark(Graphics g, Rectangle r, String nickname, String hostname, String url, - String notes) - { - Rectangle cellBounds = r; - cellBounds.Inflate(-CellPadding.Width, -CellPadding.Height); - Rectangle textBounds = cellBounds; - - // Color the background if the row is selected and we're not using a translucent selection - if (IsItemSelected && !ListView.UseTranslucentSelection) - { - using (SolidBrush b = new SolidBrush(GetTextBackgroundColor())) - { - g.FillRectangle(b, textBounds); - } - } - - // Draw the nickname field - if (!String.IsNullOrEmpty(nickname)) - { - using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) - { - fmt.Trimming = StringTrimming.EllipsisCharacter; - fmt.Alignment = StringAlignment.Near; - fmt.LineAlignment = StringAlignment.Near; - Font f = NicknameFontOrDefault; - using (SolidBrush b = new SolidBrush(NicknameColorOrDefault)) - { - g.DrawString(nickname, f, b, textBounds, fmt); - } - - // How tall was the URL field? - SizeF size = g.MeasureString(nickname, f, textBounds.Width, fmt); - textBounds.Y += (int) size.Height; - textBounds.Y += NicknameHostnameSpace; - textBounds.Height -= (int) size.Height; - } - } - - // Draw the hostname field - if (!String.IsNullOrEmpty(hostname)) - { - using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) - { - fmt.Trimming = StringTrimming.EllipsisCharacter; - fmt.Alignment = StringAlignment.Near; - fmt.LineAlignment = StringAlignment.Near; - Font f = HostnameFontOrDefault; - using (SolidBrush b = new SolidBrush(HostnameColorOrDefault)) - { - g.DrawString(hostname, f, b, textBounds, fmt); - } - - // How tall was the URL field? - SizeF size = g.MeasureString(hostname, f, textBounds.Width, fmt); - textBounds.Y += (int) size.Height; - textBounds.Y += HostnameUrlSpace; - textBounds.Height -= (int) size.Height; - } - } - - // Draw the URL field - if (!String.IsNullOrEmpty(url)) - { - using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) - { - fmt.Trimming = StringTrimming.EllipsisPath; - fmt.Alignment = StringAlignment.Near; - fmt.LineAlignment = StringAlignment.Near; - Font f = UrlFontOrDefault; - using (SolidBrush b = new SolidBrush(UrlColorOrDefault)) - { - g.DrawString(url, f, b, textBounds, fmt); - } - - // How tall was the URL field? - SizeF size = g.MeasureString(url, f, textBounds.Width, fmt); - textBounds.Y += (int) size.Height; - textBounds.Y += UrlNotesSpace; - textBounds.Height -= (int) size.Height; - } - } - - // Draw the notes field - if (!String.IsNullOrEmpty(notes)) - { - using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) - { - fmt.Trimming = StringTrimming.EllipsisCharacter; - fmt.Alignment = StringAlignment.Near; - fmt.LineAlignment = StringAlignment.Near; - Font f = NotesFontOrDefault; - using (SolidBrush b = new SolidBrush(NotesColorOrDefault)) - { - g.DrawString(notes, f, b, textBounds, fmt); - } - - // How tall was the notes field? - SizeF size = g.MeasureString(notes, f, textBounds.Width, fmt); - textBounds.Y += (int) size.Height; - //textBounds.Y += HostDescriptionSpace; - textBounds.Height -= (int) size.Height; - } - } - } - } - - /// - /// ToolStrip renderer that does not have this ugly white line at the bottom. - /// - public class ToolStripRenderer : ToolStripSystemRenderer - { - protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) - { - base.OnRenderToolStripBorder(e); - - Rectangle rect = e.AffectedBounds; - rect.Height = 2; - rect.Offset(0, e.AffectedBounds.Height - 2); - e.Graphics.FillRectangle(new SolidBrush(e.BackColor), rect); - return; - } - } - - /// - /// Renderer to make the browser tree Explorer like (default explorer theme) - /// - public class BrowserRenderer : TreeListView.TreeRenderer - { - // see http://stackoverflow.com/questions/3014816/visualstylerenderer-and-themes-winforms - private static readonly VisualStyleRenderer ClosedGlyphRenderer; - private static readonly VisualStyleRenderer OpenedGlyphRenderer; - - static BrowserRenderer() - { - if (Utils.IsVistaOrLater && VisualStyleRenderer.IsSupported) - { - ClosedGlyphRenderer = - new VisualStyleRenderer(VisualStyleElement.CreateElement("Explorer::TreeView", 2, 1)); - OpenedGlyphRenderer = - new VisualStyleRenderer(VisualStyleElement.CreateElement("Explorer::TreeView", 2, 2)); - } - } - - public BrowserRenderer() - { - IsShowLines = false; - } - - protected override void DrawExpansionGlyph(Graphics g, Rectangle r, bool isExpanded) - { - if (Utils.IsVistaOrLater && VisualStyleRenderer.IsSupported) - { - VisualStyleRenderer renderer = isExpanded ? OpenedGlyphRenderer : ClosedGlyphRenderer; - renderer.DrawBackground(g, r); - } - else - { - base.DrawExpansionGlyph(g, r, isExpanded); - } - } - } - - /// - /// Explorer gradient-style renderer for selected rows. - /// - public class ExplorerRowBorderDecoration : RowBorderDecoration - { - public ExplorerRowBorderDecoration() - { - BoundsPadding = new Size(0, -1); - CornerRounding = 5.0f; - BorderPen = new Pen(Color.FromArgb(128, Color.SteelBlue), 1); - } - - protected override Rectangle CalculateBounds() - { - Rectangle bounds = base.CalculateBounds(); - bounds.Y--; - bounds.Height++; - bounds.Width--; - // update brush - if (FillBrush != null) - { - FillBrush.Dispose(); - } - FillBrush = new LinearGradientBrush(bounds, Color.FromArgb(64, Color.LightBlue), - Color.FromArgb(64, Color.DodgerBlue), LinearGradientMode.Vertical); - return bounds; - } - } - - // - //see https://sourceforge.net/p/objectlistview/discussion/812922/thread/445489ce/ - // - public class FixedImageRenderer : BaseRenderer - { - protected override int DrawImage(Graphics g, Rectangle r, object imageSelector) - { - Image image = imageSelector as Image; - if (image != null) - { - if (image.Size.Height < r.Height) - r.Y = AlignVertically(r, new Rectangle(Point.Empty, image.Size)); - - g.DrawImageUnscaled(image, r.X, r.Y); - return image.Width; - } - return 0; - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Globalization; +using System.Windows.Forms; +using System.Windows.Forms.VisualStyles; +using BrightIdeasSoftware; +using Ch.Cyberduck.Core; + +namespace Ch.Cyberduck.Ui.Controller +{ + public class AnimatedImageRenderer : ImageRenderer + { + public AnimatedImageRenderer() + { + } + + public AnimatedImageRenderer(bool startAnimations) : base(startAnimations) + { + } + + public AspectGetterDelegate AnimationRunningAspectGetter { get; set; } + + public override void Render(Graphics g, Rectangle r) + { + if (null != AnimationRunningAspectGetter) + { + IConvertible convertable = AnimationRunningAspectGetter(RowObject) as IConvertible; + if (convertable != null) + { + bool aspectValue = convertable.ToBoolean(NumberFormatInfo.InvariantInfo); + if (aspectValue) + { + Pause(); + Unpause(); + } + else + { + // remove image if aspect is false + DrawBackground(g, r); + return; + } + } + } + base.Render(g, r); + } + + protected override void HandleHitTest(Graphics g, OlvListViewHitTestInfo hti, int x, int y) + { + Rectangle r = CalculateAlignedRectangle(g, Bounds); + + // Did they hit a check box? + int width = CalculateCheckBoxWidth(g); + Rectangle r2 = r; + r2.Width = width; + if (r2.Contains(x, y)) + { + hti.HitTestLocation = HitTestLocation.CheckBox; + return; + } + + // Did they hit the image? If they hit the image of a + // non-primary column that has a checkbox, it counts as a + // checkbox hit + r.X += width; + r.Width -= width; + width = CalculateImageWidth(g, GetImageSelector()); + r2 = r; + r2.Width = width; + Image img = GetImageSelector() as Image; + // fix for vertical hitting (w/o the entire vertical column surrounding the image) + if (null != img) + { + r2.Y += (r.Height - img.Height)/2; + r2.Height = img.Height; + } + // end fix + if (r2.Contains(x, y)) + { + if (Column.Index > 0 && Column.CheckBoxes) + hti.HitTestLocation = HitTestLocation.CheckBox; + else + hti.HitTestLocation = HitTestLocation.Image; + return; + } + + // Did they hit the text? + r.X += width; + r.Width -= width; + width = CalculateTextWidth(g, GetText()); + r2 = r; + r2.Width = width; + if (r2.Contains(x, y)) + { + hti.HitTestLocation = HitTestLocation.Text; + return; + } + + hti.HitTestLocation = HitTestLocation.InCell; + } + + protected override Image GetImage(object imageSelector) + { + Image img = base.GetImage(imageSelector); + if (null != img) + { + return img; + } + if (imageSelector is string) + { + return + (Image) ResourcesBundle.ResourceManager.GetObject((string) imageSelector, ResourcesBundle.Culture); + } + return null; + } + } + + public class TaskRenderer : DescribedTaskRenderer + { + private int _titleDescriptionSpace = 3; + + /// + /// Space between title and description + /// + public int TitleDescriptionSpace + { + get { return _titleDescriptionSpace; } + set { _titleDescriptionSpace = value; } + } + + /// + /// Title delegate. + /// + /// + /// This delegate has precedence over DescriptionAspectName + /// + public AspectGetterDelegate DescriptionAspectGetter { get; set; } + + protected override string GetDescription() + { + if (null != DescriptionAspectGetter) + { + return (string) DescriptionAspectGetter(RowObject); + } + return base.GetDescription(); + } + + protected override void DrawDescribedTask(Graphics g, Rectangle r, string title, string description, Image image) + { + Rectangle cellBounds = r; + cellBounds.Inflate(-CellPadding.Value.Width, -CellPadding.Value.Height); + Rectangle textBounds = cellBounds; + + if (image != null) + { + g.DrawImage(image, cellBounds.Location); + int gapToText = image.Width + ImageTextSpace; + textBounds.X += gapToText; + textBounds.Width -= gapToText; + } + + // Color the background if the row is selected and we're not using a translucent selection + if (IsItemSelected && !ListView.UseTranslucentSelection) + { + using (SolidBrush b = new SolidBrush(GetTextBackgroundColor())) + { + g.FillRectangle(b, textBounds); + } + } + + // Draw the title + if (!String.IsNullOrEmpty(title)) + { + using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) + { + fmt.Trimming = StringTrimming.EllipsisCharacter; + fmt.Alignment = StringAlignment.Near; + fmt.LineAlignment = StringAlignment.Near; + Font f = TitleFontOrDefault; + using (SolidBrush b = new SolidBrush(TitleColorOrDefault)) + { + g.DrawString(title, f, b, textBounds, fmt); + } + + // How tall was the title? + SizeF size = g.MeasureString(title, f, textBounds.Width, fmt); + textBounds.Y += (int) size.Height; + textBounds.Y += TitleDescriptionSpace; + textBounds.Height -= (int) size.Height; + } + } + + // Draw the description + if (!String.IsNullOrEmpty(description)) + { + using (StringFormat fmt2 = new StringFormat()) + { + fmt2.Trimming = StringTrimming.EllipsisCharacter; + using (SolidBrush b = new SolidBrush(DescriptionColorOrDefault)) + { + g.DrawString(description, DescriptionFontOrDefault, b, textBounds, fmt2); + } + } + } + } + } + + /// + /// This renderer draws an error + /// + /// + /// This class works best with FullRowSelect = true. + /// It's not designed to work with cell editing -- it will work but will look odd. + /// + public class ErrorRenderer : BaseRenderer + { + private Size cellPadding = new Size(2, 2); + private Color descriptionColor = Color.Red; + private Color errorColor = Color.Black; + private Color hostColor = Color.Black; + + /// + /// Gets or set the color of the host of the error + /// + /// This color is used when the error is not selected or when the listview + /// has a translucent selection mechanism. + [Category("Appearance - ObjectListView"), Description("The color of the host"), + DefaultValue(typeof (Color), "Black")] + public Color HostColor + { + get { return hostColor; } + set { hostColor = value; } + } + + /// + /// Return the color of the host of the error or a reasonable default + /// + [Browsable(false)] + public Color HostColorOrDefault + { + get + { + if (HostColor.IsEmpty || (IsItemSelected && ListView.Focused && !ListView.UseTranslucentSelection)) + return GetForegroundColor(); + else + return HostColor; + } + } + + /// + /// Gets or set the font that will be used to draw the description of the task + /// + /// If this is null, the ListView's font will be used + [Category("Appearance - ObjectListView"), + Description("The font that will be used to draw the host field of the error"), DefaultValue(null)] + public Font HostFont { get; set; } + + /// + /// Return a font that has been set for the host or a reasonable default + /// + [Browsable(false)] + public Font HostFontOrDefault + { + get { return HostFont ?? ListView.Font; } + } + + /// + /// Gets or set the color of the description of the task + /// + /// This color is used when the task is not selected or when the listview + /// has a translucent selection mechanism. + [Category("Appearance - ObjectListView"), Description("The color of the description"), + DefaultValue(typeof (Color), "Red")] + public Color DescriptionColor + { + get { return descriptionColor; } + set { descriptionColor = value; } + } + + /// + /// Return the color of the description of the task or a reasonable default + /// + [Browsable(false)] + public Color DescriptionColorOrDefault + { + get + { + if (DescriptionColor.IsEmpty || + (IsItemSelected && ListView.Focused && !ListView.UseTranslucentSelection)) + return GetForegroundColor(); + else + return DescriptionColor; + } + } + + /// + /// Gets or set the font that will be used to draw the description of the task + /// + /// If this is null, the ListView's font will be used + [Category("Appearance - ObjectListView"), + Description("The font that will be used to draw the description of the task"), DefaultValue(null)] + public Font DescriptionFont { get; set; } + + /// + /// Return a font that has been set for the title or a reasonable default + /// + [Browsable(false)] + public Font DescriptionFontOrDefault + { + get { return DescriptionFont ?? ListView.Font; } + } + + /// + /// Gets or set the font that will be used to draw the error message + /// + /// If this is null, the ListView's font will be used + [Category("Appearance - ObjectListView"), Description("The font that will be used to draw the error message"), + DefaultValue(null)] + public Font ErrorFont { get; set; } + + /// + /// Return a font that has been set for the error message or a reasonable default + /// + [Browsable(false)] + public Font ErrorFontOrDefault + { + get { return ErrorFont ?? ListView.Font; } + } + + /// + /// Gets or set the color of the error message + /// + /// This color is used when the error is not selected or when the listview + /// has a translucent selection mechanism. + [Category("Appearance - ObjectListView"), Description("The color of the error message"), + DefaultValue(typeof (Color), "Black")] + public Color ErrorColor + { + get { return errorColor; } + set { errorColor = value; } + } + + /// + /// Return the color of the title of the task or a reasonable default + /// + [Browsable(false)] + public Color ErrorColorOrDefault + { + get + { + if (ErrorColor.IsEmpty || (IsItemSelected && ListView.Focused && !ListView.UseTranslucentSelection)) + return GetForegroundColor(); + else + return ErrorColor; + } + } + + /// + /// Gets or sets the number of pixels that renderer will leave empty around the edge of the cell + /// + [Category("Appearance - ObjectListView"), + Description("The number of pixels that renderer will leave empty around the edge of the cell"), + DefaultValue(typeof (Size), "2,2")] + public Size CellPadding + { + get { return cellPadding; } + set { cellPadding = value; } + } + + /// + /// Gets or sets the number of pixels that will be left between the host and the description field + /// + [Category("Appearance - ObjectListView"), + Description("The number of pixels that will be left between the host and the description field"), + DefaultValue(4)] + public int ErrorHostSpace { get; set; } + + /// + /// Gets or sets the number of pixels that will be left between the description and the error field + /// + [Category("Appearance - ObjectListView"), + Description("The number of pixels that will be left between the description and the error field"), + DefaultValue(4)] + public int HostDescriptionSpace { get; set; } + + /// + /// Gets or sets the delegate of the aspect of the model object that contains the description + /// + public AspectGetterDelegate DescriptionAspectGetter { get; set; } + + /// + /// Gets or sets the delegate of the aspect of the model object that contains the error message + /// + public AspectGetterDelegate ErrorAspectGetter { get; set; } + + public override void Render(Graphics g, Rectangle r) + { + DrawBackground(g, r); + DrawError(g, r, Aspect as String, DescriptionAspectGetter(RowObject) as String, + ErrorAspectGetter(RowObject) as String); + } + + public virtual void DrawError(Graphics g, Rectangle r, String host, String description, String error) + { + Rectangle cellBounds = r; + cellBounds.Inflate(-CellPadding.Width, -CellPadding.Height); + Rectangle textBounds = cellBounds; + + // Color the background if the row is selected and we're not using a translucent selection + if (IsItemSelected && !ListView.UseTranslucentSelection) + { + using (SolidBrush b = new SolidBrush(GetTextBackgroundColor())) + { + g.FillRectangle(b, textBounds); + } + } + + // Draw the error field + if (!String.IsNullOrEmpty(error)) + { + using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) + { + fmt.Trimming = StringTrimming.EllipsisCharacter; + fmt.Alignment = StringAlignment.Near; + fmt.LineAlignment = StringAlignment.Near; + Font f = ErrorFontOrDefault; + using (SolidBrush b = new SolidBrush(ErrorColorOrDefault)) + { + g.DrawString(error, f, b, textBounds, fmt); + } + + // How tall was the error field? + SizeF size = g.MeasureString(error, f, textBounds.Width, fmt); + textBounds.Y += (int) size.Height; + textBounds.Y += ErrorHostSpace; + textBounds.Height -= (int) size.Height; + } + } + + // Draw the host field + if (!String.IsNullOrEmpty(host)) + { + using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) + { + fmt.Trimming = StringTrimming.EllipsisPath; + fmt.Alignment = StringAlignment.Near; + fmt.LineAlignment = StringAlignment.Near; + Font f = HostFontOrDefault; + using (SolidBrush b = new SolidBrush(HostColorOrDefault)) + { + g.DrawString(host, f, b, textBounds, fmt); + } + + // How tall was the host field? + SizeF size = g.MeasureString(host, f, textBounds.Width, fmt); + textBounds.Y += (int) size.Height; + textBounds.Y += HostDescriptionSpace; + textBounds.Height -= (int) size.Height; + } + } + + // Draw the description field + if (!String.IsNullOrEmpty(description)) + { + using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) + { + fmt.Trimming = StringTrimming.EllipsisCharacter; + fmt.Alignment = StringAlignment.Near; + fmt.LineAlignment = StringAlignment.Near; + Font f = DescriptionFontOrDefault; + using (SolidBrush b = new SolidBrush(DescriptionColorOrDefault)) + { + g.DrawString(description, f, b, textBounds, fmt); + } + + // How tall was the description field? + SizeF size = g.MeasureString(error, f, textBounds.Width, fmt); + textBounds.Y += (int) size.Height; + //textBounds.Y += HostDescriptionSpace; + textBounds.Height -= (int) size.Height; + } + } + } + + protected override void HandleHitTest(Graphics g, OlvListViewHitTestInfo hti, int x, int y) + { + if (Bounds.Contains(x, y)) + hti.HitTestLocation = HitTestLocation.Text; + } + } + + public abstract class AbstractBookmarkRenderer : BaseRenderer + { + private Size cellPadding = new Size(2, 2); + private Color hostnameColor = Color.Black; + private Color nicknameColor = Color.Black; + private Color notesColor = Color.Black; + private Color urlColor = Color.Black; + + /// + /// Gets or set the color of the description of the task + /// + /// This color is used when the task is not selected or when the listview + /// has a translucent selection mechanism. + public Color NicknameColor + { + get { return nicknameColor; } + set { nicknameColor = value; } + } + + /// + /// Return the color of the nickname or a reasonable default + /// + public Color NicknameColorOrDefault + { + get + { + if (NicknameColor.IsEmpty || (IsItemSelected && ListView.Focused && !ListView.UseTranslucentSelection)) + return GetForegroundColor(); + else + return NicknameColor; + } + } + + /// + /// Gets or set the font that will be used to draw the nickname of the bookmark + /// + /// If this is null, the ListView's font will be used + public Font NicknameFont { get; set; } + + /// + /// Return a font that has been set for the host or a reasonable default + /// + public Font NicknameFontOrDefault + { + get { return NicknameFont ?? ListView.Font; } + } + + /// + /// Gets or set the color of the hostname + /// + /// This color is used when the task is not selected or when the listview + /// has a translucent selection mechanism. + public Color HostnameColor + { + get { return hostnameColor; } + set { hostnameColor = value; } + } + + /// + /// Return the color of the hostname or a reasonable default + /// + public Color HostnameColorOrDefault + { + get + { + if (HostnameColor.IsEmpty || (IsItemSelected && ListView.Focused && !ListView.UseTranslucentSelection)) + { + return GetForegroundColor(); + } + return HostnameColor; + } + } + + /// + /// Gets or set the font that will be used to draw the hostname of the bookmark + /// + /// If this is null, the ListView's font will be used + public Font HostnameFont { get; set; } + + /// + /// Return a font that has been set for the hostname or a reasonable default + /// + public Font HostnameFontOrDefault + { + get { return HostnameFont ?? ListView.Font; } + } + + /// + /// Gets or set the color of the URL + /// + /// This color is used when the task is not selected or when the listview + /// has a translucent selection mechanism. + public Color UrlColor + { + get { return urlColor; } + set { urlColor = value; } + } + + /// + /// Return the color of the URL or a reasonable default + /// + public Color UrlColorOrDefault + { + get + { + if (UrlColor.IsEmpty || (IsItemSelected && ListView.Focused && !ListView.UseTranslucentSelection)) + return GetForegroundColor(); + else + return UrlColor; + } + } + + /// + /// Gets or set the font that will be used to draw the URL of the bookmark + /// + /// If this is null, the ListView's font will be used + public Font UrlFont { get; set; } + + /// + /// Return a font that has been set for the hostname or a reasonable default + /// + [Browsable(false)] + public Font UrlFontOrDefault + { + get { return UrlFont ?? ListView.Font; } + } + + /// + /// Gets or set the color of the notes + /// + /// This color is used when the task is not selected or when the listview + /// has a translucent selection mechanism. + public Color NotesColor + { + get { return notesColor; } + set { notesColor = value; } + } + + /// + /// Return the color of the notes or a reasonable default + /// + public Color NotesColorOrDefault + { + get + { + if (NotesColor.IsEmpty || (IsItemSelected && ListView.Focused && !ListView.UseTranslucentSelection)) + return GetForegroundColor(); + else + return NotesColor; + } + } + + /// + /// Gets or set the font that will be used to draw the notes of the bookmark + /// + /// If this is null, the ListView's font will be used + public Font NotesFont { get; set; } + + /// + /// Return a font that has been set for the hostname or a reasonable default + /// + public Font NotesFontOrDefault + { + get { return NotesFont ?? ListView.Font; } + } + + /// + /// Gets or sets the number of pixels that renderer will leave empty around the edge of the cell + /// + public Size CellPadding + { + get { return cellPadding; } + set { cellPadding = value; } + } + + /// + /// Gets or sets the number of pixels that will be left between the nickname and the server field + /// + public int NicknameHostnameSpace { get; set; } + + /// + /// Gets or sets the number of pixels that will be left between the Hostname and the URL field + /// + public int HostnameUrlSpace { get; set; } + + /// + /// Gets or sets the number of pixels that will be left between the URL and the notes field + /// + public int UrlNotesSpace { get; set; } + + /// + /// Gets or sets the delegate of the aspect of the model object that contains the hostname + /// + public AspectGetterDelegate HostnameAspectGetter { get; set; } + + /// + /// Gets or sets the delegate of the aspect of the model object that contains the URL + /// + public AspectGetterDelegate UrlAspectGetter { get; set; } + + /// + /// Gets or sets the delegate of the aspect of the model object that contains the notes + /// + public AspectGetterDelegate NotesAspectGetter { get; set; } + + public override void Render(Graphics g, Rectangle r) + { + DrawBackground(g, r); + DrawBookmark(g, r, Aspect as String, HostnameAspectGetter(RowObject) as String, + UrlAspectGetter(RowObject) as String, NotesAspectGetter(RowObject) as String); + } + + public abstract void DrawBookmark(Graphics g, Rectangle r, String nickname, String hostname, String url, + String notes); + + protected override void HandleHitTest(Graphics g, OlvListViewHitTestInfo hti, int x, int y) + { + if (Bounds.Contains(x, y)) + hti.HitTestLocation = HitTestLocation.Text; + } + } + + public class SmallBookmarkRenderer : AbstractBookmarkRenderer + { + public override void DrawBookmark(Graphics g, Rectangle r, String nickname, String hostname, String url, + String notes) + { + Rectangle cellBounds = r; + cellBounds.Inflate(-CellPadding.Width, -CellPadding.Height); + Rectangle textBounds = cellBounds; + + // Color the background if the row is selected and we're not using a translucent selection + if (IsItemSelected && !ListView.UseTranslucentSelection) + { + using (SolidBrush b = new SolidBrush(GetTextBackgroundColor())) + { + g.FillRectangle(b, textBounds); + } + } + + // Draw the nickname field + if (!String.IsNullOrEmpty(nickname)) + { + using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) + { + fmt.Trimming = StringTrimming.EllipsisCharacter; + fmt.Alignment = StringAlignment.Near; + fmt.LineAlignment = StringAlignment.Near; + Font f = NicknameFontOrDefault; + using (SolidBrush b = new SolidBrush(NicknameColorOrDefault)) + { + g.DrawString(nickname, f, b, textBounds, fmt); + } + + // How tall was the URL field? + SizeF size = g.MeasureString(nickname, f, textBounds.Width, fmt); + textBounds.Y += (int) size.Height; + textBounds.Y += NicknameHostnameSpace; + textBounds.Height -= (int) size.Height; + } + } + } + } + + public class MediumBookmarkRenderer : AbstractBookmarkRenderer + { + public override void DrawBookmark(Graphics g, Rectangle r, string nickname, string hostname, string url, + string notes) + { + Rectangle cellBounds = r; + cellBounds.Inflate(-CellPadding.Width, -CellPadding.Height); + Rectangle textBounds = cellBounds; + + // Color the background if the row is selected and we're not using a translucent selection + if (IsItemSelected && !ListView.UseTranslucentSelection) + { + using (SolidBrush b = new SolidBrush(GetTextBackgroundColor())) + { + g.FillRectangle(b, textBounds); + } + } + + // Draw the nickname field + if (!String.IsNullOrEmpty(nickname)) + { + using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) + { + fmt.Trimming = StringTrimming.EllipsisCharacter; + fmt.Alignment = StringAlignment.Near; + fmt.LineAlignment = StringAlignment.Near; + Font f = NicknameFontOrDefault; + using (SolidBrush b = new SolidBrush(NicknameColorOrDefault)) + { + g.DrawString(nickname, f, b, textBounds, fmt); + } + SizeF size = g.MeasureString(nickname, f, textBounds.Width, fmt); + textBounds.Y += (int)size.Height; + textBounds.Y += NicknameHostnameSpace; + textBounds.Height -= (int)size.Height; + } + } + + // Draw the hostname field + if (!String.IsNullOrEmpty(hostname)) + { + using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) + { + fmt.Trimming = StringTrimming.EllipsisCharacter; + fmt.Alignment = StringAlignment.Near; + fmt.LineAlignment = StringAlignment.Near; + Font f = HostnameFontOrDefault; + using (SolidBrush b = new SolidBrush(HostnameColorOrDefault)) + { + g.DrawString(hostname, f, b, textBounds, fmt); + } + SizeF size = g.MeasureString(hostname, f, textBounds.Width, fmt); + textBounds.Y += (int)size.Height; + textBounds.Y += HostnameUrlSpace; + textBounds.Height -= (int)size.Height; + } + } + + // Draw the URL field + if (!String.IsNullOrEmpty(url)) + { + using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) + { + fmt.Trimming = StringTrimming.EllipsisPath; + fmt.Alignment = StringAlignment.Near; + fmt.LineAlignment = StringAlignment.Near; + Font f = UrlFontOrDefault; + using (SolidBrush b = new SolidBrush(UrlColorOrDefault)) + { + g.DrawString(url, f, b, textBounds, fmt); + } + SizeF size = g.MeasureString(url, f, textBounds.Width, fmt); + textBounds.Y += (int)size.Height; + textBounds.Y += UrlNotesSpace; + textBounds.Height -= (int)size.Height; + } + } + } + } + + /// + /// This renderer draws a bookmark + /// + /// + /// This class works best with FullRowSelect = true. + /// It's not designed to work with cell editing -- it will work but will look odd. + /// + public class LargeBookmarkRenderer : AbstractBookmarkRenderer + { + public override void DrawBookmark(Graphics g, Rectangle r, String nickname, String hostname, String url, + String notes) + { + Rectangle cellBounds = r; + cellBounds.Inflate(-CellPadding.Width, -CellPadding.Height); + Rectangle textBounds = cellBounds; + + // Color the background if the row is selected and we're not using a translucent selection + if (IsItemSelected && !ListView.UseTranslucentSelection) + { + using (SolidBrush b = new SolidBrush(GetTextBackgroundColor())) + { + g.FillRectangle(b, textBounds); + } + } + + // Draw the nickname field + if (!String.IsNullOrEmpty(nickname)) + { + using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) + { + fmt.Trimming = StringTrimming.EllipsisCharacter; + fmt.Alignment = StringAlignment.Near; + fmt.LineAlignment = StringAlignment.Near; + Font f = NicknameFontOrDefault; + using (SolidBrush b = new SolidBrush(NicknameColorOrDefault)) + { + g.DrawString(nickname, f, b, textBounds, fmt); + } + + // How tall was the URL field? + SizeF size = g.MeasureString(nickname, f, textBounds.Width, fmt); + textBounds.Y += (int) size.Height; + textBounds.Y += NicknameHostnameSpace; + textBounds.Height -= (int) size.Height; + } + } + + // Draw the hostname field + if (!String.IsNullOrEmpty(hostname)) + { + using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) + { + fmt.Trimming = StringTrimming.EllipsisCharacter; + fmt.Alignment = StringAlignment.Near; + fmt.LineAlignment = StringAlignment.Near; + Font f = HostnameFontOrDefault; + using (SolidBrush b = new SolidBrush(HostnameColorOrDefault)) + { + g.DrawString(hostname, f, b, textBounds, fmt); + } + + // How tall was the URL field? + SizeF size = g.MeasureString(hostname, f, textBounds.Width, fmt); + textBounds.Y += (int) size.Height; + textBounds.Y += HostnameUrlSpace; + textBounds.Height -= (int) size.Height; + } + } + + // Draw the URL field + if (!String.IsNullOrEmpty(url)) + { + using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) + { + fmt.Trimming = StringTrimming.EllipsisPath; + fmt.Alignment = StringAlignment.Near; + fmt.LineAlignment = StringAlignment.Near; + Font f = UrlFontOrDefault; + using (SolidBrush b = new SolidBrush(UrlColorOrDefault)) + { + g.DrawString(url, f, b, textBounds, fmt); + } + + // How tall was the URL field? + SizeF size = g.MeasureString(url, f, textBounds.Width, fmt); + textBounds.Y += (int) size.Height; + textBounds.Y += UrlNotesSpace; + textBounds.Height -= (int) size.Height; + } + } + + // Draw the notes field + if (!String.IsNullOrEmpty(notes)) + { + using (StringFormat fmt = new StringFormat(StringFormatFlags.NoWrap)) + { + fmt.Trimming = StringTrimming.EllipsisCharacter; + fmt.Alignment = StringAlignment.Near; + fmt.LineAlignment = StringAlignment.Near; + Font f = NotesFontOrDefault; + using (SolidBrush b = new SolidBrush(NotesColorOrDefault)) + { + g.DrawString(notes, f, b, textBounds, fmt); + } + + // How tall was the notes field? + SizeF size = g.MeasureString(notes, f, textBounds.Width, fmt); + textBounds.Y += (int) size.Height; + //textBounds.Y += HostDescriptionSpace; + textBounds.Height -= (int) size.Height; + } + } + } + } + + /// + /// ToolStrip renderer that does not have this ugly white line at the bottom. + /// + public class ToolStripRenderer : ToolStripSystemRenderer + { + protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) + { + base.OnRenderToolStripBorder(e); + + Rectangle rect = e.AffectedBounds; + rect.Height = 2; + rect.Offset(0, e.AffectedBounds.Height - 2); + e.Graphics.FillRectangle(new SolidBrush(e.BackColor), rect); + return; + } + } + + /// + /// Renderer to make the browser tree Explorer like (default explorer theme) + /// + public class BrowserRenderer : TreeListView.TreeRenderer + { + // see http://stackoverflow.com/questions/3014816/visualstylerenderer-and-themes-winforms + private static readonly VisualStyleRenderer ClosedGlyphRenderer; + private static readonly VisualStyleRenderer OpenedGlyphRenderer; + + static BrowserRenderer() + { + if (Utils.IsVistaOrLater && VisualStyleRenderer.IsSupported) + { + ClosedGlyphRenderer = + new VisualStyleRenderer(VisualStyleElement.CreateElement("Explorer::TreeView", 2, 1)); + OpenedGlyphRenderer = + new VisualStyleRenderer(VisualStyleElement.CreateElement("Explorer::TreeView", 2, 2)); + } + } + + public BrowserRenderer() + { + IsShowLines = false; + } + + protected override void DrawExpansionGlyph(Graphics g, Rectangle r, bool isExpanded) + { + if (Utils.IsVistaOrLater && VisualStyleRenderer.IsSupported) + { + VisualStyleRenderer renderer = isExpanded ? OpenedGlyphRenderer : ClosedGlyphRenderer; + renderer.DrawBackground(g, r); + } + else + { + base.DrawExpansionGlyph(g, r, isExpanded); + } + } + } + + /// + /// Explorer gradient-style renderer for selected rows. + /// + public class ExplorerRowBorderDecoration : RowBorderDecoration + { + public ExplorerRowBorderDecoration() + { + BoundsPadding = new Size(0, -1); + CornerRounding = 5.0f; + BorderPen = new Pen(Color.FromArgb(128, Color.SteelBlue), 1); + } + + protected override Rectangle CalculateBounds() + { + Rectangle bounds = base.CalculateBounds(); + bounds.Y--; + bounds.Height++; + bounds.Width--; + // update brush + if (FillBrush != null) + { + FillBrush.Dispose(); + } + FillBrush = new LinearGradientBrush(bounds, Color.FromArgb(64, Color.LightBlue), + Color.FromArgb(64, Color.DodgerBlue), LinearGradientMode.Vertical); + return bounds; + } + } + + // + //see https://sourceforge.net/p/objectlistview/discussion/812922/thread/445489ce/ + // + public class FixedImageRenderer : BaseRenderer + { + protected override int DrawImage(Graphics g, Rectangle r, object imageSelector) + { + Image image = imageSelector as Image; + if (image != null) + { + if (image.Size.Height < r.Height) + r.Y = AlignVertically(r, new Rectangle(Point.Empty, image.Size)); + + g.DrawImageUnscaled(image, r.X, r.Y); + return image.Width; + } + return 0; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/SyncPromptController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/SyncPromptController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/SyncPromptController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/SyncPromptController.cs index da0028371a..b4626f91c3 100644 --- a/source/ch/cyberduck/ui/controller/SyncPromptController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/SyncPromptController.cs @@ -1,38 +1,38 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Collections.Generic; -using ch.cyberduck.core; -using ch.cyberduck.core.transfer; - -namespace Ch.Cyberduck.Ui.Controller -{ - public class SyncPromptController : TransferPromptController - { - public SyncPromptController(WindowController parent, Transfer transfer, Session session) - : base(parent, transfer, session) - { - TransferPromptModel = new SyncPromptModel(this, Session, Transfer); - } - - protected override string TransferName - { - get { return "Synchronize"; } - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Collections.Generic; +using ch.cyberduck.core; +using ch.cyberduck.core.transfer; + +namespace Ch.Cyberduck.Ui.Controller +{ + public class SyncPromptController : TransferPromptController + { + public SyncPromptController(WindowController parent, Transfer transfer, Session session) + : base(parent, transfer, session) + { + TransferPromptModel = new SyncPromptModel(this, Session, Transfer); + } + + protected override string TransferName + { + get { return "Synchronize"; } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/SyncPromptModel.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/SyncPromptModel.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/SyncPromptModel.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/SyncPromptModel.cs index 65f326df90..c3e24ba871 100644 --- a/source/ch/cyberduck/ui/controller/SyncPromptModel.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/SyncPromptModel.cs @@ -1,55 +1,55 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using ch.cyberduck.core; -using ch.cyberduck.core.synchronization; -using ch.cyberduck.core.transfer; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal class SyncPromptModel : TransferPromptModel - { - public SyncPromptModel(TransferPromptController controller, Session session, Transfer transfer) - : base(controller, session, transfer) - { - } - - public virtual object GetCreateImage(TransferItem item) - { - if (!GetStatus(item).isExists()) - { - return IconCache.Instance.IconForName("plus"); - } - return null; - } - - public override object GetSyncGetter(TransferItem item) - { - Comparison compare = ((SyncTransfer) Transfer).compare(item); - if (compare.equals(Comparison.remote)) - { - return IconCache.Instance.IconForName("transfer-download", 16); - } - if (compare.equals(Comparison.local)) - { - return IconCache.Instance.IconForName("transfer-upload", 16); - } - return null; - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using ch.cyberduck.core; +using ch.cyberduck.core.synchronization; +using ch.cyberduck.core.transfer; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal class SyncPromptModel : TransferPromptModel + { + public SyncPromptModel(TransferPromptController controller, Session session, Transfer transfer) + : base(controller, session, transfer) + { + } + + public virtual object GetCreateImage(TransferItem item) + { + if (!GetStatus(item).isExists()) + { + return IconCache.Instance.IconForName("plus"); + } + return null; + } + + public override object GetSyncGetter(TransferItem item) + { + Comparison compare = ((SyncTransfer) Transfer).compare(item); + if (compare.equals(Comparison.remote)) + { + return IconCache.Instance.IconForName("transfer-download", 16); + } + if (compare.equals(Comparison.local)) + { + return IconCache.Instance.IconForName("transfer-upload", 16); + } + return null; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/TransferController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/TransferController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/TransferController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/TransferController.cs index 6e3a94da14..aa94b73812 100644 --- a/source/ch/cyberduck/ui/controller/TransferController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/TransferController.cs @@ -1,702 +1,702 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; -using ch.cyberduck.core; -using ch.cyberduck.core.formatter; -using ch.cyberduck.core.io; -using ch.cyberduck.core.local; -using ch.cyberduck.core.preferences; -using ch.cyberduck.core.ssl; -using ch.cyberduck.core.threading; -using ch.cyberduck.core.transfer; -using Ch.Cyberduck.Ui.Controller.Threading; -using org.apache.log4j; -using StructureMap; - -namespace Ch.Cyberduck.Ui.Controller -{ - public class TransferController : WindowController, TranscriptListener, CollectionListener - { - private static readonly Logger Log = Logger.getLogger(typeof (TransferController).FullName); - private static readonly object SyncRoot = new Object(); - private static volatile TransferController _instance; - - private readonly IDictionary _transferMap = - new Dictionary(); - - private TransferController() - { - View = ObjectFactory.GetInstance(); - lock (TransferCollection.defaultCollection()) - { - foreach (Transfer transfer in TransferCollection.defaultCollection()) - { - collectionItemAdded(transfer); - } - } - Init(); - } - - public override bool Singleton - { - get { return true; } - } - - public static TransferController Instance - { - get - { - if (_instance == null) - { - lock (SyncRoot) - { - if (_instance == null) - _instance = new TransferController(); - } - } - return _instance; - } - } - - public void collectionLoaded() - { - } - - public void collectionItemAdded(object obj) - { - Invoke(delegate - { - Transfer transfer = obj as Transfer; - ProgressController progressController = new ProgressController(transfer); - _transferMap.Add(new KeyValuePair(transfer, progressController)); - IProgressView progressView = progressController.View; - View.AddTransfer(progressView); - View.SelectTransfer(progressView); - }); - } - - public void collectionItemRemoved(object obj) - { - Invoke(delegate - { - Transfer transfer = obj as Transfer; - if (null != transfer) - { - ProgressController progressController; - if (_transferMap.TryGetValue(transfer, out progressController)) - { - View.RemoveTransfer(progressController.View); - } - } - }); - } - - public void collectionItemChanged(object obj) - { - } - - public override void log(bool request, string transcript) - { - if (View.TranscriptVisible) - { - invoke(new LogAction(this, request, transcript)); - } - } - - public ProgressController GetController(Transfer transfer) - { - ProgressController progressController; - if (!_transferMap.TryGetValue(transfer, out progressController)) - { - progressController = new ProgressController(transfer); - _transferMap.Add(transfer, new ProgressController(transfer)); - } - return progressController; - } - - public static bool ApplicationShouldTerminate() - { - if (null != _instance) - { - //Saving state of transfer window - PreferencesFactory.get().setProperty("queue.window.open.default", _instance.Visible); - if (TransferCollection.defaultCollection().numberOfRunningTransfers() > 0) - { - DialogResult result = _instance.QuestionBox(LocaleFactory.localizedString("Transfer in progress"), - LocaleFactory.localizedString("There are files currently being transferred. Quit anyway?"), null, - String.Format("{0}", LocaleFactory.localizedString("Exit")), true //Cancel - ); - if (DialogResult.OK == result) - { - // Quit - for (int i = 0; i < _instance.getActions().size(); i++) - { - ((BackgroundAction) _instance.getActions().get(i)).cancel(); - } - return true; - } - // Cancel - return false; - } - } - return true; - } - - private void Init() - { - TransferCollection.defaultCollection().addListener(this); - - PopulateBandwithList(); - - View.PositionSizeRestoredEvent += delegate - { - View.TranscriptVisible = PreferencesFactory.get().getBoolean("queue.transcript.open"); - View.TranscriptHeight = PreferencesFactory.get().getInteger("queue.transcript.size.height"); - - View.ToggleTranscriptEvent += View_ToggleTranscriptEvent; - View.TranscriptHeightChangedEvent += View_TranscriptHeightChangedEvent; - }; - View.QueueSize = PreferencesFactory.get().getInteger("queue.maxtransfers"); - View.BandwidthEnabled = false; - - View.ResumeEvent += View_ResumeEvent; - View.ReloadEvent += View_ReloadEvent; - View.StopEvent += View_StopEvent; - View.RemoveEvent += View_RemoveEvent; - View.CleanEvent += View_CleanEvent; - View.OpenEvent += View_OpenEvent; - View.ShowEvent += View_ShowEvent; - View.TrashEvent += View_TrashEvent; - View.SelectionChangedEvent += View_SelectionChangedEvent; - View.BandwidthChangedEvent += View_BandwidthChangedEvent; - View.QueueSizeChangedEvent += View_QueueSizeChangedEvent; - - View.ValidateResumeEvent += View_ValidateResumeEvent; - View.ValidateReloadEvent += View_ValidateReloadEvent; - View.ValidateStopEvent += View_ValidateStopEvent; - View.ValidateRemoveEvent += View_ValidateRemoveEvent; - View.ValidateCleanEvent += View_ValidateCleanEvent; - View.ValidateOpenEvent += View_ValidateOpenEvent; - View.ValidateShowEvent += View_ValidateShowEvent; - } - - private void View_TrashEvent() - { - foreach (IProgressView progressView in View.SelectedTransfers) - { - Transfer transfer = GetTransferFromView(progressView); - if (!transfer.isRunning()) - { - for (int i = 0; i < transfer.getRoots().size(); i++) - { - TransferItem item = (TransferItem) transfer.getRoots().get(i); - try - { - LocalTrashFactory.get().trash(item.local); - } - catch (Exception exception) - { - Log.warn(String.Format("Failure trashing file {0} {1}", item.local, exception.Message)); - } - } - } - } - } - - private void View_TranscriptHeightChangedEvent() - { - PreferencesFactory.get().setProperty("queue.transcript.size.height", View.TranscriptHeight); - } - - private void View_ToggleTranscriptEvent() - { - View.TranscriptVisible = !View.TranscriptVisible; - PreferencesFactory.get().setProperty("queue.transcript.open", View.TranscriptVisible); - } - - private bool View_ValidateShowEvent() - { - return ValidateToolbarItem(delegate(Transfer transfer) - { - if (transfer.getLocal() != null) - { - for (int i = 0; i < transfer.getRoots().size(); i++) - { - TransferItem t = (TransferItem) transfer.getRoots().get(i); - if (t.local.exists()) - { - return true; - } - } - } - return false; - }); - } - - private bool View_ValidateOpenEvent() - { - return ValidateToolbarItem(delegate(Transfer transfer) - { - if (transfer.getLocal() != null) - { - if (!transfer.isComplete()) - { - return false; - } - if (!transfer.isRunning()) - { - for (int i = 0; i < transfer.getRoots().size(); i++) - { - TransferItem item = (TransferItem) transfer.getRoots().get(i); - if (item.local.exists()) - { - return true; - } - } - } - } - return false; - }); - } - - private bool View_ValidateCleanEvent() - { - return _transferMap.Count > 0; - } - - private void View_CleanEvent() - { - IList toRemove = new List(); - foreach (KeyValuePair pair in _transferMap) - { - Transfer t = pair.Key; - if (!t.isRunning() && t.isReset() && t.isComplete()) - { - TransferCollection.defaultCollection().remove(t); - toRemove.Add(t); - } - } - foreach (Transfer t in toRemove) - { - _transferMap.Remove(t); - } - TransferCollection.defaultCollection().save(); - } - - private bool View_ValidateRemoveEvent() - { - return View.SelectedTransfers.Count > 0; - } - - private bool View_ValidateStopEvent() - { - return ValidateToolbarItem(transfer => transfer.isRunning()); - } - - private bool View_ValidateReloadEvent() - { - return ValidateToolbarItem(transfer => (transfer.getType().isReloadable() && !transfer.isRunning())); - } - - /// - /// Validates the selected items in the transfer window against the toolbar validator - /// - /// - /// True if one or more of the selected items passes the validation test - private bool ValidateToolbarItem(TransferToolbarValidator validate) - { - foreach (IProgressView selectedTransfer in View.SelectedTransfers) - { - Transfer transfer = GetTransferFromView(selectedTransfer); - if (validate(transfer)) - { - return true; - } - } - return false; - } - - private bool View_ValidateResumeEvent() - { - return ValidateToolbarItem(delegate(Transfer transfer) - { - if (transfer.isRunning()) - { - return false; - } - return !transfer.isComplete(); - }); - } - - private void PopulateBandwithList() - { - IList> list = new List>(); - list.Add(new KeyValuePair(BandwidthThrottle.UNLIMITED, - LocaleFactory.localizedString("Unlimited Bandwidth", "Preferences"))); - foreach (String option in - PreferencesFactory.get() - .getProperty("queue.bandwidth.options") - .Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries)) - { - list.Add(new KeyValuePair(Convert.ToInt32(option.Trim()), - (SizeFormatterFactory.get(true).format(Convert.ToInt32(option.Trim())) + "/s"))); - } - View.PopulateBandwidthList(list); - } - - private void View_QueueSizeChangedEvent() - { - PreferencesFactory.get().setProperty("queue.maxtransfers", View.QueueSize); - TransferQueueFactory.get().resize(PreferencesFactory.get().getInteger("queue.maxtransfers")); - } - - private void View_BandwidthChangedEvent() - { - foreach (IProgressView progressView in View.SelectedTransfers) - { - Transfer transfer = GetTransferFromView(progressView); - transfer.setBandwidth(View.Bandwidth); - if (transfer.isRunning()) - { - BackgroundActionRegistry registry = getActions(); - // Find matching background task - for (int i = 0; i < registry.size(); i++) - { - if (registry.get(i) is TransferBackgroundAction) - { - TransferBackgroundAction t = (TransferBackgroundAction) registry.get(i); - if (t.getTransfer().Equals(transfer)) - { - TransferSpeedometer meter = t.getMeter(); - meter.reset(); - } - } - } - } - } - UpdateBandwidthPopup(); - } - - private void View_SelectionChangedEvent() - { - Log.debug("SelectionChanged"); - UpdateLabels(); - UpdateIcon(); - UpdateBandwidthPopup(); - } - - private void UpdateBandwidthPopup() - { - Log.debug("UpdateBandwidthPopup"); - IList selectedTransfers = View.SelectedTransfers; - View.BandwidthEnabled = selectedTransfers.Count > 0; - - foreach (IProgressView progressView in View.SelectedTransfers) - { - Transfer transfer = GetTransferFromView(progressView); - if (transfer.getBandwidth().getRate() != BandwidthThrottle.UNLIMITED) - { - View.Bandwidth = transfer.getBandwidth().getRate(); - } - else - { - View.Bandwidth = BandwidthThrottle.UNLIMITED; - } - return; - } - } - - private void UpdateIcon() - { - IList selectedTransfers = View.SelectedTransfers; - if (1 == selectedTransfers.Count) - { - Transfer transfer = GetTransferFromView(selectedTransfers[0]); - if (transfer.getRoots().size() == 1) - { - if (transfer.getLocal() != null) - { - View.FileIcon = IconCache.Instance.IconForFilename(transfer.getRoot().local.getAbsolute(), - IconCache.IconSize.Large); - } - else - { - View.FileIcon = IconCache.Instance.IconForPath(transfer.getRoot().remote, - IconCache.IconSize.Large); - } - } - else - { - View.FileIcon = ResourcesBundle.multiple.ToBitmap(); - } - } - else - { - View.FileIcon = null; - } - } - - private void UpdateLabels() - { - IList selectedTransfers = View.SelectedTransfers; - if (1 == selectedTransfers.Count) - { - Transfer transfer = GetTransferFromView(selectedTransfers[0]); - View.Url = transfer.getRemote().getUrl(); - //Workaround to prevent NullReferenceException - if (transfer.getLocal() != null) - { - View.Local = transfer.getLocal(); - } - else - { - View.Local = string.Empty; - } - } - else - { - View.Url = string.Empty; - View.Local = string.Empty; - } - } - - private void View_ShowEvent() - { - foreach (IProgressView progressView in View.SelectedTransfers) - { - Transfer transfer = GetTransferFromView(progressView); - for (int i = 0; i < transfer.getRoots().size(); i++) - { - TransferItem item = (TransferItem) transfer.getRoots().get(i); - RevealServiceFactory.get().reveal(item.local); - } - } - } - - private void View_OpenEvent() - { - IList selected = View.SelectedTransfers; - if (selected.Count == 1) - { - Transfer transfer = GetTransferFromView(selected[0]); - - for (int i = 0; i < transfer.getRoots().size(); i++) - { - TransferItem item = (TransferItem) transfer.getRoots().get(i); - Local l = item.local; - if (ApplicationLauncherFactory.get().open(l)) - { - break; - } - } - } - } - - private void View_RemoveEvent() - { - foreach (IProgressView progressView in View.SelectedTransfers) - { - Transfer transfer = GetTransferFromView(progressView); - if (!transfer.isRunning()) - { - TransferCollection.defaultCollection().remove(transfer); - } - } - TransferCollection.defaultCollection().save(); - } - - private void View_StopEvent() - { - foreach (IProgressView progressView in View.SelectedTransfers) - { - Transfer transfer = GetTransferFromView(progressView); - BackgroundActionRegistry registry = getActions(); - if (transfer.isRunning()) - { - // Find matching background task - for (int i = 0; i < registry.size(); i++) - { - if (registry.get(i) is TransferBackgroundAction) - { - TransferBackgroundAction t = (TransferBackgroundAction) registry.get(i); - if (t.getTransfer().Equals(transfer)) - { - t.cancel(); - } - } - } - } - } - } - - private void View_ReloadEvent() - { - foreach (IProgressView progressView in View.SelectedTransfers) - { - Transfer transfer = GetTransferFromView(progressView); - if (!transfer.isRunning()) - { - TransferOptions options = new TransferOptions(); - options.resumeRequested = false; - options.reloadRequested = true; - StartTransfer(transfer, options); - } - } - } - - private Transfer GetTransferFromView(IProgressView view) - { - foreach (KeyValuePair pair in _transferMap) - { - if (pair.Value.View == view) return pair.Key; - } - return null; - } - - private void View_ResumeEvent() - { - foreach (IProgressView progressView in View.SelectedTransfers) - { - Transfer transfer = GetTransferFromView(progressView); - if (!transfer.isRunning()) - { - TransferOptions options = new TransferOptions(); - options.resumeRequested = true; - options.reloadRequested = false; - StartTransfer(transfer, options); - } - } - } - - /// - /// - /// - /// - public void StartTransfer(Transfer transfer) - { - StartTransfer(transfer, new TransferOptions()); - } - - public void StartTransfer(Transfer transfer, TransferOptions options) - { - StartTransfer(transfer, options, new NoopTransferCallback()); - } - - public void StartTransfer(Transfer transfer, TransferOptions options, TransferCallback callback) - { - if (!TransferCollection.defaultCollection().contains(transfer)) - { - TransferCollection.defaultCollection().add(transfer); - } - ProgressController progressController; - _transferMap.TryGetValue(transfer, out progressController); - background(new TransferBackgroundAction(this, transfer, options, callback)); - } - - public void TaskbarOverlayIcon(Icon icon, string description) - { - Invoke(delegate { View.TaskbarOverlayIcon(icon, description); }); - } - - private class LogAction : WindowMainAction - { - private readonly string _msg; - private readonly bool _request; - - public LogAction(TransferController c, bool request, string msg) : base(c) - { - _request = request; - _msg = msg; - } - - public override void run() - { - ((TransferController) Controller).View.AddTranscriptEntry(_request, _msg); - } - } - - private class NoopTransferCallback : TransferCallback - { - public void complete(Transfer t) - { - ; - } - } - - private class TransferBackgroundAction : TransferCollectionBackgroundAction - { - private readonly TransferCallback _callback; - private readonly TransferController _controller; - private readonly Transfer _transfer; - - public TransferBackgroundAction(TransferController controller, Transfer transfer, TransferOptions options, - TransferCallback callback) - : base( - controller, - SessionFactory.create(transfer.getHost(), - new KeychainX509TrustManager(new DefaultTrustManagerHostnameCallback(transfer.getHost())), - new KeychainX509KeyManager()), controller.GetController(transfer), - controller.GetController(transfer), controller, transfer, options) - { - _transfer = transfer; - _callback = callback; - _controller = controller; - } - - public override void init() - { - base.init(); - if (PreferencesFactory.get().getBoolean("queue.window.open.transfer.start")) - { - _controller.View.Show(); - _controller.View.BringToFront(); - } - } - - public override void finish() - { - base.finish(); - if (_transfer.isComplete()) - { - _callback.complete(_transfer); - } - } - - public override void cleanup() - { - base.cleanup(); - if (_transfer.isComplete() && _transfer.isReset()) - { - if (PreferencesFactory.get().getBoolean("queue.window.open.transfer.stop")) - { - if (!(TransferCollection.defaultCollection().numberOfRunningTransfers() > 0)) - { - _controller.View.Close(); - } - } - } - } - } - - private delegate bool TransferToolbarValidator(Transfer transfer); - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using ch.cyberduck.core; +using ch.cyberduck.core.formatter; +using ch.cyberduck.core.io; +using ch.cyberduck.core.local; +using ch.cyberduck.core.preferences; +using ch.cyberduck.core.ssl; +using ch.cyberduck.core.threading; +using ch.cyberduck.core.transfer; +using Ch.Cyberduck.Ui.Controller.Threading; +using org.apache.log4j; +using StructureMap; + +namespace Ch.Cyberduck.Ui.Controller +{ + public class TransferController : WindowController, TranscriptListener, CollectionListener + { + private static readonly Logger Log = Logger.getLogger(typeof (TransferController).FullName); + private static readonly object SyncRoot = new Object(); + private static volatile TransferController _instance; + + private readonly IDictionary _transferMap = + new Dictionary(); + + private TransferController() + { + View = ObjectFactory.GetInstance(); + lock (TransferCollection.defaultCollection()) + { + foreach (Transfer transfer in TransferCollection.defaultCollection()) + { + collectionItemAdded(transfer); + } + } + Init(); + } + + public override bool Singleton + { + get { return true; } + } + + public static TransferController Instance + { + get + { + if (_instance == null) + { + lock (SyncRoot) + { + if (_instance == null) + _instance = new TransferController(); + } + } + return _instance; + } + } + + public void collectionLoaded() + { + } + + public void collectionItemAdded(object obj) + { + Invoke(delegate + { + Transfer transfer = obj as Transfer; + ProgressController progressController = new ProgressController(transfer); + _transferMap.Add(new KeyValuePair(transfer, progressController)); + IProgressView progressView = progressController.View; + View.AddTransfer(progressView); + View.SelectTransfer(progressView); + }); + } + + public void collectionItemRemoved(object obj) + { + Invoke(delegate + { + Transfer transfer = obj as Transfer; + if (null != transfer) + { + ProgressController progressController; + if (_transferMap.TryGetValue(transfer, out progressController)) + { + View.RemoveTransfer(progressController.View); + } + } + }); + } + + public void collectionItemChanged(object obj) + { + } + + public override void log(bool request, string transcript) + { + if (View.TranscriptVisible) + { + invoke(new LogAction(this, request, transcript)); + } + } + + public ProgressController GetController(Transfer transfer) + { + ProgressController progressController; + if (!_transferMap.TryGetValue(transfer, out progressController)) + { + progressController = new ProgressController(transfer); + _transferMap.Add(transfer, new ProgressController(transfer)); + } + return progressController; + } + + public static bool ApplicationShouldTerminate() + { + if (null != _instance) + { + //Saving state of transfer window + PreferencesFactory.get().setProperty("queue.window.open.default", _instance.Visible); + if (TransferCollection.defaultCollection().numberOfRunningTransfers() > 0) + { + DialogResult result = _instance.QuestionBox(LocaleFactory.localizedString("Transfer in progress"), + LocaleFactory.localizedString("There are files currently being transferred. Quit anyway?"), null, + String.Format("{0}", LocaleFactory.localizedString("Exit")), true //Cancel + ); + if (DialogResult.OK == result) + { + // Quit + for (int i = 0; i < _instance.getActions().size(); i++) + { + ((BackgroundAction) _instance.getActions().get(i)).cancel(); + } + return true; + } + // Cancel + return false; + } + } + return true; + } + + private void Init() + { + TransferCollection.defaultCollection().addListener(this); + + PopulateBandwithList(); + + View.PositionSizeRestoredEvent += delegate + { + View.TranscriptVisible = PreferencesFactory.get().getBoolean("queue.transcript.open"); + View.TranscriptHeight = PreferencesFactory.get().getInteger("queue.transcript.size.height"); + + View.ToggleTranscriptEvent += View_ToggleTranscriptEvent; + View.TranscriptHeightChangedEvent += View_TranscriptHeightChangedEvent; + }; + View.QueueSize = PreferencesFactory.get().getInteger("queue.maxtransfers"); + View.BandwidthEnabled = false; + + View.ResumeEvent += View_ResumeEvent; + View.ReloadEvent += View_ReloadEvent; + View.StopEvent += View_StopEvent; + View.RemoveEvent += View_RemoveEvent; + View.CleanEvent += View_CleanEvent; + View.OpenEvent += View_OpenEvent; + View.ShowEvent += View_ShowEvent; + View.TrashEvent += View_TrashEvent; + View.SelectionChangedEvent += View_SelectionChangedEvent; + View.BandwidthChangedEvent += View_BandwidthChangedEvent; + View.QueueSizeChangedEvent += View_QueueSizeChangedEvent; + + View.ValidateResumeEvent += View_ValidateResumeEvent; + View.ValidateReloadEvent += View_ValidateReloadEvent; + View.ValidateStopEvent += View_ValidateStopEvent; + View.ValidateRemoveEvent += View_ValidateRemoveEvent; + View.ValidateCleanEvent += View_ValidateCleanEvent; + View.ValidateOpenEvent += View_ValidateOpenEvent; + View.ValidateShowEvent += View_ValidateShowEvent; + } + + private void View_TrashEvent() + { + foreach (IProgressView progressView in View.SelectedTransfers) + { + Transfer transfer = GetTransferFromView(progressView); + if (!transfer.isRunning()) + { + for (int i = 0; i < transfer.getRoots().size(); i++) + { + TransferItem item = (TransferItem) transfer.getRoots().get(i); + try + { + LocalTrashFactory.get().trash(item.local); + } + catch (Exception exception) + { + Log.warn(String.Format("Failure trashing file {0} {1}", item.local, exception.Message)); + } + } + } + } + } + + private void View_TranscriptHeightChangedEvent() + { + PreferencesFactory.get().setProperty("queue.transcript.size.height", View.TranscriptHeight); + } + + private void View_ToggleTranscriptEvent() + { + View.TranscriptVisible = !View.TranscriptVisible; + PreferencesFactory.get().setProperty("queue.transcript.open", View.TranscriptVisible); + } + + private bool View_ValidateShowEvent() + { + return ValidateToolbarItem(delegate(Transfer transfer) + { + if (transfer.getLocal() != null) + { + for (int i = 0; i < transfer.getRoots().size(); i++) + { + TransferItem t = (TransferItem) transfer.getRoots().get(i); + if (t.local.exists()) + { + return true; + } + } + } + return false; + }); + } + + private bool View_ValidateOpenEvent() + { + return ValidateToolbarItem(delegate(Transfer transfer) + { + if (transfer.getLocal() != null) + { + if (!transfer.isComplete()) + { + return false; + } + if (!transfer.isRunning()) + { + for (int i = 0; i < transfer.getRoots().size(); i++) + { + TransferItem item = (TransferItem) transfer.getRoots().get(i); + if (item.local.exists()) + { + return true; + } + } + } + } + return false; + }); + } + + private bool View_ValidateCleanEvent() + { + return _transferMap.Count > 0; + } + + private void View_CleanEvent() + { + IList toRemove = new List(); + foreach (KeyValuePair pair in _transferMap) + { + Transfer t = pair.Key; + if (!t.isRunning() && t.isReset() && t.isComplete()) + { + TransferCollection.defaultCollection().remove(t); + toRemove.Add(t); + } + } + foreach (Transfer t in toRemove) + { + _transferMap.Remove(t); + } + TransferCollection.defaultCollection().save(); + } + + private bool View_ValidateRemoveEvent() + { + return View.SelectedTransfers.Count > 0; + } + + private bool View_ValidateStopEvent() + { + return ValidateToolbarItem(transfer => transfer.isRunning()); + } + + private bool View_ValidateReloadEvent() + { + return ValidateToolbarItem(transfer => (transfer.getType().isReloadable() && !transfer.isRunning())); + } + + /// + /// Validates the selected items in the transfer window against the toolbar validator + /// + /// + /// True if one or more of the selected items passes the validation test + private bool ValidateToolbarItem(TransferToolbarValidator validate) + { + foreach (IProgressView selectedTransfer in View.SelectedTransfers) + { + Transfer transfer = GetTransferFromView(selectedTransfer); + if (validate(transfer)) + { + return true; + } + } + return false; + } + + private bool View_ValidateResumeEvent() + { + return ValidateToolbarItem(delegate(Transfer transfer) + { + if (transfer.isRunning()) + { + return false; + } + return !transfer.isComplete(); + }); + } + + private void PopulateBandwithList() + { + IList> list = new List>(); + list.Add(new KeyValuePair(BandwidthThrottle.UNLIMITED, + LocaleFactory.localizedString("Unlimited Bandwidth", "Preferences"))); + foreach (String option in + PreferencesFactory.get() + .getProperty("queue.bandwidth.options") + .Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries)) + { + list.Add(new KeyValuePair(Convert.ToInt32(option.Trim()), + (SizeFormatterFactory.get(true).format(Convert.ToInt32(option.Trim())) + "/s"))); + } + View.PopulateBandwidthList(list); + } + + private void View_QueueSizeChangedEvent() + { + PreferencesFactory.get().setProperty("queue.maxtransfers", View.QueueSize); + TransferQueueFactory.get().resize(PreferencesFactory.get().getInteger("queue.maxtransfers")); + } + + private void View_BandwidthChangedEvent() + { + foreach (IProgressView progressView in View.SelectedTransfers) + { + Transfer transfer = GetTransferFromView(progressView); + transfer.setBandwidth(View.Bandwidth); + if (transfer.isRunning()) + { + BackgroundActionRegistry registry = getActions(); + // Find matching background task + for (int i = 0; i < registry.size(); i++) + { + if (registry.get(i) is TransferBackgroundAction) + { + TransferBackgroundAction t = (TransferBackgroundAction) registry.get(i); + if (t.getTransfer().Equals(transfer)) + { + TransferSpeedometer meter = t.getMeter(); + meter.reset(); + } + } + } + } + } + UpdateBandwidthPopup(); + } + + private void View_SelectionChangedEvent() + { + Log.debug("SelectionChanged"); + UpdateLabels(); + UpdateIcon(); + UpdateBandwidthPopup(); + } + + private void UpdateBandwidthPopup() + { + Log.debug("UpdateBandwidthPopup"); + IList selectedTransfers = View.SelectedTransfers; + View.BandwidthEnabled = selectedTransfers.Count > 0; + + foreach (IProgressView progressView in View.SelectedTransfers) + { + Transfer transfer = GetTransferFromView(progressView); + if (transfer.getBandwidth().getRate() != BandwidthThrottle.UNLIMITED) + { + View.Bandwidth = transfer.getBandwidth().getRate(); + } + else + { + View.Bandwidth = BandwidthThrottle.UNLIMITED; + } + return; + } + } + + private void UpdateIcon() + { + IList selectedTransfers = View.SelectedTransfers; + if (1 == selectedTransfers.Count) + { + Transfer transfer = GetTransferFromView(selectedTransfers[0]); + if (transfer.getRoots().size() == 1) + { + if (transfer.getLocal() != null) + { + View.FileIcon = IconCache.Instance.IconForFilename(transfer.getRoot().local.getAbsolute(), + IconCache.IconSize.Large); + } + else + { + View.FileIcon = IconCache.Instance.IconForPath(transfer.getRoot().remote, + IconCache.IconSize.Large); + } + } + else + { + View.FileIcon = ResourcesBundle.multiple.ToBitmap(); + } + } + else + { + View.FileIcon = null; + } + } + + private void UpdateLabels() + { + IList selectedTransfers = View.SelectedTransfers; + if (1 == selectedTransfers.Count) + { + Transfer transfer = GetTransferFromView(selectedTransfers[0]); + View.Url = transfer.getRemote().getUrl(); + //Workaround to prevent NullReferenceException + if (transfer.getLocal() != null) + { + View.Local = transfer.getLocal(); + } + else + { + View.Local = string.Empty; + } + } + else + { + View.Url = string.Empty; + View.Local = string.Empty; + } + } + + private void View_ShowEvent() + { + foreach (IProgressView progressView in View.SelectedTransfers) + { + Transfer transfer = GetTransferFromView(progressView); + for (int i = 0; i < transfer.getRoots().size(); i++) + { + TransferItem item = (TransferItem) transfer.getRoots().get(i); + RevealServiceFactory.get().reveal(item.local); + } + } + } + + private void View_OpenEvent() + { + IList selected = View.SelectedTransfers; + if (selected.Count == 1) + { + Transfer transfer = GetTransferFromView(selected[0]); + + for (int i = 0; i < transfer.getRoots().size(); i++) + { + TransferItem item = (TransferItem) transfer.getRoots().get(i); + Local l = item.local; + if (ApplicationLauncherFactory.get().open(l)) + { + break; + } + } + } + } + + private void View_RemoveEvent() + { + foreach (IProgressView progressView in View.SelectedTransfers) + { + Transfer transfer = GetTransferFromView(progressView); + if (!transfer.isRunning()) + { + TransferCollection.defaultCollection().remove(transfer); + } + } + TransferCollection.defaultCollection().save(); + } + + private void View_StopEvent() + { + foreach (IProgressView progressView in View.SelectedTransfers) + { + Transfer transfer = GetTransferFromView(progressView); + BackgroundActionRegistry registry = getActions(); + if (transfer.isRunning()) + { + // Find matching background task + for (int i = 0; i < registry.size(); i++) + { + if (registry.get(i) is TransferBackgroundAction) + { + TransferBackgroundAction t = (TransferBackgroundAction) registry.get(i); + if (t.getTransfer().Equals(transfer)) + { + t.cancel(); + } + } + } + } + } + } + + private void View_ReloadEvent() + { + foreach (IProgressView progressView in View.SelectedTransfers) + { + Transfer transfer = GetTransferFromView(progressView); + if (!transfer.isRunning()) + { + TransferOptions options = new TransferOptions(); + options.resumeRequested = false; + options.reloadRequested = true; + StartTransfer(transfer, options); + } + } + } + + private Transfer GetTransferFromView(IProgressView view) + { + foreach (KeyValuePair pair in _transferMap) + { + if (pair.Value.View == view) return pair.Key; + } + return null; + } + + private void View_ResumeEvent() + { + foreach (IProgressView progressView in View.SelectedTransfers) + { + Transfer transfer = GetTransferFromView(progressView); + if (!transfer.isRunning()) + { + TransferOptions options = new TransferOptions(); + options.resumeRequested = true; + options.reloadRequested = false; + StartTransfer(transfer, options); + } + } + } + + /// + /// + /// + /// + public void StartTransfer(Transfer transfer) + { + StartTransfer(transfer, new TransferOptions()); + } + + public void StartTransfer(Transfer transfer, TransferOptions options) + { + StartTransfer(transfer, options, new NoopTransferCallback()); + } + + public void StartTransfer(Transfer transfer, TransferOptions options, TransferCallback callback) + { + if (!TransferCollection.defaultCollection().contains(transfer)) + { + TransferCollection.defaultCollection().add(transfer); + } + ProgressController progressController; + _transferMap.TryGetValue(transfer, out progressController); + background(new TransferBackgroundAction(this, transfer, options, callback)); + } + + public void TaskbarOverlayIcon(Icon icon, string description) + { + Invoke(delegate { View.TaskbarOverlayIcon(icon, description); }); + } + + private class LogAction : WindowMainAction + { + private readonly string _msg; + private readonly bool _request; + + public LogAction(TransferController c, bool request, string msg) : base(c) + { + _request = request; + _msg = msg; + } + + public override void run() + { + ((TransferController) Controller).View.AddTranscriptEntry(_request, _msg); + } + } + + private class NoopTransferCallback : TransferCallback + { + public void complete(Transfer t) + { + ; + } + } + + private class TransferBackgroundAction : TransferCollectionBackgroundAction + { + private readonly TransferCallback _callback; + private readonly TransferController _controller; + private readonly Transfer _transfer; + + public TransferBackgroundAction(TransferController controller, Transfer transfer, TransferOptions options, + TransferCallback callback) + : base( + controller, + SessionFactory.create(transfer.getHost(), + new KeychainX509TrustManager(new DefaultTrustManagerHostnameCallback(transfer.getHost())), + new KeychainX509KeyManager()), controller.GetController(transfer), + controller.GetController(transfer), controller, transfer, options) + { + _transfer = transfer; + _callback = callback; + _controller = controller; + } + + public override void init() + { + base.init(); + if (PreferencesFactory.get().getBoolean("queue.window.open.transfer.start")) + { + _controller.View.Show(); + _controller.View.BringToFront(); + } + } + + public override void finish() + { + base.finish(); + if (_transfer.isComplete()) + { + _callback.complete(_transfer); + } + } + + public override void cleanup() + { + base.cleanup(); + if (_transfer.isComplete() && _transfer.isReset()) + { + if (PreferencesFactory.get().getBoolean("queue.window.open.transfer.stop")) + { + if (!(TransferCollection.defaultCollection().numberOfRunningTransfers() > 0)) + { + _controller.View.Close(); + } + } + } + } + } + + private delegate bool TransferToolbarValidator(Transfer transfer); + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/TransferPromptController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/TransferPromptController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/TransferPromptController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/TransferPromptController.cs index 1b713b6931..8ef2168b82 100644 --- a/source/ch/cyberduck/ui/controller/TransferPromptController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/TransferPromptController.cs @@ -1,277 +1,277 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Winforms; -using StructureMap; -using ch.cyberduck.core; -using ch.cyberduck.core.preferences; -using ch.cyberduck.core.formatter; -using ch.cyberduck.core.shared; -using ch.cyberduck.core.threading; -using ch.cyberduck.core.transfer; -using org.apache.log4j; -using Ch.Cyberduck.Core; - -namespace Ch.Cyberduck.Ui.Controller -{ - public abstract class TransferPromptController : WindowController, TransferPrompt, - ProgressListener, TranscriptListener - { - private static readonly Logger Log = Logger.getLogger(typeof (TransferPromptController)); - private static readonly string UnknownString = LocaleFactory.localizedString("Unknown"); - protected readonly Session Session; - - protected readonly Transfer Transfer; - private readonly WindowController _parent; - - protected internal TransferAction Action = - TransferAction.forName(PreferencesFactory.get().getProperty("queue.prompt.action.default")); - - protected TransferPromptModel TransferPromptModel; - - protected TransferPromptController(WindowController parent, Transfer transfer, Session session) - { - View = ObjectFactory.GetInstance(); - _parent = parent; - Transfer = transfer; - Session = session; - View.Title = LocaleFactory.localizedString(TransferName); - - PopulateActions(); - } - - protected abstract string TransferName { get; } - - public override void log(bool request, string message) - { - // - } - - public override void message(string msg) - { - Invoke(delegate { View.StatusLabel = msg; }); - } - - public virtual TransferAction prompt(TransferItem file) - { - if (Log.isDebugEnabled()) - { - Log.debug(String.Format("Prompt for transfer action of {0}", Transfer)); - } - for (int i = 0; i < Transfer.getRoots().size(); i++) - { - TransferItem next = (TransferItem) Transfer.getRoots().get(i); - TransferPromptModel.Add(next); - } - - AsyncDelegate wireAction = delegate - { - View.ToggleDetailsEvent += View_ToggleDetailsEvent; - View.DetailsVisible = PreferencesFactory.get().getBoolean("transfer.toggle.details"); - - View.ChangedActionEvent += View_ChangedActionEvent; - View.ChangedSelectionEvent += View_ChangedSelectionEvent; - - View.ModelCanExpandDelegate = TransferPromptModel.CanExpand; - View.ModelChildrenGetterDelegate = TransferPromptModel.ChildrenGetter; - View.ModelCheckStateGetter = TransferPromptModel.GetCheckState; - View.ModelCheckStateSetter = TransferPromptModel.SetCheckState; - View.ModelSizeGetter = TransferPromptModel.GetSize; - View.ModelSizeAsStringGetter = TransferPromptModel.GetSizeAsString; - View.ModelFilenameGetter = TransferPromptModel.GetName; - View.ModelIconGetter = TransferPromptModel.GetIcon; - View.ModelWarningGetter = TransferPromptModel.GetWarningImage; - View.ModelCreateGetter = TransferPromptModel.GetCreateImage; - View.ModelSyncGetter = TransferPromptModel.GetSyncGetter; - View.ModelActiveGetter = TransferPromptModel.IsActive; - - View.ItemsChanged += UpdateStatusLabel; - - View.ViewShownEvent += delegate - { - View.SetModel(TransferPromptModel.ChildrenGetter(null)); - //select first one if there is any - IEnumerator en = TransferPromptModel.ChildrenGetter(null).GetEnumerator(); - if (en.MoveNext()) - { - View.SelectedItem = en.Current; - } - }; - DialogResult result = View.ShowDialog(_parent.View); - - if (result == DialogResult.Cancel) - { - Action = TransferAction.cancel; - } - }; - _parent.Invoke(wireAction, true); - return Action; - } - - public bool isSelected(TransferItem i) - { - return TransferPromptModel.IsSelected(i); - } - - public override void start(BackgroundAction action) - { - Invoke(delegate { View.StartActivityAnimation(); }); - } - - public override void stop(BackgroundAction action) - { - Invoke(delegate { View.StopActivityAnimation(); }); - } - - public void UpdateStatusLabel() - { - View.StatusLabel = String.Format(LocaleFactory.localizedString("{0} Files"), View.NumberOfFiles); - } - - private void View_ToggleDetailsEvent() - { - View.DetailsVisible = !View.DetailsVisible; - PreferencesFactory.get().setProperty("transfer.toggle.details", View.DetailsVisible); - } - - private void View_ChangedSelectionEvent() - { - if (View.SelectedItem != null) - { - TransferItem selected = View.SelectedItem; - if (null != selected) - { - if (null != selected.local) - { - View.LocalFileUrl = selected.local.getAbsolute(); - if (selected.local.attributes().getSize() == -1) - { - View.LocalFileSize = UnknownString; - } - else - { - View.LocalFileSize = SizeFormatterFactory.get().format(selected.local.attributes().getSize()); - } - if (selected.local.attributes().getModificationDate() == -1) - { - View.LocalFileModificationDate = UnknownString; - } - else - { - View.LocalFileModificationDate = - UserDateFormatterFactory.get().getLongFormat(selected.local.attributes().getModificationDate()); - } - } - View.RemoteFileUrl = - new DefaultUrlProvider(Transfer.getHost()).toUrl(selected.remote) - .find(DescriptiveUrl.Type.provider) - .getUrl(); - TransferStatus status = TransferPromptModel.GetStatus(selected); - if (status.getRemote().getSize() == -1) - { - View.RemoteFileSize = UnknownString; - } - else - { - View.RemoteFileSize = SizeFormatterFactory.get().format(status.getRemote().getSize()); - } - if (status.getRemote().getModificationDate() == -1) - { - View.RemoteFileModificationDate = UnknownString; - } - else - { - View.RemoteFileModificationDate = - UserDateFormatterFactory.get().getLongFormat(status.getRemote().getModificationDate()); - } - } - else - { - View.LocalFileUrl = String.Empty; - View.LocalFileSize = String.Empty; - View.LocalFileModificationDate = String.Empty; - } - } - } - - protected virtual void View_ChangedActionEvent() - { - TransferAction selected = View.SelectedAction; - if (Action.equals(selected)) - { - return; - } - PreferencesFactory.get() - .setProperty(String.Format("queue.prompt.{0}.action.default", Transfer.getType().name()), - selected.toString()); - Action = selected; - TransferPromptModel.SetAction(selected); - ReloadData(); - } - - public void ReloadData() - { - View.SetModel(TransferPromptModel.ChildrenGetter(null)); - UpdateStatusLabel(); - } - - public void ReloadData(List roots) - { - //clear selection before resetting model. Otherwise we have weird selection effects. - View.SetModel(roots); - foreach (TransferItem item in View.VisibleItems) - { - if (item.remote.isDirectory()) - { - View.RefreshBrowserObject(item); - } - } - UpdateStatusLabel(); - } - - private void PopulateActions() - { - View.PopulateActions(GetTransferActions()); - TransferAction defaultAction = - TransferAction.forName( - PreferencesFactory.get() - .getProperty(String.Format("queue.prompt.{0}.action.default", Transfer.getType().name()))); - View.SelectedAction = defaultAction; - Action = defaultAction; - } - - protected virtual IDictionary GetTransferActions() - { - IDictionary actions = new Dictionary(); - foreach (TransferAction action in Utils.ConvertFromJavaList(TransferAction.forTransfer(Transfer.getType()))) - { - actions.Add(action, action.getTitle()); - } - return actions; - } - - public void RefreshObject(TransferItem item) - { - AsyncDelegate refreshAction = () => View.RefreshBrowserObject(item); - Invoke(refreshAction); - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Winforms; +using StructureMap; +using ch.cyberduck.core; +using ch.cyberduck.core.preferences; +using ch.cyberduck.core.formatter; +using ch.cyberduck.core.shared; +using ch.cyberduck.core.threading; +using ch.cyberduck.core.transfer; +using org.apache.log4j; +using Ch.Cyberduck.Core; + +namespace Ch.Cyberduck.Ui.Controller +{ + public abstract class TransferPromptController : WindowController, TransferPrompt, + ProgressListener, TranscriptListener + { + private static readonly Logger Log = Logger.getLogger(typeof (TransferPromptController)); + private static readonly string UnknownString = LocaleFactory.localizedString("Unknown"); + protected readonly Session Session; + + protected readonly Transfer Transfer; + private readonly WindowController _parent; + + protected internal TransferAction Action = + TransferAction.forName(PreferencesFactory.get().getProperty("queue.prompt.action.default")); + + protected TransferPromptModel TransferPromptModel; + + protected TransferPromptController(WindowController parent, Transfer transfer, Session session) + { + View = ObjectFactory.GetInstance(); + _parent = parent; + Transfer = transfer; + Session = session; + View.Title = LocaleFactory.localizedString(TransferName); + + PopulateActions(); + } + + protected abstract string TransferName { get; } + + public override void log(bool request, string message) + { + // + } + + public override void message(string msg) + { + Invoke(delegate { View.StatusLabel = msg; }); + } + + public virtual TransferAction prompt(TransferItem file) + { + if (Log.isDebugEnabled()) + { + Log.debug(String.Format("Prompt for transfer action of {0}", Transfer)); + } + for (int i = 0; i < Transfer.getRoots().size(); i++) + { + TransferItem next = (TransferItem) Transfer.getRoots().get(i); + TransferPromptModel.Add(next); + } + + AsyncDelegate wireAction = delegate + { + View.ToggleDetailsEvent += View_ToggleDetailsEvent; + View.DetailsVisible = PreferencesFactory.get().getBoolean("transfer.toggle.details"); + + View.ChangedActionEvent += View_ChangedActionEvent; + View.ChangedSelectionEvent += View_ChangedSelectionEvent; + + View.ModelCanExpandDelegate = TransferPromptModel.CanExpand; + View.ModelChildrenGetterDelegate = TransferPromptModel.ChildrenGetter; + View.ModelCheckStateGetter = TransferPromptModel.GetCheckState; + View.ModelCheckStateSetter = TransferPromptModel.SetCheckState; + View.ModelSizeGetter = TransferPromptModel.GetSize; + View.ModelSizeAsStringGetter = TransferPromptModel.GetSizeAsString; + View.ModelFilenameGetter = TransferPromptModel.GetName; + View.ModelIconGetter = TransferPromptModel.GetIcon; + View.ModelWarningGetter = TransferPromptModel.GetWarningImage; + View.ModelCreateGetter = TransferPromptModel.GetCreateImage; + View.ModelSyncGetter = TransferPromptModel.GetSyncGetter; + View.ModelActiveGetter = TransferPromptModel.IsActive; + + View.ItemsChanged += UpdateStatusLabel; + + View.ViewShownEvent += delegate + { + View.SetModel(TransferPromptModel.ChildrenGetter(null)); + //select first one if there is any + IEnumerator en = TransferPromptModel.ChildrenGetter(null).GetEnumerator(); + if (en.MoveNext()) + { + View.SelectedItem = en.Current; + } + }; + DialogResult result = View.ShowDialog(_parent.View); + + if (result == DialogResult.Cancel) + { + Action = TransferAction.cancel; + } + }; + _parent.Invoke(wireAction, true); + return Action; + } + + public bool isSelected(TransferItem i) + { + return TransferPromptModel.IsSelected(i); + } + + public override void start(BackgroundAction action) + { + Invoke(delegate { View.StartActivityAnimation(); }); + } + + public override void stop(BackgroundAction action) + { + Invoke(delegate { View.StopActivityAnimation(); }); + } + + public void UpdateStatusLabel() + { + View.StatusLabel = String.Format(LocaleFactory.localizedString("{0} Files"), View.NumberOfFiles); + } + + private void View_ToggleDetailsEvent() + { + View.DetailsVisible = !View.DetailsVisible; + PreferencesFactory.get().setProperty("transfer.toggle.details", View.DetailsVisible); + } + + private void View_ChangedSelectionEvent() + { + if (View.SelectedItem != null) + { + TransferItem selected = View.SelectedItem; + if (null != selected) + { + if (null != selected.local) + { + View.LocalFileUrl = selected.local.getAbsolute(); + if (selected.local.attributes().getSize() == -1) + { + View.LocalFileSize = UnknownString; + } + else + { + View.LocalFileSize = SizeFormatterFactory.get().format(selected.local.attributes().getSize()); + } + if (selected.local.attributes().getModificationDate() == -1) + { + View.LocalFileModificationDate = UnknownString; + } + else + { + View.LocalFileModificationDate = + UserDateFormatterFactory.get().getLongFormat(selected.local.attributes().getModificationDate()); + } + } + View.RemoteFileUrl = + new DefaultUrlProvider(Transfer.getHost()).toUrl(selected.remote) + .find(DescriptiveUrl.Type.provider) + .getUrl(); + TransferStatus status = TransferPromptModel.GetStatus(selected); + if (status.getRemote().getSize() == -1) + { + View.RemoteFileSize = UnknownString; + } + else + { + View.RemoteFileSize = SizeFormatterFactory.get().format(status.getRemote().getSize()); + } + if (status.getRemote().getModificationDate() == -1) + { + View.RemoteFileModificationDate = UnknownString; + } + else + { + View.RemoteFileModificationDate = + UserDateFormatterFactory.get().getLongFormat(status.getRemote().getModificationDate()); + } + } + else + { + View.LocalFileUrl = String.Empty; + View.LocalFileSize = String.Empty; + View.LocalFileModificationDate = String.Empty; + } + } + } + + protected virtual void View_ChangedActionEvent() + { + TransferAction selected = View.SelectedAction; + if (Action.equals(selected)) + { + return; + } + PreferencesFactory.get() + .setProperty(String.Format("queue.prompt.{0}.action.default", Transfer.getType().name()), + selected.toString()); + Action = selected; + TransferPromptModel.SetAction(selected); + ReloadData(); + } + + public void ReloadData() + { + View.SetModel(TransferPromptModel.ChildrenGetter(null)); + UpdateStatusLabel(); + } + + public void ReloadData(List roots) + { + //clear selection before resetting model. Otherwise we have weird selection effects. + View.SetModel(roots); + foreach (TransferItem item in View.VisibleItems) + { + if (item.remote.isDirectory()) + { + View.RefreshBrowserObject(item); + } + } + UpdateStatusLabel(); + } + + private void PopulateActions() + { + View.PopulateActions(GetTransferActions()); + TransferAction defaultAction = + TransferAction.forName( + PreferencesFactory.get() + .getProperty(String.Format("queue.prompt.{0}.action.default", Transfer.getType().name()))); + View.SelectedAction = defaultAction; + Action = defaultAction; + } + + protected virtual IDictionary GetTransferActions() + { + IDictionary actions = new Dictionary(); + foreach (TransferAction action in Utils.ConvertFromJavaList(TransferAction.forTransfer(Transfer.getType()))) + { + actions.Add(action, action.getTitle()); + } + return actions; + } + + public void RefreshObject(TransferItem item) + { + AsyncDelegate refreshAction = () => View.RefreshBrowserObject(item); + Invoke(refreshAction); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/TransferPromptModel.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/TransferPromptModel.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/TransferPromptModel.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/TransferPromptModel.cs index 223fb628e3..259bdbb672 100644 --- a/source/ch/cyberduck/ui/controller/TransferPromptModel.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/TransferPromptModel.cs @@ -1,279 +1,279 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; -using ch.cyberduck.core; -using ch.cyberduck.core.formatter; -using ch.cyberduck.core.preferences; -using ch.cyberduck.core.threading; -using ch.cyberduck.core.transfer; -using ch.cyberduck.core.worker; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Ui.Winforms; -using java.util; -using org.apache.log4j; - -namespace Ch.Cyberduck.Ui.Controller -{ - public abstract class TransferPromptModel - { - protected static Logger log = Logger.getLogger(typeof (TransferPromptModel).FullName); - private readonly TransferItemCache _cache = new TransferItemCache(int.MaxValue); - private readonly TransferPromptController _controller; - private readonly List _roots = new List(); - /** - * Selection status map in the prompt - */ - private readonly IDictionary _selected = new Dictionary(); - private readonly Session _session; - protected readonly Transfer Transfer; - private readonly string UNKNOWN = LocaleFactory.localizedString("Unknown"); - private TransferAction _action; - protected IDictionary _status = new Dictionary(); - /** - * Transfer status determined by filters - */ - protected Bitmap AlertIcon = IconCache.Instance.IconForName("alert"); - - protected TransferPromptModel(TransferPromptController controller, Session session, Transfer transfer) - { - _controller = controller; - _session = session; - Transfer = transfer; - _action = - TransferAction.forName( - PreferencesFactory.get() - .getProperty(String.Format("queue.prompt.{0}.action.default", transfer.getType().name()))); - } - - public virtual void Add(TransferItem item) - { - _roots.Add(item); - } - - public bool CanExpand(object t) - { - return ((TransferItem) t).remote.isDirectory(); - } - - public IEnumerable ChildrenGetter(object p) - { - TransferItem directory = ((TransferItem) p); - if (null == directory) - { - // Root - if (!_cache.isValid(null)) - { - _cache.put(null, new AttributedList(Transfer.getRoots())); - Filter(); - } - } - else if (!_cache.isValid(directory)) - { - _controller.Background(new TransferPromptListAction(this, _controller, _session, directory, Transfer, - _cache)); - } - // Return list with filtered files included - AttributedList list = _cache.get(directory); - for (int i = 0; i < list.size(); i++) - { - yield return (TransferItem) list.get(i); - } - } - - public object GetName(TransferItem path) - { - return path.remote.getName(); - } - - public object GetModified(TransferItem path) - { - long modificationDate = path.remote.attributes().getModificationDate(); - if (modificationDate != -1) - { - return UserDefaultsDateFormatter.ConvertJavaMillisecondsToDateTime(modificationDate); - } - return UNKNOWN; - } - - public object GetSize(TransferItem path) - { - TransferStatus status = GetStatus(path); - return status.getLength(); - } - - public TransferStatus GetStatus(TransferItem path) - { - if (!_status.ContainsKey(path)) - { - // Transfer filter background task has not yet finished - return new TransferStatus(); - } - TransferStatus status = _status[path]; - return status; - } - - public string GetSizeAsString(object size) - { - return SizeFormatterFactory.get().format((long) size); - } - - public object GetIcon(TransferItem item) - { - return IconCache.Instance.IconForPath(item.remote, IconCache.IconSize.Small); - } - - public bool IsSelected(TransferItem item) - { - if (_selected.ContainsKey(item)) - { - return _selected[item] == CheckState.Checked; - } - return true; - } - - public CheckState GetCheckState(Object i) - { - TransferItem item = (TransferItem) i; - TransferStatus status = GetStatus(item); - if (status.isRejected()) - { - return CheckState.Unchecked; - } - return IsSelected(item) ? CheckState.Checked : CheckState.Unchecked; - } - - public CheckState SetCheckState(object i, CheckState newValue) - { - _selected[(TransferItem) i] = newValue; - return newValue; - } - - public object GetWarningImage(TransferItem item) - { - TransferStatus status = GetStatus(item); - if (item.remote.isFile()) - { - if (status.getLength() == 0) - { - return AlertIcon; - } - } - return null; - } - - public virtual object GetCreateImage(TransferItem item) - { - return null; - } - - public virtual object GetSyncGetter(TransferItem item) - { - return null; - } - - public bool IsActive(TransferItem item) - { - return _status.ContainsKey(item); - } - - /// - /// Change transfer action and reload list of files - /// - /// Transfer action - public void SetAction(TransferAction action) - { - _action = action; - Filter(); - } - - private void Filter() - { - _controller.background(new FilterAction(this, _controller, _session, Transfer, _action, _cache)); - } - - private class FilterAction : WorkerBackgroundAction - { - public FilterAction(TransferPromptModel model, TransferPromptController controller, Session session, - Transfer transfer, TransferAction action, TransferItemCache cache) - : base( - controller, session, - new InnerTransferPromptFilterWorker(model, controller, transfer, action, cache)) - { - } - - private class InnerTransferPromptFilterWorker : TransferPromptFilterWorker - { - private readonly TransferPromptController _controller; - private readonly TransferPromptModel _model; - - public InnerTransferPromptFilterWorker(TransferPromptModel model, TransferPromptController controller, - Transfer transfer, TransferAction action, TransferItemCache cache) - : base(transfer, action, cache, controller) - { - _model = model; - _controller = controller; - } - - public override void cleanup(object result) - { - IDictionary map = - Utils.ConvertFromJavaMap((Map) result); - _model._status = map; - _controller.ReloadData(_model._roots); - } - } - } - - private class TransferPromptListAction : WorkerBackgroundAction - { - public TransferPromptListAction(TransferPromptModel model, TransferPromptController controller, - Session session, TransferItem directory, Transfer transfer, TransferItemCache cache) - : base( - controller, session, - new InnerTransferPromptListWorker(model, controller, transfer, directory, cache)) - { - } - - private class InnerTransferPromptListWorker : TransferPromptListWorker - { - private readonly TransferItemCache _cache; - private readonly TransferItem _directory; - private readonly TransferPromptModel _model; - - public InnerTransferPromptListWorker(TransferPromptModel model, TransferPromptController controller, - Transfer transfer, TransferItem directory, TransferItemCache cache) - : base(transfer, directory.remote, directory.local, controller) - { - _model = model; - _directory = directory; - _cache = cache; - } - - public override void cleanup(object list) - { - _cache.put(_directory, new AttributedList((List) list)); - _model.Filter(); - } - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using ch.cyberduck.core; +using ch.cyberduck.core.formatter; +using ch.cyberduck.core.preferences; +using ch.cyberduck.core.threading; +using ch.cyberduck.core.transfer; +using ch.cyberduck.core.worker; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Ui.Winforms; +using java.util; +using org.apache.log4j; + +namespace Ch.Cyberduck.Ui.Controller +{ + public abstract class TransferPromptModel + { + protected static Logger log = Logger.getLogger(typeof (TransferPromptModel).FullName); + private readonly TransferItemCache _cache = new TransferItemCache(int.MaxValue); + private readonly TransferPromptController _controller; + private readonly List _roots = new List(); + /** + * Selection status map in the prompt + */ + private readonly IDictionary _selected = new Dictionary(); + private readonly Session _session; + protected readonly Transfer Transfer; + private readonly string UNKNOWN = LocaleFactory.localizedString("Unknown"); + private TransferAction _action; + protected IDictionary _status = new Dictionary(); + /** + * Transfer status determined by filters + */ + protected Bitmap AlertIcon = IconCache.Instance.IconForName("alert"); + + protected TransferPromptModel(TransferPromptController controller, Session session, Transfer transfer) + { + _controller = controller; + _session = session; + Transfer = transfer; + _action = + TransferAction.forName( + PreferencesFactory.get() + .getProperty(String.Format("queue.prompt.{0}.action.default", transfer.getType().name()))); + } + + public virtual void Add(TransferItem item) + { + _roots.Add(item); + } + + public bool CanExpand(object t) + { + return ((TransferItem) t).remote.isDirectory(); + } + + public IEnumerable ChildrenGetter(object p) + { + TransferItem directory = ((TransferItem) p); + if (null == directory) + { + // Root + if (!_cache.isValid(null)) + { + _cache.put(null, new AttributedList(Transfer.getRoots())); + Filter(); + } + } + else if (!_cache.isValid(directory)) + { + _controller.Background(new TransferPromptListAction(this, _controller, _session, directory, Transfer, + _cache)); + } + // Return list with filtered files included + AttributedList list = _cache.get(directory); + for (int i = 0; i < list.size(); i++) + { + yield return (TransferItem) list.get(i); + } + } + + public object GetName(TransferItem path) + { + return path.remote.getName(); + } + + public object GetModified(TransferItem path) + { + long modificationDate = path.remote.attributes().getModificationDate(); + if (modificationDate != -1) + { + return UserDefaultsDateFormatter.ConvertJavaMillisecondsToDateTime(modificationDate); + } + return UNKNOWN; + } + + public object GetSize(TransferItem path) + { + TransferStatus status = GetStatus(path); + return status.getLength(); + } + + public TransferStatus GetStatus(TransferItem path) + { + if (!_status.ContainsKey(path)) + { + // Transfer filter background task has not yet finished + return new TransferStatus(); + } + TransferStatus status = _status[path]; + return status; + } + + public string GetSizeAsString(object size) + { + return SizeFormatterFactory.get().format((long) size); + } + + public object GetIcon(TransferItem item) + { + return IconCache.Instance.IconForPath(item.remote, IconCache.IconSize.Small); + } + + public bool IsSelected(TransferItem item) + { + if (_selected.ContainsKey(item)) + { + return _selected[item] == CheckState.Checked; + } + return true; + } + + public CheckState GetCheckState(Object i) + { + TransferItem item = (TransferItem) i; + TransferStatus status = GetStatus(item); + if (status.isRejected()) + { + return CheckState.Unchecked; + } + return IsSelected(item) ? CheckState.Checked : CheckState.Unchecked; + } + + public CheckState SetCheckState(object i, CheckState newValue) + { + _selected[(TransferItem) i] = newValue; + return newValue; + } + + public object GetWarningImage(TransferItem item) + { + TransferStatus status = GetStatus(item); + if (item.remote.isFile()) + { + if (status.getLength() == 0) + { + return AlertIcon; + } + } + return null; + } + + public virtual object GetCreateImage(TransferItem item) + { + return null; + } + + public virtual object GetSyncGetter(TransferItem item) + { + return null; + } + + public bool IsActive(TransferItem item) + { + return _status.ContainsKey(item); + } + + /// + /// Change transfer action and reload list of files + /// + /// Transfer action + public void SetAction(TransferAction action) + { + _action = action; + Filter(); + } + + private void Filter() + { + _controller.background(new FilterAction(this, _controller, _session, Transfer, _action, _cache)); + } + + private class FilterAction : WorkerBackgroundAction + { + public FilterAction(TransferPromptModel model, TransferPromptController controller, Session session, + Transfer transfer, TransferAction action, TransferItemCache cache) + : base( + controller, session, + new InnerTransferPromptFilterWorker(model, controller, transfer, action, cache)) + { + } + + private class InnerTransferPromptFilterWorker : TransferPromptFilterWorker + { + private readonly TransferPromptController _controller; + private readonly TransferPromptModel _model; + + public InnerTransferPromptFilterWorker(TransferPromptModel model, TransferPromptController controller, + Transfer transfer, TransferAction action, TransferItemCache cache) + : base(transfer, action, cache, controller) + { + _model = model; + _controller = controller; + } + + public override void cleanup(object result) + { + IDictionary map = + Utils.ConvertFromJavaMap((Map) result); + _model._status = map; + _controller.ReloadData(_model._roots); + } + } + } + + private class TransferPromptListAction : WorkerBackgroundAction + { + public TransferPromptListAction(TransferPromptModel model, TransferPromptController controller, + Session session, TransferItem directory, Transfer transfer, TransferItemCache cache) + : base( + controller, session, + new InnerTransferPromptListWorker(model, controller, transfer, directory, cache)) + { + } + + private class InnerTransferPromptListWorker : TransferPromptListWorker + { + private readonly TransferItemCache _cache; + private readonly TransferItem _directory; + private readonly TransferPromptModel _model; + + public InnerTransferPromptListWorker(TransferPromptModel model, TransferPromptController controller, + Transfer transfer, TransferItem directory, TransferItemCache cache) + : base(transfer, directory.remote, directory.local, controller) + { + _model = model; + _directory = directory; + _cache = cache; + } + + public override void cleanup(object list) + { + _cache.put(_directory, new AttributedList((List) list)); + _model.Filter(); + } + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/TreeBrowserModel.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/TreeBrowserModel.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/TreeBrowserModel.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/TreeBrowserModel.cs index 164cb01652..d86adbc50b 100644 --- a/source/ch/cyberduck/ui/controller/TreeBrowserModel.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/TreeBrowserModel.cs @@ -1,212 +1,212 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Text; -using ch.cyberduck.core; -using ch.cyberduck.core.formatter; -using ch.cyberduck.core.local; -using ch.cyberduck.core.preferences; -using ch.cyberduck.core.threading; -using ch.cyberduck.core.worker; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Ui.Winforms; -using java.util; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal class TreeBrowserModel - { - private readonly PathCache _cache; - private readonly BrowserController _controller; - private readonly FileDescriptor _descriptor = FileDescriptorFactory.get(); - private readonly ListProgressListener _listener; - private readonly string _unknown = LocaleFactory.localizedString("Unknown"); - - public TreeBrowserModel(BrowserController controller, PathCache cache, ListProgressListener listener) - { - _controller = controller; - _cache = cache; - _listener = listener; - } - - public bool CanExpand(object path) - { - return ((Path) path).isDirectory(); - } - - public IEnumerable ChildrenGetter(object p) - { - Path directory = (Path) p; - AttributedList list; - if (!_cache.isValid(directory)) - { - // Reloading a workdir that is not cached yet would cause the interface to freeze; - // Delay until path is cached in the background - // switch to blocking children fetching - //path.childs(); - _controller.background(new ListAction(_controller, directory, _cache, _listener)); - } - list = _cache.get(directory).filter(_controller.FilenameComparator, _controller.FilenameFilter); - for (int i = 0; i < list.size(); i++) - { - yield return (Path) list.get(i); - } - } - - public object GetName(Path path) - { - return path.getName(); - } - - public object GetIcon(Path path) - { - if (path.isVolume()) - { - return IconCache.Instance.VolumeIcon(_controller.Session.getHost().getProtocol(), - IconCache.IconSize.Small); - } - return IconCache.Instance.IconForPath(path, IconCache.IconSize.Small); - } - - public object GetModified(Path path) - { - long modificationDate = path.attributes().getModificationDate(); - if (modificationDate != -1) - { - return UserDefaultsDateFormatter.ConvertJavaMillisecondsToDateTime(modificationDate); - } - return DateTime.MinValue; - } - - public string GetModifiedAsString(object value) - { - DateTime modificationDate = (DateTime) value; - if (modificationDate != DateTime.MinValue) - { - return - UserDateFormatterFactory.get() - .getShortFormat(UserDefaultsDateFormatter.ConvertDateTimeToJavaMilliseconds(modificationDate), - PreferencesFactory.get().getBoolean("browser.date.natural")); - } - return _unknown; - } - - public object GetSize(Path path) - { - return path.attributes().getSize(); - } - - public string GetSizeAsString(object size) - { - return SizeFormatterFactory.get().format((long) size); - } - - public object GetOwner(Path path) - { - return Utils.IsBlank(path.attributes().getOwner()) - ? LocaleFactory.localizedString("Unknown") - : path.attributes().getOwner(); - } - - public object GetGroup(Path path) - { - return Utils.IsBlank(path.attributes().getGroup()) - ? LocaleFactory.localizedString("Unknown") - : path.attributes().getGroup(); - } - - public object GetPermission(Path path) - { - Acl acl = path.attributes().getAcl(); - if (!Acl.EMPTY.equals(acl)) - { - StringBuilder s = new StringBuilder(); - Iterator iterator = acl.entrySet().iterator(); - while (iterator.hasNext()) - { - Map.Entry entry = (Map.Entry) iterator.next(); - s.Append(String.Format("{0}{1}:{2}", s.Length == 0 ? "" : ", ", - ((Acl.User) entry.getKey()).getDisplayName(), entry.getValue())); - } - return s.ToString(); - } - Permission permission = path.attributes().getPermission(); - return permission.toString(); - } - - public object GetKind(Path path) - { - return _descriptor.getKind(path); - } - - public object GetExtension(Path path) - { - return path.isFile() - ? Utils.IsNotBlank(path.getExtension()) ? path.getExtension() : LocaleFactory.localizedString("None") - : LocaleFactory.localizedString("None"); - } - - public object GetRegion(Path path) - { - return Utils.IsNotBlank(path.attributes().getRegion()) - ? path.attributes().getRegion() - : LocaleFactory.localizedString("Unknown"); - } - - public object GetVersion(Path path) - { - return Utils.IsNotBlank(path.attributes().getVersionId()) - ? path.attributes().getVersionId() - : LocaleFactory.localizedString("None"); - } - - public bool GetActive(Path path) - { - return _controller.IsConnected() && BrowserController.HiddenFilter.accept(path); - } - - private class ListAction : WorkerBackgroundAction - { - public ListAction(BrowserController controller, Path directory, PathCache cache, ListProgressListener listener) - : base(controller, controller.Session, new InnerListWorker(controller, directory, cache, listener)) - { - } - - private class InnerListWorker : SessionListWorker - { - private readonly BrowserController _controller; - private readonly Path _directory; - - public InnerListWorker(BrowserController controller, Path directory, PathCache cache, - ListProgressListener listener) : base(cache, directory, listener) - { - _controller = controller; - _directory = directory; - } - - public override void cleanup(object result) - { - base.cleanup(result); - _controller.ReloadData(_directory, true); - } - } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Text; +using ch.cyberduck.core; +using ch.cyberduck.core.formatter; +using ch.cyberduck.core.local; +using ch.cyberduck.core.preferences; +using ch.cyberduck.core.threading; +using ch.cyberduck.core.worker; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Ui.Winforms; +using java.util; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal class TreeBrowserModel + { + private readonly PathCache _cache; + private readonly BrowserController _controller; + private readonly FileDescriptor _descriptor = FileDescriptorFactory.get(); + private readonly ListProgressListener _listener; + private readonly string _unknown = LocaleFactory.localizedString("Unknown"); + + public TreeBrowserModel(BrowserController controller, PathCache cache, ListProgressListener listener) + { + _controller = controller; + _cache = cache; + _listener = listener; + } + + public bool CanExpand(object path) + { + return ((Path) path).isDirectory(); + } + + public IEnumerable ChildrenGetter(object p) + { + Path directory = (Path) p; + AttributedList list; + if (!_cache.isValid(directory)) + { + // Reloading a workdir that is not cached yet would cause the interface to freeze; + // Delay until path is cached in the background + // switch to blocking children fetching + //path.childs(); + _controller.background(new ListAction(_controller, directory, _cache, _listener)); + } + list = _cache.get(directory).filter(_controller.FilenameComparator, _controller.FilenameFilter); + for (int i = 0; i < list.size(); i++) + { + yield return (Path) list.get(i); + } + } + + public object GetName(Path path) + { + return path.getName(); + } + + public object GetIcon(Path path) + { + if (path.isVolume()) + { + return IconCache.Instance.VolumeIcon(_controller.Session.getHost().getProtocol(), + IconCache.IconSize.Small); + } + return IconCache.Instance.IconForPath(path, IconCache.IconSize.Small); + } + + public object GetModified(Path path) + { + long modificationDate = path.attributes().getModificationDate(); + if (modificationDate != -1) + { + return UserDefaultsDateFormatter.ConvertJavaMillisecondsToDateTime(modificationDate); + } + return DateTime.MinValue; + } + + public string GetModifiedAsString(object value) + { + DateTime modificationDate = (DateTime) value; + if (modificationDate != DateTime.MinValue) + { + return + UserDateFormatterFactory.get() + .getShortFormat(UserDefaultsDateFormatter.ConvertDateTimeToJavaMilliseconds(modificationDate), + PreferencesFactory.get().getBoolean("browser.date.natural")); + } + return _unknown; + } + + public object GetSize(Path path) + { + return path.attributes().getSize(); + } + + public string GetSizeAsString(object size) + { + return SizeFormatterFactory.get().format((long) size); + } + + public object GetOwner(Path path) + { + return Utils.IsBlank(path.attributes().getOwner()) + ? LocaleFactory.localizedString("Unknown") + : path.attributes().getOwner(); + } + + public object GetGroup(Path path) + { + return Utils.IsBlank(path.attributes().getGroup()) + ? LocaleFactory.localizedString("Unknown") + : path.attributes().getGroup(); + } + + public object GetPermission(Path path) + { + Acl acl = path.attributes().getAcl(); + if (!Acl.EMPTY.equals(acl)) + { + StringBuilder s = new StringBuilder(); + Iterator iterator = acl.entrySet().iterator(); + while (iterator.hasNext()) + { + Map.Entry entry = (Map.Entry) iterator.next(); + s.Append(String.Format("{0}{1}:{2}", s.Length == 0 ? "" : ", ", + ((Acl.User) entry.getKey()).getDisplayName(), entry.getValue())); + } + return s.ToString(); + } + Permission permission = path.attributes().getPermission(); + return permission.toString(); + } + + public object GetKind(Path path) + { + return _descriptor.getKind(path); + } + + public object GetExtension(Path path) + { + return path.isFile() + ? Utils.IsNotBlank(path.getExtension()) ? path.getExtension() : LocaleFactory.localizedString("None") + : LocaleFactory.localizedString("None"); + } + + public object GetRegion(Path path) + { + return Utils.IsNotBlank(path.attributes().getRegion()) + ? path.attributes().getRegion() + : LocaleFactory.localizedString("Unknown"); + } + + public object GetVersion(Path path) + { + return Utils.IsNotBlank(path.attributes().getVersionId()) + ? path.attributes().getVersionId() + : LocaleFactory.localizedString("None"); + } + + public bool GetActive(Path path) + { + return _controller.IsConnected() && BrowserController.HiddenFilter.accept(path); + } + + private class ListAction : WorkerBackgroundAction + { + public ListAction(BrowserController controller, Path directory, PathCache cache, ListProgressListener listener) + : base(controller, controller.Session, new InnerListWorker(controller, directory, cache, listener)) + { + } + + private class InnerListWorker : SessionListWorker + { + private readonly BrowserController _controller; + private readonly Path _directory; + + public InnerListWorker(BrowserController controller, Path directory, PathCache cache, + ListProgressListener listener) : base(cache, directory, listener) + { + _controller = controller; + _directory = directory; + } + + public override void cleanup(object result) + { + base.cleanup(result); + _controller.ReloadData(_directory, true); + } + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/UpdateController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/UpdateController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/UpdateController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/UpdateController.cs index 59d42aea29..d17dde07c3 100644 --- a/source/ch/cyberduck/ui/controller/UpdateController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/UpdateController.cs @@ -1,75 +1,75 @@ -// -// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using ch.cyberduck.core; -using ch.cyberduck.core.preferences; -using StructureMap; - -namespace Ch.Cyberduck.Ui.Controller -{ - public class UpdateController : WindowController - { - private static readonly UpdateController _instance = new UpdateController(); - - private UpdateController() - { - View = ObjectFactory.GetInstance(); - } - - public static UpdateController Instance - { - get { return _instance; } - } - - public override bool Singleton - { - get { return true; } - } - - public bool AboutToInstallUpdate - { - get { return View.AboutToInstallUpdate; } - } - - public void CheckForUpdatesIfNecessary() - { - if (PreferencesFactory.get().getBoolean("update.check")) - { - DateTime lastCheck = new DateTime(PreferencesFactory.get().getLong("update.check.last")); - long interval = PreferencesFactory.get().getLong("update.check.interval"); - - // see if enough days have elapsed since last check. - TimeSpan span = DateTime.Now.Subtract(lastCheck); - if (span.TotalSeconds >= interval) - { - ForceCheckForUpdates(true); - } - } - } - - /// - /// Force the update check - /// - /// true if you want to perform the update check in the background. - public void ForceCheckForUpdates(bool background) - { - View.CheckForUpdates(background); - PreferencesFactory.get().setProperty("update.check.last", DateTime.Now.Ticks); - } - } +// +// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using ch.cyberduck.core; +using ch.cyberduck.core.preferences; +using StructureMap; + +namespace Ch.Cyberduck.Ui.Controller +{ + public class UpdateController : WindowController + { + private static readonly UpdateController _instance = new UpdateController(); + + private UpdateController() + { + View = ObjectFactory.GetInstance(); + } + + public static UpdateController Instance + { + get { return _instance; } + } + + public override bool Singleton + { + get { return true; } + } + + public bool AboutToInstallUpdate + { + get { return View.AboutToInstallUpdate; } + } + + public void CheckForUpdatesIfNecessary() + { + if (PreferencesFactory.get().getBoolean("update.check")) + { + DateTime lastCheck = new DateTime(PreferencesFactory.get().getLong("update.check.last")); + long interval = PreferencesFactory.get().getLong("update.check.interval"); + + // see if enough days have elapsed since last check. + TimeSpan span = DateTime.Now.Subtract(lastCheck); + if (span.TotalSeconds >= interval) + { + ForceCheckForUpdates(true); + } + } + } + + /// + /// Force the update check + /// + /// true if you want to perform the update check in the background. + public void ForceCheckForUpdates(bool background) + { + View.CheckForUpdates(background); + PreferencesFactory.get().setProperty("update.check.last", DateTime.Now.Ticks); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/UploadPromptController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/UploadPromptController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/UploadPromptController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/UploadPromptController.cs index ff9d6774d2..f68bbfc387 100644 --- a/source/ch/cyberduck/ui/controller/UploadPromptController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/UploadPromptController.cs @@ -1,37 +1,37 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using ch.cyberduck.core; -using ch.cyberduck.core.transfer; - -namespace Ch.Cyberduck.Ui.Controller -{ - public class UploadPromptController : TransferPromptController - { - public UploadPromptController(WindowController parent, Transfer transfer, Session session) - : base(parent, transfer, session) - { - TransferPromptModel = new UploadPromptModel(this, Session, Transfer); - } - - protected override string TransferName - { - get { return "Upload"; } - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using ch.cyberduck.core; +using ch.cyberduck.core.transfer; + +namespace Ch.Cyberduck.Ui.Controller +{ + public class UploadPromptController : TransferPromptController + { + public UploadPromptController(WindowController parent, Transfer transfer, Session session) + : base(parent, transfer, session) + { + TransferPromptModel = new UploadPromptModel(this, Session, Transfer); + } + + protected override string TransferName + { + get { return "Upload"; } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/UploadPromptModel.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/UploadPromptModel.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/UploadPromptModel.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/UploadPromptModel.cs index 39edcb8763..57bf3663ca 100644 --- a/source/ch/cyberduck/ui/controller/UploadPromptModel.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/UploadPromptModel.cs @@ -1,31 +1,31 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using ch.cyberduck.core; -using ch.cyberduck.core.transfer; - -namespace Ch.Cyberduck.Ui.Controller -{ - internal class UploadPromptModel : TransferPromptModel - { - public UploadPromptModel(TransferPromptController controller, Session session, Transfer transfer) - : base(controller, session, transfer) - { - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using ch.cyberduck.core; +using ch.cyberduck.core.transfer; + +namespace Ch.Cyberduck.Ui.Controller +{ + internal class UploadPromptModel : TransferPromptModel + { + public UploadPromptModel(TransferPromptController controller, Session session, Transfer transfer) + : base(controller, session, transfer) + { + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/WindowController.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/WindowController.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/WindowController.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/WindowController.cs index 1b6acfea14..053e77a971 100644 --- a/source/ch/cyberduck/ui/controller/WindowController.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/WindowController.cs @@ -1,235 +1,235 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Winforms.Taskdialog; -using Ch.Cyberduck.Ui.Winforms.Threading; -using ch.cyberduck.core; -using ch.cyberduck.core.exception; -using ch.cyberduck.core.threading; -using java.lang; - -namespace Ch.Cyberduck.Ui.Controller -{ - public abstract class WindowController : WindowController where T : IView - { - private T _view; - - public new T View - { - get { return _view; } - set - { - _view = value; - base.View = _view; - } - } - } - - public abstract class WindowController : AsyncController - { - private bool _invalidated; - - /// - /// - /// - /// True if the controller window is on screen. - public bool Visible - { - get { return View.Visible; } - } - - public override IView View - { - get { return base.View; } - set - { - base.View = value; - View.ViewClosingEvent += ViewClosingEvent; - View.ReleaseWhenClose = !Singleton; - } - } - - public bool Invalidated - { - get { return _invalidated; } - } - - - private bool IsInvokeAllowed - { - get { return !(View.IsDisposed || _invalidated); } - } - - /// - /// A singleton window is not released when closed and the controller is not invalidated - /// - public virtual bool Singleton - { - get { return false; } - } - - private void ViewClosingEvent(object sender, FormClosingEventArgs args) - { - if (View.ModalResult == DialogResult.Cancel) - { - args.Cancel = false; - return; - } - - bool shouldClose = ViewShouldClose(); - args.Cancel = !shouldClose; - if (shouldClose) - { - Invalidate(); - _invalidated = true; - View.ViewClosingEvent -= ViewClosingEvent; - } - } - - public virtual bool ViewShouldClose() - { - return true; - } - - public override void invoke(MainAction mainAction, bool wait) - { - if (IsInvokeAllowed) - { - base.invoke(mainAction, wait); - } - } - - public override bool alert(Host host, BackgroundException failure, StringBuilder transcript) - { - return new DialogAlertCallback(this).alert(host, failure, transcript); - } - - protected virtual void Invalidate() - { - base.invalidate(); - } - - /// - /// - /// - /// - /// - /// - /// - /// - public DialogResult MessageBox(string title, string message, string detail, string help) - { - return View.MessageBox(title, message, detail, null, help, null, delegate { }); - } - - /// - /// - /// - /// - /// - /// - /// - /// - /// - public DialogResult QuestionBox(string title, string message, string detail, string commandButtons, - bool showCancelButton) - { - return CommandBox(title, message, detail, commandButtons, showCancelButton, null, SysIcons.Question, - delegate { }); - } - - /// - /// - /// - /// - /// - /// - /// Text expandable container - /// - /// - /// - /// - public DialogResult WarningBox(string title, string message, string detail, string expanded, - string commandButtons, bool showCancelButton, string help, - DialogResponseHandler handler) - { - return View.CommandBox(title, message, detail, expanded, help, null, commandButtons, showCancelButton, - SysIcons.Warning, SysIcons.Information, handler); - } - - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - public DialogResult InfoBox(string title, string message, string detail, string commandButtons, - string verificationText, bool showCancelButton) - { - return CommandBox(title, message, detail, commandButtons, showCancelButton, verificationText, - SysIcons.Information, null, delegate { }); - } - - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - public DialogResult CommandBox(string title, string message, string detail, string commandButtons, - bool showCancelButton, string verificationText, SysIcons mainIcon, - DialogResponseHandler handler) - { - return CommandBox(title, message, detail, commandButtons, showCancelButton, verificationText, mainIcon, null, - handler); - } - - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// Help URL - /// - /// - public DialogResult CommandBox(string title, string message, string detail, string commandButtons, - bool showCancelButton, string verificationText, SysIcons mainIcon, string help, - DialogResponseHandler handler) - { - return View.CommandBox(title, message, detail, null, help, verificationText, commandButtons, - showCancelButton, mainIcon, SysIcons.Information, handler); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Winforms.Taskdialog; +using Ch.Cyberduck.Ui.Winforms.Threading; +using ch.cyberduck.core; +using ch.cyberduck.core.exception; +using ch.cyberduck.core.threading; +using java.lang; + +namespace Ch.Cyberduck.Ui.Controller +{ + public abstract class WindowController : WindowController where T : IView + { + private T _view; + + public new T View + { + get { return _view; } + set + { + _view = value; + base.View = _view; + } + } + } + + public abstract class WindowController : AsyncController + { + private bool _invalidated; + + /// + /// + /// + /// True if the controller window is on screen. + public bool Visible + { + get { return View.Visible; } + } + + public override IView View + { + get { return base.View; } + set + { + base.View = value; + View.ViewClosingEvent += ViewClosingEvent; + View.ReleaseWhenClose = !Singleton; + } + } + + public bool Invalidated + { + get { return _invalidated; } + } + + + private bool IsInvokeAllowed + { + get { return !(View.IsDisposed || _invalidated); } + } + + /// + /// A singleton window is not released when closed and the controller is not invalidated + /// + public virtual bool Singleton + { + get { return false; } + } + + private void ViewClosingEvent(object sender, FormClosingEventArgs args) + { + if (View.ModalResult == DialogResult.Cancel) + { + args.Cancel = false; + return; + } + + bool shouldClose = ViewShouldClose(); + args.Cancel = !shouldClose; + if (shouldClose) + { + Invalidate(); + _invalidated = true; + View.ViewClosingEvent -= ViewClosingEvent; + } + } + + public virtual bool ViewShouldClose() + { + return true; + } + + public override void invoke(MainAction mainAction, bool wait) + { + if (IsInvokeAllowed) + { + base.invoke(mainAction, wait); + } + } + + public override bool alert(Host host, BackgroundException failure, StringBuilder transcript) + { + return new DialogAlertCallback(this).alert(host, failure, transcript); + } + + protected virtual void Invalidate() + { + base.invalidate(); + } + + /// + /// + /// + /// + /// + /// + /// + /// + public DialogResult MessageBox(string title, string message, string detail, string help) + { + return View.MessageBox(title, message, detail, null, help, null, delegate { }); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public DialogResult QuestionBox(string title, string message, string detail, string commandButtons, + bool showCancelButton) + { + return CommandBox(title, message, detail, commandButtons, showCancelButton, null, SysIcons.Question, + delegate { }); + } + + /// + /// + /// + /// + /// + /// + /// Text expandable container + /// + /// + /// + /// + public DialogResult WarningBox(string title, string message, string detail, string expanded, + string commandButtons, bool showCancelButton, string help, + DialogResponseHandler handler) + { + return View.CommandBox(title, message, detail, expanded, help, null, commandButtons, showCancelButton, + SysIcons.Warning, SysIcons.Information, handler); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public DialogResult InfoBox(string title, string message, string detail, string commandButtons, + string verificationText, bool showCancelButton) + { + return CommandBox(title, message, detail, commandButtons, showCancelButton, verificationText, + SysIcons.Information, null, delegate { }); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public DialogResult CommandBox(string title, string message, string detail, string commandButtons, + bool showCancelButton, string verificationText, SysIcons mainIcon, + DialogResponseHandler handler) + { + return CommandBox(title, message, detail, commandButtons, showCancelButton, verificationText, mainIcon, null, + handler); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// Help URL + /// + /// + public DialogResult CommandBox(string title, string message, string detail, string commandButtons, + bool showCancelButton, string verificationText, SysIcons mainIcon, string help, + DialogResponseHandler handler) + { + return View.CommandBox(title, message, detail, null, help, verificationText, commandButtons, + showCancelButton, mainIcon, SysIcons.Information, handler); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/threading/BrowserControllerBackgroundAction.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/threading/BrowserControllerBackgroundAction.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/threading/BrowserControllerBackgroundAction.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/threading/BrowserControllerBackgroundAction.cs index fc0623a064..6a66681e75 100644 --- a/source/ch/cyberduck/ui/controller/threading/BrowserControllerBackgroundAction.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/threading/BrowserControllerBackgroundAction.cs @@ -1,38 +1,38 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using ch.cyberduck.core.threading; - -namespace Ch.Cyberduck.Ui.Controller.Threading -{ - public abstract class BrowserControllerBackgroundAction : BrowserBackgroundAction - { - private readonly BrowserController _controller; - - protected BrowserControllerBackgroundAction(BrowserController controller) - : base(controller, controller.Session, controller.Cache) - { - _controller = controller; - } - - public BrowserController BrowserController - { - get { return _controller; } - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using ch.cyberduck.core.threading; + +namespace Ch.Cyberduck.Ui.Controller.Threading +{ + public abstract class BrowserControllerBackgroundAction : BrowserBackgroundAction + { + private readonly BrowserController _controller; + + protected BrowserControllerBackgroundAction(BrowserController controller) + : base(controller, controller.Session, controller.Cache) + { + _controller = controller; + } + + public BrowserController BrowserController + { + get { return _controller; } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/threading/SimpleDefaultMainAction.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/threading/SimpleDefaultMainAction.cs similarity index 96% rename from source/ch/cyberduck/ui/controller/threading/SimpleDefaultMainAction.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/threading/SimpleDefaultMainAction.cs index a71b25254a..8e5a4cd23b 100644 --- a/source/ch/cyberduck/ui/controller/threading/SimpleDefaultMainAction.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/threading/SimpleDefaultMainAction.cs @@ -1,39 +1,39 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using ch.cyberduck.core; -using ch.cyberduck.core.threading; - -namespace Ch.Cyberduck.Ui.Controller.Threading -{ - public class SimpleDefaultMainAction : ControllerMainAction - { - private readonly AsyncController.AsyncDelegate _background; - - public SimpleDefaultMainAction(AbstractController controller, AsyncController.AsyncDelegate main) - : base(controller) - { - _background = main; - } - - public override void run() - { - _background(); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using ch.cyberduck.core; +using ch.cyberduck.core.threading; + +namespace Ch.Cyberduck.Ui.Controller.Threading +{ + public class SimpleDefaultMainAction : ControllerMainAction + { + private readonly AsyncController.AsyncDelegate _background; + + public SimpleDefaultMainAction(AbstractController controller, AsyncController.AsyncDelegate main) + : base(controller) + { + _background = main; + } + + public override void run() + { + _background(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/threading/SimpleWindowMainAction.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/threading/SimpleWindowMainAction.cs similarity index 97% rename from source/ch/cyberduck/ui/controller/threading/SimpleWindowMainAction.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/threading/SimpleWindowMainAction.cs index ad255d8e53..619cdb90ba 100644 --- a/source/ch/cyberduck/ui/controller/threading/SimpleWindowMainAction.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/threading/SimpleWindowMainAction.cs @@ -1,35 +1,35 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -namespace Ch.Cyberduck.Ui.Controller.Threading -{ - public class SimpleWindowMainAction : WindowMainAction - { - private readonly AsyncController.AsyncDelegate _main; - - public SimpleWindowMainAction(AsyncController.AsyncDelegate main, WindowController c) - : base(c) - { - _main = main; - } - - public override void run() - { - _main(); - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +namespace Ch.Cyberduck.Ui.Controller.Threading +{ + public class SimpleWindowMainAction : WindowMainAction + { + private readonly AsyncController.AsyncDelegate _main; + + public SimpleWindowMainAction(AsyncController.AsyncDelegate main, WindowController c) + : base(c) + { + _main = main; + } + + public override void run() + { + _main(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/controller/threading/WindowMainAction.cs b/windows/src/main/csharp/ch/cyberduck/ui/controller/threading/WindowMainAction.cs similarity index 96% rename from source/ch/cyberduck/ui/controller/threading/WindowMainAction.cs rename to windows/src/main/csharp/ch/cyberduck/ui/controller/threading/WindowMainAction.cs index da5ef73057..d7e55e5154 100644 --- a/source/ch/cyberduck/ui/controller/threading/WindowMainAction.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/controller/threading/WindowMainAction.cs @@ -1,46 +1,46 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using ch.cyberduck.core.threading; - -namespace Ch.Cyberduck.Ui.Controller.Threading -{ - public abstract class WindowMainAction : ControllerMainAction - { - private readonly WindowController _controller; - - protected WindowMainAction(WindowController c) : base(c) - { - _controller = c; - } - - public WindowController Controller - { - get { return _controller; } - } - - /// - /// - /// - /// True if the window is still on screen - public override bool isValid() - { - return _controller.Visible; - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using ch.cyberduck.core.threading; + +namespace Ch.Cyberduck.Ui.Controller.Threading +{ + public abstract class WindowMainAction : ControllerMainAction + { + private readonly WindowController _controller; + + protected WindowMainAction(WindowController c) : base(c) + { + _controller = c; + } + + public WindowController Controller + { + get { return _controller; } + } + + /// + /// + /// + /// True if the window is still on screen + public override bool isValid() + { + return _controller.Visible; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/core/Commands.cs b/windows/src/main/csharp/ch/cyberduck/ui/core/Commands.cs similarity index 97% rename from source/ch/cyberduck/ui/core/Commands.cs rename to windows/src/main/csharp/ch/cyberduck/ui/core/Commands.cs index ca5e1faee0..0219c1a360 100644 --- a/source/ch/cyberduck/ui/core/Commands.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/core/Commands.cs @@ -1,165 +1,165 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Windows.Forms; - -namespace Ch.Cyberduck.Ui.Core -{ - /// - /// Group of commands which belongs to a view. - /// - public class Commands - { - private readonly List _commands = new List(); - - /// - /// Validate all commands - /// - public void Validate() - { - foreach (Command command in _commands) - { - command.Validate(); - } - } - - public void Add(ToolStripItem[] toolStripItems, MenuItem[] menuItems, EventHandler clickDelegate, - ValidateCommand validateDelegate) - { - _commands.Add(new Command(toolStripItems, menuItems, clickDelegate, validateDelegate)); - } - - /* - public void Add(Control[] controls, - EventHandler clickDelegate, - ValidateCommand validateDelegate) - { - _commands.Add(new Command(null, controls, clickDelegate, validateDelegate)); - } - */ - - public void Add(Control control, EventHandler clickDelegate, ValidateCommand validateDelegate) - { - _commands.Add(new Command(null, null, new[] {control}, clickDelegate, validateDelegate)); - } - - public void Add(Control control, ValidateCommand validateDelegate) - { - _commands.Add(new Command(null, null, new[] {control}, delegate { }, validateDelegate)); - } - - public void Add(ToolStripItem[] items, Control[] controls, MenuItem[] menuItems, EventHandler clickDelegate, - ValidateCommand validateDelegate) - { - _commands.Add(new Command(items, menuItems, controls, clickDelegate, validateDelegate)); - } - - /// - /// Wraps a main menu item, a context menu item and toolstrip button into a command. A command can - /// be validated (enable/disable) and executed. - /// - private class Command - { - private readonly EventHandler _clickCommandDelegate; - private readonly Control[] _controls; - private readonly MenuItem[] _menuItems; - private readonly ToolStripItem[] _toolStripItems; - private readonly ValidateCommand _validateCommandDelegate; - - public Command(ToolStripItem[] toolStripItems, MenuItem[] menuItems, Control[] controls, - EventHandler clickDelegate, ValidateCommand validateDelegate) - { - _toolStripItems = toolStripItems; - _menuItems = menuItems; - _controls = controls; - _validateCommandDelegate = validateDelegate; - _clickCommandDelegate = clickDelegate; - - if (toolStripItems != null) - foreach (ToolStripItem item in toolStripItems) - { - item.Click += _clickCommandDelegate; - } - - if (controls != null) - foreach (Control control in controls) - { - control.Click += _clickCommandDelegate; - } - if (menuItems != null) - { - foreach (MenuItem item in menuItems) - { - item.Click += _clickCommandDelegate; - } - } - } - - public Command(ToolStripItem[] toolStripItems, MenuItem[] menuItems, EventHandler clickDelegate, - ValidateCommand validateDelegate) - : this(toolStripItems, menuItems, null, clickDelegate, validateDelegate) - { - } - - /// - /// Validate this command. - /// - public void Validate() - { - bool enabled = _validateCommandDelegate(); - if (_toolStripItems != null) - foreach (ToolStripItem item in _toolStripItems) - { - item.Enabled = enabled; - } - if (_controls != null) - foreach (Control control in _controls) - { - control.Enabled = enabled; - } - if (_menuItems != null) - { - foreach (var item in _menuItems) - { - item.Enabled = enabled; - } - } - } - - ~Command() - { - if (_toolStripItems != null) - foreach (ToolStripItem item in _toolStripItems) - { - item.Click -= _clickCommandDelegate; - } - if (_controls != null) - foreach (Control control in _controls) - { - control.Click -= _clickCommandDelegate; - } - //apparently we do not need to remove the click handler from any MenuItem. Seems - //already removed at this point. - } - } - } - - public delegate bool ValidateCommand(); +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace Ch.Cyberduck.Ui.Core +{ + /// + /// Group of commands which belongs to a view. + /// + public class Commands + { + private readonly List _commands = new List(); + + /// + /// Validate all commands + /// + public void Validate() + { + foreach (Command command in _commands) + { + command.Validate(); + } + } + + public void Add(ToolStripItem[] toolStripItems, MenuItem[] menuItems, EventHandler clickDelegate, + ValidateCommand validateDelegate) + { + _commands.Add(new Command(toolStripItems, menuItems, clickDelegate, validateDelegate)); + } + + /* + public void Add(Control[] controls, + EventHandler clickDelegate, + ValidateCommand validateDelegate) + { + _commands.Add(new Command(null, controls, clickDelegate, validateDelegate)); + } + */ + + public void Add(Control control, EventHandler clickDelegate, ValidateCommand validateDelegate) + { + _commands.Add(new Command(null, null, new[] {control}, clickDelegate, validateDelegate)); + } + + public void Add(Control control, ValidateCommand validateDelegate) + { + _commands.Add(new Command(null, null, new[] {control}, delegate { }, validateDelegate)); + } + + public void Add(ToolStripItem[] items, Control[] controls, MenuItem[] menuItems, EventHandler clickDelegate, + ValidateCommand validateDelegate) + { + _commands.Add(new Command(items, menuItems, controls, clickDelegate, validateDelegate)); + } + + /// + /// Wraps a main menu item, a context menu item and toolstrip button into a command. A command can + /// be validated (enable/disable) and executed. + /// + private class Command + { + private readonly EventHandler _clickCommandDelegate; + private readonly Control[] _controls; + private readonly MenuItem[] _menuItems; + private readonly ToolStripItem[] _toolStripItems; + private readonly ValidateCommand _validateCommandDelegate; + + public Command(ToolStripItem[] toolStripItems, MenuItem[] menuItems, Control[] controls, + EventHandler clickDelegate, ValidateCommand validateDelegate) + { + _toolStripItems = toolStripItems; + _menuItems = menuItems; + _controls = controls; + _validateCommandDelegate = validateDelegate; + _clickCommandDelegate = clickDelegate; + + if (toolStripItems != null) + foreach (ToolStripItem item in toolStripItems) + { + item.Click += _clickCommandDelegate; + } + + if (controls != null) + foreach (Control control in controls) + { + control.Click += _clickCommandDelegate; + } + if (menuItems != null) + { + foreach (MenuItem item in menuItems) + { + item.Click += _clickCommandDelegate; + } + } + } + + public Command(ToolStripItem[] toolStripItems, MenuItem[] menuItems, EventHandler clickDelegate, + ValidateCommand validateDelegate) + : this(toolStripItems, menuItems, null, clickDelegate, validateDelegate) + { + } + + /// + /// Validate this command. + /// + public void Validate() + { + bool enabled = _validateCommandDelegate(); + if (_toolStripItems != null) + foreach (ToolStripItem item in _toolStripItems) + { + item.Enabled = enabled; + } + if (_controls != null) + foreach (Control control in _controls) + { + control.Enabled = enabled; + } + if (_menuItems != null) + { + foreach (var item in _menuItems) + { + item.Enabled = enabled; + } + } + } + + ~Command() + { + if (_toolStripItems != null) + foreach (ToolStripItem item in _toolStripItems) + { + item.Click -= _clickCommandDelegate; + } + if (_controls != null) + foreach (Control control in _controls) + { + control.Click -= _clickCommandDelegate; + } + //apparently we do not need to remove the click handler from any MenuItem. Seems + //already removed at this point. + } + } + } + + public delegate bool ValidateCommand(); } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/core/DragDropLib.cs b/windows/src/main/csharp/ch/cyberduck/ui/core/DragDropLib.cs similarity index 97% rename from source/ch/cyberduck/ui/core/DragDropLib.cs rename to windows/src/main/csharp/ch/cyberduck/ui/core/DragDropLib.cs index 111d980e8c..32c9f3082b 100644 --- a/source/ch/cyberduck/ui/core/DragDropLib.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/core/DragDropLib.cs @@ -1,2139 +1,2139 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -#region DragDropLibCore\DragDropHelper.cs - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Drawing.Imaging; -using System.IO; -using System.Runtime.InteropServices; -using System.Runtime.InteropServices.ComTypes; -using System.Runtime.Serialization; -using System.Runtime.Serialization.Formatters.Binary; -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Core; -using IDataObject = System.Runtime.InteropServices.ComTypes.IDataObject; - -/* - * Taken from, thanks Adam for a great post - * http://blogs.msdn.com/b/adamroot/archive/2008/02/19/shell-style-drag-and-drop-in-net-part-3.aspx?PageIndex=3 - */ - -namespace Ch.Cyberduck.Ui.Core -{ - [ComImport] - [Guid("4657278A-411B-11d2-839A-00C04FD918D0")] - public class DragDropHelper - { - } -} - -#endregion // DragDropLibCore\DragDropHelper.cs - -#region DragDropLibCore\IDragSourceHelper.cs - -namespace Ch.Cyberduck.Ui.Core -{ - [ComVisible(true)] - [ComImport] - [Guid("DE5BF786-477A-11D2-839D-00C04FD918D0")] - [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - public interface IDragSourceHelper - { - void InitializeFromBitmap([In, MarshalAs(UnmanagedType.Struct)] ref ShDragImage dragImage, - [In, MarshalAs(UnmanagedType.Interface)] IDataObject dataObject); - - void InitializeFromWindow([In] IntPtr hwnd, [In] ref Win32Point pt, - [In, MarshalAs(UnmanagedType.Interface)] IDataObject dataObject); - } - - [ComVisible(true)] - [ComImport] - [Guid("83E07D0D-0C5F-4163-BF1A-60B274051E40")] - [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - public interface IDragSourceHelper2 - { - void InitializeFromBitmap([In, MarshalAs(UnmanagedType.Struct)] ref ShDragImage dragImage, - [In, MarshalAs(UnmanagedType.Interface)] IDataObject dataObject); - - void InitializeFromWindow([In] IntPtr hwnd, [In] ref Win32Point pt, - [In, MarshalAs(UnmanagedType.Interface)] IDataObject dataObject); - - void SetFlags([In] int dwFlags); - } -} - -#endregion // DragDropLibCore\IDragSourceHelper.cs - -#region DragDropLibCore\IDropTargetHelper.cs - -namespace Ch.Cyberduck.Ui.Core -{ - [ComVisible(true)] - [ComImport] - [Guid("4657278B-411B-11D2-839A-00C04FD918D0")] - [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - public interface IDropTargetHelper - { - void DragEnter([In] IntPtr hwndTarget, [In, MarshalAs(UnmanagedType.Interface)] IDataObject dataObject, - [In] ref Win32Point pt, [In] DragDropEffects effect); - - void DragLeave(); - - void DragOver([In] ref Win32Point pt, [In] DragDropEffects effect); - - void Drop([In, MarshalAs(UnmanagedType.Interface)] IDataObject dataObject, [In] ref Win32Point pt, - [In] DragDropEffects effect); - - void Show([In] bool show); - } -} - -#endregion // DragDropLibCore\IDropTargetHelper.cs - -#region DragDropLibCore\NativeStructures.cs - -namespace Ch.Cyberduck.Ui.Core -{ - [StructLayout(LayoutKind.Sequential)] - public struct Win32Point - { - public int x; - public int y; - } - - [StructLayout(LayoutKind.Sequential)] - public struct Win32Size - { - public int cx; - public int cy; - } - - [StructLayout(LayoutKind.Sequential)] - public struct ShDragImage - { - public Win32Size sizeDragImage; - public Win32Point ptOffset; - public IntPtr hbmpDragImage; - public int crColorKey; - } - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Size = 1044)] - public struct DropDescription - { - public int type; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szMessage; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szInsert; - } -} - -#endregion // DragDropLibCore\NativeStructures.cs - -#region DragDropLibCore\DataObjectExtensions.cs - -namespace System.Runtime.InteropServices.ComTypes -{ - /// - /// Provides extended functionality for the COM IDataObject interface. - /// - public static class ComDataObjectExtensions - { - private const string DropDescriptionFormat = "DropDescription"; - - private const TYMED TYMED_ANY = - TYMED.TYMED_ENHMF | TYMED.TYMED_FILE | TYMED.TYMED_GDI | TYMED.TYMED_HGLOBAL | TYMED.TYMED_ISTORAGE | - TYMED.TYMED_ISTREAM | TYMED.TYMED_MFPICT; - - private static readonly Guid ManagedDataStamp = new Guid("D98D9FD6-FA46-4716-A769-F3451DFBE4B4"); - - [DllImport("user32.dll")] - private static extern uint RegisterClipboardFormat(string lpszFormatName); - - [DllImport("ole32.dll")] - private static extern void ReleaseStgMedium(ref STGMEDIUM pmedium); - - [DllImport("ole32.dll")] - private static extern int CreateStreamOnHGlobal(IntPtr hGlobal, bool fDeleteOnRelease, out IStream ppstm); - - // CFSTR_DROPDESCRIPTION - - /// - /// Sets the drop description for the drag image manager. - /// - /// The DataObject to set. - /// The drop description. - public static void SetDropDescription(this IDataObject dataObject, DropDescription dropDescription) - { - FORMATETC formatETC; - FillFormatETC(DropDescriptionFormat, TYMED.TYMED_HGLOBAL, out formatETC); - - // We need to set the drop description as an HGLOBAL. - // Allocate space ... - IntPtr pDD = Marshal.AllocHGlobal(Marshal.SizeOf(typeof (DropDescription))); - try - { - // ... and marshal the data - Marshal.StructureToPtr(dropDescription, pDD, false); - - // The medium wraps the HGLOBAL - STGMEDIUM medium; - medium.pUnkForRelease = null; - medium.tymed = TYMED.TYMED_HGLOBAL; - medium.unionmember = pDD; - - // Set the data - IDataObject dataObjectCOM = dataObject; - dataObjectCOM.SetData(ref formatETC, ref medium, true); - } - catch - { - // If we failed, we need to free the HGLOBAL memory - Marshal.FreeHGlobal(pDD); - } - } - - /// - /// Gets the DropDescription format data. - /// - /// The DataObject. - /// The DropDescription, if set. - public static object GetDropDescription(this IDataObject dataObject) - { - FORMATETC formatETC; - FillFormatETC(DropDescriptionFormat, TYMED.TYMED_HGLOBAL, out formatETC); - - if (0 == dataObject.QueryGetData(ref formatETC)) - { - STGMEDIUM medium; - dataObject.GetData(ref formatETC, out medium); - try - { - return (DropDescription) Marshal.PtrToStructure(medium.unionmember, typeof (DropDescription)); - } - finally - { - ReleaseStgMedium(ref medium); - } - } - - return null; - } - - // Combination of all non-null TYMEDs - - /// - /// Sets up an advisory connection to the data object. - /// - /// The data object on which to set the advisory connection. - /// The advisory sink. - /// The format on which to callback on. - /// Advisory flags. Can be 0. - /// The ID of the newly created advisory connection. - public static int Advise(this IDataObject dataObject, IAdviseSink sink, string format, ADVF advf) - { - // Internally, we'll listen for any TYMED - FORMATETC formatETC; - FillFormatETC(format, TYMED_ANY, out formatETC); - - int connection; - int hr = dataObject.DAdvise(ref formatETC, advf, sink, out connection); - if (hr != 0) - Marshal.ThrowExceptionForHR(hr); - return connection; - } - - /// - /// Fills a FORMATETC structure. - /// - /// The format name. - /// The accepted TYMED. - /// The structure to fill. - private static void FillFormatETC(string format, TYMED tymed, out FORMATETC formatETC) - { - formatETC.cfFormat = (short) RegisterClipboardFormat(format); - formatETC.dwAspect = DVASPECT.DVASPECT_CONTENT; - formatETC.lindex = -1; - formatETC.ptd = IntPtr.Zero; - formatETC.tymed = tymed; - } - - // Identifies data that we need to do custom marshaling on - - /// - /// Sets managed data to a clipboard DataObject. - /// - /// The DataObject to set the data on. - /// The clipboard format. - /// The data object. - /// - /// Because the underlying data store is not storing managed objects, but - /// unmanaged ones, this function provides intelligent conversion, allowing - /// you to set unmanaged data into the COM implemented IDataObject. - public static void SetManagedData(this IDataObject dataObject, string format, object data) - { - // Initialize the format structure - FORMATETC formatETC; - FillFormatETC(format, TYMED.TYMED_HGLOBAL, out formatETC); - - // Serialize/marshal our data into an unmanaged medium - STGMEDIUM medium; - GetMediumFromObject(data, out medium); - try - { - // Set the data on our data object - dataObject.SetData(ref formatETC, ref medium, true); - } - catch - { - // On exceptions, release the medium - ReleaseStgMedium(ref medium); - throw; - } - } - - /// - /// Gets managed data from a clipboard DataObject. - /// - /// The DataObject to obtain the data from. - /// The format for which to get the data in. - /// The data object instance. - public static object GetManagedData(this IDataObject dataObject, string format) - { - FORMATETC formatETC; - FillFormatETC(format, TYMED.TYMED_HGLOBAL, out formatETC); - - // Get the data as a stream - STGMEDIUM medium; - dataObject.GetData(ref formatETC, out medium); - - IStream nativeStream; - try - { - int hr = CreateStreamOnHGlobal(medium.unionmember, true, out nativeStream); - if (hr != 0) - { - return null; - } - } - finally - { - ReleaseStgMedium(ref medium); - } - - - // Convert the native stream to a managed stream - STATSTG statstg; - nativeStream.Stat(out statstg, 0); - if (statstg.cbSize > int.MaxValue) - throw new NotSupportedException(); - byte[] buf = new byte[statstg.cbSize]; - nativeStream.Read(buf, (int) statstg.cbSize, IntPtr.Zero); - MemoryStream dataStream = new MemoryStream(buf); - - // Check for our stamp - int sizeOfGuid = Marshal.SizeOf(typeof (Guid)); - byte[] guidBytes = new byte[sizeOfGuid]; - if (dataStream.Length >= sizeOfGuid) - { - if (sizeOfGuid == dataStream.Read(guidBytes, 0, sizeOfGuid)) - { - Guid guid = new Guid(guidBytes); - if (ManagedDataStamp.Equals(guid)) - { - // Stamp matched, so deserialize - BinaryFormatter formatter = new BinaryFormatter(); - Type dataType = (Type) formatter.Deserialize(dataStream); - object data2 = formatter.Deserialize(dataStream); - if (data2.GetType() == dataType) - return data2; - else if (data2 is string) - return ConvertDataFromString((string) data2, dataType); - else - return null; - } - } - } - - // Stamp didn't match... attempt to reset the seek pointer - if (dataStream.CanSeek) - dataStream.Position = 0; - return null; - } - - /// - /// Serializes managed data to an HGLOBAL. - /// - /// The managed data object. - /// An STGMEDIUM pointing to the allocated HGLOBAL. - private static void GetMediumFromObject(object data, out STGMEDIUM medium) - { - // We'll serialize to a managed stream temporarily - MemoryStream stream = new MemoryStream(); - - // Write an indentifying stamp, so we can recognize this as custom - // marshaled data. - stream.Write(ManagedDataStamp.ToByteArray(), 0, Marshal.SizeOf(typeof (Guid))); - - // Now serialize the data. Note, if the data is not directly serializable, - // we'll try type conversion. Also, we serialize the type. That way, - // during deserialization, we know which type to convert back to, if - // appropriate. - BinaryFormatter formatter = new BinaryFormatter(); - formatter.Serialize(stream, data.GetType()); - formatter.Serialize(stream, GetAsSerializable(data)); - - // Now copy to an HGLOBAL - byte[] bytes = stream.GetBuffer(); - IntPtr p = Marshal.AllocHGlobal(bytes.Length); - try - { - Marshal.Copy(bytes, 0, p, bytes.Length); - } - catch - { - // Make sure to free the memory on exceptions - Marshal.FreeHGlobal(p); - throw; - } - - // Now allocate an STGMEDIUM to wrap the HGLOBAL - medium.unionmember = p; - medium.tymed = TYMED.TYMED_HGLOBAL; - medium.pUnkForRelease = null; - } - - /// - /// Gets a serializable object representing the data. - /// - /// The data. - /// If the data is serializable, then it is returned. Otherwise, - /// type conversion is attempted. If successful, a string value will be - /// returned. - private static object GetAsSerializable(object obj) - { - // If the data is directly serializable, run with it - if (obj.GetType().IsSerializable) - return obj; - - // Attempt type conversion to a string, but only if we know it can be converted back - TypeConverter conv = GetTypeConverterForType(obj.GetType()); - if (conv != null && conv.CanConvertTo(typeof (string)) && conv.CanConvertFrom(typeof (string))) - return conv.ConvertToInvariantString(obj); - - throw new NotSupportedException("Cannot serialize the object"); - } - - /// - /// Converts data from a string to the specified format. - /// - /// The data to convert. - /// The target data type. - /// Returns the converted data instance. - private static object ConvertDataFromString(string data, Type dataType) - { - TypeConverter conv = GetTypeConverterForType(dataType); - if (conv != null && conv.CanConvertFrom(typeof (string))) - return conv.ConvertFromInvariantString(data); - - throw new NotSupportedException("Cannot convert data"); - } - - /// - /// Gets a TypeConverter instance for the specified type. - /// - /// The type. - /// An instance of a TypeConverter for the type, if one exists. - private static TypeConverter GetTypeConverterForType(Type dataType) - { - TypeConverterAttribute[] typeConverterAttrs = - (TypeConverterAttribute[]) dataType.GetCustomAttributes(typeof (TypeConverterAttribute), true); - if (typeConverterAttrs.Length > 0) - { - Type convType = Type.GetType(typeConverterAttrs[0].ConverterTypeName); - return (TypeConverter) Activator.CreateInstance(convType); - } - - return null; - } - } -} - -#endregion // DragDropLibCore\DataObjectExtensions.cs - -#region DragDropLibCore\DataObject.cs - -namespace Ch.Cyberduck.Ui.Core -{ - /// - /// Implements the COM version of IDataObject including SetData. - /// - /// - /// Use this object when using shell (or other unmanged) features - /// that utilize the clipboard and/or drag and drop. - /// The System.Windows.DataObject (.NET 3.0) and - /// System.Windows.Forms.DataObject do not support SetData from their COM - /// IDataObject interface implementation. - /// To use this object with .NET drag and drop, create an instance - /// of System.Windows.DataObject (.NET 3.0) or System.Window.Forms.DataObject - /// passing an instance of DataObject as the only constructor parameter. For - /// example: - /// - /// System.Windows.DataObject data = new System.Windows.DataObject(new DragDropLib.DataObject()); - /// - /// - [ComVisible(true)] - public class DataObject : IDataObject, IDisposable - { - // These are helper functions for managing STGMEDIUM structures - - // Our internal storage is a simple list - private const int DV_E_CLIPFORMAT = unchecked((int) 0x8004006A); - private const int DV_E_DVASPECT = unchecked((int) 0x8004006B); - private const int DV_E_FORMATETC = unchecked((int) 0x80040064); - private const int DV_E_TYMED = unchecked((int) 0x80040069); - private const int OLE_E_ADVISENOTSUPPORTED = unchecked((int) 0x80040003); - private readonly IDictionary connections; - private readonly IList> storage; - // Keeps a progressive unique connection id - private int nextConnectionId = 1; - // List of advisory connections - - /// - /// Creates an empty instance of DataObject. - /// - public DataObject() - { - storage = new List>(); - connections = new Dictionary(); - } - - public int EnumDAdvise(out IEnumSTATDATA enumAdvise) - { - throw Marshal.GetExceptionForHR(OLE_E_ADVISENOTSUPPORTED); - } - - public int GetCanonicalFormatEtc(ref FORMATETC formatIn, out FORMATETC formatOut) - { - formatOut = formatIn; - return DV_E_FORMATETC; - } - - /// - /// Adds an advisory connection for the specified format. - /// - /// The format for which this sink is called for changes. - /// Advisory flags to specify callback behavior. - /// The IAdviseSink to call for this connection. - /// Returns the new connection's ID. - /// An HRESULT. - public int DAdvise(ref FORMATETC pFormatetc, ADVF advf, IAdviseSink adviseSink, out int connection) - { - // Check that the specified advisory flags are supported. - const ADVF ADVF_ALLOWED = ADVF.ADVF_NODATA | ADVF.ADVF_ONLYONCE | ADVF.ADVF_PRIMEFIRST; - if ((int) ((advf | ADVF_ALLOWED) ^ ADVF_ALLOWED) != 0) - { - connection = 0; - return OLE_E_ADVISENOTSUPPORTED; - } - - // Create and insert an entry for the connection list - AdviseEntry entry = new AdviseEntry(ref pFormatetc, advf, adviseSink); - connections.Add(nextConnectionId, entry); - connection = nextConnectionId; - nextConnectionId++; - - // If the ADVF_PRIMEFIRST flag is specified and the data exists, - // raise the DataChanged event now. - if ((advf & ADVF.ADVF_PRIMEFIRST) == ADVF.ADVF_PRIMEFIRST) - { - KeyValuePair dataEntry; - if (GetDataEntry(ref pFormatetc, out dataEntry)) - RaiseDataChanged(connection, ref dataEntry); - } - - // S_OK - return 0; - } - - /// - /// Removes an advisory connection. - /// - /// The connection id to remove. - public void DUnadvise(int connection) - { - connections.Remove(connection); - } - - /// - /// Gets an enumerator for the formats contained in this DataObject. - /// - /// The direction of the data. - /// An instance of the IEnumFORMATETC interface. - public IEnumFORMATETC EnumFormatEtc(DATADIR direction) - { - // We only support GET - if (DATADIR.DATADIR_GET == direction) - return new EnumFORMATETC(storage); - - throw new NotImplementedException("OLE_S_USEREG"); - } - - /// - /// Gets the specified data. - /// - /// The requested data format. - /// When the function returns, contains the requested data. - public void GetData(ref FORMATETC format, out STGMEDIUM medium) - { - medium = new STGMEDIUM(); - GetDataHere(ref format, ref medium); - } - - /// - /// Gets the specified data. - /// - /// The requested data format. - /// When the function returns, contains the requested data. - /// Differs from GetData only in that the STGMEDIUM storage is - /// allocated and owned by the caller. - public void GetDataHere(ref FORMATETC format, ref STGMEDIUM medium) - { - // Locate the data - KeyValuePair dataEntry; - if (GetDataEntry(ref format, out dataEntry)) - { - STGMEDIUM source = dataEntry.Value; - medium = CopyMedium(ref source); - return; - } - - // Didn't find it. Return an empty data medium. - medium = default(STGMEDIUM); - } - - /// - /// Determines if data of the requested format is present. - /// - /// The request data format. - /// Returns the status of the request. If the data is present, S_OK is returned. - /// If the data is not present, an error code with the best guess as to the reason is returned. - public int QueryGetData(ref FORMATETC format) - { - // We only support CONTENT aspect - if ((DVASPECT.DVASPECT_CONTENT & format.dwAspect) == 0) - return DV_E_DVASPECT; - - int ret = DV_E_TYMED; - - // Try to locate the data - // TODO: The ret, if not S_OK, is only relevant to the last item - foreach (KeyValuePair pair in storage) - { - if ((pair.Key.tymed & format.tymed) > 0) - { - if (pair.Key.cfFormat == format.cfFormat) - { - // Found it, return S_OK; - return 0; - } - else - { - // Found the medium type, but wrong format - ret = DV_E_CLIPFORMAT; - } - } - else - { - // Mismatch on medium type - ret = DV_E_TYMED; - } - } - - return ret; - } - - /// - /// Sets data in the specified format into storage. - /// - /// The format of the data. - /// The data. - /// If true, ownership of the medium's memory will be transferred - /// to this object. If false, a copy of the medium will be created and maintained, and - /// the caller is responsible for the memory of the medium it provided. - public void SetData(ref FORMATETC formatIn, ref STGMEDIUM medium, bool release) - { - // If the format exists in our storage, remove it prior to resetting it - foreach (KeyValuePair pair in storage) - { - if ((pair.Key.tymed & formatIn.tymed) > 0 && pair.Key.dwAspect == formatIn.dwAspect && - pair.Key.cfFormat == formatIn.cfFormat) - { - STGMEDIUM releaseMedium = pair.Value; - ReleaseStgMedium(ref releaseMedium); - storage.Remove(pair); - break; - } - } - - // If release is true, we'll take ownership of the medium. - // If not, we'll make a copy of it. - STGMEDIUM sm = medium; - if (!release) - sm = CopyMedium(ref medium); - - // Add it to the internal storage - KeyValuePair addPair = new KeyValuePair(formatIn, sm); - storage.Add(addPair); - - RaiseDataChanged(ref addPair); - } - - /// - /// Releases resources. - /// - public void Dispose() - { - Dispose(true); - } - - [DllImport("urlmon.dll")] - private static extern int CopyStgMedium(ref STGMEDIUM pcstgmedSrc, ref STGMEDIUM pstgmedDest); - - [DllImport("ole32.dll")] - private static extern void ReleaseStgMedium(ref STGMEDIUM pmedium); - - /// - /// Releases unmanaged resources. - /// - ~DataObject() - { - Dispose(false); - } - - /// - /// Clears the internal storage array. - /// - /// - /// ClearStorage is called by the IDisposable.Dispose method implementation - /// to make sure all unmanaged references are released properly. - /// - private void ClearStorage() - { - foreach (KeyValuePair pair in storage) - { - STGMEDIUM medium = pair.Value; - ReleaseStgMedium(ref medium); - } - storage.Clear(); - } - - /// - /// Releases resources. - /// - /// Indicates if the call was made by a managed caller, or the garbage collector. - /// True indicates that someone called the Dispose method directly. False indicates that the garbage collector - /// is finalizing the release of the object instance. - private void Dispose(bool disposing) - { - if (disposing) - { - // No managed objects to release - } - - // Always release unmanaged objects - ClearStorage(); - } - - /// - /// Creates a copy of the STGMEDIUM structure. - /// - /// The data to copy. - /// The copied data. - private STGMEDIUM CopyMedium(ref STGMEDIUM medium) - { - STGMEDIUM sm = new STGMEDIUM(); - int hr = CopyStgMedium(ref medium, ref sm); - if (hr != 0) - throw Marshal.GetExceptionForHR(hr); - - return sm; - } - - /// - /// Gets a data entry by the specified format. - /// - /// The format to locate the data entry for. - /// The located data entry. - /// True if the data entry was found, otherwise False. - private bool GetDataEntry(ref FORMATETC pFormatetc, out KeyValuePair dataEntry) - { - foreach (KeyValuePair entry in storage) - { - FORMATETC format = entry.Key; - if (IsFormatCompatible(ref pFormatetc, ref format)) - { - dataEntry = entry; - return true; - } - } - - // Not found... default allocate the out param - dataEntry = default(KeyValuePair); - return false; - } - - /// - /// Raises the DataChanged event for the specified connection. - /// - /// The connection id. - /// The data entry for which to raise the event. - private void RaiseDataChanged(int connection, ref KeyValuePair dataEntry) - { - AdviseEntry adviseEntry = connections[connection]; - FORMATETC format = dataEntry.Key; - STGMEDIUM medium; - if ((adviseEntry.advf & ADVF.ADVF_NODATA) != ADVF.ADVF_NODATA) - medium = dataEntry.Value; - else - medium = default(STGMEDIUM); - - adviseEntry.sink.OnDataChange(ref format, ref medium); - - if ((adviseEntry.advf & ADVF.ADVF_ONLYONCE) == ADVF.ADVF_ONLYONCE) - connections.Remove(connection); - } - - /// - /// Raises the DataChanged event for any advisory connections that - /// are listening for it. - /// - /// The relevant data entry. - private void RaiseDataChanged(ref KeyValuePair dataEntry) - { - foreach (KeyValuePair connection in connections) - { - if (IsFormatCompatible(connection.Value.format, dataEntry.Key)) - RaiseDataChanged(connection.Key, ref dataEntry); - } - } - - /// - /// Determines if the formats are compatible. - /// - /// A FORMATETC. - /// A FORMATETC. - /// True if the formats are compatible, otherwise False. - /// Compatible formats have the same DVASPECT, same format ID, and share - /// at least one TYMED. - private bool IsFormatCompatible(FORMATETC format1, FORMATETC format2) - { - return IsFormatCompatible(ref format1, ref format2); - } - - /// - /// Determines if the formats are compatible. - /// - /// A FORMATETC. - /// A FORMATETC. - /// True if the formats are compatible, otherwise False. - /// Compatible formats have the same DVASPECT, same format ID, and share - /// at least one TYMED. - private bool IsFormatCompatible(ref FORMATETC format1, ref FORMATETC format2) - { - return ((format1.tymed & format2.tymed) > 0 && format1.dwAspect == format2.dwAspect && - format1.cfFormat == format2.cfFormat); - } - - private class AdviseEntry - { - public readonly ADVF advf; - public readonly FORMATETC format; - public readonly IAdviseSink sink; - - public AdviseEntry(ref FORMATETC format, ADVF advf, IAdviseSink sink) - { - this.format = format; - this.advf = advf; - this.sink = sink; - } - } - - /// - /// Helps enumerate the formats available in our DataObject class. - /// - [ComVisible(true)] - private class EnumFORMATETC : IEnumFORMATETC - { - // Keep an array of the formats for enumeration - private readonly FORMATETC[] formats; - // The index of the next item - private int currentIndex; - - /// - /// Creates an instance from a list of key value pairs. - /// - /// List of FORMATETC/STGMEDIUM key value pairs - internal EnumFORMATETC(IList> storage) - { - // Get the formats from the list - formats = new FORMATETC[storage.Count]; - for (int i = 0; i < formats.Length; i++) - formats[i] = storage[i].Key; - } - - /// - /// Creates an instance from an array of FORMATETC's. - /// - /// Array of formats to enumerate. - private EnumFORMATETC(FORMATETC[] formats) - { - // Get the formats as a copy of the array - this.formats = new FORMATETC[formats.Length]; - formats.CopyTo(this.formats, 0); - } - - /// - /// Creates a clone of this enumerator. - /// - /// When this function returns, contains a new instance of IEnumFORMATETC. - public void Clone(out IEnumFORMATETC newEnum) - { - EnumFORMATETC ret = new EnumFORMATETC(formats); - ret.currentIndex = currentIndex; - newEnum = ret; - } - - /// - /// Retrieves the next elements from the enumeration. - /// - /// The number of elements to retrieve. - /// An array to receive the formats requested. - /// An array to receive the number of element fetched. - /// If the fetched number of formats is the same as the requested number, S_OK is returned. - /// There are several reasons S_FALSE may be returned: (1) The requested number of elements is less than - /// or equal to zero. (2) The rgelt parameter equals null. (3) There are no more elements to enumerate. - /// (4) The requested number of elements is greater than one and pceltFetched equals null or does not - /// have at least one element in it. (5) The number of fetched elements is less than the number of - /// requested elements. - public int Next(int celt, FORMATETC[] rgelt, int[] pceltFetched) - { - // Start with zero fetched, in case we return early - if (pceltFetched != null && pceltFetched.Length > 0) - pceltFetched[0] = 0; - - // This will count down as we fetch elements - int cReturn = celt; - - // Short circuit if they didn't request any elements, or didn't - // provide room in the return array, or there are not more elements - // to enumerate. - if (celt <= 0 || rgelt == null || currentIndex >= formats.Length) - return 1; // S_FALSE - - // If the number of requested elements is not one, then we must - // be able to tell the caller how many elements were fetched. - if ((pceltFetched == null || pceltFetched.Length < 1) && celt != 1) - return 1; // S_FALSE - - // If the number of elements in the return array is too small, we - // throw. This is not a likely scenario, hence the exception. - if (rgelt.Length < celt) - throw new ArgumentException( - "The number of elements in the return array is less than the number of elements requested"); - - // Fetch the elements. - for (int i = 0; currentIndex < formats.Length && cReturn > 0; i++, cReturn--, currentIndex++) - rgelt[i] = formats[currentIndex]; - - // Return the number of elements fetched - if (pceltFetched != null && pceltFetched.Length > 0) - pceltFetched[0] = celt - cReturn; - - // cReturn has the number of elements requested but not fetched. - // It will be greater than zero, if multiple elements were requested - // but we hit the end of the enumeration. - return (cReturn == 0) ? 0 : 1; // S_OK : S_FALSE - } - - /// - /// Resets the state of enumeration. - /// - /// S_OK - public int Reset() - { - currentIndex = 0; - return 0; // S_OK - } - - /// - /// Skips the number of elements requested. - /// - /// The number of elements to skip. - /// If there are not enough remaining elements to skip, returns S_FALSE. Otherwise, S_OK is returned. - public int Skip(int celt) - { - if (currentIndex + celt > formats.Length) - return 1; // S_FALSE - - currentIndex += celt; - return 0; // S_OK - } - } - } -} - -#endregion // DragDropLibCore\DataObject.cs - -#region SwfDragDropLib\SwfDataObjectExtensions.cs - -namespace System.Windows.Forms -{ - using ComIDataObject = Runtime.InteropServices.ComTypes.IDataObject; - - public enum DropImageType - { - Invalid = -1, - None = 0, - Copy = DragDropEffects.Copy, - Move = DragDropEffects.Move, - Link = DragDropEffects.Link, - Label = 6, - Warning = 7 - } - - /// - /// Provides extended functionality to the System.Windows.Forms.IDataObject interface. - /// - public static class SwfDataObjectExtensions - { - [DllImport("gdiplus.dll")] - private static extern bool DeleteObject(IntPtr hgdi); - - [DllImport("ole32.dll")] - private static extern void ReleaseStgMedium(ref STGMEDIUM pmedium); - - /// - /// Sets the drag image as the rendering of a control. - /// - /// The DataObject to set the drag image on. - /// The Control to render as the drag image. - /// The location of the cursor relative to the control. - public static void SetDragImage(this IDataObject dataObject, Control control, Point cursorOffset) - { - int width = control.Width; - int height = control.Height; - - Bitmap bmp = new Bitmap(width, height); - control.DrawToBitmap(bmp, new Rectangle(0, 0, width, height)); - - SetDragImage(dataObject, bmp, cursorOffset); - } - - /// - /// Sets the drag image. - /// - /// The DataObject to set the drag image on. - /// The drag image. - /// The location of the cursor relative to the image. - public static void SetDragImage(this IDataObject dataObject, Image image, Point cursorOffset) - { - SetDragImage((ComIDataObject) dataObject, image, cursorOffset); - } - - /// - /// Sets the drag image. - /// - /// The DataObject to set the drag image on. - /// The drag image. - /// The location of the cursor relative to the image. - public static void SetDragImage(this ComIDataObject dataObject, Image image, Point cursorOffset) - { - ShDragImage shdi = new ShDragImage(); - - Win32Size size; - size.cx = image.Width; - size.cy = image.Height; - shdi.sizeDragImage = size; - - Win32Point wpt; - wpt.x = cursorOffset.X; - wpt.y = cursorOffset.Y; - shdi.ptOffset = wpt; - - shdi.crColorKey = Color.Magenta.ToArgb(); - - // This HBITMAP will be managed by the DragDropHelper - // as soon as we pass it to InitializeFromBitmap. If we fail - // to make the hand off, we'll delete it to prevent a mem leak. - IntPtr hbmp = GetHbitmapFromImage(image); - shdi.hbmpDragImage = hbmp; - - try - { - IDragSourceHelper sourceHelper = (IDragSourceHelper) new DragDropHelper(); - - try - { - sourceHelper.InitializeFromBitmap(ref shdi, dataObject); - } - catch (NotImplementedException ex) - { - throw new Exception( - "A NotImplementedException was caught. This could be because you forgot to construct your DataObject using a DragDropLib.DataObject", - ex); - } - } - catch - { - DeleteObject(hbmp); - } - } - - /// - /// Gets an HBITMAP from any image. - /// - /// The image to get an HBITMAP from. - /// An HBITMAP pointer. - /// - /// The caller is responsible to call DeleteObject on the HBITMAP. - /// - private static IntPtr GetHbitmapFromImage(Image image) - { - if (image is Bitmap) - { - return ((Bitmap) image).GetHbitmap(); - } - else - { - Bitmap bmp = new Bitmap(image); - return bmp.GetHbitmap(); - } - } - - /// - /// Sets the drop description for the drag image manager. - /// - /// The DataObject to set. - /// The type of the drop image. - /// The format string for the description. - /// The parameter for the drop description. - /// - /// When setting the drop description, the text can be set in two part, - /// which will be rendered slightly differently to distinguish the description - /// from the subject. For example, the format can be set as "Move to %1" and - /// the insert as "Temp". When rendered, the "%1" in format will be replaced - /// with "Temp", but "Temp" will be rendered slightly different from "Move to ". - /// - public static void SetDropDescription(this IDataObject dataObject, DropImageType type, string format, - string insert) - { - if (format != null && format.Length > 259) - throw new ArgumentException("Format string exceeds the maximum allowed length of 259.", "format"); - if (insert != null && insert.Length > 259) - throw new ArgumentException("Insert string exceeds the maximum allowed length of 259.", "insert"); - - // Fill the structure - DropDescription dd; - dd.type = (int) type; - dd.szMessage = format; - dd.szInsert = insert; - - ((ComIDataObject) dataObject).SetDropDescription(dd); - } - - /// - /// Sets managed data to a clipboard DataObject. - /// - /// The DataObject to set the data on. - /// The clipboard format. - /// The data object. - /// - /// Because the underlying data store is not storing managed objects, but - /// unmanaged ones, this function provides intelligent conversion, allowing - /// you to set unmanaged data into the COM implemented IDataObject. - public static void SetDataEx(this IDataObject dataObject, string format, object data) - { - DataFormats.Format dataFormat = DataFormats.GetFormat(format); - - // Initialize the format structure - FORMATETC formatETC = new FORMATETC(); - formatETC.cfFormat = (short) dataFormat.Id; - formatETC.dwAspect = DVASPECT.DVASPECT_CONTENT; - formatETC.lindex = -1; - formatETC.ptd = IntPtr.Zero; - - // Try to discover the TYMED from the format and data - TYMED tymed = GetCompatibleTymed(format, data); - // If a TYMED was found, we can use the system DataObject - // to convert our value for us. - if (tymed != TYMED.TYMED_NULL) - { - formatETC.tymed = tymed; - - // Set data on an empty DataObject instance - DataObject conv = new DataObject(); - conv.SetData(format, true, data); - - // Now retrieve the data, using the COM interface. - // This will perform a managed to unmanaged conversion for us. - STGMEDIUM medium; - ((ComIDataObject) conv).GetData(ref formatETC, out medium); - try - { - // Now set the data on our data object - ((ComIDataObject) dataObject).SetData(ref formatETC, ref medium, true); - } - catch - { - // On exceptions, release the medium - ReleaseStgMedium(ref medium); - throw; - } - } - else - { - // Since we couldn't determine a TYMED, this data - // is likely custom managed data, and won't be used - // by unmanaged code, so we'll use our custom marshaling - // implemented by our COM IDataObject extensions. - - ((ComIDataObject) dataObject).SetManagedData(format, data); - } - } - - /// - /// Gets a system compatible TYMED for the given format. - /// - /// The data format. - /// The data. - /// A TYMED value, indicating a system compatible TYMED that can - /// be used for data marshaling. - private static TYMED GetCompatibleTymed(string format, object data) - { - if (IsFormatEqual(format, DataFormats.Bitmap) && data is Bitmap) - return TYMED.TYMED_GDI; - if (IsFormatEqual(format, DataFormats.EnhancedMetafile)) - return TYMED.TYMED_ENHMF; - if (data is Stream || IsFormatEqual(format, DataFormats.Html) || IsFormatEqual(format, DataFormats.Text) || - IsFormatEqual(format, DataFormats.Rtf) || IsFormatEqual(format, DataFormats.OemText) || - IsFormatEqual(format, DataFormats.UnicodeText) || IsFormatEqual(format, "ApplicationTrust") || - IsFormatEqual(format, DataFormats.FileDrop) || IsFormatEqual(format, "FileName") || - IsFormatEqual(format, "FileNameW") || IsFormatEqual(format, "FileGroupDescriptorW")) - return TYMED.TYMED_HGLOBAL; - if (IsFormatEqual(format, DataFormats.Dib) && data is Image) - return TYMED.TYMED_NULL; - if (IsFormatEqual(format, typeof (Bitmap).FullName)) - return TYMED.TYMED_HGLOBAL; - if (IsFormatEqual(format, DataFormats.EnhancedMetafile) || data is Metafile) - return TYMED.TYMED_NULL; - if (IsFormatEqual(format, DataFormats.Serializable) || (data is ISerializable) || - ((data != null) && data.GetType().IsSerializable)) - return TYMED.TYMED_HGLOBAL; - - return TYMED.TYMED_NULL; - } - - /// - /// Compares the equality of two clipboard formats. - /// - /// First format. - /// Second format. - /// True if the formats are equal. False otherwise. - private static bool IsFormatEqual(string formatA, string formatB) - { - return string.CompareOrdinal(formatA, formatB) == 0; - } - - /// - /// Gets managed data from a clipboard DataObject. - /// - /// The DataObject to obtain the data from. - /// The format for which to get the data in. - /// The data object instance. - public static object GetDataEx(this IDataObject dataObject, string format) - { - // Get the data - object data = dataObject.GetData(format, true); - - // If the data is a stream, we'll check to see if it - // is stamped by us for custom marshaling - if (data is Stream) - { - object data2 = ((ComIDataObject) dataObject).GetManagedData(format); - if (data2 != null) - return data2; - } - - return data; - } - } -} - -#endregion // SwfDragDropLib\SwfDataObjectExtensions.cs - -#region SwfDragDropLib\SwfDragDropLibExtensions.cs - -namespace Ch.Cyberduck.Ui.Core -{ - public static class SwfDragDropLibExtensions - { - /// - /// Converts a System.Windows.Point value to a DragDropLib.Win32Point value. - /// - /// Input value. - /// Converted value. - public static Win32Point ToWin32Point(this Point pt) - { - Win32Point wpt = new Win32Point(); - wpt.x = pt.X; - wpt.y = pt.Y; - return wpt; - } - } -} - -#endregion // SwfDragDropLib\SwfDragDropLibExtensions.cs - -#region SwfDragDropLib\SwfDropTargetHelper.cs - -namespace System.Windows.Forms -{ - public static class DropTargetHelper - { - /// - /// Internal cache of IDataObjects related to drop targets. - /// - private static readonly IDictionary s_dataContext = new Dictionary(); - - /// - /// Internal instance of the DragDropHelper. - /// - private static readonly IDropTargetHelper s_instance = (IDropTargetHelper) new DragDropHelper(); - - /// - /// Notifies the DragDropHelper that the specified Control received - /// a DragEnter event. - /// - /// The Control the received the DragEnter event. - /// The DataObject containing a drag image. - /// The current cursor's offset relative to the window. - /// The accepted drag drop effect. - public static void DragEnter(Control control, IDataObject data, Point cursorOffset, DragDropEffects effect) - { - s_instance.DragEnter(control, data, cursorOffset, effect); - } - - /// - /// Sets the drop description of the IDataObject and then notifies the - /// DragDropHelper that the specified Control received a DragEnter event. - /// - /// The Control the received the DragEnter event. - /// The DataObject containing a drag image. - /// The current cursor's offset relative to the window. - /// The accepted drag drop effect. - /// The drop description message. - /// The drop description insert. - /// - /// Because the DragLeave event in SWF does not provide the IDataObject in the - /// event args, this DragEnter override of the DropTargetHelper will cache a - /// copy of the IDataObject based on the provided Control so that it may be - /// cleared using the DragLeave override that takes a Control parameter. Note that - /// if you use this override of DragEnter, you must call the DragLeave override - /// that takes a Control parameter to avoid a possible memory leak. However, calling - /// this method multiple times with the same Control parameter while not calling the - /// DragLeave method will not leak memory. - /// - public static void DragEnter(Control control, IDataObject data, Point cursorOffset, DragDropEffects effect, - string descriptionMessage, string descriptionInsert) - { - data.SetDropDescription((DropImageType) effect, descriptionMessage, descriptionInsert); - DragEnter(control, data, cursorOffset, effect); - - if (!s_dataContext.ContainsKey(control)) - s_dataContext.Add(control, data); - else - s_dataContext[control] = data; - } - - /// - /// Notifies the DragDropHelper that the current Control received - /// a DragOver event. - /// - /// The current cursor's offset relative to the window. - /// The accepted drag drop effect. - public static void DragOver(Point cursorOffset, DragDropEffects effect) - { - s_instance.DragOver(cursorOffset, effect); - } - - /// - /// Notifies the DragDropHelper that the current Control received - /// a DragLeave event. - /// - public static void DragLeave() - { - s_instance.DragLeave(); - } - - /// - /// Clears the drop description of the IDataObject previously associated to the - /// provided control, then notifies the DragDropHelper that the current control - /// received a DragLeave event. - /// - /// - /// Because the DragLeave event in SWF does not provide the IDataObject in the - /// event args, this DragLeave override of the DropTargetHelper will lookup a - /// cached copy of the IDataObject based on the provided Control and clear - /// the drop description. Note that the underlying DragLeave call of the - /// Shell IDropTargetHelper object keeps the current control cached, so the - /// control passed to this method is only relevant to looking up the IDataObject - /// on which to clear the drop description. - /// - public static void DragLeave(Control control) - { - if (s_dataContext.ContainsKey(control)) - { - s_dataContext[control].SetDropDescription(DropImageType.Invalid, null, null); - s_dataContext.Remove(control); - } - - DragLeave(); - } - - /// - /// Notifies the DragDropHelper that the current Control received - /// a DragOver event. - /// - /// The DataObject containing a drag image. - /// The current cursor's offset relative to the window. - /// The accepted drag drop effect. - public static void Drop(IDataObject data, Point cursorOffset, DragDropEffects effect) - { - // No need to clear the drop description, but don't keep it stored to avoid memory leaks - foreach (KeyValuePair pair in s_dataContext) - { - if (ReferenceEquals(pair.Value, data)) - { - s_dataContext.Remove(pair); - break; - } - } - - s_instance.Drop(data, cursorOffset, effect); - } - - /// - /// Tells the DragDropHelper to show or hide the drag image. - /// - /// True to show the image. False to hide it. - public static void Show(bool show) - { - s_instance.Show(show); - } - } -} - -#endregion // SwfDragDropLib\SwfDropTargetHelper.cs - -#region SwfDragDropLib\SwfDropTargetHelperExtensions.cs - -namespace Ch.Cyberduck.Ui.Core -{ - using ComIDataObject = IDataObject; - - public static class SwfDropTargetHelperExtensions - { - /// - /// Notifies the DragDropHelper that the specified Control received - /// a DragEnter event. - /// - /// The DragDropHelper instance to notify. - /// The Control the received the DragEnter event. - /// The DataObject containing a drag image. - /// The current cursor's offset relative to the window. - /// The accepted drag drop effect. - public static void DragEnter(this IDropTargetHelper dropHelper, Control control, - System.Windows.Forms.IDataObject data, Point cursorOffset, DragDropEffects effect) - { - IntPtr controlHandle = IntPtr.Zero; - if (control != null) - controlHandle = control.Handle; - Win32Point pt = cursorOffset.ToWin32Point(); - dropHelper.DragEnter(controlHandle, (ComIDataObject) data, ref pt, effect); - } - - /// - /// Notifies the DragDropHelper that the current Control received - /// a DragOver event. - /// - /// The DragDropHelper instance to notify. - /// The current cursor's offset relative to the window. - /// The accepted drag drop effect. - public static void DragOver(this IDropTargetHelper dropHelper, Point cursorOffset, DragDropEffects effect) - { - Win32Point pt = cursorOffset.ToWin32Point(); - dropHelper.DragOver(ref pt, effect); - } - - /// - /// Notifies the DragDropHelper that the current Control received - /// a Drop event. - /// - /// The DragDropHelper instance to notify. - /// The DataObject containing a drag image. - /// The current cursor's offset relative to the window. - /// The accepted drag drop effect. - public static void Drop(this IDropTargetHelper dropHelper, System.Windows.Forms.IDataObject data, - Point cursorOffset, DragDropEffects effect) - { - Win32Point pt = cursorOffset.ToWin32Point(); - dropHelper.Drop((ComIDataObject) data, ref pt, effect); - } - } -} - -#endregion // SwfDragDropLib\SwfDropTargetHelperExtensions.cs - -#region SwfDragDropLib\SwfDragSourceHelper.cs - -namespace System.Windows.Forms -{ - /// - /// Provides helper methods for working with the Shell drag image manager. - /// - public static class DragSourceHelper - { - // CFSTR_DROPDESCRIPTION - private const string DropDescriptionFormat = "DropDescription"; - // The drag image manager sets this flag to indicate if the current - // drop target supports drag images. - private const string IsShowingLayeredFormat = "IsShowingLayered"; - private const uint WM_INVALIDATEDRAGIMAGE = 0x403; - - /// - /// Keeps a cached drag source context, keyed on the drag source control. - /// - private static readonly IDictionary s_dataContext = - new Dictionary(); - - /// - /// Keeps drop description info for a data object. - /// - private static readonly IDictionary s_dropDescriptions = - new Dictionary(); - - [DllImport("user32.dll")] - private static extern void PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); - - /// - /// Creates a default DataObject with an internal COM callable implemetation of IDataObject. - /// - /// A new instance of System.Windows.Forms.IDataObject. - public static IDataObject CreateDataObject() - { - return new DataObject(new Ch.Cyberduck.Ui.Core.DataObject()); - } - - /// - /// Creates a DataObject with an internal COM callable implementation of IDataObject. - /// This override also sets the drag image to the specified Bitmap and sets a flag - /// on the system IDragSourceHelper2 to allow drop descriptions. - /// - /// A Bitmap from which to create the drag image. - /// The drag image cursor offset. - /// A new instance of System.Windows.Forms.IDataObject. - public static IDataObject CreateDataObject(Bitmap dragImage, Point cursorOffset) - { - IDataObject data = CreateDataObject(); - AllowDropDescription(true); - data.SetDragImage(dragImage, cursorOffset); - return data; - } - - /// - /// Creates a DataObject with an internal COM callable implementation of IDataObject. - /// This override also sets the drag image to a bitmap created from the specified - /// Control instance's UI. It also sets a flag on the system IDragSourceHelper2 to - /// allow drop descriptions. - /// - /// A Control to initialize the drag image from. - /// The drag image cursor offset. - /// A new instance of System.Windows.Forms.IDataObject. - public static IDataObject CreateDataObject(Control control, Point cursorOffset) - { - IDataObject data = CreateDataObject(); - AllowDropDescription(true); - data.SetDragImage(control, cursorOffset); - return data; - } - - /// - /// Registers a Control as a drag source and provides default implementations of - /// GiveFeedback and QueryContinueDrag. - /// - /// The drag source Control instance. - /// The DataObject associated to the drag source. - /// Callers must call UnregisterDefaultDragSource when the drag and drop - /// operation is complete to avoid memory leaks. - public static void RegisterDefaultDragSource(Control control, IDataObject data) - { - // Cache the drag source and the associated data object - DragSourceEntry entry = new DragSourceEntry(data); - if (!s_dataContext.ContainsKey(control)) - s_dataContext.Add(control, entry); - else - s_dataContext[control] = entry; - - // We need to listen for drop description changes. If a drop target - // changes the drop description, we shouldn't provide a default one. - entry.adviseConnection = ((Runtime.InteropServices.ComTypes.IDataObject) data).Advise(new AdviseSink(data), - DropDescriptionFormat, 0); - - // Hook up the default drag source event handlers - control.GiveFeedback += DefaultGiveFeedbackHandler; - control.QueryContinueDrag += DefaultQueryContinueDragHandler; - } - - /// - /// Registers a Control as a drag source and provides default implementations of - /// GiveFeedback and QueryContinueDrag. This override also handles the data object - /// creation, including initialization of the drag image from the Control. - /// - /// The drag source Control instance. - /// The drag image cursor offset. - /// The created data object. - /// Callers must call UnregisterDefaultDragSource when the drag and drop - /// operation is complete to avoid memory leaks. - public static IDataObject RegisterDefaultDragSource(Control control, Point cursorOffset) - { - IDataObject data = CreateDataObject(control, cursorOffset); - RegisterDefaultDragSource(control, data); - return data; - } - - /// - /// Registers a Control as a drag source and provides default implementations of - /// GiveFeedback and QueryContinueDrag. This override also handles the data object - /// creation, including initialization of the drag image from the speicified Bitmap. - /// - /// The drag source Control instance. - /// A Bitmap to initialize the drag image from. - /// The drag image cursor offset. - /// The created data object. - /// Callers must call UnregisterDefaultDragSource when the drag and drop - /// operation is complete to avoid memory leaks. - public static IDataObject RegisterDefaultDragSource(Control control, Bitmap dragImage, Point cursorOffset) - { - IDataObject data = CreateDataObject(dragImage, cursorOffset); - RegisterDefaultDragSource(control, data); - return data; - } - - /// - /// Unregisters a drag source from the internal cache. - /// - /// The drag source Control. - public static void UnregisterDefaultDragSource(Control control) - { - if (s_dataContext.ContainsKey(control)) - { - DragSourceEntry entry = s_dataContext[control]; - Runtime.InteropServices.ComTypes.IDataObject dataObjectCOM = - (Runtime.InteropServices.ComTypes.IDataObject) entry.data; - - // Stop listening to drop description changes - dataObjectCOM.DUnadvise(entry.adviseConnection); - - // Unhook the default drag source event handlers - control.GiveFeedback -= DefaultGiveFeedbackHandler; - control.QueryContinueDrag -= DefaultQueryContinueDragHandler; - - // Remove the entries from our context caches - s_dataContext.Remove(control); - s_dropDescriptions.Remove(entry.data); - } - } - - /// - /// Performs a default drag and drop operation for the specified drag source. - /// - /// The drag source Control. - /// The drag image cursor offset. - /// The allowed drop effects. - /// The associated data. - /// The accepted drop effects from the completed operation. - public static DragDropEffects DoDragDrop(Control control, Point cursorOffset, DragDropEffects allowedEffects, - params KeyValuePair[] data) - { - IDataObject dataObject = RegisterDefaultDragSource(control, cursorOffset); - return DoDragDropInternal(control, dataObject, allowedEffects, data); - } - - /// - /// Performs a default drag and drop operation for the specified drag source. - /// - /// The drag source Control. - /// The Bitmap to initialize the drag image from. - /// The drag image cursor offset. - /// The allowed drop effects. - /// The associated data. - /// The accepted drop effects from the completed operation. - public static DragDropEffects DoDragDrop(Control control, Bitmap dragImage, Point cursorOffset, - DragDropEffects allowedEffects, params KeyValuePair[] data) - { - IDataObject dataObject = RegisterDefaultDragSource(control, dragImage, cursorOffset); - return DoDragDropInternal(control, dataObject, allowedEffects, data); - } - - ///yla ext - public static DragDropEffects DoDragDrop(Control control, Bitmap dragImage, Point cursorOffset, - DragDropEffects allowedEffects, Runtime.InteropServices.ComTypes.IDataObject data) - { - AllowDropDescription(true); - - DataObject d = new DataObject(data); - ((IDataObject) d).SetDragImage(dragImage, cursorOffset); - RegisterDefaultDragSource(control, d); - try - { - return control.DoDragDrop(d, allowedEffects); - } - finally - { - UnregisterDefaultDragSource(control); - } - } - - /// - /// Performs a default drag and drop operation for the specified drag source. - /// - /// The drag source Control. - /// The data object associated to the drag and drop operation. - /// The allowed drop effects. - /// The associated data. - /// The accepted drop effects from the completed operation. - private static DragDropEffects DoDragDropInternal(Control control, IDataObject dataObject, - DragDropEffects allowedEffects, KeyValuePair[] data) - { - // Set the data onto the data object. - if (data != null) - { - foreach (KeyValuePair dataPair in data) - dataObject.SetDataEx(dataPair.Key, dataPair.Value); - } - - try - { - return control.DoDragDrop(dataObject, allowedEffects); - } - finally - { - UnregisterDefaultDragSource(control); - } - } - - /// - /// Provides a default GiveFeedback event handler for drag sources. - /// - /// The object that raised the event. Should be set to the drag source. - /// The event arguments. - public static void DefaultGiveFeedbackHandler(object sender, GiveFeedbackEventArgs e) - { - Control control = sender as Control; - if (control != null) - { - if (s_dataContext.ContainsKey(control)) - { - DefaultGiveFeedback(s_dataContext[control].data, e); - } - } - } - - /// - /// Provides a default GiveFeedback event handler for drag sources. - /// - /// The associated data object for the event. - /// The event arguments. - public static void DefaultGiveFeedback(IDataObject data, GiveFeedbackEventArgs e) - { - // For drop targets that don't set the drop description, we'll - // set a default one. Drop targets that do set drop descriptions - // should set an invalid drop description during DragLeave. - bool setDefaultDropDesc = false; - bool isDefaultDropDesc = IsDropDescriptionDefault(data); - DropImageType currentType = DropImageType.Invalid; - if (!IsDropDescriptionValid(data) || isDefaultDropDesc) - { - currentType = GetDropImageType(data); - setDefaultDropDesc = true; - } - - if (IsShowingLayered(data)) - { - // The default drag source implementation uses drop descriptions, - // so we won't use default cursors. - e.UseDefaultCursors = false; - Cursor.Current = Cursors.Arrow; - } - else - e.UseDefaultCursors = true; - - // We need to invalidate the drag image to refresh the drop description. - // This is tricky to implement correctly, but we try to mimic the Windows - // Explorer behavior. We internally use a flag to tell us to invalidate - // the drag image, so if that is set, we'll invalidate. Otherwise, we - // always invalidate if the drop description was set by the drop target, - // *or* if the current drop image is not None. So if we set a default - // drop description to anything but None, we'll always invalidate. - if (InvalidateRequired(data) || !isDefaultDropDesc || currentType != DropImageType.None) - { - InvalidateDragImage(data); - - // The invalidate required flag only lasts for one invalidation - SetInvalidateRequired(data, false); - } - - // If the drop description is currently invalid, or if it is a default - // drop description already, we should check about re-setting it. - if (setDefaultDropDesc) - { - // Only change if the effect changed - if ((DropImageType) e.Effect != currentType) - { - if (e.Effect == DragDropEffects.Copy) - data.SetDropDescription(DropImageType.Copy, "Copy", String.Empty); - else if (e.Effect == DragDropEffects.Link) - data.SetDropDescription(DropImageType.Link, "Link", String.Empty); - else if (e.Effect == DragDropEffects.Move) - data.SetDropDescription(DropImageType.Move, "Move", String.Empty); - else if (e.Effect == DragDropEffects.None) - data.SetDropDescription(DropImageType.None, null, null); - SetDropDescriptionIsDefault(data, true); - - // We can't invalidate now, because the drag image manager won't - // pick it up... so we set this flag to invalidate on the next - // GiveFeedback event. - SetInvalidateRequired(data, true); - } - } - } - - /// - /// Provides a default handler for the QueryContinueDrag drag source event. - /// - /// The object that raised the event. Not used internally. - /// The event arguments. - public static void DefaultQueryContinueDragHandler(object sender, QueryContinueDragEventArgs e) - { - DefaultQueryContinueDrag(e); - } - - /// - /// Provides a default handler for the QueryContinueDrag drag source event. - /// - /// The event arguments. - public static void DefaultQueryContinueDrag(QueryContinueDragEventArgs e) - { - if (e.EscapePressed) - { - e.Action = DragAction.Cancel; - } - } - - /// - /// Sets a flag on the system IDragSourceHelper2 object to allow drop descriptions - /// on the drag image. - /// - /// True to allow drop descriptions, otherwise False. - /// Must be called before IDragSourceHelper.InitializeFromBitmap or - /// IDragSourceHelper.InitializeFromControl is called. - public static void AllowDropDescription(bool allow) - { - IDragSourceHelper2 sourceHelper = (IDragSourceHelper2) new DragDropHelper(); - sourceHelper.SetFlags(allow ? 1 : 0); - } - - /// - /// Invalidates the drag image. - /// - /// The data object for which to invalidate the drag image. - /// This call tells the drag image manager to reformat the internal - /// cached drag image, based on the already set drag image bitmap and current drop - /// description. - public static void InvalidateDragImage(IDataObject dataObject) - { - if (dataObject.GetDataPresent("DragWindow")) - { - IntPtr hwnd = GetIntPtrFromData(dataObject.GetData("DragWindow")); - PostMessage(hwnd, WM_INVALIDATEDRAGIMAGE, IntPtr.Zero, IntPtr.Zero); - } - } - - /// - /// Gets an IntPtr from data acquired from a data object. - /// - /// The data that contains the IntPtr. - /// An IntPtr. - private static IntPtr GetIntPtrFromData(object data) - { - byte[] buf = null; - - if (data is MemoryStream) - { - buf = new byte[4]; - if (4 != ((MemoryStream) data).Read(buf, 0, 4)) - throw new ArgumentException("Could not read an IntPtr from the MemoryStream"); - } - if (data is byte[]) - { - buf = (byte[]) data; - if (buf.Length < 4) - throw new ArgumentException("Could not read an IntPtr from the byte array"); - } - - if (buf == null) - throw new ArgumentException("Could not read an IntPtr from the " + data.GetType()); - - int p = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0]; - return new IntPtr(p); - } - - /// - /// Determines if the IsShowingLayered flag is set on the data object. - /// - /// The data object. - /// True if the flag is set, otherwise false. - private static bool IsShowingLayered(IDataObject dataObject) - { - if (dataObject.GetDataPresent(IsShowingLayeredFormat)) - { - object data = dataObject.GetData(IsShowingLayeredFormat); - if (data != null) - return GetBooleanFromData(data); - } - - return false; - } - - /// - /// Converts compatible clipboard data to a boolean value. - /// - /// The clipboard data. - /// True if the data can be converted to a boolean and is set, otherwise False. - private static bool GetBooleanFromData(object data) - { - if (data is Stream) - { - Stream stream = data as Stream; - BinaryReader reader = new BinaryReader(stream); - return reader.ReadBoolean(); - } - - // Anything else isn't supported for now - return false; - } - - /// - /// Checks if the current drop description, if any, is valid. - /// - /// The DataObject from which to get the drop description. - /// True if the drop description is set, and the - /// DropImageType is not DropImageType.Invalid. - private static bool IsDropDescriptionValid(IDataObject dataObject) - { - object data = ((Runtime.InteropServices.ComTypes.IDataObject) dataObject).GetDropDescription(); - if (data is DropDescription) - return (DropImageType) ((DropDescription) data).type != DropImageType.Invalid; - return false; - } - - /// - /// Checks if the IsDefault drop description flag is set for the associated DataObject. - /// - /// The associated DataObject. - /// True if the IsDefault flag is set, otherwise False. - private static bool IsDropDescriptionDefault(IDataObject dataObject) - { - if (s_dropDescriptions.ContainsKey(dataObject)) - return (s_dropDescriptions[dataObject] & DropDescriptionFlags.IsDefault) == - DropDescriptionFlags.IsDefault; - return false; - } - - /// - /// Checks if the InvalidateRequired drop description flag is set for the associated DataObject. - /// - /// The associated DataObject. - /// True if the InvalidateRequired flag is set, otherwise False. - private static bool InvalidateRequired(IDataObject dataObject) - { - if (s_dropDescriptions.ContainsKey(dataObject)) - return (s_dropDescriptions[dataObject] & DropDescriptionFlags.InvalidateRequired) == - DropDescriptionFlags.InvalidateRequired; - return false; - } - - /// - /// Sets the IsDefault drop description flag for the associated DataObject. - /// - /// The associdated DataObject. - /// True to set the flag, False to unset it. - private static void SetDropDescriptionIsDefault(IDataObject dataObject, bool isDefault) - { - if (isDefault) - SetDropDescriptionFlag(dataObject, DropDescriptionFlags.IsDefault); - else - UnsetDropDescriptionFlag(dataObject, DropDescriptionFlags.IsDefault); - } - - /// - /// Sets the InvalidatedRequired drop description flag for the associated DataObject. - /// - /// The associdated DataObject. - /// True to set the flag, False to unset it. - private static void SetInvalidateRequired(IDataObject dataObject, bool required) - { - if (required) - SetDropDescriptionFlag(dataObject, DropDescriptionFlags.InvalidateRequired); - else - UnsetDropDescriptionFlag(dataObject, DropDescriptionFlags.InvalidateRequired); - } - - /// - /// Sets a drop description flag. - /// - /// The associated DataObject. - /// The drop description flag to set. - private static void SetDropDescriptionFlag(IDataObject dataObject, DropDescriptionFlags flag) - { - if (s_dropDescriptions.ContainsKey(dataObject)) - s_dropDescriptions[dataObject] |= flag; - else - s_dropDescriptions.Add(dataObject, flag); - } - - /// - /// Unsets a drop description flag. - /// - /// The associated DataObject. - /// The drop description flag to unset. - private static void UnsetDropDescriptionFlag(IDataObject dataObject, DropDescriptionFlags flag) - { - if (s_dropDescriptions.ContainsKey(dataObject)) - { - DropDescriptionFlags current = s_dropDescriptions[dataObject]; - s_dropDescriptions[dataObject] = (current | flag) ^ flag; - } - } - - /// - /// Gets the current DropDescription's drop image type. - /// - /// The DataObject. - /// The current drop image type. - private static DropImageType GetDropImageType(IDataObject dataObject) - { - object data = ((Runtime.InteropServices.ComTypes.IDataObject) dataObject).GetDropDescription(); - if (data is DropDescription) - return (DropImageType) ((DropDescription) data).type; - return DropImageType.Invalid; - } - - /// - /// Provides an advisory sink for the COM IDataObject implementation. - /// - private class AdviseSink : IAdviseSink - { - // The associated data object - private readonly IDataObject data; - - /// - /// Creates an AdviseSink associated to the specified data object. - /// - /// The data object. - public AdviseSink(IDataObject data) - { - this.data = data; - } - - /// - /// Handles DataChanged events from a COM IDataObject. - /// - /// The data format that had a change. - /// The data value. - public void OnDataChange(ref FORMATETC format, ref STGMEDIUM stgmedium) - { - // We listen to DropDescription changes, so that we can unset the IsDefault - // drop description flag. - object odd = ((Runtime.InteropServices.ComTypes.IDataObject) data).GetDropDescription(); - if (odd != null) - SetDropDescriptionIsDefault(data, false); - } - - public void OnClose() - { - throw new NotImplementedException(); - } - - public void OnRename(IMoniker moniker) - { - throw new NotImplementedException(); - } - - public void OnSave() - { - throw new NotImplementedException(); - } - - public void OnViewChange(int aspect, int index) - { - throw new NotImplementedException(); - } - } - - /// - /// Represents a drag source context entry. - /// - private class DragSourceEntry - { - public readonly IDataObject data; - public int adviseConnection; - - public DragSourceEntry(IDataObject data) - { - this.data = data; - } - } - - /// - /// Internally used to track information about the current drop description. - /// - [Flags] - private enum DropDescriptionFlags - { - None = 0, - IsDefault = 1, - InvalidateRequired = 2 - } - } -} - +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +#region DragDropLibCore\DragDropHelper.cs + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Formatters.Binary; +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Core; +using IDataObject = System.Runtime.InteropServices.ComTypes.IDataObject; + +/* + * Taken from, thanks Adam for a great post + * http://blogs.msdn.com/b/adamroot/archive/2008/02/19/shell-style-drag-and-drop-in-net-part-3.aspx?PageIndex=3 + */ + +namespace Ch.Cyberduck.Ui.Core +{ + [ComImport] + [Guid("4657278A-411B-11d2-839A-00C04FD918D0")] + public class DragDropHelper + { + } +} + +#endregion // DragDropLibCore\DragDropHelper.cs + +#region DragDropLibCore\IDragSourceHelper.cs + +namespace Ch.Cyberduck.Ui.Core +{ + [ComVisible(true)] + [ComImport] + [Guid("DE5BF786-477A-11D2-839D-00C04FD918D0")] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface IDragSourceHelper + { + void InitializeFromBitmap([In, MarshalAs(UnmanagedType.Struct)] ref ShDragImage dragImage, + [In, MarshalAs(UnmanagedType.Interface)] IDataObject dataObject); + + void InitializeFromWindow([In] IntPtr hwnd, [In] ref Win32Point pt, + [In, MarshalAs(UnmanagedType.Interface)] IDataObject dataObject); + } + + [ComVisible(true)] + [ComImport] + [Guid("83E07D0D-0C5F-4163-BF1A-60B274051E40")] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface IDragSourceHelper2 + { + void InitializeFromBitmap([In, MarshalAs(UnmanagedType.Struct)] ref ShDragImage dragImage, + [In, MarshalAs(UnmanagedType.Interface)] IDataObject dataObject); + + void InitializeFromWindow([In] IntPtr hwnd, [In] ref Win32Point pt, + [In, MarshalAs(UnmanagedType.Interface)] IDataObject dataObject); + + void SetFlags([In] int dwFlags); + } +} + +#endregion // DragDropLibCore\IDragSourceHelper.cs + +#region DragDropLibCore\IDropTargetHelper.cs + +namespace Ch.Cyberduck.Ui.Core +{ + [ComVisible(true)] + [ComImport] + [Guid("4657278B-411B-11D2-839A-00C04FD918D0")] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface IDropTargetHelper + { + void DragEnter([In] IntPtr hwndTarget, [In, MarshalAs(UnmanagedType.Interface)] IDataObject dataObject, + [In] ref Win32Point pt, [In] DragDropEffects effect); + + void DragLeave(); + + void DragOver([In] ref Win32Point pt, [In] DragDropEffects effect); + + void Drop([In, MarshalAs(UnmanagedType.Interface)] IDataObject dataObject, [In] ref Win32Point pt, + [In] DragDropEffects effect); + + void Show([In] bool show); + } +} + +#endregion // DragDropLibCore\IDropTargetHelper.cs + +#region DragDropLibCore\NativeStructures.cs + +namespace Ch.Cyberduck.Ui.Core +{ + [StructLayout(LayoutKind.Sequential)] + public struct Win32Point + { + public int x; + public int y; + } + + [StructLayout(LayoutKind.Sequential)] + public struct Win32Size + { + public int cx; + public int cy; + } + + [StructLayout(LayoutKind.Sequential)] + public struct ShDragImage + { + public Win32Size sizeDragImage; + public Win32Point ptOffset; + public IntPtr hbmpDragImage; + public int crColorKey; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Size = 1044)] + public struct DropDescription + { + public int type; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szMessage; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szInsert; + } +} + +#endregion // DragDropLibCore\NativeStructures.cs + +#region DragDropLibCore\DataObjectExtensions.cs + +namespace System.Runtime.InteropServices.ComTypes +{ + /// + /// Provides extended functionality for the COM IDataObject interface. + /// + public static class ComDataObjectExtensions + { + private const string DropDescriptionFormat = "DropDescription"; + + private const TYMED TYMED_ANY = + TYMED.TYMED_ENHMF | TYMED.TYMED_FILE | TYMED.TYMED_GDI | TYMED.TYMED_HGLOBAL | TYMED.TYMED_ISTORAGE | + TYMED.TYMED_ISTREAM | TYMED.TYMED_MFPICT; + + private static readonly Guid ManagedDataStamp = new Guid("D98D9FD6-FA46-4716-A769-F3451DFBE4B4"); + + [DllImport("user32.dll")] + private static extern uint RegisterClipboardFormat(string lpszFormatName); + + [DllImport("ole32.dll")] + private static extern void ReleaseStgMedium(ref STGMEDIUM pmedium); + + [DllImport("ole32.dll")] + private static extern int CreateStreamOnHGlobal(IntPtr hGlobal, bool fDeleteOnRelease, out IStream ppstm); + + // CFSTR_DROPDESCRIPTION + + /// + /// Sets the drop description for the drag image manager. + /// + /// The DataObject to set. + /// The drop description. + public static void SetDropDescription(this IDataObject dataObject, DropDescription dropDescription) + { + FORMATETC formatETC; + FillFormatETC(DropDescriptionFormat, TYMED.TYMED_HGLOBAL, out formatETC); + + // We need to set the drop description as an HGLOBAL. + // Allocate space ... + IntPtr pDD = Marshal.AllocHGlobal(Marshal.SizeOf(typeof (DropDescription))); + try + { + // ... and marshal the data + Marshal.StructureToPtr(dropDescription, pDD, false); + + // The medium wraps the HGLOBAL + STGMEDIUM medium; + medium.pUnkForRelease = null; + medium.tymed = TYMED.TYMED_HGLOBAL; + medium.unionmember = pDD; + + // Set the data + IDataObject dataObjectCOM = dataObject; + dataObjectCOM.SetData(ref formatETC, ref medium, true); + } + catch + { + // If we failed, we need to free the HGLOBAL memory + Marshal.FreeHGlobal(pDD); + } + } + + /// + /// Gets the DropDescription format data. + /// + /// The DataObject. + /// The DropDescription, if set. + public static object GetDropDescription(this IDataObject dataObject) + { + FORMATETC formatETC; + FillFormatETC(DropDescriptionFormat, TYMED.TYMED_HGLOBAL, out formatETC); + + if (0 == dataObject.QueryGetData(ref formatETC)) + { + STGMEDIUM medium; + dataObject.GetData(ref formatETC, out medium); + try + { + return (DropDescription) Marshal.PtrToStructure(medium.unionmember, typeof (DropDescription)); + } + finally + { + ReleaseStgMedium(ref medium); + } + } + + return null; + } + + // Combination of all non-null TYMEDs + + /// + /// Sets up an advisory connection to the data object. + /// + /// The data object on which to set the advisory connection. + /// The advisory sink. + /// The format on which to callback on. + /// Advisory flags. Can be 0. + /// The ID of the newly created advisory connection. + public static int Advise(this IDataObject dataObject, IAdviseSink sink, string format, ADVF advf) + { + // Internally, we'll listen for any TYMED + FORMATETC formatETC; + FillFormatETC(format, TYMED_ANY, out formatETC); + + int connection; + int hr = dataObject.DAdvise(ref formatETC, advf, sink, out connection); + if (hr != 0) + Marshal.ThrowExceptionForHR(hr); + return connection; + } + + /// + /// Fills a FORMATETC structure. + /// + /// The format name. + /// The accepted TYMED. + /// The structure to fill. + private static void FillFormatETC(string format, TYMED tymed, out FORMATETC formatETC) + { + formatETC.cfFormat = (short) RegisterClipboardFormat(format); + formatETC.dwAspect = DVASPECT.DVASPECT_CONTENT; + formatETC.lindex = -1; + formatETC.ptd = IntPtr.Zero; + formatETC.tymed = tymed; + } + + // Identifies data that we need to do custom marshaling on + + /// + /// Sets managed data to a clipboard DataObject. + /// + /// The DataObject to set the data on. + /// The clipboard format. + /// The data object. + /// + /// Because the underlying data store is not storing managed objects, but + /// unmanaged ones, this function provides intelligent conversion, allowing + /// you to set unmanaged data into the COM implemented IDataObject. + public static void SetManagedData(this IDataObject dataObject, string format, object data) + { + // Initialize the format structure + FORMATETC formatETC; + FillFormatETC(format, TYMED.TYMED_HGLOBAL, out formatETC); + + // Serialize/marshal our data into an unmanaged medium + STGMEDIUM medium; + GetMediumFromObject(data, out medium); + try + { + // Set the data on our data object + dataObject.SetData(ref formatETC, ref medium, true); + } + catch + { + // On exceptions, release the medium + ReleaseStgMedium(ref medium); + throw; + } + } + + /// + /// Gets managed data from a clipboard DataObject. + /// + /// The DataObject to obtain the data from. + /// The format for which to get the data in. + /// The data object instance. + public static object GetManagedData(this IDataObject dataObject, string format) + { + FORMATETC formatETC; + FillFormatETC(format, TYMED.TYMED_HGLOBAL, out formatETC); + + // Get the data as a stream + STGMEDIUM medium; + dataObject.GetData(ref formatETC, out medium); + + IStream nativeStream; + try + { + int hr = CreateStreamOnHGlobal(medium.unionmember, true, out nativeStream); + if (hr != 0) + { + return null; + } + } + finally + { + ReleaseStgMedium(ref medium); + } + + + // Convert the native stream to a managed stream + STATSTG statstg; + nativeStream.Stat(out statstg, 0); + if (statstg.cbSize > int.MaxValue) + throw new NotSupportedException(); + byte[] buf = new byte[statstg.cbSize]; + nativeStream.Read(buf, (int) statstg.cbSize, IntPtr.Zero); + MemoryStream dataStream = new MemoryStream(buf); + + // Check for our stamp + int sizeOfGuid = Marshal.SizeOf(typeof (Guid)); + byte[] guidBytes = new byte[sizeOfGuid]; + if (dataStream.Length >= sizeOfGuid) + { + if (sizeOfGuid == dataStream.Read(guidBytes, 0, sizeOfGuid)) + { + Guid guid = new Guid(guidBytes); + if (ManagedDataStamp.Equals(guid)) + { + // Stamp matched, so deserialize + BinaryFormatter formatter = new BinaryFormatter(); + Type dataType = (Type) formatter.Deserialize(dataStream); + object data2 = formatter.Deserialize(dataStream); + if (data2.GetType() == dataType) + return data2; + else if (data2 is string) + return ConvertDataFromString((string) data2, dataType); + else + return null; + } + } + } + + // Stamp didn't match... attempt to reset the seek pointer + if (dataStream.CanSeek) + dataStream.Position = 0; + return null; + } + + /// + /// Serializes managed data to an HGLOBAL. + /// + /// The managed data object. + /// An STGMEDIUM pointing to the allocated HGLOBAL. + private static void GetMediumFromObject(object data, out STGMEDIUM medium) + { + // We'll serialize to a managed stream temporarily + MemoryStream stream = new MemoryStream(); + + // Write an indentifying stamp, so we can recognize this as custom + // marshaled data. + stream.Write(ManagedDataStamp.ToByteArray(), 0, Marshal.SizeOf(typeof (Guid))); + + // Now serialize the data. Note, if the data is not directly serializable, + // we'll try type conversion. Also, we serialize the type. That way, + // during deserialization, we know which type to convert back to, if + // appropriate. + BinaryFormatter formatter = new BinaryFormatter(); + formatter.Serialize(stream, data.GetType()); + formatter.Serialize(stream, GetAsSerializable(data)); + + // Now copy to an HGLOBAL + byte[] bytes = stream.GetBuffer(); + IntPtr p = Marshal.AllocHGlobal(bytes.Length); + try + { + Marshal.Copy(bytes, 0, p, bytes.Length); + } + catch + { + // Make sure to free the memory on exceptions + Marshal.FreeHGlobal(p); + throw; + } + + // Now allocate an STGMEDIUM to wrap the HGLOBAL + medium.unionmember = p; + medium.tymed = TYMED.TYMED_HGLOBAL; + medium.pUnkForRelease = null; + } + + /// + /// Gets a serializable object representing the data. + /// + /// The data. + /// If the data is serializable, then it is returned. Otherwise, + /// type conversion is attempted. If successful, a string value will be + /// returned. + private static object GetAsSerializable(object obj) + { + // If the data is directly serializable, run with it + if (obj.GetType().IsSerializable) + return obj; + + // Attempt type conversion to a string, but only if we know it can be converted back + TypeConverter conv = GetTypeConverterForType(obj.GetType()); + if (conv != null && conv.CanConvertTo(typeof (string)) && conv.CanConvertFrom(typeof (string))) + return conv.ConvertToInvariantString(obj); + + throw new NotSupportedException("Cannot serialize the object"); + } + + /// + /// Converts data from a string to the specified format. + /// + /// The data to convert. + /// The target data type. + /// Returns the converted data instance. + private static object ConvertDataFromString(string data, Type dataType) + { + TypeConverter conv = GetTypeConverterForType(dataType); + if (conv != null && conv.CanConvertFrom(typeof (string))) + return conv.ConvertFromInvariantString(data); + + throw new NotSupportedException("Cannot convert data"); + } + + /// + /// Gets a TypeConverter instance for the specified type. + /// + /// The type. + /// An instance of a TypeConverter for the type, if one exists. + private static TypeConverter GetTypeConverterForType(Type dataType) + { + TypeConverterAttribute[] typeConverterAttrs = + (TypeConverterAttribute[]) dataType.GetCustomAttributes(typeof (TypeConverterAttribute), true); + if (typeConverterAttrs.Length > 0) + { + Type convType = Type.GetType(typeConverterAttrs[0].ConverterTypeName); + return (TypeConverter) Activator.CreateInstance(convType); + } + + return null; + } + } +} + +#endregion // DragDropLibCore\DataObjectExtensions.cs + +#region DragDropLibCore\DataObject.cs + +namespace Ch.Cyberduck.Ui.Core +{ + /// + /// Implements the COM version of IDataObject including SetData. + /// + /// + /// Use this object when using shell (or other unmanged) features + /// that utilize the clipboard and/or drag and drop. + /// The System.Windows.DataObject (.NET 3.0) and + /// System.Windows.Forms.DataObject do not support SetData from their COM + /// IDataObject interface implementation. + /// To use this object with .NET drag and drop, create an instance + /// of System.Windows.DataObject (.NET 3.0) or System.Window.Forms.DataObject + /// passing an instance of DataObject as the only constructor parameter. For + /// example: + /// + /// System.Windows.DataObject data = new System.Windows.DataObject(new DragDropLib.DataObject()); + /// + /// + [ComVisible(true)] + public class DataObject : IDataObject, IDisposable + { + // These are helper functions for managing STGMEDIUM structures + + // Our internal storage is a simple list + private const int DV_E_CLIPFORMAT = unchecked((int) 0x8004006A); + private const int DV_E_DVASPECT = unchecked((int) 0x8004006B); + private const int DV_E_FORMATETC = unchecked((int) 0x80040064); + private const int DV_E_TYMED = unchecked((int) 0x80040069); + private const int OLE_E_ADVISENOTSUPPORTED = unchecked((int) 0x80040003); + private readonly IDictionary connections; + private readonly IList> storage; + // Keeps a progressive unique connection id + private int nextConnectionId = 1; + // List of advisory connections + + /// + /// Creates an empty instance of DataObject. + /// + public DataObject() + { + storage = new List>(); + connections = new Dictionary(); + } + + public int EnumDAdvise(out IEnumSTATDATA enumAdvise) + { + throw Marshal.GetExceptionForHR(OLE_E_ADVISENOTSUPPORTED); + } + + public int GetCanonicalFormatEtc(ref FORMATETC formatIn, out FORMATETC formatOut) + { + formatOut = formatIn; + return DV_E_FORMATETC; + } + + /// + /// Adds an advisory connection for the specified format. + /// + /// The format for which this sink is called for changes. + /// Advisory flags to specify callback behavior. + /// The IAdviseSink to call for this connection. + /// Returns the new connection's ID. + /// An HRESULT. + public int DAdvise(ref FORMATETC pFormatetc, ADVF advf, IAdviseSink adviseSink, out int connection) + { + // Check that the specified advisory flags are supported. + const ADVF ADVF_ALLOWED = ADVF.ADVF_NODATA | ADVF.ADVF_ONLYONCE | ADVF.ADVF_PRIMEFIRST; + if ((int) ((advf | ADVF_ALLOWED) ^ ADVF_ALLOWED) != 0) + { + connection = 0; + return OLE_E_ADVISENOTSUPPORTED; + } + + // Create and insert an entry for the connection list + AdviseEntry entry = new AdviseEntry(ref pFormatetc, advf, adviseSink); + connections.Add(nextConnectionId, entry); + connection = nextConnectionId; + nextConnectionId++; + + // If the ADVF_PRIMEFIRST flag is specified and the data exists, + // raise the DataChanged event now. + if ((advf & ADVF.ADVF_PRIMEFIRST) == ADVF.ADVF_PRIMEFIRST) + { + KeyValuePair dataEntry; + if (GetDataEntry(ref pFormatetc, out dataEntry)) + RaiseDataChanged(connection, ref dataEntry); + } + + // S_OK + return 0; + } + + /// + /// Removes an advisory connection. + /// + /// The connection id to remove. + public void DUnadvise(int connection) + { + connections.Remove(connection); + } + + /// + /// Gets an enumerator for the formats contained in this DataObject. + /// + /// The direction of the data. + /// An instance of the IEnumFORMATETC interface. + public IEnumFORMATETC EnumFormatEtc(DATADIR direction) + { + // We only support GET + if (DATADIR.DATADIR_GET == direction) + return new EnumFORMATETC(storage); + + throw new NotImplementedException("OLE_S_USEREG"); + } + + /// + /// Gets the specified data. + /// + /// The requested data format. + /// When the function returns, contains the requested data. + public void GetData(ref FORMATETC format, out STGMEDIUM medium) + { + medium = new STGMEDIUM(); + GetDataHere(ref format, ref medium); + } + + /// + /// Gets the specified data. + /// + /// The requested data format. + /// When the function returns, contains the requested data. + /// Differs from GetData only in that the STGMEDIUM storage is + /// allocated and owned by the caller. + public void GetDataHere(ref FORMATETC format, ref STGMEDIUM medium) + { + // Locate the data + KeyValuePair dataEntry; + if (GetDataEntry(ref format, out dataEntry)) + { + STGMEDIUM source = dataEntry.Value; + medium = CopyMedium(ref source); + return; + } + + // Didn't find it. Return an empty data medium. + medium = default(STGMEDIUM); + } + + /// + /// Determines if data of the requested format is present. + /// + /// The request data format. + /// Returns the status of the request. If the data is present, S_OK is returned. + /// If the data is not present, an error code with the best guess as to the reason is returned. + public int QueryGetData(ref FORMATETC format) + { + // We only support CONTENT aspect + if ((DVASPECT.DVASPECT_CONTENT & format.dwAspect) == 0) + return DV_E_DVASPECT; + + int ret = DV_E_TYMED; + + // Try to locate the data + // TODO: The ret, if not S_OK, is only relevant to the last item + foreach (KeyValuePair pair in storage) + { + if ((pair.Key.tymed & format.tymed) > 0) + { + if (pair.Key.cfFormat == format.cfFormat) + { + // Found it, return S_OK; + return 0; + } + else + { + // Found the medium type, but wrong format + ret = DV_E_CLIPFORMAT; + } + } + else + { + // Mismatch on medium type + ret = DV_E_TYMED; + } + } + + return ret; + } + + /// + /// Sets data in the specified format into storage. + /// + /// The format of the data. + /// The data. + /// If true, ownership of the medium's memory will be transferred + /// to this object. If false, a copy of the medium will be created and maintained, and + /// the caller is responsible for the memory of the medium it provided. + public void SetData(ref FORMATETC formatIn, ref STGMEDIUM medium, bool release) + { + // If the format exists in our storage, remove it prior to resetting it + foreach (KeyValuePair pair in storage) + { + if ((pair.Key.tymed & formatIn.tymed) > 0 && pair.Key.dwAspect == formatIn.dwAspect && + pair.Key.cfFormat == formatIn.cfFormat) + { + STGMEDIUM releaseMedium = pair.Value; + ReleaseStgMedium(ref releaseMedium); + storage.Remove(pair); + break; + } + } + + // If release is true, we'll take ownership of the medium. + // If not, we'll make a copy of it. + STGMEDIUM sm = medium; + if (!release) + sm = CopyMedium(ref medium); + + // Add it to the internal storage + KeyValuePair addPair = new KeyValuePair(formatIn, sm); + storage.Add(addPair); + + RaiseDataChanged(ref addPair); + } + + /// + /// Releases resources. + /// + public void Dispose() + { + Dispose(true); + } + + [DllImport("urlmon.dll")] + private static extern int CopyStgMedium(ref STGMEDIUM pcstgmedSrc, ref STGMEDIUM pstgmedDest); + + [DllImport("ole32.dll")] + private static extern void ReleaseStgMedium(ref STGMEDIUM pmedium); + + /// + /// Releases unmanaged resources. + /// + ~DataObject() + { + Dispose(false); + } + + /// + /// Clears the internal storage array. + /// + /// + /// ClearStorage is called by the IDisposable.Dispose method implementation + /// to make sure all unmanaged references are released properly. + /// + private void ClearStorage() + { + foreach (KeyValuePair pair in storage) + { + STGMEDIUM medium = pair.Value; + ReleaseStgMedium(ref medium); + } + storage.Clear(); + } + + /// + /// Releases resources. + /// + /// Indicates if the call was made by a managed caller, or the garbage collector. + /// True indicates that someone called the Dispose method directly. False indicates that the garbage collector + /// is finalizing the release of the object instance. + private void Dispose(bool disposing) + { + if (disposing) + { + // No managed objects to release + } + + // Always release unmanaged objects + ClearStorage(); + } + + /// + /// Creates a copy of the STGMEDIUM structure. + /// + /// The data to copy. + /// The copied data. + private STGMEDIUM CopyMedium(ref STGMEDIUM medium) + { + STGMEDIUM sm = new STGMEDIUM(); + int hr = CopyStgMedium(ref medium, ref sm); + if (hr != 0) + throw Marshal.GetExceptionForHR(hr); + + return sm; + } + + /// + /// Gets a data entry by the specified format. + /// + /// The format to locate the data entry for. + /// The located data entry. + /// True if the data entry was found, otherwise False. + private bool GetDataEntry(ref FORMATETC pFormatetc, out KeyValuePair dataEntry) + { + foreach (KeyValuePair entry in storage) + { + FORMATETC format = entry.Key; + if (IsFormatCompatible(ref pFormatetc, ref format)) + { + dataEntry = entry; + return true; + } + } + + // Not found... default allocate the out param + dataEntry = default(KeyValuePair); + return false; + } + + /// + /// Raises the DataChanged event for the specified connection. + /// + /// The connection id. + /// The data entry for which to raise the event. + private void RaiseDataChanged(int connection, ref KeyValuePair dataEntry) + { + AdviseEntry adviseEntry = connections[connection]; + FORMATETC format = dataEntry.Key; + STGMEDIUM medium; + if ((adviseEntry.advf & ADVF.ADVF_NODATA) != ADVF.ADVF_NODATA) + medium = dataEntry.Value; + else + medium = default(STGMEDIUM); + + adviseEntry.sink.OnDataChange(ref format, ref medium); + + if ((adviseEntry.advf & ADVF.ADVF_ONLYONCE) == ADVF.ADVF_ONLYONCE) + connections.Remove(connection); + } + + /// + /// Raises the DataChanged event for any advisory connections that + /// are listening for it. + /// + /// The relevant data entry. + private void RaiseDataChanged(ref KeyValuePair dataEntry) + { + foreach (KeyValuePair connection in connections) + { + if (IsFormatCompatible(connection.Value.format, dataEntry.Key)) + RaiseDataChanged(connection.Key, ref dataEntry); + } + } + + /// + /// Determines if the formats are compatible. + /// + /// A FORMATETC. + /// A FORMATETC. + /// True if the formats are compatible, otherwise False. + /// Compatible formats have the same DVASPECT, same format ID, and share + /// at least one TYMED. + private bool IsFormatCompatible(FORMATETC format1, FORMATETC format2) + { + return IsFormatCompatible(ref format1, ref format2); + } + + /// + /// Determines if the formats are compatible. + /// + /// A FORMATETC. + /// A FORMATETC. + /// True if the formats are compatible, otherwise False. + /// Compatible formats have the same DVASPECT, same format ID, and share + /// at least one TYMED. + private bool IsFormatCompatible(ref FORMATETC format1, ref FORMATETC format2) + { + return ((format1.tymed & format2.tymed) > 0 && format1.dwAspect == format2.dwAspect && + format1.cfFormat == format2.cfFormat); + } + + private class AdviseEntry + { + public readonly ADVF advf; + public readonly FORMATETC format; + public readonly IAdviseSink sink; + + public AdviseEntry(ref FORMATETC format, ADVF advf, IAdviseSink sink) + { + this.format = format; + this.advf = advf; + this.sink = sink; + } + } + + /// + /// Helps enumerate the formats available in our DataObject class. + /// + [ComVisible(true)] + private class EnumFORMATETC : IEnumFORMATETC + { + // Keep an array of the formats for enumeration + private readonly FORMATETC[] formats; + // The index of the next item + private int currentIndex; + + /// + /// Creates an instance from a list of key value pairs. + /// + /// List of FORMATETC/STGMEDIUM key value pairs + internal EnumFORMATETC(IList> storage) + { + // Get the formats from the list + formats = new FORMATETC[storage.Count]; + for (int i = 0; i < formats.Length; i++) + formats[i] = storage[i].Key; + } + + /// + /// Creates an instance from an array of FORMATETC's. + /// + /// Array of formats to enumerate. + private EnumFORMATETC(FORMATETC[] formats) + { + // Get the formats as a copy of the array + this.formats = new FORMATETC[formats.Length]; + formats.CopyTo(this.formats, 0); + } + + /// + /// Creates a clone of this enumerator. + /// + /// When this function returns, contains a new instance of IEnumFORMATETC. + public void Clone(out IEnumFORMATETC newEnum) + { + EnumFORMATETC ret = new EnumFORMATETC(formats); + ret.currentIndex = currentIndex; + newEnum = ret; + } + + /// + /// Retrieves the next elements from the enumeration. + /// + /// The number of elements to retrieve. + /// An array to receive the formats requested. + /// An array to receive the number of element fetched. + /// If the fetched number of formats is the same as the requested number, S_OK is returned. + /// There are several reasons S_FALSE may be returned: (1) The requested number of elements is less than + /// or equal to zero. (2) The rgelt parameter equals null. (3) There are no more elements to enumerate. + /// (4) The requested number of elements is greater than one and pceltFetched equals null or does not + /// have at least one element in it. (5) The number of fetched elements is less than the number of + /// requested elements. + public int Next(int celt, FORMATETC[] rgelt, int[] pceltFetched) + { + // Start with zero fetched, in case we return early + if (pceltFetched != null && pceltFetched.Length > 0) + pceltFetched[0] = 0; + + // This will count down as we fetch elements + int cReturn = celt; + + // Short circuit if they didn't request any elements, or didn't + // provide room in the return array, or there are not more elements + // to enumerate. + if (celt <= 0 || rgelt == null || currentIndex >= formats.Length) + return 1; // S_FALSE + + // If the number of requested elements is not one, then we must + // be able to tell the caller how many elements were fetched. + if ((pceltFetched == null || pceltFetched.Length < 1) && celt != 1) + return 1; // S_FALSE + + // If the number of elements in the return array is too small, we + // throw. This is not a likely scenario, hence the exception. + if (rgelt.Length < celt) + throw new ArgumentException( + "The number of elements in the return array is less than the number of elements requested"); + + // Fetch the elements. + for (int i = 0; currentIndex < formats.Length && cReturn > 0; i++, cReturn--, currentIndex++) + rgelt[i] = formats[currentIndex]; + + // Return the number of elements fetched + if (pceltFetched != null && pceltFetched.Length > 0) + pceltFetched[0] = celt - cReturn; + + // cReturn has the number of elements requested but not fetched. + // It will be greater than zero, if multiple elements were requested + // but we hit the end of the enumeration. + return (cReturn == 0) ? 0 : 1; // S_OK : S_FALSE + } + + /// + /// Resets the state of enumeration. + /// + /// S_OK + public int Reset() + { + currentIndex = 0; + return 0; // S_OK + } + + /// + /// Skips the number of elements requested. + /// + /// The number of elements to skip. + /// If there are not enough remaining elements to skip, returns S_FALSE. Otherwise, S_OK is returned. + public int Skip(int celt) + { + if (currentIndex + celt > formats.Length) + return 1; // S_FALSE + + currentIndex += celt; + return 0; // S_OK + } + } + } +} + +#endregion // DragDropLibCore\DataObject.cs + +#region SwfDragDropLib\SwfDataObjectExtensions.cs + +namespace System.Windows.Forms +{ + using ComIDataObject = Runtime.InteropServices.ComTypes.IDataObject; + + public enum DropImageType + { + Invalid = -1, + None = 0, + Copy = DragDropEffects.Copy, + Move = DragDropEffects.Move, + Link = DragDropEffects.Link, + Label = 6, + Warning = 7 + } + + /// + /// Provides extended functionality to the System.Windows.Forms.IDataObject interface. + /// + public static class SwfDataObjectExtensions + { + [DllImport("gdiplus.dll")] + private static extern bool DeleteObject(IntPtr hgdi); + + [DllImport("ole32.dll")] + private static extern void ReleaseStgMedium(ref STGMEDIUM pmedium); + + /// + /// Sets the drag image as the rendering of a control. + /// + /// The DataObject to set the drag image on. + /// The Control to render as the drag image. + /// The location of the cursor relative to the control. + public static void SetDragImage(this IDataObject dataObject, Control control, Point cursorOffset) + { + int width = control.Width; + int height = control.Height; + + Bitmap bmp = new Bitmap(width, height); + control.DrawToBitmap(bmp, new Rectangle(0, 0, width, height)); + + SetDragImage(dataObject, bmp, cursorOffset); + } + + /// + /// Sets the drag image. + /// + /// The DataObject to set the drag image on. + /// The drag image. + /// The location of the cursor relative to the image. + public static void SetDragImage(this IDataObject dataObject, Image image, Point cursorOffset) + { + SetDragImage((ComIDataObject) dataObject, image, cursorOffset); + } + + /// + /// Sets the drag image. + /// + /// The DataObject to set the drag image on. + /// The drag image. + /// The location of the cursor relative to the image. + public static void SetDragImage(this ComIDataObject dataObject, Image image, Point cursorOffset) + { + ShDragImage shdi = new ShDragImage(); + + Win32Size size; + size.cx = image.Width; + size.cy = image.Height; + shdi.sizeDragImage = size; + + Win32Point wpt; + wpt.x = cursorOffset.X; + wpt.y = cursorOffset.Y; + shdi.ptOffset = wpt; + + shdi.crColorKey = Color.Magenta.ToArgb(); + + // This HBITMAP will be managed by the DragDropHelper + // as soon as we pass it to InitializeFromBitmap. If we fail + // to make the hand off, we'll delete it to prevent a mem leak. + IntPtr hbmp = GetHbitmapFromImage(image); + shdi.hbmpDragImage = hbmp; + + try + { + IDragSourceHelper sourceHelper = (IDragSourceHelper) new DragDropHelper(); + + try + { + sourceHelper.InitializeFromBitmap(ref shdi, dataObject); + } + catch (NotImplementedException ex) + { + throw new Exception( + "A NotImplementedException was caught. This could be because you forgot to construct your DataObject using a DragDropLib.DataObject", + ex); + } + } + catch + { + DeleteObject(hbmp); + } + } + + /// + /// Gets an HBITMAP from any image. + /// + /// The image to get an HBITMAP from. + /// An HBITMAP pointer. + /// + /// The caller is responsible to call DeleteObject on the HBITMAP. + /// + private static IntPtr GetHbitmapFromImage(Image image) + { + if (image is Bitmap) + { + return ((Bitmap) image).GetHbitmap(); + } + else + { + Bitmap bmp = new Bitmap(image); + return bmp.GetHbitmap(); + } + } + + /// + /// Sets the drop description for the drag image manager. + /// + /// The DataObject to set. + /// The type of the drop image. + /// The format string for the description. + /// The parameter for the drop description. + /// + /// When setting the drop description, the text can be set in two part, + /// which will be rendered slightly differently to distinguish the description + /// from the subject. For example, the format can be set as "Move to %1" and + /// the insert as "Temp". When rendered, the "%1" in format will be replaced + /// with "Temp", but "Temp" will be rendered slightly different from "Move to ". + /// + public static void SetDropDescription(this IDataObject dataObject, DropImageType type, string format, + string insert) + { + if (format != null && format.Length > 259) + throw new ArgumentException("Format string exceeds the maximum allowed length of 259.", "format"); + if (insert != null && insert.Length > 259) + throw new ArgumentException("Insert string exceeds the maximum allowed length of 259.", "insert"); + + // Fill the structure + DropDescription dd; + dd.type = (int) type; + dd.szMessage = format; + dd.szInsert = insert; + + ((ComIDataObject) dataObject).SetDropDescription(dd); + } + + /// + /// Sets managed data to a clipboard DataObject. + /// + /// The DataObject to set the data on. + /// The clipboard format. + /// The data object. + /// + /// Because the underlying data store is not storing managed objects, but + /// unmanaged ones, this function provides intelligent conversion, allowing + /// you to set unmanaged data into the COM implemented IDataObject. + public static void SetDataEx(this IDataObject dataObject, string format, object data) + { + DataFormats.Format dataFormat = DataFormats.GetFormat(format); + + // Initialize the format structure + FORMATETC formatETC = new FORMATETC(); + formatETC.cfFormat = (short) dataFormat.Id; + formatETC.dwAspect = DVASPECT.DVASPECT_CONTENT; + formatETC.lindex = -1; + formatETC.ptd = IntPtr.Zero; + + // Try to discover the TYMED from the format and data + TYMED tymed = GetCompatibleTymed(format, data); + // If a TYMED was found, we can use the system DataObject + // to convert our value for us. + if (tymed != TYMED.TYMED_NULL) + { + formatETC.tymed = tymed; + + // Set data on an empty DataObject instance + DataObject conv = new DataObject(); + conv.SetData(format, true, data); + + // Now retrieve the data, using the COM interface. + // This will perform a managed to unmanaged conversion for us. + STGMEDIUM medium; + ((ComIDataObject) conv).GetData(ref formatETC, out medium); + try + { + // Now set the data on our data object + ((ComIDataObject) dataObject).SetData(ref formatETC, ref medium, true); + } + catch + { + // On exceptions, release the medium + ReleaseStgMedium(ref medium); + throw; + } + } + else + { + // Since we couldn't determine a TYMED, this data + // is likely custom managed data, and won't be used + // by unmanaged code, so we'll use our custom marshaling + // implemented by our COM IDataObject extensions. + + ((ComIDataObject) dataObject).SetManagedData(format, data); + } + } + + /// + /// Gets a system compatible TYMED for the given format. + /// + /// The data format. + /// The data. + /// A TYMED value, indicating a system compatible TYMED that can + /// be used for data marshaling. + private static TYMED GetCompatibleTymed(string format, object data) + { + if (IsFormatEqual(format, DataFormats.Bitmap) && data is Bitmap) + return TYMED.TYMED_GDI; + if (IsFormatEqual(format, DataFormats.EnhancedMetafile)) + return TYMED.TYMED_ENHMF; + if (data is Stream || IsFormatEqual(format, DataFormats.Html) || IsFormatEqual(format, DataFormats.Text) || + IsFormatEqual(format, DataFormats.Rtf) || IsFormatEqual(format, DataFormats.OemText) || + IsFormatEqual(format, DataFormats.UnicodeText) || IsFormatEqual(format, "ApplicationTrust") || + IsFormatEqual(format, DataFormats.FileDrop) || IsFormatEqual(format, "FileName") || + IsFormatEqual(format, "FileNameW") || IsFormatEqual(format, "FileGroupDescriptorW")) + return TYMED.TYMED_HGLOBAL; + if (IsFormatEqual(format, DataFormats.Dib) && data is Image) + return TYMED.TYMED_NULL; + if (IsFormatEqual(format, typeof (Bitmap).FullName)) + return TYMED.TYMED_HGLOBAL; + if (IsFormatEqual(format, DataFormats.EnhancedMetafile) || data is Metafile) + return TYMED.TYMED_NULL; + if (IsFormatEqual(format, DataFormats.Serializable) || (data is ISerializable) || + ((data != null) && data.GetType().IsSerializable)) + return TYMED.TYMED_HGLOBAL; + + return TYMED.TYMED_NULL; + } + + /// + /// Compares the equality of two clipboard formats. + /// + /// First format. + /// Second format. + /// True if the formats are equal. False otherwise. + private static bool IsFormatEqual(string formatA, string formatB) + { + return string.CompareOrdinal(formatA, formatB) == 0; + } + + /// + /// Gets managed data from a clipboard DataObject. + /// + /// The DataObject to obtain the data from. + /// The format for which to get the data in. + /// The data object instance. + public static object GetDataEx(this IDataObject dataObject, string format) + { + // Get the data + object data = dataObject.GetData(format, true); + + // If the data is a stream, we'll check to see if it + // is stamped by us for custom marshaling + if (data is Stream) + { + object data2 = ((ComIDataObject) dataObject).GetManagedData(format); + if (data2 != null) + return data2; + } + + return data; + } + } +} + +#endregion // SwfDragDropLib\SwfDataObjectExtensions.cs + +#region SwfDragDropLib\SwfDragDropLibExtensions.cs + +namespace Ch.Cyberduck.Ui.Core +{ + public static class SwfDragDropLibExtensions + { + /// + /// Converts a System.Windows.Point value to a DragDropLib.Win32Point value. + /// + /// Input value. + /// Converted value. + public static Win32Point ToWin32Point(this Point pt) + { + Win32Point wpt = new Win32Point(); + wpt.x = pt.X; + wpt.y = pt.Y; + return wpt; + } + } +} + +#endregion // SwfDragDropLib\SwfDragDropLibExtensions.cs + +#region SwfDragDropLib\SwfDropTargetHelper.cs + +namespace System.Windows.Forms +{ + public static class DropTargetHelper + { + /// + /// Internal cache of IDataObjects related to drop targets. + /// + private static readonly IDictionary s_dataContext = new Dictionary(); + + /// + /// Internal instance of the DragDropHelper. + /// + private static readonly IDropTargetHelper s_instance = (IDropTargetHelper) new DragDropHelper(); + + /// + /// Notifies the DragDropHelper that the specified Control received + /// a DragEnter event. + /// + /// The Control the received the DragEnter event. + /// The DataObject containing a drag image. + /// The current cursor's offset relative to the window. + /// The accepted drag drop effect. + public static void DragEnter(Control control, IDataObject data, Point cursorOffset, DragDropEffects effect) + { + s_instance.DragEnter(control, data, cursorOffset, effect); + } + + /// + /// Sets the drop description of the IDataObject and then notifies the + /// DragDropHelper that the specified Control received a DragEnter event. + /// + /// The Control the received the DragEnter event. + /// The DataObject containing a drag image. + /// The current cursor's offset relative to the window. + /// The accepted drag drop effect. + /// The drop description message. + /// The drop description insert. + /// + /// Because the DragLeave event in SWF does not provide the IDataObject in the + /// event args, this DragEnter override of the DropTargetHelper will cache a + /// copy of the IDataObject based on the provided Control so that it may be + /// cleared using the DragLeave override that takes a Control parameter. Note that + /// if you use this override of DragEnter, you must call the DragLeave override + /// that takes a Control parameter to avoid a possible memory leak. However, calling + /// this method multiple times with the same Control parameter while not calling the + /// DragLeave method will not leak memory. + /// + public static void DragEnter(Control control, IDataObject data, Point cursorOffset, DragDropEffects effect, + string descriptionMessage, string descriptionInsert) + { + data.SetDropDescription((DropImageType) effect, descriptionMessage, descriptionInsert); + DragEnter(control, data, cursorOffset, effect); + + if (!s_dataContext.ContainsKey(control)) + s_dataContext.Add(control, data); + else + s_dataContext[control] = data; + } + + /// + /// Notifies the DragDropHelper that the current Control received + /// a DragOver event. + /// + /// The current cursor's offset relative to the window. + /// The accepted drag drop effect. + public static void DragOver(Point cursorOffset, DragDropEffects effect) + { + s_instance.DragOver(cursorOffset, effect); + } + + /// + /// Notifies the DragDropHelper that the current Control received + /// a DragLeave event. + /// + public static void DragLeave() + { + s_instance.DragLeave(); + } + + /// + /// Clears the drop description of the IDataObject previously associated to the + /// provided control, then notifies the DragDropHelper that the current control + /// received a DragLeave event. + /// + /// + /// Because the DragLeave event in SWF does not provide the IDataObject in the + /// event args, this DragLeave override of the DropTargetHelper will lookup a + /// cached copy of the IDataObject based on the provided Control and clear + /// the drop description. Note that the underlying DragLeave call of the + /// Shell IDropTargetHelper object keeps the current control cached, so the + /// control passed to this method is only relevant to looking up the IDataObject + /// on which to clear the drop description. + /// + public static void DragLeave(Control control) + { + if (s_dataContext.ContainsKey(control)) + { + s_dataContext[control].SetDropDescription(DropImageType.Invalid, null, null); + s_dataContext.Remove(control); + } + + DragLeave(); + } + + /// + /// Notifies the DragDropHelper that the current Control received + /// a DragOver event. + /// + /// The DataObject containing a drag image. + /// The current cursor's offset relative to the window. + /// The accepted drag drop effect. + public static void Drop(IDataObject data, Point cursorOffset, DragDropEffects effect) + { + // No need to clear the drop description, but don't keep it stored to avoid memory leaks + foreach (KeyValuePair pair in s_dataContext) + { + if (ReferenceEquals(pair.Value, data)) + { + s_dataContext.Remove(pair); + break; + } + } + + s_instance.Drop(data, cursorOffset, effect); + } + + /// + /// Tells the DragDropHelper to show or hide the drag image. + /// + /// True to show the image. False to hide it. + public static void Show(bool show) + { + s_instance.Show(show); + } + } +} + +#endregion // SwfDragDropLib\SwfDropTargetHelper.cs + +#region SwfDragDropLib\SwfDropTargetHelperExtensions.cs + +namespace Ch.Cyberduck.Ui.Core +{ + using ComIDataObject = IDataObject; + + public static class SwfDropTargetHelperExtensions + { + /// + /// Notifies the DragDropHelper that the specified Control received + /// a DragEnter event. + /// + /// The DragDropHelper instance to notify. + /// The Control the received the DragEnter event. + /// The DataObject containing a drag image. + /// The current cursor's offset relative to the window. + /// The accepted drag drop effect. + public static void DragEnter(this IDropTargetHelper dropHelper, Control control, + System.Windows.Forms.IDataObject data, Point cursorOffset, DragDropEffects effect) + { + IntPtr controlHandle = IntPtr.Zero; + if (control != null) + controlHandle = control.Handle; + Win32Point pt = cursorOffset.ToWin32Point(); + dropHelper.DragEnter(controlHandle, (ComIDataObject) data, ref pt, effect); + } + + /// + /// Notifies the DragDropHelper that the current Control received + /// a DragOver event. + /// + /// The DragDropHelper instance to notify. + /// The current cursor's offset relative to the window. + /// The accepted drag drop effect. + public static void DragOver(this IDropTargetHelper dropHelper, Point cursorOffset, DragDropEffects effect) + { + Win32Point pt = cursorOffset.ToWin32Point(); + dropHelper.DragOver(ref pt, effect); + } + + /// + /// Notifies the DragDropHelper that the current Control received + /// a Drop event. + /// + /// The DragDropHelper instance to notify. + /// The DataObject containing a drag image. + /// The current cursor's offset relative to the window. + /// The accepted drag drop effect. + public static void Drop(this IDropTargetHelper dropHelper, System.Windows.Forms.IDataObject data, + Point cursorOffset, DragDropEffects effect) + { + Win32Point pt = cursorOffset.ToWin32Point(); + dropHelper.Drop((ComIDataObject) data, ref pt, effect); + } + } +} + +#endregion // SwfDragDropLib\SwfDropTargetHelperExtensions.cs + +#region SwfDragDropLib\SwfDragSourceHelper.cs + +namespace System.Windows.Forms +{ + /// + /// Provides helper methods for working with the Shell drag image manager. + /// + public static class DragSourceHelper + { + // CFSTR_DROPDESCRIPTION + private const string DropDescriptionFormat = "DropDescription"; + // The drag image manager sets this flag to indicate if the current + // drop target supports drag images. + private const string IsShowingLayeredFormat = "IsShowingLayered"; + private const uint WM_INVALIDATEDRAGIMAGE = 0x403; + + /// + /// Keeps a cached drag source context, keyed on the drag source control. + /// + private static readonly IDictionary s_dataContext = + new Dictionary(); + + /// + /// Keeps drop description info for a data object. + /// + private static readonly IDictionary s_dropDescriptions = + new Dictionary(); + + [DllImport("user32.dll")] + private static extern void PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); + + /// + /// Creates a default DataObject with an internal COM callable implemetation of IDataObject. + /// + /// A new instance of System.Windows.Forms.IDataObject. + public static IDataObject CreateDataObject() + { + return new DataObject(new Ch.Cyberduck.Ui.Core.DataObject()); + } + + /// + /// Creates a DataObject with an internal COM callable implementation of IDataObject. + /// This override also sets the drag image to the specified Bitmap and sets a flag + /// on the system IDragSourceHelper2 to allow drop descriptions. + /// + /// A Bitmap from which to create the drag image. + /// The drag image cursor offset. + /// A new instance of System.Windows.Forms.IDataObject. + public static IDataObject CreateDataObject(Bitmap dragImage, Point cursorOffset) + { + IDataObject data = CreateDataObject(); + AllowDropDescription(true); + data.SetDragImage(dragImage, cursorOffset); + return data; + } + + /// + /// Creates a DataObject with an internal COM callable implementation of IDataObject. + /// This override also sets the drag image to a bitmap created from the specified + /// Control instance's UI. It also sets a flag on the system IDragSourceHelper2 to + /// allow drop descriptions. + /// + /// A Control to initialize the drag image from. + /// The drag image cursor offset. + /// A new instance of System.Windows.Forms.IDataObject. + public static IDataObject CreateDataObject(Control control, Point cursorOffset) + { + IDataObject data = CreateDataObject(); + AllowDropDescription(true); + data.SetDragImage(control, cursorOffset); + return data; + } + + /// + /// Registers a Control as a drag source and provides default implementations of + /// GiveFeedback and QueryContinueDrag. + /// + /// The drag source Control instance. + /// The DataObject associated to the drag source. + /// Callers must call UnregisterDefaultDragSource when the drag and drop + /// operation is complete to avoid memory leaks. + public static void RegisterDefaultDragSource(Control control, IDataObject data) + { + // Cache the drag source and the associated data object + DragSourceEntry entry = new DragSourceEntry(data); + if (!s_dataContext.ContainsKey(control)) + s_dataContext.Add(control, entry); + else + s_dataContext[control] = entry; + + // We need to listen for drop description changes. If a drop target + // changes the drop description, we shouldn't provide a default one. + entry.adviseConnection = ((Runtime.InteropServices.ComTypes.IDataObject) data).Advise(new AdviseSink(data), + DropDescriptionFormat, 0); + + // Hook up the default drag source event handlers + control.GiveFeedback += DefaultGiveFeedbackHandler; + control.QueryContinueDrag += DefaultQueryContinueDragHandler; + } + + /// + /// Registers a Control as a drag source and provides default implementations of + /// GiveFeedback and QueryContinueDrag. This override also handles the data object + /// creation, including initialization of the drag image from the Control. + /// + /// The drag source Control instance. + /// The drag image cursor offset. + /// The created data object. + /// Callers must call UnregisterDefaultDragSource when the drag and drop + /// operation is complete to avoid memory leaks. + public static IDataObject RegisterDefaultDragSource(Control control, Point cursorOffset) + { + IDataObject data = CreateDataObject(control, cursorOffset); + RegisterDefaultDragSource(control, data); + return data; + } + + /// + /// Registers a Control as a drag source and provides default implementations of + /// GiveFeedback and QueryContinueDrag. This override also handles the data object + /// creation, including initialization of the drag image from the speicified Bitmap. + /// + /// The drag source Control instance. + /// A Bitmap to initialize the drag image from. + /// The drag image cursor offset. + /// The created data object. + /// Callers must call UnregisterDefaultDragSource when the drag and drop + /// operation is complete to avoid memory leaks. + public static IDataObject RegisterDefaultDragSource(Control control, Bitmap dragImage, Point cursorOffset) + { + IDataObject data = CreateDataObject(dragImage, cursorOffset); + RegisterDefaultDragSource(control, data); + return data; + } + + /// + /// Unregisters a drag source from the internal cache. + /// + /// The drag source Control. + public static void UnregisterDefaultDragSource(Control control) + { + if (s_dataContext.ContainsKey(control)) + { + DragSourceEntry entry = s_dataContext[control]; + Runtime.InteropServices.ComTypes.IDataObject dataObjectCOM = + (Runtime.InteropServices.ComTypes.IDataObject) entry.data; + + // Stop listening to drop description changes + dataObjectCOM.DUnadvise(entry.adviseConnection); + + // Unhook the default drag source event handlers + control.GiveFeedback -= DefaultGiveFeedbackHandler; + control.QueryContinueDrag -= DefaultQueryContinueDragHandler; + + // Remove the entries from our context caches + s_dataContext.Remove(control); + s_dropDescriptions.Remove(entry.data); + } + } + + /// + /// Performs a default drag and drop operation for the specified drag source. + /// + /// The drag source Control. + /// The drag image cursor offset. + /// The allowed drop effects. + /// The associated data. + /// The accepted drop effects from the completed operation. + public static DragDropEffects DoDragDrop(Control control, Point cursorOffset, DragDropEffects allowedEffects, + params KeyValuePair[] data) + { + IDataObject dataObject = RegisterDefaultDragSource(control, cursorOffset); + return DoDragDropInternal(control, dataObject, allowedEffects, data); + } + + /// + /// Performs a default drag and drop operation for the specified drag source. + /// + /// The drag source Control. + /// The Bitmap to initialize the drag image from. + /// The drag image cursor offset. + /// The allowed drop effects. + /// The associated data. + /// The accepted drop effects from the completed operation. + public static DragDropEffects DoDragDrop(Control control, Bitmap dragImage, Point cursorOffset, + DragDropEffects allowedEffects, params KeyValuePair[] data) + { + IDataObject dataObject = RegisterDefaultDragSource(control, dragImage, cursorOffset); + return DoDragDropInternal(control, dataObject, allowedEffects, data); + } + + ///yla ext + public static DragDropEffects DoDragDrop(Control control, Bitmap dragImage, Point cursorOffset, + DragDropEffects allowedEffects, Runtime.InteropServices.ComTypes.IDataObject data) + { + AllowDropDescription(true); + + DataObject d = new DataObject(data); + ((IDataObject) d).SetDragImage(dragImage, cursorOffset); + RegisterDefaultDragSource(control, d); + try + { + return control.DoDragDrop(d, allowedEffects); + } + finally + { + UnregisterDefaultDragSource(control); + } + } + + /// + /// Performs a default drag and drop operation for the specified drag source. + /// + /// The drag source Control. + /// The data object associated to the drag and drop operation. + /// The allowed drop effects. + /// The associated data. + /// The accepted drop effects from the completed operation. + private static DragDropEffects DoDragDropInternal(Control control, IDataObject dataObject, + DragDropEffects allowedEffects, KeyValuePair[] data) + { + // Set the data onto the data object. + if (data != null) + { + foreach (KeyValuePair dataPair in data) + dataObject.SetDataEx(dataPair.Key, dataPair.Value); + } + + try + { + return control.DoDragDrop(dataObject, allowedEffects); + } + finally + { + UnregisterDefaultDragSource(control); + } + } + + /// + /// Provides a default GiveFeedback event handler for drag sources. + /// + /// The object that raised the event. Should be set to the drag source. + /// The event arguments. + public static void DefaultGiveFeedbackHandler(object sender, GiveFeedbackEventArgs e) + { + Control control = sender as Control; + if (control != null) + { + if (s_dataContext.ContainsKey(control)) + { + DefaultGiveFeedback(s_dataContext[control].data, e); + } + } + } + + /// + /// Provides a default GiveFeedback event handler for drag sources. + /// + /// The associated data object for the event. + /// The event arguments. + public static void DefaultGiveFeedback(IDataObject data, GiveFeedbackEventArgs e) + { + // For drop targets that don't set the drop description, we'll + // set a default one. Drop targets that do set drop descriptions + // should set an invalid drop description during DragLeave. + bool setDefaultDropDesc = false; + bool isDefaultDropDesc = IsDropDescriptionDefault(data); + DropImageType currentType = DropImageType.Invalid; + if (!IsDropDescriptionValid(data) || isDefaultDropDesc) + { + currentType = GetDropImageType(data); + setDefaultDropDesc = true; + } + + if (IsShowingLayered(data)) + { + // The default drag source implementation uses drop descriptions, + // so we won't use default cursors. + e.UseDefaultCursors = false; + Cursor.Current = Cursors.Arrow; + } + else + e.UseDefaultCursors = true; + + // We need to invalidate the drag image to refresh the drop description. + // This is tricky to implement correctly, but we try to mimic the Windows + // Explorer behavior. We internally use a flag to tell us to invalidate + // the drag image, so if that is set, we'll invalidate. Otherwise, we + // always invalidate if the drop description was set by the drop target, + // *or* if the current drop image is not None. So if we set a default + // drop description to anything but None, we'll always invalidate. + if (InvalidateRequired(data) || !isDefaultDropDesc || currentType != DropImageType.None) + { + InvalidateDragImage(data); + + // The invalidate required flag only lasts for one invalidation + SetInvalidateRequired(data, false); + } + + // If the drop description is currently invalid, or if it is a default + // drop description already, we should check about re-setting it. + if (setDefaultDropDesc) + { + // Only change if the effect changed + if ((DropImageType) e.Effect != currentType) + { + if (e.Effect == DragDropEffects.Copy) + data.SetDropDescription(DropImageType.Copy, "Copy", String.Empty); + else if (e.Effect == DragDropEffects.Link) + data.SetDropDescription(DropImageType.Link, "Link", String.Empty); + else if (e.Effect == DragDropEffects.Move) + data.SetDropDescription(DropImageType.Move, "Move", String.Empty); + else if (e.Effect == DragDropEffects.None) + data.SetDropDescription(DropImageType.None, null, null); + SetDropDescriptionIsDefault(data, true); + + // We can't invalidate now, because the drag image manager won't + // pick it up... so we set this flag to invalidate on the next + // GiveFeedback event. + SetInvalidateRequired(data, true); + } + } + } + + /// + /// Provides a default handler for the QueryContinueDrag drag source event. + /// + /// The object that raised the event. Not used internally. + /// The event arguments. + public static void DefaultQueryContinueDragHandler(object sender, QueryContinueDragEventArgs e) + { + DefaultQueryContinueDrag(e); + } + + /// + /// Provides a default handler for the QueryContinueDrag drag source event. + /// + /// The event arguments. + public static void DefaultQueryContinueDrag(QueryContinueDragEventArgs e) + { + if (e.EscapePressed) + { + e.Action = DragAction.Cancel; + } + } + + /// + /// Sets a flag on the system IDragSourceHelper2 object to allow drop descriptions + /// on the drag image. + /// + /// True to allow drop descriptions, otherwise False. + /// Must be called before IDragSourceHelper.InitializeFromBitmap or + /// IDragSourceHelper.InitializeFromControl is called. + public static void AllowDropDescription(bool allow) + { + IDragSourceHelper2 sourceHelper = (IDragSourceHelper2) new DragDropHelper(); + sourceHelper.SetFlags(allow ? 1 : 0); + } + + /// + /// Invalidates the drag image. + /// + /// The data object for which to invalidate the drag image. + /// This call tells the drag image manager to reformat the internal + /// cached drag image, based on the already set drag image bitmap and current drop + /// description. + public static void InvalidateDragImage(IDataObject dataObject) + { + if (dataObject.GetDataPresent("DragWindow")) + { + IntPtr hwnd = GetIntPtrFromData(dataObject.GetData("DragWindow")); + PostMessage(hwnd, WM_INVALIDATEDRAGIMAGE, IntPtr.Zero, IntPtr.Zero); + } + } + + /// + /// Gets an IntPtr from data acquired from a data object. + /// + /// The data that contains the IntPtr. + /// An IntPtr. + private static IntPtr GetIntPtrFromData(object data) + { + byte[] buf = null; + + if (data is MemoryStream) + { + buf = new byte[4]; + if (4 != ((MemoryStream) data).Read(buf, 0, 4)) + throw new ArgumentException("Could not read an IntPtr from the MemoryStream"); + } + if (data is byte[]) + { + buf = (byte[]) data; + if (buf.Length < 4) + throw new ArgumentException("Could not read an IntPtr from the byte array"); + } + + if (buf == null) + throw new ArgumentException("Could not read an IntPtr from the " + data.GetType()); + + int p = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0]; + return new IntPtr(p); + } + + /// + /// Determines if the IsShowingLayered flag is set on the data object. + /// + /// The data object. + /// True if the flag is set, otherwise false. + private static bool IsShowingLayered(IDataObject dataObject) + { + if (dataObject.GetDataPresent(IsShowingLayeredFormat)) + { + object data = dataObject.GetData(IsShowingLayeredFormat); + if (data != null) + return GetBooleanFromData(data); + } + + return false; + } + + /// + /// Converts compatible clipboard data to a boolean value. + /// + /// The clipboard data. + /// True if the data can be converted to a boolean and is set, otherwise False. + private static bool GetBooleanFromData(object data) + { + if (data is Stream) + { + Stream stream = data as Stream; + BinaryReader reader = new BinaryReader(stream); + return reader.ReadBoolean(); + } + + // Anything else isn't supported for now + return false; + } + + /// + /// Checks if the current drop description, if any, is valid. + /// + /// The DataObject from which to get the drop description. + /// True if the drop description is set, and the + /// DropImageType is not DropImageType.Invalid. + private static bool IsDropDescriptionValid(IDataObject dataObject) + { + object data = ((Runtime.InteropServices.ComTypes.IDataObject) dataObject).GetDropDescription(); + if (data is DropDescription) + return (DropImageType) ((DropDescription) data).type != DropImageType.Invalid; + return false; + } + + /// + /// Checks if the IsDefault drop description flag is set for the associated DataObject. + /// + /// The associated DataObject. + /// True if the IsDefault flag is set, otherwise False. + private static bool IsDropDescriptionDefault(IDataObject dataObject) + { + if (s_dropDescriptions.ContainsKey(dataObject)) + return (s_dropDescriptions[dataObject] & DropDescriptionFlags.IsDefault) == + DropDescriptionFlags.IsDefault; + return false; + } + + /// + /// Checks if the InvalidateRequired drop description flag is set for the associated DataObject. + /// + /// The associated DataObject. + /// True if the InvalidateRequired flag is set, otherwise False. + private static bool InvalidateRequired(IDataObject dataObject) + { + if (s_dropDescriptions.ContainsKey(dataObject)) + return (s_dropDescriptions[dataObject] & DropDescriptionFlags.InvalidateRequired) == + DropDescriptionFlags.InvalidateRequired; + return false; + } + + /// + /// Sets the IsDefault drop description flag for the associated DataObject. + /// + /// The associdated DataObject. + /// True to set the flag, False to unset it. + private static void SetDropDescriptionIsDefault(IDataObject dataObject, bool isDefault) + { + if (isDefault) + SetDropDescriptionFlag(dataObject, DropDescriptionFlags.IsDefault); + else + UnsetDropDescriptionFlag(dataObject, DropDescriptionFlags.IsDefault); + } + + /// + /// Sets the InvalidatedRequired drop description flag for the associated DataObject. + /// + /// The associdated DataObject. + /// True to set the flag, False to unset it. + private static void SetInvalidateRequired(IDataObject dataObject, bool required) + { + if (required) + SetDropDescriptionFlag(dataObject, DropDescriptionFlags.InvalidateRequired); + else + UnsetDropDescriptionFlag(dataObject, DropDescriptionFlags.InvalidateRequired); + } + + /// + /// Sets a drop description flag. + /// + /// The associated DataObject. + /// The drop description flag to set. + private static void SetDropDescriptionFlag(IDataObject dataObject, DropDescriptionFlags flag) + { + if (s_dropDescriptions.ContainsKey(dataObject)) + s_dropDescriptions[dataObject] |= flag; + else + s_dropDescriptions.Add(dataObject, flag); + } + + /// + /// Unsets a drop description flag. + /// + /// The associated DataObject. + /// The drop description flag to unset. + private static void UnsetDropDescriptionFlag(IDataObject dataObject, DropDescriptionFlags flag) + { + if (s_dropDescriptions.ContainsKey(dataObject)) + { + DropDescriptionFlags current = s_dropDescriptions[dataObject]; + s_dropDescriptions[dataObject] = (current | flag) ^ flag; + } + } + + /// + /// Gets the current DropDescription's drop image type. + /// + /// The DataObject. + /// The current drop image type. + private static DropImageType GetDropImageType(IDataObject dataObject) + { + object data = ((Runtime.InteropServices.ComTypes.IDataObject) dataObject).GetDropDescription(); + if (data is DropDescription) + return (DropImageType) ((DropDescription) data).type; + return DropImageType.Invalid; + } + + /// + /// Provides an advisory sink for the COM IDataObject implementation. + /// + private class AdviseSink : IAdviseSink + { + // The associated data object + private readonly IDataObject data; + + /// + /// Creates an AdviseSink associated to the specified data object. + /// + /// The data object. + public AdviseSink(IDataObject data) + { + this.data = data; + } + + /// + /// Handles DataChanged events from a COM IDataObject. + /// + /// The data format that had a change. + /// The data value. + public void OnDataChange(ref FORMATETC format, ref STGMEDIUM stgmedium) + { + // We listen to DropDescription changes, so that we can unset the IsDefault + // drop description flag. + object odd = ((Runtime.InteropServices.ComTypes.IDataObject) data).GetDropDescription(); + if (odd != null) + SetDropDescriptionIsDefault(data, false); + } + + public void OnClose() + { + throw new NotImplementedException(); + } + + public void OnRename(IMoniker moniker) + { + throw new NotImplementedException(); + } + + public void OnSave() + { + throw new NotImplementedException(); + } + + public void OnViewChange(int aspect, int index) + { + throw new NotImplementedException(); + } + } + + /// + /// Represents a drag source context entry. + /// + private class DragSourceEntry + { + public readonly IDataObject data; + public int adviseConnection; + + public DragSourceEntry(IDataObject data) + { + this.data = data; + } + } + + /// + /// Internally used to track information about the current drop description. + /// + [Flags] + private enum DropDescriptionFlags + { + None = 0, + IsDefault = 1, + InvalidateRequired = 2 + } + } +} + #endregion // SwfDragDropLib\SwfDragSourceHelper.cs \ No newline at end of file diff --git a/source/ch/cyberduck/ui/core/GlobalKeyboardHook.cs b/windows/src/main/csharp/ch/cyberduck/ui/core/GlobalKeyboardHook.cs similarity index 97% rename from source/ch/cyberduck/ui/core/GlobalKeyboardHook.cs rename to windows/src/main/csharp/ch/cyberduck/ui/core/GlobalKeyboardHook.cs index 5c19b66173..a2ae59547d 100644 --- a/source/ch/cyberduck/ui/core/GlobalKeyboardHook.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/core/GlobalKeyboardHook.cs @@ -1,264 +1,264 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Diagnostics; -using System.Runtime.InteropServices; -using System.Windows.Forms; - -namespace Ch.Cyberduck.Ui.Core -{ - /// - /// Helper class for global (system-wide) keyboard hooks. - /// - public class GlobalKeyboardHook - { - private const byte VK_CAPITAL = 0x14; - private const byte VK_LALT = 0xA4; - private const byte VK_LCONTROL = 0xA2; - private const byte VK_LSHIFT = 0xA0; - private const byte VK_NUMLOCK = 0x90; - private const byte VK_RALT = 0xA5; - private const byte VK_RCONTROL = 0x3; - private const byte VK_RSHIFT = 0xA1; - private const byte VK_SHIFT = 0x10; - private const int WH_KEYBOARD = 2; - private const int WH_KEYBOARD_LL = 13; - private const int WM_KEYDOWN = 0x100; - private const int WM_KEYUP = 0x101; - private const int WM_SYSKEYDOWN = 0x104; - private const int WM_SYSKEYUP = 0x105; - // const byte LLKHF_ALTDOWN = 0x20; // not used - - /// - /// Value indicating if hook is active. - /// - private bool m_bHookActive; - - /// - /// Stored reference to the HookProc delegate (to prevent delegate from beeing collected by GC!) - /// - protected HookProc m_hookproc; - - /// - /// Stored hook handle returned by SetWindowsHookEx - /// - private int m_iHandleToHook; - - /// - /// Gets a value indicating if hook is active. - /// - public bool HookActive - { - get { return m_bHookActive; } - } - - /// - /// Occurs when a key is pressed. - /// - public event KeyEventHandler KeyDown; - - /// - /// Occurs when a key is released. - /// - public event KeyEventHandler KeyUp; - - /// - /// Occurs when a character key is pressed. - /// - public event KeyPressEventHandler KeyPress; - - /// - /// Dtor. - /// - ~GlobalKeyboardHook() - { - Unhook(); - } - - /// - /// Install the global hook. - /// - /// True if hook was successful, otherwise false. - public bool Hook() - { - if (!m_bHookActive) - { - m_hookproc = new HookProc(HookCallbackProcedure); - - IntPtr hInstance = GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName); - m_iHandleToHook = SetWindowsHookEx(WH_KEYBOARD_LL, m_hookproc, hInstance, 0); - - if (m_iHandleToHook != 0) - { - m_bHookActive = true; - } - } - return m_bHookActive; - } - - /// - /// Uninstall the global hook. - /// - public void Unhook() - { - if (m_bHookActive) - { - UnhookWindowsHookEx(m_iHandleToHook); - m_bHookActive = false; - } - } - - /// - /// Raises the KeyDown event. - /// - /// KeyEventArgs - protected virtual void OnKeyDown(KeyEventArgs kea) - { - if (KeyDown != null) - KeyDown(this, kea); - } - - /// - /// Raises the KeyUp event. - /// - /// KeyEventArgs - protected virtual void OnKeyUp(KeyEventArgs kea) - { - if (KeyUp != null) - KeyUp(this, kea); - } - - /// - /// Raises the KeyPress event. - /// - /// KeyEventArgs - protected virtual void OnKeyPress(KeyPressEventArgs kpea) - { - if (KeyPress != null) - KeyPress(this, kpea); - } - - /// - /// Called when hook is active and a key was pressed. - /// - private int HookCallbackProcedure(int nCode, int wParam, IntPtr lParam) - { - bool bHandled = false; - - if (nCode > -1 && (KeyDown != null || KeyUp != null || KeyPress != null)) - { - // Get keyboard data - KeyboardHookStruct khs = - (KeyboardHookStruct) Marshal.PtrToStructure(lParam, typeof (KeyboardHookStruct)); - - // Get key states - bool bControl = ((GetKeyState(VK_LCONTROL) & 0x80) != 0) || ((GetKeyState(VK_RCONTROL) & 0x80) != 0); - bool bShift = ((GetKeyState(VK_LSHIFT) & 0x80) != 0) || ((GetKeyState(VK_RSHIFT) & 0x80) != 0); - bool bAlt = ((GetKeyState(VK_LALT) & 0x80) != 0) || ((GetKeyState(VK_RALT) & 0x80) != 0); - bool bCapslock = (GetKeyState(VK_CAPITAL) != 0); - - // Create KeyEventArgs - KeyEventArgs kea = - new KeyEventArgs( - (Keys) - (khs.vkCode | (bControl ? (int) Keys.Control : 0) | (bShift ? (int) Keys.Shift : 0) | - (bAlt ? (int) Keys.Alt : 0))); - - // Raise KeyDown/KeyUp events - if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) - { - OnKeyDown(kea); - bHandled = kea.Handled; - } - else if (wParam == WM_KEYUP || wParam == WM_SYSKEYUP) - { - OnKeyUp(kea); - bHandled = kea.Handled; - } - - // Raise KeyPress event - if (wParam == WM_KEYDOWN && !bHandled && !kea.SuppressKeyPress) - { - byte[] abyKeyState = new byte[256]; - byte[] abyInBuffer = new byte[2]; - GetKeyboardState(abyKeyState); - - if (ToAscii(khs.vkCode, khs.scanCode, abyKeyState, abyInBuffer, khs.flags) == 1) - { - char chKey = (char) abyInBuffer[0]; - if ((bCapslock ^ bShift) && Char.IsLetter(chKey)) - chKey = Char.ToUpper(chKey); - KeyPressEventArgs kpea = new KeyPressEventArgs(chKey); - OnKeyPress(kpea); - bHandled = kea.Handled; - } - } - } - - if (bHandled) - return 1; - else - return CallNextHookEx(m_iHandleToHook, nCode, wParam, lParam); - } - - [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, - SetLastError = true)] - private static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, int dwThreadId); - - [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, - SetLastError = true)] - private static extern int UnhookWindowsHookEx(int idHook); - - [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] - private static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam); - - [DllImport("user32.dll")] - private static extern int GetKeyboardState(byte[] pbKeyState); - - [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] - private static extern short GetKeyState(int vKey); - - [DllImport("user32.dll")] - private static extern int ToAscii(int uVirtKey, int uScanCode, byte[] lpbKeyState, byte[] lpwTransKey, - int fuState); - - [DllImport("kernel32.dll", CharSet = CharSet.Auto)] - public static extern IntPtr GetModuleHandle(string lpModuleName); - - /// - /// Represents the method called when a hook catches a monitored event. - protected delegate int HookProc(int nCode, int wParam, IntPtr lParam); - - /// - /// Marshalling of the Windows-API KBDLLHOOKSTRUCT structure.# - /// Contains information about a low-level keyboard input event. - /// This is named "struct" to be consistent with the Windows API name, - /// but it must be a class since it is passed as a pointer in SetWindowsHookEx. - /// - [StructLayout(LayoutKind.Sequential)] - private class KeyboardHookStruct - { - public int vkCode; - public int scanCode; - public int flags; - public int time; - public int dwExtraInfo; - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace Ch.Cyberduck.Ui.Core +{ + /// + /// Helper class for global (system-wide) keyboard hooks. + /// + public class GlobalKeyboardHook + { + private const byte VK_CAPITAL = 0x14; + private const byte VK_LALT = 0xA4; + private const byte VK_LCONTROL = 0xA2; + private const byte VK_LSHIFT = 0xA0; + private const byte VK_NUMLOCK = 0x90; + private const byte VK_RALT = 0xA5; + private const byte VK_RCONTROL = 0x3; + private const byte VK_RSHIFT = 0xA1; + private const byte VK_SHIFT = 0x10; + private const int WH_KEYBOARD = 2; + private const int WH_KEYBOARD_LL = 13; + private const int WM_KEYDOWN = 0x100; + private const int WM_KEYUP = 0x101; + private const int WM_SYSKEYDOWN = 0x104; + private const int WM_SYSKEYUP = 0x105; + // const byte LLKHF_ALTDOWN = 0x20; // not used + + /// + /// Value indicating if hook is active. + /// + private bool m_bHookActive; + + /// + /// Stored reference to the HookProc delegate (to prevent delegate from beeing collected by GC!) + /// + protected HookProc m_hookproc; + + /// + /// Stored hook handle returned by SetWindowsHookEx + /// + private int m_iHandleToHook; + + /// + /// Gets a value indicating if hook is active. + /// + public bool HookActive + { + get { return m_bHookActive; } + } + + /// + /// Occurs when a key is pressed. + /// + public event KeyEventHandler KeyDown; + + /// + /// Occurs when a key is released. + /// + public event KeyEventHandler KeyUp; + + /// + /// Occurs when a character key is pressed. + /// + public event KeyPressEventHandler KeyPress; + + /// + /// Dtor. + /// + ~GlobalKeyboardHook() + { + Unhook(); + } + + /// + /// Install the global hook. + /// + /// True if hook was successful, otherwise false. + public bool Hook() + { + if (!m_bHookActive) + { + m_hookproc = new HookProc(HookCallbackProcedure); + + IntPtr hInstance = GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName); + m_iHandleToHook = SetWindowsHookEx(WH_KEYBOARD_LL, m_hookproc, hInstance, 0); + + if (m_iHandleToHook != 0) + { + m_bHookActive = true; + } + } + return m_bHookActive; + } + + /// + /// Uninstall the global hook. + /// + public void Unhook() + { + if (m_bHookActive) + { + UnhookWindowsHookEx(m_iHandleToHook); + m_bHookActive = false; + } + } + + /// + /// Raises the KeyDown event. + /// + /// KeyEventArgs + protected virtual void OnKeyDown(KeyEventArgs kea) + { + if (KeyDown != null) + KeyDown(this, kea); + } + + /// + /// Raises the KeyUp event. + /// + /// KeyEventArgs + protected virtual void OnKeyUp(KeyEventArgs kea) + { + if (KeyUp != null) + KeyUp(this, kea); + } + + /// + /// Raises the KeyPress event. + /// + /// KeyEventArgs + protected virtual void OnKeyPress(KeyPressEventArgs kpea) + { + if (KeyPress != null) + KeyPress(this, kpea); + } + + /// + /// Called when hook is active and a key was pressed. + /// + private int HookCallbackProcedure(int nCode, int wParam, IntPtr lParam) + { + bool bHandled = false; + + if (nCode > -1 && (KeyDown != null || KeyUp != null || KeyPress != null)) + { + // Get keyboard data + KeyboardHookStruct khs = + (KeyboardHookStruct) Marshal.PtrToStructure(lParam, typeof (KeyboardHookStruct)); + + // Get key states + bool bControl = ((GetKeyState(VK_LCONTROL) & 0x80) != 0) || ((GetKeyState(VK_RCONTROL) & 0x80) != 0); + bool bShift = ((GetKeyState(VK_LSHIFT) & 0x80) != 0) || ((GetKeyState(VK_RSHIFT) & 0x80) != 0); + bool bAlt = ((GetKeyState(VK_LALT) & 0x80) != 0) || ((GetKeyState(VK_RALT) & 0x80) != 0); + bool bCapslock = (GetKeyState(VK_CAPITAL) != 0); + + // Create KeyEventArgs + KeyEventArgs kea = + new KeyEventArgs( + (Keys) + (khs.vkCode | (bControl ? (int) Keys.Control : 0) | (bShift ? (int) Keys.Shift : 0) | + (bAlt ? (int) Keys.Alt : 0))); + + // Raise KeyDown/KeyUp events + if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) + { + OnKeyDown(kea); + bHandled = kea.Handled; + } + else if (wParam == WM_KEYUP || wParam == WM_SYSKEYUP) + { + OnKeyUp(kea); + bHandled = kea.Handled; + } + + // Raise KeyPress event + if (wParam == WM_KEYDOWN && !bHandled && !kea.SuppressKeyPress) + { + byte[] abyKeyState = new byte[256]; + byte[] abyInBuffer = new byte[2]; + GetKeyboardState(abyKeyState); + + if (ToAscii(khs.vkCode, khs.scanCode, abyKeyState, abyInBuffer, khs.flags) == 1) + { + char chKey = (char) abyInBuffer[0]; + if ((bCapslock ^ bShift) && Char.IsLetter(chKey)) + chKey = Char.ToUpper(chKey); + KeyPressEventArgs kpea = new KeyPressEventArgs(chKey); + OnKeyPress(kpea); + bHandled = kea.Handled; + } + } + } + + if (bHandled) + return 1; + else + return CallNextHookEx(m_iHandleToHook, nCode, wParam, lParam); + } + + [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, + SetLastError = true)] + private static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, int dwThreadId); + + [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, + SetLastError = true)] + private static extern int UnhookWindowsHookEx(int idHook); + + [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] + private static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam); + + [DllImport("user32.dll")] + private static extern int GetKeyboardState(byte[] pbKeyState); + + [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] + private static extern short GetKeyState(int vKey); + + [DllImport("user32.dll")] + private static extern int ToAscii(int uVirtKey, int uScanCode, byte[] lpbKeyState, byte[] lpwTransKey, + int fuState); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto)] + public static extern IntPtr GetModuleHandle(string lpModuleName); + + /// + /// Represents the method called when a hook catches a monitored event. + protected delegate int HookProc(int nCode, int wParam, IntPtr lParam); + + /// + /// Marshalling of the Windows-API KBDLLHOOKSTRUCT structure.# + /// Contains information about a low-level keyboard input event. + /// This is named "struct" to be consistent with the Windows API name, + /// but it must be a class since it is passed as a pointer in SetWindowsHookEx. + /// + [StructLayout(LayoutKind.Sequential)] + private class KeyboardHookStruct + { + public int vkCode; + public int scanCode; + public int flags; + public int time; + public int dwExtraInfo; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/core/Utils.cs b/windows/src/main/csharp/ch/cyberduck/ui/core/Utils.cs similarity index 97% rename from source/ch/cyberduck/ui/core/Utils.cs rename to windows/src/main/csharp/ch/cyberduck/ui/core/Utils.cs index b2d3177686..9c2b117e74 100644 --- a/source/ch/cyberduck/ui/core/Utils.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/core/Utils.cs @@ -1,84 +1,84 @@ -// -// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Windows.Forms; -using ch.cyberduck.core; -using ch.cyberduck.core.local; -using Ch.Cyberduck.Ui.Controller; -using Ch.Cyberduck.Ui.Winforms.Taskdialog; - -namespace Ch.Cyberduck.Ui.Core -{ - public class Utils - { - public static DialogResult CommandBox(IWin32Window owner, string title, string mainInstruction, string content, - string expandedInfo, string help, string verificationText, string commandButtons, bool showCancelButton, - SysIcons mainIcon, SysIcons footerIcon, DialogResponseHandler handler) - { - TaskDialog dialog = new TaskDialog(); - dialog.HelpDelegate = delegate(string url) { BrowserLauncherFactory.get().open(url); }; - DialogResult result = dialog.ShowCommandBox(owner, title, mainInstruction, content, expandedInfo, - FormatHelp(help), verificationText, commandButtons, showCancelButton, mainIcon, footerIcon); - handler(dialog.CommandButtonResult, dialog.VerificationChecked); - return result; - } - - public static DialogResult CommandBox(string title, string mainInstruction, string content, string expandedInfo, - string help, string verificationText, string commandButtons, bool showCancelButton, SysIcons mainIcon, - SysIcons footerIcon, DialogResponseHandler handler) - { - return CommandBox(null, title, mainInstruction, content, expandedInfo, help, verificationText, - commandButtons, showCancelButton, mainIcon, footerIcon, handler); - } - - public static DialogResult CommandBox(string title, string message, string detail, string commandButtons, - bool showCancelButton, string verificationText, SysIcons mainIcon, DialogResponseHandler handler) - { - return CommandBox(title, message, detail, commandButtons, showCancelButton, verificationText, mainIcon, null, - handler); - } - - public static DialogResult CommandBox(string title, string message, string detail, string commandButtons, - bool showCancelButton, string verificationText, SysIcons mainIcon, string help, - DialogResponseHandler handler) - { - return CommandBox(title, message, detail, null, help, verificationText, commandButtons, showCancelButton, - mainIcon, SysIcons.Information, handler); - } - - public static DialogResult MessageBox(IWin32Window owner, string title, string message, string content, - string expandedInfo, string help, string verificationText, DialogResponseHandler handler) - { - TaskDialog dialog = new TaskDialog(); - dialog.HelpDelegate = delegate(string url) { BrowserLauncherFactory.get().open(url); }; - DialogResult result = dialog.MessageBox(owner, title, message, content, expandedInfo, FormatHelp(help), - verificationText, TaskDialogButtons.OK, SysIcons.Information, SysIcons.Information); - handler(-1, dialog.VerificationChecked); - return result; - } - - private static string FormatHelp(string help) - { - if (string.IsNullOrEmpty(help)) - { - return null; - } - return "" + LocaleFactory.localizedString("Help", "Main") + ""; - } - } +// +// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Windows.Forms; +using ch.cyberduck.core; +using ch.cyberduck.core.local; +using Ch.Cyberduck.Ui.Controller; +using Ch.Cyberduck.Ui.Winforms.Taskdialog; + +namespace Ch.Cyberduck.Ui.Core +{ + public class Utils + { + public static DialogResult CommandBox(IWin32Window owner, string title, string mainInstruction, string content, + string expandedInfo, string help, string verificationText, string commandButtons, bool showCancelButton, + SysIcons mainIcon, SysIcons footerIcon, DialogResponseHandler handler) + { + TaskDialog dialog = new TaskDialog(); + dialog.HelpDelegate = delegate(string url) { BrowserLauncherFactory.get().open(url); }; + DialogResult result = dialog.ShowCommandBox(owner, title, mainInstruction, content, expandedInfo, + FormatHelp(help), verificationText, commandButtons, showCancelButton, mainIcon, footerIcon); + handler(dialog.CommandButtonResult, dialog.VerificationChecked); + return result; + } + + public static DialogResult CommandBox(string title, string mainInstruction, string content, string expandedInfo, + string help, string verificationText, string commandButtons, bool showCancelButton, SysIcons mainIcon, + SysIcons footerIcon, DialogResponseHandler handler) + { + return CommandBox(null, title, mainInstruction, content, expandedInfo, help, verificationText, + commandButtons, showCancelButton, mainIcon, footerIcon, handler); + } + + public static DialogResult CommandBox(string title, string message, string detail, string commandButtons, + bool showCancelButton, string verificationText, SysIcons mainIcon, DialogResponseHandler handler) + { + return CommandBox(title, message, detail, commandButtons, showCancelButton, verificationText, mainIcon, null, + handler); + } + + public static DialogResult CommandBox(string title, string message, string detail, string commandButtons, + bool showCancelButton, string verificationText, SysIcons mainIcon, string help, + DialogResponseHandler handler) + { + return CommandBox(title, message, detail, null, help, verificationText, commandButtons, showCancelButton, + mainIcon, SysIcons.Information, handler); + } + + public static DialogResult MessageBox(IWin32Window owner, string title, string message, string content, + string expandedInfo, string help, string verificationText, DialogResponseHandler handler) + { + TaskDialog dialog = new TaskDialog(); + dialog.HelpDelegate = delegate(string url) { BrowserLauncherFactory.get().open(url); }; + DialogResult result = dialog.MessageBox(owner, title, message, content, expandedInfo, FormatHelp(help), + verificationText, TaskDialogButtons.OK, SysIcons.Information, SysIcons.Information); + handler(-1, dialog.VerificationChecked); + return result; + } + + private static string FormatHelp(string help) + { + if (string.IsNullOrEmpty(help)) + { + return null; + } + return "" + LocaleFactory.localizedString("Help", "Main") + ""; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/core/VirtualFileDataObject.cs b/windows/src/main/csharp/ch/cyberduck/ui/core/VirtualFileDataObject.cs similarity index 97% rename from source/ch/cyberduck/ui/core/VirtualFileDataObject.cs rename to windows/src/main/csharp/ch/cyberduck/ui/core/VirtualFileDataObject.cs index f05a9daebc..d4d4b4be28 100644 --- a/source/ch/cyberduck/ui/core/VirtualFileDataObject.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/core/VirtualFileDataObject.cs @@ -1,1085 +1,1085 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Runtime.InteropServices; -using System.Runtime.InteropServices.ComTypes; -using System.Windows.Forms; -using FILETIME = System.Runtime.InteropServices.ComTypes.FILETIME; -using IDataObject = System.Runtime.InteropServices.ComTypes.IDataObject; - -namespace Ch.Cyberduck.Ui.Core -{ - /// - /// Class implementing drag/drop and clipboard support for virtual files. - /// Also offers an alternate interface to the IDataObject interface. - /// - public sealed class VirtualFileDataObject : IDataObject, IAsyncOperation - { - public enum DragDropKeyStates - { - None = 0, - LeftMouseButton = 1, - RightMouseButton = 2, - ShiftKey = 4, - ControlKey = 8, - MiddleMouseButton = 16, - AltKey = 32, - } - - /// - /// Identifier for CFSTR_FILECONTENTS. - /// - private static readonly short FILECONTENTS = - (short) (DataFormats.GetFormat(NativeMethods.CFSTR_FILECONTENTS).Id); - - /// - /// Identifier for CFSTR_FILEDESCRIPTORW. - /// - private static readonly short FILEDESCRIPTORW = - (short) (DataFormats.GetFormat(NativeMethods.CFSTR_FILEDESCRIPTORW).Id); - - /// - /// Identifier for CFSTR_PASTESUCCEEDED. - /// - private static readonly short PASTESUCCEEDED = - (short) (DataFormats.GetFormat(NativeMethods.CFSTR_PASTESUCCEEDED).Id); - - /// - /// Identifier for CFSTR_PERFORMEDDROPEFFECT. - /// - private static readonly short PERFORMEDDROPEFFECT = - (short) (DataFormats.GetFormat(NativeMethods.CFSTR_PERFORMEDDROPEFFECT).Id); - - /// - /// Identifier for CFSTR_PREFERREDDROPEFFECT. - /// - private static readonly short PREFERREDDROPEFFECT = - (short) (DataFormats.GetFormat(NativeMethods.CFSTR_PREFERREDDROPEFFECT).Id); - - /// - /// In-order list of registered data objects. - /// - private readonly List _dataObjects = new List(); - - /// - /// Stores the user-specified end action. - /// - private readonly Action _endAction; - - /// - /// Stores the user-specified start action. - /// - private readonly Action _startAction; - - /// - /// Tracks whether an asynchronous operation is ongoing. - /// - private bool _inOperation; - - /// - /// Initializes a new instance of the VirtualFileDataObject class. - /// - public VirtualFileDataObject() - { - IsAsynchronous = true; - } - - /// - /// Initializes a new instance of the VirtualFileDataObject class. - /// - /// Optional action to run at the start of the data transfer. - /// Optional action to run at the end of the data transfer. - public VirtualFileDataObject(Action startAction, Action endAction) - : this() - { - _startAction = startAction; - _endAction = endAction; - } - - /// - /// Gets or sets a value indicating whether the data object can be used asynchronously. - /// - public bool IsAsynchronous { get; set; } - - /// - /// Gets or sets the CFSTR_PASTESUCCEEDED value for the object. - /// - public DragDropEffects? PasteSucceeded - { - get { return GetDropEffect(PASTESUCCEEDED); } - set { SetData(PASTESUCCEEDED, BitConverter.GetBytes((UInt32) value)); } - } - - /// - /// Gets or sets the CFSTR_PERFORMEDDROPEFFECT value for the object. - /// - public DragDropEffects? PerformedDropEffect - { - get { return GetDropEffect(PERFORMEDDROPEFFECT); } - set { SetData(PERFORMEDDROPEFFECT, BitConverter.GetBytes((UInt32) value)); } - } - - /// - /// Gets or sets the CFSTR_PREFERREDDROPEFFECT value for the object. - /// - public DragDropEffects? PreferredDropEffect - { - get { return GetDropEffect(PREFERREDDROPEFFECT); } - set { SetData(PREFERREDDROPEFFECT, BitConverter.GetBytes((UInt32) value)); } - } - - /// - /// Called by a drop source to specify whether the data object supports asynchronous data extraction. - /// - /// A Boolean value that is set to VARIANT_TRUE to indicate that an asynchronous operation is supported, or VARIANT_FALSE otherwise. - void IAsyncOperation.SetAsyncMode(int fDoOpAsync) - { - IsAsynchronous = !(NativeMethods.VARIANT_FALSE == fDoOpAsync); - } - - /// - /// Called by a drop target to determine whether the data object supports asynchronous data extraction. - /// - /// A Boolean value that is set to VARIANT_TRUE to indicate that an asynchronous operation is supported, or VARIANT_FALSE otherwise. - void IAsyncOperation.GetAsyncMode(out int pfIsOpAsync) - { - pfIsOpAsync = IsAsynchronous ? NativeMethods.VARIANT_TRUE : NativeMethods.VARIANT_FALSE; - } - - /// - /// Called by a drop target to indicate that asynchronous data extraction is starting. - /// - /// Reserved. Set this value to NULL. - void IAsyncOperation.StartOperation(IBindCtx pbcReserved) - { - _inOperation = true; - if (null != _startAction) - { - _startAction(this); - } - } - - /// - /// Called by the drop source to determine whether the target is extracting data asynchronously. - /// - /// Set to VARIANT_TRUE if data extraction is being handled asynchronously, or VARIANT_FALSE otherwise. - void IAsyncOperation.InOperation(out int pfInAsyncOp) - { - pfInAsyncOp = _inOperation ? NativeMethods.VARIANT_TRUE : NativeMethods.VARIANT_FALSE; - } - - /// - /// Notifies the data object that that asynchronous data extraction has ended. - /// - /// An HRESULT value that indicates the outcome of the data extraction. Set to S_OK if successful, or a COM error code otherwise. - /// Reserved. Set to NULL. - /// A DROPEFFECT value that indicates the result of an optimized move. This should be the same value that would be passed to the data object as a CFSTR_PERFORMEDDROPEFFECT format with a normal data extraction operation. - void IAsyncOperation.EndOperation(int hResult, IBindCtx pbcReserved, uint dwEffects) - { - if (null != _endAction) - { - _endAction(this); - } - _inOperation = false; - } - - // Explicit interface implementation hides the technical details from users of VirtualFileDataObject. - - /// - /// Creates a connection between a data object and an advisory sink. - /// - /// A FORMATETC structure that defines the format, target device, aspect, and medium that will be used for future notifications. - /// One of the ADVF values that specifies a group of flags for controlling the advisory connection. - /// A pointer to the IAdviseSink interface on the advisory sink that will receive the change notification. - /// When this method returns, contains a pointer to a DWORD token that identifies this connection. - /// HRESULT success code. - [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", - Justification = "Method doesn't decrease security.")] - int IDataObject.DAdvise(ref FORMATETC pFormatetc, ADVF advf, IAdviseSink adviseSink, out int connection) - { - Marshal.ThrowExceptionForHR(NativeMethods.OLE_E_ADVISENOTSUPPORTED); - throw new NotImplementedException(); - } - - /// - /// Destroys a notification connection that had been previously established. - /// - /// A DWORD token that specifies the connection to remove. - [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", - Justification = "Method doesn't decrease security.")] - void IDataObject.DUnadvise(int connection) - { - Marshal.ThrowExceptionForHR(NativeMethods.OLE_E_ADVISENOTSUPPORTED); - throw new NotImplementedException(); - } - - /// - /// Creates an object that can be used to enumerate the current advisory connections. - /// - /// When this method returns, contains an IEnumSTATDATA that receives the interface pointer to the new enumerator object. - /// HRESULT success code. - [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", - Justification = "Method doesn't decrease security.")] - int IDataObject.EnumDAdvise(out IEnumSTATDATA enumAdvise) - { - Marshal.ThrowExceptionForHR(NativeMethods.OLE_E_ADVISENOTSUPPORTED); - throw new NotImplementedException(); - } - - /// - /// Creates an object for enumerating the FORMATETC structures for a data object. - /// - /// One of the DATADIR values that specifies the direction of the data. - /// IEnumFORMATETC interface. - [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", - Justification = "Method doesn't decrease security.")] - IEnumFORMATETC IDataObject.EnumFormatEtc(DATADIR direction) - { - if (direction == DATADIR.DATADIR_GET) - { - if (0 == _dataObjects.Count) - { - // Note: SHCreateStdEnumFmtEtc fails for a count of 0; throw helpful exception - throw new InvalidOperationException( - "VirtualFileDataObject requires at least one data object to enumerate."); - } - - // Create enumerator and return it - IEnumFORMATETC enumerator; - List l = new List(); - foreach (DataObject o in _dataObjects) - { - l.Add(o.FORMATETC); - } - if ( - NativeMethods.SUCCEEDED(NativeMethods.SHCreateStdEnumFmtEtc((uint) (_dataObjects.Count), l.ToArray(), - out enumerator))) - { - return enumerator; - } - - // Returning null here can cause an AV in the caller; throw instead - Marshal.ThrowExceptionForHR(NativeMethods.E_FAIL); - } - throw new NotImplementedException(); - } - - /// - /// Provides a standard FORMATETC structure that is logically equivalent to a more complex structure. - /// - /// A pointer to a FORMATETC structure that defines the format, medium, and target device that the caller would like to use to retrieve data in a subsequent call such as GetData. - /// When this method returns, contains a pointer to a FORMATETC structure that contains the most general information possible for a specific rendering, making it canonically equivalent to formatetIn. - /// HRESULT success code. - int IDataObject.GetCanonicalFormatEtc(ref FORMATETC formatIn, out FORMATETC formatOut) - { - throw new NotImplementedException(); - } - - /// - /// Obtains data from a source data object. - /// - /// A pointer to a FORMATETC structure that defines the format, medium, and target device to use when passing the data. - /// When this method returns, contains a pointer to the STGMEDIUM structure that indicates the storage medium containing the returned data through its tymed member, and the responsibility for releasing the medium through the value of its pUnkForRelease member. - [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", - Justification = "Method doesn't decrease security.")] - void IDataObject.GetData(ref FORMATETC format, out STGMEDIUM medium) - { - medium = new STGMEDIUM(); - var hr = ((IDataObject) this).QueryGetData(ref format); - if (NativeMethods.SUCCEEDED(hr)) - { - // Find the best match - var formatCopy = format; - // Cannot use ref or out parameter inside an anonymous method, lambda expression, or query expression - DataObject dataObject = null; - foreach (DataObject d in _dataObjects) - { - if ((d.FORMATETC.cfFormat == formatCopy.cfFormat) && (d.FORMATETC.dwAspect == formatCopy.dwAspect) && - (0 != (d.FORMATETC.tymed & formatCopy.tymed) && (d.FORMATETC.lindex == formatCopy.lindex))) - { - dataObject = d; - break; - } - } - /* - var dataObject = _dataObjects - .Where(d => - (d.FORMATETC.cfFormat == formatCopy.cfFormat) && - (d.FORMATETC.dwAspect == formatCopy.dwAspect) && - (0 != (d.FORMATETC.tymed & formatCopy.tymed) && - (d.FORMATETC.lindex == formatCopy.lindex))) - .FirstOrDefault();*/ - if (dataObject != null) - { - if (!IsAsynchronous && (FILEDESCRIPTORW == dataObject.FORMATETC.cfFormat) && !_inOperation) - { - // Enter the operation and call the start action - _inOperation = true; - if (null != _startAction) - { - _startAction(this); - } - } - - // Populate the STGMEDIUM - medium.tymed = dataObject.FORMATETC.tymed; - var result = dataObject.GetData(); // Possible call to user code - hr = result.Item2; - if (NativeMethods.SUCCEEDED(hr)) - { - medium.unionmember = result.Item1; - } - } - else - { - // Couldn't find a match - hr = NativeMethods.DV_E_FORMATETC; - } - } - if (!NativeMethods.SUCCEEDED(hr)) // Not redundant; hr gets updated in the block above - { - Marshal.ThrowExceptionForHR(hr); - } - } - - /// - /// Obtains data from a source data object. - /// - /// A pointer to a FORMATETC structure that defines the format, medium, and target device to use when passing the data. - /// A STGMEDIUM that defines the storage medium containing the data being transferred. - void IDataObject.GetDataHere(ref FORMATETC format, ref STGMEDIUM medium) - { - throw new NotImplementedException(); - } - - /// - /// Determines whether the data object is capable of rendering the data described in the FORMATETC structure. - /// - /// A pointer to a FORMATETC structure that defines the format, medium, and target device to use for the query. - /// HRESULT success code. - int IDataObject.QueryGetData(ref FORMATETC format) - { - var formatCopy = format; - // Cannot use ref or out parameter inside an anonymous method, lambda expression, or query expression - - var formatMatches = Where(_dataObjects, o => o.FORMATETC.cfFormat == formatCopy.cfFormat); - // check if it's empty - if (!formatMatches.GetEnumerator().MoveNext()) - { - return NativeMethods.DV_E_FORMATETC; - } - - var tymedMatches = Where(formatMatches, d => 0 != (d.FORMATETC.tymed & formatCopy.tymed)); - if (!tymedMatches.GetEnumerator().MoveNext()) - { - return NativeMethods.DV_E_TYMED; - } - - var aspectMatches = Where(tymedMatches, d => d.FORMATETC.dwAspect == formatCopy.dwAspect); - if (!aspectMatches.GetEnumerator().MoveNext()) - { - return NativeMethods.DV_E_DVASPECT; - } - return NativeMethods.S_OK; - } - - /// - /// Transfers data to the object that implements this method. - /// - /// A FORMATETC structure that defines the format used by the data object when interpreting the data contained in the storage medium. - /// A STGMEDIUM structure that defines the storage medium in which the data is being passed. - /// true to specify that the data object called, which implements SetData, owns the storage medium after the call returns. - [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", - Justification = "Method doesn't decrease security.")] - void IDataObject.SetData(ref FORMATETC formatIn, ref STGMEDIUM medium, bool release) - { - var handled = false; - if ((formatIn.dwAspect == DVASPECT.DVASPECT_CONTENT) && (formatIn.tymed == TYMED.TYMED_HGLOBAL) && - (medium.tymed == formatIn.tymed)) - { - // Supported format; capture the data - var ptr = NativeMethods.GlobalLock(medium.unionmember); - if (IntPtr.Zero != ptr) - { - try - { - var length = NativeMethods.GlobalSize(ptr).ToInt32(); - var data = new byte[length]; - Marshal.Copy(ptr, data, 0, length); - // Store it in our own format - SetData(formatIn.cfFormat, data); - handled = true; - } - finally - { - NativeMethods.GlobalUnlock(medium.unionmember); - } - } - - // Release memory if we now own it - if (release) - { - Marshal.FreeHGlobal(medium.unionmember); - } - } - - // Handle synchronous mode - if (!IsAsynchronous && (PERFORMEDDROPEFFECT == formatIn.cfFormat) && _inOperation) - { - // Call the end action and exit the operation - if (null != _endAction) - { - _endAction(this); - } - _inOperation = false; - } - - // Throw if unhandled - if (!handled) - { - throw new NotImplementedException(); - } - } - - private IEnumerable Where(IEnumerable list, Filter filter) - { - foreach (T t in list) - { - if (filter(t)) - { - yield return t; - } - } - //yield break; - } - - public static T[] ToArray(IEnumerable obj) - { - return new List(obj).ToArray(); - } - - /// - /// Provides data for the specified data format (HGLOBAL). - /// - /// Data format. - /// Sequence of data. - public void SetData(short dataFormat, IEnumerable data) - { - DataObject o = new DataObject(); - o.DataDelegate = delegate - { - var dataArray = ToArray(data); - var ptr = Marshal.AllocHGlobal(dataArray.Length); - Marshal.Copy(dataArray, 0, ptr, dataArray.Length); - return new Tuple(ptr, NativeMethods.S_OK); - }; - o.FORMATETC = new FORMATETC - { - cfFormat = dataFormat, - ptd = IntPtr.Zero, - dwAspect = DVASPECT.DVASPECT_CONTENT, - lindex = -1, - tymed = TYMED.TYMED_HGLOBAL - }; - - _dataObjects.Add(o); - } - - /// - /// Provides data for the specified data format and index (ISTREAM). - /// - /// Data format. - /// Index of data. - /// Action generating the data. - /// - /// Uses Stream instead of IEnumerable(T) because Stream is more likely - /// to be natural for the expected scenarios. - /// - public void SetData(short dataFormat, int index, Action streamData) - { - _dataObjects.Add(new DataObject - { - FORMATETC = - new FORMATETC - { - cfFormat = dataFormat, - ptd = IntPtr.Zero, - dwAspect = DVASPECT.DVASPECT_CONTENT, - lindex = index, - tymed = TYMED.TYMED_ISTREAM - }, - DataDelegate = () => - { - // Create IStream for data - var ptr = IntPtr.Zero; - var iStream = NativeMethods.CreateStreamOnHGlobal(IntPtr.Zero, true); - if (streamData != null) - { - // Wrap in a .NET-friendly Stream and call provided code to fill it - using (var stream = new IStreamWrapper(iStream)) - { - streamData(stream); - } - } - // Return an IntPtr for the IStream - ptr = Marshal.GetComInterfaceForObject(iStream, typeof (IStream)); - Marshal.ReleaseComObject(iStream); - return new Tuple(ptr, NativeMethods.S_OK); - }, - }); - } - - /// - /// Provides data for the specified data format (FILEGROUPDESCRIPTOR/FILEDESCRIPTOR) - /// - /// Collection of virtual files. - public void SetData(IEnumerable fileDescriptors) - { - // Prepare buffer - var bytes = new List(); - // Add FILEGROUPDESCRIPTOR header - int c = ToArray(fileDescriptors).Length; - bytes.AddRange(StructureBytes(new NativeMethods.FILEGROUPDESCRIPTOR {cItems = (uint) (c)})); - // Add n FILEDESCRIPTORs - foreach (var fileDescriptor in fileDescriptors) - { - // Set required fields - var FILEDESCRIPTOR = new NativeMethods.FILEDESCRIPTOR {cFileName = fileDescriptor.Name,}; - // Set optional timestamp - if (fileDescriptor.ChangeTimeUtc.HasValue) - { - FILEDESCRIPTOR.dwFlags |= NativeMethods.FD_CREATETIME | NativeMethods.FD_WRITESTIME; - var changeTime = fileDescriptor.ChangeTimeUtc.Value.ToLocalTime().ToFileTime(); - var changeTimeFileTime = new FILETIME - { - dwLowDateTime = (int) (changeTime & 0xffffffff), - dwHighDateTime = (int) (changeTime >> 32), - }; - FILEDESCRIPTOR.ftLastWriteTime = changeTimeFileTime; - FILEDESCRIPTOR.ftCreationTime = changeTimeFileTime; - } - // Set optional length - if (fileDescriptor.Length.HasValue) - { - FILEDESCRIPTOR.dwFlags |= NativeMethods.FD_FILESIZE; - FILEDESCRIPTOR.nFileSizeLow = (uint) (fileDescriptor.Length & 0xffffffff); - FILEDESCRIPTOR.nFileSizeHigh = (uint) (fileDescriptor.Length >> 32); - } - // Add structure to buffer - bytes.AddRange(StructureBytes(FILEDESCRIPTOR)); - } - - // Set CFSTR_FILEDESCRIPTORW - SetData(FILEDESCRIPTORW, bytes); - // Set n CFSTR_FILECONTENTS - var index = 0; - foreach (var fileDescriptor in fileDescriptors) - { - SetData(FILECONTENTS, index, fileDescriptor.StreamContents); - index++; - } - } - - /// - /// Gets the DragDropEffects value (if any) previously set on the object. - /// - /// Clipboard format. - /// DragDropEffects value or null. - [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", - Justification = "Method doesn't decrease security.")] - private DragDropEffects? GetDropEffect(short format) - { - // Get the most recent setting - var o = - ToArray(Where(_dataObjects, - d => - (format == d.FORMATETC.cfFormat) && (DVASPECT.DVASPECT_CONTENT == d.FORMATETC.dwAspect) && - (TYMED.TYMED_HGLOBAL == d.FORMATETC.tymed))); - var dataObject = o.Length == 0 ? null : o[o.Length - 1]; - - if (null != dataObject) - { - // Read the value and return it - var result = dataObject.GetData(); - if (NativeMethods.SUCCEEDED(result.Item2)) - { - var ptr = NativeMethods.GlobalLock(result.Item1); - if (IntPtr.Zero != ptr) - { - try - { - var length = NativeMethods.GlobalSize(ptr).ToInt32(); - if (4 == length) - { - var data = new byte[length]; - Marshal.Copy(ptr, data, 0, length); - return (DragDropEffects) (BitConverter.ToUInt32(data, 0)); - } - } - finally - { - NativeMethods.GlobalUnlock(result.Item1); - } - } - } - } - return null; - } - - // Explicit interface implementation hides the technical details from users of VirtualFileDataObject. - - /// - /// Returns the in-memory representation of an interop structure. - /// - /// Structure to return. - /// In-memory representation of structure. - [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", - Justification = "Method doesn't decrease security.")] - private static IEnumerable StructureBytes(object source) - { - // Set up for call to StructureToPtr - var size = Marshal.SizeOf(source.GetType()); - var ptr = Marshal.AllocHGlobal(size); - var bytes = new byte[size]; - try - { - Marshal.StructureToPtr(source, ptr, false); - // Copy marshalled bytes to buffer - Marshal.Copy(ptr, bytes, 0, size); - } - finally - { - Marshal.FreeHGlobal(ptr); - } - return bytes; - } - - /// - /// Initiates a drag-and-drop operation. - /// - /// A reference to the dependency object that is the source of the data being dragged. - /// A data object that contains the data being dragged. - /// One of the DragDropEffects values that specifies permitted effects of the drag-and-drop operation. - /// One of the DragDropEffects values that specifies the final effect that was performed during the drag-and-drop operation. - /// - /// Call this method instead of System.Windows.DragDrop.DoDragDrop because this method handles IDataObject better. - /// - [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "dragSource", - Justification = "Parameter is present so the signature matches that of System.Windows.DragDrop.DoDragDrop.") - ] - public static DragDropEffects DoDragDrop(IDataObject dataObject, DragDropEffects allowedEffects) - { - int[] finalEffect = new int[1]; - try - { - NativeMethods.DoDragDrop(dataObject, new DropSource(), (int) allowedEffects, finalEffect); - } - finally - { - var virtualFileDataObject = dataObject as VirtualFileDataObject; - if ((null != virtualFileDataObject) && !virtualFileDataObject.IsAsynchronous && - virtualFileDataObject._inOperation) - { - // Call the end action and exit the operation - if (null != virtualFileDataObject._endAction) - { - virtualFileDataObject._endAction(virtualFileDataObject); - } - virtualFileDataObject._inOperation = false; - } - } - return (DragDropEffects) (finalEffect[0]); - } - - /// - /// Class representing the result of a SetData call. - /// - private class DataObject - { - /// - /// Func returning the data as an IntPtr and an HRESULT success code. - /// - public delegate Tuple Data(); - - /// - /// FORMATETC structure for the data. - /// - public FORMATETC FORMATETC { get; set; } - - public Data DataDelegate { get; set; } - - public Tuple GetData() - { - return DataDelegate(); - } - } - - /// - /// Contains the methods for generating visual feedback to the end user and for canceling or completing the drag-and-drop operation. - /// - private class DropSource : NativeMethods.IDropSource - { - /// - /// Determines whether a drag-and-drop operation should continue. - /// - /// Indicates whether the Esc key has been pressed since the previous call to QueryContinueDrag or to DoDragDrop if this is the first call to QueryContinueDrag. A TRUE value indicates the end user has pressed the escape key; a FALSE value indicates it has not been pressed. - /// The current state of the keyboard modifier keys on the keyboard. Possible values can be a combination of any of the flags MK_CONTROL, MK_SHIFT, MK_ALT, MK_BUTTON, MK_LBUTTON, MK_MBUTTON, and MK_RBUTTON. - /// This method returns S_OK/DRAGDROP_S_DROP/DRAGDROP_S_CANCEL on success. - public int QueryContinueDrag(int fEscapePressed, uint grfKeyState) - { - var escapePressed = (0 != fEscapePressed); - - var keyStates = (DragDropKeyStates) grfKeyState; - if (escapePressed) - { - return NativeMethods.DRAGDROP_S_CANCEL; - } - else if (DragDropKeyStates.None == (keyStates & DragDropKeyStates.LeftMouseButton)) - { - return NativeMethods.DRAGDROP_S_DROP; - } - return NativeMethods.S_OK; - } - - /// - /// Gives visual feedback to an end user during a drag-and-drop operation. - /// - /// The DROPEFFECT value returned by the most recent call to IDropTarget::DragEnter, IDropTarget::DragOver, or IDropTarget::DragLeave. - /// This method returns S_OK on success. - public int GiveFeedback(uint dwEffect) - { - return NativeMethods.DRAGDROP_S_USEDEFAULTCURSORS; - } - } - - /// - /// Class representing a virtual file for use by drag/drop or the clipboard. - /// - [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible", - Justification = "Deliberate to provide obvious coupling.")] - public class FileDescriptor - { - /// - /// Gets or sets the name of the file. - /// - public string Name { get; set; } - - /// - /// Gets or sets the (optional) length of the file. - /// - public Int64? Length { get; set; } - - /// - /// Gets or sets the (optional) change time of the file. - /// - public DateTime? ChangeTimeUtc { get; set; } - - /// - /// Gets or sets an Action that returns the contents of the file. - /// - public Action StreamContents { get; set; } - } - - private delegate bool Filter(T obj); - - /// - /// Simple class that exposes a write-only IStream as a Stream. - /// - private class IStreamWrapper : Stream - { - /// - /// IStream instance being wrapped. - /// - private readonly IStream _iStream; - - /// - /// Initializes a new instance of the IStreamWrapper class. - /// - /// IStream instance to wrap. - public IStreamWrapper(IStream iStream) - { - _iStream = iStream; - } - - /// - /// Gets a value indicating whether the current stream supports reading. - /// - public override bool CanRead - { - get { return false; } - } - - /// - /// Gets a value indicating whether the current stream supports seeking. - /// - public override bool CanSeek - { - get { return false; } - } - - /// - /// Gets a value indicating whether the current stream supports writing. - /// - public override bool CanWrite - { - get { return true; } - } - - /// - /// Gets the length in bytes of the stream. - /// - public override long Length - { - get { throw new NotImplementedException(); } - } - - /// - /// Gets or sets the position within the current stream. - /// - public override long Position - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - /// Clears all buffers for this stream and causes any buffered data to be written to the underlying device. - /// - public override void Flush() - { - throw new NotImplementedException(); - } - - /// - /// Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. - /// - /// An array of bytes. When this method returns, the buffer contains the specified byte array with the values between offset and (offset + count - 1) replaced by the bytes read from the current source. - /// The zero-based byte offset in buffer at which to begin storing the data read from the current stream. - /// The maximum number of bytes to be read from the current stream. - /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not currently available, or zero (0) if the end of the stream has been reached. - public override int Read(byte[] buffer, int offset, int count) - { - throw new NotImplementedException(); - } - - /// - /// Sets the position within the current stream. - /// - /// A byte offset relative to the origin parameter. - /// A value of type SeekOrigin indicating the reference point used to obtain the new position. - /// The new position within the current stream. - public override long Seek(long offset, SeekOrigin origin) - { - throw new NotImplementedException(); - } - - /// - /// Sets the length of the current stream. - /// - /// The desired length of the current stream in bytes. - public override void SetLength(long value) - { - throw new NotImplementedException(); - } - - /// - /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. - /// - /// An array of bytes. This method copies count bytes from buffer to the current stream. - /// The zero-based byte offset in buffer at which to begin copying bytes to the current stream. - /// The number of bytes to be written to the current stream. - public override void Write(byte[] buffer, int offset, int count) - { - if (offset == 0) - { - // Optimize common case to avoid creating extra buffers - _iStream.Write(buffer, count, IntPtr.Zero); - } - else - { - // Easy way to provide the relevant byte[] - List ba = new List(buffer.Length - offset); - int p = 0; - foreach (byte b in buffer) - { - if (p >= offset) ba.Add(b); - p++; - } - _iStream.Write(ba.ToArray(), count, IntPtr.Zero); - } - } - } - - /// - /// Provides access to Win32-level constants, structures, and functions. - /// - internal static class NativeMethods - { - public const string CFSTR_FILECONTENTS = "FileContents"; - public const string CFSTR_FILEDESCRIPTORW = "FileGroupDescriptorW"; - public const string CFSTR_PASTESUCCEEDED = "Paste Succeeded"; - public const string CFSTR_PERFORMEDDROPEFFECT = "Performed DropEffect"; - public const string CFSTR_PREFERREDDROPEFFECT = "Preferred DropEffect"; - public const int DRAGDROP_S_CANCEL = 0x00040101; - public const int DRAGDROP_S_DROP = 0x00040100; - public const int DRAGDROP_S_USEDEFAULTCURSORS = 0x00040102; - public const int DV_E_DVASPECT = -2147221397; - public const int DV_E_FORMATETC = -2147221404; - public const int DV_E_TYMED = -2147221399; - public const int E_FAIL = -2147467259; - public const uint FD_CREATETIME = 0x00000008; - public const uint FD_FILESIZE = 0x00000040; - public const uint FD_WRITESTIME = 0x00000020; - public const int OLE_E_ADVISENOTSUPPORTED = -2147221501; - public const int S_FALSE = 1; - public const int S_OK = 0; - public const int VARIANT_FALSE = 0; - public const int VARIANT_TRUE = -1; - - [SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters", MessageId = "2#", - Justification = "Win32 API.")] - [DllImport("shell32.dll")] - public static extern int SHCreateStdEnumFmtEtc(uint cfmt, FORMATETC[] afmt, - out IEnumFORMATETC ppenumFormatEtc); - - [return: MarshalAs(UnmanagedType.Interface)] - [DllImport("ole32.dll", PreserveSig = false)] - public static extern IStream CreateStreamOnHGlobal(IntPtr hGlobal, - [MarshalAs(UnmanagedType.Bool)] bool fDeleteOnRelease); - - [DllImport("ole32.dll", CharSet = CharSet.Auto, ExactSpelling = true, PreserveSig = false)] - public static extern void DoDragDrop(IDataObject dataObject, IDropSource dropSource, int allowedEffects, - int[] finalEffect); - - [DllImport("kernel32.dll")] - public static extern IntPtr GlobalLock(IntPtr hMem); - - [return: MarshalAs(UnmanagedType.Bool)] - [DllImport("kernel32.dll")] - public static extern bool GlobalUnlock(IntPtr hMem); - - [DllImport("kernel32.dll")] - public static extern IntPtr GlobalSize(IntPtr handle); - - /// - /// Returns true iff the HRESULT is a success code. - /// - /// HRESULT to check. - /// True iff a success code. - public static bool SUCCEEDED(int hr) - { - return (0 <= hr); - } - - [SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes", - Justification = "Structure exists for interop.")] - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - public struct FILEDESCRIPTOR - { - public UInt32 dwFlags; - public readonly Guid clsid; - public readonly Int32 sizelcx; - public readonly Int32 sizelcy; - public readonly Int32 pointlx; - public readonly Int32 pointly; - public readonly UInt32 dwFileAttributes; - public FILETIME ftCreationTime; - public readonly FILETIME ftLastAccessTime; - public FILETIME ftLastWriteTime; - public UInt32 nFileSizeHigh; - public UInt32 nFileSizeLow; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string cFileName; - } - - [SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes", - Justification = "Structure exists for interop.")] - [StructLayout(LayoutKind.Sequential)] - public struct FILEGROUPDESCRIPTOR - { - public UInt32 cItems; - // Followed by 0 or more FILEDESCRIPTORs - } - - [ComImport] - [Guid("00000121-0000-0000-C000-000000000046")] - [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - public interface IDropSource - { - [PreserveSig] - int QueryContinueDrag(int fEscapePressed, uint grfKeyState); - - [PreserveSig] - int GiveFeedback(uint dwEffect); - } - } - - /// - /// Represents a 2-tuple, or pair. - /// - /// - /// Minimal implementation of the .NET 4 Tuple class; remove if running on .NET 4. - /// - /// The type of the tuple's first component. - /// The type of the tuple's second component. - internal class Tuple - { - /// - /// Initializes a new instance of the Tuple(T1, T2) class. - /// - /// The value of the tuple's first component. - /// The value of the tuple's second component. - public Tuple(T1 item1, T2 item2) - { - Item1 = item1; - Item2 = item2; - } - - /// - /// Gets the value of the current Tuple(T1, T2) object's first component. - /// - public T1 Item1 { get; private set; } - - /// - /// Gets the value of the current Tuple(T1, T2) object's second component. - /// - public T2 Item2 { get; private set; } - } - } - - /// - /// Definition of the IAsyncOperation COM interface. - /// - /// - /// Pseudo-public because VirtualFileDataObject implements it. - /// - [ComImport] - [Guid("3D8B0590-F691-11d2-8EA9-006097DF5BD4")] - [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - internal interface IAsyncOperation - { - void SetAsyncMode([In] Int32 fDoOpAsync); - void GetAsyncMode([Out] out Int32 pfIsOpAsync); - void StartOperation([In] IBindCtx pbcReserved); - void InOperation([Out] out Int32 pfInAsyncOp); - void EndOperation([In] Int32 hResult, [In] IBindCtx pbcReserved, [In] UInt32 dwEffects); - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using System.Windows.Forms; +using FILETIME = System.Runtime.InteropServices.ComTypes.FILETIME; +using IDataObject = System.Runtime.InteropServices.ComTypes.IDataObject; + +namespace Ch.Cyberduck.Ui.Core +{ + /// + /// Class implementing drag/drop and clipboard support for virtual files. + /// Also offers an alternate interface to the IDataObject interface. + /// + public sealed class VirtualFileDataObject : IDataObject, IAsyncOperation + { + public enum DragDropKeyStates + { + None = 0, + LeftMouseButton = 1, + RightMouseButton = 2, + ShiftKey = 4, + ControlKey = 8, + MiddleMouseButton = 16, + AltKey = 32, + } + + /// + /// Identifier for CFSTR_FILECONTENTS. + /// + private static readonly short FILECONTENTS = + (short) (DataFormats.GetFormat(NativeMethods.CFSTR_FILECONTENTS).Id); + + /// + /// Identifier for CFSTR_FILEDESCRIPTORW. + /// + private static readonly short FILEDESCRIPTORW = + (short) (DataFormats.GetFormat(NativeMethods.CFSTR_FILEDESCRIPTORW).Id); + + /// + /// Identifier for CFSTR_PASTESUCCEEDED. + /// + private static readonly short PASTESUCCEEDED = + (short) (DataFormats.GetFormat(NativeMethods.CFSTR_PASTESUCCEEDED).Id); + + /// + /// Identifier for CFSTR_PERFORMEDDROPEFFECT. + /// + private static readonly short PERFORMEDDROPEFFECT = + (short) (DataFormats.GetFormat(NativeMethods.CFSTR_PERFORMEDDROPEFFECT).Id); + + /// + /// Identifier for CFSTR_PREFERREDDROPEFFECT. + /// + private static readonly short PREFERREDDROPEFFECT = + (short) (DataFormats.GetFormat(NativeMethods.CFSTR_PREFERREDDROPEFFECT).Id); + + /// + /// In-order list of registered data objects. + /// + private readonly List _dataObjects = new List(); + + /// + /// Stores the user-specified end action. + /// + private readonly Action _endAction; + + /// + /// Stores the user-specified start action. + /// + private readonly Action _startAction; + + /// + /// Tracks whether an asynchronous operation is ongoing. + /// + private bool _inOperation; + + /// + /// Initializes a new instance of the VirtualFileDataObject class. + /// + public VirtualFileDataObject() + { + IsAsynchronous = true; + } + + /// + /// Initializes a new instance of the VirtualFileDataObject class. + /// + /// Optional action to run at the start of the data transfer. + /// Optional action to run at the end of the data transfer. + public VirtualFileDataObject(Action startAction, Action endAction) + : this() + { + _startAction = startAction; + _endAction = endAction; + } + + /// + /// Gets or sets a value indicating whether the data object can be used asynchronously. + /// + public bool IsAsynchronous { get; set; } + + /// + /// Gets or sets the CFSTR_PASTESUCCEEDED value for the object. + /// + public DragDropEffects? PasteSucceeded + { + get { return GetDropEffect(PASTESUCCEEDED); } + set { SetData(PASTESUCCEEDED, BitConverter.GetBytes((UInt32) value)); } + } + + /// + /// Gets or sets the CFSTR_PERFORMEDDROPEFFECT value for the object. + /// + public DragDropEffects? PerformedDropEffect + { + get { return GetDropEffect(PERFORMEDDROPEFFECT); } + set { SetData(PERFORMEDDROPEFFECT, BitConverter.GetBytes((UInt32) value)); } + } + + /// + /// Gets or sets the CFSTR_PREFERREDDROPEFFECT value for the object. + /// + public DragDropEffects? PreferredDropEffect + { + get { return GetDropEffect(PREFERREDDROPEFFECT); } + set { SetData(PREFERREDDROPEFFECT, BitConverter.GetBytes((UInt32) value)); } + } + + /// + /// Called by a drop source to specify whether the data object supports asynchronous data extraction. + /// + /// A Boolean value that is set to VARIANT_TRUE to indicate that an asynchronous operation is supported, or VARIANT_FALSE otherwise. + void IAsyncOperation.SetAsyncMode(int fDoOpAsync) + { + IsAsynchronous = !(NativeMethods.VARIANT_FALSE == fDoOpAsync); + } + + /// + /// Called by a drop target to determine whether the data object supports asynchronous data extraction. + /// + /// A Boolean value that is set to VARIANT_TRUE to indicate that an asynchronous operation is supported, or VARIANT_FALSE otherwise. + void IAsyncOperation.GetAsyncMode(out int pfIsOpAsync) + { + pfIsOpAsync = IsAsynchronous ? NativeMethods.VARIANT_TRUE : NativeMethods.VARIANT_FALSE; + } + + /// + /// Called by a drop target to indicate that asynchronous data extraction is starting. + /// + /// Reserved. Set this value to NULL. + void IAsyncOperation.StartOperation(IBindCtx pbcReserved) + { + _inOperation = true; + if (null != _startAction) + { + _startAction(this); + } + } + + /// + /// Called by the drop source to determine whether the target is extracting data asynchronously. + /// + /// Set to VARIANT_TRUE if data extraction is being handled asynchronously, or VARIANT_FALSE otherwise. + void IAsyncOperation.InOperation(out int pfInAsyncOp) + { + pfInAsyncOp = _inOperation ? NativeMethods.VARIANT_TRUE : NativeMethods.VARIANT_FALSE; + } + + /// + /// Notifies the data object that that asynchronous data extraction has ended. + /// + /// An HRESULT value that indicates the outcome of the data extraction. Set to S_OK if successful, or a COM error code otherwise. + /// Reserved. Set to NULL. + /// A DROPEFFECT value that indicates the result of an optimized move. This should be the same value that would be passed to the data object as a CFSTR_PERFORMEDDROPEFFECT format with a normal data extraction operation. + void IAsyncOperation.EndOperation(int hResult, IBindCtx pbcReserved, uint dwEffects) + { + if (null != _endAction) + { + _endAction(this); + } + _inOperation = false; + } + + // Explicit interface implementation hides the technical details from users of VirtualFileDataObject. + + /// + /// Creates a connection between a data object and an advisory sink. + /// + /// A FORMATETC structure that defines the format, target device, aspect, and medium that will be used for future notifications. + /// One of the ADVF values that specifies a group of flags for controlling the advisory connection. + /// A pointer to the IAdviseSink interface on the advisory sink that will receive the change notification. + /// When this method returns, contains a pointer to a DWORD token that identifies this connection. + /// HRESULT success code. + [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", + Justification = "Method doesn't decrease security.")] + int IDataObject.DAdvise(ref FORMATETC pFormatetc, ADVF advf, IAdviseSink adviseSink, out int connection) + { + Marshal.ThrowExceptionForHR(NativeMethods.OLE_E_ADVISENOTSUPPORTED); + throw new NotImplementedException(); + } + + /// + /// Destroys a notification connection that had been previously established. + /// + /// A DWORD token that specifies the connection to remove. + [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", + Justification = "Method doesn't decrease security.")] + void IDataObject.DUnadvise(int connection) + { + Marshal.ThrowExceptionForHR(NativeMethods.OLE_E_ADVISENOTSUPPORTED); + throw new NotImplementedException(); + } + + /// + /// Creates an object that can be used to enumerate the current advisory connections. + /// + /// When this method returns, contains an IEnumSTATDATA that receives the interface pointer to the new enumerator object. + /// HRESULT success code. + [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", + Justification = "Method doesn't decrease security.")] + int IDataObject.EnumDAdvise(out IEnumSTATDATA enumAdvise) + { + Marshal.ThrowExceptionForHR(NativeMethods.OLE_E_ADVISENOTSUPPORTED); + throw new NotImplementedException(); + } + + /// + /// Creates an object for enumerating the FORMATETC structures for a data object. + /// + /// One of the DATADIR values that specifies the direction of the data. + /// IEnumFORMATETC interface. + [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", + Justification = "Method doesn't decrease security.")] + IEnumFORMATETC IDataObject.EnumFormatEtc(DATADIR direction) + { + if (direction == DATADIR.DATADIR_GET) + { + if (0 == _dataObjects.Count) + { + // Note: SHCreateStdEnumFmtEtc fails for a count of 0; throw helpful exception + throw new InvalidOperationException( + "VirtualFileDataObject requires at least one data object to enumerate."); + } + + // Create enumerator and return it + IEnumFORMATETC enumerator; + List l = new List(); + foreach (DataObject o in _dataObjects) + { + l.Add(o.FORMATETC); + } + if ( + NativeMethods.SUCCEEDED(NativeMethods.SHCreateStdEnumFmtEtc((uint) (_dataObjects.Count), l.ToArray(), + out enumerator))) + { + return enumerator; + } + + // Returning null here can cause an AV in the caller; throw instead + Marshal.ThrowExceptionForHR(NativeMethods.E_FAIL); + } + throw new NotImplementedException(); + } + + /// + /// Provides a standard FORMATETC structure that is logically equivalent to a more complex structure. + /// + /// A pointer to a FORMATETC structure that defines the format, medium, and target device that the caller would like to use to retrieve data in a subsequent call such as GetData. + /// When this method returns, contains a pointer to a FORMATETC structure that contains the most general information possible for a specific rendering, making it canonically equivalent to formatetIn. + /// HRESULT success code. + int IDataObject.GetCanonicalFormatEtc(ref FORMATETC formatIn, out FORMATETC formatOut) + { + throw new NotImplementedException(); + } + + /// + /// Obtains data from a source data object. + /// + /// A pointer to a FORMATETC structure that defines the format, medium, and target device to use when passing the data. + /// When this method returns, contains a pointer to the STGMEDIUM structure that indicates the storage medium containing the returned data through its tymed member, and the responsibility for releasing the medium through the value of its pUnkForRelease member. + [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", + Justification = "Method doesn't decrease security.")] + void IDataObject.GetData(ref FORMATETC format, out STGMEDIUM medium) + { + medium = new STGMEDIUM(); + var hr = ((IDataObject) this).QueryGetData(ref format); + if (NativeMethods.SUCCEEDED(hr)) + { + // Find the best match + var formatCopy = format; + // Cannot use ref or out parameter inside an anonymous method, lambda expression, or query expression + DataObject dataObject = null; + foreach (DataObject d in _dataObjects) + { + if ((d.FORMATETC.cfFormat == formatCopy.cfFormat) && (d.FORMATETC.dwAspect == formatCopy.dwAspect) && + (0 != (d.FORMATETC.tymed & formatCopy.tymed) && (d.FORMATETC.lindex == formatCopy.lindex))) + { + dataObject = d; + break; + } + } + /* + var dataObject = _dataObjects + .Where(d => + (d.FORMATETC.cfFormat == formatCopy.cfFormat) && + (d.FORMATETC.dwAspect == formatCopy.dwAspect) && + (0 != (d.FORMATETC.tymed & formatCopy.tymed) && + (d.FORMATETC.lindex == formatCopy.lindex))) + .FirstOrDefault();*/ + if (dataObject != null) + { + if (!IsAsynchronous && (FILEDESCRIPTORW == dataObject.FORMATETC.cfFormat) && !_inOperation) + { + // Enter the operation and call the start action + _inOperation = true; + if (null != _startAction) + { + _startAction(this); + } + } + + // Populate the STGMEDIUM + medium.tymed = dataObject.FORMATETC.tymed; + var result = dataObject.GetData(); // Possible call to user code + hr = result.Item2; + if (NativeMethods.SUCCEEDED(hr)) + { + medium.unionmember = result.Item1; + } + } + else + { + // Couldn't find a match + hr = NativeMethods.DV_E_FORMATETC; + } + } + if (!NativeMethods.SUCCEEDED(hr)) // Not redundant; hr gets updated in the block above + { + Marshal.ThrowExceptionForHR(hr); + } + } + + /// + /// Obtains data from a source data object. + /// + /// A pointer to a FORMATETC structure that defines the format, medium, and target device to use when passing the data. + /// A STGMEDIUM that defines the storage medium containing the data being transferred. + void IDataObject.GetDataHere(ref FORMATETC format, ref STGMEDIUM medium) + { + throw new NotImplementedException(); + } + + /// + /// Determines whether the data object is capable of rendering the data described in the FORMATETC structure. + /// + /// A pointer to a FORMATETC structure that defines the format, medium, and target device to use for the query. + /// HRESULT success code. + int IDataObject.QueryGetData(ref FORMATETC format) + { + var formatCopy = format; + // Cannot use ref or out parameter inside an anonymous method, lambda expression, or query expression + + var formatMatches = Where(_dataObjects, o => o.FORMATETC.cfFormat == formatCopy.cfFormat); + // check if it's empty + if (!formatMatches.GetEnumerator().MoveNext()) + { + return NativeMethods.DV_E_FORMATETC; + } + + var tymedMatches = Where(formatMatches, d => 0 != (d.FORMATETC.tymed & formatCopy.tymed)); + if (!tymedMatches.GetEnumerator().MoveNext()) + { + return NativeMethods.DV_E_TYMED; + } + + var aspectMatches = Where(tymedMatches, d => d.FORMATETC.dwAspect == formatCopy.dwAspect); + if (!aspectMatches.GetEnumerator().MoveNext()) + { + return NativeMethods.DV_E_DVASPECT; + } + return NativeMethods.S_OK; + } + + /// + /// Transfers data to the object that implements this method. + /// + /// A FORMATETC structure that defines the format used by the data object when interpreting the data contained in the storage medium. + /// A STGMEDIUM structure that defines the storage medium in which the data is being passed. + /// true to specify that the data object called, which implements SetData, owns the storage medium after the call returns. + [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", + Justification = "Method doesn't decrease security.")] + void IDataObject.SetData(ref FORMATETC formatIn, ref STGMEDIUM medium, bool release) + { + var handled = false; + if ((formatIn.dwAspect == DVASPECT.DVASPECT_CONTENT) && (formatIn.tymed == TYMED.TYMED_HGLOBAL) && + (medium.tymed == formatIn.tymed)) + { + // Supported format; capture the data + var ptr = NativeMethods.GlobalLock(medium.unionmember); + if (IntPtr.Zero != ptr) + { + try + { + var length = NativeMethods.GlobalSize(ptr).ToInt32(); + var data = new byte[length]; + Marshal.Copy(ptr, data, 0, length); + // Store it in our own format + SetData(formatIn.cfFormat, data); + handled = true; + } + finally + { + NativeMethods.GlobalUnlock(medium.unionmember); + } + } + + // Release memory if we now own it + if (release) + { + Marshal.FreeHGlobal(medium.unionmember); + } + } + + // Handle synchronous mode + if (!IsAsynchronous && (PERFORMEDDROPEFFECT == formatIn.cfFormat) && _inOperation) + { + // Call the end action and exit the operation + if (null != _endAction) + { + _endAction(this); + } + _inOperation = false; + } + + // Throw if unhandled + if (!handled) + { + throw new NotImplementedException(); + } + } + + private IEnumerable Where(IEnumerable list, Filter filter) + { + foreach (T t in list) + { + if (filter(t)) + { + yield return t; + } + } + //yield break; + } + + public static T[] ToArray(IEnumerable obj) + { + return new List(obj).ToArray(); + } + + /// + /// Provides data for the specified data format (HGLOBAL). + /// + /// Data format. + /// Sequence of data. + public void SetData(short dataFormat, IEnumerable data) + { + DataObject o = new DataObject(); + o.DataDelegate = delegate + { + var dataArray = ToArray(data); + var ptr = Marshal.AllocHGlobal(dataArray.Length); + Marshal.Copy(dataArray, 0, ptr, dataArray.Length); + return new Tuple(ptr, NativeMethods.S_OK); + }; + o.FORMATETC = new FORMATETC + { + cfFormat = dataFormat, + ptd = IntPtr.Zero, + dwAspect = DVASPECT.DVASPECT_CONTENT, + lindex = -1, + tymed = TYMED.TYMED_HGLOBAL + }; + + _dataObjects.Add(o); + } + + /// + /// Provides data for the specified data format and index (ISTREAM). + /// + /// Data format. + /// Index of data. + /// Action generating the data. + /// + /// Uses Stream instead of IEnumerable(T) because Stream is more likely + /// to be natural for the expected scenarios. + /// + public void SetData(short dataFormat, int index, Action streamData) + { + _dataObjects.Add(new DataObject + { + FORMATETC = + new FORMATETC + { + cfFormat = dataFormat, + ptd = IntPtr.Zero, + dwAspect = DVASPECT.DVASPECT_CONTENT, + lindex = index, + tymed = TYMED.TYMED_ISTREAM + }, + DataDelegate = () => + { + // Create IStream for data + var ptr = IntPtr.Zero; + var iStream = NativeMethods.CreateStreamOnHGlobal(IntPtr.Zero, true); + if (streamData != null) + { + // Wrap in a .NET-friendly Stream and call provided code to fill it + using (var stream = new IStreamWrapper(iStream)) + { + streamData(stream); + } + } + // Return an IntPtr for the IStream + ptr = Marshal.GetComInterfaceForObject(iStream, typeof (IStream)); + Marshal.ReleaseComObject(iStream); + return new Tuple(ptr, NativeMethods.S_OK); + }, + }); + } + + /// + /// Provides data for the specified data format (FILEGROUPDESCRIPTOR/FILEDESCRIPTOR) + /// + /// Collection of virtual files. + public void SetData(IEnumerable fileDescriptors) + { + // Prepare buffer + var bytes = new List(); + // Add FILEGROUPDESCRIPTOR header + int c = ToArray(fileDescriptors).Length; + bytes.AddRange(StructureBytes(new NativeMethods.FILEGROUPDESCRIPTOR {cItems = (uint) (c)})); + // Add n FILEDESCRIPTORs + foreach (var fileDescriptor in fileDescriptors) + { + // Set required fields + var FILEDESCRIPTOR = new NativeMethods.FILEDESCRIPTOR {cFileName = fileDescriptor.Name,}; + // Set optional timestamp + if (fileDescriptor.ChangeTimeUtc.HasValue) + { + FILEDESCRIPTOR.dwFlags |= NativeMethods.FD_CREATETIME | NativeMethods.FD_WRITESTIME; + var changeTime = fileDescriptor.ChangeTimeUtc.Value.ToLocalTime().ToFileTime(); + var changeTimeFileTime = new FILETIME + { + dwLowDateTime = (int) (changeTime & 0xffffffff), + dwHighDateTime = (int) (changeTime >> 32), + }; + FILEDESCRIPTOR.ftLastWriteTime = changeTimeFileTime; + FILEDESCRIPTOR.ftCreationTime = changeTimeFileTime; + } + // Set optional length + if (fileDescriptor.Length.HasValue) + { + FILEDESCRIPTOR.dwFlags |= NativeMethods.FD_FILESIZE; + FILEDESCRIPTOR.nFileSizeLow = (uint) (fileDescriptor.Length & 0xffffffff); + FILEDESCRIPTOR.nFileSizeHigh = (uint) (fileDescriptor.Length >> 32); + } + // Add structure to buffer + bytes.AddRange(StructureBytes(FILEDESCRIPTOR)); + } + + // Set CFSTR_FILEDESCRIPTORW + SetData(FILEDESCRIPTORW, bytes); + // Set n CFSTR_FILECONTENTS + var index = 0; + foreach (var fileDescriptor in fileDescriptors) + { + SetData(FILECONTENTS, index, fileDescriptor.StreamContents); + index++; + } + } + + /// + /// Gets the DragDropEffects value (if any) previously set on the object. + /// + /// Clipboard format. + /// DragDropEffects value or null. + [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", + Justification = "Method doesn't decrease security.")] + private DragDropEffects? GetDropEffect(short format) + { + // Get the most recent setting + var o = + ToArray(Where(_dataObjects, + d => + (format == d.FORMATETC.cfFormat) && (DVASPECT.DVASPECT_CONTENT == d.FORMATETC.dwAspect) && + (TYMED.TYMED_HGLOBAL == d.FORMATETC.tymed))); + var dataObject = o.Length == 0 ? null : o[o.Length - 1]; + + if (null != dataObject) + { + // Read the value and return it + var result = dataObject.GetData(); + if (NativeMethods.SUCCEEDED(result.Item2)) + { + var ptr = NativeMethods.GlobalLock(result.Item1); + if (IntPtr.Zero != ptr) + { + try + { + var length = NativeMethods.GlobalSize(ptr).ToInt32(); + if (4 == length) + { + var data = new byte[length]; + Marshal.Copy(ptr, data, 0, length); + return (DragDropEffects) (BitConverter.ToUInt32(data, 0)); + } + } + finally + { + NativeMethods.GlobalUnlock(result.Item1); + } + } + } + } + return null; + } + + // Explicit interface implementation hides the technical details from users of VirtualFileDataObject. + + /// + /// Returns the in-memory representation of an interop structure. + /// + /// Structure to return. + /// In-memory representation of structure. + [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", + Justification = "Method doesn't decrease security.")] + private static IEnumerable StructureBytes(object source) + { + // Set up for call to StructureToPtr + var size = Marshal.SizeOf(source.GetType()); + var ptr = Marshal.AllocHGlobal(size); + var bytes = new byte[size]; + try + { + Marshal.StructureToPtr(source, ptr, false); + // Copy marshalled bytes to buffer + Marshal.Copy(ptr, bytes, 0, size); + } + finally + { + Marshal.FreeHGlobal(ptr); + } + return bytes; + } + + /// + /// Initiates a drag-and-drop operation. + /// + /// A reference to the dependency object that is the source of the data being dragged. + /// A data object that contains the data being dragged. + /// One of the DragDropEffects values that specifies permitted effects of the drag-and-drop operation. + /// One of the DragDropEffects values that specifies the final effect that was performed during the drag-and-drop operation. + /// + /// Call this method instead of System.Windows.DragDrop.DoDragDrop because this method handles IDataObject better. + /// + [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "dragSource", + Justification = "Parameter is present so the signature matches that of System.Windows.DragDrop.DoDragDrop.") + ] + public static DragDropEffects DoDragDrop(IDataObject dataObject, DragDropEffects allowedEffects) + { + int[] finalEffect = new int[1]; + try + { + NativeMethods.DoDragDrop(dataObject, new DropSource(), (int) allowedEffects, finalEffect); + } + finally + { + var virtualFileDataObject = dataObject as VirtualFileDataObject; + if ((null != virtualFileDataObject) && !virtualFileDataObject.IsAsynchronous && + virtualFileDataObject._inOperation) + { + // Call the end action and exit the operation + if (null != virtualFileDataObject._endAction) + { + virtualFileDataObject._endAction(virtualFileDataObject); + } + virtualFileDataObject._inOperation = false; + } + } + return (DragDropEffects) (finalEffect[0]); + } + + /// + /// Class representing the result of a SetData call. + /// + private class DataObject + { + /// + /// Func returning the data as an IntPtr and an HRESULT success code. + /// + public delegate Tuple Data(); + + /// + /// FORMATETC structure for the data. + /// + public FORMATETC FORMATETC { get; set; } + + public Data DataDelegate { get; set; } + + public Tuple GetData() + { + return DataDelegate(); + } + } + + /// + /// Contains the methods for generating visual feedback to the end user and for canceling or completing the drag-and-drop operation. + /// + private class DropSource : NativeMethods.IDropSource + { + /// + /// Determines whether a drag-and-drop operation should continue. + /// + /// Indicates whether the Esc key has been pressed since the previous call to QueryContinueDrag or to DoDragDrop if this is the first call to QueryContinueDrag. A TRUE value indicates the end user has pressed the escape key; a FALSE value indicates it has not been pressed. + /// The current state of the keyboard modifier keys on the keyboard. Possible values can be a combination of any of the flags MK_CONTROL, MK_SHIFT, MK_ALT, MK_BUTTON, MK_LBUTTON, MK_MBUTTON, and MK_RBUTTON. + /// This method returns S_OK/DRAGDROP_S_DROP/DRAGDROP_S_CANCEL on success. + public int QueryContinueDrag(int fEscapePressed, uint grfKeyState) + { + var escapePressed = (0 != fEscapePressed); + + var keyStates = (DragDropKeyStates) grfKeyState; + if (escapePressed) + { + return NativeMethods.DRAGDROP_S_CANCEL; + } + else if (DragDropKeyStates.None == (keyStates & DragDropKeyStates.LeftMouseButton)) + { + return NativeMethods.DRAGDROP_S_DROP; + } + return NativeMethods.S_OK; + } + + /// + /// Gives visual feedback to an end user during a drag-and-drop operation. + /// + /// The DROPEFFECT value returned by the most recent call to IDropTarget::DragEnter, IDropTarget::DragOver, or IDropTarget::DragLeave. + /// This method returns S_OK on success. + public int GiveFeedback(uint dwEffect) + { + return NativeMethods.DRAGDROP_S_USEDEFAULTCURSORS; + } + } + + /// + /// Class representing a virtual file for use by drag/drop or the clipboard. + /// + [SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible", + Justification = "Deliberate to provide obvious coupling.")] + public class FileDescriptor + { + /// + /// Gets or sets the name of the file. + /// + public string Name { get; set; } + + /// + /// Gets or sets the (optional) length of the file. + /// + public Int64? Length { get; set; } + + /// + /// Gets or sets the (optional) change time of the file. + /// + public DateTime? ChangeTimeUtc { get; set; } + + /// + /// Gets or sets an Action that returns the contents of the file. + /// + public Action StreamContents { get; set; } + } + + private delegate bool Filter(T obj); + + /// + /// Simple class that exposes a write-only IStream as a Stream. + /// + private class IStreamWrapper : Stream + { + /// + /// IStream instance being wrapped. + /// + private readonly IStream _iStream; + + /// + /// Initializes a new instance of the IStreamWrapper class. + /// + /// IStream instance to wrap. + public IStreamWrapper(IStream iStream) + { + _iStream = iStream; + } + + /// + /// Gets a value indicating whether the current stream supports reading. + /// + public override bool CanRead + { + get { return false; } + } + + /// + /// Gets a value indicating whether the current stream supports seeking. + /// + public override bool CanSeek + { + get { return false; } + } + + /// + /// Gets a value indicating whether the current stream supports writing. + /// + public override bool CanWrite + { + get { return true; } + } + + /// + /// Gets the length in bytes of the stream. + /// + public override long Length + { + get { throw new NotImplementedException(); } + } + + /// + /// Gets or sets the position within the current stream. + /// + public override long Position + { + get { throw new NotImplementedException(); } + set { throw new NotImplementedException(); } + } + + /// + /// Clears all buffers for this stream and causes any buffered data to be written to the underlying device. + /// + public override void Flush() + { + throw new NotImplementedException(); + } + + /// + /// Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + /// + /// An array of bytes. When this method returns, the buffer contains the specified byte array with the values between offset and (offset + count - 1) replaced by the bytes read from the current source. + /// The zero-based byte offset in buffer at which to begin storing the data read from the current stream. + /// The maximum number of bytes to be read from the current stream. + /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not currently available, or zero (0) if the end of the stream has been reached. + public override int Read(byte[] buffer, int offset, int count) + { + throw new NotImplementedException(); + } + + /// + /// Sets the position within the current stream. + /// + /// A byte offset relative to the origin parameter. + /// A value of type SeekOrigin indicating the reference point used to obtain the new position. + /// The new position within the current stream. + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotImplementedException(); + } + + /// + /// Sets the length of the current stream. + /// + /// The desired length of the current stream in bytes. + public override void SetLength(long value) + { + throw new NotImplementedException(); + } + + /// + /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + /// + /// An array of bytes. This method copies count bytes from buffer to the current stream. + /// The zero-based byte offset in buffer at which to begin copying bytes to the current stream. + /// The number of bytes to be written to the current stream. + public override void Write(byte[] buffer, int offset, int count) + { + if (offset == 0) + { + // Optimize common case to avoid creating extra buffers + _iStream.Write(buffer, count, IntPtr.Zero); + } + else + { + // Easy way to provide the relevant byte[] + List ba = new List(buffer.Length - offset); + int p = 0; + foreach (byte b in buffer) + { + if (p >= offset) ba.Add(b); + p++; + } + _iStream.Write(ba.ToArray(), count, IntPtr.Zero); + } + } + } + + /// + /// Provides access to Win32-level constants, structures, and functions. + /// + internal static class NativeMethods + { + public const string CFSTR_FILECONTENTS = "FileContents"; + public const string CFSTR_FILEDESCRIPTORW = "FileGroupDescriptorW"; + public const string CFSTR_PASTESUCCEEDED = "Paste Succeeded"; + public const string CFSTR_PERFORMEDDROPEFFECT = "Performed DropEffect"; + public const string CFSTR_PREFERREDDROPEFFECT = "Preferred DropEffect"; + public const int DRAGDROP_S_CANCEL = 0x00040101; + public const int DRAGDROP_S_DROP = 0x00040100; + public const int DRAGDROP_S_USEDEFAULTCURSORS = 0x00040102; + public const int DV_E_DVASPECT = -2147221397; + public const int DV_E_FORMATETC = -2147221404; + public const int DV_E_TYMED = -2147221399; + public const int E_FAIL = -2147467259; + public const uint FD_CREATETIME = 0x00000008; + public const uint FD_FILESIZE = 0x00000040; + public const uint FD_WRITESTIME = 0x00000020; + public const int OLE_E_ADVISENOTSUPPORTED = -2147221501; + public const int S_FALSE = 1; + public const int S_OK = 0; + public const int VARIANT_FALSE = 0; + public const int VARIANT_TRUE = -1; + + [SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters", MessageId = "2#", + Justification = "Win32 API.")] + [DllImport("shell32.dll")] + public static extern int SHCreateStdEnumFmtEtc(uint cfmt, FORMATETC[] afmt, + out IEnumFORMATETC ppenumFormatEtc); + + [return: MarshalAs(UnmanagedType.Interface)] + [DllImport("ole32.dll", PreserveSig = false)] + public static extern IStream CreateStreamOnHGlobal(IntPtr hGlobal, + [MarshalAs(UnmanagedType.Bool)] bool fDeleteOnRelease); + + [DllImport("ole32.dll", CharSet = CharSet.Auto, ExactSpelling = true, PreserveSig = false)] + public static extern void DoDragDrop(IDataObject dataObject, IDropSource dropSource, int allowedEffects, + int[] finalEffect); + + [DllImport("kernel32.dll")] + public static extern IntPtr GlobalLock(IntPtr hMem); + + [return: MarshalAs(UnmanagedType.Bool)] + [DllImport("kernel32.dll")] + public static extern bool GlobalUnlock(IntPtr hMem); + + [DllImport("kernel32.dll")] + public static extern IntPtr GlobalSize(IntPtr handle); + + /// + /// Returns true iff the HRESULT is a success code. + /// + /// HRESULT to check. + /// True iff a success code. + public static bool SUCCEEDED(int hr) + { + return (0 <= hr); + } + + [SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes", + Justification = "Structure exists for interop.")] + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct FILEDESCRIPTOR + { + public UInt32 dwFlags; + public readonly Guid clsid; + public readonly Int32 sizelcx; + public readonly Int32 sizelcy; + public readonly Int32 pointlx; + public readonly Int32 pointly; + public readonly UInt32 dwFileAttributes; + public FILETIME ftCreationTime; + public readonly FILETIME ftLastAccessTime; + public FILETIME ftLastWriteTime; + public UInt32 nFileSizeHigh; + public UInt32 nFileSizeLow; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string cFileName; + } + + [SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes", + Justification = "Structure exists for interop.")] + [StructLayout(LayoutKind.Sequential)] + public struct FILEGROUPDESCRIPTOR + { + public UInt32 cItems; + // Followed by 0 or more FILEDESCRIPTORs + } + + [ComImport] + [Guid("00000121-0000-0000-C000-000000000046")] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface IDropSource + { + [PreserveSig] + int QueryContinueDrag(int fEscapePressed, uint grfKeyState); + + [PreserveSig] + int GiveFeedback(uint dwEffect); + } + } + + /// + /// Represents a 2-tuple, or pair. + /// + /// + /// Minimal implementation of the .NET 4 Tuple class; remove if running on .NET 4. + /// + /// The type of the tuple's first component. + /// The type of the tuple's second component. + internal class Tuple + { + /// + /// Initializes a new instance of the Tuple(T1, T2) class. + /// + /// The value of the tuple's first component. + /// The value of the tuple's second component. + public Tuple(T1 item1, T2 item2) + { + Item1 = item1; + Item2 = item2; + } + + /// + /// Gets the value of the current Tuple(T1, T2) object's first component. + /// + public T1 Item1 { get; private set; } + + /// + /// Gets the value of the current Tuple(T1, T2) object's second component. + /// + public T2 Item2 { get; private set; } + } + } + + /// + /// Definition of the IAsyncOperation COM interface. + /// + /// + /// Pseudo-public because VirtualFileDataObject implements it. + /// + [ComImport] + [Guid("3D8B0590-F691-11d2-8EA9-006097DF5BD4")] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IAsyncOperation + { + void SetAsyncMode([In] Int32 fDoOpAsync); + void GetAsyncMode([Out] out Int32 pfIsOpAsync); + void StartOperation([In] IBindCtx pbcReserved); + void InOperation([Out] out Int32 pfInAsyncOp); + void EndOperation([In] Int32 hResult, [In] IBindCtx pbcReserved, [In] UInt32 dwEffects); + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/AboutBox.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/AboutBox.Designer.cs similarity index 98% rename from source/ch/cyberduck/ui/winforms/AboutBox.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/AboutBox.Designer.cs index c0b8d85bfc..5f5c3f4d93 100644 --- a/source/ch/cyberduck/ui/winforms/AboutBox.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/AboutBox.Designer.cs @@ -1,207 +1,207 @@ -using Ch.Cyberduck.Ui.Winforms.Controls; - -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class AboutBox - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - 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.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); - this.logoPictureBox = new System.Windows.Forms.PictureBox(); - this.labelProductName = new System.Windows.Forms.Label(); - this.labelVersion = new System.Windows.Forms.Label(); - this.labelCopyright = new System.Windows.Forms.Label(); - this.creditsRichTextBox = new Ch.Cyberduck.Ui.Winforms.Controls.ReadOnlyRichTextBox(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.ackButton = new System.Windows.Forms.Button(); - this.labelRegistered = new System.Windows.Forms.Label(); - this.tableLayoutPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel - // - this.tableLayoutPanel.ColumnCount = 1; - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0); - this.tableLayoutPanel.Controls.Add(this.labelProductName, 0, 1); - this.tableLayoutPanel.Controls.Add(this.labelVersion, 0, 2); - this.tableLayoutPanel.Controls.Add(this.labelCopyright, 0, 5); - this.tableLayoutPanel.Controls.Add(this.creditsRichTextBox, 0, 4); - this.tableLayoutPanel.Controls.Add(this.tableLayoutPanel1, 0, 7); - this.tableLayoutPanel.Controls.Add(this.labelRegistered, 0, 3); - this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel.Name = "tableLayoutPanel"; - this.tableLayoutPanel.RowCount = 8; - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.Size = new System.Drawing.Size(348, 444); - this.tableLayoutPanel.TabIndex = 0; - // - // logoPictureBox - // - this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.logoPictureBox.Location = new System.Drawing.Point(3, 3); - this.logoPictureBox.Name = "logoPictureBox"; - this.logoPictureBox.Size = new System.Drawing.Size(342, 160); - this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.logoPictureBox.TabIndex = 12; - this.logoPictureBox.TabStop = false; - // - // labelProductName - // - this.labelProductName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.labelProductName.AutoSize = true; - this.labelProductName.Location = new System.Drawing.Point(7, 166); - this.labelProductName.Margin = new System.Windows.Forms.Padding(7, 0, 3, 0); - this.labelProductName.Name = "labelProductName"; - this.labelProductName.Size = new System.Drawing.Size(338, 15); - this.labelProductName.TabIndex = 19; - this.labelProductName.Text = "Product Name"; - this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // labelVersion - // - this.labelVersion.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.labelVersion.AutoSize = true; - this.labelVersion.Location = new System.Drawing.Point(7, 184); - this.labelVersion.Margin = new System.Windows.Forms.Padding(7, 3, 3, 10); - this.labelVersion.MaximumSize = new System.Drawing.Size(0, 20); - this.labelVersion.Name = "labelVersion"; - this.labelVersion.Size = new System.Drawing.Size(338, 15); - this.labelVersion.TabIndex = 0; - this.labelVersion.Text = "Version"; - this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // labelCopyright - // - this.labelCopyright.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.labelCopyright.AutoSize = true; - this.labelCopyright.Location = new System.Drawing.Point(7, 382); - this.labelCopyright.Margin = new System.Windows.Forms.Padding(7, 0, 3, 0); - this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 20); - this.labelCopyright.Name = "labelCopyright"; - this.labelCopyright.Padding = new System.Windows.Forms.Padding(0, 2, 0, 0); - this.labelCopyright.Size = new System.Drawing.Size(338, 17); - this.labelCopyright.TabIndex = 21; - this.labelCopyright.Text = "Copyright"; - this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // creditsRichTextBox - // - this.creditsRichTextBox.BackColor = System.Drawing.Color.White; - this.creditsRichTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.creditsRichTextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.creditsRichTextBox.Location = new System.Drawing.Point(3, 227); - this.creditsRichTextBox.Name = "creditsRichTextBox"; - this.creditsRichTextBox.ReadOnly = true; - this.creditsRichTextBox.Size = new System.Drawing.Size(342, 152); - this.creditsRichTextBox.TabIndex = 22; - this.creditsRichTextBox.Text = ""; - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.AutoSize = true; - this.tableLayoutPanel1.ColumnCount = 3; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel1.Controls.Add(this.ackButton, 1, 0); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 409); - this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(3, 10, 3, 10); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 1; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(342, 25); - this.tableLayoutPanel1.TabIndex = 24; - // - // ackButton - // - this.ackButton.AutoSize = true; - this.ackButton.Location = new System.Drawing.Point(110, 0); - this.ackButton.Margin = new System.Windows.Forms.Padding(0); - this.ackButton.Name = "ackButton"; - this.ackButton.Size = new System.Drawing.Size(122, 25); - this.ackButton.TabIndex = 23; - this.ackButton.Text = "Acknowledgments"; - this.ackButton.UseVisualStyleBackColor = true; - // - // labelRegistered - // - this.labelRegistered.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.labelRegistered.AutoSize = true; - this.labelRegistered.Location = new System.Drawing.Point(3, 209); - this.labelRegistered.Name = "labelRegistered"; - this.labelRegistered.Size = new System.Drawing.Size(342, 15); - this.labelRegistered.TabIndex = 25; - this.labelRegistered.Text = "Registered to"; - this.labelRegistered.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // AboutBox - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(348, 444); - this.Controls.Add(this.tableLayoutPanel); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "AboutBox"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "About"; - this.tableLayoutPanel.ResumeLayout(false); - this.tableLayoutPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; - private System.Windows.Forms.PictureBox logoPictureBox; - private System.Windows.Forms.Label labelProductName; - private System.Windows.Forms.Label labelVersion; - private System.Windows.Forms.Label labelCopyright; - private ReadOnlyRichTextBox creditsRichTextBox; - private System.Windows.Forms.Button ackButton; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label labelRegistered; - } -} +using Ch.Cyberduck.Ui.Winforms.Controls; + +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class AboutBox + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + 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.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.logoPictureBox = new System.Windows.Forms.PictureBox(); + this.labelProductName = new System.Windows.Forms.Label(); + this.labelVersion = new System.Windows.Forms.Label(); + this.labelCopyright = new System.Windows.Forms.Label(); + this.creditsRichTextBox = new Ch.Cyberduck.Ui.Winforms.Controls.ReadOnlyRichTextBox(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.ackButton = new System.Windows.Forms.Button(); + this.labelRegistered = new System.Windows.Forms.Label(); + this.tableLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); + this.tableLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // tableLayoutPanel + // + this.tableLayoutPanel.ColumnCount = 1; + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0); + this.tableLayoutPanel.Controls.Add(this.labelProductName, 0, 1); + this.tableLayoutPanel.Controls.Add(this.labelVersion, 0, 2); + this.tableLayoutPanel.Controls.Add(this.labelCopyright, 0, 5); + this.tableLayoutPanel.Controls.Add(this.creditsRichTextBox, 0, 4); + this.tableLayoutPanel.Controls.Add(this.tableLayoutPanel1, 0, 7); + this.tableLayoutPanel.Controls.Add(this.labelRegistered, 0, 3); + this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel.Name = "tableLayoutPanel"; + this.tableLayoutPanel.RowCount = 8; + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.Size = new System.Drawing.Size(348, 444); + this.tableLayoutPanel.TabIndex = 0; + // + // logoPictureBox + // + this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.logoPictureBox.Location = new System.Drawing.Point(3, 3); + this.logoPictureBox.Name = "logoPictureBox"; + this.logoPictureBox.Size = new System.Drawing.Size(342, 160); + this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.logoPictureBox.TabIndex = 12; + this.logoPictureBox.TabStop = false; + // + // labelProductName + // + this.labelProductName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.labelProductName.AutoSize = true; + this.labelProductName.Location = new System.Drawing.Point(7, 166); + this.labelProductName.Margin = new System.Windows.Forms.Padding(7, 0, 3, 0); + this.labelProductName.Name = "labelProductName"; + this.labelProductName.Size = new System.Drawing.Size(338, 15); + this.labelProductName.TabIndex = 19; + this.labelProductName.Text = "Product Name"; + this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // labelVersion + // + this.labelVersion.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.labelVersion.AutoSize = true; + this.labelVersion.Location = new System.Drawing.Point(7, 184); + this.labelVersion.Margin = new System.Windows.Forms.Padding(7, 3, 3, 10); + this.labelVersion.MaximumSize = new System.Drawing.Size(0, 20); + this.labelVersion.Name = "labelVersion"; + this.labelVersion.Size = new System.Drawing.Size(338, 15); + this.labelVersion.TabIndex = 0; + this.labelVersion.Text = "Version"; + this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // labelCopyright + // + this.labelCopyright.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.labelCopyright.AutoSize = true; + this.labelCopyright.Location = new System.Drawing.Point(7, 382); + this.labelCopyright.Margin = new System.Windows.Forms.Padding(7, 0, 3, 0); + this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 20); + this.labelCopyright.Name = "labelCopyright"; + this.labelCopyright.Padding = new System.Windows.Forms.Padding(0, 2, 0, 0); + this.labelCopyright.Size = new System.Drawing.Size(338, 17); + this.labelCopyright.TabIndex = 21; + this.labelCopyright.Text = "Copyright"; + this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // creditsRichTextBox + // + this.creditsRichTextBox.BackColor = System.Drawing.Color.White; + this.creditsRichTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.creditsRichTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.creditsRichTextBox.Location = new System.Drawing.Point(3, 227); + this.creditsRichTextBox.Name = "creditsRichTextBox"; + this.creditsRichTextBox.ReadOnly = true; + this.creditsRichTextBox.Size = new System.Drawing.Size(342, 152); + this.creditsRichTextBox.TabIndex = 22; + this.creditsRichTextBox.Text = ""; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.AutoSize = true; + this.tableLayoutPanel1.ColumnCount = 3; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.Controls.Add(this.ackButton, 1, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 409); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(3, 10, 3, 10); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(342, 25); + this.tableLayoutPanel1.TabIndex = 24; + // + // ackButton + // + this.ackButton.AutoSize = true; + this.ackButton.Location = new System.Drawing.Point(110, 0); + this.ackButton.Margin = new System.Windows.Forms.Padding(0); + this.ackButton.Name = "ackButton"; + this.ackButton.Size = new System.Drawing.Size(122, 25); + this.ackButton.TabIndex = 23; + this.ackButton.Text = "Acknowledgments"; + this.ackButton.UseVisualStyleBackColor = true; + // + // labelRegistered + // + this.labelRegistered.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.labelRegistered.AutoSize = true; + this.labelRegistered.Location = new System.Drawing.Point(3, 209); + this.labelRegistered.Name = "labelRegistered"; + this.labelRegistered.Size = new System.Drawing.Size(342, 15); + this.labelRegistered.TabIndex = 25; + this.labelRegistered.Text = "Registered to"; + this.labelRegistered.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // AboutBox + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(348, 444); + this.Controls.Add(this.tableLayoutPanel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AboutBox"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "About"; + this.tableLayoutPanel.ResumeLayout(false); + this.tableLayoutPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; + private System.Windows.Forms.PictureBox logoPictureBox; + private System.Windows.Forms.Label labelProductName; + private System.Windows.Forms.Label labelVersion; + private System.Windows.Forms.Label labelCopyright; + private ReadOnlyRichTextBox creditsRichTextBox; + private System.Windows.Forms.Button ackButton; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Label labelRegistered; + } +} diff --git a/source/ch/cyberduck/ui/winforms/AboutBox.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/AboutBox.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/AboutBox.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/AboutBox.cs index 58464d7fbd..28974e875f 100644 --- a/source/ch/cyberduck/ui/winforms/AboutBox.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/AboutBox.cs @@ -1,157 +1,157 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Drawing; -using System.Reflection; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Ui.Controller; -using ch.cyberduck.core; -using ch.cyberduck.core.aquaticprime; -using ch.cyberduck.core.local; -using ch.cyberduck.core.preferences; -using Path = System.IO.Path; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class AboutBox : BaseForm - { - public AboutBox() - { - InitializeComponent(); - - Text = String.Format("About {0}", AssemblyTitle); - logoPictureBox.Image = ApplicationIcon(); - labelProductName.Text = AssemblyProduct; - labelVersion.Text = String.Format("Version {0}", PreferencesFactory.get().getProperty("application.version")); - labelCopyright.Text = Copyright(); - - Font bigBoldFont = new Font(Font.FontFamily, Font.Size + 4, FontStyle.Bold); - labelProductName.Font = bigBoldFont; - - labelRegistered.Text = RegisteredText(); - - creditsRichTextBox.Rtf = Credits(); - creditsRichTextBox.SelectAll(); - creditsRichTextBox.SelectionFont = new Font(Font.FontFamily, 9); - creditsRichTextBox.DeselectAll(); - creditsRichTextBox.LinkClicked += - (sender, e) => BrowserLauncherFactory.get().open(e.LinkText); - - ackButton.Click += - delegate { ApplicationLauncherFactory.get().open(LocalFactory.get("Acknowledgments.rtf")); }; - } - - public virtual string RegisteredText() - { - return LicenseFactory.find().ToString(); - } - public virtual Image ApplicationIcon() - { - return IconCache.Instance.IconForName("cyberduck", 128); - } - - public virtual string Credits() - { - return ResourcesBundle.Credits; - } - public virtual string Copyright() - { - return LocaleFactory.localizedString("NSHumanReadableCopyright", "InfoPlist"); - } - - public string AssemblyTitle - { - get - { - object[] attributes = - Assembly.GetEntryAssembly().GetCustomAttributes(typeof (AssemblyTitleAttribute), false); - if (attributes.Length > 0) - { - AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute) attributes[0]; - if (Utils.IsNotBlank(titleAttribute.Title)) - { - return titleAttribute.Title; - } - } - return Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().CodeBase); - } - } - - public string AssemblyDescription - { - get - { - object[] attributes = - Assembly.GetEntryAssembly().GetCustomAttributes(typeof (AssemblyDescriptionAttribute), false); - if (attributes.Length == 0) - { - return String.Empty; - } - return ((AssemblyDescriptionAttribute) attributes[0]).Description; - } - } - - public string AssemblyProduct - { - get - { - object[] attributes = - Assembly.GetEntryAssembly().GetCustomAttributes(typeof (AssemblyProductAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyProductAttribute) attributes[0]).Product; - } - } - - public string AssemblyCopyright - { - get - { - object[] attributes = - Assembly.GetEntryAssembly().GetCustomAttributes(typeof (AssemblyCopyrightAttribute), false); - if (attributes.Length == 0) - { - return String.Empty; - } - return ((AssemblyCopyrightAttribute) attributes[0]).Copyright; - } - } - - public string AssemblyCompany - { - get - { - object[] attributes = - Assembly.GetEntryAssembly().GetCustomAttributes(typeof (AssemblyCompanyAttribute), false); - if (attributes.Length == 0) - { - return String.Empty; - } - return ((AssemblyCompanyAttribute) attributes[0]).Company; - } - } - - public override string[] BundleNames - { - get { return new[] {"Main", "Localizable"}; } - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Drawing; +using System.Reflection; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Ui.Controller; +using ch.cyberduck.core; +using ch.cyberduck.core.aquaticprime; +using ch.cyberduck.core.local; +using ch.cyberduck.core.preferences; +using Path = System.IO.Path; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class AboutBox : BaseForm + { + public AboutBox() + { + InitializeComponent(); + + Text = String.Format("About {0}", AssemblyTitle); + logoPictureBox.Image = ApplicationIcon(); + labelProductName.Text = AssemblyProduct; + labelVersion.Text = String.Format("Version {0}", PreferencesFactory.get().getProperty("application.version")); + labelCopyright.Text = Copyright(); + + Font bigBoldFont = new Font(Font.FontFamily, Font.Size + 4, FontStyle.Bold); + labelProductName.Font = bigBoldFont; + + labelRegistered.Text = RegisteredText(); + + creditsRichTextBox.Rtf = Credits(); + creditsRichTextBox.SelectAll(); + creditsRichTextBox.SelectionFont = new Font(Font.FontFamily, 9); + creditsRichTextBox.DeselectAll(); + creditsRichTextBox.LinkClicked += + (sender, e) => BrowserLauncherFactory.get().open(e.LinkText); + + ackButton.Click += + delegate { ApplicationLauncherFactory.get().open(LocalFactory.get("Acknowledgments.rtf")); }; + } + + public virtual string RegisteredText() + { + return LicenseFactory.find().ToString(); + } + public virtual Image ApplicationIcon() + { + return IconCache.Instance.IconForName("cyberduck", 128); + } + + public virtual string Credits() + { + return ResourcesBundle.Credits; + } + public virtual string Copyright() + { + return LocaleFactory.localizedString("NSHumanReadableCopyright", "InfoPlist"); + } + + public string AssemblyTitle + { + get + { + object[] attributes = + Assembly.GetEntryAssembly().GetCustomAttributes(typeof (AssemblyTitleAttribute), false); + if (attributes.Length > 0) + { + AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute) attributes[0]; + if (Utils.IsNotBlank(titleAttribute.Title)) + { + return titleAttribute.Title; + } + } + return Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().CodeBase); + } + } + + public string AssemblyDescription + { + get + { + object[] attributes = + Assembly.GetEntryAssembly().GetCustomAttributes(typeof (AssemblyDescriptionAttribute), false); + if (attributes.Length == 0) + { + return String.Empty; + } + return ((AssemblyDescriptionAttribute) attributes[0]).Description; + } + } + + public string AssemblyProduct + { + get + { + object[] attributes = + Assembly.GetEntryAssembly().GetCustomAttributes(typeof (AssemblyProductAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyProductAttribute) attributes[0]).Product; + } + } + + public string AssemblyCopyright + { + get + { + object[] attributes = + Assembly.GetEntryAssembly().GetCustomAttributes(typeof (AssemblyCopyrightAttribute), false); + if (attributes.Length == 0) + { + return String.Empty; + } + return ((AssemblyCopyrightAttribute) attributes[0]).Copyright; + } + } + + public string AssemblyCompany + { + get + { + object[] attributes = + Assembly.GetEntryAssembly().GetCustomAttributes(typeof (AssemblyCompanyAttribute), false); + if (attributes.Length == 0) + { + return String.Empty; + } + return ((AssemblyCompanyAttribute) attributes[0]).Company; + } + } + + public override string[] BundleNames + { + get { return new[] {"Main", "Localizable"}; } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/AboutBox.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/AboutBox.resx similarity index 97% rename from source/ch/cyberduck/ui/winforms/AboutBox.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/AboutBox.resx index 29dcb1b3a3..1af7de150c 100644 --- a/source/ch/cyberduck/ui/winforms/AboutBox.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/AboutBox.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/ActivityForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ActivityForm.Designer.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/ActivityForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/ActivityForm.Designer.cs index 48f87763a5..ed47f15fe2 100644 --- a/source/ch/cyberduck/ui/winforms/ActivityForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ActivityForm.Designer.cs @@ -1,109 +1,109 @@ -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class ActivityForm - { - /// - /// 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(ActivityForm)); - this.activitiyListView = new BrightIdeasSoftware.ObjectListView(); - this.descriptionColumn = new BrightIdeasSoftware.OLVColumn(); - this.throbberColumn = new BrightIdeasSoftware.OLVColumn(); - this.stopColumn = new BrightIdeasSoftware.OLVColumn(); - this.imageList1 = new System.Windows.Forms.ImageList(this.components); - ((System.ComponentModel.ISupportInitialize)(this.activitiyListView)).BeginInit(); - this.SuspendLayout(); - // - // activitiyListView - // - this.activitiyListView.AllColumns.Add(this.descriptionColumn); - this.activitiyListView.AllColumns.Add(this.throbberColumn); - this.activitiyListView.AllColumns.Add(this.stopColumn); - this.activitiyListView.AlternateRowBackColor = System.Drawing.SystemColors.Menu; - this.activitiyListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.descriptionColumn, - this.throbberColumn, - this.stopColumn}); - this.activitiyListView.Cursor = System.Windows.Forms.Cursors.Default; - this.activitiyListView.Dock = System.Windows.Forms.DockStyle.Fill; - this.activitiyListView.Location = new System.Drawing.Point(0, 0); - this.activitiyListView.MultiSelect = false; - this.activitiyListView.Name = "activitiyListView"; - this.activitiyListView.Size = new System.Drawing.Size(427, 303); - this.activitiyListView.TabIndex = 3; - this.activitiyListView.UseAlternatingBackColors = true; - this.activitiyListView.UseCompatibleStateImageBehavior = false; - this.activitiyListView.View = System.Windows.Forms.View.Details; - this.activitiyListView.CellClick += new System.EventHandler(this.activitiyListView_CellClick); - // - // descriptionColumn - // - this.descriptionColumn.HeaderFont = null; - this.descriptionColumn.Width = 250; - // - // throbberColumn - // - this.throbberColumn.HeaderFont = null; - this.throbberColumn.Width = 90; - // - // stopColumn - // - this.stopColumn.HeaderFont = null; - this.stopColumn.Width = 80; - // - // imageList1 - // - this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); - this.imageList1.TransparentColor = System.Drawing.Color.Transparent; - this.imageList1.Images.SetKeyName(0, "throbber.gif"); - // - // ActivityForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(427, 303); - this.Controls.Add(this.activitiyListView); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "ActivityForm"; - this.Text = "Activity"; - this.SizeChanged += new System.EventHandler(this.ActivityForm_SizeChanged); - ((System.ComponentModel.ISupportInitialize)(this.activitiyListView)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private BrightIdeasSoftware.ObjectListView activitiyListView; - private BrightIdeasSoftware.OLVColumn descriptionColumn; - private BrightIdeasSoftware.OLVColumn throbberColumn; - private BrightIdeasSoftware.OLVColumn stopColumn; - private System.Windows.Forms.ImageList imageList1; - - } +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class ActivityForm + { + /// + /// 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(ActivityForm)); + this.activitiyListView = new BrightIdeasSoftware.ObjectListView(); + this.descriptionColumn = new BrightIdeasSoftware.OLVColumn(); + this.throbberColumn = new BrightIdeasSoftware.OLVColumn(); + this.stopColumn = new BrightIdeasSoftware.OLVColumn(); + this.imageList1 = new System.Windows.Forms.ImageList(this.components); + ((System.ComponentModel.ISupportInitialize)(this.activitiyListView)).BeginInit(); + this.SuspendLayout(); + // + // activitiyListView + // + this.activitiyListView.AllColumns.Add(this.descriptionColumn); + this.activitiyListView.AllColumns.Add(this.throbberColumn); + this.activitiyListView.AllColumns.Add(this.stopColumn); + this.activitiyListView.AlternateRowBackColor = System.Drawing.SystemColors.Menu; + this.activitiyListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.descriptionColumn, + this.throbberColumn, + this.stopColumn}); + this.activitiyListView.Cursor = System.Windows.Forms.Cursors.Default; + this.activitiyListView.Dock = System.Windows.Forms.DockStyle.Fill; + this.activitiyListView.Location = new System.Drawing.Point(0, 0); + this.activitiyListView.MultiSelect = false; + this.activitiyListView.Name = "activitiyListView"; + this.activitiyListView.Size = new System.Drawing.Size(427, 303); + this.activitiyListView.TabIndex = 3; + this.activitiyListView.UseAlternatingBackColors = true; + this.activitiyListView.UseCompatibleStateImageBehavior = false; + this.activitiyListView.View = System.Windows.Forms.View.Details; + this.activitiyListView.CellClick += new System.EventHandler(this.activitiyListView_CellClick); + // + // descriptionColumn + // + this.descriptionColumn.HeaderFont = null; + this.descriptionColumn.Width = 250; + // + // throbberColumn + // + this.throbberColumn.HeaderFont = null; + this.throbberColumn.Width = 90; + // + // stopColumn + // + this.stopColumn.HeaderFont = null; + this.stopColumn.Width = 80; + // + // imageList1 + // + this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); + this.imageList1.TransparentColor = System.Drawing.Color.Transparent; + this.imageList1.Images.SetKeyName(0, "throbber.gif"); + // + // ActivityForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(427, 303); + this.Controls.Add(this.activitiyListView); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "ActivityForm"; + this.Text = "Activity"; + this.SizeChanged += new System.EventHandler(this.ActivityForm_SizeChanged); + ((System.ComponentModel.ISupportInitialize)(this.activitiyListView)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private BrightIdeasSoftware.ObjectListView activitiyListView; + private BrightIdeasSoftware.OLVColumn descriptionColumn; + private BrightIdeasSoftware.OLVColumn throbberColumn; + private BrightIdeasSoftware.OLVColumn stopColumn; + private System.Windows.Forms.ImageList imageList1; + + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/ActivityForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ActivityForm.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/ActivityForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/ActivityForm.cs index 38d04d8b2f..03907e7588 100644 --- a/source/ch/cyberduck/ui/winforms/ActivityForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ActivityForm.cs @@ -1,134 +1,134 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections; -using System.Drawing; -using System.Windows.Forms; -using BrightIdeasSoftware; -using Ch.Cyberduck.Ui.Controller; -using ch.cyberduck.core.threading; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class ActivityForm : BaseForm, IActivityView - { - private readonly int _initialDescriptionColumnWidth; - private readonly int _initialFormWidth; - - public ActivityForm() - { - InitializeComponent(); - - _initialFormWidth = Width; - _initialDescriptionColumnWidth = descriptionColumn.Width; - - // ImageList doesn't work with animated GIFs. At least not in conjuction with our - // custom renderer. - /* - ImageList images = new ImageList {ImageSize = new Size(32, 32), ColorDepth = ColorDepth.Depth32Bit}; - images.Images.Add("stop", ResourcesBundle.stop); - images.Images.Add("throbber", ResourcesBundle.throbber); - */ - - //todo config gemäss ErrorForm (vor allem resizing) - activitiyListView.RowHeight = 45; - activitiyListView.ShowGroups = false; - activitiyListView.OwnerDraw = true; - activitiyListView.UseOverlays = false; - activitiyListView.FullRowSelect = true; - activitiyListView.MultiSelect = false; - activitiyListView.HeaderStyle = ColumnHeaderStyle.None; - - // Activity name (task description) - TaskRenderer taskRenderer = new TaskRenderer(); - taskRenderer.TitleFont = new Font(activitiyListView.Font.Name, activitiyListView.Font.Size + 1); - taskRenderer.CellPadding = new Rectangle(0, 0, 2, 5); - descriptionColumn.Renderer = taskRenderer; - - // Throbber - AnimatedImageRenderer throbberRenderer = new AnimatedImageRenderer(true); - throbberColumn.AspectGetter = delegate { return "throbber"; }; - throbberColumn.Renderer = throbberRenderer; - - // Stop image (button) - AnimatedImageRenderer stopRenderer = new AnimatedImageRenderer(); - stopColumn.AspectGetter = delegate { return "stop"; }; - stopColumn.Renderer = stopRenderer; - } - - public void SetModel(IEnumerable model) - { - activitiyListView.SetObjects(model); - } - - public void RefreshTask(BackgroundAction action) - { - activitiyListView.RefreshObject(action); - } - - public void AddTask(BackgroundAction action) - { - activitiyListView.AddObject(action); - } - - public void RemoveTask(BackgroundAction action) - { - activitiyListView.RemoveObject(action); - } - - public BackgroundAction SelectedTask - { - get { return (BackgroundAction) activitiyListView.SelectedObject; } - } - - public AspectGetterDelegate ModelTitleGetter - { - set { descriptionColumn.AspectGetter = value; } - } - - public AspectGetterDelegate ModelDescriptionGetter - { - set { ((TaskRenderer) descriptionColumn.Renderer).DescriptionAspectGetter = value; } - } - - public AspectGetterDelegate ModelIsRunningGetter - { - set { ((AnimatedImageRenderer) throbberColumn.Renderer).AnimationRunningAspectGetter = value; } - } - - public event VoidHandler StopActionEvent = delegate { }; - - private void ActivityForm_SizeChanged(object sender, EventArgs e) - { - // resize description column - int diff = Width - _initialFormWidth; - if (diff > 0) - descriptionColumn.Width = _initialDescriptionColumnWidth + diff; - } - - private void activitiyListView_CellClick(object sender, CellClickEventArgs e) - { - // stop button clicked - if (e.Column == stopColumn && e.HitTest.HitTestLocation == HitTestLocation.Image) - { - StopActionEvent(); - } - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections; +using System.Drawing; +using System.Windows.Forms; +using BrightIdeasSoftware; +using Ch.Cyberduck.Ui.Controller; +using ch.cyberduck.core.threading; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class ActivityForm : BaseForm, IActivityView + { + private readonly int _initialDescriptionColumnWidth; + private readonly int _initialFormWidth; + + public ActivityForm() + { + InitializeComponent(); + + _initialFormWidth = Width; + _initialDescriptionColumnWidth = descriptionColumn.Width; + + // ImageList doesn't work with animated GIFs. At least not in conjuction with our + // custom renderer. + /* + ImageList images = new ImageList {ImageSize = new Size(32, 32), ColorDepth = ColorDepth.Depth32Bit}; + images.Images.Add("stop", ResourcesBundle.stop); + images.Images.Add("throbber", ResourcesBundle.throbber); + */ + + //todo config gemäss ErrorForm (vor allem resizing) + activitiyListView.RowHeight = 45; + activitiyListView.ShowGroups = false; + activitiyListView.OwnerDraw = true; + activitiyListView.UseOverlays = false; + activitiyListView.FullRowSelect = true; + activitiyListView.MultiSelect = false; + activitiyListView.HeaderStyle = ColumnHeaderStyle.None; + + // Activity name (task description) + TaskRenderer taskRenderer = new TaskRenderer(); + taskRenderer.TitleFont = new Font(activitiyListView.Font.Name, activitiyListView.Font.Size + 1); + taskRenderer.CellPadding = new Rectangle(0, 0, 2, 5); + descriptionColumn.Renderer = taskRenderer; + + // Throbber + AnimatedImageRenderer throbberRenderer = new AnimatedImageRenderer(true); + throbberColumn.AspectGetter = delegate { return "throbber"; }; + throbberColumn.Renderer = throbberRenderer; + + // Stop image (button) + AnimatedImageRenderer stopRenderer = new AnimatedImageRenderer(); + stopColumn.AspectGetter = delegate { return "stop"; }; + stopColumn.Renderer = stopRenderer; + } + + public void SetModel(IEnumerable model) + { + activitiyListView.SetObjects(model); + } + + public void RefreshTask(BackgroundAction action) + { + activitiyListView.RefreshObject(action); + } + + public void AddTask(BackgroundAction action) + { + activitiyListView.AddObject(action); + } + + public void RemoveTask(BackgroundAction action) + { + activitiyListView.RemoveObject(action); + } + + public BackgroundAction SelectedTask + { + get { return (BackgroundAction) activitiyListView.SelectedObject; } + } + + public AspectGetterDelegate ModelTitleGetter + { + set { descriptionColumn.AspectGetter = value; } + } + + public AspectGetterDelegate ModelDescriptionGetter + { + set { ((TaskRenderer) descriptionColumn.Renderer).DescriptionAspectGetter = value; } + } + + public AspectGetterDelegate ModelIsRunningGetter + { + set { ((AnimatedImageRenderer) throbberColumn.Renderer).AnimationRunningAspectGetter = value; } + } + + public event VoidHandler StopActionEvent = delegate { }; + + private void ActivityForm_SizeChanged(object sender, EventArgs e) + { + // resize description column + int diff = Width - _initialFormWidth; + if (diff > 0) + descriptionColumn.Width = _initialDescriptionColumnWidth + diff; + } + + private void activitiyListView_CellClick(object sender, CellClickEventArgs e) + { + // stop button clicked + if (e.Column == stopColumn && e.HitTest.HitTestLocation == HitTestLocation.Image) + { + StopActionEvent(); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/ActivityForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ActivityForm.resx similarity index 98% rename from source/ch/cyberduck/ui/winforms/ActivityForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/ActivityForm.resx index 876c2db9a2..28f0de0fbe 100644 --- a/source/ch/cyberduck/ui/winforms/ActivityForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ActivityForm.resx @@ -1,2471 +1,2471 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADs - BwAAAk1TRnQBSQFMAwEBAAFIAQABSAEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA - AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA - AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA - AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm - AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ - AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm - AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz - AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm - AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm - AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA - ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm - AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm - ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm - AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA - AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ - AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz - AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/ - AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA - AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM - AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm - ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ - AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/ - ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM - ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm - AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM - AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA - AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA - ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7 - Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/8FAAHvAuwB9wHvAQcB8AHy - NwAB7AHrAewB7QH3AQcBvAHyAfMB9DUAAm0B6wHsAfcBBwHwAfEB8gH0Af80AAHsAeoBbQHrBgAB9DUA - ARMBEgFtPAAB7AITAfc8AAESAhM9AAIVARQ9AAMVPQABbQJDPQAB7wJDARI9AAFDAREBEAHsPAAB7wMQ - ARU8AAHtARACDwIOARM6AAHvARADDgEUPAAB7wESAREBQzcAAUIBTQE+BwABPgMAASgDAAFAAwABEAMA - AQEBAAEBBQABgBcAA/8BAAHwAQ8GAAHgAQcGAAHAAQcGAAGHAe8GAAGPAf8GAAEPAf8GAAEfAf8GAAEf - Af8GAAEfAf8GAAEfAf8GAAEPAf8GAAGHAf8GAAGDAf8GAAHAAX8GAAHgAX8GAAH4AX8GAAs= - - - - - - AAABAAQAAAAAAAEAIACG9QAARgAAAICAAAABACAAKBABAMz1AAAgIAAAAQAgACgRAAD0BQIAEBAAAAEA - IABoBAAAHBcCAIlQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAAu5pQ0NQSUNDIFByb2Zp - bGUAAHgBhVTPaxNBFP42bqnQIghaaw6yeJAiSVmraEXUNv0RYmsM2x+2RZBkM0nWbjbr7ia1pYjk4tEq - 3kXtoQf/gB568GQvSoVaRSjeqyhioRct8c1uTLal6sDOfvPeN+99b3bfAA1y0jT1gATkDcdSohFpbHxC - avyIAI6iCUE0JVXb7E4kBkGDc/l759h6D4FbVsN7+3eyd62a0raaB4T9QOBHmtkqsO8XcQpZEgKIPN+h - Kcd0CN/j2PLsjzlOeXjBtQ8rPcRZInxANS3Of024U80l00CDSDiU9XFSPpzXi5TXHQdpbmbGyBC9T5Cm - u8zuq2KhnE72DpC9nfR+TrPePsIhwgsZrT9GuI2e9YzVP+Jh4aTmxIY9HBg19PhgFbcaqfg1whRfEE0n - olRx2S4N8Ziu/VbySoJwkDjKZGGAc1pIT9dMbvi6hwV9JtcTr+J3VlHheY8TZ97U3e9F2gKvMA4dDBoM - mg1IUBBFBGGYsFBAhjwaMTSycj8jqwYbk3sydSRqu3RiRLFBezbcPbdRpN08/igicZRDtQiS/EH+Kq/J - T+V5+ctcsNhW95Stm5q68uA7xeWZuRoe19PI43NNXnyV1HaTV0eWrHl6vJrsGj/sV5cx5oI1j8RzsPvx - LV+VzJcpjBTF41Xz6kuEdVoxN9+fbH87PeIuzy611nOtiYs3VpuXZ/1qSPvuqryT5lX5T1718fxnzcRj - 4ikxJnaK5yGJl8Uu8ZLYS6sL4mBtxwidlYYp0m2R+iTVYGCavPUvXT9beL1Gfwz1UZQZzNJUifd/wipk - NJ25Dm/6j9vH/Bfk94rnnygCL2zgyJm6bVNx7xChZaVuc64CF7/RffC2bmujfjj8BFg8qxatUjWfILwB - HHaHeh7oKZjTlpbNOVKHLJ+TuunKYlLMUNtDUlLXJddlSxazmVVi6XbYmdMdbhyhOUL3xKdKZZP6r/ER - sP2wUvn5rFLZfk4a1oGX+m/AvP1FwHiLiQAAAAlwSFlzAAALEwAACxMBAJqcGAAAIABJREFUeAHsnQm8 - ZUdV7muf+Z47jz13OnOnQxJCwhSmBDEKEgWEKKJP30MQUFEQQRDhiojAAxFlhiA+kN8jQXHgRWQKCgkQ - EsAMDRlJOkmnhzuPZ9z7/b9Vu8499/aQztCS0Kfu3btq165p16lvrVWrpsh1zCOyBhLnooiSX3rppZnR - 0dHo/AsuaPKM94oZHx/PvPSl55Tmv/bp8r7rPtdXKvf2E63sojifxEk2ykTNOImrzuWWXK0655rxXLMy - v3Tee1yFVFallaYaXfoCl9l5ukvGx+39wcKsFKDjetjXgNpQxzyyasBAePFlrtlW7Gj2rk+eGFXnxpYm - do3WZ+7YFi/deUJcndwcJbPro6g6lO3K9GXzSSmbcTmXdRkX6S9KSCWJ46SeNFy9UXcLccVNNqrR3nrF - 3VWvZu9oVJKbq5XklsZS5q4nv3Nivi1PBxHI7LjRRR2C0F4rjyx3hwA8Mn6vCLDpEscNXDf67t88acPY - 9tPPrk1dd1422fXMYlf95CibFLOFTD5XAuldWQfwXSavKNCLhEu/uGQH++XtwddAEpEw4WLuceziesIV - u8ZyI6kvZuYrC+7u6qy7oTLvrqkt5b61NFe74Slvn532kf0d6SCbEoO43b/jfvjWgDWDh2/xjvmSBeAH - QEXfGB/ZUC66p5X6kmeUexbPK/VUTugaLBQKfV0uUyy6KJ8H39kkbubiZiMTJTGMPgve87HL5ptRIiIA - yM0zk8PWRQDEAhdl9AI3koGIQSSi0ci6ZoM4VQhC3TWX664636gvTye7Ficz36zORv+5PJ/5jztvnLit - TSoJUorKTUId83CtgQ4BeHj+MgH4Ak9y1atcV3Fo+Ildfe55vaP1C7tH45NKvUAXLh/ljHPHLoGFm1aA - GPLMZBysn4cCjD/nGnUATpBsmTgFfvaUCEQR7yECvCFevs0tomBpe2JgokEN8QCVQbIIUVjCuezqi1VX - mW7OL+xz1yxM5C5fmEv+3xP/ZPKHKjeX60gFqoWHr+kQgIfZb4OYnwmi/jdeO9JbHIh+pn+o8ev9G+Lz - u4fjnlwXsMwmktZj8G7sGp+V39F8uGW4TNSHw2e5MkUXN4uuWStAHwou2y3Qi25QAUYAFCZHsvhLKsBO - TDLAHUFMUBvg4F/0gP5BAjGIl7DnItdcyCTVOboK1agyFc/P7nZfXdiX+3RlsfmFJ4xPzRHR9AWpHaQZ - PXbMj7kG1Fw65mFQA+PjK8D/99es6x4ejp/VN9J8ycDG+lN7hl0xWxT46JyDP7n4R4XnH1aK798I04ZX - IwIANxACqEeS7XFxo4w4X3Q5pAGHkBA1lY7CeeB7wMP9DfiF1F8SASYN598l0IMGOgMIQTyPQnEmiZqz - 2bi64GozFTe/J755bnf2UwvT7hOPe+PUXYrNd1JIIwgdQqCK+DEb+zF+zGU41rMP4r4AEV3zpyPn9441 - Xz24pfHT3SMAXxK6l8SFSLnAMzez06pr/xXlVjDZIgBBEkDET9QlyCBCFHqJ3+saFSSBEkMCYNwZbVEk - ihEv8b6mhPgvIkH0Ea+HZ4y6AMEfqSLh4qVe+HdGCKbjqDERJfW5qLmwHM3f25iYuTP38YW98fvPHZ/e - pQRECLiIZBdWx/w4akC/eMf8mGoAALTE/avGh7f3D7pXDm1u/ErPhrg/B7Y88EEbjFYwsZsBX7jxpvUD - ykEEYVOXIqtb7/3E3UUU8BAREKjzEIFMP0o9KQ/zXEjzTcCfLDhXvxcisJxmQBymDrjcIOkN4OY5qftL - XQillVFahBFBEDGQojFZZODBCEESNaYyjYWFaAFCMHtX5lNz9yTvESHQ9ysT7I404Gv7v/2u5tIxP4Ya - SMEfm4JvbOTXRjbXXzuwNT6x0B3gbng3Zi/wgyjDtjrtwrYZIwa4wrNscXxMYpwfR5ZnE9shAFIMGpEQ - 7iAE2W6kgQHXWOwFu0WXLWbALsBv7OGaIkzApdLIkTbhTRpAijBJAWLR4NJoAhJCkhUh6MUmXKbk9QuM - HkTxdOIa+5KoPhnFiwvR/D31/ZO3Zv987+TU+y8Ydw0pChlBUGYrlI2Hjjn6NeBby9HPp5PDSg0E8Tf+ - 9hvXHd+zvvFnY8fXf6k87HJgTCxYrNr37wVw09L5yCYB4FQPwGnETm6hX79i+CUFcDFhE//xN0Lgge8J - gNw+JmjmHw4OqBtL3dCDbrCM8q8J927sg4Nr3g/cvGUUkfg2ugABMSKgSYMKo3S9dJHkRABEELhENBiJ - QKwgODqC+mQc1SYy9bnFaOrW5MqJ27O/d87rJ67tjBZQRT8GE5rNjyHrYzLLUN/Jd/589JlDG+t/MXx8 - 86x8OZJODUUaKBKuDdvcAH+Kc3MbxjzuYeqpg+BM6fWVKesAAuDBr2FB6xaYBGABU0KQdgtcN0Sg4HL9 - JRKBo6PcQ4TngsOvIgLKSnmHT9HzWsM7dRU0xCgdARKBCIG5STdqTBohSJhquLinWdn/g8yffWbf5NuR - imIudYuC6LE24c7zQ1wDh/sVH+KsjvnkVNfJv4678uby8O+Mbqu/rn+TG4KZSrOvd57BMz5vP4owFtxp - AL0QfgVAs32s1K2XvEpFf5MAwKDNBzDQiwCk3F+2jKUlN3MD0DY2q4jtTBzKoe9LYgGYACIAzA/mphgP - 0Chfpcc8A0kP6Agi6RikdEhi5hI0MxM/TL6w56boJQwb3p12CdpFjweYbyfafdVA2hLuK1jn/YOpAXE1 - 4idXj4+uP2F4+KObz6i/Y2BrNCSRH8BlwABj6YTQcBy2mG/SwJ0SAcNey41jbW9Z74KR24Atj+BIbfUd - PAUJobEVARw26+gBGswV4KlGBjHif4MhfAq3kk5btPvlJA0pDhldiBozDDtCVKQoNMoTRfmeXHP9Wdmf - 3fa4+Mpr3zn6FM0ovGJcYkjHHO0aCC3kaOdzzKYfuNlV46MnDa1vvn/slMaFeYbhqXjr69sEO/Bh/XqB - UXgUTrn5Hye1fQTDYsCwDdunv6B1A+S2vj+xRXLaFYDi+iYdKJAl5m3u9iw/uHMSl5n/H7l8D4CVQtCo - jYjAUTdNBILs0p5a5Z7v515yxu9PfirU3VHP+RjOQEJixxylGggN+DtvGT17ZGPzE4D/qczFgfUhD6tD - rum4AVvS7sstAtACvy+YB3wgCB6uhuEUy+YO4BbwjQhgt0CPpxKxSwH0rnWzR7tJ58As4ljThgkb5SiQ - cWor1Eq4o+PKQMTifG821zvceN6vPrp7+oJ3LX9LdXjZTl8rRyfbYzvVtDUc25VwNL4+gP/bbxl74tCW - +qdGTmk8lmE2wJ9hpY7HlQ2Xt7vBWSKtv9ntbu+3tpwmnZsnaCaIgTp1erDrpZCeXp6SyPMgRgloLkCd - FYQx+gDiSKtvvRfF/28xGYqYFIby8dbHN9+7833DL+90B45uvXcIwFGoX/X51XCv/tN1P7Xu+NrfD5+Y - 7MjkMk2wnbW+Pf172UYAIAlszmFdbQO0CIIuw2MKPJvWJ3hiuNm7NeX2QSyEf2NRfXzzbcdw27vVySjx - JiQKTT1CQFzlpnUEXlxYHfSoPSEHYAr9+Xjz4+IP/OD9Qy+5gLkCHZ3A0anwDgF4iOtV4OeKr37r2Hmj - J1U/NrgtOT6Ttdn22QQlnyn4tHdPCnSh2YAvlLZfvPdglzbgEKYd1ApiHB7PAHDZ8rNnC6DbYYxy8grB - XJE9AWqK+N8uBZAnhYYOFAdzycZzmh+8/r3DzxURkFR1mMJ3Xj2AGugQgAdQaYeKEsCvPv/wpvpHBzcn - 21DExYHzi+Or2y8x34M+2KQY/L3TZyFWn+oJ5DwYJdAq4BbgFUuYDVcL+SGMAhyBoaBRKgUk0gdopl8r - rSOI/9AEUaGT0mAxu+nR8d9+750Dj5ZUpTp+aJLvpKIaUFPpmIegBgL4pe0f29T89PDJzceiUGPDLcR+ - cXsN8RnI1ayVITejBjy3/Qps4WHvgpcxcD3gr5m8+sXsHW4t+7dn8UUFlC0FoNkKoEsjAgrXHpnnwxpL - HEKFxpJuQL5cp/waEYCCHYwKHTatB/eS2miyCDI7fVvj+h9cnTz1gvGZGVLUB1gtPrjUO7HVKjrmwdeA - pvfG33rD2Lrhdc0PDJ1o4E85Py1Von8Q+dXnF45kS8zXRVM2Du+d3NW+V0Dq363pCqy8tvhtwYm6Et/r - BtoDk/R9GhXI6wJUsJhNgVAMEOv+pnOfGa0ECEVekwWPWb6nMbAtc8a2U6N3KAJdgU67Xam5B+XqVOSD - qj6LrCaboKQq9W5ovBfO/9OZPH1+pt2pv29MnlF/IwCa4JMSgAB+gVuTbwzFPJi/8GdJe+/gNE+9sBxX - kNIK2wrY5kgViPcPvEqRsvABmQIEAF2A3yREea7k25bLg3Jq1mFtseSWprtcdYGpkY01eZB5lM/Fo6dE - L73l4/3PV1egow94UFXeiqzOXcc8BDUw0D36B6Mn1n4pV2I0H2k9TmfyGbcP3D/l9pYdGEPZjTOFr8Lw - ZJJ6qzzi+un4Py81dcB8ALWiWnjDSgqY4BfiK1D6KngduU3qUKZMvukaNU0QoqloaMAo1JGncl8h4zjv - luaG3Oz+fleZq9DTWXA9/VXXu64KRUUX4ftLJMNeRT05N7q9+c65b/de0ff4+Uk89XWqho55gDXQkQAe - YMUpWsqFkmveNvyc0ePrry/00R6Z1hszimYcPxXzxeHtWSBXcxWnxw6XFSFwavnLw272xr9Onau8Vz0o - wANGe5r6WktzlJkizK7CzRrrBY6CMrBR73GLi1vc3FzZzS6V3fTCoNt1S8Pdc33i5vcxV1pzJs0wLJBx - jVw5fzy7m75eXpde2ukK+Lp54PcOAXiAdSeln0TRb/7Z8GlDm+O3d4+5bub1x4Ddgx+wG/AR+62fH7g/ - oJXm3q6AcvPzBWknCi18txxrCtvmr3htyT0EtMAnyPbCzAdiSBCxXPsFtpSJa4rygB6Zr5wkQxxIwIYk - Q6e67Rd90J35/E+6Lee/1c3Wj3e7blh283tFBFqpZ3PdWcoSv3zhusEzLr64MyrQqpkH6OgQgAdWcab0 - u2J8tGdwJH5X/+bkVJDRhMuzsAegBPDD+dV4jfuDpxa4DbjcxN303p4piOyU4QUveZg79bBhPwXVM1cr - rh4VNzBMnCtGnmkCK54HcYUEgq1odAMidAFZdAGrhgQPmtFB0jy0l61OzJZQ8xfc5jN+ww2MnObK/ce5 - LWf+mjv7hf/gMmM/53Zdv8jeguxRYERAU4SSZqE7X2ZQ4o2HTrnz5khroEMAjrSmDhJusCd59dC2+Fko - /ZIk1hRf5tEL/FJiSeGnRqurHahy2x92wGRqW29f7jb/4FT2LfDrIRgCtMLIkXYllHbL31yHAqz8peEX - d9elTUDDxSQgLVsQEcDLlIG2SE9xVlLn4QEZaTSiTOxy3YMG/JCI8it1r3Nn/MKHXXbjL7i7dy645RnK - JsO+Zllth55xz5+7fui88XG/h4B/2bnf3xroEID7WWM0ONVZcvVbRp42tLX56lwP4DGur+EyQBE0/QIg - 4BcQOXqLW3jWC1IQYcC0lvjIT1dqWsQheLTbaTgfZg2w29NpS689+opbcfkcKfe0t5/2/tN2Xtr2K8sx - guFiM4+owHu2+YqZG+B3ERXReLDNh0kSLDjK5kUKvIlMC0pnv15D8ii505/5Htfoeby796ZFV19Wnhik - gFxXLhNVkt/xHp37A62BB/sLPtB8H6nxUtHflQbWx3/cM+b6AXKzaf1++Dqgtn4/wGuJ/oDfgBqASUs/ - GLhbfoQL7hX8SmdAleld6BKEGkz97dEiWKDw1uKsPLS7AvjF9bVrDzsBafsu2+ATAqBNQHOjXGOpPcy+ - n8MQgBF2+BomPLuGaLcfSQsmQQQIt+dxX27NNUDJmFkG8GxDJkPxNTqSyyvd2OWLA+7kZ7zdzcwPu5m7 - mJAU02QZZbH9CxP3c7M7R0/uSAFWcw/o1iEA96PaaGjWyge7hn+zb1Py01EW0R+RVMDX6Vka8jOuj20c - 3sApxHsAG4jV7zd/LGFV7jazSiKQ/5r34bkVL8Vd67ktrUM79bNzpSJ/BGePoi7EatlcWdw8m0RgBGEI - 96CLSoAfgpBkN7Fkjyu/ziW5IS4RAwjI/SUGVBZs3BXy8666tMsXF/Dfu3u3e8XLXua+9MUvmd/A+rPd - usf8rttzJ6cQcQ4JGSEyJE22NO/LVpPnKNCOHS0hwuJ0bkdWA6lMdWSBj+VQEv3Faa5h++7B4+MPdo+y - p7b6/BryM/AD8hT4IgIBqLJTjKrZmpFtTtlyqD3L8q9b4eTh36fvFE5+PsrKO5vqi39q23Tg4LYIISFF - XAt+cfEUvNquyw4JYNxfi4BMFyA/nRKEzQaiiSMsBMIuSQxysyV4onhhmDAtIwmQ4VoKln5kakXMb45y - vW6pMuzKg+dY0b/4xS+6177ude7yz3/ebd6y2Z155pmuPLLD7b3t684t3ul6RjjdCKWkVILNWmPswhdW - PvbsZ9s8ZWXYMfejBtQaOuYIagDwW0vuYu/+3nVuK09NG/KD9Zq4L+6vS6G4bJhPCjncmhNske2m96lm - P+Sb+re4eAjnk0pDKS1e+H+fnt4obAjfbge3QUI3ecjmanF+gd+L8bZXn3HwAH4RAPiDlIB+cQFx9cjQ - ncRw7R5E+ISDRmz33xz0MNNn0oD52Q7BlrnFO+gN4pQ0llyxwEEk9Z2uVtE0f+c2bdzotm3d6k465RT3 - xj9+o7v5ph+6YqnPjez4FTe9LwlSQEZFQ2dw1uNHxx6veJ15AaqF+2c6BOAI6kvcn2DJt98y9MTejfGL - Mto/X0N+ArY0/gI+XN9AbwpB/6xuQDuoDZMBmMoXd4rpVaVY1Q1QeIULIYJDfnIf7Nn8FICyWRi5lYAA - KVBzirCJ7OL8Ot0HjtoCfw4/XQrHd9qn6/OJi7jjENmTBpuENhaZ8aT9/abZ54+rOYcopI0+EYmU1ZEa - 9grMJHMQgbvc4vT3LNbZZz/abdy0yY2OrXNDQyPuPX/5l+Y/fMKFrpHf5ub21dG12EhArAVRTL646Eiz - 64RbXQMdArC6Pg76BAEw+PQMuZeiB+sD7E24Pr1Q2jsLfUwCEMYEeC38UWiLYTfcKSTCY8glfdbjAaBP - k2gLYmnac7tncAc7pG02ngf4A2yJ+i3OL/DzjMjvJ/q0g5+wLU2/zgBcAPQTgH+vSyp7AT5XbbeL6nu4 - 9nFN4QchYJDe94sOyHxV6exBUkB92pVLc64y8yW3ML8At+9yL0MH8L1rr3U9vb3uqqu+6fbce6/rHdji - yhue5Gb3VTnWzOo0yuQpY8M9g7QiTQySfWAmHZ9D1UCHAByqZlJ/wG/c/+q3DJ3eOxb/QpSDK6K8FvhN - 4y/QG/BTW5hL2307dzfpoD2v++wGrLRj60CQmOiIjgSOE07nZgFNjChueWmYMQ1uz8qfMnn0txWolb+4 - O6A3zn8k4GeD0HgWcAP06j18/H6XLM+4DAeHRJwMpF1+I44L11bfUcyZgjpXUIoRX4hWrodyaKlxzk25 - 7uJNgPsL6AMS96JffZG7iI791d++yt11111cuyx6z6YnuqWlnKvMWvLp7OTkjPmdg6crAL/XSsVZjM7t - cDUAue+Yw9XAjht9gyp2R88pDUSDSTOC+yetff1aRECgM6z59reml78CUILZ+pbQTBVHBeA5eOlRfjoV - yE4MYXw+5mokZcYcOeKbHYVsii5AkxY9n1uGa1ZdvosZe+2JKKGWUYrpZRny00MEvLJPzUDPIgwS+9s5 - v8DP9uCN/YCcPjoAzzD8FzeJq52NpGRsUR1lZonLceSGJOLqftfTM+qWJy5nYdDJLh4+3b37L9/t+vv7 - 3c233Ow2b97iKtXEFftPohcz4JbnllkwxPIA9lliNKYQNbPSA9zQGQ048mpXSP3yHXPoGohs6em4K3T1 - x8+2vn8jsbn+cVjjL06usX4b3qPxp+3fLOFDXrJDHnrBQ2q1OeTUaIAiKAyuPId3Zte7erQB2bbHMTfG - 1et116jWWJzDKb1MQEjUF4mqrpBbcOXyjOvtX2QVnZ+66zNu5USiciO6aJ8SoxQCvZqAugQIOtKqtff5 - CZtwyGfUlGgP+K2Pr1KyRJ+9AuN6hoEB4mgM1NLGekBGFcL3VO92g4Nlt2fvJ8n5d1ypPODG3zLOWgEO - D+F7Fxbm/JAjB5tWl5YhQhEDD3w/ism4GZ9H1pc8oOyP4UidLsBhfvzxcUHVofIf3N414M40eNL+TeRH - xLaVakYI1IAhAil2za2IQn6bua9ugDFSgJRkWRPffZyrMwOu0f1YV4tG3cJi3S0s1Vw1Zu58YdAlpVFX - Z9besoAxu+hmpgpu75517u47RtzUvWVmzVnPZaUMwr4u3UxskfsQ4BdX16pmAO/BzxFhCYo/9XtUPvWB - WCbcrCstwtrlk1aqD8xA8NAh5JO9bngQheDuj7mZ6Sl3754pNzm5380D/qXlJVdZ1s5EkLE6BCilOxlt - lRS7s+Tf0QOoFo7cqAV0zCFqIIj/ha7M+fnuuIzWPz3JRxwfKKSz/FoSsAFMEMHoJvxDBGxNe3gOr9qe - 8TLiIdy5AtNx+06BAOwg/W63MD0BvoZc73E/5XpGz9SuI0yflfYeqby25JZm7mCG3FVu8pYvuqW9t7sq - G2ssz2dclT766HFIBj0qqIgBEUwcIWPrn0sSkB/v2jm/FUIgt1N94fyAnxN9fBwrKRn7FYKZEpJDFyv5 - dKABoyF2opCOGFd2D8igXa3c5brK3W508BbA/2FX734OUsYGilqnqImrTe5EB7FE9aobIgpAbvRY+D22 - Ll0/tKV8xtRdItxcquGOuY8a6BCAw1QQ4j+t2bliT3xBtqhJP1r0AzhSrm9EQM0s5f4G9hXk+5QFamFO - WPM+LbArqvkFRx5gD57h3MDZ9IkTNzsz7Xo3PseNnfgsD/o0frByiMIl1iEPbXq823L2/3S7vvcJd883 - P+KW5mO3u9qHhDLv1p0IEWC+jhXCIuqTAL9xcxUqjPPLLeQK/DUEAET+Bntu6KRgC6vIvIfbZ8qsCUAX - Ub83csuMy2teQH644Ipb6J73cLzYEsBU5YQPVtQjNJGr0dO4xfV0n+Y2rbsL7f/73Nz0Wa6ZP5ViMFw4 - 9WmXy5ZRX1T9LmWQBh2ljBQwinMr2dzV0QMcYWUTrEMADlFXcBCb+fefbyhvKPa4czVjjcU+iP/q8/v2 - bcA2AkAiqbivR5n2ti/RP+xsE9wB84oHhOiKZ11m4ETWxT/GNdh9Z3Z2zo3t+H03MAZBMFAKuEpXQDWn - vC2u7vlCvzvxCb/v+tY9yu3851ejJV9ye+8qM5c+dqMncNiHptZb4RRJH+DlZ9/nJ0Hb80+vAH+icwEn - Ef+x03Ae/BlO/e5xy7dSvn9DMbifdElLyVmPYzDnus4puN7H5+gi1Fy8TB4PRBqQrqHyQ1cqnOI2bhxz - vRNXucWFrzG4sMAICKqCXJ/r6tvHIiKKp2+KIp2wyEFoyUk8XZnWTsc6ghp4ID/PEST7kxOkb6B0RrE7 - YeI7ILH+vzgezvSSjGB9ezVEtUbZcoLStkfvl76zBx/IO4U/OHl2+NEMz/e72alZN3bySw38MR1dpaNV - crZSzkR0UQAu3C1/fBLCjh7/DLf92e9kFm/CVluR27ur6Ban+JmVt+Wvmwqt/jy2peObQaIDPFH6uYaU - foA/5tkLQViAnzH5xRvyburj++HEFdfbG7vuAed6WSrQ1+9cGcBXv7Dk9l1Sc5W7C4RHovH1Rjr30yDm - R/UfwqFuc919Xa6/b8QVi5vpzQy5cl+DPJlApKPLzPBNfEKcRMffz1yO+eAdAnCIJhD6/9lCcm62i16u - jq5swsclAdDeWpdQJUxhWoDXc+pnL+xly2UOhZXRbMIoV3TZwVNZhXucW5zZ78rDz3AD685EhKffq6G5 - NJw51txiRgG0HFHTjRkTgwg03bqTftZtfPyLWKA06+anAezuLCMHaUTLV8AJBAAnhIS+DYVB0cfMPmca - fx0JrjAYdAiZri5Xn2Dbrn+cRDxnRUAPBEnvFE3JkS6f4XpZQFiaqLupS5bczFdJuoS4XkDQTJNSlCM1 - katAAO5wpfz3XVe3CMG9bmhsrxvdPIkE4JWBIS2jiy7eHJ479pHVQIcAHKKeQv8fMfOsbAGAqKHTyAPn - N7eeJcKbzU3G3N5pj8FbnDA1iiMjKUH/me5RCACKP7hyrTHgBjdfCKilhVfaaQIKj7v9WeCXBjybpfug - LorkY48Ed9xjX+q61m1xteWqm2ZbrWUkdlMCtgooyYKPIv928Efi/quUfiorAM73uZkv0AdnGBKlKPWw - Ui4CeIOXBAu6TK4PvUPtS0tu/99WXW0f0kAf1MHYdAh8pDYjDtG0KxXvcH0Dt7qB0bvYPGSeHouoTpth - WJPq2SCfnZ3DRNsq5vDODgE4eP2o1SffeMdIL33n0zTKBPA0Bc9zOxEDDX0JAykODMxr0jI/gaLNvw3P - FllcO9uzkV1xxtgSe8bly6fTX++Ge7P2XXFT0LcD3/xS8O+6806n1XM3XH+95aIugaSArt7Nbuz0Z6Gs - W2JUIOe7ASgvvcEmvtg3E5mxmWDAZB8b8jOln/QDqeGzM+Wyq9zJJh03zblSH+m30gmBVtuiKxk09j3D - HDN+N9LAx5bc7H9SiYxeZLqljKDulG0ojlEh1af8D3WlG5RmWGtgxyivzhNNoGgf8ofTbECl3jFHUAMd - AnCQSqIB0QrhZHF9NF9ONmk7bgCPrlmNlDYqG+MBmrZj/D3H9u+scbcauAVPA3q3iIOBmiW2Uc861OcF - hu7qEIATjZNLGhBHD5fPzyeoeFJKvv9973PnPfGJ7pde8AJ3/vnnu5czf36ZcXK9kxk6/kns81FglR36 - gHmNYuCpQhv4JZNzadqu5vjbZB8p/dTvDwUCWtrjAAAgAElEQVRXGZn0ky+7pf9adAUjOun3Eeo+DTBk - EZ/rhflX/w1p4GM1dAhIE2jxM2W+G8mFDQGN/ji6KDbVYBkiu8S1mF4agdQUBIppC6/SxVer6jdQ38R1 - 33IL44Pe3I+C3ueX/MQG4NfomEPVQFKPtuSKUb84k3FdcGGgTQlBgEkLL20J6V1ogcKcJHMRiDAaYEEF - 5HyRjXXQpOFucgJPlB+07bDIkSCMtwfln9IjDfX38/m8+8pXvuL+8A9f48ZYMbeFpbOaIfixj37UbWIV - 3Zve/GaLXR483uV7+lx1YpGZcxGTZ4zO8I60VSgDv2b60T9AX2DP7cxT5c7lGQmEiNwy4cpd9hFW9CO9 - qUuQySWudxgigG5g4f823OImRgvOzLvi1i5ogVZVIYloOzXRHoiUSVfKgA+24880UbFIXdFaZXPqAmGg - LuomMUvQPpaiEbw4NGkEIGg8jrSYx2y4DgE4yE/fUgBmoy30/xnpooXajr8rgYUfr+GWQ24YKZbnvWqN - 3l/Myc/px8sCEpRX+Fq7FeeP2I5Ls+vUr45RuDUAs8TcLEtddVagxGkt/JGYawSIdP7ln/6JNQB5AL/Z - bdl2vJvcv8/Nz825f7v8cve6173WVtTlCj0MlbFen+W2zToSgLowKoWKpuE9LeAREWiy0IeFPOaXltFb - 5F8susodgHS66nK9yn9VgCN7II66BQUIiHb6atxbd5UfNdxSie5PP1cfOgyWWNuGJqpEihbX+GYdoW79 - CRIgnrYsjAaYiMxwY34924YNsKEoow9RjuXBS1CaZlIobHsNQw/vmjMpifrqmMPXQIcAHKZ+wOYmbXID - R6I9qRWb24MAt4x1CwxR/tn8uFnTS8MY5nBbe5Rfq13KwZU2VB3FVWOef7bAEBfAV5ZZbcCBQ0RA0oAU - fzI+GR9XhKEt0VZpRFRARfqOGIpkCJYbdsvSXcte4D+Imt6+DQJSuQ1tPNzWNgNRcvfHWJ4QDsVT/x47 - RxcFyYpZf3jNQFvrMZMLeaew+hRZ+l5xfqQHDWk6Kf3g/EoCWuYqWpUpArIh64rb8650EiS1d5hpCn/I - 23c596d/qpSUYsccpgY6BOAwlcMqs2EuH4KmpNZkLUru1kOagJ7ToOajbgMgbveS/9pugDicxu813BfF - FVdZmqLfPuiyGS3EUXgauaa6EtcTBbmcu+iinzeRf/c9d7OGfp7FMjV3L2vmf/MlL3El1tPL1JcmXHOZ - JbuknbXNN315jJgxjTZydLAlqdjHALCUEFlk3kpB6ep5V79zzhVaE4n82/u8q5iqAwEfcPv+O14NgCsE - c4m5R2zswe5eJjpZXQn4Aj0EwsT+AoHo1UdMO45YeKTl2IqY8L1xvenq9zBy8qMoWkY5mT9lsTf75G9s - IrW97s1vjpIdO7JsEnB/SRbRjx3TIQAH+a13ng7eLoPp5F0/TNcascHOGjXPaRzDjdzBI3UKU+3IN9AT - SKqDQBAsiADCEr+kztx2MsoXmojxt3MG3jaXY4Ufx+a5nBo7GWUhBAnSQBbuucyimJ++8Kfd29/xDveO - t7/d7brzDhsG/F8vfrHtpecLFHGqzvWuvsiQGXvuFVguLClCoPPdE3BBl8AK1AJ+W8Epm7YCr8/Qddi7 - zHx8yqrX92UURt+lfFDYGfAFdg4YFfAN/CICgmUYSVGliAqI4yPA236kJfpc3TkX9bMZ6SAzjXrZpbjI - 3oPUgUXWfgSz+1xpYYp86uxBwgTm6yp9+3e++vKpT/72u/fv/9oHxy6+eCG54oqcu+CCIF+QUce010CH - ALTXxho3Cig2xKe9pQ3f2rbCpM/mTN0GbNx6FJ7MDmHtpU/HsGZx7EY/t0L/dYrhuqYrM812cuoGVr09 - 0RVzzKkniA7PTDibT2qIbMLmnIBY3QJp+1/5e7/nnn3RRe6HP/ghU2Y3uDPYPDNDBiyNZZw86yZYIKRD - SgqlhLQZTyeuL1iwhVJpLVSWtJAqs4wIQLHkqjeij1hkD4AhpAEV6HBGrwG1gZulwjaxkDMFDfxVbGnw - RRQM+ATmUQTW9h7V3qI9dHWkFBTwB0ZdZoRh/T60hwVe8j2JRCG+T5KVph/Gg5vQTdztsvfcjDKxFpV7 - WI9QqY0tffOT74xv/PqvLXzzM6+OnnjBl5NLL80mF18cyM3hvuCYe9chAIf5yRG54XtqoTQ4NW6Z1BmI - gvdceS0YKajBSZyQuOYOAfVe4ErFhKRRc42Fe9lqb4a5AKOunL3OTU0wk2XoFDT+y2j86ffS78/nWP6K - O0EpoW5BBiKwsLjotm3b5k444QRLvV6HaNDJzqNpm9z1VTd983/Qb+8G/HXX3Q+wVBDj+mkJ7ZtSt961 - Cs6DzUCk/3/9NNt263uQHiyXQ9wE/MD1xe0F/Cq2gB84P+J+KxHt6ku3IqMdxQX87hT4/SMuMzjmoj62 - G2eExCb8QyUSTUuuorOoMmrB5VgJmamzYrEm5aUnZLIyzDrsXT/YrM3de8bMJS/5972XvPJD9z75yX+4 - gbXNDOeqCg77GYf4up9Y7w4BOMxPK+5k7cWW09Ju1HTWNh97FnpkeGhzttx6I9DzHqvlragRgGzO7XHZ - hd1wu1PcwHCfm/3RZ91i4ZX05QuAn40vIABGBFgkJGlAegNJAyICS0to8mnWmgmoK8fIQB3t2q4r3+3q - CyzWyRU4c2/JdSEB+GEKQUDl5FIBZKzMoeA8a95/d7er7qL7fts8y3MFQAt58FuL66fAZ7++pILCEiJg - fX1xfn24jAgi32BnkPRjiwCUqZvuPkR9FvT1SNSnH8B3GMWqLrhkYT/bgbMyUfoMQI+IQ0KkYxVIuulC - JktfpBUKme/tivtLxXj+a+97RTKzZ/OtP//nF59EL6FDBHwthbs18fDQsdfUQBQxRtZuaGxpO1bbC/hp - DyHPIB203rccbZGCH8CIl6eZgn+ri5ECsj1b3NjAhHN7/o698ZpumataWXLVasVVUXzVdDFMWGemYJN1 - +X7LcRKTIhEgCBq3f/V1bvbW7wCMfjbVrLihUQgBoLMCq3BWQBWAK/0e/zItn20a2svUXw2q03VA8j6k - Efg1wUgcX6Bf0sV+hRzjpeeEroD19ZUAyr0M6wiySPXZ9dicM5IZYD+B4SEXDa8H/MwaYo6DgJ+Iy++7 - 1SW3X+2SXTe6ZP9uJgdBDGpMYeYjE6QJUuPiA1Z9U1pSVgizcQDVubkeX/vZnx+47h9fC6FM3BVXHO5r - 0sjHjtWRAA7zW8OdFwwhAoldAg0mxU0Auvf0d/kFOdOwBcDbuwFKQf4r3QA15iYL8G5HAcaMwN6TXdfI - dre++l23554PuOXRX2VzkBGAjngP59NefDEgUZwk32B0LAezZIotY/6Vpb3sB/AnbvL7nyPsEJr7ihvb - UGM3XcRry9Pn7SWBtoL6otvLhM1Gc0OsSPwqovVtaP9HtMBIpT6ICeAH5LG4PmuCDfQiBoj9LSWfNPsM - 5dkhQ8x5MlvKviJzIOD8rtxLPx/g833J4hTXjEvmsJchAkgeAroWJAno+iMn/ohPRUtKo0dEj4X8ZCMF - 2cfqfYYFAplGthsCM3/Fx16+uH/XJdHo1t0H+fKDfNyx4dUhAAf5ncNEoHoz2qfXAs9BjaGKN9YaFSJ4 - pKFb/v75gG4A732XgCZdmXONietcFjV4M7/BlUYfxcqWG9zUnre55d6fc43es9jYYxSODAGAQ9sVFwiP - lL044Sq3/4ObuuFjbumeWxhTH0H0r7mxdctuZD3zClrcn3JYmdKMjVrJAyOqheif7YaQ3MHaga/shnB4 - 0PkAa+4tsR/wLwv84vjYpuwjnroMqg5x/S4uJuywlyeA56I8NpxXoo+vYT0OB9E2v81lODxdmqTKOggB - X8hWIiKilj1hvQ/e8iMdebE1mc0bwJ2wVZlmD2rOghn2Dc11FZvZPXdvqN589dPx+xQniGTYO0zC0jFv - OgTgME0ALnaPjZnTBtWWhRHv8DgyLOFldnhQerj1aGGDteZ9eKdgMmrw8TzKQHctOwKxFDjLCsH+R7nh - 3F2uOvt/WNvPpqC5412lzF6BxSF2xUHCZavuZOlHSA8M903vcvUKxCMZRQ+w5EZGFty6TRW600KSQKRM - 2q+0QKFcADoqEL/S66Y/s891MQ9BMxEP2vcP4IfTe84vkR+urz6/9ffJx7g+FiJ/hm69Dhq2owggCOLU - NvjQWEZSSMV6ifYAWfssJhrtgBiJ1/tKJF2vkLFH+cphdhDD6BewYBudCt/LxCIWLnjionCUJcfV+NG1 - 5xDxU2501Cdh6Rzbtw4BOMzvX1vO/CjW/nc5mqwxIZEAGjD30IIMP3rAYW45FSQEUPr31Q0IERG144V7 - mBzDrjw9JyP1rnPN3DrA0+96K/sA543oCq6m769+sGbP0S1gTL3RYK1+vBGJu8YBG/PsrDtPv7/iSnBe - yx4sBIWml0JUpvQyZSAAY3QhYk3C1CcZjZhim/HBQ4j+xDOiIM2+tPwAX+CXDmAF/CTH0COrKOD6EIAe - ERfKoLF+gd8qi2+oMqoBWKXg13doeFBdd7tU4RTaYE5lRiJiMlhrCbH9GBq1sIJpijNpVyAG2jEYIqZI - 6hnE8xPrLY39+33F2MOxfesQgIP8/mEiUL2e3N6sJpPMhxnWCJZ0SGp8alLWHtNmtKo1KYAogDwtYGqn - +Ry6G5AGANjs7mkHbuQKGwHMeleLe5geP+BitsKKGVxHLWi2EQDeJBGAzbMteM+c6+tddN29dZfT9FlM - KEaa+kEsAY5+f/+Qm/4ix37tnHXdh+r3KzFAapp94/7ERfRn22I/xq/UAXmmjIJvEJt5+9Lwqxtgo4pw - YZVIOgUDvub7Q0i0vbetsKQcWgthFWfblqsCeWr/CKrH6tXe88KC+HA+E8qCZ0Q9JcwURKQgjNJUUESL - jllVA50KWVUd/mF83HDj4qn9d9erQ3exHwgr2327sraUtjcLjduYqB5ojyIMeq02a7c0rFntDbndrbAY - EQclZg2e/e8y9VsZ/78X7jXAoSAQgaQgnTyTfTQfgI058hWUfxwMkll2XcVFV+yqER6uZ1w2zT5wTiuQ - z2flDiQQtXNDg27u24yyfWXK9Q2JVR4ksLxIS5N5bGKPNPwS+yUJiDrqY03LDw1Ay68+vx0/KJFfwLdK - gdtrgQ8bniLk4BbwJWmQjuCpfoG4vQqo/Myop99meGnPuqWUwSwFUUT7eKWleqSeyE9dAOsp5IsodTum - vQY6BKC9NlbcCUQgc964W77p45lrelzyaA0hSQKQMSkgNESeQwNV+wtuc8gjGIGH+MHLGqRFoMErXUVM - X5rTgEt4Fuzko3mmBoNq+iKJRFoBXMtjIQfZrIbpmPkH8DUL0ExbWkrTHu1V+t48KY80/oODbuF7Wbfw - z5zMg0LeklCEtcbAT1ri9hruk+LPOL8CUhbKI+1+dgi7j2+CaprIH7g+y3a1bbgBH6LRhGgYtxcBSD9c - pTO4e4cVPHySPsKKxTt+CKsr6xZAMzQ70gxlVFRxfB1eYiMHpo2UIIAeYHDzXRauowOwatCtQwBaVbHa - EUYCqrPJlYiov0lj5jB6a1vW+NTS1A4NyIra5laDBh689P7mVPg0C+sGtNgWngq66n2atkX3sQT2CHHf - 2r4IibwVR8zXGLDdvB9eq4xPwt6FQiCks5x2wC1cn3dz/zDheiS2qzWkWFoVv03pZ1p+cX+6AP5oMHF6 - QM+knixT9qNugZ9EVBxJKibuw/Hp7zchGBL3da5h6OenkDXiaHmqItIyyCIF81Z9tohmSgCgeHB5f5mU - IU6vbO0jVTlKy6cHqXTlLTtussQ6OgCrBt30M3XMQWrA9AD4Ly1krqwvxzMok8RWPPOhTYU2Fmx5mfEt - sOVUo/VNuO196lz9wntaNyC8l00DXomfNmgVJGTcFtayXlO2wC2DrYJbnx/OP38d4P8s4NfkHJR0bRmt - pKryq98tUd+4PzZDfabww1tivoCfRbGeYb8AD36VBK08Cr4mE5kaSxztBdGo17NMYMqlB5tK/FeWAjYO - Dcppco/0AWw5pt2L1F3QUuFYowPpZSMFqbspqQKdiS5bX6ByYpS7/4HMwQ5pjWxSGlzKbjjlOvPZudMH - sYdj+9Zqt8d2NRzy61U/yW2fHv5K74bM0xmubqJgzmqzCmwaK42UyziTmhSXReCmTUBkxKE91/bv1G/1 - z23vLZyHtBJoVzYqbIjj3wG6VHoIfX3rHeAnvZiFV28Bh0kHcodL5B5tf3Zo2C38V87N//O05/zMwUlR - g6PNqIgA0vr5gF6z/KzfL42/vlXgR9mXZZgv0m5B0vKrbFAMA27a12822ZVY4La+Pq9VNiXAv6iqJ3L+ - mbv5W6WKe1s4z9NVpfo++Yp1aZ6P7RLEZIgMXSNNjbZZi3xvRlSLvcQkb9QW5jPVTY//bu1NX37SNqks - D7apoNI8Bo2aRMccogYufYGXkFis91mxK06iBVRcApRqTo1RrdFapLfVgPVoHBdb7dcMdnDq+UBOv/Z9 - K9oah8KRQ9svZ/SAgngunxZGFpeVD6AYPWJdQIb99We+nnHznwP84vyHA79E/5bSD7dN8lGi1IXiMpU3 - i3o0SjX9JrAzbNpcFtdPjOvXOMNPnD+GCEjTb+UQp9ZoApcIqOf44vpIA3B3z+XxNwkAGz+dQ+ifRXy9 - RNCUhKHwiic/kwRIW3WtyrYKZ8+jSs0VH/VTlx8fcZTy177WVnOEOcZNpzIO0wDC1uDLE5nPLc8lu6M8 - 88tgZO1cXUAU1gxsIS0anvnxbO2Qm7XF9L01zrawwRnsQBxacVZ1A1bSUjoHECDhU54qAGXTKcBihtrZ - 1+VH3OQ/cXjHlzlyTH32Q/X5lXHa7zexX8APYj/pZaXsY/9dKfwi+v/aqQfZiOPMGuwyxiYdTOyrV7Ks - WYDzs8+htjPTmgWT+QV+SU0S87nMNgDjZ2K/B77N95d/GibYPg5hRDgUPhCGEE7pq/yWCcumKECjNLzc - de5z/0m+7j/+QyE6Jq2BDgE4fFNIkAKyjxvfv2dpf/IZsRX2rWN/YPAl8VPgF9D0zKV2F+xWstYYW08E - UgRvxMmFCwVpgf6A8CG0Avmw3of806RWRdEvKn/Z5maYb7CPJceDbv8nmWZ7wwJL6TWUyPtVEXkORgRH - IJWizy49E4H0spwGlBHn17RebdApRR/j7errs3rZ9/WrcH0BX5p+KQHV2Qd2JpWbLW7Osy4mAZltHBy3 - ATm1iWddLIvjCZnSCDslW3omQYTw2FSo6RTS3wrx3+VP/6kvl7du/642B+HUUFLomFADaiIdc5gaCMpA - VqVeUltIFjNIAXQBEg1xqSsQwG9JpIBMLS+Sp2kb1riZHfJb9YDnmmcRB5mWd8uhhq43bRnKmT6K6ytS - xKKhHDvqLP6gzAy/WVecrLjuYX7ykLCSWGtSzu+0ik+KPy5T+Klf3Sexn742w4Ua87cFSRW4vkR+9ver - ISXUar6/b5N7UuCbuG9cn6xTLs+cZdwAPCUQmq9j4Dew4zYbIsd3qLge2N4tYuL9BfYQljKlcWXjK6kj - qrJ4qvvpL/4IUhEhO2ZtDXQIwNoaWfPMfICYK/PoV0/dyBZ7n1Mrg/MjBXgObIvPVIvgpMX9BUSamyzd - DG9qqHpOzSoMpi+CFKAgwd2KI65sCepty2F+QRJoaQElpg/0UNJhN/VvCWP8M46jRlwRLb2Ad0jDKwFP - gPe7+Sg8z3QVsoBeff6IzTsibcvN5iNJFeCjEK0zOlCrIvID/iZTejWZ0bhw2s+XBGCcPOXuKkOLswcO - rnx1qXge8ebWo7521aWHdkN4i6LIcvPH79OszMxkMtsv+HLvo87/onH/Cy6A/HRMew10CEB7bdyHe3E+ - +QBSQDXDVuFIAKYLkFgsABoIg006LbC2NVY1ZjOtl2rjgE3tNrzD1vMqE57b0tJ7JWNbaeO2fj/hMmUU - fWW4/o1lN/0pltPesMiRWmBYx2UIYIcyxDUxPwz3ifMrA5SETET0Y/zq74Nc6+sL/KwFENev0t+vA34T - +VVW5aMuA7Zx9VZfXs8atgOiuoKEQJxV/DlUqL6Pq4V+1TWSiK0Mtne6HfhB2hGkUa1ma6WxqYHnvP6P - qJua64z9H1hRadUe9EXH84AaUFNLbrpk6DMDx2UublZhdPUoaxppibVBxBUAwtVKQjDH0ICN4qrd0uKt - ceNtbjXu1C2Hb/g+nvXX5acRCB5a+FB6WurLu0yepby93a6+r+QWv0nHeleFnXzAbwkCI6Adzui1RP8g - 8ssWgMnIdu5hMY9NrEPRx9nl6Pukide4vs4wEMenIBAL47yByIh4iBvrOa0PI2zywyss7iGUPds34259 - e3Cntr3Qa0VIjdWD6k3DgFw6w9HqIddMKgszUenC33nF0C+/5YM33nhj4fTTT1+zuUtI5di2qb6OOZIa - oBtgTa+6GH+gvsjaNZMCGNhKhwStYSpEWwNtT9cgyM3s9MUqTp++CKK/BRGIMO1xzEO3NC+F1z54mS5m - 9X274OY/u+AK9y7bJrraUu+w4FfCQUyXcJxybUsewpLp1XCfnhD5bbkuXB/aUkcxCIP1/X0IgfXf9TEp - 2H3/XWK+5/L+2ZfFEwERCxne8x2mTDXiFtzYANqIXQpupi9oCoON89uYv8b9uTz4Fd7HZag2btSWo2j9 - af+aHdj6mVsuv7zYAb9V9kFvh2iuBw3b8aSNUQnJzR8f+sf+LdnnMgTV5MSdrB+jpv1LCpDY28b1VGni - 8Grwhlk1eF32IpUC7Nm7PVfz8DB3Kil4N/HU0BVenI8rq8M2WXc7/yV27t21zMm5SAJS0KkMhzPKAvRZ - OMptE34CAZCUAfHQ3vwKoGO4FK6BbiBwfU3ssfhWVMouJFuaWLKD1CECw7OvAV+g8C3k4Dm6vocrVIx9 - mz3LKw2jqPiZNJS6zQoSEfWCFJBAAKJa3FzOn/rkF9VKJ//7N758Y/Xiyy7TF3bMQWqgIwEcpFIO5RWk - gMXFzF/XloB+niaXgQcLlAGYaWO2Bq2EBH4DiU/VnAaItlzCezV6mfCcOluP4X1qZ9hRJ2kOutl/5diu - e5btNN7W3v+W0EFuSixwfQN++mysOP0OdSs0r15j+4j8bLtvSj7j+nB+G+JTl4FgQdlnhMSIH56A3ySZ - NvADYw9mAVYoFoe3epPNlXJ0RlkQ48meK9vuZn1BtnXpnS5NztJCqHRBVJbN0+mbcULQldls6bvVe++I - Af99kcKDVNKx44VQ1TFHWgMQADWm6OzfnfjazX839K+Fcvw8pp5qjgt3wECDFr7MAC4RAXijEQHDrN18 - GHOKAytE8CeyxcHfRq0sMV5CRFYZhWM/vYStduY/z6m9nNtX1vZdgeuuCpw+KAmBXOWUW1+iZ/PHLUmD - 8lteYu74a61+Q319afa5dHyXAZ1gimjp6BsIq0+woTpL1ydjniq+PspsuQkoN3kYd5dtbvLHtnKkfpry - rFm7Fp04Vlcqr+Kr4EorNQpDtKTJLkOZ4RO+NRGX98zuvkql6ZjD1ICqvGPuRw0EKaA2k3lffQm9N7oA - xE4bEdCQoJibNXLVrDVUJZ62VDVejFmp2/vIjzD4tXu33G3+5kdGmXK/W7yK9f+M7UvsPyT4FaGN44fD - Odr7+6aZZF6DltUqaINbjX7+Mgt4ltHwV9H017V2X10EEQ0raOq29Ikrrp+CX99ktEUAbuvba56+5u57 - Di+OzvbmdjUZpeA8g2LDFXQVGuxrwKKLiDMS1a9iopGGHB1rC9gUgR2TsKlk7YIcIQroBGNt+RN10f1h - CzRIxgknv/Jvql3PuIh5P+MqcMccogY6lXOIirkPb0PBLX87dGnflswL2NIKXQCLhLS1Fe00jAi0uC2J - tXMvpW2Ul1RsBEAewW229/d+eoeoK+KSEpVcH5uD7O1ztS9OMqXXoiqFA43AKQ4tYFIuQ7f8giEvO2VH - Nn7aj09AV19ffXw/mcd4LUXxgYy4Eda4PpEEfN4oId3s38Bp3JuyUWa7AL/KL7fWVGSYS5DVZCpF00X5 - NMigswN1jLlmIqq8Fp6uAN0t6ybYhp9QWa17sP0PlKYVgHRzSVIYyUSLkwtx7vzX/fbQz/3eh5BKCHEZ - wkZnE1Bq9ABD5XTM/a2BIAUszEb/uzbP+jh0ATAjrwugMapBquEK5aFxGoCUUQrA1LKsD+a2PnRbeAFM - fjrok8MDOLJL24DZpCRL44CbEhUoBX67cLdlpFfwVZsXVAN0Fbj8Ett76fLj+tprEK7fxtV9HpAyS1vp - pwkqMYzuAeBaZ6A+u7YmyxdjuDoTkUoN9imsm51jAxNNB64scsLRVNbNTeTdwkTOLc0yk5AFRAkJZHpY - uTjAvIZ+bR/O+QEl9i3MwfWpbB2CorysrslYblYbRk1WLPZu6I0y33rbByY/9it/W7l952aBX8eDWSE7 - t1U14H+5VV6dhyOpAa0RYLFQ86aPDv51/7bs7yJaMy8gyYqL2Tx3cTNdAGil36yUPccUdEQjjECk3FJv - TSJQg7aLUNa44ZjmAaC6u9iJd9jVLof7d/n+seIdYAykEA1xUl0CKf/qpzdxNxHn0e+Z3QToGss36UWA - J5xuVja5LKp54isCkLpJSzRA36E4JqWIu7dd4vIm+hNIEoWGEDV5qM6lLcEUTzt4i1Bki/7Y8LDEVxlb - GVQNVghJDMpbHxfyTcNYUiKS5MexCbnBPLOBpjOLC8XJ3HmvfNvfXDv7V29+85sRHKjsjmnVgP12raeO - 44hrIKwRmF+o/kV1Nt5jawRgmGqfQdQ1CYAaDpyqPXE1YzX+VmtsOdpDrbj9axo7g/tNNrUVpZH2/L5M - RPfYabOPVLNvfXyAt8we/kuc4FOBY1ofn+m8IgoG7rayGN4OkU34VkRvTjaGy9OPt6skbq8LMZ/8pUic - neG8womSm5kucoj7mHYAACAASURBVLApCOWgz0JvxtYmdK/Puq51OVfiANJcD0eZl+jLa2ITor+2JrcJ - PkzykZ+fAyAbCSDtFrQUL5TTRhgaUVTf18gk1b5m30hucPmf/+jdr7zg9BcK/B1JYHWLQVDrmDU1YM09 - iPlhazCFCaDnnfYMjCUFnPuqpXt3frT0jmJv8z0cdqFNrU0fh/Lai6WASUARppSw7Ha3ZQZHXbVfYAiL - vzGslOMqoSSD9n8RpZmkBlJSWgc14qrs1KOJPAK1retnwY5jW8zaDJwfSsDu4rBl5U0+B00keLa9xekV - nXBa+vFyS5wXETBunxI8SRQLi1nA7vcDUNl16leJ8miCkj/3k3wlmLfl7zm8/Py1krMy5putAnHrhX18 - WgOhIjQSQqFE+FgMnE0auXppoJxpTN2xlRgds6YGOgSApiSwC+jp+n9rSgL5mrpCl7Tiw/uMu9E/33Hd - 1AdLXUO/3L3ePR5xP4YLZbRaUOKVJGozOJTgAQLoGg+B1YCdtnEfSRF9MgjMXhPeeg7+bTZ5hfP3HPP1 - M9KeSwLQWcfdkCg28EgmSGCWpHhn3ZRAZNqSCU4RIX1L0OhnpcADjJpzIHHfA1/ESMpDQA/wF+Hy4vwc - auwKTEnWeZ+alsyeJMbFwbxSDP/ell/wt9crP4HqxIzer3h7t57Da80nIJ+M1j7Q94gryznOd3B9Jz3x - Govfua2qAX6eY9YY8AGyVvu1mtTlv+uKQ71jA2x3tT6fbY7AoXrgznn6r8iUbp69LXc356O7nzw+Ma+a - u+alLn/u37jq9za7PykNxV9ECjCmLcDYaJVSBrPqKxuwFUkm5CjuDMCs3cvPHOn71G3edsNDQJV/iI/z - AMN74/waldhNoVGyzcOJy+WYKcKI6TqXbxhRmz53bYF+OZJBGLkQMTBwKhulQ9mtbw9XldiNio7hOXU/ - AL/CUCnaj0+7/iyxD8DSUs7VIAI5gNjFxiECfqEL8GuXYKMixNEH2L8yWF16y5tvs8+zG2H0HDxatjyJ - y2Vx1F2AwPkDSHya8RLbge2bzsTrH/ud6YHjvqERASQMaUQ6Jq2BY5EArAK+AD88PHJGscudW+yNz873 - xKcUy7Xj8uVohJlmXfQ5EW5pZxrnrjPPvBItVhbd7hvfP/SNpdnc3577hn1XXjHucme/bupLN31s+AMD - xyWvEEoInhNwxBe1sEbz2G0MXhVPa15huCn45e1xoRDWtnkkaCoRmKdSY1puQbOPfBh5H9JAoibuzbsf - 3tnjFtDuF/iS/u6628CpQSMjdddFXzufz/khP5bKaMtur7AUMCkzCdv5mpqPz8dEMbPsWNAvCqeyaYRA - y4CXIC6LXDU2AdGinBI7A5c59rvI6sGcZvOpHkCp4rTdVsCffov2UVRd6+Zt3f3DKgJg3pRB5QL0WTg+ - uzV5AqMYUN76LGMcC9Vkcb7h+l78qncNbNmyrCXBvKbUHRNqwH6T8PCTbsPpM1zWfK4YH+3pK0QX9gw3 - XtS/MX56acgN5Msol9SQpJamwdoQMojwfWgaFq1QC1y0DVWjkrjqdDOe2R195O4fTb/mZ97lFr/+R/2D - Wx6TvbJrKHdas8ZWFw3msdDcFEcTb2xIjWdboKNSpKZdvA0/iIGMB3E323yEsOKguf5h19zT6+Irdrse - 5gB4pISUUps88luISL7f/3qvu2eq5PJwbBENjfXrnLzhvprbun6ZY8RQBOQhKCjlbByT9x4i2CI+xl6J - WKsahdCj9vaTFn8JUX9hMe+WWAqsmVBdbAzawwKiLsBvor4VXmmk5Qq2qIB9/0olGMA9yq2e/a9EsNQv - PCsJzQUQ6A34SBaeqGCRXHM5dtX9HJlWixv1+d257OOe96/rX/XpX3TXXuuic89FJuqY9hoQRTwWTIvr - w61LfbnhZ/ZuaL5scGvzaeWxbDFbYjaZ5p0mHAjuka8Gaq3U9rJLh/MEYOOQyL1so510sRU2EsPLcsXB - rVe9avr55719dvq7bx992fru+AuZQqYrhhXBo0zyFW8TRxUnVIu1hh3aP6HSDA/8LRSGS0EUKgaI2dFB - V2fdf7OOG4Jl4GiLqSgwa5dnHX+5zDz5SZ+R4qvvrqd9M0U3s5hz64eqbsvYMseJQQgYY0/Q1EVIBRaD - 70W2h+BxVqE4Pxy3wWjBwnzezc7D9Sso+JgwJPG+F+Brn8ES/X1JAVZYvlV5tgyJKl3P6SmHnu2Gp2zV - b+tZdaSYCgfYKbcWJ+WZ7Repjw9Ba3UflA5EuTYL+CdrcjcZAsw1122/Y+RX3/kHJNJ0t9++qihKuWP8 - z/QTXQ/tXP+b4yOP6V8Xv2bkpOZze9ZlS/wJ72pmarG0uJQXq0FZY4T7a2gMAmB9ZPnJncrfNFZaZ9So - LzTzlYXkz7a9YOpNqswb3jf822OnRe9jPkCTnWwzpBG197EtGmn5Bh9+BIqSlsRK4yFo4rNeiIqIdmSY - IJMf3eKWv8mRYDdxim8/NFzlaTc8RvS7C1uZaLMv467/do/bC+AFomCEBhVB4Opm+G7T6LLbMMKBotr0 - g76+zW0WxWMDD9WKJgUJ+NMznCUA16/ZGD79fMIPDaJbQBrR8J26DCqo0veG9Py/PRrASda6VCqO3lF+ - +VssVWnqL+nDlgAD+DzKS4n7GjUghK8rSVXw9KbOHUDkryPukw6bE85k630j+9e97h+eWz7p7CuTa67J - d7h/+nOssVZ+pzUvfgIe27h+78hwX+llQyfUXz5wXLQxX6Yz7DfX961V7BWjdmcNUg4avx1VDWM0vMtO - JQFrsIjKvr9sRCCqLdYnKkvJOSdezDndmJs+PvKXQ8dHr2rWkgYEg2nCtGYjJDRfA4Aavs/PZyxCYCWQ - w4yeBXq7xAHlBmDZXsb3GqOu8i93uj5m2AkkIaqPmcZH457jmK7KTORuvaXL7Z7osklA4VyBEFaAU5Z9 - 3Q03Olg1PUFBowYYTQ3WeoA5wL+Igq8ugsgrdSO0rfgQSsUyW43lUCiiAA1Ft7gqkwFeVaRv1jPdEu+2 - l/pC/4IYRgCxTfGoSUF0ybJ0K6xbpmCqP9YCoIdEEiId6S3YjLS+aPsS0oOhx1WfzCabT7p97Hf/7tdL - J5x1pbv11kJ08snIQx1zsBrQ7/6TaMJ3Jde8dfTJA5sabxs9NXlKcUiiPmNY1t4FJ29oUi2HGqkQr4ar - mWqe+6vvH9yeENhsP0sJWsL0dQ6izE7cGb93x29O/b6UgvtvdMk5zx35VP/m6Jfry8jPscuJWyk9ERBL - zyiL2r84WiiOQcLwHJRtgQAIK3YYBrNr8iNbXPX7dRdde4/rHjqIFKAvEsawjECQ797Jotu1p8vNIvqb - P+lZrmnWdroOKCwgGOWl+lQd8I0ihDKoCSy8Dicd6G66wQEm+8CZc0VGFNQVEfcnDv8GdMvfAJ/6pfVq - /oSxVO1n4JtF2Ojb57SgJwW98rT6R7x31F2rzrXpoAg0Zw0K/HJSJrYBm8jmznr6VSOv+OhvFEc33wb4 - 8x3wqxYPbfhJf7KMRP6vfc0m6mTefeHob2w4vfbhsR2Z0/N9TJyXOrolTK/5bjVaNUnZasQCvG9n3m3c - G44jkRPOU2cLbCkCBWpiRKwHYIVu/KgXnlP+3JPesLzvsp3OveDk/Fe6enOndg26HTTkBqoDMG1whpu3 - Ad2gQMZmGyxScPgyBlIVbGOViCP5LSOucg9EYJ7uABxTZV9lSMriGKGCw/c03PAAc/Hh7jW28tIlLUUw - qh51ExRcKwJNAiJNKzHvFLLEjL8hRhJ6IQAiLFm4vk7kURhxd4FUB3boZCBtlIIy1B/koR2AtTcg720l - YlrPKrPiioCIkCiTmLkJDbYzrM9TaYvEZ5hSx4xJBIs4kkm7EzWX64CfDHUoQXMx2+DMj/KzX/mh3he/ - 72XlwZE9bufObLR9O79UxxyuBn6iCIDAzxX/+2vWdT92uPSmTWfX/7x/W36ALbO0akZNWG34AKCIY5mh - gbGjBJe2uaIfLO6lhiswQAAM/AiTcHRXs8Mv1Kjpl2LomjeZsloqdcVd77l0+V+uQAp42lurSy88KfPl - Ym9urGsoegzgAPXKjXKoKL40Zqm/C8kxPyulvUsDpODTk78IR4EyDAfmNo1yhPEse3dC36R8O5hJvaW9 - F2cfZARgZKAGmHXgKEnhH8CucomRk6XZGhApsOlGF/Szn4U8/WVPQJSNSizJxTb61OGfAFf98Qaa+GYF - IgCBlJ8AHUR2syXCixikXF0ivREL6tXiQTRs2S9UMyPlow5FVeUB/IY/dYifSZJcnYVDM1l33PabRn7r - /a8YfNbL31vYvbvuvv/9OHrc44w0q5wdc+gaOESLOXSEh+ubAP6rxvuG+kfy/3vDWc3/1TWcg9+Kxhm6 - DD0G9gD4wDJ5Nq6f08yVjajP++HpdKBpgPX9t7nm7F7mycMtU84v8Nc4+koEQXPdiwx7dfWzFLWciRpL - tSrDiU8ZOX/yOyrTht0ue/rASGndGZk/GDwufpPSABQggs210+6AxNwVfYAKs1LL7UTB9JUCJ5ftosO0 - 4PzIJle/g116vvwjhgWlhCNuW/yVlFZcem1pIIVoo48l1v3bKkCG9irMmtPOP+qP5xD11dfPQwBECEx3 - oMiqTpVBTiUkm8vXLcBWGF1mWo7g4ePrSWlIEjIbN3kZmaYLorzkr4SUXiqR8YLCcFpJsz4fxQNDsz0X - /taHei58xfu6hob2uLvvzrtLLqmi/JEQ0zFHUANWxUcQ7mEdJID/W28YWzdwXPMj689s/nyhP8/CHN/M - rTHSiqwp6ovb2qS04Mbe82x8P/Zk2N0wAWg/IDLhjKvaXde6+uTdAIXZPXC0AP46i2kEXC151Yw39uSk - P2xqvmx9ufn/Njxz+tmhXDZb8COu/oP3jz1veHv8YVr2COPVTfLOmtgcCIDPlrzbCkhpRASEa0OlgCg3 - N5sIk+ty+aHNrnIjw3VX3eW6j5AIKAnlouoISkHpAGoQg8oy+kokG0k3QfqRbX0DRZS7rRL11ErMUO3T - lXc7AbNXoizmzztLhmdLwLxXbm1+OBMUjPTzBfzZKO4bmi8/5Vf+b88zX/bh8oYTr6OvrxNJErdjB6rW - NIOVlDquw9RAWzUfJtTD+5W+IfnW+FDfwDr30Y2PcRfnevLItrB+2pZgb01Cbt/2rK36m2LKnxvc1HUf - B9vrsW5AXJlzzbkJ+qALBgadfFNHlNW5dzX6/zrrXkb77XdxYk5Xf4QkoCWtSUzflcFxd/HY+VOXXXop - y4Yvds2wfPi77x47a90pyd8Ve91ZiMoNyABEgFYr8EMIvAJSTb69sAIL36HCKlsuI22iBLDmXL7sciOb - 3fJ17FV+5V1MxkESkFJOSsYjNAqppINR9iIIUgLKVtmsm8CzFJjen9CpW8RBfr4+fSrqIvj/Iy9HyF+2 - hDdmYsbMQKTrPx8l/cMLXU/6pc/2/uxLPtK1aft3nbs2drdC8f7+7+sdrt9ec0fubv/NjzzWwyekyp98 - mPn4Tzp9+K82PSZ+RRHOD1posYIMf2rAobxyhGc1cPnLNn+Fpd+qRk+fVP1aif1sAM7kF7qkad+fuTeI - 8IQBEBJZ84y3dzEMhqKPRS8QgAI5MIWwNte4MdOdfeLok23NgJUzSATqpmzcXvirnnXRrzWqMUNXVk47 - 0drKF4AkOzVKoJ0IyI0HZQAkyM2ZQo/LD693lZuarvo1JAHO7dOkmftDBEJeLTttHanV8m7RJiunJw6q - ZyMM6s9LchDBSBWpvn6NfPk0rOJbyXlHyEvfI10g3QDOHORnWEBe2jBResLzPtd74f/8RNfG7deyLjNx - dzBG+J3v1KOLOzv9rKnJ+/W49re9X5EfBoFV/uR77xp+7ZZHN99RGka9Leyn3UcT7w3ganwGMs/NCGCE - gUZrjVNh5Bb4pfhT46UR69AP9fNFABjPt1lwehaBkFFDzQP6LnoPJSQArXqTToBZamwO0swu3Nt43ZZf - nH3nFSgELxiXqsu5lAgIAhwyMvLqoeOSd1CGHKvy2ILXsau9L4s6E1Y2RUod4cfyhAB/PMIEIY3BZ+kO - 5IbWu9renFv+0m5XXFpi2iPz8wnXSkvpHUWjfILEYESBerT6bI2q2O9DIAqhSx/F5fv+uCHCTR02ynBt - ZmOUKT/5JR/peeor3lsYWn87wI/d3XzQrbfWo84xX1TWgzeq/kekCdz02reOXLTxzManezYgu9ue2Ej8 - aoT6KmmoDeQA28beaV8pgAX0Foey8WmFxU/hJdbqvXEy2StcTY05GLi9gb6LabBFJtyIANh21mxPzXz1 - aHl/Y+6Oq7NPe9wf7/9+6AKkcSOeM9pR6Pq/Hrtw5IT4Q9mu5PjmMhoBLUBQl8DKzldY+YnFR/k+M3hJ - QUOJW25T/jEKkM0y429gBM17L7MFJ11y27Tropw2hZbw/12EINSRfoj238K+x38OZedD+JcepKEJPTqR - qA/F5sndSem0YlQ8eWCidOJnzo2ijXcmu3eX3Te+Ue1w/FbNPiSORyoBULmTb7+x//h1p2U/P3hCtINp - aIKK9uOwRu4bnRiKF0eNiyO+S5TXgZYmoipGuBQhxG3zM26m5/Sdb82eY+UQswtscFHS4AHHZ+VZ+ipV - gg7mAJAoIZPM7J31a276Xv6CC8b3sxWH8TsrmtyBCHx3fGTjyI7k4+UR9zP1CiSmyfRhzRcI5cBOUeT1 - GTwqJesGyJm6TRqA3WvPvGz3AFsHjrjqnbGrfHu/y04sMM2XsXam6yq86T1CSZTe0TQqn9LXTRf52rCf - dCqSsPLs/7ex7Epn9Lmu7UW6MtRAbTfq/if8Z2nrZU/rHOypyjs6Jnd0kv3vSbV3fe4P+jYlO5iEJ4E5 - u6KEUovzYr44uR1iaeP2XpHHXBITS4N0YMAPRRYouAwbdsOd2iGIAOS18FhSVKWLXyyYwGpGGgLX6Nua - PXfrbPOv8PrNFPABzokkAEkGjxmf2E034dmbtw29fWBL9Aca8k5qyCNaR9QGGhEjowDKyDQcHk8+P+7y - lzRD/6G5OMVoGRuHbhpyxV9EN3BzxS3+15TLTC3bsmBtzqFz9CRFpP/pR7dSO3KHypgac4YbFYWMYhye - LpGBXkeLafZBok0+jyu74gll13tyyRXWU4+5KnMHJl08z4hGdZITibv8livnswdaxxyVGnjEEYAV0X/o - CQOb4/+hPeHhmX5MXW3ZAIgeTshBjBa3r6HBrzGzrMYwnlazSYxvB3WrdbUc91HXJC2R28CvGrQGvxLH - xHcembabi7LZ5uhpjRff9JGhXae+dOotAF36AHUkLDcRAX3TfwDd8d+Yes3ODw/fNnp88jdJkQFvzrji - G2x6j8rrObdhvy2zNCG+VXDDgjYQWN2ZxpJrcGhIplh25dP6XdcpG5AIaq5284Kr3rvosgt1FgCiuGTE - QLv4atRUUsTa71nJLJTa+ygbq0frQuFH3aurpfrlJ2H1Xondh1i1iPojhp9n1udcbkPRlbYA+E0sahrk - V8qweo89yuLlZWYfavCGRDXHJ8PW5wufv1k5Xda2E5PPuXN/qGpgTdN9qJI9+un84ENDnx47NXohA3FN - eKWG0jz4xRnVMCmCGmIDDbt2vKmy/bQIgZR41mgV4CBG74zDH+SdvPROINF693wXXQC215Loj/7N/KQE - NEUggBKBkDabHOP6XCNz9/ej15z+8ql3i+trf0GAb+QqzSqCOGSlLLzuvaPPGj05/gT75o026RJQJq8c - bH2YktS18hH6IQUeK589pGW18mpVHeBm15Nsdy/l7wZc7MzLNOI6R4rF++kXLTKlmG2C2dvYCEiaxEo2 - AqYoA/9GXEUoIBjmFomCIkK02I6LSURs550fZXlgd4+LWLfUtT7P6MgCh5mQRxbxhrXKCUuMEw2p6EdS - 2pZh+j3oX5kxmKVDd3F5+/7WUCo5dsxDXAM000eOATA21ffaPxt+et+G+LlATso6zRalMQXgY6efZJxY - vNZEZ9qYNTKeQ4A1ny48adlr2Nxyzeu0kWLR+G2TDoHAEEGeQNnwSRrtbk2V1RqAQn823nx2810//PDg - 4Pbfmn6j9hcUIWjbhzAR+OV35u/tv/yatw0/df2O+NJSf+YMEQHy9EROZVdG+i77IGUot24YPfKd+lQZ - oxEa3hTOKgtw20Wwyn77XSWXOxXJYAfUq15maJOwGt5khmPMtF5HfSoxy0LDCIBcc/9ty24kBtuBBzv4 - Me/BFKCRBmLYYCRT7HdL+9gfoBdZINrDVOBZduipUx6EGhVSdRd+D8tE2ang9gEmxLC2bxrfjjmKNfBI - IwDGMXvGkpeUejIl5pKz3h5gpPP1hTyBPrR+U3QJmFSguKOJ7NLwgwop63T2ne8y+Bq2vfLx02DCASZN - Vm3VOHsL/D5PMTK74PpGABCFjUNaUui7iVfoyzU3Pabxx7d/avBRe+7I/PZ5b5y8R0SNDUk1IqBvM72A - ugnnvmHyh1eO9zxjyxmFy7qH3VNZEKOuc5bZub7MpOfBTSzcMno2Z3vx03c+dQWCGDi4LxzfLcGVmUiU - YSOQLKCN+jh4g5WFdFsgWkTk32YJBuJiaVkxeSWCq8JIBpCbTNVjYR2Aq3exOQdUucIsqfIM8/cnSY/n - FOhWGVZgYspP5U3fpUTAK0ALGWS2jjmaNWDN+Ghm8FClLaAoravfOnYeBOAiKfzF/TVEJ+6miTvWDUDp - J+4YAOkVgzRSYlsfV40acTjP/P12o/ZrCipxSmvobW95lpdPQw79+0BhlMHmEAgPyttsT1z0bA1cLV0M - s5uNah6V+YVtZze/9V9/OfzrykV6ANni/lhRkASeNL6wb/f17qKlieiKLNI73Leh2XF2qb+ucsCZrVxK - nmfRv2D0TcrbJCG59UjZbEaCCBQPnKYJd0b5trTomvPMfpydcs3p/a4xuc81p/a5BpeemzP4YcezKOkI - E89Nw9Hh6otzgJ7NBytcKB0jpkxq9yANoWYL7CTUWGAhD8TGj6/6AqSEw4iHyqOChsKqkGYgKk2pazvm - aNbAI4kAWBPuHWr8OmvQuwE+3J8mD+D9ElO1MYDu27WftKPmYw0MoAgZXGp7OaRejeEbGNLaVfurSSII - bVH+Apiu1G1B02cVxtox6fk5A74cIkZGkORvICOc9BOKbESAbSuKmebAtuym454Qf+LXTxn4yvfeOfos - wG/zAhQsdA1E9J4wPjV3zw3JcyACX80VpVRka1HkttAFUflahUy5dkqblJSnPfZNMNW0Lsw/uMP32nP6 - YOXGLZvL6on3foKFD+OHEXErh/Q7ra4tHL5i+KI0KF00z1mSixGeUMEtwHsJQmVKS+stPYpkdsxRrYFH - BAFIuX9y9VuGTu8ZiZ8n0Zo2x1Zbfjxfbcn27qORqbEaJ5dOIAWjGr5dIha488zZNxFX7dcARDsFpHZQ - Bs/imC3gp9VvLRFP+VuzD2nKVrdCedHeAwEQURDwg1bcDuawiEoQvk0/oziYi9c9Knv+tifUP//Y5w1c - 8b13jbyIzUq7g0SgswpEDEQE9l4dP29xwn2Nra/ZeJypQiICukyySW3K1ppcY9mkhfcltgcVwZgxjoBF - OeRvN76jDZse/PYthOBbjRhYIml4+YVnIxgKgwf/kX4AnZXGv34w60nITXqeaCicD9uyeW0G/yiROrVj - jmYN0IQeOaZ7MHohSrER5uczSRwtsTU0cW0aixR9GNqjTfYRw5eCyhqsGqnaIQBVe8uiuWeEzIxi4eXb - KYANW2H5t+ndJ20hLT2erd2m6SrrAHxOtPbEIyUWPCFyQK0CpWFUwCcHdHFwvFWzNJrJrBtMnjKwtfmU - +bvd9XQN3r1rbvKyi8adShnZasJ3TM9++/W9z9/0hNyXy4PRo22eAPNn9J2B81rZVGR5hn67EuDPIM6H - ioC1DPXHXAMLYbWgitCjbFkhfEhOlat3YhtKX88hvGwZe04DtipJYXmBbsUH527vFEEJKhpltDIrBG+R - ljjqE1mtY45mDTwSJAAWerHSlQU03cPxL0pBRZuBB2LRqEQDTLzEVlPSMJ+mlNrUWJ4FCm14YYd24i+j - LoDvdWNbi+R9Omddz+19ZoVXwkrbbgIXaSpdESAT9+Fo4v4iMLpMEpBNGX33wEsCPiwNnXKr/afpaU9t - 1i7S2gdy8fD27BlbHxt/4oztA9/8r3cP/w/OLSicy1LiS8dd4fF/MT+558bMC1lFOEk3QtOEbCdv0wlQ - LEkDQbsuQLUb6wIpS/sQ/0bfaR54mlvv9Ur4FacOYfXcKi8OVXpaBy1/noVf/RaRiRgoBAPILa6Po3i+ - KxHS10sZ7FAe0QJVM3uX+Hed+9GqgYc9AVDfWB/fVS7+FGvut1tbZU5J6F9rI+/QUAXKGuv05SFNfav9 - 4S/CIHCqYWUYqhIYg1E4EYhWU0yTDM8WTn52CSy4SdOAjB0UgWGdQchLtu8WiEDQqo1QpEQjJQKtMkq1 - J6aXj+LiYD4ePS135pZz47877QkDX//+O4cuvHjc1a5IRwcmbs28TqVlBqJNExIBcBqak4KQ7zMur2ow - h0K2G15Y2fHTC7llc7Nw9pDGMf+293oX4mJ70R4bY3GDg8qxrRf5RhXDXlpaaSgsY/ZKb+2l8IqgiLHb - YI+d21GrgYc9AUiHx1x5oPlc7TxL75ft9tUK1XZSMKbV04DD1xnLZnKgtTAPUtoRwUP/XA1LfWe1u9Bq - 9V46ANESM7JpvOJIbcFa7yxdXoT0W7oGcfwgAbCCUAShRQQ0VAkRsAVI2g4rfRYR8XmFMlnXgLMFM3Fp - SIQg+9jNj2l+4ZZLBj/T50a3qRA7fnvqkrl7k3/mzCIE+ISFcwCNqjECIGIgtwC0xti36CbTsvWd6bPZ - 6bM80/ptBQ9x5BGMEeAQNg1AhbIROvWuwii91F9WINjyExFJXyk5X2bvITeS2/Hy75ijVwMPAaaejQAA - IABJREFUawKA6K/ymfIP8f9n1LIBfWvdvBoQ7cQutacKG3VIijQCIPDiJ9FWHNpEczU+3ltD0zslbjff - LkNjVBryNmMPnhDIs+VPmiIARlwEfLu0xRagD5ckABEBLSeWLdCbjVsShxEBEQYRBKWnMitzLkHaJIJM - 3DVaSNafGV286Zzad3a+bxDuzw6/P4z+mB2KluxYcpYOqcuj7zJCoFqzZ/pKlpRi8M7SVfLyxLR9j6+r - lre9s48VSANQFV4VEC45rbztfgqEBIAyBNLEC+YVKDuLiC2j+C2zKjHe+bKZkraZbFewnTtXx2hF7Tge - dA3oF3rYmnA0d6kvenaxNzMEp4X7A2G1sdCIUlv9fnH/POJ9tgCLBwmhUQuo4vAGsPRrfTSPDrl9WAGQ - qHo+VK3wwodNpY+UCHh9AMRGEoBAnl62CjGA3mxPJBSmJS2kxEMEwYiCtO4QK1NysnegCEGGk0p7Nuf6 - Npzp3n7jR4b/6fI3Tf1g5m73aQEeoxOJNbbggS8/+zRu/j+lKQqqF960vrHlaP9uq+YQ1L555cHXQVoR - fCxvqAfVs9kiAFkmGzFXA5WrRbNcreL0qEqkJMq3dckhgy0dj7ozzeTU2Rv7hqQD4sVKwS1c5/ZQ1MDD - mQDouO6mDu/sHoqfrT3jJWqrkakdtRqOnDxXmTOmd4UyXWmOt2KfHTxoM2pPAlgaz9JQfJlg+yfvRTi1 - TMujzV9prQqudJVmevmhQN+/N2lAUoBALtDbhiKpnfoFImGEIBADIwS+vFbO8L2ytX8gfDVbzjU2Pyr+ - hV+6ZPCK2X25G5UHaOOjVW7+9YumV4v7y7/tW1rfln6Q8GYmfGCw0zj+Mf3+Ve/aUyUw7+w1BEyTgew5 - sf5Y+qItQQvITfUdajYUTB+KVIOkchx7qz1aIdha7eHcVlXER6R52FYqVN9a18i6sXNQ/p3D2lg1E1ph - aDRpfRNKGvwqu9lymi9j/EXADoDFRQlqAE2BFIiAYqacs/WjKTNLWpnwgHWgCURA6eqtbBGA1A5EwHcB - wm5CdD9Ykai59naxGlEEoV0yUBcgSAyBIFiXJSUI1s1QPnbEWJSrN7LNwS3Zpw5sTV6/vJSpNPlWGZXb - Ln7VFiEwKqCXFqR1a+8GhI+17/BJBS/7RntI/ZVAm9PSU7yWEaDxQB6jDOzuE9thLPZ6VRHa45jbewSp - gLCxZmy6avz8Vtodx0NeAw9bAhC+FOXfMwvdURcckVV/MJa0gYVWqManvr8m/xR7tBqNTflqIExgTcFp - eicRAXUD1NeGOZnmPM3EGiY3NUFT0vm2aMAO5TjAJkwazEsYxqWJT/p+KzFsyqRLS5AFeNuMhCXJWp34 - /9l7E3BNk+uu7/2Wu/a+TGs0mtGGtViybMuSkWwDjsB4wSwJBD9AzOYQjG2MH0NiAiHQBieBEIxBYIcl - JsQh4YkDPAGeBD8sEgQbEhy8YdmSxvZom5GmZ6a7p7vv/n1ffr9/Vb33vbd7RjOjmb635al736+qTp06 - VW/VOaf2enPHIEohNisXUQi1p5CNTA1fG3w/ROKNxJzn6bZujSebN8dz9gXex10Hq9534DyHQp15d1+o - Pu3dzH/L71Ab9LDecRBvAD5YHgQcEPyKGCs/KIAR2zX32HLZr8maCSOaGwx28tfDDCiPcz0sdXJ4afSb - Nn7i/INerFrnhBL15Z8XpwQYLB9Lk7X/f3CZz8yfW3yNB1YQJCSKvFYecQVA9nEyzbvsJ5w3Xz1zAqF3 - oo296GXCEH5DMECt0YKvULpJqBlbS/fDyIzSC2PiKSk0rGpLj2aqMO4+TpSNcROvRHbOwd7IGMUzppXP - IaJmg5JOfdvL7yYZ1bGtt39JgLQASTu9AOgUhZJ8cgfCeDH19B24vo9bBLPZRiUJnShLaZKPg9JavEmi - vqRvlNTaS2PzqsCKKWAxwGw4CRJDwL6xvD1WPOWCj90drkxaZhjgV0AaMVFTKQAO29I3J74Wez35IOil - 3d3F7yXGH//yL88wwLd72bxIJSB7HDuDpg+r3L986e0rZxefl6UyxS7MAnfJb3InZpt77J38W2V33/Qk - x1o3OWuecNFkMHH5V3AVJFroPe699+6+kgoWaB4B1lYBRAno4f+ORlotQNq6tSOohEGjrQr4JZzcSeC9 - BLht/b1WPJeUbHAPPxeVbPvcZBhzg+dpPuaJvYm9+XTXbV7neXqRZ+vGAtxywUluJ+YWfHsXO7y/doY+ - w0wP8+/rDP1muQF8gbwElu9R3b6WppVncBpeCep/b4tDAUwmHDJaeDs7vYCa9oEsSKt/cAwTUswZ9/mt - wG53/s3XfuLM697znm4P3jiWPNsXxD3mGLSDxyfnbfZ/7dTer1xeHa2U7j/tJQyikMkz8q5797du2VrO - u5Vzq7So3A+wtQWOLSUCIU/Bed6YqwmcFtjvznGFaGlxJYZxg6FMalfaOwGWiZmtqVXRBGn4oxIY9gTk - bGipGqKwzCvJ2prJ2O7RDylh4mJyaRge/eV+Px0lrPxCA4dy0XoyEil+k+OPvI4dSiBjU8/nq9jSjTAz - hFeS0tFo90lUYA8LcgH2sGBXWIC+UfFrFZAUK0wXzuwIHHEaEMdsvsLNQ3Tn6/6NPhd2JUgzltHzYtjQ - skycBbQXsHxqcuH6I7t/koDfbujL5sUrgSIZLx69F4NSZv+963/97OJXZWkrY3+YIkxSktBpy+/OvyUu - 51w5e7Ica+Ujkrt89NJNQQ4HJlxL5Xl3mUqFYOu+k+s5Ybx8ARdmhdm8EisfxkTB7NKapvssq/fScodX - I9B8xOAYCmaUT5YegWPbIzDt4ey/HxdpE4K+C5fk8E7lcU5AmC27ysyuf3oVEM4SIYmpaJzsdMIwl2s6 - 8W7CLUM17w1iZgMScCjvRhniNRI9LIDyE9gzBlQcC2O+Q5lyacMe9wI4D1Dj9EWqP0+rWzx9ITYYJNgd - efL+8df/u++58DvoAczfd5nNBS+bF6UEjp0CoILDH+98zbnP5b79L7QZhS2QIHlDbilGAWUGHKHgw5Vn - +Fz2Ot3/Wxs5B6BSEHe8tMzBn3Vayb2Mv2UuhWiX7rY248vwmyl6N960stUOwqYwphUqy9gt2dttBakJ - U5gZFG3yp8MsK5OZpFMB1KcNNfq9AAhvrxxwR+CFtYd4WVnTrzvjemznBfB7y+48wwBTHRhLMyVKPrFb - mG4NYtYcfaB59hma3i+8hsUa4PU4oggno9PlzToRSBelGcNEOGxbZoEb5lNnfSngpVPT7lVv3/tubkp6 - 83sul5uTGrmX7RdeAsdOAbTu/xJf1Vk60Z2h+z8PH4Qn9jnYVnqbsbSTYGsXmGhC4vY2tugRMGGIQNi9 - Xj5zCh700gvHowiAWIQ5m75HXK+1Cv8T4ASdtGyoXFZUudiyFiVgzE9jqhII41fUftkxCfc8TR7IS+0V - RCFUoY5gk79iq6R4EPTQQTiiSKBVZKMoF0kXWgVP3Jgq7Yr3ME8WgnHSmyqYBb25m2bAL14xVUngSdpN - adTQQr/itEimQ9lPHJ9Acz7nBJaTlDV8n2IlSr6TJ96/ZFhEiVhFFu5itnZpcuGBt+39rR/9w+fOuEeE - xuLY8W8tknvGOnYF6GWZlt7aqdmXjhm7o/z3Od3uL2G2fk6iOQewwuTf8tlTCP8mk2tcdoVi8BqryQoX - Ua5zsyxwWUgBV7gVKD/sueswoM6a40rYMo2Uk4Ey9DY4W/QU7Gmw3MZhGzkxWRP9zkY+JaRhhcmrR0WS - JrgKT4SmCncEXMFXyHsY+fB9eUcnFfsnsqA8lLxFIEnDfOaAlAKkpqimCCfh+onTjP7EPQCoeMKCUOye - Wu+oeAN/IzO0zXO32KLsWZWZr6GUB+wW+vzELumYoRSx+R++GF7e1vWSvfOvHX/RK97R/S1PR6IA5i8r - gWGJP3/3oEaef+SXIEaW//7ld1w8tXy6e0emmzgRInM3RjZNW2Y3/tCudKtM/o2XV7rdGzcRfhQGAuRJ - tKWT3vlF93ir9OXHnsmni+88lL2HHWbYs1swklnexLsAVAKC7EXcRAFsqgRkTJTAiCGDZ/tdauuffZkq - zEz6GZuD0pvqHiRFUFE0pXHD5zvmAa7Ax73f+vfhhilYhkM35VILp2WlwaMkWj5iQ7tlqjmw+2GAYcID - K86GHhFsnoqjV2fw48BZ7YD1MIaZTrdQ1swDtPs9Kk7ym8xKQ9xiRwm4uSlh2r4sYSz0MKG7d/FN3dd+ - 8RvP/YBzAS8rAcrlMzDHSgFQmeGJ1bOLt/CZrdfLmMyOK4GVGcqb2spvI9dLfJp79fypjPF3b20z8Zc7 - NhB0NpCiAPbYHzzPeADeQWg9JKQQOmG2xTLbjM6BslS4GJmml7C65vq13GYPY9Q9fXXUbTydeQiUADh+ - UGONrep8BmzKyGPK7UJ5TtDd5ZrwMROSmVwknZZtaenWmA8LvdzcIxB8X8/Aqjz0pFdQCYT/a8tv6x6w - wlIf38k9BE3BJC0JpiUd5KP1AJKYCRbT8tZsKNUMVesO+NbNITDEiKcZBGT4xd2es12XAxkG9JkseImR - F9JPxLxTKZPcHJQw4Ni5R0AlsDzee8Vbuq973RvP/m8/8u3dmkrAm5NM+mXz/ErgWCmANv7nzr93L6+x - +4+eI8xPD6AyFu/moZ5t1vGdHFvh/vnlMwi6k39bfs0XPFr/dP9XV4EzTpAZeaSgwsh9Ikj9Fmvwu6y3 - Z5wtDkbeXKGhWkOQWbWKUQlcf2Lc3XzKGXlACFE29NAj8ItAfoaba7q6qUMRPhK6fBYaXGPhs4Sfyzyz - NJdNPlKUwZF4l/0mJDg2UTM3MLbcrWdg3psMFOE3LP/5Mbo966mKpdUmaZReRMFNGUA/r1nftfUFpH3Y - 9CAdPX7F6gOfwW+UAY6Hm8YoAHtlsz2GAVlvNe4+YXJZjCAj31EJ+FJFCfDO08kqSuDzRv/BQ19y9h9y - e/Il5wReVgKtIJ+73Vjmucd4CTGpRKu+Wzk1/6X53JZcKkTGqLaz4y6PjVlfXj1D95+DP3u3bmU+QMHJ - +H8VKUbiZttMQDXpgstc6mNhAHIIPzTcVptlOBSCgqRRiNb44u8qTxMohw3Xr4y7px4bowy67uknR93N - JxkiPMXN2tgbV9mgc51hBfsLpBc6ZEGFsHqRScpL0LuP4QXKYeoHRMlHyVZRBKbjY++g7AeQAi/N+0QZ - xGth2OoKr+HkmS8R5wxEPkZiV4K8tuFCUGu5KVdZRanhoRE60pJkLQBh9WnOIORn0OoPAnUmrTj2sQMG - tqDSJuwK3Nt1InDQUDd87LTulc5zUQKgTjkhuXfxc0e/8nVvn77vR//0ubepBBwWEFZfRoIvm2crAQvr - uBgrbfG+y2fPrp1cvMPN+jBs3ftfsigvu+vNLrwHf1bOuvW3zP7bkodxsCa0/o7v3RKsCZ/JZAjZMl38 - bWb4pZNNRMDmtOZLfFu0KQGXA0/Qtdds0lNIdxy3k4Lu2GvCa3jmEeFpG7YII7ZfDZrQ21iG35cQeL8g - 5DVk+XowEZwdV1Fw1z/DEIYiuNNiQy+NP9KqwNac6yhpmjRPehDk2wnLqelQFi5jppfR4hqfp/QmdOBX - +CupEtboiVfczcZXgJIx3T4iAGHxZ5amAPpfM0jgAN9hwBLLgRu31gBTEHyXoCCIJ/HijXprlWACpTAI - BME5gegOCdco9ATGy5PZ+TfM37J8YvYvfurPX/gDb/v2J3/AYHsDtUEpERLr5Z/DJXBsFMDly50TgIuT - 08kbl07MX20rBreUCUAc8oPbeBVc3Strk27p1AmEiHXmHWeZwx0IiF3ylQiZS4C9VPvm8JE9AD6VR2tE - T4KZfltcBXNvmS4843dpy4PLCNaIz34vAY8ecRhSWUkc47sK4bBDO/HCySUdsKtCQLkopPYqTvCcRnGd - AsacwcpZsVAGrmigWNKDcNTCe7KD9jbTeggKug1pTj/yPtJPw0q+sr3XfJohy7CWXcu7KcYdQROxoOrV - 18KbXBaEEjAMb68aWB8Q7BIFWJLA5zBgggKw1zabraOs+EIRsKJVsFtigsyvxM2I70BYD9OfXCaJ0Ad3 - 4u1JJ181OvOak7P/6eHvP/dlj31o/kd++Z++fhV+ah9dyVRPifXy77AEjo0C2B//d1/Ml2s9/ef4n1Ph - ZLcoA4QOYWQCUIZYOcUyH4K+feU6Y0sFt3Ew4TTHmfxry2HS0GArKKsn6TUwYbjBtyzcS2DwlPF8O1gj - wIM6K3ThlxB0hx2OvyMcCJ/5cW7R+QH3+ZuvKIMoBIJRFvYaZthuKHK+YXSN4YmtNhOMfPOvo5fTrZ2e - d+t8IHMZe+k89gVGPC5RsuffzUqZ7VcWiGfascm/Xy7yPXIACHr5sKdNtP+yegpN27wm17gtREtOU3Cb - gAaUH3ELRm/V6NUivBfHRqYKIiGFbC/4ja5DjwVnod0UtMtXg5Y4sbnwWmaTCmEj4tCNc5BCyl2CKj/3 - O3Qc+ipdHXFbBK5D4X7E5XNLswfeOfvGE68YfdVP3Xfhv/w7N578XxwWmIp3S1Y33pdNK4FjowCy/s/3 - 8lZPLb7Ic+DsIs2QtTGzsqwwuUnHk38rp2m2YQz3/ssIfeMgL8lJcjf/TRbaC2szbdCdOOOuQJb5OEvg - YRwRvXRkxQlAWtSlUwi4PVXYB93AD08zCh+PLa/0Xa+3s+HypPlrysBeQiYZoaFC8B3c/uvUxC0mICef - YrWCXoeTjrx3t3bWeY15t4x7mZ7CDMUxQyGYh7T+KgIeFUDfCzBfSF7//sljfXHSi0mgsBRJ/SHEciul - FZhoFluze2BBLQ024c1IvqjjqhxbgAVvYgUhUIc9KoCdrRPoT+cCqLc2tgpN8XHUqAciS4HgBEWPNcKm - yzskPlkfLcaTVe5K+Jzxa07cN/uB3/XzZ7/h1//ZyX/9Rf/Zk/9U4bdHIClsqbxsKIEhWx9lgYze//5u - 4ZLO2dev/tHV0+NXOsvPKkBZAYhwKayc/EMgllcX3ekHz7P+P+12nnyCCT1P2qEMEGgFxbmB6epat32V - z1bZVMsklUvykjCMAuz42TBbcvfbC1tGGNeZtBN/l6XCT2eiZ2Ar5wBcZswQw7MJCnUelxYRaPK8Qndd - nBzaIZ+m7RBii3faZKnx5lM8j9MzeZI5Ct6V4Cw9yv1yrncYlMlC3ACcfwgOmWj3/UXoJN2kosqK71Pe - BoB0tfr44GN6v+5ACizwTxMeUofoSaLFVat4UGk2c9emx7fRuiqAZlqCydx++vsuECyEGh7CfaINbmr0 - Bli1na5NFifvG73+5IW9/+gbv2Ltl3/Du05e/9m9jQ8p/CoC+O1lQwlMj0MpUCEZ/4/P3/fg8ond15bz - 6/AoTFMeGYcWGSHVLK3CQGuM89kMsNizeSxwWy5v19m7ucmM+7kcD9574poscdtrGsVJugmTfyus69u7 - UDiXafmn+Dc+SZQqPLdFfhZAsgJtZDVKQSLOM5QhCr0OaNobzxZgsp4eA3a5SIR3RCHcYLhw85rxmedA - maiUnJNYWaftZH+TQ4iyJi5dEiK+8t6/pbBm8g4tBHydwKq1H6fh9yEVAO4B2gEPeg4tLQgmKfHBqVXS - Uw0aXaKlZbdrn2AOBG1YJ2mDlEi6JACx8h9ahUiBJ9/qDTVYy+vhxKIqUHjco7h+/3i8emH2FRde333F - 7/z5cz/06/6r7jve8V9c/UmVgASwB1qopPSL6fdYKIB+/L82fyvCfZ7PfMnXclnhB6ooJ+eUdVrO5VU+ - iUNzunv9GsLELaH5Rlapthk30W5evcmy2063dt/5bufajXTRn6lSHT+v2eVWCBG+ZSbqcn8/PYrw1zNF - fJ7wLO9BklFG6GoVUYmDVwWiYvBdk5eiHDKsYCixZS9lxme3Gf44VyH7OtdQeF8lM6RWaTcZgWaUkIkK - 08KtVwdvHLcww0Or2sGKlqlxGk3jYhJEhFJZBVZ+K7GGj62ynq7e6rY7Tm4yGTiaMAxw7HSbqZG0kuHk - NOXDt6BLRhKn4KkMk/fyRiW8KAj0MD27JT66ct+50SvPrX7Vqfs/8st+5vvOfdcnP3X1v3vP5XKo6Bfz - 3EA6VbeV/xEBaOm+wO4xPQCmi6nHMABebBsLGd4NJdM1pJadOnMG0+K07rBuhXib79DfevRT4K11KxfO - IdB3YrL9l2wML8RuarbyNmbaR3vxXPW9JGjaduvdfWhr7/6Dk8wDnLkw786/Ytbd9yqeB2fdhQdm3dmL - M8LLcqW9CN+3PIgfZVMe81/eIcKdtBRxcUmsSEp5F+MXV+/X0cMM7z377h7UHOIdiFjIBdRwpEtFjjgb - MJ3uUJ8nUGaH2p8BbstEFf0BweocZiwJ+W77aAddDO64QX208trZqVc/uPbqd83+m9e/5dz7/s2fuvgm - hf99l3/x7h04FgqASoiELp/s3mrL1pg7FSozI9R2la1zz+xPmEV2zDt3QwAwWzdn150cswXd25l0tx6/ - ESVgL2DpNNuFh+PNg9wRuo7FFZPwkK1HWpBDiC/QG8G7Y9zK3o13SbYINMjJCNmgDctyH3MIziM4TyFS - +D+CrmLE79Pgxq20Qqf6G03zk/iDPNXkKuSQ2EmrhjSbnPUwgxq9hIu/j1hjFtiCOpsubdDwsxIwcixz - KK0ee+DoiRWiiaEz3pZQDxhEbE7Z3EnHJybd9G2j6clTfKJ99Mte8+69H/6pP3fh6+0JXL6c4cCxkIeW - 67thH4cXtj4XHgBaWV+8JS0UHNrqXFvZdcysUQAmy24SIhJ95dJ5BQY8O+zAcfbdq8JufOKpbuOxK93q - hTOMOdmT23gllA7+tG53W3pr6bZ8HMR+4b5Gr9lSatlqtoDeHSGniCyDKvB9ay8esNLSI5Au+dkTEC4B - fuJWWHuCplhMD0rPAFgFNNxmK+wJaxGafYDOQYVQgqxazABfZTUZOwFo7/8ECu7TsGCL2+xC8Xn+GhkG - mX+UV2Fjx/RtEw4VzU4/tHz+NV82+4EP/fXz3/PlsA9K4BfdmYJPU/rPs5xfALqa12grp7oHlta6B3KP - llIN96VFI8zW2TV1TZbAvF4Kzrdr3/jCltJJvNJCuskHnc9M+s3HrnW3UALeCtSuBguhQz/pOTjO9vQw - yftB0S126blkZ0dDBaFA7AvFIQIv0Jv8+9NepNotndjAgpKfmgdhA2FHrvr89XFqS1/8pfwa3T67xus9 - lfYgOwYO4zR3H0dHe6TTB+gppsWJz4yy9XG6tMXEqwqASissULEPWWbbXkKyX9/hEMpz88rqVObeh9AF - r+N5LRuIWHI9v7z3qi8efdvr33T2//yR77rwKocE9UxBSey5Eb9nsY5cAbQJwOnq4s1LK6Nzzv/BIigA - yl9mGrR81ojj/d4YzhMGw3YcbTdZRSBsm70mt25Ou1tP7nWbT20w025zeWcjvkuJnhK0FzBl5l2l4L0A - mygCtwRre+P4C1EIzzgM8D0PmbwPsGbnHRV2YBF08mWY/vb+weXHvx5muCaIA1tnVQ4Gx+hv7tiH8iXZ - irCPdzDOgfAB/pCsOE4GLi3fzKTmvGNZsK3SDJOs7v20oCKs4fTu2wDD5AZuKdFKLD5KIT5OBX8+tO5j - 78B8Mlmbzi59/uRXv/6LZj/8k3/2wlfUeQGQ+9QGdD67nENxOtI34+q+N3myjoa9NOvWl8yi1RhejyZc - VDgg4fkBDkjhZyhRlsp4O5XAzevj7mnW2D3br1DfydjIONF4i0M93sw7ZcTg9l0n6EzfHoCC73VjKoXy - qDRoVJygfB49hF5Q+vepr0TGAqpKobxb6QmpCPPUOCmTVi6GAY+Sid3oVDiWpldClUZg/Y8I5YlVcfq8 - NllocZttfEzxVoVwIKwK6ADmKst4wdbg6R5lehL7cC+gxqlWSWHwG/ihwMzbDHDu6DSO3Tl6Ab7P5K3Y - Z6IE2FMyO/v6pdc89K7Z//WBv3z+297zi2Re4MgVQLsBaHpi8aas1/fMXGtQxhkwj7P8My/to9UYeWon - +IOWiHp1mWzVrbasmXNXSITTHX87tOCNoSv1WAq/pExmA5wbT6AoEPJlGidn5lUCMSCYnErE5Tm/R5i7 - CVQInFHYsYcJPPMJ4NwprUrpgNW/Xu8grkMeE4NRpWO/yNZ/2NVPjo1Tn1itR6HHIP24q/egOwhB2w8/ - ACNu8/f0pLkPPhDeJ1LCh78tTovpCcHlZe9wZD/HxJ2BhpgezyDZvvvfhgG93fDJj7AWqQdXIvp7Ywbt - BdADmD1Cmme6xdIbgaHtvXGIMwVr9y+NX/2uxfd8+K+f/26A7hpc8DQOEPRZZezmHKXJDkDHXA+9bfUP - rp0evyYtaXYAUiVViHKDj4eAWON3xn+FSzmWz53luC/LSdwElI+A0AKX7jF48hCPQu1uP1ebynp/2URz - pxcWvwm0e/8zDCBehB+CyUuNKGv59DwHXymgCptLlbmjr+Y9jC/f1QjhVb3xN9t19IozgFcnuG29fz9J - w0osXMUjhUq34Ce+wQ2lusUv6ZeAuOPkp9IYxulhOhCFHv8OcRpu0tCDKWnt24HxM1729uaTzANQRyMm - X6zAkoXU4X7GKxHSjrA7ZPBxPJiM6q7+RrwR0n+bscI4Cz7ifPaYAx+81GhxFXtOUbNFmxOGJy7Nv+wN - i5Uv/A/fsPJDv/O7tjfl0R/8LPxK8bHQbA++9fSZlbXuoczoKyyHnlbHjm/39sZ00bdzCnBygibeWT+F - LZUMEwyMm4Y8mrvORp/T57w92I004BTkASYKAjLuyXceYYeW/QZDAbfmqgxygEdFIr8diHXIA10FPj0E - eio5LMS8gkOHDBWwndAsh4UKpQMto/kaKI5hNtOSE9aXzdBpujWsp6fSGmSvuT/tMMA40vMZxC/gWnYt - 4BBOAdd0G05o1FJrsEqGbhY9LA4IORm4RC9ANMNi81P9EfZe+AscgcvcAAAgAElEQVROq4kohMYgSeu5 - /EjYyxseJjG6beOL7B1+NbC0h242mfIR1tn9bxv/htd/yeh9/++fPv/WweTgc0ngnsE5UgVA18qa4HDO - 5IHxandfur3uFQlj2aJSzWB47r20xEWANm/Ou63Hn2I/wFq59rsN7BuDNbtWgw3FhPmFshRokocQgJjO - KhOI6+wEVBnYG7jJgZ0b12ilEOIlegOGe5CoHxJU+ne0SKIJURF48s7wwCXKcmhIu8xJBM8u/6FsKayC - Gh3dB4YB9HpEiFAP4w7diV9o92DjAO9N9fSw3iGe5YUR1vCwzdMB08KbvY9e0XgXJVuOq1y3YNJlaekW - Q7QJx/1R5hR80otAg2fS1V0E3bgAhy0/oAMm2c3PAfDtHjKx+BQfMPkoQWR6dB4l8ErcKgE3WzEgWJnO - Lrxp6Qte/875v/ixP3/xa+vkIJzQCgXXPW5qVRzNW7QVgOWl6YPsAOR2D6tCDsIMGMkW2Mdil/G2t9no - 86mnuz26/8vnLwKXuUq0O/3aPR+xDDj1/EAQ78wgCra3ATUl4Fjemf+n6Q3cqhOIOdtfhxXy5nM2adbI - Py21+qr0ErCd00AxtF6B8Db0Ce3qt2eQplE6vGtafBGG7y3cZwg+FG6UoWlKpodVpbPvL66+fOt7CN0n - XVv9GmkfXpDit6wG5RVYiG4yZ7PLXAqnO3Mja8ULPj/KaVMI9t7iLvbB1t8Iz8OM6BpKfPYxEngCtzSZ - E5hewq2Ma3LXwOzUQ0vnX/fO3b/703/h/O92ctCjxQYG5R7/8UWO3HCR5mvzKWhvALBWhxyE2663h2Hc - A2CYh4I2mKm/8ZFPqqm7lfMXgO/vCTjwQlYTjDbhmjDPD2RH4LNUnR8ROsFlHSe97BM+kEe9hOQG6T1N - b8D7CG2AvDzEPImTBum58sMwbV+nPm6QKcJflNkBJVBfCNTbTGSohR9GOCTMLTgtsXEaoDkHfsOSt0q7 - WT1KczS7IpT8DKpw+L7iqECqQEeXeEBodZPhEgI5thdA4Rqecb7o4hOvF/4Svi/8NWGt7N4U+dMZM01F - T85gM+G09xES8p54DO3QfMqFjmU4IIRx42i+dml5+tC759//M3/17B+3J2DA5cutL6Pv3jSU5tGbpdXF - 62x9qZbCTv4WVzJXBI5LM1Ta1K9Mtr01YbZ+r3v6kUcZP06z3be9ySBqAQGYsn3YrwxHyhriM9gK9Qku - DTnFRR1eEmr6jt3dC/A0J/UcFrgcKDw9ApSB23WdjpBfY5r9DGncCRyBM/OtlcV9WxdcWOCVgvgxNcHm - b3YNbcOEHoyjd4NTBHcAGwTeloeKfzhO89+WnUbLuqv5ST3i9uo2PnaeHt4eR4VHHnWkXC3ICLnuXvgh - 0BRCCtp3rs9zFn6iJHHWh7PPmonAxS2GAvQEclWZwSvdfIIy8pBZDDXN7a1eOPLQO8ff+fD/ePav8em6 - KQrgnt85aPEemUGT2rH1zrxfkoq1uwuHyCQ9o9TcKWjrtMw5CQfM1nJzAyVwZdbd+NiVbPKZ0MJna2kv - hTUy1OwBGHaYbsM4bDsPcIL5gDNc0uH9gOkNgOTcgMOB69wSnL0FLC+6cmHPwTz6mMcyb1FERxY9cLZg - kIkmNMUOZnn/hqPN07ySglh+W9xheNArfh+ndxBt6A4VQE3hVL8K6ABa9eynR/olCwUv4RWm4BK4T1N4 - pSe3NY4zfq2nBbe/LK3wKfEtJgKXTrIZlLmAJvi2DGra+qSDqNsMSKNlJHYAAp+b2bsKWRSAPYHZ0/QE - HiMekzS+FWm4SWmxIE+FtisE4+mJpb0Hvmj8e77mV5/9x//6j156xb0+OQjbHpmxthbvu8xW/Veu/cHV - U+MHcgkIp3tdgsue/AEXyisu5RnJZUEn0ByjOxzIsp1T7Rj3EvgFGg/HxMhJ9KfXX3GBVnqp27ryFEjP - jVFEU7Dt6re0ZWwFwR5BW570hmGPK9ttN86YPMi3jXebW+Y3ZXGShXiqG7hXhLewzHWJV+MYscVpOInu - Dyaw4uxpFJgRa3jFTSb46ePU8OBVWs0dki28hVVbci0vBR+aRjDPNXA/3HophBy2pYsfr4h4l5cYanGR - C1v1R9wg3I2o3L4QSry+299nrsQtypVEn5cxLmnwjJYeoEVhCLDYCPMt0vLbGlmnU3YuuvzMxOA4y4Su - EczWL3avW17b+8qve+upf/pVf2njiXt1mbD1cZ5X0b2YyCe6+85OV2f3p9ubge8h6spxrWdb5XVaY8fL - N5BCx+Mqgi16czucAFzZqSfm5IV0CaXFtCIMN3Yav84yV3IGfnoDssJvL8DhwPYW6dL9dwjQrv7yNiHk - 3ymjrCC4lDjl4L/xihIoPYGmz9z+rlKJkJCDCIQ2cxxFYMA0kzWjxk4b2ggQFKdp4i4erQGeASJVGkGD - oXMvgR4N4YB6FBWb6R+KVlEHtFO+Ja6xk7dgAVP4q7tZSaPGMTD+vGh1K4h8Q3C6MqNcV7kejZZ3BxhC - FwNuL/w98epIPUv8hRgYanadLUCnOCP0S1gR/FkydKsb07LM3ZyU7gr8xirFfJs5pHwDghlb7qNBCexd - eOPo85eW9/7Zj/23537L27/j6g9fJoSnZvqF5Ofux3mhJfcZ5/Ty5cInLM9dYifo2XQv5SWNHPgMxk98 - rZ9ifE7X3Gu3vIrb4YBXhbnl9wZf8nHXn0JZWmtekSt2R0hjDgTZqrwAI7/avT/BnoIz7Ck4c56JQu4V - XGOY4G5DW2qHAq73O1dw00lD8nKNocI1rvjyeZrnFnMILitKz7z7KPixgUUuWhYth1YW2M1Zsl+QUm4C - BoE6hccuyPFX5wHcBtvvsrcIll8LxdZNkgpvMTpqHiosEH58h/5FmptyjxD3rTo4cp9wnjkHhJbWd6g3 - uv8jVgTUkimkGi8FA37SlKhOM/WZsDDxbe13H8WGR5bfyAtSiewNGM82eH8mlmsZuES9c2O523pqiQNj - pMktNF5JfuaXTB988J2Lf/QLf/v8uy/DAvD1Z5Ih3+quGt7+aExbAmQ32EOTZU+EYCjsdAIsdHtg2jKU - YQOjsHir7mjMV385GrzJev0OLbPj83zwgz0ediVzMIjrw70zX1pjPhjqjcGuPxcuHRB9jk750K3rtvJe - 3lHW9BFq1/cZFphO8m3efaqx5bU3kNaf/QQRkhb4LLYkDr//HWEAn5Fmmtz9zLRyVZrTIxgQjHPgN2uJ - aT0kgfgCzPCE91JvS6e07DXDZtqHXpF4cTcbOhnjV1Gx52SFj+n6j/kk9O42NwevrZfvOhik6V+uAmJV - AgXjM/pdbH+oG629AxqfQzfvw6E16TiwNPJbBvtzR7PNSb4oNV5mD8M6B4lWx7trZ5dOLi3Nv5VI/7rx - 9WeUmbsY+cgUQHvH5dX5Q97Gi+BzuB81TPc+22pFSHMDwzUmaJG0YTgnjE/4IVC6ZnweIB/8sHu+x5h8 - 8+aCocGYa7d5mNCVppOEE8aau5wlyHi08vKQ7HN2kycbszErE/YMNGWPgY54D/7Ud+j5OPhVAA9iQud2 - eBEzCA9oxwndkK7w4EXCIWqAURrOndI8HN6iGSeEAUCoOFVcg7wBNL38iyySMJWCfmeYXLoVnsJqNoDm - B2TWo0Dm28wB7vGVpWVsegH5hjvKOgSwNNKK6R0N8BnYZJS0F1s/xXcf301++Nt+OGl5d8GI7aTzHUTF - zj3J2khtX+Vw2RVAe/Ox33lYveA1x5jfzPODcd0TP0euACYri1fZQnhCTL6VGfwJY1V3qfQ7V7hxFUCX - 4FybX2UeIF8PcmIOml4x5hBhtss3A5kEnHIxyO4NugghmtRM5UUxvcDcOavPmobvbvxmixx3iyVNywV7 - n3wB9nF8nRqYN6v+ht/jSXOAq1fTQC2NiD2R81628OBEULUVbu0+HDd1EVyEO+Em3ARdmH66Twu6fOl6 - G5d1eCfilK75nE+IsRpAX5xJVT77xueUFnTFS86wjN9eUOeLZngzhwLzp9EDP4ESeBfvCmzn50nBoSOK - 6QQnF2dLXlef7OT96PX5gRMWLvz027960bJzFwm9eH2o55np/hTgavegrYXM6RMukwPVtvo1zcYZHgjw - oEfmcn7AeYHs/edOvTMXufCBuZwF/c0dzg9Idu3iORhVjVMVzoB2I3vcbPN92Nwp2ym/w4jNPyCicjW+ - oNCp9LWGz35hF+FPKAUt80eYRZaDBnbftVfw7dpHAVRb4eeTynzBo1usXugWKzxL7L7jC6oLZ0zJzYLx - 95Tl3p1bU2TSU3pqlZrGfoYAvNjGkmBst/spjij8JDro7bQozAlURhxPZ1w3v81t07u5N1Kw0wUMX8Z+ - FXpvNvl3L3aO7ga9I+kB0FVG5ssUL633g3nRyol2o13Bi5cfGU23PLBv0jbhrXbPIAUjs+nGhfnsWcxg - os0nb9Lyb3ZrLAdufPKJbuPxa9Qh8wGk15bpGlNnXFwTO5jufg6eqyvv8SzIt79bQT4wDKhICm5/V1ql - GfpkMvmsiQ3xFHLDSrccRxBLZJ15jKegVkCSq2N6wVaCZZPyiUDX+MqmCqAqgbibcjgUlhUYBHrBF1MX - S669o5mlnW+0P013/wa0uOadLwgtre/yZSS+7zijp5BbWs1RfbmS9Ev0SxojlMDOI5QXtxavMCcwRmFt - /wx6wJ4JH3Lh2vgJczh+M2LzycVih1vnd64t5k/+AiebMB+4x04MHokCaLX3vm/uTtLLe2WV8sO8bXsQ - VPlkaOL3ByYtpmDIoLaC+sL4aRIBIOHbN3fYNfjJ7sJbX9udeeNrur2tnW7zGt8VpMlyqGDcKILYMLwM - LKGWhu5PZ8xOw6tZa95ni5p0QEh0IjRbWkOSjcZBmCmUkkpaBiqQmCb8ug1r4aZXVWeAwesRADFp6stH - ETbhNlxuMa7uCtdOWel3WFDDogxCQziBHsuk9Y8E+d30cc7gk0c2aNXxwsLNOGwGGY22ELJlpgBW6F6j - NLbpa7d6gNxLa3x3XnSHJUFfbuXzyA89ld0Poaw+iSKgB0AwY36/9jziC2czvu04YTHoDUT48be8pRTz - S5vHF4+61XYURjZx7HQavjgv18i36VbhUG6daAmS8EMmDAjMcN3xH0JuXvdzZdxKpd74xNXu5kc/SVfu - VHf+c1/PpSGs7Wb8yTwBabqxyAUCvjVajvDCd/lqkGf8B6f1Wpq32ZRm8jTIV5+3PqBl/JB9yJv8k6eW - BsGlPAAEZs2BVEvO4AhigeFOWLEV8GIEloAe1kAKmHgR4pqGadHip8sP0zdBd9Y+bmG2+Nitux9/egkQ - 01b43cDBbOmCSx8RFSIo/M4DMIs7Waf7z63NU5QCQwEJpxfg9xvZ7j0a2VMwgbttKNmdn0H50LOfIumr - b+ehR7D8Wt7lLPy6yrsvd8tnmACEg5fXZ7+XHI5qD8CSvCfMUSmAFA6Hcy6MlvgGL7yHodBw6C7+4hz4 - G1aQLeL2KHjV3Wxx3PvvvMB45EQT0017k+7qw49yiOjRbvXime7C538OdwSsRQnIq31c0nTiMJOHKAU3 - /ORhmS+n9pAeu9lGcP7CeMVWMPD0T8ljCS/07+Q2rw3evxNk+m65CL0ZFI4lJF57BjjBEo5JcBIwndLb - 0Wur2gs1ed53E2aZqgyGNnHEUUmMWLmJIqjj/Ah+FANIeX+EdwpyhJ8IE4SdVn9hy2+3vhFSEQSGYrC7 - jVD5sZfJEl1uGGO2RQ/B3oMZuavGAsLsfBAl8AHyAiOM72Nu4HOjCEarXxR7Mflc1pnX58xbfMVP/+Xz - f+Ly5W7+vstRoyX+Mf+926V6oDhWlsf3sZ5+IgrA8oZrI1iVx8Pfza2nGXMtM/qnbVztHl78ORvAMtSE - /QJ+mto+7A5HiZ/64Me7az/7CB/gPNFd+qI3dycusRPMcAgpyLEViEaXmKZur8ReQo7vYuf2IgKKMuDX - TT08bYOPKxN2F0urWPI3FLJeaZiQeW/5b+mWrBAxWSIc+rorbvKaMiCvg7ih2wS60loYN09JJ/mI8FZ6 - oVvoJMxGFzk1/25t3u8J4FbQVQI8WeePMiADEXy2zSL44iSziSsRFQCtZlrzmlmig8SD0Ksc7B2Ak7Km - X710gp2Bt9zERS/griuAljcqfefD9AYeRh8xzF/QLTTPUVrME0zZRrz8uaOl02cXr3n3/E/89Pdd/Mb3 - XO72UAKW4LE31sRRGGud+Zb5JVoS3TkGXHoCZTxbewWFGZJDmA5MkdP+6q4Mbasm7wUe3sK/pGK2i89U - 35TlJS6gNP584T6A5e7aRx7vnvzJD+bjIvd9wRu786+/n/0ExAPfuYCedtz6Bw90wqT8zBg78CkzHlJX - x5i/5A0eIY5PGkFlwEelUJ8RvZN9pVHhpqNw1fR6eoEVQTSBpFHTSV57txkwDwp8oVPmNkrcCHKFt3QU - 4v08EccG2rw2PG38pdXHNi9RAtDU7hUECdvqRxHgFm4m8uK29Ai6WmV/qYDMus/eRwXB2j+CNSID3hk4 - ZTKQITeKFgVgryG1b4ncTcN7wBPd7sMoApUAPRMPDEUZOO+3SX5PcGPMG7rpmbOLB9+x/X0f+L4L36QS - 8HzA3czpC0mLaj06wwagV8hMKFVESJHCZHCKO/8yUIWX0J4HigAYDkhGAw1WS7fd2cTpGpt+mEgywMtE - RmNmlkHe3Z2CM2HZZrW7eYVLKW9+sDv5wIXu9GsuMZY71V1/5FE2otwieZlS4sStaeuNcLW8KBh9GG/Q - PBU6xM97iBCc8n6NTN6Qn+AHKIR3qmUypJMXNbSlbf4ke/hRCG8L21cKoals4miKIrYCbbxKvxf2wKAp - 3IcfFQ+u+DMsSCbyAhIurxotgvA6BIhmaeUKrWZUCNEwRQksJhzK2btJGiwJcopz9+ZSt3KGVYEtZ+JT - Wi3mXbJrXvc+Al/CG9OHeGd7JWp888MzXkNvvW6xcn5v8dAX3/jeD/z355ff8vue+gsqgXZ/wF3K7PNK - 5kgVAC3uBbuXTMJThrI7f7qdcEvB1ncRVk0TpLR6wGCdilnERb73JODSuhtJZFJbdD9HvZdWTq7cY7/5 - XKabr3Kwh1aG48Q7165mifDcGx5geed6t/n4VTaj7EFbgSiJJ23c6WKbatwtY5U3zVBiYSlcfVy9wxcJ - msh556D5E5QaqabNzEOhVdM0TuiCph1sbeWowQbu5BPBniiMTHomLs7Swh9UCqER5QEtlLPO0pJXQQdQ - hhjEk5BtHHZoJiH9ghIRhwmBFOFnK3YE3XwcNsJU2E76+WzSC+A7gidPdFtPTplssxfApqC0wIfj3i0/ - 7zR7gjxwTmDySvLDMeK8J+NBewWjFV7vQYaWH5k/+I7N7/nZ7zt/483f9NT3OxywR3C3cvl80jkqBRA2 - Hy8vLoR79bWnOYPBj8xUYdrx2BqhMGRgFUYaovQhUAKhw73+fn46OOAxRjUBbvcLL25vs8TkoRMUxYzj - nh2Tgx0fFJ3tsEJwktbm7Olu+aFzXD56q9vd2MpdA9JN+qRZ8gHT1/wU5gdeBbz581IgFUwdqpP6DvtW - 4Fn3NwyTtIIYHz9FwFrcZg/pFUEFk8DcnGQs8xpkhkGr9TNcO6y3OzMPPK27Nt7oBvKnQt5v5Y1P2oQH - FuLCjOuP+Ss4zW2g4cVvZTCrr/CnC085Cyo/OgbGSBy9zbKgws4wYM/lQM4HMISYbdKjYyv3wtNWd4w/ - IPWSOsnnHEU0f4Q8ogCm3EalwkqeVNTrDAcuwUOPdfd//vb3fvivXfz5N/wnT7z/uPYEjlQBcDDmgsLB - CJpHm4cy7PfUy0UyTASnSKBsEu6SacW1BdLIdRmPF7ddx9kWDDRlGXCJnkBwbLD2OA/gdmHmArZgLGg4 - s7+zyzZPQhcogvneEyzrTLvVE7Q8bCXeg+ec8GuTfiVTJUnz0hg+tsnXtGLpiWLwTfVEAoK0j4ergo1T - 3nnfbvF6+qEZzP20FVKM8pshUcWJEoDgZJUeEZMR845NN5Zd8IgA0aIotKkBwoq/EDPNpCtcmjbmAWLj - zU8CaniABmiMbAQryacRSYgIB03oqCwYCvDx0I79AAs2CmX7NpOBU3p1i12/3XbUjakvKeNwt8Qu9wiM - WQfM9eLC6Ql0JynMM/O1i9dWzr1+92988Psu/LI3fdOTnyBAhGFN4z1acxQKAP6JRCiIlFw1NnsWTWWm - 0iICsMiGBn9QhNtiOa6Wr6gPhw7a2XeyBiNxxNRt585BaYznswTS8irfFFidMQSYMinoBSIuEzIFCOPZ - K5gx1b9M6zOFF1epTzOncooiAHfOuCW9jZLpmk0T4J/8aOqrABq8B0CplZ/aI9CvyftXOwBBBb/1LgIu - yQzKoZBLelXGdCcfSLqlPeHTSwsAI/jTHlEfXvGcC2jymXjCgQkWHiUcrVHS6l/C8OCaMz3VxGlmfKwA - tvYmfIDTcGOTSd8/Gkbhd84AhYz2na5tcxR3jQlBb3VygtAud5AT8+h+eDdnKbldeDHjfMnE7wzwrr7i - +AwLT9uzk69cvHZ3Y/ZX6QH8+joXYOhxyHyK7SgUQBL+6ctvXZ5MP3Sm8IScZrFUobpD8TSFEIaEo23l - RDPayJZf5gRQehB+3AFGWRkjwM5wE6YUaNVH//L6HpeIzLlYZJqThLMoALZ5ohBmMxXDhBOHKgsfWlF6 - DiwuhI5puU9AxVHSHOS/oiRzuDUR4GS+5CF5KUGFnnTE8x0CL8ohsPjJOKa8f5y9OyHKWf9u1R0YdFGS - I65Q98yyM/lje0SWofiOn3CUuAAqneRv4A5Oy4AJ+mjFHgJK7kuovxKRzSqOhaVSCNoQt7nNm0KEAlcZ - MEPszsAp+S+TgdzsbJfMG4OOwtjgWEkx2Hl/QTfS4Cxs0+zBqLwmp+G8nb3Tr57/mnf9xrPf0v3gtb+I - Ihgfp0nBI1MA3X33LY+mH2ITkIzfCrQv1la8RSD2y7kghJdk4FL6mcwCB7ZKK26tyOjeFeAeEr8C2zN4 - GF8FAjLRl9Y45MGus112nfk14R0ue/Bsv/nSdvPQDp8a954/lQEXmKJUcEM3tO02QydvwE/pFQhoPYQa - iFVMeZnircAaudFomLEFBq3oyJ7hDKzRUwx5LwDlP4Jd4MZD6PnO2R5bbd2j4J0EiW58kMRToSauzC1c - ua1IhY4eTIBYJXAASO6D0v/0EUWumtMCyn1vPVZ1DOOD2+YNmPRb7HkabzeXcbgDr0wG3mUF0AS/Cb/+ - Awb/Yge99CS8wK3C2SeA0p2vcqhx1p16cPFHfva9F//3N3/rE49evtzlU+QHoh+R5+gUwArbgDiq73un - KK1/HZUP5JMDRTzgj8D9kU/CsEWJKLQzlviMm80rfAeAswYq40IrwirDF+LpnUJGLWNvYO00+hoFsMV4 - c5tbfby5xy5/vubD1WMeMx5zz4C9PBWCnx1rj7cClyvAUAhuCDJ/+SkZ1xkvOYnCC7iEmd8Y7erWynuW - kNt+2zsYIXiNfm8XwfbdyHUUQLflBCBl46RoTaApwpLfmseS0foONWkTkXZS01ONZflshkpGFSduUfTP - ht/CxEdLpRdAeTEcG3NMeIzmmu+wtwPNu1A7t8J6tvRfrLD2nrcJfkmg5NxyIV8ogW6BEnCL8/jkeLTY - mq2eW9x/+qGZl4b8keN0achdVwCXL18e8TjZu0JrRDtaTNiYUmwTgBaozCbT9Oxm4VfNEBg/bTbanW7O - 86dnyAw/qjdryHNuBJJK5Wm4v7ib/4AAgLdyctatc92YV4xtc6GIHxT18Yoxx/3ZCrzN8U/3g5hDCGWV - C7ruN8iGGuzcClyFzRuEVrjByK3w5kVTfvcdtymB9tI9IrgV1oLiJ/2hP+8FoH8/GZcZ9ZFfOqX7nQlC - i0dy9oKMrZJoRKTXuw3HCNtPpcKGGSugg78SMQETq92tvPWzxSMfDhFijAd7mskFy7Fzrg5fYxhAL231 - PPMZrBC8pJOB8tpzEfr2Os1OOdFqLJgg1ORGIdq6Je4Yvjj/XT/7P1x875v/Y3sBl+kFXG4vW3CP4Peu - K4A/wUte5hnt0TxPsvArW0QuqH5CEORamFXWARU4gWGhVi8Zx8pbdF+zfEXALqMub+tdsHl/fPpUlEDH - pRK5A8A6lZS2VnUXAdADDHp28ZcR2HWWCBR8bxjyEtBdFIG9Am8hdh4q18fVzEorwlVyWH6BuSRnl7s9 - ptLzSu8AFjolD8nIICz+Az8Eml6DVUes5rZcwMgeAq5Oypl79zAzQ5ohdotrboiTsihRSkjRDvtpJOxZ - M9VTrASwzIRCLJuZF5V0qeVSCgN6cQ78xrWrxVwMW/DS4k/X+ILQ02wZZv9Gwuyemf8X07QWvjFZ8w/S - aPzZJz3Mgm4LU0XmKsHEeW7up+u2ZktnxvefOjv6TQDe+5a3vKXW1IDwETgt3aMx451l6tep4WKGhSiQ - UhaUwmaSz307cTc8UCJ0MpTj13S7Syss3t7mZrc8udRNT7NOe4N1WxsUKrUwupFLfBPPXAL+wALwB4Pg - Thnzr3AJ6XoOAlGnyNDc3oD12/hPWvKr5wCquw0DohQIa0OV0CV/7TX2HUS8IzwxDv0gTOY3keMoea/O - lCnu0mqT0WWurGFiao7mivCTH6OGRoszePkeZBJNEHQ/Z2PivjTs5fp/FAB+KiYKaf+lK8W+NPBbCPrN - BZWW8RvuHBPezmrG7q0lTpLSC+Dr0C8sfzXZoTUUdN956K94B/jPLPrwU6zWt2tZsgwo+9lTvEkYAJ1F - 7+Xc4tcQ6b0f+MAHEk0KR2mOTAHMl7gP2MEhxZCCtRRakTSAfsoxlj8tvOEmQGHA4ViTcnYsLtPs3WK3 - 1i4Mc4odW/PrDM2eLjjyFaZnfuspgBBLWGOqIkAiSxjlUhALjuiDKAFCVBTBMc2BXdq9CoC5QuoAEjgH - 4JXG0DL6fkSc1TMUUkADlGRmxCUc9Pc1hIYAACAASURBVIdQXHRd+LR6FKYMPkAcOIG3jA8Tf65uKfko - vM7AukmmsZl0G+1qxzoEc409RsHhiQCxX5w9AUt8EXr7KvszTrmsiWJvX/MpEV7Y70DYI85kZ788gJi9 - hhN3+Qyd9dW/Do2UJsE6ZDD5wbIsKxb4uFDk5OwLf/a93QNv/tbLj9LrY/U1C9jGOBLTauauJz6dLUgb - Sa0lXYqvZsNytdzwDuGBAWhhBja9q+1advmQKN31DT4hfuPJbnLpVV136tXd+MaHoFYvA21vS+VEiJIH - f3iqO5Z4tztK7B5evMPfEsRvw+nfpQK0Go8PIiZ0+MKDt2/gRnIQbT+dATBDnvgRoKVz2c1oD0BFWbRf - UUmDKMBbKgegz9NDDsP8tPzul89HOFEGIT186ZaWdnObVPM3WLpuyYMTf7kzEOUy40DX2CvGPpPJwCbU - hToplzTTYseH3ywHD3c0QbH6+yEE20OVRn6wLQI9lMMiS9A4xyy4MsExXZ3cv3xy5a1cK/powTTi0Zkj - UwB0h5iaLuWUeZ9WeJZeLc0m6NpxC6cyMl6OW7+F17eFlPmMGfoZtwKztn/lCrvI2AF3kmHA4rXdePPn - QDVCaqjEw3nAHPYfCHyBnkrzAGn5uub9manux4irZv2Z8WtIH40Ibq2dnmf3KrOW9AAi/2HOJP5pST0/ - hJYwbKXwe7ovs/nCHS8NTUsfuwpWCRXeHuO1RzAXRy/YGbjunoBJmQzcZTLw+e4JeAbBT/pmp2nn6CvS - DwPWXBmXV2k82HizZBnerErUfksmnKVXuo52ZvLRIeZj30boP056R/xzZAog7209W75Y5YneTAXUINwF - IZ/6slQNoGJawWu7JVij2/Cl5Vm3xdhzg896L33yY93qA3Qf1++j9LkXYPsjBQmyz2RuC3ohLeMBJrs9 - JbMa3r496Jkht2XszqgFjV9nKblxh3Oq3Wz7k8xb6Afu+yQDd47/wqCmKm27/m6E8eIPF3lq629PN2kO - E64VlwRbj8RwH4RdO2T5sTyh0fYEbF5hYrNNBt5xX0GIHvw5UCcl7T43vaMm3/wwVeE10jeKrb2vQnge - NnAlu8GrkeBT1lv4w++qkwrDXhFeRzTsLn3dwYwdne9oFQBlwj8FSlH1BQlAIMYCTjju2PjTW6AQY1sR - Pob7Q4T5nE073NK6srXXbXCM9MaTdHtHH+U24KdQAt5Cy63Ae6zTQrEmg1uvBF5E82noHUjbZA8w57Pk - 49PQPRiTwuF9F4zDZxs3KR5PRtr1eKmMb1Vbf5VAP/ZXAlqaxVFUvbAWoD10k/cYaQ4eJwOX2RPAXoC9 - La5558j3It+FbPg12tA6ULYlnZZS0JpHWzIkJ++ZnWZ7ZDW81uDhWZWDSBUvxCoNBL83TlC37DFLPFrm - ksFjYo5MAezNuKfLvlbqlgJCQ6odVZSa6E8KN+VrI1IL2WL1JKAAYWlYqlY21nyXybq1MZt69ti4w2Wg - m4wTrwDn1tkT57h0krDM+vfMluSO/ud5CfZzya6FQ59zegnGdU6Ed7c1SktkKb6YJpVIeq31R/hdwsO0 - Pl2kJBDTHqaP24o8FJZueFp2wypTJB69AG4Onq6vZxiwxKUvCy7lKJJbqPS/dxB8w1pqvUNAfRIWZgPk - xB4NimFmJWAEOYqAZSAnAXVrwotxkVezW98p5a0yCGGDwtlqx2NhjkwBcGkHi7vlWJff1lMb8I0FeAgm - ZanN8vJJ1UfgBRShV0un4FtlWDnyHgU9Y2//mEpbQQGc2Nnpbjy1ykaeSXedC0B2Od9/8twum3J6/jwW - lfDiZ8JSo1Dcjrp0EaXIwadbN7oVDwHBzy+NMU1bf2f+Pfev4FiDVFKUm5XVUm61K2jfra9dDV2WCxWy - SqNFNQa7sCaruxzX5nKXPeY4UDbeIzhIoMcusJJw+a1BzTMgb1olPXDIrofLMsEnTnoA5Kri+4HawocH - +zLxWcZ2tEAx+0W3GzHcrH3UxxnJQzFHpgD45PI2hUN/zoxQ8flrRdQXlNWdQq9ofaFaOV7FxTb/qgys - PFq8PW6T3Zh3q2dXuhNnbrE1eNxtXFvKZp6bT3IEGGVw4twOl4HOsq8/h2FqYXxWWWrI6UUY8RwroNcp - kxvd+kVKsRXti/2ytv5Z83fdH7f8HilSO/svIMDY+4Je4QlS6ppR+JUTK7jBtPHUq8M98r3Hac6lE7Qg - KPuEHWj19+n1JJpDuwabtwi+fp/asiu8/Zg/yoCg1tsM/4lrXOxWsAh/uvv2tJR8Aw0Pjng4Z9214jr6 - 37uuAL6zvvNiZ3Obrul2ysniiQaglABEi1ZGTUAtxBR0LU8LNN0yC1wes8HLuItdezd2qMc1hgKj7pQ3 - yIB76xpHfNnPv3mT7vDWMt8J2OvWz8/4FDW3ALCnf1+PH32lfOY5sBxRhkvsgWCz5c4NPoKyw4m6ZYc/ - hL3opjZ5/YYfirzOzN9Z0M1Dy0dzY9cK3lcWSKMVe9g4GehtQWsn2Bm4xD4n9gRwVdc+zSrZA8gdkwsT - VQGO8MMFZsPWvWUHnmmwdvozvYEARTO8adUi9PL0vikw0ECGKDE4QewS4LEwd10BeA7AN9+bTbf4ao8b - umHW/MKzCL/u6i+FVsL6Qq4F3yqojMdQ1PBJuWQTAb8+o2Wgd8AS4BJ3y506X1qHDZTAnlt7eW6ymcS9 - /mun2ftPb2CZz1Hlk3WD8VpJ+V77tfDUhoxzlu6nXLjz4KknKFeu2l5xnFSY+8V7q1Zh2q7rqgyQpvSV - C8OXtJq7pa+YD2BBUpysfnGUSFcCIpm4xW2GmB4QWmJ1Z48DQrvLdDq8J8AeQ8HrsZtDuz04Sne/wnrh - B447SVe7DQECVxfhKAqhKAaJStZmq5Vt8eNtRUO4JiNZAumhPlwgR/971xVAe+WP/8wHNy68av1GmMVW - 3DETxqHjUIP28k7BVQXa25kApFJyp6S2fE/8OfMAW0/5HTeubeYeuaUVjmPSG3ar7s2nygUgDiE8+ecJ - v42n2aLJkeC1UyoCj/rCiJRMPzywRu8lI7cu30/3/2y3d3Oj27rKhiiG5h5ffkmMFZbJBUXXed3BEJdK - KyJiIbaCHAp6g7cwhV5Uf3mPfmzfwg3EAB/Ru5usrCFQ3NtwipfzgBAKrsfUMXzwJBRYI59xvp507Qnt - FQBDTJVYUwQZFhiRdxRmHvTyZKJPYVcJlBDQglFARRFwHwscuDvb29tZ/2l3MH7ndzYk4x6NOQoFYMmM - fs17H97+6L934XErzDqTddrJvpRjyqYUaIrSn/qk0HHbK3AeQEVg98xeZ/biw4xbj+90J17NCThuwhlv - 3WK8P+pOX+SqaU7q3UAJKPzy1oI9/u3U3y0++bzEQaAVegM+yywnetzXCe1McB99fT0HLqEg2Pe/WH4N - xcUdB1efYLb8Wrd2X/lISuXP50Dn+aAUDi8V5GYd8hDzbIJOSxrpEvFQ5QYkTDpUUuwqXNR5MWUYsMQx - 7q3rnA047dZghwHEMaqmJ1sc8o2wZI8GQOktLTw2k3yJavTAwXXcX/Ej9LoFBIf4LUvAsr26gqIPDdNv - j7K4jT3a21x8+Mmda25L7S5f7nOq90iM/bW7bnhxi4SJufmjcVhitfufwrOnmgCxVA0WPOUeR6mU/col - TD6xUuAVZdSTd1vX+c78k3T9V09S7Jw5QkNMlufdSZTAuVeiHM7tRbhDPVrdU39MGF4fd9c+Oeme+Mik - u/IL2I9MumufmHCF+AiaDC/a0WDTbMa8Dp8Gv+s2mbAwHPtzEGq+s8tHUBlusuCy7DV1tZf14mbLF6fQ - rSCEdUQljJi8G3mTj5N4Lvb0D5d7xI3td7Y9WeWHNnL5f7X1g1P2+OsGpwy+cZtGrWxsvx0wXgYX8Jyt - wSMnIVUQPRoOymNfoPHaOcmMPnDoer2Yn/gu/FMUwcJxPw2D/OTTJ2/S0UekgdvsJEuArf/wrBKFI3yc - n5416AFwF+WtxY++8xu7DS8JBdOcHqk5ih5A1y5EoMf2sXQZFX5L0O6/j4VJsWhH4VvQFpOCyl+6/iII - VEtTsPK9LboTgVNu7pnRmm88usVV3yyFrfL9OWbBpWe4ewSmXPO1sj5hhWDKBSAc8aXSm8m5/xk3A9Gj - 3ESjWHFTbxiCvzwqbK/AnkJ6B8CE5ySgissnyozMVZKme3cMhWDrv/I5FNUKE2RPdVtXHuNd+ZCldxG8 - JPmwcnxXJQJhUgPzX34Ouw1oT8MhXkyDtzgAI10N3vAqupbpMQwYr6xz+tMDQm4KotKUWoPbj1mzxbcF - gWZpxQvPyDfxEyU8ZJqBFX94Lr2FROUHog4XGm0LtZWrtt5qh5/FS7dUus5Pjf+JoONijkQBtJefbY4+ - YqFbagqZY6l9u2EVu5Y7rUop4PCcQMuVCokKQXlIb4oQctaw27iy252+Tut3HgWwDWNwSai1Yzre8zel - R7DKBSAqgU3mAbz4w4+Bqv01kpcZ5vi9F6DbKIk7k66iakJfDiDh9yIQSrRcCoINzvI6Cofbo22cXlpD - /mT81dfWyb95d5Nt0HtbN7vTl9gSzbHmMGpe6sXOiURJO3U5bNiEB4ituz04dUfAdWsM06p28x+IU1CC - Fie47AmYrrLpi2FAx5XuPVnJ+JB8eIyfkE5zbp2W8IQFR8UgruXIf+KXXkCfp7yKjVA1NEgZ/0fqLd4B - Dw8aAXjak2qT2fb8satXFv/Y2B94K8g/2AgdnX2kCoA1+Q/Od9m4s0R3aMaI3sORFhyCE+1Z5NBiBWCt - UHFUkMHqYCf/rGBPvtmdU1Dd6j5BmcjwG9fpun9sqzvHnoBujVlxxsLhR+KppRVQ7wNcWt/p1s8xXr7B - 3MFNdg9yytRLQNIz7WubtDAyTLYvsuMwVT4IVwmpoaIceA97CafuI41T1H9iv1Q/pKvw8xXbxeqbKZkl - BOJad+sTj+SzZIyCMglo+b34phI1fbVz+simorsliN2cPZw8xxjWArWbuwYftkQXFlSFdgf+camXZV5X - Azx85GpAWnvACnckmzh2/XEr5EnSllyhDo54lqO2uOCkrltaFY7XXkF5Vz0YvdrylRWtLSx+HEyK0GhM - tq+N/v5bvvHKY3b/v+5yX1DGPDJzJAqgab+bW/Of29nsHl9bGV0qLT+F5k7AKAEVATVQW2MrRuVMcJFh - hwPUlAWdCiSOtgpeGit007e4gOHGJ7nM44HtbuUSp9N2WBXYZqLIhgJiqSzo2WKvsALgxN9JbvzxOrAd - 7gQstwChDLwFSJ4iL/vXgZNuOKVWNsn7Dk4Y5gJRLxLxViFuirY3AvJLWMm8tLvh1j8f+yyKa97d+OjD - 7P67FsXmhSZ515csB/Xd0vX2XTWH33fox52yEzaEJ+Idfw6it/igOo8w2UIJrPPxEDYFrfLtg0zoiVOT - URko7Popqqzza+MfCr9oyU7FseFRpyWOuVLwq5JPGMznIR9Zrwi/PCVPFjuotfVnnmH35mPzvyaZxv+6 - j9q02rrb+TBdi3v0iX9w/kfOPrT07tkWZ9V2xmPv2tu1BWYdf5fHrne0NLVFsWYMb8ttK+9JK4VXJRDh - U+PWLrgXeV6/ttxt8XnpM68cdee/8ESJ+/RVhqvlZpxSQUY2J+VJl07lAhPYTXRuwGP0PvJa5q0aoxjF - Fp88tG5/hgDtglAUjXl7yY2Ct/Z5KIAvRAFOuluffKy78uP/kkzvdGcf6LqzDzI0IS8vrWmFOEzFgmoG - d7xDWAt7FttoRon0ijeIX8NGnHic7V3kEhg+5nLmGorgKvVHZRmHomnx0/Ir3MBCKXQNt75REDBBwsCR - IRLc4wiDwTCCbKT2hR6nfOdWaxofbYeDacgmDCino8nWk4u/d+6XP/4bL18+PjcC+y5k+0jMIt2gH+SU - 6vXRv+kemr+bXGSW1EKLUGtT3rb6pQ5ksKLFBQiLTWW1ltyKzq5A6wblsLTMSgC3yN56ctStfmKnO/ka - PjC5fpLLQa6iYcDl7dOLiPRLsPqJbz78wIi7BEtqMESfaFD3f8Q3e5pmB7eAXrpfEnPWfPlV3WLtLeSP - K8xv3Oyu/9xPUrDbzD1MsuX5pZ9/8A1bOQ3eti+D3jEIfBZnJZWuu2il4HWUZBROYeJFoLkohGHA7nwJ - RUBPSHjt7hsuE6V1F9fHcExpWAqtdP+DC5zKDHnxeDKyqRVbolrhCDiMVxofvPBLWv/YxBNFfQEbS+Pm - x+d/EV8/Aa77OJii0o4wJ1tXFz88ZxkGLZnG10LLTLotu+4DOaRiyGtfiXbJALTK0raim4Zf4V6A6Xg7 - d/tf/8icD4AiLH4hZ43rmtX4tgRWegho82jpT4Aen5JOWvtasS1vsYH1Jvi97yV0mCe0GJd9LNbfQRbX - EPqd7vrDP8nHNN34M2W1g5UOxv/D7L2EGSqk2/trl8J7bkmKr3AOluj6im2VXIU3XXi/6ebyHbbLgXw6 - GF5h9WebJV/mA7KubyfAYZtMEfegAUm9Ex6mIW17CtI3t9qGNxxh1dgLLXUuIwDUanxa7aYIyMiMvS2j - racWf/eh3/rE+239j9NHQXylA+JV3/GuWBkHkdLN692PbN/iwC5XJtF9WvTd6QOFOciS3TW8VqzlH1kF - 0FdYKo+Kxp7Swi/TC3BdeZu7/q/93B7dQxhm/QRLZewPgIGyVF3jtApv/FY4QC6oJorAVI/amAeFn0m/ - k+/CvpA1/6sf+vFM/DkpurLONdRcSPuSt/6pDCuALLXKKJ5PX0gtzgGhtzISUOyqqKMYHNsr9HtIqzYT - PlnL5wZoPxo6Gu91cxSAE4LyRwTa+LIA6K2VD6/ED4zkctW7/uS48Fef+b7Oa71rlS5BBL/1VptS0M6e - ln7s3926+kj3J3t6x8xxZAoAbThXI/7SP/bUx7ae6P6VS2qYuV339ACox4ylapfKrlYqUaRaedq2zuEX - 1EGpZPFwwyzW1eoay31+ZJKavvnEpHv6ET/+CQ6XSy5YP17YgshMoclPiBMR0+gBxOdjglpmRupHYUyX - F2Cb7+IkIyc2/cx2trtrCL8Tf4yjMmw5eYFJSFYf+qHJi5FVXz8PP81uZdLbg4RKxewDWnzLWGF2xlbh - j6TWwGYRFKG3bryD3RY/kzIljvWUXhxFIY05ZTAecQjMD8MwyxuStuo8mlKXplXdoY8bu2S91qnwHpao - /LS6xlb4LdT+rj+8fWOlmzIvUjWXj299ava9r//tj/+EQ155vlE8LvaRKQALoG0IuvF49/cisE3YnVQb - Fqrl3+qgllyEn7Fd+MVKBT6vyiAVaBhISyiWNT7/xU4R/KPu6Y+Pu1uP0lKIe+I0W2ZVAjCGy3oyTCof - twlIVKvaBSBCrce7rggoBJuzCP+X0PI/wBeQb3XXP/RjKLYPky+2+1Ju6wj+ul+nohw/I5P3tgCg4rPv - aACB+6bHrxGsswazPBX4PLgt6Faw4lik1oNPWngqowl9i6sw41aog9fwE8eT5QwFSHDhtwS8IKImkaSk - b7ItrfjJoHwizJ8WjjcmSn7AeEoL3oz3scOjKIM0WPKrjZg87NdNXPffmj925ee7Py+t1uMN3WP0Q0kd - nWnLIdefXvyTrZvzx1dOTi+xZXcx5isfY5bOxghl9uHDCCMqqs3oOllANYeHrIwYGEPNq5C7VlgquozX - VlmS26WF2Nhmu0F3qrv682xX5eLQ9fumHJpjl45byLe8YnpgrNhoe2GmV0xSy48cpIMnjFIRtGoXcQB5 - cZwZ83OtmS0/h332blzprn34J7qbn3iU/FGV7MZb4TDTqUsoPs4xPGfTo+rIy2H3wEPuAdWgDPEOhRkU - 6WvwilvjVZkrwq9i0KTitKs7dvEfmPgDXuq4oEpkxE1B1tRs5oUkLAdmW3Gtu+BbV5U2yencf93y3oGJ - Qp22kojDVp96bcKfVp9eQDk0RhD6psBCd86X2MfXHx5913Fb9/eVh+YzbSOGtJ63+/3v7xZ0i8Zf/8c2 - r//+r157y/p9k7cvZszkjJh/d5cPwuwETpusS4W3GoqA1vpTM2OsI2XRqotdazBLdLzpzuYsF4QsFtwO - dJMLQRASrw/rVrhVxshcMT2iNSkUQnGfCfQ2HyiVNA7x29NwDL3D00cS77kaI0Hfl195dbc49aUouHPd - zhM/11394P/Hbr8rBBU97heMT9/PvgfH/sOaNXu90TPMyIHAHuuOjqA+C75BefhJC6t/iF8Vc30fx+/p - adnCt3ixiaeA2uLrl5Z+7fQCijt+QCXM4Q6bgRYcAOP9xgu+C+HkoO8amtjGx92SKIpbRV/Ko8/qUPiN - byNThd+uv4KeZT/dlHNxQ1U/E38MXadbV7t/eN9XPv6HSLH7wQ8kSZ3HzlTROfp8PfHI+HtnW3u7fLp6 - QgEuxnzee7yyzPIOrbSfs6ZVj4alLqxAf+QbeSitPpUmQ1iVwq3cjBHjZqjM2vwpNvuM924xXtziUMZS - 99SH2N17pew1mK+e6uanuD+fBXNvFcoEofMDScSEKuEwa2FkGSZMU9NIpgqiyGbi4KNWOgA67D+IHga1 - 1ffcyPoXIPy/AqZmCPPIv+6e+Kl/0926ciPC76UbS2xtPn3JiT96n3ZFk472gQShpRnCCuTAbx9c4w9f - 1LBmdLdyUXGmbADUMiqVY1lZjuzbt0vveD7lq5s47TFOhBt8Xrko/QLTn3kb4URrj2lnOIDtK5kGJziA - MQ+QNV7aEeDBazj681j2pfwbPcHhG22NioH/KHntJvxITXoCCj+P4/50/Zn4Az7hnNOV6x/Y+gPESAOH - fWwN2T9a03oBv/WPbXziW75m7a1rFyeft5jzJcWR19fQsjlGq4KYiqoVaH20CkodRZWpgQu4vZXdeFRH - lLhHga3QnQ2YEceca6V3nqYX4BX27tZjF8+I79CHQZhZDnNCKIxhciFafnvgEBZ3w7uTp1GqYQeJNCC2 - acjd5IHWfnGK8f7K67q96x/pbv78j3bXP/pYPllOrsGk82/Lfx+7GFEAz+vMf5+d3lHyMPTqzsNPg1dh - Kv4GDxI4CjxuBVoEhb5XCMKBGr89ouk2XoOhCHo34UXBWyrSLmSb8LY8CU65cQ/ifM5HQ1j+nbmrTFpN - 8YoCIsyVEg5F6VPcia8Dk9/aK4hHgfebirF1l4Nhaf1VALUnQBT0zmh0/cPzb3no6596vxN/3/K9ebvQ - PY4/pe94THJ25RdGf+7UA7N/f7w6WhnN6AVgTWjxZswET3jmLvdUJpERrCgrLk8d+8trmRYAzw8y2IKr - oWUitfY6233ZctjdvEHL73uPTjAnMO/OPMSX5+k6z+ltTNbP0PtY7UabN7sRvQWr0BGJ/NFr+yQeVgE4 - yAwg85NuZTKmx4SewRwI00Mkx65+N3XtDbT8b2aJe6vb+sT/3d187PFumytUZmx4iQHV1v4EXzM+eRFF - INg0bzN3BNaMVmRRglZxh+6+pAe4LaEmkdaLJsKuo9IZOgGl/gzKQ7208DgAWynNHZxSJhZxwIEZCX8A - +/D01qaeEIxaJC/YDalEKdIYWvBDix+aByqiYKc1kX+q8KsAeNLqg57g9EyTxz0akemtT3Xf/8rfeOVv - OrT9usuFxWrSx9I68h6ApWIvQG35Fd+z+fFv+sqVB09cmryz7wW4kE2Fzunrp2sOgzWeS5VF7VIpVmIq - JdBUVJiG8NxLV5Azc+uNP7KNPQFXlvyQxQ77BCTgpbZh0vQG6BrwFQeZemSPoEQb2MB7zpRkSbvHA9RM - DUkeG2wfz1CIh/txLr2i6058Pvx7sdu58nB345GfYqx/g/w6seXBJ5Uh2cJeY5//mVdweQmTf6En8Uou - tn6NedfkHQa4Cq4F2go1SId+ErfGCZ4aET/plwf8SifBLTHLw7jgNcUdZRrcGke35Kpd8geMeBZteyQj - 7UJfuy/RWuympZJnt+eCMx9+UZivQvcRavyCXPOVZKRs081vSOqGju4s6eFma687Zspckn5w9TOstFFh - 6drtvtPdjcUHH/l/dr7ur/zQ1hY8fU+YY9MDaCsCn/jw6E+duH/7N6yeXeVCO6R+tDqerE06viUI06ME - sMu6MXVrqw5HWIV2AMZqfDkG0+Qyx9TtEgTMD/9u8T3FXYDuObjx9LzbvaEiOMUSIbcGc0/gOrPoc47x - jtPVW6VHsAJtZpg5uTTig6Mqg6QDF9BNKUqAJPZXDcxASzPZIVkRzAT2wITRwv3kneW9bpl1/Rl33n/q - Ua41+yRXX/NJbDa3zGn1VVZ72ygursE372fum3G5iYeYoKsANaPbZHqY6VYzcNZCaSH7do8DgSEN4S2s - SmKxAEYgtYfpVGUNjeAZJr0ep9Rd4jaYwbqrX3ec1U8I/v0y7Lv3KkXKl3ueamQq2T56yhar0SkEgiPJ - okhqHVYtkDqBVnpxdv2tuqoA2mz/YK+/iBP4bOPaBxe/9+3ffu1a2+ZuUsfdHIsegIXUegFf/Zc2r3/D - l61tnH5g/LXMbnONzwqL2/ZtySrjyTkVWpQA1RfmpPIItTKpo1Rakz0rTSNGWKYPUIDcJWi3me2jWzMO - HnHBJPR2+drM7gZ6kXXkkRcLyFIoljnHTBdLzA8ssZXY3gEJjpzQQkc17rK72Zh3ZOtopnySePNr14Dq - XCxW6CueZ6hzBqF/mn0KH+9uPX6NG4zH3S7C71B2h8bsFh853mTOYko39+KDu92F13KfQdvsU0kmPZIs - dgNWv94YHU1QKk7yi9tC0J0HtKAKH0TxlRNdOC/XSNXuewmrcYGlax67wFIcOqXZnubUr4lCqcE9zIAa - G1hRBCVQQVZgRxPnANYQWBLco9Ccg8AES5qVllbiS65lKDY/reVH+OUTWc/GwI1pbda/TQLCHgvgo2sP - L77twd985e+873I3/bXfe/y7/rxVzLFRAOaG5RLN6Fesbv7bV3zO8pevnV16HUMBmuplNwbAMNQG3JVr - nOSeynjKc0r0hwAAIABJREFUtWra+qXuoq3b0k7CCtkoiL7SS5SMm1UEziDvbu5y6g8ls8vlIAifwwK+ - XxDa1rw9Dm4PYKWAbibKIHbOn0OMOQoVUwTHvPGEn8hUmRQDJ0KAn22qnnKccQWZ3ynY2VztNq9yMcmV - 693G1U3uJJh029x3v8NNRZsI/c2rI641l/68O3tp1j3wBq41exXnHBidhKF74TVdCuWZ/L1gm0/iHvCX - PIcezt6uZSxuBDbxjLv/5P0iXNLgrWvdlJn8fVqpJr2VfrMBxQgugp+SC95BHOFiUYbiVtPipes+XSMe - Q4AR8yh8Ttxuk1kt+SoRxE/tmFdrKclp89ij87GbWBVBhJ82KL0Au/9IjW7mg/Y46j3ZeGzxVy59zeNc - eN2Nf/fle0f4LY1jMwQwM5gsmzh58uPvmv2xkxc3/9loeZn5+aXFeGlt5FdhFQIPD/mt+AXHerNch2DK - ElYsspWfcbrbUqSiUsGFZ1UQMoNW2AC8ZYb659AzK1zgcZP9AVu3dhDOVY4kr3GAyO/PcaXWaW4ROs2l - oXS3FbzxEjs9mHIfcaZgxKEjThzRTHPjEPfwcQSRPMB24d4klDw4fk9vwiPGRJmhaFQEe9xi7Feu93Zp - 7YnqMWjvIrCrv8dmqCVa/DMX97qLr97rzr5yr+Mi3OQ/c4W6ysuUhOpvfeXiu0P4AeR4pEOs4JayLIkQ - OIzvaw0BkS5xClKv7FoCLa6kmxu7dweP+hiECdLfQEGJx59WdyLxb/ravrDBurFicCR7/XsZdqBkICc2 - sIAVfrwOGWEUBT9j/BztBaUe9xVG+GzEpN/Wte6ff/DHH/9200MB9EnrvxdMXvu4ZbSNoX7uf77wZ+5/ - 28nvmM3O7C3Gp6cu73jibZcjrx573bu5yT54x++UO/+Oi/2j3tJ1c4bccXk0Ni+pIojfF7aifXvCVRal - x4Dg0SrfovW/RSu8u8eMoJ+5RtD9Fv2IC0b8uMZUEHME2hOUQZ6cAZeweWE8us12Yw4ezbb5RgEbkPY8 - hGQPgGDzm9EDOsOLRnyKAgBelYGcvYxiOcnHSy7ydeNz96OguL0oDAqNZzWEt4o9IKx3itRoaTd3wwus - ACNoB+B4TKQpAJwRYtB7Mr2jRmxhPbzkMvEqSoqPnwhqj9cCq6IgWitLKQQ3Nl32tXOU7QXq/yZ18CQN - BJq10mk01Qd+X7LNF8kMRfAhYncfRikTfXb7wbXFzxAACukh0BeccPRoe/HhT/343q/6nG946mO2/jyD - 0mh5Pt52qYHjl8fU6w/9p92JL/zK+/75iVececd8fpoP/54ez/cmjIl32AbLrPjTNxjmsd7LN/9yoEdW - ULCxnbi14lQKCn3GcsJquEpcEz/hRRFg4facwK7fC0ARbHDJxPYOk3BeI+RcBBuFxuEOGcgZYIiYBnY2 - 4GCnx5E3ICdwN3fB0Ztw+ZF06EprC3dSz2HDzF6NYcCmkz3uMGVTz/m97tylPb5ngOCjbKQfPlZafI9k - 3p9qZL2aZgPd2TadlrmDGJJuwpKQO/mHUSSlXzuOFjjwVGc/WSdKCqjgljQLkr/x+34KaEEpiRAnQwrC - xGnpZexvvBQKCoC13L3FORoBFACnzBb2zFq4NnFNXtopBTxp0U0zXXv88o2tfwS/uUkhMFShFwEs5jef - +LHFe179O5740dZgmc69ZtBvx9JkKPBVl7tbH37T7Pcvn7r1z6arjAEWDAWmJ/gAEM0uOz6dXGpdQDb5 - UtlIgeNapJsrBruJAmbF8ueSmcs44lvhCmD4MIIjkhN9RdDsEdjNXuGDIic5U7+1sdfdYliwzVmCvS0e - Rk6eW87WU+JB2UTCVTKYjxyWra7aemtA2dpMbyB5l23ducdk3jpnE2jhFfzTF2ZcYYjKYUgSwY+iSBZr - ZdUWsvoiKjX9ZESFpqlpJwMFUjLTBwA03tBYHjHSaIHVHbIqr/aylVyNcSCdCgtuo2m0FHorjxaxdSRq - euCrXGN8B9OVRnUnG3qTD8HgCjSOUpv0KGMiJoygGHBECaoAPEPhl2+K0GsT01a/CH3wPK5uNBT94skP - dL9H4X8fk37vuezxzHvT1FI+nplvhfvR//X8t59748nvXowYCkwYCiyYgGMcvbexyXDgBvv6GQ7QE5jv - ogRcObSKFWZei/qzwiJIbuJJiw1cwWrDgcZr+o0U21a94lnt3gfoV4R2trg4lNuDt1EEu4zhvUXYD5CG - GdNqqVxKebpAII0wYoDSVBGhnHhWuL58jY1J66zl+1UiNynlfAJhRXEZudC646/Eq8k7NNwGj9+fBhC5 - IjVwvC18EFbp9jFqUPwD9wBt30l4KY99UO8iqVY+wiQVcnGUfET4A2yB2CoFvYGnhvFpJFhczuiOlu+j - Prj+bXS1m29cBx/tWU1DS1n5w6PASyKtOzzRC7zC75hfPlAJeL4fbQ1scv3hxR96xa97/Lvv5Za/lUkp - 8eY7nrZ5XHzyH1z8WycfOvXbMh8wPT1dzFk6c+JsY6MoAJXApkrA3YJF0NKtJ7Ld/aESSN03BWDl+/ju - cRc2acohcwVwmAojboLlKQV/l8tCvTBU28d7CDO2x5ZRpSTtDEOI72Why7Tqy1xH7sGdPO3rQ9LvOVk3 - Jpkqzv5XWAhXu/f0GPvvc5jePsq+S1rVxDnw3wa/U34aUqOh5koLfCgAb0+6OoIWTQcgynOIVMowSRLc - 4zYUaaQsSqbidVKGTVTzBXM23VMsAlyHBegJ1DjBTDkj0HrSOijckOIpy3zW9SHhV0nwqeLxymj69Ee6 - P3PpKz/1n382CD9vdexWAczTAcPEyohn8fjHdn//dP3W21bOT982n7HIy6GLidPx6+vgW5vl2eN7o3PO - k7tZyAa9r36Ekna64KHVw1GRTnsMMBvRxVd1KPxpwYSpTMSTAxMdfAZOywizwwTBxnMnEqgRfPEE+VOY - q/Q8VEJlNxnMZnZB6NPdb6gM2DfmwQSCDziEB3YwG7BEG7awBfIcfiERKsN0mtvoQ7f+PsnaGkdCDbjd - BLXHL1Fb9z3Yh4VfP/gWexSphVTN/rsZWLMhbR8KlxIu5YUmbpvE+uhESV1KGKHWnR6Awm8rT/2Ubj9h - uuuQAKKz8fJoevPj3XsVfvjRbb7P8sYtt8ff3i/ZY5xXC5xn/uG/ev6tFz93+f2TE6fZ+X6SFTXW5dxE - w7JghgO36AW4OrCJErAnoBKo/fD0AmQAhbDa8kEeTiA78yuT81/sKnT6+95AAos/iCoSw21BBnELnRIW - vIQ1fyHir3E0/UhVvAorIbf/Rhk08J1wTeZO8Bbn09k1m7fREN7CKo14D8GGL7AvrCVCSPTSWOjF22jg - OUyzKYohLXGitCVb4yr441UueBnzIQaH5LtXOPXJkWDLVDwLNvVEzDCDQk/0CH9xyxiZ9RfPxyGALb97 - /B+f/+3zv+LKb4MP0yDtpyzxe9d8JqxyV9+6dbl+4QfOf/W5N678H+OlU7TBp2l4T1JHKwg8SgDB373F - ygBfxFUhzHfZJ3BICYQPov1hGcd3YQpeBYG3Rxgm8c1wt5ZX8NCdsMZ5QzwRgduyRKgNE8RPz4jxF641 - L3mEaYJcnQN3gRz+3adxOOSO/meiV6SpRKnCFE/DH8CGQtin4QsMzJ1wJBEykfbmASbQ6AksrT6+mEKn - 0O5p4tUd4TdOjU+J46HlX+OylNFZ5Jgr4LafoCfIQS7DqOO0+MZEyEuvrMBUAvqt/Ljxt91/sATC3003 - nuj+/hP/9vGve8Mf4IBBMclxdd/TFq97bxgvVXBS8O3ftvmhb/5Vy4+unpv/BgSN+SIqmH6bOwVH1KAz - 8z1PUk2ZbecVZZHCLwJlISEDQ6QSXmAldIhV3SYnCvjFHrgTtcDbr9jpTIhsAhidwoYmtIaw2sHs32WI - LKGG2+ySmx4r9JrvgKcC+3gN6aAdoQtOckvg0K64g8z1QtrTtTxLmfZxa9g+beko+DWDLTzkgeHvyQHT - 7c1QDVZWCgqeR7nHS1z2ymUvTNEyT+NBIApRAVeoyetwac9hXL/Gz/4Ohb8pA4cBENqb0O3feHL0D3/8 - nzz+de/4wxAtL9KSTy7v9Z97RgFY0H/z/d3cnsCX/snNf/vNX7m8uXp28ZVUFJ9dkjupYmvQffo+MqdP - XXMP80BDnhA7tVgZT7QC0IGJdFZ3Y84SYNTqwkrEIupRCEmzkmrBYgMPlokmI1IBUuOrkBSKkidDKl7D - 148JenHte3oawRCrPkGsxKr7NqvhPpt9WyTyWfBb9sy7kGYC78ttP+SgklCQa5gRMNWKow8bwMvmnaDu - x9Vr+SLlIxVA5+YtWn52irrEWnp4hGeMD6ot/UD4y8Sf8PaAG+Gn5X989PcQ/t/CMt8WXf+x51VK6p89 - v/eUArDYPS8QJXB5819+61cvLa2cWXw59cykIBzXegK9EignuVJtmaGDgMI9nL6pwkdArVVtSFVfqfEC - E9S3VsGqSAP8Pi5REhc7tEICugpsACXuQaEusMiO3VJRB7gttWYXBVJ94gW38egdIvagHrmRela7UeyV - VKPTAmpsvb2Qm5kABrDgC99vxY0asD+hO1AMjV4KpCUqvepuhYN3lJ2apwhU+XsdmN8JYJgXwa9je7g9 - rTwKID2AphQcBiZMymzxXemmtx4b/42/+L7Hv/53X+52FX6eIdeY7c8Kc88pAEtdJWCl/Lpv2vyn3/a1 - y2eXT8+/lMkApn3V97QE1HIeFIE1nkmfMKSz+63ecPQ8hSPVK4CHoNZ9FdJ4s7VKxS54UhNHptYVd2g0 - t4HFJKz+JLQgJ7DwsgCelsfko4AGqIWYv+I13AotqTbsSi+5GrorslZFPUQm5XQb+YrUKDUqfZn2EQrR - Ht4jHhR8wUOcVr4H4JZrzWPgevQ3WNy8NUuAowlfQWHAPx5ziILPhqf1ry1+BF5BhyXSCxgIfxkK0JNk - cyb3QUw3Pr74vvf+8yu/Dx7LhjTsz0rhtzzvSQVgxumORQn82t+38Y++7deuXFg+M/sSqom7oeWYMhxw - KDCOErAnAFhmCZMW8XaiTlP5etAzAFEy/3971xpsWVGd997ncc99MIMzwACKRHwAYgXxBRhNlIAGSGlS - saJJTJWPGFKJP8yPWCZWUloVK8akKlWpmB9qVfxhSssELU0KECMCAjooCkHA4AgjBMK8mJn7Ovfec8/e - +b5v9erTZ885d+6g3GGG6Xv36dWrVz927/5Wr+7de29EDHVKSTMTT2MyYgSmy9scH/E+SjGeQRcWQbjW - ZCimNEEyVI6eSLJBSMSZqc/80zDoGETaSNfEmCw6CsGxqPqhDACHIDKUofGYAs4FGERberuID56ig4zF - DdJ5UitduSELxgcZY4XKgYe4Ao9pZ8W02qUoFiDJD4UgysYAjfBm/nMtABkwLsSjz+hecAOvoJz9afWR - Uy7f+8E3vCHL2ceOR7Pfm4/+MasAWPmoBK5ZvO5Prp44uSNLgNMBrBRRCfAK42oXXCDUtIBXHFGx95lF - YN0qdFLGxR7osvTD6KX4ECYd82ONEOSPd/iQl3dwBfkTnGQjzRCOIaaN52J6uuBz5JQpnMgnpBchn8oo - HlaKiqH8WkcsEkQcAp3JnEFbMORCpRmd8XTuSZqERFprcylLiPNxa9WoBnblUc9aq/lg8h+P7jb4kZcM - jwFjWzUVAG8Faq6PHm7m/WAaoG5BSwDdAQ3Th4XYwPbv3oEH82u2XbX3HzjFxLv8WNW0uggef+6YVgC8 - HFQCvGCX/uXi9e+/aqJozpRvzMs+Fgax8wd/WhzCS9rdGsD2IXUYARcdjQtFusxpBwvXWVc/dMpBRx6M - Zs5TR2bnRwI3aa3nQDaAQmHRVlCUM0GlG5ZB3chQ+awQ89cphdoFXhKi+CHHiPOKQpS3asfyCfSYBwiv - J4uxB3SYIQ4pvkAzUs7CUTExo+A8T0qovXQ+ysnaiOcWslWSkJYjP/kUJ0HriGFZSbxvL1MeSn4CC4B4 - yWsDj3XnORQAPhPGkV4H7+ezpwdlIJpbe2nyt7JGuZw/vPuH+Vuf97Y9X+WdJrzQw5tBVTmef9isx4PL - oQT04cWFG7b+RfP09se6K9hojw9mZsVJWAqa0vZQjjDcJdhfwhOE2DOwio+BlPiKbrmMjUN8Jtff7qMW - EbzV2by/y2Rk9w2GhPiUBVKtk4ZNRuKxkwZ+GnaaPkcg5hc6ePCQEOxwZYInOUq7U5oAEqokAlmyIUGC - PU9i/iBDS0BB8jwBaM2iQipnh+ChHgoeJ0P+UFwiO6jGgJKyiUHLl+fJPAR4UowH8GXCI1KjOJ7QbEye - gm3ZM3iWAvP//l6IYQoA5WDyTI+DSsDaXADH9KCxuK+66cC9/Xe/8Jr9j3AgeaZ9vBM1flodm/N4cTwX - Xt7+XZ855ZqXv7rxyYVep9Hvd/DCxhns/8PLRDK8yYffjsNTg3yEmG/bXV3GOwW62DSELweVfKGHntHl - 4IDOFoY/dR7kzo7ITSIsKIKbYTDIi4ogiTe+yZvQsDx5LqMsFLaOznzlXEYC/IHSUIRIp0JGg6BTh0CU - iUPmPKfoGAgZ89QlFiPt/IcqyzhPEzKiIgqkpXR+yNjM/VBISC+RhMWSmQ/dUBvw6vICcAMXI9T2WPTD - /D+f2KoXuLSn8a2E/pOIh0L3a6N0zAx1K/HgON7qzaWh3hPl39zwyX1/RdA/G8HP9qVOPN5c61NfXbyz - tzj5/Ssu7l+NVd3JlZX+Knb9YSWQHYoLgpwG8I0+3DMQNhChY/FugfVXmJbqgGZuBj2AdGgqCLiM9SiE - jYFIpldCmbVOWxrEqVeHMpQPZMGTXMjD8jJZzYmZhrMUyYdLxTR+qDwrM72QzG5whDJC/Vie8hsImDAz - cF7ITLIhnTVAKCvIMaS8QJBVd+LxHOD064gOwoqyaGtOxFOELI3upDlf52jOa4QeK7Of5r828MDvTKBs - 3AFAZq1J7AGosAeAtwCpAPgtCF5MLPTx7WDtSbzHpZntfPL+/ju2Xvnkpy+4H4t9iMWdJVoFzzp3rCsA - 9RNcNfd5AXkhm7fds/ijB3dM3gglcPnJJ5endLtUAn30LfQSdiQpAe4AgzKAItBCIV4CyjBzY//0jmgd - n1lbQbIOrDsbgxFIEPq5wMkIjnYGbgLQnHwIGghZUIgLPA9H+TQPFkA5+iyf6wOMDzJDSiHIqh6qa0jD - k4ou8GrxqLnlzzxS8ZAu1g1h0jwkFmQV73VkjP75EwSYhuQgiLAx5IURm2AX+AFgKgMDPtLxTb3hNh7G - cigAfOm5NwVLANu5J3AHgG9wZs/mwVd34H0rSNvAR1PzfTuLL/z9P1fv+PUP7bsbsc2brb/4KYH17HJs - omPNeddJuk88BY/jBW3f9/Di/954R+faS15aXXjOOf0XLS3Svl/FQI81QkjyBx8iRWcJSoBv++GGEnYq - rB6ZUMw76a8sBkWo2ygjAwHDOBhLR5AbmBgCV72eNFwixzhXFBZnsimPIKdLR+5IK4KRyZHwTEGEtOKz - hl5LMhJXyyMNOi1pTx6R7Hm6Tyk7f2+D9PRVPtpfwA8AF/gJ+niE68N4gR4KG6M+X83GHXyyANp49Hdi - M579aGbtkzCFq+aRgZn/MPep8fG+Bbwbpls98KXPF79/8bt3f+LmHyzyNgH7vj+D6ZV2n5V/VrhjQQH4 - RXE/vTDO45hBOvWr5+GlPj/e1z3wqWsX/vWFp09uuvii8rV96ID+Kl4xqFuFgBhS6csvBD07Ga0BHpwa - wCKQcmAHhJz1devOLMwSExYsnJ1ZpP2APQgy1kPwXdCSSt5jBXpJOwfRVrCUhCehH2kQvtFRPBZhtRjK - O2GZAIXCobk56KgsEKWVsiQjmeQxk6C0ELZ5PQlG2rn6GcfkiGO0DjW6BZinjgB6rtpzKmaKmcrZAW9+ - Cn7SDY7+qzN641NrBi+KxTMAeAmIgD85jXs/eKHyd26uPvbBj+fv+ehn9zyAUvFeN1WDpxerFGh4cnU+ - w8eleyYrAL8IacM7j34KdtJ+8JxIc19Y3tqypdPtbiq+fNPu/5h9cvKRN1xcXjY9XXWWuqv9RoG3emDJ - W51VoxAodDhuHtJtQ36YVMoAk1DyNXVA0fw3DyT/4IgcOgXMIyluigIXgK/RD+BmXnLwnbQkDIUSXGlI - wviDUpgaPJcJ5dFLWQqHOE8rXsgzKh9PhCytbrXyPN5KhQzPwepJyVgEaGbNPMyaCudMoXAfPo72uGIE - vqwvBz0+06YRXxYaFDRHfrwj2qwBKAns3Ck6m7PlAxj9N/XwVAi+8oIvc07OVA18/an84Q+yaz/2d/13 - XvOJff9+/048HASrEMc44LNWflCWdOo8bpyfyh4zdP0kj3bFR9Un5Xnjs54EOR39/Ewc/W3b8Pg/dnRi - Mtzv93GnF+99xYE3BxS9ycnmbrjLXn3apf/04eoz51/QPH/2QKOPt8dg1/AkniTgXQK8YARHhY+CaD6N - uwXYUoD5Jb4XgDsEulOALwMxXPZgbuLWoX2jgBvJ4KAE1Pk1JA4qyDhixoCAgIQZDlBJwoGULLP0cCSQ - JvIoIGf5MP/oSOPwIkSDFcGZyjIRZem7U6siQLjAKe8hAQJ+wI/5Spg/5gR8khCW3hDQLWx5Ih8Smoph - lIcS4KKdFAoUgdO8yrJAeP46qQa+2LQpWz44w6+Al1NbZ4tWcz9yWinvvbv4xmc+n//tP35h100oqbFl - y5apRqNRtvbs0dk8PmgGrzb9cTSi5NJ45x3O9zSHkztq8byGR9uNq4Pz6Y88CPreqacK6A54KACF8VhI - 3p+aikoAigCDebP9RLd78IypfNNH3tv+8/e8PXsfPudaLMw3+41mC0pgGvYAV5SpCNpBEaBn4InCEm+Y - qfCSEQK/wsFbhiVe4l/hOwDsgVQEWG5CmoAYXnrUGhooti9XpuXQTdX5Q4w6dJBXGvBdOXgjOF8twXQR - 2SQpRWAwAs79SFNpmEwQNRmXg0/SgwOCGZCPGCqExA2VFRMG2TQz0jxvJiCI6ePQaE+aoz3BL+AHn0in - EmCZSgNf54u2xTe4mCWe/Ct7S5vx6vUi33x2Ny8XDqxu377yX5/7Uvnpf7ulunHPnj390047bRPKq5qL - i/05+KSRlHUQTR9WnWj6jV27FA8FwYtIWuGETsNgR+f8yBhDrFduTPKfP5ttebTcqLKdp2scKsZu4OF8 - 27ZtBUd5At7BrlEeAC8xbJcD0Dv4i06wBKpOJ2/2+625lWL14MHuwd+6YvLNH/9A9bEXvaTxgtmDBWDe - Qj+cQI/A579wmBLglNE+6KF3C7giwPvmo0IgDWWgF5BoQ5G9kgz10imw8rQN/CTUmRkFBjqhepnFBXkG - 3FGGaU3AufLFQxL5HsM+XksfoyIRCg9hZZ3mn6QXCD0d/FiPIDMoOzAE2pA/WRrNLWEKdAO4AV6PcUMJ - MHMb5enzPJgPzx3KVR95xIfheLFxldoTm/HedmzwmqwWvv297o3/8rn5z95wy8p3ds0vwhDE551ZdLHc - z5fyasmAH0GPNucqsIUXFqqFJAxFoDi3GIK1YBU5VCmwGMbRuW8h+x3FGyebptswOrnUR7VMrwf99BD4 - 6yO9A39mBOgZxzwI+nICYIbPsPMZbiNdA+bA3tnegdO3NLf+9furD//OW/O3rVbNfGGxKHFLEP2jgx5C - JUCLANYAJ63YSkBMc5CvsKOQVgHfAirgSwnY1KDS1IBKgS8opWWAbPCTKoTARM0SxSApawCmiGBj+gDs - tKGkQCjoTmdq+aVKwNNEXsIQWVMaHIzjVRjKO9QpFGxpg4CAz3TgCssAMdEsUIOnkR4+eQQ7R33QOnSP - Pyg5Npbqg5EeoMeCHpoNS5xo+FYT144f/kXaXY9OPf7te0/++nXfbHzlptv23btndjaDfp+muu4X2Ae8 - smIAR0OvGNg1qjvwIVYVy8sCOxQErrmAL7+xuFjOBx66CRYU8UJ6TB/WUAZsBF3lET7j6DzeQvY7ipfG - P+20ruHTXsqggLQ8p1OfNHqHdb9Roz2BPA0AV9PTAjUBjUNAB+ht1EdPSPnMj2H6AL+6F8NQAq2lfn8F - 13vhrb/cfvNH31996CUvLc7BB0Ew3W/hG6D4/henBDhMEbB7cX0AVcQ9ePVL3GTWjWa+iJSAJ/ilDDBd - gM9XF2udAN/ztmkCrjk6syyC5PKbHYDs5RCRtIqTimLtmQ5MYs3jpCwowPjEDfjGlHxMB8KnJYiWLAX8 - CKSVZYlifvEqMY8QJ1CTBrC1DddGeAGeq30y6wl6SxP0QyiPpj3P260nNiy+f0jQTyAJ3qS8NFstb/9e - /v0vf6244Y7/bt+xZ25i79LSUqsoliZwdxdvbscDIBztez0Hf9ljGC0mvvkCPRUEHhcroRwYjgpgBbvG - QrjfwOYRWgewBqBTCvqU01QhUQbIXlfEG17lkQmX8owz4I0LO39DfFyJDXNpWU7T9yN2KQI/mPgR5A78 - xMR/ysDHe7mjQmia0ij2zeazW7eWm//0HcUfvPe3s3c+59TGSfOz+ABc2awa+Dip3jQjZdBGlfGhUlkE - VAK4orzMHKRwcNGQVoEpAgO9rREE5UAFAWXA5w6oOJgGlUEG4YiT9NAy8rwfobG85SgvGj+BRwB5vEch - eRJvNIEnF5QFOjxkQhkhoVhkx6vCtGAozNGdNA8DNM17G93DyB/ALh4VgsKWHr9WHso0fHJwRltgly7a - BIq3zPGdRoC+wiJftbLjoeqRG2/Pb7/um/mtd91fPri0WqxC/0+2i5KmGu/5aXTHu9oHQEeDrgY+ZNS4 - +Ky7wI/ypRjAF/jl93rkCfwA+ioVAcCuo0lFYLTSUxHwFA6jDPyiqWzKw6U84wx4Ht5QX9dig0r0sujX - D3Wr+ohP0HOkro/4TO8mfTq/X2vU5zmi9Q34iQJwywDXFMsDxersbD73sheU533wvdmLc1fyAAAR6klE - QVQf/+aV2ZWNdrOYh0WAT5Wjv+O+FMFPiyDHtIBfBpZFYHdTtXU3KAK3DqQMCHRaCLICggLg3QWGMUWQ - ZUAZaBMpA/iol2qsRhONoLeg+hGABlYELkkHsfhkJEkEWFMQli7EhzwZTYArD/oCN1nMhOCm5zTCBL7C - lKUSIM/ipTSoEJSMeTJvtX44BdIGemhLYB4fY8PI3+lgTQ7PcPXmqtUHdmQPf+2W7Ntf+1Z1530/aew8 - MJ8t4EMqrekO5mVobiwD4YEOPPXJy4pK04+KALSDPigFyaUKQaCnQjBl4FZAv+j18M1WAX+1ASWwAmUg - RQAzcTFRAszfLQKcXcYFxGAVMGgXb9hP+U7Tp6P8UXG8NBvh0nJI80D3MB9z/IK38Djqp4t7I+b4BHCc - 19fBz/yCElAZDm43+xFPYGFCRyDLmUII6VrIu4EBf3652cXCce+KS/LX/tm7ij96/Wuz12BneTaP9QEC - 3hWBFgmhCLAkjR6HXonbhzwlKgJaBiiM/+hitA4IeDuoFGAqIBwsBQorjjzSXDdAQtLKKFEIrgxiH2OJ - LDb0IQQsTJ4DWiSlLFLAJO3gNBAzoYEacQCzzeEp7LTL0aew80M68Swt66N6EJ+saxikI/Axtyfw8eVj - zeuhBKuHfpI9dsPNxXeuv7Xc/oP7sh375rNFWAJNzOgm2mh2thrXf1FCOFk0OzgMo6yoCBh2ZSBFkIz8 - qHNF+4v8VAnYPnFYBFAAoAV6KIBVKgDKAez9RXQKKANPKyVzBNYA6xzrndAgI5/0hjq7Rk9/kV4O/fQg - EAs3+Ql+AhTXtHDwp3N9pg0AF4CPVAEEhZCNUwDMH0ogp9XfrJrFgYV8vln1W295Y37ZB95Vve+iC4vz - +InvRSgCGKrACB80584UWgKcFsDn5nUOUez26JY87F66TRFIox4GdIKZ04UA9KggkJMWD10ByIeswA9l - gD80BFsj8OCT5y2LEB36uMmIT7CSIB8+/1FNoyXAgEZzxUkGzSxFgHj6ioBYAD+DTCNfV4RB1iXM51En - B77euwA+nsjBCfBT7NjHg4+gLu6vlm7bnt3zxf/Mbv7G9uzu3QfK2UYDX4Ccxu0YPMAFSKI7CORxtKd6 - RCE6UH99XRW1iAogAb+UwxgroAxTAnxlLk4FYAOu4ovteR/AXsUi4cACAPBPKAC0+lN07Cp06jLBF/hJ - j1IABKub/qSpFChLmgfpI1UASEPwjbUAmCcVALst5HinAJ+BrIqDC9nCdDub+Y03Zpf/4durt7/iouJ8 - 7kbrLuI1MqsN3ktGP2whHcFvysAUAcP8HpGqHvAL+Ibuy2mCujF+tH8gWApIBH6wFlyYsqY9FCcRWQeo - rDJhrcFFLQRU8nQmxvaWd/AzLJrSTCegMz0DIU6gH/B4Goy21nc+V+tZJusX6pgoAAKfc3toTKylYLSf - xsCJh7Mffzjb+6Ub8luuvb667e4fVzux9FYC9J0O1l6pE1E3jAd9jbIhYxYrkNMSIC+O/gQwwnXgIweT - QzxGfeZlYbMIlAZgj+Y/Rn+tA8jkh7mPdQBaAlz463MdwO8MIB/V6wimAKhubCA2Ep37dVqRG/VjV/vp - L83Lcd8QQXTg8Nt8qQUgoAKMIzb0MA9XBEP3+JkmiYs0eT4NkMyINQBP6wpA+TSb3GvQmGhULX5l+uBC - 2Z1qt2auuKR/ye+9Jb/6V38pu7izOW/2uvhg6DKmB5j84u1SQJQrAyoAtwhoFZhlYEoBPcAxgxhTBmCI - xzF+QIvJIBIQaPQtsQEymBhKaiMwMmQILSA800fQfuizaeDxJ1wJ0SYEy4DCcEwXZF2ZKF/kPQA8ZYkr - YQt8jv6ggTWM9lrUa7Z5+w67M5fL8rt3FT8C8G/96s3ZnY8+Ue1ttao25vUTfAYAMx++yokZclSP4Ec1 - pGVS4DuPfgr8GugFbgF2MN+XIojKAKDn3QDO+8njwbn/ss33ZfL7yE9lQNAzP9QxS24NMhgaTf442uU8 - nmG6eti4G/CL9tsQl5ZD2o+oCKgEfB0AoNOIT1D6MUoRIG7sekAaxzxYZqoExk0DuA6AqyH5Cgog5IPP - +mFO0C6oCPLZxaqLcb/1yvPL83/3quxNV19W/cpzn58/p4KRgi8HY70Pe4kA9pyb1wV6Bz+UAexuWQRa - L/DTNzil3QDlOtZQ9aR/BL7OiLScBsZAw7P+qbDjN+YR4pyvvsyzRRno2IO0aR4sn4OnyjOgC5OqF8Ph - CDJ4CI/C2UQHZj4+ggozf/nGb1bf/dxX8q/felfxwMJStczRfqJZtoAmbqdwUI0FPoEppYDCQHPlnydP - mrvCOJpHU54nUzfvxaNsAHx6+49x3BMA0Cu/YAGU3A9QX/1HXP024OAi8KQHjnQ97LHj+B6/Yb4u/QaV - 5mWlPmk/hAZXBFQCBK5bBaT9WGtqgGmBlAJ3/QX5qCQYZnlREWAx0HmJj8fKB9MAVwK4XchxkfZgEzcF - IVIVc91iBdPE1eef3jj9qteVl77tyvzyV/5ieW5nM5YQ8LXgJexCkzKAZYAFNVkGGnLjgiFOmYoA8aYU - 2AR0SROh0LS3WAAcisSIMCInyWIkcQK+Rw3xVRLjPSP3gV/w0IChEAKcCoK4tjiBnmFWQpt1MNhDXvft - J6lLquwxmPlf+Xp2+xeuy2+5+/7soQxa86SpvMO5PRfzgDZmwHUQ+QI5ckNdh815ApzgRaEc7UH366BX - /GCUN3nIhjl9DENOFgABzw1AMWzgr9JNQBzxBXiM+mGVP5ywau2Nw4A33Fp0PW5UmLwNdYN+8fQXWy+L - Yec5PeSvRxmsZRkcThlAEdiGUyqGMC0gsFkv+twjQJp2XwhLCfD+D8PoH9AgjUZ3pcRXysulqXbRefl5 - 1Ut+7fX5pW96fXXJBedmZzdncD+sx8+HF9kydgvra5RQABhs0feagAmLwEGlQF86ynloDoYhHLHoQzcr - hkM/xCDFFB7RFxXn/dV9CoMm+GPmQZHIhE9o9W8Y4JTFYZ/cxrZcIl6gx6QHZj5viPTmq/6dMPO/eF11 - 8/XfKr732O5qX7tdtaam8gmeYc9X8RMTnxVBFalh+OV1gYwmIHgCbjDxOdJHMx2E0QH0cRWfoMdKfjLC - 99PRXYoC5fDiEexzLDuE6buJL+DbrT0Hfa3h2H5jga/IWrzz3Gd+R92pz2xgLerlpWGn6fvBqjm95hN/ - AKRGfCoE9MtRzwRw0TC1Doy2dEScLAOkLRJlQKBzYZAbARp1awC9hXlwetDAqNbEMkHWlVVQ9k6ebJz0 - 8gvKcy+/NHvV615TXfTis/OztpyaTWe4cUDroMcDu9eQPVLRQtBpwtO+WNSGoAdPN9VjE6g5oDus5wVl - wNghJ4YG1cD2vmZ9OKRGXAB5HMkRL5AP+rwW8ZiLxnecLRYjWWyL707BRh2ueS7vr1Z37Cwe/8bt2V3X - 3ZJv/+695Y6lXr483Sk7nU7R4mgPpwoRZCqYwMMRwC2eg56KAHGjRnuBnveKGR9A33ezPty/l4zv6EN5 - HMXLguZ8GPEZZj1GgD3WLdRRZ16jnUffHdOt1x2J7HrzfMpyaMej4kaVm/KcTv06rfB6rIR0yhAUhYM/ - LiLyuQG0RDptKDhVoELgegGBjgO2vXzA3dYHMKv3uAL2L/sWbh1keAwlq9DnltFV+5OtfPqsM7JTX3Fe - dd7rXlVceNHLyvPPOSs/c/MWvKmUNw3QnbFtDTtY82y1z5fXCSSsjv6EOP7wX5dL9+EYHR06NPE8xCMj - gj3KJn3csUgLwGgO6UgGx5z1i5PBt1e5Dx/vSLE1TWi6/fvyhfv/J3v4Fty6u+mO6u77Hioe2T/bX2i3 - 7RYeH+En6GFkS5uodgAdRnhVgMDknJ6lkGZ8UAZmrjMtQR5G+hro/X69KQQu2GEuFhbulN638Qr8HO3D - 4h3Co+bwqgdPGU6nPsJP40iv13l+65XfULnYLTa01EFha5WfxjntPnMg7WGnZSUw0t8NgE7oYHdwR0uh - 9rgw+ZKlpeAPEjmPPiwBWQRQCOYbj9OIqBAoJyUBHt4vSBuhQWVARbCwUOLhgCw7aTKbef4Z2baXvjA7 - 58JzsxdhqvDic86qzjxta75l06YMs2QIEeOEDmFAuxg+x1DsmRPNARnlhpsFrhiYe+Jcj4iV9MPAp84g - 8KEk8ECe2R6Y3NhsJDygQzj0F6tq75P5wZ2PFk/c88Pqwe33Zg/cc3+2Y+f/ZXvmu9USZk+tmcmqzbk9 - wYzVfF+ZZ8ksWGY25/ookiZEHOE9jtoi0NoozXxGgd5X7AHkONKT1gGN67v1EBbo4Ve7du2SEvK6BB+e - 6jbKJ48uaTRjjPldr9yY5EePzS7wTHHrqUsq47T7PA/SHh6i65aCLzICRkOKIbUWIOOje5w+BMUQ+VxH - qFkJsiQOsRSgPPCiIaTDe4iwZx0PqvaXlkhm2AJbtjZPZyedfkq+9ewzi9N/YVt5xllnZtueCyWxbWt2 - 6tbnZJunZ7LO9FTVmWpj9Xwim9Bo7DcXWCJP28+cwUMc+mgaL1hCiNBAHVZXqnKum3fxUN38k/uz+cd2 - Zbt/+mj22I6djcd2PFo9/tAj5eO7D+QH5xarJbwkKcdI35pslS2+XhvKTaM1EKlVfOQo8z4AXSUpjuqM - MnYfXkog2YRjG3MgM+LePNPplhx35/Hx3hT09Qd2kttzdeCzVfzMSbsj73BuPTKHy+MZF592iWda5dZb - t7qch9fyGaf4wykGKgE2TLrYeCSKIawnRIXh6wl4zBRDFKYUWBXk2sHqKu4YrOb4RAFXpvF6qx52GDa5 - BwFvsp4qOlMT2STul09Oz5RTm6eL6ZmZbHq6k01h5CV/YpLz7Qngsp21JnAgY75PhypCDuYCqo1voqzk - vaWVarm7lC/Pd7Pu3FzWPTgH0M9nc7MHyrn9B7O5g4vY7LiCWQyUFBPDKmhwSy7Ne9AwRTiC4+2KNPAD - oALABS6BnErA5v1SBgQ6sjJznxbAYMXeeTLdfTOOLACbq+PdK/aEnvPSTTk+0q8B+hTw6wHxemTUpsfD - j4PkWDqX9da5Ludh93nOTtM/hD6ccnDrwa2GoBiUV1Ac+QStiOFbklIGtVuR4slqwDZkrDYqbKuAWDlH - 5WgpoIp84lgObyWrOeIsOqfdZ8TYjo1bd7JaUDDfmoSZCxY2cVhuACunMAHAYVutQIXMZc6jShbm6G4g - 90dypSAwogvkIU5WQAB6VAoEsgAebs/FME15mPbchUfF4oDnnL52a05lh/N0mqdAepQbxx8le9zy0g5y - LJ/kkZzHKNmU5/QoP/LqyoGNB9BrOuGKgArC70rwmQaGXTEE5XHIImQa79MLWhHg0+q3dQoHLBQFlQR6 - MqwFUwAY6WMdBxd0oBy4L9EdP6UsGg8l0kdCPkJL2ubsZIZn60nCaTQnQVArPMoffhmHAT4AmGl4W45g - Tu/DR3AD7Lw1FxSA6uELeLVRntVgHahE6FQfI0eCnvEnXK0FvLPU2MdN8EjPb5R8ynPafTaU0/T9yFxB - UADgdfDLd8vB/bqScOXg8cw3tSQYDoqCC/ZhpLbbmCwPPV11YnqGhxyUyVAYYB0KI0AwOg/CeqNOCIsf - 4qOSQFggJD9fWhKf83SkEe3yEdR4DRcW86o60CkHGaWhP2LxjtVQvolPHl2sswXH8pLoE+RwZ3h2tcdT - OfdRaVLeKNp5qS96lJLgJaDCSAAelUZdUVA2VRIeTn3ScF62hdb+HQJSAG+qFFLgSzbKJMCOPCqF5CCw - VaEA9jWeo6eY14W+H+TTeZyFBr/j+AOJE1RsgSPpGDHRs4R4Km0zLk2d7+G6z6at8+KtTUb67U0f3d26 - YByd8+u0ImvxzqPvgE15Tnuc+6l8CmiXdx7BTd6IF2WQ7UCt+6PiUh7puvM86vwT4cO0gHe2w4idiB7T - Aj9L+41Lm/LXQ7Nq4+TSaqcyKX899CiA1XlpOKWZfxpO6cPFjatbPY9xcif4h2mBn6VTHCbrE9GhBX4e - bXy4PEbFj+KxSuP4jDsSYK0lOypuFI9lruWeSpq18jsRV2uBtTpDTfREcANaYCOux3rK2EjgbWRZG3AJ - j60i1tMZjq0zevbV9pl2DU8A+hjqg/8PokyPVr7eu5IAAAAASUVORK5CYIIoAAAAgAAAAAABAAABACAA - AAAAAAAAAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAB - AAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAC - AAAAAgAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAEAAAAB - AAAAAQAAAAIAAAACAAAAAgAAAAMAAAADAAAABAAAAAUAAAAFAAAABgAAAAYAAAAHAAAACAAAAAgAAAAI - AAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAIAAAACAAAAAcAAAAHAAAABgAAAAYAAAAF - AAAABQAAAAQAAAADAAAAAwAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAB - AAAAAgAAAAIAAAADAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACRcXFwsVFRUMEhISDhAQEBAODg4S - DBgYFRYWFhcUFBQZExMcGxIbGxwSGhodERoaHhAZGR8QGRkfGBgYIBgYGCAQGRkfEBkZHxEaGh4SEhod - EhISHBQUFBoUFBQZFRUVGBYWFhcXFxcWDQ0aFA4ODhIPDw8RERERDxQUFA0VFRUMAAAaCgAAAAkAAAAH - AAAABgAAAAQAAAADAAAAAgAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAB - AAAAAgAAAAIAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAaChUVFQwUFBQNEBAQEA4ODhINDRoU - FxcXFhQUFBoRGhoeFxcXIRYWFiMWFhYjFg8WIxYPDyMVDg4kFQcHJRQHBycTBgYpEgYGKhgGBisXBgYs - FwYGLRcGBi0XBgYtFwYGLRcGBi0XCwstFgsLLxUQEDEUFBQ0ExgYNRMYHTUUGRkzFRUbMBcXFy0YGBgr - ExMZKRQUFCYWFhYjFxcXIRERGh4TExMbFRUVGA0NGhQPDw8REhISDhUVFQwAAAAJAAAABgAAAAQAAAAD - AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAB - AAAAAQAAAAEAAAACAAAAAgAAAAMAAAAEAAAABAAAAAYAAAAHAAAACAAAGgoVFRUMEhISDhAQEBAODg4S - DAwYFRYWFhcUFBQaEREaHhcXFyEVFRUlExkZKRYWHC4VFRswFhERLhcMDCwXBgYsFAoKMxQUGD8XJCpP - FTU8YRdCUHAWUV1+FlxtjRZmepgWb4SfFneLpRV8j6kXe5CqFXyPqRZ3i6UXb4OeFmV2lRdWZYYWQk10 - FzE2YxYcH1EXCw9DFQgIPRQMDD8XExNDFhoaRhcaGkQYGBhAFRUZPRYWFjoXFxc3FBQZNBUVFTEXFxct - ExMZKRUVFSQYGBggExMTGxcXFxYODg4SEhISDgAAGgoAAAAHAAAABQAAAAMAAAACAAAAAQAAAAEAAAAB - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAABAAAAAQAAAAEAAAACAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAIAAAaChcXFwsUFBQN - EBAQEA4ODhINDRoUFhYWFxQUFBkSEhIcGBgYIBYWFiMUFBQmEhIYKhYWFi8UGRkzFhsbORYWGjsYDg42 - EwoKNRUMED4XKS5YF0xafBZ1iqQWmrXHF7XU4RbI6fMX1ff+Gdz+/xnf//8b4f//G+P//xzk//8c5P// - HOT//xvl//8a5f//GuX//xnm//8Y5f//F+T//xff//8V1PX7FsHg6xamwNEWfJCtFk1YghYhJl0VCwtI - FgsLRhcUF00XGh1PFxcbTBUVGUgWFhpFFxcXQhQUGD8WFho7FxcXNxQUGjIXFxctFBQUJxcXFyISEhId - FhYWFw4ODhISEhIOFxcXCwAAAAgAAAAGAAAABQAAAAQAAAADAAAAAgAAAAIAAAABAAAAAQAAAAEAAAAB - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAADAAAABAAAAAYAAAAH - AAAACRcXFwsUFBQNEBAQEA4ODhINDRoUFhYWFxQUFBkSEhIcEBAZHxcXFyEVFRUkFBQUJxISGCoXFxct - FRUVMBMTGDUWGho7GBgbQRQQFD8WCQk6FhIWRhU6Q24WdYqlF6bD1BjL7fYZ3v//HOP//x/g//8i2/3/ - Jdj4/yjV9f8p1PP+K9Py/S3R8fwu0fH8LtHx/C7S8fws0vH8K9Py/CvT8vwo0/L8JtPy/CTT8/wi1fT9 - INf1/h7a+P8c3v3/GuP//xjn//8X4v//Fcjo8RaYsccWWGWOFhwiWxUHB0oWEBBQGBsbVRYZHFIXFxdO - FxcXTBUVGUgWFhpFGBgYQBUVGjwXFxc3FBQaMhcXFy0TExooFxcXIhISEh0UFBQZDAwYFQ8PDxEREREP - FRUVDAAAGgoAAAAIAAAABgAAAAUAAAAEAAAAAwAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAQAAAAIAAAADAAAABQAAAAgAABoKFRUVDBEREQ8PDw8RDQ0aFBcXFxYUFBQZExMTGxERGh4YGBgg - FhYWIxUVFSUUFBQnExMZKRcXFywWFhYuFRUVMRQUGTMWFhs5FRkdPhYNDToWCQk7FyUtWhZoe5oVrszc - F9f5/hzi//8h3f7/Jtf3/yvS8f0x0PD8M9Hw/TXS8f030vL+OdLy/znS8v850vL/OdHy/zjR8v830vL/ - N9Pz/zbT8/811PP/NdX0/zPV9P8z1vT/Mdb1/y/X9f8u1/X/K9f1/inX9f4l1fT9ItXz/B/W9f4d3Pz/ - GeT//hjk//8XwuHsFnuOrhgtNmwXCgpOFw0NTxgYG1YYGxtWFhkZUhcXF04YGBhLFhYZRxcXF0MVFRk+ - FhYWOhgYGDYUFBoyFhYWLhMTGSkVFRUlFxcXIhERGh4TExMbFhYWFw0NGhQQEBAQFBQUDQAAGgoAAAAH - AAAABgAAAAUAAAAEAAAAAwAAAAMAAAACAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAUAAAAJFRUVDBEREQ8ODg4S - DQ0aFBYWFhcUFBQZExMTGxERGh4YGBggFxcXIhUVFSQUFBQmExMaKBISGCoXFxcsFhYWLhUVFTAUGRkz - FxcbOBUQEDEUCgoyFzZAZBeGn7UYyev1G+D//yLb/P8o0/P+Mc/w/DbR8f060vL+PdLy/z7R8f89z/D/ - PM7w/zrM7/85yu//N8nv/zXI7/8zx+7/Msbu/zHH7/8wyO//L8jv/y/K8P8uyvD/Lsvx/y7M8f8vzvL/ - L9Dz/y/S8/8v0/T/L9X1/y/V9f8t1vX/K9f1/yjW9f4k1fP8IdX0/R7d/P8a5v//GNPy+BaSq8MWRFB/ - FRISVBcKB0wWEhJTGBgbVhUYG1QWFhpQFxcXTBUVGUgWFhpFFxcXQhUVGT4WFho7FxcXNxQUGTQVFRUx - FxcXLRISGCoUFBQmFxcXIRMTExsXFxcWDw8PERISEg4XFxcLAAAACQAAAAgAAAAHAAAABgAAAAQAAAAD - AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAEAAAADAAAABQAAAAkUFBQNEBAQEA0NGhQXFxcWFBQUGRMTExsSEhIdEBAZHxcXFyEWFhYj - FRUVJRQUFCcTExkpGBgYKxcXFywWFhYuFBkeMxYQFi8UBwcmGDM8VRaQq7wY0/f8Ht7//yfU9v8xzu/8 - ONHw/T7S8f9B0fH/QM/w/z7L7/87yO7/N8Xs/zPB6/8vver/K7vp/ye46f8ktun/IbTo/x+z6f8ds+n/ - HLPp/xu16v8btur/Grfr/xu56/8bu+z/HL3t/x2/7v8fwu//IsTw/yPG8f8lyfH/KMvy/yrO8/8r0PP/ - LNL0/yzU9f8r1vX/KNX0/iXS8/wh2Pn+HeT//xne/f8Xr8zbFmN0mBckLGIVCgpKFQsLSBcTE08WGRxS - FxoaTxgYGEsVFRlIFhYaRhcXF0MYGBhAFRUZPRYWFjoXFxc3FBQZMxYWFi8TExkpFxcXIhMTExsXFxcW - Dw8PEREREQ8VFRUMFxcXCwAAAAkAAAAIAAAABgAAAAQAAAADAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAEAAAABgAAAAkVFRUM - EBAQEA0NDRMXFxcWFBQUGRISEhwRERoeGBgYIBYWFiMVFRUlFBQUJxMTGigSEhgqFhYcLhUVGzAXCAgh - FSElPhV/macYz/X6INz//ynQ8v42ze78PdHw/kLR8P9Cze//P8nt/zrE6/80vur/Lbno/ya05/8gr+X/ - HKzk/xip5P8Wp+T/FKfk/xOm5P8SpuT/Eqfk/xKn5f8RqOX/Eanm/xGq5v8Rq+f/Eazo/xGu6P8RsOn/ - EbLq/xGz6/8Stez/E7jt/xW77v8Xve7/GcDv/xzD8P8fxvH/Isny/yXM8v8n0PP/KdL0/yjT9P4m0vL9 - I9X1/h/f/v8b4///F8vr8xaWr8IXV2aHFyMpWBUICD4UDAxAFRUVSBUYHEkXFxpEGBgYQRQUGD8VFRo8 - FhYWORgYGDYUFBoyFhYWLhMTGigXFxchFBQUGg0NGhQQEBAQEhISDhUVFQwAABoKAAAACQAAAAcAAAAF - AAAABAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAQAAAAIAAAACAAAABAAAAAYAAAAJFRUVDBAQEBANDQ0TFxcXFhQUFBkSEhIc - EBAZHxcXFyIVFRUkFBQUJhcXHSwVDg4lFwgPIRddbXwYwuXuH9z//yrP8v04zO78QtDv/0TO7/9Cyu3/ - PMPq/zS86P8qtOb/Ia3k/xuo4v8WpOH/FKPg/xOi4P8SouL/EqLi/xKi4v8So+L/EqTj/xGk4/8RpeT/ - Eabl/xGn5f8RqOb/EKjm/xCp5/8Rqef/Earo/xGr6f8QrOn/EK3q/xCv6v8QsOr/ELHr/xCz7P8Qte3/ - Ebft/xK57f8UvO7/Fr/u/xnD8P8cxvH/IMry/yPN8v8l0PP/JdHy/STR8vwg2Pn/HOL//xnh//8Vyuvw - FY6mtB9NWWohISY2EwYGKRMTEzUXFxw3FBQaMhYWFi8XFxcsEhIYKhQUFCYXFxciEhISHRUVFRgNDQ0T - EhISDhcXFwsAAAAJAAAACAAAAAYAAAAFAAAABAAAAAMAAAACAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAB - AAAAAgAAAAQAAAAGAAAACBcXFwsSEhIODw8PEQ0NGhQWFhYXFBQUGhERGh4WFhYjDQAAExMmKzUXlrW9 - HNv//yfR9f43yuz8Qc7v/kbM7v9Bxuv/OL7o/y605f8jq+L/G6Xg/xah3/8Tn97/E5/f/xOg3/8ToeD/ - E6Lh/xOi4f8SouL/EqPj/xKk5P8RpeT/Eabl/xGn5f8Rp+b/Eafn/xCo5/8Qqef/EKrn/xCq6P8Qquj/ - EKvo/xCr6P8QrOr/EK3q/xCu6v8Qr+v/ELDr/xCx6/8Qsuz/ELPs/xC07f8Qtu3/Ebjt/xK67v8Tvu7/ - FsHw/xnF8P8dyfL/IM3z/yHP8/4hz/H8HtLy/RzZ+v8X4///Kd79/za41tEcZHRuEBkZHxEAAA8REREe - ERoaHhQUFBkWFhYXDAwYFQ4ODhIREREPFRUVDAAAAAkAAAAHAAAABQAAAAQAAAADAAAAAgAAAAIAAAAC - AAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAACAAAABAAAAAUAAAAI - AAAaChUVFQwQEBAQDg4OEgAAAAEVUWFfGcPq7iPX/v80ye38QMzt/kbL7f9Cxer/Nrrm/ymv4v8epeD/ - F5/e/xSd3f8Tnd3/E57e/xOe3/8Tn+D/E6Hh/xOi4f8So+L/EqTj/xGl5P8RpuX/Eabm/xGn5v8QqOb/ - EKjn/xCo5/8PqOf/D6no/w+q6P8Pquj/D6vp/w+r6f8PrOn/D6zp/w+t6f8Prer/D67q/w+v6v8Pr+v/ - D7Dr/xCw6/8Qsez/ELLs/xCy7P8Qs+z/ELTs/xG17f8Rt+z/Ebvt/xK97v8VwfD/GMXx/xvJ8v8dzfP/ - HdDz/hvP8fwg1fT+Ntn6/ivj//8Vvt7YFWV9YgAAAAcAAAABFBQUDQAAHAkAAAAHAAAABgAAAAUAAAAE - AAAAAwAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAIAAAADAAAABwAAAAQAAAACFHuViR3W//8r0PT+ - Pcnr/EbM7f9Dxer/N7nm/ymt4f8cot7/Fpzc/xOb3P8TnNz/FJ3d/xOe3v8Tnt//E6Dh/xOh4v8So+L/ - EaTj/xGl5P8RpuX/Eafl/xGn5v8QqOf/EKnn/w+q5/8Pquj/D6rp/w6q6f8Oq+n/Dqzp/w6s6v8Orer/ - Dq7r/w6u6/8Oruv/Dq7r/w6u6/8Or+v/DrDr/w6x6/8Osez/D7Hr/w+x6/8Psez/ELLs/xCy7P8Qsuz/ - ELPt/xCz7P8Rtez/Ebbs/xG47f8Ru+7/E7/v/xXC8P8XxvH/Gcry/xjO9P8o0vP9N87w/Rvd/P4V4/// - FrreyBNTazcAAAAAAAAABAAAAAQAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAQAAAAQAAAAAEhIkDhedv7Qi2v//Ncnt+0TL7P1FyOv/Orvm/yqt4f8dod3/Fpvb/xSa2/8Umtv/ - FJzc/xOd3v8Tn9//E6Dg/xOi4f8So+L/EaTj/xGm5P8Rp+X/Eajm/xCo5/8Qqej/D6ro/w+r6f8PrOr/ - D63r/w+t6/8Orez/Dq7s/w6u7P8Or+z/Dq/s/w6w7f8Ose3/DbHt/w6x7f8Ose3/DrHt/w6x7v8Osu7/ - DrLu/w6y7f8Osu3/DrLt/w6y7P8Os+z/D7Ls/w+y7P8Qsuz/ELPt/xCz7P8Qs+z/EbTr/xG17P8Rt+z/ - Ebrt/xK97v8Uwe//FMTw/xrL8v82zfL/JdHz/RPP8vwW3Pv/FOH//BWfwpIAM00KAAAAAAAAAAQAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAABJYex0Xtd7PKNb9/zzK6/pGy+z+ - QcHo/zCx4v8go93/F5va/xSZ2v8Umdv/FJvc/xSd3f8Un9//E6Dg/xOi4f8SpOP/EaXk/xGm5v8QqOf/ - EKnn/xCq6f8PrOn/D63q/w+u6/8Or+z/DrDt/w6x7v8Ose7/DbLv/w2x7/8Nse//DbLv/w2y7/8Nsu// - DLLv/wyz7/8NtO//DbTv/w207/8NtO//DbPv/w2z7/8Ns+//DbTv/w607/8Os+//DrPv/w607v8OtO7/ - DrPt/w+z7P8Ps+3/ELPt/xCz7f8Qs+z/ELPs/xGz6/8Rtez/Ebfs/xK57f8Tve3/FMLv/y/I8P8sy/L/ - Fc70/xXO8/wV0fP8FuD+/xXW/tMQndkvAAAAAABAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABVAwAAAAAOn90lGc3+3S7S9f9Byuv7R8ns/zq65f8nqN//Gp3b/xWZ2v8Umdr/FJrb/xSc3f8Un9// - E6Hh/xKj4/8SpeT/Eabl/xCo5/8Qqej/EKvp/w+s6v8Pruv/Dq/s/w6w7f8Ose7/DrLv/w6z7/8Ns/D/ - DbTw/w208P8MtfH/DLTx/wy18f8MtfL/DLXx/wy18f8MtfL/DLby/wy38v8Mt/H/DLfx/wy38f8Mt/H/ - DLbw/wy28P8NtfD/DbXw/w218P8NtfD/DrTw/w607/8OtO//DrTu/w607f8PtO3/D7Pt/xCz7P8Qsuz/ - ELPs/xGz6/8RtOv/EbTs/xK37P8Ruez/KcLu/zDG8P8VxvH/Fcnz/xXO9P4VzvP7FtX0/xbX+fYUtfFa - AAAAAACAvwQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAE6bmKBrE7uIzze7/Rcvs+0XF6v8zs+P/ - IKHc/xeZ2f8Vmdn/FZnb/xSb3f8Un9//E6Lh/xKk5P8SpuX/Eajm/xCp6P8Qq+r/EKzr/w+t7P8Pr+z/ - DrHt/w6y7v8Os+//DrPw/w208P8NtfD/DbXx/wy28f8Mt/L/DLfy/wy38v8Mt/P/DLfz/wy48/8MuPP/ - DLj0/wy48/8MufP/DLnz/wy58/8MufP/DLnz/wy48v8MuPL/DLjy/wy38v8MuPL/DLfx/wy38f8NtvD/ - DbXw/w218P8Ote//DrTv/w617v8OtO7/D7Tt/w+z7f8Ps+z/ELLs/xGz6/8Rs+v/EbPr/xC06/8jvO3/ - MsLt/xe/7v8Uwe//Fcfx/xbL8/8VzvT8FdT1/RbY9f8Ut+d/AAAAAABVqgMAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoD - AAAAAA+W2iIbw+3gNNDx/0fM7vxCw+n/LK7h/xye2v8WmNn/FZna/xWa3P8Unt//E6Hh/xKk4/8SpuX/ - Eqjn/xGp6P8Qq+r/EKzr/w+u7P8Pr+z/DrHt/w6y7v8Osu//DrPw/w208P8NtPD/DbXx/wy28f8Mt/L/ - DLfz/wy58/8MufP/DLnz/wy69P8MuvT/DLn0/wy59P8LufT/C7n0/wu69P8MuvT/DLr0/wy69P8MuvT/ - DLr0/wy68/8MuvP/DLnz/wy68/8MufL/DLny/wy48v8NuPH/Dbfx/w238P8OtvD/DrXv/w617/8Ote7/ - D7Xu/w+07f8Ps+z/ELPs/xCz7P8Rsuv/D7Pr/x247P8zv+3/Gbrs/xO67P8Vv+7/FcTw/xXK8v8VzfP9 - FdH1+xbb+f8Vu+uPAAAAAACAgAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAMktsVGsHt1jbR8v9GzO77PsHo/yiq3/8am9n/ - FpjY/xWZ2/8VnN7/E6Dg/xOj4v8SpeX/Eqfn/xGp6P8Rqun/EKvq/xCs6/8Prev/Dq/s/w6x7f8Ose// - DrLv/w2z7/8Ns/D/DLTw/wy28f8Mt/L/DLjz/wy48/8MufT/DLr0/wy69P8LufT/C7r0/wu69P8LuvT/ - C7r1/wu69f8Lu/X/C7v1/wu79f8Lu/X/C7v1/wu69f8LuvT/DLr0/wy69P8MuvT/C7r0/wy68/8MuvP/ - DLrz/w258/8NufL/Dbnx/w248P8Nt/D/Drbw/w627/8Ote//D7Xu/w+07f8PtO3/ELPs/xCz7P8Qsuv/ - Gbbs/zO+7P8bt+v/ErXq/xS57P8Vve3/FcLv/xXH8f8VzPP+FdD1+hfa+f8Wve2aAAAAAACAgAIAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAB - AGbMBRi8670z0vL/Rs3u+z3A6P8mqN//GZrZ/xaY2P8Vmdv/FZ3e/xOg4f8To+P/Eqbl/xKo5/8Rqef/ - Earp/xCr6v8Qruz/DrHt/w6z7v8NtO//DbTw/w208P8NtvH/DLjy/wy68/8MvPX/DLz1/wy68/8MuvP/ - DLrz/wy79P8Mu/T/C7z1/wu89f8LvPX/C731/wu89f8LvfX/C731/wu99f8LvfX/C731/wu99f8LvfX/ - C7z1/wu99f8LvfX/C7z1/wu89f8Lu/X/C7v0/wy79P8Mu/T/DLr0/wy68/8MuvP/Dbny/w258f8NufD/ - Dbjw/w637/8Otu//D7Xu/w+07f8PtO3/ELTt/w+z7P8Utez/Mb7s/yC47P8Qsur/E7Xq/xS36/8Vu+z/ - FcDu/xbG8P8WzPP/Fc/1+hfa+f8Vu+yTAAAAAABVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWqAwAAAAAXs+eTMNPz/0XO7vs8wOj/JKjf/xiZ2f8WmNj/ - FZrb/xSd3/8ToeH/E6Tj/xKm5f8Sp+f/Eajn/xCq6f8Pruz/D6/s/w+r6f8Qo+L/Epra/xST1P8VjtD/ - FovN/xWLzv8Uj9D/E5bX/xGh3/8OsOr/Dbzz/wzC+P8Mwfb/DL71/wy+9f8Mv/X/DL/1/wu/9f8Mv/X/ - DL/2/wvA9/8LwPf/C8D3/wvA9/8LwPf/C7/3/wu/9/8Lv/b/C772/wu+9v8LvvX/C771/wu+9f8LvvX/ - C731/wy89P8Mu/T/DLv0/wy79P8Mu/P/DLry/wy68f8NufH/Dbnw/w648P8Ot/D/Drbv/w+17v8Pte3/ - ELTt/xC07P8tve3/Jbrs/xCy6v8Ssun/ErPq/xO16/8Vuuv/Fb7t/xbF8P8WyvP/Fs71+xfZ+P8VueqD - AAAAAACAvwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA - FKLfWCjR8/9Dz/D8PMPq/yOq4P8Ymdn/FpfY/xWa2/8Und//E6Hh/xOk4/8SpeX/Eqfm/xKo5/8QrOr/ - D6zq/xCi4f8Vk9T/HIjJ/yOCxP8mgcH/KIPA/ymEwP8phL//KYG+/yZ8u/8keLn/IXa5/x55vf8ahcb/ - FJvY/w+27P8Mx/j/DMn5/w3F9v8Nxff/Dcb3/wzH+P8Mxvj/DMb4/wzG9/8Mxff/DMX3/wzE9/8MxPf/ - DMT3/wzC9/8Mwvf/DMH3/wzB9/8LwPf/C7/2/wu/9f8Lv/X/C771/wu+9f8MvfT/DLz0/wy89P8MvPP/ - DLvz/wy78v8NuvH/Drrx/w658f8Ot/D/Drbv/w617v8Pte3/DrXt/ye87f8ou+z/ELLq/xKy6v8Ssun/ - ErLq/xS16v8Uuev/Fb7t/xbE8P8VyvP+Fs70+xfY+P8WsOdqAAAAAACAvwQAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABKEyh0fxu3nPNPy/zzG6/4kreH/GJvZ/xeX2P8Vmdr/ - FZze/xOg4f8To+P/EqXl/xKm5v8Rquf/EKvp/xGh4P8YkND/JYrI/y+Syv8zodD/NbDX/zW73P8zweD/ - LsDi/yq74f8nsd7/I6XZ/yOg1v8jmdH/I4/L/yGEwv8fe7z/Hn2//xeSz/8Rt+n/Ds/5/w7P+f8Ozfj/ - Dc34/w3N+P8NzPn/Dcz4/w3M+P8NzPj/Dcv4/w3L+P8Nyvj/Dcn4/w3I+P8Mx/j/DMb3/wzF9/8MxPf/ - DMP3/wzB9v8MwPb/DMD1/wy/9f8Mv/X/DL70/wy99P8NvfT/Dbzz/w278v8Nu/H/Dbrx/w268f8OufD/ - Drjv/w+27/8Nte7/JLzu/yq97f8QtOv/EbLr/xKy6v8Ssun/ErLp/xS06v8UuOr/Fb7t/xbE8P8VyvL+ - FtH1/RbW9/wWqeJHAAAAAABVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA - Fq/jojHW9f88ye37JrPk/xee2/8Wl9j/FpjZ/xWb3v8UoOH/E6Lj/xOk5P8SpuX/Earo/xCo5v8Vldb/ - I4zJ/zKcz/82t9z/Nszm/zLX7f8q2PD/INXz/xjQ9P8TzfX/Esz2/xLO9/8Sz/f/FM72/xXL9P8ZxfD/ - JL7p/yGu3/8amtL/HYnH/x2Fxf8Wn9f/Ecnz/xHV+v8R0vn/ENP5/xDS+f8Q0vn/D9H5/w/R+f8P0fn/ - D9D5/w7Q+f8Oz/n/Ds75/w3N+f8NzPn/Dcv4/w3J+P8NyPj/DMj3/w3G9/8MxPf/DML2/wzC9v8Mwfb/ - DMD1/wy+9P8MvvT/Db3z/w288/8Nu/H/Dbvx/w678f8OuvD/Drnw/w247/8jvu//Kr7u/w+17f8Rs+v/ - EbLr/xKy6v8Ssun/E7Lp/xS06f8VuOr/Fr3s/xbF8P8Wy/L9F9L2/xfQ9OoVn90lAAAAAACAgAIAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABKV1Ugi0PT/Nc3w/Sm66P8Yot7/FpnY/xaY2P8Vmtz/ - FJ7g/xOi4v8TpOP/Eabl/xGq6P8RpeT/GZLR/yuTy/8zstr/MtHp/y3b8P8i1/P/GNH1/xLN9v8Qzvf/ - EdH3/xPT+P8T1fj/FNX4/xTW+P8U1/j/FNf5/xTY+f8b2vn/Ltr3/zfP8P8juOX/F6HY/x2Uzv8bndT/ - FcXu/xTZ+v8U1/n/FNf5/xTW+f8T1vn/E9b5/xLV+f8S1fn/EtX5/xHU+f8R0/n/ENP5/xDS+f8P0fn/ - Ds/5/w7O+P8Ozfj/Dcz4/w3L+P8Nyvf/Dcf2/w3E9v8NxPb/DML1/w3A9f8Nv/T/Db70/w298/8NvPL/ - Dbzy/w678f8Ou/D/Dbnw/yO+7/8ovu//D7bt/xC07P8Rs+v/EbLr/xKy6f8Ssun/E7Hp/xS06f8Vuer/ - Fr7t/xfF8P8WyvL8F9X2/xbI8ccAgL8IAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAgIAC - F7vqyinR8/8pwOv9Gqrh/xab2v8Xl9j/FZna/xWd3/8ToeL/E6Pj/xKl5P8Squj/EaXj/xuRz/8sl87/ - MMDh/y3b7/8j2PP/FtD1/xLO9v8S0ff/FNT3/xXW+P8W1/j/Ftj4/xbY+P8W2Pj/Ftn5/xbZ+f8W2fn/ - Ftn5/xTZ+f8U2vn/KN/6/0rk+P8/zu7/Gq3e/xme1P8cp9r/Fs/z/xbb+v8W2fn/Ftn5/xXZ+f8V2fn/ - Fdn5/xXY+f8V2Pn/FNf5/xTX+f8U1vn/E9b5/xPW+f8S1fn/EdT5/xDS+f8P0fn/D8/4/w7P+P8Ozvj/ - Dsv3/w3J9/8NyPb/Dcb2/w3D9f8NwvX/DcD1/w2/9P8NvvP/Dr3y/w688f8NvPH/J8Dw/yW/7/8Otu3/ - ELXt/xC06/8Ss+v/ErLr/xOx6f8Tsen/FLLp/xS16f8Wuev/Fr/t/xfH8f8Wy/P7F9f4/xW5648AAAAA - AFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABSY11kZz/X/IMPu/Byy5v8Wod3/FpjY/xaY2f8Vm93/ - FJ/h/xOi4/8TpeP/Eqnn/xGp5v8blNL/K5jP/y3F5P8q3vL/G9L0/xLN9v8T0vf/FdX4/xbX+P8W2Pj/ - Ftn4/xbZ+f8W2vn/Ftr5/xfa+f8X2vn/F9r5/xfa+f8X2vn/F9r5/xfa+f8T2fn/GNv5/0jn+v9b4fT/ - Kbfh/xae1f8brN7/F9L0/xfc+v8W2vn/Ftr5/xba+f8W2vn/Ftr5/xba+f8W2vn/Ftn5/xXZ+f8V2fn/ - Fdn5/xXY+f8V1/n/FNf5/xPW+f8T1fn/EdP5/xDT+P8P0fj/Ds/3/w7N9/8OzPf/Dsr3/w7I9v8Oxvb/ - DsP1/w7B9P8OwPP/Dr7y/w6+8v8rwvH/IL/w/w257/8Qt+7/ELXt/xG07P8Ss+z/ErLq/xOx6f8Tsen/ - FLLp/xW26f8Wuuv/FsHu/xfJ8v8Wz/T9F9b3/xSo5EwAAAAAAFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA - FLbnvRfN9P8XuOr8F6nh/xac2v8XmNj/FZnb/xWd4P8ToeL/E6Tj/xKn5v8Rq+j/F5vY/yiVz/8sxub/ - KN/0/xbP9f8T0Pb/FdX3/xbX+P8W2Pj/Ftn5/xba+f8X2vn/F9r5/xfa+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xjb+f8X2/n/ENn5/zjk+v9s7Pj/O8Ll/xeb1P8asOD/F9j3/xfc+f8X2/n/ - F9v5/xfb+f8X2/n/F9r5/xfa+f8W2vn/Ftr5/xba+f8W2vn/Ftr5/xXZ+f8V2fn/Fdn5/xXY+f8U2Pn/ - FNb5/xPW+f8S1Pn/EdP3/xHR9/8Q0Pf/D873/w7M9/8Oyvf/Dsf2/w7F9f8NwvT/EsPz/y/G8f8awfL/ - Dbvw/xC67/8QuO7/ELbt/xG17P8StOv/ErLp/xOx6f8Usen/FLPp/xa36v8WvOz/F8Pw/xbK8v0X0/b/ - F8703g6c1RIAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAAAAABSN0CYVyPL3F8Xw/xaz5/4Wo9//FprZ/xaZ2f8Vm93/ - FJ/h/xOj4/8SpeT/Eavp/xOm4f8ik8//K73i/yng9f8Wz/X/FNL3/xbW+P8W2Pj/Ftn4/xfZ+f8Y2fn/ - GNr5/xfa+f8X2vn/F9r5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Z2/n/ - ENn5/zHh+f9y8Pn/QsPl/xaa0/8Zv+j/F936/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfa+f8X2vn/Ftr5/xba+f8W2vn/Ftr5/xba+f8W2fn/Ftn5/xXY+f8U1/n/FNb4/xPV+P8S0/f/ - EdH3/xDP9/8Qzff/D8v3/w3I9f8ayfX/MMjy/xTD8/8OvvH/D73w/xC77/8Que7/ELbs/xG16/8Ss+r/ - ErLp/xOx6f8Usun/FbTp/xa56v8Wv+7/F8bx/xXL8/sX1/j/FbfqhwAAAAAAVaoDAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAvwQAAAAA - E57YaRXP9f8Wvu38F67k/xaf3P8Wmdj/FZna/xSd3/8ToeL/EqTk/xKo5/8Rrun/GpnV/yer2v8q3/P/ - GNH1/xTS9/8W1/j/Ftn4/xbb+f8X3Pr/F937/xfe+/8X3vv/F977/xfe+/8X3vv/F936/xfc+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Z2/n/ENn5/zHh+f917/j/Pbvh/xWh1/8Y0vT/ - F936/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfa+f8X2vn/ - Ftr5/xba+f8W2vn/Ftr5/xba+f8W2fn/Fdj4/xXX+P8U1vj/E9X4/xPT9/8S0ff/EM/3/yXP9f8ty/P/ - EMf1/w/D8/8PwPL/EL3w/xC87/8Quu7/Ebfs/xG16/8StOn/ErLp/xOy6f8Vsun/FbXp/xa76/8Xwu// - Fcny/hfQ9f8X0fb0E5/fKAAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWqAwAAAAAUruKmFs31/xa46vwWqeL/Fpza/xWZ2f8Vm9z/ - FJ/g/xOj4/8SpuX/Eq7q/xSp5P8emtP/KtTu/x3Y9v8U0fb/Ftj4/xbb+f8X2/r/GNX2/xnM8f8ZxOv/ - Gb/o/xm85/8Zvef/GcDp/xjG7f8YzvH/F9j3/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8Z2/n/ENn5/0Ll+f906vb/KanZ/xS45f8Y3vr/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/GNv5/xjb+f8Y2/n/F9v5/xfa+f8W2vn/Ftr5/xba+f8W2vn/ - Ftr5/xbZ+f8V2Pj/FNb4/xTV+P8V1fj/MdH1/yfQ9v8Pzfb/EMn1/xDG9P8QwvL/EL/x/xC98P8Ruu7/ - Ebfs/xK16/8StOr/ErLp/xSy6f8UtOn/Frfq/xa+7f8XxfD/Fsrz+xfX+P8WvOuZAAAAAABVqgMAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA - AAAAARW76dIXyfL/FrTo/Ral3/8Wm9n/FZrZ/xWc3v8ToeL/E6Xk/xKp5/8StOz/FJ7b/yO24P8l3/b/ - FND2/xbZ+f8W1/f/Gcnv/x234/8dqNn/Hp7T/x6Yz/8dlc3/HJTN/xyVzv8bmND/Gp3T/xmj2P8YwOn/ - F9z5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/FNr5/13t+v9d0ur/ - FqXZ/xfV9v8X3Pr/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/GNv5/xvb+f8e3Pn/ - Hdz5/xzb+f8b2/n/Gtv5/xrb+f8Y2/n/GNr5/xfa+f8W2vn/Ftr5/xba+f8W2fn/Fdj4/x3Z+P830/T/ - H9b3/xLR9/8Tz/b/Esv1/xHI9P8RxPL/EMHx/xC+8P8RvO7/Ebjt/xK26/8StOr/E7Pp/xOz6f8Vtun/ - Frvs/xfC7/8VyfL+F9H1/xbQ9PERmd0eAAAAAACAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAANgMwUFMPv7RfF8P8Wsuf+FqLe/xab2f8Vmtv/ - FJ/g/xOj4/8Tp+X/Eq/p/xKz6v8Wntn/J9Pu/xjW9/8V1vj/Gczw/x6z4P8hodX/IZrQ/x+b0P8eoNX/ - HKnb/xuz4f8Zvef/GMXs/xjL8P8Y0PP/F9P0/xfW9v8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xjb+f8T2vn/J9/5/3Hr9/8wr9z/E8Ps/xje+/8X2vn/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/Idz5/yje+f8o3vn/Jt35/yTd+f8i3fn/INz5/x/c+f8d3Pn/ - HNv5/xrb+f8Z2vn/F9r5/xba+f8V2vn/KNr4/zXV9f8Z2vn/FNb4/xTU9/8U0fb/E872/xLL9f8Rx/P/ - EcPy/xHA7/8Rve7/Errt/xO36/8Tter/E7Pp/xS26f8Wuev/F7/t/xbG8P8VzPP7F9f4/xey6G0AAAAA - AIC/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAC - AAAAABKMzioUx/D9F8Lu/xav5f4WoNz/FprZ/xWb3f8ToOH/E6Xk/xKq5v8Stez/ErDn/x2y4f8g2/b/ - FdL3/xzA6f8iptj/I57S/yCm1/8ds+D/GsPq/xjP8v8X1/f/F9z6/xfe+/8X3vv/F976/xfd+v8X3fr/ - F9z6/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8R2fn/ - Vev6/1XL5/8SteP/GN77/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8k3fn/ - MeD5/zLg+v8x4Pr/Lt/5/y3f+f8r3/n/Kd75/yfe+f8m3fn/JN35/x/c+f8Z2/n/F9r5/xjc+v8y1/b/ - Ldn3/xXb+P8W2Pj/Fdf4/xXW+P8U1Pf/FNH2/xTN9f8SyvT/Esby/xLC8P8Svu//E7vt/xO46/8Utur/ - FLbp/xa46v8Wve3/FsPv/xXJ8vwX1vf/F8HusQAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqqqgMAAAAAXLjiPQfB7/8ZwO3+F6zk/xaf3P8Wm9r/ - FZ3e/xOi4v8Tp+X/Eq3o/xK67v8TsOX/Icfq/xnW9/8eueX/JKHU/yKm2P8dvOX/GdDz/xfb+f8X3vr/ - F936/xfc+f8X2/n/F9r5/xfa+f8X2vn/F9r5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/GNv5/xLZ+f8w4/r/aeDx/x2z4f8W2fj/F9z5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/GNv5/yLd+f814Pn/O+H6/znh+v844fr/NuH6/zXg+v804Pr/ - MuD6/zDg+v8u3/n/Jt35/xvb+f8W2/n/IN35/zjW9f8j3Pn/Fdr5/xba+P8W2fj/Ftj4/xXX+P8U1ff/ - FNP2/xTP9v8UzPT/FMnz/xTE8f8UwO//FL3u/xS67P8Uuev/Frnr/xa87P8Wwu//Fcny/RrU9v8IxfDg - gL/fCAAAAAAAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - qqr/AwAAAABqv+ZIBcHv/xm97f0WquP/Fp7c/xWb2/8Un9//E6Tj/xOp5v8Ssur/Er3v/xa46P8e0PH/ - H7vm/yWj1f8fs+H/Gs7x/xfc+v8X3fr/F9v5/xfa+f8X2vn/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - Ftv5/xjc+f9j6ff/Mbzj/xLS9f8Y3fr/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - Hdz5/zLg+f9B4/r/QeP6/0Dj+v8/4/r/PeL6/zzi+v864fr/OeH6/zfh+v8r3/n/G9v5/xbb+f8q2/j/ - Ndf2/xvd+v8X2vn/F9r5/xba+f8W2vj/Ftn4/xbY+P8V1vj/FdT3/xTS9v8Vz/X/Fcv0/xXH8v8Vw/D/ - FL/u/xW97f8WvOz/Fr3t/xbC7/8VyPL+GtL2/wbI8fOh2ewbAAAAAICA/wIAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqqv8DAAAAAGnC5lAGv+7/G7fo/Ben4f8Vntv/ - FZzc/xOg4P8TpuT/Eqzo/xK27P8TwPD/F8Pt/yDA6P8ip9j/IMDo/x/a9/8W3Pr/F9r5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/ENn5/07o+f9Eyej/EM3y/xje+v8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/J975/z/j+f9I5Pr/R+T6/0fk+v9F5Pr/ - ROT6/0Lj+v9B4/r/P+P6/y7f+f8b2/n/Gt36/zXX9v8s2vj/Ftz5/xfb+f8X2/n/GNr5/xfa+f8W2vn/ - Ftr4/xbZ+P8W1/j/Fdb3/xXU9/8W0fb/Fs71/xbK8/8VxvH/FsPv/xbC7v8Wwu//FsXw/xXK8v4b0/b/ - Bsvz+aXa8CIAAAAAgID/AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAKqq/wMAAAAAbMLmUwW+7f8atef8F6bg/xWe2/8Vnt3/E6Lh/xOo5f8Sr+n/Errt/xPE8f8YxO7/ - Ia3d/yvD5/8/5Pb/Idv3/xfY+P8Y2vj/GNr4/xja+P8Y2vn/GNr5/xfa+f8X2vn/F9r4/xfa+P8X2vj/ - F9r4/xja+f8Y2vj/GNr5/xja+f8Y2vj/GNr4/xja+P8Y2vj/GNr4/xja+P8Y2vj/GNr4/xja+P8Y2vj/ - GNr4/xna+P8S2Pn/N+T6/0/S7f8Ry/D/GN76/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8c3Pn/M+D5/0nk+f9N5Pn/TOT5/0zk+f9K5Pn/SeT5/0jk+v9E5Pr/L+D5/xjb+f8i3fn/ - Odb1/yHd+v8W2/n/F9v5/xfb+f8X2/n/GNv5/xja+f8X2vn/Ftr4/xba+P8W2Pj/Ftf4/xbW9/8W0/f/ - FtD2/xbN9P8WyvL/Fsjy/xbI8f8WyvL/Fc30/hzW9v8FyPHxo9brGQAAAAAAAP8BAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqr/AwAAAABqweZSBb/t/xq36fwWp+H/ - FZ7c/xSf3v8To+P/Eqrm/xKy6v8Su+3/FMby/xm+6v8nteD/SeHz/yfY9f8T0/b/GNb2/xfW9/8X1/f/ - GNf3/xjY9/8Y2fj/GNr4/xjb+f8Y3Pr/GNz6/xjc+v8Y3Pr/GNz5/xjb+f8Y2fj/GNj3/xjY9/8X1/f/ - F9f3/xfX9/8X1vf/F9b3/xfW9v8X1vb/F9b3/xfX9/8X1/f/GNj3/xTX+P8l3/n/UNjw/xXL8P8Y3Pn/ - GNr5/xja+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8j3fn/QeP5/1Ll+f9S5fn/ - UeX5/1Dl+f9P5fn/T+X5/0jk+f8t3/n/GNz5/y7a9/802Pb/Gd36/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xjb+f8Y2vn/F9r5/xba+P8X2vn/F9j4/xfX+P8W1vf/FtP2/xbR9f8Wz/T/Fs/0/xfP9f8W0vX9 - HNr4/wbC7tWAgIACAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAACqqv8DAAAAAGu/5EwFvu3/Grjq/Ran4f8Vn93/FJ/f/xOl4/8Sq+f/ErPq/xO77f8UxO// - GLbl/znG5v822fL/Esjx/xjN8v8XzvL/F8/z/xfR9P8X0/X/FtX2/xfU9v8Xz/L/GMft/xnA6f8ZvOf/ - Gb3o/xjA6v8XxOz/F8jv/xfQ8/8X0/X/F9L0/xfR9P8X0fT/F9Dz/xfP8/8Xz/P/F8/z/xfP8/8X0PT/ - F9D0/xbR9P8W0vX/FdL1/xrX9/9K2vL/Gczw/xXZ+P8X2Pj/F9n4/xja+P8Y2vn/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xvb+f804fn/Ueb5/1bm+f9V5vn/Veb5/1Tm+f9U5vn/SeT5/yje+f8c3fr/ - N9b1/ync+P8W2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2vn/GNr5/xja+f8Y2vn/ - GNr5/xjY+P8Y2Pj/F9b3/xjV9/8Y1fb/F9X3/xrV9/sc3fr/A7PomgAAAAD///8DAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqq/wMAAAAAa77kQwW97f8Zuev9 - Fafh/xWg3v8UoeD/E6bk/xKs6P8Ss+r/E7jr/xW86/8ZseL/O8rp/yTH7P8Vvur/F8Lr/xfE7f8Xxu7/ - F8nw/xjG7f8aueX/HKrb/x2c0/8els7/HZbO/xuZ0f8an9X/Gaba/xis3v8Ys+L/F8Lr/xfK8P8Xye// - F8jv/xfH7v8Xxu7/F8bu/xfF7v8Xxe7/F8bu/xbG7/8WyO//Fsjw/xbK8f8Wy/L/Fc7z/z/W8v8czPH/ - FNP2/xbU9v8W1vf/Ftf3/xbY+P8X2fj/F9r5/xja+f8X2/n/F9v5/xfb+f8X2/n/GNv5/yrf+f9O5vn/ - Wuf4/1nn+P9Y5/j/WOf4/1fn+f9G5Pn/Id35/ybc+P841/X/Hd36/xba+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2vn/GNr5/xja+f8Y2fj/Gdn4/xbY+P8f2fj/ - Ldz4/RrY+P8Ent1EAAAAAP///wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAqqqqAwAAAABrvOQ5BLvs/xm76/4VqOL/FaHe/xSi4f8Tp+T/Eq3o/xKx6P8Us+f/ - FrLl/xas4P81xef/H7fk/xWx4/8XteT/F7jm/xe45v8brd7/H53S/yCSy/8flMz/HZ7U/xuq3P8ZtOP/ - GLnm/xe86P8Xvej/F73o/xe86P8Xu+f/GLvn/xe86P8XvOj/F7vo/xe65/8Xuuf/F7rn/xe65/8Wuuj/ - Frvp/xW86f8Vvur/FcDr/xbC7f8TxO7/Ms7v/xzI7/8Ty/L/Fc3z/xXQ9f8V0vb/FdT2/xXW9/8W2Pj/ - Ftn4/xfa+f8X2vn/F9v5/xfb+f8X2/n/Jt75/0zl+P9c5/j/XOf4/1vn+P9b5/j/WOf4/z7i+f8e3vr/ - Mtj3/y/a9/8X3Pn/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8Y2/n/GNr5/xja+f8V2vn/Htv5/zbe9/wk3/r/E8DtuQAAAAAAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIACAAAAAGu44SsDt+v8 - Gbvr/xSp4v4Vod//FKPh/xKo5f8SrOf/E67m/xSs4/8WqeD/FaTc/y+64v8dqdz/FqTb/xeo3f8apdr/ - IZnQ/yOOyP8dj8r/HKDV/xqs3v8Xr+H/F67g/xer3f8XqNv/GKfb/xeo2/8XqNz/F6nd/xiq3v8Yq97/ - GKzf/xet4P8XreD/F6zg/xes4P8XrN//Fqzg/xWt4f8VruL/FLDj/xWy5P8UtOX/FLfn/xK56P8nxOz/ - GsLs/xPC7v8Uxe//FMjx/xTL8/8UzvT/FdD2/xXT9v8V1vf/Fdj4/xbZ+P8W2vn/F9r5/xfa+f8j3fn/ - SOX4/13p+P9e6fj/Xun4/17o+P9W5/j/MuH5/yLe+f841vX/It35/xbb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8W2/n/Ftr5/yXc+f843vj+ - MeD5/xTP9fMWm94uAAAAAICAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAICAgAIAAAAAaLPZGwO06fIave3/FKrj/hSi4P8TpOH/E6jl/xKr5v8TquT/ - FKbf/xah2/8Umtb/Ka3c/x2g1/8VmtX/HJjS/yWNx/8gh8T/HZPO/yWt3P8krdz/GZ7U/xeY0f8Xl9D/ - F5nR/xia0/8Ym9T/F53V/xed1f8Xn9b/GKDX/xeg2P8Xodj/F6HZ/xeh2P8Xodn/F6DZ/xah2f8Wotr/ - FaPb/xWk3P8Upd3/FKfe/xSq4P8UrOL/Eq7j/xq25v8Vt+j/Erjp/xK86/8SwO3/EsPv/xLH8f8TyvP/ - E830/xTQ9f8U0/f/FNX3/xXX+P8W2Pj/Ftr5/x7b+f9C5Pj/Xen3/1/p9/9e6ff/Xun3/07l9/8n4Pn/ - Ldr3/zXX9v8Z3fr/F9r5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8Y2/n/FNr5/x/c+f824Pn/Q+H5/j/i+vwa2Pf/EKXhXQAAAAAAVaoDAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAABbpNsO - A7Dm5hq/7f8Uq+T+FKPh/xOk4v8TqOX/E6nl/xSn4v8Vodz/FpzX/xWV0v8hoNb/HZvT/xqQzf8licX/ - H4XE/yeh1P82ueD/J6LU/xmNyf8YjMn/GI7L/xiQzP8Ykc3/F5LO/xeUz/8XltH/F5fS/xiZ0/8XmtT/ - F5rU/xea1P8XmdP/F5jT/xeZ1P8XmdT/FpnV/xab1v8WnNf/FZ3Y/xSf2f8Uodr/FKPd/xSl3/8TqOD/ - Eqri/xKt5P8SsOb/EbPo/xG36v8Ru+z/EL/u/xDC8P8RxvL/Ecrz/xLN9f8S0Pb/E9P3/xTW+P8V2Pj/ - Gdn5/zjh+P9Z6Pb/X+r3/1/q9/9b6ff/PuP3/yLf+v821/X/Kdz4/xbb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xPa+f8t3vn/S+P6/1Dk+v9M5fr8 - Itz5/w+e2nYAAAAAAFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEEquLSGcHv/xOr5f0UpeL/E6Tj/xOo5f8TqOT/ - FKXg/xWe2v8WmNT/F5PQ/xmU0f8ck8//I4jF/yCGxf81stz/Pb3h/x6Qy/8Wg8P/GIfG/xiJx/8Yisj/ - GIzK/xiPzP8Ykc7/F5PP/xeU0f8XldH/F5XR/xeU0P8Xk9D/F5PQ/xeS0P8Xk9D/F5PQ/xeU0f8WltP/ - FpbU/xWX1f8Vmdb/FZrX/xSd2f8Un9v/FKLc/xOj3v8TpuD/Eqji/xKq4/8RreX/EbHn/xC06f8QuOv/ - ELzt/xC/7/8Pw/H/D8fz/xDK9P8Rzvb/EdH3/xPU+P8U1vj/LN34/1Hn9v9d6fb/Xen2/1Dn9v8r4Pj/ - J9z4/zjW9f8d3fr/Ftr5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8T2vn/POH5/2Dm+v9a5fr/UeX6/ifb+P8Pm9h1AAAAAACAvwQAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C - AAAAAAOk4LwZwvD/FKzl/BSl4v8TpuP/E6jl/xOn5P8Uo9//FZzZ/xaV0/8XkdD/FpDP/x2Nyv8ihML/ - ObPb/0C/4f8Yh8b/FoLC/xmHxf8YiMj/GIvK/xeOzP8XkM7/F5HP/xeRz/8Xkc//F5DP/xeQz/8XkM// - F5DO/xeQzv8XkM7/F5DO/xeQz/8XkdD/F5LR/xaU0v8WldP/FZbU/xWY1f8Umdf/FJvY/xSe2v8ToNz/ - E6Ld/xOj3/8SpeD/Eqfi/xGq5P8Rreb/EK/n/xCy6v8Qtuz/D7rt/w+97/8OwfH/DsTz/w/J9P8PzPb/ - D8/3/xDS+P8e2Pj/ROT3/1rp9v9V6Pb/O+L3/x7e+f8y2Pf/L9r3/xfc+v8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/Etr5/0Ti+f9b5fr/NuH6/yjg+vwf3vr/ - EL7rpAAAAAAAgL8EAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wMAAAAAA53boRnD8P8Ur+f7FKfj/xOm5P8TqOX/ - E6fj/xSi3v8Vm9f/FpXT/xeS0P8XktD/HYjH/zCdz/9FxuT/GY3L/xeHx/8ZjMr/GI3M/xePzf8Xj87/ - F4/O/xePzv8Xj83/F4/N/xeOzf8Xj83/F47N/xePzf8Xjs3/F47N/xePzf8Xj83/F4/O/xeQz/8XkdD/ - FpPS/xaV0/8VldT/FZfV/xSZ1v8Um9n/FJ3a/xOf2/8Todz/EqPe/xKk4P8RpuH/EKjk/xCr5f8Qref/ - D6/o/w+y6/8PtOz/D7nu/w688P8OvvL/DsLz/w7G9f8Oyvb/Ds33/xLS+P8s3Pf/ROT2/zvi9/8g3Pj/ - INz5/zjV9f8h3fn/Ftv5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - GNv5/xLa+f9A4fn/SOP6/xjc+f8T2Pj/FcXx/BW36v8Vu+pWAAAAAACAvwQAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ////BAAAAAAEldiCGcTw/xOx6PsTqOT/E6fk/xOo5f8Tp+P/FKLf/xWc2P8XktH/GYXH/xp5vf8ce77/ - PbXb/zCt2v8TiMr/GZDO/xiOzf8Yjs3/GI7N/xiOzf8Yjs3/GI7N/xiOzf8Yj87/GJDP/xiQz/8YkM7/ - GJDO/xiQzv8YkM7/GI7N/xePzv8Xj87/F5DP/xaS0f8Wk9L/FpXT/xWW1P8VmNb/FJrX/xSb2f8Untr/ - E5/b/xOh3f8So9//EqTg/xGm4f8QqOT/EKrl/w+s5v8Prun/D7Hq/w6z7P8Ote7/Dbjv/w278f8NvvP/ - DcH0/w3F9v8Nyff/Dcz4/xPS+f8d1/j/Gdj5/xLY+v8r1/j/M9f2/xfc+v8W2vn/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8S2vn/NuD6/zzh+f8R2vn/Gtb3/x/D7/8brOX7 - GKjk/xbW9nUAAAAAAL+/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8EAAAAAAON02IZw/D/FLLp/BOq5f8Tp+T/ - E6jl/xOo5P8UoN3/F4vL/xl4vf8acLf/Gna7/xmBw/86tNz/J6DU/xWKy/8Zj83/GI7N/xiOzf8Yjs3/ - GI7N/xiOzf8Yj87/GIzM/xmFxv8ZfsD/Gnm7/xp4u/8aeLz/Gnm9/xl/wf8Yjcz/F4/O/xeQz/8XkdD/ - FpLR/xaU0v8VldT/FZfV/xWZ1v8Umtj/FJzZ/xOe2/8ToNz/E6Le/xKj3/8RpeH/Eabi/xCp5P8QquX/ - D6zn/w+t6f8OsOr/DrLr/w207f8Nt+//Dbrx/wy88/8MvvT/DMH1/wzF9/8MyPj/DMv5/wzO+f8M0fn/ - FNb7/zPT9v8j2Pn/Etn5/xXa+f8W2vn/Ftv5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/ - E9r5/yre+f834Pr/E9r5/yHZ9/8ky/L/H8Dt/xrE7/gWzvT/FLzriQAAAAAAgL8EAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAP///wMAAAAABIPNQhjB7/8Tter9E6vm/xOn5f8SqOb/FKHf/xiHyf8Zdrz/GHu//xmLyv8Yks// - FYzM/zSv2v8jnNL/FovM/xiOzf8Yjs3/GI7N/xiOzf8Yj87/GIvL/xmAwP8acrT/G2qv/xtssf8bcrb/ - Gni7/xp7vv8Ze7//GX3A/xiJyv8Yjcz/F43N/xeQz/8WktH/FpXT/xWW1P8Vl9X/FJnW/xSb2f8Undr/ - E5/b/xOh3P8Tot//EqTg/xGl4f8Rp+P/EKnk/w+r5v8PrOf/Dq7p/w6w6v8Osuz/DbPu/wy27/8MufD/ - DLvy/wy99P8LwPX/C8H3/wvF+P8LyPn/DMv6/wrN+/8d0vn/MdH2/xTX+/8Q1vr/E9j5/xXa+f8W2vn/ - Ftv5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xXb+f8e3Pn/Md/5/xbb+f8l3vj/KNj1/x7R9P4Y1vf7 - FuD8/xK25rkSgMgOAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AgAAAAAAfMglGLzs+RW46/8SrOb+ - E6jl/xOl4/8XjM3/GHvA/xiIyv8dm9b/GZXR/xiQzv8Vi8z/LajX/yGZ0v8Wi8z/GI7N/xiOzf8Yjs3/ - GI7N/xmExf8ac7T/G2uu/xpytf8Zfr//GYbG/xiIyP8YiMf/GIfH/xiHx/8YiMj/GIjI/xiJyf8XjMv/ - F47O/xaR0P8WlNP/FZbU/xWY1v8Umtf/FJvZ/xSe2v8Tn9v/E6Hd/xKj3/8SpOD/Eabh/xCo5P8QquX/ - D6vm/w+t6P8Orun/DrHr/w2y7f8NtO7/DLbv/wy58f8MuvP/DLz0/wu+9f8KwPf/CsL4/wrG+f8KyPr/ - C8z8/yjO+P8i0fn/C9L6/w/U+v8R1vr/E9j5/xXZ+f8W2vn/Ftv5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - GNv5/yje+f8b2/n/L9/4/yzg9/8d2ff+F9z5+xXc+v8Sq+GgAGaZBQAAAAAAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAD///8BAAAAAABqvwwYtunjFbvt/xKr5v0Tqeb/FZrZ/xiBxf8Yi83/KbDg/xyc1v8Wj8// - GJDO/xaMzP8kndP/IJjR/xaMzP8Yjs3/GI7N/xiOzf8Zf7//G26w/xpxs/8ZgMH/GIjI/xiGxv8Yg8P/ - GYHC/xmCwv8Zg8P/GYPF/xiFxv8Yh8j/GIrK/xeMzP8Xj8//FpPR/xWV1P8Vl9X/FZnW/xSa2P8UnNn/ - E57b/xOg3P8Tot7/EqPf/xGl4f8Rp+L/EKjk/xCq5f8PrOf/D63p/w6v6v8Osev/DbLt/w217v8Mt/D/ - DLny/wu68/8Lu/T/Cr72/wrA+P8Kwfn/CsT6/wnH+v8SzPz/K8z3/xHO+/8Lzfv/DdD6/w7T+v8R1vr/ - E9j5/xXa+f8W2vn/Ftv5/xfb+f8X2/n/F9v5/xbb+f8e3Pn/G9z5/zfe+P874fj/G9v4/Rbd+vwU1/j/ - Ep/bfwAAAAAAVaoDAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABaw5McVve7/ - Eq3n/BOo5P8XktH/FYTI/yiv4P8nsOD/E5LS/xiS0P8Xj87/F47O/xyV0P8dldD/F43M/xiOzf8Yj87/ - GYDA/xtvsP8aerv/GIjH/xmGxv8ZgMH/GX+//xiAwf8ZgsL/GYLD/xmExP8YhcX/GIjI/xiKyv8Xjs3/ - F5DQ/xaT0f8WldP/FZbU/xWZ1f8Umtf/FJvZ/xSd2v8Tn9v/E6Hc/xOi3/8SpOD/EaXh/xGn4/8QqeT/ - D6vm/w+s6P8Orun/DrDq/w6y7P8Ns+7/DLbv/wy48P8MuvL/C7r0/wu89f8Kvvf/CsD4/wrB+f8JxPr/ - CMf8/x7L+v8hy/j/Ccr8/wvL+/8Mzfv/DdD6/w7U+v8R1vr/E9n5/xXa+f8W2/n/F9v5/xfb+f8X2/n/ - GNv5/xPb+f823vn/SeD4/x3b+PwW3vv/FM/1+hKX1WIAAAAAAIC/BAAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAFWqqgMAAAAAF6bgpBW/7v8Tr+j7E6fj/xeNzf8XkdH/MsDo/xqi3P8VltT/ - F5PR/xeQzv8Zhcb/Gnu//xmMy/8Yjs3/GI/O/xmIx/8bc7P/GYTC/xiOy/8ZgcH/GX69/xl+v/8ZgMD/ - GIHB/xmExP8Yh8b/GInJ/xiMy/8Xjs3/F5DP/xeR0P8Wk9H/FpXS/xaW1P8VmNX/FJnX/xSc2P8Untr/ - FJ/b/xOg3P8Tot3/EqPf/xKk4P8RpuL/EKjk/xCq5f8Pq+b/D63o/w6u6f8Osev/DbLt/w207v8Mt+// - DLnx/wy68/8Lu/T/Cr31/wq/9/8KwPj/CcH5/wjC+v8MyPz/J8r3/xLK/P8JyPz/Csn7/wvL+/8Mzfv/ - DdH6/w/V+v8S1/r/FNn5/xba+f8X2/n/F9v5/xjb+f8T2/n/K9z5/1bg+P8i2vj7FN/7/xTG7ucVitE9 - AAAAAACAvwQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIC/BAAAAAAXndl6 - FcDv/xOx6fsUqOP/FozN/xua1v8xwen/FZ/b/xaY1v8XkdD/GYHE/xlyuP8Zd7z/GIrK/xiOzf8Yj87/ - GX+//xmDwP8Xm9H/GYHA/xl9vf8ZgcD/GYTE/xiHx/8Yisr/GI3M/xiOzf8Yjs3/GI7N/xePzv8XkM// - F5HQ/xaT0f8WldP/FZfV/xWZ1v8Um9f/FJ7Z/xSf2/8Todz/E6Ld/xKj3/8SpN//EaXh/xGn4v8QqOT/ - EKrl/w+s5/8Pren/DrDq/w6x6/8Nsu3/DbXu/wy38P8MufL/C7rz/wu89P8Kvvb/Cr/4/wrB+f8Jwvr/ - B8P7/xfJ+v8kyfj/Ccj9/wnH/P8KyPz/Csn7/wvL+/8Mz/v/DtP6/xHW+v8U2fn/Fdr5/xfb+f8X2/n/ - Ftv5/xnb+f9V3/n+L9z5+hHe+/8UuunPD4fLIgAAAAAAgL8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAABVqqoDAAAAABeS1E0Uvu7/E7Pq/RSq5f8Wj8//G5rV/zHC6v8Vod3/ - FpjW/xiFx/8YeL7/HIvJ/x+Y0v8Xjs3/GI7N/xiPzv8ZgMH/F5rQ/xeWzv8Yg8T/GIrJ/xiMy/8Yjs3/ - GI7N/xiOzf8Yjs3/GI7N/xiOzf8Xj87/F4/O/xeQz/8WktD/FpTS/xaV1P8VmNX/FZrX/xSe2f8Uodz/ - FKLd/xOj3f8TpN7/E6Tg/xKl4f8RpuH/Eajj/xCp5P8Pq+b/D6zo/w6u6f8OsOr/DbLs/w2z7v8Mtu// - DLjw/wy68v8LuvT/C731/wq+9/8KwPj/CcH5/wnC+v8Ixvz/I8n4/xjJ+v8Hxvz/Ccf8/wrH/P8Kyfz/ - C8v7/wzO+/8N0vr/ENb6/xPY+f8V2vn/Ftv5/xjb+f8R2vn/P9z4/D/g+vwO2fn/E6rhnwBxxgkAAAAA - AFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgAIAAAAA - FYrPJRS56vgVt+v/Eq3n/hWU0/8alNL/MsLq/xal3/8WktL/F3/D/x6Qzf8vrdr/G5LP/xeNzf8Yjs3/ - GI/N/xmHx/8XodT/F5fR/xiNzf8Yj87/GI7N/xiOzf8Yjs3/GI7N/xiOzf8Yjs3/GI7N/xePzv8Xj87/ - F5HQ/xaT0f8Wl9T/FpnW/xWc2P8Vntn/FJ/a/xSi3f8Tpd7/E6bf/xKm4f8Sp+H/Eqfh/xGo4/8QqeT/ - EKrl/w+r5v8Prej/Dq/p/w6x6/8Nsu3/DbTu/wy37/8MufH/DLrz/wu79P8KvfX/Cr/3/wrA+P8Jwvn/ - CMP6/xDI+/8myff/DMj8/wjF/P8Jx/z/Csf8/wrJ/P8Ly/v/DM77/w3S+v8Q1vr/E9j5/xXa+f8X2/n/ - FNr5/SHb+ftD4vv/Ec7z+BOZ12wAAAAAAICAAgCAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAgKoGE7Hl2BW77P8Srej9FZva/xeMzf8xv+j/ - G6nh/xaMzf8Xh8j/M7Ld/yKd0/8Visz/GY/N/xiOzf8Yj87/GIXG/xef0v8XmNH/GIzM/xiOzf8Yjs3/ - GI7N/xiOzf8Yjs3/GI7N/xiPzv8YkM7/F5HP/xeR0P8XkdD/Fo/O/xeLy/8Yhcf/GILE/xiDxP8Xh8f/ - FZrW/xOo4P8TqeH/Eqrj/xKq4/8RqeP/Eank/xCq5f8Pq+X/D6zn/w+t6f8OsOr/DrHr/w2z7f8Nte// - DLjw/wy58v8LuvP/C7z0/wq+9v8Kv/j/CsH5/wnC+f8HxPv/HMn5/x/J+f8Hx/3/Ccb8/wnH/P8KyPz/ - Csn7/wvL+/8Mz/v/DtP6/xHW+v8U2fn/FNn5/hbb+fwU3/v+I9r5/xu458kQiM4vAAAAAACAvwQAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AFWqAwAAAAATpt6rFb7u/xKv6PwVpOD/FIjM/y224/8iseP/E4nM/x6V0P8zst3/Fo7N/xiOzf8Yjs3/ - GIzM/xp3vP8abrX/GJDM/xee0/8Yjs3/GI/O/xiPzv8YkM7/GJDP/xiPzf8YjMv/GInI/xmDxP8Zfb// - Gna5/xtvtf8bbbP/GnO3/xmAv/8Xj8r/FpbR/xWa1v8Uo93/E6nh/xOs4/8SruX/Eq7l/xKt5f8RrOb/ - EKzm/w+s5v8PrOj/Dq7p/w6w6v8Nsuz/DbPu/wy27/8MuPD/DLry/wu69P8LvfX/Cr73/wrA+P8Jwfn/ - CcL6/wrH/P8myfj/E8n7/wfG/P8Jx/z/Csf8/wrI/P8Lyvv/DM37/w3Q+v8P1fr/Etf6/xTY+fwV3fr9 - Fdr5/xO76tcSl9ViAGaZBQAAAAAAVaoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQL8EAAAAABSZ13MUwO7/E7Hp+xSq5f8Ui87/ - Jabb/yq65/8Sic3/IZnS/y+v3P8Vjc7/GI/O/xiOzf8aeL3/G2iw/xl+wP8Yjc3/F5PP/xiPy/8YiMj/ - GYjI/xmExP8afL7/Gna4/xpws/8ba6//G2mu/xtssf8ad7j/GIjD/xed0P8Vqtn/FKvc/xSh2f8VmtX/ - FZrW/xSd1/8Uotr/E6rh/xKx5v8Ssuf/EbHn/xGv5/8Qruf/EK3n/w+t6P8Or+r/DrHr/w2y7f8NtO7/ - DLfv/wy58f8MuvP/C7v0/wq99f8Kv/f/CsD4/wnC+f8Hw/r/E8j7/yXJ9/8KyP3/Ccb8/wrH/P8KyPz/ - C8r7/wvM+/8Mz/v/DdP6/xDV+v8T1/n7FN77/xLH8O0TmNdtAICqBgAAAAAAgIACAICAAgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABVqgMAAAAAEYrPOxS97f8Uter+E63o/xSW1v8clNH/L8Dp/xWQ0P8clND/L7Dd/xaPz/8Xkc// - GYPF/xtss/8Ze77/GIzL/xiPzv8ZhcX/G3W1/xtwsf8bdbb/Gna2/xp1tv8aerr/GYG//xmLxf8Yl83/ - F6PU/xar2v8Vq9z/FaPZ/xaX0/8Wjs7/FovL/xaNzP8Wjsz/FpDN/xaTzv8VnNX/E63i/xK16f8RtOn/ - EbLo/xCw6P8Pruj/Dq7p/w6w6v8Osev/DbPt/w217/8MuPD/DLny/wu68/8LvPT/Cr72/wq/+P8Kwfn/ - CcL5/wfF+/8fyfn/Hcn5/wfH/f8Kx/z/Csj8/wvK+/8Ly/v/DM77/w3S+v8Q1fr/Etb5+xPc+/8StejE - EIDHIAAAAAAAgIACAIC/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAASgMgOE7Pm5BW67P8Srej9 - FKPg/xWKzP8tuuX/HJ7Y/xaMzf8usN7/GpXR/xeOzv8ad7z/Gne7/xiNyf8Yjs3/GIrJ/xt0tf8bbq// - GoO//xmWzP8Yms//F53S/xeg1P8XodX/F6LV/xee1P8XmdP/FpPR/xeOz/8WjM3/FozM/xeMy/8Wjcv/ - Fo3L/xeNy/8Xj8z/F5DM/xeUzv8Uptv/Erfp/xG46/8Qter/ELLp/w+w6f8OsOn/DrHq/w2y7f8Ns+7/ - DLbv/wy48f8MuvL/C7r0/wu99f8Kvvf/CsD4/wnB+f8Jwvr/C8f7/ybI9/8Syfv/CMf8/wrI/P8Lyvv/ - C8v7/wzO+/8N0vr/D9T6/xHW+vsS2vr/EarhogBmmQUAAAAAAIC/BAAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAICAAgAAAAATpd+vFb7u/xKt5/wUqub/FI3Q/yWn2/8kseL/EojL/yeo2v8gntX/ - FojJ/xpzuf8ZjMj/GJXO/xiNzf8Zfb3/G2+w/xmEwf8XmM//GJTP/xeSzv8Yks7/GJDO/xiOzf8Xjs3/ - F47O/xePz/8XkM//F4/O/xaOzf8Wjsz/Fo7M/xaPzf8Wj83/FpDN/xeSzf8Xk83/F5TN/xWh1/8SuOj/ - Ebzt/xC36v8Qs+r/D7Hq/w+x6v8Osev/DbLt/w207v8Mt+//DLny/wy68/8Lu/T/Cr31/wq/9/8KwPj/ - CcL5/wfD+v8TyPv/Jcn4/wvJ/P8KyPz/Csn7/wvL+/8Mzvv/DdL6/w/U+v8R1vr7E9r6/xOo4JYAAAAA - AICAAgBVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgL8EAAAAABKX1nEUv+7/ - E7Hn+xOr5/8Um9r/G5PQ/ym65/8UktL/G5jT/yOk2f8XgsX/GXe9/xie0f8YlM//GInJ/xt0s/8afLv/ - GJPN/xiPzf8Yjc3/GI3N/xiNzf8Yjc3/F4/O/xeQz/8Xkc//F5HP/xaRz/8Xkc//FpHP/xaSz/8Wks// - F5PP/xeUz/8Wlc//FpbP/xaXz/8Xls//FaPY/xK66f8Rvu3/ELjr/xC06v8Pser/D7Hq/w6y7P8Ns+3/ - DbXv/wy48P8MuvL/C7rz/wu89P8Kvvb/Cr/4/wrB+f8Jwvn/B8T7/xzJ+f8fyvn/CMj9/wvJ+/8Ly/v/ - DM37/w3R+v8P1fr/Edb6/BPc/P8SseSqAAAAAABVqgMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACAgAIAAAAAFojOLxO46/0Vter/Eqvm/hSm4/8VjM7/Ja/h/xqm3v8Uk9P/ - HJzW/xqBxP8ZgcP/GKfW/xiPzv8ZhMP/G3Oz/xiJxv8YkM3/GI7N/xiOzf8Yjs3/F4/N/xePzv8XkM// - F5LP/xeT0P8WlNH/FpXS/xaX0v8WmNP/FpnT/xaa0/8WmtP/FprT/xaa0v8WmtL/FpnQ/xea0f8Vq93/ - Er7t/xC+7f8QuOv/D7Tr/w+y6/8Psev/DbLs/w2z7v8Mtu//DLnx/wy68v8Lu/T/C731/wq+9/8KwPj/ - CcH5/wnC+v8Jxvz/JMn4/xXK+/8IyPz/C8r7/wzM+/8N0Pv/DtT6/xDW+v0U2/v/EsLt2RCAvxAAAAAA - AICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAB - E6zizRW77f8Sq+b9FKrm/xWW1/8dnNb/HrDk/xOc2f8Wl9T/GX/D/xiNyv8Xqdj/GIzN/xl/vv8adrf/ - GIzJ/xiOzP8Yjs3/GI7N/xePzf8Xj87/F5DP/xeT0P8XltL/FpjU/xac1v8Vn9j/FaPa/xWm3P8Vqt7/ - Fazf/xas3/8WrN7/Fajc/xaj2P8WnNP9FqHV/xS25f8Swu7/EL3t/xC47P8PtOv/D7Lr/w6y6/8Nsu3/ - DbTu/wy37/8MufL/C7rz/wu79P8Kvfb/Cr/3/wrB+f8Jwvn/CMP6/w7I/P8nyff/Dsr8/wnI/P8Ly/v/ - DM77/w7S+v8Q1fr/Etn6/hTU9/8Rx/JNAAAAAAC/vwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIC/BAAAAAAUmteBFb3t/xOu5/sTqeX/FKPh/xeR0v8ereH/ - FaHc/xaZ1v8ZgMT/GJfP/xeo2P8Yi8z/Gny7/xp7uv8Yjcr/GI7N/xiOzf8Xj83/F4/O/xeQz/8Xk9D/ - F5jT/xec1v8Xotr/Fqje/xav4v8VteX/Fbro/xa+6v8Vwuz/FsTu/xbF7v8Vw+3+Fb3p/BWy4f4UruH9 - E8Dt/xHB7v8Qu+z/ELbs/w+z6/8Psuv/DrLs/w2z7f8Mte//DLjw/wy68v8LuvP/C7z1/wq+9v8Kv/j/ - CcH5/wnC+f8HxPv/Fcn7/yTJ+P8Kyf3/Csn7/wzM+/8N0Pv/D9T6/xHX+vwU2fn/E8/0vgAAAAAAgIAC - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAC - AAAAABWHyzETt+r9FbTp/xOp5P4UqOX/FZfX/xmg2/8Yp+D/FpvX/xiEx/8Xm9H/F6fY/xiKzP8ae7v/ - GX29/xiNy/8Yjs3/GI7N/xePzv8XkM//F5PQ/xeY0/8Xntf/F6Xc/xat4P8WteX/Fr3p/xbD7f8Wx+// - Fsrx/xbN8v8WzvP/Fc70/BXT9v0UzfT/E53XrBK05uASxPD/D77t/hC46/8PtOv/D7Lr/w+y6/8Nsuz/ - DbTu/wy27/8MufH/DLrz/wu79P8LvfX/Cr73/wrA+P8Jwfn/CcP6/wfF/P8cyfn/H8r5/wjJ/P8Lyvv/ - DM37/w3R+v8Q1fr/Etj6/BTW9/8S0/ViAAAAAACqqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSn4cIVuuz/E6rl/BSo5f8VoeD/ - FpjW/xWl3/8Wn9n/GIjK/xed0/8Xp9j/F4vM/xp8u/8Zfr3/GI3M/xiOzf8Xj83/F5DO/xeS0P8XltL/ - F53X/xel2/8XruH/Frjm/xbA6/8Wxu//Fsvx/xbP8/8V0fT+FtH1+xbW9v0V1vf/EsTv+RSS0mcVjMtJ - EcTx/xC/7v4Quuz/ELXr/w+y6v8Psuv/DrLr/w2y7f8NtO7/DLfv/wy58f8LuvP/C7v0/wq+9v8Kv/f/ - CsH5/wrD+f8Jxfr/CMj9/yLK+P8ayvr/CMn8/wvL+/8Mzvv/DtP6/xDW+v4U2fn/E9X3/RPT8ykAAAAA - AICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABVqgMAAAAAFJLVZxW77P8Urub8FKjj/xSn5P8VnNr/FaHc/xWj3f8Xj8//F5zT/xen2P8XjM7/ - GYC//xp/vv8Xjsz/F4/O/xePzv8Xkc//F5XR/xeb1f8Xo9r/F63g/xe45v8Xwuz/Fsnw/xfP8/8W0vX/ - FdP2+xXY9/4V2fj/E8jx/BKn4KoPg8khAHHGCRO46dsRwu//ELnr/RC16v8Qsur/D7Hq/w+x6/8Osuz/ - DbPt/wy17/8MuPD/DLry/wy78/8LvvX/Cr/2/wrA+P8Kwvn/CsX6/wrH+/8Kyf3/Jcv3/xbM+v8Jyvv/ - DM37/w3Q+/8O1Pr/ENb6/hTa+f8U1fbnEczuDwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAVgMoYE7Dm6RW26f8UquT+ - FKjk/xSk4f8VoNz/FaTe/xaY1f8XmtP/F6XX/xeOzv8YhMP/GYC//xePzv8Xj87/F5DO/xeT0P8XmdP/ - F6DX/xeq3v8XteX/F8Dr/xfJ8P8Xz/T/FdT2/RXY9/wV2vn/Esry+xKp4K4Th881AAAAAAAAAAASq+Ku - EsLv/xC36/wQter/ELLp/w+x6f8Pser/DrHq/w207P8Nte7/Dbjv/w268f8Mu/P/DL30/wu/9f8LwPf/ - C8P4/wvG+f8LyPr/C8j6/w3M/P8pzPf/Fs76/wrM+/8Nz/v/DdL6/xDV+v8S1/r9Fdr5/xTV99gAgIAC - AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAFWqAwAAAAAUmdeOFbzs/xWt5vwUquT/FKrk/xWn4f8Vp9//F5/Z/xeX0v8WntT/ - F47O/xiJyP8ZgsH/F47N/xePzv8XkM7/F5TR/xec1f8Xpdv/F7Di/xe96f8Xx+//F8/z/xXU9v0V2vj+ - EtD0/hOn36USiNArAAAAAAAAAAAAgIACE6jgpBLA7v8Qtur7EbPp/xCx6P8PsOj/D7Dq/w+x6v8Psuv/ - DrTu/wy17/8LuPD/Crvz/wq+9P8KwfX/CsT3/wrG+P8JyPn/Ccn6/wnK+v8Jyvv/C8z8/yrM9/8Yz/r/ - Cs76/w7S+v8P1fr/Etf6/xPZ+f0W2vn/Fdb20QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAAAAABSDyycUtef0 - F7nq/xSv5v4VruX/Fa/l/xWr4f8Wn9j/F5PQ/xeSz/8Xj83/F43M/xiIx/8Xjs3/F47N/xeOzf8Xkc// - F5zV/xep3v8XtuX/F8Ps/xfL8f8W0fX8Ftr5/xPC7eUSjNNFAAAAAACAgAIAAAAAAIC/BBOn36USvu3/ - EbTo+xGx6P8RsOf/D67n/w+v6P8PsOr/D7Hr/wyy7f8MuO//EcLx/xjI8/8cyfT/IMj0/yHH9P8gyfb/ - IMz3/yDP+P8f0vn/HdX6/xzX+/8b2/z/NNr4/yzb+v8R2/z/ENj7/xDV+v8S1vn/FNn5/Rba+f8X1vfT - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABOd2ZQWw+//Frnq+xa46f8Wt+j/FrDj/xad1/8XkM7/ - F43N/xeOzf8Xjs3/F43M/xeOzf8Xjs3/F47N/xePzf8Xl9P/F6re/xe75/8Xxu7/Fs7z/RfZ+P8Tv+va - EIDHIAAAAAAAgL8IAAAAAAyAxRYTrOO/Ervr/xGy5vsRr+b/Ea7m/xCt5v8Qref/D6/p/w6v6v8OtOz/ - GcLw/yXB8P8orO3/JZPr/yGC6v8eeuv/HXbr/x126/8deOv/Hnvs/x9+7P8gguz/IYbs/yKP7P8wnu7/ - O7Lv/y7B9P8o0Pb/Jd/5/x/j+v8X3/r9Ftr5/xLV994A29sHAAAAAAAA/wEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgAIAAAAA - EIDHIBK26OsXyPH/FcHt/RbB7f8WvOr/F63g/xad1/8WltL/F5PQ/xeSz/8Xkc//F5DO/xePzf8Xjs3/ - F47N/xeSz/8Wpdv/F7zo/xbH7/4X0vX/E8Tv7BOGzCgAAAAAAIC/CAAAAAAWjc4vE7Lk2xK56v8Rr+X7 - Eq3l/xGs5f8QrOX/EKzm/xCu6P8Nrun/Fbvt/yrA7v8qnOr/Hnbp/xZo7P8UaO//FGvx/xRt8f8UbvH/ - FG7x/xRt8f8UbfH/FGzx/xRr8P8UavD/FGjv/xVo7/8Zbe7/GGvs/xtz6/8ih+z/Kafv/yzL9f4o4/r/ - G+H688T19RoAAAAAqqr/AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAFY/TYhTI8f8WzPP8Fcnx/hfI8P8Xxe3/ - F7zp/xe15f8XseL/Fq3g/xSo3f8Vo9r/F53W/xeV0f8Xj87/F4/O/xaf1/8Xuuf/Fsrw/RXL8v8SmdhV - AAAAAABttgcAAAAAFZnXXxO35/UStuf/Eazk/BKr5P8RqeP/Eark/xGq5f8QrOf/Dq7p/x6/7f8tq+r/ - IHfo/xRn7f8UbfH/FnLy/xZy8f8WcfH/FnDx/xZw8P8WcPH/FnHx/xZx8f8WcvL/FnLy/xZz8v8Wc/L/ - FnLy/xZv8f8WbPD/Fmfu/xVh6/8WXOn/GmPn/yOA6f0hrO//w+z5UQAAAACqqv8DgID/AgAA/wEAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACAgAIAAAAAEpjYixXR9f8X0/b7FtD0/hfQ8/8XzvP/F83y/xfL8f8ayvD/Isru/xvB6v8WteT/ - Fqjd/xaY0/8Xj87/FprU/xa25vwWxu//EsHsrAAAAAAAgIACAICqBhWk3ZQUvOr/EbHl/RGr4/0SquP/ - Eqji/xKo4/8QqeT/EKrm/w6s5/8jv+z/LZzo/xdo6v8UbPH/FnLy/xZw8f8Wb/D/Fm/w/xZx8f8WcvP/ - FXLz/xZx8v8Wb/D/F27v/xds7v8Xae3/GGXr/xhh6f8ZXOb/Gljj/xtU4v8bU+H/G1Ph/xtU4f8aU+L/ - GE7h/hZP4f8nZuLtgKfsk+Ds+SkAAAAAAAD/AYCA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAFJ/bmhXU9v8X2fj8 - F9T2/RfV9v8Y1fb/FNP1/yXY9f9d6/X/YOz1/y7O7v8Ut+b/F6jc/xeU0f8VmNP+FrXl/xTA7PcRxu4t - AAAAABCExR8VsuTDFLzq/xKw5PsSq+L+Eqjh/xKn4f8Sp+L/Eafj/xCq5P8Oqub/Ibzr/yyY6P8VZez/ - FXHy/xZx8f8Wb/D/FnDw/xVz9P8Vc/T/Fm7w/xlk5/8bWuD/G1ff/xtV3/8cUt3/HU/b/x1N2/8dS9r/ - HUra/x1K2v8dS9v/HE3d/xxO3f8cT97/HE/f/xtQ3/8bUeD/G1Th/xVQ4v4IS+D/IV/i836k7JTn7/cg - AAAAAKqq/wMAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAQCAgAIAAAAAFJbVgRTO9P8X3vr+F9n3/BfY+P4Y2ff/F9f3/x7X9v8o1/T/ - Hczw/xbC7P8Xt+b/FqTb/xWj2fsWuOb/E7DjkgAAAAAViMw8FLrp5BS66f8Sr+P7E6vh/xOn4P8SpuH/ - Eqbh/xGm4f8RqOP/Dqjk/xq36f8vo+j/Fmbr/xVx8v8WcfH/Fm7w/xZx8/8VcvP/G2Lh/yJOyP8mQ7v/ - KT21/yk7tP8nPbn/JETD/yBN0v8eVdz/IV3g/yJi4/8hXuH/IFnf/x9W3v8fVd7/H1Td/x9W3v8gWN// - IF7i/yFj5v8gZef/HWTo/h9j6fwYWuf+CEvh/yVi4uyiv/Fr////AgAA/wEAAP8BAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBVqgMAAAAA - EozRVBO86uYW2/r/F936/Rfa+PwX2fj9Fdf3/hPS9f8VzfP/F8jv/xfC7P8Wuef9F7rn/xO66PELhcgX - E4PNKRS55+4Uuej/E67j+xOq4f8TpuD/E6Xg/xKl4P8SpeD/Eabi/xCo5P8Qrub/LLTp/xxw6P8UbvL/ - FnHx/xZv8P8VdvX/GGrp/yRLxP8qO6//LDeq/yw2qv8oP7b/JEjC/yRGwP8oP7j/KD64/yNMy/8iZ+T/ - JnXs/yd06/8lcen/JG3o/yNp5v8iZuX/ImXk/yFl5P8iaOb/JHHq/yZ67f8nfe//Jnrv/yRz7v4la+v8 - GFjl/QdK3/9ol+qp7e3tDgAAAAAAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBVqgMAAAAAFnrIFxOf2pcSyPD5Ft36/xff+/4Z3fn/ - GNn4/RbT9fwWzfL8Fsnw/RbI7/wVwuz/E6feegCAvwgVsePeFbno/xOt4vwTquH/E6bf/xOk3v8SpN// - EqTg/xGl4f8Rp+L/Dqjk/xy46P8oj+b/E2jv/xdz8v8WbfD/FX71/xt25v8oPrT/Kziq/ys4q/8oPrT/ - H1fT/xpw7v8bePT/GHLy/xhn6f8gU9P/JkLA/yZMyf8laOP/J3bt/yh37f8ndu3/J3Ts/yZz6/8lcOr/ - JG3o/yRr5/8jaef/JGvo/yVz7P8nf/D/KIbz/yiH9P8ogfL+J23r+whN4f9Rhue/6+vrDQAAAAAAAP8B - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACAgAIAAAABAAAAABGFzS4SodubEr3r4xPJ8vwV0vb/FdP2/xTP9P4VyPD/E7jn+BOa2IgAAAAA - FKXcrxW76P8TruL7FKrg/xSm3/8To97/E6Pe/xKj3/8SpOD/EaXh/xGo4/8OquX/I7Tn/x526P8UbvL/ - FnHx/xZt8P8Vifn/IVjO/ywwpf8pO7H/Ik/J/xpu6v8bevP/IHjv/yN27v8jdu//HHPy/xZw8/8aZej/ - IVLT/yZOzP8nYdv/J3Lq/yh47/8oeO//KHju/yl47v8oeO7/KHbt/yd07f8mcuz/JW/q/yVu6v8mcu3/ - J3zw/ymH8/8pjPX/LYDy+ghY5/9xn+uaAAAAAICA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgAIAgIACAAAAAAAAAAAUdsQN - EIXKMBOP0lASlNRkEpLUZROO0k8QhMUfAAAAABKT1WEUuun/E7Dj+xSq4P8Upd7/FKPd/xOi3f8Tot7/ - EqPf/xKk4P8RpuL/Eajk/w+t5v8kr+j/G3Dq/xVv8v8WcfH/Fm3w/xaI9v8YgfH/HmPa/xx06P8aevH/ - HWnl/x9c3P8eWNv/Hlnc/x9d3/8hYeP/HGTm/xhp7P8Xau7/G2Hl/yFW1/8mV9X/J2Pf/ydx6v8nd+7/ - KHnv/yl67/8peu//KXrw/yl67/8oeu//KHnv/yh37/8ndO7/J3bv/yh88f8piPT+KYn1/hlw6/vP3fU1 - AAAAAICA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAANjMwU - E7Hj4RW25v8TquH9FKbe/xSj3f8Totz/E6Ld/xOi3v8So9//EaXh/xGn4v8QqOT/D63m/yGw6P8bcer/ - FW/y/xZw8f8Wb/H/Fnfy/xeK9/8Xifn/GHvz/xxd3v8dT9X/HlDW/x5R1/8eU9j/HlXZ/x5W2/8eVtz/ - Hlje/xxc4v8ZZOr/GGjt/xtj5v8gWdz/I1fZ/yVd3f8lZ+X/JnHq/yd27f8neO7/KHju/yh47/8oee// - KHnw/yl58P8oePD/KHbw/yd08P8uf/P5CHPx/4qz8HYAAAAAv7//BAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAQCAgAIAVaoDAIC/BACAvwQAgKoGAAAAABOi3IkVuej/E67i+xSo3/8Uo93/FKHc/xOh3P8Tod3/ - E6Lf/xKk4P8RpeH/Eafj/xCp5P8Oq+b/HLfp/x566P8UbfH/FnHx/xZw8f8WbvH/F2rw/xhm7/8YZO3/ - GWLo/xpe4v8cWd3/HVTZ/x5U2P8eVdn/H1fb/x5W2/8fVdv/HlPc/x5U3f8cWeH/G2Hn/xlm6/8aZOj/ - HF3j/x5X3v8gVt7/IVvh/yNh5f8kaOj/JW3q/yZw6/8mcez/JnHs/yZy7v8nc+//J3bx/hx88v9RmvHC - 2+L4IwAAAACAgP8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAUkNEn - FLTl9RW05f8Tqd/+FKTd/xSh3P8ToNv/E6Hc/xOh3f8So9//EqTg/xGm4v8QqOT/EKrl/w6r5/8TuOv/ - Ip3o/xZl7P8Wc/L/FnDx/xZw8f8XbvH/GGrw/xhn8P8YZ/H/F2nw/xdo7f8ZY+f/G1zg/x5X2/8fVtv/ - H1fc/x9W3P8eVNz/H1Lc/x5R3P8eUt3/Hlbe/x1c4v8cYuf/G2Xp/xtk6f8bYOf/HF3m/xxc5v8dXuf/ - H2Pp/yFo6/8ibOz/JG/t/yNw7/4devD/grHxfAAAAAD///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABSj3JkVuej/E6zh+xSl3f8Uotz/FKDb/xOg2/8Todz/ - E6Le/xKj3/8RpeH/Eafi/xCo5P8QquX/D63o/w6v6v8Yve3/H4fn/xVl7f8Wc/L/FnHx/xZw8f8Wb/H/ - F2zx/xdp8P8YZ/D/GGfw/xdp8P8Xa+//GWXo/xxe4f8fWNz/H1jc/x9W3P8fVd3/HlLc/x9R3P8fUd3/ - H1Ld/yBU3v8gWN//IFzj/x9h5f8eZOf/Hmbo/x1m6f8cZer/HGfr/xxp7P8caez+Gmvu/yJv6/GFo+sZ - AAAAAABVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAATj9Mp - FLPk9hSz5P8Tp9/+FKPc/xSg2/8Un9v/E6Db/xOh3f8Tot//EqTg/xGl4f8RqOP/EKnk/w+r5v8Prej/ - D7Dq/w617P8YwO//Hozo/xdl6/8VbvH/FnLy/xZw8f8WcPH/Fm/x/xds8P8YZvD/GWHv/xpp8P8acvL/ - GGzu/xpj5v8eW9//H1nd/x9Y3v8fVt7/H1Pd/x9R3f8eUNz/HlDc/x9S3f8fU97/IFXf/yBX4P8hWuH/ - IVzj/yFe5P8hX+X/IWDm/yFh5/8iZun9G2fr/1eO7moAAAAAAFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABOi3JcVuej/E6vh+xSk3f8Uodv/FJ/b/xSf2/8ToNz/ - E6Hd/xKj3/8SpOD/Eabi/xCo5P8QquX/D6vm/w+t6P8Pser/D7Ps/w257/8UxvL/Hafs/xt06f8VZ+7/ - FnHy/xZx8f8WcPH/FnDx/xdt8f8ZY+//G1vu/x1m8P8cdfL/GHHx/xln6v8dX+L/IFve/x9a3/8fWN// - H1Xe/x9T3f8eUd3/HlDd/x9Q3f8fUd7/H1Le/x9T3/8fVN//H1Xg/yBW4f8gVuH/IFni/yJg5v0gaev/ - K3Pp38zW9RkAAAAAAAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAOlc0k - FLTl9BWz5P8TqN7+FKLb/xSf2/8Untv/E5/b/xOg3P8Tot7/EqPf/xGl4f8Rp+L/EKnk/xCq5f8PrOf/ - D63p/w6x6v8Os+z/Dbfu/wy68P8PyPT/Gcfz/x+V6/8XZ+r/FW/y/xZy8f8WcPH/FnDx/xds8P8ZX+// - HFTt/x5g7/8ed/L/Gnby/xhs7v8cYub/H17h/yBd3/8gW+D/IFjf/x9W3/8fVN7/H1Le/x9R3v8fUN7/ - H1De/x9R3v8fUd//H1Hf/x9T4P8gVuH/IV3l/ydr7PwOZez/bZ7snQAAAACAgP8CAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABOf2ogVuuj/E6zh+xSl3f8UoNv/FJ/a/xSe2/8Tn9v/ - E6Hd/xOi3/8SpOD/EaXh/xGo4/8QqeT/D6vm/w+s6P8Orun/DrHq/w6z7f8Ntu//Dbvw/w288v8MxPX/ - FNT3/yGx7/8aben/FWvw/xZy8v8WcPH/FnDx/xdr8P8bXO7/HUzs/x9Z7v8fdfL/HXvz/xly8P8aZ+r/ - H2Dj/yBf4f8gXuH/IF3h/yBa4f8gWOD/H1Xg/x9U3/8fU9//H1Lf/x9S3/8fUt//H1Tg/yBY4v8iYef/ - JWvs/h9y8f8Yaun31eHzKwAAAACAgP8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAUdsQN - E7Lk4BW25v8Tp9/9FKLc/xSf2v8Untr/FJ/a/xOg3P8Tod3/EqPf/xKk4P8RpuL/EKjk/xCq5f8Pq+b/ - D63o/w6v6f8Psev/DrPt/w227v8NufD/Db3y/w3A9P8Mw/X/ENP5/yDF9P8ceen/FGnv/xZy8v8WcPH/ - Fm/x/xho8P8cWO7/H0jr/x9S7f8gcfL/H37z/xt48v8abe3/HWTm/yBh4/8hYeL/IWHj/yFf4/8gXeL/ - IFvi/yBZ4f8gWOH/IFfh/yBX4v8gWeP/IV/l/yNn6v8mb+7/Jnbx+wdk7f+Hse+CAAAAAKqq/wMAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABSP00sVu+n/FK7j/RSm3v8Uodr/FJ/a/xSe2v8Tntv/ - E6Dc/xOi3v8So+D/EaXh/xGn4/8QqeT/EKrl/xCs5/8Pren/DLDq/wuy7f8KtO//C7fw/wy58P8Mu/L/ - DL/0/w3D9f8Mxvf/DtP6/yDQ9/8dfOn/FGnw/xZy8v8WcPH/Fm/x/xhm8P8cVO3/IEPr/x9N7P8gbPH/ - H37z/xx+8/8ZdPD/G2nq/x9k5f8hZOP/IWTk/yJk5f8hY+X/IWLl/yJh5f8hYeX/IWHm/yJj6P8kaOr/ - JW7t/yZy7/8ldPH8DWrx/0eH6sYAAAAAAAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAvwQAAAAA - FKDZjhW76f8Tq+H7FKTd/xSg2v8Untr/FJ7a/xOf2/8Tod3/E6Lf/xKk4P8RpeH/Eafj/xCp5f8Qq+b/ - DKvo/w2u6f8asej/IbHm/x+v5f8Xsej/Dbjw/wu99P8MvvT/DMH2/w3I+P8Myvj/D9X6/yPU9/8ee+n/ - FGrw/xZy8v8WcPH/Fm7x/xlj7/8eUOz/IUHq/yBI6/8fZfD/IHzz/x6A9P8be/P/GnHu/xxo6f8gZuf/ - Imbm/yNn5v8jaOf/I2no/yNp6f8jaun/JGzs/yVv7f8lcu7/J3Tw/yJy8f4TbvL/JnPp6+jo8xYAAAAA - AAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAUq9/CFbnn/xOp4PwUo9z/FJ/a/xSe2v8Un9v/ - E5/c/xOh3v8So9//EqTg/xGm4v8QqOT/EKrl/wuq5/8itOf/Sr3k/0q13v8+qdb/NJ/R/yqXzP8kmND/ - F6rj/wu+9f8Lwvf/DMf4/w3N+P8Oz/n/E9v6/yfS9v8bcun/FG3x/xZx8f8WcPH/F23x/xpg7/8eTOz/ - Ij/q/yFD6v8fXe7/IHbz/x+A9P8dgPT/Gnjy/xhu7v8caer/IWnp/yNq6P8ka+n/JWzr/yVt7P8mcO3/ - JXHu/yZz7/8kcvD/G3Dw/hZz8v8cbur43eP4JQAAAACAgP8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA - FYC/DBOw4+MVtub/E6ff/RSi2/8Un9v/FJ7a/xOe2/8ToNz/E6Le/xKj4P8RpeH/Eafj/xGp5P8MqeX/ - Mrzo/2fN6P9Vu93/ZLPR/4S80P+Pw9b/erzX/0CezP8cgr//GZ3X/wvC9v8MyPj/Dcz4/w7S+f8R1Pn/ - GOH7/ynB8v8Xaer/FXDy/xZw8f8WcPH/F2vw/xpd7v8fS+v/Ij/q/yE/6v8gUu3/IG/x/x999P8hgvT/ - JIP0/x158v8Wbu//GGrt/x9r7P8ibez/Im7s/yJv7f8icO7/H3Hw/xtz8f8aefL+GXz0/yFx6e3f6vQY - AAAAAAAA/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAASgMgcFLPl8xW05f8Tp9/+FKLc/xSf2/8Un9v/ - E5/b/xOh3f8Tot//EqTg/xGm4f8SqOP/DKjk/yi36P9z2e3/X7/c/6K9yP/a0s//6N/b//Lp5v/47+v/ - 6e/v/3O52f8Yerr/FqPc/wzM+v8Nzvj/D9T5/xPX+f8T1/n/IOb7/yil7v8UZu3/FnLy/xZw8f8WcPH/ - F2vw/xpd7v8eTOz/IkHq/yI96v8hSOv/H2Hv/yB48/8xi/X/RJj1/0CV9f8qg/P/F3Ty/xRx8f8XcfH/ - GXPx/xp28v8bevP/HH7z/ySF9fkKcPH/T4zpuAAAAAAAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAC - AAAAABaDzCMUteX4FbPl/xOn3/4Uotz/FKDb/xOf2/8ToNz/E6He/xKj3/8SpOD/Eafi/xCo5P8OquX/ - Ydbv/2/R5f+swcn/5NnV/+Dh4f/n6en/7u/v//z9/f///////////2at0v8Qerv/EcDw/w7S+/8R1Pn/ - FNj5/xba+f8V2vn/Kd/4/yB+6v8Ua/H/FnHx/xZw8f8WcPH/F2vw/xpg7/8dUe3/IEXr/yI/6v8iQer/ - IFLt/x9q8P8uhPT/Tp72/2Ks9v9To/X/OZL0/yiI9P8ihPT/IIP0/x6D9P8ghPX9D3by/yN06OrP3/Qw - AAAAAICA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgAIAAAAAD4PJIRSz5PYVtOX/E6jf/hSj3f8UoNv/ - E6Db/xOg3P8Tot7/EqPg/xGl4f8Sp+P/Dafk/yO26P924vP/kMnY/+Xb2P/j5eX/7e3s//Py8v/8/Pz/ - t7e3/6qsrf////7/1+71/x97uP8Sptz/D9f8/xLV+P8U2fn/Ftr5/xXZ+f8f5fv/Kqzv/xRm7f8WcvL/ - FnDx/xZw8f8WcPH/F23x/xll8P8bWu7/Hk7s/yBF6v8hQer/IEjr/x1X7v8fbfH/Non0/1il9f9qs/X/ - abX0/1yu8/83k/P/G3jz/hBx7v9Ok+yu3eb3HgAAAAAAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAQAAAAALesgXEq/i7xW15v8TqeD+FKPd/xSh3P8ToNz/E6Hd/xOi3/8SpOD/Eabh/xKo5P8KpuT/ - M8Ds/3vi8P+21Nz/8evp/+7v7//y8fH//////6amp/8ZGRr/FhYX/4uKjP//////RZDB/w2Uz/8S2Pz/ - F9j4/xna+f8W2vn/F9r5/xnf+v8tyvT/GWvr/xVx8v8WcPH/FnDx/xZw8f8WcPH/Fm/x/xdr8P8ZZe// - G17v/xxR7f8eRev/H0Lq/x1G6v8YUOz/GmDv/yVy8P8te/D/JXfu/xx17P0Siuz/lcnzbAAAAACq//8D - gID/AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAABxxgkSquDeFLjn/xKp4f0Upd7/ - E6Ld/xOh3P8Tod7/EqPf/xKl4P8RpuL/Eank/wqn5P80we3/fuLv/8ng5v/59PL/9fb2//b19f////// - d3d4/yAfIP8rKiv/VVVY//////9TmcX/C5HM/xPZ/P8i2/j/M+H4/x3c+f8X2/n/Ftv5/yne+P8ffer/ - FGzx/xZx8f8WcPH/FnDx/xZw8f8WcPH/FnLy/xZt8f8XYuz/Gm7q/x6C7P8fiO7/IIXu/yF/7f8ef+z/ - G4js/xmZ7f8br/D/Hcr0/hLb+P936vs+AAAAAP/M/wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAABAAAAABKk3cIUu+n/E6zi/BSn3/8To93/E6Ld/xOi3v8So+D/EaXh/xGn4/8RqeT/ - C6jl/ye66/934e//wuPq///6+f/4+vr/+/v7///////k5OX/T09Q/0FBQv/U09T//////zuKvv8QntX/ - E9z8/yjd+P9R5/f/NeH4/xjb+f8V2fn/IuX7/yef7f8TZe7/F3Py/xZw8f8WcPH/FnHx/xZy8v8VZ+// - GXTp/x6t7/8d1ff/G936/xna+f8a1vn/GtT5/xzV+f8a2/n/GeP7/xnj+v8W4Pr+F9b4/wXR9jgAAAAA - gICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAEZ/alxS86v8TsOT7 - E6jg/xOl3v8So97/EqPf/xKk4P8RpuH/Eajj/xCq5f8Pq+b/Ea/p/2HZ8P+g3+n//vv8//v9/f/9/f3/ - /v7+///////+/v7/+vz9//////+83Or/GHm4/xa76P8T3Pz/LN74/1no+P9U5/f/Kt/4/xba+f8Z3/r/ - Ks/1/xlr6f8Vb/L/FnPy/xZy8v8VbfL/FmXr/xuS6/8d1fb/GeT7/xbc+f8W2vn/F9r5/xfb+f8X2vn/ - Fdv5/yLZ+P8h1fX/Ftn5/hfb+f8U1/f8HNbxJQAAAACAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAIC/BAAAAAATlNRfFLvq/xO05vwTq+L/E6fg/xOk3/8SpOD/EqXg/xGm4v8QqeT/ - EKrl/xCs5/8Kq+j/MsLt/3bZ6v/B5O3///////7////+/////P39//z9/f//////7/n6/0aUxP8Vksz/ - FNX4/xTZ+f8x3/n/Wef4/1/p+P9L5vf/I975/xbZ+f8f4/v/JrDv/xdm6P8VZ+3/FmXs/xlz6f8es/D/ - G+P6/xbd+v8X2Pn/F9v5/xfb+f8X2/n/Ftr5/xnc+v822/f/SMfn/0Kw2f8jyOz+Ft77/xbW9usN1/IT - AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAAAAABSDyycTteX4 - FLvp/xKu5P4TqeH/Eqbg/xKl4P8RpuH/Eafj/xCp5P8Pq+b/D6zn/w+u6f8Lr+r/Q8nu/3DP5P+v2+n/ - 8fj6/////////////P7+/8vl7v9OnMj/GYvG/xbH8f8T2fr/Ftn5/zfh+f9X5/n/W+j4/13o+P9C5Pj/ - Htz5/xba+f8d4fr/Jsfz/yKl7f8dr+//HdX2/xjj+/8W2fn/F9r5/xfb+f8X2/n/F9v5/xfa+f8Y3Pr/ - Ot31/3TG1/+iw8v/X6zK/yCt3P0Y3fr/FtX10gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKn38gTwOz/EbHl/RKr4/8SqOL/Eqbh/xGn4v8QqOT/ - EKrl/w+r5v8Prej/Dq7p/w6w6/8Msu3/MsLt/1HB4/9nvNv/fsHb/36+2v9erNH/LpTH/xye1P8Ux/L/ - ENf6/xTX+f8a2/n/POL5/1Ll+f9X5/n/W+f4/1ro+P864/j/Gtz5/xfa+f8l3vj/JOP6/xjk+/8X3fr/ - F9n5/xfb+f8X2/n/F9v5/xfb+f8X2/n/Ftv6/zDf9/+P1eD/8Orp//rs5v+ryNT/FarY+xnc+v8U1fap - AAAAAACqqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAvwQAAAAA - E5TWfBPB7f8St+j7Eq/l/xKr4/8SqOL/Eajj/xCp5P8QquX/D6zn/w+t6f8Or+r/DrHr/w2y7f8JtO7/ - Fbrv/yW77P8otOT/I67g/xyv4/8XvO7/D835/w7U+v8T1fn/FNj5/x/b+f874fn/SuT5/1Hl+f9W5/n/ - XOf4/1bn+P804fj/H935/yfX9v8c2fn/Fdn5/xba+f8X2/n/F9v5/xfb+f8X2/n/GNv5/xba+f8e3vr/ - eNzr//by8v+AgoP/y8fF/7bZ6f8Nr9z7GN37/xTV9HIAAAAAAL+/BAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAWg8wjErXn8RPA7P8RtOf+Eq7l/xGq5P8RqeT/ - EKrl/w+r5v8PrOj/Dq7p/w6w6v8Osuz/DbPu/w227/8LuPD/Cbrz/wq99f8Lwff/CsX5/wvL+v8Nzvn/ - ENP5/xPX+f8V2fn/H9z5/zLg+v8/4/r/SeT6/1Hl+f9W5/n/W+f4/1bn+P9I4/f/Pd/2/yvg+P8l3vj/ - Id74/xzc+f8X2/n/F9v5/xfb+f8Y2/n/Fdz6/z/Z7//n+v7/rqqq/wcJC//Jwr//hcvn/we/6P8Y2vn/ - FNf1MwAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AFWqAwAAAAASlteLE8Pv/xK66vsSsuf/Ea7m/xGs5f8Qq+b/D6zm/w+t6P8Orun/DrHr/w2y7f8NtO7/ - DLbv/wy58f8NuvP/Db30/wy/9f8MxPf/Dcn4/w3O+f8P1Pn/E9j5/xXa+f8Z2/n/JN35/zPg+v8/4/r/ - SeT6/1Dl+f9X5vn/Xej4/2Xo9/9g6fb/Uej2/0Ll9/8v4ff/H934/xjb+f8X2/n/GNv5/xfb+f8Z3Pn/ - heHv/////v8wMzP/V1ZX//H1+f8vrNj9Etf3/xXU9c8AgIACAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA2AzBQRr+PeE8Pv/xC26v0Rsuj/ - EK/n/xCt5/8Prej/D63p/w6v6v8Osev/DbLt/w217v8Mt/D/DLny/wy68/8MvfT/C8D2/wzF+P8Myvj/ - Dc/5/xDV+f8T2Pn/Fdr5/xfb+f8a2/n/JN35/zLg+f8/4vr/SOT5/03l+f9S5vn/VOP3/0Lk+P8x4Pj/ - JN74/xvc+f8Y2/n/F9v5/xfb+f8Y2/n/Ftz6/yjZ9P+76fH////+/4uQkv/r5OH/kcvk/wi85fsZ3fv/ - FdH1egAAAAAAv78EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAVaoDAAAAABSM0VkSvu3/Eb7u/BG36v8Qs+n/ELDo/w+v6f8OsOn/DrDq/w6y7P8Ns+7/ - DLbv/wy48P8MuvL/C7v0/wu+9f8Lwff/DMb4/wzL+f8N0Pn/ENX5/xPY+f8V2vn/F9v5/xfb+f8a2/n/ - Idz5/yne+f8t3/n/K9/5/zHd+P8s2/f/Gtz5/xbb+f8W2/n/Ftv5/xfb+f8X2/n/F9v5/xjb+f8V3Pv/ - ONXw/9bu8////////////8be6/8Xqtj+F937/xXS9vQV1fgkAAAAAACAgAIAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAAAAABKc2p0RxPD/ - EL3s+xC36v8Qs+r/D7Lq/w+x6v8Osuv/DbLt/w207v8Mt+//DLnx/wy68/8Lu/T/C7/1/wvB9/8Lxvj/ - DMv5/w3R+f8Q1vr/E9j5/xXa+f8W2/n/F9v5/xfb+f8Y2/n/GNv5/xfb+f8a3Pn/Jtj3/x/b+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/GNv5/xbd+/81zez/u97q//////+82OX/JqbT/xLT9vsY2/n/ - E8/zlgAAAAAAqqoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEoDIDhGo4c0QxvL/D7vt/BC47P8Ptev/D7Pr/w6z7P8NtO3/ - DbXv/wy48P8MufL/C7rz/wu89P8Lv/b/C8L4/wvH+f8MzPr/DdH5/xDW+v8T2Pn/Fdr5/xbb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/yHb+f8o2Pf/Gtz5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/ - Fdz6/yrS8v9SsdX/WqzR/xun1v8S0vX+Gd/7/xPS9eoS0/YdAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA - EYXILg+05+0RxvL/D7zu/Q+67f8Pt+3/Drbu/w217v8Mt+//DLjw/wy68v8LuvT/C731/wq/9/8Lw/j/ - C8f5/wzL+v8N0fr/ENX6/xPY+f8V2vn/Ftv5/xfb+f8X2/n/F9v5/xfb+f8Z3Pn/Jtn3/yPb+P8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/Gdv5/yDN7/8Vxez/F9r5/xjd+vsV2fn/ - EanfaAAAAAAAVaoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAFofMRg+46vcQxvL/Drzu/Q+87/8Ouu// - Dbjv/w258P8MuvH/DLrz/wu79P8KvvX/CsD3/wrD+P8Lx/n/DMv6/w3Q+v8P1fr/Etf6/xXa+f8W2/n/ - F9v5/xfb+f8X2/n/F9v5/x7b+f8o2Pf/HNz5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/Ft36/xjf+/8W2fj7Ft/7/xKz5qsAAAAAAICAAgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABVqgMAAAAAFYvQVg+77fwPx/P+Dr7w/Q698P8NvPD/Dbvx/wy78/8Mu/P/C730/wq/9v8KwPj/ - CsP5/wrH+v8Ly/r/Dc/7/w/U+v8S1/r/Fdn5/xba+f8X2/n/F9v5/xfb+f8Z3Pn/Jdn4/yTa+P8Y3Pn/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2vn/Ftj4+xfg+/8TvevO - EXfMDwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAFYrPVQ+56vcPyvT/ - DsHy/A6/8v8NvvL/DL7z/wy+9P8Lv/X/Cr/3/wrB+P8Kw/n/Csf6/wvL+/8Mzvv/DtP6/xHW+v8U2fn/ - Fdr5/xfb+f8X2/n/F9v5/x7c+f8o2Pb/HNz5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xjb+f8X2/n/F9r5/xbZ+PoX4Pz/EsDs1hSAzhoAAAAAAICAAgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACAvwQAAAAAE4fORA606OwOzPb/DcTz+w3C8/4NwfT/DMD1/wvA9v8Lwff/ - CsH4/wrE+f8KyPr/C8r7/wzN+/8N0fr/ENX6/xPY+f8V2vn/Ftv5/xfb+f8Z3Pn/Jdj3/yPa+P8Z3Pn/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/GNv5/xfb+f8V2vn/FNr5/xXa+f0W2/n7Ft77/xK46MkUgM4a - AAAAAABVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA - EoLKKxCp4swOyvb/Dcr2/AzF9f0NxPX/DMT3/wvD+P8Lxfn/Csb6/wrI+v8Lyvv/DM37/w3Q+v8P1Pr/ - Etf6/xXZ+f8W2vn/Ftv5/x/b+P8s2ff/LeD5/yDc+f8X2/n/Ftv5/xXb+f8X2/n/Ftv5/xTa+f8T2vn/ - GNv5/yPd+P4q3vf7G+D7/hTX+P8SqeCdAIC/CAAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAAHS5CxOY2ZUOwvH/DtD5/w3K9/wLx/f9 - DMj4/wvI+f8Kyfr/C8n7/wvL+/8Mzfv/DdD6/w7U+v8S1vr/E9n5/xXa+f8j3fn/O9v3/0Lj+f8p3/n/ - Fdr5/xba+f8f3Pn/Jd75/xnb+f8b3Pn/K9/4/z/j9/1P5vb8Ser4/jDk+f8Uw+zlEpLVVAAAAAAAgIAC - AICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACAgAIAgIACAAAAABKJz0UQq+TODcn1/wzR+v4MzPn9C8n5/ArK+v4Ly/v/C8z7/wzO+/8N0Pr/ - DtT6/xHW+v8Z2vn/LN35/0Pd9/9L4/n/POL5/xzc+f8g3fn/N+H5/0bk+f9F5Pn/SOP4/Vjn+Pth6/j9 - U+z5/jbj+f8bx+/tD6Ddhg15yRMAAAAAAFWqAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAVaoDAAAAAACAvwgSkNJl - D7Dm2A3K9/8L0vv+DdL8/w7Q/PwNz/v8DM/6/QzS+v4O1fr+F9j6/yra+P882/f/PuH5/z7i+v9D4vn+ - ReP5/k/k+f1b5vj8Wuf5+1vq+f5Y7Pr/Q+f6/ira9/8Vv+reDpvafQuAyhgAAAAAAICAAgBVqgMAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAICAAgAAAAAAdLkLFI/SWxGn4rcKve7zAMX1/wbP+f8O1vv/ - F9n7/yHZ+v8l1/j9J9n4/Snf+f0v4fr9OOL6/UDl+/9G5/v/Ruj7/0Dn+/824vr/J9b1/xnB7eIQp+Ci - EJDRTgBxxgkAAAAAAAAAAQBVqgMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB - AFWqAwAAAAEAAAAAAAAAACCPzyBgwupgPMDsryzA7Ngdv+3vFMPv/hnQ9f8V1ff/Ftb3/xrW9/8c1Pb/ - GtDz/hjH7vMUvOrYEazhsBGa2XkRiNA8AHS5CwAAAAAAAAAAAAAAAABVqgMAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBVqgMAgIACAAAAAAAAAAAAAAAB - s+bmCqTk7RyF0esyHJHSShCN0V4UkNJlE4/QXRGKz0oUh80zEoDIHACAqgYAAAAAAAAAAAAAAAAAAAAA - AFWqAwBVqgMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAA - IAAAAEAAAAABACAAAAAAAAAAAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAIAAAAJAAAACQAAAAUAAAASABEWLgcpMEoINUBbCDxEYgU3P10HIilKBgYGLgAAABsAAAAZ - AAANFAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAABREREQ8VFRUYFh0dIxIJCRwXGyA4H2RzjCmnwNEwyOf2MdP3/y7W/P4t2v//K9z//yfX9/4jvdno - H32OrRsxNmgYEBA/HBERLgwMEisACAggAAAADwAAAAYAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAEEhISDhQKChkOAAASGlBcbC231eYyzvr/J7vw/h6s5v8WpuP+E6bj/BKo5fwSrOf8 - Fbbs/hjE9v4d1P//Hcru+Bqdts0eWmSAGBgYKhQKChoWFhYXAAAABwAAAAMAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAACJ/lI0zyPT/I6rl/hOa2fwOn9/8DaXl/g2q6P4Nrev/ - Da/s/w2w7P8LsOz+DK7r/Q2t6PwQte3+Esf6/iLW//8ZsM3LFVVlMAAAAAAAAAADAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAnteKYL73v/xSZ2foMoOP9Dqnp/w6u7P8MtvL/ - C7v1/wy48/8LuPT/DLn0/wy58/8MuPL/Dbfw/w207f4Mrun8F7Ho/BvG9f8U1v/4E6XbTwAAAAAAAAAD - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWqqgMAAAAAI7jvcyu15f8Qltj6D6Pk/hyk3v8gp9v/ - G6HY/xmf2f8RreX/C8b2/w3H9/8MxPf/C8L3/wvA9f8LvfT/DLry/w248P8Ut+3/GLLo+xG05/4WzPT7 - F7P0QwAAAABVVaoDAAAAAAAAAAAAAAAAAAAAAAAAAAD///8CAAAAAAiAyyIktuTyFJnb/xGh4v4irt7/ - IdHw/xja+P8X2fj/GNT1/ynE6P8hvOb/Etj5/xXY+f8T1fn/EdL4/w/O9/8OyPb/DMH0/xK98f8Xue7/ - D67p/BW26f8ayO3mAJLbHAAAAAD///8BAAAAAAAAAAAAAAAAAAAAAP///wQAAAAAAJrYdxqs4v8Rmt77 - G7Hj/xzU8/8Vy/H/GMft/xfV9f8W3Pr/FuH8/zbU8P8jyu3/FN36/xfa+P8X2/n/Ftr5/xTY+P8R1Pj/ - Gs/2/xbE8v8Pue7/Eq7o+hrB7v8FtemhAAAAAP///wMAAAAAAAAAAAAAAAAAAAAA////AwAAAAAdr+Kl - FKLf/xKo5fsbwer/HL3m/xrA6P8Yyu//F9X2/xfb+f8V2ff/G976/zPR7/8V1/j/Ftr5/x3c+f8w3/n/ - Kd75/x7c+f8i2vj/F9b3/xLN9P8Svu7+GLjq/wjC7vGJzusaAAAAAAAAAAEAAAAAAAAAAAAAAACqqv8D - AAAAAEvE67EJnd7/Fbjr+yXI6/8Y2fj/Ft77/xjZ+P8X2vj/F9r5/xja+P8V2vn/Ktn1/xvZ9/8W3Pn/ - F9v5/z7h+f9P5fn/Mt/4/x/Z+P8W2/n/F9r4/xbV9/4VyvL+Dsrz/MTr+CcAAAAAgID/AgAAAAAAAAAA - AAAAAKr//wMAAAAAS8Lqqgii4f8Xseb7ILfj/xqx4P8cqdr/Gajb/xi04/8Xu+f/F7nm/xS76f8bxO3/ - GM3y/xbV9/8S2fn/MeD4/2Hp+P803vj/Gdr4/xbb+f8X2/n/FNr4/CLg+v8Wwu7BAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAv///BAAAAABKvumVCKbk/xWe2/sgks3/J5bM/xiOy/8Xk9D/F5TR/xeT0P8WldL/ - FJvX/xOj3v8RruX/ELzt/w3J9P8j2ff/UOf2/yfb+P8W2/n/GNv5/xTa+f0n3fn/NNf05gii4CEAAAAA - ////AgAAAAAAAAAAAAAAAAAAAAC///8EAAAAAEu45XcIqOX/F4vM+yOTzP8dldD/F4jJ/xmCw/8ZgsP/ - GIvL/xaT0f8Umtf/E6Hd/xCn4/8Or+n/DLnw/wvF9v8Z0vj/G9j4/xbb+f8V2vj9Hdr4+Sfe+f8Vteeh - AAAAAKqqqgMAAAAAAAAAAAAAAAAAAAAAAAAAAKr//wMAAAAASrLgUwqh3v8emNL8GI3M/xmNy/8Zf77/ - GX/A/xmGxv8Xjs3/FZfV/xSd2f8So9//D6rm/w2x6/8MufH/Cb/3/xLI+v8Ozvr/Etb4/Bbc+fwp4/z/ - GLnnpwCAvwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgID/AgAAAABKqt0tC6Xg/yGg2P8bjcv+ - GIvK/xiPzP8Yi8v/GIrK/xeNzP8VmNT/E6fg/xGo4v8PrOf/DbTu/wq79P8Mwvn/Esf7/wjH+/0Q2vz/ - HNj3+R6n33cAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8BAAAAAECfvwgIot/f - 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 - AAAAAABVqgMAAAAAEpzZcQ7C8/8Kwvf+C8f6/RDU+fsY2Pf7Gtj4+xPb+f4c4fv/ENv5/xCg3F4AAAAA - gICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAEpTTRQ+57dMCxvj/CNP6/jDk+/425Pv/NNz3+yfE6b0XktE4 - AAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAAIC/BHnU7jtbze1wFKDbfiCg2lkWiswj - AAAAAAAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAoAAAAEAAAACAAAAABACAAAAAAAAAAAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAH - AAAACQcODiURVmaJE4alyhCUud4Omr3fDIKcwghASnwFChAxGgAACgAAAAgAAAAAAAAAAAAAAACAgIAC - AAAAABZBUS8pocrfHrf3/xSz9f0Qtvb+ELj3/hLC/f4Xx/z/HbLX6xlnelwAAAAAAAAAAgAAAAD///8B - AAAAACaMvxQcr+vdGKjn/xeu4PkUsOT7EL3v/AvG9vwLv/L7Cbfu+xK58/4ay///BZrTXQAAAAD///8D - //+/BAAAAAAtqeF3D6He/x3A5/gY1PP+F9v4/SbS8P0Y2Pb9F9r5/RTW+P4Wy/T7Frjq/wO17O97zu8f - AAAAAL+/vwQAAAAAYMLplwmu5f8fy+76Fsvv/RTU9f0b1PX9G9b1/R/e+f1G4/j9INz4/hfW9/kJx/D/ - pOP1SQAAAAC/v78EAAAAAGbH7IkIm9n/I5nP+heRzv0Wl9P9FJ/a/RGy5/0SyvP9ON/3/hvX9/kd4fv/ - FcvxwwAAAAAAAAAAv7+/BAAAAABnwuloC5LS/x6KyPoYgcL+ForJ/BKb2f0Op+T+Crbx/QzG+fwU2/v/ - JNLz5AWMzTMAAAAA////AqqqqgMAAAAAZbnlOgya1/8cicX8F4nH/RaQzP4TpNv+DLHr/Qu79PwNyvz/ - Cbbpqw+HwxEAAAAAgICAAgAAAAAAAAABAAAAAEmS2wcGndzaG4zJ/xea1P8VteTOEbHj4g268f8Owvn/ - Etj75zfI7Q4AAAAAAFWqAwAAAAAAAAAAAAAAAP///wMAAAAABpHSWh275v8YrN/XE6jeohab5/wacuP9 - HW/l/xqB6fW02PlVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEVldUYFaLbnA+o3/8Oie38 - HFfi/R9Z3fwdWuL/Km/q5djY6w0AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAGoDMChGf2t8bp+D/ - K7nn/BCW9P0bW+z9H1nl/iFk6PjY3vgnAAAAAICAgAIAAAAAAAAAAAAAAAAAAAABAAAAABSJzhoEoN3y - W8Ln/7zM0f0iz+/9GoTy+x2R8P8/t/HHgID/AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA - EaPdtBa27f8nx/P4MNv3+iHd+fhG3Oz/TdfqhQAAAAD/v78EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB - AAAAABOExhsMsejRAMf5/xnf+/wi4vv/GsHryBuU1xMAAAAA//8AAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAEAAAAAAICzClDF7FwvtOSCHprXTABttgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADs + BwAAAk1TRnQBSQFMAwEBAAFIAQABSAEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA + AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA + AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA + AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm + AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ + AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm + AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz + AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm + AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm + AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA + ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm + AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm + ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm + AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA + AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ + AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz + AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/ + AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA + AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM + AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm + ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ + AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/ + ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM + ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm + AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM + AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA + AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA + ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7 + Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/8FAAHvAuwB9wHvAQcB8AHy + NwAB7AHrAewB7QH3AQcBvAHyAfMB9DUAAm0B6wHsAfcBBwHwAfEB8gH0Af80AAHsAeoBbQHrBgAB9DUA + ARMBEgFtPAAB7AITAfc8AAESAhM9AAIVARQ9AAMVPQABbQJDPQAB7wJDARI9AAFDAREBEAHsPAAB7wMQ + ARU8AAHtARACDwIOARM6AAHvARADDgEUPAAB7wESAREBQzcAAUIBTQE+BwABPgMAASgDAAFAAwABEAMA + AQEBAAEBBQABgBcAA/8BAAHwAQ8GAAHgAQcGAAHAAQcGAAGHAe8GAAGPAf8GAAEPAf8GAAEfAf8GAAEf + Af8GAAEfAf8GAAEfAf8GAAEPAf8GAAGHAf8GAAGDAf8GAAHAAX8GAAHgAX8GAAH4AX8GAAs= + + + + + + AAABAAQAAAAAAAEAIACG9QAARgAAAICAAAABACAAKBABAMz1AAAgIAAAAQAgACgRAAD0BQIAEBAAAAEA + IABoBAAAHBcCAIlQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAAu5pQ0NQSUNDIFByb2Zp + bGUAAHgBhVTPaxNBFP42bqnQIghaaw6yeJAiSVmraEXUNv0RYmsM2x+2RZBkM0nWbjbr7ia1pYjk4tEq + 3kXtoQf/gB568GQvSoVaRSjeqyhioRct8c1uTLal6sDOfvPeN+99b3bfAA1y0jT1gATkDcdSohFpbHxC + avyIAI6iCUE0JVXb7E4kBkGDc/l759h6D4FbVsN7+3eyd62a0raaB4T9QOBHmtkqsO8XcQpZEgKIPN+h + Kcd0CN/j2PLsjzlOeXjBtQ8rPcRZInxANS3Of024U80l00CDSDiU9XFSPpzXi5TXHQdpbmbGyBC9T5Cm + u8zuq2KhnE72DpC9nfR+TrPePsIhwgsZrT9GuI2e9YzVP+Jh4aTmxIY9HBg19PhgFbcaqfg1whRfEE0n + olRx2S4N8Ziu/VbySoJwkDjKZGGAc1pIT9dMbvi6hwV9JtcTr+J3VlHheY8TZ97U3e9F2gKvMA4dDBoM + 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 + OfdRaVLeKNp5qS96lJLgJaDCSAAelUZdUVA2VRIeTn3ScF62hdb+HQJSAG+qFFLgSzbKJMCOPCqF5CCw + VaEA9jWeo6eY14W+H+TTeZyFBr/j+AOJE1RsgSPpGDHRs4R4Km0zLk2d7+G6z6at8+KtTUb67U0f3d26 + YByd8+u0ImvxzqPvgE15Tnuc+6l8CmiXdx7BTd6IF2WQ7UCt+6PiUh7puvM86vwT4cO0gHe2w4idiB7T + Aj9L+41Lm/LXQ7Nq4+TSaqcyKX899CiA1XlpOKWZfxpO6cPFjatbPY9xcif4h2mBn6VTHCbrE9GhBX4e + bXy4PEbFj+KxSuP4jDsSYK0lOypuFI9lruWeSpq18jsRV2uBtTpDTfREcANaYCOux3rK2EjgbWRZG3AJ + j60i1tMZjq0zevbV9pl2DU8A+hjqg/8PokyPVr7eu5IAAAAASUVORK5CYIIoAAAAgAAAAAABAAABACAA + AAAAAAAAAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAB + AAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAC + AAAAAgAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAEAAAAB + AAAAAQAAAAIAAAACAAAAAgAAAAMAAAADAAAABAAAAAUAAAAFAAAABgAAAAYAAAAHAAAACAAAAAgAAAAI + AAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAIAAAACAAAAAcAAAAHAAAABgAAAAYAAAAF + AAAABQAAAAQAAAADAAAAAwAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAB + AAAAAgAAAAIAAAADAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACRcXFwsVFRUMEhISDhAQEBAODg4S + DBgYFRYWFhcUFBQZExMcGxIbGxwSGhodERoaHhAZGR8QGRkfGBgYIBgYGCAQGRkfEBkZHxEaGh4SEhod + EhISHBQUFBoUFBQZFRUVGBYWFhcXFxcWDQ0aFA4ODhIPDw8RERERDxQUFA0VFRUMAAAaCgAAAAkAAAAH + AAAABgAAAAQAAAADAAAAAgAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAB + AAAAAgAAAAIAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAaChUVFQwUFBQNEBAQEA4ODhINDRoU + FxcXFhQUFBoRGhoeFxcXIRYWFiMWFhYjFg8WIxYPDyMVDg4kFQcHJRQHBycTBgYpEgYGKhgGBisXBgYs + FwYGLRcGBi0XBgYtFwYGLRcGBi0XCwstFgsLLxUQEDEUFBQ0ExgYNRMYHTUUGRkzFRUbMBcXFy0YGBgr + ExMZKRQUFCYWFhYjFxcXIRERGh4TExMbFRUVGA0NGhQPDw8REhISDhUVFQwAAAAJAAAABgAAAAQAAAAD + AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAB + AAAAAQAAAAEAAAACAAAAAgAAAAMAAAAEAAAABAAAAAYAAAAHAAAACAAAGgoVFRUMEhISDhAQEBAODg4S + DAwYFRYWFhcUFBQaEREaHhcXFyEVFRUlExkZKRYWHC4VFRswFhERLhcMDCwXBgYsFAoKMxQUGD8XJCpP + FTU8YRdCUHAWUV1+FlxtjRZmepgWb4SfFneLpRV8j6kXe5CqFXyPqRZ3i6UXb4OeFmV2lRdWZYYWQk10 + FzE2YxYcH1EXCw9DFQgIPRQMDD8XExNDFhoaRhcaGkQYGBhAFRUZPRYWFjoXFxc3FBQZNBUVFTEXFxct + ExMZKRUVFSQYGBggExMTGxcXFxYODg4SEhISDgAAGgoAAAAHAAAABQAAAAMAAAACAAAAAQAAAAEAAAAB + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAABAAAAAQAAAAEAAAACAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAIAAAaChcXFwsUFBQN + EBAQEA4ODhINDRoUFhYWFxQUFBkSEhIcGBgYIBYWFiMUFBQmEhIYKhYWFi8UGRkzFhsbORYWGjsYDg42 + EwoKNRUMED4XKS5YF0xafBZ1iqQWmrXHF7XU4RbI6fMX1ff+Gdz+/xnf//8b4f//G+P//xzk//8c5P// + HOT//xvl//8a5f//GuX//xnm//8Y5f//F+T//xff//8V1PX7FsHg6xamwNEWfJCtFk1YghYhJl0VCwtI + FgsLRhcUF00XGh1PFxcbTBUVGUgWFhpFFxcXQhQUGD8WFho7FxcXNxQUGjIXFxctFBQUJxcXFyISEhId + FhYWFw4ODhISEhIOFxcXCwAAAAgAAAAGAAAABQAAAAQAAAADAAAAAgAAAAIAAAABAAAAAQAAAAEAAAAB + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAADAAAABAAAAAYAAAAH + AAAACRcXFwsUFBQNEBAQEA4ODhINDRoUFhYWFxQUFBkSEhIcEBAZHxcXFyEVFRUkFBQUJxISGCoXFxct + FRUVMBMTGDUWGho7GBgbQRQQFD8WCQk6FhIWRhU6Q24WdYqlF6bD1BjL7fYZ3v//HOP//x/g//8i2/3/ + Jdj4/yjV9f8p1PP+K9Py/S3R8fwu0fH8LtHx/C7S8fws0vH8K9Py/CvT8vwo0/L8JtPy/CTT8/wi1fT9 + INf1/h7a+P8c3v3/GuP//xjn//8X4v//Fcjo8RaYsccWWGWOFhwiWxUHB0oWEBBQGBsbVRYZHFIXFxdO + FxcXTBUVGUgWFhpFGBgYQBUVGjwXFxc3FBQaMhcXFy0TExooFxcXIhISEh0UFBQZDAwYFQ8PDxEREREP + FRUVDAAAGgoAAAAIAAAABgAAAAUAAAAEAAAAAwAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAQAAAAIAAAADAAAABQAAAAgAABoKFRUVDBEREQ8PDw8RDQ0aFBcXFxYUFBQZExMTGxERGh4YGBgg + FhYWIxUVFSUUFBQnExMZKRcXFywWFhYuFRUVMRQUGTMWFhs5FRkdPhYNDToWCQk7FyUtWhZoe5oVrszc + F9f5/hzi//8h3f7/Jtf3/yvS8f0x0PD8M9Hw/TXS8f030vL+OdLy/znS8v850vL/OdHy/zjR8v830vL/ + N9Pz/zbT8/811PP/NdX0/zPV9P8z1vT/Mdb1/y/X9f8u1/X/K9f1/inX9f4l1fT9ItXz/B/W9f4d3Pz/ + GeT//hjk//8XwuHsFnuOrhgtNmwXCgpOFw0NTxgYG1YYGxtWFhkZUhcXF04YGBhLFhYZRxcXF0MVFRk+ + FhYWOhgYGDYUFBoyFhYWLhMTGSkVFRUlFxcXIhERGh4TExMbFhYWFw0NGhQQEBAQFBQUDQAAGgoAAAAH + AAAABgAAAAUAAAAEAAAAAwAAAAMAAAACAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAUAAAAJFRUVDBEREQ8ODg4S + DQ0aFBYWFhcUFBQZExMTGxERGh4YGBggFxcXIhUVFSQUFBQmExMaKBISGCoXFxcsFhYWLhUVFTAUGRkz + FxcbOBUQEDEUCgoyFzZAZBeGn7UYyev1G+D//yLb/P8o0/P+Mc/w/DbR8f060vL+PdLy/z7R8f89z/D/ + PM7w/zrM7/85yu//N8nv/zXI7/8zx+7/Msbu/zHH7/8wyO//L8jv/y/K8P8uyvD/Lsvx/y7M8f8vzvL/ + L9Dz/y/S8/8v0/T/L9X1/y/V9f8t1vX/K9f1/yjW9f4k1fP8IdX0/R7d/P8a5v//GNPy+BaSq8MWRFB/ + FRISVBcKB0wWEhJTGBgbVhUYG1QWFhpQFxcXTBUVGUgWFhpFFxcXQhUVGT4WFho7FxcXNxQUGTQVFRUx + FxcXLRISGCoUFBQmFxcXIRMTExsXFxcWDw8PERISEg4XFxcLAAAACQAAAAgAAAAHAAAABgAAAAQAAAAD + AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAEAAAADAAAABQAAAAkUFBQNEBAQEA0NGhQXFxcWFBQUGRMTExsSEhIdEBAZHxcXFyEWFhYj + FRUVJRQUFCcTExkpGBgYKxcXFywWFhYuFBkeMxYQFi8UBwcmGDM8VRaQq7wY0/f8Ht7//yfU9v8xzu/8 + ONHw/T7S8f9B0fH/QM/w/z7L7/87yO7/N8Xs/zPB6/8vver/K7vp/ye46f8ktun/IbTo/x+z6f8ds+n/ + HLPp/xu16v8btur/Grfr/xu56/8bu+z/HL3t/x2/7v8fwu//IsTw/yPG8f8lyfH/KMvy/yrO8/8r0PP/ + LNL0/yzU9f8r1vX/KNX0/iXS8/wh2Pn+HeT//xne/f8Xr8zbFmN0mBckLGIVCgpKFQsLSBcTE08WGRxS + FxoaTxgYGEsVFRlIFhYaRhcXF0MYGBhAFRUZPRYWFjoXFxc3FBQZMxYWFi8TExkpFxcXIhMTExsXFxcW + Dw8PEREREQ8VFRUMFxcXCwAAAAkAAAAIAAAABgAAAAQAAAADAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAEAAAABgAAAAkVFRUM + EBAQEA0NDRMXFxcWFBQUGRISEhwRERoeGBgYIBYWFiMVFRUlFBQUJxMTGigSEhgqFhYcLhUVGzAXCAgh + FSElPhV/macYz/X6INz//ynQ8v42ze78PdHw/kLR8P9Cze//P8nt/zrE6/80vur/Lbno/ya05/8gr+X/ + HKzk/xip5P8Wp+T/FKfk/xOm5P8SpuT/Eqfk/xKn5f8RqOX/Eanm/xGq5v8Rq+f/Eazo/xGu6P8RsOn/ + EbLq/xGz6/8Stez/E7jt/xW77v8Xve7/GcDv/xzD8P8fxvH/Isny/yXM8v8n0PP/KdL0/yjT9P4m0vL9 + I9X1/h/f/v8b4///F8vr8xaWr8IXV2aHFyMpWBUICD4UDAxAFRUVSBUYHEkXFxpEGBgYQRQUGD8VFRo8 + FhYWORgYGDYUFBoyFhYWLhMTGigXFxchFBQUGg0NGhQQEBAQEhISDhUVFQwAABoKAAAACQAAAAcAAAAF + AAAABAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAQAAAAIAAAACAAAABAAAAAYAAAAJFRUVDBAQEBANDQ0TFxcXFhQUFBkSEhIc + EBAZHxcXFyIVFRUkFBQUJhcXHSwVDg4lFwgPIRddbXwYwuXuH9z//yrP8v04zO78QtDv/0TO7/9Cyu3/ + PMPq/zS86P8qtOb/Ia3k/xuo4v8WpOH/FKPg/xOi4P8SouL/EqLi/xKi4v8So+L/EqTj/xGk4/8RpeT/ + Eabl/xGn5f8RqOb/EKjm/xCp5/8Rqef/Earo/xGr6f8QrOn/EK3q/xCv6v8QsOr/ELHr/xCz7P8Qte3/ + Ebft/xK57f8UvO7/Fr/u/xnD8P8cxvH/IMry/yPN8v8l0PP/JdHy/STR8vwg2Pn/HOL//xnh//8Vyuvw + FY6mtB9NWWohISY2EwYGKRMTEzUXFxw3FBQaMhYWFi8XFxcsEhIYKhQUFCYXFxciEhISHRUVFRgNDQ0T + EhISDhcXFwsAAAAJAAAACAAAAAYAAAAFAAAABAAAAAMAAAACAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAB + AAAAAgAAAAQAAAAGAAAACBcXFwsSEhIODw8PEQ0NGhQWFhYXFBQUGhERGh4WFhYjDQAAExMmKzUXlrW9 + HNv//yfR9f43yuz8Qc7v/kbM7v9Bxuv/OL7o/y605f8jq+L/G6Xg/xah3/8Tn97/E5/f/xOg3/8ToeD/ + E6Lh/xOi4f8SouL/EqPj/xKk5P8RpeT/Eabl/xGn5f8Rp+b/Eafn/xCo5/8Qqef/EKrn/xCq6P8Qquj/ + EKvo/xCr6P8QrOr/EK3q/xCu6v8Qr+v/ELDr/xCx6/8Qsuz/ELPs/xC07f8Qtu3/Ebjt/xK67v8Tvu7/ + FsHw/xnF8P8dyfL/IM3z/yHP8/4hz/H8HtLy/RzZ+v8X4///Kd79/za41tEcZHRuEBkZHxEAAA8REREe + ERoaHhQUFBkWFhYXDAwYFQ4ODhIREREPFRUVDAAAAAkAAAAHAAAABQAAAAQAAAADAAAAAgAAAAIAAAAC + AAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAACAAAABAAAAAUAAAAI + AAAaChUVFQwQEBAQDg4OEgAAAAEVUWFfGcPq7iPX/v80ye38QMzt/kbL7f9Cxer/Nrrm/ymv4v8epeD/ + F5/e/xSd3f8Tnd3/E57e/xOe3/8Tn+D/E6Hh/xOi4f8So+L/EqTj/xGl5P8RpuX/Eabm/xGn5v8QqOb/ + EKjn/xCo5/8PqOf/D6no/w+q6P8Pquj/D6vp/w+r6f8PrOn/D6zp/w+t6f8Prer/D67q/w+v6v8Pr+v/ + D7Dr/xCw6/8Qsez/ELLs/xCy7P8Qs+z/ELTs/xG17f8Rt+z/Ebvt/xK97v8VwfD/GMXx/xvJ8v8dzfP/ + HdDz/hvP8fwg1fT+Ntn6/ivj//8Vvt7YFWV9YgAAAAcAAAABFBQUDQAAHAkAAAAHAAAABgAAAAUAAAAE + AAAAAwAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAIAAAADAAAABwAAAAQAAAACFHuViR3W//8r0PT+ + Pcnr/EbM7f9Dxer/N7nm/ymt4f8cot7/Fpzc/xOb3P8TnNz/FJ3d/xOe3v8Tnt//E6Dh/xOh4v8So+L/ + EaTj/xGl5P8RpuX/Eafl/xGn5v8QqOf/EKnn/w+q5/8Pquj/D6rp/w6q6f8Oq+n/Dqzp/w6s6v8Orer/ + Dq7r/w6u6/8Oruv/Dq7r/w6u6/8Or+v/DrDr/w6x6/8Osez/D7Hr/w+x6/8Psez/ELLs/xCy7P8Qsuz/ + ELPt/xCz7P8Rtez/Ebbs/xG47f8Ru+7/E7/v/xXC8P8XxvH/Gcry/xjO9P8o0vP9N87w/Rvd/P4V4/// + FrreyBNTazcAAAAAAAAABAAAAAQAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAQAAAAQAAAAAEhIkDhedv7Qi2v//Ncnt+0TL7P1FyOv/Orvm/yqt4f8dod3/Fpvb/xSa2/8Umtv/ + FJzc/xOd3v8Tn9//E6Dg/xOi4f8So+L/EaTj/xGm5P8Rp+X/Eajm/xCo5/8Qqej/D6ro/w+r6f8PrOr/ + D63r/w+t6/8Orez/Dq7s/w6u7P8Or+z/Dq/s/w6w7f8Ose3/DbHt/w6x7f8Ose3/DrHt/w6x7v8Osu7/ + DrLu/w6y7f8Osu3/DrLt/w6y7P8Os+z/D7Ls/w+y7P8Qsuz/ELPt/xCz7P8Qs+z/EbTr/xG17P8Rt+z/ + Ebrt/xK97v8Uwe//FMTw/xrL8v82zfL/JdHz/RPP8vwW3Pv/FOH//BWfwpIAM00KAAAAAAAAAAQAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAABJYex0Xtd7PKNb9/zzK6/pGy+z+ + QcHo/zCx4v8go93/F5va/xSZ2v8Umdv/FJvc/xSd3f8Un9//E6Dg/xOi4f8SpOP/EaXk/xGm5v8QqOf/ + EKnn/xCq6f8PrOn/D63q/w+u6/8Or+z/DrDt/w6x7v8Ose7/DbLv/w2x7/8Nse//DbLv/w2y7/8Nsu// + DLLv/wyz7/8NtO//DbTv/w207/8NtO//DbPv/w2z7/8Ns+//DbTv/w607/8Os+//DrPv/w607v8OtO7/ + DrPt/w+z7P8Ps+3/ELPt/xCz7f8Qs+z/ELPs/xGz6/8Rtez/Ebfs/xK57f8Tve3/FMLv/y/I8P8sy/L/ + Fc70/xXO8/wV0fP8FuD+/xXW/tMQndkvAAAAAABAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABVAwAAAAAOn90lGc3+3S7S9f9Byuv7R8ns/zq65f8nqN//Gp3b/xWZ2v8Umdr/FJrb/xSc3f8Un9// + E6Hh/xKj4/8SpeT/Eabl/xCo5/8Qqej/EKvp/w+s6v8Pruv/Dq/s/w6w7f8Ose7/DrLv/w6z7/8Ns/D/ + DbTw/w208P8MtfH/DLTx/wy18f8MtfL/DLXx/wy18f8MtfL/DLby/wy38v8Mt/H/DLfx/wy38f8Mt/H/ + DLbw/wy28P8NtfD/DbXw/w218P8NtfD/DrTw/w607/8OtO//DrTu/w607f8PtO3/D7Pt/xCz7P8Qsuz/ + ELPs/xGz6/8RtOv/EbTs/xK37P8Ruez/KcLu/zDG8P8VxvH/Fcnz/xXO9P4VzvP7FtX0/xbX+fYUtfFa + AAAAAACAvwQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAE6bmKBrE7uIzze7/Rcvs+0XF6v8zs+P/ + IKHc/xeZ2f8Vmdn/FZnb/xSb3f8Un9//E6Lh/xKk5P8SpuX/Eajm/xCp6P8Qq+r/EKzr/w+t7P8Pr+z/ + DrHt/w6y7v8Os+//DrPw/w208P8NtfD/DbXx/wy28f8Mt/L/DLfy/wy38v8Mt/P/DLfz/wy48/8MuPP/ + DLj0/wy48/8MufP/DLnz/wy58/8MufP/DLnz/wy48v8MuPL/DLjy/wy38v8MuPL/DLfx/wy38f8NtvD/ + DbXw/w218P8Ote//DrTv/w617v8OtO7/D7Tt/w+z7f8Ps+z/ELLs/xGz6/8Rs+v/EbPr/xC06/8jvO3/ + MsLt/xe/7v8Uwe//Fcfx/xbL8/8VzvT8FdT1/RbY9f8Ut+d/AAAAAABVqgMAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoD + AAAAAA+W2iIbw+3gNNDx/0fM7vxCw+n/LK7h/xye2v8WmNn/FZna/xWa3P8Unt//E6Hh/xKk4/8SpuX/ + Eqjn/xGp6P8Qq+r/EKzr/w+u7P8Pr+z/DrHt/w6y7v8Osu//DrPw/w208P8NtPD/DbXx/wy28f8Mt/L/ + DLfz/wy58/8MufP/DLnz/wy69P8MuvT/DLn0/wy59P8LufT/C7n0/wu69P8MuvT/DLr0/wy69P8MuvT/ + DLr0/wy68/8MuvP/DLnz/wy68/8MufL/DLny/wy48v8NuPH/Dbfx/w238P8OtvD/DrXv/w617/8Ote7/ + D7Xu/w+07f8Ps+z/ELPs/xCz7P8Rsuv/D7Pr/x247P8zv+3/Gbrs/xO67P8Vv+7/FcTw/xXK8v8VzfP9 + FdH1+xbb+f8Vu+uPAAAAAACAgAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAMktsVGsHt1jbR8v9GzO77PsHo/yiq3/8am9n/ + FpjY/xWZ2/8VnN7/E6Dg/xOj4v8SpeX/Eqfn/xGp6P8Rqun/EKvq/xCs6/8Prev/Dq/s/w6x7f8Ose// + DrLv/w2z7/8Ns/D/DLTw/wy28f8Mt/L/DLjz/wy48/8MufT/DLr0/wy69P8LufT/C7r0/wu69P8LuvT/ + C7r1/wu69f8Lu/X/C7v1/wu79f8Lu/X/C7v1/wu69f8LuvT/DLr0/wy69P8MuvT/C7r0/wy68/8MuvP/ + DLrz/w258/8NufL/Dbnx/w248P8Nt/D/Drbw/w627/8Ote//D7Xu/w+07f8PtO3/ELPs/xCz7P8Qsuv/ + Gbbs/zO+7P8bt+v/ErXq/xS57P8Vve3/FcLv/xXH8f8VzPP+FdD1+hfa+f8Wve2aAAAAAACAgAIAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAB + AGbMBRi8670z0vL/Rs3u+z3A6P8mqN//GZrZ/xaY2P8Vmdv/FZ3e/xOg4f8To+P/Eqbl/xKo5/8Rqef/ + Earp/xCr6v8Qruz/DrHt/w6z7v8NtO//DbTw/w208P8NtvH/DLjy/wy68/8MvPX/DLz1/wy68/8MuvP/ + DLrz/wy79P8Mu/T/C7z1/wu89f8LvPX/C731/wu89f8LvfX/C731/wu99f8LvfX/C731/wu99f8LvfX/ + C7z1/wu99f8LvfX/C7z1/wu89f8Lu/X/C7v0/wy79P8Mu/T/DLr0/wy68/8MuvP/Dbny/w258f8NufD/ + Dbjw/w637/8Otu//D7Xu/w+07f8PtO3/ELTt/w+z7P8Utez/Mb7s/yC47P8Qsur/E7Xq/xS36/8Vu+z/ + FcDu/xbG8P8WzPP/Fc/1+hfa+f8Vu+yTAAAAAABVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWqAwAAAAAXs+eTMNPz/0XO7vs8wOj/JKjf/xiZ2f8WmNj/ + FZrb/xSd3/8ToeH/E6Tj/xKm5f8Sp+f/Eajn/xCq6f8Pruz/D6/s/w+r6f8Qo+L/Epra/xST1P8VjtD/ + FovN/xWLzv8Uj9D/E5bX/xGh3/8OsOr/Dbzz/wzC+P8Mwfb/DL71/wy+9f8Mv/X/DL/1/wu/9f8Mv/X/ + DL/2/wvA9/8LwPf/C8D3/wvA9/8LwPf/C7/3/wu/9/8Lv/b/C772/wu+9v8LvvX/C771/wu+9f8LvvX/ + C731/wy89P8Mu/T/DLv0/wy79P8Mu/P/DLry/wy68f8NufH/Dbnw/w648P8Ot/D/Drbv/w+17v8Pte3/ + ELTt/xC07P8tve3/Jbrs/xCy6v8Ssun/ErPq/xO16/8Vuuv/Fb7t/xbF8P8WyvP/Fs71+xfZ+P8VueqD + AAAAAACAvwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA + FKLfWCjR8/9Dz/D8PMPq/yOq4P8Ymdn/FpfY/xWa2/8Und//E6Hh/xOk4/8SpeX/Eqfm/xKo5/8QrOr/ + D6zq/xCi4f8Vk9T/HIjJ/yOCxP8mgcH/KIPA/ymEwP8phL//KYG+/yZ8u/8keLn/IXa5/x55vf8ahcb/ + FJvY/w+27P8Mx/j/DMn5/w3F9v8Nxff/Dcb3/wzH+P8Mxvj/DMb4/wzG9/8Mxff/DMX3/wzE9/8MxPf/ + DMT3/wzC9/8Mwvf/DMH3/wzB9/8LwPf/C7/2/wu/9f8Lv/X/C771/wu+9f8MvfT/DLz0/wy89P8MvPP/ + DLvz/wy78v8NuvH/Drrx/w658f8Ot/D/Drbv/w617v8Pte3/DrXt/ye87f8ou+z/ELLq/xKy6v8Ssun/ + ErLq/xS16v8Uuev/Fb7t/xbE8P8VyvP+Fs70+xfY+P8WsOdqAAAAAACAvwQAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABKEyh0fxu3nPNPy/zzG6/4kreH/GJvZ/xeX2P8Vmdr/ + FZze/xOg4f8To+P/EqXl/xKm5v8Rquf/EKvp/xGh4P8YkND/JYrI/y+Syv8zodD/NbDX/zW73P8zweD/ + LsDi/yq74f8nsd7/I6XZ/yOg1v8jmdH/I4/L/yGEwv8fe7z/Hn2//xeSz/8Rt+n/Ds/5/w7P+f8Ozfj/ + Dc34/w3N+P8NzPn/Dcz4/w3M+P8NzPj/Dcv4/w3L+P8Nyvj/Dcn4/w3I+P8Mx/j/DMb3/wzF9/8MxPf/ + DMP3/wzB9v8MwPb/DMD1/wy/9f8Mv/X/DL70/wy99P8NvfT/Dbzz/w278v8Nu/H/Dbrx/w268f8OufD/ + Drjv/w+27/8Nte7/JLzu/yq97f8QtOv/EbLr/xKy6v8Ssun/ErLp/xS06v8UuOr/Fb7t/xbE8P8VyvL+ + FtH1/RbW9/wWqeJHAAAAAABVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA + Fq/jojHW9f88ye37JrPk/xee2/8Wl9j/FpjZ/xWb3v8UoOH/E6Lj/xOk5P8SpuX/Earo/xCo5v8Vldb/ + I4zJ/zKcz/82t9z/Nszm/zLX7f8q2PD/INXz/xjQ9P8TzfX/Esz2/xLO9/8Sz/f/FM72/xXL9P8ZxfD/ + JL7p/yGu3/8amtL/HYnH/x2Fxf8Wn9f/Ecnz/xHV+v8R0vn/ENP5/xDS+f8Q0vn/D9H5/w/R+f8P0fn/ + D9D5/w7Q+f8Oz/n/Ds75/w3N+f8NzPn/Dcv4/w3J+P8NyPj/DMj3/w3G9/8MxPf/DML2/wzC9v8Mwfb/ + DMD1/wy+9P8MvvT/Db3z/w288/8Nu/H/Dbvx/w678f8OuvD/Drnw/w247/8jvu//Kr7u/w+17f8Rs+v/ + EbLr/xKy6v8Ssun/E7Lp/xS06f8VuOr/Fr3s/xbF8P8Wy/L9F9L2/xfQ9OoVn90lAAAAAACAgAIAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABKV1Ugi0PT/Nc3w/Sm66P8Yot7/FpnY/xaY2P8Vmtz/ + FJ7g/xOi4v8TpOP/Eabl/xGq6P8RpeT/GZLR/yuTy/8zstr/MtHp/y3b8P8i1/P/GNH1/xLN9v8Qzvf/ + EdH3/xPT+P8T1fj/FNX4/xTW+P8U1/j/FNf5/xTY+f8b2vn/Ltr3/zfP8P8juOX/F6HY/x2Uzv8bndT/ + FcXu/xTZ+v8U1/n/FNf5/xTW+f8T1vn/E9b5/xLV+f8S1fn/EtX5/xHU+f8R0/n/ENP5/xDS+f8P0fn/ + Ds/5/w7O+P8Ozfj/Dcz4/w3L+P8Nyvf/Dcf2/w3E9v8NxPb/DML1/w3A9f8Nv/T/Db70/w298/8NvPL/ + Dbzy/w678f8Ou/D/Dbnw/yO+7/8ovu//D7bt/xC07P8Rs+v/EbLr/xKy6f8Ssun/E7Hp/xS06f8Vuer/ + Fr7t/xfF8P8WyvL8F9X2/xbI8ccAgL8IAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAgIAC + F7vqyinR8/8pwOv9Gqrh/xab2v8Xl9j/FZna/xWd3/8ToeL/E6Pj/xKl5P8Squj/EaXj/xuRz/8sl87/ + MMDh/y3b7/8j2PP/FtD1/xLO9v8S0ff/FNT3/xXW+P8W1/j/Ftj4/xbY+P8W2Pj/Ftn5/xbZ+f8W2fn/ + Ftn5/xTZ+f8U2vn/KN/6/0rk+P8/zu7/Gq3e/xme1P8cp9r/Fs/z/xbb+v8W2fn/Ftn5/xXZ+f8V2fn/ + Fdn5/xXY+f8V2Pn/FNf5/xTX+f8U1vn/E9b5/xPW+f8S1fn/EdT5/xDS+f8P0fn/D8/4/w7P+P8Ozvj/ + Dsv3/w3J9/8NyPb/Dcb2/w3D9f8NwvX/DcD1/w2/9P8NvvP/Dr3y/w688f8NvPH/J8Dw/yW/7/8Otu3/ + ELXt/xC06/8Ss+v/ErLr/xOx6f8Tsen/FLLp/xS16f8Wuev/Fr/t/xfH8f8Wy/P7F9f4/xW5648AAAAA + AFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABSY11kZz/X/IMPu/Byy5v8Wod3/FpjY/xaY2f8Vm93/ + FJ/h/xOi4/8TpeP/Eqnn/xGp5v8blNL/K5jP/y3F5P8q3vL/G9L0/xLN9v8T0vf/FdX4/xbX+P8W2Pj/ + Ftn4/xbZ+f8W2vn/Ftr5/xfa+f8X2vn/F9r5/xfa+f8X2vn/F9r5/xfa+f8T2fn/GNv5/0jn+v9b4fT/ + Kbfh/xae1f8brN7/F9L0/xfc+v8W2vn/Ftr5/xba+f8W2vn/Ftr5/xba+f8W2vn/Ftn5/xXZ+f8V2fn/ + Fdn5/xXY+f8V1/n/FNf5/xPW+f8T1fn/EdP5/xDT+P8P0fj/Ds/3/w7N9/8OzPf/Dsr3/w7I9v8Oxvb/ + DsP1/w7B9P8OwPP/Dr7y/w6+8v8rwvH/IL/w/w257/8Qt+7/ELXt/xG07P8Ss+z/ErLq/xOx6f8Tsen/ + FLLp/xW26f8Wuuv/FsHu/xfJ8v8Wz/T9F9b3/xSo5EwAAAAAAFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA + FLbnvRfN9P8XuOr8F6nh/xac2v8XmNj/FZnb/xWd4P8ToeL/E6Tj/xKn5v8Rq+j/F5vY/yiVz/8sxub/ + KN/0/xbP9f8T0Pb/FdX3/xbX+P8W2Pj/Ftn5/xba+f8X2vn/F9r5/xfa+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xjb+f8X2/n/ENn5/zjk+v9s7Pj/O8Ll/xeb1P8asOD/F9j3/xfc+f8X2/n/ + F9v5/xfb+f8X2/n/F9r5/xfa+f8W2vn/Ftr5/xba+f8W2vn/Ftr5/xXZ+f8V2fn/Fdn5/xXY+f8U2Pn/ + FNb5/xPW+f8S1Pn/EdP3/xHR9/8Q0Pf/D873/w7M9/8Oyvf/Dsf2/w7F9f8NwvT/EsPz/y/G8f8awfL/ + Dbvw/xC67/8QuO7/ELbt/xG17P8StOv/ErLp/xOx6f8Usen/FLPp/xa36v8WvOz/F8Pw/xbK8v0X0/b/ + F8703g6c1RIAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAAAAABSN0CYVyPL3F8Xw/xaz5/4Wo9//FprZ/xaZ2f8Vm93/ + FJ/h/xOj4/8SpeT/Eavp/xOm4f8ik8//K73i/yng9f8Wz/X/FNL3/xbW+P8W2Pj/Ftn4/xfZ+f8Y2fn/ + GNr5/xfa+f8X2vn/F9r5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Z2/n/ + ENn5/zHh+f9y8Pn/QsPl/xaa0/8Zv+j/F936/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfa+f8X2vn/Ftr5/xba+f8W2vn/Ftr5/xba+f8W2fn/Ftn5/xXY+f8U1/n/FNb4/xPV+P8S0/f/ + EdH3/xDP9/8Qzff/D8v3/w3I9f8ayfX/MMjy/xTD8/8OvvH/D73w/xC77/8Que7/ELbs/xG16/8Ss+r/ + ErLp/xOx6f8Usun/FbTp/xa56v8Wv+7/F8bx/xXL8/sX1/j/FbfqhwAAAAAAVaoDAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAvwQAAAAA + E57YaRXP9f8Wvu38F67k/xaf3P8Wmdj/FZna/xSd3/8ToeL/EqTk/xKo5/8Rrun/GpnV/yer2v8q3/P/ + GNH1/xTS9/8W1/j/Ftn4/xbb+f8X3Pr/F937/xfe+/8X3vv/F977/xfe+/8X3vv/F936/xfc+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Z2/n/ENn5/zHh+f917/j/Pbvh/xWh1/8Y0vT/ + F936/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfa+f8X2vn/ + Ftr5/xba+f8W2vn/Ftr5/xba+f8W2fn/Fdj4/xXX+P8U1vj/E9X4/xPT9/8S0ff/EM/3/yXP9f8ty/P/ + EMf1/w/D8/8PwPL/EL3w/xC87/8Quu7/Ebfs/xG16/8StOn/ErLp/xOy6f8Vsun/FbXp/xa76/8Xwu// + Fcny/hfQ9f8X0fb0E5/fKAAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWqAwAAAAAUruKmFs31/xa46vwWqeL/Fpza/xWZ2f8Vm9z/ + FJ/g/xOj4/8SpuX/Eq7q/xSp5P8emtP/KtTu/x3Y9v8U0fb/Ftj4/xbb+f8X2/r/GNX2/xnM8f8ZxOv/ + Gb/o/xm85/8Zvef/GcDp/xjG7f8YzvH/F9j3/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8Z2/n/ENn5/0Ll+f906vb/KanZ/xS45f8Y3vr/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/GNv5/xjb+f8Y2/n/F9v5/xfa+f8W2vn/Ftr5/xba+f8W2vn/ + Ftr5/xbZ+f8V2Pj/FNb4/xTV+P8V1fj/MdH1/yfQ9v8Pzfb/EMn1/xDG9P8QwvL/EL/x/xC98P8Ruu7/ + Ebfs/xK16/8StOr/ErLp/xSy6f8UtOn/Frfq/xa+7f8XxfD/Fsrz+xfX+P8WvOuZAAAAAABVqgMAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA + AAAAARW76dIXyfL/FrTo/Ral3/8Wm9n/FZrZ/xWc3v8ToeL/E6Xk/xKp5/8StOz/FJ7b/yO24P8l3/b/ + FND2/xbZ+f8W1/f/Gcnv/x234/8dqNn/Hp7T/x6Yz/8dlc3/HJTN/xyVzv8bmND/Gp3T/xmj2P8YwOn/ + F9z5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/FNr5/13t+v9d0ur/ + FqXZ/xfV9v8X3Pr/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/GNv5/xvb+f8e3Pn/ + Hdz5/xzb+f8b2/n/Gtv5/xrb+f8Y2/n/GNr5/xfa+f8W2vn/Ftr5/xba+f8W2fn/Fdj4/x3Z+P830/T/ + H9b3/xLR9/8Tz/b/Esv1/xHI9P8RxPL/EMHx/xC+8P8RvO7/Ebjt/xK26/8StOr/E7Pp/xOz6f8Vtun/ + Frvs/xfC7/8VyfL+F9H1/xbQ9PERmd0eAAAAAACAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAANgMwUFMPv7RfF8P8Wsuf+FqLe/xab2f8Vmtv/ + FJ/g/xOj4/8Tp+X/Eq/p/xKz6v8Wntn/J9Pu/xjW9/8V1vj/Gczw/x6z4P8hodX/IZrQ/x+b0P8eoNX/ + HKnb/xuz4f8Zvef/GMXs/xjL8P8Y0PP/F9P0/xfW9v8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xjb+f8T2vn/J9/5/3Hr9/8wr9z/E8Ps/xje+/8X2vn/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/Idz5/yje+f8o3vn/Jt35/yTd+f8i3fn/INz5/x/c+f8d3Pn/ + HNv5/xrb+f8Z2vn/F9r5/xba+f8V2vn/KNr4/zXV9f8Z2vn/FNb4/xTU9/8U0fb/E872/xLL9f8Rx/P/ + EcPy/xHA7/8Rve7/Errt/xO36/8Tter/E7Pp/xS26f8Wuev/F7/t/xbG8P8VzPP7F9f4/xey6G0AAAAA + AIC/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAC + AAAAABKMzioUx/D9F8Lu/xav5f4WoNz/FprZ/xWb3f8ToOH/E6Xk/xKq5v8Stez/ErDn/x2y4f8g2/b/ + FdL3/xzA6f8iptj/I57S/yCm1/8ds+D/GsPq/xjP8v8X1/f/F9z6/xfe+/8X3vv/F976/xfd+v8X3fr/ + F9z6/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8R2fn/ + Vev6/1XL5/8SteP/GN77/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8k3fn/ + MeD5/zLg+v8x4Pr/Lt/5/y3f+f8r3/n/Kd75/yfe+f8m3fn/JN35/x/c+f8Z2/n/F9r5/xjc+v8y1/b/ + Ldn3/xXb+P8W2Pj/Fdf4/xXW+P8U1Pf/FNH2/xTN9f8SyvT/Esby/xLC8P8Svu//E7vt/xO46/8Utur/ + FLbp/xa46v8Wve3/FsPv/xXJ8vwX1vf/F8HusQAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqqqgMAAAAAXLjiPQfB7/8ZwO3+F6zk/xaf3P8Wm9r/ + FZ3e/xOi4v8Tp+X/Eq3o/xK67v8TsOX/Icfq/xnW9/8eueX/JKHU/yKm2P8dvOX/GdDz/xfb+f8X3vr/ + F936/xfc+f8X2/n/F9r5/xfa+f8X2vn/F9r5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/GNv5/xLZ+f8w4/r/aeDx/x2z4f8W2fj/F9z5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/GNv5/yLd+f814Pn/O+H6/znh+v844fr/NuH6/zXg+v804Pr/ + MuD6/zDg+v8u3/n/Jt35/xvb+f8W2/n/IN35/zjW9f8j3Pn/Fdr5/xba+P8W2fj/Ftj4/xXX+P8U1ff/ + FNP2/xTP9v8UzPT/FMnz/xTE8f8UwO//FL3u/xS67P8Uuev/Frnr/xa87P8Wwu//Fcny/RrU9v8IxfDg + gL/fCAAAAAAAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + qqr/AwAAAABqv+ZIBcHv/xm97f0WquP/Fp7c/xWb2/8Un9//E6Tj/xOp5v8Ssur/Er3v/xa46P8e0PH/ + H7vm/yWj1f8fs+H/Gs7x/xfc+v8X3fr/F9v5/xfa+f8X2vn/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + Ftv5/xjc+f9j6ff/Mbzj/xLS9f8Y3fr/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + Hdz5/zLg+f9B4/r/QeP6/0Dj+v8/4/r/PeL6/zzi+v864fr/OeH6/zfh+v8r3/n/G9v5/xbb+f8q2/j/ + Ndf2/xvd+v8X2vn/F9r5/xba+f8W2vj/Ftn4/xbY+P8V1vj/FdT3/xTS9v8Vz/X/Fcv0/xXH8v8Vw/D/ + FL/u/xW97f8WvOz/Fr3t/xbC7/8VyPL+GtL2/wbI8fOh2ewbAAAAAICA/wIAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqqv8DAAAAAGnC5lAGv+7/G7fo/Ben4f8Vntv/ + FZzc/xOg4P8TpuT/Eqzo/xK27P8TwPD/F8Pt/yDA6P8ip9j/IMDo/x/a9/8W3Pr/F9r5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/ENn5/07o+f9Eyej/EM3y/xje+v8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/J975/z/j+f9I5Pr/R+T6/0fk+v9F5Pr/ + ROT6/0Lj+v9B4/r/P+P6/y7f+f8b2/n/Gt36/zXX9v8s2vj/Ftz5/xfb+f8X2/n/GNr5/xfa+f8W2vn/ + Ftr4/xbZ+P8W1/j/Fdb3/xXU9/8W0fb/Fs71/xbK8/8VxvH/FsPv/xbC7v8Wwu//FsXw/xXK8v4b0/b/ + Bsvz+aXa8CIAAAAAgID/AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAKqq/wMAAAAAbMLmUwW+7f8atef8F6bg/xWe2/8Vnt3/E6Lh/xOo5f8Sr+n/Errt/xPE8f8YxO7/ + Ia3d/yvD5/8/5Pb/Idv3/xfY+P8Y2vj/GNr4/xja+P8Y2vn/GNr5/xfa+f8X2vn/F9r4/xfa+P8X2vj/ + F9r4/xja+f8Y2vj/GNr5/xja+f8Y2vj/GNr4/xja+P8Y2vj/GNr4/xja+P8Y2vj/GNr4/xja+P8Y2vj/ + GNr4/xna+P8S2Pn/N+T6/0/S7f8Ry/D/GN76/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8c3Pn/M+D5/0nk+f9N5Pn/TOT5/0zk+f9K5Pn/SeT5/0jk+v9E5Pr/L+D5/xjb+f8i3fn/ + Odb1/yHd+v8W2/n/F9v5/xfb+f8X2/n/GNv5/xja+f8X2vn/Ftr4/xba+P8W2Pj/Ftf4/xbW9/8W0/f/ + FtD2/xbN9P8WyvL/Fsjy/xbI8f8WyvL/Fc30/hzW9v8FyPHxo9brGQAAAAAAAP8BAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqr/AwAAAABqweZSBb/t/xq36fwWp+H/ + FZ7c/xSf3v8To+P/Eqrm/xKy6v8Su+3/FMby/xm+6v8nteD/SeHz/yfY9f8T0/b/GNb2/xfW9/8X1/f/ + GNf3/xjY9/8Y2fj/GNr4/xjb+f8Y3Pr/GNz6/xjc+v8Y3Pr/GNz5/xjb+f8Y2fj/GNj3/xjY9/8X1/f/ + F9f3/xfX9/8X1vf/F9b3/xfW9v8X1vb/F9b3/xfX9/8X1/f/GNj3/xTX+P8l3/n/UNjw/xXL8P8Y3Pn/ + GNr5/xja+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8j3fn/QeP5/1Ll+f9S5fn/ + UeX5/1Dl+f9P5fn/T+X5/0jk+f8t3/n/GNz5/y7a9/802Pb/Gd36/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xjb+f8Y2vn/F9r5/xba+P8X2vn/F9j4/xfX+P8W1vf/FtP2/xbR9f8Wz/T/Fs/0/xfP9f8W0vX9 + HNr4/wbC7tWAgIACAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACqqv8DAAAAAGu/5EwFvu3/Grjq/Ran4f8Vn93/FJ/f/xOl4/8Sq+f/ErPq/xO77f8UxO// + GLbl/znG5v822fL/Esjx/xjN8v8XzvL/F8/z/xfR9P8X0/X/FtX2/xfU9v8Xz/L/GMft/xnA6f8ZvOf/ + Gb3o/xjA6v8XxOz/F8jv/xfQ8/8X0/X/F9L0/xfR9P8X0fT/F9Dz/xfP8/8Xz/P/F8/z/xfP8/8X0PT/ + F9D0/xbR9P8W0vX/FdL1/xrX9/9K2vL/Gczw/xXZ+P8X2Pj/F9n4/xja+P8Y2vn/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xvb+f804fn/Ueb5/1bm+f9V5vn/Veb5/1Tm+f9U5vn/SeT5/yje+f8c3fr/ + N9b1/ync+P8W2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2vn/GNr5/xja+f8Y2vn/ + GNr5/xjY+P8Y2Pj/F9b3/xjV9/8Y1fb/F9X3/xrV9/sc3fr/A7PomgAAAAD///8DAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqq/wMAAAAAa77kQwW97f8Zuev9 + Fafh/xWg3v8UoeD/E6bk/xKs6P8Ss+r/E7jr/xW86/8ZseL/O8rp/yTH7P8Vvur/F8Lr/xfE7f8Xxu7/ + F8nw/xjG7f8aueX/HKrb/x2c0/8els7/HZbO/xuZ0f8an9X/Gaba/xis3v8Ys+L/F8Lr/xfK8P8Xye// + F8jv/xfH7v8Xxu7/F8bu/xfF7v8Xxe7/F8bu/xbG7/8WyO//Fsjw/xbK8f8Wy/L/Fc7z/z/W8v8czPH/ + FNP2/xbU9v8W1vf/Ftf3/xbY+P8X2fj/F9r5/xja+f8X2/n/F9v5/xfb+f8X2/n/GNv5/yrf+f9O5vn/ + Wuf4/1nn+P9Y5/j/WOf4/1fn+f9G5Pn/Id35/ybc+P841/X/Hd36/xba+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2vn/GNr5/xja+f8Y2fj/Gdn4/xbY+P8f2fj/ + Ldz4/RrY+P8Ent1EAAAAAP///wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAqqqqAwAAAABrvOQ5BLvs/xm76/4VqOL/FaHe/xSi4f8Tp+T/Eq3o/xKx6P8Us+f/ + FrLl/xas4P81xef/H7fk/xWx4/8XteT/F7jm/xe45v8brd7/H53S/yCSy/8flMz/HZ7U/xuq3P8ZtOP/ + GLnm/xe86P8Xvej/F73o/xe86P8Xu+f/GLvn/xe86P8XvOj/F7vo/xe65/8Xuuf/F7rn/xe65/8Wuuj/ + Frvp/xW86f8Vvur/FcDr/xbC7f8TxO7/Ms7v/xzI7/8Ty/L/Fc3z/xXQ9f8V0vb/FdT2/xXW9/8W2Pj/ + Ftn4/xfa+f8X2vn/F9v5/xfb+f8X2/n/Jt75/0zl+P9c5/j/XOf4/1vn+P9b5/j/WOf4/z7i+f8e3vr/ + Mtj3/y/a9/8X3Pn/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8Y2/n/GNr5/xja+f8V2vn/Htv5/zbe9/wk3/r/E8DtuQAAAAAAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIACAAAAAGu44SsDt+v8 + Gbvr/xSp4v4Vod//FKPh/xKo5f8SrOf/E67m/xSs4/8WqeD/FaTc/y+64v8dqdz/FqTb/xeo3f8apdr/ + IZnQ/yOOyP8dj8r/HKDV/xqs3v8Xr+H/F67g/xer3f8XqNv/GKfb/xeo2/8XqNz/F6nd/xiq3v8Yq97/ + GKzf/xet4P8XreD/F6zg/xes4P8XrN//Fqzg/xWt4f8VruL/FLDj/xWy5P8UtOX/FLfn/xK56P8nxOz/ + GsLs/xPC7v8Uxe//FMjx/xTL8/8UzvT/FdD2/xXT9v8V1vf/Fdj4/xbZ+P8W2vn/F9r5/xfa+f8j3fn/ + SOX4/13p+P9e6fj/Xun4/17o+P9W5/j/MuH5/yLe+f841vX/It35/xbb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8W2/n/Ftr5/yXc+f843vj+ + MeD5/xTP9fMWm94uAAAAAICAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAICAgAIAAAAAaLPZGwO06fIave3/FKrj/hSi4P8TpOH/E6jl/xKr5v8TquT/ + FKbf/xah2/8Umtb/Ka3c/x2g1/8VmtX/HJjS/yWNx/8gh8T/HZPO/yWt3P8krdz/GZ7U/xeY0f8Xl9D/ + F5nR/xia0/8Ym9T/F53V/xed1f8Xn9b/GKDX/xeg2P8Xodj/F6HZ/xeh2P8Xodn/F6DZ/xah2f8Wotr/ + FaPb/xWk3P8Upd3/FKfe/xSq4P8UrOL/Eq7j/xq25v8Vt+j/Erjp/xK86/8SwO3/EsPv/xLH8f8TyvP/ + E830/xTQ9f8U0/f/FNX3/xXX+P8W2Pj/Ftr5/x7b+f9C5Pj/Xen3/1/p9/9e6ff/Xun3/07l9/8n4Pn/ + Ldr3/zXX9v8Z3fr/F9r5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8Y2/n/FNr5/x/c+f824Pn/Q+H5/j/i+vwa2Pf/EKXhXQAAAAAAVaoDAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAABbpNsO + A7Dm5hq/7f8Uq+T+FKPh/xOk4v8TqOX/E6nl/xSn4v8Vodz/FpzX/xWV0v8hoNb/HZvT/xqQzf8licX/ + H4XE/yeh1P82ueD/J6LU/xmNyf8YjMn/GI7L/xiQzP8Ykc3/F5LO/xeUz/8XltH/F5fS/xiZ0/8XmtT/ + F5rU/xea1P8XmdP/F5jT/xeZ1P8XmdT/FpnV/xab1v8WnNf/FZ3Y/xSf2f8Uodr/FKPd/xSl3/8TqOD/ + Eqri/xKt5P8SsOb/EbPo/xG36v8Ru+z/EL/u/xDC8P8RxvL/Ecrz/xLN9f8S0Pb/E9P3/xTW+P8V2Pj/ + Gdn5/zjh+P9Z6Pb/X+r3/1/q9/9b6ff/PuP3/yLf+v821/X/Kdz4/xbb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xPa+f8t3vn/S+P6/1Dk+v9M5fr8 + Itz5/w+e2nYAAAAAAFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEEquLSGcHv/xOr5f0UpeL/E6Tj/xOo5f8TqOT/ + FKXg/xWe2v8WmNT/F5PQ/xmU0f8ck8//I4jF/yCGxf81stz/Pb3h/x6Qy/8Wg8P/GIfG/xiJx/8Yisj/ + GIzK/xiPzP8Ykc7/F5PP/xeU0f8XldH/F5XR/xeU0P8Xk9D/F5PQ/xeS0P8Xk9D/F5PQ/xeU0f8WltP/ + FpbU/xWX1f8Vmdb/FZrX/xSd2f8Un9v/FKLc/xOj3v8TpuD/Eqji/xKq4/8RreX/EbHn/xC06f8QuOv/ + ELzt/xC/7/8Pw/H/D8fz/xDK9P8Rzvb/EdH3/xPU+P8U1vj/LN34/1Hn9v9d6fb/Xen2/1Dn9v8r4Pj/ + J9z4/zjW9f8d3fr/Ftr5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8T2vn/POH5/2Dm+v9a5fr/UeX6/ifb+P8Pm9h1AAAAAACAvwQAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C + AAAAAAOk4LwZwvD/FKzl/BSl4v8TpuP/E6jl/xOn5P8Uo9//FZzZ/xaV0/8XkdD/FpDP/x2Nyv8ihML/ + ObPb/0C/4f8Yh8b/FoLC/xmHxf8YiMj/GIvK/xeOzP8XkM7/F5HP/xeRz/8Xkc//F5DP/xeQz/8XkM// + F5DO/xeQzv8XkM7/F5DO/xeQz/8XkdD/F5LR/xaU0v8WldP/FZbU/xWY1f8Umdf/FJvY/xSe2v8ToNz/ + E6Ld/xOj3/8SpeD/Eqfi/xGq5P8Rreb/EK/n/xCy6v8Qtuz/D7rt/w+97/8OwfH/DsTz/w/J9P8PzPb/ + D8/3/xDS+P8e2Pj/ROT3/1rp9v9V6Pb/O+L3/x7e+f8y2Pf/L9r3/xfc+v8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/Etr5/0Ti+f9b5fr/NuH6/yjg+vwf3vr/ + EL7rpAAAAAAAgL8EAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wMAAAAAA53boRnD8P8Ur+f7FKfj/xOm5P8TqOX/ + E6fj/xSi3v8Vm9f/FpXT/xeS0P8XktD/HYjH/zCdz/9FxuT/GY3L/xeHx/8ZjMr/GI3M/xePzf8Xj87/ + F4/O/xePzv8Xj83/F4/N/xeOzf8Xj83/F47N/xePzf8Xjs3/F47N/xePzf8Xj83/F4/O/xeQz/8XkdD/ + FpPS/xaV0/8VldT/FZfV/xSZ1v8Um9n/FJ3a/xOf2/8Todz/EqPe/xKk4P8RpuH/EKjk/xCr5f8Qref/ + D6/o/w+y6/8PtOz/D7nu/w688P8OvvL/DsLz/w7G9f8Oyvb/Ds33/xLS+P8s3Pf/ROT2/zvi9/8g3Pj/ + INz5/zjV9f8h3fn/Ftv5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + GNv5/xLa+f9A4fn/SOP6/xjc+f8T2Pj/FcXx/BW36v8Vu+pWAAAAAACAvwQAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ////BAAAAAAEldiCGcTw/xOx6PsTqOT/E6fk/xOo5f8Tp+P/FKLf/xWc2P8XktH/GYXH/xp5vf8ce77/ + PbXb/zCt2v8TiMr/GZDO/xiOzf8Yjs3/GI7N/xiOzf8Yjs3/GI7N/xiOzf8Yj87/GJDP/xiQz/8YkM7/ + GJDO/xiQzv8YkM7/GI7N/xePzv8Xj87/F5DP/xaS0f8Wk9L/FpXT/xWW1P8VmNb/FJrX/xSb2f8Untr/ + E5/b/xOh3f8So9//EqTg/xGm4f8QqOT/EKrl/w+s5v8Prun/D7Hq/w6z7P8Ote7/Dbjv/w278f8NvvP/ + DcH0/w3F9v8Nyff/Dcz4/xPS+f8d1/j/Gdj5/xLY+v8r1/j/M9f2/xfc+v8W2vn/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8S2vn/NuD6/zzh+f8R2vn/Gtb3/x/D7/8brOX7 + GKjk/xbW9nUAAAAAAL+/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8EAAAAAAON02IZw/D/FLLp/BOq5f8Tp+T/ + E6jl/xOo5P8UoN3/F4vL/xl4vf8acLf/Gna7/xmBw/86tNz/J6DU/xWKy/8Zj83/GI7N/xiOzf8Yjs3/ + GI7N/xiOzf8Yj87/GIzM/xmFxv8ZfsD/Gnm7/xp4u/8aeLz/Gnm9/xl/wf8Yjcz/F4/O/xeQz/8XkdD/ + FpLR/xaU0v8VldT/FZfV/xWZ1v8Umtj/FJzZ/xOe2/8ToNz/E6Le/xKj3/8RpeH/Eabi/xCp5P8QquX/ + D6zn/w+t6f8OsOr/DrLr/w207f8Nt+//Dbrx/wy88/8MvvT/DMH1/wzF9/8MyPj/DMv5/wzO+f8M0fn/ + FNb7/zPT9v8j2Pn/Etn5/xXa+f8W2vn/Ftv5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/ + E9r5/yre+f834Pr/E9r5/yHZ9/8ky/L/H8Dt/xrE7/gWzvT/FLzriQAAAAAAgL8EAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAP///wMAAAAABIPNQhjB7/8Tter9E6vm/xOn5f8SqOb/FKHf/xiHyf8Zdrz/GHu//xmLyv8Yks// + FYzM/zSv2v8jnNL/FovM/xiOzf8Yjs3/GI7N/xiOzf8Yj87/GIvL/xmAwP8acrT/G2qv/xtssf8bcrb/ + Gni7/xp7vv8Ze7//GX3A/xiJyv8Yjcz/F43N/xeQz/8WktH/FpXT/xWW1P8Vl9X/FJnW/xSb2f8Undr/ + E5/b/xOh3P8Tot//EqTg/xGl4f8Rp+P/EKnk/w+r5v8PrOf/Dq7p/w6w6v8Osuz/DbPu/wy27/8MufD/ + DLvy/wy99P8LwPX/C8H3/wvF+P8LyPn/DMv6/wrN+/8d0vn/MdH2/xTX+/8Q1vr/E9j5/xXa+f8W2vn/ + Ftv5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xXb+f8e3Pn/Md/5/xbb+f8l3vj/KNj1/x7R9P4Y1vf7 + FuD8/xK25rkSgMgOAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AgAAAAAAfMglGLzs+RW46/8SrOb+ + E6jl/xOl4/8XjM3/GHvA/xiIyv8dm9b/GZXR/xiQzv8Vi8z/LajX/yGZ0v8Wi8z/GI7N/xiOzf8Yjs3/ + GI7N/xmExf8ac7T/G2uu/xpytf8Zfr//GYbG/xiIyP8YiMf/GIfH/xiHx/8YiMj/GIjI/xiJyf8XjMv/ + F47O/xaR0P8WlNP/FZbU/xWY1v8Umtf/FJvZ/xSe2v8Tn9v/E6Hd/xKj3/8SpOD/Eabh/xCo5P8QquX/ + D6vm/w+t6P8Orun/DrHr/w2y7f8NtO7/DLbv/wy58f8MuvP/DLz0/wu+9f8KwPf/CsL4/wrG+f8KyPr/ + C8z8/yjO+P8i0fn/C9L6/w/U+v8R1vr/E9j5/xXZ+f8W2vn/Ftv5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + GNv5/yje+f8b2/n/L9/4/yzg9/8d2ff+F9z5+xXc+v8Sq+GgAGaZBQAAAAAAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAD///8BAAAAAABqvwwYtunjFbvt/xKr5v0Tqeb/FZrZ/xiBxf8Yi83/KbDg/xyc1v8Wj8// + GJDO/xaMzP8kndP/IJjR/xaMzP8Yjs3/GI7N/xiOzf8Zf7//G26w/xpxs/8ZgMH/GIjI/xiGxv8Yg8P/ + GYHC/xmCwv8Zg8P/GYPF/xiFxv8Yh8j/GIrK/xeMzP8Xj8//FpPR/xWV1P8Vl9X/FZnW/xSa2P8UnNn/ + E57b/xOg3P8Tot7/EqPf/xGl4f8Rp+L/EKjk/xCq5f8PrOf/D63p/w6v6v8Osev/DbLt/w217v8Mt/D/ + DLny/wu68/8Lu/T/Cr72/wrA+P8Kwfn/CsT6/wnH+v8SzPz/K8z3/xHO+/8Lzfv/DdD6/w7T+v8R1vr/ + E9j5/xXa+f8W2vn/Ftv5/xfb+f8X2/n/F9v5/xbb+f8e3Pn/G9z5/zfe+P874fj/G9v4/Rbd+vwU1/j/ + Ep/bfwAAAAAAVaoDAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABaw5McVve7/ + Eq3n/BOo5P8XktH/FYTI/yiv4P8nsOD/E5LS/xiS0P8Xj87/F47O/xyV0P8dldD/F43M/xiOzf8Yj87/ + GYDA/xtvsP8aerv/GIjH/xmGxv8ZgMH/GX+//xiAwf8ZgsL/GYLD/xmExP8YhcX/GIjI/xiKyv8Xjs3/ + F5DQ/xaT0f8WldP/FZbU/xWZ1f8Umtf/FJvZ/xSd2v8Tn9v/E6Hc/xOi3/8SpOD/EaXh/xGn4/8QqeT/ + D6vm/w+s6P8Orun/DrDq/w6y7P8Ns+7/DLbv/wy48P8MuvL/C7r0/wu89f8Kvvf/CsD4/wrB+f8JxPr/ + CMf8/x7L+v8hy/j/Ccr8/wvL+/8Mzfv/DdD6/w7U+v8R1vr/E9n5/xXa+f8W2/n/F9v5/xfb+f8X2/n/ + GNv5/xPb+f823vn/SeD4/x3b+PwW3vv/FM/1+hKX1WIAAAAAAIC/BAAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAFWqqgMAAAAAF6bgpBW/7v8Tr+j7E6fj/xeNzf8XkdH/MsDo/xqi3P8VltT/ + F5PR/xeQzv8Zhcb/Gnu//xmMy/8Yjs3/GI/O/xmIx/8bc7P/GYTC/xiOy/8ZgcH/GX69/xl+v/8ZgMD/ + GIHB/xmExP8Yh8b/GInJ/xiMy/8Xjs3/F5DP/xeR0P8Wk9H/FpXS/xaW1P8VmNX/FJnX/xSc2P8Untr/ + FJ/b/xOg3P8Tot3/EqPf/xKk4P8RpuL/EKjk/xCq5f8Pq+b/D63o/w6u6f8Osev/DbLt/w207v8Mt+// + DLnx/wy68/8Lu/T/Cr31/wq/9/8KwPj/CcH5/wjC+v8MyPz/J8r3/xLK/P8JyPz/Csn7/wvL+/8Mzfv/ + DdH6/w/V+v8S1/r/FNn5/xba+f8X2/n/F9v5/xjb+f8T2/n/K9z5/1bg+P8i2vj7FN/7/xTG7ucVitE9 + AAAAAACAvwQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIC/BAAAAAAXndl6 + FcDv/xOx6fsUqOP/FozN/xua1v8xwen/FZ/b/xaY1v8XkdD/GYHE/xlyuP8Zd7z/GIrK/xiOzf8Yj87/ + GX+//xmDwP8Xm9H/GYHA/xl9vf8ZgcD/GYTE/xiHx/8Yisr/GI3M/xiOzf8Yjs3/GI7N/xePzv8XkM// + F5HQ/xaT0f8WldP/FZfV/xWZ1v8Um9f/FJ7Z/xSf2/8Todz/E6Ld/xKj3/8SpN//EaXh/xGn4v8QqOT/ + EKrl/w+s5/8Pren/DrDq/w6x6/8Nsu3/DbXu/wy38P8MufL/C7rz/wu89P8Kvvb/Cr/4/wrB+f8Jwvr/ + B8P7/xfJ+v8kyfj/Ccj9/wnH/P8KyPz/Csn7/wvL+/8Mz/v/DtP6/xHW+v8U2fn/Fdr5/xfb+f8X2/n/ + Ftv5/xnb+f9V3/n+L9z5+hHe+/8UuunPD4fLIgAAAAAAgL8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABVqqoDAAAAABeS1E0Uvu7/E7Pq/RSq5f8Wj8//G5rV/zHC6v8Vod3/ + FpjW/xiFx/8YeL7/HIvJ/x+Y0v8Xjs3/GI7N/xiPzv8ZgMH/F5rQ/xeWzv8Yg8T/GIrJ/xiMy/8Yjs3/ + GI7N/xiOzf8Yjs3/GI7N/xiOzf8Xj87/F4/O/xeQz/8WktD/FpTS/xaV1P8VmNX/FZrX/xSe2f8Uodz/ + FKLd/xOj3f8TpN7/E6Tg/xKl4f8RpuH/Eajj/xCp5P8Pq+b/D6zo/w6u6f8OsOr/DbLs/w2z7v8Mtu// + DLjw/wy68v8LuvT/C731/wq+9/8KwPj/CcH5/wnC+v8Ixvz/I8n4/xjJ+v8Hxvz/Ccf8/wrH/P8Kyfz/ + C8v7/wzO+/8N0vr/ENb6/xPY+f8V2vn/Ftv5/xjb+f8R2vn/P9z4/D/g+vwO2fn/E6rhnwBxxgkAAAAA + AFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgAIAAAAA + FYrPJRS56vgVt+v/Eq3n/hWU0/8alNL/MsLq/xal3/8WktL/F3/D/x6Qzf8vrdr/G5LP/xeNzf8Yjs3/ + GI/N/xmHx/8XodT/F5fR/xiNzf8Yj87/GI7N/xiOzf8Yjs3/GI7N/xiOzf8Yjs3/GI7N/xePzv8Xj87/ + F5HQ/xaT0f8Wl9T/FpnW/xWc2P8Vntn/FJ/a/xSi3f8Tpd7/E6bf/xKm4f8Sp+H/Eqfh/xGo4/8QqeT/ + EKrl/w+r5v8Prej/Dq/p/w6x6/8Nsu3/DbTu/wy37/8MufH/DLrz/wu79P8KvfX/Cr/3/wrA+P8Jwvn/ + CMP6/xDI+/8myff/DMj8/wjF/P8Jx/z/Csf8/wrJ/P8Ly/v/DM77/w3S+v8Q1vr/E9j5/xXa+f8X2/n/ + FNr5/SHb+ftD4vv/Ec7z+BOZ12wAAAAAAICAAgCAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAgKoGE7Hl2BW77P8Srej9FZva/xeMzf8xv+j/ + G6nh/xaMzf8Xh8j/M7Ld/yKd0/8Visz/GY/N/xiOzf8Yj87/GIXG/xef0v8XmNH/GIzM/xiOzf8Yjs3/ + GI7N/xiOzf8Yjs3/GI7N/xiPzv8YkM7/F5HP/xeR0P8XkdD/Fo/O/xeLy/8Yhcf/GILE/xiDxP8Xh8f/ + FZrW/xOo4P8TqeH/Eqrj/xKq4/8RqeP/Eank/xCq5f8Pq+X/D6zn/w+t6f8OsOr/DrHr/w2z7f8Nte// + DLjw/wy58v8LuvP/C7z0/wq+9v8Kv/j/CsH5/wnC+f8HxPv/HMn5/x/J+f8Hx/3/Ccb8/wnH/P8KyPz/ + Csn7/wvL+/8Mz/v/DtP6/xHW+v8U2fn/FNn5/hbb+fwU3/v+I9r5/xu458kQiM4vAAAAAACAvwQAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AFWqAwAAAAATpt6rFb7u/xKv6PwVpOD/FIjM/y224/8iseP/E4nM/x6V0P8zst3/Fo7N/xiOzf8Yjs3/ + GIzM/xp3vP8abrX/GJDM/xee0/8Yjs3/GI/O/xiPzv8YkM7/GJDP/xiPzf8YjMv/GInI/xmDxP8Zfb// + Gna5/xtvtf8bbbP/GnO3/xmAv/8Xj8r/FpbR/xWa1v8Uo93/E6nh/xOs4/8SruX/Eq7l/xKt5f8RrOb/ + EKzm/w+s5v8PrOj/Dq7p/w6w6v8Nsuz/DbPu/wy27/8MuPD/DLry/wu69P8LvfX/Cr73/wrA+P8Jwfn/ + CcL6/wrH/P8myfj/E8n7/wfG/P8Jx/z/Csf8/wrI/P8Lyvv/DM37/w3Q+v8P1fr/Etf6/xTY+fwV3fr9 + Fdr5/xO76tcSl9ViAGaZBQAAAAAAVaoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQL8EAAAAABSZ13MUwO7/E7Hp+xSq5f8Ui87/ + Jabb/yq65/8Sic3/IZnS/y+v3P8Vjc7/GI/O/xiOzf8aeL3/G2iw/xl+wP8Yjc3/F5PP/xiPy/8YiMj/ + GYjI/xmExP8afL7/Gna4/xpws/8ba6//G2mu/xtssf8ad7j/GIjD/xed0P8Vqtn/FKvc/xSh2f8VmtX/ + FZrW/xSd1/8Uotr/E6rh/xKx5v8Ssuf/EbHn/xGv5/8Qruf/EK3n/w+t6P8Or+r/DrHr/w2y7f8NtO7/ + DLfv/wy58f8MuvP/C7v0/wq99f8Kv/f/CsD4/wnC+f8Hw/r/E8j7/yXJ9/8KyP3/Ccb8/wrH/P8KyPz/ + C8r7/wvM+/8Mz/v/DdP6/xDV+v8T1/n7FN77/xLH8O0TmNdtAICqBgAAAAAAgIACAICAAgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABVqgMAAAAAEYrPOxS97f8Uter+E63o/xSW1v8clNH/L8Dp/xWQ0P8clND/L7Dd/xaPz/8Xkc// + GYPF/xtss/8Ze77/GIzL/xiPzv8ZhcX/G3W1/xtwsf8bdbb/Gna2/xp1tv8aerr/GYG//xmLxf8Yl83/ + F6PU/xar2v8Vq9z/FaPZ/xaX0/8Wjs7/FovL/xaNzP8Wjsz/FpDN/xaTzv8VnNX/E63i/xK16f8RtOn/ + EbLo/xCw6P8Pruj/Dq7p/w6w6v8Osev/DbPt/w217/8MuPD/DLny/wu68/8LvPT/Cr72/wq/+P8Kwfn/ + CcL5/wfF+/8fyfn/Hcn5/wfH/f8Kx/z/Csj8/wvK+/8Ly/v/DM77/w3S+v8Q1fr/Etb5+xPc+/8StejE + EIDHIAAAAAAAgIACAIC/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAASgMgOE7Pm5BW67P8Srej9 + FKPg/xWKzP8tuuX/HJ7Y/xaMzf8usN7/GpXR/xeOzv8ad7z/Gne7/xiNyf8Yjs3/GIrJ/xt0tf8bbq// + GoO//xmWzP8Yms//F53S/xeg1P8XodX/F6LV/xee1P8XmdP/FpPR/xeOz/8WjM3/FozM/xeMy/8Wjcv/ + Fo3L/xeNy/8Xj8z/F5DM/xeUzv8Uptv/Erfp/xG46/8Qter/ELLp/w+w6f8OsOn/DrHq/w2y7f8Ns+7/ + DLbv/wy48f8MuvL/C7r0/wu99f8Kvvf/CsD4/wnB+f8Jwvr/C8f7/ybI9/8Syfv/CMf8/wrI/P8Lyvv/ + C8v7/wzO+/8N0vr/D9T6/xHW+vsS2vr/EarhogBmmQUAAAAAAIC/BAAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAICAAgAAAAATpd+vFb7u/xKt5/wUqub/FI3Q/yWn2/8kseL/EojL/yeo2v8gntX/ + FojJ/xpzuf8ZjMj/GJXO/xiNzf8Zfb3/G2+w/xmEwf8XmM//GJTP/xeSzv8Yks7/GJDO/xiOzf8Xjs3/ + F47O/xePz/8XkM//F4/O/xaOzf8Wjsz/Fo7M/xaPzf8Wj83/FpDN/xeSzf8Xk83/F5TN/xWh1/8SuOj/ + Ebzt/xC36v8Qs+r/D7Hq/w+x6v8Osev/DbLt/w207v8Mt+//DLny/wy68/8Lu/T/Cr31/wq/9/8KwPj/ + CcL5/wfD+v8TyPv/Jcn4/wvJ/P8KyPz/Csn7/wvL+/8Mzvv/DdL6/w/U+v8R1vr7E9r6/xOo4JYAAAAA + AICAAgBVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgL8EAAAAABKX1nEUv+7/ + E7Hn+xOr5/8Um9r/G5PQ/ym65/8UktL/G5jT/yOk2f8XgsX/GXe9/xie0f8YlM//GInJ/xt0s/8afLv/ + GJPN/xiPzf8Yjc3/GI3N/xiNzf8Yjc3/F4/O/xeQz/8Xkc//F5HP/xaRz/8Xkc//FpHP/xaSz/8Wks// + F5PP/xeUz/8Wlc//FpbP/xaXz/8Xls//FaPY/xK66f8Rvu3/ELjr/xC06v8Pser/D7Hq/w6y7P8Ns+3/ + DbXv/wy48P8MuvL/C7rz/wu89P8Kvvb/Cr/4/wrB+f8Jwvn/B8T7/xzJ+f8fyvn/CMj9/wvJ+/8Ly/v/ + DM37/w3R+v8P1fr/Edb6/BPc/P8SseSqAAAAAABVqgMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAgAIAAAAAFojOLxO46/0Vter/Eqvm/hSm4/8VjM7/Ja/h/xqm3v8Uk9P/ + HJzW/xqBxP8ZgcP/GKfW/xiPzv8ZhMP/G3Oz/xiJxv8YkM3/GI7N/xiOzf8Yjs3/F4/N/xePzv8XkM// + F5LP/xeT0P8WlNH/FpXS/xaX0v8WmNP/FpnT/xaa0/8WmtP/FprT/xaa0v8WmtL/FpnQ/xea0f8Vq93/ + Er7t/xC+7f8QuOv/D7Tr/w+y6/8Psev/DbLs/w2z7v8Mtu//DLnx/wy68v8Lu/T/C731/wq+9/8KwPj/ + CcH5/wnC+v8Jxvz/JMn4/xXK+/8IyPz/C8r7/wzM+/8N0Pv/DtT6/xDW+v0U2/v/EsLt2RCAvxAAAAAA + AICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAB + E6zizRW77f8Sq+b9FKrm/xWW1/8dnNb/HrDk/xOc2f8Wl9T/GX/D/xiNyv8Xqdj/GIzN/xl/vv8adrf/ + GIzJ/xiOzP8Yjs3/GI7N/xePzf8Xj87/F5DP/xeT0P8XltL/FpjU/xac1v8Vn9j/FaPa/xWm3P8Vqt7/ + Fazf/xas3/8WrN7/Fajc/xaj2P8WnNP9FqHV/xS25f8Swu7/EL3t/xC47P8PtOv/D7Lr/w6y6/8Nsu3/ + DbTu/wy37/8MufL/C7rz/wu79P8Kvfb/Cr/3/wrB+f8Jwvn/CMP6/w7I/P8nyff/Dsr8/wnI/P8Ly/v/ + DM77/w7S+v8Q1fr/Etn6/hTU9/8Rx/JNAAAAAAC/vwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIC/BAAAAAAUmteBFb3t/xOu5/sTqeX/FKPh/xeR0v8ereH/ + FaHc/xaZ1v8ZgMT/GJfP/xeo2P8Yi8z/Gny7/xp7uv8Yjcr/GI7N/xiOzf8Xj83/F4/O/xeQz/8Xk9D/ + F5jT/xec1v8Xotr/Fqje/xav4v8VteX/Fbro/xa+6v8Vwuz/FsTu/xbF7v8Vw+3+Fb3p/BWy4f4UruH9 + E8Dt/xHB7v8Qu+z/ELbs/w+z6/8Psuv/DrLs/w2z7f8Mte//DLjw/wy68v8LuvP/C7z1/wq+9v8Kv/j/ + CcH5/wnC+f8HxPv/Fcn7/yTJ+P8Kyf3/Csn7/wzM+/8N0Pv/D9T6/xHX+vwU2fn/E8/0vgAAAAAAgIAC + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAC + AAAAABWHyzETt+r9FbTp/xOp5P4UqOX/FZfX/xmg2/8Yp+D/FpvX/xiEx/8Xm9H/F6fY/xiKzP8ae7v/ + GX29/xiNy/8Yjs3/GI7N/xePzv8XkM//F5PQ/xeY0/8Xntf/F6Xc/xat4P8WteX/Fr3p/xbD7f8Wx+// + Fsrx/xbN8v8WzvP/Fc70/BXT9v0UzfT/E53XrBK05uASxPD/D77t/hC46/8PtOv/D7Lr/w+y6/8Nsuz/ + DbTu/wy27/8MufH/DLrz/wu79P8LvfX/Cr73/wrA+P8Jwfn/CcP6/wfF/P8cyfn/H8r5/wjJ/P8Lyvv/ + DM37/w3R+v8Q1fr/Etj6/BTW9/8S0/ViAAAAAACqqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSn4cIVuuz/E6rl/BSo5f8VoeD/ + FpjW/xWl3/8Wn9n/GIjK/xed0/8Xp9j/F4vM/xp8u/8Zfr3/GI3M/xiOzf8Xj83/F5DO/xeS0P8XltL/ + F53X/xel2/8XruH/Frjm/xbA6/8Wxu//Fsvx/xbP8/8V0fT+FtH1+xbW9v0V1vf/EsTv+RSS0mcVjMtJ + EcTx/xC/7v4Quuz/ELXr/w+y6v8Psuv/DrLr/w2y7f8NtO7/DLfv/wy58f8LuvP/C7v0/wq+9v8Kv/f/ + CsH5/wrD+f8Jxfr/CMj9/yLK+P8ayvr/CMn8/wvL+/8Mzvv/DtP6/xDW+v4U2fn/E9X3/RPT8ykAAAAA + AICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABVqgMAAAAAFJLVZxW77P8Urub8FKjj/xSn5P8VnNr/FaHc/xWj3f8Xj8//F5zT/xen2P8XjM7/ + GYC//xp/vv8Xjsz/F4/O/xePzv8Xkc//F5XR/xeb1f8Xo9r/F63g/xe45v8Xwuz/Fsnw/xfP8/8W0vX/ + FdP2+xXY9/4V2fj/E8jx/BKn4KoPg8khAHHGCRO46dsRwu//ELnr/RC16v8Qsur/D7Hq/w+x6/8Osuz/ + DbPt/wy17/8MuPD/DLry/wy78/8LvvX/Cr/2/wrA+P8Kwvn/CsX6/wrH+/8Kyf3/Jcv3/xbM+v8Jyvv/ + DM37/w3Q+/8O1Pr/ENb6/hTa+f8U1fbnEczuDwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAVgMoYE7Dm6RW26f8UquT+ + FKjk/xSk4f8VoNz/FaTe/xaY1f8XmtP/F6XX/xeOzv8YhMP/GYC//xePzv8Xj87/F5DO/xeT0P8XmdP/ + F6DX/xeq3v8XteX/F8Dr/xfJ8P8Xz/T/FdT2/RXY9/wV2vn/Esry+xKp4K4Th881AAAAAAAAAAASq+Ku + EsLv/xC36/wQter/ELLp/w+x6f8Pser/DrHq/w207P8Nte7/Dbjv/w268f8Mu/P/DL30/wu/9f8LwPf/ + C8P4/wvG+f8LyPr/C8j6/w3M/P8pzPf/Fs76/wrM+/8Nz/v/DdL6/xDV+v8S1/r9Fdr5/xTV99gAgIAC + AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAFWqAwAAAAAUmdeOFbzs/xWt5vwUquT/FKrk/xWn4f8Vp9//F5/Z/xeX0v8WntT/ + F47O/xiJyP8ZgsH/F47N/xePzv8XkM7/F5TR/xec1f8Xpdv/F7Di/xe96f8Xx+//F8/z/xXU9v0V2vj+ + EtD0/hOn36USiNArAAAAAAAAAAAAgIACE6jgpBLA7v8Qtur7EbPp/xCx6P8PsOj/D7Dq/w+x6v8Psuv/ + DrTu/wy17/8LuPD/Crvz/wq+9P8KwfX/CsT3/wrG+P8JyPn/Ccn6/wnK+v8Jyvv/C8z8/yrM9/8Yz/r/ + Cs76/w7S+v8P1fr/Etf6/xPZ+f0W2vn/Fdb20QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAAAAABSDyycUtef0 + F7nq/xSv5v4VruX/Fa/l/xWr4f8Wn9j/F5PQ/xeSz/8Xj83/F43M/xiIx/8Xjs3/F47N/xeOzf8Xkc// + F5zV/xep3v8XtuX/F8Ps/xfL8f8W0fX8Ftr5/xPC7eUSjNNFAAAAAACAgAIAAAAAAIC/BBOn36USvu3/ + EbTo+xGx6P8RsOf/D67n/w+v6P8PsOr/D7Hr/wyy7f8MuO//EcLx/xjI8/8cyfT/IMj0/yHH9P8gyfb/ + IMz3/yDP+P8f0vn/HdX6/xzX+/8b2/z/NNr4/yzb+v8R2/z/ENj7/xDV+v8S1vn/FNn5/Rba+f8X1vfT + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABOd2ZQWw+//Frnq+xa46f8Wt+j/FrDj/xad1/8XkM7/ + F43N/xeOzf8Xjs3/F43M/xeOzf8Xjs3/F47N/xePzf8Xl9P/F6re/xe75/8Xxu7/Fs7z/RfZ+P8Tv+va + EIDHIAAAAAAAgL8IAAAAAAyAxRYTrOO/Ervr/xGy5vsRr+b/Ea7m/xCt5v8Qref/D6/p/w6v6v8OtOz/ + GcLw/yXB8P8orO3/JZPr/yGC6v8eeuv/HXbr/x126/8deOv/Hnvs/x9+7P8gguz/IYbs/yKP7P8wnu7/ + O7Lv/y7B9P8o0Pb/Jd/5/x/j+v8X3/r9Ftr5/xLV994A29sHAAAAAAAA/wEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgAIAAAAA + EIDHIBK26OsXyPH/FcHt/RbB7f8WvOr/F63g/xad1/8WltL/F5PQ/xeSz/8Xkc//F5DO/xePzf8Xjs3/ + F47N/xeSz/8Wpdv/F7zo/xbH7/4X0vX/E8Tv7BOGzCgAAAAAAIC/CAAAAAAWjc4vE7Lk2xK56v8Rr+X7 + Eq3l/xGs5f8QrOX/EKzm/xCu6P8Nrun/Fbvt/yrA7v8qnOr/Hnbp/xZo7P8UaO//FGvx/xRt8f8UbvH/ + FG7x/xRt8f8UbfH/FGzx/xRr8P8UavD/FGjv/xVo7/8Zbe7/GGvs/xtz6/8ih+z/Kafv/yzL9f4o4/r/ + G+H688T19RoAAAAAqqr/AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAFY/TYhTI8f8WzPP8Fcnx/hfI8P8Xxe3/ + F7zp/xe15f8XseL/Fq3g/xSo3f8Vo9r/F53W/xeV0f8Xj87/F4/O/xaf1/8Xuuf/Fsrw/RXL8v8SmdhV + AAAAAABttgcAAAAAFZnXXxO35/UStuf/Eazk/BKr5P8RqeP/Eark/xGq5f8QrOf/Dq7p/x6/7f8tq+r/ + IHfo/xRn7f8UbfH/FnLy/xZy8f8WcfH/FnDx/xZw8P8WcPH/FnHx/xZx8f8WcvL/FnLy/xZz8v8Wc/L/ + FnLy/xZv8f8WbPD/Fmfu/xVh6/8WXOn/GmPn/yOA6f0hrO//w+z5UQAAAACqqv8DgID/AgAA/wEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAgAIAAAAAEpjYixXR9f8X0/b7FtD0/hfQ8/8XzvP/F83y/xfL8f8ayvD/Isru/xvB6v8WteT/ + Fqjd/xaY0/8Xj87/FprU/xa25vwWxu//EsHsrAAAAAAAgIACAICqBhWk3ZQUvOr/EbHl/RGr4/0SquP/ + Eqji/xKo4/8QqeT/EKrm/w6s5/8jv+z/LZzo/xdo6v8UbPH/FnLy/xZw8f8Wb/D/Fm/w/xZx8f8WcvP/ + FXLz/xZx8v8Wb/D/F27v/xds7v8Xae3/GGXr/xhh6f8ZXOb/Gljj/xtU4v8bU+H/G1Ph/xtU4f8aU+L/ + GE7h/hZP4f8nZuLtgKfsk+Ds+SkAAAAAAAD/AYCA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAFJ/bmhXU9v8X2fj8 + F9T2/RfV9v8Y1fb/FNP1/yXY9f9d6/X/YOz1/y7O7v8Ut+b/F6jc/xeU0f8VmNP+FrXl/xTA7PcRxu4t + AAAAABCExR8VsuTDFLzq/xKw5PsSq+L+Eqjh/xKn4f8Sp+L/Eafj/xCq5P8Oqub/Ibzr/yyY6P8VZez/ + FXHy/xZx8f8Wb/D/FnDw/xVz9P8Vc/T/Fm7w/xlk5/8bWuD/G1ff/xtV3/8cUt3/HU/b/x1N2/8dS9r/ + HUra/x1K2v8dS9v/HE3d/xxO3f8cT97/HE/f/xtQ3/8bUeD/G1Th/xVQ4v4IS+D/IV/i836k7JTn7/cg + AAAAAKqq/wMAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAQCAgAIAAAAAFJbVgRTO9P8X3vr+F9n3/BfY+P4Y2ff/F9f3/x7X9v8o1/T/ + Hczw/xbC7P8Xt+b/FqTb/xWj2fsWuOb/E7DjkgAAAAAViMw8FLrp5BS66f8Sr+P7E6vh/xOn4P8SpuH/ + Eqbh/xGm4f8RqOP/Dqjk/xq36f8vo+j/Fmbr/xVx8v8WcfH/Fm7w/xZx8/8VcvP/G2Lh/yJOyP8mQ7v/ + KT21/yk7tP8nPbn/JETD/yBN0v8eVdz/IV3g/yJi4/8hXuH/IFnf/x9W3v8fVd7/H1Td/x9W3v8gWN// + IF7i/yFj5v8gZef/HWTo/h9j6fwYWuf+CEvh/yVi4uyiv/Fr////AgAA/wEAAP8BAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBVqgMAAAAA + EozRVBO86uYW2/r/F936/Rfa+PwX2fj9Fdf3/hPS9f8VzfP/F8jv/xfC7P8Wuef9F7rn/xO66PELhcgX + E4PNKRS55+4Uuej/E67j+xOq4f8TpuD/E6Xg/xKl4P8SpeD/Eabi/xCo5P8Qrub/LLTp/xxw6P8UbvL/ + FnHx/xZv8P8VdvX/GGrp/yRLxP8qO6//LDeq/yw2qv8oP7b/JEjC/yRGwP8oP7j/KD64/yNMy/8iZ+T/ + JnXs/yd06/8lcen/JG3o/yNp5v8iZuX/ImXk/yFl5P8iaOb/JHHq/yZ67f8nfe//Jnrv/yRz7v4la+v8 + GFjl/QdK3/9ol+qp7e3tDgAAAAAAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBVqgMAAAAAFnrIFxOf2pcSyPD5Ft36/xff+/4Z3fn/ + GNn4/RbT9fwWzfL8Fsnw/RbI7/wVwuz/E6feegCAvwgVsePeFbno/xOt4vwTquH/E6bf/xOk3v8SpN// + EqTg/xGl4f8Rp+L/Dqjk/xy46P8oj+b/E2jv/xdz8v8WbfD/FX71/xt25v8oPrT/Kziq/ys4q/8oPrT/ + H1fT/xpw7v8bePT/GHLy/xhn6f8gU9P/JkLA/yZMyf8laOP/J3bt/yh37f8ndu3/J3Ts/yZz6/8lcOr/ + JG3o/yRr5/8jaef/JGvo/yVz7P8nf/D/KIbz/yiH9P8ogfL+J23r+whN4f9Rhue/6+vrDQAAAAAAAP8B + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAgAIAAAABAAAAABGFzS4SodubEr3r4xPJ8vwV0vb/FdP2/xTP9P4VyPD/E7jn+BOa2IgAAAAA + FKXcrxW76P8TruL7FKrg/xSm3/8To97/E6Pe/xKj3/8SpOD/EaXh/xGo4/8OquX/I7Tn/x526P8UbvL/ + FnHx/xZt8P8Vifn/IVjO/ywwpf8pO7H/Ik/J/xpu6v8bevP/IHjv/yN27v8jdu//HHPy/xZw8/8aZej/ + IVLT/yZOzP8nYdv/J3Lq/yh47/8oeO//KHju/yl47v8oeO7/KHbt/yd07f8mcuz/JW/q/yVu6v8mcu3/ + J3zw/ymH8/8pjPX/LYDy+ghY5/9xn+uaAAAAAICA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgAIAgIACAAAAAAAAAAAUdsQN + EIXKMBOP0lASlNRkEpLUZROO0k8QhMUfAAAAABKT1WEUuun/E7Dj+xSq4P8Upd7/FKPd/xOi3f8Tot7/ + EqPf/xKk4P8RpuL/Eajk/w+t5v8kr+j/G3Dq/xVv8v8WcfH/Fm3w/xaI9v8YgfH/HmPa/xx06P8aevH/ + HWnl/x9c3P8eWNv/Hlnc/x9d3/8hYeP/HGTm/xhp7P8Xau7/G2Hl/yFW1/8mV9X/J2Pf/ydx6v8nd+7/ + KHnv/yl67/8peu//KXrw/yl67/8oeu//KHnv/yh37/8ndO7/J3bv/yh88f8piPT+KYn1/hlw6/vP3fU1 + AAAAAICA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAANjMwU + E7Hj4RW25v8TquH9FKbe/xSj3f8Totz/E6Ld/xOi3v8So9//EaXh/xGn4v8QqOT/D63m/yGw6P8bcer/ + FW/y/xZw8f8Wb/H/Fnfy/xeK9/8Xifn/GHvz/xxd3v8dT9X/HlDW/x5R1/8eU9j/HlXZ/x5W2/8eVtz/ + Hlje/xxc4v8ZZOr/GGjt/xtj5v8gWdz/I1fZ/yVd3f8lZ+X/JnHq/yd27f8neO7/KHju/yh47/8oee// + KHnw/yl58P8oePD/KHbw/yd08P8uf/P5CHPx/4qz8HYAAAAAv7//BAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAQCAgAIAVaoDAIC/BACAvwQAgKoGAAAAABOi3IkVuej/E67i+xSo3/8Uo93/FKHc/xOh3P8Tod3/ + E6Lf/xKk4P8RpeH/Eafj/xCp5P8Oq+b/HLfp/x566P8UbfH/FnHx/xZw8f8WbvH/F2rw/xhm7/8YZO3/ + GWLo/xpe4v8cWd3/HVTZ/x5U2P8eVdn/H1fb/x5W2/8fVdv/HlPc/x5U3f8cWeH/G2Hn/xlm6/8aZOj/ + HF3j/x5X3v8gVt7/IVvh/yNh5f8kaOj/JW3q/yZw6/8mcez/JnHs/yZy7v8nc+//J3bx/hx88v9RmvHC + 2+L4IwAAAACAgP8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAUkNEn + FLTl9RW05f8Tqd/+FKTd/xSh3P8ToNv/E6Hc/xOh3f8So9//EqTg/xGm4v8QqOT/EKrl/w6r5/8TuOv/ + Ip3o/xZl7P8Wc/L/FnDx/xZw8f8XbvH/GGrw/xhn8P8YZ/H/F2nw/xdo7f8ZY+f/G1zg/x5X2/8fVtv/ + H1fc/x9W3P8eVNz/H1Lc/x5R3P8eUt3/Hlbe/x1c4v8cYuf/G2Xp/xtk6f8bYOf/HF3m/xxc5v8dXuf/ + H2Pp/yFo6/8ibOz/JG/t/yNw7/4devD/grHxfAAAAAD///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABSj3JkVuej/E6zh+xSl3f8Uotz/FKDb/xOg2/8Todz/ + E6Le/xKj3/8RpeH/Eafi/xCo5P8QquX/D63o/w6v6v8Yve3/H4fn/xVl7f8Wc/L/FnHx/xZw8f8Wb/H/ + F2zx/xdp8P8YZ/D/GGfw/xdp8P8Xa+//GWXo/xxe4f8fWNz/H1jc/x9W3P8fVd3/HlLc/x9R3P8fUd3/ + H1Ld/yBU3v8gWN//IFzj/x9h5f8eZOf/Hmbo/x1m6f8cZer/HGfr/xxp7P8caez+Gmvu/yJv6/GFo+sZ + AAAAAABVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAATj9Mp + FLPk9hSz5P8Tp9/+FKPc/xSg2/8Un9v/E6Db/xOh3f8Tot//EqTg/xGl4f8RqOP/EKnk/w+r5v8Prej/ + D7Dq/w617P8YwO//Hozo/xdl6/8VbvH/FnLy/xZw8f8WcPH/Fm/x/xds8P8YZvD/GWHv/xpp8P8acvL/ + GGzu/xpj5v8eW9//H1nd/x9Y3v8fVt7/H1Pd/x9R3f8eUNz/HlDc/x9S3f8fU97/IFXf/yBX4P8hWuH/ + IVzj/yFe5P8hX+X/IWDm/yFh5/8iZun9G2fr/1eO7moAAAAAAFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABOi3JcVuej/E6vh+xSk3f8Uodv/FJ/b/xSf2/8ToNz/ + E6Hd/xKj3/8SpOD/Eabi/xCo5P8QquX/D6vm/w+t6P8Pser/D7Ps/w257/8UxvL/Hafs/xt06f8VZ+7/ + FnHy/xZx8f8WcPH/FnDx/xdt8f8ZY+//G1vu/x1m8P8cdfL/GHHx/xln6v8dX+L/IFve/x9a3/8fWN// + H1Xe/x9T3f8eUd3/HlDd/x9Q3f8fUd7/H1Le/x9T3/8fVN//H1Xg/yBW4f8gVuH/IFni/yJg5v0gaev/ + K3Pp38zW9RkAAAAAAAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAOlc0k + FLTl9BWz5P8TqN7+FKLb/xSf2/8Untv/E5/b/xOg3P8Tot7/EqPf/xGl4f8Rp+L/EKnk/xCq5f8PrOf/ + D63p/w6x6v8Os+z/Dbfu/wy68P8PyPT/Gcfz/x+V6/8XZ+r/FW/y/xZy8f8WcPH/FnDx/xds8P8ZX+// + HFTt/x5g7/8ed/L/Gnby/xhs7v8cYub/H17h/yBd3/8gW+D/IFjf/x9W3/8fVN7/H1Le/x9R3v8fUN7/ + H1De/x9R3v8fUd//H1Hf/x9T4P8gVuH/IV3l/ydr7PwOZez/bZ7snQAAAACAgP8CAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABOf2ogVuuj/E6zh+xSl3f8UoNv/FJ/a/xSe2/8Tn9v/ + E6Hd/xOi3/8SpOD/EaXh/xGo4/8QqeT/D6vm/w+s6P8Orun/DrHq/w6z7f8Ntu//Dbvw/w288v8MxPX/ + FNT3/yGx7/8aben/FWvw/xZy8v8WcPH/FnDx/xdr8P8bXO7/HUzs/x9Z7v8fdfL/HXvz/xly8P8aZ+r/ + H2Dj/yBf4f8gXuH/IF3h/yBa4f8gWOD/H1Xg/x9U3/8fU9//H1Lf/x9S3/8fUt//H1Tg/yBY4v8iYef/ + JWvs/h9y8f8Yaun31eHzKwAAAACAgP8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAUdsQN + E7Lk4BW25v8Tp9/9FKLc/xSf2v8Untr/FJ/a/xOg3P8Tod3/EqPf/xKk4P8RpuL/EKjk/xCq5f8Pq+b/ + D63o/w6v6f8Psev/DrPt/w227v8NufD/Db3y/w3A9P8Mw/X/ENP5/yDF9P8ceen/FGnv/xZy8v8WcPH/ + Fm/x/xho8P8cWO7/H0jr/x9S7f8gcfL/H37z/xt48v8abe3/HWTm/yBh4/8hYeL/IWHj/yFf4/8gXeL/ + IFvi/yBZ4f8gWOH/IFfh/yBX4v8gWeP/IV/l/yNn6v8mb+7/Jnbx+wdk7f+Hse+CAAAAAKqq/wMAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABSP00sVu+n/FK7j/RSm3v8Uodr/FJ/a/xSe2v8Tntv/ + E6Dc/xOi3v8So+D/EaXh/xGn4/8QqeT/EKrl/xCs5/8Pren/DLDq/wuy7f8KtO//C7fw/wy58P8Mu/L/ + DL/0/w3D9f8Mxvf/DtP6/yDQ9/8dfOn/FGnw/xZy8v8WcPH/Fm/x/xhm8P8cVO3/IEPr/x9N7P8gbPH/ + H37z/xx+8/8ZdPD/G2nq/x9k5f8hZOP/IWTk/yJk5f8hY+X/IWLl/yJh5f8hYeX/IWHm/yJj6P8kaOr/ + JW7t/yZy7/8ldPH8DWrx/0eH6sYAAAAAAAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAvwQAAAAA + FKDZjhW76f8Tq+H7FKTd/xSg2v8Untr/FJ7a/xOf2/8Tod3/E6Lf/xKk4P8RpeH/Eafj/xCp5f8Qq+b/ + DKvo/w2u6f8asej/IbHm/x+v5f8Xsej/Dbjw/wu99P8MvvT/DMH2/w3I+P8Myvj/D9X6/yPU9/8ee+n/ + FGrw/xZy8v8WcPH/Fm7x/xlj7/8eUOz/IUHq/yBI6/8fZfD/IHzz/x6A9P8be/P/GnHu/xxo6f8gZuf/ + Imbm/yNn5v8jaOf/I2no/yNp6f8jaun/JGzs/yVv7f8lcu7/J3Tw/yJy8f4TbvL/JnPp6+jo8xYAAAAA + AAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAUq9/CFbnn/xOp4PwUo9z/FJ/a/xSe2v8Un9v/ + E5/c/xOh3v8So9//EqTg/xGm4v8QqOT/EKrl/wuq5/8itOf/Sr3k/0q13v8+qdb/NJ/R/yqXzP8kmND/ + F6rj/wu+9f8Lwvf/DMf4/w3N+P8Oz/n/E9v6/yfS9v8bcun/FG3x/xZx8f8WcPH/F23x/xpg7/8eTOz/ + Ij/q/yFD6v8fXe7/IHbz/x+A9P8dgPT/Gnjy/xhu7v8caer/IWnp/yNq6P8ka+n/JWzr/yVt7P8mcO3/ + JXHu/yZz7/8kcvD/G3Dw/hZz8v8cbur43eP4JQAAAACAgP8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA + FYC/DBOw4+MVtub/E6ff/RSi2/8Un9v/FJ7a/xOe2/8ToNz/E6Le/xKj4P8RpeH/Eafj/xGp5P8MqeX/ + Mrzo/2fN6P9Vu93/ZLPR/4S80P+Pw9b/erzX/0CezP8cgr//GZ3X/wvC9v8MyPj/Dcz4/w7S+f8R1Pn/ + GOH7/ynB8v8Xaer/FXDy/xZw8f8WcPH/F2vw/xpd7v8fS+v/Ij/q/yE/6v8gUu3/IG/x/x999P8hgvT/ + JIP0/x158v8Wbu//GGrt/x9r7P8ibez/Im7s/yJv7f8icO7/H3Hw/xtz8f8aefL+GXz0/yFx6e3f6vQY + AAAAAAAA/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAASgMgcFLPl8xW05f8Tp9/+FKLc/xSf2/8Un9v/ + E5/b/xOh3f8Tot//EqTg/xGm4f8SqOP/DKjk/yi36P9z2e3/X7/c/6K9yP/a0s//6N/b//Lp5v/47+v/ + 6e/v/3O52f8Yerr/FqPc/wzM+v8Nzvj/D9T5/xPX+f8T1/n/IOb7/yil7v8UZu3/FnLy/xZw8f8WcPH/ + F2vw/xpd7v8eTOz/IkHq/yI96v8hSOv/H2Hv/yB48/8xi/X/RJj1/0CV9f8qg/P/F3Ty/xRx8f8XcfH/ + GXPx/xp28v8bevP/HH7z/ySF9fkKcPH/T4zpuAAAAAAAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAC + AAAAABaDzCMUteX4FbPl/xOn3/4Uotz/FKDb/xOf2/8ToNz/E6He/xKj3/8SpOD/Eafi/xCo5P8OquX/ + Ydbv/2/R5f+swcn/5NnV/+Dh4f/n6en/7u/v//z9/f///////////2at0v8Qerv/EcDw/w7S+/8R1Pn/ + FNj5/xba+f8V2vn/Kd/4/yB+6v8Ua/H/FnHx/xZw8f8WcPH/F2vw/xpg7/8dUe3/IEXr/yI/6v8iQer/ + IFLt/x9q8P8uhPT/Tp72/2Ks9v9To/X/OZL0/yiI9P8ihPT/IIP0/x6D9P8ghPX9D3by/yN06OrP3/Qw + AAAAAICA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgAIAAAAAD4PJIRSz5PYVtOX/E6jf/hSj3f8UoNv/ + E6Db/xOg3P8Tot7/EqPg/xGl4f8Sp+P/Dafk/yO26P924vP/kMnY/+Xb2P/j5eX/7e3s//Py8v/8/Pz/ + t7e3/6qsrf////7/1+71/x97uP8Sptz/D9f8/xLV+P8U2fn/Ftr5/xXZ+f8f5fv/Kqzv/xRm7f8WcvL/ + FnDx/xZw8f8WcPH/F23x/xll8P8bWu7/Hk7s/yBF6v8hQer/IEjr/x1X7v8fbfH/Non0/1il9f9qs/X/ + abX0/1yu8/83k/P/G3jz/hBx7v9Ok+yu3eb3HgAAAAAAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAQAAAAALesgXEq/i7xW15v8TqeD+FKPd/xSh3P8ToNz/E6Hd/xOi3/8SpOD/Eabh/xKo5P8KpuT/ + M8Ds/3vi8P+21Nz/8evp/+7v7//y8fH//////6amp/8ZGRr/FhYX/4uKjP//////RZDB/w2Uz/8S2Pz/ + F9j4/xna+f8W2vn/F9r5/xnf+v8tyvT/GWvr/xVx8v8WcPH/FnDx/xZw8f8WcPH/Fm/x/xdr8P8ZZe// + G17v/xxR7f8eRev/H0Lq/x1G6v8YUOz/GmDv/yVy8P8te/D/JXfu/xx17P0Siuz/lcnzbAAAAACq//8D + gID/AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAABxxgkSquDeFLjn/xKp4f0Upd7/ + E6Ld/xOh3P8Tod7/EqPf/xKl4P8RpuL/Eank/wqn5P80we3/fuLv/8ng5v/59PL/9fb2//b19f////// + d3d4/yAfIP8rKiv/VVVY//////9TmcX/C5HM/xPZ/P8i2/j/M+H4/x3c+f8X2/n/Ftv5/yne+P8ffer/ + FGzx/xZx8f8WcPH/FnDx/xZw8f8WcPH/FnLy/xZt8f8XYuz/Gm7q/x6C7P8fiO7/IIXu/yF/7f8ef+z/ + G4js/xmZ7f8br/D/Hcr0/hLb+P936vs+AAAAAP/M/wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAABAAAAABKk3cIUu+n/E6zi/BSn3/8To93/E6Ld/xOi3v8So+D/EaXh/xGn4/8RqeT/ + C6jl/ye66/934e//wuPq///6+f/4+vr/+/v7///////k5OX/T09Q/0FBQv/U09T//////zuKvv8QntX/ + E9z8/yjd+P9R5/f/NeH4/xjb+f8V2fn/IuX7/yef7f8TZe7/F3Py/xZw8f8WcPH/FnHx/xZy8v8VZ+// + GXTp/x6t7/8d1ff/G936/xna+f8a1vn/GtT5/xzV+f8a2/n/GeP7/xnj+v8W4Pr+F9b4/wXR9jgAAAAA + gICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAEZ/alxS86v8TsOT7 + E6jg/xOl3v8So97/EqPf/xKk4P8RpuH/Eajj/xCq5f8Pq+b/Ea/p/2HZ8P+g3+n//vv8//v9/f/9/f3/ + /v7+///////+/v7/+vz9//////+83Or/GHm4/xa76P8T3Pz/LN74/1no+P9U5/f/Kt/4/xba+f8Z3/r/ + Ks/1/xlr6f8Vb/L/FnPy/xZy8v8VbfL/FmXr/xuS6/8d1fb/GeT7/xbc+f8W2vn/F9r5/xfb+f8X2vn/ + Fdv5/yLZ+P8h1fX/Ftn5/hfb+f8U1/f8HNbxJQAAAACAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAIC/BAAAAAATlNRfFLvq/xO05vwTq+L/E6fg/xOk3/8SpOD/EqXg/xGm4v8QqeT/ + EKrl/xCs5/8Kq+j/MsLt/3bZ6v/B5O3///////7////+/////P39//z9/f//////7/n6/0aUxP8Vksz/ + FNX4/xTZ+f8x3/n/Wef4/1/p+P9L5vf/I975/xbZ+f8f4/v/JrDv/xdm6P8VZ+3/FmXs/xlz6f8es/D/ + G+P6/xbd+v8X2Pn/F9v5/xfb+f8X2/n/Ftr5/xnc+v822/f/SMfn/0Kw2f8jyOz+Ft77/xbW9usN1/IT + AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAAAAABSDyycTteX4 + FLvp/xKu5P4TqeH/Eqbg/xKl4P8RpuH/Eafj/xCp5P8Pq+b/D6zn/w+u6f8Lr+r/Q8nu/3DP5P+v2+n/ + 8fj6/////////////P7+/8vl7v9OnMj/GYvG/xbH8f8T2fr/Ftn5/zfh+f9X5/n/W+j4/13o+P9C5Pj/ + Htz5/xba+f8d4fr/Jsfz/yKl7f8dr+//HdX2/xjj+/8W2fn/F9r5/xfb+f8X2/n/F9v5/xfa+f8Y3Pr/ + Ot31/3TG1/+iw8v/X6zK/yCt3P0Y3fr/FtX10gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKn38gTwOz/EbHl/RKr4/8SqOL/Eqbh/xGn4v8QqOT/ + EKrl/w+r5v8Prej/Dq7p/w6w6/8Msu3/MsLt/1HB4/9nvNv/fsHb/36+2v9erNH/LpTH/xye1P8Ux/L/ + ENf6/xTX+f8a2/n/POL5/1Ll+f9X5/n/W+f4/1ro+P864/j/Gtz5/xfa+f8l3vj/JOP6/xjk+/8X3fr/ + F9n5/xfb+f8X2/n/F9v5/xfb+f8X2/n/Ftv6/zDf9/+P1eD/8Orp//rs5v+ryNT/FarY+xnc+v8U1fap + AAAAAACqqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAvwQAAAAA + E5TWfBPB7f8St+j7Eq/l/xKr4/8SqOL/Eajj/xCp5P8QquX/D6zn/w+t6f8Or+r/DrHr/w2y7f8JtO7/ + Fbrv/yW77P8otOT/I67g/xyv4/8XvO7/D835/w7U+v8T1fn/FNj5/x/b+f874fn/SuT5/1Hl+f9W5/n/ + XOf4/1bn+P804fj/H935/yfX9v8c2fn/Fdn5/xba+f8X2/n/F9v5/xfb+f8X2/n/GNv5/xba+f8e3vr/ + eNzr//by8v+AgoP/y8fF/7bZ6f8Nr9z7GN37/xTV9HIAAAAAAL+/BAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAWg8wjErXn8RPA7P8RtOf+Eq7l/xGq5P8RqeT/ + EKrl/w+r5v8PrOj/Dq7p/w6w6v8Osuz/DbPu/w227/8LuPD/Cbrz/wq99f8Lwff/CsX5/wvL+v8Nzvn/ + ENP5/xPX+f8V2fn/H9z5/zLg+v8/4/r/SeT6/1Hl+f9W5/n/W+f4/1bn+P9I4/f/Pd/2/yvg+P8l3vj/ + Id74/xzc+f8X2/n/F9v5/xfb+f8Y2/n/Fdz6/z/Z7//n+v7/rqqq/wcJC//Jwr//hcvn/we/6P8Y2vn/ + FNf1MwAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AFWqAwAAAAASlteLE8Pv/xK66vsSsuf/Ea7m/xGs5f8Qq+b/D6zm/w+t6P8Orun/DrHr/w2y7f8NtO7/ + DLbv/wy58f8NuvP/Db30/wy/9f8MxPf/Dcn4/w3O+f8P1Pn/E9j5/xXa+f8Z2/n/JN35/zPg+v8/4/r/ + SeT6/1Dl+f9X5vn/Xej4/2Xo9/9g6fb/Uej2/0Ll9/8v4ff/H934/xjb+f8X2/n/GNv5/xfb+f8Z3Pn/ + heHv/////v8wMzP/V1ZX//H1+f8vrNj9Etf3/xXU9c8AgIACAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA2AzBQRr+PeE8Pv/xC26v0Rsuj/ + EK/n/xCt5/8Prej/D63p/w6v6v8Osev/DbLt/w217v8Mt/D/DLny/wy68/8MvfT/C8D2/wzF+P8Myvj/ + Dc/5/xDV+f8T2Pn/Fdr5/xfb+f8a2/n/JN35/zLg+f8/4vr/SOT5/03l+f9S5vn/VOP3/0Lk+P8x4Pj/ + JN74/xvc+f8Y2/n/F9v5/xfb+f8Y2/n/Ftz6/yjZ9P+76fH////+/4uQkv/r5OH/kcvk/wi85fsZ3fv/ + FdH1egAAAAAAv78EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAVaoDAAAAABSM0VkSvu3/Eb7u/BG36v8Qs+n/ELDo/w+v6f8OsOn/DrDq/w6y7P8Ns+7/ + DLbv/wy48P8MuvL/C7v0/wu+9f8Lwff/DMb4/wzL+f8N0Pn/ENX5/xPY+f8V2vn/F9v5/xfb+f8a2/n/ + Idz5/yne+f8t3/n/K9/5/zHd+P8s2/f/Gtz5/xbb+f8W2/n/Ftv5/xfb+f8X2/n/F9v5/xjb+f8V3Pv/ + ONXw/9bu8////////////8be6/8Xqtj+F937/xXS9vQV1fgkAAAAAACAgAIAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAAAAABKc2p0RxPD/ + EL3s+xC36v8Qs+r/D7Lq/w+x6v8Osuv/DbLt/w207v8Mt+//DLnx/wy68/8Lu/T/C7/1/wvB9/8Lxvj/ + DMv5/w3R+f8Q1vr/E9j5/xXa+f8W2/n/F9v5/xfb+f8Y2/n/GNv5/xfb+f8a3Pn/Jtj3/x/b+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/GNv5/xbd+/81zez/u97q//////+82OX/JqbT/xLT9vsY2/n/ + E8/zlgAAAAAAqqoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEoDIDhGo4c0QxvL/D7vt/BC47P8Ptev/D7Pr/w6z7P8NtO3/ + DbXv/wy48P8MufL/C7rz/wu89P8Lv/b/C8L4/wvH+f8MzPr/DdH5/xDW+v8T2Pn/Fdr5/xbb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/yHb+f8o2Pf/Gtz5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/ + Fdz6/yrS8v9SsdX/WqzR/xun1v8S0vX+Gd/7/xPS9eoS0/YdAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA + EYXILg+05+0RxvL/D7zu/Q+67f8Pt+3/Drbu/w217v8Mt+//DLjw/wy68v8LuvT/C731/wq/9/8Lw/j/ + C8f5/wzL+v8N0fr/ENX6/xPY+f8V2vn/Ftv5/xfb+f8X2/n/F9v5/xfb+f8Z3Pn/Jtn3/yPb+P8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/Gdv5/yDN7/8Vxez/F9r5/xjd+vsV2fn/ + EanfaAAAAAAAVaoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAFofMRg+46vcQxvL/Drzu/Q+87/8Ouu// + Dbjv/w258P8MuvH/DLrz/wu79P8KvvX/CsD3/wrD+P8Lx/n/DMv6/w3Q+v8P1fr/Etf6/xXa+f8W2/n/ + F9v5/xfb+f8X2/n/F9v5/x7b+f8o2Pf/HNz5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/Ft36/xjf+/8W2fj7Ft/7/xKz5qsAAAAAAICAAgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABVqgMAAAAAFYvQVg+77fwPx/P+Dr7w/Q698P8NvPD/Dbvx/wy78/8Mu/P/C730/wq/9v8KwPj/ + CsP5/wrH+v8Ly/r/Dc/7/w/U+v8S1/r/Fdn5/xba+f8X2/n/F9v5/xfb+f8Z3Pn/Jdn4/yTa+P8Y3Pn/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2vn/Ftj4+xfg+/8TvevO + EXfMDwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAFYrPVQ+56vcPyvT/ + DsHy/A6/8v8NvvL/DL7z/wy+9P8Lv/X/Cr/3/wrB+P8Kw/n/Csf6/wvL+/8Mzvv/DtP6/xHW+v8U2fn/ + Fdr5/xfb+f8X2/n/F9v5/x7c+f8o2Pb/HNz5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xjb+f8X2/n/F9r5/xbZ+PoX4Pz/EsDs1hSAzhoAAAAAAICAAgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAvwQAAAAAE4fORA606OwOzPb/DcTz+w3C8/4NwfT/DMD1/wvA9v8Lwff/ + CsH4/wrE+f8KyPr/C8r7/wzN+/8N0fr/ENX6/xPY+f8V2vn/Ftv5/xfb+f8Z3Pn/Jdj3/yPa+P8Z3Pn/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/GNv5/xfb+f8V2vn/FNr5/xXa+f0W2/n7Ft77/xK46MkUgM4a + AAAAAABVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA + EoLKKxCp4swOyvb/Dcr2/AzF9f0NxPX/DMT3/wvD+P8Lxfn/Csb6/wrI+v8Lyvv/DM37/w3Q+v8P1Pr/ + Etf6/xXZ+f8W2vn/Ftv5/x/b+P8s2ff/LeD5/yDc+f8X2/n/Ftv5/xXb+f8X2/n/Ftv5/xTa+f8T2vn/ + GNv5/yPd+P4q3vf7G+D7/hTX+P8SqeCdAIC/CAAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAAHS5CxOY2ZUOwvH/DtD5/w3K9/wLx/f9 + DMj4/wvI+f8Kyfr/C8n7/wvL+/8Mzfv/DdD6/w7U+v8S1vr/E9n5/xXa+f8j3fn/O9v3/0Lj+f8p3/n/ + Fdr5/xba+f8f3Pn/Jd75/xnb+f8b3Pn/K9/4/z/j9/1P5vb8Ser4/jDk+f8Uw+zlEpLVVAAAAAAAgIAC + AICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAgAIAgIACAAAAABKJz0UQq+TODcn1/wzR+v4MzPn9C8n5/ArK+v4Ly/v/C8z7/wzO+/8N0Pr/ + DtT6/xHW+v8Z2vn/LN35/0Pd9/9L4/n/POL5/xzc+f8g3fn/N+H5/0bk+f9F5Pn/SOP4/Vjn+Pth6/j9 + U+z5/jbj+f8bx+/tD6Ddhg15yRMAAAAAAFWqAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAVaoDAAAAAACAvwgSkNJl + D7Dm2A3K9/8L0vv+DdL8/w7Q/PwNz/v8DM/6/QzS+v4O1fr+F9j6/yra+P882/f/PuH5/z7i+v9D4vn+ + ReP5/k/k+f1b5vj8Wuf5+1vq+f5Y7Pr/Q+f6/ira9/8Vv+reDpvafQuAyhgAAAAAAICAAgBVqgMAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAICAAgAAAAAAdLkLFI/SWxGn4rcKve7zAMX1/wbP+f8O1vv/ + F9n7/yHZ+v8l1/j9J9n4/Snf+f0v4fr9OOL6/UDl+/9G5/v/Ruj7/0Dn+/824vr/J9b1/xnB7eIQp+Ci + EJDRTgBxxgkAAAAAAAAAAQBVqgMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB + AFWqAwAAAAEAAAAAAAAAACCPzyBgwupgPMDsryzA7Ngdv+3vFMPv/hnQ9f8V1ff/Ftb3/xrW9/8c1Pb/ + GtDz/hjH7vMUvOrYEazhsBGa2XkRiNA8AHS5CwAAAAAAAAAAAAAAAABVqgMAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBVqgMAgIACAAAAAAAAAAAAAAAB + s+bmCqTk7RyF0esyHJHSShCN0V4UkNJlE4/QXRGKz0oUh80zEoDIHACAqgYAAAAAAAAAAAAAAAAAAAAA + AFWqAwBVqgMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAA + IAAAAEAAAAABACAAAAAAAAAAAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAIAAAAJAAAACQAAAAUAAAASABEWLgcpMEoINUBbCDxEYgU3P10HIilKBgYGLgAAABsAAAAZ + AAANFAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAABREREQ8VFRUYFh0dIxIJCRwXGyA4H2RzjCmnwNEwyOf2MdP3/y7W/P4t2v//K9z//yfX9/4jvdno + H32OrRsxNmgYEBA/HBERLgwMEisACAggAAAADwAAAAYAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAEEhISDhQKChkOAAASGlBcbC231eYyzvr/J7vw/h6s5v8WpuP+E6bj/BKo5fwSrOf8 + Fbbs/hjE9v4d1P//Hcru+Bqdts0eWmSAGBgYKhQKChoWFhYXAAAABwAAAAMAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAACJ/lI0zyPT/I6rl/hOa2fwOn9/8DaXl/g2q6P4Nrev/ + Da/s/w2w7P8LsOz+DK7r/Q2t6PwQte3+Esf6/iLW//8ZsM3LFVVlMAAAAAAAAAADAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAnteKYL73v/xSZ2foMoOP9Dqnp/w6u7P8MtvL/ + C7v1/wy48/8LuPT/DLn0/wy58/8MuPL/Dbfw/w207f4Mrun8F7Ho/BvG9f8U1v/4E6XbTwAAAAAAAAAD + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWqqgMAAAAAI7jvcyu15f8Qltj6D6Pk/hyk3v8gp9v/ + G6HY/xmf2f8RreX/C8b2/w3H9/8MxPf/C8L3/wvA9f8LvfT/DLry/w248P8Ut+3/GLLo+xG05/4WzPT7 + F7P0QwAAAABVVaoDAAAAAAAAAAAAAAAAAAAAAAAAAAD///8CAAAAAAiAyyIktuTyFJnb/xGh4v4irt7/ + IdHw/xja+P8X2fj/GNT1/ynE6P8hvOb/Etj5/xXY+f8T1fn/EdL4/w/O9/8OyPb/DMH0/xK98f8Xue7/ + D67p/BW26f8ayO3mAJLbHAAAAAD///8BAAAAAAAAAAAAAAAAAAAAAP///wQAAAAAAJrYdxqs4v8Rmt77 + G7Hj/xzU8/8Vy/H/GMft/xfV9f8W3Pr/FuH8/zbU8P8jyu3/FN36/xfa+P8X2/n/Ftr5/xTY+P8R1Pj/ + Gs/2/xbE8v8Pue7/Eq7o+hrB7v8FtemhAAAAAP///wMAAAAAAAAAAAAAAAAAAAAA////AwAAAAAdr+Kl + FKLf/xKo5fsbwer/HL3m/xrA6P8Yyu//F9X2/xfb+f8V2ff/G976/zPR7/8V1/j/Ftr5/x3c+f8w3/n/ + Kd75/x7c+f8i2vj/F9b3/xLN9P8Svu7+GLjq/wjC7vGJzusaAAAAAAAAAAEAAAAAAAAAAAAAAACqqv8D + AAAAAEvE67EJnd7/Fbjr+yXI6/8Y2fj/Ft77/xjZ+P8X2vj/F9r5/xja+P8V2vn/Ktn1/xvZ9/8W3Pn/ + F9v5/z7h+f9P5fn/Mt/4/x/Z+P8W2/n/F9r4/xbV9/4VyvL+Dsrz/MTr+CcAAAAAgID/AgAAAAAAAAAA + AAAAAKr//wMAAAAAS8Lqqgii4f8Xseb7ILfj/xqx4P8cqdr/Gajb/xi04/8Xu+f/F7nm/xS76f8bxO3/ + GM3y/xbV9/8S2fn/MeD4/2Hp+P803vj/Gdr4/xbb+f8X2/n/FNr4/CLg+v8Wwu7BAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAv///BAAAAABKvumVCKbk/xWe2/sgks3/J5bM/xiOy/8Xk9D/F5TR/xeT0P8WldL/ + FJvX/xOj3v8RruX/ELzt/w3J9P8j2ff/UOf2/yfb+P8W2/n/GNv5/xTa+f0n3fn/NNf05gii4CEAAAAA + ////AgAAAAAAAAAAAAAAAAAAAAC///8EAAAAAEu45XcIqOX/F4vM+yOTzP8dldD/F4jJ/xmCw/8ZgsP/ + GIvL/xaT0f8Umtf/E6Hd/xCn4/8Or+n/DLnw/wvF9v8Z0vj/G9j4/xbb+f8V2vj9Hdr4+Sfe+f8Vteeh + AAAAAKqqqgMAAAAAAAAAAAAAAAAAAAAAAAAAAKr//wMAAAAASrLgUwqh3v8emNL8GI3M/xmNy/8Zf77/ + GX/A/xmGxv8Xjs3/FZfV/xSd2f8So9//D6rm/w2x6/8MufH/Cb/3/xLI+v8Ozvr/Etb4/Bbc+fwp4/z/ + GLnnpwCAvwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgID/AgAAAABKqt0tC6Xg/yGg2P8bjcv+ + GIvK/xiPzP8Yi8v/GIrK/xeNzP8VmNT/E6fg/xGo4v8PrOf/DbTu/wq79P8Mwvn/Esf7/wjH+/0Q2vz/ + HNj3+R6n33cAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8BAAAAAECfvwgIot/f + IaPa/x2Uz/0YgML/GYbE/xmIxf8Yisb/Fo7K/hWMyvwTodn+ELPp/w6v6f8Mt/D/Cb32/xDF+f8Nx/v9 + C9H8/xS86sEPg8khAAAAAABVqgMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8D + AAAAAAid3KYbp+D/GZPP+xiIxf8ZhsX/F5HP/xWU0v0Vndf8FqLX/xWk2f0Quez/DrHr/wy48v8Jvvf/ + EcX6/QzN+/8U0fXRAJnMCgAAAAAAgL8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAP///wMAAAAACY/RVBer5f8Vmdb7GI7J/xiKyf8Wl9P+Fbfm/RbS9f8Vt+e0E7Pl2w616/8Ltu39 + CsH0/wrJ+v8Qzfv7DtP6/wnS9mwAAAAAAKrVBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA////AQAAAAAAbbYHF7Hl1xaq4P8Vi8r6FYfH/Bep3f8VyfHnE5jVQxOb2YUPs+j/ + ErPq/hSp8f4Uqfb/FrD2/x699/sR0fj/POX5WQAAAACA1dUGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAZldVIFMnx+xzK7v8fsN/+Fare/xSm3VkUmtiY + EK/l/xan5/0bf+//GmXo/xtb4P8bXub/HVvl/RRg4/9bleu+4+P4JQAAAAAAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAASktE4GMPswBjK7/EUp92l + FKnfvhKp4f8Sp9/6GYTw/hph4P8kUcf/IFrX/yFc2/8la+b/Jmnn/hpp6v8cb+v8rcv0XQAAAABVqqoD + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAAgL8E + AAAAABWg2nsUp9//EZ/c+ROs5P8Zfe3/F2rv/xpl5/8dXuH/HVfe/x9d4f8iaOf/KHHs+hpv7/9uoe+A + AAAAAKqqqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AIC/BAAAAAALkNMXFKrg6xOf2v8SpOD+D63n/xKx7v8Yg/D/Fmfw/xpk7f8dZOX/HlXd/x9R3f8fVeD8 + GFnk/36j7lkAAAAAqqqqAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAgL8EAAAAABWa2G8Upt7/E53a+w2m4/8Oq+b/C7Hp/wnI9f8ZmPL/GGDv/x5d7/8ecOz/ + H2jm/yBd4/wYX+j/RovwzQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAvwQAAAAAFZ/aoBWk3f8Ontz7ILHl/5XN3P+sxdb/KLTk/w3b+v8cjPD/ + GV3u/x5R7f8mavD/Nnzv/B1y8P9bmPO4AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIC/BAAAAAASodqYFqff/wae3vtIweb//v33/8Gqo/9krs// + FuH7/x+59P8VY+//GHDu/xuJ8P0fpPb/Hbjz6L/m8hQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgL8EAAAAABKa12UTruT/DqTh+xay6f+a3vL/ + s9rs/ybC6v9G5vr/N933/xmq8v8Zzfb/Euj7/WjQ3v8YzevNAAAAAP///wEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAADIDFFhKy5ugQreb/ + Cq3q/QOz7v8DvfL/DNf6/zPg+f9Q5fj/Nef4/wvd+v9Z2/L6tba8/wrU9ZMAAAAA////AwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA + FJXVWw+87v8NtO37DLjy/AzI+f4U1/n/Fdv5/yDa+P8b2fj+DNf4+0fZ8/9H1PL3ALnoLAAAAAD///8C + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABVqgMAAAAAEpzZcQ7C8/8Kwvf+C8f6/RDU+fsY2Pf7Gtj4+xPb+f4c4fv/ENv5/xCg3F4AAAAA + gICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAEpTTRQ+57dMCxvj/CNP6/jDk+/425Pv/NNz3+yfE6b0XktE4 + AAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAAIC/BHnU7jtbze1wFKDbfiCg2lkWiswj + AAAAAAAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAoAAAAEAAAACAAAAABACAAAAAAAAAAAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAH + AAAACQcODiURVmaJE4alyhCUud4Omr3fDIKcwghASnwFChAxGgAACgAAAAgAAAAAAAAAAAAAAACAgIAC + AAAAABZBUS8pocrfHrf3/xSz9f0Qtvb+ELj3/hLC/f4Xx/z/HbLX6xlnelwAAAAAAAAAAgAAAAD///8B + AAAAACaMvxQcr+vdGKjn/xeu4PkUsOT7EL3v/AvG9vwLv/L7Cbfu+xK58/4ay///BZrTXQAAAAD///8D + //+/BAAAAAAtqeF3D6He/x3A5/gY1PP+F9v4/SbS8P0Y2Pb9F9r5/RTW+P4Wy/T7Frjq/wO17O97zu8f + AAAAAL+/vwQAAAAAYMLplwmu5f8fy+76Fsvv/RTU9f0b1PX9G9b1/R/e+f1G4/j9INz4/hfW9/kJx/D/ + pOP1SQAAAAC/v78EAAAAAGbH7IkIm9n/I5nP+heRzv0Wl9P9FJ/a/RGy5/0SyvP9ON/3/hvX9/kd4fv/ + FcvxwwAAAAAAAAAAv7+/BAAAAABnwuloC5LS/x6KyPoYgcL+ForJ/BKb2f0Op+T+Crbx/QzG+fwU2/v/ + JNLz5AWMzTMAAAAA////AqqqqgMAAAAAZbnlOgya1/8cicX8F4nH/RaQzP4TpNv+DLHr/Qu79PwNyvz/ + Cbbpqw+HwxEAAAAAgICAAgAAAAAAAAABAAAAAEmS2wcGndzaG4zJ/xea1P8VteTOEbHj4g268f8Owvn/ + Etj75zfI7Q4AAAAAAFWqAwAAAAAAAAAAAAAAAP///wMAAAAABpHSWh275v8YrN/XE6jeohab5/wacuP9 + HW/l/xqB6fW02PlVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEVldUYFaLbnA+o3/8Oie38 + HFfi/R9Z3fwdWuL/Km/q5djY6w0AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAGoDMChGf2t8bp+D/ + K7nn/BCW9P0bW+z9H1nl/iFk6PjY3vgnAAAAAICAgAIAAAAAAAAAAAAAAAAAAAABAAAAABSJzhoEoN3y + W8Ln/7zM0f0iz+/9GoTy+x2R8P8/t/HHgID/AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA + EaPdtBa27f8nx/P4MNv3+iHd+fhG3Oz/TdfqhQAAAAD/v78EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB + AAAAABOExhsMsejRAMf5/xnf+/wi4vv/GsHryBuU1xMAAAAA//8AAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAEAAAAAAICzClDF7FwvtOSCHprXTABttgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/BaseForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BaseForm.Designer.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/BaseForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/BaseForm.Designer.cs index 54b575d9c4..f1f169d082 100644 --- a/source/ch/cyberduck/ui/winforms/BaseForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BaseForm.Designer.cs @@ -1,49 +1,49 @@ -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class BaseForm - { - /// - /// 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() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BaseForm)); - this.SuspendLayout(); - // - // BaseForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(764, 537); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "BaseForm"; - this.Text = "BaseForm"; - this.ResumeLayout(false); - - } - - #endregion - - } +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class BaseForm + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BaseForm)); + this.SuspendLayout(); + // + // BaseForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(764, 537); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "BaseForm"; + this.Text = "BaseForm"; + this.ResumeLayout(false); + + } + + #endregion + + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/BaseForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BaseForm.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/BaseForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/BaseForm.cs index acf531a6b5..da8476495f 100644 --- a/source/ch/cyberduck/ui/winforms/BaseForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BaseForm.cs @@ -1,491 +1,491 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections; -using System.ComponentModel; -using System.Drawing; -using System.Reflection; -using System.Windows.Forms; -using BrightIdeasSoftware; -using ch.cyberduck.core; -using Ch.Cyberduck.Ui.Controller; -using Ch.Cyberduck.Ui.Core; -using Ch.Cyberduck.Ui.Winforms.Taskdialog; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class BaseForm : Form, IView - { - private Font _defaultFontBold; - private bool _releaseWhenClose = true; - //private static readonly Logger Log = Logger.getLogger(typeof (BaseForm).FullName); - protected Commands Commands = new Commands(); - - public BaseForm() - { - // workaround for http://connect.microsoft.com/VisualStudio/feedback/details/115408/give-net-windows-forms-the-mfc-7-look-with-the-tahoma-font-as-default - // see also http://stackoverflow.com/questions/297701/default-font-for-windows-forms-application - Font = SystemFonts.MessageBoxFont; - - InitializeComponent(); - - SetStyle( - ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, - true); - - - // not checking if there are any subscribers might result in 'Object reference not set to an instance...' - Shown += delegate - { - VoidHandler shownEvent = ViewShownEvent; - if (null != shownEvent) ViewShownEvent(); - }; - - FormClosed += delegate - { - VoidHandler closedEvent = ViewClosedEvent; - if (null != closedEvent) ViewClosedEvent(); - }; - - Load += delegate - { - if (!DesignMode) - { - LocalizeTexts(); - EventHandler localizationCompleted = LocalizationCompleted; - if (null != localizationCompleted) LocalizationCompleted(this, EventArgs.Empty); - } - }; - - ValuesLoaded += delegate - { - if (PositionSizeRestoredEvent != null) - { - PositionSizeRestoredEvent(); - } - }; - - FormClosing += delegate(object sender, FormClosingEventArgs args) - { - if (!_releaseWhenClose && args.CloseReason == CloseReason.UserClosing) - { - //Log.debug("Cancel close event"); - args.Cancel = true; - Hide(); - return; - } - FormClosingEventHandler closingEvent = ViewClosingEvent; - if (null != closingEvent) ViewClosingEvent(sender, args); - }; - - Disposed += delegate - { - Application.Idle -= OnApplicationIdle; - VoidHandler disposedEvent = ViewDisposedEvent; - if (null != disposedEvent) ViewDisposedEvent(); - }; - - Application.Idle += OnApplicationIdle; - - if (!DesignMode) - { - Load += persistentFormLoad; - FormClosing += persistentFormFormClosing; - } - } - - /// - /// - /// - /// - protected Boolean DesignMode - { - get { return (LicenseManager.UsageMode == LicenseUsageMode.Designtime); } - } - - protected Font DefaultFontBold - { - get - { - if (null == _defaultFontBold) - { - _defaultFontBold = new Font(Font, FontStyle.Bold); - } - return _defaultFontBold; - } - } - - protected PersistentFormHandler PersistenceHandler { get; set; } - - /// - /// null if there is no localization available for this form - /// - public virtual string[] BundleNames - { - get { return new string[] {}; } - } - - /// - /// Since we have no access to the collection of ContextMenu components we need to specify them manually. - /// - protected virtual ContextMenu[] ContextMenuCollection - { - get { return new ContextMenu[0]; } - } - - public DialogResult MessageBox(string title, string message, string content, string expandedInfo, string help, - string verificationText, DialogResponseHandler handler) - { - return Utils.MessageBox(this, title, message, content, expandedInfo, help, verificationText, handler); - } - - public DialogResult CommandBox(string title, string mainInstruction, string content, string expandedInfo, - string help, string verificationText, string commandButtons, bool showCancelButton, SysIcons mainIcon, - SysIcons footerIcon, DialogResponseHandler handler) - { - return Utils.CommandBox(this, title, mainInstruction, content, expandedInfo, help, verificationText, - commandButtons, showCancelButton, mainIcon, footerIcon, handler); - } - - public event VoidHandler PositionSizeRestoredEvent; - public event VoidHandler ViewShownEvent; - public event VoidHandler ViewClosedEvent; - public event FormClosingEventHandler ViewClosingEvent; - public event VoidHandler ViewDisposedEvent; - - public void ValidateCommands() - { - Commands.Validate(); - } - - public new void Close() - { - base.Close(); - } - - public new bool Visible - { - get { return ((Control) this).Visible; } - set - { - if (value) - { - Show(); - } - else - { - Hide(); - } - } - } - - public bool ReleaseWhenClose - { - set { _releaseWhenClose = value; } - } - - public new bool IsDisposed - { - get { return base.IsDisposed; } - } - - public new bool Disposing - { - get { return base.Disposing; } - } - - public new void Show() - { - base.Show(); - Focus(); - } - - public void Show(IView owner) - { - if (owner is Form) - { - if (!Visible) - { - base.Show(owner as Form); - } - Focus(); - } - { - Show(); - } - } - - public DialogResult ModalResult - { - get { return DialogResult; } - } - - public new void Show(IWin32Window owner) - { - base.Show(owner); - Focus(); - } - - public new DialogResult ShowDialog() - { - DialogResult result = base.ShowDialog(); - if (_releaseWhenClose) - { - base.Dispose(); - } - return result; - } - - public new DialogResult ShowDialog(IWin32Window owner) - { - DialogResult result = base.ShowDialog(owner); - if (_releaseWhenClose) - { - base.Dispose(); - } - return result; - } - - public DialogResult ShowDialog(IView owner) - { - if (owner is Form) - { - DialogResult result = base.ShowDialog(owner as Form); - if (_releaseWhenClose) - { - base.Dispose(); - } - return result; - } - return ShowDialog(); - } - - public DialogResult MessageBox(string title, string message, string content, TaskDialogButtons buttons, - SysIcons icons) - { - //BringToFront(); - TaskDialog dialog = new TaskDialog(); - return dialog.MessageBox(this, title, message, content, buttons, icons); - } - - private void OnApplicationIdle(object sender, EventArgs e) - { - Commands.Validate(); - } - - protected virtual Rectangle GetDefaultBounds() - { - return Bounds; - } - - private void persistentFormLoad(object sender, EventArgs e) - { - // Create PersistenceHandler and load values from it - PersistenceHandler = new PersistentFormHandler(GetType(), (int) FormWindowState.Normal, GetDefaultBounds()); - //handlerReady = true; - - // Set size and location - Bounds = PersistenceHandler.WindowBounds; - - // make sure we are on screen - if (!BoundsVisible(Bounds)) - Location = new Point(); - - // Set state - WindowState = Enum.IsDefined(typeof (FormWindowState), PersistenceHandler.WindowState) - ? (FormWindowState) PersistenceHandler.WindowState - : FormWindowState.Normal; - - // Notify that values are loaded and ready for getting. - var handler = ValuesLoaded; - if (handler != null) - handler(this, EventArgs.Empty); - } - - protected event EventHandler ValuesLoaded; - protected event EventHandler StoringValues; - - public static bool BoundsVisible(Rectangle bounds) - { - bool FoundAScreenThatContainsThePoint = false; - - for (int i = 0; i < Screen.AllScreens.Length; i++) - { - if (Screen.AllScreens[i].Bounds.IntersectsWith(bounds)) - FoundAScreenThatContainsThePoint = true; - } - return FoundAScreenThatContainsThePoint; - } - - private void persistentFormFormClosing(object sender, FormClosingEventArgs e) - { - if (null == PersistenceHandler) - { - //not initialized - return; - } - - // Set common things - PersistenceHandler.WindowState = (int) WindowState; - PersistenceHandler.WindowBounds = WindowState == FormWindowState.Normal ? Bounds : RestoreBounds; - - // Notify that values will be stored now, so time to store values. - var handler = StoringValues; - if (handler != null) - handler(this, EventArgs.Empty); - } - - public event EventHandler LocalizationCompleted; - - private IEnumerable RecurseObjects(object root) - { - Queue items = new Queue(); - items.Enqueue(root); - while (items.Count > 0) - { - object obj = items.Dequeue(); - yield return obj; - Control control = obj as Control; - if (null != control) - { - // regular controls and sub-controls - foreach (Control item in control.Controls) - { - items.Enqueue(item); - } - // top-level menu items - ToolStrip ts = control as ToolStrip; - if (ts != null) - { - foreach (ToolStripItem tsi in ts.Items) - { - items.Enqueue(tsi); - } - } - } - // child menus - ToolStripDropDownItem tsddi = obj as ToolStripDropDownItem; - if (null != tsddi && tsddi.HasDropDownItems) - { - foreach (ToolStripItem item in tsddi.DropDownItems) - { - items.Enqueue(item); - } - } - //catch MainMenu and MenuItem components - ComponentCollection componentCollection = obj as ComponentCollection; - if (null != componentCollection) - { - foreach (var item in componentCollection) - { - if (item is MainMenu) - { - items.Enqueue(item); - break; //there is only one MainMenu per Form - } - } - } - Menu menu = obj as Menu; - if (null != menu) - { - foreach (var item in menu.MenuItems) - { - items.Enqueue(item); - } - } - } - } - - private void LocalizeTexts() - { - foreach (var o in RecurseObjects(this)) - { - if (o is Label || o is CheckBox || o is GroupBox || o is Button || o is TabPage || o is RadioButton || - o is Form) - { - Control c = (Control) o; - c.Text = LookupInMultipleBundles(c.Text, BundleNames); - continue; - } - - if (o is ToolStripItem) - { - ToolStripItem i = (ToolStripItem) o; - i.Text = LookupInMultipleBundles(i.Text.Replace("&", String.Empty), BundleNames); - continue; - } - - if (o is ListView) - { - ObjectListView lv = (ObjectListView) o; - foreach (OLVColumn column in lv.AllColumns) - { - column.Text = LookupInMultipleBundles(column.Text, BundleNames); - } - continue; - } - } - //Use reflection to get access to the form components collection which is defined private in - //each form designer class. The MainMenu items are members of this collection for example. - FieldInfo fieldInfo = GetType().GetField("components", BindingFlags.Instance | BindingFlags.NonPublic); - if (null != fieldInfo) - { - IContainer comp = (IContainer)fieldInfo.GetValue(this); - if (null != comp) - { - foreach (var o in RecurseObjects(comp.Components)) - { - if (o is MenuItem) - { - MenuItem m = (MenuItem)o; - m.Text = LookupInMultipleBundles(m.Text.Replace("&", String.Empty), BundleNames); - } - } - } - } - foreach (ContextMenu menu in ContextMenuCollection) - { - foreach (var o in RecurseObjects(menu)) - { - if (o is MenuItem) - { - MenuItem m = (MenuItem) o; - m.Text = LookupInMultipleBundles(m.Text.Replace("&", String.Empty), BundleNames); - } - } - } - } - - private string LookupInMultipleBundles(string toLocalize, string[] bundles) - { - foreach (string bundle in bundles) - { - string cand = LocaleFactory.localizedString(toLocalize, bundle); - if (!toLocalize.Equals(cand)) return cand; - } - return toLocalize; - } - - protected static Bitmap GetIcon(string iconIdentifier) - { - object obj = ResourcesBundle.ResourceManager.GetObject(iconIdentifier, ResourcesBundle.Culture); - return (Bitmap) obj; - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections; +using System.ComponentModel; +using System.Drawing; +using System.Reflection; +using System.Windows.Forms; +using BrightIdeasSoftware; +using ch.cyberduck.core; +using Ch.Cyberduck.Ui.Controller; +using Ch.Cyberduck.Ui.Core; +using Ch.Cyberduck.Ui.Winforms.Taskdialog; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class BaseForm : Form, IView + { + private Font _defaultFontBold; + private bool _releaseWhenClose = true; + //private static readonly Logger Log = Logger.getLogger(typeof (BaseForm).FullName); + protected Commands Commands = new Commands(); + + public BaseForm() + { + // workaround for http://connect.microsoft.com/VisualStudio/feedback/details/115408/give-net-windows-forms-the-mfc-7-look-with-the-tahoma-font-as-default + // see also http://stackoverflow.com/questions/297701/default-font-for-windows-forms-application + Font = SystemFonts.MessageBoxFont; + + InitializeComponent(); + + SetStyle( + ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, + true); + + + // not checking if there are any subscribers might result in 'Object reference not set to an instance...' + Shown += delegate + { + VoidHandler shownEvent = ViewShownEvent; + if (null != shownEvent) ViewShownEvent(); + }; + + FormClosed += delegate + { + VoidHandler closedEvent = ViewClosedEvent; + if (null != closedEvent) ViewClosedEvent(); + }; + + Load += delegate + { + if (!DesignMode) + { + LocalizeTexts(); + EventHandler localizationCompleted = LocalizationCompleted; + if (null != localizationCompleted) LocalizationCompleted(this, EventArgs.Empty); + } + }; + + ValuesLoaded += delegate + { + if (PositionSizeRestoredEvent != null) + { + PositionSizeRestoredEvent(); + } + }; + + FormClosing += delegate(object sender, FormClosingEventArgs args) + { + if (!_releaseWhenClose && args.CloseReason == CloseReason.UserClosing) + { + //Log.debug("Cancel close event"); + args.Cancel = true; + Hide(); + return; + } + FormClosingEventHandler closingEvent = ViewClosingEvent; + if (null != closingEvent) ViewClosingEvent(sender, args); + }; + + Disposed += delegate + { + Application.Idle -= OnApplicationIdle; + VoidHandler disposedEvent = ViewDisposedEvent; + if (null != disposedEvent) ViewDisposedEvent(); + }; + + Application.Idle += OnApplicationIdle; + + if (!DesignMode) + { + Load += persistentFormLoad; + FormClosing += persistentFormFormClosing; + } + } + + /// + /// + /// + /// + protected Boolean DesignMode + { + get { return (LicenseManager.UsageMode == LicenseUsageMode.Designtime); } + } + + protected Font DefaultFontBold + { + get + { + if (null == _defaultFontBold) + { + _defaultFontBold = new Font(Font, FontStyle.Bold); + } + return _defaultFontBold; + } + } + + protected PersistentFormHandler PersistenceHandler { get; set; } + + /// + /// null if there is no localization available for this form + /// + public virtual string[] BundleNames + { + get { return new string[] {}; } + } + + /// + /// Since we have no access to the collection of ContextMenu components we need to specify them manually. + /// + protected virtual ContextMenu[] ContextMenuCollection + { + get { return new ContextMenu[0]; } + } + + public DialogResult MessageBox(string title, string message, string content, string expandedInfo, string help, + string verificationText, DialogResponseHandler handler) + { + return Utils.MessageBox(this, title, message, content, expandedInfo, help, verificationText, handler); + } + + public DialogResult CommandBox(string title, string mainInstruction, string content, string expandedInfo, + string help, string verificationText, string commandButtons, bool showCancelButton, SysIcons mainIcon, + SysIcons footerIcon, DialogResponseHandler handler) + { + return Utils.CommandBox(this, title, mainInstruction, content, expandedInfo, help, verificationText, + commandButtons, showCancelButton, mainIcon, footerIcon, handler); + } + + public event VoidHandler PositionSizeRestoredEvent; + public event VoidHandler ViewShownEvent; + public event VoidHandler ViewClosedEvent; + public event FormClosingEventHandler ViewClosingEvent; + public event VoidHandler ViewDisposedEvent; + + public void ValidateCommands() + { + Commands.Validate(); + } + + public new void Close() + { + base.Close(); + } + + public new bool Visible + { + get { return ((Control) this).Visible; } + set + { + if (value) + { + Show(); + } + else + { + Hide(); + } + } + } + + public bool ReleaseWhenClose + { + set { _releaseWhenClose = value; } + } + + public new bool IsDisposed + { + get { return base.IsDisposed; } + } + + public new bool Disposing + { + get { return base.Disposing; } + } + + public new void Show() + { + base.Show(); + Focus(); + } + + public void Show(IView owner) + { + if (owner is Form) + { + if (!Visible) + { + base.Show(owner as Form); + } + Focus(); + } + { + Show(); + } + } + + public DialogResult ModalResult + { + get { return DialogResult; } + } + + public new void Show(IWin32Window owner) + { + base.Show(owner); + Focus(); + } + + public new DialogResult ShowDialog() + { + DialogResult result = base.ShowDialog(); + if (_releaseWhenClose) + { + base.Dispose(); + } + return result; + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + DialogResult result = base.ShowDialog(owner); + if (_releaseWhenClose) + { + base.Dispose(); + } + return result; + } + + public DialogResult ShowDialog(IView owner) + { + if (owner is Form) + { + DialogResult result = base.ShowDialog(owner as Form); + if (_releaseWhenClose) + { + base.Dispose(); + } + return result; + } + return ShowDialog(); + } + + public DialogResult MessageBox(string title, string message, string content, TaskDialogButtons buttons, + SysIcons icons) + { + //BringToFront(); + TaskDialog dialog = new TaskDialog(); + return dialog.MessageBox(this, title, message, content, buttons, icons); + } + + private void OnApplicationIdle(object sender, EventArgs e) + { + Commands.Validate(); + } + + protected virtual Rectangle GetDefaultBounds() + { + return Bounds; + } + + private void persistentFormLoad(object sender, EventArgs e) + { + // Create PersistenceHandler and load values from it + PersistenceHandler = new PersistentFormHandler(GetType(), (int) FormWindowState.Normal, GetDefaultBounds()); + //handlerReady = true; + + // Set size and location + Bounds = PersistenceHandler.WindowBounds; + + // make sure we are on screen + if (!BoundsVisible(Bounds)) + Location = new Point(); + + // Set state + WindowState = Enum.IsDefined(typeof (FormWindowState), PersistenceHandler.WindowState) + ? (FormWindowState) PersistenceHandler.WindowState + : FormWindowState.Normal; + + // Notify that values are loaded and ready for getting. + var handler = ValuesLoaded; + if (handler != null) + handler(this, EventArgs.Empty); + } + + protected event EventHandler ValuesLoaded; + protected event EventHandler StoringValues; + + public static bool BoundsVisible(Rectangle bounds) + { + bool FoundAScreenThatContainsThePoint = false; + + for (int i = 0; i < Screen.AllScreens.Length; i++) + { + if (Screen.AllScreens[i].Bounds.IntersectsWith(bounds)) + FoundAScreenThatContainsThePoint = true; + } + return FoundAScreenThatContainsThePoint; + } + + private void persistentFormFormClosing(object sender, FormClosingEventArgs e) + { + if (null == PersistenceHandler) + { + //not initialized + return; + } + + // Set common things + PersistenceHandler.WindowState = (int) WindowState; + PersistenceHandler.WindowBounds = WindowState == FormWindowState.Normal ? Bounds : RestoreBounds; + + // Notify that values will be stored now, so time to store values. + var handler = StoringValues; + if (handler != null) + handler(this, EventArgs.Empty); + } + + public event EventHandler LocalizationCompleted; + + private IEnumerable RecurseObjects(object root) + { + Queue items = new Queue(); + items.Enqueue(root); + while (items.Count > 0) + { + object obj = items.Dequeue(); + yield return obj; + Control control = obj as Control; + if (null != control) + { + // regular controls and sub-controls + foreach (Control item in control.Controls) + { + items.Enqueue(item); + } + // top-level menu items + ToolStrip ts = control as ToolStrip; + if (ts != null) + { + foreach (ToolStripItem tsi in ts.Items) + { + items.Enqueue(tsi); + } + } + } + // child menus + ToolStripDropDownItem tsddi = obj as ToolStripDropDownItem; + if (null != tsddi && tsddi.HasDropDownItems) + { + foreach (ToolStripItem item in tsddi.DropDownItems) + { + items.Enqueue(item); + } + } + //catch MainMenu and MenuItem components + ComponentCollection componentCollection = obj as ComponentCollection; + if (null != componentCollection) + { + foreach (var item in componentCollection) + { + if (item is MainMenu) + { + items.Enqueue(item); + break; //there is only one MainMenu per Form + } + } + } + Menu menu = obj as Menu; + if (null != menu) + { + foreach (var item in menu.MenuItems) + { + items.Enqueue(item); + } + } + } + } + + private void LocalizeTexts() + { + foreach (var o in RecurseObjects(this)) + { + if (o is Label || o is CheckBox || o is GroupBox || o is Button || o is TabPage || o is RadioButton || + o is Form) + { + Control c = (Control) o; + c.Text = LookupInMultipleBundles(c.Text, BundleNames); + continue; + } + + if (o is ToolStripItem) + { + ToolStripItem i = (ToolStripItem) o; + i.Text = LookupInMultipleBundles(i.Text.Replace("&", String.Empty), BundleNames); + continue; + } + + if (o is ListView) + { + ObjectListView lv = (ObjectListView) o; + foreach (OLVColumn column in lv.AllColumns) + { + column.Text = LookupInMultipleBundles(column.Text, BundleNames); + } + continue; + } + } + //Use reflection to get access to the form components collection which is defined private in + //each form designer class. The MainMenu items are members of this collection for example. + FieldInfo fieldInfo = GetType().GetField("components", BindingFlags.Instance | BindingFlags.NonPublic); + if (null != fieldInfo) + { + IContainer comp = (IContainer)fieldInfo.GetValue(this); + if (null != comp) + { + foreach (var o in RecurseObjects(comp.Components)) + { + if (o is MenuItem) + { + MenuItem m = (MenuItem)o; + m.Text = LookupInMultipleBundles(m.Text.Replace("&", String.Empty), BundleNames); + } + } + } + } + foreach (ContextMenu menu in ContextMenuCollection) + { + foreach (var o in RecurseObjects(menu)) + { + if (o is MenuItem) + { + MenuItem m = (MenuItem) o; + m.Text = LookupInMultipleBundles(m.Text.Replace("&", String.Empty), BundleNames); + } + } + } + } + + private string LookupInMultipleBundles(string toLocalize, string[] bundles) + { + foreach (string bundle in bundles) + { + string cand = LocaleFactory.localizedString(toLocalize, bundle); + if (!toLocalize.Equals(cand)) return cand; + } + return toLocalize; + } + + protected static Bitmap GetIcon(string iconIdentifier) + { + object obj = ResourcesBundle.ResourceManager.GetObject(iconIdentifier, ResourcesBundle.Culture); + return (Bitmap) obj; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/BaseForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BaseForm.resx similarity index 98% rename from source/ch/cyberduck/ui/winforms/BaseForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/BaseForm.resx index c612c93e70..dfe8351236 100644 --- a/source/ch/cyberduck/ui/winforms/BaseForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BaseForm.resx @@ -1,2427 +1,2427 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAB - AAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAC - AAAAAgAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAEAAAAB - AAAAAQAAAAIAAAACAAAAAgAAAAMAAAADAAAABAAAAAUAAAAFAAAABgAAAAYAAAAHAAAACAAAAAgAAAAI - AAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAIAAAACAAAAAcAAAAHAAAABgAAAAYAAAAF - AAAABQAAAAQAAAADAAAAAwAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAB - AAAAAgAAAAIAAAADAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACRcXFwsVFRUMEhISDhAQEBAODg4S - DBgYFRYWFhcUFBQZExMcGxIbGxwSGhodERoaHhAZGR8QGRkfGBgYIBgYGCAQGRkfEBkZHxEaGh4SEhod - EhISHBQUFBoUFBQZFRUVGBYWFhcXFxcWDQ0aFA4ODhIPDw8RERERDxQUFA0VFRUMAAAaCgAAAAkAAAAH - AAAABgAAAAQAAAADAAAAAgAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAB - AAAAAgAAAAIAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAaChUVFQwUFBQNEBAQEA4ODhINDRoU - FxcXFhQUFBoRGhoeFxcXIRYWFiMWFhYjFg8WIxYPDyMVDg4kFQcHJRQHBycTBgYpEgYGKhgGBisXBgYs - FwYGLRcGBi0XBgYtFwYGLRcGBi0XCwstFgsLLxUQEDEUFBQ0ExgYNRMYHTUUGRkzFRUbMBcXFy0YGBgr - ExMZKRQUFCYWFhYjFxcXIRERGh4TExMbFRUVGA0NGhQPDw8REhISDhUVFQwAAAAJAAAABgAAAAQAAAAD - AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAB - AAAAAQAAAAEAAAACAAAAAgAAAAMAAAAEAAAABAAAAAYAAAAHAAAACAAAGgoVFRUMEhISDhAQEBAODg4S - DAwYFRYWFhcUFBQaEREaHhcXFyEVFRUlExkZKRYWHC4VFRswFhERLhcMDCwXBgYsFAoKMxQUGD8XJCpP - FTU8YRdCUHAWUV1+FlxtjRZmepgWb4SfFneLpRV8j6kXe5CqFXyPqRZ3i6UXb4OeFmV2lRdWZYYWQk10 - FzE2YxYcH1EXCw9DFQgIPRQMDD8XExNDFhoaRhcaGkQYGBhAFRUZPRYWFjoXFxc3FBQZNBUVFTEXFxct - ExMZKRUVFSQYGBggExMTGxcXFxYODg4SEhISDgAAGgoAAAAHAAAABQAAAAMAAAACAAAAAQAAAAEAAAAB - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAABAAAAAQAAAAEAAAACAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAIAAAaChcXFwsUFBQN - EBAQEA4ODhINDRoUFhYWFxQUFBkSEhIcGBgYIBYWFiMUFBQmEhIYKhYWFi8UGRkzFhsbORYWGjsYDg42 - EwoKNRUMED4XKS5YF0xafBZ1iqQWmrXHF7XU4RbI6fMX1ff+Gdz+/xnf//8b4f//G+P//xzk//8c5P// - HOT//xvl//8a5f//GuX//xnm//8Y5f//F+T//xff//8V1PX7FsHg6xamwNEWfJCtFk1YghYhJl0VCwtI - FgsLRhcUF00XGh1PFxcbTBUVGUgWFhpFFxcXQhQUGD8WFho7FxcXNxQUGjIXFxctFBQUJxcXFyISEhId - FhYWFw4ODhISEhIOFxcXCwAAAAgAAAAGAAAABQAAAAQAAAADAAAAAgAAAAIAAAABAAAAAQAAAAEAAAAB - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAADAAAABAAAAAYAAAAH - AAAACRcXFwsUFBQNEBAQEA4ODhINDRoUFhYWFxQUFBkSEhIcEBAZHxcXFyEVFRUkFBQUJxISGCoXFxct - FRUVMBMTGDUWGho7GBgbQRQQFD8WCQk6FhIWRhU6Q24WdYqlF6bD1BjL7fYZ3v//HOP//x/g//8i2/3/ - Jdj4/yjV9f8p1PP+K9Py/S3R8fwu0fH8LtHx/C7S8fws0vH8K9Py/CvT8vwo0/L8JtPy/CTT8/wi1fT9 - INf1/h7a+P8c3v3/GuP//xjn//8X4v//Fcjo8RaYsccWWGWOFhwiWxUHB0oWEBBQGBsbVRYZHFIXFxdO - FxcXTBUVGUgWFhpFGBgYQBUVGjwXFxc3FBQaMhcXFy0TExooFxcXIhISEh0UFBQZDAwYFQ8PDxEREREP - FRUVDAAAGgoAAAAIAAAABgAAAAUAAAAEAAAAAwAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAQAAAAIAAAADAAAABQAAAAgAABoKFRUVDBEREQ8PDw8RDQ0aFBcXFxYUFBQZExMTGxERGh4YGBgg - FhYWIxUVFSUUFBQnExMZKRcXFywWFhYuFRUVMRQUGTMWFhs5FRkdPhYNDToWCQk7FyUtWhZoe5oVrszc - F9f5/hzi//8h3f7/Jtf3/yvS8f0x0PD8M9Hw/TXS8f030vL+OdLy/znS8v850vL/OdHy/zjR8v830vL/ - N9Pz/zbT8/811PP/NdX0/zPV9P8z1vT/Mdb1/y/X9f8u1/X/K9f1/inX9f4l1fT9ItXz/B/W9f4d3Pz/ - GeT//hjk//8XwuHsFnuOrhgtNmwXCgpOFw0NTxgYG1YYGxtWFhkZUhcXF04YGBhLFhYZRxcXF0MVFRk+ - FhYWOhgYGDYUFBoyFhYWLhMTGSkVFRUlFxcXIhERGh4TExMbFhYWFw0NGhQQEBAQFBQUDQAAGgoAAAAH - AAAABgAAAAUAAAAEAAAAAwAAAAMAAAACAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAUAAAAJFRUVDBEREQ8ODg4S - DQ0aFBYWFhcUFBQZExMTGxERGh4YGBggFxcXIhUVFSQUFBQmExMaKBISGCoXFxcsFhYWLhUVFTAUGRkz - FxcbOBUQEDEUCgoyFzZAZBeGn7UYyev1G+D//yLb/P8o0/P+Mc/w/DbR8f060vL+PdLy/z7R8f89z/D/ - PM7w/zrM7/85yu//N8nv/zXI7/8zx+7/Msbu/zHH7/8wyO//L8jv/y/K8P8uyvD/Lsvx/y7M8f8vzvL/ - L9Dz/y/S8/8v0/T/L9X1/y/V9f8t1vX/K9f1/yjW9f4k1fP8IdX0/R7d/P8a5v//GNPy+BaSq8MWRFB/ - FRISVBcKB0wWEhJTGBgbVhUYG1QWFhpQFxcXTBUVGUgWFhpFFxcXQhUVGT4WFho7FxcXNxQUGTQVFRUx - FxcXLRISGCoUFBQmFxcXIRMTExsXFxcWDw8PERISEg4XFxcLAAAACQAAAAgAAAAHAAAABgAAAAQAAAAD - AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAEAAAADAAAABQAAAAkUFBQNEBAQEA0NGhQXFxcWFBQUGRMTExsSEhIdEBAZHxcXFyEWFhYj - FRUVJRQUFCcTExkpGBgYKxcXFywWFhYuFBkeMxYQFi8UBwcmGDM8VRaQq7wY0/f8Ht7//yfU9v8xzu/8 - ONHw/T7S8f9B0fH/QM/w/z7L7/87yO7/N8Xs/zPB6/8vver/K7vp/ye46f8ktun/IbTo/x+z6f8ds+n/ - HLPp/xu16v8btur/Grfr/xu56/8bu+z/HL3t/x2/7v8fwu//IsTw/yPG8f8lyfH/KMvy/yrO8/8r0PP/ - LNL0/yzU9f8r1vX/KNX0/iXS8/wh2Pn+HeT//xne/f8Xr8zbFmN0mBckLGIVCgpKFQsLSBcTE08WGRxS - FxoaTxgYGEsVFRlIFhYaRhcXF0MYGBhAFRUZPRYWFjoXFxc3FBQZMxYWFi8TExkpFxcXIhMTExsXFxcW - Dw8PEREREQ8VFRUMFxcXCwAAAAkAAAAIAAAABgAAAAQAAAADAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAEAAAABgAAAAkVFRUM - EBAQEA0NDRMXFxcWFBQUGRISEhwRERoeGBgYIBYWFiMVFRUlFBQUJxMTGigSEhgqFhYcLhUVGzAXCAgh - FSElPhV/macYz/X6INz//ynQ8v42ze78PdHw/kLR8P9Cze//P8nt/zrE6/80vur/Lbno/ya05/8gr+X/ - HKzk/xip5P8Wp+T/FKfk/xOm5P8SpuT/Eqfk/xKn5f8RqOX/Eanm/xGq5v8Rq+f/Eazo/xGu6P8RsOn/ - EbLq/xGz6/8Stez/E7jt/xW77v8Xve7/GcDv/xzD8P8fxvH/Isny/yXM8v8n0PP/KdL0/yjT9P4m0vL9 - I9X1/h/f/v8b4///F8vr8xaWr8IXV2aHFyMpWBUICD4UDAxAFRUVSBUYHEkXFxpEGBgYQRQUGD8VFRo8 - FhYWORgYGDYUFBoyFhYWLhMTGigXFxchFBQUGg0NGhQQEBAQEhISDhUVFQwAABoKAAAACQAAAAcAAAAF - AAAABAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAQAAAAIAAAACAAAABAAAAAYAAAAJFRUVDBAQEBANDQ0TFxcXFhQUFBkSEhIc - EBAZHxcXFyIVFRUkFBQUJhcXHSwVDg4lFwgPIRddbXwYwuXuH9z//yrP8v04zO78QtDv/0TO7/9Cyu3/ - PMPq/zS86P8qtOb/Ia3k/xuo4v8WpOH/FKPg/xOi4P8SouL/EqLi/xKi4v8So+L/EqTj/xGk4/8RpeT/ - Eabl/xGn5f8RqOb/EKjm/xCp5/8Rqef/Earo/xGr6f8QrOn/EK3q/xCv6v8QsOr/ELHr/xCz7P8Qte3/ - Ebft/xK57f8UvO7/Fr/u/xnD8P8cxvH/IMry/yPN8v8l0PP/JdHy/STR8vwg2Pn/HOL//xnh//8Vyuvw - FY6mtB9NWWohISY2EwYGKRMTEzUXFxw3FBQaMhYWFi8XFxcsEhIYKhQUFCYXFxciEhISHRUVFRgNDQ0T - EhISDhcXFwsAAAAJAAAACAAAAAYAAAAFAAAABAAAAAMAAAACAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAB - AAAAAgAAAAQAAAAGAAAACBcXFwsSEhIODw8PEQ0NGhQWFhYXFBQUGhERGh4WFhYjDQAAExMmKzUXlrW9 - HNv//yfR9f43yuz8Qc7v/kbM7v9Bxuv/OL7o/y605f8jq+L/G6Xg/xah3/8Tn97/E5/f/xOg3/8ToeD/ - E6Lh/xOi4f8SouL/EqPj/xKk5P8RpeT/Eabl/xGn5f8Rp+b/Eafn/xCo5/8Qqef/EKrn/xCq6P8Qquj/ - EKvo/xCr6P8QrOr/EK3q/xCu6v8Qr+v/ELDr/xCx6/8Qsuz/ELPs/xC07f8Qtu3/Ebjt/xK67v8Tvu7/ - FsHw/xnF8P8dyfL/IM3z/yHP8/4hz/H8HtLy/RzZ+v8X4///Kd79/za41tEcZHRuEBkZHxEAAA8REREe - ERoaHhQUFBkWFhYXDAwYFQ4ODhIREREPFRUVDAAAAAkAAAAHAAAABQAAAAQAAAADAAAAAgAAAAIAAAAC - AAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAACAAAABAAAAAUAAAAI - AAAaChUVFQwQEBAQDg4OEgAAAAEVUWFfGcPq7iPX/v80ye38QMzt/kbL7f9Cxer/Nrrm/ymv4v8epeD/ - F5/e/xSd3f8Tnd3/E57e/xOe3/8Tn+D/E6Hh/xOi4f8So+L/EqTj/xGl5P8RpuX/Eabm/xGn5v8QqOb/ - EKjn/xCo5/8PqOf/D6no/w+q6P8Pquj/D6vp/w+r6f8PrOn/D6zp/w+t6f8Prer/D67q/w+v6v8Pr+v/ - D7Dr/xCw6/8Qsez/ELLs/xCy7P8Qs+z/ELTs/xG17f8Rt+z/Ebvt/xK97v8VwfD/GMXx/xvJ8v8dzfP/ - HdDz/hvP8fwg1fT+Ntn6/ivj//8Vvt7YFWV9YgAAAAcAAAABFBQUDQAAHAkAAAAHAAAABgAAAAUAAAAE - AAAAAwAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAIAAAADAAAABwAAAAQAAAACFHuViR3W//8r0PT+ - Pcnr/EbM7f9Dxer/N7nm/ymt4f8cot7/Fpzc/xOb3P8TnNz/FJ3d/xOe3v8Tnt//E6Dh/xOh4v8So+L/ - EaTj/xGl5P8RpuX/Eafl/xGn5v8QqOf/EKnn/w+q5/8Pquj/D6rp/w6q6f8Oq+n/Dqzp/w6s6v8Orer/ - Dq7r/w6u6/8Oruv/Dq7r/w6u6/8Or+v/DrDr/w6x6/8Osez/D7Hr/w+x6/8Psez/ELLs/xCy7P8Qsuz/ - ELPt/xCz7P8Rtez/Ebbs/xG47f8Ru+7/E7/v/xXC8P8XxvH/Gcry/xjO9P8o0vP9N87w/Rvd/P4V4/// - FrreyBNTazcAAAAAAAAABAAAAAQAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAQAAAAQAAAAAEhIkDhedv7Qi2v//Ncnt+0TL7P1FyOv/Orvm/yqt4f8dod3/Fpvb/xSa2/8Umtv/ - FJzc/xOd3v8Tn9//E6Dg/xOi4f8So+L/EaTj/xGm5P8Rp+X/Eajm/xCo5/8Qqej/D6ro/w+r6f8PrOr/ - D63r/w+t6/8Orez/Dq7s/w6u7P8Or+z/Dq/s/w6w7f8Ose3/DbHt/w6x7f8Ose3/DrHt/w6x7v8Osu7/ - DrLu/w6y7f8Osu3/DrLt/w6y7P8Os+z/D7Ls/w+y7P8Qsuz/ELPt/xCz7P8Qs+z/EbTr/xG17P8Rt+z/ - Ebrt/xK97v8Uwe//FMTw/xrL8v82zfL/JdHz/RPP8vwW3Pv/FOH//BWfwpIAM00KAAAAAAAAAAQAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAABJYex0Xtd7PKNb9/zzK6/pGy+z+ - QcHo/zCx4v8go93/F5va/xSZ2v8Umdv/FJvc/xSd3f8Un9//E6Dg/xOi4f8SpOP/EaXk/xGm5v8QqOf/ - EKnn/xCq6f8PrOn/D63q/w+u6/8Or+z/DrDt/w6x7v8Ose7/DbLv/w2x7/8Nse//DbLv/w2y7/8Nsu// - DLLv/wyz7/8NtO//DbTv/w207/8NtO//DbPv/w2z7/8Ns+//DbTv/w607/8Os+//DrPv/w607v8OtO7/ - DrPt/w+z7P8Ps+3/ELPt/xCz7f8Qs+z/ELPs/xGz6/8Rtez/Ebfs/xK57f8Tve3/FMLv/y/I8P8sy/L/ - Fc70/xXO8/wV0fP8FuD+/xXW/tMQndkvAAAAAABAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABVAwAAAAAOn90lGc3+3S7S9f9Byuv7R8ns/zq65f8nqN//Gp3b/xWZ2v8Umdr/FJrb/xSc3f8Un9// - E6Hh/xKj4/8SpeT/Eabl/xCo5/8Qqej/EKvp/w+s6v8Pruv/Dq/s/w6w7f8Ose7/DrLv/w6z7/8Ns/D/ - DbTw/w208P8MtfH/DLTx/wy18f8MtfL/DLXx/wy18f8MtfL/DLby/wy38v8Mt/H/DLfx/wy38f8Mt/H/ - DLbw/wy28P8NtfD/DbXw/w218P8NtfD/DrTw/w607/8OtO//DrTu/w607f8PtO3/D7Pt/xCz7P8Qsuz/ - ELPs/xGz6/8RtOv/EbTs/xK37P8Ruez/KcLu/zDG8P8VxvH/Fcnz/xXO9P4VzvP7FtX0/xbX+fYUtfFa - AAAAAACAvwQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAE6bmKBrE7uIzze7/Rcvs+0XF6v8zs+P/ - IKHc/xeZ2f8Vmdn/FZnb/xSb3f8Un9//E6Lh/xKk5P8SpuX/Eajm/xCp6P8Qq+r/EKzr/w+t7P8Pr+z/ - DrHt/w6y7v8Os+//DrPw/w208P8NtfD/DbXx/wy28f8Mt/L/DLfy/wy38v8Mt/P/DLfz/wy48/8MuPP/ - DLj0/wy48/8MufP/DLnz/wy58/8MufP/DLnz/wy48v8MuPL/DLjy/wy38v8MuPL/DLfx/wy38f8NtvD/ - DbXw/w218P8Ote//DrTv/w617v8OtO7/D7Tt/w+z7f8Ps+z/ELLs/xGz6/8Rs+v/EbPr/xC06/8jvO3/ - MsLt/xe/7v8Uwe//Fcfx/xbL8/8VzvT8FdT1/RbY9f8Ut+d/AAAAAABVqgMAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoD - AAAAAA+W2iIbw+3gNNDx/0fM7vxCw+n/LK7h/xye2v8WmNn/FZna/xWa3P8Unt//E6Hh/xKk4/8SpuX/ - Eqjn/xGp6P8Qq+r/EKzr/w+u7P8Pr+z/DrHt/w6y7v8Osu//DrPw/w208P8NtPD/DbXx/wy28f8Mt/L/ - DLfz/wy58/8MufP/DLnz/wy69P8MuvT/DLn0/wy59P8LufT/C7n0/wu69P8MuvT/DLr0/wy69P8MuvT/ - DLr0/wy68/8MuvP/DLnz/wy68/8MufL/DLny/wy48v8NuPH/Dbfx/w238P8OtvD/DrXv/w617/8Ote7/ - D7Xu/w+07f8Ps+z/ELPs/xCz7P8Rsuv/D7Pr/x247P8zv+3/Gbrs/xO67P8Vv+7/FcTw/xXK8v8VzfP9 - FdH1+xbb+f8Vu+uPAAAAAACAgAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAMktsVGsHt1jbR8v9GzO77PsHo/yiq3/8am9n/ - FpjY/xWZ2/8VnN7/E6Dg/xOj4v8SpeX/Eqfn/xGp6P8Rqun/EKvq/xCs6/8Prev/Dq/s/w6x7f8Ose// - DrLv/w2z7/8Ns/D/DLTw/wy28f8Mt/L/DLjz/wy48/8MufT/DLr0/wy69P8LufT/C7r0/wu69P8LuvT/ - C7r1/wu69f8Lu/X/C7v1/wu79f8Lu/X/C7v1/wu69f8LuvT/DLr0/wy69P8MuvT/C7r0/wy68/8MuvP/ - DLrz/w258/8NufL/Dbnx/w248P8Nt/D/Drbw/w627/8Ote//D7Xu/w+07f8PtO3/ELPs/xCz7P8Qsuv/ - Gbbs/zO+7P8bt+v/ErXq/xS57P8Vve3/FcLv/xXH8f8VzPP+FdD1+hfa+f8Wve2aAAAAAACAgAIAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAB - AGbMBRi8670z0vL/Rs3u+z3A6P8mqN//GZrZ/xaY2P8Vmdv/FZ3e/xOg4f8To+P/Eqbl/xKo5/8Rqef/ - Earp/xCr6v8Qruz/DrHt/w6z7v8NtO//DbTw/w208P8NtvH/DLjy/wy68/8MvPX/DLz1/wy68/8MuvP/ - DLrz/wy79P8Mu/T/C7z1/wu89f8LvPX/C731/wu89f8LvfX/C731/wu99f8LvfX/C731/wu99f8LvfX/ - C7z1/wu99f8LvfX/C7z1/wu89f8Lu/X/C7v0/wy79P8Mu/T/DLr0/wy68/8MuvP/Dbny/w258f8NufD/ - Dbjw/w637/8Otu//D7Xu/w+07f8PtO3/ELTt/w+z7P8Utez/Mb7s/yC47P8Qsur/E7Xq/xS36/8Vu+z/ - FcDu/xbG8P8WzPP/Fc/1+hfa+f8Vu+yTAAAAAABVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWqAwAAAAAXs+eTMNPz/0XO7vs8wOj/JKjf/xiZ2f8WmNj/ - FZrb/xSd3/8ToeH/E6Tj/xKm5f8Sp+f/Eajn/xCq6f8Pruz/D6/s/w+r6f8Qo+L/Epra/xST1P8VjtD/ - FovN/xWLzv8Uj9D/E5bX/xGh3/8OsOr/Dbzz/wzC+P8Mwfb/DL71/wy+9f8Mv/X/DL/1/wu/9f8Mv/X/ - DL/2/wvA9/8LwPf/C8D3/wvA9/8LwPf/C7/3/wu/9/8Lv/b/C772/wu+9v8LvvX/C771/wu+9f8LvvX/ - C731/wy89P8Mu/T/DLv0/wy79P8Mu/P/DLry/wy68f8NufH/Dbnw/w648P8Ot/D/Drbv/w+17v8Pte3/ - ELTt/xC07P8tve3/Jbrs/xCy6v8Ssun/ErPq/xO16/8Vuuv/Fb7t/xbF8P8WyvP/Fs71+xfZ+P8VueqD - AAAAAACAvwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA - FKLfWCjR8/9Dz/D8PMPq/yOq4P8Ymdn/FpfY/xWa2/8Und//E6Hh/xOk4/8SpeX/Eqfm/xKo5/8QrOr/ - D6zq/xCi4f8Vk9T/HIjJ/yOCxP8mgcH/KIPA/ymEwP8phL//KYG+/yZ8u/8keLn/IXa5/x55vf8ahcb/ - FJvY/w+27P8Mx/j/DMn5/w3F9v8Nxff/Dcb3/wzH+P8Mxvj/DMb4/wzG9/8Mxff/DMX3/wzE9/8MxPf/ - DMT3/wzC9/8Mwvf/DMH3/wzB9/8LwPf/C7/2/wu/9f8Lv/X/C771/wu+9f8MvfT/DLz0/wy89P8MvPP/ - DLvz/wy78v8NuvH/Drrx/w658f8Ot/D/Drbv/w617v8Pte3/DrXt/ye87f8ou+z/ELLq/xKy6v8Ssun/ - ErLq/xS16v8Uuev/Fb7t/xbE8P8VyvP+Fs70+xfY+P8WsOdqAAAAAACAvwQAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABKEyh0fxu3nPNPy/zzG6/4kreH/GJvZ/xeX2P8Vmdr/ - FZze/xOg4f8To+P/EqXl/xKm5v8Rquf/EKvp/xGh4P8YkND/JYrI/y+Syv8zodD/NbDX/zW73P8zweD/ - LsDi/yq74f8nsd7/I6XZ/yOg1v8jmdH/I4/L/yGEwv8fe7z/Hn2//xeSz/8Rt+n/Ds/5/w7P+f8Ozfj/ - Dc34/w3N+P8NzPn/Dcz4/w3M+P8NzPj/Dcv4/w3L+P8Nyvj/Dcn4/w3I+P8Mx/j/DMb3/wzF9/8MxPf/ - DMP3/wzB9v8MwPb/DMD1/wy/9f8Mv/X/DL70/wy99P8NvfT/Dbzz/w278v8Nu/H/Dbrx/w268f8OufD/ - Drjv/w+27/8Nte7/JLzu/yq97f8QtOv/EbLr/xKy6v8Ssun/ErLp/xS06v8UuOr/Fb7t/xbE8P8VyvL+ - FtH1/RbW9/wWqeJHAAAAAABVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA - Fq/jojHW9f88ye37JrPk/xee2/8Wl9j/FpjZ/xWb3v8UoOH/E6Lj/xOk5P8SpuX/Earo/xCo5v8Vldb/ - I4zJ/zKcz/82t9z/Nszm/zLX7f8q2PD/INXz/xjQ9P8TzfX/Esz2/xLO9/8Sz/f/FM72/xXL9P8ZxfD/ - JL7p/yGu3/8amtL/HYnH/x2Fxf8Wn9f/Ecnz/xHV+v8R0vn/ENP5/xDS+f8Q0vn/D9H5/w/R+f8P0fn/ - D9D5/w7Q+f8Oz/n/Ds75/w3N+f8NzPn/Dcv4/w3J+P8NyPj/DMj3/w3G9/8MxPf/DML2/wzC9v8Mwfb/ - DMD1/wy+9P8MvvT/Db3z/w288/8Nu/H/Dbvx/w678f8OuvD/Drnw/w247/8jvu//Kr7u/w+17f8Rs+v/ - EbLr/xKy6v8Ssun/E7Lp/xS06f8VuOr/Fr3s/xbF8P8Wy/L9F9L2/xfQ9OoVn90lAAAAAACAgAIAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABKV1Ugi0PT/Nc3w/Sm66P8Yot7/FpnY/xaY2P8Vmtz/ - FJ7g/xOi4v8TpOP/Eabl/xGq6P8RpeT/GZLR/yuTy/8zstr/MtHp/y3b8P8i1/P/GNH1/xLN9v8Qzvf/ - EdH3/xPT+P8T1fj/FNX4/xTW+P8U1/j/FNf5/xTY+f8b2vn/Ltr3/zfP8P8juOX/F6HY/x2Uzv8bndT/ - FcXu/xTZ+v8U1/n/FNf5/xTW+f8T1vn/E9b5/xLV+f8S1fn/EtX5/xHU+f8R0/n/ENP5/xDS+f8P0fn/ - Ds/5/w7O+P8Ozfj/Dcz4/w3L+P8Nyvf/Dcf2/w3E9v8NxPb/DML1/w3A9f8Nv/T/Db70/w298/8NvPL/ - Dbzy/w678f8Ou/D/Dbnw/yO+7/8ovu//D7bt/xC07P8Rs+v/EbLr/xKy6f8Ssun/E7Hp/xS06f8Vuer/ - Fr7t/xfF8P8WyvL8F9X2/xbI8ccAgL8IAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAgIAC - F7vqyinR8/8pwOv9Gqrh/xab2v8Xl9j/FZna/xWd3/8ToeL/E6Pj/xKl5P8Squj/EaXj/xuRz/8sl87/ - MMDh/y3b7/8j2PP/FtD1/xLO9v8S0ff/FNT3/xXW+P8W1/j/Ftj4/xbY+P8W2Pj/Ftn5/xbZ+f8W2fn/ - Ftn5/xTZ+f8U2vn/KN/6/0rk+P8/zu7/Gq3e/xme1P8cp9r/Fs/z/xbb+v8W2fn/Ftn5/xXZ+f8V2fn/ - Fdn5/xXY+f8V2Pn/FNf5/xTX+f8U1vn/E9b5/xPW+f8S1fn/EdT5/xDS+f8P0fn/D8/4/w7P+P8Ozvj/ - Dsv3/w3J9/8NyPb/Dcb2/w3D9f8NwvX/DcD1/w2/9P8NvvP/Dr3y/w688f8NvPH/J8Dw/yW/7/8Otu3/ - ELXt/xC06/8Ss+v/ErLr/xOx6f8Tsen/FLLp/xS16f8Wuev/Fr/t/xfH8f8Wy/P7F9f4/xW5648AAAAA - AFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABSY11kZz/X/IMPu/Byy5v8Wod3/FpjY/xaY2f8Vm93/ - FJ/h/xOi4/8TpeP/Eqnn/xGp5v8blNL/K5jP/y3F5P8q3vL/G9L0/xLN9v8T0vf/FdX4/xbX+P8W2Pj/ - Ftn4/xbZ+f8W2vn/Ftr5/xfa+f8X2vn/F9r5/xfa+f8X2vn/F9r5/xfa+f8T2fn/GNv5/0jn+v9b4fT/ - Kbfh/xae1f8brN7/F9L0/xfc+v8W2vn/Ftr5/xba+f8W2vn/Ftr5/xba+f8W2vn/Ftn5/xXZ+f8V2fn/ - Fdn5/xXY+f8V1/n/FNf5/xPW+f8T1fn/EdP5/xDT+P8P0fj/Ds/3/w7N9/8OzPf/Dsr3/w7I9v8Oxvb/ - DsP1/w7B9P8OwPP/Dr7y/w6+8v8rwvH/IL/w/w257/8Qt+7/ELXt/xG07P8Ss+z/ErLq/xOx6f8Tsen/ - FLLp/xW26f8Wuuv/FsHu/xfJ8v8Wz/T9F9b3/xSo5EwAAAAAAFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA - FLbnvRfN9P8XuOr8F6nh/xac2v8XmNj/FZnb/xWd4P8ToeL/E6Tj/xKn5v8Rq+j/F5vY/yiVz/8sxub/ - KN/0/xbP9f8T0Pb/FdX3/xbX+P8W2Pj/Ftn5/xba+f8X2vn/F9r5/xfa+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xjb+f8X2/n/ENn5/zjk+v9s7Pj/O8Ll/xeb1P8asOD/F9j3/xfc+f8X2/n/ - F9v5/xfb+f8X2/n/F9r5/xfa+f8W2vn/Ftr5/xba+f8W2vn/Ftr5/xXZ+f8V2fn/Fdn5/xXY+f8U2Pn/ - FNb5/xPW+f8S1Pn/EdP3/xHR9/8Q0Pf/D873/w7M9/8Oyvf/Dsf2/w7F9f8NwvT/EsPz/y/G8f8awfL/ - Dbvw/xC67/8QuO7/ELbt/xG17P8StOv/ErLp/xOx6f8Usen/FLPp/xa36v8WvOz/F8Pw/xbK8v0X0/b/ - F8703g6c1RIAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAAAAABSN0CYVyPL3F8Xw/xaz5/4Wo9//FprZ/xaZ2f8Vm93/ - FJ/h/xOj4/8SpeT/Eavp/xOm4f8ik8//K73i/yng9f8Wz/X/FNL3/xbW+P8W2Pj/Ftn4/xfZ+f8Y2fn/ - GNr5/xfa+f8X2vn/F9r5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Z2/n/ - ENn5/zHh+f9y8Pn/QsPl/xaa0/8Zv+j/F936/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfa+f8X2vn/Ftr5/xba+f8W2vn/Ftr5/xba+f8W2fn/Ftn5/xXY+f8U1/n/FNb4/xPV+P8S0/f/ - EdH3/xDP9/8Qzff/D8v3/w3I9f8ayfX/MMjy/xTD8/8OvvH/D73w/xC77/8Que7/ELbs/xG16/8Ss+r/ - ErLp/xOx6f8Usun/FbTp/xa56v8Wv+7/F8bx/xXL8/sX1/j/FbfqhwAAAAAAVaoDAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAvwQAAAAA - E57YaRXP9f8Wvu38F67k/xaf3P8Wmdj/FZna/xSd3/8ToeL/EqTk/xKo5/8Rrun/GpnV/yer2v8q3/P/ - GNH1/xTS9/8W1/j/Ftn4/xbb+f8X3Pr/F937/xfe+/8X3vv/F977/xfe+/8X3vv/F936/xfc+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Z2/n/ENn5/zHh+f917/j/Pbvh/xWh1/8Y0vT/ - F936/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfa+f8X2vn/ - Ftr5/xba+f8W2vn/Ftr5/xba+f8W2fn/Fdj4/xXX+P8U1vj/E9X4/xPT9/8S0ff/EM/3/yXP9f8ty/P/ - EMf1/w/D8/8PwPL/EL3w/xC87/8Quu7/Ebfs/xG16/8StOn/ErLp/xOy6f8Vsun/FbXp/xa76/8Xwu// - Fcny/hfQ9f8X0fb0E5/fKAAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWqAwAAAAAUruKmFs31/xa46vwWqeL/Fpza/xWZ2f8Vm9z/ - FJ/g/xOj4/8SpuX/Eq7q/xSp5P8emtP/KtTu/x3Y9v8U0fb/Ftj4/xbb+f8X2/r/GNX2/xnM8f8ZxOv/ - Gb/o/xm85/8Zvef/GcDp/xjG7f8YzvH/F9j3/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8Z2/n/ENn5/0Ll+f906vb/KanZ/xS45f8Y3vr/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/GNv5/xjb+f8Y2/n/F9v5/xfa+f8W2vn/Ftr5/xba+f8W2vn/ - Ftr5/xbZ+f8V2Pj/FNb4/xTV+P8V1fj/MdH1/yfQ9v8Pzfb/EMn1/xDG9P8QwvL/EL/x/xC98P8Ruu7/ - Ebfs/xK16/8StOr/ErLp/xSy6f8UtOn/Frfq/xa+7f8XxfD/Fsrz+xfX+P8WvOuZAAAAAABVqgMAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA - AAAAARW76dIXyfL/FrTo/Ral3/8Wm9n/FZrZ/xWc3v8ToeL/E6Xk/xKp5/8StOz/FJ7b/yO24P8l3/b/ - FND2/xbZ+f8W1/f/Gcnv/x234/8dqNn/Hp7T/x6Yz/8dlc3/HJTN/xyVzv8bmND/Gp3T/xmj2P8YwOn/ - F9z5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/FNr5/13t+v9d0ur/ - FqXZ/xfV9v8X3Pr/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/GNv5/xvb+f8e3Pn/ - Hdz5/xzb+f8b2/n/Gtv5/xrb+f8Y2/n/GNr5/xfa+f8W2vn/Ftr5/xba+f8W2fn/Fdj4/x3Z+P830/T/ - H9b3/xLR9/8Tz/b/Esv1/xHI9P8RxPL/EMHx/xC+8P8RvO7/Ebjt/xK26/8StOr/E7Pp/xOz6f8Vtun/ - Frvs/xfC7/8VyfL+F9H1/xbQ9PERmd0eAAAAAACAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAANgMwUFMPv7RfF8P8Wsuf+FqLe/xab2f8Vmtv/ - FJ/g/xOj4/8Tp+X/Eq/p/xKz6v8Wntn/J9Pu/xjW9/8V1vj/Gczw/x6z4P8hodX/IZrQ/x+b0P8eoNX/ - HKnb/xuz4f8Zvef/GMXs/xjL8P8Y0PP/F9P0/xfW9v8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xjb+f8T2vn/J9/5/3Hr9/8wr9z/E8Ps/xje+/8X2vn/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/Idz5/yje+f8o3vn/Jt35/yTd+f8i3fn/INz5/x/c+f8d3Pn/ - HNv5/xrb+f8Z2vn/F9r5/xba+f8V2vn/KNr4/zXV9f8Z2vn/FNb4/xTU9/8U0fb/E872/xLL9f8Rx/P/ - EcPy/xHA7/8Rve7/Errt/xO36/8Tter/E7Pp/xS26f8Wuev/F7/t/xbG8P8VzPP7F9f4/xey6G0AAAAA - AIC/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAC - AAAAABKMzioUx/D9F8Lu/xav5f4WoNz/FprZ/xWb3f8ToOH/E6Xk/xKq5v8Stez/ErDn/x2y4f8g2/b/ - FdL3/xzA6f8iptj/I57S/yCm1/8ds+D/GsPq/xjP8v8X1/f/F9z6/xfe+/8X3vv/F976/xfd+v8X3fr/ - F9z6/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8R2fn/ - Vev6/1XL5/8SteP/GN77/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8k3fn/ - MeD5/zLg+v8x4Pr/Lt/5/y3f+f8r3/n/Kd75/yfe+f8m3fn/JN35/x/c+f8Z2/n/F9r5/xjc+v8y1/b/ - Ldn3/xXb+P8W2Pj/Fdf4/xXW+P8U1Pf/FNH2/xTN9f8SyvT/Esby/xLC8P8Svu//E7vt/xO46/8Utur/ - FLbp/xa46v8Wve3/FsPv/xXJ8vwX1vf/F8HusQAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqqqgMAAAAAXLjiPQfB7/8ZwO3+F6zk/xaf3P8Wm9r/ - FZ3e/xOi4v8Tp+X/Eq3o/xK67v8TsOX/Icfq/xnW9/8eueX/JKHU/yKm2P8dvOX/GdDz/xfb+f8X3vr/ - F936/xfc+f8X2/n/F9r5/xfa+f8X2vn/F9r5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/GNv5/xLZ+f8w4/r/aeDx/x2z4f8W2fj/F9z5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/GNv5/yLd+f814Pn/O+H6/znh+v844fr/NuH6/zXg+v804Pr/ - MuD6/zDg+v8u3/n/Jt35/xvb+f8W2/n/IN35/zjW9f8j3Pn/Fdr5/xba+P8W2fj/Ftj4/xXX+P8U1ff/ - FNP2/xTP9v8UzPT/FMnz/xTE8f8UwO//FL3u/xS67P8Uuev/Frnr/xa87P8Wwu//Fcny/RrU9v8IxfDg - gL/fCAAAAAAAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - qqr/AwAAAABqv+ZIBcHv/xm97f0WquP/Fp7c/xWb2/8Un9//E6Tj/xOp5v8Ssur/Er3v/xa46P8e0PH/ - H7vm/yWj1f8fs+H/Gs7x/xfc+v8X3fr/F9v5/xfa+f8X2vn/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - Ftv5/xjc+f9j6ff/Mbzj/xLS9f8Y3fr/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - Hdz5/zLg+f9B4/r/QeP6/0Dj+v8/4/r/PeL6/zzi+v864fr/OeH6/zfh+v8r3/n/G9v5/xbb+f8q2/j/ - Ndf2/xvd+v8X2vn/F9r5/xba+f8W2vj/Ftn4/xbY+P8V1vj/FdT3/xTS9v8Vz/X/Fcv0/xXH8v8Vw/D/ - FL/u/xW97f8WvOz/Fr3t/xbC7/8VyPL+GtL2/wbI8fOh2ewbAAAAAICA/wIAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqqv8DAAAAAGnC5lAGv+7/G7fo/Ben4f8Vntv/ - FZzc/xOg4P8TpuT/Eqzo/xK27P8TwPD/F8Pt/yDA6P8ip9j/IMDo/x/a9/8W3Pr/F9r5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/ENn5/07o+f9Eyej/EM3y/xje+v8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/J975/z/j+f9I5Pr/R+T6/0fk+v9F5Pr/ - ROT6/0Lj+v9B4/r/P+P6/y7f+f8b2/n/Gt36/zXX9v8s2vj/Ftz5/xfb+f8X2/n/GNr5/xfa+f8W2vn/ - Ftr4/xbZ+P8W1/j/Fdb3/xXU9/8W0fb/Fs71/xbK8/8VxvH/FsPv/xbC7v8Wwu//FsXw/xXK8v4b0/b/ - Bsvz+aXa8CIAAAAAgID/AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAKqq/wMAAAAAbMLmUwW+7f8atef8F6bg/xWe2/8Vnt3/E6Lh/xOo5f8Sr+n/Errt/xPE8f8YxO7/ - Ia3d/yvD5/8/5Pb/Idv3/xfY+P8Y2vj/GNr4/xja+P8Y2vn/GNr5/xfa+f8X2vn/F9r4/xfa+P8X2vj/ - F9r4/xja+f8Y2vj/GNr5/xja+f8Y2vj/GNr4/xja+P8Y2vj/GNr4/xja+P8Y2vj/GNr4/xja+P8Y2vj/ - GNr4/xna+P8S2Pn/N+T6/0/S7f8Ry/D/GN76/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8c3Pn/M+D5/0nk+f9N5Pn/TOT5/0zk+f9K5Pn/SeT5/0jk+v9E5Pr/L+D5/xjb+f8i3fn/ - Odb1/yHd+v8W2/n/F9v5/xfb+f8X2/n/GNv5/xja+f8X2vn/Ftr4/xba+P8W2Pj/Ftf4/xbW9/8W0/f/ - FtD2/xbN9P8WyvL/Fsjy/xbI8f8WyvL/Fc30/hzW9v8FyPHxo9brGQAAAAAAAP8BAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqr/AwAAAABqweZSBb/t/xq36fwWp+H/ - FZ7c/xSf3v8To+P/Eqrm/xKy6v8Su+3/FMby/xm+6v8nteD/SeHz/yfY9f8T0/b/GNb2/xfW9/8X1/f/ - GNf3/xjY9/8Y2fj/GNr4/xjb+f8Y3Pr/GNz6/xjc+v8Y3Pr/GNz5/xjb+f8Y2fj/GNj3/xjY9/8X1/f/ - F9f3/xfX9/8X1vf/F9b3/xfW9v8X1vb/F9b3/xfX9/8X1/f/GNj3/xTX+P8l3/n/UNjw/xXL8P8Y3Pn/ - GNr5/xja+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8j3fn/QeP5/1Ll+f9S5fn/ - UeX5/1Dl+f9P5fn/T+X5/0jk+f8t3/n/GNz5/y7a9/802Pb/Gd36/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xjb+f8Y2vn/F9r5/xba+P8X2vn/F9j4/xfX+P8W1vf/FtP2/xbR9f8Wz/T/Fs/0/xfP9f8W0vX9 - HNr4/wbC7tWAgIACAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAACqqv8DAAAAAGu/5EwFvu3/Grjq/Ran4f8Vn93/FJ/f/xOl4/8Sq+f/ErPq/xO77f8UxO// - GLbl/znG5v822fL/Esjx/xjN8v8XzvL/F8/z/xfR9P8X0/X/FtX2/xfU9v8Xz/L/GMft/xnA6f8ZvOf/ - Gb3o/xjA6v8XxOz/F8jv/xfQ8/8X0/X/F9L0/xfR9P8X0fT/F9Dz/xfP8/8Xz/P/F8/z/xfP8/8X0PT/ - F9D0/xbR9P8W0vX/FdL1/xrX9/9K2vL/Gczw/xXZ+P8X2Pj/F9n4/xja+P8Y2vn/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xvb+f804fn/Ueb5/1bm+f9V5vn/Veb5/1Tm+f9U5vn/SeT5/yje+f8c3fr/ - N9b1/ync+P8W2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2vn/GNr5/xja+f8Y2vn/ - GNr5/xjY+P8Y2Pj/F9b3/xjV9/8Y1fb/F9X3/xrV9/sc3fr/A7PomgAAAAD///8DAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqq/wMAAAAAa77kQwW97f8Zuev9 - Fafh/xWg3v8UoeD/E6bk/xKs6P8Ss+r/E7jr/xW86/8ZseL/O8rp/yTH7P8Vvur/F8Lr/xfE7f8Xxu7/ - F8nw/xjG7f8aueX/HKrb/x2c0/8els7/HZbO/xuZ0f8an9X/Gaba/xis3v8Ys+L/F8Lr/xfK8P8Xye// - F8jv/xfH7v8Xxu7/F8bu/xfF7v8Xxe7/F8bu/xbG7/8WyO//Fsjw/xbK8f8Wy/L/Fc7z/z/W8v8czPH/ - FNP2/xbU9v8W1vf/Ftf3/xbY+P8X2fj/F9r5/xja+f8X2/n/F9v5/xfb+f8X2/n/GNv5/yrf+f9O5vn/ - Wuf4/1nn+P9Y5/j/WOf4/1fn+f9G5Pn/Id35/ybc+P841/X/Hd36/xba+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2vn/GNr5/xja+f8Y2fj/Gdn4/xbY+P8f2fj/ - Ldz4/RrY+P8Ent1EAAAAAP///wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAqqqqAwAAAABrvOQ5BLvs/xm76/4VqOL/FaHe/xSi4f8Tp+T/Eq3o/xKx6P8Us+f/ - FrLl/xas4P81xef/H7fk/xWx4/8XteT/F7jm/xe45v8brd7/H53S/yCSy/8flMz/HZ7U/xuq3P8ZtOP/ - GLnm/xe86P8Xvej/F73o/xe86P8Xu+f/GLvn/xe86P8XvOj/F7vo/xe65/8Xuuf/F7rn/xe65/8Wuuj/ - Frvp/xW86f8Vvur/FcDr/xbC7f8TxO7/Ms7v/xzI7/8Ty/L/Fc3z/xXQ9f8V0vb/FdT2/xXW9/8W2Pj/ - Ftn4/xfa+f8X2vn/F9v5/xfb+f8X2/n/Jt75/0zl+P9c5/j/XOf4/1vn+P9b5/j/WOf4/z7i+f8e3vr/ - Mtj3/y/a9/8X3Pn/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8Y2/n/GNr5/xja+f8V2vn/Htv5/zbe9/wk3/r/E8DtuQAAAAAAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIACAAAAAGu44SsDt+v8 - Gbvr/xSp4v4Vod//FKPh/xKo5f8SrOf/E67m/xSs4/8WqeD/FaTc/y+64v8dqdz/FqTb/xeo3f8apdr/ - IZnQ/yOOyP8dj8r/HKDV/xqs3v8Xr+H/F67g/xer3f8XqNv/GKfb/xeo2/8XqNz/F6nd/xiq3v8Yq97/ - GKzf/xet4P8XreD/F6zg/xes4P8XrN//Fqzg/xWt4f8VruL/FLDj/xWy5P8UtOX/FLfn/xK56P8nxOz/ - GsLs/xPC7v8Uxe//FMjx/xTL8/8UzvT/FdD2/xXT9v8V1vf/Fdj4/xbZ+P8W2vn/F9r5/xfa+f8j3fn/ - SOX4/13p+P9e6fj/Xun4/17o+P9W5/j/MuH5/yLe+f841vX/It35/xbb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8W2/n/Ftr5/yXc+f843vj+ - MeD5/xTP9fMWm94uAAAAAICAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAICAgAIAAAAAaLPZGwO06fIave3/FKrj/hSi4P8TpOH/E6jl/xKr5v8TquT/ - FKbf/xah2/8Umtb/Ka3c/x2g1/8VmtX/HJjS/yWNx/8gh8T/HZPO/yWt3P8krdz/GZ7U/xeY0f8Xl9D/ - F5nR/xia0/8Ym9T/F53V/xed1f8Xn9b/GKDX/xeg2P8Xodj/F6HZ/xeh2P8Xodn/F6DZ/xah2f8Wotr/ - FaPb/xWk3P8Upd3/FKfe/xSq4P8UrOL/Eq7j/xq25v8Vt+j/Erjp/xK86/8SwO3/EsPv/xLH8f8TyvP/ - E830/xTQ9f8U0/f/FNX3/xXX+P8W2Pj/Ftr5/x7b+f9C5Pj/Xen3/1/p9/9e6ff/Xun3/07l9/8n4Pn/ - Ldr3/zXX9v8Z3fr/F9r5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8Y2/n/FNr5/x/c+f824Pn/Q+H5/j/i+vwa2Pf/EKXhXQAAAAAAVaoDAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAABbpNsO - A7Dm5hq/7f8Uq+T+FKPh/xOk4v8TqOX/E6nl/xSn4v8Vodz/FpzX/xWV0v8hoNb/HZvT/xqQzf8licX/ - H4XE/yeh1P82ueD/J6LU/xmNyf8YjMn/GI7L/xiQzP8Ykc3/F5LO/xeUz/8XltH/F5fS/xiZ0/8XmtT/ - F5rU/xea1P8XmdP/F5jT/xeZ1P8XmdT/FpnV/xab1v8WnNf/FZ3Y/xSf2f8Uodr/FKPd/xSl3/8TqOD/ - Eqri/xKt5P8SsOb/EbPo/xG36v8Ru+z/EL/u/xDC8P8RxvL/Ecrz/xLN9f8S0Pb/E9P3/xTW+P8V2Pj/ - Gdn5/zjh+P9Z6Pb/X+r3/1/q9/9b6ff/PuP3/yLf+v821/X/Kdz4/xbb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xPa+f8t3vn/S+P6/1Dk+v9M5fr8 - Itz5/w+e2nYAAAAAAFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEEquLSGcHv/xOr5f0UpeL/E6Tj/xOo5f8TqOT/ - FKXg/xWe2v8WmNT/F5PQ/xmU0f8ck8//I4jF/yCGxf81stz/Pb3h/x6Qy/8Wg8P/GIfG/xiJx/8Yisj/ - GIzK/xiPzP8Ykc7/F5PP/xeU0f8XldH/F5XR/xeU0P8Xk9D/F5PQ/xeS0P8Xk9D/F5PQ/xeU0f8WltP/ - FpbU/xWX1f8Vmdb/FZrX/xSd2f8Un9v/FKLc/xOj3v8TpuD/Eqji/xKq4/8RreX/EbHn/xC06f8QuOv/ - ELzt/xC/7/8Pw/H/D8fz/xDK9P8Rzvb/EdH3/xPU+P8U1vj/LN34/1Hn9v9d6fb/Xen2/1Dn9v8r4Pj/ - J9z4/zjW9f8d3fr/Ftr5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8T2vn/POH5/2Dm+v9a5fr/UeX6/ifb+P8Pm9h1AAAAAACAvwQAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C - AAAAAAOk4LwZwvD/FKzl/BSl4v8TpuP/E6jl/xOn5P8Uo9//FZzZ/xaV0/8XkdD/FpDP/x2Nyv8ihML/ - ObPb/0C/4f8Yh8b/FoLC/xmHxf8YiMj/GIvK/xeOzP8XkM7/F5HP/xeRz/8Xkc//F5DP/xeQz/8XkM// - F5DO/xeQzv8XkM7/F5DO/xeQz/8XkdD/F5LR/xaU0v8WldP/FZbU/xWY1f8Umdf/FJvY/xSe2v8ToNz/ - E6Ld/xOj3/8SpeD/Eqfi/xGq5P8Rreb/EK/n/xCy6v8Qtuz/D7rt/w+97/8OwfH/DsTz/w/J9P8PzPb/ - D8/3/xDS+P8e2Pj/ROT3/1rp9v9V6Pb/O+L3/x7e+f8y2Pf/L9r3/xfc+v8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/Etr5/0Ti+f9b5fr/NuH6/yjg+vwf3vr/ - EL7rpAAAAAAAgL8EAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wMAAAAAA53boRnD8P8Ur+f7FKfj/xOm5P8TqOX/ - E6fj/xSi3v8Vm9f/FpXT/xeS0P8XktD/HYjH/zCdz/9FxuT/GY3L/xeHx/8ZjMr/GI3M/xePzf8Xj87/ - F4/O/xePzv8Xj83/F4/N/xeOzf8Xj83/F47N/xePzf8Xjs3/F47N/xePzf8Xj83/F4/O/xeQz/8XkdD/ - FpPS/xaV0/8VldT/FZfV/xSZ1v8Um9n/FJ3a/xOf2/8Todz/EqPe/xKk4P8RpuH/EKjk/xCr5f8Qref/ - D6/o/w+y6/8PtOz/D7nu/w688P8OvvL/DsLz/w7G9f8Oyvb/Ds33/xLS+P8s3Pf/ROT2/zvi9/8g3Pj/ - INz5/zjV9f8h3fn/Ftv5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - GNv5/xLa+f9A4fn/SOP6/xjc+f8T2Pj/FcXx/BW36v8Vu+pWAAAAAACAvwQAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ////BAAAAAAEldiCGcTw/xOx6PsTqOT/E6fk/xOo5f8Tp+P/FKLf/xWc2P8XktH/GYXH/xp5vf8ce77/ - PbXb/zCt2v8TiMr/GZDO/xiOzf8Yjs3/GI7N/xiOzf8Yjs3/GI7N/xiOzf8Yj87/GJDP/xiQz/8YkM7/ - GJDO/xiQzv8YkM7/GI7N/xePzv8Xj87/F5DP/xaS0f8Wk9L/FpXT/xWW1P8VmNb/FJrX/xSb2f8Untr/ - E5/b/xOh3f8So9//EqTg/xGm4f8QqOT/EKrl/w+s5v8Prun/D7Hq/w6z7P8Ote7/Dbjv/w278f8NvvP/ - DcH0/w3F9v8Nyff/Dcz4/xPS+f8d1/j/Gdj5/xLY+v8r1/j/M9f2/xfc+v8W2vn/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8S2vn/NuD6/zzh+f8R2vn/Gtb3/x/D7/8brOX7 - GKjk/xbW9nUAAAAAAL+/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8EAAAAAAON02IZw/D/FLLp/BOq5f8Tp+T/ - E6jl/xOo5P8UoN3/F4vL/xl4vf8acLf/Gna7/xmBw/86tNz/J6DU/xWKy/8Zj83/GI7N/xiOzf8Yjs3/ - GI7N/xiOzf8Yj87/GIzM/xmFxv8ZfsD/Gnm7/xp4u/8aeLz/Gnm9/xl/wf8Yjcz/F4/O/xeQz/8XkdD/ - FpLR/xaU0v8VldT/FZfV/xWZ1v8Umtj/FJzZ/xOe2/8ToNz/E6Le/xKj3/8RpeH/Eabi/xCp5P8QquX/ - D6zn/w+t6f8OsOr/DrLr/w207f8Nt+//Dbrx/wy88/8MvvT/DMH1/wzF9/8MyPj/DMv5/wzO+f8M0fn/ - FNb7/zPT9v8j2Pn/Etn5/xXa+f8W2vn/Ftv5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/ - E9r5/yre+f834Pr/E9r5/yHZ9/8ky/L/H8Dt/xrE7/gWzvT/FLzriQAAAAAAgL8EAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAP///wMAAAAABIPNQhjB7/8Tter9E6vm/xOn5f8SqOb/FKHf/xiHyf8Zdrz/GHu//xmLyv8Yks// - FYzM/zSv2v8jnNL/FovM/xiOzf8Yjs3/GI7N/xiOzf8Yj87/GIvL/xmAwP8acrT/G2qv/xtssf8bcrb/ - Gni7/xp7vv8Ze7//GX3A/xiJyv8Yjcz/F43N/xeQz/8WktH/FpXT/xWW1P8Vl9X/FJnW/xSb2f8Undr/ - E5/b/xOh3P8Tot//EqTg/xGl4f8Rp+P/EKnk/w+r5v8PrOf/Dq7p/w6w6v8Osuz/DbPu/wy27/8MufD/ - DLvy/wy99P8LwPX/C8H3/wvF+P8LyPn/DMv6/wrN+/8d0vn/MdH2/xTX+/8Q1vr/E9j5/xXa+f8W2vn/ - Ftv5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xXb+f8e3Pn/Md/5/xbb+f8l3vj/KNj1/x7R9P4Y1vf7 - FuD8/xK25rkSgMgOAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AgAAAAAAfMglGLzs+RW46/8SrOb+ - E6jl/xOl4/8XjM3/GHvA/xiIyv8dm9b/GZXR/xiQzv8Vi8z/LajX/yGZ0v8Wi8z/GI7N/xiOzf8Yjs3/ - GI7N/xmExf8ac7T/G2uu/xpytf8Zfr//GYbG/xiIyP8YiMf/GIfH/xiHx/8YiMj/GIjI/xiJyf8XjMv/ - F47O/xaR0P8WlNP/FZbU/xWY1v8Umtf/FJvZ/xSe2v8Tn9v/E6Hd/xKj3/8SpOD/Eabh/xCo5P8QquX/ - D6vm/w+t6P8Orun/DrHr/w2y7f8NtO7/DLbv/wy58f8MuvP/DLz0/wu+9f8KwPf/CsL4/wrG+f8KyPr/ - C8z8/yjO+P8i0fn/C9L6/w/U+v8R1vr/E9j5/xXZ+f8W2vn/Ftv5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - GNv5/yje+f8b2/n/L9/4/yzg9/8d2ff+F9z5+xXc+v8Sq+GgAGaZBQAAAAAAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAD///8BAAAAAABqvwwYtunjFbvt/xKr5v0Tqeb/FZrZ/xiBxf8Yi83/KbDg/xyc1v8Wj8// - GJDO/xaMzP8kndP/IJjR/xaMzP8Yjs3/GI7N/xiOzf8Zf7//G26w/xpxs/8ZgMH/GIjI/xiGxv8Yg8P/ - GYHC/xmCwv8Zg8P/GYPF/xiFxv8Yh8j/GIrK/xeMzP8Xj8//FpPR/xWV1P8Vl9X/FZnW/xSa2P8UnNn/ - E57b/xOg3P8Tot7/EqPf/xGl4f8Rp+L/EKjk/xCq5f8PrOf/D63p/w6v6v8Osev/DbLt/w217v8Mt/D/ - DLny/wu68/8Lu/T/Cr72/wrA+P8Kwfn/CsT6/wnH+v8SzPz/K8z3/xHO+/8Lzfv/DdD6/w7T+v8R1vr/ - E9j5/xXa+f8W2vn/Ftv5/xfb+f8X2/n/F9v5/xbb+f8e3Pn/G9z5/zfe+P874fj/G9v4/Rbd+vwU1/j/ - Ep/bfwAAAAAAVaoDAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABaw5McVve7/ - Eq3n/BOo5P8XktH/FYTI/yiv4P8nsOD/E5LS/xiS0P8Xj87/F47O/xyV0P8dldD/F43M/xiOzf8Yj87/ - GYDA/xtvsP8aerv/GIjH/xmGxv8ZgMH/GX+//xiAwf8ZgsL/GYLD/xmExP8YhcX/GIjI/xiKyv8Xjs3/ - F5DQ/xaT0f8WldP/FZbU/xWZ1f8Umtf/FJvZ/xSd2v8Tn9v/E6Hc/xOi3/8SpOD/EaXh/xGn4/8QqeT/ - D6vm/w+s6P8Orun/DrDq/w6y7P8Ns+7/DLbv/wy48P8MuvL/C7r0/wu89f8Kvvf/CsD4/wrB+f8JxPr/ - CMf8/x7L+v8hy/j/Ccr8/wvL+/8Mzfv/DdD6/w7U+v8R1vr/E9n5/xXa+f8W2/n/F9v5/xfb+f8X2/n/ - GNv5/xPb+f823vn/SeD4/x3b+PwW3vv/FM/1+hKX1WIAAAAAAIC/BAAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAFWqqgMAAAAAF6bgpBW/7v8Tr+j7E6fj/xeNzf8XkdH/MsDo/xqi3P8VltT/ - F5PR/xeQzv8Zhcb/Gnu//xmMy/8Yjs3/GI/O/xmIx/8bc7P/GYTC/xiOy/8ZgcH/GX69/xl+v/8ZgMD/ - GIHB/xmExP8Yh8b/GInJ/xiMy/8Xjs3/F5DP/xeR0P8Wk9H/FpXS/xaW1P8VmNX/FJnX/xSc2P8Untr/ - FJ/b/xOg3P8Tot3/EqPf/xKk4P8RpuL/EKjk/xCq5f8Pq+b/D63o/w6u6f8Osev/DbLt/w207v8Mt+// - DLnx/wy68/8Lu/T/Cr31/wq/9/8KwPj/CcH5/wjC+v8MyPz/J8r3/xLK/P8JyPz/Csn7/wvL+/8Mzfv/ - DdH6/w/V+v8S1/r/FNn5/xba+f8X2/n/F9v5/xjb+f8T2/n/K9z5/1bg+P8i2vj7FN/7/xTG7ucVitE9 - AAAAAACAvwQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIC/BAAAAAAXndl6 - FcDv/xOx6fsUqOP/FozN/xua1v8xwen/FZ/b/xaY1v8XkdD/GYHE/xlyuP8Zd7z/GIrK/xiOzf8Yj87/ - GX+//xmDwP8Xm9H/GYHA/xl9vf8ZgcD/GYTE/xiHx/8Yisr/GI3M/xiOzf8Yjs3/GI7N/xePzv8XkM// - F5HQ/xaT0f8WldP/FZfV/xWZ1v8Um9f/FJ7Z/xSf2/8Todz/E6Ld/xKj3/8SpN//EaXh/xGn4v8QqOT/ - EKrl/w+s5/8Pren/DrDq/w6x6/8Nsu3/DbXu/wy38P8MufL/C7rz/wu89P8Kvvb/Cr/4/wrB+f8Jwvr/ - B8P7/xfJ+v8kyfj/Ccj9/wnH/P8KyPz/Csn7/wvL+/8Mz/v/DtP6/xHW+v8U2fn/Fdr5/xfb+f8X2/n/ - Ftv5/xnb+f9V3/n+L9z5+hHe+/8UuunPD4fLIgAAAAAAgL8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAABVqqoDAAAAABeS1E0Uvu7/E7Pq/RSq5f8Wj8//G5rV/zHC6v8Vod3/ - FpjW/xiFx/8YeL7/HIvJ/x+Y0v8Xjs3/GI7N/xiPzv8ZgMH/F5rQ/xeWzv8Yg8T/GIrJ/xiMy/8Yjs3/ - GI7N/xiOzf8Yjs3/GI7N/xiOzf8Xj87/F4/O/xeQz/8WktD/FpTS/xaV1P8VmNX/FZrX/xSe2f8Uodz/ - FKLd/xOj3f8TpN7/E6Tg/xKl4f8RpuH/Eajj/xCp5P8Pq+b/D6zo/w6u6f8OsOr/DbLs/w2z7v8Mtu// - DLjw/wy68v8LuvT/C731/wq+9/8KwPj/CcH5/wnC+v8Ixvz/I8n4/xjJ+v8Hxvz/Ccf8/wrH/P8Kyfz/ - C8v7/wzO+/8N0vr/ENb6/xPY+f8V2vn/Ftv5/xjb+f8R2vn/P9z4/D/g+vwO2fn/E6rhnwBxxgkAAAAA - AFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgAIAAAAA - FYrPJRS56vgVt+v/Eq3n/hWU0/8alNL/MsLq/xal3/8WktL/F3/D/x6Qzf8vrdr/G5LP/xeNzf8Yjs3/ - GI/N/xmHx/8XodT/F5fR/xiNzf8Yj87/GI7N/xiOzf8Yjs3/GI7N/xiOzf8Yjs3/GI7N/xePzv8Xj87/ - F5HQ/xaT0f8Wl9T/FpnW/xWc2P8Vntn/FJ/a/xSi3f8Tpd7/E6bf/xKm4f8Sp+H/Eqfh/xGo4/8QqeT/ - EKrl/w+r5v8Prej/Dq/p/w6x6/8Nsu3/DbTu/wy37/8MufH/DLrz/wu79P8KvfX/Cr/3/wrA+P8Jwvn/ - CMP6/xDI+/8myff/DMj8/wjF/P8Jx/z/Csf8/wrJ/P8Ly/v/DM77/w3S+v8Q1vr/E9j5/xXa+f8X2/n/ - FNr5/SHb+ftD4vv/Ec7z+BOZ12wAAAAAAICAAgCAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAgKoGE7Hl2BW77P8Srej9FZva/xeMzf8xv+j/ - G6nh/xaMzf8Xh8j/M7Ld/yKd0/8Visz/GY/N/xiOzf8Yj87/GIXG/xef0v8XmNH/GIzM/xiOzf8Yjs3/ - GI7N/xiOzf8Yjs3/GI7N/xiPzv8YkM7/F5HP/xeR0P8XkdD/Fo/O/xeLy/8Yhcf/GILE/xiDxP8Xh8f/ - FZrW/xOo4P8TqeH/Eqrj/xKq4/8RqeP/Eank/xCq5f8Pq+X/D6zn/w+t6f8OsOr/DrHr/w2z7f8Nte// - DLjw/wy58v8LuvP/C7z0/wq+9v8Kv/j/CsH5/wnC+f8HxPv/HMn5/x/J+f8Hx/3/Ccb8/wnH/P8KyPz/ - Csn7/wvL+/8Mz/v/DtP6/xHW+v8U2fn/FNn5/hbb+fwU3/v+I9r5/xu458kQiM4vAAAAAACAvwQAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AFWqAwAAAAATpt6rFb7u/xKv6PwVpOD/FIjM/y224/8iseP/E4nM/x6V0P8zst3/Fo7N/xiOzf8Yjs3/ - GIzM/xp3vP8abrX/GJDM/xee0/8Yjs3/GI/O/xiPzv8YkM7/GJDP/xiPzf8YjMv/GInI/xmDxP8Zfb// - Gna5/xtvtf8bbbP/GnO3/xmAv/8Xj8r/FpbR/xWa1v8Uo93/E6nh/xOs4/8SruX/Eq7l/xKt5f8RrOb/ - EKzm/w+s5v8PrOj/Dq7p/w6w6v8Nsuz/DbPu/wy27/8MuPD/DLry/wu69P8LvfX/Cr73/wrA+P8Jwfn/ - CcL6/wrH/P8myfj/E8n7/wfG/P8Jx/z/Csf8/wrI/P8Lyvv/DM37/w3Q+v8P1fr/Etf6/xTY+fwV3fr9 - Fdr5/xO76tcSl9ViAGaZBQAAAAAAVaoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQL8EAAAAABSZ13MUwO7/E7Hp+xSq5f8Ui87/ - Jabb/yq65/8Sic3/IZnS/y+v3P8Vjc7/GI/O/xiOzf8aeL3/G2iw/xl+wP8Yjc3/F5PP/xiPy/8YiMj/ - GYjI/xmExP8afL7/Gna4/xpws/8ba6//G2mu/xtssf8ad7j/GIjD/xed0P8Vqtn/FKvc/xSh2f8VmtX/ - FZrW/xSd1/8Uotr/E6rh/xKx5v8Ssuf/EbHn/xGv5/8Qruf/EK3n/w+t6P8Or+r/DrHr/w2y7f8NtO7/ - DLfv/wy58f8MuvP/C7v0/wq99f8Kv/f/CsD4/wnC+f8Hw/r/E8j7/yXJ9/8KyP3/Ccb8/wrH/P8KyPz/ - C8r7/wvM+/8Mz/v/DdP6/xDV+v8T1/n7FN77/xLH8O0TmNdtAICqBgAAAAAAgIACAICAAgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABVqgMAAAAAEYrPOxS97f8Uter+E63o/xSW1v8clNH/L8Dp/xWQ0P8clND/L7Dd/xaPz/8Xkc// - GYPF/xtss/8Ze77/GIzL/xiPzv8ZhcX/G3W1/xtwsf8bdbb/Gna2/xp1tv8aerr/GYG//xmLxf8Yl83/ - F6PU/xar2v8Vq9z/FaPZ/xaX0/8Wjs7/FovL/xaNzP8Wjsz/FpDN/xaTzv8VnNX/E63i/xK16f8RtOn/ - EbLo/xCw6P8Pruj/Dq7p/w6w6v8Osev/DbPt/w217/8MuPD/DLny/wu68/8LvPT/Cr72/wq/+P8Kwfn/ - CcL5/wfF+/8fyfn/Hcn5/wfH/f8Kx/z/Csj8/wvK+/8Ly/v/DM77/w3S+v8Q1fr/Etb5+xPc+/8StejE - EIDHIAAAAAAAgIACAIC/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAASgMgOE7Pm5BW67P8Srej9 - FKPg/xWKzP8tuuX/HJ7Y/xaMzf8usN7/GpXR/xeOzv8ad7z/Gne7/xiNyf8Yjs3/GIrJ/xt0tf8bbq// - GoO//xmWzP8Yms//F53S/xeg1P8XodX/F6LV/xee1P8XmdP/FpPR/xeOz/8WjM3/FozM/xeMy/8Wjcv/ - Fo3L/xeNy/8Xj8z/F5DM/xeUzv8Uptv/Erfp/xG46/8Qter/ELLp/w+w6f8OsOn/DrHq/w2y7f8Ns+7/ - DLbv/wy48f8MuvL/C7r0/wu99f8Kvvf/CsD4/wnB+f8Jwvr/C8f7/ybI9/8Syfv/CMf8/wrI/P8Lyvv/ - C8v7/wzO+/8N0vr/D9T6/xHW+vsS2vr/EarhogBmmQUAAAAAAIC/BAAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAICAAgAAAAATpd+vFb7u/xKt5/wUqub/FI3Q/yWn2/8kseL/EojL/yeo2v8gntX/ - FojJ/xpzuf8ZjMj/GJXO/xiNzf8Zfb3/G2+w/xmEwf8XmM//GJTP/xeSzv8Yks7/GJDO/xiOzf8Xjs3/ - F47O/xePz/8XkM//F4/O/xaOzf8Wjsz/Fo7M/xaPzf8Wj83/FpDN/xeSzf8Xk83/F5TN/xWh1/8SuOj/ - Ebzt/xC36v8Qs+r/D7Hq/w+x6v8Osev/DbLt/w207v8Mt+//DLny/wy68/8Lu/T/Cr31/wq/9/8KwPj/ - CcL5/wfD+v8TyPv/Jcn4/wvJ/P8KyPz/Csn7/wvL+/8Mzvv/DdL6/w/U+v8R1vr7E9r6/xOo4JYAAAAA - AICAAgBVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgL8EAAAAABKX1nEUv+7/ - E7Hn+xOr5/8Um9r/G5PQ/ym65/8UktL/G5jT/yOk2f8XgsX/GXe9/xie0f8YlM//GInJ/xt0s/8afLv/ - GJPN/xiPzf8Yjc3/GI3N/xiNzf8Yjc3/F4/O/xeQz/8Xkc//F5HP/xaRz/8Xkc//FpHP/xaSz/8Wks// - F5PP/xeUz/8Wlc//FpbP/xaXz/8Xls//FaPY/xK66f8Rvu3/ELjr/xC06v8Pser/D7Hq/w6y7P8Ns+3/ - DbXv/wy48P8MuvL/C7rz/wu89P8Kvvb/Cr/4/wrB+f8Jwvn/B8T7/xzJ+f8fyvn/CMj9/wvJ+/8Ly/v/ - DM37/w3R+v8P1fr/Edb6/BPc/P8SseSqAAAAAABVqgMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACAgAIAAAAAFojOLxO46/0Vter/Eqvm/hSm4/8VjM7/Ja/h/xqm3v8Uk9P/ - HJzW/xqBxP8ZgcP/GKfW/xiPzv8ZhMP/G3Oz/xiJxv8YkM3/GI7N/xiOzf8Yjs3/F4/N/xePzv8XkM// - F5LP/xeT0P8WlNH/FpXS/xaX0v8WmNP/FpnT/xaa0/8WmtP/FprT/xaa0v8WmtL/FpnQ/xea0f8Vq93/ - Er7t/xC+7f8QuOv/D7Tr/w+y6/8Psev/DbLs/w2z7v8Mtu//DLnx/wy68v8Lu/T/C731/wq+9/8KwPj/ - CcH5/wnC+v8Jxvz/JMn4/xXK+/8IyPz/C8r7/wzM+/8N0Pv/DtT6/xDW+v0U2/v/EsLt2RCAvxAAAAAA - AICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAB - E6zizRW77f8Sq+b9FKrm/xWW1/8dnNb/HrDk/xOc2f8Wl9T/GX/D/xiNyv8Xqdj/GIzN/xl/vv8adrf/ - GIzJ/xiOzP8Yjs3/GI7N/xePzf8Xj87/F5DP/xeT0P8XltL/FpjU/xac1v8Vn9j/FaPa/xWm3P8Vqt7/ - Fazf/xas3/8WrN7/Fajc/xaj2P8WnNP9FqHV/xS25f8Swu7/EL3t/xC47P8PtOv/D7Lr/w6y6/8Nsu3/ - DbTu/wy37/8MufL/C7rz/wu79P8Kvfb/Cr/3/wrB+f8Jwvn/CMP6/w7I/P8nyff/Dsr8/wnI/P8Ly/v/ - DM77/w7S+v8Q1fr/Etn6/hTU9/8Rx/JNAAAAAAC/vwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIC/BAAAAAAUmteBFb3t/xOu5/sTqeX/FKPh/xeR0v8ereH/ - FaHc/xaZ1v8ZgMT/GJfP/xeo2P8Yi8z/Gny7/xp7uv8Yjcr/GI7N/xiOzf8Xj83/F4/O/xeQz/8Xk9D/ - F5jT/xec1v8Xotr/Fqje/xav4v8VteX/Fbro/xa+6v8Vwuz/FsTu/xbF7v8Vw+3+Fb3p/BWy4f4UruH9 - E8Dt/xHB7v8Qu+z/ELbs/w+z6/8Psuv/DrLs/w2z7f8Mte//DLjw/wy68v8LuvP/C7z1/wq+9v8Kv/j/ - CcH5/wnC+f8HxPv/Fcn7/yTJ+P8Kyf3/Csn7/wzM+/8N0Pv/D9T6/xHX+vwU2fn/E8/0vgAAAAAAgIAC - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAC - AAAAABWHyzETt+r9FbTp/xOp5P4UqOX/FZfX/xmg2/8Yp+D/FpvX/xiEx/8Xm9H/F6fY/xiKzP8ae7v/ - GX29/xiNy/8Yjs3/GI7N/xePzv8XkM//F5PQ/xeY0/8Xntf/F6Xc/xat4P8WteX/Fr3p/xbD7f8Wx+// - Fsrx/xbN8v8WzvP/Fc70/BXT9v0UzfT/E53XrBK05uASxPD/D77t/hC46/8PtOv/D7Lr/w+y6/8Nsuz/ - DbTu/wy27/8MufH/DLrz/wu79P8LvfX/Cr73/wrA+P8Jwfn/CcP6/wfF/P8cyfn/H8r5/wjJ/P8Lyvv/ - DM37/w3R+v8Q1fr/Etj6/BTW9/8S0/ViAAAAAACqqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSn4cIVuuz/E6rl/BSo5f8VoeD/ - FpjW/xWl3/8Wn9n/GIjK/xed0/8Xp9j/F4vM/xp8u/8Zfr3/GI3M/xiOzf8Xj83/F5DO/xeS0P8XltL/ - F53X/xel2/8XruH/Frjm/xbA6/8Wxu//Fsvx/xbP8/8V0fT+FtH1+xbW9v0V1vf/EsTv+RSS0mcVjMtJ - EcTx/xC/7v4Quuz/ELXr/w+y6v8Psuv/DrLr/w2y7f8NtO7/DLfv/wy58f8LuvP/C7v0/wq+9v8Kv/f/ - CsH5/wrD+f8Jxfr/CMj9/yLK+P8ayvr/CMn8/wvL+/8Mzvv/DtP6/xDW+v4U2fn/E9X3/RPT8ykAAAAA - AICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABVqgMAAAAAFJLVZxW77P8Urub8FKjj/xSn5P8VnNr/FaHc/xWj3f8Xj8//F5zT/xen2P8XjM7/ - GYC//xp/vv8Xjsz/F4/O/xePzv8Xkc//F5XR/xeb1f8Xo9r/F63g/xe45v8Xwuz/Fsnw/xfP8/8W0vX/ - FdP2+xXY9/4V2fj/E8jx/BKn4KoPg8khAHHGCRO46dsRwu//ELnr/RC16v8Qsur/D7Hq/w+x6/8Osuz/ - DbPt/wy17/8MuPD/DLry/wy78/8LvvX/Cr/2/wrA+P8Kwvn/CsX6/wrH+/8Kyf3/Jcv3/xbM+v8Jyvv/ - DM37/w3Q+/8O1Pr/ENb6/hTa+f8U1fbnEczuDwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAVgMoYE7Dm6RW26f8UquT+ - FKjk/xSk4f8VoNz/FaTe/xaY1f8XmtP/F6XX/xeOzv8YhMP/GYC//xePzv8Xj87/F5DO/xeT0P8XmdP/ - F6DX/xeq3v8XteX/F8Dr/xfJ8P8Xz/T/FdT2/RXY9/wV2vn/Esry+xKp4K4Th881AAAAAAAAAAASq+Ku - EsLv/xC36/wQter/ELLp/w+x6f8Pser/DrHq/w207P8Nte7/Dbjv/w268f8Mu/P/DL30/wu/9f8LwPf/ - C8P4/wvG+f8LyPr/C8j6/w3M/P8pzPf/Fs76/wrM+/8Nz/v/DdL6/xDV+v8S1/r9Fdr5/xTV99gAgIAC - AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAFWqAwAAAAAUmdeOFbzs/xWt5vwUquT/FKrk/xWn4f8Vp9//F5/Z/xeX0v8WntT/ - F47O/xiJyP8ZgsH/F47N/xePzv8XkM7/F5TR/xec1f8Xpdv/F7Di/xe96f8Xx+//F8/z/xXU9v0V2vj+ - EtD0/hOn36USiNArAAAAAAAAAAAAgIACE6jgpBLA7v8Qtur7EbPp/xCx6P8PsOj/D7Dq/w+x6v8Psuv/ - DrTu/wy17/8LuPD/Crvz/wq+9P8KwfX/CsT3/wrG+P8JyPn/Ccn6/wnK+v8Jyvv/C8z8/yrM9/8Yz/r/ - Cs76/w7S+v8P1fr/Etf6/xPZ+f0W2vn/Fdb20QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAAAAABSDyycUtef0 - F7nq/xSv5v4VruX/Fa/l/xWr4f8Wn9j/F5PQ/xeSz/8Xj83/F43M/xiIx/8Xjs3/F47N/xeOzf8Xkc// - F5zV/xep3v8XtuX/F8Ps/xfL8f8W0fX8Ftr5/xPC7eUSjNNFAAAAAACAgAIAAAAAAIC/BBOn36USvu3/ - EbTo+xGx6P8RsOf/D67n/w+v6P8PsOr/D7Hr/wyy7f8MuO//EcLx/xjI8/8cyfT/IMj0/yHH9P8gyfb/ - IMz3/yDP+P8f0vn/HdX6/xzX+/8b2/z/NNr4/yzb+v8R2/z/ENj7/xDV+v8S1vn/FNn5/Rba+f8X1vfT - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABOd2ZQWw+//Frnq+xa46f8Wt+j/FrDj/xad1/8XkM7/ - F43N/xeOzf8Xjs3/F43M/xeOzf8Xjs3/F47N/xePzf8Xl9P/F6re/xe75/8Xxu7/Fs7z/RfZ+P8Tv+va - EIDHIAAAAAAAgL8IAAAAAAyAxRYTrOO/Ervr/xGy5vsRr+b/Ea7m/xCt5v8Qref/D6/p/w6v6v8OtOz/ - GcLw/yXB8P8orO3/JZPr/yGC6v8eeuv/HXbr/x126/8deOv/Hnvs/x9+7P8gguz/IYbs/yKP7P8wnu7/ - O7Lv/y7B9P8o0Pb/Jd/5/x/j+v8X3/r9Ftr5/xLV994A29sHAAAAAAAA/wEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgAIAAAAA - EIDHIBK26OsXyPH/FcHt/RbB7f8WvOr/F63g/xad1/8WltL/F5PQ/xeSz/8Xkc//F5DO/xePzf8Xjs3/ - F47N/xeSz/8Wpdv/F7zo/xbH7/4X0vX/E8Tv7BOGzCgAAAAAAIC/CAAAAAAWjc4vE7Lk2xK56v8Rr+X7 - Eq3l/xGs5f8QrOX/EKzm/xCu6P8Nrun/Fbvt/yrA7v8qnOr/Hnbp/xZo7P8UaO//FGvx/xRt8f8UbvH/ - FG7x/xRt8f8UbfH/FGzx/xRr8P8UavD/FGjv/xVo7/8Zbe7/GGvs/xtz6/8ih+z/Kafv/yzL9f4o4/r/ - G+H688T19RoAAAAAqqr/AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAFY/TYhTI8f8WzPP8Fcnx/hfI8P8Xxe3/ - F7zp/xe15f8XseL/Fq3g/xSo3f8Vo9r/F53W/xeV0f8Xj87/F4/O/xaf1/8Xuuf/Fsrw/RXL8v8SmdhV - AAAAAABttgcAAAAAFZnXXxO35/UStuf/Eazk/BKr5P8RqeP/Eark/xGq5f8QrOf/Dq7p/x6/7f8tq+r/ - IHfo/xRn7f8UbfH/FnLy/xZy8f8WcfH/FnDx/xZw8P8WcPH/FnHx/xZx8f8WcvL/FnLy/xZz8v8Wc/L/ - FnLy/xZv8f8WbPD/Fmfu/xVh6/8WXOn/GmPn/yOA6f0hrO//w+z5UQAAAACqqv8DgID/AgAA/wEAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACAgAIAAAAAEpjYixXR9f8X0/b7FtD0/hfQ8/8XzvP/F83y/xfL8f8ayvD/Isru/xvB6v8WteT/ - Fqjd/xaY0/8Xj87/FprU/xa25vwWxu//EsHsrAAAAAAAgIACAICqBhWk3ZQUvOr/EbHl/RGr4/0SquP/ - Eqji/xKo4/8QqeT/EKrm/w6s5/8jv+z/LZzo/xdo6v8UbPH/FnLy/xZw8f8Wb/D/Fm/w/xZx8f8WcvP/ - FXLz/xZx8v8Wb/D/F27v/xds7v8Xae3/GGXr/xhh6f8ZXOb/Gljj/xtU4v8bU+H/G1Ph/xtU4f8aU+L/ - GE7h/hZP4f8nZuLtgKfsk+Ds+SkAAAAAAAD/AYCA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAFJ/bmhXU9v8X2fj8 - F9T2/RfV9v8Y1fb/FNP1/yXY9f9d6/X/YOz1/y7O7v8Ut+b/F6jc/xeU0f8VmNP+FrXl/xTA7PcRxu4t - AAAAABCExR8VsuTDFLzq/xKw5PsSq+L+Eqjh/xKn4f8Sp+L/Eafj/xCq5P8Oqub/Ibzr/yyY6P8VZez/ - FXHy/xZx8f8Wb/D/FnDw/xVz9P8Vc/T/Fm7w/xlk5/8bWuD/G1ff/xtV3/8cUt3/HU/b/x1N2/8dS9r/ - HUra/x1K2v8dS9v/HE3d/xxO3f8cT97/HE/f/xtQ3/8bUeD/G1Th/xVQ4v4IS+D/IV/i836k7JTn7/cg - AAAAAKqq/wMAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAQCAgAIAAAAAFJbVgRTO9P8X3vr+F9n3/BfY+P4Y2ff/F9f3/x7X9v8o1/T/ - Hczw/xbC7P8Xt+b/FqTb/xWj2fsWuOb/E7DjkgAAAAAViMw8FLrp5BS66f8Sr+P7E6vh/xOn4P8SpuH/ - Eqbh/xGm4f8RqOP/Dqjk/xq36f8vo+j/Fmbr/xVx8v8WcfH/Fm7w/xZx8/8VcvP/G2Lh/yJOyP8mQ7v/ - KT21/yk7tP8nPbn/JETD/yBN0v8eVdz/IV3g/yJi4/8hXuH/IFnf/x9W3v8fVd7/H1Td/x9W3v8gWN// - IF7i/yFj5v8gZef/HWTo/h9j6fwYWuf+CEvh/yVi4uyiv/Fr////AgAA/wEAAP8BAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBVqgMAAAAA - EozRVBO86uYW2/r/F936/Rfa+PwX2fj9Fdf3/hPS9f8VzfP/F8jv/xfC7P8Wuef9F7rn/xO66PELhcgX - E4PNKRS55+4Uuej/E67j+xOq4f8TpuD/E6Xg/xKl4P8SpeD/Eabi/xCo5P8Qrub/LLTp/xxw6P8UbvL/ - FnHx/xZv8P8VdvX/GGrp/yRLxP8qO6//LDeq/yw2qv8oP7b/JEjC/yRGwP8oP7j/KD64/yNMy/8iZ+T/ - JnXs/yd06/8lcen/JG3o/yNp5v8iZuX/ImXk/yFl5P8iaOb/JHHq/yZ67f8nfe//Jnrv/yRz7v4la+v8 - GFjl/QdK3/9ol+qp7e3tDgAAAAAAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBVqgMAAAAAFnrIFxOf2pcSyPD5Ft36/xff+/4Z3fn/ - GNn4/RbT9fwWzfL8Fsnw/RbI7/wVwuz/E6feegCAvwgVsePeFbno/xOt4vwTquH/E6bf/xOk3v8SpN// - EqTg/xGl4f8Rp+L/Dqjk/xy46P8oj+b/E2jv/xdz8v8WbfD/FX71/xt25v8oPrT/Kziq/ys4q/8oPrT/ - H1fT/xpw7v8bePT/GHLy/xhn6f8gU9P/JkLA/yZMyf8laOP/J3bt/yh37f8ndu3/J3Ts/yZz6/8lcOr/ - JG3o/yRr5/8jaef/JGvo/yVz7P8nf/D/KIbz/yiH9P8ogfL+J23r+whN4f9Rhue/6+vrDQAAAAAAAP8B - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACAgAIAAAABAAAAABGFzS4SodubEr3r4xPJ8vwV0vb/FdP2/xTP9P4VyPD/E7jn+BOa2IgAAAAA - FKXcrxW76P8TruL7FKrg/xSm3/8To97/E6Pe/xKj3/8SpOD/EaXh/xGo4/8OquX/I7Tn/x526P8UbvL/ - FnHx/xZt8P8Vifn/IVjO/ywwpf8pO7H/Ik/J/xpu6v8bevP/IHjv/yN27v8jdu//HHPy/xZw8/8aZej/ - IVLT/yZOzP8nYdv/J3Lq/yh47/8oeO//KHju/yl47v8oeO7/KHbt/yd07f8mcuz/JW/q/yVu6v8mcu3/ - J3zw/ymH8/8pjPX/LYDy+ghY5/9xn+uaAAAAAICA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgAIAgIACAAAAAAAAAAAUdsQN - EIXKMBOP0lASlNRkEpLUZROO0k8QhMUfAAAAABKT1WEUuun/E7Dj+xSq4P8Upd7/FKPd/xOi3f8Tot7/ - EqPf/xKk4P8RpuL/Eajk/w+t5v8kr+j/G3Dq/xVv8v8WcfH/Fm3w/xaI9v8YgfH/HmPa/xx06P8aevH/ - HWnl/x9c3P8eWNv/Hlnc/x9d3/8hYeP/HGTm/xhp7P8Xau7/G2Hl/yFW1/8mV9X/J2Pf/ydx6v8nd+7/ - KHnv/yl67/8peu//KXrw/yl67/8oeu//KHnv/yh37/8ndO7/J3bv/yh88f8piPT+KYn1/hlw6/vP3fU1 - AAAAAICA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAANjMwU - E7Hj4RW25v8TquH9FKbe/xSj3f8Totz/E6Ld/xOi3v8So9//EaXh/xGn4v8QqOT/D63m/yGw6P8bcer/ - FW/y/xZw8f8Wb/H/Fnfy/xeK9/8Xifn/GHvz/xxd3v8dT9X/HlDW/x5R1/8eU9j/HlXZ/x5W2/8eVtz/ - Hlje/xxc4v8ZZOr/GGjt/xtj5v8gWdz/I1fZ/yVd3f8lZ+X/JnHq/yd27f8neO7/KHju/yh47/8oee// - KHnw/yl58P8oePD/KHbw/yd08P8uf/P5CHPx/4qz8HYAAAAAv7//BAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAQCAgAIAVaoDAIC/BACAvwQAgKoGAAAAABOi3IkVuej/E67i+xSo3/8Uo93/FKHc/xOh3P8Tod3/ - E6Lf/xKk4P8RpeH/Eafj/xCp5P8Oq+b/HLfp/x566P8UbfH/FnHx/xZw8f8WbvH/F2rw/xhm7/8YZO3/ - GWLo/xpe4v8cWd3/HVTZ/x5U2P8eVdn/H1fb/x5W2/8fVdv/HlPc/x5U3f8cWeH/G2Hn/xlm6/8aZOj/ - HF3j/x5X3v8gVt7/IVvh/yNh5f8kaOj/JW3q/yZw6/8mcez/JnHs/yZy7v8nc+//J3bx/hx88v9RmvHC - 2+L4IwAAAACAgP8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAUkNEn - FLTl9RW05f8Tqd/+FKTd/xSh3P8ToNv/E6Hc/xOh3f8So9//EqTg/xGm4v8QqOT/EKrl/w6r5/8TuOv/ - Ip3o/xZl7P8Wc/L/FnDx/xZw8f8XbvH/GGrw/xhn8P8YZ/H/F2nw/xdo7f8ZY+f/G1zg/x5X2/8fVtv/ - H1fc/x9W3P8eVNz/H1Lc/x5R3P8eUt3/Hlbe/x1c4v8cYuf/G2Xp/xtk6f8bYOf/HF3m/xxc5v8dXuf/ - H2Pp/yFo6/8ibOz/JG/t/yNw7/4devD/grHxfAAAAAD///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABSj3JkVuej/E6zh+xSl3f8Uotz/FKDb/xOg2/8Todz/ - E6Le/xKj3/8RpeH/Eafi/xCo5P8QquX/D63o/w6v6v8Yve3/H4fn/xVl7f8Wc/L/FnHx/xZw8f8Wb/H/ - F2zx/xdp8P8YZ/D/GGfw/xdp8P8Xa+//GWXo/xxe4f8fWNz/H1jc/x9W3P8fVd3/HlLc/x9R3P8fUd3/ - H1Ld/yBU3v8gWN//IFzj/x9h5f8eZOf/Hmbo/x1m6f8cZer/HGfr/xxp7P8caez+Gmvu/yJv6/GFo+sZ - AAAAAABVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAATj9Mp - FLPk9hSz5P8Tp9/+FKPc/xSg2/8Un9v/E6Db/xOh3f8Tot//EqTg/xGl4f8RqOP/EKnk/w+r5v8Prej/ - D7Dq/w617P8YwO//Hozo/xdl6/8VbvH/FnLy/xZw8f8WcPH/Fm/x/xds8P8YZvD/GWHv/xpp8P8acvL/ - GGzu/xpj5v8eW9//H1nd/x9Y3v8fVt7/H1Pd/x9R3f8eUNz/HlDc/x9S3f8fU97/IFXf/yBX4P8hWuH/ - IVzj/yFe5P8hX+X/IWDm/yFh5/8iZun9G2fr/1eO7moAAAAAAFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABOi3JcVuej/E6vh+xSk3f8Uodv/FJ/b/xSf2/8ToNz/ - E6Hd/xKj3/8SpOD/Eabi/xCo5P8QquX/D6vm/w+t6P8Pser/D7Ps/w257/8UxvL/Hafs/xt06f8VZ+7/ - FnHy/xZx8f8WcPH/FnDx/xdt8f8ZY+//G1vu/x1m8P8cdfL/GHHx/xln6v8dX+L/IFve/x9a3/8fWN// - H1Xe/x9T3f8eUd3/HlDd/x9Q3f8fUd7/H1Le/x9T3/8fVN//H1Xg/yBW4f8gVuH/IFni/yJg5v0gaev/ - K3Pp38zW9RkAAAAAAAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAOlc0k - FLTl9BWz5P8TqN7+FKLb/xSf2/8Untv/E5/b/xOg3P8Tot7/EqPf/xGl4f8Rp+L/EKnk/xCq5f8PrOf/ - D63p/w6x6v8Os+z/Dbfu/wy68P8PyPT/Gcfz/x+V6/8XZ+r/FW/y/xZy8f8WcPH/FnDx/xds8P8ZX+// - HFTt/x5g7/8ed/L/Gnby/xhs7v8cYub/H17h/yBd3/8gW+D/IFjf/x9W3/8fVN7/H1Le/x9R3v8fUN7/ - H1De/x9R3v8fUd//H1Hf/x9T4P8gVuH/IV3l/ydr7PwOZez/bZ7snQAAAACAgP8CAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABOf2ogVuuj/E6zh+xSl3f8UoNv/FJ/a/xSe2/8Tn9v/ - E6Hd/xOi3/8SpOD/EaXh/xGo4/8QqeT/D6vm/w+s6P8Orun/DrHq/w6z7f8Ntu//Dbvw/w288v8MxPX/ - FNT3/yGx7/8aben/FWvw/xZy8v8WcPH/FnDx/xdr8P8bXO7/HUzs/x9Z7v8fdfL/HXvz/xly8P8aZ+r/ - H2Dj/yBf4f8gXuH/IF3h/yBa4f8gWOD/H1Xg/x9U3/8fU9//H1Lf/x9S3/8fUt//H1Tg/yBY4v8iYef/ - JWvs/h9y8f8Yaun31eHzKwAAAACAgP8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAUdsQN - E7Lk4BW25v8Tp9/9FKLc/xSf2v8Untr/FJ/a/xOg3P8Tod3/EqPf/xKk4P8RpuL/EKjk/xCq5f8Pq+b/ - D63o/w6v6f8Psev/DrPt/w227v8NufD/Db3y/w3A9P8Mw/X/ENP5/yDF9P8ceen/FGnv/xZy8v8WcPH/ - Fm/x/xho8P8cWO7/H0jr/x9S7f8gcfL/H37z/xt48v8abe3/HWTm/yBh4/8hYeL/IWHj/yFf4/8gXeL/ - IFvi/yBZ4f8gWOH/IFfh/yBX4v8gWeP/IV/l/yNn6v8mb+7/Jnbx+wdk7f+Hse+CAAAAAKqq/wMAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABSP00sVu+n/FK7j/RSm3v8Uodr/FJ/a/xSe2v8Tntv/ - E6Dc/xOi3v8So+D/EaXh/xGn4/8QqeT/EKrl/xCs5/8Pren/DLDq/wuy7f8KtO//C7fw/wy58P8Mu/L/ - DL/0/w3D9f8Mxvf/DtP6/yDQ9/8dfOn/FGnw/xZy8v8WcPH/Fm/x/xhm8P8cVO3/IEPr/x9N7P8gbPH/ - H37z/xx+8/8ZdPD/G2nq/x9k5f8hZOP/IWTk/yJk5f8hY+X/IWLl/yJh5f8hYeX/IWHm/yJj6P8kaOr/ - JW7t/yZy7/8ldPH8DWrx/0eH6sYAAAAAAAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAvwQAAAAA - FKDZjhW76f8Tq+H7FKTd/xSg2v8Untr/FJ7a/xOf2/8Tod3/E6Lf/xKk4P8RpeH/Eafj/xCp5f8Qq+b/ - DKvo/w2u6f8asej/IbHm/x+v5f8Xsej/Dbjw/wu99P8MvvT/DMH2/w3I+P8Myvj/D9X6/yPU9/8ee+n/ - FGrw/xZy8v8WcPH/Fm7x/xlj7/8eUOz/IUHq/yBI6/8fZfD/IHzz/x6A9P8be/P/GnHu/xxo6f8gZuf/ - Imbm/yNn5v8jaOf/I2no/yNp6f8jaun/JGzs/yVv7f8lcu7/J3Tw/yJy8f4TbvL/JnPp6+jo8xYAAAAA - AAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAUq9/CFbnn/xOp4PwUo9z/FJ/a/xSe2v8Un9v/ - E5/c/xOh3v8So9//EqTg/xGm4v8QqOT/EKrl/wuq5/8itOf/Sr3k/0q13v8+qdb/NJ/R/yqXzP8kmND/ - F6rj/wu+9f8Lwvf/DMf4/w3N+P8Oz/n/E9v6/yfS9v8bcun/FG3x/xZx8f8WcPH/F23x/xpg7/8eTOz/ - Ij/q/yFD6v8fXe7/IHbz/x+A9P8dgPT/Gnjy/xhu7v8caer/IWnp/yNq6P8ka+n/JWzr/yVt7P8mcO3/ - JXHu/yZz7/8kcvD/G3Dw/hZz8v8cbur43eP4JQAAAACAgP8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA - FYC/DBOw4+MVtub/E6ff/RSi2/8Un9v/FJ7a/xOe2/8ToNz/E6Le/xKj4P8RpeH/Eafj/xGp5P8MqeX/ - Mrzo/2fN6P9Vu93/ZLPR/4S80P+Pw9b/erzX/0CezP8cgr//GZ3X/wvC9v8MyPj/Dcz4/w7S+f8R1Pn/ - GOH7/ynB8v8Xaer/FXDy/xZw8f8WcPH/F2vw/xpd7v8fS+v/Ij/q/yE/6v8gUu3/IG/x/x999P8hgvT/ - JIP0/x158v8Wbu//GGrt/x9r7P8ibez/Im7s/yJv7f8icO7/H3Hw/xtz8f8aefL+GXz0/yFx6e3f6vQY - AAAAAAAA/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAASgMgcFLPl8xW05f8Tp9/+FKLc/xSf2/8Un9v/ - E5/b/xOh3f8Tot//EqTg/xGm4f8SqOP/DKjk/yi36P9z2e3/X7/c/6K9yP/a0s//6N/b//Lp5v/47+v/ - 6e/v/3O52f8Yerr/FqPc/wzM+v8Nzvj/D9T5/xPX+f8T1/n/IOb7/yil7v8UZu3/FnLy/xZw8f8WcPH/ - F2vw/xpd7v8eTOz/IkHq/yI96v8hSOv/H2Hv/yB48/8xi/X/RJj1/0CV9f8qg/P/F3Ty/xRx8f8XcfH/ - GXPx/xp28v8bevP/HH7z/ySF9fkKcPH/T4zpuAAAAAAAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAC - AAAAABaDzCMUteX4FbPl/xOn3/4Uotz/FKDb/xOf2/8ToNz/E6He/xKj3/8SpOD/Eafi/xCo5P8OquX/ - Ydbv/2/R5f+swcn/5NnV/+Dh4f/n6en/7u/v//z9/f///////////2at0v8Qerv/EcDw/w7S+/8R1Pn/ - FNj5/xba+f8V2vn/Kd/4/yB+6v8Ua/H/FnHx/xZw8f8WcPH/F2vw/xpg7/8dUe3/IEXr/yI/6v8iQer/ - IFLt/x9q8P8uhPT/Tp72/2Ks9v9To/X/OZL0/yiI9P8ihPT/IIP0/x6D9P8ghPX9D3by/yN06OrP3/Qw - AAAAAICA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgAIAAAAAD4PJIRSz5PYVtOX/E6jf/hSj3f8UoNv/ - E6Db/xOg3P8Tot7/EqPg/xGl4f8Sp+P/Dafk/yO26P924vP/kMnY/+Xb2P/j5eX/7e3s//Py8v/8/Pz/ - t7e3/6qsrf////7/1+71/x97uP8Sptz/D9f8/xLV+P8U2fn/Ftr5/xXZ+f8f5fv/Kqzv/xRm7f8WcvL/ - FnDx/xZw8f8WcPH/F23x/xll8P8bWu7/Hk7s/yBF6v8hQer/IEjr/x1X7v8fbfH/Non0/1il9f9qs/X/ - abX0/1yu8/83k/P/G3jz/hBx7v9Ok+yu3eb3HgAAAAAAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAQAAAAALesgXEq/i7xW15v8TqeD+FKPd/xSh3P8ToNz/E6Hd/xOi3/8SpOD/Eabh/xKo5P8KpuT/ - M8Ds/3vi8P+21Nz/8evp/+7v7//y8fH//////6amp/8ZGRr/FhYX/4uKjP//////RZDB/w2Uz/8S2Pz/ - F9j4/xna+f8W2vn/F9r5/xnf+v8tyvT/GWvr/xVx8v8WcPH/FnDx/xZw8f8WcPH/Fm/x/xdr8P8ZZe// - G17v/xxR7f8eRev/H0Lq/x1G6v8YUOz/GmDv/yVy8P8te/D/JXfu/xx17P0Siuz/lcnzbAAAAACq//8D - gID/AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAABxxgkSquDeFLjn/xKp4f0Upd7/ - E6Ld/xOh3P8Tod7/EqPf/xKl4P8RpuL/Eank/wqn5P80we3/fuLv/8ng5v/59PL/9fb2//b19f////// - d3d4/yAfIP8rKiv/VVVY//////9TmcX/C5HM/xPZ/P8i2/j/M+H4/x3c+f8X2/n/Ftv5/yne+P8ffer/ - FGzx/xZx8f8WcPH/FnDx/xZw8f8WcPH/FnLy/xZt8f8XYuz/Gm7q/x6C7P8fiO7/IIXu/yF/7f8ef+z/ - G4js/xmZ7f8br/D/Hcr0/hLb+P936vs+AAAAAP/M/wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAABAAAAABKk3cIUu+n/E6zi/BSn3/8To93/E6Ld/xOi3v8So+D/EaXh/xGn4/8RqeT/ - C6jl/ye66/934e//wuPq///6+f/4+vr/+/v7///////k5OX/T09Q/0FBQv/U09T//////zuKvv8QntX/ - E9z8/yjd+P9R5/f/NeH4/xjb+f8V2fn/IuX7/yef7f8TZe7/F3Py/xZw8f8WcPH/FnHx/xZy8v8VZ+// - GXTp/x6t7/8d1ff/G936/xna+f8a1vn/GtT5/xzV+f8a2/n/GeP7/xnj+v8W4Pr+F9b4/wXR9jgAAAAA - gICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAEZ/alxS86v8TsOT7 - E6jg/xOl3v8So97/EqPf/xKk4P8RpuH/Eajj/xCq5f8Pq+b/Ea/p/2HZ8P+g3+n//vv8//v9/f/9/f3/ - /v7+///////+/v7/+vz9//////+83Or/GHm4/xa76P8T3Pz/LN74/1no+P9U5/f/Kt/4/xba+f8Z3/r/ - Ks/1/xlr6f8Vb/L/FnPy/xZy8v8VbfL/FmXr/xuS6/8d1fb/GeT7/xbc+f8W2vn/F9r5/xfb+f8X2vn/ - Fdv5/yLZ+P8h1fX/Ftn5/hfb+f8U1/f8HNbxJQAAAACAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAIC/BAAAAAATlNRfFLvq/xO05vwTq+L/E6fg/xOk3/8SpOD/EqXg/xGm4v8QqeT/ - EKrl/xCs5/8Kq+j/MsLt/3bZ6v/B5O3///////7////+/////P39//z9/f//////7/n6/0aUxP8Vksz/ - FNX4/xTZ+f8x3/n/Wef4/1/p+P9L5vf/I975/xbZ+f8f4/v/JrDv/xdm6P8VZ+3/FmXs/xlz6f8es/D/ - G+P6/xbd+v8X2Pn/F9v5/xfb+f8X2/n/Ftr5/xnc+v822/f/SMfn/0Kw2f8jyOz+Ft77/xbW9usN1/IT - AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAAAAABSDyycTteX4 - FLvp/xKu5P4TqeH/Eqbg/xKl4P8RpuH/Eafj/xCp5P8Pq+b/D6zn/w+u6f8Lr+r/Q8nu/3DP5P+v2+n/ - 8fj6/////////////P7+/8vl7v9OnMj/GYvG/xbH8f8T2fr/Ftn5/zfh+f9X5/n/W+j4/13o+P9C5Pj/ - Htz5/xba+f8d4fr/Jsfz/yKl7f8dr+//HdX2/xjj+/8W2fn/F9r5/xfb+f8X2/n/F9v5/xfa+f8Y3Pr/ - Ot31/3TG1/+iw8v/X6zK/yCt3P0Y3fr/FtX10gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKn38gTwOz/EbHl/RKr4/8SqOL/Eqbh/xGn4v8QqOT/ - EKrl/w+r5v8Prej/Dq7p/w6w6/8Msu3/MsLt/1HB4/9nvNv/fsHb/36+2v9erNH/LpTH/xye1P8Ux/L/ - ENf6/xTX+f8a2/n/POL5/1Ll+f9X5/n/W+f4/1ro+P864/j/Gtz5/xfa+f8l3vj/JOP6/xjk+/8X3fr/ - F9n5/xfb+f8X2/n/F9v5/xfb+f8X2/n/Ftv6/zDf9/+P1eD/8Orp//rs5v+ryNT/FarY+xnc+v8U1fap - AAAAAACqqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAvwQAAAAA - E5TWfBPB7f8St+j7Eq/l/xKr4/8SqOL/Eajj/xCp5P8QquX/D6zn/w+t6f8Or+r/DrHr/w2y7f8JtO7/ - Fbrv/yW77P8otOT/I67g/xyv4/8XvO7/D835/w7U+v8T1fn/FNj5/x/b+f874fn/SuT5/1Hl+f9W5/n/ - XOf4/1bn+P804fj/H935/yfX9v8c2fn/Fdn5/xba+f8X2/n/F9v5/xfb+f8X2/n/GNv5/xba+f8e3vr/ - eNzr//by8v+AgoP/y8fF/7bZ6f8Nr9z7GN37/xTV9HIAAAAAAL+/BAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAWg8wjErXn8RPA7P8RtOf+Eq7l/xGq5P8RqeT/ - EKrl/w+r5v8PrOj/Dq7p/w6w6v8Osuz/DbPu/w227/8LuPD/Cbrz/wq99f8Lwff/CsX5/wvL+v8Nzvn/ - ENP5/xPX+f8V2fn/H9z5/zLg+v8/4/r/SeT6/1Hl+f9W5/n/W+f4/1bn+P9I4/f/Pd/2/yvg+P8l3vj/ - Id74/xzc+f8X2/n/F9v5/xfb+f8Y2/n/Fdz6/z/Z7//n+v7/rqqq/wcJC//Jwr//hcvn/we/6P8Y2vn/ - FNf1MwAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AFWqAwAAAAASlteLE8Pv/xK66vsSsuf/Ea7m/xGs5f8Qq+b/D6zm/w+t6P8Orun/DrHr/w2y7f8NtO7/ - DLbv/wy58f8NuvP/Db30/wy/9f8MxPf/Dcn4/w3O+f8P1Pn/E9j5/xXa+f8Z2/n/JN35/zPg+v8/4/r/ - SeT6/1Dl+f9X5vn/Xej4/2Xo9/9g6fb/Uej2/0Ll9/8v4ff/H934/xjb+f8X2/n/GNv5/xfb+f8Z3Pn/ - heHv/////v8wMzP/V1ZX//H1+f8vrNj9Etf3/xXU9c8AgIACAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA2AzBQRr+PeE8Pv/xC26v0Rsuj/ - EK/n/xCt5/8Prej/D63p/w6v6v8Osev/DbLt/w217v8Mt/D/DLny/wy68/8MvfT/C8D2/wzF+P8Myvj/ - Dc/5/xDV+f8T2Pn/Fdr5/xfb+f8a2/n/JN35/zLg+f8/4vr/SOT5/03l+f9S5vn/VOP3/0Lk+P8x4Pj/ - JN74/xvc+f8Y2/n/F9v5/xfb+f8Y2/n/Ftz6/yjZ9P+76fH////+/4uQkv/r5OH/kcvk/wi85fsZ3fv/ - FdH1egAAAAAAv78EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAVaoDAAAAABSM0VkSvu3/Eb7u/BG36v8Qs+n/ELDo/w+v6f8OsOn/DrDq/w6y7P8Ns+7/ - DLbv/wy48P8MuvL/C7v0/wu+9f8Lwff/DMb4/wzL+f8N0Pn/ENX5/xPY+f8V2vn/F9v5/xfb+f8a2/n/ - Idz5/yne+f8t3/n/K9/5/zHd+P8s2/f/Gtz5/xbb+f8W2/n/Ftv5/xfb+f8X2/n/F9v5/xjb+f8V3Pv/ - ONXw/9bu8////////////8be6/8Xqtj+F937/xXS9vQV1fgkAAAAAACAgAIAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAAAAABKc2p0RxPD/ - EL3s+xC36v8Qs+r/D7Lq/w+x6v8Osuv/DbLt/w207v8Mt+//DLnx/wy68/8Lu/T/C7/1/wvB9/8Lxvj/ - DMv5/w3R+f8Q1vr/E9j5/xXa+f8W2/n/F9v5/xfb+f8Y2/n/GNv5/xfb+f8a3Pn/Jtj3/x/b+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/GNv5/xbd+/81zez/u97q//////+82OX/JqbT/xLT9vsY2/n/ - E8/zlgAAAAAAqqoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEoDIDhGo4c0QxvL/D7vt/BC47P8Ptev/D7Pr/w6z7P8NtO3/ - DbXv/wy48P8MufL/C7rz/wu89P8Lv/b/C8L4/wvH+f8MzPr/DdH5/xDW+v8T2Pn/Fdr5/xbb+f8X2/n/ - F9v5/xfb+f8X2/n/F9v5/yHb+f8o2Pf/Gtz5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/ - Fdz6/yrS8v9SsdX/WqzR/xun1v8S0vX+Gd/7/xPS9eoS0/YdAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA - EYXILg+05+0RxvL/D7zu/Q+67f8Pt+3/Drbu/w217v8Mt+//DLjw/wy68v8LuvT/C731/wq/9/8Lw/j/ - C8f5/wzL+v8N0fr/ENX6/xPY+f8V2vn/Ftv5/xfb+f8X2/n/F9v5/xfb+f8Z3Pn/Jtn3/yPb+P8X2/n/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/Gdv5/yDN7/8Vxez/F9r5/xjd+vsV2fn/ - EanfaAAAAAAAVaoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAFofMRg+46vcQxvL/Drzu/Q+87/8Ouu// - Dbjv/w258P8MuvH/DLrz/wu79P8KvvX/CsD3/wrD+P8Lx/n/DMv6/w3Q+v8P1fr/Etf6/xXa+f8W2/n/ - F9v5/xfb+f8X2/n/F9v5/x7b+f8o2Pf/HNz5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xfb+f8X2/n/Ft36/xjf+/8W2fj7Ft/7/xKz5qsAAAAAAICAAgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABVqgMAAAAAFYvQVg+77fwPx/P+Dr7w/Q698P8NvPD/Dbvx/wy78/8Mu/P/C730/wq/9v8KwPj/ - CsP5/wrH+v8Ly/r/Dc/7/w/U+v8S1/r/Fdn5/xba+f8X2/n/F9v5/xfb+f8Z3Pn/Jdn4/yTa+P8Y3Pn/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2vn/Ftj4+xfg+/8TvevO - EXfMDwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAFYrPVQ+56vcPyvT/ - DsHy/A6/8v8NvvL/DL7z/wy+9P8Lv/X/Cr/3/wrB+P8Kw/n/Csf6/wvL+/8Mzvv/DtP6/xHW+v8U2fn/ - Fdr5/xfb+f8X2/n/F9v5/x7c+f8o2Pb/HNz5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ - F9v5/xjb+f8X2/n/F9r5/xbZ+PoX4Pz/EsDs1hSAzhoAAAAAAICAAgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACAvwQAAAAAE4fORA606OwOzPb/DcTz+w3C8/4NwfT/DMD1/wvA9v8Lwff/ - CsH4/wrE+f8KyPr/C8r7/wzN+/8N0fr/ENX6/xPY+f8V2vn/Ftv5/xfb+f8Z3Pn/Jdj3/yPa+P8Z3Pn/ - F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/GNv5/xfb+f8V2vn/FNr5/xXa+f0W2/n7Ft77/xK46MkUgM4a - AAAAAABVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA - EoLKKxCp4swOyvb/Dcr2/AzF9f0NxPX/DMT3/wvD+P8Lxfn/Csb6/wrI+v8Lyvv/DM37/w3Q+v8P1Pr/ - Etf6/xXZ+f8W2vn/Ftv5/x/b+P8s2ff/LeD5/yDc+f8X2/n/Ftv5/xXb+f8X2/n/Ftv5/xTa+f8T2vn/ - GNv5/yPd+P4q3vf7G+D7/hTX+P8SqeCdAIC/CAAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAAHS5CxOY2ZUOwvH/DtD5/w3K9/wLx/f9 - DMj4/wvI+f8Kyfr/C8n7/wvL+/8Mzfv/DdD6/w7U+v8S1vr/E9n5/xXa+f8j3fn/O9v3/0Lj+f8p3/n/ - Fdr5/xba+f8f3Pn/Jd75/xnb+f8b3Pn/K9/4/z/j9/1P5vb8Ser4/jDk+f8Uw+zlEpLVVAAAAAAAgIAC - AICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACAgAIAgIACAAAAABKJz0UQq+TODcn1/wzR+v4MzPn9C8n5/ArK+v4Ly/v/C8z7/wzO+/8N0Pr/ - DtT6/xHW+v8Z2vn/LN35/0Pd9/9L4/n/POL5/xzc+f8g3fn/N+H5/0bk+f9F5Pn/SOP4/Vjn+Pth6/j9 - U+z5/jbj+f8bx+/tD6Ddhg15yRMAAAAAAFWqAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAVaoDAAAAAACAvwgSkNJl - D7Dm2A3K9/8L0vv+DdL8/w7Q/PwNz/v8DM/6/QzS+v4O1fr+F9j6/yra+P882/f/PuH5/z7i+v9D4vn+ - ReP5/k/k+f1b5vj8Wuf5+1vq+f5Y7Pr/Q+f6/ira9/8Vv+reDpvafQuAyhgAAAAAAICAAgBVqgMAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAICAAgAAAAAAdLkLFI/SWxGn4rcKve7zAMX1/wbP+f8O1vv/ - F9n7/yHZ+v8l1/j9J9n4/Snf+f0v4fr9OOL6/UDl+/9G5/v/Ruj7/0Dn+/824vr/J9b1/xnB7eIQp+Ci - EJDRTgBxxgkAAAAAAAAAAQBVqgMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB - AFWqAwAAAAEAAAAAAAAAACCPzyBgwupgPMDsryzA7Ngdv+3vFMPv/hnQ9f8V1ff/Ftb3/xrW9/8c1Pb/ - GtDz/hjH7vMUvOrYEazhsBGa2XkRiNA8AHS5CwAAAAAAAAAAAAAAAABVqgMAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBVqgMAgIACAAAAAAAAAAAAAAAB - s+bmCqTk7RyF0esyHJHSShCN0V4UkNJlE4/QXRGKz0oUh80zEoDIHACAqgYAAAAAAAAAAAAAAAAAAAAA - AFWqAwBVqgMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAA - IAAAAEAAAAABACAAAAAAAAAAAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAIAAAAJAAAACQAAAAUAAAASABEWLgcpMEoINUBbCDxEYgU3P10HIilKBgYGLgAAABsAAAAZ - AAANFAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAABREREQ8VFRUYFh0dIxIJCRwXGyA4H2RzjCmnwNEwyOf2MdP3/y7W/P4t2v//K9z//yfX9/4jvdno - H32OrRsxNmgYEBA/HBERLgwMEisACAggAAAADwAAAAYAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAEEhISDhQKChkOAAASGlBcbC231eYyzvr/J7vw/h6s5v8WpuP+E6bj/BKo5fwSrOf8 - Fbbs/hjE9v4d1P//Hcru+Bqdts0eWmSAGBgYKhQKChoWFhYXAAAABwAAAAMAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAACJ/lI0zyPT/I6rl/hOa2fwOn9/8DaXl/g2q6P4Nrev/ - Da/s/w2w7P8LsOz+DK7r/Q2t6PwQte3+Esf6/iLW//8ZsM3LFVVlMAAAAAAAAAADAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAnteKYL73v/xSZ2foMoOP9Dqnp/w6u7P8MtvL/ - C7v1/wy48/8LuPT/DLn0/wy58/8MuPL/Dbfw/w207f4Mrun8F7Ho/BvG9f8U1v/4E6XbTwAAAAAAAAAD - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWqqgMAAAAAI7jvcyu15f8Qltj6D6Pk/hyk3v8gp9v/ - G6HY/xmf2f8RreX/C8b2/w3H9/8MxPf/C8L3/wvA9f8LvfT/DLry/w248P8Ut+3/GLLo+xG05/4WzPT7 - F7P0QwAAAABVVaoDAAAAAAAAAAAAAAAAAAAAAAAAAAD///8CAAAAAAiAyyIktuTyFJnb/xGh4v4irt7/ - IdHw/xja+P8X2fj/GNT1/ynE6P8hvOb/Etj5/xXY+f8T1fn/EdL4/w/O9/8OyPb/DMH0/xK98f8Xue7/ - D67p/BW26f8ayO3mAJLbHAAAAAD///8BAAAAAAAAAAAAAAAAAAAAAP///wQAAAAAAJrYdxqs4v8Rmt77 - G7Hj/xzU8/8Vy/H/GMft/xfV9f8W3Pr/FuH8/zbU8P8jyu3/FN36/xfa+P8X2/n/Ftr5/xTY+P8R1Pj/ - Gs/2/xbE8v8Pue7/Eq7o+hrB7v8FtemhAAAAAP///wMAAAAAAAAAAAAAAAAAAAAA////AwAAAAAdr+Kl - FKLf/xKo5fsbwer/HL3m/xrA6P8Yyu//F9X2/xfb+f8V2ff/G976/zPR7/8V1/j/Ftr5/x3c+f8w3/n/ - Kd75/x7c+f8i2vj/F9b3/xLN9P8Svu7+GLjq/wjC7vGJzusaAAAAAAAAAAEAAAAAAAAAAAAAAACqqv8D - AAAAAEvE67EJnd7/Fbjr+yXI6/8Y2fj/Ft77/xjZ+P8X2vj/F9r5/xja+P8V2vn/Ktn1/xvZ9/8W3Pn/ - F9v5/z7h+f9P5fn/Mt/4/x/Z+P8W2/n/F9r4/xbV9/4VyvL+Dsrz/MTr+CcAAAAAgID/AgAAAAAAAAAA - AAAAAKr//wMAAAAAS8Lqqgii4f8Xseb7ILfj/xqx4P8cqdr/Gajb/xi04/8Xu+f/F7nm/xS76f8bxO3/ - GM3y/xbV9/8S2fn/MeD4/2Hp+P803vj/Gdr4/xbb+f8X2/n/FNr4/CLg+v8Wwu7BAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAv///BAAAAABKvumVCKbk/xWe2/sgks3/J5bM/xiOy/8Xk9D/F5TR/xeT0P8WldL/ - FJvX/xOj3v8RruX/ELzt/w3J9P8j2ff/UOf2/yfb+P8W2/n/GNv5/xTa+f0n3fn/NNf05gii4CEAAAAA - ////AgAAAAAAAAAAAAAAAAAAAAC///8EAAAAAEu45XcIqOX/F4vM+yOTzP8dldD/F4jJ/xmCw/8ZgsP/ - GIvL/xaT0f8Umtf/E6Hd/xCn4/8Or+n/DLnw/wvF9v8Z0vj/G9j4/xbb+f8V2vj9Hdr4+Sfe+f8Vteeh - AAAAAKqqqgMAAAAAAAAAAAAAAAAAAAAAAAAAAKr//wMAAAAASrLgUwqh3v8emNL8GI3M/xmNy/8Zf77/ - GX/A/xmGxv8Xjs3/FZfV/xSd2f8So9//D6rm/w2x6/8MufH/Cb/3/xLI+v8Ozvr/Etb4/Bbc+fwp4/z/ - GLnnpwCAvwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgID/AgAAAABKqt0tC6Xg/yGg2P8bjcv+ - GIvK/xiPzP8Yi8v/GIrK/xeNzP8VmNT/E6fg/xGo4v8PrOf/DbTu/wq79P8Mwvn/Esf7/wjH+/0Q2vz/ - HNj3+R6n33cAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8BAAAAAECfvwgIot/f - IaPa/x2Uz/0YgML/GYbE/xmIxf8Yisb/Fo7K/hWMyvwTodn+ELPp/w6v6f8Mt/D/Cb32/xDF+f8Nx/v9 - C9H8/xS86sEPg8khAAAAAABVqgMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8D - AAAAAAid3KYbp+D/GZPP+xiIxf8ZhsX/F5HP/xWU0v0Vndf8FqLX/xWk2f0Quez/DrHr/wy48v8Jvvf/ - EcX6/QzN+/8U0fXRAJnMCgAAAAAAgL8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAP///wMAAAAACY/RVBer5f8Vmdb7GI7J/xiKyf8Wl9P+Fbfm/RbS9f8Vt+e0E7Pl2w616/8Ltu39 - CsH0/wrJ+v8Qzfv7DtP6/wnS9mwAAAAAAKrVBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAA////AQAAAAAAbbYHF7Hl1xaq4P8Vi8r6FYfH/Bep3f8VyfHnE5jVQxOb2YUPs+j/ - ErPq/hSp8f4Uqfb/FrD2/x699/sR0fj/POX5WQAAAACA1dUGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAZldVIFMnx+xzK7v8fsN/+Fare/xSm3VkUmtiY - EK/l/xan5/0bf+//GmXo/xtb4P8bXub/HVvl/RRg4/9bleu+4+P4JQAAAAAAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAASktE4GMPswBjK7/EUp92l - FKnfvhKp4f8Sp9/6GYTw/hph4P8kUcf/IFrX/yFc2/8la+b/Jmnn/hpp6v8cb+v8rcv0XQAAAABVqqoD - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAAgL8E - AAAAABWg2nsUp9//EZ/c+ROs5P8Zfe3/F2rv/xpl5/8dXuH/HVfe/x9d4f8iaOf/KHHs+hpv7/9uoe+A - AAAAAKqqqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AIC/BAAAAAALkNMXFKrg6xOf2v8SpOD+D63n/xKx7v8Yg/D/Fmfw/xpk7f8dZOX/HlXd/x9R3f8fVeD8 - GFnk/36j7lkAAAAAqqqqAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAgL8EAAAAABWa2G8Upt7/E53a+w2m4/8Oq+b/C7Hp/wnI9f8ZmPL/GGDv/x5d7/8ecOz/ - H2jm/yBd4/wYX+j/RovwzQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACAvwQAAAAAFZ/aoBWk3f8Ontz7ILHl/5XN3P+sxdb/KLTk/w3b+v8cjPD/ - GV3u/x5R7f8mavD/Nnzv/B1y8P9bmPO4AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIC/BAAAAAASodqYFqff/wae3vtIweb//v33/8Gqo/9krs// - FuH7/x+59P8VY+//GHDu/xuJ8P0fpPb/Hbjz6L/m8hQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgL8EAAAAABKa12UTruT/DqTh+xay6f+a3vL/ - s9rs/ybC6v9G5vr/N933/xmq8v8Zzfb/Euj7/WjQ3v8YzevNAAAAAP///wEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAADIDFFhKy5ugQreb/ - Cq3q/QOz7v8DvfL/DNf6/zPg+f9Q5fj/Nef4/wvd+v9Z2/L6tba8/wrU9ZMAAAAA////AwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA - FJXVWw+87v8NtO37DLjy/AzI+f4U1/n/Fdv5/yDa+P8b2fj+DNf4+0fZ8/9H1PL3ALnoLAAAAAD///8C - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABVqgMAAAAAEpzZcQ7C8/8Kwvf+C8f6/RDU+fsY2Pf7Gtj4+xPb+f4c4fv/ENv5/xCg3F4AAAAA - gICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAEpTTRQ+57dMCxvj/CNP6/jDk+/425Pv/NNz3+yfE6b0XktE4 - AAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAAIC/BHnU7jtbze1wFKDbfiCg2lkWiswj - AAAAAAAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAoAAAAEAAAACAAAAABACAAAAAAAAAAAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAH - AAAACQcODiURVmaJE4alyhCUud4Omr3fDIKcwghASnwFChAxGgAACgAAAAgAAAAAAAAAAAAAAACAgIAC - AAAAABZBUS8pocrfHrf3/xSz9f0Qtvb+ELj3/hLC/f4Xx/z/HbLX6xlnelwAAAAAAAAAAgAAAAD///8B - AAAAACaMvxQcr+vdGKjn/xeu4PkUsOT7EL3v/AvG9vwLv/L7Cbfu+xK58/4ay///BZrTXQAAAAD///8D - //+/BAAAAAAtqeF3D6He/x3A5/gY1PP+F9v4/SbS8P0Y2Pb9F9r5/RTW+P4Wy/T7Frjq/wO17O97zu8f - AAAAAL+/vwQAAAAAYMLplwmu5f8fy+76Fsvv/RTU9f0b1PX9G9b1/R/e+f1G4/j9INz4/hfW9/kJx/D/ - pOP1SQAAAAC/v78EAAAAAGbH7IkIm9n/I5nP+heRzv0Wl9P9FJ/a/RGy5/0SyvP9ON/3/hvX9/kd4fv/ - FcvxwwAAAAAAAAAAv7+/BAAAAABnwuloC5LS/x6KyPoYgcL+ForJ/BKb2f0Op+T+Crbx/QzG+fwU2/v/ - JNLz5AWMzTMAAAAA////AqqqqgMAAAAAZbnlOgya1/8cicX8F4nH/RaQzP4TpNv+DLHr/Qu79PwNyvz/ - Cbbpqw+HwxEAAAAAgICAAgAAAAAAAAABAAAAAEmS2wcGndzaG4zJ/xea1P8VteTOEbHj4g268f8Owvn/ - Etj75zfI7Q4AAAAAAFWqAwAAAAAAAAAAAAAAAP///wMAAAAABpHSWh275v8YrN/XE6jeohab5/wacuP9 - HW/l/xqB6fW02PlVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEVldUYFaLbnA+o3/8Oie38 - HFfi/R9Z3fwdWuL/Km/q5djY6w0AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAGoDMChGf2t8bp+D/ - K7nn/BCW9P0bW+z9H1nl/iFk6PjY3vgnAAAAAICAgAIAAAAAAAAAAAAAAAAAAAABAAAAABSJzhoEoN3y - W8Ln/7zM0f0iz+/9GoTy+x2R8P8/t/HHgID/AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA - EaPdtBa27f8nx/P4MNv3+iHd+fhG3Oz/TdfqhQAAAAD/v78EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB - AAAAABOExhsMsejRAMf5/xnf+/wi4vv/GsHryBuU1xMAAAAA//8AAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAEAAAAAAICzClDF7FwvtOSCHprXTABttgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAB + AAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAC + AAAAAgAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAEAAAAB + AAAAAQAAAAIAAAACAAAAAgAAAAMAAAADAAAABAAAAAUAAAAFAAAABgAAAAYAAAAHAAAACAAAAAgAAAAI + AAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAIAAAACAAAAAcAAAAHAAAABgAAAAYAAAAF + AAAABQAAAAQAAAADAAAAAwAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAB + AAAAAgAAAAIAAAADAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACRcXFwsVFRUMEhISDhAQEBAODg4S + DBgYFRYWFhcUFBQZExMcGxIbGxwSGhodERoaHhAZGR8QGRkfGBgYIBgYGCAQGRkfEBkZHxEaGh4SEhod + EhISHBQUFBoUFBQZFRUVGBYWFhcXFxcWDQ0aFA4ODhIPDw8RERERDxQUFA0VFRUMAAAaCgAAAAkAAAAH + AAAABgAAAAQAAAADAAAAAgAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAB + AAAAAgAAAAIAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAaChUVFQwUFBQNEBAQEA4ODhINDRoU + FxcXFhQUFBoRGhoeFxcXIRYWFiMWFhYjFg8WIxYPDyMVDg4kFQcHJRQHBycTBgYpEgYGKhgGBisXBgYs + FwYGLRcGBi0XBgYtFwYGLRcGBi0XCwstFgsLLxUQEDEUFBQ0ExgYNRMYHTUUGRkzFRUbMBcXFy0YGBgr + ExMZKRQUFCYWFhYjFxcXIRERGh4TExMbFRUVGA0NGhQPDw8REhISDhUVFQwAAAAJAAAABgAAAAQAAAAD + AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAB + AAAAAQAAAAEAAAACAAAAAgAAAAMAAAAEAAAABAAAAAYAAAAHAAAACAAAGgoVFRUMEhISDhAQEBAODg4S + DAwYFRYWFhcUFBQaEREaHhcXFyEVFRUlExkZKRYWHC4VFRswFhERLhcMDCwXBgYsFAoKMxQUGD8XJCpP + FTU8YRdCUHAWUV1+FlxtjRZmepgWb4SfFneLpRV8j6kXe5CqFXyPqRZ3i6UXb4OeFmV2lRdWZYYWQk10 + FzE2YxYcH1EXCw9DFQgIPRQMDD8XExNDFhoaRhcaGkQYGBhAFRUZPRYWFjoXFxc3FBQZNBUVFTEXFxct + ExMZKRUVFSQYGBggExMTGxcXFxYODg4SEhISDgAAGgoAAAAHAAAABQAAAAMAAAACAAAAAQAAAAEAAAAB + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAABAAAAAQAAAAEAAAACAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAIAAAaChcXFwsUFBQN + EBAQEA4ODhINDRoUFhYWFxQUFBkSEhIcGBgYIBYWFiMUFBQmEhIYKhYWFi8UGRkzFhsbORYWGjsYDg42 + EwoKNRUMED4XKS5YF0xafBZ1iqQWmrXHF7XU4RbI6fMX1ff+Gdz+/xnf//8b4f//G+P//xzk//8c5P// + HOT//xvl//8a5f//GuX//xnm//8Y5f//F+T//xff//8V1PX7FsHg6xamwNEWfJCtFk1YghYhJl0VCwtI + FgsLRhcUF00XGh1PFxcbTBUVGUgWFhpFFxcXQhQUGD8WFho7FxcXNxQUGjIXFxctFBQUJxcXFyISEhId + FhYWFw4ODhISEhIOFxcXCwAAAAgAAAAGAAAABQAAAAQAAAADAAAAAgAAAAIAAAABAAAAAQAAAAEAAAAB + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAADAAAABAAAAAYAAAAH + AAAACRcXFwsUFBQNEBAQEA4ODhINDRoUFhYWFxQUFBkSEhIcEBAZHxcXFyEVFRUkFBQUJxISGCoXFxct + FRUVMBMTGDUWGho7GBgbQRQQFD8WCQk6FhIWRhU6Q24WdYqlF6bD1BjL7fYZ3v//HOP//x/g//8i2/3/ + Jdj4/yjV9f8p1PP+K9Py/S3R8fwu0fH8LtHx/C7S8fws0vH8K9Py/CvT8vwo0/L8JtPy/CTT8/wi1fT9 + INf1/h7a+P8c3v3/GuP//xjn//8X4v//Fcjo8RaYsccWWGWOFhwiWxUHB0oWEBBQGBsbVRYZHFIXFxdO + FxcXTBUVGUgWFhpFGBgYQBUVGjwXFxc3FBQaMhcXFy0TExooFxcXIhISEh0UFBQZDAwYFQ8PDxEREREP + FRUVDAAAGgoAAAAIAAAABgAAAAUAAAAEAAAAAwAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAQAAAAIAAAADAAAABQAAAAgAABoKFRUVDBEREQ8PDw8RDQ0aFBcXFxYUFBQZExMTGxERGh4YGBgg + FhYWIxUVFSUUFBQnExMZKRcXFywWFhYuFRUVMRQUGTMWFhs5FRkdPhYNDToWCQk7FyUtWhZoe5oVrszc + F9f5/hzi//8h3f7/Jtf3/yvS8f0x0PD8M9Hw/TXS8f030vL+OdLy/znS8v850vL/OdHy/zjR8v830vL/ + N9Pz/zbT8/811PP/NdX0/zPV9P8z1vT/Mdb1/y/X9f8u1/X/K9f1/inX9f4l1fT9ItXz/B/W9f4d3Pz/ + GeT//hjk//8XwuHsFnuOrhgtNmwXCgpOFw0NTxgYG1YYGxtWFhkZUhcXF04YGBhLFhYZRxcXF0MVFRk+ + FhYWOhgYGDYUFBoyFhYWLhMTGSkVFRUlFxcXIhERGh4TExMbFhYWFw0NGhQQEBAQFBQUDQAAGgoAAAAH + AAAABgAAAAUAAAAEAAAAAwAAAAMAAAACAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAUAAAAJFRUVDBEREQ8ODg4S + DQ0aFBYWFhcUFBQZExMTGxERGh4YGBggFxcXIhUVFSQUFBQmExMaKBISGCoXFxcsFhYWLhUVFTAUGRkz + FxcbOBUQEDEUCgoyFzZAZBeGn7UYyev1G+D//yLb/P8o0/P+Mc/w/DbR8f060vL+PdLy/z7R8f89z/D/ + PM7w/zrM7/85yu//N8nv/zXI7/8zx+7/Msbu/zHH7/8wyO//L8jv/y/K8P8uyvD/Lsvx/y7M8f8vzvL/ + L9Dz/y/S8/8v0/T/L9X1/y/V9f8t1vX/K9f1/yjW9f4k1fP8IdX0/R7d/P8a5v//GNPy+BaSq8MWRFB/ + FRISVBcKB0wWEhJTGBgbVhUYG1QWFhpQFxcXTBUVGUgWFhpFFxcXQhUVGT4WFho7FxcXNxQUGTQVFRUx + FxcXLRISGCoUFBQmFxcXIRMTExsXFxcWDw8PERISEg4XFxcLAAAACQAAAAgAAAAHAAAABgAAAAQAAAAD + AAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAEAAAADAAAABQAAAAkUFBQNEBAQEA0NGhQXFxcWFBQUGRMTExsSEhIdEBAZHxcXFyEWFhYj + FRUVJRQUFCcTExkpGBgYKxcXFywWFhYuFBkeMxYQFi8UBwcmGDM8VRaQq7wY0/f8Ht7//yfU9v8xzu/8 + ONHw/T7S8f9B0fH/QM/w/z7L7/87yO7/N8Xs/zPB6/8vver/K7vp/ye46f8ktun/IbTo/x+z6f8ds+n/ + HLPp/xu16v8btur/Grfr/xu56/8bu+z/HL3t/x2/7v8fwu//IsTw/yPG8f8lyfH/KMvy/yrO8/8r0PP/ + LNL0/yzU9f8r1vX/KNX0/iXS8/wh2Pn+HeT//xne/f8Xr8zbFmN0mBckLGIVCgpKFQsLSBcTE08WGRxS + FxoaTxgYGEsVFRlIFhYaRhcXF0MYGBhAFRUZPRYWFjoXFxc3FBQZMxYWFi8TExkpFxcXIhMTExsXFxcW + Dw8PEREREQ8VFRUMFxcXCwAAAAkAAAAIAAAABgAAAAQAAAADAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAEAAAABgAAAAkVFRUM + EBAQEA0NDRMXFxcWFBQUGRISEhwRERoeGBgYIBYWFiMVFRUlFBQUJxMTGigSEhgqFhYcLhUVGzAXCAgh + FSElPhV/macYz/X6INz//ynQ8v42ze78PdHw/kLR8P9Cze//P8nt/zrE6/80vur/Lbno/ya05/8gr+X/ + HKzk/xip5P8Wp+T/FKfk/xOm5P8SpuT/Eqfk/xKn5f8RqOX/Eanm/xGq5v8Rq+f/Eazo/xGu6P8RsOn/ + EbLq/xGz6/8Stez/E7jt/xW77v8Xve7/GcDv/xzD8P8fxvH/Isny/yXM8v8n0PP/KdL0/yjT9P4m0vL9 + I9X1/h/f/v8b4///F8vr8xaWr8IXV2aHFyMpWBUICD4UDAxAFRUVSBUYHEkXFxpEGBgYQRQUGD8VFRo8 + FhYWORgYGDYUFBoyFhYWLhMTGigXFxchFBQUGg0NGhQQEBAQEhISDhUVFQwAABoKAAAACQAAAAcAAAAF + AAAABAAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAQAAAAIAAAACAAAABAAAAAYAAAAJFRUVDBAQEBANDQ0TFxcXFhQUFBkSEhIc + EBAZHxcXFyIVFRUkFBQUJhcXHSwVDg4lFwgPIRddbXwYwuXuH9z//yrP8v04zO78QtDv/0TO7/9Cyu3/ + PMPq/zS86P8qtOb/Ia3k/xuo4v8WpOH/FKPg/xOi4P8SouL/EqLi/xKi4v8So+L/EqTj/xGk4/8RpeT/ + Eabl/xGn5f8RqOb/EKjm/xCp5/8Rqef/Earo/xGr6f8QrOn/EK3q/xCv6v8QsOr/ELHr/xCz7P8Qte3/ + Ebft/xK57f8UvO7/Fr/u/xnD8P8cxvH/IMry/yPN8v8l0PP/JdHy/STR8vwg2Pn/HOL//xnh//8Vyuvw + FY6mtB9NWWohISY2EwYGKRMTEzUXFxw3FBQaMhYWFi8XFxcsEhIYKhQUFCYXFxciEhISHRUVFRgNDQ0T + EhISDhcXFwsAAAAJAAAACAAAAAYAAAAFAAAABAAAAAMAAAACAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAB + AAAAAgAAAAQAAAAGAAAACBcXFwsSEhIODw8PEQ0NGhQWFhYXFBQUGhERGh4WFhYjDQAAExMmKzUXlrW9 + HNv//yfR9f43yuz8Qc7v/kbM7v9Bxuv/OL7o/y605f8jq+L/G6Xg/xah3/8Tn97/E5/f/xOg3/8ToeD/ + E6Lh/xOi4f8SouL/EqPj/xKk5P8RpeT/Eabl/xGn5f8Rp+b/Eafn/xCo5/8Qqef/EKrn/xCq6P8Qquj/ + EKvo/xCr6P8QrOr/EK3q/xCu6v8Qr+v/ELDr/xCx6/8Qsuz/ELPs/xC07f8Qtu3/Ebjt/xK67v8Tvu7/ + FsHw/xnF8P8dyfL/IM3z/yHP8/4hz/H8HtLy/RzZ+v8X4///Kd79/za41tEcZHRuEBkZHxEAAA8REREe + ERoaHhQUFBkWFhYXDAwYFQ4ODhIREREPFRUVDAAAAAkAAAAHAAAABQAAAAQAAAADAAAAAgAAAAIAAAAC + AAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAIAAAACAAAABAAAAAUAAAAI + AAAaChUVFQwQEBAQDg4OEgAAAAEVUWFfGcPq7iPX/v80ye38QMzt/kbL7f9Cxer/Nrrm/ymv4v8epeD/ + F5/e/xSd3f8Tnd3/E57e/xOe3/8Tn+D/E6Hh/xOi4f8So+L/EqTj/xGl5P8RpuX/Eabm/xGn5v8QqOb/ + EKjn/xCo5/8PqOf/D6no/w+q6P8Pquj/D6vp/w+r6f8PrOn/D6zp/w+t6f8Prer/D67q/w+v6v8Pr+v/ + D7Dr/xCw6/8Qsez/ELLs/xCy7P8Qs+z/ELTs/xG17f8Rt+z/Ebvt/xK97v8VwfD/GMXx/xvJ8v8dzfP/ + HdDz/hvP8fwg1fT+Ntn6/ivj//8Vvt7YFWV9YgAAAAcAAAABFBQUDQAAHAkAAAAHAAAABgAAAAUAAAAE + AAAAAwAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAIAAAADAAAABwAAAAQAAAACFHuViR3W//8r0PT+ + Pcnr/EbM7f9Dxer/N7nm/ymt4f8cot7/Fpzc/xOb3P8TnNz/FJ3d/xOe3v8Tnt//E6Dh/xOh4v8So+L/ + EaTj/xGl5P8RpuX/Eafl/xGn5v8QqOf/EKnn/w+q5/8Pquj/D6rp/w6q6f8Oq+n/Dqzp/w6s6v8Orer/ + Dq7r/w6u6/8Oruv/Dq7r/w6u6/8Or+v/DrDr/w6x6/8Osez/D7Hr/w+x6/8Psez/ELLs/xCy7P8Qsuz/ + ELPt/xCz7P8Rtez/Ebbs/xG47f8Ru+7/E7/v/xXC8P8XxvH/Gcry/xjO9P8o0vP9N87w/Rvd/P4V4/// + FrreyBNTazcAAAAAAAAABAAAAAQAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAQAAAAQAAAAAEhIkDhedv7Qi2v//Ncnt+0TL7P1FyOv/Orvm/yqt4f8dod3/Fpvb/xSa2/8Umtv/ + FJzc/xOd3v8Tn9//E6Dg/xOi4f8So+L/EaTj/xGm5P8Rp+X/Eajm/xCo5/8Qqej/D6ro/w+r6f8PrOr/ + D63r/w+t6/8Orez/Dq7s/w6u7P8Or+z/Dq/s/w6w7f8Ose3/DbHt/w6x7f8Ose3/DrHt/w6x7v8Osu7/ + DrLu/w6y7f8Osu3/DrLt/w6y7P8Os+z/D7Ls/w+y7P8Qsuz/ELPt/xCz7P8Qs+z/EbTr/xG17P8Rt+z/ + Ebrt/xK97v8Uwe//FMTw/xrL8v82zfL/JdHz/RPP8vwW3Pv/FOH//BWfwpIAM00KAAAAAAAAAAQAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAABJYex0Xtd7PKNb9/zzK6/pGy+z+ + QcHo/zCx4v8go93/F5va/xSZ2v8Umdv/FJvc/xSd3f8Un9//E6Dg/xOi4f8SpOP/EaXk/xGm5v8QqOf/ + EKnn/xCq6f8PrOn/D63q/w+u6/8Or+z/DrDt/w6x7v8Ose7/DbLv/w2x7/8Nse//DbLv/w2y7/8Nsu// + DLLv/wyz7/8NtO//DbTv/w207/8NtO//DbPv/w2z7/8Ns+//DbTv/w607/8Os+//DrPv/w607v8OtO7/ + DrPt/w+z7P8Ps+3/ELPt/xCz7f8Qs+z/ELPs/xGz6/8Rtez/Ebfs/xK57f8Tve3/FMLv/y/I8P8sy/L/ + Fc70/xXO8/wV0fP8FuD+/xXW/tMQndkvAAAAAABAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABVAwAAAAAOn90lGc3+3S7S9f9Byuv7R8ns/zq65f8nqN//Gp3b/xWZ2v8Umdr/FJrb/xSc3f8Un9// + E6Hh/xKj4/8SpeT/Eabl/xCo5/8Qqej/EKvp/w+s6v8Pruv/Dq/s/w6w7f8Ose7/DrLv/w6z7/8Ns/D/ + DbTw/w208P8MtfH/DLTx/wy18f8MtfL/DLXx/wy18f8MtfL/DLby/wy38v8Mt/H/DLfx/wy38f8Mt/H/ + DLbw/wy28P8NtfD/DbXw/w218P8NtfD/DrTw/w607/8OtO//DrTu/w607f8PtO3/D7Pt/xCz7P8Qsuz/ + ELPs/xGz6/8RtOv/EbTs/xK37P8Ruez/KcLu/zDG8P8VxvH/Fcnz/xXO9P4VzvP7FtX0/xbX+fYUtfFa + AAAAAACAvwQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAE6bmKBrE7uIzze7/Rcvs+0XF6v8zs+P/ + IKHc/xeZ2f8Vmdn/FZnb/xSb3f8Un9//E6Lh/xKk5P8SpuX/Eajm/xCp6P8Qq+r/EKzr/w+t7P8Pr+z/ + DrHt/w6y7v8Os+//DrPw/w208P8NtfD/DbXx/wy28f8Mt/L/DLfy/wy38v8Mt/P/DLfz/wy48/8MuPP/ + DLj0/wy48/8MufP/DLnz/wy58/8MufP/DLnz/wy48v8MuPL/DLjy/wy38v8MuPL/DLfx/wy38f8NtvD/ + DbXw/w218P8Ote//DrTv/w617v8OtO7/D7Tt/w+z7f8Ps+z/ELLs/xGz6/8Rs+v/EbPr/xC06/8jvO3/ + MsLt/xe/7v8Uwe//Fcfx/xbL8/8VzvT8FdT1/RbY9f8Ut+d/AAAAAABVqgMAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoD + AAAAAA+W2iIbw+3gNNDx/0fM7vxCw+n/LK7h/xye2v8WmNn/FZna/xWa3P8Unt//E6Hh/xKk4/8SpuX/ + Eqjn/xGp6P8Qq+r/EKzr/w+u7P8Pr+z/DrHt/w6y7v8Osu//DrPw/w208P8NtPD/DbXx/wy28f8Mt/L/ + DLfz/wy58/8MufP/DLnz/wy69P8MuvT/DLn0/wy59P8LufT/C7n0/wu69P8MuvT/DLr0/wy69P8MuvT/ + DLr0/wy68/8MuvP/DLnz/wy68/8MufL/DLny/wy48v8NuPH/Dbfx/w238P8OtvD/DrXv/w617/8Ote7/ + D7Xu/w+07f8Ps+z/ELPs/xCz7P8Rsuv/D7Pr/x247P8zv+3/Gbrs/xO67P8Vv+7/FcTw/xXK8v8VzfP9 + FdH1+xbb+f8Vu+uPAAAAAACAgAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAMktsVGsHt1jbR8v9GzO77PsHo/yiq3/8am9n/ + FpjY/xWZ2/8VnN7/E6Dg/xOj4v8SpeX/Eqfn/xGp6P8Rqun/EKvq/xCs6/8Prev/Dq/s/w6x7f8Ose// + DrLv/w2z7/8Ns/D/DLTw/wy28f8Mt/L/DLjz/wy48/8MufT/DLr0/wy69P8LufT/C7r0/wu69P8LuvT/ + C7r1/wu69f8Lu/X/C7v1/wu79f8Lu/X/C7v1/wu69f8LuvT/DLr0/wy69P8MuvT/C7r0/wy68/8MuvP/ + DLrz/w258/8NufL/Dbnx/w248P8Nt/D/Drbw/w627/8Ote//D7Xu/w+07f8PtO3/ELPs/xCz7P8Qsuv/ + Gbbs/zO+7P8bt+v/ErXq/xS57P8Vve3/FcLv/xXH8f8VzPP+FdD1+hfa+f8Wve2aAAAAAACAgAIAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAB + AGbMBRi8670z0vL/Rs3u+z3A6P8mqN//GZrZ/xaY2P8Vmdv/FZ3e/xOg4f8To+P/Eqbl/xKo5/8Rqef/ + Earp/xCr6v8Qruz/DrHt/w6z7v8NtO//DbTw/w208P8NtvH/DLjy/wy68/8MvPX/DLz1/wy68/8MuvP/ + DLrz/wy79P8Mu/T/C7z1/wu89f8LvPX/C731/wu89f8LvfX/C731/wu99f8LvfX/C731/wu99f8LvfX/ + C7z1/wu99f8LvfX/C7z1/wu89f8Lu/X/C7v0/wy79P8Mu/T/DLr0/wy68/8MuvP/Dbny/w258f8NufD/ + Dbjw/w637/8Otu//D7Xu/w+07f8PtO3/ELTt/w+z7P8Utez/Mb7s/yC47P8Qsur/E7Xq/xS36/8Vu+z/ + FcDu/xbG8P8WzPP/Fc/1+hfa+f8Vu+yTAAAAAABVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWqAwAAAAAXs+eTMNPz/0XO7vs8wOj/JKjf/xiZ2f8WmNj/ + FZrb/xSd3/8ToeH/E6Tj/xKm5f8Sp+f/Eajn/xCq6f8Pruz/D6/s/w+r6f8Qo+L/Epra/xST1P8VjtD/ + FovN/xWLzv8Uj9D/E5bX/xGh3/8OsOr/Dbzz/wzC+P8Mwfb/DL71/wy+9f8Mv/X/DL/1/wu/9f8Mv/X/ + DL/2/wvA9/8LwPf/C8D3/wvA9/8LwPf/C7/3/wu/9/8Lv/b/C772/wu+9v8LvvX/C771/wu+9f8LvvX/ + C731/wy89P8Mu/T/DLv0/wy79P8Mu/P/DLry/wy68f8NufH/Dbnw/w648P8Ot/D/Drbv/w+17v8Pte3/ + ELTt/xC07P8tve3/Jbrs/xCy6v8Ssun/ErPq/xO16/8Vuuv/Fb7t/xbF8P8WyvP/Fs71+xfZ+P8VueqD + AAAAAACAvwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA + FKLfWCjR8/9Dz/D8PMPq/yOq4P8Ymdn/FpfY/xWa2/8Und//E6Hh/xOk4/8SpeX/Eqfm/xKo5/8QrOr/ + D6zq/xCi4f8Vk9T/HIjJ/yOCxP8mgcH/KIPA/ymEwP8phL//KYG+/yZ8u/8keLn/IXa5/x55vf8ahcb/ + FJvY/w+27P8Mx/j/DMn5/w3F9v8Nxff/Dcb3/wzH+P8Mxvj/DMb4/wzG9/8Mxff/DMX3/wzE9/8MxPf/ + DMT3/wzC9/8Mwvf/DMH3/wzB9/8LwPf/C7/2/wu/9f8Lv/X/C771/wu+9f8MvfT/DLz0/wy89P8MvPP/ + DLvz/wy78v8NuvH/Drrx/w658f8Ot/D/Drbv/w617v8Pte3/DrXt/ye87f8ou+z/ELLq/xKy6v8Ssun/ + ErLq/xS16v8Uuev/Fb7t/xbE8P8VyvP+Fs70+xfY+P8WsOdqAAAAAACAvwQAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABKEyh0fxu3nPNPy/zzG6/4kreH/GJvZ/xeX2P8Vmdr/ + FZze/xOg4f8To+P/EqXl/xKm5v8Rquf/EKvp/xGh4P8YkND/JYrI/y+Syv8zodD/NbDX/zW73P8zweD/ + LsDi/yq74f8nsd7/I6XZ/yOg1v8jmdH/I4/L/yGEwv8fe7z/Hn2//xeSz/8Rt+n/Ds/5/w7P+f8Ozfj/ + Dc34/w3N+P8NzPn/Dcz4/w3M+P8NzPj/Dcv4/w3L+P8Nyvj/Dcn4/w3I+P8Mx/j/DMb3/wzF9/8MxPf/ + DMP3/wzB9v8MwPb/DMD1/wy/9f8Mv/X/DL70/wy99P8NvfT/Dbzz/w278v8Nu/H/Dbrx/w268f8OufD/ + Drjv/w+27/8Nte7/JLzu/yq97f8QtOv/EbLr/xKy6v8Ssun/ErLp/xS06v8UuOr/Fb7t/xbE8P8VyvL+ + FtH1/RbW9/wWqeJHAAAAAABVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA + Fq/jojHW9f88ye37JrPk/xee2/8Wl9j/FpjZ/xWb3v8UoOH/E6Lj/xOk5P8SpuX/Earo/xCo5v8Vldb/ + I4zJ/zKcz/82t9z/Nszm/zLX7f8q2PD/INXz/xjQ9P8TzfX/Esz2/xLO9/8Sz/f/FM72/xXL9P8ZxfD/ + JL7p/yGu3/8amtL/HYnH/x2Fxf8Wn9f/Ecnz/xHV+v8R0vn/ENP5/xDS+f8Q0vn/D9H5/w/R+f8P0fn/ + D9D5/w7Q+f8Oz/n/Ds75/w3N+f8NzPn/Dcv4/w3J+P8NyPj/DMj3/w3G9/8MxPf/DML2/wzC9v8Mwfb/ + DMD1/wy+9P8MvvT/Db3z/w288/8Nu/H/Dbvx/w678f8OuvD/Drnw/w247/8jvu//Kr7u/w+17f8Rs+v/ + EbLr/xKy6v8Ssun/E7Lp/xS06f8VuOr/Fr3s/xbF8P8Wy/L9F9L2/xfQ9OoVn90lAAAAAACAgAIAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABKV1Ugi0PT/Nc3w/Sm66P8Yot7/FpnY/xaY2P8Vmtz/ + FJ7g/xOi4v8TpOP/Eabl/xGq6P8RpeT/GZLR/yuTy/8zstr/MtHp/y3b8P8i1/P/GNH1/xLN9v8Qzvf/ + EdH3/xPT+P8T1fj/FNX4/xTW+P8U1/j/FNf5/xTY+f8b2vn/Ltr3/zfP8P8juOX/F6HY/x2Uzv8bndT/ + FcXu/xTZ+v8U1/n/FNf5/xTW+f8T1vn/E9b5/xLV+f8S1fn/EtX5/xHU+f8R0/n/ENP5/xDS+f8P0fn/ + Ds/5/w7O+P8Ozfj/Dcz4/w3L+P8Nyvf/Dcf2/w3E9v8NxPb/DML1/w3A9f8Nv/T/Db70/w298/8NvPL/ + Dbzy/w678f8Ou/D/Dbnw/yO+7/8ovu//D7bt/xC07P8Rs+v/EbLr/xKy6f8Ssun/E7Hp/xS06f8Vuer/ + Fr7t/xfF8P8WyvL8F9X2/xbI8ccAgL8IAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAgIAC + F7vqyinR8/8pwOv9Gqrh/xab2v8Xl9j/FZna/xWd3/8ToeL/E6Pj/xKl5P8Squj/EaXj/xuRz/8sl87/ + MMDh/y3b7/8j2PP/FtD1/xLO9v8S0ff/FNT3/xXW+P8W1/j/Ftj4/xbY+P8W2Pj/Ftn5/xbZ+f8W2fn/ + Ftn5/xTZ+f8U2vn/KN/6/0rk+P8/zu7/Gq3e/xme1P8cp9r/Fs/z/xbb+v8W2fn/Ftn5/xXZ+f8V2fn/ + Fdn5/xXY+f8V2Pn/FNf5/xTX+f8U1vn/E9b5/xPW+f8S1fn/EdT5/xDS+f8P0fn/D8/4/w7P+P8Ozvj/ + Dsv3/w3J9/8NyPb/Dcb2/w3D9f8NwvX/DcD1/w2/9P8NvvP/Dr3y/w688f8NvPH/J8Dw/yW/7/8Otu3/ + ELXt/xC06/8Ss+v/ErLr/xOx6f8Tsen/FLLp/xS16f8Wuev/Fr/t/xfH8f8Wy/P7F9f4/xW5648AAAAA + AFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABSY11kZz/X/IMPu/Byy5v8Wod3/FpjY/xaY2f8Vm93/ + FJ/h/xOi4/8TpeP/Eqnn/xGp5v8blNL/K5jP/y3F5P8q3vL/G9L0/xLN9v8T0vf/FdX4/xbX+P8W2Pj/ + Ftn4/xbZ+f8W2vn/Ftr5/xfa+f8X2vn/F9r5/xfa+f8X2vn/F9r5/xfa+f8T2fn/GNv5/0jn+v9b4fT/ + Kbfh/xae1f8brN7/F9L0/xfc+v8W2vn/Ftr5/xba+f8W2vn/Ftr5/xba+f8W2vn/Ftn5/xXZ+f8V2fn/ + Fdn5/xXY+f8V1/n/FNf5/xPW+f8T1fn/EdP5/xDT+P8P0fj/Ds/3/w7N9/8OzPf/Dsr3/w7I9v8Oxvb/ + DsP1/w7B9P8OwPP/Dr7y/w6+8v8rwvH/IL/w/w257/8Qt+7/ELXt/xG07P8Ss+z/ErLq/xOx6f8Tsen/ + FLLp/xW26f8Wuuv/FsHu/xfJ8v8Wz/T9F9b3/xSo5EwAAAAAAFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA + FLbnvRfN9P8XuOr8F6nh/xac2v8XmNj/FZnb/xWd4P8ToeL/E6Tj/xKn5v8Rq+j/F5vY/yiVz/8sxub/ + KN/0/xbP9f8T0Pb/FdX3/xbX+P8W2Pj/Ftn5/xba+f8X2vn/F9r5/xfa+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xjb+f8X2/n/ENn5/zjk+v9s7Pj/O8Ll/xeb1P8asOD/F9j3/xfc+f8X2/n/ + F9v5/xfb+f8X2/n/F9r5/xfa+f8W2vn/Ftr5/xba+f8W2vn/Ftr5/xXZ+f8V2fn/Fdn5/xXY+f8U2Pn/ + FNb5/xPW+f8S1Pn/EdP3/xHR9/8Q0Pf/D873/w7M9/8Oyvf/Dsf2/w7F9f8NwvT/EsPz/y/G8f8awfL/ + Dbvw/xC67/8QuO7/ELbt/xG17P8StOv/ErLp/xOx6f8Usen/FLPp/xa36v8WvOz/F8Pw/xbK8v0X0/b/ + F8703g6c1RIAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAAAAABSN0CYVyPL3F8Xw/xaz5/4Wo9//FprZ/xaZ2f8Vm93/ + FJ/h/xOj4/8SpeT/Eavp/xOm4f8ik8//K73i/yng9f8Wz/X/FNL3/xbW+P8W2Pj/Ftn4/xfZ+f8Y2fn/ + GNr5/xfa+f8X2vn/F9r5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Z2/n/ + ENn5/zHh+f9y8Pn/QsPl/xaa0/8Zv+j/F936/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfa+f8X2vn/Ftr5/xba+f8W2vn/Ftr5/xba+f8W2fn/Ftn5/xXY+f8U1/n/FNb4/xPV+P8S0/f/ + EdH3/xDP9/8Qzff/D8v3/w3I9f8ayfX/MMjy/xTD8/8OvvH/D73w/xC77/8Que7/ELbs/xG16/8Ss+r/ + ErLp/xOx6f8Usun/FbTp/xa56v8Wv+7/F8bx/xXL8/sX1/j/FbfqhwAAAAAAVaoDAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAvwQAAAAA + E57YaRXP9f8Wvu38F67k/xaf3P8Wmdj/FZna/xSd3/8ToeL/EqTk/xKo5/8Rrun/GpnV/yer2v8q3/P/ + GNH1/xTS9/8W1/j/Ftn4/xbb+f8X3Pr/F937/xfe+/8X3vv/F977/xfe+/8X3vv/F936/xfc+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Z2/n/ENn5/zHh+f917/j/Pbvh/xWh1/8Y0vT/ + F936/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfa+f8X2vn/ + Ftr5/xba+f8W2vn/Ftr5/xba+f8W2fn/Fdj4/xXX+P8U1vj/E9X4/xPT9/8S0ff/EM/3/yXP9f8ty/P/ + EMf1/w/D8/8PwPL/EL3w/xC87/8Quu7/Ebfs/xG16/8StOn/ErLp/xOy6f8Vsun/FbXp/xa76/8Xwu// + Fcny/hfQ9f8X0fb0E5/fKAAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWqAwAAAAAUruKmFs31/xa46vwWqeL/Fpza/xWZ2f8Vm9z/ + FJ/g/xOj4/8SpuX/Eq7q/xSp5P8emtP/KtTu/x3Y9v8U0fb/Ftj4/xbb+f8X2/r/GNX2/xnM8f8ZxOv/ + Gb/o/xm85/8Zvef/GcDp/xjG7f8YzvH/F9j3/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8Z2/n/ENn5/0Ll+f906vb/KanZ/xS45f8Y3vr/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/GNv5/xjb+f8Y2/n/F9v5/xfa+f8W2vn/Ftr5/xba+f8W2vn/ + Ftr5/xbZ+f8V2Pj/FNb4/xTV+P8V1fj/MdH1/yfQ9v8Pzfb/EMn1/xDG9P8QwvL/EL/x/xC98P8Ruu7/ + Ebfs/xK16/8StOr/ErLp/xSy6f8UtOn/Frfq/xa+7f8XxfD/Fsrz+xfX+P8WvOuZAAAAAABVqgMAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA + AAAAARW76dIXyfL/FrTo/Ral3/8Wm9n/FZrZ/xWc3v8ToeL/E6Xk/xKp5/8StOz/FJ7b/yO24P8l3/b/ + FND2/xbZ+f8W1/f/Gcnv/x234/8dqNn/Hp7T/x6Yz/8dlc3/HJTN/xyVzv8bmND/Gp3T/xmj2P8YwOn/ + F9z5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/FNr5/13t+v9d0ur/ + FqXZ/xfV9v8X3Pr/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/GNv5/xvb+f8e3Pn/ + Hdz5/xzb+f8b2/n/Gtv5/xrb+f8Y2/n/GNr5/xfa+f8W2vn/Ftr5/xba+f8W2fn/Fdj4/x3Z+P830/T/ + H9b3/xLR9/8Tz/b/Esv1/xHI9P8RxPL/EMHx/xC+8P8RvO7/Ebjt/xK26/8StOr/E7Pp/xOz6f8Vtun/ + Frvs/xfC7/8VyfL+F9H1/xbQ9PERmd0eAAAAAACAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAANgMwUFMPv7RfF8P8Wsuf+FqLe/xab2f8Vmtv/ + FJ/g/xOj4/8Tp+X/Eq/p/xKz6v8Wntn/J9Pu/xjW9/8V1vj/Gczw/x6z4P8hodX/IZrQ/x+b0P8eoNX/ + HKnb/xuz4f8Zvef/GMXs/xjL8P8Y0PP/F9P0/xfW9v8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xjb+f8T2vn/J9/5/3Hr9/8wr9z/E8Ps/xje+/8X2vn/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/Idz5/yje+f8o3vn/Jt35/yTd+f8i3fn/INz5/x/c+f8d3Pn/ + HNv5/xrb+f8Z2vn/F9r5/xba+f8V2vn/KNr4/zXV9f8Z2vn/FNb4/xTU9/8U0fb/E872/xLL9f8Rx/P/ + EcPy/xHA7/8Rve7/Errt/xO36/8Tter/E7Pp/xS26f8Wuev/F7/t/xbG8P8VzPP7F9f4/xey6G0AAAAA + AIC/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAC + AAAAABKMzioUx/D9F8Lu/xav5f4WoNz/FprZ/xWb3f8ToOH/E6Xk/xKq5v8Stez/ErDn/x2y4f8g2/b/ + FdL3/xzA6f8iptj/I57S/yCm1/8ds+D/GsPq/xjP8v8X1/f/F9z6/xfe+/8X3vv/F976/xfd+v8X3fr/ + F9z6/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8R2fn/ + Vev6/1XL5/8SteP/GN77/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8k3fn/ + MeD5/zLg+v8x4Pr/Lt/5/y3f+f8r3/n/Kd75/yfe+f8m3fn/JN35/x/c+f8Z2/n/F9r5/xjc+v8y1/b/ + Ldn3/xXb+P8W2Pj/Fdf4/xXW+P8U1Pf/FNH2/xTN9f8SyvT/Esby/xLC8P8Svu//E7vt/xO46/8Utur/ + FLbp/xa46v8Wve3/FsPv/xXJ8vwX1vf/F8HusQAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqqqgMAAAAAXLjiPQfB7/8ZwO3+F6zk/xaf3P8Wm9r/ + FZ3e/xOi4v8Tp+X/Eq3o/xK67v8TsOX/Icfq/xnW9/8eueX/JKHU/yKm2P8dvOX/GdDz/xfb+f8X3vr/ + F936/xfc+f8X2/n/F9r5/xfa+f8X2vn/F9r5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/GNv5/xLZ+f8w4/r/aeDx/x2z4f8W2fj/F9z5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/GNv5/yLd+f814Pn/O+H6/znh+v844fr/NuH6/zXg+v804Pr/ + MuD6/zDg+v8u3/n/Jt35/xvb+f8W2/n/IN35/zjW9f8j3Pn/Fdr5/xba+P8W2fj/Ftj4/xXX+P8U1ff/ + FNP2/xTP9v8UzPT/FMnz/xTE8f8UwO//FL3u/xS67P8Uuev/Frnr/xa87P8Wwu//Fcny/RrU9v8IxfDg + gL/fCAAAAAAAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + qqr/AwAAAABqv+ZIBcHv/xm97f0WquP/Fp7c/xWb2/8Un9//E6Tj/xOp5v8Ssur/Er3v/xa46P8e0PH/ + H7vm/yWj1f8fs+H/Gs7x/xfc+v8X3fr/F9v5/xfa+f8X2vn/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + Ftv5/xjc+f9j6ff/Mbzj/xLS9f8Y3fr/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + Hdz5/zLg+f9B4/r/QeP6/0Dj+v8/4/r/PeL6/zzi+v864fr/OeH6/zfh+v8r3/n/G9v5/xbb+f8q2/j/ + Ndf2/xvd+v8X2vn/F9r5/xba+f8W2vj/Ftn4/xbY+P8V1vj/FdT3/xTS9v8Vz/X/Fcv0/xXH8v8Vw/D/ + FL/u/xW97f8WvOz/Fr3t/xbC7/8VyPL+GtL2/wbI8fOh2ewbAAAAAICA/wIAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqqv8DAAAAAGnC5lAGv+7/G7fo/Ben4f8Vntv/ + FZzc/xOg4P8TpuT/Eqzo/xK27P8TwPD/F8Pt/yDA6P8ip9j/IMDo/x/a9/8W3Pr/F9r5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/ENn5/07o+f9Eyej/EM3y/xje+v8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/J975/z/j+f9I5Pr/R+T6/0fk+v9F5Pr/ + ROT6/0Lj+v9B4/r/P+P6/y7f+f8b2/n/Gt36/zXX9v8s2vj/Ftz5/xfb+f8X2/n/GNr5/xfa+f8W2vn/ + Ftr4/xbZ+P8W1/j/Fdb3/xXU9/8W0fb/Fs71/xbK8/8VxvH/FsPv/xbC7v8Wwu//FsXw/xXK8v4b0/b/ + Bsvz+aXa8CIAAAAAgID/AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAKqq/wMAAAAAbMLmUwW+7f8atef8F6bg/xWe2/8Vnt3/E6Lh/xOo5f8Sr+n/Errt/xPE8f8YxO7/ + Ia3d/yvD5/8/5Pb/Idv3/xfY+P8Y2vj/GNr4/xja+P8Y2vn/GNr5/xfa+f8X2vn/F9r4/xfa+P8X2vj/ + F9r4/xja+f8Y2vj/GNr5/xja+f8Y2vj/GNr4/xja+P8Y2vj/GNr4/xja+P8Y2vj/GNr4/xja+P8Y2vj/ + GNr4/xna+P8S2Pn/N+T6/0/S7f8Ry/D/GN76/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8c3Pn/M+D5/0nk+f9N5Pn/TOT5/0zk+f9K5Pn/SeT5/0jk+v9E5Pr/L+D5/xjb+f8i3fn/ + Odb1/yHd+v8W2/n/F9v5/xfb+f8X2/n/GNv5/xja+f8X2vn/Ftr4/xba+P8W2Pj/Ftf4/xbW9/8W0/f/ + FtD2/xbN9P8WyvL/Fsjy/xbI8f8WyvL/Fc30/hzW9v8FyPHxo9brGQAAAAAAAP8BAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqr/AwAAAABqweZSBb/t/xq36fwWp+H/ + FZ7c/xSf3v8To+P/Eqrm/xKy6v8Su+3/FMby/xm+6v8nteD/SeHz/yfY9f8T0/b/GNb2/xfW9/8X1/f/ + GNf3/xjY9/8Y2fj/GNr4/xjb+f8Y3Pr/GNz6/xjc+v8Y3Pr/GNz5/xjb+f8Y2fj/GNj3/xjY9/8X1/f/ + F9f3/xfX9/8X1vf/F9b3/xfW9v8X1vb/F9b3/xfX9/8X1/f/GNj3/xTX+P8l3/n/UNjw/xXL8P8Y3Pn/ + GNr5/xja+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8j3fn/QeP5/1Ll+f9S5fn/ + UeX5/1Dl+f9P5fn/T+X5/0jk+f8t3/n/GNz5/y7a9/802Pb/Gd36/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xjb+f8Y2vn/F9r5/xba+P8X2vn/F9j4/xfX+P8W1vf/FtP2/xbR9f8Wz/T/Fs/0/xfP9f8W0vX9 + HNr4/wbC7tWAgIACAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACqqv8DAAAAAGu/5EwFvu3/Grjq/Ran4f8Vn93/FJ/f/xOl4/8Sq+f/ErPq/xO77f8UxO// + GLbl/znG5v822fL/Esjx/xjN8v8XzvL/F8/z/xfR9P8X0/X/FtX2/xfU9v8Xz/L/GMft/xnA6f8ZvOf/ + Gb3o/xjA6v8XxOz/F8jv/xfQ8/8X0/X/F9L0/xfR9P8X0fT/F9Dz/xfP8/8Xz/P/F8/z/xfP8/8X0PT/ + F9D0/xbR9P8W0vX/FdL1/xrX9/9K2vL/Gczw/xXZ+P8X2Pj/F9n4/xja+P8Y2vn/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xvb+f804fn/Ueb5/1bm+f9V5vn/Veb5/1Tm+f9U5vn/SeT5/yje+f8c3fr/ + N9b1/ync+P8W2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2vn/GNr5/xja+f8Y2vn/ + GNr5/xjY+P8Y2Pj/F9b3/xjV9/8Y1fb/F9X3/xrV9/sc3fr/A7PomgAAAAD///8DAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqq/wMAAAAAa77kQwW97f8Zuev9 + Fafh/xWg3v8UoeD/E6bk/xKs6P8Ss+r/E7jr/xW86/8ZseL/O8rp/yTH7P8Vvur/F8Lr/xfE7f8Xxu7/ + F8nw/xjG7f8aueX/HKrb/x2c0/8els7/HZbO/xuZ0f8an9X/Gaba/xis3v8Ys+L/F8Lr/xfK8P8Xye// + F8jv/xfH7v8Xxu7/F8bu/xfF7v8Xxe7/F8bu/xbG7/8WyO//Fsjw/xbK8f8Wy/L/Fc7z/z/W8v8czPH/ + FNP2/xbU9v8W1vf/Ftf3/xbY+P8X2fj/F9r5/xja+f8X2/n/F9v5/xfb+f8X2/n/GNv5/yrf+f9O5vn/ + Wuf4/1nn+P9Y5/j/WOf4/1fn+f9G5Pn/Id35/ybc+P841/X/Hd36/xba+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2vn/GNr5/xja+f8Y2fj/Gdn4/xbY+P8f2fj/ + Ldz4/RrY+P8Ent1EAAAAAP///wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAqqqqAwAAAABrvOQ5BLvs/xm76/4VqOL/FaHe/xSi4f8Tp+T/Eq3o/xKx6P8Us+f/ + FrLl/xas4P81xef/H7fk/xWx4/8XteT/F7jm/xe45v8brd7/H53S/yCSy/8flMz/HZ7U/xuq3P8ZtOP/ + GLnm/xe86P8Xvej/F73o/xe86P8Xu+f/GLvn/xe86P8XvOj/F7vo/xe65/8Xuuf/F7rn/xe65/8Wuuj/ + Frvp/xW86f8Vvur/FcDr/xbC7f8TxO7/Ms7v/xzI7/8Ty/L/Fc3z/xXQ9f8V0vb/FdT2/xXW9/8W2Pj/ + Ftn4/xfa+f8X2vn/F9v5/xfb+f8X2/n/Jt75/0zl+P9c5/j/XOf4/1vn+P9b5/j/WOf4/z7i+f8e3vr/ + Mtj3/y/a9/8X3Pn/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8Y2/n/GNr5/xja+f8V2vn/Htv5/zbe9/wk3/r/E8DtuQAAAAAAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIACAAAAAGu44SsDt+v8 + Gbvr/xSp4v4Vod//FKPh/xKo5f8SrOf/E67m/xSs4/8WqeD/FaTc/y+64v8dqdz/FqTb/xeo3f8apdr/ + IZnQ/yOOyP8dj8r/HKDV/xqs3v8Xr+H/F67g/xer3f8XqNv/GKfb/xeo2/8XqNz/F6nd/xiq3v8Yq97/ + GKzf/xet4P8XreD/F6zg/xes4P8XrN//Fqzg/xWt4f8VruL/FLDj/xWy5P8UtOX/FLfn/xK56P8nxOz/ + GsLs/xPC7v8Uxe//FMjx/xTL8/8UzvT/FdD2/xXT9v8V1vf/Fdj4/xbZ+P8W2vn/F9r5/xfa+f8j3fn/ + SOX4/13p+P9e6fj/Xun4/17o+P9W5/j/MuH5/yLe+f841vX/It35/xbb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8W2/n/Ftr5/yXc+f843vj+ + MeD5/xTP9fMWm94uAAAAAICAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAICAgAIAAAAAaLPZGwO06fIave3/FKrj/hSi4P8TpOH/E6jl/xKr5v8TquT/ + FKbf/xah2/8Umtb/Ka3c/x2g1/8VmtX/HJjS/yWNx/8gh8T/HZPO/yWt3P8krdz/GZ7U/xeY0f8Xl9D/ + F5nR/xia0/8Ym9T/F53V/xed1f8Xn9b/GKDX/xeg2P8Xodj/F6HZ/xeh2P8Xodn/F6DZ/xah2f8Wotr/ + FaPb/xWk3P8Upd3/FKfe/xSq4P8UrOL/Eq7j/xq25v8Vt+j/Erjp/xK86/8SwO3/EsPv/xLH8f8TyvP/ + E830/xTQ9f8U0/f/FNX3/xXX+P8W2Pj/Ftr5/x7b+f9C5Pj/Xen3/1/p9/9e6ff/Xun3/07l9/8n4Pn/ + Ldr3/zXX9v8Z3fr/F9r5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8Y2/n/FNr5/x/c+f824Pn/Q+H5/j/i+vwa2Pf/EKXhXQAAAAAAVaoDAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAABbpNsO + A7Dm5hq/7f8Uq+T+FKPh/xOk4v8TqOX/E6nl/xSn4v8Vodz/FpzX/xWV0v8hoNb/HZvT/xqQzf8licX/ + H4XE/yeh1P82ueD/J6LU/xmNyf8YjMn/GI7L/xiQzP8Ykc3/F5LO/xeUz/8XltH/F5fS/xiZ0/8XmtT/ + F5rU/xea1P8XmdP/F5jT/xeZ1P8XmdT/FpnV/xab1v8WnNf/FZ3Y/xSf2f8Uodr/FKPd/xSl3/8TqOD/ + Eqri/xKt5P8SsOb/EbPo/xG36v8Ru+z/EL/u/xDC8P8RxvL/Ecrz/xLN9f8S0Pb/E9P3/xTW+P8V2Pj/ + Gdn5/zjh+P9Z6Pb/X+r3/1/q9/9b6ff/PuP3/yLf+v821/X/Kdz4/xbb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xPa+f8t3vn/S+P6/1Dk+v9M5fr8 + Itz5/w+e2nYAAAAAAFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEEquLSGcHv/xOr5f0UpeL/E6Tj/xOo5f8TqOT/ + FKXg/xWe2v8WmNT/F5PQ/xmU0f8ck8//I4jF/yCGxf81stz/Pb3h/x6Qy/8Wg8P/GIfG/xiJx/8Yisj/ + GIzK/xiPzP8Ykc7/F5PP/xeU0f8XldH/F5XR/xeU0P8Xk9D/F5PQ/xeS0P8Xk9D/F5PQ/xeU0f8WltP/ + FpbU/xWX1f8Vmdb/FZrX/xSd2f8Un9v/FKLc/xOj3v8TpuD/Eqji/xKq4/8RreX/EbHn/xC06f8QuOv/ + ELzt/xC/7/8Pw/H/D8fz/xDK9P8Rzvb/EdH3/xPU+P8U1vj/LN34/1Hn9v9d6fb/Xen2/1Dn9v8r4Pj/ + J9z4/zjW9f8d3fr/Ftr5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8T2vn/POH5/2Dm+v9a5fr/UeX6/ifb+P8Pm9h1AAAAAACAvwQAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C + AAAAAAOk4LwZwvD/FKzl/BSl4v8TpuP/E6jl/xOn5P8Uo9//FZzZ/xaV0/8XkdD/FpDP/x2Nyv8ihML/ + ObPb/0C/4f8Yh8b/FoLC/xmHxf8YiMj/GIvK/xeOzP8XkM7/F5HP/xeRz/8Xkc//F5DP/xeQz/8XkM// + F5DO/xeQzv8XkM7/F5DO/xeQz/8XkdD/F5LR/xaU0v8WldP/FZbU/xWY1f8Umdf/FJvY/xSe2v8ToNz/ + E6Ld/xOj3/8SpeD/Eqfi/xGq5P8Rreb/EK/n/xCy6v8Qtuz/D7rt/w+97/8OwfH/DsTz/w/J9P8PzPb/ + D8/3/xDS+P8e2Pj/ROT3/1rp9v9V6Pb/O+L3/x7e+f8y2Pf/L9r3/xfc+v8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/Etr5/0Ti+f9b5fr/NuH6/yjg+vwf3vr/ + EL7rpAAAAAAAgL8EAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wMAAAAAA53boRnD8P8Ur+f7FKfj/xOm5P8TqOX/ + E6fj/xSi3v8Vm9f/FpXT/xeS0P8XktD/HYjH/zCdz/9FxuT/GY3L/xeHx/8ZjMr/GI3M/xePzf8Xj87/ + F4/O/xePzv8Xj83/F4/N/xeOzf8Xj83/F47N/xePzf8Xjs3/F47N/xePzf8Xj83/F4/O/xeQz/8XkdD/ + FpPS/xaV0/8VldT/FZfV/xSZ1v8Um9n/FJ3a/xOf2/8Todz/EqPe/xKk4P8RpuH/EKjk/xCr5f8Qref/ + D6/o/w+y6/8PtOz/D7nu/w688P8OvvL/DsLz/w7G9f8Oyvb/Ds33/xLS+P8s3Pf/ROT2/zvi9/8g3Pj/ + INz5/zjV9f8h3fn/Ftv5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + GNv5/xLa+f9A4fn/SOP6/xjc+f8T2Pj/FcXx/BW36v8Vu+pWAAAAAACAvwQAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ////BAAAAAAEldiCGcTw/xOx6PsTqOT/E6fk/xOo5f8Tp+P/FKLf/xWc2P8XktH/GYXH/xp5vf8ce77/ + PbXb/zCt2v8TiMr/GZDO/xiOzf8Yjs3/GI7N/xiOzf8Yjs3/GI7N/xiOzf8Yj87/GJDP/xiQz/8YkM7/ + GJDO/xiQzv8YkM7/GI7N/xePzv8Xj87/F5DP/xaS0f8Wk9L/FpXT/xWW1P8VmNb/FJrX/xSb2f8Untr/ + E5/b/xOh3f8So9//EqTg/xGm4f8QqOT/EKrl/w+s5v8Prun/D7Hq/w6z7P8Ote7/Dbjv/w278f8NvvP/ + DcH0/w3F9v8Nyff/Dcz4/xPS+f8d1/j/Gdj5/xLY+v8r1/j/M9f2/xfc+v8W2vn/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xjb+f8S2vn/NuD6/zzh+f8R2vn/Gtb3/x/D7/8brOX7 + GKjk/xbW9nUAAAAAAL+/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8EAAAAAAON02IZw/D/FLLp/BOq5f8Tp+T/ + E6jl/xOo5P8UoN3/F4vL/xl4vf8acLf/Gna7/xmBw/86tNz/J6DU/xWKy/8Zj83/GI7N/xiOzf8Yjs3/ + GI7N/xiOzf8Yj87/GIzM/xmFxv8ZfsD/Gnm7/xp4u/8aeLz/Gnm9/xl/wf8Yjcz/F4/O/xeQz/8XkdD/ + FpLR/xaU0v8VldT/FZfV/xWZ1v8Umtj/FJzZ/xOe2/8ToNz/E6Le/xKj3/8RpeH/Eabi/xCp5P8QquX/ + D6zn/w+t6f8OsOr/DrLr/w207f8Nt+//Dbrx/wy88/8MvvT/DMH1/wzF9/8MyPj/DMv5/wzO+f8M0fn/ + FNb7/zPT9v8j2Pn/Etn5/xXa+f8W2vn/Ftv5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/ + E9r5/yre+f834Pr/E9r5/yHZ9/8ky/L/H8Dt/xrE7/gWzvT/FLzriQAAAAAAgL8EAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAP///wMAAAAABIPNQhjB7/8Tter9E6vm/xOn5f8SqOb/FKHf/xiHyf8Zdrz/GHu//xmLyv8Yks// + FYzM/zSv2v8jnNL/FovM/xiOzf8Yjs3/GI7N/xiOzf8Yj87/GIvL/xmAwP8acrT/G2qv/xtssf8bcrb/ + Gni7/xp7vv8Ze7//GX3A/xiJyv8Yjcz/F43N/xeQz/8WktH/FpXT/xWW1P8Vl9X/FJnW/xSb2f8Undr/ + E5/b/xOh3P8Tot//EqTg/xGl4f8Rp+P/EKnk/w+r5v8PrOf/Dq7p/w6w6v8Osuz/DbPu/wy27/8MufD/ + DLvy/wy99P8LwPX/C8H3/wvF+P8LyPn/DMv6/wrN+/8d0vn/MdH2/xTX+/8Q1vr/E9j5/xXa+f8W2vn/ + Ftv5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xXb+f8e3Pn/Md/5/xbb+f8l3vj/KNj1/x7R9P4Y1vf7 + FuD8/xK25rkSgMgOAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AgAAAAAAfMglGLzs+RW46/8SrOb+ + E6jl/xOl4/8XjM3/GHvA/xiIyv8dm9b/GZXR/xiQzv8Vi8z/LajX/yGZ0v8Wi8z/GI7N/xiOzf8Yjs3/ + GI7N/xmExf8ac7T/G2uu/xpytf8Zfr//GYbG/xiIyP8YiMf/GIfH/xiHx/8YiMj/GIjI/xiJyf8XjMv/ + F47O/xaR0P8WlNP/FZbU/xWY1v8Umtf/FJvZ/xSe2v8Tn9v/E6Hd/xKj3/8SpOD/Eabh/xCo5P8QquX/ + D6vm/w+t6P8Orun/DrHr/w2y7f8NtO7/DLbv/wy58f8MuvP/DLz0/wu+9f8KwPf/CsL4/wrG+f8KyPr/ + C8z8/yjO+P8i0fn/C9L6/w/U+v8R1vr/E9j5/xXZ+f8W2vn/Ftv5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + GNv5/yje+f8b2/n/L9/4/yzg9/8d2ff+F9z5+xXc+v8Sq+GgAGaZBQAAAAAAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAD///8BAAAAAABqvwwYtunjFbvt/xKr5v0Tqeb/FZrZ/xiBxf8Yi83/KbDg/xyc1v8Wj8// + GJDO/xaMzP8kndP/IJjR/xaMzP8Yjs3/GI7N/xiOzf8Zf7//G26w/xpxs/8ZgMH/GIjI/xiGxv8Yg8P/ + GYHC/xmCwv8Zg8P/GYPF/xiFxv8Yh8j/GIrK/xeMzP8Xj8//FpPR/xWV1P8Vl9X/FZnW/xSa2P8UnNn/ + E57b/xOg3P8Tot7/EqPf/xGl4f8Rp+L/EKjk/xCq5f8PrOf/D63p/w6v6v8Osev/DbLt/w217v8Mt/D/ + DLny/wu68/8Lu/T/Cr72/wrA+P8Kwfn/CsT6/wnH+v8SzPz/K8z3/xHO+/8Lzfv/DdD6/w7T+v8R1vr/ + E9j5/xXa+f8W2vn/Ftv5/xfb+f8X2/n/F9v5/xbb+f8e3Pn/G9z5/zfe+P874fj/G9v4/Rbd+vwU1/j/ + Ep/bfwAAAAAAVaoDAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABaw5McVve7/ + Eq3n/BOo5P8XktH/FYTI/yiv4P8nsOD/E5LS/xiS0P8Xj87/F47O/xyV0P8dldD/F43M/xiOzf8Yj87/ + GYDA/xtvsP8aerv/GIjH/xmGxv8ZgMH/GX+//xiAwf8ZgsL/GYLD/xmExP8YhcX/GIjI/xiKyv8Xjs3/ + F5DQ/xaT0f8WldP/FZbU/xWZ1f8Umtf/FJvZ/xSd2v8Tn9v/E6Hc/xOi3/8SpOD/EaXh/xGn4/8QqeT/ + D6vm/w+s6P8Orun/DrDq/w6y7P8Ns+7/DLbv/wy48P8MuvL/C7r0/wu89f8Kvvf/CsD4/wrB+f8JxPr/ + CMf8/x7L+v8hy/j/Ccr8/wvL+/8Mzfv/DdD6/w7U+v8R1vr/E9n5/xXa+f8W2/n/F9v5/xfb+f8X2/n/ + GNv5/xPb+f823vn/SeD4/x3b+PwW3vv/FM/1+hKX1WIAAAAAAIC/BAAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAFWqqgMAAAAAF6bgpBW/7v8Tr+j7E6fj/xeNzf8XkdH/MsDo/xqi3P8VltT/ + F5PR/xeQzv8Zhcb/Gnu//xmMy/8Yjs3/GI/O/xmIx/8bc7P/GYTC/xiOy/8ZgcH/GX69/xl+v/8ZgMD/ + GIHB/xmExP8Yh8b/GInJ/xiMy/8Xjs3/F5DP/xeR0P8Wk9H/FpXS/xaW1P8VmNX/FJnX/xSc2P8Untr/ + FJ/b/xOg3P8Tot3/EqPf/xKk4P8RpuL/EKjk/xCq5f8Pq+b/D63o/w6u6f8Osev/DbLt/w207v8Mt+// + DLnx/wy68/8Lu/T/Cr31/wq/9/8KwPj/CcH5/wjC+v8MyPz/J8r3/xLK/P8JyPz/Csn7/wvL+/8Mzfv/ + DdH6/w/V+v8S1/r/FNn5/xba+f8X2/n/F9v5/xjb+f8T2/n/K9z5/1bg+P8i2vj7FN/7/xTG7ucVitE9 + AAAAAACAvwQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIC/BAAAAAAXndl6 + FcDv/xOx6fsUqOP/FozN/xua1v8xwen/FZ/b/xaY1v8XkdD/GYHE/xlyuP8Zd7z/GIrK/xiOzf8Yj87/ + GX+//xmDwP8Xm9H/GYHA/xl9vf8ZgcD/GYTE/xiHx/8Yisr/GI3M/xiOzf8Yjs3/GI7N/xePzv8XkM// + F5HQ/xaT0f8WldP/FZfV/xWZ1v8Um9f/FJ7Z/xSf2/8Todz/E6Ld/xKj3/8SpN//EaXh/xGn4v8QqOT/ + EKrl/w+s5/8Pren/DrDq/w6x6/8Nsu3/DbXu/wy38P8MufL/C7rz/wu89P8Kvvb/Cr/4/wrB+f8Jwvr/ + B8P7/xfJ+v8kyfj/Ccj9/wnH/P8KyPz/Csn7/wvL+/8Mz/v/DtP6/xHW+v8U2fn/Fdr5/xfb+f8X2/n/ + Ftv5/xnb+f9V3/n+L9z5+hHe+/8UuunPD4fLIgAAAAAAgL8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABVqqoDAAAAABeS1E0Uvu7/E7Pq/RSq5f8Wj8//G5rV/zHC6v8Vod3/ + FpjW/xiFx/8YeL7/HIvJ/x+Y0v8Xjs3/GI7N/xiPzv8ZgMH/F5rQ/xeWzv8Yg8T/GIrJ/xiMy/8Yjs3/ + GI7N/xiOzf8Yjs3/GI7N/xiOzf8Xj87/F4/O/xeQz/8WktD/FpTS/xaV1P8VmNX/FZrX/xSe2f8Uodz/ + FKLd/xOj3f8TpN7/E6Tg/xKl4f8RpuH/Eajj/xCp5P8Pq+b/D6zo/w6u6f8OsOr/DbLs/w2z7v8Mtu// + DLjw/wy68v8LuvT/C731/wq+9/8KwPj/CcH5/wnC+v8Ixvz/I8n4/xjJ+v8Hxvz/Ccf8/wrH/P8Kyfz/ + C8v7/wzO+/8N0vr/ENb6/xPY+f8V2vn/Ftv5/xjb+f8R2vn/P9z4/D/g+vwO2fn/E6rhnwBxxgkAAAAA + AFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgAIAAAAA + FYrPJRS56vgVt+v/Eq3n/hWU0/8alNL/MsLq/xal3/8WktL/F3/D/x6Qzf8vrdr/G5LP/xeNzf8Yjs3/ + GI/N/xmHx/8XodT/F5fR/xiNzf8Yj87/GI7N/xiOzf8Yjs3/GI7N/xiOzf8Yjs3/GI7N/xePzv8Xj87/ + F5HQ/xaT0f8Wl9T/FpnW/xWc2P8Vntn/FJ/a/xSi3f8Tpd7/E6bf/xKm4f8Sp+H/Eqfh/xGo4/8QqeT/ + EKrl/w+r5v8Prej/Dq/p/w6x6/8Nsu3/DbTu/wy37/8MufH/DLrz/wu79P8KvfX/Cr/3/wrA+P8Jwvn/ + CMP6/xDI+/8myff/DMj8/wjF/P8Jx/z/Csf8/wrJ/P8Ly/v/DM77/w3S+v8Q1vr/E9j5/xXa+f8X2/n/ + FNr5/SHb+ftD4vv/Ec7z+BOZ12wAAAAAAICAAgCAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAgKoGE7Hl2BW77P8Srej9FZva/xeMzf8xv+j/ + G6nh/xaMzf8Xh8j/M7Ld/yKd0/8Visz/GY/N/xiOzf8Yj87/GIXG/xef0v8XmNH/GIzM/xiOzf8Yjs3/ + GI7N/xiOzf8Yjs3/GI7N/xiPzv8YkM7/F5HP/xeR0P8XkdD/Fo/O/xeLy/8Yhcf/GILE/xiDxP8Xh8f/ + FZrW/xOo4P8TqeH/Eqrj/xKq4/8RqeP/Eank/xCq5f8Pq+X/D6zn/w+t6f8OsOr/DrHr/w2z7f8Nte// + DLjw/wy58v8LuvP/C7z0/wq+9v8Kv/j/CsH5/wnC+f8HxPv/HMn5/x/J+f8Hx/3/Ccb8/wnH/P8KyPz/ + Csn7/wvL+/8Mz/v/DtP6/xHW+v8U2fn/FNn5/hbb+fwU3/v+I9r5/xu458kQiM4vAAAAAACAvwQAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AFWqAwAAAAATpt6rFb7u/xKv6PwVpOD/FIjM/y224/8iseP/E4nM/x6V0P8zst3/Fo7N/xiOzf8Yjs3/ + GIzM/xp3vP8abrX/GJDM/xee0/8Yjs3/GI/O/xiPzv8YkM7/GJDP/xiPzf8YjMv/GInI/xmDxP8Zfb// + Gna5/xtvtf8bbbP/GnO3/xmAv/8Xj8r/FpbR/xWa1v8Uo93/E6nh/xOs4/8SruX/Eq7l/xKt5f8RrOb/ + EKzm/w+s5v8PrOj/Dq7p/w6w6v8Nsuz/DbPu/wy27/8MuPD/DLry/wu69P8LvfX/Cr73/wrA+P8Jwfn/ + CcL6/wrH/P8myfj/E8n7/wfG/P8Jx/z/Csf8/wrI/P8Lyvv/DM37/w3Q+v8P1fr/Etf6/xTY+fwV3fr9 + Fdr5/xO76tcSl9ViAGaZBQAAAAAAVaoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQL8EAAAAABSZ13MUwO7/E7Hp+xSq5f8Ui87/ + Jabb/yq65/8Sic3/IZnS/y+v3P8Vjc7/GI/O/xiOzf8aeL3/G2iw/xl+wP8Yjc3/F5PP/xiPy/8YiMj/ + GYjI/xmExP8afL7/Gna4/xpws/8ba6//G2mu/xtssf8ad7j/GIjD/xed0P8Vqtn/FKvc/xSh2f8VmtX/ + FZrW/xSd1/8Uotr/E6rh/xKx5v8Ssuf/EbHn/xGv5/8Qruf/EK3n/w+t6P8Or+r/DrHr/w2y7f8NtO7/ + DLfv/wy58f8MuvP/C7v0/wq99f8Kv/f/CsD4/wnC+f8Hw/r/E8j7/yXJ9/8KyP3/Ccb8/wrH/P8KyPz/ + C8r7/wvM+/8Mz/v/DdP6/xDV+v8T1/n7FN77/xLH8O0TmNdtAICqBgAAAAAAgIACAICAAgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABVqgMAAAAAEYrPOxS97f8Uter+E63o/xSW1v8clNH/L8Dp/xWQ0P8clND/L7Dd/xaPz/8Xkc// + GYPF/xtss/8Ze77/GIzL/xiPzv8ZhcX/G3W1/xtwsf8bdbb/Gna2/xp1tv8aerr/GYG//xmLxf8Yl83/ + F6PU/xar2v8Vq9z/FaPZ/xaX0/8Wjs7/FovL/xaNzP8Wjsz/FpDN/xaTzv8VnNX/E63i/xK16f8RtOn/ + EbLo/xCw6P8Pruj/Dq7p/w6w6v8Osev/DbPt/w217/8MuPD/DLny/wu68/8LvPT/Cr72/wq/+P8Kwfn/ + CcL5/wfF+/8fyfn/Hcn5/wfH/f8Kx/z/Csj8/wvK+/8Ly/v/DM77/w3S+v8Q1fr/Etb5+xPc+/8StejE + EIDHIAAAAAAAgIACAIC/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAASgMgOE7Pm5BW67P8Srej9 + FKPg/xWKzP8tuuX/HJ7Y/xaMzf8usN7/GpXR/xeOzv8ad7z/Gne7/xiNyf8Yjs3/GIrJ/xt0tf8bbq// + GoO//xmWzP8Yms//F53S/xeg1P8XodX/F6LV/xee1P8XmdP/FpPR/xeOz/8WjM3/FozM/xeMy/8Wjcv/ + Fo3L/xeNy/8Xj8z/F5DM/xeUzv8Uptv/Erfp/xG46/8Qter/ELLp/w+w6f8OsOn/DrHq/w2y7f8Ns+7/ + DLbv/wy48f8MuvL/C7r0/wu99f8Kvvf/CsD4/wnB+f8Jwvr/C8f7/ybI9/8Syfv/CMf8/wrI/P8Lyvv/ + C8v7/wzO+/8N0vr/D9T6/xHW+vsS2vr/EarhogBmmQUAAAAAAIC/BAAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAICAAgAAAAATpd+vFb7u/xKt5/wUqub/FI3Q/yWn2/8kseL/EojL/yeo2v8gntX/ + FojJ/xpzuf8ZjMj/GJXO/xiNzf8Zfb3/G2+w/xmEwf8XmM//GJTP/xeSzv8Yks7/GJDO/xiOzf8Xjs3/ + F47O/xePz/8XkM//F4/O/xaOzf8Wjsz/Fo7M/xaPzf8Wj83/FpDN/xeSzf8Xk83/F5TN/xWh1/8SuOj/ + Ebzt/xC36v8Qs+r/D7Hq/w+x6v8Osev/DbLt/w207v8Mt+//DLny/wy68/8Lu/T/Cr31/wq/9/8KwPj/ + CcL5/wfD+v8TyPv/Jcn4/wvJ/P8KyPz/Csn7/wvL+/8Mzvv/DdL6/w/U+v8R1vr7E9r6/xOo4JYAAAAA + AICAAgBVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgL8EAAAAABKX1nEUv+7/ + E7Hn+xOr5/8Um9r/G5PQ/ym65/8UktL/G5jT/yOk2f8XgsX/GXe9/xie0f8YlM//GInJ/xt0s/8afLv/ + GJPN/xiPzf8Yjc3/GI3N/xiNzf8Yjc3/F4/O/xeQz/8Xkc//F5HP/xaRz/8Xkc//FpHP/xaSz/8Wks// + F5PP/xeUz/8Wlc//FpbP/xaXz/8Xls//FaPY/xK66f8Rvu3/ELjr/xC06v8Pser/D7Hq/w6y7P8Ns+3/ + DbXv/wy48P8MuvL/C7rz/wu89P8Kvvb/Cr/4/wrB+f8Jwvn/B8T7/xzJ+f8fyvn/CMj9/wvJ+/8Ly/v/ + DM37/w3R+v8P1fr/Edb6/BPc/P8SseSqAAAAAABVqgMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAgAIAAAAAFojOLxO46/0Vter/Eqvm/hSm4/8VjM7/Ja/h/xqm3v8Uk9P/ + HJzW/xqBxP8ZgcP/GKfW/xiPzv8ZhMP/G3Oz/xiJxv8YkM3/GI7N/xiOzf8Yjs3/F4/N/xePzv8XkM// + F5LP/xeT0P8WlNH/FpXS/xaX0v8WmNP/FpnT/xaa0/8WmtP/FprT/xaa0v8WmtL/FpnQ/xea0f8Vq93/ + Er7t/xC+7f8QuOv/D7Tr/w+y6/8Psev/DbLs/w2z7v8Mtu//DLnx/wy68v8Lu/T/C731/wq+9/8KwPj/ + CcH5/wnC+v8Jxvz/JMn4/xXK+/8IyPz/C8r7/wzM+/8N0Pv/DtT6/xDW+v0U2/v/EsLt2RCAvxAAAAAA + AICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAB + E6zizRW77f8Sq+b9FKrm/xWW1/8dnNb/HrDk/xOc2f8Wl9T/GX/D/xiNyv8Xqdj/GIzN/xl/vv8adrf/ + GIzJ/xiOzP8Yjs3/GI7N/xePzf8Xj87/F5DP/xeT0P8XltL/FpjU/xac1v8Vn9j/FaPa/xWm3P8Vqt7/ + Fazf/xas3/8WrN7/Fajc/xaj2P8WnNP9FqHV/xS25f8Swu7/EL3t/xC47P8PtOv/D7Lr/w6y6/8Nsu3/ + DbTu/wy37/8MufL/C7rz/wu79P8Kvfb/Cr/3/wrB+f8Jwvn/CMP6/w7I/P8nyff/Dsr8/wnI/P8Ly/v/ + DM77/w7S+v8Q1fr/Etn6/hTU9/8Rx/JNAAAAAAC/vwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIC/BAAAAAAUmteBFb3t/xOu5/sTqeX/FKPh/xeR0v8ereH/ + FaHc/xaZ1v8ZgMT/GJfP/xeo2P8Yi8z/Gny7/xp7uv8Yjcr/GI7N/xiOzf8Xj83/F4/O/xeQz/8Xk9D/ + F5jT/xec1v8Xotr/Fqje/xav4v8VteX/Fbro/xa+6v8Vwuz/FsTu/xbF7v8Vw+3+Fb3p/BWy4f4UruH9 + E8Dt/xHB7v8Qu+z/ELbs/w+z6/8Psuv/DrLs/w2z7f8Mte//DLjw/wy68v8LuvP/C7z1/wq+9v8Kv/j/ + CcH5/wnC+f8HxPv/Fcn7/yTJ+P8Kyf3/Csn7/wzM+/8N0Pv/D9T6/xHX+vwU2fn/E8/0vgAAAAAAgIAC + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAC + AAAAABWHyzETt+r9FbTp/xOp5P4UqOX/FZfX/xmg2/8Yp+D/FpvX/xiEx/8Xm9H/F6fY/xiKzP8ae7v/ + GX29/xiNy/8Yjs3/GI7N/xePzv8XkM//F5PQ/xeY0/8Xntf/F6Xc/xat4P8WteX/Fr3p/xbD7f8Wx+// + Fsrx/xbN8v8WzvP/Fc70/BXT9v0UzfT/E53XrBK05uASxPD/D77t/hC46/8PtOv/D7Lr/w+y6/8Nsuz/ + DbTu/wy27/8MufH/DLrz/wu79P8LvfX/Cr73/wrA+P8Jwfn/CcP6/wfF/P8cyfn/H8r5/wjJ/P8Lyvv/ + DM37/w3R+v8Q1fr/Etj6/BTW9/8S0/ViAAAAAACqqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSn4cIVuuz/E6rl/BSo5f8VoeD/ + FpjW/xWl3/8Wn9n/GIjK/xed0/8Xp9j/F4vM/xp8u/8Zfr3/GI3M/xiOzf8Xj83/F5DO/xeS0P8XltL/ + F53X/xel2/8XruH/Frjm/xbA6/8Wxu//Fsvx/xbP8/8V0fT+FtH1+xbW9v0V1vf/EsTv+RSS0mcVjMtJ + EcTx/xC/7v4Quuz/ELXr/w+y6v8Psuv/DrLr/w2y7f8NtO7/DLfv/wy58f8LuvP/C7v0/wq+9v8Kv/f/ + CsH5/wrD+f8Jxfr/CMj9/yLK+P8ayvr/CMn8/wvL+/8Mzvv/DtP6/xDW+v4U2fn/E9X3/RPT8ykAAAAA + AICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABVqgMAAAAAFJLVZxW77P8Urub8FKjj/xSn5P8VnNr/FaHc/xWj3f8Xj8//F5zT/xen2P8XjM7/ + GYC//xp/vv8Xjsz/F4/O/xePzv8Xkc//F5XR/xeb1f8Xo9r/F63g/xe45v8Xwuz/Fsnw/xfP8/8W0vX/ + FdP2+xXY9/4V2fj/E8jx/BKn4KoPg8khAHHGCRO46dsRwu//ELnr/RC16v8Qsur/D7Hq/w+x6/8Osuz/ + DbPt/wy17/8MuPD/DLry/wy78/8LvvX/Cr/2/wrA+P8Kwvn/CsX6/wrH+/8Kyf3/Jcv3/xbM+v8Jyvv/ + DM37/w3Q+/8O1Pr/ENb6/hTa+f8U1fbnEczuDwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAVgMoYE7Dm6RW26f8UquT+ + FKjk/xSk4f8VoNz/FaTe/xaY1f8XmtP/F6XX/xeOzv8YhMP/GYC//xePzv8Xj87/F5DO/xeT0P8XmdP/ + F6DX/xeq3v8XteX/F8Dr/xfJ8P8Xz/T/FdT2/RXY9/wV2vn/Esry+xKp4K4Th881AAAAAAAAAAASq+Ku + EsLv/xC36/wQter/ELLp/w+x6f8Pser/DrHq/w207P8Nte7/Dbjv/w268f8Mu/P/DL30/wu/9f8LwPf/ + C8P4/wvG+f8LyPr/C8j6/w3M/P8pzPf/Fs76/wrM+/8Nz/v/DdL6/xDV+v8S1/r9Fdr5/xTV99gAgIAC + AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAFWqAwAAAAAUmdeOFbzs/xWt5vwUquT/FKrk/xWn4f8Vp9//F5/Z/xeX0v8WntT/ + F47O/xiJyP8ZgsH/F47N/xePzv8XkM7/F5TR/xec1f8Xpdv/F7Di/xe96f8Xx+//F8/z/xXU9v0V2vj+ + EtD0/hOn36USiNArAAAAAAAAAAAAgIACE6jgpBLA7v8Qtur7EbPp/xCx6P8PsOj/D7Dq/w+x6v8Psuv/ + DrTu/wy17/8LuPD/Crvz/wq+9P8KwfX/CsT3/wrG+P8JyPn/Ccn6/wnK+v8Jyvv/C8z8/yrM9/8Yz/r/ + Cs76/w7S+v8P1fr/Etf6/xPZ+f0W2vn/Fdb20QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAAAAABSDyycUtef0 + F7nq/xSv5v4VruX/Fa/l/xWr4f8Wn9j/F5PQ/xeSz/8Xj83/F43M/xiIx/8Xjs3/F47N/xeOzf8Xkc// + F5zV/xep3v8XtuX/F8Ps/xfL8f8W0fX8Ftr5/xPC7eUSjNNFAAAAAACAgAIAAAAAAIC/BBOn36USvu3/ + EbTo+xGx6P8RsOf/D67n/w+v6P8PsOr/D7Hr/wyy7f8MuO//EcLx/xjI8/8cyfT/IMj0/yHH9P8gyfb/ + IMz3/yDP+P8f0vn/HdX6/xzX+/8b2/z/NNr4/yzb+v8R2/z/ENj7/xDV+v8S1vn/FNn5/Rba+f8X1vfT + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABOd2ZQWw+//Frnq+xa46f8Wt+j/FrDj/xad1/8XkM7/ + F43N/xeOzf8Xjs3/F43M/xeOzf8Xjs3/F47N/xePzf8Xl9P/F6re/xe75/8Xxu7/Fs7z/RfZ+P8Tv+va + EIDHIAAAAAAAgL8IAAAAAAyAxRYTrOO/Ervr/xGy5vsRr+b/Ea7m/xCt5v8Qref/D6/p/w6v6v8OtOz/ + GcLw/yXB8P8orO3/JZPr/yGC6v8eeuv/HXbr/x126/8deOv/Hnvs/x9+7P8gguz/IYbs/yKP7P8wnu7/ + O7Lv/y7B9P8o0Pb/Jd/5/x/j+v8X3/r9Ftr5/xLV994A29sHAAAAAAAA/wEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgAIAAAAA + EIDHIBK26OsXyPH/FcHt/RbB7f8WvOr/F63g/xad1/8WltL/F5PQ/xeSz/8Xkc//F5DO/xePzf8Xjs3/ + F47N/xeSz/8Wpdv/F7zo/xbH7/4X0vX/E8Tv7BOGzCgAAAAAAIC/CAAAAAAWjc4vE7Lk2xK56v8Rr+X7 + Eq3l/xGs5f8QrOX/EKzm/xCu6P8Nrun/Fbvt/yrA7v8qnOr/Hnbp/xZo7P8UaO//FGvx/xRt8f8UbvH/ + FG7x/xRt8f8UbfH/FGzx/xRr8P8UavD/FGjv/xVo7/8Zbe7/GGvs/xtz6/8ih+z/Kafv/yzL9f4o4/r/ + G+H688T19RoAAAAAqqr/AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAFY/TYhTI8f8WzPP8Fcnx/hfI8P8Xxe3/ + F7zp/xe15f8XseL/Fq3g/xSo3f8Vo9r/F53W/xeV0f8Xj87/F4/O/xaf1/8Xuuf/Fsrw/RXL8v8SmdhV + AAAAAABttgcAAAAAFZnXXxO35/UStuf/Eazk/BKr5P8RqeP/Eark/xGq5f8QrOf/Dq7p/x6/7f8tq+r/ + IHfo/xRn7f8UbfH/FnLy/xZy8f8WcfH/FnDx/xZw8P8WcPH/FnHx/xZx8f8WcvL/FnLy/xZz8v8Wc/L/ + FnLy/xZv8f8WbPD/Fmfu/xVh6/8WXOn/GmPn/yOA6f0hrO//w+z5UQAAAACqqv8DgID/AgAA/wEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAgAIAAAAAEpjYixXR9f8X0/b7FtD0/hfQ8/8XzvP/F83y/xfL8f8ayvD/Isru/xvB6v8WteT/ + Fqjd/xaY0/8Xj87/FprU/xa25vwWxu//EsHsrAAAAAAAgIACAICqBhWk3ZQUvOr/EbHl/RGr4/0SquP/ + Eqji/xKo4/8QqeT/EKrm/w6s5/8jv+z/LZzo/xdo6v8UbPH/FnLy/xZw8f8Wb/D/Fm/w/xZx8f8WcvP/ + FXLz/xZx8v8Wb/D/F27v/xds7v8Xae3/GGXr/xhh6f8ZXOb/Gljj/xtU4v8bU+H/G1Ph/xtU4f8aU+L/ + GE7h/hZP4f8nZuLtgKfsk+Ds+SkAAAAAAAD/AYCA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAFJ/bmhXU9v8X2fj8 + F9T2/RfV9v8Y1fb/FNP1/yXY9f9d6/X/YOz1/y7O7v8Ut+b/F6jc/xeU0f8VmNP+FrXl/xTA7PcRxu4t + AAAAABCExR8VsuTDFLzq/xKw5PsSq+L+Eqjh/xKn4f8Sp+L/Eafj/xCq5P8Oqub/Ibzr/yyY6P8VZez/ + FXHy/xZx8f8Wb/D/FnDw/xVz9P8Vc/T/Fm7w/xlk5/8bWuD/G1ff/xtV3/8cUt3/HU/b/x1N2/8dS9r/ + HUra/x1K2v8dS9v/HE3d/xxO3f8cT97/HE/f/xtQ3/8bUeD/G1Th/xVQ4v4IS+D/IV/i836k7JTn7/cg + AAAAAKqq/wMAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAQCAgAIAAAAAFJbVgRTO9P8X3vr+F9n3/BfY+P4Y2ff/F9f3/x7X9v8o1/T/ + Hczw/xbC7P8Xt+b/FqTb/xWj2fsWuOb/E7DjkgAAAAAViMw8FLrp5BS66f8Sr+P7E6vh/xOn4P8SpuH/ + Eqbh/xGm4f8RqOP/Dqjk/xq36f8vo+j/Fmbr/xVx8v8WcfH/Fm7w/xZx8/8VcvP/G2Lh/yJOyP8mQ7v/ + KT21/yk7tP8nPbn/JETD/yBN0v8eVdz/IV3g/yJi4/8hXuH/IFnf/x9W3v8fVd7/H1Td/x9W3v8gWN// + IF7i/yFj5v8gZef/HWTo/h9j6fwYWuf+CEvh/yVi4uyiv/Fr////AgAA/wEAAP8BAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBVqgMAAAAA + EozRVBO86uYW2/r/F936/Rfa+PwX2fj9Fdf3/hPS9f8VzfP/F8jv/xfC7P8Wuef9F7rn/xO66PELhcgX + E4PNKRS55+4Uuej/E67j+xOq4f8TpuD/E6Xg/xKl4P8SpeD/Eabi/xCo5P8Qrub/LLTp/xxw6P8UbvL/ + FnHx/xZv8P8VdvX/GGrp/yRLxP8qO6//LDeq/yw2qv8oP7b/JEjC/yRGwP8oP7j/KD64/yNMy/8iZ+T/ + JnXs/yd06/8lcen/JG3o/yNp5v8iZuX/ImXk/yFl5P8iaOb/JHHq/yZ67f8nfe//Jnrv/yRz7v4la+v8 + GFjl/QdK3/9ol+qp7e3tDgAAAAAAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBVqgMAAAAAFnrIFxOf2pcSyPD5Ft36/xff+/4Z3fn/ + GNn4/RbT9fwWzfL8Fsnw/RbI7/wVwuz/E6feegCAvwgVsePeFbno/xOt4vwTquH/E6bf/xOk3v8SpN// + EqTg/xGl4f8Rp+L/Dqjk/xy46P8oj+b/E2jv/xdz8v8WbfD/FX71/xt25v8oPrT/Kziq/ys4q/8oPrT/ + H1fT/xpw7v8bePT/GHLy/xhn6f8gU9P/JkLA/yZMyf8laOP/J3bt/yh37f8ndu3/J3Ts/yZz6/8lcOr/ + JG3o/yRr5/8jaef/JGvo/yVz7P8nf/D/KIbz/yiH9P8ogfL+J23r+whN4f9Rhue/6+vrDQAAAAAAAP8B + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAgAIAAAABAAAAABGFzS4SodubEr3r4xPJ8vwV0vb/FdP2/xTP9P4VyPD/E7jn+BOa2IgAAAAA + FKXcrxW76P8TruL7FKrg/xSm3/8To97/E6Pe/xKj3/8SpOD/EaXh/xGo4/8OquX/I7Tn/x526P8UbvL/ + FnHx/xZt8P8Vifn/IVjO/ywwpf8pO7H/Ik/J/xpu6v8bevP/IHjv/yN27v8jdu//HHPy/xZw8/8aZej/ + IVLT/yZOzP8nYdv/J3Lq/yh47/8oeO//KHju/yl47v8oeO7/KHbt/yd07f8mcuz/JW/q/yVu6v8mcu3/ + J3zw/ymH8/8pjPX/LYDy+ghY5/9xn+uaAAAAAICA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgAIAgIACAAAAAAAAAAAUdsQN + EIXKMBOP0lASlNRkEpLUZROO0k8QhMUfAAAAABKT1WEUuun/E7Dj+xSq4P8Upd7/FKPd/xOi3f8Tot7/ + EqPf/xKk4P8RpuL/Eajk/w+t5v8kr+j/G3Dq/xVv8v8WcfH/Fm3w/xaI9v8YgfH/HmPa/xx06P8aevH/ + HWnl/x9c3P8eWNv/Hlnc/x9d3/8hYeP/HGTm/xhp7P8Xau7/G2Hl/yFW1/8mV9X/J2Pf/ydx6v8nd+7/ + KHnv/yl67/8peu//KXrw/yl67/8oeu//KHnv/yh37/8ndO7/J3bv/yh88f8piPT+KYn1/hlw6/vP3fU1 + AAAAAICA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAANjMwU + E7Hj4RW25v8TquH9FKbe/xSj3f8Totz/E6Ld/xOi3v8So9//EaXh/xGn4v8QqOT/D63m/yGw6P8bcer/ + FW/y/xZw8f8Wb/H/Fnfy/xeK9/8Xifn/GHvz/xxd3v8dT9X/HlDW/x5R1/8eU9j/HlXZ/x5W2/8eVtz/ + Hlje/xxc4v8ZZOr/GGjt/xtj5v8gWdz/I1fZ/yVd3f8lZ+X/JnHq/yd27f8neO7/KHju/yh47/8oee// + KHnw/yl58P8oePD/KHbw/yd08P8uf/P5CHPx/4qz8HYAAAAAv7//BAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAQCAgAIAVaoDAIC/BACAvwQAgKoGAAAAABOi3IkVuej/E67i+xSo3/8Uo93/FKHc/xOh3P8Tod3/ + E6Lf/xKk4P8RpeH/Eafj/xCp5P8Oq+b/HLfp/x566P8UbfH/FnHx/xZw8f8WbvH/F2rw/xhm7/8YZO3/ + GWLo/xpe4v8cWd3/HVTZ/x5U2P8eVdn/H1fb/x5W2/8fVdv/HlPc/x5U3f8cWeH/G2Hn/xlm6/8aZOj/ + HF3j/x5X3v8gVt7/IVvh/yNh5f8kaOj/JW3q/yZw6/8mcez/JnHs/yZy7v8nc+//J3bx/hx88v9RmvHC + 2+L4IwAAAACAgP8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAUkNEn + FLTl9RW05f8Tqd/+FKTd/xSh3P8ToNv/E6Hc/xOh3f8So9//EqTg/xGm4v8QqOT/EKrl/w6r5/8TuOv/ + Ip3o/xZl7P8Wc/L/FnDx/xZw8f8XbvH/GGrw/xhn8P8YZ/H/F2nw/xdo7f8ZY+f/G1zg/x5X2/8fVtv/ + H1fc/x9W3P8eVNz/H1Lc/x5R3P8eUt3/Hlbe/x1c4v8cYuf/G2Xp/xtk6f8bYOf/HF3m/xxc5v8dXuf/ + H2Pp/yFo6/8ibOz/JG/t/yNw7/4devD/grHxfAAAAAD///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABSj3JkVuej/E6zh+xSl3f8Uotz/FKDb/xOg2/8Todz/ + E6Le/xKj3/8RpeH/Eafi/xCo5P8QquX/D63o/w6v6v8Yve3/H4fn/xVl7f8Wc/L/FnHx/xZw8f8Wb/H/ + F2zx/xdp8P8YZ/D/GGfw/xdp8P8Xa+//GWXo/xxe4f8fWNz/H1jc/x9W3P8fVd3/HlLc/x9R3P8fUd3/ + H1Ld/yBU3v8gWN//IFzj/x9h5f8eZOf/Hmbo/x1m6f8cZer/HGfr/xxp7P8caez+Gmvu/yJv6/GFo+sZ + AAAAAABVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAATj9Mp + FLPk9hSz5P8Tp9/+FKPc/xSg2/8Un9v/E6Db/xOh3f8Tot//EqTg/xGl4f8RqOP/EKnk/w+r5v8Prej/ + D7Dq/w617P8YwO//Hozo/xdl6/8VbvH/FnLy/xZw8f8WcPH/Fm/x/xds8P8YZvD/GWHv/xpp8P8acvL/ + GGzu/xpj5v8eW9//H1nd/x9Y3v8fVt7/H1Pd/x9R3f8eUNz/HlDc/x9S3f8fU97/IFXf/yBX4P8hWuH/ + IVzj/yFe5P8hX+X/IWDm/yFh5/8iZun9G2fr/1eO7moAAAAAAFWqAwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABOi3JcVuej/E6vh+xSk3f8Uodv/FJ/b/xSf2/8ToNz/ + E6Hd/xKj3/8SpOD/Eabi/xCo5P8QquX/D6vm/w+t6P8Pser/D7Ps/w257/8UxvL/Hafs/xt06f8VZ+7/ + FnHy/xZx8f8WcPH/FnDx/xdt8f8ZY+//G1vu/x1m8P8cdfL/GHHx/xln6v8dX+L/IFve/x9a3/8fWN// + H1Xe/x9T3f8eUd3/HlDd/x9Q3f8fUd7/H1Le/x9T3/8fVN//H1Xg/yBW4f8gVuH/IFni/yJg5v0gaev/ + K3Pp38zW9RkAAAAAAAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAOlc0k + FLTl9BWz5P8TqN7+FKLb/xSf2/8Untv/E5/b/xOg3P8Tot7/EqPf/xGl4f8Rp+L/EKnk/xCq5f8PrOf/ + D63p/w6x6v8Os+z/Dbfu/wy68P8PyPT/Gcfz/x+V6/8XZ+r/FW/y/xZy8f8WcPH/FnDx/xds8P8ZX+// + HFTt/x5g7/8ed/L/Gnby/xhs7v8cYub/H17h/yBd3/8gW+D/IFjf/x9W3/8fVN7/H1Le/x9R3v8fUN7/ + H1De/x9R3v8fUd//H1Hf/x9T4P8gVuH/IV3l/ydr7PwOZez/bZ7snQAAAACAgP8CAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABOf2ogVuuj/E6zh+xSl3f8UoNv/FJ/a/xSe2/8Tn9v/ + E6Hd/xOi3/8SpOD/EaXh/xGo4/8QqeT/D6vm/w+s6P8Orun/DrHq/w6z7f8Ntu//Dbvw/w288v8MxPX/ + FNT3/yGx7/8aben/FWvw/xZy8v8WcPH/FnDx/xdr8P8bXO7/HUzs/x9Z7v8fdfL/HXvz/xly8P8aZ+r/ + H2Dj/yBf4f8gXuH/IF3h/yBa4f8gWOD/H1Xg/x9U3/8fU9//H1Lf/x9S3/8fUt//H1Tg/yBY4v8iYef/ + JWvs/h9y8f8Yaun31eHzKwAAAACAgP8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAUdsQN + E7Lk4BW25v8Tp9/9FKLc/xSf2v8Untr/FJ/a/xOg3P8Tod3/EqPf/xKk4P8RpuL/EKjk/xCq5f8Pq+b/ + D63o/w6v6f8Psev/DrPt/w227v8NufD/Db3y/w3A9P8Mw/X/ENP5/yDF9P8ceen/FGnv/xZy8v8WcPH/ + Fm/x/xho8P8cWO7/H0jr/x9S7f8gcfL/H37z/xt48v8abe3/HWTm/yBh4/8hYeL/IWHj/yFf4/8gXeL/ + IFvi/yBZ4f8gWOH/IFfh/yBX4v8gWeP/IV/l/yNn6v8mb+7/Jnbx+wdk7f+Hse+CAAAAAKqq/wMAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAAAAABSP00sVu+n/FK7j/RSm3v8Uodr/FJ/a/xSe2v8Tntv/ + E6Dc/xOi3v8So+D/EaXh/xGn4/8QqeT/EKrl/xCs5/8Pren/DLDq/wuy7f8KtO//C7fw/wy58P8Mu/L/ + DL/0/w3D9f8Mxvf/DtP6/yDQ9/8dfOn/FGnw/xZy8v8WcPH/Fm/x/xhm8P8cVO3/IEPr/x9N7P8gbPH/ + H37z/xx+8/8ZdPD/G2nq/x9k5f8hZOP/IWTk/yJk5f8hY+X/IWLl/yJh5f8hYeX/IWHm/yJj6P8kaOr/ + JW7t/yZy7/8ldPH8DWrx/0eH6sYAAAAAAAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAvwQAAAAA + FKDZjhW76f8Tq+H7FKTd/xSg2v8Untr/FJ7a/xOf2/8Tod3/E6Lf/xKk4P8RpeH/Eafj/xCp5f8Qq+b/ + DKvo/w2u6f8asej/IbHm/x+v5f8Xsej/Dbjw/wu99P8MvvT/DMH2/w3I+P8Myvj/D9X6/yPU9/8ee+n/ + FGrw/xZy8v8WcPH/Fm7x/xlj7/8eUOz/IUHq/yBI6/8fZfD/IHzz/x6A9P8be/P/GnHu/xxo6f8gZuf/ + Imbm/yNn5v8jaOf/I2no/yNp6f8jaun/JGzs/yVv7f8lcu7/J3Tw/yJy8f4TbvL/JnPp6+jo8xYAAAAA + AAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAUq9/CFbnn/xOp4PwUo9z/FJ/a/xSe2v8Un9v/ + E5/c/xOh3v8So9//EqTg/xGm4v8QqOT/EKrl/wuq5/8itOf/Sr3k/0q13v8+qdb/NJ/R/yqXzP8kmND/ + F6rj/wu+9f8Lwvf/DMf4/w3N+P8Oz/n/E9v6/yfS9v8bcun/FG3x/xZx8f8WcPH/F23x/xpg7/8eTOz/ + Ij/q/yFD6v8fXe7/IHbz/x+A9P8dgPT/Gnjy/xhu7v8caer/IWnp/yNq6P8ka+n/JWzr/yVt7P8mcO3/ + JXHu/yZz7/8kcvD/G3Dw/hZz8v8cbur43eP4JQAAAACAgP8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA + FYC/DBOw4+MVtub/E6ff/RSi2/8Un9v/FJ7a/xOe2/8ToNz/E6Le/xKj4P8RpeH/Eafj/xGp5P8MqeX/ + Mrzo/2fN6P9Vu93/ZLPR/4S80P+Pw9b/erzX/0CezP8cgr//GZ3X/wvC9v8MyPj/Dcz4/w7S+f8R1Pn/ + GOH7/ynB8v8Xaer/FXDy/xZw8f8WcPH/F2vw/xpd7v8fS+v/Ij/q/yE/6v8gUu3/IG/x/x999P8hgvT/ + JIP0/x158v8Wbu//GGrt/x9r7P8ibez/Im7s/yJv7f8icO7/H3Hw/xtz8f8aefL+GXz0/yFx6e3f6vQY + AAAAAAAA/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAASgMgcFLPl8xW05f8Tp9/+FKLc/xSf2/8Un9v/ + E5/b/xOh3f8Tot//EqTg/xGm4f8SqOP/DKjk/yi36P9z2e3/X7/c/6K9yP/a0s//6N/b//Lp5v/47+v/ + 6e/v/3O52f8Yerr/FqPc/wzM+v8Nzvj/D9T5/xPX+f8T1/n/IOb7/yil7v8UZu3/FnLy/xZw8f8WcPH/ + F2vw/xpd7v8eTOz/IkHq/yI96v8hSOv/H2Hv/yB48/8xi/X/RJj1/0CV9f8qg/P/F3Ty/xRx8f8XcfH/ + GXPx/xp28v8bevP/HH7z/ySF9fkKcPH/T4zpuAAAAAAAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAC + AAAAABaDzCMUteX4FbPl/xOn3/4Uotz/FKDb/xOf2/8ToNz/E6He/xKj3/8SpOD/Eafi/xCo5P8OquX/ + Ydbv/2/R5f+swcn/5NnV/+Dh4f/n6en/7u/v//z9/f///////////2at0v8Qerv/EcDw/w7S+/8R1Pn/ + FNj5/xba+f8V2vn/Kd/4/yB+6v8Ua/H/FnHx/xZw8f8WcPH/F2vw/xpg7/8dUe3/IEXr/yI/6v8iQer/ + IFLt/x9q8P8uhPT/Tp72/2Ks9v9To/X/OZL0/yiI9P8ihPT/IIP0/x6D9P8ghPX9D3by/yN06OrP3/Qw + AAAAAICA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgAIAAAAAD4PJIRSz5PYVtOX/E6jf/hSj3f8UoNv/ + E6Db/xOg3P8Tot7/EqPg/xGl4f8Sp+P/Dafk/yO26P924vP/kMnY/+Xb2P/j5eX/7e3s//Py8v/8/Pz/ + t7e3/6qsrf////7/1+71/x97uP8Sptz/D9f8/xLV+P8U2fn/Ftr5/xXZ+f8f5fv/Kqzv/xRm7f8WcvL/ + FnDx/xZw8f8WcPH/F23x/xll8P8bWu7/Hk7s/yBF6v8hQer/IEjr/x1X7v8fbfH/Non0/1il9f9qs/X/ + abX0/1yu8/83k/P/G3jz/hBx7v9Ok+yu3eb3HgAAAAAAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAQAAAAALesgXEq/i7xW15v8TqeD+FKPd/xSh3P8ToNz/E6Hd/xOi3/8SpOD/Eabh/xKo5P8KpuT/ + M8Ds/3vi8P+21Nz/8evp/+7v7//y8fH//////6amp/8ZGRr/FhYX/4uKjP//////RZDB/w2Uz/8S2Pz/ + F9j4/xna+f8W2vn/F9r5/xnf+v8tyvT/GWvr/xVx8v8WcPH/FnDx/xZw8f8WcPH/Fm/x/xdr8P8ZZe// + G17v/xxR7f8eRev/H0Lq/x1G6v8YUOz/GmDv/yVy8P8te/D/JXfu/xx17P0Siuz/lcnzbAAAAACq//8D + gID/AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAABxxgkSquDeFLjn/xKp4f0Upd7/ + E6Ld/xOh3P8Tod7/EqPf/xKl4P8RpuL/Eank/wqn5P80we3/fuLv/8ng5v/59PL/9fb2//b19f////// + d3d4/yAfIP8rKiv/VVVY//////9TmcX/C5HM/xPZ/P8i2/j/M+H4/x3c+f8X2/n/Ftv5/yne+P8ffer/ + FGzx/xZx8f8WcPH/FnDx/xZw8f8WcPH/FnLy/xZt8f8XYuz/Gm7q/x6C7P8fiO7/IIXu/yF/7f8ef+z/ + G4js/xmZ7f8br/D/Hcr0/hLb+P936vs+AAAAAP/M/wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAABAAAAABKk3cIUu+n/E6zi/BSn3/8To93/E6Ld/xOi3v8So+D/EaXh/xGn4/8RqeT/ + C6jl/ye66/934e//wuPq///6+f/4+vr/+/v7///////k5OX/T09Q/0FBQv/U09T//////zuKvv8QntX/ + E9z8/yjd+P9R5/f/NeH4/xjb+f8V2fn/IuX7/yef7f8TZe7/F3Py/xZw8f8WcPH/FnHx/xZy8v8VZ+// + GXTp/x6t7/8d1ff/G936/xna+f8a1vn/GtT5/xzV+f8a2/n/GeP7/xnj+v8W4Pr+F9b4/wXR9jgAAAAA + gICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAEZ/alxS86v8TsOT7 + E6jg/xOl3v8So97/EqPf/xKk4P8RpuH/Eajj/xCq5f8Pq+b/Ea/p/2HZ8P+g3+n//vv8//v9/f/9/f3/ + /v7+///////+/v7/+vz9//////+83Or/GHm4/xa76P8T3Pz/LN74/1no+P9U5/f/Kt/4/xba+f8Z3/r/ + Ks/1/xlr6f8Vb/L/FnPy/xZy8v8VbfL/FmXr/xuS6/8d1fb/GeT7/xbc+f8W2vn/F9r5/xfb+f8X2vn/ + Fdv5/yLZ+P8h1fX/Ftn5/hfb+f8U1/f8HNbxJQAAAACAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAIC/BAAAAAATlNRfFLvq/xO05vwTq+L/E6fg/xOk3/8SpOD/EqXg/xGm4v8QqeT/ + EKrl/xCs5/8Kq+j/MsLt/3bZ6v/B5O3///////7////+/////P39//z9/f//////7/n6/0aUxP8Vksz/ + FNX4/xTZ+f8x3/n/Wef4/1/p+P9L5vf/I975/xbZ+f8f4/v/JrDv/xdm6P8VZ+3/FmXs/xlz6f8es/D/ + G+P6/xbd+v8X2Pn/F9v5/xfb+f8X2/n/Ftr5/xnc+v822/f/SMfn/0Kw2f8jyOz+Ft77/xbW9usN1/IT + AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAAAAABSDyycTteX4 + FLvp/xKu5P4TqeH/Eqbg/xKl4P8RpuH/Eafj/xCp5P8Pq+b/D6zn/w+u6f8Lr+r/Q8nu/3DP5P+v2+n/ + 8fj6/////////////P7+/8vl7v9OnMj/GYvG/xbH8f8T2fr/Ftn5/zfh+f9X5/n/W+j4/13o+P9C5Pj/ + Htz5/xba+f8d4fr/Jsfz/yKl7f8dr+//HdX2/xjj+/8W2fn/F9r5/xfb+f8X2/n/F9v5/xfa+f8Y3Pr/ + Ot31/3TG1/+iw8v/X6zK/yCt3P0Y3fr/FtX10gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKn38gTwOz/EbHl/RKr4/8SqOL/Eqbh/xGn4v8QqOT/ + EKrl/w+r5v8Prej/Dq7p/w6w6/8Msu3/MsLt/1HB4/9nvNv/fsHb/36+2v9erNH/LpTH/xye1P8Ux/L/ + ENf6/xTX+f8a2/n/POL5/1Ll+f9X5/n/W+f4/1ro+P864/j/Gtz5/xfa+f8l3vj/JOP6/xjk+/8X3fr/ + F9n5/xfb+f8X2/n/F9v5/xfb+f8X2/n/Ftv6/zDf9/+P1eD/8Orp//rs5v+ryNT/FarY+xnc+v8U1fap + AAAAAACqqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAvwQAAAAA + E5TWfBPB7f8St+j7Eq/l/xKr4/8SqOL/Eajj/xCp5P8QquX/D6zn/w+t6f8Or+r/DrHr/w2y7f8JtO7/ + Fbrv/yW77P8otOT/I67g/xyv4/8XvO7/D835/w7U+v8T1fn/FNj5/x/b+f874fn/SuT5/1Hl+f9W5/n/ + XOf4/1bn+P804fj/H935/yfX9v8c2fn/Fdn5/xba+f8X2/n/F9v5/xfb+f8X2/n/GNv5/xba+f8e3vr/ + eNzr//by8v+AgoP/y8fF/7bZ6f8Nr9z7GN37/xTV9HIAAAAAAL+/BAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAgAAAAAWg8wjErXn8RPA7P8RtOf+Eq7l/xGq5P8RqeT/ + EKrl/w+r5v8PrOj/Dq7p/w6w6v8Osuz/DbPu/w227/8LuPD/Cbrz/wq99f8Lwff/CsX5/wvL+v8Nzvn/ + ENP5/xPX+f8V2fn/H9z5/zLg+v8/4/r/SeT6/1Hl+f9W5/n/W+f4/1bn+P9I4/f/Pd/2/yvg+P8l3vj/ + Id74/xzc+f8X2/n/F9v5/xfb+f8Y2/n/Fdz6/z/Z7//n+v7/rqqq/wcJC//Jwr//hcvn/we/6P8Y2vn/ + FNf1MwAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AFWqAwAAAAASlteLE8Pv/xK66vsSsuf/Ea7m/xGs5f8Qq+b/D6zm/w+t6P8Orun/DrHr/w2y7f8NtO7/ + DLbv/wy58f8NuvP/Db30/wy/9f8MxPf/Dcn4/w3O+f8P1Pn/E9j5/xXa+f8Z2/n/JN35/zPg+v8/4/r/ + SeT6/1Dl+f9X5vn/Xej4/2Xo9/9g6fb/Uej2/0Ll9/8v4ff/H934/xjb+f8X2/n/GNv5/xfb+f8Z3Pn/ + heHv/////v8wMzP/V1ZX//H1+f8vrNj9Etf3/xXU9c8AgIACAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA2AzBQRr+PeE8Pv/xC26v0Rsuj/ + EK/n/xCt5/8Prej/D63p/w6v6v8Osev/DbLt/w217v8Mt/D/DLny/wy68/8MvfT/C8D2/wzF+P8Myvj/ + Dc/5/xDV+f8T2Pn/Fdr5/xfb+f8a2/n/JN35/zLg+f8/4vr/SOT5/03l+f9S5vn/VOP3/0Lk+P8x4Pj/ + JN74/xvc+f8Y2/n/F9v5/xfb+f8Y2/n/Ftz6/yjZ9P+76fH////+/4uQkv/r5OH/kcvk/wi85fsZ3fv/ + FdH1egAAAAAAv78EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAVaoDAAAAABSM0VkSvu3/Eb7u/BG36v8Qs+n/ELDo/w+v6f8OsOn/DrDq/w6y7P8Ns+7/ + DLbv/wy48P8MuvL/C7v0/wu+9f8Lwff/DMb4/wzL+f8N0Pn/ENX5/xPY+f8V2vn/F9v5/xfb+f8a2/n/ + Idz5/yne+f8t3/n/K9/5/zHd+P8s2/f/Gtz5/xbb+f8W2/n/Ftv5/xfb+f8X2/n/F9v5/xjb+f8V3Pv/ + ONXw/9bu8////////////8be6/8Xqtj+F937/xXS9vQV1fgkAAAAAACAgAIAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAAAAABKc2p0RxPD/ + EL3s+xC36v8Qs+r/D7Lq/w+x6v8Osuv/DbLt/w207v8Mt+//DLnx/wy68/8Lu/T/C7/1/wvB9/8Lxvj/ + DMv5/w3R+f8Q1vr/E9j5/xXa+f8W2/n/F9v5/xfb+f8Y2/n/GNv5/xfb+f8a3Pn/Jtj3/x/b+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/GNv5/xbd+/81zez/u97q//////+82OX/JqbT/xLT9vsY2/n/ + E8/zlgAAAAAAqqoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEoDIDhGo4c0QxvL/D7vt/BC47P8Ptev/D7Pr/w6z7P8NtO3/ + DbXv/wy48P8MufL/C7rz/wu89P8Lv/b/C8L4/wvH+f8MzPr/DdH5/xDW+v8T2Pn/Fdr5/xbb+f8X2/n/ + F9v5/xfb+f8X2/n/F9v5/yHb+f8o2Pf/Gtz5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/ + Fdz6/yrS8v9SsdX/WqzR/xun1v8S0vX+Gd/7/xPS9eoS0/YdAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA + EYXILg+05+0RxvL/D7zu/Q+67f8Pt+3/Drbu/w217v8Mt+//DLjw/wy68v8LuvT/C731/wq/9/8Lw/j/ + C8f5/wzL+v8N0fr/ENX6/xPY+f8V2vn/Ftv5/xfb+f8X2/n/F9v5/xfb+f8Z3Pn/Jtn3/yPb+P8X2/n/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/Gdv5/yDN7/8Vxez/F9r5/xjd+vsV2fn/ + EanfaAAAAAAAVaoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAFofMRg+46vcQxvL/Drzu/Q+87/8Ouu// + Dbjv/w258P8MuvH/DLrz/wu79P8KvvX/CsD3/wrD+P8Lx/n/DMv6/w3Q+v8P1fr/Etf6/xXa+f8W2/n/ + F9v5/xfb+f8X2/n/F9v5/x7b+f8o2Pf/HNz5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xfb+f8X2/n/Ft36/xjf+/8W2fj7Ft/7/xKz5qsAAAAAAICAAgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABVqgMAAAAAFYvQVg+77fwPx/P+Dr7w/Q698P8NvPD/Dbvx/wy78/8Mu/P/C730/wq/9v8KwPj/ + CsP5/wrH+v8Ly/r/Dc/7/w/U+v8S1/r/Fdn5/xba+f8X2/n/F9v5/xfb+f8Z3Pn/Jdn4/yTa+P8Y3Pn/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2vn/Ftj4+xfg+/8TvevO + EXfMDwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAFYrPVQ+56vcPyvT/ + DsHy/A6/8v8NvvL/DL7z/wy+9P8Lv/X/Cr/3/wrB+P8Kw/n/Csf6/wvL+/8Mzvv/DtP6/xHW+v8U2fn/ + Fdr5/xfb+f8X2/n/F9v5/x7c+f8o2Pb/HNz5/xfb+f8X2/n/F9v5/xfb+f8X2/n/F9v5/xfb+f8X2/n/ + F9v5/xjb+f8X2/n/F9r5/xbZ+PoX4Pz/EsDs1hSAzhoAAAAAAICAAgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAvwQAAAAAE4fORA606OwOzPb/DcTz+w3C8/4NwfT/DMD1/wvA9v8Lwff/ + CsH4/wrE+f8KyPr/C8r7/wzN+/8N0fr/ENX6/xPY+f8V2vn/Ftv5/xfb+f8Z3Pn/Jdj3/yPa+P8Z3Pn/ + F9v5/xfb+f8X2/n/F9v5/xfb+f8Y2/n/GNv5/xfb+f8V2vn/FNr5/xXa+f0W2/n7Ft77/xK46MkUgM4a + AAAAAABVqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAA + EoLKKxCp4swOyvb/Dcr2/AzF9f0NxPX/DMT3/wvD+P8Lxfn/Csb6/wrI+v8Lyvv/DM37/w3Q+v8P1Pr/ + Etf6/xXZ+f8W2vn/Ftv5/x/b+P8s2ff/LeD5/yDc+f8X2/n/Ftv5/xXb+f8X2/n/Ftv5/xTa+f8T2vn/ + GNv5/yPd+P4q3vf7G+D7/hTX+P8SqeCdAIC/CAAAAAAAgIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqgMAAAAAAHS5CxOY2ZUOwvH/DtD5/w3K9/wLx/f9 + DMj4/wvI+f8Kyfr/C8n7/wvL+/8Mzfv/DdD6/w7U+v8S1vr/E9n5/xXa+f8j3fn/O9v3/0Lj+f8p3/n/ + Fdr5/xba+f8f3Pn/Jd75/xnb+f8b3Pn/K9/4/z/j9/1P5vb8Ser4/jDk+f8Uw+zlEpLVVAAAAAAAgIAC + AICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAgAIAgIACAAAAABKJz0UQq+TODcn1/wzR+v4MzPn9C8n5/ArK+v4Ly/v/C8z7/wzO+/8N0Pr/ + DtT6/xHW+v8Z2vn/LN35/0Pd9/9L4/n/POL5/xzc+f8g3fn/N+H5/0bk+f9F5Pn/SOP4/Vjn+Pth6/j9 + U+z5/jbj+f8bx+/tD6Ddhg15yRMAAAAAAFWqAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAVaoDAAAAAACAvwgSkNJl + D7Dm2A3K9/8L0vv+DdL8/w7Q/PwNz/v8DM/6/QzS+v4O1fr+F9j6/yra+P882/f/PuH5/z7i+v9D4vn+ + ReP5/k/k+f1b5vj8Wuf5+1vq+f5Y7Pr/Q+f6/ira9/8Vv+reDpvafQuAyhgAAAAAAICAAgBVqgMAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVaoDAICAAgAAAAAAdLkLFI/SWxGn4rcKve7zAMX1/wbP+f8O1vv/ + F9n7/yHZ+v8l1/j9J9n4/Snf+f0v4fr9OOL6/UDl+/9G5/v/Ruj7/0Dn+/824vr/J9b1/xnB7eIQp+Ci + EJDRTgBxxgkAAAAAAAAAAQBVqgMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB + AFWqAwAAAAEAAAAAAAAAACCPzyBgwupgPMDsryzA7Ngdv+3vFMPv/hnQ9f8V1ff/Ftb3/xrW9/8c1Pb/ + GtDz/hjH7vMUvOrYEazhsBGa2XkRiNA8AHS5CwAAAAAAAAAAAAAAAABVqgMAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBVqgMAgIACAAAAAAAAAAAAAAAB + s+bmCqTk7RyF0esyHJHSShCN0V4UkNJlE4/QXRGKz0oUh80zEoDIHACAqgYAAAAAAAAAAAAAAAAAAAAA + AFWqAwBVqgMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAA + IAAAAEAAAAABACAAAAAAAAAAAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAIAAAAJAAAACQAAAAUAAAASABEWLgcpMEoINUBbCDxEYgU3P10HIilKBgYGLgAAABsAAAAZ + AAANFAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAABREREQ8VFRUYFh0dIxIJCRwXGyA4H2RzjCmnwNEwyOf2MdP3/y7W/P4t2v//K9z//yfX9/4jvdno + H32OrRsxNmgYEBA/HBERLgwMEisACAggAAAADwAAAAYAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAEEhISDhQKChkOAAASGlBcbC231eYyzvr/J7vw/h6s5v8WpuP+E6bj/BKo5fwSrOf8 + Fbbs/hjE9v4d1P//Hcru+Bqdts0eWmSAGBgYKhQKChoWFhYXAAAABwAAAAMAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAACJ/lI0zyPT/I6rl/hOa2fwOn9/8DaXl/g2q6P4Nrev/ + Da/s/w2w7P8LsOz+DK7r/Q2t6PwQte3+Esf6/iLW//8ZsM3LFVVlMAAAAAAAAAADAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAnteKYL73v/xSZ2foMoOP9Dqnp/w6u7P8MtvL/ + C7v1/wy48/8LuPT/DLn0/wy58/8MuPL/Dbfw/w207f4Mrun8F7Ho/BvG9f8U1v/4E6XbTwAAAAAAAAAD + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWqqgMAAAAAI7jvcyu15f8Qltj6D6Pk/hyk3v8gp9v/ + G6HY/xmf2f8RreX/C8b2/w3H9/8MxPf/C8L3/wvA9f8LvfT/DLry/w248P8Ut+3/GLLo+xG05/4WzPT7 + F7P0QwAAAABVVaoDAAAAAAAAAAAAAAAAAAAAAAAAAAD///8CAAAAAAiAyyIktuTyFJnb/xGh4v4irt7/ + IdHw/xja+P8X2fj/GNT1/ynE6P8hvOb/Etj5/xXY+f8T1fn/EdL4/w/O9/8OyPb/DMH0/xK98f8Xue7/ + D67p/BW26f8ayO3mAJLbHAAAAAD///8BAAAAAAAAAAAAAAAAAAAAAP///wQAAAAAAJrYdxqs4v8Rmt77 + G7Hj/xzU8/8Vy/H/GMft/xfV9f8W3Pr/FuH8/zbU8P8jyu3/FN36/xfa+P8X2/n/Ftr5/xTY+P8R1Pj/ + Gs/2/xbE8v8Pue7/Eq7o+hrB7v8FtemhAAAAAP///wMAAAAAAAAAAAAAAAAAAAAA////AwAAAAAdr+Kl + FKLf/xKo5fsbwer/HL3m/xrA6P8Yyu//F9X2/xfb+f8V2ff/G976/zPR7/8V1/j/Ftr5/x3c+f8w3/n/ + Kd75/x7c+f8i2vj/F9b3/xLN9P8Svu7+GLjq/wjC7vGJzusaAAAAAAAAAAEAAAAAAAAAAAAAAACqqv8D + AAAAAEvE67EJnd7/Fbjr+yXI6/8Y2fj/Ft77/xjZ+P8X2vj/F9r5/xja+P8V2vn/Ktn1/xvZ9/8W3Pn/ + F9v5/z7h+f9P5fn/Mt/4/x/Z+P8W2/n/F9r4/xbV9/4VyvL+Dsrz/MTr+CcAAAAAgID/AgAAAAAAAAAA + AAAAAKr//wMAAAAAS8Lqqgii4f8Xseb7ILfj/xqx4P8cqdr/Gajb/xi04/8Xu+f/F7nm/xS76f8bxO3/ + GM3y/xbV9/8S2fn/MeD4/2Hp+P803vj/Gdr4/xbb+f8X2/n/FNr4/CLg+v8Wwu7BAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAv///BAAAAABKvumVCKbk/xWe2/sgks3/J5bM/xiOy/8Xk9D/F5TR/xeT0P8WldL/ + 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 + + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/BookmarkForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BookmarkForm.Designer.cs similarity index 98% rename from source/ch/cyberduck/ui/winforms/BookmarkForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/BookmarkForm.Designer.cs index ffa9ab7489..58f00d2774 100644 --- a/source/ch/cyberduck/ui/winforms/BookmarkForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BookmarkForm.Designer.cs @@ -1,680 +1,680 @@ -using Ch.Cyberduck.Ui.Winforms.Controls; - -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class BookmarkForm - { - /// - /// 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(BookmarkForm)); - this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); - this.iconList = new System.Windows.Forms.ImageList(this.components); - this.imageList = new System.Windows.Forms.ImageList(this.components); - this.toolTip = new System.Windows.Forms.ToolTip(this.components); - this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); - this.cancelButton = new System.Windows.Forms.Button(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.protocol = new Ch.Cyberduck.Ui.Winforms.Controls.ImageComboBox(); - this.labelNickname = new System.Windows.Forms.Label(); - this.alertIcon = new System.Windows.Forms.PictureBox(); - this.textBoxUsername = new System.Windows.Forms.TextBox(); - this.textBoxNickname = new System.Windows.Forms.TextBox(); - this.labelUsername = new System.Windows.Forms.Label(); - this.labelURL = new System.Windows.Forms.Label(); - this.linkLabelURL = new System.Windows.Forms.LinkLabel(); - this.labelServer = new System.Windows.Forms.Label(); - this.textBoxServer = new System.Windows.Forms.TextBox(); - this.labelPort = new System.Windows.Forms.Label(); - this.checkBoxAnonymous = new System.Windows.Forms.CheckBox(); - this.numericUpDownPort = new System.Windows.Forms.NumericUpDown(); - this.optionsPanel = new System.Windows.Forms.TableLayoutPanel(); - this.label1 = new System.Windows.Forms.Label(); - this.textBoxPath = new System.Windows.Forms.TextBox(); - this.comboBoxTimezone = new System.Windows.Forms.ComboBox(); - this.label8 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.richTextBoxNotes = new System.Windows.Forms.RichTextBox(); - this.labelNotes = new System.Windows.Forms.Label(); - this.comboBoxConnectMode = new System.Windows.Forms.ComboBox(); - this.label3 = new System.Windows.Forms.Label(); - this.buttonWebURL = new System.Windows.Forms.Button(); - this.comboBoxEncoding = new System.Windows.Forms.ComboBox(); - this.checkBoxPKA = new System.Windows.Forms.CheckBox(); - this.labelDownloadFolder = new System.Windows.Forms.Label(); - this.textBoxWebUrl = new System.Windows.Forms.TextBox(); - this.linkLabelDownloadFolder = new System.Windows.Forms.LinkLabel(); - this.labelWebURL = new System.Windows.Forms.Label(); - this.labelTransferFiles = new System.Windows.Forms.Label(); - this.comboBoxTransferFiles = new System.Windows.Forms.ComboBox(); - this.pkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); - this.downloadFolderButton = new System.Windows.Forms.Button(); - this.separatorLine = new System.Windows.Forms.Label(); - this.toggleOptionsLabel = new System.Windows.Forms.Label(); - this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.alertIcon)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPort)).BeginInit(); - this.optionsPanel.SuspendLayout(); - this.SuspendLayout(); - // - // iconList - // - this.iconList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; - this.iconList.ImageSize = new System.Drawing.Size(16, 16); - this.iconList.TransparentColor = System.Drawing.Color.Transparent; - // - // imageList - // - this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream"))); - this.imageList.TransparentColor = System.Drawing.Color.Fuchsia; - this.imageList.Images.SetKeyName(0, "arrow_up_bw.bmp"); - this.imageList.Images.SetKeyName(1, "arrow_up_color.bmp"); - this.imageList.Images.SetKeyName(2, "arrow_up_color_pressed.bmp"); - this.imageList.Images.SetKeyName(3, "arrow_down_bw.bmp"); - this.imageList.Images.SetKeyName(4, "arrow_down_color.bmp"); - this.imageList.Images.SetKeyName(5, "arrow_down_color_pressed.bmp"); - this.imageList.Images.SetKeyName(6, "green_arrow.bmp"); - // - // cancelButton - // - this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancelButton.Location = new System.Drawing.Point(394, 163); - this.cancelButton.Name = "cancelButton"; - this.cancelButton.Size = new System.Drawing.Size(0, 0); - this.cancelButton.TabIndex = 42; - this.cancelButton.TabStop = false; - this.cancelButton.Text = "Cancel"; - this.cancelButton.UseVisualStyleBackColor = true; - this.cancelButton.Click += new System.EventHandler(this.button1_Click); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 4; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 50F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.protocol, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.labelNickname, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.alertIcon, 3, 2); - this.tableLayoutPanel1.Controls.Add(this.textBoxUsername, 1, 4); - this.tableLayoutPanel1.Controls.Add(this.textBoxNickname, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.labelUsername, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.labelURL, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.linkLabelURL, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.labelServer, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.textBoxServer, 1, 3); - this.tableLayoutPanel1.Controls.Add(this.labelPort, 2, 3); - this.tableLayoutPanel1.Controls.Add(this.checkBoxAnonymous, 1, 5); - this.tableLayoutPanel1.Controls.Add(this.numericUpDownPort, 3, 3); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10, 10, 10, 0); - this.tableLayoutPanel1.RowCount = 6; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 32F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(482, 179); - this.tableLayoutPanel1.TabIndex = 36; - // - // protocol - // - this.protocol.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel1.SetColumnSpan(this.protocol, 4); - this.protocol.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; - this.protocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.protocol.FormattingEnabled = true; - this.protocol.ICImageList = this.iconList; - this.protocol.IconMember = null; - this.protocol.ItemHeight = 20; - this.protocol.Location = new System.Drawing.Point(13, 13); - this.protocol.MaxDropDownItems = 9; - this.protocol.Name = "protocol"; - this.protocol.Size = new System.Drawing.Size(456, 26); - this.protocol.TabIndex = 0; - this.protocol.SelectionChangeCommitted += new System.EventHandler(this.protocol_SelectionChangeCommitted); - // - // labelNickname - // - this.labelNickname.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelNickname.AutoSize = true; - this.labelNickname.Location = new System.Drawing.Point(13, 48); - this.labelNickname.Name = "labelNickname"; - this.labelNickname.Size = new System.Drawing.Size(64, 15); - this.labelNickname.TabIndex = 1; - this.labelNickname.Text = "Nickname:"; - this.labelNickname.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // alertIcon - // - this.alertIcon.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.alertIcon.Image = global::Ch.Cyberduck.ResourcesBundle.alert; - this.alertIcon.Location = new System.Drawing.Point(448, 73); - this.alertIcon.Name = "alertIcon"; - this.alertIcon.Padding = new System.Windows.Forms.Padding(0, 2, 0, 0); - this.alertIcon.Size = new System.Drawing.Size(21, 21); - this.alertIcon.TabIndex = 33; - this.alertIcon.TabStop = false; - this.alertIcon.Visible = false; - // - // textBoxUsername - // - this.textBoxUsername.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel1.SetColumnSpan(this.textBoxUsername, 3); - this.textBoxUsername.Location = new System.Drawing.Point(83, 129); - this.textBoxUsername.Name = "textBoxUsername"; - this.textBoxUsername.Size = new System.Drawing.Size(386, 23); - this.textBoxUsername.TabIndex = 6; - this.textBoxUsername.TextChanged += new System.EventHandler(this.textBoxUsername_TextChanged); - // - // textBoxNickname - // - this.textBoxNickname.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel1.SetColumnSpan(this.textBoxNickname, 3); - this.textBoxNickname.Location = new System.Drawing.Point(83, 45); - this.textBoxNickname.Name = "textBoxNickname"; - this.textBoxNickname.Size = new System.Drawing.Size(386, 23); - this.textBoxNickname.TabIndex = 2; - this.textBoxNickname.TextChanged += new System.EventHandler(this.textBoxNickname_TextChanged); - // - // labelUsername - // - this.labelUsername.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelUsername.AutoSize = true; - this.labelUsername.Location = new System.Drawing.Point(14, 132); - this.labelUsername.Name = "labelUsername"; - this.labelUsername.Size = new System.Drawing.Size(63, 15); - this.labelUsername.TabIndex = 29; - this.labelUsername.Text = "Username:"; - this.labelUsername.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // labelURL - // - this.labelURL.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelURL.AutoSize = true; - this.labelURL.Location = new System.Drawing.Point(46, 76); - this.labelURL.Name = "labelURL"; - this.labelURL.Size = new System.Drawing.Size(31, 15); - this.labelURL.TabIndex = 3; - this.labelURL.Text = "URL:"; - this.labelURL.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // linkLabelURL - // - this.linkLabelURL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.linkLabelURL.AutoEllipsis = true; - this.tableLayoutPanel1.SetColumnSpan(this.linkLabelURL, 2); - this.linkLabelURL.Location = new System.Drawing.Point(83, 76); - this.linkLabelURL.Margin = new System.Windows.Forms.Padding(3); - this.linkLabelURL.Name = "linkLabelURL"; - this.linkLabelURL.Size = new System.Drawing.Size(310, 15); - this.linkLabelURL.TabIndex = 3; - this.linkLabelURL.Click += new System.EventHandler(this.linkLabelURL_Click); - // - // labelServer - // - this.labelServer.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelServer.AutoSize = true; - this.labelServer.Location = new System.Drawing.Point(35, 104); - this.labelServer.Name = "labelServer"; - this.labelServer.Size = new System.Drawing.Size(42, 15); - this.labelServer.TabIndex = 5; - this.labelServer.Text = "Server:"; - this.labelServer.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // textBoxServer - // - this.textBoxServer.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxServer.Location = new System.Drawing.Point(83, 101); - this.textBoxServer.Name = "textBoxServer"; - this.textBoxServer.Size = new System.Drawing.Size(260, 23); - this.textBoxServer.TabIndex = 4; - this.textBoxServer.TextChanged += new System.EventHandler(this.textBoxServer_TextChanged); - // - // labelPort - // - this.labelPort.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelPort.AutoSize = true; - this.labelPort.Location = new System.Drawing.Point(361, 104); - this.labelPort.Name = "labelPort"; - this.labelPort.Size = new System.Drawing.Size(32, 15); - this.labelPort.TabIndex = 7; - this.labelPort.Text = "Port:"; - this.labelPort.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // checkBoxAnonymous - // - this.checkBoxAnonymous.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBoxAnonymous, 3); - this.checkBoxAnonymous.Location = new System.Drawing.Point(83, 157); - this.checkBoxAnonymous.Name = "checkBoxAnonymous"; - this.checkBoxAnonymous.Size = new System.Drawing.Size(124, 19); - this.checkBoxAnonymous.TabIndex = 7; - this.checkBoxAnonymous.Text = "Anonymous Login"; - this.checkBoxAnonymous.UseVisualStyleBackColor = true; - this.checkBoxAnonymous.CheckedChanged += new System.EventHandler(this.checkBoxAnonymous_CheckedChanged); - // - // numericUpDownPort - // - this.numericUpDownPort.Location = new System.Drawing.Point(399, 101); - this.numericUpDownPort.Maximum = new decimal(new int[] { - 65535, - 0, - 0, - 0}); - this.numericUpDownPort.Name = "numericUpDownPort"; - this.numericUpDownPort.Size = new System.Drawing.Size(70, 23); - this.numericUpDownPort.TabIndex = 5; - this.numericUpDownPort.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; - this.numericUpDownPort.ValueChanged += new System.EventHandler(this.numericUpDownPort_TextChanged); - // - // optionsPanel - // - this.optionsPanel.ColumnCount = 4; - this.optionsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.optionsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.optionsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.optionsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 38F)); - this.optionsPanel.Controls.Add(this.label1, 0, 0); - this.optionsPanel.Controls.Add(this.textBoxPath, 1, 0); - this.optionsPanel.Controls.Add(this.comboBoxTimezone, 1, 10); - this.optionsPanel.Controls.Add(this.label8, 0, 10); - this.optionsPanel.Controls.Add(this.label2, 0, 1); - this.optionsPanel.Controls.Add(this.richTextBoxNotes, 1, 9); - this.optionsPanel.Controls.Add(this.labelNotes, 0, 9); - this.optionsPanel.Controls.Add(this.comboBoxConnectMode, 1, 1); - this.optionsPanel.Controls.Add(this.label3, 0, 2); - this.optionsPanel.Controls.Add(this.buttonWebURL, 3, 8); - this.optionsPanel.Controls.Add(this.comboBoxEncoding, 1, 2); - this.optionsPanel.Controls.Add(this.checkBoxPKA, 1, 3); - this.optionsPanel.Controls.Add(this.labelDownloadFolder, 0, 5); - this.optionsPanel.Controls.Add(this.textBoxWebUrl, 1, 8); - this.optionsPanel.Controls.Add(this.linkLabelDownloadFolder, 1, 5); - this.optionsPanel.Controls.Add(this.labelWebURL, 0, 8); - this.optionsPanel.Controls.Add(this.labelTransferFiles, 0, 6); - this.optionsPanel.Controls.Add(this.comboBoxTransferFiles, 1, 6); - this.optionsPanel.Controls.Add(this.pkLabel, 1, 4); - this.optionsPanel.Controls.Add(this.downloadFolderButton, 2, 5); - this.optionsPanel.Dock = System.Windows.Forms.DockStyle.Bottom; - this.optionsPanel.Location = new System.Drawing.Point(0, 219); - this.optionsPanel.Name = "optionsPanel"; - this.optionsPanel.Padding = new System.Windows.Forms.Padding(10, 0, 10, 10); - this.optionsPanel.RowCount = 11; - this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.optionsPanel.Size = new System.Drawing.Size(482, 336); - this.optionsPanel.TabIndex = 41; - // - // label1 - // - this.label1.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(79, 7); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(34, 15); - this.label1.TabIndex = 10; - this.label1.Text = "Path:"; - this.label1.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // textBoxPath - // - this.textBoxPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.optionsPanel.SetColumnSpan(this.textBoxPath, 3); - this.textBoxPath.Location = new System.Drawing.Point(119, 3); - this.textBoxPath.Name = "textBoxPath"; - this.textBoxPath.Size = new System.Drawing.Size(350, 23); - this.textBoxPath.TabIndex = 8; - this.textBoxPath.TextChanged += new System.EventHandler(this.textBoxPath_TextChanged); - // - // comboBoxTimezone - // - this.comboBoxTimezone.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.optionsPanel.SetColumnSpan(this.comboBoxTimezone, 3); - this.comboBoxTimezone.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBoxTimezone.FormattingEnabled = true; - this.comboBoxTimezone.Location = new System.Drawing.Point(119, 302); - this.comboBoxTimezone.Name = "comboBoxTimezone"; - this.comboBoxTimezone.Size = new System.Drawing.Size(350, 23); - this.comboBoxTimezone.TabIndex = 17; - this.comboBoxTimezone.SelectionChangeCommitted += new System.EventHandler(this.comboBoxTimezone_SelectionChangeCommitted); - // - // label8 - // - this.label8.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(51, 305); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(62, 15); - this.label8.TabIndex = 27; - this.label8.Text = "Timezone:"; - this.label8.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // label2 - // - this.label2.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(24, 36); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(89, 15); - this.label2.TabIndex = 11; - this.label2.Text = "Connect Mode:"; - this.label2.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // richTextBoxNotes - // - this.optionsPanel.SetColumnSpan(this.richTextBoxNotes, 3); - this.richTextBoxNotes.Dock = System.Windows.Forms.DockStyle.Fill; - this.richTextBoxNotes.Location = new System.Drawing.Point(119, 232); - this.richTextBoxNotes.Name = "richTextBoxNotes"; - this.richTextBoxNotes.Size = new System.Drawing.Size(350, 64); - this.richTextBoxNotes.TabIndex = 16; - this.richTextBoxNotes.Text = ""; - this.richTextBoxNotes.TextChanged += new System.EventHandler(this.richTextBoxNotes_TextChanged); - // - // labelNotes - // - this.labelNotes.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelNotes.AutoSize = true; - this.labelNotes.Location = new System.Drawing.Point(72, 256); - this.labelNotes.Name = "labelNotes"; - this.labelNotes.Size = new System.Drawing.Size(41, 15); - this.labelNotes.TabIndex = 26; - this.labelNotes.Text = "Notes:"; - this.labelNotes.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // comboBoxConnectMode - // - this.comboBoxConnectMode.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.optionsPanel.SetColumnSpan(this.comboBoxConnectMode, 3); - this.comboBoxConnectMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBoxConnectMode.FormattingEnabled = true; - this.comboBoxConnectMode.Location = new System.Drawing.Point(119, 32); - this.comboBoxConnectMode.Name = "comboBoxConnectMode"; - this.comboBoxConnectMode.Size = new System.Drawing.Size(350, 23); - this.comboBoxConnectMode.TabIndex = 9; - this.comboBoxConnectMode.SelectionChangeCommitted += new System.EventHandler(this.comboBoxConnectMode_SelectionChangeCommitted); - // - // label3 - // - this.label3.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(53, 65); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(60, 15); - this.label3.TabIndex = 13; - this.label3.Text = "Encoding:"; - this.label3.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // buttonWebURL - // - this.buttonWebURL.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Right))); - this.buttonWebURL.FlatAppearance.BorderSize = 0; - this.buttonWebURL.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.buttonWebURL.Image = global::Ch.Cyberduck.ResourcesBundle.site; - this.buttonWebURL.Location = new System.Drawing.Point(446, 203); - this.buttonWebURL.MaximumSize = new System.Drawing.Size(23, 23); - this.buttonWebURL.Name = "buttonWebURL"; - this.buttonWebURL.Size = new System.Drawing.Size(23, 23); - this.buttonWebURL.TabIndex = 15; - this.buttonWebURL.UseVisualStyleBackColor = true; - this.buttonWebURL.Click += new System.EventHandler(this.buttonWebURL_Click); - // - // comboBoxEncoding - // - this.comboBoxEncoding.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.optionsPanel.SetColumnSpan(this.comboBoxEncoding, 3); - this.comboBoxEncoding.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBoxEncoding.FormattingEnabled = true; - this.comboBoxEncoding.Location = new System.Drawing.Point(119, 61); - this.comboBoxEncoding.Name = "comboBoxEncoding"; - this.comboBoxEncoding.Size = new System.Drawing.Size(350, 23); - this.comboBoxEncoding.TabIndex = 10; - this.comboBoxEncoding.SelectionChangeCommitted += new System.EventHandler(this.comboBoxEncoding_SelectionChangeCommitted); - // - // checkBoxPKA - // - this.checkBoxPKA.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.checkBoxPKA.AutoSize = true; - this.optionsPanel.SetColumnSpan(this.checkBoxPKA, 3); - this.checkBoxPKA.Location = new System.Drawing.Point(119, 90); - this.checkBoxPKA.Name = "checkBoxPKA"; - this.checkBoxPKA.Size = new System.Drawing.Size(185, 19); - this.checkBoxPKA.TabIndex = 11; - this.checkBoxPKA.Text = "Use Public Key Authentication"; - this.checkBoxPKA.UseVisualStyleBackColor = true; - this.checkBoxPKA.CheckedChanged += new System.EventHandler(this.checkBoxPKA_CheckedChanged); - // - // labelDownloadFolder - // - this.labelDownloadFolder.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelDownloadFolder.AutoSize = true; - this.labelDownloadFolder.Location = new System.Drawing.Point(13, 148); - this.labelDownloadFolder.Name = "labelDownloadFolder"; - this.labelDownloadFolder.Size = new System.Drawing.Size(100, 15); - this.labelDownloadFolder.TabIndex = 18; - this.labelDownloadFolder.Text = "Download Folder:"; - this.labelDownloadFolder.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // textBoxWebUrl - // - this.textBoxWebUrl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.optionsPanel.SetColumnSpan(this.textBoxWebUrl, 2); - this.textBoxWebUrl.Location = new System.Drawing.Point(119, 203); - this.textBoxWebUrl.Name = "textBoxWebUrl"; - this.textBoxWebUrl.Size = new System.Drawing.Size(312, 23); - this.textBoxWebUrl.TabIndex = 14; - this.textBoxWebUrl.TextChanged += new System.EventHandler(this.textBoxWebUrl_TextChanged); - // - // linkLabelDownloadFolder - // - this.linkLabelDownloadFolder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.linkLabelDownloadFolder.AutoEllipsis = true; - this.linkLabelDownloadFolder.Location = new System.Drawing.Point(119, 148); - this.linkLabelDownloadFolder.Margin = new System.Windows.Forms.Padding(3); - this.linkLabelDownloadFolder.Name = "linkLabelDownloadFolder"; - this.linkLabelDownloadFolder.Size = new System.Drawing.Size(278, 15); - this.linkLabelDownloadFolder.TabIndex = 19; - this.linkLabelDownloadFolder.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelDownloadFolder_LinkClicked); - // - // labelWebURL - // - this.labelWebURL.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelWebURL.AutoSize = true; - this.labelWebURL.Location = new System.Drawing.Point(55, 207); - this.labelWebURL.Name = "labelWebURL"; - this.labelWebURL.Size = new System.Drawing.Size(58, 15); - this.labelWebURL.TabIndex = 22; - this.labelWebURL.Text = "Web URL:"; - this.labelWebURL.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // labelTransferFiles - // - this.labelTransferFiles.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelTransferFiles.AutoSize = true; - this.labelTransferFiles.Location = new System.Drawing.Point(35, 178); - this.labelTransferFiles.Name = "labelTransferFiles"; - this.labelTransferFiles.Size = new System.Drawing.Size(78, 15); - this.labelTransferFiles.TabIndex = 20; - this.labelTransferFiles.Text = "Transfer Files:"; - this.labelTransferFiles.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // comboBoxTransferFiles - // - this.comboBoxTransferFiles.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.optionsPanel.SetColumnSpan(this.comboBoxTransferFiles, 3); - this.comboBoxTransferFiles.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBoxTransferFiles.FormattingEnabled = true; - this.comboBoxTransferFiles.Location = new System.Drawing.Point(119, 174); - this.comboBoxTransferFiles.Name = "comboBoxTransferFiles"; - this.comboBoxTransferFiles.Size = new System.Drawing.Size(350, 23); - this.comboBoxTransferFiles.TabIndex = 13; - this.comboBoxTransferFiles.SelectionChangeCommitted += new System.EventHandler(this.comboBoxTransferFiles_SelectionChangeCommitted); - // - // pkLabel - // - this.pkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.pkLabel.AutoEllipsis = true; - this.pkLabel.AutoSize = true; - this.optionsPanel.SetColumnSpan(this.pkLabel, 3); - this.pkLabel.Location = new System.Drawing.Point(136, 112); - this.pkLabel.Margin = new System.Windows.Forms.Padding(20, 0, 3, 0); - this.pkLabel.MinimumSize = new System.Drawing.Size(0, 28); - this.pkLabel.Name = "pkLabel"; - this.pkLabel.Size = new System.Drawing.Size(333, 28); - this.pkLabel.TabIndex = 33; - // - // downloadFolderButton - // - this.downloadFolderButton.AutoSize = true; - this.optionsPanel.SetColumnSpan(this.downloadFolderButton, 2); - this.downloadFolderButton.Location = new System.Drawing.Point(403, 143); - this.downloadFolderButton.Name = "downloadFolderButton"; - this.downloadFolderButton.Size = new System.Drawing.Size(66, 25); - this.downloadFolderButton.TabIndex = 12; - this.downloadFolderButton.Text = "Choose…"; - this.downloadFolderButton.UseVisualStyleBackColor = true; - this.downloadFolderButton.Click += new System.EventHandler(this.downloadFolderButton_Click); - // - // separatorLine - // - this.separatorLine.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.separatorLine.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.separatorLine.Location = new System.Drawing.Point(17, 211); - this.separatorLine.Name = "separatorLine"; - this.separatorLine.Size = new System.Drawing.Size(452, 2); - this.separatorLine.TabIndex = 40; - // - // toggleOptionsLabel - // - this.toggleOptionsLabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.toggleOptionsLabel.ImageIndex = 3; - this.toggleOptionsLabel.ImageList = this.imageList; - this.toggleOptionsLabel.Location = new System.Drawing.Point(13, 182); - this.toggleOptionsLabel.Name = "toggleOptionsLabel"; - this.toggleOptionsLabel.Size = new System.Drawing.Size(168, 27); - this.toggleOptionsLabel.TabIndex = 7; - this.toggleOptionsLabel.Text = " Toggle Transcript"; - this.toggleOptionsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // BookmarkForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.cancelButton; - this.ClientSize = new System.Drawing.Size(482, 555); - this.Controls.Add(this.cancelButton); - this.Controls.Add(this.tableLayoutPanel1); - this.Controls.Add(this.optionsPanel); - this.Controls.Add(this.separatorLine); - this.Controls.Add(this.toggleOptionsLabel); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; - this.Name = "BookmarkForm"; - this.Text = "Bookmark Editor"; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.alertIcon)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPort)).EndInit(); - this.optionsPanel.ResumeLayout(false); - this.optionsPanel.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private ImageComboBox protocol; - private System.Windows.Forms.Label labelNickname; - private System.Windows.Forms.TextBox textBoxNickname; - private System.Windows.Forms.Label labelURL; - private System.Windows.Forms.LinkLabel linkLabelURL; - private System.Windows.Forms.Label labelServer; - private System.Windows.Forms.TextBox textBoxServer; - private System.Windows.Forms.Label labelPort; - private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog; - private System.Windows.Forms.ImageList iconList; - private System.Windows.Forms.Label labelUsername; - private System.Windows.Forms.TextBox textBoxUsername; - private System.Windows.Forms.PictureBox alertIcon; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.ImageList imageList; - private System.Windows.Forms.Label toggleOptionsLabel; - private System.Windows.Forms.Label separatorLine; - private System.Windows.Forms.TableLayoutPanel optionsPanel; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox textBoxPath; - private System.Windows.Forms.ComboBox comboBoxTimezone; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.RichTextBox richTextBoxNotes; - private System.Windows.Forms.Label labelNotes; - private System.Windows.Forms.ComboBox comboBoxConnectMode; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Button buttonWebURL; - private System.Windows.Forms.ComboBox comboBoxEncoding; - private System.Windows.Forms.CheckBox checkBoxPKA; - private System.Windows.Forms.Label labelDownloadFolder; - private System.Windows.Forms.TextBox textBoxWebUrl; - private System.Windows.Forms.LinkLabel linkLabelDownloadFolder; - private System.Windows.Forms.Label labelWebURL; - private System.Windows.Forms.Label labelTransferFiles; - private System.Windows.Forms.ComboBox comboBoxTransferFiles; - private System.Windows.Forms.Button downloadFolderButton; - private System.Windows.Forms.ToolTip toolTip; - private EllipsisLabel pkLabel; - private System.Windows.Forms.OpenFileDialog openFileDialog; - private System.Windows.Forms.Button cancelButton; - private System.Windows.Forms.CheckBox checkBoxAnonymous; - private System.Windows.Forms.NumericUpDown numericUpDownPort; - - } +using Ch.Cyberduck.Ui.Winforms.Controls; + +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class BookmarkForm + { + /// + /// 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(BookmarkForm)); + this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); + this.iconList = new System.Windows.Forms.ImageList(this.components); + this.imageList = new System.Windows.Forms.ImageList(this.components); + this.toolTip = new System.Windows.Forms.ToolTip(this.components); + this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.cancelButton = new System.Windows.Forms.Button(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.protocol = new Ch.Cyberduck.Ui.Winforms.Controls.ImageComboBox(); + this.labelNickname = new System.Windows.Forms.Label(); + this.alertIcon = new System.Windows.Forms.PictureBox(); + this.textBoxUsername = new System.Windows.Forms.TextBox(); + this.textBoxNickname = new System.Windows.Forms.TextBox(); + this.labelUsername = new System.Windows.Forms.Label(); + this.labelURL = new System.Windows.Forms.Label(); + this.linkLabelURL = new System.Windows.Forms.LinkLabel(); + this.labelServer = new System.Windows.Forms.Label(); + this.textBoxServer = new System.Windows.Forms.TextBox(); + this.labelPort = new System.Windows.Forms.Label(); + this.checkBoxAnonymous = new System.Windows.Forms.CheckBox(); + this.numericUpDownPort = new System.Windows.Forms.NumericUpDown(); + this.optionsPanel = new System.Windows.Forms.TableLayoutPanel(); + this.label1 = new System.Windows.Forms.Label(); + this.textBoxPath = new System.Windows.Forms.TextBox(); + this.comboBoxTimezone = new System.Windows.Forms.ComboBox(); + this.label8 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.richTextBoxNotes = new System.Windows.Forms.RichTextBox(); + this.labelNotes = new System.Windows.Forms.Label(); + this.comboBoxConnectMode = new System.Windows.Forms.ComboBox(); + this.label3 = new System.Windows.Forms.Label(); + this.buttonWebURL = new System.Windows.Forms.Button(); + this.comboBoxEncoding = new System.Windows.Forms.ComboBox(); + this.checkBoxPKA = new System.Windows.Forms.CheckBox(); + this.labelDownloadFolder = new System.Windows.Forms.Label(); + this.textBoxWebUrl = new System.Windows.Forms.TextBox(); + this.linkLabelDownloadFolder = new System.Windows.Forms.LinkLabel(); + this.labelWebURL = new System.Windows.Forms.Label(); + this.labelTransferFiles = new System.Windows.Forms.Label(); + this.comboBoxTransferFiles = new System.Windows.Forms.ComboBox(); + this.pkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); + this.downloadFolderButton = new System.Windows.Forms.Button(); + this.separatorLine = new System.Windows.Forms.Label(); + this.toggleOptionsLabel = new System.Windows.Forms.Label(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.alertIcon)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPort)).BeginInit(); + this.optionsPanel.SuspendLayout(); + this.SuspendLayout(); + // + // iconList + // + this.iconList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; + this.iconList.ImageSize = new System.Drawing.Size(16, 16); + this.iconList.TransparentColor = System.Drawing.Color.Transparent; + // + // imageList + // + this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream"))); + this.imageList.TransparentColor = System.Drawing.Color.Fuchsia; + this.imageList.Images.SetKeyName(0, "arrow_up_bw.bmp"); + this.imageList.Images.SetKeyName(1, "arrow_up_color.bmp"); + this.imageList.Images.SetKeyName(2, "arrow_up_color_pressed.bmp"); + this.imageList.Images.SetKeyName(3, "arrow_down_bw.bmp"); + this.imageList.Images.SetKeyName(4, "arrow_down_color.bmp"); + this.imageList.Images.SetKeyName(5, "arrow_down_color_pressed.bmp"); + this.imageList.Images.SetKeyName(6, "green_arrow.bmp"); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(394, 163); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(0, 0); + this.cancelButton.TabIndex = 42; + this.cancelButton.TabStop = false; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + this.cancelButton.Click += new System.EventHandler(this.button1_Click); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 4; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 50F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.protocol, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.labelNickname, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.alertIcon, 3, 2); + this.tableLayoutPanel1.Controls.Add(this.textBoxUsername, 1, 4); + this.tableLayoutPanel1.Controls.Add(this.textBoxNickname, 1, 1); + this.tableLayoutPanel1.Controls.Add(this.labelUsername, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.labelURL, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.linkLabelURL, 1, 2); + this.tableLayoutPanel1.Controls.Add(this.labelServer, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.textBoxServer, 1, 3); + this.tableLayoutPanel1.Controls.Add(this.labelPort, 2, 3); + this.tableLayoutPanel1.Controls.Add(this.checkBoxAnonymous, 1, 5); + this.tableLayoutPanel1.Controls.Add(this.numericUpDownPort, 3, 3); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10, 10, 10, 0); + this.tableLayoutPanel1.RowCount = 6; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 32F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(482, 179); + this.tableLayoutPanel1.TabIndex = 36; + // + // protocol + // + this.protocol.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.protocol, 4); + this.protocol.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.protocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.protocol.FormattingEnabled = true; + this.protocol.ICImageList = this.iconList; + this.protocol.IconMember = null; + this.protocol.ItemHeight = 20; + this.protocol.Location = new System.Drawing.Point(13, 13); + this.protocol.MaxDropDownItems = 9; + this.protocol.Name = "protocol"; + this.protocol.Size = new System.Drawing.Size(456, 26); + this.protocol.TabIndex = 0; + this.protocol.SelectionChangeCommitted += new System.EventHandler(this.protocol_SelectionChangeCommitted); + // + // labelNickname + // + this.labelNickname.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelNickname.AutoSize = true; + this.labelNickname.Location = new System.Drawing.Point(13, 48); + this.labelNickname.Name = "labelNickname"; + this.labelNickname.Size = new System.Drawing.Size(64, 15); + this.labelNickname.TabIndex = 1; + this.labelNickname.Text = "Nickname:"; + this.labelNickname.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // alertIcon + // + this.alertIcon.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.alertIcon.Image = global::Ch.Cyberduck.ResourcesBundle.alert; + this.alertIcon.Location = new System.Drawing.Point(448, 73); + this.alertIcon.Name = "alertIcon"; + this.alertIcon.Padding = new System.Windows.Forms.Padding(0, 2, 0, 0); + this.alertIcon.Size = new System.Drawing.Size(21, 21); + this.alertIcon.TabIndex = 33; + this.alertIcon.TabStop = false; + this.alertIcon.Visible = false; + // + // textBoxUsername + // + this.textBoxUsername.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.textBoxUsername, 3); + this.textBoxUsername.Location = new System.Drawing.Point(83, 129); + this.textBoxUsername.Name = "textBoxUsername"; + this.textBoxUsername.Size = new System.Drawing.Size(386, 23); + this.textBoxUsername.TabIndex = 6; + this.textBoxUsername.TextChanged += new System.EventHandler(this.textBoxUsername_TextChanged); + // + // textBoxNickname + // + this.textBoxNickname.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.textBoxNickname, 3); + this.textBoxNickname.Location = new System.Drawing.Point(83, 45); + this.textBoxNickname.Name = "textBoxNickname"; + this.textBoxNickname.Size = new System.Drawing.Size(386, 23); + this.textBoxNickname.TabIndex = 2; + this.textBoxNickname.TextChanged += new System.EventHandler(this.textBoxNickname_TextChanged); + // + // labelUsername + // + this.labelUsername.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelUsername.AutoSize = true; + this.labelUsername.Location = new System.Drawing.Point(14, 132); + this.labelUsername.Name = "labelUsername"; + this.labelUsername.Size = new System.Drawing.Size(63, 15); + this.labelUsername.TabIndex = 29; + this.labelUsername.Text = "Username:"; + this.labelUsername.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // labelURL + // + this.labelURL.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelURL.AutoSize = true; + this.labelURL.Location = new System.Drawing.Point(46, 76); + this.labelURL.Name = "labelURL"; + this.labelURL.Size = new System.Drawing.Size(31, 15); + this.labelURL.TabIndex = 3; + this.labelURL.Text = "URL:"; + this.labelURL.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // linkLabelURL + // + this.linkLabelURL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.linkLabelURL.AutoEllipsis = true; + this.tableLayoutPanel1.SetColumnSpan(this.linkLabelURL, 2); + this.linkLabelURL.Location = new System.Drawing.Point(83, 76); + this.linkLabelURL.Margin = new System.Windows.Forms.Padding(3); + this.linkLabelURL.Name = "linkLabelURL"; + this.linkLabelURL.Size = new System.Drawing.Size(310, 15); + this.linkLabelURL.TabIndex = 3; + this.linkLabelURL.Click += new System.EventHandler(this.linkLabelURL_Click); + // + // labelServer + // + this.labelServer.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelServer.AutoSize = true; + this.labelServer.Location = new System.Drawing.Point(35, 104); + this.labelServer.Name = "labelServer"; + this.labelServer.Size = new System.Drawing.Size(42, 15); + this.labelServer.TabIndex = 5; + this.labelServer.Text = "Server:"; + this.labelServer.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // textBoxServer + // + this.textBoxServer.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxServer.Location = new System.Drawing.Point(83, 101); + this.textBoxServer.Name = "textBoxServer"; + this.textBoxServer.Size = new System.Drawing.Size(260, 23); + this.textBoxServer.TabIndex = 4; + this.textBoxServer.TextChanged += new System.EventHandler(this.textBoxServer_TextChanged); + // + // labelPort + // + this.labelPort.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelPort.AutoSize = true; + this.labelPort.Location = new System.Drawing.Point(361, 104); + this.labelPort.Name = "labelPort"; + this.labelPort.Size = new System.Drawing.Size(32, 15); + this.labelPort.TabIndex = 7; + this.labelPort.Text = "Port:"; + this.labelPort.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // checkBoxAnonymous + // + this.checkBoxAnonymous.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.checkBoxAnonymous, 3); + this.checkBoxAnonymous.Location = new System.Drawing.Point(83, 157); + this.checkBoxAnonymous.Name = "checkBoxAnonymous"; + this.checkBoxAnonymous.Size = new System.Drawing.Size(124, 19); + this.checkBoxAnonymous.TabIndex = 7; + this.checkBoxAnonymous.Text = "Anonymous Login"; + this.checkBoxAnonymous.UseVisualStyleBackColor = true; + this.checkBoxAnonymous.CheckedChanged += new System.EventHandler(this.checkBoxAnonymous_CheckedChanged); + // + // numericUpDownPort + // + this.numericUpDownPort.Location = new System.Drawing.Point(399, 101); + this.numericUpDownPort.Maximum = new decimal(new int[] { + 65535, + 0, + 0, + 0}); + this.numericUpDownPort.Name = "numericUpDownPort"; + this.numericUpDownPort.Size = new System.Drawing.Size(70, 23); + this.numericUpDownPort.TabIndex = 5; + this.numericUpDownPort.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownPort.ValueChanged += new System.EventHandler(this.numericUpDownPort_TextChanged); + // + // optionsPanel + // + this.optionsPanel.ColumnCount = 4; + this.optionsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.optionsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.optionsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.optionsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 38F)); + this.optionsPanel.Controls.Add(this.label1, 0, 0); + this.optionsPanel.Controls.Add(this.textBoxPath, 1, 0); + this.optionsPanel.Controls.Add(this.comboBoxTimezone, 1, 10); + this.optionsPanel.Controls.Add(this.label8, 0, 10); + this.optionsPanel.Controls.Add(this.label2, 0, 1); + this.optionsPanel.Controls.Add(this.richTextBoxNotes, 1, 9); + this.optionsPanel.Controls.Add(this.labelNotes, 0, 9); + this.optionsPanel.Controls.Add(this.comboBoxConnectMode, 1, 1); + this.optionsPanel.Controls.Add(this.label3, 0, 2); + this.optionsPanel.Controls.Add(this.buttonWebURL, 3, 8); + this.optionsPanel.Controls.Add(this.comboBoxEncoding, 1, 2); + this.optionsPanel.Controls.Add(this.checkBoxPKA, 1, 3); + this.optionsPanel.Controls.Add(this.labelDownloadFolder, 0, 5); + this.optionsPanel.Controls.Add(this.textBoxWebUrl, 1, 8); + this.optionsPanel.Controls.Add(this.linkLabelDownloadFolder, 1, 5); + this.optionsPanel.Controls.Add(this.labelWebURL, 0, 8); + this.optionsPanel.Controls.Add(this.labelTransferFiles, 0, 6); + this.optionsPanel.Controls.Add(this.comboBoxTransferFiles, 1, 6); + this.optionsPanel.Controls.Add(this.pkLabel, 1, 4); + this.optionsPanel.Controls.Add(this.downloadFolderButton, 2, 5); + this.optionsPanel.Dock = System.Windows.Forms.DockStyle.Bottom; + this.optionsPanel.Location = new System.Drawing.Point(0, 219); + this.optionsPanel.Name = "optionsPanel"; + this.optionsPanel.Padding = new System.Windows.Forms.Padding(10, 0, 10, 10); + this.optionsPanel.RowCount = 11; + this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.optionsPanel.Size = new System.Drawing.Size(482, 336); + this.optionsPanel.TabIndex = 41; + // + // label1 + // + this.label1.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(79, 7); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(34, 15); + this.label1.TabIndex = 10; + this.label1.Text = "Path:"; + this.label1.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // textBoxPath + // + this.textBoxPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.optionsPanel.SetColumnSpan(this.textBoxPath, 3); + this.textBoxPath.Location = new System.Drawing.Point(119, 3); + this.textBoxPath.Name = "textBoxPath"; + this.textBoxPath.Size = new System.Drawing.Size(350, 23); + this.textBoxPath.TabIndex = 8; + this.textBoxPath.TextChanged += new System.EventHandler(this.textBoxPath_TextChanged); + // + // comboBoxTimezone + // + this.comboBoxTimezone.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.optionsPanel.SetColumnSpan(this.comboBoxTimezone, 3); + this.comboBoxTimezone.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxTimezone.FormattingEnabled = true; + this.comboBoxTimezone.Location = new System.Drawing.Point(119, 302); + this.comboBoxTimezone.Name = "comboBoxTimezone"; + this.comboBoxTimezone.Size = new System.Drawing.Size(350, 23); + this.comboBoxTimezone.TabIndex = 17; + this.comboBoxTimezone.SelectionChangeCommitted += new System.EventHandler(this.comboBoxTimezone_SelectionChangeCommitted); + // + // label8 + // + this.label8.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(51, 305); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(62, 15); + this.label8.TabIndex = 27; + this.label8.Text = "Timezone:"; + this.label8.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // label2 + // + this.label2.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(24, 36); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(89, 15); + this.label2.TabIndex = 11; + this.label2.Text = "Connect Mode:"; + this.label2.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // richTextBoxNotes + // + this.optionsPanel.SetColumnSpan(this.richTextBoxNotes, 3); + this.richTextBoxNotes.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBoxNotes.Location = new System.Drawing.Point(119, 232); + this.richTextBoxNotes.Name = "richTextBoxNotes"; + this.richTextBoxNotes.Size = new System.Drawing.Size(350, 64); + this.richTextBoxNotes.TabIndex = 16; + this.richTextBoxNotes.Text = ""; + this.richTextBoxNotes.TextChanged += new System.EventHandler(this.richTextBoxNotes_TextChanged); + // + // labelNotes + // + this.labelNotes.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelNotes.AutoSize = true; + this.labelNotes.Location = new System.Drawing.Point(72, 256); + this.labelNotes.Name = "labelNotes"; + this.labelNotes.Size = new System.Drawing.Size(41, 15); + this.labelNotes.TabIndex = 26; + this.labelNotes.Text = "Notes:"; + this.labelNotes.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // comboBoxConnectMode + // + this.comboBoxConnectMode.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.optionsPanel.SetColumnSpan(this.comboBoxConnectMode, 3); + this.comboBoxConnectMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxConnectMode.FormattingEnabled = true; + this.comboBoxConnectMode.Location = new System.Drawing.Point(119, 32); + this.comboBoxConnectMode.Name = "comboBoxConnectMode"; + this.comboBoxConnectMode.Size = new System.Drawing.Size(350, 23); + this.comboBoxConnectMode.TabIndex = 9; + this.comboBoxConnectMode.SelectionChangeCommitted += new System.EventHandler(this.comboBoxConnectMode_SelectionChangeCommitted); + // + // label3 + // + this.label3.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(53, 65); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(60, 15); + this.label3.TabIndex = 13; + this.label3.Text = "Encoding:"; + this.label3.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // buttonWebURL + // + this.buttonWebURL.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.buttonWebURL.FlatAppearance.BorderSize = 0; + this.buttonWebURL.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.buttonWebURL.Image = global::Ch.Cyberduck.ResourcesBundle.site; + this.buttonWebURL.Location = new System.Drawing.Point(446, 203); + this.buttonWebURL.MaximumSize = new System.Drawing.Size(23, 23); + this.buttonWebURL.Name = "buttonWebURL"; + this.buttonWebURL.Size = new System.Drawing.Size(23, 23); + this.buttonWebURL.TabIndex = 15; + this.buttonWebURL.UseVisualStyleBackColor = true; + this.buttonWebURL.Click += new System.EventHandler(this.buttonWebURL_Click); + // + // comboBoxEncoding + // + this.comboBoxEncoding.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.optionsPanel.SetColumnSpan(this.comboBoxEncoding, 3); + this.comboBoxEncoding.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxEncoding.FormattingEnabled = true; + this.comboBoxEncoding.Location = new System.Drawing.Point(119, 61); + this.comboBoxEncoding.Name = "comboBoxEncoding"; + this.comboBoxEncoding.Size = new System.Drawing.Size(350, 23); + this.comboBoxEncoding.TabIndex = 10; + this.comboBoxEncoding.SelectionChangeCommitted += new System.EventHandler(this.comboBoxEncoding_SelectionChangeCommitted); + // + // checkBoxPKA + // + this.checkBoxPKA.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.checkBoxPKA.AutoSize = true; + this.optionsPanel.SetColumnSpan(this.checkBoxPKA, 3); + this.checkBoxPKA.Location = new System.Drawing.Point(119, 90); + this.checkBoxPKA.Name = "checkBoxPKA"; + this.checkBoxPKA.Size = new System.Drawing.Size(185, 19); + this.checkBoxPKA.TabIndex = 11; + this.checkBoxPKA.Text = "Use Public Key Authentication"; + this.checkBoxPKA.UseVisualStyleBackColor = true; + this.checkBoxPKA.CheckedChanged += new System.EventHandler(this.checkBoxPKA_CheckedChanged); + // + // labelDownloadFolder + // + this.labelDownloadFolder.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelDownloadFolder.AutoSize = true; + this.labelDownloadFolder.Location = new System.Drawing.Point(13, 148); + this.labelDownloadFolder.Name = "labelDownloadFolder"; + this.labelDownloadFolder.Size = new System.Drawing.Size(100, 15); + this.labelDownloadFolder.TabIndex = 18; + this.labelDownloadFolder.Text = "Download Folder:"; + this.labelDownloadFolder.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // textBoxWebUrl + // + this.textBoxWebUrl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.optionsPanel.SetColumnSpan(this.textBoxWebUrl, 2); + this.textBoxWebUrl.Location = new System.Drawing.Point(119, 203); + this.textBoxWebUrl.Name = "textBoxWebUrl"; + this.textBoxWebUrl.Size = new System.Drawing.Size(312, 23); + this.textBoxWebUrl.TabIndex = 14; + this.textBoxWebUrl.TextChanged += new System.EventHandler(this.textBoxWebUrl_TextChanged); + // + // linkLabelDownloadFolder + // + this.linkLabelDownloadFolder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.linkLabelDownloadFolder.AutoEllipsis = true; + this.linkLabelDownloadFolder.Location = new System.Drawing.Point(119, 148); + this.linkLabelDownloadFolder.Margin = new System.Windows.Forms.Padding(3); + this.linkLabelDownloadFolder.Name = "linkLabelDownloadFolder"; + this.linkLabelDownloadFolder.Size = new System.Drawing.Size(278, 15); + this.linkLabelDownloadFolder.TabIndex = 19; + this.linkLabelDownloadFolder.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelDownloadFolder_LinkClicked); + // + // labelWebURL + // + this.labelWebURL.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelWebURL.AutoSize = true; + this.labelWebURL.Location = new System.Drawing.Point(55, 207); + this.labelWebURL.Name = "labelWebURL"; + this.labelWebURL.Size = new System.Drawing.Size(58, 15); + this.labelWebURL.TabIndex = 22; + this.labelWebURL.Text = "Web URL:"; + this.labelWebURL.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // labelTransferFiles + // + this.labelTransferFiles.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelTransferFiles.AutoSize = true; + this.labelTransferFiles.Location = new System.Drawing.Point(35, 178); + this.labelTransferFiles.Name = "labelTransferFiles"; + this.labelTransferFiles.Size = new System.Drawing.Size(78, 15); + this.labelTransferFiles.TabIndex = 20; + this.labelTransferFiles.Text = "Transfer Files:"; + this.labelTransferFiles.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // comboBoxTransferFiles + // + this.comboBoxTransferFiles.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.optionsPanel.SetColumnSpan(this.comboBoxTransferFiles, 3); + this.comboBoxTransferFiles.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxTransferFiles.FormattingEnabled = true; + this.comboBoxTransferFiles.Location = new System.Drawing.Point(119, 174); + this.comboBoxTransferFiles.Name = "comboBoxTransferFiles"; + this.comboBoxTransferFiles.Size = new System.Drawing.Size(350, 23); + this.comboBoxTransferFiles.TabIndex = 13; + this.comboBoxTransferFiles.SelectionChangeCommitted += new System.EventHandler(this.comboBoxTransferFiles_SelectionChangeCommitted); + // + // pkLabel + // + this.pkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pkLabel.AutoEllipsis = true; + this.pkLabel.AutoSize = true; + this.optionsPanel.SetColumnSpan(this.pkLabel, 3); + this.pkLabel.Location = new System.Drawing.Point(136, 112); + this.pkLabel.Margin = new System.Windows.Forms.Padding(20, 0, 3, 0); + this.pkLabel.MinimumSize = new System.Drawing.Size(0, 28); + this.pkLabel.Name = "pkLabel"; + this.pkLabel.Size = new System.Drawing.Size(333, 28); + this.pkLabel.TabIndex = 33; + // + // downloadFolderButton + // + this.downloadFolderButton.AutoSize = true; + this.optionsPanel.SetColumnSpan(this.downloadFolderButton, 2); + this.downloadFolderButton.Location = new System.Drawing.Point(403, 143); + this.downloadFolderButton.Name = "downloadFolderButton"; + this.downloadFolderButton.Size = new System.Drawing.Size(66, 25); + this.downloadFolderButton.TabIndex = 12; + this.downloadFolderButton.Text = "Choose…"; + this.downloadFolderButton.UseVisualStyleBackColor = true; + this.downloadFolderButton.Click += new System.EventHandler(this.downloadFolderButton_Click); + // + // separatorLine + // + this.separatorLine.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.separatorLine.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.separatorLine.Location = new System.Drawing.Point(17, 211); + this.separatorLine.Name = "separatorLine"; + this.separatorLine.Size = new System.Drawing.Size(452, 2); + this.separatorLine.TabIndex = 40; + // + // toggleOptionsLabel + // + this.toggleOptionsLabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.toggleOptionsLabel.ImageIndex = 3; + this.toggleOptionsLabel.ImageList = this.imageList; + this.toggleOptionsLabel.Location = new System.Drawing.Point(13, 182); + this.toggleOptionsLabel.Name = "toggleOptionsLabel"; + this.toggleOptionsLabel.Size = new System.Drawing.Size(168, 27); + this.toggleOptionsLabel.TabIndex = 7; + this.toggleOptionsLabel.Text = " Toggle Transcript"; + this.toggleOptionsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // BookmarkForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(482, 555); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.tableLayoutPanel1); + this.Controls.Add(this.optionsPanel); + this.Controls.Add(this.separatorLine); + this.Controls.Add(this.toggleOptionsLabel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; + this.Name = "BookmarkForm"; + this.Text = "Bookmark Editor"; + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.alertIcon)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPort)).EndInit(); + this.optionsPanel.ResumeLayout(false); + this.optionsPanel.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private ImageComboBox protocol; + private System.Windows.Forms.Label labelNickname; + private System.Windows.Forms.TextBox textBoxNickname; + private System.Windows.Forms.Label labelURL; + private System.Windows.Forms.LinkLabel linkLabelURL; + private System.Windows.Forms.Label labelServer; + private System.Windows.Forms.TextBox textBoxServer; + private System.Windows.Forms.Label labelPort; + private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog; + private System.Windows.Forms.ImageList iconList; + private System.Windows.Forms.Label labelUsername; + private System.Windows.Forms.TextBox textBoxUsername; + private System.Windows.Forms.PictureBox alertIcon; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.ImageList imageList; + private System.Windows.Forms.Label toggleOptionsLabel; + private System.Windows.Forms.Label separatorLine; + private System.Windows.Forms.TableLayoutPanel optionsPanel; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBoxPath; + private System.Windows.Forms.ComboBox comboBoxTimezone; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.RichTextBox richTextBoxNotes; + private System.Windows.Forms.Label labelNotes; + private System.Windows.Forms.ComboBox comboBoxConnectMode; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button buttonWebURL; + private System.Windows.Forms.ComboBox comboBoxEncoding; + private System.Windows.Forms.CheckBox checkBoxPKA; + private System.Windows.Forms.Label labelDownloadFolder; + private System.Windows.Forms.TextBox textBoxWebUrl; + private System.Windows.Forms.LinkLabel linkLabelDownloadFolder; + private System.Windows.Forms.Label labelWebURL; + private System.Windows.Forms.Label labelTransferFiles; + private System.Windows.Forms.ComboBox comboBoxTransferFiles; + private System.Windows.Forms.Button downloadFolderButton; + private System.Windows.Forms.ToolTip toolTip; + private EllipsisLabel pkLabel; + private System.Windows.Forms.OpenFileDialog openFileDialog; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.CheckBox checkBoxAnonymous; + private System.Windows.Forms.NumericUpDown numericUpDownPort; + + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/BookmarkForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BookmarkForm.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/BookmarkForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/BookmarkForm.cs index 6ddfdc4cfe..ec8ea44762 100644 --- a/source/ch/cyberduck/ui/winforms/BookmarkForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BookmarkForm.cs @@ -1,511 +1,511 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; -using ch.cyberduck.core; -using ch.cyberduck.core.ftp; -using Ch.Cyberduck.Ui.Controller; -using Ch.Cyberduck.Ui.Winforms.Controls; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class BookmarkForm : BaseForm, IBookmarkView - { - private bool _expanded = true; - - public BookmarkForm() - { - InitializeComponent(); - - //focus nickname - Load += (sender, args) => textBoxNickname.Focus(); - - protocol.ICImageList = IconCache.Instance.GetProtocolIcons(); - - toggleOptionsLabel.Text = " " + LocaleFactory.localizedString("More Options", "Bookmark"); - toggleOptionsLabel.ImageIndex = (_expanded ? 1 : 4); - - openFileDialog.Title = LocaleFactory.localizedString("Select the private key in PEM or PuTTY format", - "Credentials"); - - openFileDialog.Filter = "Private Key Files (*.pem;*.crt;*.ppk)|*.pem;*.crt;*.ppk|All Files (*.*)|*.*"; - openFileDialog.FilterIndex = 1; - - SetMinMaxSize(Height); - ConfigureToggleOptions(); - - - numericUpDownPort.GotFocus += delegate { numericUpDownPort.Select(0, numericUpDownPort.Text.Length); }; - } - - public bool HostFieldEnabled - { - get { return textBoxServer.Enabled; } - set { textBoxServer.Enabled = value; } - } - - public override string[] BundleNames - { - get { return new[] {"Bookmark"}; } - } - - public bool SavePasswordEnabled - { - set { ; } - } - - public string PasswordLabel - { - set { } - } - - public string Password - { - get { return string.Empty; } - set { ; } - } - - public bool PasswordEnabled - { - set { ; } - } - - public bool SavePasswordChecked - { - get { return true; } - set { ; } - } - - public bool AnonymousChecked - { - get { return checkBoxAnonymous.Checked; } - set { checkBoxAnonymous.Checked = value; } - } - - public bool AnonymousEnabled - { - get { return checkBoxAnonymous.Enabled; } - set { checkBoxAnonymous.Enabled = value; } - } - - public void PopulateProtocols(List> protocols) - { - protocol.DataSource = protocols; - protocol.ValueMember = "Key"; - protocol.DisplayMember = "Value"; - protocol.IconMember = "IconKey"; - } - - public void PopulateConnectModes(List> modes) - { - comboBoxConnectMode.DataSource = null; - comboBoxConnectMode.DataSource = modes; - comboBoxConnectMode.DisplayMember = "Key"; - comboBoxConnectMode.ValueMember = "Value"; - } - - public void PopulateEncodings(List encodings) - { - comboBoxEncoding.DataSource = encodings; - } - - public void PopulateTransferModes(List> modes) - { - comboBoxTransferFiles.DataSource = null; - comboBoxTransferFiles.DataSource = modes; - comboBoxTransferFiles.DisplayMember = "Key"; - comboBoxTransferFiles.ValueMember = "Value"; - } - - public void ShowDownloadFolderBrowser(string path) - { - folderBrowserDialog.SelectedPath = path; - if (DialogResult.OK == folderBrowserDialog.ShowDialog()) - { - ChangedBrowserDownloadPathEvent(); - } - } - - public void ShowPrivateKeyBrowser(string path) - { - openFileDialog.InitialDirectory = path; - openFileDialog.FileName = String.Empty; - if (DialogResult.OK == openFileDialog.ShowDialog()) - { - ChangedPrivateKey(this, new PrivateKeyArgs(openFileDialog.FileName)); - } - else - { - ChangedPrivateKey(this, new PrivateKeyArgs(null)); - } - } - - public void PopulateTimezones(List timezones) - { - comboBoxTimezone.DataSource = timezones; - } - - public string UsernameLabel - { - set { labelUsername.Text = value; } - } - - public Image Favicon - { - set { buttonWebURL.Image = value; } - } - - public event VoidHandler ChangedProtocolEvent = delegate { }; - public event VoidHandler ChangedPortEvent = delegate { }; - public event VoidHandler ChangedEncodingEvent = delegate { }; - public event VoidHandler ChangedServerEvent = delegate { }; - public event VoidHandler ChangedUsernameEvent = delegate { }; - public event VoidHandler ChangedNicknameEvent = delegate { }; - public event VoidHandler ChangedPathEvent = delegate { }; - public event VoidHandler ChangedAnonymousCheckboxEvent = delegate { }; - public event VoidHandler ChangedTimezoneEvent = delegate { }; - public event VoidHandler ChangedConnectModeEvent = delegate { }; - public event VoidHandler ChangedTransferEvent = delegate { }; - public event VoidHandler ChangedPublicKeyCheckboxEvent = delegate { }; - public event VoidHandler ChangedWebURLEvent = delegate { }; - public event VoidHandler ChangedCommentEvent = delegate { }; - public event VoidHandler ChangedBrowserDownloadPathEvent = delegate { }; - public event VoidHandler OpenWebUrl = delegate { }; - public event VoidHandler OpenDownloadFolderBrowserEvent = delegate { }; - public event VoidHandler OpenDownloadFolderEvent = delegate { }; - public event VoidHandler LaunchNetworkAssistantEvent = delegate { }; - public event VoidHandler OpenUrl = delegate { }; - public event EventHandler ChangedPrivateKey = delegate { }; - - public bool PortFieldEnabled - { - set { numericUpDownPort.Enabled = value; } - } - - public bool ConnectModeFieldEnabled - { - set { comboBoxConnectMode.Enabled = value; } - } - - public bool EncodingFieldEnabled - { - set { comboBoxEncoding.Enabled = value; } - } - - public bool PkCheckboxEnabled - { - set { checkBoxPKA.Enabled = value; } - } - - public bool PkCheckboxState - { - get { return checkBoxPKA.Checked; } - set { checkBoxPKA.Checked = value; } - } - - public string PkLabel - { - set - { - pkLabel.Text = value; - pkLabel.ForeColor = checkBoxPKA.Checked ? Color.FromKnownColor(KnownColor.ControlText) : Color.Gray; - } - get { return pkLabel.Text; } - } - - public bool WebUrlFieldEnabled - { - set { textBoxWebUrl.Enabled = value; } - } - - public string WebUrlButtonToolTip - { - set { toolTip.SetToolTip(buttonWebURL, value); } - } - - public bool TimezoneFieldEnabled - { - set { comboBoxTimezone.Enabled = value; } - } - - public bool AlertIconEnabled - { - set { alertIcon.Visible = value; } - } - - public event VoidHandler ToggleOptions; - - public bool OptionsVisible - { - get { return _expanded; } - set - { - if (_expanded != value) - { - _expanded = value; - - if (_expanded) - { - SetMinMaxSize(Height + optionsPanel.Height); - Height += optionsPanel.Height; - } - else - { - SetMinMaxSize(Height - optionsPanel.Height); - Height -= optionsPanel.Height; - } - optionsPanel.Visible = _expanded; - toggleOptionsLabel.ImageIndex = (_expanded ? 1 : 4); - } - } - } - - public string DownloadFolder - { - set { linkLabelDownloadFolder.Text = value; } - } - - public Protocol SelectedProtocol - { - get { return (Protocol) protocol.SelectedValue; } - set { protocol.SelectedValue = value; } - } - - public string Nickname - { - get { return textBoxNickname.Text; } - set - { - textBoxNickname.TextChanged -= textBoxNickname_TextChanged; - textBoxNickname.Text = value; - textBoxNickname.TextChanged += textBoxNickname_TextChanged; - } - } - - public string URL - { - set { linkLabelURL.Text = value; } - get { return linkLabelURL.Text; } - } - - public string Hostname - { - get { return textBoxServer.Text; } - set { textBoxServer.Text = value; } - } - - public string Port - { - get { return numericUpDownPort.Text; } - set { numericUpDownPort.Text = value; } - } - - public string Username - { - get { return textBoxUsername.Text; } - set { textBoxUsername.Text = value; } - } - - public bool UsernameEnabled - { - set { textBoxUsername.Enabled = value; } - } - - public string Path - { - get { return textBoxPath.Text; } - set { textBoxPath.Text = value; } - } - - public bool PathEnabled - { - get { return textBoxPath.Enabled; } - set { textBoxPath.Enabled = value; } - } - - public FTPConnectMode SelectedConnectMode - { - get { return (FTPConnectMode) comboBoxConnectMode.SelectedValue; } - set { comboBoxConnectMode.SelectedValue = value; } - } - - public string SelectedEncoding - { - get { return comboBoxEncoding.Text; } - set { comboBoxEncoding.Text = value; } - } - - public Host.TransferType SelectedTransferMode - { - get { return (Host.TransferType) comboBoxTransferFiles.SelectedValue; } - set { comboBoxTransferFiles.SelectedValue = value; } - } - - public string SelectedDownloadFolder - { - get { return folderBrowserDialog.SelectedPath; } - } - - public string WebURL - { - get { return textBoxWebUrl.Text; } - set { textBoxWebUrl.Text = value; } - } - - public string Notes - { - get { return richTextBoxNotes.Text; } - set { richTextBoxNotes.Text = value; } - } - - public string SelectedTimezone - { - get { return comboBoxTimezone.Text; } - set { comboBoxTimezone.Text = value; } - } - - public string WindowTitle - { - set { Text = value; } - } - - public event VoidHandler ChangedSavePasswordCheckboxEvent = delegate { }; - - private void ConfigureToggleOptions() - { - toggleOptionsLabel.Click += (sender, args) => ToggleOptions(); - toggleOptionsLabel.MouseDown += delegate { toggleOptionsLabel.ImageIndex = (_expanded ? 2 : 5); }; - toggleOptionsLabel.MouseEnter += delegate { toggleOptionsLabel.ImageIndex = (_expanded ? 1 : 4); }; - toggleOptionsLabel.MouseLeave += delegate { toggleOptionsLabel.ImageIndex = (_expanded ? 0 : 3); }; - toggleOptionsLabel.MouseUp += delegate { toggleOptionsLabel.ImageIndex = (_expanded ? 1 : 4); }; - } - - private void SetMinMaxSize(int height) - { - MinimumSize = new Size(450, height); - MaximumSize = new Size(800, height); - } - - private void protocol_SelectionChangeCommitted(object sender, EventArgs e) - { - ChangedProtocolEvent(); - } - - private void textBoxNickname_TextChanged(object sender, EventArgs e) - { - ChangedNicknameEvent(); - } - - private void textBoxServer_TextChanged(object sender, EventArgs e) - { - ChangedServerEvent(); - } - - private void numericUpDownPort_TextChanged(object sender, EventArgs e) - { - ChangedPortEvent(); - } - - private void textBoxUsername_TextChanged(object sender, EventArgs e) - { - ChangedUsernameEvent(); - } - - private void textBoxPath_TextChanged(object sender, EventArgs e) - { - //prevent cursor from being positioned at the beginning after trimming trailing spaces - //see Host.setDefaultPath - int sel = textBoxPath.SelectionStart; - String trimmed = textBoxPath.Text.Trim(); - if (!trimmed.Equals(textBoxPath)) - { - textBoxPath.Text = trimmed; - textBoxPath.SelectionStart = sel; - } - ChangedPathEvent(); - } - - private void comboBoxConnectMode_SelectionChangeCommitted(object sender, EventArgs e) - { - ChangedConnectModeEvent(); - } - - private void comboBoxEncoding_SelectionChangeCommitted(object sender, EventArgs e) - { - ChangedEncodingEvent(); - } - - private void comboBoxTransferFiles_SelectionChangeCommitted(object sender, EventArgs e) - { - ChangedTransferEvent(); - } - - private void textBoxWebUrl_TextChanged(object sender, EventArgs e) - { - ChangedWebURLEvent(); - } - - private void richTextBoxNotes_TextChanged(object sender, EventArgs e) - { - ChangedCommentEvent(); - } - - private void checkBoxPKA_CheckedChanged(object sender, EventArgs e) - { - ChangedPublicKeyCheckboxEvent(); - } - - private void downloadFolderButton_Click(object sender, EventArgs e) - { - OpenDownloadFolderBrowserEvent(); - } - - private void comboBoxTimezone_SelectionChangeCommitted(object sender, EventArgs e) - { - ChangedTimezoneEvent(); - } - - private void linkLabelDownloadFolder_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - OpenDownloadFolderEvent(); - } - - private void buttonWebURL_Click(object sender, EventArgs e) - { - OpenWebUrl(); - } - - private void linkLabelURL_Click(object sender, EventArgs e) - { - OpenUrl(); - } - - private void button1_Click(object sender, EventArgs e) - { - Close(); - } - - private void checkBoxAnonymous_CheckedChanged(object sender, EventArgs e) - { - ChangedAnonymousCheckboxEvent(); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using ch.cyberduck.core; +using ch.cyberduck.core.ftp; +using Ch.Cyberduck.Ui.Controller; +using Ch.Cyberduck.Ui.Winforms.Controls; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class BookmarkForm : BaseForm, IBookmarkView + { + private bool _expanded = true; + + public BookmarkForm() + { + InitializeComponent(); + + //focus nickname + Load += (sender, args) => textBoxNickname.Focus(); + + protocol.ICImageList = IconCache.Instance.GetProtocolIcons(); + + toggleOptionsLabel.Text = " " + LocaleFactory.localizedString("More Options", "Bookmark"); + toggleOptionsLabel.ImageIndex = (_expanded ? 1 : 4); + + openFileDialog.Title = LocaleFactory.localizedString("Select the private key in PEM or PuTTY format", + "Credentials"); + + openFileDialog.Filter = "Private Key Files (*.pem;*.crt;*.ppk)|*.pem;*.crt;*.ppk|All Files (*.*)|*.*"; + openFileDialog.FilterIndex = 1; + + SetMinMaxSize(Height); + ConfigureToggleOptions(); + + + numericUpDownPort.GotFocus += delegate { numericUpDownPort.Select(0, numericUpDownPort.Text.Length); }; + } + + public bool HostFieldEnabled + { + get { return textBoxServer.Enabled; } + set { textBoxServer.Enabled = value; } + } + + public override string[] BundleNames + { + get { return new[] {"Bookmark"}; } + } + + public bool SavePasswordEnabled + { + set { ; } + } + + public string PasswordLabel + { + set { } + } + + public string Password + { + get { return string.Empty; } + set { ; } + } + + public bool PasswordEnabled + { + set { ; } + } + + public bool SavePasswordChecked + { + get { return true; } + set { ; } + } + + public bool AnonymousChecked + { + get { return checkBoxAnonymous.Checked; } + set { checkBoxAnonymous.Checked = value; } + } + + public bool AnonymousEnabled + { + get { return checkBoxAnonymous.Enabled; } + set { checkBoxAnonymous.Enabled = value; } + } + + public void PopulateProtocols(List> protocols) + { + protocol.DataSource = protocols; + protocol.ValueMember = "Key"; + protocol.DisplayMember = "Value"; + protocol.IconMember = "IconKey"; + } + + public void PopulateConnectModes(List> modes) + { + comboBoxConnectMode.DataSource = null; + comboBoxConnectMode.DataSource = modes; + comboBoxConnectMode.DisplayMember = "Key"; + comboBoxConnectMode.ValueMember = "Value"; + } + + public void PopulateEncodings(List encodings) + { + comboBoxEncoding.DataSource = encodings; + } + + public void PopulateTransferModes(List> modes) + { + comboBoxTransferFiles.DataSource = null; + comboBoxTransferFiles.DataSource = modes; + comboBoxTransferFiles.DisplayMember = "Key"; + comboBoxTransferFiles.ValueMember = "Value"; + } + + public void ShowDownloadFolderBrowser(string path) + { + folderBrowserDialog.SelectedPath = path; + if (DialogResult.OK == folderBrowserDialog.ShowDialog()) + { + ChangedBrowserDownloadPathEvent(); + } + } + + public void ShowPrivateKeyBrowser(string path) + { + openFileDialog.InitialDirectory = path; + openFileDialog.FileName = String.Empty; + if (DialogResult.OK == openFileDialog.ShowDialog()) + { + ChangedPrivateKey(this, new PrivateKeyArgs(openFileDialog.FileName)); + } + else + { + ChangedPrivateKey(this, new PrivateKeyArgs(null)); + } + } + + public void PopulateTimezones(List timezones) + { + comboBoxTimezone.DataSource = timezones; + } + + public string UsernameLabel + { + set { labelUsername.Text = value; } + } + + public Image Favicon + { + set { buttonWebURL.Image = value; } + } + + public event VoidHandler ChangedProtocolEvent = delegate { }; + public event VoidHandler ChangedPortEvent = delegate { }; + public event VoidHandler ChangedEncodingEvent = delegate { }; + public event VoidHandler ChangedServerEvent = delegate { }; + public event VoidHandler ChangedUsernameEvent = delegate { }; + public event VoidHandler ChangedNicknameEvent = delegate { }; + public event VoidHandler ChangedPathEvent = delegate { }; + public event VoidHandler ChangedAnonymousCheckboxEvent = delegate { }; + public event VoidHandler ChangedTimezoneEvent = delegate { }; + public event VoidHandler ChangedConnectModeEvent = delegate { }; + public event VoidHandler ChangedTransferEvent = delegate { }; + public event VoidHandler ChangedPublicKeyCheckboxEvent = delegate { }; + public event VoidHandler ChangedWebURLEvent = delegate { }; + public event VoidHandler ChangedCommentEvent = delegate { }; + public event VoidHandler ChangedBrowserDownloadPathEvent = delegate { }; + public event VoidHandler OpenWebUrl = delegate { }; + public event VoidHandler OpenDownloadFolderBrowserEvent = delegate { }; + public event VoidHandler OpenDownloadFolderEvent = delegate { }; + public event VoidHandler LaunchNetworkAssistantEvent = delegate { }; + public event VoidHandler OpenUrl = delegate { }; + public event EventHandler ChangedPrivateKey = delegate { }; + + public bool PortFieldEnabled + { + set { numericUpDownPort.Enabled = value; } + } + + public bool ConnectModeFieldEnabled + { + set { comboBoxConnectMode.Enabled = value; } + } + + public bool EncodingFieldEnabled + { + set { comboBoxEncoding.Enabled = value; } + } + + public bool PkCheckboxEnabled + { + set { checkBoxPKA.Enabled = value; } + } + + public bool PkCheckboxState + { + get { return checkBoxPKA.Checked; } + set { checkBoxPKA.Checked = value; } + } + + public string PkLabel + { + set + { + pkLabel.Text = value; + pkLabel.ForeColor = checkBoxPKA.Checked ? Color.FromKnownColor(KnownColor.ControlText) : Color.Gray; + } + get { return pkLabel.Text; } + } + + public bool WebUrlFieldEnabled + { + set { textBoxWebUrl.Enabled = value; } + } + + public string WebUrlButtonToolTip + { + set { toolTip.SetToolTip(buttonWebURL, value); } + } + + public bool TimezoneFieldEnabled + { + set { comboBoxTimezone.Enabled = value; } + } + + public bool AlertIconEnabled + { + set { alertIcon.Visible = value; } + } + + public event VoidHandler ToggleOptions; + + public bool OptionsVisible + { + get { return _expanded; } + set + { + if (_expanded != value) + { + _expanded = value; + + if (_expanded) + { + SetMinMaxSize(Height + optionsPanel.Height); + Height += optionsPanel.Height; + } + else + { + SetMinMaxSize(Height - optionsPanel.Height); + Height -= optionsPanel.Height; + } + optionsPanel.Visible = _expanded; + toggleOptionsLabel.ImageIndex = (_expanded ? 1 : 4); + } + } + } + + public string DownloadFolder + { + set { linkLabelDownloadFolder.Text = value; } + } + + public Protocol SelectedProtocol + { + get { return (Protocol) protocol.SelectedValue; } + set { protocol.SelectedValue = value; } + } + + public string Nickname + { + get { return textBoxNickname.Text; } + set + { + textBoxNickname.TextChanged -= textBoxNickname_TextChanged; + textBoxNickname.Text = value; + textBoxNickname.TextChanged += textBoxNickname_TextChanged; + } + } + + public string URL + { + set { linkLabelURL.Text = value; } + get { return linkLabelURL.Text; } + } + + public string Hostname + { + get { return textBoxServer.Text; } + set { textBoxServer.Text = value; } + } + + public string Port + { + get { return numericUpDownPort.Text; } + set { numericUpDownPort.Text = value; } + } + + public string Username + { + get { return textBoxUsername.Text; } + set { textBoxUsername.Text = value; } + } + + public bool UsernameEnabled + { + set { textBoxUsername.Enabled = value; } + } + + public string Path + { + get { return textBoxPath.Text; } + set { textBoxPath.Text = value; } + } + + public bool PathEnabled + { + get { return textBoxPath.Enabled; } + set { textBoxPath.Enabled = value; } + } + + public FTPConnectMode SelectedConnectMode + { + get { return (FTPConnectMode) comboBoxConnectMode.SelectedValue; } + set { comboBoxConnectMode.SelectedValue = value; } + } + + public string SelectedEncoding + { + get { return comboBoxEncoding.Text; } + set { comboBoxEncoding.Text = value; } + } + + public Host.TransferType SelectedTransferMode + { + get { return (Host.TransferType) comboBoxTransferFiles.SelectedValue; } + set { comboBoxTransferFiles.SelectedValue = value; } + } + + public string SelectedDownloadFolder + { + get { return folderBrowserDialog.SelectedPath; } + } + + public string WebURL + { + get { return textBoxWebUrl.Text; } + set { textBoxWebUrl.Text = value; } + } + + public string Notes + { + get { return richTextBoxNotes.Text; } + set { richTextBoxNotes.Text = value; } + } + + public string SelectedTimezone + { + get { return comboBoxTimezone.Text; } + set { comboBoxTimezone.Text = value; } + } + + public string WindowTitle + { + set { Text = value; } + } + + public event VoidHandler ChangedSavePasswordCheckboxEvent = delegate { }; + + private void ConfigureToggleOptions() + { + toggleOptionsLabel.Click += (sender, args) => ToggleOptions(); + toggleOptionsLabel.MouseDown += delegate { toggleOptionsLabel.ImageIndex = (_expanded ? 2 : 5); }; + toggleOptionsLabel.MouseEnter += delegate { toggleOptionsLabel.ImageIndex = (_expanded ? 1 : 4); }; + toggleOptionsLabel.MouseLeave += delegate { toggleOptionsLabel.ImageIndex = (_expanded ? 0 : 3); }; + toggleOptionsLabel.MouseUp += delegate { toggleOptionsLabel.ImageIndex = (_expanded ? 1 : 4); }; + } + + private void SetMinMaxSize(int height) + { + MinimumSize = new Size(450, height); + MaximumSize = new Size(800, height); + } + + private void protocol_SelectionChangeCommitted(object sender, EventArgs e) + { + ChangedProtocolEvent(); + } + + private void textBoxNickname_TextChanged(object sender, EventArgs e) + { + ChangedNicknameEvent(); + } + + private void textBoxServer_TextChanged(object sender, EventArgs e) + { + ChangedServerEvent(); + } + + private void numericUpDownPort_TextChanged(object sender, EventArgs e) + { + ChangedPortEvent(); + } + + private void textBoxUsername_TextChanged(object sender, EventArgs e) + { + ChangedUsernameEvent(); + } + + private void textBoxPath_TextChanged(object sender, EventArgs e) + { + //prevent cursor from being positioned at the beginning after trimming trailing spaces + //see Host.setDefaultPath + int sel = textBoxPath.SelectionStart; + String trimmed = textBoxPath.Text.Trim(); + if (!trimmed.Equals(textBoxPath)) + { + textBoxPath.Text = trimmed; + textBoxPath.SelectionStart = sel; + } + ChangedPathEvent(); + } + + private void comboBoxConnectMode_SelectionChangeCommitted(object sender, EventArgs e) + { + ChangedConnectModeEvent(); + } + + private void comboBoxEncoding_SelectionChangeCommitted(object sender, EventArgs e) + { + ChangedEncodingEvent(); + } + + private void comboBoxTransferFiles_SelectionChangeCommitted(object sender, EventArgs e) + { + ChangedTransferEvent(); + } + + private void textBoxWebUrl_TextChanged(object sender, EventArgs e) + { + ChangedWebURLEvent(); + } + + private void richTextBoxNotes_TextChanged(object sender, EventArgs e) + { + ChangedCommentEvent(); + } + + private void checkBoxPKA_CheckedChanged(object sender, EventArgs e) + { + ChangedPublicKeyCheckboxEvent(); + } + + private void downloadFolderButton_Click(object sender, EventArgs e) + { + OpenDownloadFolderBrowserEvent(); + } + + private void comboBoxTimezone_SelectionChangeCommitted(object sender, EventArgs e) + { + ChangedTimezoneEvent(); + } + + private void linkLabelDownloadFolder_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + OpenDownloadFolderEvent(); + } + + private void buttonWebURL_Click(object sender, EventArgs e) + { + OpenWebUrl(); + } + + private void linkLabelURL_Click(object sender, EventArgs e) + { + OpenUrl(); + } + + private void button1_Click(object sender, EventArgs e) + { + Close(); + } + + private void checkBoxAnonymous_CheckedChanged(object sender, EventArgs e) + { + ChangedAnonymousCheckboxEvent(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/BookmarkForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BookmarkForm.resx similarity index 98% rename from source/ch/cyberduck/ui/winforms/BookmarkForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/BookmarkForm.resx index cf2a3362a4..19ff495c14 100644 --- a/source/ch/cyberduck/ui/winforms/BookmarkForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BookmarkForm.resx @@ -1,356 +1,356 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 17, 17 - - - 180, 17 - - - 273, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADy - MQAAAk1TRnQBSQFMAgEBBwEAAdQBAwHUAQMBEwEAARMBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFM - AwABJgMAAQEBAAEgBQABIAEtKgAB1QG/AaIB/wHCAZ4BgQH/AbcBigEAAf8BsQGBAQAB/wG3AYoBAAH/ - AcIBngGBAf8B1QG/AaIB/zAAAcUBswGbAf8BpgGIAQMB/wGVAYEBAAH/AYsBBAEAAf8BlQGBAQAB/wGm - AYgBAwH/AcUBswGbAf/AAAHRAbcBlQH/AbQBhAEAAf8BzgGuAYMB/wHgAc0BsgH/AeoB3wHOAf8B7wHp - AdwB/wHpAd8BzQH/Ad4BzAGxAf8BzAGtAYIB/wG0AYQBAAH/AdEBtwGVAf8gAAG9AakBjQH/AYwBBQEA - Af8BnAGBAQAB/wGzAY4BAAH/AcQBngEAAf8BzQGoAQMB/wHJAaIBAAH/AbsBlQEAAf8BpgGBAQAB/wGO - AYEBAAH/Ab0BqQGNAf+0AAHLAa4BhgH/AcgBpAGBAf8B7wHlAdUB/wH0Ae0B4gH/AfAB4gHIAf8B7AHV - Aa0B/wHpAc8BnwH/AeoB1AGsAf8B7QHfAcUB/wHvAekB3QH/AeoB4AHQAf8BxQGiAYEB/wHLAa4BhgH/ - GAABtQGdAYEB/wGTAYEBAAH/Ab0BmQEAAf8B0QGrAYEB/wHTAa4BgQH/AdMBrgGBAf8B0wGtAYEB/wHS - Aa0BgQH/AdIBrQGBAf8B0gGtAYEB/wHLAaYBBQH/AaEBgQEAAf8BtQGdAYEB/6wAAcsBrgGGAf8B1AG3 - AY4B/wH5AfIB5gH/AfQB5QHKAf8B7wHVAaUB/wHvAdUBpQH/Ae4B1AGlAf8B7QHTAaQB/wHrAdIBowH/ - AekB0AGhAf8B6QHQAaEB/wHtAd8BxAH/AfAB6QHeAf8BzwGyAYoB/wHLAa4BhgH/EAABtQGdAYEB/wGW - AYEBAAH/AcYBpAGAAf8B2AG0AYEB/wHaAbYBgQH/AdoBtgGBAf8B2QG1AYEB/wHYAbQBgQH/AdYBswGB - Af8B1QGxAYEB/wHVAbEBgQH/AdUBsQGBAf8B1QGxAYEB/wGtAYcBAAH/AbUBnQGBAf+kAAHQAbgBlwH/ - AcsBpwGBAf8B+wH0AegB/wH1AeABuQH/AfMB2gGqAf8B8wHaAaoB/wHyAdkBqgH/AfIB2QGqAf8B8QHY - AakB/wHwAdcBqAH/Ae4B1QGnAf8B6wHTAaUB/wHqAdIBpAH/AesB1wGxAf8B8AHpAd4B/wHGAaMBgQH/ - AdABuAGXAf8IAAG+AakBjwH/AY4BgQEAAf8BvwGeAQUB/wHbAbgBgQH/AeABvAGBAf8B4AG8AYEB/wHg - AbsBgQH/AeABuwGBAf8B3wG7AYEB/wHeAboBgQH/AdwBuAGBAf8B2QG2AYEB/wHYAbUBgQH/AdgBtQGB - Af8B2AG1AYEB/wGkAYEBAAH/Ab4BqQGPAf8kAAGBAeMBAAH/AYEB5AEAAf8B8AH8AewB/3AAAbUBhQEA - Af8B9gHsAdsB/wH7AewB0QH/AfgB3gGwAf8B+AHeAbAB/wH3Ad0BsAH/AfcB3QGwAf8B+wHrAdAB/wH8 - AfQB5gH/AfkB6gHPAf8B9AHbAa4B/wHxAdgBqwH/Ae0B1QGpAf8B7AHUAagB/wHuAeABxgH/AeoB4AHQ - Af8BtAGEAQAB/wgAAYsBBQEAAf8BqgGMAQAB/wHVAbQBgQH/AeUBwgGCAf8B5gHDAYIB/wHlAcIBggH/ - AeUBwgGCAf8B8AHbAbUB/wH3AewB2AH/Ae4B2gG0Af8B4gHAAYEB/wHgAb4BgQH/AdwBuwGBAf8B2wG6 - AYEB/wHbAboBgQH/AdMBsQGBAf8BjgGBAQAB/yAAAbIB8QGcAf8BAAHbAQAB/wEAAdsBAAH/AQAB4AEA - Af8B8gH9Ae4B/2gAAdYBwQGmAf8B0QGxAYUB/wH+AfgB7gH/AfoB4wG5Af8B+gHiAbgB/wH6AeIBtQH/ - AfoB4QG0Af8B/AHtAdMB/wH9AfYB6AH/AwAB/wH9AfUB5wH/AfsB7AHSAf8B9gHdAbEB/wHyAdoBrgH/ - Ae4B1gGsAf8B7QHWAasB/wHxAeoB4AH/AcsBqwGBAf8B1gHBAaYB/wHGAbUBnwH/AZIBgQEAAf8BxAGo - AYEB/wHjAcUBjAH/AesBzAGQAf8B6gHKAYwB/wHqAckBigH/AfIB3wG6Af8B+AHuAdsB/wMAAf8B+AHu - AdoB/wHxAd4BuQH/AeYBxgGIAf8B4wHDAYYB/wHfAcABhAH/Ad4BvwGDAf8B3gG/AYMB/wGqAYUBAAH/ - AcYBtQGfAf8hAAHeAQAB/wEAAdsBAAH/AQAB2wEAAf8BAAHhAQAB/wHvAfwB6wH/ZAABwgGeAYEB/wHp - AdgBvwH/Af0B8gHfAf8B/AHnAcEB/wH7AeYBwAH/AfsB5QG8Af8B/QHuAdUB/wH+AfYB6QH/AwAB/wMA - Af8DAAH/Af0B9gHpAf8B+wHtAdQB/wH2Ad8BtAH/AfIB2wGyAf8B7gHXAa8B/wHwAeMBzAH/AeABzwG2 - Af8BwQGcAYEB/wGmAYgBAwH/AaEBhgEAAf8B0wG6AY0B/wHsAdEBngH/Ae8B0gGeAf8B7gHQAZgB/wH0 - AeIBvwH/AfkB8AHdAf8DAAH/AwAB/wMAAf8B+QHvAd0B/wHzAeABvgH/AegByQGPAf8B5QHGAY0B/wHh - AcMBiwH/AeEBwwGLAf8ByAGoAYEB/wGlAYcBAQH/JQAB1wEAAf8BAAHTAQAB/wEAAdMBAAH/AQAB2gEA - Af8B8wH8AfAB/2AAAbcBigEAAf8B9wHuAeEB/wH9Ae4B0gH/Af0B6gHIAf8B/AHpAcUB/wH9AfEB2QH/ - Af4B9wHqAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wH+AfcB6gH/AfsB7QHVAf8B9QHfAbYB/wHxAdsBswH/ - Ae8B3QG8Af8B6wHhAdIB/wG3AYoBAAH/AZUBgQEAAf8BrQGXAYEB/wHZAcMBmwH/AfEB2QGrAf8B8QHY - AacB/wH2AeYBxwH/AfoB8QHgAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wH6AfAB3wH/AfMB4gHAAf8B6AHL - AZQB/wHlAcgBkQH/AeMBxgGQAf8B2gG8AYYB/wGVAYEBAAH/EAABgQHZAQAB/wGBAd0BAwH/AYEB3gGB - Af8BjAHhAYEB/wGYAeQBgwH/AQAB0AEAAf8BAAHIAQAB/wEAAcgBAAH/AQAByAEAAf8BAAHSAQAB/wHu - AfsB6wH/XAABswGCAQAB/wH8AfgB8AH/Af4B7QHSAf8B/QHsAc4B/wH+AfMB4AH/Af4B+AHtAf8DAAH/ - AwAB/wMAAf8B/gH3AesB/wMAAf8DAAH/AwAB/wH9AfYB6gH/AfsB7QHWAf8B9AHeAbcB/wHxAdwBuAH/ - Ae8B6QHfAf8BswGCAQAB/wGOAYEBAAH/AbcBqgGUAf8B3wHSAboB/wH1AegBzwH/AfsB8gHiAf8B/QH4 - Ae8B/wMAAf8DAAH/AwAB/wH8AfcB7QH/AwAB/wMAAf8DAAH/AfsB9gHsAf8B9gHsAdkB/wHtAd0BvQH/ - AeoB2gG7Af8B5AHTAbMB/wGOAYEBAAH/DQABuwEAAf8BAAG7AQAB/wEAAbsBAAH/AQABuwEAAf8BAAG7 - AQAB/wEAAbsBAAH/AQABuwEAAf8BAAG7AQAB/wEAAbsBAAH/AQABuwEAAf8BAAG7AQAB/wEAAcEBAAH/ - A/sB/1gAAbcBigEAAf8B9wHwAeYB/wH9AfYB6QH/Af0B9AHkAf8B/gH7AfYB/wMAAf8DAAH/AwAB/wH+ - AfoB8wH/Af0B9gHoAf8B/gH6AfMB/wMAAf8DAAH/AwAB/wH9AfkB8gH/AfQB6AHSAf8B8QHoAdUB/wHs - AeQB2QH/AbcBigEAAf8BlQGBAQAB/wG1AacBkQH/AdoBzwG7Af8B8wHoAdMB/wH9AfkB8gH/AwAB/wMA - Af8DAAH/Af0B+AHvAf8B+wHxAeAB/wH9AfgB7wH/AwAB/wMAAf8DAAH/AfsB9gHtAf8B7wHhAcQB/wHs - Ad4BwQH/AdsBygGrAf8BlQGBAQAB/w0AAasBAAH/AQABqwEAAf8BAAGrAQAB/wEAAasBAAH/AQABqwEA - Af8BAAGrAQAB/wEAAasBAAH/AQABqwEAAf8BAAGrAQAB/wEAAasBAAH/AQABqwEAAf8BAAGzAQAB/wP7 - Af9YAAHCAZ4BgQH/AekB2gHGAf8B/gH6AfMB/wH9AfYB6AH/Af4B/AH3Af8DAAH/AwAB/wH+AfsB9AH/ - Af0B9wHqAf8B/AHxAdwB/wH9AfcB6gH/Af4B+wH0Af8DAAH/AwAB/wH9AfkB8wH/AfUB6gHWAf8B8wHt - AeMB/wHhAdEBvAH/AcIBngGBAf8BpgGIAQMB/wGsAZkBgQH/AdIByAG3Af8B7gHkAdMB/wH9AfoB9AH/ - AwAB/wMAAf8B/QH5AfAB/wH7AfIB4gH/AfgB6gHPAf8B+wHyAeIB/wH9AfgB8AH/AwAB/wMAAf8B+wH3 - Ae8B/wHxAeQByQH/Ae0B4AHGAf8BxQGxAY8B/wGmAYgBAwH/EQABtwEAAf8BAgG9AQAB/wGBAb8BAwH/ - AYEBxgGBAf8BhQHNAYIB/wEAAagBAAH/AQABmQEAAf8BAAGZAQAB/wEAAZkBAAH/AQABqQEAAf8B5AH0 - AeMB/1wAAdYBwQGmAf8B0QGzAYoB/wH+Af0B+gH/Af0B9wHrAf8B/gH6AfIB/wH+AfwB+AH/Af4B/AH3 - Af8B/QH4Ae4B/wH8AfMB4AH/AfwB8gHgAf8B/AHyAeAB/wH9AfcB7AH/Af4B+wH1Af8B/QH6AfQB/wH7 - AfUB6gH/AfUB6wHZAf8B9gH0Ae8B/wHNAa8BhQH/AdYBwQGmAf8BxgG1AZ8B/wGdAYEBAAH/AcgBvwGw - Af8B5AHcAc0B/wH7AfUB7AH/Af4B+wH1Af8B/QH6AfQB/wH7AfUB6AH/AfkB7gHXAf8B+QHtAdYB/wH5 - Ae0B1gH/AfsB9AHmAf8B/QH5AfIB/wH9AfkB8QH/AfkB8gHkAf8B8gHmAc8B/wHrAeAByQH/AaYBiAEB - Af8BxgG1AZ8B/yUAAZcBAAH/AQABjQEAAf8BAAGNAQAB/wEAAZ8BAAH/AewB9wHsAf9kAAG1AYUBAAH/ - AfYB8AHnAf8B/gH7AfUB/wH9AfgB7QH/Af0B9wHsAf8B/QH2AekB/wH9AfUB5wH/AfwB9QHmAf8B/AH0 - AeUB/wH8AfQB5AH/AfwB9AHkAf8B/AHzAeMB/wH7AfIB4QH/AfgB7wHeAf8B9wHyAekB/wHwAekB3gH/ - AbQBhQEAAf8IAAGNAYEBAAH/AboBrgGdAf8B1QHNAcAB/wHsAeUB2AH/AfkB8gHkAf8B+wHzAeMB/wH7 - AfIB4QH/AfsB8QHfAf8B+gHxAd0B/wH6AfAB3QH/AfoB8AHcAf8B+gHvAdsB/wH5Ae4B2QH/AfYB6wHX - Af8B8AHlAdEB/wHSAcMBqgH/AY0BgQEAAf8lAAGSAQAB/wEAAY0BAAH/AQABjQEAAf8BAAGdAQAB/wHq - AfYB6gH/aAAB0QG5AZkB/wHLAaoBgQH/Af4B/QH7Af8B/gH6AfMB/wH+AfgB7wH/Af4B+AHuAf8B/gH3 - AewB/wH9AfYB6wH/Af0B9gHqAf8B/QH2AekB/wH9AfUB6AH/Af0B9QHmAf8B/AHzAeQB/wH6AfMB5wH/ - AfoB+AH0Af8ByAGmAYEB/wHRAbkBmQH/CAABvwGrAZEB/wGcAYEBAAH/AcYBvwGyAf8B2QHTAccB/wHt - AecB2wH/AfgB8gHmAf8B+wH1AegB/wH8AfUB5wH/AfwB9AHmAf8B/AH0AeQB/wH7AfMB4wH/AfsB8wHh - Af8B+QHwAd4B/wHyAekB1gH/Ad0B1AHAAf8BmgGBAQAB/wG/AasBkQH/IAABnQHTAZ4B/wEAAY0BAAH/ - AQABjQEAAf8BAAGcAQAB/wHxAfkB8QH/cAABywGuAYYB/wHVAboBlgH/Af4B/QH8Af8B/gH8AfgB/wH+ - AfkB8QH/Af4B+AHwAf8B/gH4Ae8B/wH9AfcB7gH/Af0B9wHsAf8B/QH2AesB/wH9AfYB6gH/Af4B+gHz - Af8B/AH6AfcB/wHVAboBlgH/AcsBrgGGAf8QAAG1AZ0BgQH/AaMBigGBAf8BxgHAAbMB/wHVAc8BwwH/ - AeUB4AHUAf8B8AHqAd8B/wH2AfAB5QH/AfoB9AHnAf8B+wH0AecB/wH5AfIB5AH/AfQB6wHcAf8B6QHg - Ac8B/wHTAcoBuAH/AZ8BhAEBAf8BtQGdAYEB/ykAAaYBAAH/AQABpwEAAf8B9AH6AfQB/3gAAcsBrgGG - Af8ByQGnAYEB/wH3AfIB6gH/Av4B/AH/Af4B/AH4Af8B/gH6AfMB/wH+AfgB8AH/Af0B+gHyAf8B/gH7 - AfYB/wH+Af0B+gH/AfcB8QHoAf8ByQGnAYEB/wHLAa4BhgH/GAABtQGdAYEB/wGbAYEBAAH/AbwBsgGi - Af8ByQHCAbcB/wHTAc0BwgH/AdwB1gHLAf8B4gHbAdAB/wHjAdwB0AH/Ad0B1QHIAf8B0AHIAbkB/wG3 - AaoBlQH/AZMBgQEAAf8BtQGdAYEB/7QAAdABuAGXAf8BtQGFAQAB/wHSAbUBjQH/AegB2gHGAf8B9QHv - AeUB/wL+AfsB/wH1Ae4B5QH/AegB2QHFAf8B0gG0AY0B/wG1AYUBAAH/AdABuAGXAf8gAAG+AakBjwH/ - AY0BgQEAAf8BngGDAQEB/wGtAZwBhAH/AbYBqgGYAf8BuwGzAaUB/wGzAaYBkgH/AaYBlAGBAf8BlgGB - AQAB/wGMAYABAAH/Ab4BqQGPAf/AAAHVAcABowH/AcMBnwGBAf8BuAGMAQAB/wGxAYEBAAH/AbgBjAEA - Af8BwwGfAYEB/wHVAcABowH/MAABxQG0AZ0B/wGoAYoBgAH/AZcBgQEAAf8BiwEEAQAB/wGXAYEBAAH/ - AagBigGAAf8BxQG0AZ0B/8gAA8UB/wOnAf8DlgH/A4wB/wOWAf8DpwH/A8UB/zAAAdUBvwGiAf8BwgGe - AYEB/wG3AYoBAAH/AbEBgQEAAf8BtwGKAQAB/wHCAZ4BgQH/AdUBvwGiAf8wAAHFAbMBmwH/AaYBiAED - Af8BlQGBAQAB/wGLAQQBAAH/AZUBgQEAAf8BpgGIAQMB/wHFAbMBmwH/MAADxQH/A6cB/wOWAf8DjAH/ - A5YB/wOnAf8DxQH/KAADvgH/A5AB/wO1Af8D0AH/A98B/wPnAf8D3gH/A84B/wO0Af8DkAH/A74B/yAA - AdEBtwGVAf8BtAGEAQAB/wHOAa4BgwH/AeABzQGyAf8B6gHfAc4B/wHvAekB3AH/AekB3wHNAf8B3gHM - AbEB/wHMAa0BggH/AbQBhAEAAf8B0QG3AZUB/yAAAb0BqQGNAf8BjAEFAQAB/wGcAYEBAAH/AbMBjgEA - Af8BxAGeAQAB/wHNAagBAwH/AckBogEAAf8BuwGVAQAB/wGmAYEBAAH/AY4BgQEAAf8BvQGpAY0B/yAA - A74B/wOQAf8DtQH/A9AB/wPfAf8D5wH/A94B/wPOAf8DtAH/A5AB/wO+Af8cAAO1Af8DrAH/A+QB/wPr - Af8D3QH/A88B/wPGAf8DzQH/A9oB/wPnAf8D4AH/A6oB/wO1Af8YAAHLAa4BhgH/AcgBpAGBAf8B7wHl - AdUB/wH0Ae0B4gH/AfAB4gHIAf8B7AHVAa0B/wHpAc8BnwH/AeoB1AGsAf8B7QHfAcUB/wHvAekB3QH/ - AeoB4AHQAf8BxQGiAYEB/wHLAa4BhgH/GAABtQGdAYEB/wGTAYEBAAH/Ab0BmQEAAf8B0QGrAYEB/wHT - Aa4BgQH/AdMBrgGBAf8B0wGtAYEB/wHSAa0BgQH/AdIBrQGBAf8B0gGtAYEB/wHLAaYBBQH/AaEBgQEA - Af8BtQGdAYEB/xgAA7UB/wOsAf8D5AH/A+sB/wPdAf8DzwH/A8YB/wPNAf8D2gH/A+cB/wPgAf8DqgH/ - A7UB/xQAA7UB/wO8Af8D7wH/A+AB/wPLAf8DywH/A8oB/wPKAf8DyAH/A8YB/wPGAf8D2QH/A+cB/wO4 - Af8DtQH/EAABywGuAYYB/wHUAbcBjgH/AfkB8gHmAf8B9AHlAcoB/wHvAdUBpQH/Ae8B1QGlAf8B7gHU - AaUB/wHtAdMBpAH/AesB0gGjAf8B6QHQAaEB/wHpAdABoQH/Ae0B3wHEAf8B8AHpAd4B/wHPAbIBigH/ - AcsBrgGGAf8QAAG1AZ0BgQH/AZYBgQEAAf8BxgGkAYAB/wHYAbQBgQH/AdoBtgGBAf8B2gG2AYEB/wHZ - AbUBgQH/AdgBtAGBAf8B1gGzAYEB/wHVAbEBgQH/AdUBsQGBAf8B1QGxAYEB/wHVAbEBgQH/Aa0BhwEA - Af8BtQGdAYEB/xAAA7UB/wO8Af8D7wH/A+AB/wPLAf8DywH/A8oB/wPKAf8DyAH/A8YB/wPGAf8D2QH/ - A+cB/wO4Af8DtQH/DAADvgH/A68B/wPyAf8D2AH/A9AB/wPQAf8DzwH/A88B/wPOAf8DzQH/A8wB/wPJ - Af8DyAH/A9AB/wPoAf8DqwH/A74B/wgAAdABuAGXAf8BywGnAYEB/wH7AfQB6AH/AfUB4AG5Af8B8wHa - AaoB/wHzAdoBqgH/AfIB2QGqAf8B8gHZAaoB/wHxAdgBqQH/AfAB1wGoAf8B7gHVAacB/wHrAdMBpQH/ - AeoB0gGkAf8B6wHXAbEB/wHwAekB3gH/AcYBowGBAf8B0AG4AZcB/wgAAb4BqQGPAf8BjgGBAQAB/wG/ - AZ4BBQH/AdsBuAGBAf8B4AG8AYEB/wHgAbwBgQH/AeABuwGBAf8B4AG7AYEB/wHfAbsBgQH/Ad4BugGB - Af8B3AG4AYEB/wHZAbYBgQH/AdgBtQGBAf8B2AG1AYEB/wHYAbUBgQH/AaQBgQEAAf8BvgGpAY8B/wgA - A74B/wOvAf8D8gH/A9gB/wPQAf8D0AH/A88B/wPPAf8DzgH/A80B/wPMAf8DyQH/A8gB/wPQAf8D6AH/ - A6sB/wO+Af8IAAORAf8D6gH/A+YB/wPUAf8D1AH/A9MB/wPTAf8D0wH/A9IB/wPSAf8D0QH/A84B/wPL - Af8DygH/A9oB/wPfAf8DkAH/CAABtQGFAQAB/wH2AewB2wH/AfsB7AHRAf8B+AHeAbAB/wH4Ad4BsAH/ - AfcB3QGwAf8B9wHdAbAB/wH3Ad0BsAH/AfYB3AGvAf8B9QHcAa4B/wH0AdsBrgH/AfEB2AGrAf8B7QHV - AakB/wHsAdQBqAH/Ae4B4AHGAf8B6gHgAdAB/wG0AYQBAAH/CAABiwEFAQAB/wGqAYwBAAH/AdUBtAGB - Af8B5QHCAYIB/wHmAcMBggH/AeUBwgGCAf8B5QHCAYIB/wHlAcIBggH/AeQBwgGBAf8B4wHBAYEB/wHi - AcABgQH/AeABvgGBAf8B3AG7AYEB/wHbAboBgQH/AdsBugGBAf8B0wGxAYEB/wGOAYEBAAH/CAADkQH/ - A+oB/wPmAf8D1AH/A9QB/wPTAf8D0wH/A+UB/wPxAf8D5AH/A9EB/wPOAf8DywH/A8oB/wPaAf8D3wH/ - A5AB/wQAA8cB/wO4Af8D9gH/A9oB/wPoAf8D8wH/A/MB/wPnAf8D1wH/A9YB/wPWAf8D5gH/A/IB/wPw - Af8D4gH/A8wB/wPpAf8DsgH/A8cB/wHWAcEBpgH/AdEBsQGFAf8B/gH4Ae4B/wH6AeMBuQH/AfwB7gHV - Af8B/QH2AegB/wH9AfYB6AH/AfwB7QHTAf8B+gHhAbQB/wH5AeABswH/AfkB4AGzAf8B+wHsAdIB/wH8 - AfQB5wH/AfsB9AHmAf8B9QHmAc4B/wHtAdYBqwH/AfEB6gHgAf8BywGrAYEB/wHWAcEBpgH/AcYBtQGf - Af8BkgGBAQAB/wHEAagBgQH/AeMBxQGMAf8B8wHhAb0B/wH4Ae8B2wH/AfgB7gHbAf8B8gHfAboB/wHq - AckBigH/AekByAGJAf8B6QHIAYkB/wHxAd4BuQH/AfcB7QHaAf8B9gHsAdoB/wHsAdkBtgH/Ad4BvwGD - Af8B3gG/AYMB/wGqAYUBAAH/AcYBtQGfAf8DxwH/A7gB/wP2Af8D2gH/A9kB/wPYAf8D1wH/A+cB/wPz - Af8DAAH/A/IB/wPmAf8D1AH/A9AB/wPNAf8DzAH/A+kB/wOyAf8DxwH/A6cB/wPaAf8D7gH/A94B/wP0 - Af8DAAH/AwAB/wPzAf8D6AH/A9kB/wPoAf8D8wH/AwAB/wMAAf8D8QH/A84B/wPeAf8D0QH/A6YB/wHC - AZ4BgQH/AekB2AG/Af8B/QHyAd8B/wH8AecBwQH/Af4B9wHrAf8DAAH/AwAB/wH+AfYB6QH/Af0B7gHV - Af8B+wHjAbgB/wH9Ae4B1QH/Af0B9gHpAf8DAAH/AwAB/wH7AfQB5wH/Ae4B1wGvAf8B8AHjAcwB/wHg - Ac8BtgH/AcEBnAGBAf8BpgGIAQMB/wGhAYYBAAH/AdMBugGNAf8B7AHRAZ4B/wH6AfEB4QH/AwAB/wMA - Af8B+QHwAd0B/wH0AeIBvgH/Ae0BzQGSAf8B9AHiAb4B/wH5Ae8B3QH/AwAB/wMAAf8B9wHtAdwB/wHh - AcMBiwH/AeEBwwGLAf8ByAGoAYEB/wGlAYcBAQH/A6cB/wPaAf8D7gH/A94B/wPdAf8D2wH/A+gB/wPz - Af8DAAH/AwAB/wMAAf8D8wH/A+cB/wPVAf8D0QH/A84B/wPeAf8D0QH/A6YB/wOWAf8D7gH/A+cB/wPi - Af8D9QH/AwAB/wMAAf8DAAH/A/QB/wPqAf8D9AH/AwAB/wMAAf8DAAH/A/IB/wPSAf8D1gH/A+AB/wOW - Af8BtwGKAQAB/wH3Ae4B4QH/Af0B7gHSAf8B/QHqAcgB/wH+AfgB7QH/AwAB/wMAAf8DAAH/Af4B9wHq - Af8B/QHwAdcB/wH+AfcB6gH/AwAB/wMAAf8DAAH/AfwB9QHoAf8B8QHbAbMB/wHvAd0BvAH/AesB4QHS - Af8BtwGKAQAB/wGVAYEBAAH/Aa0BlwGBAf8B2QHDAZsB/wHxAdkBqwH/AfsB8wHkAf8DAAH/AwAB/wMA - Af8B+gHxAd8B/wH1AeQBwgH/AfoB8QHfAf8DAAH/AwAB/wMAAf8B+AHvAd4B/wHlAcgBkQH/AeMBxgGQ - Af8B2gG8AYYB/wGVAYEBAAH/A5YB/wPuAf8D5wH/A+IB/wPgAf8D7AH/A/QB/wMAAf8DAAH/AwAB/wMA - Af8DAAH/A/QB/wPoAf8D1QH/A9IB/wPWAf8D4AH/A5YB/wOPAf8D9gH/A+cB/wPlAf8D7gH/A/UB/wMA - Af8DAAH/AwAB/wP0Af8DAAH/AwAB/wMAAf8D9AH/A+gB/wPVAf8D1AH/A+cB/wOPAf8BswGCAQAB/wH8 - AfgB8AH/Af4B7QHSAf8B/QHsAc4B/wH+AfMB4AH/Af4B+AHtAf8DAAH/AwAB/wMAAf8B/gH3AesB/wMA - Af8DAAH/AwAB/wH9AfYB6gH/AfsB7QHWAf8B9AHeAbcB/wHxAdwBuAH/Ae8B6QHfAf8BswGCAQAB/wGO - AYEBAAH/AbcBqgGUAf8B3wHSAboB/wH1AegBzwH/AfsB8gHiAf8B/QH4Ae8B/wMAAf8DAAH/AwAB/wH8 - AfcB7QH/AwAB/wMAAf8DAAH/AfsB9gHsAf8B9gHsAdkB/wHtAd0BvQH/AeoB2gG7Af8B5AHTAbMB/wGO - AYEBAAH/A48B/wP2Af8D5wH/A+UB/wPuAf8D9QH/AwAB/wMAAf8DAAH/A/QB/wMAAf8DAAH/AwAB/wP0 - Af8D6AH/A9UB/wPUAf8D5wH/A48B/wOWAf8D8QH/A/MB/wPxAf8D7wH/A/UB/wP5Af8DAAH/AwAB/wMA - Af8DAAH/AwAB/wP5Af8D8gH/A+YB/wPkAf8D5AH/A+UB/wOWAf8BtwGKAQAB/wH3AfAB5gH/Af0B9gHp - Af8B/QH0AeQB/wH9AfMB4QH/Af0B9wHsAf8B/gH7AfQB/wMAAf8DAAH/AwAB/wMAAf8DAAH/Af4B+gHz - Af8B/AH1AecB/wH3AesB1QH/AfQB6AHSAf8B8QHoAdUB/wHsAeQB2QH/AbcBigEAAf8BlQGBAQAB/wG1 - AacBkQH/AdoBzwG7Af8B8wHoAdMB/wH5Ae0B1gH/AfsB8wHkAf8B/QH4Ae8B/wMAAf8DAAH/AwAB/wMA - Af8DAAH/Af0B+AHvAf8B+QHwAd4B/wHyAeMBxgH/Ae8B4QHEAf8B7AHeAcEB/wHbAcoBqwH/AZUBgQEA - Af8DlgH/A/EB/wPzAf8D8QH/A/oB/wMAAf8DAAH/AwAB/wP5Af8D8wH/A/kB/wMAAf8DAAH/AwAB/wP3 - Af8D5AH/A+QB/wPlAf8DlgH/A6cB/wPeAf8D+QH/A/MB/wPyAf8D8AH/A/UB/wP5Af8DAAH/AwAB/wMA - Af8D+QH/A/QB/wPrAf8D6AH/A+YB/wPrAf8D1AH/A6cB/wHCAZ4BgQH/AekB2gHGAf8B/gH6AfMB/wH9 - AfYB6AH/Af0B9QHmAf8B/QHzAeIB/wH9AfcB7AH/Af4B+wH0Af8DAAH/AwAB/wMAAf8B/gH7AfQB/wH9 - AfcB6gH/AfoB7wHaAf8B9wHsAdgB/wH1AeoB1gH/AfMB7QHjAf8B4QHRAbwB/wHCAZ4BgQH/AaYBiAED - Af8BrAGZAYEB/wHSAcgBtwH/Ae4B5AHTAf8B+QHvAdwB/wH5Ae4B1wH/AfsB9AHlAf8B/QH5AfAB/wMA - Af8DAAH/AwAB/wH9AfgB8AH/AfsB8gHiAf8B9gHoAc0B/wHzAeUBywH/AfEB5AHJAf8B7QHgAcYB/wHF - AbEBjwH/AaYBiAEDAf8DpwH/A94B/wP5Af8D8wH/A/sB/wMAAf8DAAH/A/kB/wP0Af8D7QH/A/QB/wP5 - Af8DAAH/AwAB/wP4Af8D5gH/A+sB/wPUAf8DpwH/A8cB/wO7Af8D/QH/A/UB/wP0Af8D8gH/A/EB/wP1 - Af8D+gH/AwAB/wP6Af8D9QH/A+4B/wPsAf8D6gH/A+cB/wPzAf8DtgH/A8cB/wHWAcEBpgH/AdEBswGK - Af8B/gH9AfoB/wH9AfcB6wH/Af0B9gHqAf8B/QH1AecB/wH8AfQB5AH/Af0B+AHuAf8B/gH7AfUB/wMA - Af8B/gH7AfUB/wH9AfcB7AH/AfwB8gHfAf8B+gHwAd0B/wH4Ae4B3AH/AfUB6wHZAf8B9gH0Ae8B/wHN - Aa8BhQH/AdYBwQGmAf8BxgG1AZ8B/wGdAYEBAAH/AcgBvwGwAf8B5AHcAc0B/wH3Ae8B3wH/AfsB8gHg - Af8B+gHwAdsB/wH7AfUB6AH/Af0B+gHzAf8DAAH/Af0B+QHyAf8B+wH0AeYB/wH5Ae0B1QH/AfcB6wHT - Af8B9QHpAdIB/wHyAeYBzwH/AesB4AHJAf8BpgGIAQEB/wHGAbUBnwH/A8cB/wO7Af8D/QH/A/UB/wP5 - Af8D+wH/A/sB/wP1Af8D7wH/A+4B/wPuAf8D9QH/A/oB/wP5Af8D8gH/A+cB/wPzAf8DtgH/A8cB/wQA - A5EB/wPxAf8D+gH/A/UB/wP0Af8D8wH/A/IB/wP3Af8D+wH/A/YB/wPwAf8D7wH/A+4B/wPrAf8D8AH/ - A+kB/wORAf8IAAG1AYUBAAH/AfYB8AHnAf8B/gH7AfUB/wH9AfgB7QH/Af0B9wHsAf8B/QH2AekB/wH9 - AfUB5wH/Af0B+QHwAf8B/gH8AfcB/wH9AfkB7wH/AfwB9AHkAf8B/AHzAeMB/wH7AfIB4QH/AfgB7wHe - Af8B9wHyAekB/wHwAekB3gH/AbQBhQEAAf8IAAGNAYEBAAH/AboBrgGdAf8B1QHNAcAB/wHsAeUB2AH/ - AfkB8gHkAf8B+wHzAeMB/wH7AfIB4QH/Af0B9wHsAf8B/QH7AfQB/wH8AfYB6wH/AfoB8AHcAf8B+gHv - AdsB/wH5Ae4B2QH/AfYB6wHXAf8B8AHlAdEB/wHSAcMBqgH/AY0BgQEAAf8IAAORAf8D8QH/A/oB/wP1 - Af8D9AH/A/MB/wPyAf8D8QH/A/EB/wPwAf8D8AH/A+8B/wPuAf8D6wH/A/AB/wPpAf8DkQH/CAADwAH/ - A7MB/wP9Af8D+AH/A/YB/wP1Af8D9AH/A/MB/wPzAf8D8gH/A/IB/wPxAf8D7wH/A/AB/wP3Af8DrwH/ - A8AB/wgAAdEBuQGZAf8BywGqAYEB/wH+Af0B+wH/Af4B+gHzAf8B/gH4Ae8B/wH+AfgB7gH/Af4B9wHs - Af8B/QH2AesB/wH9AfYB6gH/Af0B9gHpAf8B/QH1AegB/wH9AfUB5gH/AfwB8wHkAf8B+gHzAecB/wH6 - AfgB9AH/AcgBpgGBAf8B0QG5AZkB/wgAAb8BqwGRAf8BnAGBAQAB/wHGAb8BsgH/AdkB0wHHAf8B7QHn - AdsB/wH4AfIB5gH/AfsB9QHoAf8B/AH1AecB/wH8AfQB5gH/AfwB9AHkAf8B+wHzAeMB/wH7AfMB4QH/ - AfkB8AHeAf8B8gHpAdYB/wHdAdQBwAH/AZoBgQEAAf8BvwGrAZEB/wgAA8AB/wOzAf8D/QH/A/gB/wP2 - Af8D9QH/A/QB/wPzAf8D8wH/A/IB/wPyAf8D8QH/A+8B/wPwAf8D9wH/A68B/wPAAf8MAAO1Af8DwQH/ - A/0B/wP6Af8D9gH/A/YB/wP1Af8D9AH/A/QB/wPzAf8D8gH/A/cB/wP5Af8DwAH/A7UB/xAAAcsBrgGG - Af8B1QG6AZYB/wH+Af0B/AH/Af4B/AH4Af8B/gH5AfEB/wH+AfgB8AH/Af4B+AHvAf8B/QH3Ae4B/wH9 - AfcB7AH/Af0B9gHrAf8B/QH2AeoB/wH+AfoB8wH/AfwB+gH3Af8B1QG6AZYB/wHLAa4BhgH/EAABtQGd - AYEB/wGjAYoBgQH/AcYBwAGzAf8B1QHPAcMB/wHlAeAB1AH/AfAB6gHfAf8B9gHwAeUB/wH6AfQB5wH/ - AfsB9AHnAf8B+QHyAeQB/wH0AesB3AH/AekB4AHPAf8B0wHKAbgB/wGfAYQBAQH/AbUBnQGBAf8QAAO1 - Af8DwQH/A/0B/wP6Af8D9gH/A/YB/wP1Af8D9AH/A/QB/wPzAf8D8gH/A/cB/wP5Af8DwAH/A7UB/xQA - A7UB/wOwAf8D8gH/A/0B/wP7Af8D+AH/A/YB/wP3Af8D+QH/A/wB/wPxAf8DrwH/A7UB/xgAAcsBrgGG - Af8ByQGnAYEB/wH3AfIB6gH/Av4B/AH/Af4B/AH4Af8B/gH6AfMB/wH+AfgB8AH/Af0B+gHyAf8B/gH7 - AfYB/wH+Af0B+gH/AfcB8QHoAf8ByQGnAYEB/wHLAa4BhgH/GAABtQGdAYEB/wGbAYEBAAH/AbwBsgGi - Af8ByQHCAbcB/wHTAc0BwgH/AdwB1gHLAf8B4gHbAdAB/wHjAdwB0AH/Ad0B1QHIAf8B0AHIAbkB/wG3 - AaoBlQH/AZMBgQEAAf8BtQGdAYEB/xgAA7UB/wOwAf8D8gH/A/0B/wP7Af8D+AH/A/YB/wP3Af8D+QH/ - A/wB/wPxAf8DrwH/A7UB/xwAA74B/wORAf8DvAH/A90B/wPwAf8D/QH/A/AB/wPdAf8DuwH/A5EB/wO+ - Af8gAAHQAbgBlwH/AbUBhQEAAf8B0gG1AY0B/wHoAdoBxgH/AfUB7wHlAf8C/gH7Af8B9QHuAeUB/wHo - AdkBxQH/AdIBtAGNAf8BtQGFAQAB/wHQAbgBlwH/IAABvgGpAY8B/wGNAYEBAAH/AZ4BgwEBAf8BrQGc - AYQB/wG2AaoBmAH/AbsBswGlAf8BswGmAZIB/wGmAZQBgQH/AZYBgQEAAf8BjAGAAQAB/wG+AakBjwH/ - IAADvgH/A5EB/wO8Af8D3QH/A/AB/wP9Af8D8AH/A90B/wO7Af8DkQH/A74B/ygAA8UB/wOoAf8DmAH/ - A4wB/wOYAf8DqAH/A8UB/zAAAdUBwAGjAf8BwwGfAYEB/wG4AYwBAAH/AbEBgQEAAf8BuAGMAQAB/wHD - AZ8BgQH/AdUBwAGjAf8wAAHFAbQBnQH/AagBigGAAf8BlwGBAQAB/wGLAQQBAAH/AZcBgQEAAf8BqAGK - AYAB/wHFAbQBnQH/MAADxQH/A6gB/wOYAf8DjAH/A5gB/wOoAf8DxQH/GAABQgFNAT4HAAE+AwABKAMA - AUwDAAEmAwABAQEAAQEFAAHIAQEWAAP/AQAB/AEHAf8BgAP/AYAEAAHwAQEB/gEAAT8C/wGABAAB4AEA - AfwBAAEfAv8BgAQAAcABAAF4AQABDwL/AYAEAAGAAQABMAEAAQcB/AF/AYAEAAGAAQABMAEAAQcB+AE/ - AYAIAAEDAfwBHwGACAABAwH+AQ8BgAgAAQMBwAEHAYAIAAEDAYABAwGACAABAwGAAQMBgAgAAQMBwAEH - AYAIAAEDAf4BDwGABAABgAEAATABAAEHAfwBHwGABAABgAEAATABAAEHAfgBPwGABAABwAEAAXgBAAEP - AfwBfwGABAAB4AEAAfwBAAEfAv8BgAQAAfABAQH+AQABPwL/AYAEAAH8AQcB/wGAA/8BgAQAAfwBBwH/ - AYAB/wHwAR8B/gEDAfACAAHwAQEB/gEAAT8BwAEHAfgBAAHwAgAB4AEAAfwBAAEfAYABAwHwAQABcAIA - AcABAAF4AQABDwEAAQEB4AEAATACAAGAAQABMAEAAQYCAAHAAQABEAIAAYABAAEwAQABBgIAAcABAAEQ - VgABgAEAATABAAEGAgABwAEAARACAAGAAQABMAEAAQYCAAHAAQABEAIAAcABAAF4AQABDwEAAQEB4AEA - ATACAAHgAQAB/AEAAR8BgAEDAfABAAFwAgAB8AEBAf4BAAE/AcABBwH4AQAB8AIAAfwBBwH/AYAB/wHw - AR8B/gEDAfACAAs= - - - - 376, 17 - - - 466, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + + 180, 17 + + + 273, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADy + MQAAAk1TRnQBSQFMAgEBBwEAAdQBAwHUAQMBEwEAARMBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFM + AwABJgMAAQEBAAEgBQABIAEtKgAB1QG/AaIB/wHCAZ4BgQH/AbcBigEAAf8BsQGBAQAB/wG3AYoBAAH/ + AcIBngGBAf8B1QG/AaIB/zAAAcUBswGbAf8BpgGIAQMB/wGVAYEBAAH/AYsBBAEAAf8BlQGBAQAB/wGm + AYgBAwH/AcUBswGbAf/AAAHRAbcBlQH/AbQBhAEAAf8BzgGuAYMB/wHgAc0BsgH/AeoB3wHOAf8B7wHp + AdwB/wHpAd8BzQH/Ad4BzAGxAf8BzAGtAYIB/wG0AYQBAAH/AdEBtwGVAf8gAAG9AakBjQH/AYwBBQEA + Af8BnAGBAQAB/wGzAY4BAAH/AcQBngEAAf8BzQGoAQMB/wHJAaIBAAH/AbsBlQEAAf8BpgGBAQAB/wGO + AYEBAAH/Ab0BqQGNAf+0AAHLAa4BhgH/AcgBpAGBAf8B7wHlAdUB/wH0Ae0B4gH/AfAB4gHIAf8B7AHV + Aa0B/wHpAc8BnwH/AeoB1AGsAf8B7QHfAcUB/wHvAekB3QH/AeoB4AHQAf8BxQGiAYEB/wHLAa4BhgH/ + GAABtQGdAYEB/wGTAYEBAAH/Ab0BmQEAAf8B0QGrAYEB/wHTAa4BgQH/AdMBrgGBAf8B0wGtAYEB/wHS + Aa0BgQH/AdIBrQGBAf8B0gGtAYEB/wHLAaYBBQH/AaEBgQEAAf8BtQGdAYEB/6wAAcsBrgGGAf8B1AG3 + AY4B/wH5AfIB5gH/AfQB5QHKAf8B7wHVAaUB/wHvAdUBpQH/Ae4B1AGlAf8B7QHTAaQB/wHrAdIBowH/ + AekB0AGhAf8B6QHQAaEB/wHtAd8BxAH/AfAB6QHeAf8BzwGyAYoB/wHLAa4BhgH/EAABtQGdAYEB/wGW + AYEBAAH/AcYBpAGAAf8B2AG0AYEB/wHaAbYBgQH/AdoBtgGBAf8B2QG1AYEB/wHYAbQBgQH/AdYBswGB + Af8B1QGxAYEB/wHVAbEBgQH/AdUBsQGBAf8B1QGxAYEB/wGtAYcBAAH/AbUBnQGBAf+kAAHQAbgBlwH/ + AcsBpwGBAf8B+wH0AegB/wH1AeABuQH/AfMB2gGqAf8B8wHaAaoB/wHyAdkBqgH/AfIB2QGqAf8B8QHY + AakB/wHwAdcBqAH/Ae4B1QGnAf8B6wHTAaUB/wHqAdIBpAH/AesB1wGxAf8B8AHpAd4B/wHGAaMBgQH/ + AdABuAGXAf8IAAG+AakBjwH/AY4BgQEAAf8BvwGeAQUB/wHbAbgBgQH/AeABvAGBAf8B4AG8AYEB/wHg + AbsBgQH/AeABuwGBAf8B3wG7AYEB/wHeAboBgQH/AdwBuAGBAf8B2QG2AYEB/wHYAbUBgQH/AdgBtQGB + Af8B2AG1AYEB/wGkAYEBAAH/Ab4BqQGPAf8kAAGBAeMBAAH/AYEB5AEAAf8B8AH8AewB/3AAAbUBhQEA + Af8B9gHsAdsB/wH7AewB0QH/AfgB3gGwAf8B+AHeAbAB/wH3Ad0BsAH/AfcB3QGwAf8B+wHrAdAB/wH8 + AfQB5gH/AfkB6gHPAf8B9AHbAa4B/wHxAdgBqwH/Ae0B1QGpAf8B7AHUAagB/wHuAeABxgH/AeoB4AHQ + Af8BtAGEAQAB/wgAAYsBBQEAAf8BqgGMAQAB/wHVAbQBgQH/AeUBwgGCAf8B5gHDAYIB/wHlAcIBggH/ + AeUBwgGCAf8B8AHbAbUB/wH3AewB2AH/Ae4B2gG0Af8B4gHAAYEB/wHgAb4BgQH/AdwBuwGBAf8B2wG6 + AYEB/wHbAboBgQH/AdMBsQGBAf8BjgGBAQAB/yAAAbIB8QGcAf8BAAHbAQAB/wEAAdsBAAH/AQAB4AEA + Af8B8gH9Ae4B/2gAAdYBwQGmAf8B0QGxAYUB/wH+AfgB7gH/AfoB4wG5Af8B+gHiAbgB/wH6AeIBtQH/ + AfoB4QG0Af8B/AHtAdMB/wH9AfYB6AH/AwAB/wH9AfUB5wH/AfsB7AHSAf8B9gHdAbEB/wHyAdoBrgH/ + Ae4B1gGsAf8B7QHWAasB/wHxAeoB4AH/AcsBqwGBAf8B1gHBAaYB/wHGAbUBnwH/AZIBgQEAAf8BxAGo + AYEB/wHjAcUBjAH/AesBzAGQAf8B6gHKAYwB/wHqAckBigH/AfIB3wG6Af8B+AHuAdsB/wMAAf8B+AHu + AdoB/wHxAd4BuQH/AeYBxgGIAf8B4wHDAYYB/wHfAcABhAH/Ad4BvwGDAf8B3gG/AYMB/wGqAYUBAAH/ + AcYBtQGfAf8hAAHeAQAB/wEAAdsBAAH/AQAB2wEAAf8BAAHhAQAB/wHvAfwB6wH/ZAABwgGeAYEB/wHp + AdgBvwH/Af0B8gHfAf8B/AHnAcEB/wH7AeYBwAH/AfsB5QG8Af8B/QHuAdUB/wH+AfYB6QH/AwAB/wMA + Af8DAAH/Af0B9gHpAf8B+wHtAdQB/wH2Ad8BtAH/AfIB2wGyAf8B7gHXAa8B/wHwAeMBzAH/AeABzwG2 + Af8BwQGcAYEB/wGmAYgBAwH/AaEBhgEAAf8B0wG6AY0B/wHsAdEBngH/Ae8B0gGeAf8B7gHQAZgB/wH0 + AeIBvwH/AfkB8AHdAf8DAAH/AwAB/wMAAf8B+QHvAd0B/wHzAeABvgH/AegByQGPAf8B5QHGAY0B/wHh + AcMBiwH/AeEBwwGLAf8ByAGoAYEB/wGlAYcBAQH/JQAB1wEAAf8BAAHTAQAB/wEAAdMBAAH/AQAB2gEA + Af8B8wH8AfAB/2AAAbcBigEAAf8B9wHuAeEB/wH9Ae4B0gH/Af0B6gHIAf8B/AHpAcUB/wH9AfEB2QH/ + Af4B9wHqAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wH+AfcB6gH/AfsB7QHVAf8B9QHfAbYB/wHxAdsBswH/ + Ae8B3QG8Af8B6wHhAdIB/wG3AYoBAAH/AZUBgQEAAf8BrQGXAYEB/wHZAcMBmwH/AfEB2QGrAf8B8QHY + AacB/wH2AeYBxwH/AfoB8QHgAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wH6AfAB3wH/AfMB4gHAAf8B6AHL + AZQB/wHlAcgBkQH/AeMBxgGQAf8B2gG8AYYB/wGVAYEBAAH/EAABgQHZAQAB/wGBAd0BAwH/AYEB3gGB + Af8BjAHhAYEB/wGYAeQBgwH/AQAB0AEAAf8BAAHIAQAB/wEAAcgBAAH/AQAByAEAAf8BAAHSAQAB/wHu + AfsB6wH/XAABswGCAQAB/wH8AfgB8AH/Af4B7QHSAf8B/QHsAc4B/wH+AfMB4AH/Af4B+AHtAf8DAAH/ + AwAB/wMAAf8B/gH3AesB/wMAAf8DAAH/AwAB/wH9AfYB6gH/AfsB7QHWAf8B9AHeAbcB/wHxAdwBuAH/ + Ae8B6QHfAf8BswGCAQAB/wGOAYEBAAH/AbcBqgGUAf8B3wHSAboB/wH1AegBzwH/AfsB8gHiAf8B/QH4 + Ae8B/wMAAf8DAAH/AwAB/wH8AfcB7QH/AwAB/wMAAf8DAAH/AfsB9gHsAf8B9gHsAdkB/wHtAd0BvQH/ + AeoB2gG7Af8B5AHTAbMB/wGOAYEBAAH/DQABuwEAAf8BAAG7AQAB/wEAAbsBAAH/AQABuwEAAf8BAAG7 + AQAB/wEAAbsBAAH/AQABuwEAAf8BAAG7AQAB/wEAAbsBAAH/AQABuwEAAf8BAAG7AQAB/wEAAcEBAAH/ + A/sB/1gAAbcBigEAAf8B9wHwAeYB/wH9AfYB6QH/Af0B9AHkAf8B/gH7AfYB/wMAAf8DAAH/AwAB/wH+ + AfoB8wH/Af0B9gHoAf8B/gH6AfMB/wMAAf8DAAH/AwAB/wH9AfkB8gH/AfQB6AHSAf8B8QHoAdUB/wHs + AeQB2QH/AbcBigEAAf8BlQGBAQAB/wG1AacBkQH/AdoBzwG7Af8B8wHoAdMB/wH9AfkB8gH/AwAB/wMA + Af8DAAH/Af0B+AHvAf8B+wHxAeAB/wH9AfgB7wH/AwAB/wMAAf8DAAH/AfsB9gHtAf8B7wHhAcQB/wHs + Ad4BwQH/AdsBygGrAf8BlQGBAQAB/w0AAasBAAH/AQABqwEAAf8BAAGrAQAB/wEAAasBAAH/AQABqwEA + Af8BAAGrAQAB/wEAAasBAAH/AQABqwEAAf8BAAGrAQAB/wEAAasBAAH/AQABqwEAAf8BAAGzAQAB/wP7 + Af9YAAHCAZ4BgQH/AekB2gHGAf8B/gH6AfMB/wH9AfYB6AH/Af4B/AH3Af8DAAH/AwAB/wH+AfsB9AH/ + Af0B9wHqAf8B/AHxAdwB/wH9AfcB6gH/Af4B+wH0Af8DAAH/AwAB/wH9AfkB8wH/AfUB6gHWAf8B8wHt + AeMB/wHhAdEBvAH/AcIBngGBAf8BpgGIAQMB/wGsAZkBgQH/AdIByAG3Af8B7gHkAdMB/wH9AfoB9AH/ + AwAB/wMAAf8B/QH5AfAB/wH7AfIB4gH/AfgB6gHPAf8B+wHyAeIB/wH9AfgB8AH/AwAB/wMAAf8B+wH3 + Ae8B/wHxAeQByQH/Ae0B4AHGAf8BxQGxAY8B/wGmAYgBAwH/EQABtwEAAf8BAgG9AQAB/wGBAb8BAwH/ + AYEBxgGBAf8BhQHNAYIB/wEAAagBAAH/AQABmQEAAf8BAAGZAQAB/wEAAZkBAAH/AQABqQEAAf8B5AH0 + AeMB/1wAAdYBwQGmAf8B0QGzAYoB/wH+Af0B+gH/Af0B9wHrAf8B/gH6AfIB/wH+AfwB+AH/Af4B/AH3 + Af8B/QH4Ae4B/wH8AfMB4AH/AfwB8gHgAf8B/AHyAeAB/wH9AfcB7AH/Af4B+wH1Af8B/QH6AfQB/wH7 + AfUB6gH/AfUB6wHZAf8B9gH0Ae8B/wHNAa8BhQH/AdYBwQGmAf8BxgG1AZ8B/wGdAYEBAAH/AcgBvwGw + Af8B5AHcAc0B/wH7AfUB7AH/Af4B+wH1Af8B/QH6AfQB/wH7AfUB6AH/AfkB7gHXAf8B+QHtAdYB/wH5 + Ae0B1gH/AfsB9AHmAf8B/QH5AfIB/wH9AfkB8QH/AfkB8gHkAf8B8gHmAc8B/wHrAeAByQH/AaYBiAEB + Af8BxgG1AZ8B/yUAAZcBAAH/AQABjQEAAf8BAAGNAQAB/wEAAZ8BAAH/AewB9wHsAf9kAAG1AYUBAAH/ + AfYB8AHnAf8B/gH7AfUB/wH9AfgB7QH/Af0B9wHsAf8B/QH2AekB/wH9AfUB5wH/AfwB9QHmAf8B/AH0 + AeUB/wH8AfQB5AH/AfwB9AHkAf8B/AHzAeMB/wH7AfIB4QH/AfgB7wHeAf8B9wHyAekB/wHwAekB3gH/ + AbQBhQEAAf8IAAGNAYEBAAH/AboBrgGdAf8B1QHNAcAB/wHsAeUB2AH/AfkB8gHkAf8B+wHzAeMB/wH7 + AfIB4QH/AfsB8QHfAf8B+gHxAd0B/wH6AfAB3QH/AfoB8AHcAf8B+gHvAdsB/wH5Ae4B2QH/AfYB6wHX + Af8B8AHlAdEB/wHSAcMBqgH/AY0BgQEAAf8lAAGSAQAB/wEAAY0BAAH/AQABjQEAAf8BAAGdAQAB/wHq + AfYB6gH/aAAB0QG5AZkB/wHLAaoBgQH/Af4B/QH7Af8B/gH6AfMB/wH+AfgB7wH/Af4B+AHuAf8B/gH3 + AewB/wH9AfYB6wH/Af0B9gHqAf8B/QH2AekB/wH9AfUB6AH/Af0B9QHmAf8B/AHzAeQB/wH6AfMB5wH/ + AfoB+AH0Af8ByAGmAYEB/wHRAbkBmQH/CAABvwGrAZEB/wGcAYEBAAH/AcYBvwGyAf8B2QHTAccB/wHt + AecB2wH/AfgB8gHmAf8B+wH1AegB/wH8AfUB5wH/AfwB9AHmAf8B/AH0AeQB/wH7AfMB4wH/AfsB8wHh + Af8B+QHwAd4B/wHyAekB1gH/Ad0B1AHAAf8BmgGBAQAB/wG/AasBkQH/IAABnQHTAZ4B/wEAAY0BAAH/ + AQABjQEAAf8BAAGcAQAB/wHxAfkB8QH/cAABywGuAYYB/wHVAboBlgH/Af4B/QH8Af8B/gH8AfgB/wH+ + AfkB8QH/Af4B+AHwAf8B/gH4Ae8B/wH9AfcB7gH/Af0B9wHsAf8B/QH2AesB/wH9AfYB6gH/Af4B+gHz + Af8B/AH6AfcB/wHVAboBlgH/AcsBrgGGAf8QAAG1AZ0BgQH/AaMBigGBAf8BxgHAAbMB/wHVAc8BwwH/ + AeUB4AHUAf8B8AHqAd8B/wH2AfAB5QH/AfoB9AHnAf8B+wH0AecB/wH5AfIB5AH/AfQB6wHcAf8B6QHg + Ac8B/wHTAcoBuAH/AZ8BhAEBAf8BtQGdAYEB/ykAAaYBAAH/AQABpwEAAf8B9AH6AfQB/3gAAcsBrgGG + Af8ByQGnAYEB/wH3AfIB6gH/Av4B/AH/Af4B/AH4Af8B/gH6AfMB/wH+AfgB8AH/Af0B+gHyAf8B/gH7 + AfYB/wH+Af0B+gH/AfcB8QHoAf8ByQGnAYEB/wHLAa4BhgH/GAABtQGdAYEB/wGbAYEBAAH/AbwBsgGi + Af8ByQHCAbcB/wHTAc0BwgH/AdwB1gHLAf8B4gHbAdAB/wHjAdwB0AH/Ad0B1QHIAf8B0AHIAbkB/wG3 + AaoBlQH/AZMBgQEAAf8BtQGdAYEB/7QAAdABuAGXAf8BtQGFAQAB/wHSAbUBjQH/AegB2gHGAf8B9QHv + AeUB/wL+AfsB/wH1Ae4B5QH/AegB2QHFAf8B0gG0AY0B/wG1AYUBAAH/AdABuAGXAf8gAAG+AakBjwH/ + AY0BgQEAAf8BngGDAQEB/wGtAZwBhAH/AbYBqgGYAf8BuwGzAaUB/wGzAaYBkgH/AaYBlAGBAf8BlgGB + AQAB/wGMAYABAAH/Ab4BqQGPAf/AAAHVAcABowH/AcMBnwGBAf8BuAGMAQAB/wGxAYEBAAH/AbgBjAEA + Af8BwwGfAYEB/wHVAcABowH/MAABxQG0AZ0B/wGoAYoBgAH/AZcBgQEAAf8BiwEEAQAB/wGXAYEBAAH/ + AagBigGAAf8BxQG0AZ0B/8gAA8UB/wOnAf8DlgH/A4wB/wOWAf8DpwH/A8UB/zAAAdUBvwGiAf8BwgGe + AYEB/wG3AYoBAAH/AbEBgQEAAf8BtwGKAQAB/wHCAZ4BgQH/AdUBvwGiAf8wAAHFAbMBmwH/AaYBiAED + Af8BlQGBAQAB/wGLAQQBAAH/AZUBgQEAAf8BpgGIAQMB/wHFAbMBmwH/MAADxQH/A6cB/wOWAf8DjAH/ + A5YB/wOnAf8DxQH/KAADvgH/A5AB/wO1Af8D0AH/A98B/wPnAf8D3gH/A84B/wO0Af8DkAH/A74B/yAA + AdEBtwGVAf8BtAGEAQAB/wHOAa4BgwH/AeABzQGyAf8B6gHfAc4B/wHvAekB3AH/AekB3wHNAf8B3gHM + AbEB/wHMAa0BggH/AbQBhAEAAf8B0QG3AZUB/yAAAb0BqQGNAf8BjAEFAQAB/wGcAYEBAAH/AbMBjgEA + Af8BxAGeAQAB/wHNAagBAwH/AckBogEAAf8BuwGVAQAB/wGmAYEBAAH/AY4BgQEAAf8BvQGpAY0B/yAA + A74B/wOQAf8DtQH/A9AB/wPfAf8D5wH/A94B/wPOAf8DtAH/A5AB/wO+Af8cAAO1Af8DrAH/A+QB/wPr + Af8D3QH/A88B/wPGAf8DzQH/A9oB/wPnAf8D4AH/A6oB/wO1Af8YAAHLAa4BhgH/AcgBpAGBAf8B7wHl + AdUB/wH0Ae0B4gH/AfAB4gHIAf8B7AHVAa0B/wHpAc8BnwH/AeoB1AGsAf8B7QHfAcUB/wHvAekB3QH/ + AeoB4AHQAf8BxQGiAYEB/wHLAa4BhgH/GAABtQGdAYEB/wGTAYEBAAH/Ab0BmQEAAf8B0QGrAYEB/wHT + Aa4BgQH/AdMBrgGBAf8B0wGtAYEB/wHSAa0BgQH/AdIBrQGBAf8B0gGtAYEB/wHLAaYBBQH/AaEBgQEA + Af8BtQGdAYEB/xgAA7UB/wOsAf8D5AH/A+sB/wPdAf8DzwH/A8YB/wPNAf8D2gH/A+cB/wPgAf8DqgH/ + A7UB/xQAA7UB/wO8Af8D7wH/A+AB/wPLAf8DywH/A8oB/wPKAf8DyAH/A8YB/wPGAf8D2QH/A+cB/wO4 + Af8DtQH/EAABywGuAYYB/wHUAbcBjgH/AfkB8gHmAf8B9AHlAcoB/wHvAdUBpQH/Ae8B1QGlAf8B7gHU + AaUB/wHtAdMBpAH/AesB0gGjAf8B6QHQAaEB/wHpAdABoQH/Ae0B3wHEAf8B8AHpAd4B/wHPAbIBigH/ + AcsBrgGGAf8QAAG1AZ0BgQH/AZYBgQEAAf8BxgGkAYAB/wHYAbQBgQH/AdoBtgGBAf8B2gG2AYEB/wHZ + AbUBgQH/AdgBtAGBAf8B1gGzAYEB/wHVAbEBgQH/AdUBsQGBAf8B1QGxAYEB/wHVAbEBgQH/Aa0BhwEA + Af8BtQGdAYEB/xAAA7UB/wO8Af8D7wH/A+AB/wPLAf8DywH/A8oB/wPKAf8DyAH/A8YB/wPGAf8D2QH/ + A+cB/wO4Af8DtQH/DAADvgH/A68B/wPyAf8D2AH/A9AB/wPQAf8DzwH/A88B/wPOAf8DzQH/A8wB/wPJ + Af8DyAH/A9AB/wPoAf8DqwH/A74B/wgAAdABuAGXAf8BywGnAYEB/wH7AfQB6AH/AfUB4AG5Af8B8wHa + AaoB/wHzAdoBqgH/AfIB2QGqAf8B8gHZAaoB/wHxAdgBqQH/AfAB1wGoAf8B7gHVAacB/wHrAdMBpQH/ + AeoB0gGkAf8B6wHXAbEB/wHwAekB3gH/AcYBowGBAf8B0AG4AZcB/wgAAb4BqQGPAf8BjgGBAQAB/wG/ + AZ4BBQH/AdsBuAGBAf8B4AG8AYEB/wHgAbwBgQH/AeABuwGBAf8B4AG7AYEB/wHfAbsBgQH/Ad4BugGB + Af8B3AG4AYEB/wHZAbYBgQH/AdgBtQGBAf8B2AG1AYEB/wHYAbUBgQH/AaQBgQEAAf8BvgGpAY8B/wgA + A74B/wOvAf8D8gH/A9gB/wPQAf8D0AH/A88B/wPPAf8DzgH/A80B/wPMAf8DyQH/A8gB/wPQAf8D6AH/ + A6sB/wO+Af8IAAORAf8D6gH/A+YB/wPUAf8D1AH/A9MB/wPTAf8D0wH/A9IB/wPSAf8D0QH/A84B/wPL + Af8DygH/A9oB/wPfAf8DkAH/CAABtQGFAQAB/wH2AewB2wH/AfsB7AHRAf8B+AHeAbAB/wH4Ad4BsAH/ + AfcB3QGwAf8B9wHdAbAB/wH3Ad0BsAH/AfYB3AGvAf8B9QHcAa4B/wH0AdsBrgH/AfEB2AGrAf8B7QHV + AakB/wHsAdQBqAH/Ae4B4AHGAf8B6gHgAdAB/wG0AYQBAAH/CAABiwEFAQAB/wGqAYwBAAH/AdUBtAGB + Af8B5QHCAYIB/wHmAcMBggH/AeUBwgGCAf8B5QHCAYIB/wHlAcIBggH/AeQBwgGBAf8B4wHBAYEB/wHi + AcABgQH/AeABvgGBAf8B3AG7AYEB/wHbAboBgQH/AdsBugGBAf8B0wGxAYEB/wGOAYEBAAH/CAADkQH/ + A+oB/wPmAf8D1AH/A9QB/wPTAf8D0wH/A+UB/wPxAf8D5AH/A9EB/wPOAf8DywH/A8oB/wPaAf8D3wH/ + A5AB/wQAA8cB/wO4Af8D9gH/A9oB/wPoAf8D8wH/A/MB/wPnAf8D1wH/A9YB/wPWAf8D5gH/A/IB/wPw + Af8D4gH/A8wB/wPpAf8DsgH/A8cB/wHWAcEBpgH/AdEBsQGFAf8B/gH4Ae4B/wH6AeMBuQH/AfwB7gHV + Af8B/QH2AegB/wH9AfYB6AH/AfwB7QHTAf8B+gHhAbQB/wH5AeABswH/AfkB4AGzAf8B+wHsAdIB/wH8 + AfQB5wH/AfsB9AHmAf8B9QHmAc4B/wHtAdYBqwH/AfEB6gHgAf8BywGrAYEB/wHWAcEBpgH/AcYBtQGf + Af8BkgGBAQAB/wHEAagBgQH/AeMBxQGMAf8B8wHhAb0B/wH4Ae8B2wH/AfgB7gHbAf8B8gHfAboB/wHq + AckBigH/AekByAGJAf8B6QHIAYkB/wHxAd4BuQH/AfcB7QHaAf8B9gHsAdoB/wHsAdkBtgH/Ad4BvwGD + Af8B3gG/AYMB/wGqAYUBAAH/AcYBtQGfAf8DxwH/A7gB/wP2Af8D2gH/A9kB/wPYAf8D1wH/A+cB/wPz + Af8DAAH/A/IB/wPmAf8D1AH/A9AB/wPNAf8DzAH/A+kB/wOyAf8DxwH/A6cB/wPaAf8D7gH/A94B/wP0 + Af8DAAH/AwAB/wPzAf8D6AH/A9kB/wPoAf8D8wH/AwAB/wMAAf8D8QH/A84B/wPeAf8D0QH/A6YB/wHC + AZ4BgQH/AekB2AG/Af8B/QHyAd8B/wH8AecBwQH/Af4B9wHrAf8DAAH/AwAB/wH+AfYB6QH/Af0B7gHV + Af8B+wHjAbgB/wH9Ae4B1QH/Af0B9gHpAf8DAAH/AwAB/wH7AfQB5wH/Ae4B1wGvAf8B8AHjAcwB/wHg + Ac8BtgH/AcEBnAGBAf8BpgGIAQMB/wGhAYYBAAH/AdMBugGNAf8B7AHRAZ4B/wH6AfEB4QH/AwAB/wMA + Af8B+QHwAd0B/wH0AeIBvgH/Ae0BzQGSAf8B9AHiAb4B/wH5Ae8B3QH/AwAB/wMAAf8B9wHtAdwB/wHh + AcMBiwH/AeEBwwGLAf8ByAGoAYEB/wGlAYcBAQH/A6cB/wPaAf8D7gH/A94B/wPdAf8D2wH/A+gB/wPz + Af8DAAH/AwAB/wMAAf8D8wH/A+cB/wPVAf8D0QH/A84B/wPeAf8D0QH/A6YB/wOWAf8D7gH/A+cB/wPi + Af8D9QH/AwAB/wMAAf8DAAH/A/QB/wPqAf8D9AH/AwAB/wMAAf8DAAH/A/IB/wPSAf8D1gH/A+AB/wOW + Af8BtwGKAQAB/wH3Ae4B4QH/Af0B7gHSAf8B/QHqAcgB/wH+AfgB7QH/AwAB/wMAAf8DAAH/Af4B9wHq + Af8B/QHwAdcB/wH+AfcB6gH/AwAB/wMAAf8DAAH/AfwB9QHoAf8B8QHbAbMB/wHvAd0BvAH/AesB4QHS + Af8BtwGKAQAB/wGVAYEBAAH/Aa0BlwGBAf8B2QHDAZsB/wHxAdkBqwH/AfsB8wHkAf8DAAH/AwAB/wMA + Af8B+gHxAd8B/wH1AeQBwgH/AfoB8QHfAf8DAAH/AwAB/wMAAf8B+AHvAd4B/wHlAcgBkQH/AeMBxgGQ + Af8B2gG8AYYB/wGVAYEBAAH/A5YB/wPuAf8D5wH/A+IB/wPgAf8D7AH/A/QB/wMAAf8DAAH/AwAB/wMA + Af8DAAH/A/QB/wPoAf8D1QH/A9IB/wPWAf8D4AH/A5YB/wOPAf8D9gH/A+cB/wPlAf8D7gH/A/UB/wMA + Af8DAAH/AwAB/wP0Af8DAAH/AwAB/wMAAf8D9AH/A+gB/wPVAf8D1AH/A+cB/wOPAf8BswGCAQAB/wH8 + AfgB8AH/Af4B7QHSAf8B/QHsAc4B/wH+AfMB4AH/Af4B+AHtAf8DAAH/AwAB/wMAAf8B/gH3AesB/wMA + Af8DAAH/AwAB/wH9AfYB6gH/AfsB7QHWAf8B9AHeAbcB/wHxAdwBuAH/Ae8B6QHfAf8BswGCAQAB/wGO + AYEBAAH/AbcBqgGUAf8B3wHSAboB/wH1AegBzwH/AfsB8gHiAf8B/QH4Ae8B/wMAAf8DAAH/AwAB/wH8 + AfcB7QH/AwAB/wMAAf8DAAH/AfsB9gHsAf8B9gHsAdkB/wHtAd0BvQH/AeoB2gG7Af8B5AHTAbMB/wGO + AYEBAAH/A48B/wP2Af8D5wH/A+UB/wPuAf8D9QH/AwAB/wMAAf8DAAH/A/QB/wMAAf8DAAH/AwAB/wP0 + Af8D6AH/A9UB/wPUAf8D5wH/A48B/wOWAf8D8QH/A/MB/wPxAf8D7wH/A/UB/wP5Af8DAAH/AwAB/wMA + Af8DAAH/AwAB/wP5Af8D8gH/A+YB/wPkAf8D5AH/A+UB/wOWAf8BtwGKAQAB/wH3AfAB5gH/Af0B9gHp + Af8B/QH0AeQB/wH9AfMB4QH/Af0B9wHsAf8B/gH7AfQB/wMAAf8DAAH/AwAB/wMAAf8DAAH/Af4B+gHz + Af8B/AH1AecB/wH3AesB1QH/AfQB6AHSAf8B8QHoAdUB/wHsAeQB2QH/AbcBigEAAf8BlQGBAQAB/wG1 + AacBkQH/AdoBzwG7Af8B8wHoAdMB/wH5Ae0B1gH/AfsB8wHkAf8B/QH4Ae8B/wMAAf8DAAH/AwAB/wMA + Af8DAAH/Af0B+AHvAf8B+QHwAd4B/wHyAeMBxgH/Ae8B4QHEAf8B7AHeAcEB/wHbAcoBqwH/AZUBgQEA + Af8DlgH/A/EB/wPzAf8D8QH/A/oB/wMAAf8DAAH/AwAB/wP5Af8D8wH/A/kB/wMAAf8DAAH/AwAB/wP3 + Af8D5AH/A+QB/wPlAf8DlgH/A6cB/wPeAf8D+QH/A/MB/wPyAf8D8AH/A/UB/wP5Af8DAAH/AwAB/wMA + Af8D+QH/A/QB/wPrAf8D6AH/A+YB/wPrAf8D1AH/A6cB/wHCAZ4BgQH/AekB2gHGAf8B/gH6AfMB/wH9 + AfYB6AH/Af0B9QHmAf8B/QHzAeIB/wH9AfcB7AH/Af4B+wH0Af8DAAH/AwAB/wMAAf8B/gH7AfQB/wH9 + AfcB6gH/AfoB7wHaAf8B9wHsAdgB/wH1AeoB1gH/AfMB7QHjAf8B4QHRAbwB/wHCAZ4BgQH/AaYBiAED + Af8BrAGZAYEB/wHSAcgBtwH/Ae4B5AHTAf8B+QHvAdwB/wH5Ae4B1wH/AfsB9AHlAf8B/QH5AfAB/wMA + Af8DAAH/AwAB/wH9AfgB8AH/AfsB8gHiAf8B9gHoAc0B/wHzAeUBywH/AfEB5AHJAf8B7QHgAcYB/wHF + AbEBjwH/AaYBiAEDAf8DpwH/A94B/wP5Af8D8wH/A/sB/wMAAf8DAAH/A/kB/wP0Af8D7QH/A/QB/wP5 + Af8DAAH/AwAB/wP4Af8D5gH/A+sB/wPUAf8DpwH/A8cB/wO7Af8D/QH/A/UB/wP0Af8D8gH/A/EB/wP1 + Af8D+gH/AwAB/wP6Af8D9QH/A+4B/wPsAf8D6gH/A+cB/wPzAf8DtgH/A8cB/wHWAcEBpgH/AdEBswGK + Af8B/gH9AfoB/wH9AfcB6wH/Af0B9gHqAf8B/QH1AecB/wH8AfQB5AH/Af0B+AHuAf8B/gH7AfUB/wMA + Af8B/gH7AfUB/wH9AfcB7AH/AfwB8gHfAf8B+gHwAd0B/wH4Ae4B3AH/AfUB6wHZAf8B9gH0Ae8B/wHN + Aa8BhQH/AdYBwQGmAf8BxgG1AZ8B/wGdAYEBAAH/AcgBvwGwAf8B5AHcAc0B/wH3Ae8B3wH/AfsB8gHg + Af8B+gHwAdsB/wH7AfUB6AH/Af0B+gHzAf8DAAH/Af0B+QHyAf8B+wH0AeYB/wH5Ae0B1QH/AfcB6wHT + Af8B9QHpAdIB/wHyAeYBzwH/AesB4AHJAf8BpgGIAQEB/wHGAbUBnwH/A8cB/wO7Af8D/QH/A/UB/wP5 + Af8D+wH/A/sB/wP1Af8D7wH/A+4B/wPuAf8D9QH/A/oB/wP5Af8D8gH/A+cB/wPzAf8DtgH/A8cB/wQA + A5EB/wPxAf8D+gH/A/UB/wP0Af8D8wH/A/IB/wP3Af8D+wH/A/YB/wPwAf8D7wH/A+4B/wPrAf8D8AH/ + A+kB/wORAf8IAAG1AYUBAAH/AfYB8AHnAf8B/gH7AfUB/wH9AfgB7QH/Af0B9wHsAf8B/QH2AekB/wH9 + AfUB5wH/Af0B+QHwAf8B/gH8AfcB/wH9AfkB7wH/AfwB9AHkAf8B/AHzAeMB/wH7AfIB4QH/AfgB7wHe + Af8B9wHyAekB/wHwAekB3gH/AbQBhQEAAf8IAAGNAYEBAAH/AboBrgGdAf8B1QHNAcAB/wHsAeUB2AH/ + AfkB8gHkAf8B+wHzAeMB/wH7AfIB4QH/Af0B9wHsAf8B/QH7AfQB/wH8AfYB6wH/AfoB8AHcAf8B+gHv + AdsB/wH5Ae4B2QH/AfYB6wHXAf8B8AHlAdEB/wHSAcMBqgH/AY0BgQEAAf8IAAORAf8D8QH/A/oB/wP1 + Af8D9AH/A/MB/wPyAf8D8QH/A/EB/wPwAf8D8AH/A+8B/wPuAf8D6wH/A/AB/wPpAf8DkQH/CAADwAH/ + A7MB/wP9Af8D+AH/A/YB/wP1Af8D9AH/A/MB/wPzAf8D8gH/A/IB/wPxAf8D7wH/A/AB/wP3Af8DrwH/ + A8AB/wgAAdEBuQGZAf8BywGqAYEB/wH+Af0B+wH/Af4B+gHzAf8B/gH4Ae8B/wH+AfgB7gH/Af4B9wHs + Af8B/QH2AesB/wH9AfYB6gH/Af0B9gHpAf8B/QH1AegB/wH9AfUB5gH/AfwB8wHkAf8B+gHzAecB/wH6 + AfgB9AH/AcgBpgGBAf8B0QG5AZkB/wgAAb8BqwGRAf8BnAGBAQAB/wHGAb8BsgH/AdkB0wHHAf8B7QHn + AdsB/wH4AfIB5gH/AfsB9QHoAf8B/AH1AecB/wH8AfQB5gH/AfwB9AHkAf8B+wHzAeMB/wH7AfMB4QH/ + AfkB8AHeAf8B8gHpAdYB/wHdAdQBwAH/AZoBgQEAAf8BvwGrAZEB/wgAA8AB/wOzAf8D/QH/A/gB/wP2 + Af8D9QH/A/QB/wPzAf8D8wH/A/IB/wPyAf8D8QH/A+8B/wPwAf8D9wH/A68B/wPAAf8MAAO1Af8DwQH/ + A/0B/wP6Af8D9gH/A/YB/wP1Af8D9AH/A/QB/wPzAf8D8gH/A/cB/wP5Af8DwAH/A7UB/xAAAcsBrgGG + Af8B1QG6AZYB/wH+Af0B/AH/Af4B/AH4Af8B/gH5AfEB/wH+AfgB8AH/Af4B+AHvAf8B/QH3Ae4B/wH9 + AfcB7AH/Af0B9gHrAf8B/QH2AeoB/wH+AfoB8wH/AfwB+gH3Af8B1QG6AZYB/wHLAa4BhgH/EAABtQGd + AYEB/wGjAYoBgQH/AcYBwAGzAf8B1QHPAcMB/wHlAeAB1AH/AfAB6gHfAf8B9gHwAeUB/wH6AfQB5wH/ + AfsB9AHnAf8B+QHyAeQB/wH0AesB3AH/AekB4AHPAf8B0wHKAbgB/wGfAYQBAQH/AbUBnQGBAf8QAAO1 + Af8DwQH/A/0B/wP6Af8D9gH/A/YB/wP1Af8D9AH/A/QB/wPzAf8D8gH/A/cB/wP5Af8DwAH/A7UB/xQA + A7UB/wOwAf8D8gH/A/0B/wP7Af8D+AH/A/YB/wP3Af8D+QH/A/wB/wPxAf8DrwH/A7UB/xgAAcsBrgGG + Af8ByQGnAYEB/wH3AfIB6gH/Av4B/AH/Af4B/AH4Af8B/gH6AfMB/wH+AfgB8AH/Af0B+gHyAf8B/gH7 + AfYB/wH+Af0B+gH/AfcB8QHoAf8ByQGnAYEB/wHLAa4BhgH/GAABtQGdAYEB/wGbAYEBAAH/AbwBsgGi + Af8ByQHCAbcB/wHTAc0BwgH/AdwB1gHLAf8B4gHbAdAB/wHjAdwB0AH/Ad0B1QHIAf8B0AHIAbkB/wG3 + AaoBlQH/AZMBgQEAAf8BtQGdAYEB/xgAA7UB/wOwAf8D8gH/A/0B/wP7Af8D+AH/A/YB/wP3Af8D+QH/ + A/wB/wPxAf8DrwH/A7UB/xwAA74B/wORAf8DvAH/A90B/wPwAf8D/QH/A/AB/wPdAf8DuwH/A5EB/wO+ + Af8gAAHQAbgBlwH/AbUBhQEAAf8B0gG1AY0B/wHoAdoBxgH/AfUB7wHlAf8C/gH7Af8B9QHuAeUB/wHo + AdkBxQH/AdIBtAGNAf8BtQGFAQAB/wHQAbgBlwH/IAABvgGpAY8B/wGNAYEBAAH/AZ4BgwEBAf8BrQGc + AYQB/wG2AaoBmAH/AbsBswGlAf8BswGmAZIB/wGmAZQBgQH/AZYBgQEAAf8BjAGAAQAB/wG+AakBjwH/ + IAADvgH/A5EB/wO8Af8D3QH/A/AB/wP9Af8D8AH/A90B/wO7Af8DkQH/A74B/ygAA8UB/wOoAf8DmAH/ + A4wB/wOYAf8DqAH/A8UB/zAAAdUBwAGjAf8BwwGfAYEB/wG4AYwBAAH/AbEBgQEAAf8BuAGMAQAB/wHD + AZ8BgQH/AdUBwAGjAf8wAAHFAbQBnQH/AagBigGAAf8BlwGBAQAB/wGLAQQBAAH/AZcBgQEAAf8BqAGK + AYAB/wHFAbQBnQH/MAADxQH/A6gB/wOYAf8DjAH/A5gB/wOoAf8DxQH/GAABQgFNAT4HAAE+AwABKAMA + AUwDAAEmAwABAQEAAQEFAAHIAQEWAAP/AQAB/AEHAf8BgAP/AYAEAAHwAQEB/gEAAT8C/wGABAAB4AEA + AfwBAAEfAv8BgAQAAcABAAF4AQABDwL/AYAEAAGAAQABMAEAAQcB/AF/AYAEAAGAAQABMAEAAQcB+AE/ + AYAIAAEDAfwBHwGACAABAwH+AQ8BgAgAAQMBwAEHAYAIAAEDAYABAwGACAABAwGAAQMBgAgAAQMBwAEH + AYAIAAEDAf4BDwGABAABgAEAATABAAEHAfwBHwGABAABgAEAATABAAEHAfgBPwGABAABwAEAAXgBAAEP + AfwBfwGABAAB4AEAAfwBAAEfAv8BgAQAAfABAQH+AQABPwL/AYAEAAH8AQcB/wGAA/8BgAQAAfwBBwH/ + AYAB/wHwAR8B/gEDAfACAAHwAQEB/gEAAT8BwAEHAfgBAAHwAgAB4AEAAfwBAAEfAYABAwHwAQABcAIA + AcABAAF4AQABDwEAAQEB4AEAATACAAGAAQABMAEAAQYCAAHAAQABEAIAAYABAAEwAQABBgIAAcABAAEQ + VgABgAEAATABAAEGAgABwAEAARACAAGAAQABMAEAAQYCAAHAAQABEAIAAcABAAF4AQABDwEAAQEB4AEA + ATACAAHgAQAB/AEAAR8BgAEDAfABAAFwAgAB8AEBAf4BAAE/AcABBwH4AQAB8AIAAfwBBwH/AYAB/wHw + AR8B/gEDAfACAAs= + + + + 376, 17 + + + 466, 17 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/BrowserForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BrowserForm.Designer.cs similarity index 98% rename from source/ch/cyberduck/ui/winforms/BrowserForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/BrowserForm.Designer.cs index 67992f39c9..efcf1b9818 100644 --- a/source/ch/cyberduck/ui/winforms/BrowserForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BrowserForm.Designer.cs @@ -1,3637 +1,3637 @@ -using Ch.Cyberduck.Ui.Winforms.Controls; - -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class BrowserForm - { - /// - /// 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(); - this.mainMenu = new System.Windows.Forms.MainMenu(this.components); - this.menuItem1 = new System.Windows.Forms.MenuItem(); - this.newBrowserMainMenuItem = new System.Windows.Forms.MenuItem(); - this.openConnectionMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem4 = new System.Windows.Forms.MenuItem(); - this.newDownloadMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem6 = new System.Windows.Forms.MenuItem(); - this.newFolderMainMenuItem = new System.Windows.Forms.MenuItem(); - this.newFileMainMenuItem = new System.Windows.Forms.MenuItem(); - this.newSymbolicLinkMainMenuItem = new System.Windows.Forms.MenuItem(); - this.renameMainMenuItem = new System.Windows.Forms.MenuItem(); - this.duplicateMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem11 = new System.Windows.Forms.MenuItem(); - this.openUrlMainMenuItem = new System.Windows.Forms.MenuItem(); - this.editMainMenuItem = new System.Windows.Forms.MenuItem(); - this.infoMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem2 = new System.Windows.Forms.MenuItem(); - this.downloadMainMenuItem = new System.Windows.Forms.MenuItem(); - this.downloadAsMainMenuItem = new System.Windows.Forms.MenuItem(); - this.downloadToMainMenuItem = new System.Windows.Forms.MenuItem(); - this.uploadMainMenuItem = new System.Windows.Forms.MenuItem(); - this.synchronizeMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem21 = new System.Windows.Forms.MenuItem(); - this.deleteMainMenuItem = new System.Windows.Forms.MenuItem(); - this.revertMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem24 = new System.Windows.Forms.MenuItem(); - this.createArchiveMainMenuItem = new System.Windows.Forms.MenuItem(); - this.expandArchiveMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem27 = new System.Windows.Forms.MenuItem(); - this.printMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem29 = new System.Windows.Forms.MenuItem(); - this.exitMainMenuItem = new System.Windows.Forms.MenuItem(); - this.mainMenuItem2 = new System.Windows.Forms.MenuItem(); - this.cutMainMenuItem = new System.Windows.Forms.MenuItem(); - this.copyMainMenuItem = new System.Windows.Forms.MenuItem(); - this.copyUrlMainMenuItem = new System.Windows.Forms.MenuItem(); - this.pasteMainMenuItem = new System.Windows.Forms.MenuItem(); - this.selectAllMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem37 = new System.Windows.Forms.MenuItem(); - this.preferencesMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem39 = new System.Windows.Forms.MenuItem(); - this.toggleToolbarMainMenuItem = new System.Windows.Forms.MenuItem(); - this.customizeToolbarMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem42 = new System.Windows.Forms.MenuItem(); - this.menuItem43 = new System.Windows.Forms.MenuItem(); - this.columnMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem45 = new System.Windows.Forms.MenuItem(); - this.showHiddenFilesMainMenuItem = new System.Windows.Forms.MenuItem(); - this.textEncodingMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem48 = new System.Windows.Forms.MenuItem(); - this.toggleLogDrawerMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem50 = new System.Windows.Forms.MenuItem(); - this.refreshMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem52 = new System.Windows.Forms.MenuItem(); - this.goToFolderMainMenuItem = new System.Windows.Forms.MenuItem(); - this.backMainMenuItem = new System.Windows.Forms.MenuItem(); - this.forwardMainMenuItem = new System.Windows.Forms.MenuItem(); - this.enclosingFolderMainMenuItem = new System.Windows.Forms.MenuItem(); - this.insideMainMenuItem = new System.Windows.Forms.MenuItem(); - this.searchMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem59 = new System.Windows.Forms.MenuItem(); - this.sendCommandMainMenuItem = new System.Windows.Forms.MenuItem(); - this.openInTerminalMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem61 = new System.Windows.Forms.MenuItem(); - this.stopMainMenuItem = new System.Windows.Forms.MenuItem(); - this.disconnectMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem64 = new System.Windows.Forms.MenuItem(); - this.toggleBookmarksMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem3 = new System.Windows.Forms.MenuItem(); - this.sortByNicknameMainMenuItem = new System.Windows.Forms.MenuItem(); - this.sortByHostnameMainMenuItem = new System.Windows.Forms.MenuItem(); - this.sortByProtocolMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem66 = new System.Windows.Forms.MenuItem(); - this.newBookmarkMainMenuItem = new System.Windows.Forms.MenuItem(); - this.deleteBookmarkMainMenuItem = new System.Windows.Forms.MenuItem(); - this.editBookmarkMainMenuItem = new System.Windows.Forms.MenuItem(); - this.duplicateBookmarkMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem71 = new System.Windows.Forms.MenuItem(); - this.historyMainMenuItem = new System.Windows.Forms.MenuItem(); - this.bonjourMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem74 = new System.Windows.Forms.MenuItem(); - this.menuItem75 = new System.Windows.Forms.MenuItem(); - this.minimizeMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem77 = new System.Windows.Forms.MenuItem(); - this.transfersMainMenuItem = new System.Windows.Forms.MenuItem(); - this.activityMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem80 = new System.Windows.Forms.MenuItem(); - this.helpMainMenuItem = new System.Windows.Forms.MenuItem(); - this.licenseMainMenuItem = new System.Windows.Forms.MenuItem(); - this.acknowledgmentsMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem84 = new System.Windows.Forms.MenuItem(); - this.bugMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem86 = new System.Windows.Forms.MenuItem(); - this.updateMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem88 = new System.Windows.Forms.MenuItem(); - this.donateMainMenuItem = new System.Windows.Forms.MenuItem(); - this.keyMainMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem7 = new System.Windows.Forms.MenuItem(); - this.aboutMainMenuItem = new System.Windows.Forms.MenuItem(); - this.statusStrip = new System.Windows.Forms.StatusStrip(); - this.toolStripProgress = new System.Windows.Forms.ToolStripStatusLabel(); - this.statusLabel = new System.Windows.Forms.ToolStripStatusLabel(); - this.securityToolStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel(); - this.menuStrip1 = new Ch.Cyberduck.Ui.Winforms.Controls.ClickThroughMenuStrip(); - this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.newBrowserToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.openConnectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); - this.newDownloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); - this.newFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.newFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.renameFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.duplicateFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator(); - this.openWebURLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.editWithToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.infoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator(); - this.downloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.downloadAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.downloadToToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.uploadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.synchronizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator25 = new System.Windows.Forms.ToolStripSeparator(); - this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.revertToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); - this.createArchiveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.archiveMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.expandArchiveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator(); - this.printToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator35 = new System.Windows.Forms.ToolStripSeparator(); - this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.cutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.copyURLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.pasteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator14 = new System.Windows.Forms.ToolStripSeparator(); - this.preferencesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toggleToolbarToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolbarToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolbarContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); - this.openConnectionToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator30 = new System.Windows.Forms.ToolStripSeparator(); - this.quickConnectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.actionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator31 = new System.Windows.Forms.ToolStripSeparator(); - this.infoToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.refreshToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator32 = new System.Windows.Forms.ToolStripSeparator(); - this.editToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.openInWebBrowserToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.openInTerminalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.newFolderToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.deleteToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator33 = new System.Windows.Forms.ToolStripSeparator(); - this.downloadToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.uploadToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.transfersToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.logToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator(); - this.columnToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.columnContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); - this.toolStripSeparator34 = new System.Windows.Forms.ToolStripSeparator(); - this.showHiddenFilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.textEncodingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.textEncodingMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.toolStripSeparator15 = new System.Windows.Forms.ToolStripSeparator(); - this.toggleLogDrawerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.goToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.refreshToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator16 = new System.Windows.Forms.ToolStripSeparator(); - this.gotoFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.backToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.forwardToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.enclosingFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.insideToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.searchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator17 = new System.Windows.Forms.ToolStripSeparator(); - this.sendCommandToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator18 = new System.Windows.Forms.ToolStripSeparator(); - this.stopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.disconnectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.bookmarkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.viewBookmarksToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.newBookmarkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.deleteBookmarkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.editBookmarkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.duplicateBookmarkToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator19 = new System.Windows.Forms.ToolStripSeparator(); - this.historyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.historyMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.bonjourToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.bonjourMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.toolStripSeparator36 = new System.Windows.Forms.ToolStripSeparator(); - this.windowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.minimizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator20 = new System.Windows.Forms.ToolStripSeparator(); - this.transfersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.activitiyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.cyberduckHelpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.licenseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.acknowledgmentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator21 = new System.Windows.Forms.ToolStripSeparator(); - this.reportABugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator22 = new System.Windows.Forms.ToolStripSeparator(); - this.checkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator28 = new System.Windows.Forms.ToolStripSeparator(); - this.aboutCyberduckToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.createArchiveContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.editorMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.editor1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.editor2ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.editContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.editToolStripSplitButton = new System.Windows.Forms.ToolStripSplitButton(); - this.toolBar = new Ch.Cyberduck.Ui.Winforms.Controls.ClickThroughToolStrip(); - this.openConnectionToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.toolStripSeparatorAfterOpenConnection = new System.Windows.Forms.ToolStripSeparator(); - this.quickConnectToolStripComboBox = new System.Windows.Forms.ToolStripComboBox(); - this.actionToolStripDropDownButton = new System.Windows.Forms.ToolStripDropDownButton(); - this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.refreshContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); - this.newFolderContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.newFileContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.newSymlinkContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.renameContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.duplicateFileContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); - this.copyURLContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.openURLContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.infoContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator26 = new System.Windows.Forms.ToolStripSeparator(); - this.downloadContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.downloadAsContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.downloadToContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.uploadContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.synchronizeContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); - this.deleteContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.revertContxtStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); - this.expandArchiveContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); - this.newBrowserContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.newBookmarkContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparatorAfterAction = new System.Windows.Forms.ToolStripSeparator(); - this.infoToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.refreshToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.toolStripSeparatorAfterRefresh = new System.Windows.Forms.ToolStripSeparator(); - this.openInBrowserToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.openInTerminalToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.newFolderToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.deleteToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.toolStripSeparatorAfterDelete = new System.Windows.Forms.ToolStripSeparator(); - this.downloadToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.uploadToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.transfersToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.logToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.disconnectStripButton = new System.Windows.Forms.ToolStripButton(); - this.iconList = new System.Windows.Forms.ImageList(this.components); - this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer(); - this.panelManager1 = new Ch.Cyberduck.Ui.Winforms.Controls.PanelManager(); - this.managedBrowserPanel1 = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.splitContainer = new System.Windows.Forms.SplitContainer(); - this.browser = new Ch.Cyberduck.Ui.Winforms.Controls.MulticolorTreeListView(); - this.treeColumnName = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); - this.treeColumnSize = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); - this.treeColumnModified = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); - this.treeColumnOwner = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); - this.treeColumnGroup = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); - this.treeColumnPermissions = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); - this.treeColumnKind = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); - this.treeColumnExtension = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); - this.treeColumnRegion = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); - this.treeColumnVersion = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); - this.transcriptBox = new System.Windows.Forms.RichTextBox(); - this.managedBookmarkPanel2 = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.bookmarkListView = new Ch.Cyberduck.Ui.Winforms.Controls.LineSeparatedObjectListView(); - this.bookmarkImageColumn = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); - this.bookmarkDescriptionColumn = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); - this.activeColumn = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); - this.actionToolStrip = new System.Windows.Forms.ToolStrip(); - this.newBookmarkToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.editBookmarkToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.deleteBookmarkToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.viewPanel = new System.Windows.Forms.Panel(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.viewToolStrip = new Ch.Cyberduck.Ui.Winforms.Controls.ClickThroughToolStrip(); - this.browserToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.bookmarksToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.historyToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.bonjourToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.toolStripSeparator23 = new System.Windows.Forms.ToolStripSeparator(); - this.searchTextBox = new Ch.Cyberduck.ui.winforms.controls.SearchTextBox2(); - this.parentPathButton = new System.Windows.Forms.Button(); - this.pathComboBox = new System.Windows.Forms.ComboBox(); - this.historyForwardButton = new System.Windows.Forms.Button(); - this.historyBackButton = new System.Windows.Forms.Button(); - this.bookmarkContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.connectBookmarkContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator29 = new System.Windows.Forms.ToolStripSeparator(); - this.newBookmarkContextToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.deleteBookmarkContextToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.editBookmarkContextToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.duplicateBookmarkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.saveFileDialog = new System.Windows.Forms.SaveFileDialog(); - this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); - this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); - this.vistaMenu1 = new Ch.Cyberduck.Ui.Winforms.Controls.VistaMenu(this.components); - this.toolbarContextMenu1 = new System.Windows.Forms.ContextMenu(); - this.openConnectionToolbarMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem91 = new System.Windows.Forms.MenuItem(); - this.quickConnectToolbarMenuItem = new System.Windows.Forms.MenuItem(); - this.actionContextToolbarMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem94 = new System.Windows.Forms.MenuItem(); - this.infoToolbarMenuItem = new System.Windows.Forms.MenuItem(); - this.refreshToolbarMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem97 = new System.Windows.Forms.MenuItem(); - this.editToolbarMenuItem = new System.Windows.Forms.MenuItem(); - this.openInWebBrowserToolbarMenuItem = new System.Windows.Forms.MenuItem(); - this.openInTerminalToolbarMenuItem = new System.Windows.Forms.MenuItem(); - this.newFolderToolbarMenuItem = new System.Windows.Forms.MenuItem(); - this.deleteToolbarMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem102 = new System.Windows.Forms.MenuItem(); - this.downloadToolbarMenuItem = new System.Windows.Forms.MenuItem(); - this.uploadToolbarMenuItem = new System.Windows.Forms.MenuItem(); - this.transfersToolbarMenuItem = new System.Windows.Forms.MenuItem(); - this.logToolbarMenuItem = new System.Windows.Forms.MenuItem(); - this.browserContextMenu = new System.Windows.Forms.ContextMenu(); - this.refreshBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem44 = new System.Windows.Forms.MenuItem(); - this.newFolderBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.newFileBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.newSymlinkBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.renameBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.duplicateFileBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem96 = new System.Windows.Forms.MenuItem(); - this.copyUrlBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.openUrlBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.editBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.infoBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem105 = new System.Windows.Forms.MenuItem(); - this.downloadBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.downloadAsBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.downloadToBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.uploadBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.synchronizeBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem101 = new System.Windows.Forms.MenuItem(); - this.deleteBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.revertBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem110 = new System.Windows.Forms.MenuItem(); - this.createArchiveBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.expandArchiveBrowserContextMnuItem = new System.Windows.Forms.MenuItem(); - this.menuItem113 = new System.Windows.Forms.MenuItem(); - this.newBrowserBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.newBookmarkBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); - this.bookmarkContextMenu = new System.Windows.Forms.ContextMenu(); - this.connectBookmarkContextMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem5 = new System.Windows.Forms.MenuItem(); - this.newBookmarkContextMenuItem = new System.Windows.Forms.MenuItem(); - this.deleteBookmarkContextMenuItem = new System.Windows.Forms.MenuItem(); - this.editBookmarkContextMenuItem = new System.Windows.Forms.MenuItem(); - this.duplicateBookmarkContextMenuItem = new System.Windows.Forms.MenuItem(); - this.menuItem8 = new System.Windows.Forms.MenuItem(); - this.menuItem9 = new System.Windows.Forms.MenuItem(); - this.sortByNicknameBookmarkContextMenuItem = new System.Windows.Forms.MenuItem(); - this.sortByHostnameBookmarkContextMenuItem = new System.Windows.Forms.MenuItem(); - this.sortByProtocolBookmarkContextMenuItem = new System.Windows.Forms.MenuItem(); - this.statusStrip.SuspendLayout(); - this.menuStrip1.SuspendLayout(); - this.toolbarContextMenu.SuspendLayout(); - this.editorMenuStrip.SuspendLayout(); - this.toolBar.SuspendLayout(); - this.contextMenuStrip.SuspendLayout(); - this.toolStripContainer1.BottomToolStripPanel.SuspendLayout(); - this.toolStripContainer1.ContentPanel.SuspendLayout(); - this.toolStripContainer1.TopToolStripPanel.SuspendLayout(); - this.toolStripContainer1.SuspendLayout(); - this.panelManager1.SuspendLayout(); - this.managedBrowserPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); - this.splitContainer.Panel1.SuspendLayout(); - this.splitContainer.Panel2.SuspendLayout(); - this.splitContainer.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.browser)).BeginInit(); - this.managedBookmarkPanel2.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.bookmarkListView)).BeginInit(); - this.actionToolStrip.SuspendLayout(); - this.viewPanel.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); - this.viewToolStrip.SuspendLayout(); - this.bookmarkContextMenuStrip.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.vistaMenu1)).BeginInit(); - this.SuspendLayout(); - // - // mainMenu - // - this.mainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.menuItem1, - this.mainMenuItem2, - this.menuItem39, - this.menuItem50, - this.menuItem64, - this.menuItem75, - this.menuItem80}); - // - // menuItem1 - // - this.menuItem1.Index = 0; - this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.newBrowserMainMenuItem, - this.openConnectionMainMenuItem, - this.menuItem4, - this.newDownloadMainMenuItem, - this.menuItem6, - this.newFolderMainMenuItem, - this.newFileMainMenuItem, - this.newSymbolicLinkMainMenuItem, - this.renameMainMenuItem, - this.duplicateMainMenuItem, - this.menuItem11, - this.openUrlMainMenuItem, - this.editMainMenuItem, - this.infoMainMenuItem, - this.menuItem2, - this.downloadMainMenuItem, - this.downloadAsMainMenuItem, - this.downloadToMainMenuItem, - this.uploadMainMenuItem, - this.synchronizeMainMenuItem, - this.menuItem21, - this.deleteMainMenuItem, - this.revertMainMenuItem, - this.menuItem24, - this.createArchiveMainMenuItem, - this.expandArchiveMainMenuItem, - this.menuItem27, - this.printMainMenuItem, - this.menuItem29, - this.exitMainMenuItem}); - this.menuItem1.Text = "&File"; - // - // newBrowserMainMenuItem - // - this.newBrowserMainMenuItem.Index = 0; - this.newBrowserMainMenuItem.Text = "New Browser"; - // - // openConnectionMainMenuItem - // - this.openConnectionMainMenuItem.Index = 1; - this.openConnectionMainMenuItem.Text = "Open Connection…"; - // - // menuItem4 - // - this.menuItem4.Index = 2; - this.menuItem4.Text = "-"; - // - // newDownloadMainMenuItem - // - this.newDownloadMainMenuItem.Index = 3; - this.newDownloadMainMenuItem.Text = "New Download"; - // - // menuItem6 - // - this.menuItem6.Index = 4; - this.menuItem6.Text = "-"; - // - // newFolderMainMenuItem - // - this.newFolderMainMenuItem.Index = 5; - this.newFolderMainMenuItem.Text = "New Folder…"; - // - // newFileMainMenuItem - // - this.newFileMainMenuItem.Index = 6; - this.newFileMainMenuItem.Text = "New File…"; - // - // newSymbolicLinkMainMenuItem - // - this.newSymbolicLinkMainMenuItem.Index = 7; - this.newSymbolicLinkMainMenuItem.Text = "New Symbolic Link…"; - // - // renameMainMenuItem - // - this.renameMainMenuItem.Index = 8; - this.renameMainMenuItem.Text = "Rename…"; - // - // duplicateMainMenuItem - // - this.duplicateMainMenuItem.Index = 9; - this.duplicateMainMenuItem.Text = "Duplicate…"; - // - // menuItem11 - // - this.menuItem11.Index = 10; - this.menuItem11.Text = "-"; - // - // openUrlMainMenuItem - // - this.openUrlMainMenuItem.Index = 11; - this.openUrlMainMenuItem.Text = "Open URL"; - // - // editMainMenuItem - // - this.editMainMenuItem.Index = 12; - this.editMainMenuItem.Text = "Edit With"; - // - // infoMainMenuItem - // - this.infoMainMenuItem.Index = 13; - this.infoMainMenuItem.Text = "Info"; - // - // menuItem2 - // - this.menuItem2.Index = 14; - this.menuItem2.Text = "-"; - // - // downloadMainMenuItem - // - this.downloadMainMenuItem.Index = 15; - this.downloadMainMenuItem.Text = "Download"; - // - // downloadAsMainMenuItem - // - this.downloadAsMainMenuItem.Index = 16; - this.downloadAsMainMenuItem.Text = "Download As…"; - // - // downloadToMainMenuItem - // - this.downloadToMainMenuItem.Index = 17; - this.downloadToMainMenuItem.Text = "Download To…"; - // - // uploadMainMenuItem - // - this.uploadMainMenuItem.Index = 18; - this.uploadMainMenuItem.Text = "Upload…"; - // - // synchronizeMainMenuItem - // - this.synchronizeMainMenuItem.Index = 19; - this.synchronizeMainMenuItem.Text = "Synchronize…"; - // - // menuItem21 - // - this.menuItem21.Index = 20; - this.menuItem21.Text = "-"; - // - // deleteMainMenuItem - // - this.deleteMainMenuItem.Index = 21; - this.deleteMainMenuItem.Text = "Delete"; - // - // revertMainMenuItem - // - this.revertMainMenuItem.Index = 22; - this.revertMainMenuItem.Text = "Revert"; - // - // menuItem24 - // - this.menuItem24.Index = 23; - this.menuItem24.Text = "-"; - // - // createArchiveMainMenuItem - // - this.createArchiveMainMenuItem.Index = 24; - this.createArchiveMainMenuItem.Text = "Create Archive"; - // - // expandArchiveMainMenuItem - // - this.expandArchiveMainMenuItem.Index = 25; - this.expandArchiveMainMenuItem.Text = "Expand Archive"; - // - // menuItem27 - // - this.menuItem27.Index = 26; - this.menuItem27.Text = "-"; - // - // printMainMenuItem - // - this.printMainMenuItem.Enabled = false; - this.printMainMenuItem.Index = 27; - this.printMainMenuItem.Text = "Print…"; - // - // menuItem29 - // - this.menuItem29.Index = 28; - this.menuItem29.Text = "-"; - // - // exitMainMenuItem - // - this.exitMainMenuItem.Index = 29; - this.exitMainMenuItem.Text = "Exit"; - // - // mainMenuItem2 - // - this.mainMenuItem2.Index = 1; - this.mainMenuItem2.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.cutMainMenuItem, - this.copyMainMenuItem, - this.copyUrlMainMenuItem, - this.pasteMainMenuItem, - this.selectAllMainMenuItem, - this.menuItem37, - this.preferencesMainMenuItem}); - this.mainMenuItem2.Text = "&Edit"; - // - // cutMainMenuItem - // - this.cutMainMenuItem.Index = 0; - this.cutMainMenuItem.Text = "Cut"; - // - // copyMainMenuItem - // - this.copyMainMenuItem.Index = 1; - this.copyMainMenuItem.Text = "Copy"; - // - // copyUrlMainMenuItem - // - this.copyUrlMainMenuItem.Index = 2; - this.copyUrlMainMenuItem.Text = "Copy URL"; - // - // pasteMainMenuItem - // - this.pasteMainMenuItem.Index = 3; - this.pasteMainMenuItem.Text = "Paste"; - // - // selectAllMainMenuItem - // - this.selectAllMainMenuItem.Index = 4; - this.selectAllMainMenuItem.Text = "Select All"; - // - // menuItem37 - // - this.menuItem37.Index = 5; - this.menuItem37.Text = "-"; - // - // preferencesMainMenuItem - // - this.preferencesMainMenuItem.Index = 6; - this.preferencesMainMenuItem.Text = "Preferences…"; - // - // menuItem39 - // - this.menuItem39.Index = 2; - this.menuItem39.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.toggleToolbarMainMenuItem, - this.customizeToolbarMainMenuItem, - this.menuItem43, - this.columnMainMenuItem, - this.menuItem45, - this.showHiddenFilesMainMenuItem, - this.textEncodingMainMenuItem, - this.menuItem48, - this.toggleLogDrawerMainMenuItem}); - this.menuItem39.Text = "&View"; - // - // toggleToolbarMainMenuItem - // - this.toggleToolbarMainMenuItem.Index = 0; - this.toggleToolbarMainMenuItem.Text = "Hide Toolbar"; - // - // customizeToolbarMainMenuItem - // - this.customizeToolbarMainMenuItem.Index = 1; - this.customizeToolbarMainMenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.menuItem42}); - this.customizeToolbarMainMenuItem.Text = "Customize Toolbar…"; - this.customizeToolbarMainMenuItem.Popup += new System.EventHandler(this.customizeToolbarMenuItem_Popup); - // - // menuItem42 - // - this.menuItem42.Index = 0; - this.menuItem42.Text = "noch"; - // - // menuItem43 - // - this.menuItem43.Index = 2; - this.menuItem43.Text = "-"; - // - // columnMainMenuItem - // - this.columnMainMenuItem.Index = 3; - this.columnMainMenuItem.Text = "Column"; - this.columnMainMenuItem.Popup += new System.EventHandler(this.columnMenuItem_Popup); - // - // menuItem45 - // - this.menuItem45.Index = 4; - this.menuItem45.Text = "-"; - // - // showHiddenFilesMainMenuItem - // - this.showHiddenFilesMainMenuItem.Index = 5; - this.showHiddenFilesMainMenuItem.Text = "Show Hidden Files"; - // - // textEncodingMainMenuItem - // - this.textEncodingMainMenuItem.Index = 6; - this.textEncodingMainMenuItem.Text = "Text Encoding"; - // - // menuItem48 - // - this.menuItem48.Index = 7; - this.menuItem48.Text = "-"; - // - // toggleLogDrawerMainMenuItem - // - this.toggleLogDrawerMainMenuItem.Index = 8; - this.toggleLogDrawerMainMenuItem.Text = "Toggle Log Drawer"; - // - // menuItem50 - // - this.menuItem50.Index = 3; - this.menuItem50.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.refreshMainMenuItem, - this.menuItem52, - this.goToFolderMainMenuItem, - this.backMainMenuItem, - this.forwardMainMenuItem, - this.enclosingFolderMainMenuItem, - this.insideMainMenuItem, - this.searchMainMenuItem, - this.menuItem59, - this.sendCommandMainMenuItem, - this.openInTerminalMainMenuItem, - this.menuItem61, - this.stopMainMenuItem, - this.disconnectMainMenuItem}); - this.menuItem50.Text = "&Go"; - // - // refreshMainMenuItem - // - this.refreshMainMenuItem.Index = 0; - this.refreshMainMenuItem.Text = "Refresh"; - // - // menuItem52 - // - this.menuItem52.Index = 1; - this.menuItem52.Text = "-"; - // - // goToFolderMainMenuItem - // - this.goToFolderMainMenuItem.Index = 2; - this.goToFolderMainMenuItem.Text = "Go to Folder…"; - // - // backMainMenuItem - // - this.backMainMenuItem.Index = 3; - this.backMainMenuItem.Text = "Back"; - // - // forwardMainMenuItem - // - this.forwardMainMenuItem.Index = 4; - this.forwardMainMenuItem.Text = "Forward"; - // - // enclosingFolderMainMenuItem - // - this.enclosingFolderMainMenuItem.Index = 5; - this.enclosingFolderMainMenuItem.Text = "Enclosing Folder"; - // - // insideMainMenuItem - // - this.insideMainMenuItem.Index = 6; - this.insideMainMenuItem.Text = "Inside"; - // - // searchMainMenuItem - // - this.searchMainMenuItem.Index = 7; - this.searchMainMenuItem.Text = "Search…"; - // - // menuItem59 - // - this.menuItem59.Index = 8; - this.menuItem59.Text = "-"; - // - // sendCommandMainMenuItem - // - this.sendCommandMainMenuItem.Index = 9; - this.sendCommandMainMenuItem.Text = "Send Command…"; - // - // openInTerminalMainMenuItem - // - this.openInTerminalMainMenuItem.Index = 10; - this.openInTerminalMainMenuItem.Text = "Open in Terminal"; - // - // menuItem61 - // - this.menuItem61.Index = 11; - this.menuItem61.Text = "-"; - // - // stopMainMenuItem - // - this.stopMainMenuItem.Index = 12; - this.stopMainMenuItem.Text = "Stop"; - // - // disconnectMainMenuItem - // - this.disconnectMainMenuItem.Index = 13; - this.disconnectMainMenuItem.Text = "Disconnect"; - // - // menuItem64 - // - this.menuItem64.Index = 4; - this.menuItem64.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.toggleBookmarksMainMenuItem, - this.menuItem3, - this.menuItem66, - this.newBookmarkMainMenuItem, - this.deleteBookmarkMainMenuItem, - this.editBookmarkMainMenuItem, - this.duplicateBookmarkMainMenuItem, - this.menuItem71, - this.historyMainMenuItem, - this.bonjourMainMenuItem, - this.menuItem74}); - this.menuItem64.Text = "&Bookmark"; - // - // toggleBookmarksMainMenuItem - // - this.toggleBookmarksMainMenuItem.Index = 0; - this.toggleBookmarksMainMenuItem.Text = "Toggle Bookmarks"; - // - // menuItem3 - // - this.menuItem3.Index = 1; - this.menuItem3.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.sortByNicknameMainMenuItem, - this.sortByHostnameMainMenuItem, - this.sortByProtocolMainMenuItem}); - this.menuItem3.Text = "Sort By"; - // - // sortByNicknameMainMenuItem - // - this.sortByNicknameMainMenuItem.Index = 0; - this.sortByNicknameMainMenuItem.Text = "Nickname"; - // - // sortByHostnameMainMenuItem - // - this.sortByHostnameMainMenuItem.Index = 1; - this.sortByHostnameMainMenuItem.Text = "Hostname"; - // - // sortByProtocolMainMenuItem - // - this.sortByProtocolMainMenuItem.Index = 2; - this.sortByProtocolMainMenuItem.Text = "Protocol"; - // - // menuItem66 - // - this.menuItem66.Index = 2; - this.menuItem66.Text = "-"; - // - // newBookmarkMainMenuItem - // - this.newBookmarkMainMenuItem.Index = 3; - this.newBookmarkMainMenuItem.Text = "New Bookmark"; - // - // deleteBookmarkMainMenuItem - // - this.deleteBookmarkMainMenuItem.Index = 4; - this.deleteBookmarkMainMenuItem.Text = "Delete Bookmark"; - // - // editBookmarkMainMenuItem - // - this.editBookmarkMainMenuItem.Index = 5; - this.editBookmarkMainMenuItem.Text = "Edit Bookmark"; - // - // duplicateBookmarkMainMenuItem - // - this.duplicateBookmarkMainMenuItem.Index = 6; - this.duplicateBookmarkMainMenuItem.Text = "Duplicate Bookmark"; - // - // menuItem71 - // - this.menuItem71.Index = 7; - this.menuItem71.Text = "-"; - // - // historyMainMenuItem - // - this.historyMainMenuItem.Index = 8; - this.historyMainMenuItem.Text = "History"; - // - // bonjourMainMenuItem - // - this.bonjourMainMenuItem.Index = 9; - this.bonjourMainMenuItem.Text = "Bonjour"; - // - // menuItem74 - // - this.menuItem74.Index = 10; - this.menuItem74.Text = "-"; - // - // menuItem75 - // - this.menuItem75.Index = 5; - this.menuItem75.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.minimizeMainMenuItem, - this.menuItem77, - this.transfersMainMenuItem, - this.activityMainMenuItem}); - this.menuItem75.Text = "&Window"; - // - // minimizeMainMenuItem - // - this.minimizeMainMenuItem.Index = 0; - this.minimizeMainMenuItem.Text = "Minimize"; - // - // menuItem77 - // - this.menuItem77.Index = 1; - this.menuItem77.Text = "-"; - // - // transfersMainMenuItem - // - this.transfersMainMenuItem.Index = 2; - this.transfersMainMenuItem.Text = "Transfers"; - // - // activityMainMenuItem - // - this.activityMainMenuItem.Index = 3; - this.activityMainMenuItem.Text = "Activity"; - // - // menuItem80 - // - this.menuItem80.Index = 6; - this.menuItem80.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.helpMainMenuItem, - this.licenseMainMenuItem, - this.acknowledgmentsMainMenuItem, - this.menuItem84, - this.bugMainMenuItem, - this.menuItem86, - this.updateMainMenuItem, - this.menuItem88, - this.donateMainMenuItem, - this.keyMainMenuItem, - this.menuItem7, - this.aboutMainMenuItem}); - this.menuItem80.Text = "&Help"; - // - // helpMainMenuItem - // - this.helpMainMenuItem.Index = 0; - this.helpMainMenuItem.Text = "Cyberduck Help"; - // - // licenseMainMenuItem - // - this.licenseMainMenuItem.Index = 1; - this.licenseMainMenuItem.Text = "License"; - // - // acknowledgmentsMainMenuItem - // - this.acknowledgmentsMainMenuItem.Index = 2; - this.acknowledgmentsMainMenuItem.Text = "Acknowledgments"; - // - // menuItem84 - // - this.menuItem84.Index = 3; - this.menuItem84.Text = "-"; - // - // bugMainMenuItem - // - this.bugMainMenuItem.Index = 4; - this.bugMainMenuItem.Text = "Report a Bug"; - // - // menuItem86 - // - this.menuItem86.Index = 5; - this.menuItem86.Text = "-"; - // - // updateMainMenuItem - // - this.updateMainMenuItem.Index = 6; - this.updateMainMenuItem.Text = "Check for Update…"; - // - // menuItem88 - // - this.menuItem88.Index = 7; - this.menuItem88.Text = "-"; - // - // donateMainMenuItem - // - this.donateMainMenuItem.Index = 8; - this.donateMainMenuItem.Text = "Donate…"; - // - // keyMainMenuItem - // - this.keyMainMenuItem.Index = 9; - this.keyMainMenuItem.Text = "Registered to…"; - // - // menuItem7 - // - this.menuItem7.Index = 10; - this.menuItem7.Text = "-"; - // - // aboutMainMenuItem - // - this.aboutMainMenuItem.Index = 11; - this.aboutMainMenuItem.Text = "About Cyberduck"; - // - // statusStrip - // - this.statusStrip.Dock = System.Windows.Forms.DockStyle.None; - this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripProgress, - this.statusLabel, - this.securityToolStripStatusLabel}); - this.statusStrip.Location = new System.Drawing.Point(0, 0); - this.statusStrip.Name = "statusStrip"; - this.statusStrip.Padding = new System.Windows.Forms.Padding(1, 0, 16, 0); - this.statusStrip.Size = new System.Drawing.Size(1028, 22); - this.statusStrip.TabIndex = 9; - // - // toolStripProgress - // - this.toolStripProgress.AutoSize = false; - this.toolStripProgress.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; - this.toolStripProgress.Margin = new System.Windows.Forms.Padding(2, 3, 0, 2); - this.toolStripProgress.Name = "toolStripProgress"; - this.toolStripProgress.Size = new System.Drawing.Size(16, 17); - // - // statusLabel - // - this.statusLabel.Name = "statusLabel"; - this.statusLabel.Size = new System.Drawing.Size(970, 17); - this.statusLabel.Spring = true; - this.statusLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // securityToolStripStatusLabel - // - this.securityToolStripStatusLabel.Image = global::Ch.Cyberduck.ResourcesBundle.locked; - this.securityToolStripStatusLabel.Name = "securityToolStripStatusLabel"; - this.securityToolStripStatusLabel.Padding = new System.Windows.Forms.Padding(0, 0, 7, 0); - this.securityToolStripStatusLabel.Size = new System.Drawing.Size(23, 17); - this.securityToolStripStatusLabel.Click += new System.EventHandler(this.securityToolStripStatusLabel_Click); - // - // menuStrip1 - // - this.menuStrip1.Dock = System.Windows.Forms.DockStyle.None; - this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.fileToolStripMenuItem, - this.editToolStripMenuItem, - this.viewToolStripMenuItem, - this.goToolStripMenuItem, - this.bookmarkToolStripMenuItem, - this.windowToolStripMenuItem, - this.helpToolStripMenuItem}); - this.menuStrip1.Location = new System.Drawing.Point(0, 56); - this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Padding = new System.Windows.Forms.Padding(7, 2, 0, 2); - this.menuStrip1.Size = new System.Drawing.Size(343, 24); - this.menuStrip1.TabIndex = 12; - this.menuStrip1.Text = "menuStrip1"; - this.menuStrip1.Visible = false; - // - // fileToolStripMenuItem - // - this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.newBrowserToolStripMenuItem, - this.openConnectionToolStripMenuItem, - this.toolStripSeparator7, - this.newDownloadToolStripMenuItem, - this.toolStripSeparator8, - this.newFolderToolStripMenuItem, - this.newFileToolStripMenuItem, - this.renameFileToolStripMenuItem, - this.duplicateFileToolStripMenuItem, - this.toolStripSeparator9, - this.openWebURLToolStripMenuItem, - this.editWithToolStripMenuItem, - this.infoToolStripMenuItem, - this.toolStripSeparator10, - this.downloadToolStripMenuItem, - this.downloadAsToolStripMenuItem, - this.downloadToToolStripMenuItem, - this.uploadToolStripMenuItem, - this.synchronizeToolStripMenuItem, - this.toolStripSeparator25, - this.deleteToolStripMenuItem, - this.revertToolStripMenuItem, - this.toolStripSeparator11, - this.createArchiveToolStripMenuItem, - this.expandArchiveToolStripMenuItem, - this.toolStripSeparator12, - this.printToolStripMenuItem, - this.toolStripSeparator35, - this.exitToolStripMenuItem}); - this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; - this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); - this.fileToolStripMenuItem.Text = "&File"; - // - // newBrowserToolStripMenuItem - // - this.newBrowserToolStripMenuItem.Name = "newBrowserToolStripMenuItem"; - this.newBrowserToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.newBrowserToolStripMenuItem.Text = "New Browser"; - // - // openConnectionToolStripMenuItem - // - this.openConnectionToolStripMenuItem.Name = "openConnectionToolStripMenuItem"; - this.openConnectionToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.openConnectionToolStripMenuItem.Text = "Open Connection…"; - // - // toolStripSeparator7 - // - this.toolStripSeparator7.Name = "toolStripSeparator7"; - this.toolStripSeparator7.Size = new System.Drawing.Size(174, 6); - // - // newDownloadToolStripMenuItem - // - this.newDownloadToolStripMenuItem.Enabled = false; - this.newDownloadToolStripMenuItem.Name = "newDownloadToolStripMenuItem"; - this.newDownloadToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.newDownloadToolStripMenuItem.Text = "New Download"; - // - // toolStripSeparator8 - // - this.toolStripSeparator8.Name = "toolStripSeparator8"; - this.toolStripSeparator8.Size = new System.Drawing.Size(174, 6); - // - // newFolderToolStripMenuItem - // - this.newFolderToolStripMenuItem.Name = "newFolderToolStripMenuItem"; - this.newFolderToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.newFolderToolStripMenuItem.Text = "New Folder…"; - // - // newFileToolStripMenuItem - // - this.newFileToolStripMenuItem.Name = "newFileToolStripMenuItem"; - this.newFileToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.newFileToolStripMenuItem.Text = "New File…"; - // - // renameFileToolStripMenuItem - // - this.renameFileToolStripMenuItem.Name = "renameFileToolStripMenuItem"; - this.renameFileToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.renameFileToolStripMenuItem.Text = "Rename…"; - // - // duplicateFileToolStripMenuItem - // - this.duplicateFileToolStripMenuItem.Name = "duplicateFileToolStripMenuItem"; - this.duplicateFileToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.duplicateFileToolStripMenuItem.Text = "Duplicate…"; - // - // toolStripSeparator9 - // - this.toolStripSeparator9.Name = "toolStripSeparator9"; - this.toolStripSeparator9.Size = new System.Drawing.Size(174, 6); - // - // openWebURLToolStripMenuItem - // - this.openWebURLToolStripMenuItem.Name = "openWebURLToolStripMenuItem"; - this.openWebURLToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.openWebURLToolStripMenuItem.Text = "Open Web URL"; - // - // editWithToolStripMenuItem - // - this.editWithToolStripMenuItem.Name = "editWithToolStripMenuItem"; - this.editWithToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.editWithToolStripMenuItem.Text = "Edit"; - // - // infoToolStripMenuItem - // - this.infoToolStripMenuItem.Name = "infoToolStripMenuItem"; - this.infoToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.infoToolStripMenuItem.Text = "Info"; - // - // toolStripSeparator10 - // - this.toolStripSeparator10.Name = "toolStripSeparator10"; - this.toolStripSeparator10.Size = new System.Drawing.Size(174, 6); - // - // downloadToolStripMenuItem - // - this.downloadToolStripMenuItem.Name = "downloadToolStripMenuItem"; - this.downloadToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.downloadToolStripMenuItem.Text = "Download"; - // - // downloadAsToolStripMenuItem - // - this.downloadAsToolStripMenuItem.Name = "downloadAsToolStripMenuItem"; - this.downloadAsToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.downloadAsToolStripMenuItem.Text = "Download As…"; - // - // downloadToToolStripMenuItem - // - this.downloadToToolStripMenuItem.Name = "downloadToToolStripMenuItem"; - this.downloadToToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.downloadToToolStripMenuItem.Text = "Download To…"; - // - // uploadToolStripMenuItem - // - this.uploadToolStripMenuItem.Name = "uploadToolStripMenuItem"; - this.uploadToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.uploadToolStripMenuItem.Text = "Upload…"; - // - // synchronizeToolStripMenuItem - // - this.synchronizeToolStripMenuItem.Name = "synchronizeToolStripMenuItem"; - this.synchronizeToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.synchronizeToolStripMenuItem.Text = "Synchronize…"; - // - // toolStripSeparator25 - // - this.toolStripSeparator25.Name = "toolStripSeparator25"; - this.toolStripSeparator25.Size = new System.Drawing.Size(174, 6); - // - // deleteToolStripMenuItem - // - this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; - this.deleteToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.deleteToolStripMenuItem.Text = "Delete"; - // - // revertToolStripMenuItem - // - this.revertToolStripMenuItem.Name = "revertToolStripMenuItem"; - this.revertToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.revertToolStripMenuItem.Text = "Revert"; - // - // toolStripSeparator11 - // - this.toolStripSeparator11.Name = "toolStripSeparator11"; - this.toolStripSeparator11.Size = new System.Drawing.Size(174, 6); - // - // createArchiveToolStripMenuItem - // - this.createArchiveToolStripMenuItem.DropDown = this.archiveMenuStrip; - this.createArchiveToolStripMenuItem.Name = "createArchiveToolStripMenuItem"; - this.createArchiveToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.createArchiveToolStripMenuItem.Text = "Create Archive"; - // - // archiveMenuStrip - // - this.archiveMenuStrip.Name = "archiveMenuStrip"; - this.archiveMenuStrip.OwnerItem = this.createArchiveContextToolStripMenuItem; - this.archiveMenuStrip.Size = new System.Drawing.Size(61, 4); - // - // expandArchiveToolStripMenuItem - // - this.expandArchiveToolStripMenuItem.Name = "expandArchiveToolStripMenuItem"; - this.expandArchiveToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.expandArchiveToolStripMenuItem.Text = "Expand Archive"; - // - // toolStripSeparator12 - // - this.toolStripSeparator12.Name = "toolStripSeparator12"; - this.toolStripSeparator12.Size = new System.Drawing.Size(174, 6); - // - // printToolStripMenuItem - // - this.printToolStripMenuItem.Enabled = false; - this.printToolStripMenuItem.Name = "printToolStripMenuItem"; - this.printToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.printToolStripMenuItem.Text = "Print…"; - // - // toolStripSeparator35 - // - this.toolStripSeparator35.Name = "toolStripSeparator35"; - this.toolStripSeparator35.Size = new System.Drawing.Size(174, 6); - // - // exitToolStripMenuItem - // - this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; - this.exitToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.exitToolStripMenuItem.Text = "Exit"; - // - // editToolStripMenuItem - // - this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.cutToolStripMenuItem, - this.copyToolStripMenuItem, - this.copyURLToolStripMenuItem, - this.pasteToolStripMenuItem, - this.selectAllToolStripMenuItem, - this.toolStripSeparator14, - this.preferencesToolStripMenuItem}); - this.editToolStripMenuItem.Name = "editToolStripMenuItem"; - this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20); - this.editToolStripMenuItem.Text = "&Edit"; - // - // cutToolStripMenuItem - // - this.cutToolStripMenuItem.Enabled = false; - this.cutToolStripMenuItem.Name = "cutToolStripMenuItem"; - this.cutToolStripMenuItem.Size = new System.Drawing.Size(144, 22); - this.cutToolStripMenuItem.Text = "Cut"; - // - // copyToolStripMenuItem - // - this.copyToolStripMenuItem.Enabled = false; - this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; - this.copyToolStripMenuItem.Size = new System.Drawing.Size(144, 22); - this.copyToolStripMenuItem.Text = "Copy"; - // - // copyURLToolStripMenuItem - // - this.copyURLToolStripMenuItem.Enabled = false; - this.copyURLToolStripMenuItem.Name = "copyURLToolStripMenuItem"; - this.copyURLToolStripMenuItem.Size = new System.Drawing.Size(144, 22); - this.copyURLToolStripMenuItem.Text = "Copy URL"; - // - // pasteToolStripMenuItem - // - this.pasteToolStripMenuItem.Enabled = false; - this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; - this.pasteToolStripMenuItem.Size = new System.Drawing.Size(144, 22); - this.pasteToolStripMenuItem.Text = "Paste"; - // - // selectAllToolStripMenuItem - // - this.selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem"; - this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(144, 22); - this.selectAllToolStripMenuItem.Text = "Select All"; - // - // toolStripSeparator14 - // - this.toolStripSeparator14.Name = "toolStripSeparator14"; - this.toolStripSeparator14.Size = new System.Drawing.Size(141, 6); - // - // preferencesToolStripMenuItem - // - this.preferencesToolStripMenuItem.Name = "preferencesToolStripMenuItem"; - this.preferencesToolStripMenuItem.Size = new System.Drawing.Size(144, 22); - this.preferencesToolStripMenuItem.Text = "Preferences…"; - // - // viewToolStripMenuItem - // - this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toggleToolbarToolStripMenuItem, - this.toolbarToolStripMenuItem, - this.toolStripSeparator13, - this.columnToolStripMenuItem, - this.toolStripSeparator34, - this.showHiddenFilesToolStripMenuItem, - this.textEncodingToolStripMenuItem, - this.toolStripSeparator15, - this.toggleLogDrawerToolStripMenuItem}); - this.viewToolStripMenuItem.Name = "viewToolStripMenuItem"; - this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20); - this.viewToolStripMenuItem.Text = "&View"; - // - // toggleToolbarToolStripMenuItem - // - this.toggleToolbarToolStripMenuItem.Name = "toggleToolbarToolStripMenuItem"; - this.toggleToolbarToolStripMenuItem.Size = new System.Drawing.Size(183, 22); - this.toggleToolbarToolStripMenuItem.Text = "Hide Toolbar"; - // - // toolbarToolStripMenuItem - // - this.toolbarToolStripMenuItem.DropDown = this.toolbarContextMenu; - this.toolbarToolStripMenuItem.Name = "toolbarToolStripMenuItem"; - this.toolbarToolStripMenuItem.Size = new System.Drawing.Size(183, 22); - this.toolbarToolStripMenuItem.Text = "Customize Toolbar…"; - // - // toolbarContextMenu - // - this.toolbarContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.openConnectionToolStripMenuItem1, - this.toolStripSeparator30, - this.quickConnectToolStripMenuItem, - this.actionToolStripMenuItem, - this.toolStripSeparator31, - this.infoToolStripMenuItem1, - this.refreshToolStripMenuItem1, - this.toolStripSeparator32, - this.editToolStripMenuItem1, - this.openInWebBrowserToolStripMenuItem, - this.openInTerminalToolStripMenuItem, - this.newFolderToolStripMenuItem1, - this.deleteToolStripMenuItem1, - this.toolStripSeparator33, - this.downloadToolStripMenuItem1, - this.uploadToolStripMenuItem1, - this.transfersToolStripMenuItem1, - this.logToolStripMenuItem1}); - this.toolbarContextMenu.Name = "toolbarContextMenu"; - this.toolbarContextMenu.Size = new System.Drawing.Size(189, 336); - this.toolbarContextMenu.Closing += new System.Windows.Forms.ToolStripDropDownClosingEventHandler(this.toolbarContextMenu_Closing); - this.toolbarContextMenu.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.toolbarContextMenu_ItemClicked); - // - // openConnectionToolStripMenuItem1 - // - this.openConnectionToolStripMenuItem1.Checked = true; - this.openConnectionToolStripMenuItem1.CheckState = System.Windows.Forms.CheckState.Checked; - this.openConnectionToolStripMenuItem1.Name = "openConnectionToolStripMenuItem1"; - this.openConnectionToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); - this.openConnectionToolStripMenuItem1.Text = "New Connection"; - // - // toolStripSeparator30 - // - this.toolStripSeparator30.Name = "toolStripSeparator30"; - this.toolStripSeparator30.Size = new System.Drawing.Size(185, 6); - // - // quickConnectToolStripMenuItem - // - this.quickConnectToolStripMenuItem.Name = "quickConnectToolStripMenuItem"; - this.quickConnectToolStripMenuItem.Size = new System.Drawing.Size(188, 22); - this.quickConnectToolStripMenuItem.Text = "Quick Connect"; - // - // actionToolStripMenuItem - // - this.actionToolStripMenuItem.Name = "actionToolStripMenuItem"; - this.actionToolStripMenuItem.Size = new System.Drawing.Size(188, 22); - this.actionToolStripMenuItem.Text = "Action"; - // - // toolStripSeparator31 - // - this.toolStripSeparator31.Name = "toolStripSeparator31"; - this.toolStripSeparator31.Size = new System.Drawing.Size(185, 6); - // - // infoToolStripMenuItem1 - // - this.infoToolStripMenuItem1.Name = "infoToolStripMenuItem1"; - this.infoToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); - this.infoToolStripMenuItem1.Text = "Info"; - // - // refreshToolStripMenuItem1 - // - this.refreshToolStripMenuItem1.Name = "refreshToolStripMenuItem1"; - this.refreshToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); - this.refreshToolStripMenuItem1.Text = "Refresh"; - // - // toolStripSeparator32 - // - this.toolStripSeparator32.Name = "toolStripSeparator32"; - this.toolStripSeparator32.Size = new System.Drawing.Size(185, 6); - // - // editToolStripMenuItem1 - // - this.editToolStripMenuItem1.Name = "editToolStripMenuItem1"; - this.editToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); - this.editToolStripMenuItem1.Text = "Edit"; - // - // openInWebBrowserToolStripMenuItem - // - this.openInWebBrowserToolStripMenuItem.Name = "openInWebBrowserToolStripMenuItem"; - this.openInWebBrowserToolStripMenuItem.Size = new System.Drawing.Size(188, 22); - this.openInWebBrowserToolStripMenuItem.Text = "Open in Web Browser"; - // - // openInTerminalToolStripMenuItem - // - this.openInTerminalToolStripMenuItem.Name = "openInTerminalToolStripMenuItem"; - this.openInTerminalToolStripMenuItem.Size = new System.Drawing.Size(188, 22); - this.openInTerminalToolStripMenuItem.Text = "Open in Terminal"; - // - // newFolderToolStripMenuItem1 - // - this.newFolderToolStripMenuItem1.Name = "newFolderToolStripMenuItem1"; - this.newFolderToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); - this.newFolderToolStripMenuItem1.Text = "New Folder"; - // - // deleteToolStripMenuItem1 - // - this.deleteToolStripMenuItem1.Name = "deleteToolStripMenuItem1"; - this.deleteToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); - this.deleteToolStripMenuItem1.Text = "Delete"; - // - // toolStripSeparator33 - // - this.toolStripSeparator33.Name = "toolStripSeparator33"; - this.toolStripSeparator33.Size = new System.Drawing.Size(185, 6); - // - // downloadToolStripMenuItem1 - // - this.downloadToolStripMenuItem1.Name = "downloadToolStripMenuItem1"; - this.downloadToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); - this.downloadToolStripMenuItem1.Text = "Download"; - // - // uploadToolStripMenuItem1 - // - this.uploadToolStripMenuItem1.Name = "uploadToolStripMenuItem1"; - this.uploadToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); - this.uploadToolStripMenuItem1.Text = "Upload"; - // - // transfersToolStripMenuItem1 - // - this.transfersToolStripMenuItem1.Name = "transfersToolStripMenuItem1"; - this.transfersToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); - this.transfersToolStripMenuItem1.Text = "Transfers"; - // - // logToolStripMenuItem1 - // - this.logToolStripMenuItem1.Name = "logToolStripMenuItem1"; - this.logToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); - this.logToolStripMenuItem1.Text = "Log"; - // - // toolStripSeparator13 - // - this.toolStripSeparator13.Name = "toolStripSeparator13"; - this.toolStripSeparator13.Size = new System.Drawing.Size(180, 6); - // - // columnToolStripMenuItem - // - this.columnToolStripMenuItem.DropDown = this.columnContextMenu; - this.columnToolStripMenuItem.Name = "columnToolStripMenuItem"; - this.columnToolStripMenuItem.Size = new System.Drawing.Size(183, 22); - this.columnToolStripMenuItem.Text = "Column"; - // - // columnContextMenu - // - this.columnContextMenu.Name = "columnContextMenu"; - this.columnContextMenu.OwnerItem = this.columnToolStripMenuItem; - this.columnContextMenu.Size = new System.Drawing.Size(61, 4); - this.columnContextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.columnContextMenu_Opening); - // - // toolStripSeparator34 - // - this.toolStripSeparator34.Name = "toolStripSeparator34"; - this.toolStripSeparator34.Size = new System.Drawing.Size(180, 6); - // - // showHiddenFilesToolStripMenuItem - // - this.showHiddenFilesToolStripMenuItem.Name = "showHiddenFilesToolStripMenuItem"; - this.showHiddenFilesToolStripMenuItem.Size = new System.Drawing.Size(183, 22); - this.showHiddenFilesToolStripMenuItem.Text = "Show Hidden Files"; - // - // textEncodingToolStripMenuItem - // - this.textEncodingToolStripMenuItem.DropDown = this.textEncodingMenuStrip; - this.textEncodingToolStripMenuItem.Name = "textEncodingToolStripMenuItem"; - this.textEncodingToolStripMenuItem.Size = new System.Drawing.Size(183, 22); - this.textEncodingToolStripMenuItem.Text = "Text Encoding"; - // - // textEncodingMenuStrip - // - this.textEncodingMenuStrip.Name = "textEncodingMenuStrip"; - this.textEncodingMenuStrip.OwnerItem = this.textEncodingToolStripMenuItem; - this.textEncodingMenuStrip.Size = new System.Drawing.Size(61, 4); - this.textEncodingMenuStrip.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.textEncodingMenuStrip_ItemClicked); - // - // toolStripSeparator15 - // - this.toolStripSeparator15.Name = "toolStripSeparator15"; - this.toolStripSeparator15.Size = new System.Drawing.Size(180, 6); - // - // toggleLogDrawerToolStripMenuItem - // - this.toggleLogDrawerToolStripMenuItem.Name = "toggleLogDrawerToolStripMenuItem"; - this.toggleLogDrawerToolStripMenuItem.Size = new System.Drawing.Size(183, 22); - this.toggleLogDrawerToolStripMenuItem.Text = "Toggle Log Drawer"; - // - // goToolStripMenuItem - // - this.goToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.refreshToolStripMenuItem, - this.toolStripSeparator16, - this.gotoFolderToolStripMenuItem, - this.backToolStripMenuItem, - this.forwardToolStripMenuItem, - this.enclosingFolderToolStripMenuItem, - this.insideToolStripMenuItem, - this.searchToolStripMenuItem, - this.toolStripSeparator17, - this.sendCommandToolStripMenuItem, - this.toolStripSeparator18, - this.stopToolStripMenuItem, - this.disconnectToolStripMenuItem}); - this.goToolStripMenuItem.Name = "goToolStripMenuItem"; - this.goToolStripMenuItem.Size = new System.Drawing.Size(34, 20); - this.goToolStripMenuItem.Text = "&Go"; - // - // refreshToolStripMenuItem - // - this.refreshToolStripMenuItem.Name = "refreshToolStripMenuItem"; - this.refreshToolStripMenuItem.Size = new System.Drawing.Size(169, 22); - this.refreshToolStripMenuItem.Text = "Refresh"; - // - // toolStripSeparator16 - // - this.toolStripSeparator16.Name = "toolStripSeparator16"; - this.toolStripSeparator16.Size = new System.Drawing.Size(166, 6); - // - // gotoFolderToolStripMenuItem - // - this.gotoFolderToolStripMenuItem.Name = "gotoFolderToolStripMenuItem"; - this.gotoFolderToolStripMenuItem.Size = new System.Drawing.Size(169, 22); - this.gotoFolderToolStripMenuItem.Text = "Go to Folder…"; - // - // backToolStripMenuItem - // - this.backToolStripMenuItem.Name = "backToolStripMenuItem"; - this.backToolStripMenuItem.Size = new System.Drawing.Size(169, 22); - this.backToolStripMenuItem.Text = "Back"; - // - // forwardToolStripMenuItem - // - this.forwardToolStripMenuItem.Name = "forwardToolStripMenuItem"; - this.forwardToolStripMenuItem.Size = new System.Drawing.Size(169, 22); - this.forwardToolStripMenuItem.Text = "Forward"; - // - // enclosingFolderToolStripMenuItem - // - this.enclosingFolderToolStripMenuItem.Name = "enclosingFolderToolStripMenuItem"; - this.enclosingFolderToolStripMenuItem.Size = new System.Drawing.Size(169, 22); - this.enclosingFolderToolStripMenuItem.Text = "Enclosing Folder"; - // - // insideToolStripMenuItem - // - this.insideToolStripMenuItem.Name = "insideToolStripMenuItem"; - this.insideToolStripMenuItem.Size = new System.Drawing.Size(169, 22); - this.insideToolStripMenuItem.Text = "Inside"; - // - // searchToolStripMenuItem - // - this.searchToolStripMenuItem.Name = "searchToolStripMenuItem"; - this.searchToolStripMenuItem.Size = new System.Drawing.Size(169, 22); - this.searchToolStripMenuItem.Text = "Search…"; - // - // toolStripSeparator17 - // - this.toolStripSeparator17.Name = "toolStripSeparator17"; - this.toolStripSeparator17.Size = new System.Drawing.Size(166, 6); - // - // sendCommandToolStripMenuItem - // - this.sendCommandToolStripMenuItem.Enabled = false; - this.sendCommandToolStripMenuItem.Name = "sendCommandToolStripMenuItem"; - this.sendCommandToolStripMenuItem.Size = new System.Drawing.Size(169, 22); - this.sendCommandToolStripMenuItem.Text = "Send Command…"; - // - // toolStripSeparator18 - // - this.toolStripSeparator18.Name = "toolStripSeparator18"; - this.toolStripSeparator18.Size = new System.Drawing.Size(166, 6); - // - // stopToolStripMenuItem - // - this.stopToolStripMenuItem.Name = "stopToolStripMenuItem"; - this.stopToolStripMenuItem.Size = new System.Drawing.Size(169, 22); - this.stopToolStripMenuItem.Text = "Stop"; - // - // disconnectToolStripMenuItem - // - this.disconnectToolStripMenuItem.Name = "disconnectToolStripMenuItem"; - this.disconnectToolStripMenuItem.Size = new System.Drawing.Size(169, 22); - this.disconnectToolStripMenuItem.Text = "Disconnect"; - // - // bookmarkToolStripMenuItem - // - this.bookmarkToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.viewBookmarksToolStripMenuItem, - this.toolStripSeparator1, - this.newBookmarkToolStripMenuItem, - this.deleteBookmarkToolStripMenuItem, - this.editBookmarkToolStripMenuItem, - this.duplicateBookmarkToolStripMenuItem1, - this.toolStripSeparator19, - this.historyToolStripMenuItem, - this.bonjourToolStripMenuItem, - this.toolStripSeparator36}); - this.bookmarkToolStripMenuItem.Name = "bookmarkToolStripMenuItem"; - this.bookmarkToolStripMenuItem.Size = new System.Drawing.Size(73, 20); - this.bookmarkToolStripMenuItem.Text = "&Bookmark"; - this.bookmarkToolStripMenuItem.DropDownOpening += new System.EventHandler(this.bookmarkToolStripMenuItem_DropDownOpening); - // - // viewBookmarksToolStripMenuItem - // - this.viewBookmarksToolStripMenuItem.Name = "viewBookmarksToolStripMenuItem"; - this.viewBookmarksToolStripMenuItem.Size = new System.Drawing.Size(181, 22); - this.viewBookmarksToolStripMenuItem.Text = "Toggle Bookmarks"; - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(178, 6); - // - // newBookmarkToolStripMenuItem - // - this.newBookmarkToolStripMenuItem.Name = "newBookmarkToolStripMenuItem"; - this.newBookmarkToolStripMenuItem.Size = new System.Drawing.Size(181, 22); - this.newBookmarkToolStripMenuItem.Text = "New Bookmark"; - // - // deleteBookmarkToolStripMenuItem - // - this.deleteBookmarkToolStripMenuItem.Name = "deleteBookmarkToolStripMenuItem"; - this.deleteBookmarkToolStripMenuItem.Size = new System.Drawing.Size(181, 22); - this.deleteBookmarkToolStripMenuItem.Text = "Delete Bookmark"; - // - // editBookmarkToolStripMenuItem - // - this.editBookmarkToolStripMenuItem.Name = "editBookmarkToolStripMenuItem"; - this.editBookmarkToolStripMenuItem.Size = new System.Drawing.Size(181, 22); - this.editBookmarkToolStripMenuItem.Text = "Edit Bookmark"; - // - // duplicateBookmarkToolStripMenuItem1 - // - this.duplicateBookmarkToolStripMenuItem1.Name = "duplicateBookmarkToolStripMenuItem1"; - this.duplicateBookmarkToolStripMenuItem1.Size = new System.Drawing.Size(181, 22); - this.duplicateBookmarkToolStripMenuItem1.Text = "Duplicate Bookmark"; - // - // toolStripSeparator19 - // - this.toolStripSeparator19.Name = "toolStripSeparator19"; - this.toolStripSeparator19.Size = new System.Drawing.Size(178, 6); - // - // historyToolStripMenuItem - // - this.historyToolStripMenuItem.DropDown = this.historyMenuStrip; - this.historyToolStripMenuItem.Image = global::Ch.Cyberduck.ResourcesBundle.history; - this.historyToolStripMenuItem.Name = "historyToolStripMenuItem"; - this.historyToolStripMenuItem.Size = new System.Drawing.Size(181, 22); - this.historyToolStripMenuItem.Text = "History"; - // - // historyMenuStrip - // - this.historyMenuStrip.Name = "historyMenuStrip"; - this.historyMenuStrip.OwnerItem = this.historyToolStripMenuItem; - this.historyMenuStrip.Size = new System.Drawing.Size(61, 4); - this.historyMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.historyMenuStrip_Opening); - // - // bonjourToolStripMenuItem - // - this.bonjourToolStripMenuItem.DropDown = this.bonjourMenuStrip; - this.bonjourToolStripMenuItem.Enabled = false; - this.bonjourToolStripMenuItem.Image = global::Ch.Cyberduck.ResourcesBundle.rendezvous; - this.bonjourToolStripMenuItem.Name = "bonjourToolStripMenuItem"; - this.bonjourToolStripMenuItem.Size = new System.Drawing.Size(181, 22); - this.bonjourToolStripMenuItem.Text = "Bonjour"; - // - // bonjourMenuStrip - // - this.bonjourMenuStrip.Name = "bonjourMenuStrip"; - this.bonjourMenuStrip.OwnerItem = this.bonjourToolStripMenuItem; - this.bonjourMenuStrip.Size = new System.Drawing.Size(61, 4); - // - // toolStripSeparator36 - // - this.toolStripSeparator36.Name = "toolStripSeparator36"; - this.toolStripSeparator36.Size = new System.Drawing.Size(178, 6); - // - // windowToolStripMenuItem - // - this.windowToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.minimizeToolStripMenuItem, - this.toolStripSeparator20, - this.transfersToolStripMenuItem, - this.activitiyToolStripMenuItem}); - this.windowToolStripMenuItem.Name = "windowToolStripMenuItem"; - this.windowToolStripMenuItem.Size = new System.Drawing.Size(63, 20); - this.windowToolStripMenuItem.Text = "&Window"; - // - // minimizeToolStripMenuItem - // - this.minimizeToolStripMenuItem.Name = "minimizeToolStripMenuItem"; - this.minimizeToolStripMenuItem.Size = new System.Drawing.Size(123, 22); - this.minimizeToolStripMenuItem.Text = "Minimize"; - // - // toolStripSeparator20 - // - this.toolStripSeparator20.Name = "toolStripSeparator20"; - this.toolStripSeparator20.Size = new System.Drawing.Size(120, 6); - // - // transfersToolStripMenuItem - // - this.transfersToolStripMenuItem.Name = "transfersToolStripMenuItem"; - this.transfersToolStripMenuItem.Size = new System.Drawing.Size(123, 22); - this.transfersToolStripMenuItem.Text = "Transfers"; - // - // activitiyToolStripMenuItem - // - this.activitiyToolStripMenuItem.Enabled = false; - this.activitiyToolStripMenuItem.Name = "activitiyToolStripMenuItem"; - this.activitiyToolStripMenuItem.Size = new System.Drawing.Size(123, 22); - this.activitiyToolStripMenuItem.Text = "Activity"; - // - // helpToolStripMenuItem - // - this.helpToolStripMenuItem.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.cyberduckHelpToolStripMenuItem, - this.licenseToolStripMenuItem, - this.acknowledgmentsToolStripMenuItem, - this.toolStripSeparator21, - this.reportABugToolStripMenuItem, - this.toolStripSeparator22, - this.checkToolStripMenuItem, - this.toolStripSeparator28, - this.aboutCyberduckToolStripMenuItem}); - this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; - this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); - this.helpToolStripMenuItem.Text = "&Help"; - // - // cyberduckHelpToolStripMenuItem - // - this.cyberduckHelpToolStripMenuItem.Name = "cyberduckHelpToolStripMenuItem"; - this.cyberduckHelpToolStripMenuItem.Size = new System.Drawing.Size(175, 22); - this.cyberduckHelpToolStripMenuItem.Text = "Cyberduck Help"; - // - // licenseToolStripMenuItem - // - this.licenseToolStripMenuItem.Name = "licenseToolStripMenuItem"; - this.licenseToolStripMenuItem.Size = new System.Drawing.Size(175, 22); - this.licenseToolStripMenuItem.Text = "License"; - // - // acknowledgmentsToolStripMenuItem - // - this.acknowledgmentsToolStripMenuItem.Name = "acknowledgmentsToolStripMenuItem"; - this.acknowledgmentsToolStripMenuItem.Size = new System.Drawing.Size(175, 22); - this.acknowledgmentsToolStripMenuItem.Text = "Acknowledgments"; - // - // toolStripSeparator21 - // - this.toolStripSeparator21.Name = "toolStripSeparator21"; - this.toolStripSeparator21.Size = new System.Drawing.Size(172, 6); - // - // reportABugToolStripMenuItem - // - this.reportABugToolStripMenuItem.Name = "reportABugToolStripMenuItem"; - this.reportABugToolStripMenuItem.Size = new System.Drawing.Size(175, 22); - this.reportABugToolStripMenuItem.Text = "Report a Bug"; - // - // toolStripSeparator22 - // - this.toolStripSeparator22.Name = "toolStripSeparator22"; - this.toolStripSeparator22.Size = new System.Drawing.Size(172, 6); - // - // checkToolStripMenuItem - // - this.checkToolStripMenuItem.Name = "checkToolStripMenuItem"; - this.checkToolStripMenuItem.Size = new System.Drawing.Size(175, 22); - this.checkToolStripMenuItem.Text = "Check for Update…"; - // - // toolStripSeparator28 - // - this.toolStripSeparator28.Name = "toolStripSeparator28"; - this.toolStripSeparator28.Size = new System.Drawing.Size(172, 6); - // - // aboutCyberduckToolStripMenuItem - // - this.aboutCyberduckToolStripMenuItem.Name = "aboutCyberduckToolStripMenuItem"; - this.aboutCyberduckToolStripMenuItem.Size = new System.Drawing.Size(175, 22); - this.aboutCyberduckToolStripMenuItem.Text = "&About Cyberduck"; - // - // createArchiveContextToolStripMenuItem - // - this.createArchiveContextToolStripMenuItem.DropDown = this.archiveMenuStrip; - this.createArchiveContextToolStripMenuItem.Name = "createArchiveContextToolStripMenuItem"; - this.createArchiveContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.createArchiveContextToolStripMenuItem.Text = "Create Archive"; - // - // editorMenuStrip - // - this.editorMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.editor1ToolStripMenuItem, - this.editor2ToolStripMenuItem}); - this.editorMenuStrip.Name = "editorMenuStrip"; - this.editorMenuStrip.OwnerItem = this.editToolStripSplitButton; - this.editorMenuStrip.Size = new System.Drawing.Size(115, 48); - // - // editor1ToolStripMenuItem - // - this.editor1ToolStripMenuItem.Name = "editor1ToolStripMenuItem"; - this.editor1ToolStripMenuItem.Size = new System.Drawing.Size(114, 22); - this.editor1ToolStripMenuItem.Text = "Editor 1"; - // - // editor2ToolStripMenuItem - // - this.editor2ToolStripMenuItem.Name = "editor2ToolStripMenuItem"; - this.editor2ToolStripMenuItem.Size = new System.Drawing.Size(114, 22); - this.editor2ToolStripMenuItem.Text = "Editor 2"; - // - // editContextToolStripMenuItem - // - this.editContextToolStripMenuItem.DropDown = this.editorMenuStrip; - this.editContextToolStripMenuItem.Name = "editContextToolStripMenuItem"; - this.editContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.editContextToolStripMenuItem.Text = "Edit With"; - // - // editToolStripSplitButton - // - this.editToolStripSplitButton.DropDown = this.editorMenuStrip; - this.editToolStripSplitButton.Image = global::Ch.Cyberduck.ResourcesBundle.pencil; - this.editToolStripSplitButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.editToolStripSplitButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.editToolStripSplitButton.Name = "editToolStripSplitButton"; - this.editToolStripSplitButton.Size = new System.Drawing.Size(48, 53); - this.editToolStripSplitButton.Text = "Edit"; - this.editToolStripSplitButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // toolBar - // - this.toolBar.AutoSize = false; - this.toolBar.ContextMenuStrip = this.toolbarContextMenu; - this.toolBar.Dock = System.Windows.Forms.DockStyle.None; - this.toolBar.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; - this.toolBar.ImageScalingSize = new System.Drawing.Size(32, 32); - this.toolBar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.openConnectionToolStripButton, - this.toolStripSeparatorAfterOpenConnection, - this.quickConnectToolStripComboBox, - this.actionToolStripDropDownButton, - this.toolStripSeparatorAfterAction, - this.infoToolStripButton, - this.refreshToolStripButton, - this.toolStripSeparatorAfterRefresh, - this.editToolStripSplitButton, - this.openInBrowserToolStripButton, - this.openInTerminalToolStripButton, - this.newFolderToolStripButton, - this.deleteToolStripButton, - this.toolStripSeparatorAfterDelete, - this.downloadToolStripButton, - this.uploadToolStripButton, - this.transfersToolStripButton, - this.logToolStripButton, - this.disconnectStripButton}); - this.toolBar.Location = new System.Drawing.Point(0, 0); - this.toolBar.Name = "toolBar"; - this.toolBar.ShowItemToolTips = false; - this.toolBar.Size = new System.Drawing.Size(1028, 56); - this.toolBar.Stretch = true; - this.toolBar.TabIndex = 13; - this.toolBar.Text = "toolStrip1"; - // - // openConnectionToolStripButton - // - this.openConnectionToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.connect; - this.openConnectionToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.openConnectionToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.openConnectionToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.openConnectionToolStripButton.Name = "openConnectionToolStripButton"; - this.openConnectionToolStripButton.Padding = new System.Windows.Forms.Padding(0, 1, 0, 1); - this.openConnectionToolStripButton.Size = new System.Drawing.Size(100, 53); - this.openConnectionToolStripButton.Text = "New Connection"; - this.openConnectionToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // toolStripSeparatorAfterOpenConnection - // - this.toolStripSeparatorAfterOpenConnection.Name = "toolStripSeparatorAfterOpenConnection"; - this.toolStripSeparatorAfterOpenConnection.Size = new System.Drawing.Size(6, 56); - // - // quickConnectToolStripComboBox - // - this.quickConnectToolStripComboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; - this.quickConnectToolStripComboBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; - this.quickConnectToolStripComboBox.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.quickConnectToolStripComboBox.Items.AddRange(new object[] { - "Test1", - "Test2", - "Zest3"}); - this.quickConnectToolStripComboBox.Name = "quickConnectToolStripComboBox"; - this.quickConnectToolStripComboBox.Size = new System.Drawing.Size(180, 56); - this.quickConnectToolStripComboBox.Text = "Quick Connect"; - this.quickConnectToolStripComboBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.toolStripQuickConnect_KeyDown); - // - // actionToolStripDropDownButton - // - this.actionToolStripDropDownButton.DropDown = this.contextMenuStrip; - this.actionToolStripDropDownButton.Image = global::Ch.Cyberduck.ResourcesBundle.advanced; - this.actionToolStripDropDownButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.actionToolStripDropDownButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.actionToolStripDropDownButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.actionToolStripDropDownButton.Name = "actionToolStripDropDownButton"; - this.actionToolStripDropDownButton.Padding = new System.Windows.Forms.Padding(0, 1, 0, 1); - this.actionToolStripDropDownButton.Size = new System.Drawing.Size(55, 53); - this.actionToolStripDropDownButton.Text = "Action"; - this.actionToolStripDropDownButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // contextMenuStrip - // - this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.refreshContextToolStripMenuItem, - this.toolStripSeparator6, - this.newFolderContextToolStripMenuItem, - this.newFileContextToolStripMenuItem, - this.newSymlinkContextToolStripMenuItem, - this.renameContextToolStripMenuItem, - this.duplicateFileContextToolStripMenuItem, - this.toolStripSeparator2, - this.copyURLContextToolStripMenuItem, - this.openURLContextToolStripMenuItem, - this.editContextToolStripMenuItem, - this.infoContextToolStripMenuItem, - this.toolStripSeparator26, - this.downloadContextToolStripMenuItem, - this.downloadAsContextToolStripMenuItem, - this.downloadToContextToolStripMenuItem, - this.uploadContextToolStripMenuItem, - this.synchronizeContextToolStripMenuItem, - this.toolStripSeparator3, - this.deleteContextToolStripMenuItem, - this.revertContxtStripMenuItem, - this.toolStripSeparator4, - this.createArchiveContextToolStripMenuItem, - this.expandArchiveContextToolStripMenuItem, - this.toolStripSeparator5, - this.newBrowserContextToolStripMenuItem, - this.newBookmarkContextToolStripMenuItem}); - this.contextMenuStrip.Name = "contextMenuStrip1"; - this.contextMenuStrip.OwnerItem = this.actionToolStripDropDownButton; - this.contextMenuStrip.Size = new System.Drawing.Size(185, 502); - // - // refreshContextToolStripMenuItem - // - this.refreshContextToolStripMenuItem.Name = "refreshContextToolStripMenuItem"; - this.refreshContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.refreshContextToolStripMenuItem.Text = "Refresh"; - // - // toolStripSeparator6 - // - this.toolStripSeparator6.Name = "toolStripSeparator6"; - this.toolStripSeparator6.Size = new System.Drawing.Size(181, 6); - // - // newFolderContextToolStripMenuItem - // - this.newFolderContextToolStripMenuItem.Name = "newFolderContextToolStripMenuItem"; - this.newFolderContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.newFolderContextToolStripMenuItem.Text = "New Folder…"; - // - // newFileContextToolStripMenuItem - // - this.newFileContextToolStripMenuItem.Name = "newFileContextToolStripMenuItem"; - this.newFileContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.newFileContextToolStripMenuItem.Text = "New File…"; - // - // newSymlinkContextToolStripMenuItem - // - this.newSymlinkContextToolStripMenuItem.Name = "newSymlinkContextToolStripMenuItem"; - this.newSymlinkContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.newSymlinkContextToolStripMenuItem.Text = "New Symbolic Link…"; - // - // renameContextToolStripMenuItem - // - this.renameContextToolStripMenuItem.Name = "renameContextToolStripMenuItem"; - this.renameContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.renameContextToolStripMenuItem.Text = "Rename…"; - // - // duplicateFileContextToolStripMenuItem - // - this.duplicateFileContextToolStripMenuItem.Name = "duplicateFileContextToolStripMenuItem"; - this.duplicateFileContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.duplicateFileContextToolStripMenuItem.Text = "Duplicate…"; - // - // toolStripSeparator2 - // - this.toolStripSeparator2.Name = "toolStripSeparator2"; - this.toolStripSeparator2.Size = new System.Drawing.Size(181, 6); - // - // copyURLContextToolStripMenuItem - // - this.copyURLContextToolStripMenuItem.Name = "copyURLContextToolStripMenuItem"; - this.copyURLContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.copyURLContextToolStripMenuItem.Text = "Copy URL"; - // - // openURLContextToolStripMenuItem - // - this.openURLContextToolStripMenuItem.Name = "openURLContextToolStripMenuItem"; - this.openURLContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.openURLContextToolStripMenuItem.Text = "Open URL"; - // - // infoContextToolStripMenuItem - // - this.infoContextToolStripMenuItem.Name = "infoContextToolStripMenuItem"; - this.infoContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.infoContextToolStripMenuItem.Text = "Info"; - // - // toolStripSeparator26 - // - this.toolStripSeparator26.Name = "toolStripSeparator26"; - this.toolStripSeparator26.Size = new System.Drawing.Size(181, 6); - // - // downloadContextToolStripMenuItem - // - this.downloadContextToolStripMenuItem.Name = "downloadContextToolStripMenuItem"; - this.downloadContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.downloadContextToolStripMenuItem.Text = "Download"; - // - // downloadAsContextToolStripMenuItem - // - this.downloadAsContextToolStripMenuItem.Name = "downloadAsContextToolStripMenuItem"; - this.downloadAsContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.downloadAsContextToolStripMenuItem.Text = "Download As…"; - // - // downloadToContextToolStripMenuItem - // - this.downloadToContextToolStripMenuItem.Name = "downloadToContextToolStripMenuItem"; - this.downloadToContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.downloadToContextToolStripMenuItem.Text = "Download To…"; - // - // uploadContextToolStripMenuItem - // - this.uploadContextToolStripMenuItem.Name = "uploadContextToolStripMenuItem"; - this.uploadContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.uploadContextToolStripMenuItem.Text = "Upload…"; - // - // synchronizeContextToolStripMenuItem - // - this.synchronizeContextToolStripMenuItem.Name = "synchronizeContextToolStripMenuItem"; - this.synchronizeContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.synchronizeContextToolStripMenuItem.Text = "Synchronize…"; - // - // toolStripSeparator3 - // - this.toolStripSeparator3.Name = "toolStripSeparator3"; - this.toolStripSeparator3.Size = new System.Drawing.Size(181, 6); - // - // deleteContextToolStripMenuItem - // - this.deleteContextToolStripMenuItem.Name = "deleteContextToolStripMenuItem"; - this.deleteContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.deleteContextToolStripMenuItem.Text = "Delete"; - // - // revertContxtStripMenuItem - // - this.revertContxtStripMenuItem.Name = "revertContxtStripMenuItem"; - this.revertContxtStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.revertContxtStripMenuItem.Text = "Revert"; - // - // toolStripSeparator4 - // - this.toolStripSeparator4.Name = "toolStripSeparator4"; - this.toolStripSeparator4.Size = new System.Drawing.Size(181, 6); - // - // expandArchiveContextToolStripMenuItem - // - this.expandArchiveContextToolStripMenuItem.Name = "expandArchiveContextToolStripMenuItem"; - this.expandArchiveContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.expandArchiveContextToolStripMenuItem.Text = "Expand Archive"; - // - // toolStripSeparator5 - // - this.toolStripSeparator5.Name = "toolStripSeparator5"; - this.toolStripSeparator5.Size = new System.Drawing.Size(181, 6); - // - // newBrowserContextToolStripMenuItem - // - this.newBrowserContextToolStripMenuItem.Name = "newBrowserContextToolStripMenuItem"; - this.newBrowserContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.newBrowserContextToolStripMenuItem.Text = "New Browser"; - // - // newBookmarkContextToolStripMenuItem - // - this.newBookmarkContextToolStripMenuItem.Name = "newBookmarkContextToolStripMenuItem"; - this.newBookmarkContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.newBookmarkContextToolStripMenuItem.Text = "New Bookmark"; - // - // toolStripSeparatorAfterAction - // - this.toolStripSeparatorAfterAction.Name = "toolStripSeparatorAfterAction"; - this.toolStripSeparatorAfterAction.Size = new System.Drawing.Size(6, 56); - // - // infoToolStripButton - // - this.infoToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.info; - this.infoToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.infoToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.infoToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.infoToolStripButton.Name = "infoToolStripButton"; - this.infoToolStripButton.Size = new System.Drawing.Size(53, 53); - this.infoToolStripButton.Text = "Get Info"; - this.infoToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // refreshToolStripButton - // - this.refreshToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.reload; - this.refreshToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.refreshToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.refreshToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.refreshToolStripButton.Name = "refreshToolStripButton"; - this.refreshToolStripButton.Size = new System.Drawing.Size(50, 53); - this.refreshToolStripButton.Text = "Refresh"; - this.refreshToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // toolStripSeparatorAfterRefresh - // - this.toolStripSeparatorAfterRefresh.Name = "toolStripSeparatorAfterRefresh"; - this.toolStripSeparatorAfterRefresh.Size = new System.Drawing.Size(6, 56); - // - // openInBrowserToolStripButton - // - this.openInBrowserToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.pencil; - this.openInBrowserToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.openInBrowserToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.openInBrowserToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.openInBrowserToolStripButton.Name = "openInBrowserToolStripButton"; - this.openInBrowserToolStripButton.Size = new System.Drawing.Size(40, 53); - this.openInBrowserToolStripButton.Text = "Open"; - this.openInBrowserToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // openInTerminalToolStripButton - // - this.openInTerminalToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.openInTerminalToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.openInTerminalToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.openInTerminalToolStripButton.Name = "openInTerminalToolStripButton"; - this.openInTerminalToolStripButton.Size = new System.Drawing.Size(40, 53); - this.openInTerminalToolStripButton.Text = "Open"; - this.openInTerminalToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // newFolderToolStripButton - // - this.newFolderToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.newFolderToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.newFolderToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.newFolderToolStripButton.Name = "newFolderToolStripButton"; - this.newFolderToolStripButton.Size = new System.Drawing.Size(71, 53); - this.newFolderToolStripButton.Text = "New Folder"; - this.newFolderToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // deleteToolStripButton - // - this.deleteToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.delete; - this.deleteToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.deleteToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.deleteToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.deleteToolStripButton.Name = "deleteToolStripButton"; - this.deleteToolStripButton.Size = new System.Drawing.Size(44, 53); - this.deleteToolStripButton.Text = "Delete"; - this.deleteToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // toolStripSeparatorAfterDelete - // - this.toolStripSeparatorAfterDelete.Name = "toolStripSeparatorAfterDelete"; - this.toolStripSeparatorAfterDelete.Size = new System.Drawing.Size(6, 56); - // - // downloadToolStripButton - // - this.downloadToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.download; - this.downloadToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.downloadToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.downloadToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.downloadToolStripButton.Name = "downloadToolStripButton"; - this.downloadToolStripButton.Size = new System.Drawing.Size(65, 53); - this.downloadToolStripButton.Text = "Download"; - this.downloadToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // uploadToolStripButton - // - this.uploadToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.upload; - this.uploadToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.uploadToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.uploadToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.uploadToolStripButton.Name = "uploadToolStripButton"; - this.uploadToolStripButton.Size = new System.Drawing.Size(49, 53); - this.uploadToolStripButton.Text = "Upload"; - this.uploadToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // transfersToolStripButton - // - this.transfersToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.queue; - this.transfersToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.transfersToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.transfersToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.transfersToolStripButton.Name = "transfersToolStripButton"; - this.transfersToolStripButton.Size = new System.Drawing.Size(59, 53); - this.transfersToolStripButton.Text = "Transfers"; - this.transfersToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // logToolStripButton - // - this.logToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.log; - this.logToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.logToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.logToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.logToolStripButton.Name = "logToolStripButton"; - this.logToolStripButton.Size = new System.Drawing.Size(36, 53); - this.logToolStripButton.Text = "Log"; - this.logToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // disconnectStripButton - // - this.disconnectStripButton.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.disconnectStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.eject; - this.disconnectStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.disconnectStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.disconnectStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.disconnectStripButton.Name = "disconnectStripButton"; - this.disconnectStripButton.Size = new System.Drawing.Size(70, 53); - this.disconnectStripButton.Text = "Disconnect"; - this.disconnectStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // iconList - // - this.iconList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; - this.iconList.ImageSize = new System.Drawing.Size(16, 16); - this.iconList.TransparentColor = System.Drawing.Color.Transparent; - // - // toolStripContainer1 - // - // - // toolStripContainer1.BottomToolStripPanel - // - this.toolStripContainer1.BottomToolStripPanel.Controls.Add(this.statusStrip); - // - // toolStripContainer1.ContentPanel - // - this.toolStripContainer1.ContentPanel.Controls.Add(this.panelManager1); - this.toolStripContainer1.ContentPanel.Controls.Add(this.viewPanel); - this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(1028, 528); - this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill; - this.toolStripContainer1.LeftToolStripPanelVisible = false; - this.toolStripContainer1.Location = new System.Drawing.Point(0, 0); - this.toolStripContainer1.Name = "toolStripContainer1"; - this.toolStripContainer1.RightToolStripPanelVisible = false; - this.toolStripContainer1.Size = new System.Drawing.Size(1028, 606); - this.toolStripContainer1.TabIndex = 16; - this.toolStripContainer1.Text = "toolStripContainer1"; - // - // toolStripContainer1.TopToolStripPanel - // - this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.toolBar); - this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.menuStrip1); - // - // panelManager1 - // - this.panelManager1.Controls.Add(this.managedBrowserPanel1); - this.panelManager1.Controls.Add(this.managedBookmarkPanel2); - this.panelManager1.Dock = System.Windows.Forms.DockStyle.Fill; - this.panelManager1.Location = new System.Drawing.Point(0, 31); - this.panelManager1.Name = "panelManager1"; - this.panelManager1.SelectedIndex = 0; - this.panelManager1.SelectedPanel = this.managedBrowserPanel1; - this.panelManager1.Size = new System.Drawing.Size(1028, 497); - this.panelManager1.TabIndex = 3; - // - // managedBrowserPanel1 - // - this.managedBrowserPanel1.Controls.Add(this.splitContainer); - this.managedBrowserPanel1.Location = new System.Drawing.Point(0, 0); - this.managedBrowserPanel1.Name = "managedBrowserPanel1"; - this.managedBrowserPanel1.Size = new System.Drawing.Size(1028, 497); - this.managedBrowserPanel1.Text = "managedBrowserPanel1"; - // - // splitContainer - // - this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; - this.splitContainer.Location = new System.Drawing.Point(0, 0); - this.splitContainer.Name = "splitContainer"; - this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // splitContainer.Panel1 - // - this.splitContainer.Panel1.Controls.Add(this.browser); - this.splitContainer.Panel1MinSize = 0; - // - // splitContainer.Panel2 - // - this.splitContainer.Panel2.Controls.Add(this.transcriptBox); - this.splitContainer.Panel2MinSize = 50; - this.splitContainer.Size = new System.Drawing.Size(1028, 497); - this.splitContainer.SplitterDistance = 444; - this.splitContainer.SplitterWidth = 3; - this.splitContainer.TabIndex = 2; - // - // browser - // - this.browser.ActiveForegroudColor = System.Drawing.SystemColors.ControlText; - this.browser.ActiveGetterPath = null; - this.browser.ActiveGetterTransferItem = null; - this.browser.AllColumns.Add(this.treeColumnName); - this.browser.AllColumns.Add(this.treeColumnSize); - this.browser.AllColumns.Add(this.treeColumnModified); - this.browser.AllColumns.Add(this.treeColumnOwner); - this.browser.AllColumns.Add(this.treeColumnGroup); - this.browser.AllColumns.Add(this.treeColumnPermissions); - this.browser.AllColumns.Add(this.treeColumnKind); - this.browser.AllColumns.Add(this.treeColumnExtension); - this.browser.AllColumns.Add(this.treeColumnRegion); - this.browser.AllColumns.Add(this.treeColumnVersion); - this.browser.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.browser.CellEditActivation = BrightIdeasSoftware.ObjectListView.CellEditActivateMode.F2Only; - this.browser.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.treeColumnName, - this.treeColumnSize, - this.treeColumnModified}); - this.browser.Cursor = System.Windows.Forms.Cursors.Default; - this.browser.Dock = System.Windows.Forms.DockStyle.Fill; - this.browser.FullRowSelect = true; - this.browser.InactiveForegroudColor = System.Drawing.Color.Gray; - this.browser.IsSimpleDragSource = true; - this.browser.Location = new System.Drawing.Point(0, 0); - this.browser.Name = "browser"; - this.browser.OwnerDraw = true; - this.browser.ShowGroups = false; - this.browser.Size = new System.Drawing.Size(1028, 444); - this.browser.TabIndex = 15; - this.browser.UseCompatibleStateImageBehavior = false; - this.browser.View = System.Windows.Forms.View.Details; - this.browser.VirtualMode = true; - this.browser.CellEditFinishing += new BrightIdeasSoftware.CellEditEventHandler(this.browser_CellEditFinishing); - this.browser.SelectionChanged += new System.EventHandler(this.browser_SelectionChanged); - this.browser.BeforeLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.browser_BeforeLabelEdit); - this.browser.DoubleClick += new System.EventHandler(this.browser_DoubleClick); - this.browser.KeyDown += new System.Windows.Forms.KeyEventHandler(this.browser_KeyDown); - this.browser.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.browser_KeyPress); - // - // treeColumnName - // - this.treeColumnName.CellPadding = null; - this.treeColumnName.FillsFreeSpace = true; - this.treeColumnName.Text = "Filename"; - this.treeColumnName.Width = 180; - // - // treeColumnSize - // - this.treeColumnSize.CellPadding = null; - this.treeColumnSize.HeaderTextAlign = System.Windows.Forms.HorizontalAlignment.Right; - this.treeColumnSize.IsEditable = false; - this.treeColumnSize.Text = "Size"; - this.treeColumnSize.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; - // - // treeColumnModified - // - this.treeColumnModified.CellPadding = null; - this.treeColumnModified.IsEditable = false; - this.treeColumnModified.IsTileViewColumn = true; - this.treeColumnModified.Text = "Modified"; - this.treeColumnModified.Width = 145; - // - // treeColumnOwner - // - this.treeColumnOwner.CellPadding = null; - this.treeColumnOwner.DisplayIndex = 3; - this.treeColumnOwner.IsEditable = false; - this.treeColumnOwner.IsVisible = false; - this.treeColumnOwner.Text = "Owner"; - // - // treeColumnGroup - // - this.treeColumnGroup.CellPadding = null; - this.treeColumnGroup.DisplayIndex = 4; - this.treeColumnGroup.IsEditable = false; - this.treeColumnGroup.IsVisible = false; - this.treeColumnGroup.Text = "Group"; - // - // treeColumnPermissions - // - this.treeColumnPermissions.CellPadding = null; - this.treeColumnPermissions.DisplayIndex = 5; - this.treeColumnPermissions.IsEditable = false; - this.treeColumnPermissions.IsVisible = false; - this.treeColumnPermissions.Text = "Permissions"; - // - // treeColumnKind - // - this.treeColumnKind.CellPadding = null; - this.treeColumnKind.DisplayIndex = 6; - this.treeColumnKind.IsEditable = false; - this.treeColumnKind.IsVisible = false; - this.treeColumnKind.Text = "Kind"; - // - // treeColumnExtension - // - this.treeColumnExtension.CellPadding = null; - this.treeColumnExtension.DisplayIndex = 7; - this.treeColumnExtension.IsEditable = false; - this.treeColumnExtension.IsVisible = false; - this.treeColumnExtension.Text = "Extension"; - // - // treeColumnRegion - // - this.treeColumnRegion.CellPadding = null; - this.treeColumnRegion.DisplayIndex = 8; - this.treeColumnRegion.IsEditable = false; - this.treeColumnRegion.IsVisible = false; - this.treeColumnRegion.Text = "Region"; - // - // treeColumnVersion - // - this.treeColumnVersion.CellPadding = null; - this.treeColumnVersion.DisplayIndex = 9; - this.treeColumnVersion.IsEditable = false; - this.treeColumnVersion.IsVisible = false; - this.treeColumnVersion.Text = "Version"; - // - // transcriptBox - // - this.transcriptBox.CausesValidation = false; - this.transcriptBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.transcriptBox.Location = new System.Drawing.Point(0, 0); - this.transcriptBox.Name = "transcriptBox"; - this.transcriptBox.ReadOnly = true; - this.transcriptBox.Size = new System.Drawing.Size(1028, 50); - this.transcriptBox.TabIndex = 0; - this.transcriptBox.Text = ""; - this.transcriptBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.transcriptBox_KeyDown); - // - // managedBookmarkPanel2 - // - this.managedBookmarkPanel2.Controls.Add(this.bookmarkListView); - this.managedBookmarkPanel2.Controls.Add(this.actionToolStrip); - this.managedBookmarkPanel2.Location = new System.Drawing.Point(0, 0); - this.managedBookmarkPanel2.Name = "managedBookmarkPanel2"; - this.managedBookmarkPanel2.Size = new System.Drawing.Size(0, 0); - this.managedBookmarkPanel2.Text = "managedBookmarkPanel2"; - // - // bookmarkListView - // - this.bookmarkListView.AllColumns.Add(this.bookmarkImageColumn); - this.bookmarkListView.AllColumns.Add(this.bookmarkDescriptionColumn); - this.bookmarkListView.AllColumns.Add(this.activeColumn); - this.bookmarkListView.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.bookmarkListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.bookmarkImageColumn, - this.bookmarkDescriptionColumn, - this.activeColumn}); - this.bookmarkListView.Cursor = System.Windows.Forms.Cursors.Default; - this.bookmarkListView.Dock = System.Windows.Forms.DockStyle.Fill; - this.bookmarkListView.FullRowSelect = true; - this.bookmarkListView.Location = new System.Drawing.Point(0, 0); - this.bookmarkListView.Name = "bookmarkListView"; - this.bookmarkListView.OwnerDraw = true; - this.bookmarkListView.RowHeight = 37; - this.bookmarkListView.ShowGroups = false; - this.bookmarkListView.Size = new System.Drawing.Size(0, 0); - this.bookmarkListView.TabIndex = 10; - this.bookmarkListView.UseCompatibleStateImageBehavior = false; - this.bookmarkListView.View = System.Windows.Forms.View.Details; - this.bookmarkListView.DoubleClick += new System.EventHandler(this.bookmarkListView_DoubleClick); - this.bookmarkListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.bookmarkListView_KeyDown); - // - // bookmarkImageColumn - // - this.bookmarkImageColumn.AspectName = ""; - this.bookmarkImageColumn.CellPadding = null; - this.bookmarkImageColumn.IsEditable = false; - this.bookmarkImageColumn.Text = ""; - this.bookmarkImageColumn.Width = 32; - // - // bookmarkDescriptionColumn - // - this.bookmarkDescriptionColumn.AspectName = ""; - this.bookmarkDescriptionColumn.CellPadding = null; - this.bookmarkDescriptionColumn.Text = ""; - this.bookmarkDescriptionColumn.Width = 200; - // - // activeColumn - // - this.activeColumn.CellPadding = null; - this.activeColumn.Text = ""; - // - // actionToolStrip - // - this.actionToolStrip.AutoSize = false; - this.actionToolStrip.Dock = System.Windows.Forms.DockStyle.Bottom; - this.actionToolStrip.GripMargin = new System.Windows.Forms.Padding(0); - this.actionToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; - this.actionToolStrip.ImageScalingSize = new System.Drawing.Size(30, 30); - this.actionToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.newBookmarkToolStripButton, - this.editBookmarkToolStripButton, - this.deleteBookmarkToolStripButton}); - this.actionToolStrip.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow; - this.actionToolStrip.Location = new System.Drawing.Point(0, -33); - this.actionToolStrip.Name = "actionToolStrip"; - this.actionToolStrip.ShowItemToolTips = false; - this.actionToolStrip.Size = new System.Drawing.Size(0, 33); - this.actionToolStrip.Stretch = true; - this.actionToolStrip.TabIndex = 5; - this.actionToolStrip.Text = "toolStrip1"; - // - // newBookmarkToolStripButton - // - this.newBookmarkToolStripButton.AutoSize = false; - this.newBookmarkToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.newBookmarkToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.add; - this.newBookmarkToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.newBookmarkToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.newBookmarkToolStripButton.Margin = new System.Windows.Forms.Padding(16, 1, 0, 2); - this.newBookmarkToolStripButton.Name = "newBookmarkToolStripButton"; - this.newBookmarkToolStripButton.Size = new System.Drawing.Size(23, 22); - this.newBookmarkToolStripButton.Text = "toolStripButton1"; - // - // editBookmarkToolStripButton - // - this.editBookmarkToolStripButton.AutoSize = false; - this.editBookmarkToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.editBookmarkToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.edit; - this.editBookmarkToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.editBookmarkToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.editBookmarkToolStripButton.Name = "editBookmarkToolStripButton"; - this.editBookmarkToolStripButton.Size = new System.Drawing.Size(23, 22); - this.editBookmarkToolStripButton.Text = "toolStripButton2"; - // - // deleteBookmarkToolStripButton - // - this.deleteBookmarkToolStripButton.AutoSize = false; - this.deleteBookmarkToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.deleteBookmarkToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.remove; - this.deleteBookmarkToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.deleteBookmarkToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.deleteBookmarkToolStripButton.Margin = new System.Windows.Forms.Padding(-1, 1, 0, 2); - this.deleteBookmarkToolStripButton.Name = "deleteBookmarkToolStripButton"; - this.deleteBookmarkToolStripButton.Size = new System.Drawing.Size(22, 22); - this.deleteBookmarkToolStripButton.Text = "toolStripButton3"; - // - // viewPanel - // - this.viewPanel.AutoSize = true; - this.viewPanel.BackColor = System.Drawing.Color.WhiteSmoke; - this.viewPanel.Controls.Add(this.tableLayoutPanel1); - this.viewPanel.Dock = System.Windows.Forms.DockStyle.Top; - this.viewPanel.Location = new System.Drawing.Point(0, 0); - this.viewPanel.Name = "viewPanel"; - this.viewPanel.Size = new System.Drawing.Size(1028, 31); - this.viewPanel.TabIndex = 29; - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.AutoSize = true; - this.tableLayoutPanel1.BackColor = System.Drawing.SystemColors.Control; - this.tableLayoutPanel1.ColumnCount = 6; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 42F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 42F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 42F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 120F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.Controls.Add(this.viewToolStrip, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.searchTextBox, 5, 0); - this.tableLayoutPanel1.Controls.Add(this.parentPathButton, 4, 0); - this.tableLayoutPanel1.Controls.Add(this.pathComboBox, 3, 0); - this.tableLayoutPanel1.Controls.Add(this.historyForwardButton, 2, 0); - this.tableLayoutPanel1.Controls.Add(this.historyBackButton, 1, 0); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(0, 0, 2, 0); - this.tableLayoutPanel1.RowCount = 1; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(1028, 31); - this.tableLayoutPanel1.TabIndex = 16; - // - // viewToolStrip - // - this.viewToolStrip.Dock = System.Windows.Forms.DockStyle.None; - this.viewToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; - this.viewToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.browserToolStripButton, - this.bookmarksToolStripButton, - this.historyToolStripButton, - this.bonjourToolStripButton, - this.toolStripSeparator23}); - this.viewToolStrip.Location = new System.Drawing.Point(0, 2); - this.viewToolStrip.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0); - this.viewToolStrip.Name = "viewToolStrip"; - this.viewToolStrip.RenderMode = System.Windows.Forms.ToolStripRenderMode.System; - this.viewToolStrip.Size = new System.Drawing.Size(128, 28); - this.viewToolStrip.TabIndex = 17; - this.viewToolStrip.Text = "toolStrip3"; - // - // browserToolStripButton - // - this.browserToolStripButton.AutoSize = false; - this.browserToolStripButton.AutoToolTip = false; - this.browserToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.browserToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.outline; - this.browserToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.browserToolStripButton.Margin = new System.Windows.Forms.Padding(2, 1, 2, 2); - this.browserToolStripButton.Name = "browserToolStripButton"; - this.browserToolStripButton.Size = new System.Drawing.Size(25, 25); - this.browserToolStripButton.Text = "toolStripButton3"; - this.browserToolStripButton.Click += new System.EventHandler(this.browserCheckBox_Click); - // - // bookmarksToolStripButton - // - this.bookmarksToolStripButton.AutoSize = false; - this.bookmarksToolStripButton.AutoToolTip = false; - this.bookmarksToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.bookmarksToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.bookmarks; - this.bookmarksToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.bookmarksToolStripButton.Margin = new System.Windows.Forms.Padding(2, 1, 2, 2); - this.bookmarksToolStripButton.Name = "bookmarksToolStripButton"; - this.bookmarksToolStripButton.Size = new System.Drawing.Size(25, 25); - this.bookmarksToolStripButton.Text = "toolStripButton4"; - this.bookmarksToolStripButton.Click += new System.EventHandler(this.bookmarkCheckBox_Click); - // - // historyToolStripButton - // - this.historyToolStripButton.AutoSize = false; - this.historyToolStripButton.AutoToolTip = false; - this.historyToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.historyToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.history; - this.historyToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.historyToolStripButton.Margin = new System.Windows.Forms.Padding(2, 1, 2, 2); - this.historyToolStripButton.Name = "historyToolStripButton"; - this.historyToolStripButton.Size = new System.Drawing.Size(25, 25); - this.historyToolStripButton.Text = "toolStripButton5"; - this.historyToolStripButton.Click += new System.EventHandler(this.historyCheckBox_Click); - // - // bonjourToolStripButton - // - this.bonjourToolStripButton.AutoSize = false; - this.bonjourToolStripButton.AutoToolTip = false; - this.bonjourToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.bonjourToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.rendezvous; - this.bonjourToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.bonjourToolStripButton.Margin = new System.Windows.Forms.Padding(2, 1, 5, 2); - this.bonjourToolStripButton.Name = "bonjourToolStripButton"; - this.bonjourToolStripButton.Size = new System.Drawing.Size(25, 25); - this.bonjourToolStripButton.Text = "toolStripButton6"; - this.bonjourToolStripButton.Click += new System.EventHandler(this.bonjourCheckBox_Click); - // - // toolStripSeparator23 - // - this.toolStripSeparator23.Name = "toolStripSeparator23"; - this.toolStripSeparator23.Size = new System.Drawing.Size(6, 28); - // - // searchTextBox - // - this.searchTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.searchTextBox.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.searchTextBox.Location = new System.Drawing.Point(909, 3); - this.searchTextBox.Name = "searchTextBox"; - this.searchTextBox.OptionsMenu = null; - this.searchTextBox.Size = new System.Drawing.Size(114, 24); - this.searchTextBox.TabIndex = 14; - this.searchTextBox.TextChanged += new Ch.Cyberduck.ui.winforms.controls.SearchTextBox2.TextChange(this.searchTextBox_TextChanged); - // - // parentPathButton - // - this.parentPathButton.FlatAppearance.BorderSize = 0; - this.parentPathButton.Image = global::Ch.Cyberduck.ResourcesBundle.nav_up; - this.parentPathButton.Location = new System.Drawing.Point(867, 3); - this.parentPathButton.Name = "parentPathButton"; - this.parentPathButton.Size = new System.Drawing.Size(35, 25); - this.parentPathButton.TabIndex = 7; - this.parentPathButton.UseVisualStyleBackColor = true; - // - // pathComboBox - // - this.pathComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.pathComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.pathComboBox.FormattingEnabled = true; - this.pathComboBox.Location = new System.Drawing.Point(215, 3); - this.pathComboBox.Name = "pathComboBox"; - this.pathComboBox.Size = new System.Drawing.Size(646, 23); - this.pathComboBox.TabIndex = 6; - this.pathComboBox.SelectionChangeCommitted += new System.EventHandler(this.pathComboBox_SelectionChangeCommitted); - // - // historyForwardButton - // - this.historyForwardButton.FlatAppearance.BorderSize = 0; - this.historyForwardButton.Image = global::Ch.Cyberduck.ResourcesBundle.nav_forward; - this.historyForwardButton.Location = new System.Drawing.Point(173, 3); - this.historyForwardButton.Name = "historyForwardButton"; - this.historyForwardButton.Size = new System.Drawing.Size(35, 25); - this.historyForwardButton.TabIndex = 5; - this.historyForwardButton.UseVisualStyleBackColor = true; - // - // historyBackButton - // - this.historyBackButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.historyBackButton.FlatAppearance.BorderSize = 0; - this.historyBackButton.Image = global::Ch.Cyberduck.ResourcesBundle.nav_backward; - this.historyBackButton.Location = new System.Drawing.Point(132, 3); - this.historyBackButton.Name = "historyBackButton"; - this.historyBackButton.Size = new System.Drawing.Size(35, 25); - this.historyBackButton.TabIndex = 4; - this.historyBackButton.UseVisualStyleBackColor = true; - // - // bookmarkContextMenuStrip - // - this.bookmarkContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.connectBookmarkContextToolStripMenuItem, - this.toolStripSeparator29, - this.newBookmarkContextToolStripMenuItem1, - this.deleteBookmarkContextToolStripMenuItem1, - this.editBookmarkContextToolStripMenuItem1, - this.duplicateBookmarkToolStripMenuItem}); - this.bookmarkContextMenuStrip.Name = "bookmarkContextMenuStrip"; - this.bookmarkContextMenuStrip.Size = new System.Drawing.Size(182, 120); - // - // connectBookmarkContextToolStripMenuItem - // - this.connectBookmarkContextToolStripMenuItem.Name = "connectBookmarkContextToolStripMenuItem"; - this.connectBookmarkContextToolStripMenuItem.Size = new System.Drawing.Size(181, 22); - this.connectBookmarkContextToolStripMenuItem.Text = "Connect to server"; - // - // toolStripSeparator29 - // - this.toolStripSeparator29.Name = "toolStripSeparator29"; - this.toolStripSeparator29.Size = new System.Drawing.Size(178, 6); - // - // newBookmarkContextToolStripMenuItem1 - // - this.newBookmarkContextToolStripMenuItem1.Name = "newBookmarkContextToolStripMenuItem1"; - this.newBookmarkContextToolStripMenuItem1.Size = new System.Drawing.Size(181, 22); - this.newBookmarkContextToolStripMenuItem1.Text = "New Bookmark"; - // - // deleteBookmarkContextToolStripMenuItem1 - // - this.deleteBookmarkContextToolStripMenuItem1.Name = "deleteBookmarkContextToolStripMenuItem1"; - this.deleteBookmarkContextToolStripMenuItem1.Size = new System.Drawing.Size(181, 22); - this.deleteBookmarkContextToolStripMenuItem1.Text = "Delete Bookmark"; - // - // editBookmarkContextToolStripMenuItem1 - // - this.editBookmarkContextToolStripMenuItem1.Name = "editBookmarkContextToolStripMenuItem1"; - this.editBookmarkContextToolStripMenuItem1.Size = new System.Drawing.Size(181, 22); - this.editBookmarkContextToolStripMenuItem1.Text = "Edit Bookmark"; - // - // duplicateBookmarkToolStripMenuItem - // - this.duplicateBookmarkToolStripMenuItem.Name = "duplicateBookmarkToolStripMenuItem"; - this.duplicateBookmarkToolStripMenuItem.Size = new System.Drawing.Size(181, 22); - this.duplicateBookmarkToolStripMenuItem.Text = "Duplicate Bookmark"; - // - // saveFileDialog - // - this.saveFileDialog.AddExtension = false; - this.saveFileDialog.Filter = "|*.*"; - this.saveFileDialog.OverwritePrompt = false; - this.saveFileDialog.Title = "Download the selected file to…"; - // - // openFileDialog - // - this.openFileDialog.Multiselect = true; - this.openFileDialog.Title = "Upload"; - // - // vistaMenu1 - // - this.vistaMenu1.ContainerControl = this; - // - // toolbarContextMenu1 - // - this.toolbarContextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.openConnectionToolbarMenuItem, - this.menuItem91, - this.quickConnectToolbarMenuItem, - this.actionContextToolbarMenuItem, - this.menuItem94, - this.infoToolbarMenuItem, - this.refreshToolbarMenuItem, - this.menuItem97, - this.editToolbarMenuItem, - this.openInWebBrowserToolbarMenuItem, - this.openInTerminalToolbarMenuItem, - this.newFolderToolbarMenuItem, - this.deleteToolbarMenuItem, - this.menuItem102, - this.downloadToolbarMenuItem, - this.uploadToolbarMenuItem, - this.transfersToolbarMenuItem, - this.logToolbarMenuItem}); - // - // openConnectionToolbarMenuItem - // - this.openConnectionToolbarMenuItem.Index = 0; - this.openConnectionToolbarMenuItem.Text = "New Connection"; - // - // menuItem91 - // - this.menuItem91.Index = 1; - this.menuItem91.Text = "-"; - // - // quickConnectToolbarMenuItem - // - this.quickConnectToolbarMenuItem.Index = 2; - this.quickConnectToolbarMenuItem.Text = "Quick Connect"; - // - // actionContextToolbarMenuItem - // - this.actionContextToolbarMenuItem.Index = 3; - this.actionContextToolbarMenuItem.Text = "Action"; - // - // menuItem94 - // - this.menuItem94.Index = 4; - this.menuItem94.Text = "-"; - // - // infoToolbarMenuItem - // - this.infoToolbarMenuItem.Index = 5; - this.infoToolbarMenuItem.Text = "Info"; - // - // refreshToolbarMenuItem - // - this.refreshToolbarMenuItem.Index = 6; - this.refreshToolbarMenuItem.Text = "Refresh"; - // - // menuItem97 - // - this.menuItem97.Index = 7; - this.menuItem97.Text = "-"; - // - // editToolbarMenuItem - // - this.editToolbarMenuItem.Index = 8; - this.editToolbarMenuItem.Text = "Edit"; - // - // openInWebBrowserToolbarMenuItem - // - this.openInWebBrowserToolbarMenuItem.Index = 9; - this.openInWebBrowserToolbarMenuItem.Text = "Open in Web Browser"; - // - // openInTerminalToolbarMenuItem - // - this.openInTerminalToolbarMenuItem.Index = 10; - this.openInTerminalToolbarMenuItem.Text = "Open in Terminal"; - // - // newFolderToolbarMenuItem - // - this.newFolderToolbarMenuItem.Index = 11; - this.newFolderToolbarMenuItem.Text = "New Folder"; - // - // deleteToolbarMenuItem - // - this.deleteToolbarMenuItem.Index = 12; - this.deleteToolbarMenuItem.Text = "Delete"; - // - // menuItem102 - // - this.menuItem102.Index = 13; - this.menuItem102.Text = "-"; - // - // downloadToolbarMenuItem - // - this.downloadToolbarMenuItem.Index = 14; - this.downloadToolbarMenuItem.Text = "Download"; - // - // uploadToolbarMenuItem - // - this.uploadToolbarMenuItem.Index = 15; - this.uploadToolbarMenuItem.Text = "Upload"; - // - // transfersToolbarMenuItem - // - this.transfersToolbarMenuItem.Index = 16; - this.transfersToolbarMenuItem.Text = "Transfers"; - // - // logToolbarMenuItem - // - this.logToolbarMenuItem.Index = 17; - this.logToolbarMenuItem.Text = "Log"; - // - // browserContextMenu - // - this.browserContextMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.refreshBrowserContextMenuItem, - this.menuItem44, - this.newFolderBrowserContextMenuItem, - this.newFileBrowserContextMenuItem, - this.newSymlinkBrowserContextMenuItem, - this.renameBrowserContextMenuItem, - this.duplicateFileBrowserContextMenuItem, - this.menuItem96, - this.copyUrlBrowserContextMenuItem, - this.openUrlBrowserContextMenuItem, - this.editBrowserContextMenuItem, - this.infoBrowserContextMenuItem, - this.menuItem105, - this.downloadBrowserContextMenuItem, - this.downloadAsBrowserContextMenuItem, - this.downloadToBrowserContextMenuItem, - this.uploadBrowserContextMenuItem, - this.synchronizeBrowserContextMenuItem, - this.menuItem101, - this.deleteBrowserContextMenuItem, - this.revertBrowserContextMenuItem, - this.menuItem110, - this.createArchiveBrowserContextMenuItem, - this.expandArchiveBrowserContextMnuItem, - this.menuItem113, - this.newBrowserBrowserContextMenuItem, - this.newBookmarkBrowserContextMenuItem}); - // - // refreshBrowserContextMenuItem - // - this.refreshBrowserContextMenuItem.Index = 0; - this.refreshBrowserContextMenuItem.Text = "Refresh"; - // - // menuItem44 - // - this.menuItem44.Index = 1; - this.menuItem44.Text = "-"; - // - // newFolderBrowserContextMenuItem - // - this.newFolderBrowserContextMenuItem.Index = 2; - this.newFolderBrowserContextMenuItem.Text = "New Folder…"; - // - // newFileBrowserContextMenuItem - // - this.newFileBrowserContextMenuItem.Index = 3; - this.newFileBrowserContextMenuItem.Text = "New File…"; - // - // newSymlinkBrowserContextMenuItem - // - this.newSymlinkBrowserContextMenuItem.Index = 4; - this.newSymlinkBrowserContextMenuItem.Text = "New Symbolic Link…"; - // - // renameBrowserContextMenuItem - // - this.renameBrowserContextMenuItem.Index = 5; - this.renameBrowserContextMenuItem.Text = "Rename…"; - // - // duplicateFileBrowserContextMenuItem - // - this.duplicateFileBrowserContextMenuItem.Index = 6; - this.duplicateFileBrowserContextMenuItem.Text = "Duplicate…"; - // - // menuItem96 - // - this.menuItem96.Index = 7; - this.menuItem96.Text = "-"; - // - // copyUrlBrowserContextMenuItem - // - this.copyUrlBrowserContextMenuItem.Index = 8; - this.copyUrlBrowserContextMenuItem.Text = "Copy URL"; - // - // openUrlBrowserContextMenuItem - // - this.openUrlBrowserContextMenuItem.Index = 9; - this.openUrlBrowserContextMenuItem.Text = "Open URL"; - // - // editBrowserContextMenuItem - // - this.editBrowserContextMenuItem.Index = 10; - this.editBrowserContextMenuItem.Text = "Edit With"; - // - // infoBrowserContextMenuItem - // - this.infoBrowserContextMenuItem.Index = 11; - this.infoBrowserContextMenuItem.Text = "Info"; - // - // menuItem105 - // - this.menuItem105.Index = 12; - this.menuItem105.Text = "-"; - // - // downloadBrowserContextMenuItem - // - this.downloadBrowserContextMenuItem.Index = 13; - this.downloadBrowserContextMenuItem.Text = "Download"; - // - // downloadAsBrowserContextMenuItem - // - this.downloadAsBrowserContextMenuItem.Index = 14; - this.downloadAsBrowserContextMenuItem.Text = "Download As…"; - // - // downloadToBrowserContextMenuItem - // - this.downloadToBrowserContextMenuItem.Index = 15; - this.downloadToBrowserContextMenuItem.Text = "Download To…"; - // - // uploadBrowserContextMenuItem - // - this.uploadBrowserContextMenuItem.Index = 16; - this.uploadBrowserContextMenuItem.Text = "Upload…"; - // - // synchronizeBrowserContextMenuItem - // - this.synchronizeBrowserContextMenuItem.Index = 17; - this.synchronizeBrowserContextMenuItem.Text = "Synchronize…"; - // - // menuItem101 - // - this.menuItem101.Index = 18; - this.menuItem101.Text = "-"; - // - // deleteBrowserContextMenuItem - // - this.deleteBrowserContextMenuItem.Index = 19; - this.deleteBrowserContextMenuItem.Text = "Delete"; - // - // revertBrowserContextMenuItem - // - this.revertBrowserContextMenuItem.Index = 20; - this.revertBrowserContextMenuItem.Text = "Revert"; - // - // menuItem110 - // - this.menuItem110.Index = 21; - this.menuItem110.Text = "-"; - // - // createArchiveBrowserContextMenuItem - // - this.createArchiveBrowserContextMenuItem.Index = 22; - this.createArchiveBrowserContextMenuItem.Text = "Create Archive"; - // - // expandArchiveBrowserContextMnuItem - // - this.expandArchiveBrowserContextMnuItem.Index = 23; - this.expandArchiveBrowserContextMnuItem.Text = "Expand Archive"; - // - // menuItem113 - // - this.menuItem113.Index = 24; - this.menuItem113.Text = "-"; - // - // newBrowserBrowserContextMenuItem - // - this.newBrowserBrowserContextMenuItem.Index = 25; - this.newBrowserBrowserContextMenuItem.Text = "New Browser"; - // - // newBookmarkBrowserContextMenuItem - // - this.newBookmarkBrowserContextMenuItem.Index = 26; - this.newBookmarkBrowserContextMenuItem.Text = "New Bookmark"; - // - // bookmarkContextMenu - // - this.bookmarkContextMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.connectBookmarkContextMenuItem, - this.menuItem5, - this.newBookmarkContextMenuItem, - this.deleteBookmarkContextMenuItem, - this.editBookmarkContextMenuItem, - this.duplicateBookmarkContextMenuItem, - this.menuItem8, - this.menuItem9}); - // - // connectBookmarkContextMenuItem - // - this.connectBookmarkContextMenuItem.Index = 0; - this.connectBookmarkContextMenuItem.Text = "Connect to server"; - // - // menuItem5 - // - this.menuItem5.Index = 1; - this.menuItem5.Text = "-"; - // - // newBookmarkContextMenuItem - // - this.newBookmarkContextMenuItem.Index = 2; - this.newBookmarkContextMenuItem.Text = "New Bookmark"; - // - // deleteBookmarkContextMenuItem - // - this.deleteBookmarkContextMenuItem.Index = 3; - this.deleteBookmarkContextMenuItem.Text = "Delete Bookmark"; - // - // editBookmarkContextMenuItem - // - this.editBookmarkContextMenuItem.Index = 4; - this.editBookmarkContextMenuItem.Text = "Edit Bookmark"; - // - // duplicateBookmarkContextMenuItem - // - this.duplicateBookmarkContextMenuItem.Index = 5; - this.duplicateBookmarkContextMenuItem.Text = "Duplicate Bookmark"; - // - // menuItem8 - // - this.menuItem8.Index = 6; - this.menuItem8.Text = "-"; - // - // menuItem9 - // - this.menuItem9.Index = 7; - this.menuItem9.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.sortByNicknameBookmarkContextMenuItem, - this.sortByHostnameBookmarkContextMenuItem, - this.sortByProtocolBookmarkContextMenuItem}); - this.menuItem9.Text = "Sort By"; - // - // sortByNicknameBookmarkContextMenuItem - // - this.sortByNicknameBookmarkContextMenuItem.Index = 0; - this.sortByNicknameBookmarkContextMenuItem.Text = "Nickname"; - // - // sortByHostnameBookmarkContextMenuItem - // - this.sortByHostnameBookmarkContextMenuItem.Index = 1; - this.sortByHostnameBookmarkContextMenuItem.Text = "Hostname"; - // - // sortByProtocolBookmarkContextMenuItem - // - this.sortByProtocolBookmarkContextMenuItem.Index = 2; - this.sortByProtocolBookmarkContextMenuItem.Text = "Protocol"; - // - // BrowserForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1028, 606); - this.Controls.Add(this.toolStripContainer1); - this.MinimumSize = new System.Drawing.Size(457, 39); - this.Name = "BrowserForm"; - this.Text = "Cyberduck"; - this.statusStrip.ResumeLayout(false); - this.statusStrip.PerformLayout(); - this.menuStrip1.ResumeLayout(false); - this.menuStrip1.PerformLayout(); - this.toolbarContextMenu.ResumeLayout(false); - this.editorMenuStrip.ResumeLayout(false); - this.toolBar.ResumeLayout(false); - this.toolBar.PerformLayout(); - this.contextMenuStrip.ResumeLayout(false); - this.toolStripContainer1.BottomToolStripPanel.ResumeLayout(false); - this.toolStripContainer1.BottomToolStripPanel.PerformLayout(); - this.toolStripContainer1.ContentPanel.ResumeLayout(false); - this.toolStripContainer1.ContentPanel.PerformLayout(); - this.toolStripContainer1.TopToolStripPanel.ResumeLayout(false); - this.toolStripContainer1.TopToolStripPanel.PerformLayout(); - this.toolStripContainer1.ResumeLayout(false); - this.toolStripContainer1.PerformLayout(); - this.panelManager1.ResumeLayout(false); - this.managedBrowserPanel1.ResumeLayout(false); - this.splitContainer.Panel1.ResumeLayout(false); - this.splitContainer.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); - this.splitContainer.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.browser)).EndInit(); - this.managedBookmarkPanel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.bookmarkListView)).EndInit(); - this.actionToolStrip.ResumeLayout(false); - this.actionToolStrip.PerformLayout(); - this.viewPanel.ResumeLayout(false); - this.viewPanel.PerformLayout(); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.viewToolStrip.ResumeLayout(false); - this.viewToolStrip.PerformLayout(); - this.bookmarkContextMenuStrip.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.vistaMenu1)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.StatusStrip statusStrip; - private System.Windows.Forms.ToolStripStatusLabel statusLabel; - private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem newBrowserToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem aboutCyberduckToolStripMenuItem; - private System.Windows.Forms.ToolStripButton openConnectionToolStripButton; - private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem goToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem bookmarkToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem windowToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem viewBookmarksToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.ToolStripMenuItem newBookmarkToolStripMenuItem; - private System.Windows.Forms.ImageList iconList; - private System.Windows.Forms.ToolStripComboBox quickConnectToolStripComboBox; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip; - private System.Windows.Forms.ToolStripMenuItem refreshContextToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; - private System.Windows.Forms.ToolStripMenuItem infoContextToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem renameContextToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem downloadContextToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem downloadAsContextToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem downloadToContextToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem editContextToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem deleteContextToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem duplicateFileContextToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; - private System.Windows.Forms.ToolStripMenuItem uploadContextToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem synchronizeContextToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem newFolderContextToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem newFileContextToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; - private System.Windows.Forms.ToolStripMenuItem createArchiveContextToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem expandArchiveContextToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; - private System.Windows.Forms.ToolStripMenuItem openURLContextToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; - private System.Windows.Forms.ToolStripMenuItem newBrowserContextToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem newBookmarkContextToolStripMenuItem; - private System.Windows.Forms.ToolStripContainer toolStripContainer1; - private System.Windows.Forms.SplitContainer splitContainer; - private System.Windows.Forms.RichTextBox transcriptBox; - private MulticolorTreeListView browser; - private SortComparatorOLVColumn treeColumnName; - private SortComparatorOLVColumn treeColumnSize; - private SortComparatorOLVColumn treeColumnModified; - private SortComparatorOLVColumn treeColumnOwner; - private SortComparatorOLVColumn treeColumnGroup; - private SortComparatorOLVColumn treeColumnPermissions; - private SortComparatorOLVColumn treeColumnKind; - private SortComparatorOLVColumn treeColumnExtension; - private SortComparatorOLVColumn treeColumnRegion; - private SortComparatorOLVColumn treeColumnVersion; - private System.Windows.Forms.ToolStripMenuItem infoToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem activitiyToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem transfersToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem openConnectionToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; - private System.Windows.Forms.ToolStripMenuItem newDownloadToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; - private System.Windows.Forms.ToolStripMenuItem newFolderToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem newFileToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem renameFileToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem duplicateFileToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator9; - private System.Windows.Forms.ToolStripMenuItem openWebURLToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem editWithToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator10; - private System.Windows.Forms.ToolStripMenuItem downloadToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem downloadAsToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem downloadToToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem uploadToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem synchronizeToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator11; - private System.Windows.Forms.ToolStripMenuItem createArchiveToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem expandArchiveToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator12; - private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem cutToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem copyURLToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem pasteToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator14; - private System.Windows.Forms.ToolStripMenuItem preferencesToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem showHiddenFilesToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem textEncodingToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator13; - private System.Windows.Forms.ToolStripMenuItem toggleLogDrawerToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem toggleToolbarToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator15; - private System.Windows.Forms.ToolStripMenuItem refreshToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator16; - private System.Windows.Forms.ToolStripMenuItem gotoFolderToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem backToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem forwardToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem enclosingFolderToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem insideToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem searchToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator17; - private System.Windows.Forms.ToolStripMenuItem sendCommandToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator18; - private System.Windows.Forms.ToolStripMenuItem stopToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem disconnectToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem deleteBookmarkToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem editBookmarkToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator19; - private System.Windows.Forms.ToolStripMenuItem historyToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem bonjourToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem minimizeToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator20; - private System.Windows.Forms.ToolStripMenuItem cyberduckHelpToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem licenseToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem acknowledgmentsToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator21; - private System.Windows.Forms.ToolStripMenuItem reportABugToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator22; - private System.Windows.Forms.ContextMenuStrip editorMenuStrip; - private System.Windows.Forms.ToolStripMenuItem editor1ToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem editor2ToolStripMenuItem; - private System.Windows.Forms.ContextMenuStrip archiveMenuStrip; - private System.Windows.Forms.ContextMenuStrip textEncodingMenuStrip; - private System.Windows.Forms.ToolStripButton refreshToolStripButton; - private System.Windows.Forms.ToolStripButton disconnectStripButton; - private System.Windows.Forms.ToolStripDropDownButton actionToolStripDropDownButton; - private System.Windows.Forms.ToolStripSeparator toolStripSeparatorAfterOpenConnection; - private System.Windows.Forms.ToolStripSeparator toolStripSeparatorAfterAction; - private System.Windows.Forms.SaveFileDialog saveFileDialog; - private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog; - private System.Windows.Forms.OpenFileDialog openFileDialog; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator25; - private System.Windows.Forms.ToolStripMenuItem revertToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator26; - private System.Windows.Forms.ToolStripMenuItem revertContxtStripMenuItem; - private System.Windows.Forms.ToolStrip actionToolStrip; - private System.Windows.Forms.ToolStripButton newBookmarkToolStripButton; - private System.Windows.Forms.ToolStripButton editBookmarkToolStripButton; - private System.Windows.Forms.ToolStripButton deleteBookmarkToolStripButton; - private BrightIdeasSoftware.OLVColumn bookmarkImageColumn; - private BrightIdeasSoftware.OLVColumn bookmarkDescriptionColumn; - private BrightIdeasSoftware.OLVColumn activeColumn; - private System.Windows.Forms.ContextMenuStrip bookmarkContextMenuStrip; - private System.Windows.Forms.ToolStripMenuItem connectBookmarkContextToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator29; - private System.Windows.Forms.ToolStripMenuItem newBookmarkContextToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem deleteBookmarkContextToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem editBookmarkContextToolStripMenuItem1; - private LineSeparatedObjectListView bookmarkListView; - private System.Windows.Forms.Panel viewPanel; - private System.Windows.Forms.Button parentPathButton; - private System.Windows.Forms.ComboBox pathComboBox; - private System.Windows.Forms.Button historyForwardButton; - private System.Windows.Forms.Button historyBackButton; - private System.Windows.Forms.ToolStripMenuItem checkToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator28; - private System.Windows.Forms.ToolStripMenuItem columnToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem toolbarToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem openConnectionToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem quickConnectToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem actionToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator30; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator31; - private System.Windows.Forms.ToolStripMenuItem infoToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem refreshToolStripMenuItem1; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator32; - private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem openInWebBrowserToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem openInTerminalToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem1; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator33; - private System.Windows.Forms.ToolStripMenuItem downloadToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem uploadToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem transfersToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem logToolStripMenuItem1; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator34; - private System.Windows.Forms.ToolStripMenuItem printToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator35; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator36; - private System.Windows.Forms.ToolStripButton infoToolStripButton; - private System.Windows.Forms.ToolStripSeparator toolStripSeparatorAfterRefresh; - private System.Windows.Forms.ToolStripButton openInBrowserToolStripButton; - private System.Windows.Forms.ToolStripButton logToolStripButton; - private System.Windows.Forms.ToolStripButton newFolderToolStripButton; - private System.Windows.Forms.ToolStripButton deleteToolStripButton; - private System.Windows.Forms.ToolStripSeparator toolStripSeparatorAfterDelete; - private System.Windows.Forms.ToolStripButton downloadToolStripButton; - private System.Windows.Forms.ToolStripButton uploadToolStripButton; - private System.Windows.Forms.ContextMenuStrip toolbarContextMenu; - private System.Windows.Forms.ContextMenuStrip columnContextMenu; - private System.Windows.Forms.ContextMenuStrip historyMenuStrip; - private System.Windows.Forms.ContextMenuStrip bonjourMenuStrip; - private System.Windows.Forms.ToolStripStatusLabel securityToolStripStatusLabel; - private System.Windows.Forms.ToolStripMenuItem duplicateBookmarkToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem duplicateBookmarkToolStripMenuItem; - private ClickThroughMenuStrip menuStrip1; - private System.Windows.Forms.ToolStripStatusLabel toolStripProgress; - private ClickThroughToolStrip toolBar; - private ui.winforms.controls.SearchTextBox2 searchTextBox; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.MainMenu mainMenu; - private System.Windows.Forms.MenuItem menuItem1; - private System.Windows.Forms.MenuItem newBrowserMainMenuItem; - private System.Windows.Forms.MenuItem openConnectionMainMenuItem; - private System.Windows.Forms.MenuItem menuItem4; - private System.Windows.Forms.MenuItem newDownloadMainMenuItem; - private System.Windows.Forms.MenuItem menuItem6; - private System.Windows.Forms.MenuItem newFolderMainMenuItem; - private System.Windows.Forms.MenuItem newFileMainMenuItem; - private System.Windows.Forms.MenuItem renameMainMenuItem; - private System.Windows.Forms.MenuItem duplicateMainMenuItem; - private System.Windows.Forms.MenuItem menuItem11; - private System.Windows.Forms.MenuItem openUrlMainMenuItem; - private System.Windows.Forms.MenuItem editMainMenuItem; - private System.Windows.Forms.MenuItem infoMainMenuItem; - private System.Windows.Forms.MenuItem downloadMainMenuItem; - private System.Windows.Forms.MenuItem downloadAsMainMenuItem; - private System.Windows.Forms.MenuItem downloadToMainMenuItem; - private System.Windows.Forms.MenuItem uploadMainMenuItem; - private System.Windows.Forms.MenuItem synchronizeMainMenuItem; - private System.Windows.Forms.MenuItem menuItem21; - private System.Windows.Forms.MenuItem deleteMainMenuItem; - private System.Windows.Forms.MenuItem revertMainMenuItem; - private System.Windows.Forms.MenuItem menuItem24; - private System.Windows.Forms.MenuItem createArchiveMainMenuItem; - private System.Windows.Forms.MenuItem expandArchiveMainMenuItem; - private System.Windows.Forms.MenuItem menuItem27; - private System.Windows.Forms.MenuItem printMainMenuItem; - private System.Windows.Forms.MenuItem menuItem29; - private System.Windows.Forms.MenuItem exitMainMenuItem; - private System.Windows.Forms.MenuItem mainMenuItem2; - private System.Windows.Forms.MenuItem cutMainMenuItem; - private System.Windows.Forms.MenuItem copyMainMenuItem; - private System.Windows.Forms.MenuItem copyUrlMainMenuItem; - private System.Windows.Forms.MenuItem pasteMainMenuItem; - private System.Windows.Forms.MenuItem selectAllMainMenuItem; - private System.Windows.Forms.MenuItem menuItem37; - private System.Windows.Forms.MenuItem preferencesMainMenuItem; - private System.Windows.Forms.MenuItem menuItem39; - private System.Windows.Forms.MenuItem toggleToolbarMainMenuItem; - private System.Windows.Forms.MenuItem customizeToolbarMainMenuItem; - private System.Windows.Forms.MenuItem menuItem42; - private System.Windows.Forms.MenuItem menuItem43; - private System.Windows.Forms.MenuItem columnMainMenuItem; - private System.Windows.Forms.MenuItem menuItem45; - private System.Windows.Forms.MenuItem showHiddenFilesMainMenuItem; - private System.Windows.Forms.MenuItem textEncodingMainMenuItem; - private System.Windows.Forms.MenuItem menuItem48; - private System.Windows.Forms.MenuItem toggleLogDrawerMainMenuItem; - private System.Windows.Forms.MenuItem menuItem50; - private System.Windows.Forms.MenuItem refreshMainMenuItem; - private System.Windows.Forms.MenuItem menuItem52; - private System.Windows.Forms.MenuItem goToFolderMainMenuItem; - private System.Windows.Forms.MenuItem backMainMenuItem; - private System.Windows.Forms.MenuItem forwardMainMenuItem; - private System.Windows.Forms.MenuItem enclosingFolderMainMenuItem; - private System.Windows.Forms.MenuItem insideMainMenuItem; - private System.Windows.Forms.MenuItem searchMainMenuItem; - private System.Windows.Forms.MenuItem menuItem59; - private System.Windows.Forms.MenuItem sendCommandMainMenuItem; - private System.Windows.Forms.MenuItem menuItem61; - private System.Windows.Forms.MenuItem stopMainMenuItem; - private System.Windows.Forms.MenuItem disconnectMainMenuItem; - private System.Windows.Forms.MenuItem menuItem64; - private System.Windows.Forms.MenuItem toggleBookmarksMainMenuItem; - private System.Windows.Forms.MenuItem menuItem66; - private System.Windows.Forms.MenuItem newBookmarkMainMenuItem; - private System.Windows.Forms.MenuItem deleteBookmarkMainMenuItem; - private System.Windows.Forms.MenuItem editBookmarkMainMenuItem; - private System.Windows.Forms.MenuItem duplicateBookmarkMainMenuItem; - private System.Windows.Forms.MenuItem menuItem71; - private System.Windows.Forms.MenuItem historyMainMenuItem; - private System.Windows.Forms.MenuItem bonjourMainMenuItem; - private System.Windows.Forms.MenuItem menuItem74; - private System.Windows.Forms.MenuItem menuItem75; - private System.Windows.Forms.MenuItem minimizeMainMenuItem; - private System.Windows.Forms.MenuItem menuItem77; - private System.Windows.Forms.MenuItem transfersMainMenuItem; - private System.Windows.Forms.MenuItem activityMainMenuItem; - private System.Windows.Forms.MenuItem menuItem80; - private System.Windows.Forms.MenuItem helpMainMenuItem; - private System.Windows.Forms.MenuItem licenseMainMenuItem; - private System.Windows.Forms.MenuItem acknowledgmentsMainMenuItem; - private System.Windows.Forms.MenuItem menuItem84; - private System.Windows.Forms.MenuItem bugMainMenuItem; - private System.Windows.Forms.MenuItem menuItem86; - private System.Windows.Forms.MenuItem updateMainMenuItem; - private System.Windows.Forms.MenuItem menuItem88; - private System.Windows.Forms.MenuItem aboutMainMenuItem; - private VistaMenu vistaMenu1; - private System.Windows.Forms.ContextMenu toolbarContextMenu1; - private System.Windows.Forms.MenuItem openConnectionToolbarMenuItem; - private System.Windows.Forms.MenuItem menuItem91; - private System.Windows.Forms.MenuItem quickConnectToolbarMenuItem; - private System.Windows.Forms.MenuItem actionContextToolbarMenuItem; - private System.Windows.Forms.MenuItem menuItem94; - private System.Windows.Forms.MenuItem infoToolbarMenuItem; - private System.Windows.Forms.MenuItem refreshToolbarMenuItem; - private System.Windows.Forms.MenuItem menuItem97; - private System.Windows.Forms.MenuItem editToolbarMenuItem; - private System.Windows.Forms.MenuItem openInWebBrowserToolbarMenuItem; - private System.Windows.Forms.MenuItem newFolderToolbarMenuItem; - private System.Windows.Forms.MenuItem deleteToolbarMenuItem; - private System.Windows.Forms.MenuItem menuItem102; - private System.Windows.Forms.MenuItem downloadToolbarMenuItem; - private System.Windows.Forms.MenuItem uploadToolbarMenuItem; - private System.Windows.Forms.MenuItem transfersToolbarMenuItem; - private System.Windows.Forms.ContextMenu browserContextMenu; - private System.Windows.Forms.MenuItem refreshBrowserContextMenuItem; - private System.Windows.Forms.MenuItem menuItem44; - private System.Windows.Forms.MenuItem infoBrowserContextMenuItem; - private System.Windows.Forms.MenuItem editBrowserContextMenuItem; - private System.Windows.Forms.MenuItem renameBrowserContextMenuItem; - private System.Windows.Forms.MenuItem duplicateFileBrowserContextMenuItem; - private System.Windows.Forms.MenuItem menuItem96; - private System.Windows.Forms.MenuItem downloadBrowserContextMenuItem; - private System.Windows.Forms.MenuItem downloadAsBrowserContextMenuItem; - private System.Windows.Forms.MenuItem downloadToBrowserContextMenuItem; - private System.Windows.Forms.MenuItem menuItem101; - private System.Windows.Forms.MenuItem deleteBrowserContextMenuItem; - private System.Windows.Forms.MenuItem revertBrowserContextMenuItem; - private System.Windows.Forms.MenuItem menuItem105; - private System.Windows.Forms.MenuItem uploadBrowserContextMenuItem; - private System.Windows.Forms.MenuItem synchronizeBrowserContextMenuItem; - private System.Windows.Forms.MenuItem newFolderBrowserContextMenuItem; - private System.Windows.Forms.MenuItem newFileBrowserContextMenuItem; - private System.Windows.Forms.MenuItem menuItem110; - private System.Windows.Forms.MenuItem createArchiveBrowserContextMenuItem; - private System.Windows.Forms.MenuItem expandArchiveBrowserContextMnuItem; - private System.Windows.Forms.MenuItem menuItem113; - private System.Windows.Forms.MenuItem copyUrlBrowserContextMenuItem; - private System.Windows.Forms.MenuItem openUrlBrowserContextMenuItem; - private System.Windows.Forms.MenuItem newBrowserBrowserContextMenuItem; - private System.Windows.Forms.MenuItem newBookmarkBrowserContextMenuItem; - private PanelManager panelManager1; - private ManagedPanel managedBrowserPanel1; - private ManagedPanel managedBookmarkPanel2; - private System.Windows.Forms.ContextMenu bookmarkContextMenu; - private System.Windows.Forms.MenuItem connectBookmarkContextMenuItem; - private System.Windows.Forms.MenuItem menuItem5; - private System.Windows.Forms.MenuItem newBookmarkContextMenuItem; - private System.Windows.Forms.MenuItem deleteBookmarkContextMenuItem; - private System.Windows.Forms.MenuItem editBookmarkContextMenuItem; - private System.Windows.Forms.MenuItem duplicateBookmarkContextMenuItem; - private System.Windows.Forms.MenuItem menuItem2; - private ClickThroughToolStrip viewToolStrip; - private System.Windows.Forms.ToolStripButton browserToolStripButton; - private System.Windows.Forms.ToolStripButton bookmarksToolStripButton; - private System.Windows.Forms.ToolStripButton historyToolStripButton; - private System.Windows.Forms.ToolStripButton bonjourToolStripButton; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator23; - private System.Windows.Forms.ToolStripMenuItem copyURLContextToolStripMenuItem; - private System.Windows.Forms.ToolStripSplitButton editToolStripSplitButton; - private System.Windows.Forms.MenuItem keyMainMenuItem; - private System.Windows.Forms.MenuItem donateMainMenuItem; - private System.Windows.Forms.MenuItem menuItem7; - private System.Windows.Forms.MenuItem openInTerminalMainMenuItem; - private System.Windows.Forms.ToolStripButton openInTerminalToolStripButton; - private System.Windows.Forms.MenuItem openInTerminalToolbarMenuItem; - private System.Windows.Forms.ToolStripMenuItem newFolderToolStripMenuItem1; - private System.Windows.Forms.MenuItem menuItem3; - private System.Windows.Forms.MenuItem sortByNicknameMainMenuItem; - private System.Windows.Forms.MenuItem sortByHostnameMainMenuItem; - private System.Windows.Forms.MenuItem sortByProtocolMainMenuItem; - private System.Windows.Forms.MenuItem menuItem8; - private System.Windows.Forms.MenuItem menuItem9; - private System.Windows.Forms.MenuItem sortByNicknameBookmarkContextMenuItem; - private System.Windows.Forms.MenuItem sortByHostnameBookmarkContextMenuItem; - private System.Windows.Forms.MenuItem sortByProtocolBookmarkContextMenuItem; - private System.Windows.Forms.MenuItem newSymbolicLinkMainMenuItem; - private System.Windows.Forms.ToolStripMenuItem newSymlinkContextToolStripMenuItem; - private System.Windows.Forms.MenuItem newSymlinkBrowserContextMenuItem; - private System.Windows.Forms.ToolStripButton transfersToolStripButton; - private System.Windows.Forms.MenuItem logToolbarMenuItem; - } -} - +using Ch.Cyberduck.Ui.Winforms.Controls; + +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class BrowserForm + { + /// + /// 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(); + this.mainMenu = new System.Windows.Forms.MainMenu(this.components); + this.menuItem1 = new System.Windows.Forms.MenuItem(); + this.newBrowserMainMenuItem = new System.Windows.Forms.MenuItem(); + this.openConnectionMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem4 = new System.Windows.Forms.MenuItem(); + this.newDownloadMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem6 = new System.Windows.Forms.MenuItem(); + this.newFolderMainMenuItem = new System.Windows.Forms.MenuItem(); + this.newFileMainMenuItem = new System.Windows.Forms.MenuItem(); + this.newSymbolicLinkMainMenuItem = new System.Windows.Forms.MenuItem(); + this.renameMainMenuItem = new System.Windows.Forms.MenuItem(); + this.duplicateMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem11 = new System.Windows.Forms.MenuItem(); + this.openUrlMainMenuItem = new System.Windows.Forms.MenuItem(); + this.editMainMenuItem = new System.Windows.Forms.MenuItem(); + this.infoMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem2 = new System.Windows.Forms.MenuItem(); + this.downloadMainMenuItem = new System.Windows.Forms.MenuItem(); + this.downloadAsMainMenuItem = new System.Windows.Forms.MenuItem(); + this.downloadToMainMenuItem = new System.Windows.Forms.MenuItem(); + this.uploadMainMenuItem = new System.Windows.Forms.MenuItem(); + this.synchronizeMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem21 = new System.Windows.Forms.MenuItem(); + this.deleteMainMenuItem = new System.Windows.Forms.MenuItem(); + this.revertMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem24 = new System.Windows.Forms.MenuItem(); + this.createArchiveMainMenuItem = new System.Windows.Forms.MenuItem(); + this.expandArchiveMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem27 = new System.Windows.Forms.MenuItem(); + this.printMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem29 = new System.Windows.Forms.MenuItem(); + this.exitMainMenuItem = new System.Windows.Forms.MenuItem(); + this.mainMenuItem2 = new System.Windows.Forms.MenuItem(); + this.cutMainMenuItem = new System.Windows.Forms.MenuItem(); + this.copyMainMenuItem = new System.Windows.Forms.MenuItem(); + this.copyUrlMainMenuItem = new System.Windows.Forms.MenuItem(); + this.pasteMainMenuItem = new System.Windows.Forms.MenuItem(); + this.selectAllMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem37 = new System.Windows.Forms.MenuItem(); + this.preferencesMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem39 = new System.Windows.Forms.MenuItem(); + this.toggleToolbarMainMenuItem = new System.Windows.Forms.MenuItem(); + this.customizeToolbarMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem42 = new System.Windows.Forms.MenuItem(); + this.menuItem43 = new System.Windows.Forms.MenuItem(); + this.columnMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem45 = new System.Windows.Forms.MenuItem(); + this.showHiddenFilesMainMenuItem = new System.Windows.Forms.MenuItem(); + this.textEncodingMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem48 = new System.Windows.Forms.MenuItem(); + this.toggleLogDrawerMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem50 = new System.Windows.Forms.MenuItem(); + this.refreshMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem52 = new System.Windows.Forms.MenuItem(); + this.goToFolderMainMenuItem = new System.Windows.Forms.MenuItem(); + this.backMainMenuItem = new System.Windows.Forms.MenuItem(); + this.forwardMainMenuItem = new System.Windows.Forms.MenuItem(); + this.enclosingFolderMainMenuItem = new System.Windows.Forms.MenuItem(); + this.insideMainMenuItem = new System.Windows.Forms.MenuItem(); + this.searchMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem59 = new System.Windows.Forms.MenuItem(); + this.sendCommandMainMenuItem = new System.Windows.Forms.MenuItem(); + this.openInTerminalMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem61 = new System.Windows.Forms.MenuItem(); + this.stopMainMenuItem = new System.Windows.Forms.MenuItem(); + this.disconnectMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem64 = new System.Windows.Forms.MenuItem(); + this.toggleBookmarksMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem3 = new System.Windows.Forms.MenuItem(); + this.sortByNicknameMainMenuItem = new System.Windows.Forms.MenuItem(); + this.sortByHostnameMainMenuItem = new System.Windows.Forms.MenuItem(); + this.sortByProtocolMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem66 = new System.Windows.Forms.MenuItem(); + this.newBookmarkMainMenuItem = new System.Windows.Forms.MenuItem(); + this.deleteBookmarkMainMenuItem = new System.Windows.Forms.MenuItem(); + this.editBookmarkMainMenuItem = new System.Windows.Forms.MenuItem(); + this.duplicateBookmarkMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem71 = new System.Windows.Forms.MenuItem(); + this.historyMainMenuItem = new System.Windows.Forms.MenuItem(); + this.bonjourMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem74 = new System.Windows.Forms.MenuItem(); + this.menuItem75 = new System.Windows.Forms.MenuItem(); + this.minimizeMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem77 = new System.Windows.Forms.MenuItem(); + this.transfersMainMenuItem = new System.Windows.Forms.MenuItem(); + this.activityMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem80 = new System.Windows.Forms.MenuItem(); + this.helpMainMenuItem = new System.Windows.Forms.MenuItem(); + this.licenseMainMenuItem = new System.Windows.Forms.MenuItem(); + this.acknowledgmentsMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem84 = new System.Windows.Forms.MenuItem(); + this.bugMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem86 = new System.Windows.Forms.MenuItem(); + this.updateMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem88 = new System.Windows.Forms.MenuItem(); + this.donateMainMenuItem = new System.Windows.Forms.MenuItem(); + this.keyMainMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem7 = new System.Windows.Forms.MenuItem(); + this.aboutMainMenuItem = new System.Windows.Forms.MenuItem(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.toolStripProgress = new System.Windows.Forms.ToolStripStatusLabel(); + this.statusLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.securityToolStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.menuStrip1 = new Ch.Cyberduck.Ui.Winforms.Controls.ClickThroughMenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.newBrowserToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openConnectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); + this.newDownloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); + this.newFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.newFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.renameFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.duplicateFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator(); + this.openWebURLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editWithToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.infoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator(); + this.downloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.downloadAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.downloadToToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.uploadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.synchronizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator25 = new System.Windows.Forms.ToolStripSeparator(); + this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.revertToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); + this.createArchiveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.archiveMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.expandArchiveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator(); + this.printToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator35 = new System.Windows.Forms.ToolStripSeparator(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.cutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.copyURLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.pasteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator14 = new System.Windows.Forms.ToolStripSeparator(); + this.preferencesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toggleToolbarToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolbarToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolbarContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.openConnectionToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator30 = new System.Windows.Forms.ToolStripSeparator(); + this.quickConnectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.actionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator31 = new System.Windows.Forms.ToolStripSeparator(); + this.infoToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.refreshToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator32 = new System.Windows.Forms.ToolStripSeparator(); + this.editToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.openInWebBrowserToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openInTerminalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.newFolderToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator33 = new System.Windows.Forms.ToolStripSeparator(); + this.downloadToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.uploadToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.transfersToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.logToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator(); + this.columnToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.columnContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.toolStripSeparator34 = new System.Windows.Forms.ToolStripSeparator(); + this.showHiddenFilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.textEncodingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.textEncodingMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.toolStripSeparator15 = new System.Windows.Forms.ToolStripSeparator(); + this.toggleLogDrawerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.goToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.refreshToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator16 = new System.Windows.Forms.ToolStripSeparator(); + this.gotoFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.backToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.forwardToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.enclosingFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.insideToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.searchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator17 = new System.Windows.Forms.ToolStripSeparator(); + this.sendCommandToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator18 = new System.Windows.Forms.ToolStripSeparator(); + this.stopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.disconnectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.bookmarkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.viewBookmarksToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.newBookmarkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteBookmarkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editBookmarkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.duplicateBookmarkToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator19 = new System.Windows.Forms.ToolStripSeparator(); + this.historyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.historyMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.bonjourToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.bonjourMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.toolStripSeparator36 = new System.Windows.Forms.ToolStripSeparator(); + this.windowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.minimizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator20 = new System.Windows.Forms.ToolStripSeparator(); + this.transfersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.activitiyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.cyberduckHelpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.licenseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.acknowledgmentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator21 = new System.Windows.Forms.ToolStripSeparator(); + this.reportABugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator22 = new System.Windows.Forms.ToolStripSeparator(); + this.checkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator28 = new System.Windows.Forms.ToolStripSeparator(); + this.aboutCyberduckToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.createArchiveContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editorMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.editor1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editor2ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editToolStripSplitButton = new System.Windows.Forms.ToolStripSplitButton(); + this.toolBar = new Ch.Cyberduck.Ui.Winforms.Controls.ClickThroughToolStrip(); + this.openConnectionToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparatorAfterOpenConnection = new System.Windows.Forms.ToolStripSeparator(); + this.quickConnectToolStripComboBox = new System.Windows.Forms.ToolStripComboBox(); + this.actionToolStripDropDownButton = new System.Windows.Forms.ToolStripDropDownButton(); + this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.refreshContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); + this.newFolderContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.newFileContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.newSymlinkContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.renameContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.duplicateFileContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.copyURLContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openURLContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.infoContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator26 = new System.Windows.Forms.ToolStripSeparator(); + this.downloadContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.downloadAsContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.downloadToContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.uploadContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.synchronizeContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.deleteContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.revertContxtStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.expandArchiveContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.newBrowserContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.newBookmarkContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparatorAfterAction = new System.Windows.Forms.ToolStripSeparator(); + this.infoToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.refreshToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparatorAfterRefresh = new System.Windows.Forms.ToolStripSeparator(); + this.openInBrowserToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.openInTerminalToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.newFolderToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.deleteToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparatorAfterDelete = new System.Windows.Forms.ToolStripSeparator(); + this.downloadToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.uploadToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.transfersToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.logToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.disconnectStripButton = new System.Windows.Forms.ToolStripButton(); + this.iconList = new System.Windows.Forms.ImageList(this.components); + this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer(); + this.panelManager1 = new Ch.Cyberduck.Ui.Winforms.Controls.PanelManager(); + this.managedBrowserPanel1 = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.splitContainer = new System.Windows.Forms.SplitContainer(); + this.browser = new Ch.Cyberduck.Ui.Winforms.Controls.MulticolorTreeListView(); + this.treeColumnName = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); + this.treeColumnSize = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); + this.treeColumnModified = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); + this.treeColumnOwner = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); + this.treeColumnGroup = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); + this.treeColumnPermissions = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); + this.treeColumnKind = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); + this.treeColumnExtension = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); + this.treeColumnRegion = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); + this.treeColumnVersion = ((Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn)(new Ch.Cyberduck.Ui.Winforms.Controls.SortComparatorOLVColumn())); + this.transcriptBox = new System.Windows.Forms.RichTextBox(); + this.managedBookmarkPanel2 = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.bookmarkListView = new Ch.Cyberduck.Ui.Winforms.Controls.LineSeparatedObjectListView(); + this.bookmarkImageColumn = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); + this.bookmarkDescriptionColumn = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); + this.activeColumn = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); + this.actionToolStrip = new System.Windows.Forms.ToolStrip(); + this.newBookmarkToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.editBookmarkToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.deleteBookmarkToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.viewPanel = new System.Windows.Forms.Panel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.viewToolStrip = new Ch.Cyberduck.Ui.Winforms.Controls.ClickThroughToolStrip(); + this.browserToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.bookmarksToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.historyToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.bonjourToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator23 = new System.Windows.Forms.ToolStripSeparator(); + this.searchTextBox = new Ch.Cyberduck.ui.winforms.controls.SearchTextBox2(); + this.parentPathButton = new System.Windows.Forms.Button(); + this.pathComboBox = new System.Windows.Forms.ComboBox(); + this.historyForwardButton = new System.Windows.Forms.Button(); + this.historyBackButton = new System.Windows.Forms.Button(); + this.bookmarkContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.connectBookmarkContextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator29 = new System.Windows.Forms.ToolStripSeparator(); + this.newBookmarkContextToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteBookmarkContextToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.editBookmarkContextToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.duplicateBookmarkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.saveFileDialog = new System.Windows.Forms.SaveFileDialog(); + this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); + this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.vistaMenu1 = new Ch.Cyberduck.Ui.Winforms.Controls.VistaMenu(this.components); + this.toolbarContextMenu1 = new System.Windows.Forms.ContextMenu(); + this.openConnectionToolbarMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem91 = new System.Windows.Forms.MenuItem(); + this.quickConnectToolbarMenuItem = new System.Windows.Forms.MenuItem(); + this.actionContextToolbarMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem94 = new System.Windows.Forms.MenuItem(); + this.infoToolbarMenuItem = new System.Windows.Forms.MenuItem(); + this.refreshToolbarMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem97 = new System.Windows.Forms.MenuItem(); + this.editToolbarMenuItem = new System.Windows.Forms.MenuItem(); + this.openInWebBrowserToolbarMenuItem = new System.Windows.Forms.MenuItem(); + this.openInTerminalToolbarMenuItem = new System.Windows.Forms.MenuItem(); + this.newFolderToolbarMenuItem = new System.Windows.Forms.MenuItem(); + this.deleteToolbarMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem102 = new System.Windows.Forms.MenuItem(); + this.downloadToolbarMenuItem = new System.Windows.Forms.MenuItem(); + this.uploadToolbarMenuItem = new System.Windows.Forms.MenuItem(); + this.transfersToolbarMenuItem = new System.Windows.Forms.MenuItem(); + this.logToolbarMenuItem = new System.Windows.Forms.MenuItem(); + this.browserContextMenu = new System.Windows.Forms.ContextMenu(); + this.refreshBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem44 = new System.Windows.Forms.MenuItem(); + this.newFolderBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.newFileBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.newSymlinkBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.renameBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.duplicateFileBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem96 = new System.Windows.Forms.MenuItem(); + this.copyUrlBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.openUrlBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.editBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.infoBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem105 = new System.Windows.Forms.MenuItem(); + this.downloadBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.downloadAsBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.downloadToBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.uploadBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.synchronizeBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem101 = new System.Windows.Forms.MenuItem(); + this.deleteBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.revertBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem110 = new System.Windows.Forms.MenuItem(); + this.createArchiveBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.expandArchiveBrowserContextMnuItem = new System.Windows.Forms.MenuItem(); + this.menuItem113 = new System.Windows.Forms.MenuItem(); + this.newBrowserBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.newBookmarkBrowserContextMenuItem = new System.Windows.Forms.MenuItem(); + this.bookmarkContextMenu = new System.Windows.Forms.ContextMenu(); + this.connectBookmarkContextMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem5 = new System.Windows.Forms.MenuItem(); + this.newBookmarkContextMenuItem = new System.Windows.Forms.MenuItem(); + this.deleteBookmarkContextMenuItem = new System.Windows.Forms.MenuItem(); + this.editBookmarkContextMenuItem = new System.Windows.Forms.MenuItem(); + this.duplicateBookmarkContextMenuItem = new System.Windows.Forms.MenuItem(); + this.menuItem8 = new System.Windows.Forms.MenuItem(); + this.menuItem9 = new System.Windows.Forms.MenuItem(); + this.sortByNicknameBookmarkContextMenuItem = new System.Windows.Forms.MenuItem(); + this.sortByHostnameBookmarkContextMenuItem = new System.Windows.Forms.MenuItem(); + this.sortByProtocolBookmarkContextMenuItem = new System.Windows.Forms.MenuItem(); + this.statusStrip.SuspendLayout(); + this.menuStrip1.SuspendLayout(); + this.toolbarContextMenu.SuspendLayout(); + this.editorMenuStrip.SuspendLayout(); + this.toolBar.SuspendLayout(); + this.contextMenuStrip.SuspendLayout(); + this.toolStripContainer1.BottomToolStripPanel.SuspendLayout(); + this.toolStripContainer1.ContentPanel.SuspendLayout(); + this.toolStripContainer1.TopToolStripPanel.SuspendLayout(); + this.toolStripContainer1.SuspendLayout(); + this.panelManager1.SuspendLayout(); + this.managedBrowserPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); + this.splitContainer.Panel1.SuspendLayout(); + this.splitContainer.Panel2.SuspendLayout(); + this.splitContainer.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.browser)).BeginInit(); + this.managedBookmarkPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.bookmarkListView)).BeginInit(); + this.actionToolStrip.SuspendLayout(); + this.viewPanel.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.viewToolStrip.SuspendLayout(); + this.bookmarkContextMenuStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.vistaMenu1)).BeginInit(); + this.SuspendLayout(); + // + // mainMenu + // + this.mainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.menuItem1, + this.mainMenuItem2, + this.menuItem39, + this.menuItem50, + this.menuItem64, + this.menuItem75, + this.menuItem80}); + // + // menuItem1 + // + this.menuItem1.Index = 0; + this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.newBrowserMainMenuItem, + this.openConnectionMainMenuItem, + this.menuItem4, + this.newDownloadMainMenuItem, + this.menuItem6, + this.newFolderMainMenuItem, + this.newFileMainMenuItem, + this.newSymbolicLinkMainMenuItem, + this.renameMainMenuItem, + this.duplicateMainMenuItem, + this.menuItem11, + this.openUrlMainMenuItem, + this.editMainMenuItem, + this.infoMainMenuItem, + this.menuItem2, + this.downloadMainMenuItem, + this.downloadAsMainMenuItem, + this.downloadToMainMenuItem, + this.uploadMainMenuItem, + this.synchronizeMainMenuItem, + this.menuItem21, + this.deleteMainMenuItem, + this.revertMainMenuItem, + this.menuItem24, + this.createArchiveMainMenuItem, + this.expandArchiveMainMenuItem, + this.menuItem27, + this.printMainMenuItem, + this.menuItem29, + this.exitMainMenuItem}); + this.menuItem1.Text = "&File"; + // + // newBrowserMainMenuItem + // + this.newBrowserMainMenuItem.Index = 0; + this.newBrowserMainMenuItem.Text = "New Browser"; + // + // openConnectionMainMenuItem + // + this.openConnectionMainMenuItem.Index = 1; + this.openConnectionMainMenuItem.Text = "Open Connection…"; + // + // menuItem4 + // + this.menuItem4.Index = 2; + this.menuItem4.Text = "-"; + // + // newDownloadMainMenuItem + // + this.newDownloadMainMenuItem.Index = 3; + this.newDownloadMainMenuItem.Text = "New Download"; + // + // menuItem6 + // + this.menuItem6.Index = 4; + this.menuItem6.Text = "-"; + // + // newFolderMainMenuItem + // + this.newFolderMainMenuItem.Index = 5; + this.newFolderMainMenuItem.Text = "New Folder…"; + // + // newFileMainMenuItem + // + this.newFileMainMenuItem.Index = 6; + this.newFileMainMenuItem.Text = "New File…"; + // + // newSymbolicLinkMainMenuItem + // + this.newSymbolicLinkMainMenuItem.Index = 7; + this.newSymbolicLinkMainMenuItem.Text = "New Symbolic Link…"; + // + // renameMainMenuItem + // + this.renameMainMenuItem.Index = 8; + this.renameMainMenuItem.Text = "Rename…"; + // + // duplicateMainMenuItem + // + this.duplicateMainMenuItem.Index = 9; + this.duplicateMainMenuItem.Text = "Duplicate…"; + // + // menuItem11 + // + this.menuItem11.Index = 10; + this.menuItem11.Text = "-"; + // + // openUrlMainMenuItem + // + this.openUrlMainMenuItem.Index = 11; + this.openUrlMainMenuItem.Text = "Open URL"; + // + // editMainMenuItem + // + this.editMainMenuItem.Index = 12; + this.editMainMenuItem.Text = "Edit With"; + // + // infoMainMenuItem + // + this.infoMainMenuItem.Index = 13; + this.infoMainMenuItem.Text = "Info"; + // + // menuItem2 + // + this.menuItem2.Index = 14; + this.menuItem2.Text = "-"; + // + // downloadMainMenuItem + // + this.downloadMainMenuItem.Index = 15; + this.downloadMainMenuItem.Text = "Download"; + // + // downloadAsMainMenuItem + // + this.downloadAsMainMenuItem.Index = 16; + this.downloadAsMainMenuItem.Text = "Download As…"; + // + // downloadToMainMenuItem + // + this.downloadToMainMenuItem.Index = 17; + this.downloadToMainMenuItem.Text = "Download To…"; + // + // uploadMainMenuItem + // + this.uploadMainMenuItem.Index = 18; + this.uploadMainMenuItem.Text = "Upload…"; + // + // synchronizeMainMenuItem + // + this.synchronizeMainMenuItem.Index = 19; + this.synchronizeMainMenuItem.Text = "Synchronize…"; + // + // menuItem21 + // + this.menuItem21.Index = 20; + this.menuItem21.Text = "-"; + // + // deleteMainMenuItem + // + this.deleteMainMenuItem.Index = 21; + this.deleteMainMenuItem.Text = "Delete"; + // + // revertMainMenuItem + // + this.revertMainMenuItem.Index = 22; + this.revertMainMenuItem.Text = "Revert"; + // + // menuItem24 + // + this.menuItem24.Index = 23; + this.menuItem24.Text = "-"; + // + // createArchiveMainMenuItem + // + this.createArchiveMainMenuItem.Index = 24; + this.createArchiveMainMenuItem.Text = "Create Archive"; + // + // expandArchiveMainMenuItem + // + this.expandArchiveMainMenuItem.Index = 25; + this.expandArchiveMainMenuItem.Text = "Expand Archive"; + // + // menuItem27 + // + this.menuItem27.Index = 26; + this.menuItem27.Text = "-"; + // + // printMainMenuItem + // + this.printMainMenuItem.Enabled = false; + this.printMainMenuItem.Index = 27; + this.printMainMenuItem.Text = "Print…"; + // + // menuItem29 + // + this.menuItem29.Index = 28; + this.menuItem29.Text = "-"; + // + // exitMainMenuItem + // + this.exitMainMenuItem.Index = 29; + this.exitMainMenuItem.Text = "Exit"; + // + // mainMenuItem2 + // + this.mainMenuItem2.Index = 1; + this.mainMenuItem2.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.cutMainMenuItem, + this.copyMainMenuItem, + this.copyUrlMainMenuItem, + this.pasteMainMenuItem, + this.selectAllMainMenuItem, + this.menuItem37, + this.preferencesMainMenuItem}); + this.mainMenuItem2.Text = "&Edit"; + // + // cutMainMenuItem + // + this.cutMainMenuItem.Index = 0; + this.cutMainMenuItem.Text = "Cut"; + // + // copyMainMenuItem + // + this.copyMainMenuItem.Index = 1; + this.copyMainMenuItem.Text = "Copy"; + // + // copyUrlMainMenuItem + // + this.copyUrlMainMenuItem.Index = 2; + this.copyUrlMainMenuItem.Text = "Copy URL"; + // + // pasteMainMenuItem + // + this.pasteMainMenuItem.Index = 3; + this.pasteMainMenuItem.Text = "Paste"; + // + // selectAllMainMenuItem + // + this.selectAllMainMenuItem.Index = 4; + this.selectAllMainMenuItem.Text = "Select All"; + // + // menuItem37 + // + this.menuItem37.Index = 5; + this.menuItem37.Text = "-"; + // + // preferencesMainMenuItem + // + this.preferencesMainMenuItem.Index = 6; + this.preferencesMainMenuItem.Text = "Preferences…"; + // + // menuItem39 + // + this.menuItem39.Index = 2; + this.menuItem39.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.toggleToolbarMainMenuItem, + this.customizeToolbarMainMenuItem, + this.menuItem43, + this.columnMainMenuItem, + this.menuItem45, + this.showHiddenFilesMainMenuItem, + this.textEncodingMainMenuItem, + this.menuItem48, + this.toggleLogDrawerMainMenuItem}); + this.menuItem39.Text = "&View"; + // + // toggleToolbarMainMenuItem + // + this.toggleToolbarMainMenuItem.Index = 0; + this.toggleToolbarMainMenuItem.Text = "Hide Toolbar"; + // + // customizeToolbarMainMenuItem + // + this.customizeToolbarMainMenuItem.Index = 1; + this.customizeToolbarMainMenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.menuItem42}); + this.customizeToolbarMainMenuItem.Text = "Customize Toolbar…"; + this.customizeToolbarMainMenuItem.Popup += new System.EventHandler(this.customizeToolbarMenuItem_Popup); + // + // menuItem42 + // + this.menuItem42.Index = 0; + this.menuItem42.Text = "noch"; + // + // menuItem43 + // + this.menuItem43.Index = 2; + this.menuItem43.Text = "-"; + // + // columnMainMenuItem + // + this.columnMainMenuItem.Index = 3; + this.columnMainMenuItem.Text = "Column"; + this.columnMainMenuItem.Popup += new System.EventHandler(this.columnMenuItem_Popup); + // + // menuItem45 + // + this.menuItem45.Index = 4; + this.menuItem45.Text = "-"; + // + // showHiddenFilesMainMenuItem + // + this.showHiddenFilesMainMenuItem.Index = 5; + this.showHiddenFilesMainMenuItem.Text = "Show Hidden Files"; + // + // textEncodingMainMenuItem + // + this.textEncodingMainMenuItem.Index = 6; + this.textEncodingMainMenuItem.Text = "Text Encoding"; + // + // menuItem48 + // + this.menuItem48.Index = 7; + this.menuItem48.Text = "-"; + // + // toggleLogDrawerMainMenuItem + // + this.toggleLogDrawerMainMenuItem.Index = 8; + this.toggleLogDrawerMainMenuItem.Text = "Toggle Log Drawer"; + // + // menuItem50 + // + this.menuItem50.Index = 3; + this.menuItem50.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.refreshMainMenuItem, + this.menuItem52, + this.goToFolderMainMenuItem, + this.backMainMenuItem, + this.forwardMainMenuItem, + this.enclosingFolderMainMenuItem, + this.insideMainMenuItem, + this.searchMainMenuItem, + this.menuItem59, + this.sendCommandMainMenuItem, + this.openInTerminalMainMenuItem, + this.menuItem61, + this.stopMainMenuItem, + this.disconnectMainMenuItem}); + this.menuItem50.Text = "&Go"; + // + // refreshMainMenuItem + // + this.refreshMainMenuItem.Index = 0; + this.refreshMainMenuItem.Text = "Refresh"; + // + // menuItem52 + // + this.menuItem52.Index = 1; + this.menuItem52.Text = "-"; + // + // goToFolderMainMenuItem + // + this.goToFolderMainMenuItem.Index = 2; + this.goToFolderMainMenuItem.Text = "Go to Folder…"; + // + // backMainMenuItem + // + this.backMainMenuItem.Index = 3; + this.backMainMenuItem.Text = "Back"; + // + // forwardMainMenuItem + // + this.forwardMainMenuItem.Index = 4; + this.forwardMainMenuItem.Text = "Forward"; + // + // enclosingFolderMainMenuItem + // + this.enclosingFolderMainMenuItem.Index = 5; + this.enclosingFolderMainMenuItem.Text = "Enclosing Folder"; + // + // insideMainMenuItem + // + this.insideMainMenuItem.Index = 6; + this.insideMainMenuItem.Text = "Inside"; + // + // searchMainMenuItem + // + this.searchMainMenuItem.Index = 7; + this.searchMainMenuItem.Text = "Search…"; + // + // menuItem59 + // + this.menuItem59.Index = 8; + this.menuItem59.Text = "-"; + // + // sendCommandMainMenuItem + // + this.sendCommandMainMenuItem.Index = 9; + this.sendCommandMainMenuItem.Text = "Send Command…"; + // + // openInTerminalMainMenuItem + // + this.openInTerminalMainMenuItem.Index = 10; + this.openInTerminalMainMenuItem.Text = "Open in Terminal"; + // + // menuItem61 + // + this.menuItem61.Index = 11; + this.menuItem61.Text = "-"; + // + // stopMainMenuItem + // + this.stopMainMenuItem.Index = 12; + this.stopMainMenuItem.Text = "Stop"; + // + // disconnectMainMenuItem + // + this.disconnectMainMenuItem.Index = 13; + this.disconnectMainMenuItem.Text = "Disconnect"; + // + // menuItem64 + // + this.menuItem64.Index = 4; + this.menuItem64.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.toggleBookmarksMainMenuItem, + this.menuItem3, + this.menuItem66, + this.newBookmarkMainMenuItem, + this.deleteBookmarkMainMenuItem, + this.editBookmarkMainMenuItem, + this.duplicateBookmarkMainMenuItem, + this.menuItem71, + this.historyMainMenuItem, + this.bonjourMainMenuItem, + this.menuItem74}); + this.menuItem64.Text = "&Bookmark"; + // + // toggleBookmarksMainMenuItem + // + this.toggleBookmarksMainMenuItem.Index = 0; + this.toggleBookmarksMainMenuItem.Text = "Toggle Bookmarks"; + // + // menuItem3 + // + this.menuItem3.Index = 1; + this.menuItem3.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.sortByNicknameMainMenuItem, + this.sortByHostnameMainMenuItem, + this.sortByProtocolMainMenuItem}); + this.menuItem3.Text = "Sort By"; + // + // sortByNicknameMainMenuItem + // + this.sortByNicknameMainMenuItem.Index = 0; + this.sortByNicknameMainMenuItem.Text = "Nickname"; + // + // sortByHostnameMainMenuItem + // + this.sortByHostnameMainMenuItem.Index = 1; + this.sortByHostnameMainMenuItem.Text = "Hostname"; + // + // sortByProtocolMainMenuItem + // + this.sortByProtocolMainMenuItem.Index = 2; + this.sortByProtocolMainMenuItem.Text = "Protocol"; + // + // menuItem66 + // + this.menuItem66.Index = 2; + this.menuItem66.Text = "-"; + // + // newBookmarkMainMenuItem + // + this.newBookmarkMainMenuItem.Index = 3; + this.newBookmarkMainMenuItem.Text = "New Bookmark"; + // + // deleteBookmarkMainMenuItem + // + this.deleteBookmarkMainMenuItem.Index = 4; + this.deleteBookmarkMainMenuItem.Text = "Delete Bookmark"; + // + // editBookmarkMainMenuItem + // + this.editBookmarkMainMenuItem.Index = 5; + this.editBookmarkMainMenuItem.Text = "Edit Bookmark"; + // + // duplicateBookmarkMainMenuItem + // + this.duplicateBookmarkMainMenuItem.Index = 6; + this.duplicateBookmarkMainMenuItem.Text = "Duplicate Bookmark"; + // + // menuItem71 + // + this.menuItem71.Index = 7; + this.menuItem71.Text = "-"; + // + // historyMainMenuItem + // + this.historyMainMenuItem.Index = 8; + this.historyMainMenuItem.Text = "History"; + // + // bonjourMainMenuItem + // + this.bonjourMainMenuItem.Index = 9; + this.bonjourMainMenuItem.Text = "Bonjour"; + // + // menuItem74 + // + this.menuItem74.Index = 10; + this.menuItem74.Text = "-"; + // + // menuItem75 + // + this.menuItem75.Index = 5; + this.menuItem75.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.minimizeMainMenuItem, + this.menuItem77, + this.transfersMainMenuItem, + this.activityMainMenuItem}); + this.menuItem75.Text = "&Window"; + // + // minimizeMainMenuItem + // + this.minimizeMainMenuItem.Index = 0; + this.minimizeMainMenuItem.Text = "Minimize"; + // + // menuItem77 + // + this.menuItem77.Index = 1; + this.menuItem77.Text = "-"; + // + // transfersMainMenuItem + // + this.transfersMainMenuItem.Index = 2; + this.transfersMainMenuItem.Text = "Transfers"; + // + // activityMainMenuItem + // + this.activityMainMenuItem.Index = 3; + this.activityMainMenuItem.Text = "Activity"; + // + // menuItem80 + // + this.menuItem80.Index = 6; + this.menuItem80.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.helpMainMenuItem, + this.licenseMainMenuItem, + this.acknowledgmentsMainMenuItem, + this.menuItem84, + this.bugMainMenuItem, + this.menuItem86, + this.updateMainMenuItem, + this.menuItem88, + this.donateMainMenuItem, + this.keyMainMenuItem, + this.menuItem7, + this.aboutMainMenuItem}); + this.menuItem80.Text = "&Help"; + // + // helpMainMenuItem + // + this.helpMainMenuItem.Index = 0; + this.helpMainMenuItem.Text = "Cyberduck Help"; + // + // licenseMainMenuItem + // + this.licenseMainMenuItem.Index = 1; + this.licenseMainMenuItem.Text = "License"; + // + // acknowledgmentsMainMenuItem + // + this.acknowledgmentsMainMenuItem.Index = 2; + this.acknowledgmentsMainMenuItem.Text = "Acknowledgments"; + // + // menuItem84 + // + this.menuItem84.Index = 3; + this.menuItem84.Text = "-"; + // + // bugMainMenuItem + // + this.bugMainMenuItem.Index = 4; + this.bugMainMenuItem.Text = "Report a Bug"; + // + // menuItem86 + // + this.menuItem86.Index = 5; + this.menuItem86.Text = "-"; + // + // updateMainMenuItem + // + this.updateMainMenuItem.Index = 6; + this.updateMainMenuItem.Text = "Check for Update…"; + // + // menuItem88 + // + this.menuItem88.Index = 7; + this.menuItem88.Text = "-"; + // + // donateMainMenuItem + // + this.donateMainMenuItem.Index = 8; + this.donateMainMenuItem.Text = "Donate…"; + // + // keyMainMenuItem + // + this.keyMainMenuItem.Index = 9; + this.keyMainMenuItem.Text = "Registered to…"; + // + // menuItem7 + // + this.menuItem7.Index = 10; + this.menuItem7.Text = "-"; + // + // aboutMainMenuItem + // + this.aboutMainMenuItem.Index = 11; + this.aboutMainMenuItem.Text = "About Cyberduck"; + // + // statusStrip + // + this.statusStrip.Dock = System.Windows.Forms.DockStyle.None; + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripProgress, + this.statusLabel, + this.securityToolStripStatusLabel}); + this.statusStrip.Location = new System.Drawing.Point(0, 0); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Padding = new System.Windows.Forms.Padding(1, 0, 16, 0); + this.statusStrip.Size = new System.Drawing.Size(1028, 22); + this.statusStrip.TabIndex = 9; + // + // toolStripProgress + // + this.toolStripProgress.AutoSize = false; + this.toolStripProgress.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; + this.toolStripProgress.Margin = new System.Windows.Forms.Padding(2, 3, 0, 2); + this.toolStripProgress.Name = "toolStripProgress"; + this.toolStripProgress.Size = new System.Drawing.Size(16, 17); + // + // statusLabel + // + this.statusLabel.Name = "statusLabel"; + this.statusLabel.Size = new System.Drawing.Size(970, 17); + this.statusLabel.Spring = true; + this.statusLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // securityToolStripStatusLabel + // + this.securityToolStripStatusLabel.Image = global::Ch.Cyberduck.ResourcesBundle.locked; + this.securityToolStripStatusLabel.Name = "securityToolStripStatusLabel"; + this.securityToolStripStatusLabel.Padding = new System.Windows.Forms.Padding(0, 0, 7, 0); + this.securityToolStripStatusLabel.Size = new System.Drawing.Size(23, 17); + this.securityToolStripStatusLabel.Click += new System.EventHandler(this.securityToolStripStatusLabel_Click); + // + // menuStrip1 + // + this.menuStrip1.Dock = System.Windows.Forms.DockStyle.None; + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.editToolStripMenuItem, + this.viewToolStripMenuItem, + this.goToolStripMenuItem, + this.bookmarkToolStripMenuItem, + this.windowToolStripMenuItem, + this.helpToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 56); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Padding = new System.Windows.Forms.Padding(7, 2, 0, 2); + this.menuStrip1.Size = new System.Drawing.Size(343, 24); + this.menuStrip1.TabIndex = 12; + this.menuStrip1.Text = "menuStrip1"; + this.menuStrip1.Visible = false; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newBrowserToolStripMenuItem, + this.openConnectionToolStripMenuItem, + this.toolStripSeparator7, + this.newDownloadToolStripMenuItem, + this.toolStripSeparator8, + this.newFolderToolStripMenuItem, + this.newFileToolStripMenuItem, + this.renameFileToolStripMenuItem, + this.duplicateFileToolStripMenuItem, + this.toolStripSeparator9, + this.openWebURLToolStripMenuItem, + this.editWithToolStripMenuItem, + this.infoToolStripMenuItem, + this.toolStripSeparator10, + this.downloadToolStripMenuItem, + this.downloadAsToolStripMenuItem, + this.downloadToToolStripMenuItem, + this.uploadToolStripMenuItem, + this.synchronizeToolStripMenuItem, + this.toolStripSeparator25, + this.deleteToolStripMenuItem, + this.revertToolStripMenuItem, + this.toolStripSeparator11, + this.createArchiveToolStripMenuItem, + this.expandArchiveToolStripMenuItem, + this.toolStripSeparator12, + this.printToolStripMenuItem, + this.toolStripSeparator35, + this.exitToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "&File"; + // + // newBrowserToolStripMenuItem + // + this.newBrowserToolStripMenuItem.Name = "newBrowserToolStripMenuItem"; + this.newBrowserToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.newBrowserToolStripMenuItem.Text = "New Browser"; + // + // openConnectionToolStripMenuItem + // + this.openConnectionToolStripMenuItem.Name = "openConnectionToolStripMenuItem"; + this.openConnectionToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.openConnectionToolStripMenuItem.Text = "Open Connection…"; + // + // toolStripSeparator7 + // + this.toolStripSeparator7.Name = "toolStripSeparator7"; + this.toolStripSeparator7.Size = new System.Drawing.Size(174, 6); + // + // newDownloadToolStripMenuItem + // + this.newDownloadToolStripMenuItem.Enabled = false; + this.newDownloadToolStripMenuItem.Name = "newDownloadToolStripMenuItem"; + this.newDownloadToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.newDownloadToolStripMenuItem.Text = "New Download"; + // + // toolStripSeparator8 + // + this.toolStripSeparator8.Name = "toolStripSeparator8"; + this.toolStripSeparator8.Size = new System.Drawing.Size(174, 6); + // + // newFolderToolStripMenuItem + // + this.newFolderToolStripMenuItem.Name = "newFolderToolStripMenuItem"; + this.newFolderToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.newFolderToolStripMenuItem.Text = "New Folder…"; + // + // newFileToolStripMenuItem + // + this.newFileToolStripMenuItem.Name = "newFileToolStripMenuItem"; + this.newFileToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.newFileToolStripMenuItem.Text = "New File…"; + // + // renameFileToolStripMenuItem + // + this.renameFileToolStripMenuItem.Name = "renameFileToolStripMenuItem"; + this.renameFileToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.renameFileToolStripMenuItem.Text = "Rename…"; + // + // duplicateFileToolStripMenuItem + // + this.duplicateFileToolStripMenuItem.Name = "duplicateFileToolStripMenuItem"; + this.duplicateFileToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.duplicateFileToolStripMenuItem.Text = "Duplicate…"; + // + // toolStripSeparator9 + // + this.toolStripSeparator9.Name = "toolStripSeparator9"; + this.toolStripSeparator9.Size = new System.Drawing.Size(174, 6); + // + // openWebURLToolStripMenuItem + // + this.openWebURLToolStripMenuItem.Name = "openWebURLToolStripMenuItem"; + this.openWebURLToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.openWebURLToolStripMenuItem.Text = "Open Web URL"; + // + // editWithToolStripMenuItem + // + this.editWithToolStripMenuItem.Name = "editWithToolStripMenuItem"; + this.editWithToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.editWithToolStripMenuItem.Text = "Edit"; + // + // infoToolStripMenuItem + // + this.infoToolStripMenuItem.Name = "infoToolStripMenuItem"; + this.infoToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.infoToolStripMenuItem.Text = "Info"; + // + // toolStripSeparator10 + // + this.toolStripSeparator10.Name = "toolStripSeparator10"; + this.toolStripSeparator10.Size = new System.Drawing.Size(174, 6); + // + // downloadToolStripMenuItem + // + this.downloadToolStripMenuItem.Name = "downloadToolStripMenuItem"; + this.downloadToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.downloadToolStripMenuItem.Text = "Download"; + // + // downloadAsToolStripMenuItem + // + this.downloadAsToolStripMenuItem.Name = "downloadAsToolStripMenuItem"; + this.downloadAsToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.downloadAsToolStripMenuItem.Text = "Download As…"; + // + // downloadToToolStripMenuItem + // + this.downloadToToolStripMenuItem.Name = "downloadToToolStripMenuItem"; + this.downloadToToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.downloadToToolStripMenuItem.Text = "Download To…"; + // + // uploadToolStripMenuItem + // + this.uploadToolStripMenuItem.Name = "uploadToolStripMenuItem"; + this.uploadToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.uploadToolStripMenuItem.Text = "Upload…"; + // + // synchronizeToolStripMenuItem + // + this.synchronizeToolStripMenuItem.Name = "synchronizeToolStripMenuItem"; + this.synchronizeToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.synchronizeToolStripMenuItem.Text = "Synchronize…"; + // + // toolStripSeparator25 + // + this.toolStripSeparator25.Name = "toolStripSeparator25"; + this.toolStripSeparator25.Size = new System.Drawing.Size(174, 6); + // + // deleteToolStripMenuItem + // + this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; + this.deleteToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.deleteToolStripMenuItem.Text = "Delete"; + // + // revertToolStripMenuItem + // + this.revertToolStripMenuItem.Name = "revertToolStripMenuItem"; + this.revertToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.revertToolStripMenuItem.Text = "Revert"; + // + // toolStripSeparator11 + // + this.toolStripSeparator11.Name = "toolStripSeparator11"; + this.toolStripSeparator11.Size = new System.Drawing.Size(174, 6); + // + // createArchiveToolStripMenuItem + // + this.createArchiveToolStripMenuItem.DropDown = this.archiveMenuStrip; + this.createArchiveToolStripMenuItem.Name = "createArchiveToolStripMenuItem"; + this.createArchiveToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.createArchiveToolStripMenuItem.Text = "Create Archive"; + // + // archiveMenuStrip + // + this.archiveMenuStrip.Name = "archiveMenuStrip"; + this.archiveMenuStrip.OwnerItem = this.createArchiveContextToolStripMenuItem; + this.archiveMenuStrip.Size = new System.Drawing.Size(61, 4); + // + // expandArchiveToolStripMenuItem + // + this.expandArchiveToolStripMenuItem.Name = "expandArchiveToolStripMenuItem"; + this.expandArchiveToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.expandArchiveToolStripMenuItem.Text = "Expand Archive"; + // + // toolStripSeparator12 + // + this.toolStripSeparator12.Name = "toolStripSeparator12"; + this.toolStripSeparator12.Size = new System.Drawing.Size(174, 6); + // + // printToolStripMenuItem + // + this.printToolStripMenuItem.Enabled = false; + this.printToolStripMenuItem.Name = "printToolStripMenuItem"; + this.printToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.printToolStripMenuItem.Text = "Print…"; + // + // toolStripSeparator35 + // + this.toolStripSeparator35.Name = "toolStripSeparator35"; + this.toolStripSeparator35.Size = new System.Drawing.Size(174, 6); + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.exitToolStripMenuItem.Text = "Exit"; + // + // editToolStripMenuItem + // + this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.cutToolStripMenuItem, + this.copyToolStripMenuItem, + this.copyURLToolStripMenuItem, + this.pasteToolStripMenuItem, + this.selectAllToolStripMenuItem, + this.toolStripSeparator14, + this.preferencesToolStripMenuItem}); + this.editToolStripMenuItem.Name = "editToolStripMenuItem"; + this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20); + this.editToolStripMenuItem.Text = "&Edit"; + // + // cutToolStripMenuItem + // + this.cutToolStripMenuItem.Enabled = false; + this.cutToolStripMenuItem.Name = "cutToolStripMenuItem"; + this.cutToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.cutToolStripMenuItem.Text = "Cut"; + // + // copyToolStripMenuItem + // + this.copyToolStripMenuItem.Enabled = false; + this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; + this.copyToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.copyToolStripMenuItem.Text = "Copy"; + // + // copyURLToolStripMenuItem + // + this.copyURLToolStripMenuItem.Enabled = false; + this.copyURLToolStripMenuItem.Name = "copyURLToolStripMenuItem"; + this.copyURLToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.copyURLToolStripMenuItem.Text = "Copy URL"; + // + // pasteToolStripMenuItem + // + this.pasteToolStripMenuItem.Enabled = false; + this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; + this.pasteToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.pasteToolStripMenuItem.Text = "Paste"; + // + // selectAllToolStripMenuItem + // + this.selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem"; + this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.selectAllToolStripMenuItem.Text = "Select All"; + // + // toolStripSeparator14 + // + this.toolStripSeparator14.Name = "toolStripSeparator14"; + this.toolStripSeparator14.Size = new System.Drawing.Size(141, 6); + // + // preferencesToolStripMenuItem + // + this.preferencesToolStripMenuItem.Name = "preferencesToolStripMenuItem"; + this.preferencesToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.preferencesToolStripMenuItem.Text = "Preferences…"; + // + // viewToolStripMenuItem + // + this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toggleToolbarToolStripMenuItem, + this.toolbarToolStripMenuItem, + this.toolStripSeparator13, + this.columnToolStripMenuItem, + this.toolStripSeparator34, + this.showHiddenFilesToolStripMenuItem, + this.textEncodingToolStripMenuItem, + this.toolStripSeparator15, + this.toggleLogDrawerToolStripMenuItem}); + this.viewToolStripMenuItem.Name = "viewToolStripMenuItem"; + this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.viewToolStripMenuItem.Text = "&View"; + // + // toggleToolbarToolStripMenuItem + // + this.toggleToolbarToolStripMenuItem.Name = "toggleToolbarToolStripMenuItem"; + this.toggleToolbarToolStripMenuItem.Size = new System.Drawing.Size(183, 22); + this.toggleToolbarToolStripMenuItem.Text = "Hide Toolbar"; + // + // toolbarToolStripMenuItem + // + this.toolbarToolStripMenuItem.DropDown = this.toolbarContextMenu; + this.toolbarToolStripMenuItem.Name = "toolbarToolStripMenuItem"; + this.toolbarToolStripMenuItem.Size = new System.Drawing.Size(183, 22); + this.toolbarToolStripMenuItem.Text = "Customize Toolbar…"; + // + // toolbarContextMenu + // + this.toolbarContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.openConnectionToolStripMenuItem1, + this.toolStripSeparator30, + this.quickConnectToolStripMenuItem, + this.actionToolStripMenuItem, + this.toolStripSeparator31, + this.infoToolStripMenuItem1, + this.refreshToolStripMenuItem1, + this.toolStripSeparator32, + this.editToolStripMenuItem1, + this.openInWebBrowserToolStripMenuItem, + this.openInTerminalToolStripMenuItem, + this.newFolderToolStripMenuItem1, + this.deleteToolStripMenuItem1, + this.toolStripSeparator33, + this.downloadToolStripMenuItem1, + this.uploadToolStripMenuItem1, + this.transfersToolStripMenuItem1, + this.logToolStripMenuItem1}); + this.toolbarContextMenu.Name = "toolbarContextMenu"; + this.toolbarContextMenu.Size = new System.Drawing.Size(189, 336); + this.toolbarContextMenu.Closing += new System.Windows.Forms.ToolStripDropDownClosingEventHandler(this.toolbarContextMenu_Closing); + this.toolbarContextMenu.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.toolbarContextMenu_ItemClicked); + // + // openConnectionToolStripMenuItem1 + // + this.openConnectionToolStripMenuItem1.Checked = true; + this.openConnectionToolStripMenuItem1.CheckState = System.Windows.Forms.CheckState.Checked; + this.openConnectionToolStripMenuItem1.Name = "openConnectionToolStripMenuItem1"; + this.openConnectionToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); + this.openConnectionToolStripMenuItem1.Text = "New Connection"; + // + // toolStripSeparator30 + // + this.toolStripSeparator30.Name = "toolStripSeparator30"; + this.toolStripSeparator30.Size = new System.Drawing.Size(185, 6); + // + // quickConnectToolStripMenuItem + // + this.quickConnectToolStripMenuItem.Name = "quickConnectToolStripMenuItem"; + this.quickConnectToolStripMenuItem.Size = new System.Drawing.Size(188, 22); + this.quickConnectToolStripMenuItem.Text = "Quick Connect"; + // + // actionToolStripMenuItem + // + this.actionToolStripMenuItem.Name = "actionToolStripMenuItem"; + this.actionToolStripMenuItem.Size = new System.Drawing.Size(188, 22); + this.actionToolStripMenuItem.Text = "Action"; + // + // toolStripSeparator31 + // + this.toolStripSeparator31.Name = "toolStripSeparator31"; + this.toolStripSeparator31.Size = new System.Drawing.Size(185, 6); + // + // infoToolStripMenuItem1 + // + this.infoToolStripMenuItem1.Name = "infoToolStripMenuItem1"; + this.infoToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); + this.infoToolStripMenuItem1.Text = "Info"; + // + // refreshToolStripMenuItem1 + // + this.refreshToolStripMenuItem1.Name = "refreshToolStripMenuItem1"; + this.refreshToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); + this.refreshToolStripMenuItem1.Text = "Refresh"; + // + // toolStripSeparator32 + // + this.toolStripSeparator32.Name = "toolStripSeparator32"; + this.toolStripSeparator32.Size = new System.Drawing.Size(185, 6); + // + // editToolStripMenuItem1 + // + this.editToolStripMenuItem1.Name = "editToolStripMenuItem1"; + this.editToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); + this.editToolStripMenuItem1.Text = "Edit"; + // + // openInWebBrowserToolStripMenuItem + // + this.openInWebBrowserToolStripMenuItem.Name = "openInWebBrowserToolStripMenuItem"; + this.openInWebBrowserToolStripMenuItem.Size = new System.Drawing.Size(188, 22); + this.openInWebBrowserToolStripMenuItem.Text = "Open in Web Browser"; + // + // openInTerminalToolStripMenuItem + // + this.openInTerminalToolStripMenuItem.Name = "openInTerminalToolStripMenuItem"; + this.openInTerminalToolStripMenuItem.Size = new System.Drawing.Size(188, 22); + this.openInTerminalToolStripMenuItem.Text = "Open in Terminal"; + // + // newFolderToolStripMenuItem1 + // + this.newFolderToolStripMenuItem1.Name = "newFolderToolStripMenuItem1"; + this.newFolderToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); + this.newFolderToolStripMenuItem1.Text = "New Folder"; + // + // deleteToolStripMenuItem1 + // + this.deleteToolStripMenuItem1.Name = "deleteToolStripMenuItem1"; + this.deleteToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); + this.deleteToolStripMenuItem1.Text = "Delete"; + // + // toolStripSeparator33 + // + this.toolStripSeparator33.Name = "toolStripSeparator33"; + this.toolStripSeparator33.Size = new System.Drawing.Size(185, 6); + // + // downloadToolStripMenuItem1 + // + this.downloadToolStripMenuItem1.Name = "downloadToolStripMenuItem1"; + this.downloadToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); + this.downloadToolStripMenuItem1.Text = "Download"; + // + // uploadToolStripMenuItem1 + // + this.uploadToolStripMenuItem1.Name = "uploadToolStripMenuItem1"; + this.uploadToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); + this.uploadToolStripMenuItem1.Text = "Upload"; + // + // transfersToolStripMenuItem1 + // + this.transfersToolStripMenuItem1.Name = "transfersToolStripMenuItem1"; + this.transfersToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); + this.transfersToolStripMenuItem1.Text = "Transfers"; + // + // logToolStripMenuItem1 + // + this.logToolStripMenuItem1.Name = "logToolStripMenuItem1"; + this.logToolStripMenuItem1.Size = new System.Drawing.Size(188, 22); + this.logToolStripMenuItem1.Text = "Log"; + // + // toolStripSeparator13 + // + this.toolStripSeparator13.Name = "toolStripSeparator13"; + this.toolStripSeparator13.Size = new System.Drawing.Size(180, 6); + // + // columnToolStripMenuItem + // + this.columnToolStripMenuItem.DropDown = this.columnContextMenu; + this.columnToolStripMenuItem.Name = "columnToolStripMenuItem"; + this.columnToolStripMenuItem.Size = new System.Drawing.Size(183, 22); + this.columnToolStripMenuItem.Text = "Column"; + // + // columnContextMenu + // + this.columnContextMenu.Name = "columnContextMenu"; + this.columnContextMenu.OwnerItem = this.columnToolStripMenuItem; + this.columnContextMenu.Size = new System.Drawing.Size(61, 4); + this.columnContextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.columnContextMenu_Opening); + // + // toolStripSeparator34 + // + this.toolStripSeparator34.Name = "toolStripSeparator34"; + this.toolStripSeparator34.Size = new System.Drawing.Size(180, 6); + // + // showHiddenFilesToolStripMenuItem + // + this.showHiddenFilesToolStripMenuItem.Name = "showHiddenFilesToolStripMenuItem"; + this.showHiddenFilesToolStripMenuItem.Size = new System.Drawing.Size(183, 22); + this.showHiddenFilesToolStripMenuItem.Text = "Show Hidden Files"; + // + // textEncodingToolStripMenuItem + // + this.textEncodingToolStripMenuItem.DropDown = this.textEncodingMenuStrip; + this.textEncodingToolStripMenuItem.Name = "textEncodingToolStripMenuItem"; + this.textEncodingToolStripMenuItem.Size = new System.Drawing.Size(183, 22); + this.textEncodingToolStripMenuItem.Text = "Text Encoding"; + // + // textEncodingMenuStrip + // + this.textEncodingMenuStrip.Name = "textEncodingMenuStrip"; + this.textEncodingMenuStrip.OwnerItem = this.textEncodingToolStripMenuItem; + this.textEncodingMenuStrip.Size = new System.Drawing.Size(61, 4); + this.textEncodingMenuStrip.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.textEncodingMenuStrip_ItemClicked); + // + // toolStripSeparator15 + // + this.toolStripSeparator15.Name = "toolStripSeparator15"; + this.toolStripSeparator15.Size = new System.Drawing.Size(180, 6); + // + // toggleLogDrawerToolStripMenuItem + // + this.toggleLogDrawerToolStripMenuItem.Name = "toggleLogDrawerToolStripMenuItem"; + this.toggleLogDrawerToolStripMenuItem.Size = new System.Drawing.Size(183, 22); + this.toggleLogDrawerToolStripMenuItem.Text = "Toggle Log Drawer"; + // + // goToolStripMenuItem + // + this.goToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.refreshToolStripMenuItem, + this.toolStripSeparator16, + this.gotoFolderToolStripMenuItem, + this.backToolStripMenuItem, + this.forwardToolStripMenuItem, + this.enclosingFolderToolStripMenuItem, + this.insideToolStripMenuItem, + this.searchToolStripMenuItem, + this.toolStripSeparator17, + this.sendCommandToolStripMenuItem, + this.toolStripSeparator18, + this.stopToolStripMenuItem, + this.disconnectToolStripMenuItem}); + this.goToolStripMenuItem.Name = "goToolStripMenuItem"; + this.goToolStripMenuItem.Size = new System.Drawing.Size(34, 20); + this.goToolStripMenuItem.Text = "&Go"; + // + // refreshToolStripMenuItem + // + this.refreshToolStripMenuItem.Name = "refreshToolStripMenuItem"; + this.refreshToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.refreshToolStripMenuItem.Text = "Refresh"; + // + // toolStripSeparator16 + // + this.toolStripSeparator16.Name = "toolStripSeparator16"; + this.toolStripSeparator16.Size = new System.Drawing.Size(166, 6); + // + // gotoFolderToolStripMenuItem + // + this.gotoFolderToolStripMenuItem.Name = "gotoFolderToolStripMenuItem"; + this.gotoFolderToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.gotoFolderToolStripMenuItem.Text = "Go to Folder…"; + // + // backToolStripMenuItem + // + this.backToolStripMenuItem.Name = "backToolStripMenuItem"; + this.backToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.backToolStripMenuItem.Text = "Back"; + // + // forwardToolStripMenuItem + // + this.forwardToolStripMenuItem.Name = "forwardToolStripMenuItem"; + this.forwardToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.forwardToolStripMenuItem.Text = "Forward"; + // + // enclosingFolderToolStripMenuItem + // + this.enclosingFolderToolStripMenuItem.Name = "enclosingFolderToolStripMenuItem"; + this.enclosingFolderToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.enclosingFolderToolStripMenuItem.Text = "Enclosing Folder"; + // + // insideToolStripMenuItem + // + this.insideToolStripMenuItem.Name = "insideToolStripMenuItem"; + this.insideToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.insideToolStripMenuItem.Text = "Inside"; + // + // searchToolStripMenuItem + // + this.searchToolStripMenuItem.Name = "searchToolStripMenuItem"; + this.searchToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.searchToolStripMenuItem.Text = "Search…"; + // + // toolStripSeparator17 + // + this.toolStripSeparator17.Name = "toolStripSeparator17"; + this.toolStripSeparator17.Size = new System.Drawing.Size(166, 6); + // + // sendCommandToolStripMenuItem + // + this.sendCommandToolStripMenuItem.Enabled = false; + this.sendCommandToolStripMenuItem.Name = "sendCommandToolStripMenuItem"; + this.sendCommandToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.sendCommandToolStripMenuItem.Text = "Send Command…"; + // + // toolStripSeparator18 + // + this.toolStripSeparator18.Name = "toolStripSeparator18"; + this.toolStripSeparator18.Size = new System.Drawing.Size(166, 6); + // + // stopToolStripMenuItem + // + this.stopToolStripMenuItem.Name = "stopToolStripMenuItem"; + this.stopToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.stopToolStripMenuItem.Text = "Stop"; + // + // disconnectToolStripMenuItem + // + this.disconnectToolStripMenuItem.Name = "disconnectToolStripMenuItem"; + this.disconnectToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.disconnectToolStripMenuItem.Text = "Disconnect"; + // + // bookmarkToolStripMenuItem + // + this.bookmarkToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.viewBookmarksToolStripMenuItem, + this.toolStripSeparator1, + this.newBookmarkToolStripMenuItem, + this.deleteBookmarkToolStripMenuItem, + this.editBookmarkToolStripMenuItem, + this.duplicateBookmarkToolStripMenuItem1, + this.toolStripSeparator19, + this.historyToolStripMenuItem, + this.bonjourToolStripMenuItem, + this.toolStripSeparator36}); + this.bookmarkToolStripMenuItem.Name = "bookmarkToolStripMenuItem"; + this.bookmarkToolStripMenuItem.Size = new System.Drawing.Size(73, 20); + this.bookmarkToolStripMenuItem.Text = "&Bookmark"; + this.bookmarkToolStripMenuItem.DropDownOpening += new System.EventHandler(this.bookmarkToolStripMenuItem_DropDownOpening); + // + // viewBookmarksToolStripMenuItem + // + this.viewBookmarksToolStripMenuItem.Name = "viewBookmarksToolStripMenuItem"; + this.viewBookmarksToolStripMenuItem.Size = new System.Drawing.Size(181, 22); + this.viewBookmarksToolStripMenuItem.Text = "Toggle Bookmarks"; + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(178, 6); + // + // newBookmarkToolStripMenuItem + // + this.newBookmarkToolStripMenuItem.Name = "newBookmarkToolStripMenuItem"; + this.newBookmarkToolStripMenuItem.Size = new System.Drawing.Size(181, 22); + this.newBookmarkToolStripMenuItem.Text = "New Bookmark"; + // + // deleteBookmarkToolStripMenuItem + // + this.deleteBookmarkToolStripMenuItem.Name = "deleteBookmarkToolStripMenuItem"; + this.deleteBookmarkToolStripMenuItem.Size = new System.Drawing.Size(181, 22); + this.deleteBookmarkToolStripMenuItem.Text = "Delete Bookmark"; + // + // editBookmarkToolStripMenuItem + // + this.editBookmarkToolStripMenuItem.Name = "editBookmarkToolStripMenuItem"; + this.editBookmarkToolStripMenuItem.Size = new System.Drawing.Size(181, 22); + this.editBookmarkToolStripMenuItem.Text = "Edit Bookmark"; + // + // duplicateBookmarkToolStripMenuItem1 + // + this.duplicateBookmarkToolStripMenuItem1.Name = "duplicateBookmarkToolStripMenuItem1"; + this.duplicateBookmarkToolStripMenuItem1.Size = new System.Drawing.Size(181, 22); + this.duplicateBookmarkToolStripMenuItem1.Text = "Duplicate Bookmark"; + // + // toolStripSeparator19 + // + this.toolStripSeparator19.Name = "toolStripSeparator19"; + this.toolStripSeparator19.Size = new System.Drawing.Size(178, 6); + // + // historyToolStripMenuItem + // + this.historyToolStripMenuItem.DropDown = this.historyMenuStrip; + this.historyToolStripMenuItem.Image = global::Ch.Cyberduck.ResourcesBundle.history; + this.historyToolStripMenuItem.Name = "historyToolStripMenuItem"; + this.historyToolStripMenuItem.Size = new System.Drawing.Size(181, 22); + this.historyToolStripMenuItem.Text = "History"; + // + // historyMenuStrip + // + this.historyMenuStrip.Name = "historyMenuStrip"; + this.historyMenuStrip.OwnerItem = this.historyToolStripMenuItem; + this.historyMenuStrip.Size = new System.Drawing.Size(61, 4); + this.historyMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.historyMenuStrip_Opening); + // + // bonjourToolStripMenuItem + // + this.bonjourToolStripMenuItem.DropDown = this.bonjourMenuStrip; + this.bonjourToolStripMenuItem.Enabled = false; + this.bonjourToolStripMenuItem.Image = global::Ch.Cyberduck.ResourcesBundle.rendezvous; + this.bonjourToolStripMenuItem.Name = "bonjourToolStripMenuItem"; + this.bonjourToolStripMenuItem.Size = new System.Drawing.Size(181, 22); + this.bonjourToolStripMenuItem.Text = "Bonjour"; + // + // bonjourMenuStrip + // + this.bonjourMenuStrip.Name = "bonjourMenuStrip"; + this.bonjourMenuStrip.OwnerItem = this.bonjourToolStripMenuItem; + this.bonjourMenuStrip.Size = new System.Drawing.Size(61, 4); + // + // toolStripSeparator36 + // + this.toolStripSeparator36.Name = "toolStripSeparator36"; + this.toolStripSeparator36.Size = new System.Drawing.Size(178, 6); + // + // windowToolStripMenuItem + // + this.windowToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.minimizeToolStripMenuItem, + this.toolStripSeparator20, + this.transfersToolStripMenuItem, + this.activitiyToolStripMenuItem}); + this.windowToolStripMenuItem.Name = "windowToolStripMenuItem"; + this.windowToolStripMenuItem.Size = new System.Drawing.Size(63, 20); + this.windowToolStripMenuItem.Text = "&Window"; + // + // minimizeToolStripMenuItem + // + this.minimizeToolStripMenuItem.Name = "minimizeToolStripMenuItem"; + this.minimizeToolStripMenuItem.Size = new System.Drawing.Size(123, 22); + this.minimizeToolStripMenuItem.Text = "Minimize"; + // + // toolStripSeparator20 + // + this.toolStripSeparator20.Name = "toolStripSeparator20"; + this.toolStripSeparator20.Size = new System.Drawing.Size(120, 6); + // + // transfersToolStripMenuItem + // + this.transfersToolStripMenuItem.Name = "transfersToolStripMenuItem"; + this.transfersToolStripMenuItem.Size = new System.Drawing.Size(123, 22); + this.transfersToolStripMenuItem.Text = "Transfers"; + // + // activitiyToolStripMenuItem + // + this.activitiyToolStripMenuItem.Enabled = false; + this.activitiyToolStripMenuItem.Name = "activitiyToolStripMenuItem"; + this.activitiyToolStripMenuItem.Size = new System.Drawing.Size(123, 22); + this.activitiyToolStripMenuItem.Text = "Activity"; + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.cyberduckHelpToolStripMenuItem, + this.licenseToolStripMenuItem, + this.acknowledgmentsToolStripMenuItem, + this.toolStripSeparator21, + this.reportABugToolStripMenuItem, + this.toolStripSeparator22, + this.checkToolStripMenuItem, + this.toolStripSeparator28, + this.aboutCyberduckToolStripMenuItem}); + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.helpToolStripMenuItem.Text = "&Help"; + // + // cyberduckHelpToolStripMenuItem + // + this.cyberduckHelpToolStripMenuItem.Name = "cyberduckHelpToolStripMenuItem"; + this.cyberduckHelpToolStripMenuItem.Size = new System.Drawing.Size(175, 22); + this.cyberduckHelpToolStripMenuItem.Text = "Cyberduck Help"; + // + // licenseToolStripMenuItem + // + this.licenseToolStripMenuItem.Name = "licenseToolStripMenuItem"; + this.licenseToolStripMenuItem.Size = new System.Drawing.Size(175, 22); + this.licenseToolStripMenuItem.Text = "License"; + // + // acknowledgmentsToolStripMenuItem + // + this.acknowledgmentsToolStripMenuItem.Name = "acknowledgmentsToolStripMenuItem"; + this.acknowledgmentsToolStripMenuItem.Size = new System.Drawing.Size(175, 22); + this.acknowledgmentsToolStripMenuItem.Text = "Acknowledgments"; + // + // toolStripSeparator21 + // + this.toolStripSeparator21.Name = "toolStripSeparator21"; + this.toolStripSeparator21.Size = new System.Drawing.Size(172, 6); + // + // reportABugToolStripMenuItem + // + this.reportABugToolStripMenuItem.Name = "reportABugToolStripMenuItem"; + this.reportABugToolStripMenuItem.Size = new System.Drawing.Size(175, 22); + this.reportABugToolStripMenuItem.Text = "Report a Bug"; + // + // toolStripSeparator22 + // + this.toolStripSeparator22.Name = "toolStripSeparator22"; + this.toolStripSeparator22.Size = new System.Drawing.Size(172, 6); + // + // checkToolStripMenuItem + // + this.checkToolStripMenuItem.Name = "checkToolStripMenuItem"; + this.checkToolStripMenuItem.Size = new System.Drawing.Size(175, 22); + this.checkToolStripMenuItem.Text = "Check for Update…"; + // + // toolStripSeparator28 + // + this.toolStripSeparator28.Name = "toolStripSeparator28"; + this.toolStripSeparator28.Size = new System.Drawing.Size(172, 6); + // + // aboutCyberduckToolStripMenuItem + // + this.aboutCyberduckToolStripMenuItem.Name = "aboutCyberduckToolStripMenuItem"; + this.aboutCyberduckToolStripMenuItem.Size = new System.Drawing.Size(175, 22); + this.aboutCyberduckToolStripMenuItem.Text = "&About Cyberduck"; + // + // createArchiveContextToolStripMenuItem + // + this.createArchiveContextToolStripMenuItem.DropDown = this.archiveMenuStrip; + this.createArchiveContextToolStripMenuItem.Name = "createArchiveContextToolStripMenuItem"; + this.createArchiveContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.createArchiveContextToolStripMenuItem.Text = "Create Archive"; + // + // editorMenuStrip + // + this.editorMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.editor1ToolStripMenuItem, + this.editor2ToolStripMenuItem}); + this.editorMenuStrip.Name = "editorMenuStrip"; + this.editorMenuStrip.OwnerItem = this.editToolStripSplitButton; + this.editorMenuStrip.Size = new System.Drawing.Size(115, 48); + // + // editor1ToolStripMenuItem + // + this.editor1ToolStripMenuItem.Name = "editor1ToolStripMenuItem"; + this.editor1ToolStripMenuItem.Size = new System.Drawing.Size(114, 22); + this.editor1ToolStripMenuItem.Text = "Editor 1"; + // + // editor2ToolStripMenuItem + // + this.editor2ToolStripMenuItem.Name = "editor2ToolStripMenuItem"; + this.editor2ToolStripMenuItem.Size = new System.Drawing.Size(114, 22); + this.editor2ToolStripMenuItem.Text = "Editor 2"; + // + // editContextToolStripMenuItem + // + this.editContextToolStripMenuItem.DropDown = this.editorMenuStrip; + this.editContextToolStripMenuItem.Name = "editContextToolStripMenuItem"; + this.editContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.editContextToolStripMenuItem.Text = "Edit With"; + // + // editToolStripSplitButton + // + this.editToolStripSplitButton.DropDown = this.editorMenuStrip; + this.editToolStripSplitButton.Image = global::Ch.Cyberduck.ResourcesBundle.pencil; + this.editToolStripSplitButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.editToolStripSplitButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.editToolStripSplitButton.Name = "editToolStripSplitButton"; + this.editToolStripSplitButton.Size = new System.Drawing.Size(48, 53); + this.editToolStripSplitButton.Text = "Edit"; + this.editToolStripSplitButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // toolBar + // + this.toolBar.AutoSize = false; + this.toolBar.ContextMenuStrip = this.toolbarContextMenu; + this.toolBar.Dock = System.Windows.Forms.DockStyle.None; + this.toolBar.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.toolBar.ImageScalingSize = new System.Drawing.Size(32, 32); + this.toolBar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.openConnectionToolStripButton, + this.toolStripSeparatorAfterOpenConnection, + this.quickConnectToolStripComboBox, + this.actionToolStripDropDownButton, + this.toolStripSeparatorAfterAction, + this.infoToolStripButton, + this.refreshToolStripButton, + this.toolStripSeparatorAfterRefresh, + this.editToolStripSplitButton, + this.openInBrowserToolStripButton, + this.openInTerminalToolStripButton, + this.newFolderToolStripButton, + this.deleteToolStripButton, + this.toolStripSeparatorAfterDelete, + this.downloadToolStripButton, + this.uploadToolStripButton, + this.transfersToolStripButton, + this.logToolStripButton, + this.disconnectStripButton}); + this.toolBar.Location = new System.Drawing.Point(0, 0); + this.toolBar.Name = "toolBar"; + this.toolBar.ShowItemToolTips = false; + this.toolBar.Size = new System.Drawing.Size(1028, 56); + this.toolBar.Stretch = true; + this.toolBar.TabIndex = 13; + this.toolBar.Text = "toolStrip1"; + // + // openConnectionToolStripButton + // + this.openConnectionToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.connect; + this.openConnectionToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.openConnectionToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.openConnectionToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.openConnectionToolStripButton.Name = "openConnectionToolStripButton"; + this.openConnectionToolStripButton.Padding = new System.Windows.Forms.Padding(0, 1, 0, 1); + this.openConnectionToolStripButton.Size = new System.Drawing.Size(100, 53); + this.openConnectionToolStripButton.Text = "New Connection"; + this.openConnectionToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // toolStripSeparatorAfterOpenConnection + // + this.toolStripSeparatorAfterOpenConnection.Name = "toolStripSeparatorAfterOpenConnection"; + this.toolStripSeparatorAfterOpenConnection.Size = new System.Drawing.Size(6, 56); + // + // quickConnectToolStripComboBox + // + this.quickConnectToolStripComboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; + this.quickConnectToolStripComboBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; + this.quickConnectToolStripComboBox.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.quickConnectToolStripComboBox.Items.AddRange(new object[] { + "Test1", + "Test2", + "Zest3"}); + this.quickConnectToolStripComboBox.Name = "quickConnectToolStripComboBox"; + this.quickConnectToolStripComboBox.Size = new System.Drawing.Size(180, 56); + this.quickConnectToolStripComboBox.Text = "Quick Connect"; + this.quickConnectToolStripComboBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.toolStripQuickConnect_KeyDown); + // + // actionToolStripDropDownButton + // + this.actionToolStripDropDownButton.DropDown = this.contextMenuStrip; + this.actionToolStripDropDownButton.Image = global::Ch.Cyberduck.ResourcesBundle.advanced; + this.actionToolStripDropDownButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.actionToolStripDropDownButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.actionToolStripDropDownButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.actionToolStripDropDownButton.Name = "actionToolStripDropDownButton"; + this.actionToolStripDropDownButton.Padding = new System.Windows.Forms.Padding(0, 1, 0, 1); + this.actionToolStripDropDownButton.Size = new System.Drawing.Size(55, 53); + this.actionToolStripDropDownButton.Text = "Action"; + this.actionToolStripDropDownButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // contextMenuStrip + // + this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.refreshContextToolStripMenuItem, + this.toolStripSeparator6, + this.newFolderContextToolStripMenuItem, + this.newFileContextToolStripMenuItem, + this.newSymlinkContextToolStripMenuItem, + this.renameContextToolStripMenuItem, + this.duplicateFileContextToolStripMenuItem, + this.toolStripSeparator2, + this.copyURLContextToolStripMenuItem, + this.openURLContextToolStripMenuItem, + this.editContextToolStripMenuItem, + this.infoContextToolStripMenuItem, + this.toolStripSeparator26, + this.downloadContextToolStripMenuItem, + this.downloadAsContextToolStripMenuItem, + this.downloadToContextToolStripMenuItem, + this.uploadContextToolStripMenuItem, + this.synchronizeContextToolStripMenuItem, + this.toolStripSeparator3, + this.deleteContextToolStripMenuItem, + this.revertContxtStripMenuItem, + this.toolStripSeparator4, + this.createArchiveContextToolStripMenuItem, + this.expandArchiveContextToolStripMenuItem, + this.toolStripSeparator5, + this.newBrowserContextToolStripMenuItem, + this.newBookmarkContextToolStripMenuItem}); + this.contextMenuStrip.Name = "contextMenuStrip1"; + this.contextMenuStrip.OwnerItem = this.actionToolStripDropDownButton; + this.contextMenuStrip.Size = new System.Drawing.Size(185, 502); + // + // refreshContextToolStripMenuItem + // + this.refreshContextToolStripMenuItem.Name = "refreshContextToolStripMenuItem"; + this.refreshContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.refreshContextToolStripMenuItem.Text = "Refresh"; + // + // toolStripSeparator6 + // + this.toolStripSeparator6.Name = "toolStripSeparator6"; + this.toolStripSeparator6.Size = new System.Drawing.Size(181, 6); + // + // newFolderContextToolStripMenuItem + // + this.newFolderContextToolStripMenuItem.Name = "newFolderContextToolStripMenuItem"; + this.newFolderContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.newFolderContextToolStripMenuItem.Text = "New Folder…"; + // + // newFileContextToolStripMenuItem + // + this.newFileContextToolStripMenuItem.Name = "newFileContextToolStripMenuItem"; + this.newFileContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.newFileContextToolStripMenuItem.Text = "New File…"; + // + // newSymlinkContextToolStripMenuItem + // + this.newSymlinkContextToolStripMenuItem.Name = "newSymlinkContextToolStripMenuItem"; + this.newSymlinkContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.newSymlinkContextToolStripMenuItem.Text = "New Symbolic Link…"; + // + // renameContextToolStripMenuItem + // + this.renameContextToolStripMenuItem.Name = "renameContextToolStripMenuItem"; + this.renameContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.renameContextToolStripMenuItem.Text = "Rename…"; + // + // duplicateFileContextToolStripMenuItem + // + this.duplicateFileContextToolStripMenuItem.Name = "duplicateFileContextToolStripMenuItem"; + this.duplicateFileContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.duplicateFileContextToolStripMenuItem.Text = "Duplicate…"; + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(181, 6); + // + // copyURLContextToolStripMenuItem + // + this.copyURLContextToolStripMenuItem.Name = "copyURLContextToolStripMenuItem"; + this.copyURLContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.copyURLContextToolStripMenuItem.Text = "Copy URL"; + // + // openURLContextToolStripMenuItem + // + this.openURLContextToolStripMenuItem.Name = "openURLContextToolStripMenuItem"; + this.openURLContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.openURLContextToolStripMenuItem.Text = "Open URL"; + // + // infoContextToolStripMenuItem + // + this.infoContextToolStripMenuItem.Name = "infoContextToolStripMenuItem"; + this.infoContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.infoContextToolStripMenuItem.Text = "Info"; + // + // toolStripSeparator26 + // + this.toolStripSeparator26.Name = "toolStripSeparator26"; + this.toolStripSeparator26.Size = new System.Drawing.Size(181, 6); + // + // downloadContextToolStripMenuItem + // + this.downloadContextToolStripMenuItem.Name = "downloadContextToolStripMenuItem"; + this.downloadContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.downloadContextToolStripMenuItem.Text = "Download"; + // + // downloadAsContextToolStripMenuItem + // + this.downloadAsContextToolStripMenuItem.Name = "downloadAsContextToolStripMenuItem"; + this.downloadAsContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.downloadAsContextToolStripMenuItem.Text = "Download As…"; + // + // downloadToContextToolStripMenuItem + // + this.downloadToContextToolStripMenuItem.Name = "downloadToContextToolStripMenuItem"; + this.downloadToContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.downloadToContextToolStripMenuItem.Text = "Download To…"; + // + // uploadContextToolStripMenuItem + // + this.uploadContextToolStripMenuItem.Name = "uploadContextToolStripMenuItem"; + this.uploadContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.uploadContextToolStripMenuItem.Text = "Upload…"; + // + // synchronizeContextToolStripMenuItem + // + this.synchronizeContextToolStripMenuItem.Name = "synchronizeContextToolStripMenuItem"; + this.synchronizeContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.synchronizeContextToolStripMenuItem.Text = "Synchronize…"; + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(181, 6); + // + // deleteContextToolStripMenuItem + // + this.deleteContextToolStripMenuItem.Name = "deleteContextToolStripMenuItem"; + this.deleteContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.deleteContextToolStripMenuItem.Text = "Delete"; + // + // revertContxtStripMenuItem + // + this.revertContxtStripMenuItem.Name = "revertContxtStripMenuItem"; + this.revertContxtStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.revertContxtStripMenuItem.Text = "Revert"; + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(181, 6); + // + // expandArchiveContextToolStripMenuItem + // + this.expandArchiveContextToolStripMenuItem.Name = "expandArchiveContextToolStripMenuItem"; + this.expandArchiveContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.expandArchiveContextToolStripMenuItem.Text = "Expand Archive"; + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(181, 6); + // + // newBrowserContextToolStripMenuItem + // + this.newBrowserContextToolStripMenuItem.Name = "newBrowserContextToolStripMenuItem"; + this.newBrowserContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.newBrowserContextToolStripMenuItem.Text = "New Browser"; + // + // newBookmarkContextToolStripMenuItem + // + this.newBookmarkContextToolStripMenuItem.Name = "newBookmarkContextToolStripMenuItem"; + this.newBookmarkContextToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.newBookmarkContextToolStripMenuItem.Text = "New Bookmark"; + // + // toolStripSeparatorAfterAction + // + this.toolStripSeparatorAfterAction.Name = "toolStripSeparatorAfterAction"; + this.toolStripSeparatorAfterAction.Size = new System.Drawing.Size(6, 56); + // + // infoToolStripButton + // + this.infoToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.info; + this.infoToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.infoToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.infoToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.infoToolStripButton.Name = "infoToolStripButton"; + this.infoToolStripButton.Size = new System.Drawing.Size(53, 53); + this.infoToolStripButton.Text = "Get Info"; + this.infoToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // refreshToolStripButton + // + this.refreshToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.reload; + this.refreshToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.refreshToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.refreshToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.refreshToolStripButton.Name = "refreshToolStripButton"; + this.refreshToolStripButton.Size = new System.Drawing.Size(50, 53); + this.refreshToolStripButton.Text = "Refresh"; + this.refreshToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // toolStripSeparatorAfterRefresh + // + this.toolStripSeparatorAfterRefresh.Name = "toolStripSeparatorAfterRefresh"; + this.toolStripSeparatorAfterRefresh.Size = new System.Drawing.Size(6, 56); + // + // openInBrowserToolStripButton + // + this.openInBrowserToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.pencil; + this.openInBrowserToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.openInBrowserToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.openInBrowserToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.openInBrowserToolStripButton.Name = "openInBrowserToolStripButton"; + this.openInBrowserToolStripButton.Size = new System.Drawing.Size(40, 53); + this.openInBrowserToolStripButton.Text = "Open"; + this.openInBrowserToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // openInTerminalToolStripButton + // + this.openInTerminalToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.openInTerminalToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.openInTerminalToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.openInTerminalToolStripButton.Name = "openInTerminalToolStripButton"; + this.openInTerminalToolStripButton.Size = new System.Drawing.Size(40, 53); + this.openInTerminalToolStripButton.Text = "Open"; + this.openInTerminalToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // newFolderToolStripButton + // + this.newFolderToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.newFolderToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.newFolderToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.newFolderToolStripButton.Name = "newFolderToolStripButton"; + this.newFolderToolStripButton.Size = new System.Drawing.Size(71, 53); + this.newFolderToolStripButton.Text = "New Folder"; + this.newFolderToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // deleteToolStripButton + // + this.deleteToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.delete; + this.deleteToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.deleteToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.deleteToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.deleteToolStripButton.Name = "deleteToolStripButton"; + this.deleteToolStripButton.Size = new System.Drawing.Size(44, 53); + this.deleteToolStripButton.Text = "Delete"; + this.deleteToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // toolStripSeparatorAfterDelete + // + this.toolStripSeparatorAfterDelete.Name = "toolStripSeparatorAfterDelete"; + this.toolStripSeparatorAfterDelete.Size = new System.Drawing.Size(6, 56); + // + // downloadToolStripButton + // + this.downloadToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.download; + this.downloadToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.downloadToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.downloadToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.downloadToolStripButton.Name = "downloadToolStripButton"; + this.downloadToolStripButton.Size = new System.Drawing.Size(65, 53); + this.downloadToolStripButton.Text = "Download"; + this.downloadToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // uploadToolStripButton + // + this.uploadToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.upload; + this.uploadToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.uploadToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.uploadToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.uploadToolStripButton.Name = "uploadToolStripButton"; + this.uploadToolStripButton.Size = new System.Drawing.Size(49, 53); + this.uploadToolStripButton.Text = "Upload"; + this.uploadToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // transfersToolStripButton + // + this.transfersToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.queue; + this.transfersToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.transfersToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.transfersToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.transfersToolStripButton.Name = "transfersToolStripButton"; + this.transfersToolStripButton.Size = new System.Drawing.Size(59, 53); + this.transfersToolStripButton.Text = "Transfers"; + this.transfersToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // logToolStripButton + // + this.logToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.log; + this.logToolStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.logToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.logToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.logToolStripButton.Name = "logToolStripButton"; + this.logToolStripButton.Size = new System.Drawing.Size(36, 53); + this.logToolStripButton.Text = "Log"; + this.logToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // disconnectStripButton + // + this.disconnectStripButton.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.disconnectStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.eject; + this.disconnectStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.disconnectStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.disconnectStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.disconnectStripButton.Name = "disconnectStripButton"; + this.disconnectStripButton.Size = new System.Drawing.Size(70, 53); + this.disconnectStripButton.Text = "Disconnect"; + this.disconnectStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // iconList + // + this.iconList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; + this.iconList.ImageSize = new System.Drawing.Size(16, 16); + this.iconList.TransparentColor = System.Drawing.Color.Transparent; + // + // toolStripContainer1 + // + // + // toolStripContainer1.BottomToolStripPanel + // + this.toolStripContainer1.BottomToolStripPanel.Controls.Add(this.statusStrip); + // + // toolStripContainer1.ContentPanel + // + this.toolStripContainer1.ContentPanel.Controls.Add(this.panelManager1); + this.toolStripContainer1.ContentPanel.Controls.Add(this.viewPanel); + this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(1028, 528); + this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.toolStripContainer1.LeftToolStripPanelVisible = false; + this.toolStripContainer1.Location = new System.Drawing.Point(0, 0); + this.toolStripContainer1.Name = "toolStripContainer1"; + this.toolStripContainer1.RightToolStripPanelVisible = false; + this.toolStripContainer1.Size = new System.Drawing.Size(1028, 606); + this.toolStripContainer1.TabIndex = 16; + this.toolStripContainer1.Text = "toolStripContainer1"; + // + // toolStripContainer1.TopToolStripPanel + // + this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.toolBar); + this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.menuStrip1); + // + // panelManager1 + // + this.panelManager1.Controls.Add(this.managedBrowserPanel1); + this.panelManager1.Controls.Add(this.managedBookmarkPanel2); + this.panelManager1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelManager1.Location = new System.Drawing.Point(0, 31); + this.panelManager1.Name = "panelManager1"; + this.panelManager1.SelectedIndex = 0; + this.panelManager1.SelectedPanel = this.managedBrowserPanel1; + this.panelManager1.Size = new System.Drawing.Size(1028, 497); + this.panelManager1.TabIndex = 3; + // + // managedBrowserPanel1 + // + this.managedBrowserPanel1.Controls.Add(this.splitContainer); + this.managedBrowserPanel1.Location = new System.Drawing.Point(0, 0); + this.managedBrowserPanel1.Name = "managedBrowserPanel1"; + this.managedBrowserPanel1.Size = new System.Drawing.Size(1028, 497); + this.managedBrowserPanel1.Text = "managedBrowserPanel1"; + // + // splitContainer + // + this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer.Location = new System.Drawing.Point(0, 0); + this.splitContainer.Name = "splitContainer"; + this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer.Panel1 + // + this.splitContainer.Panel1.Controls.Add(this.browser); + this.splitContainer.Panel1MinSize = 0; + // + // splitContainer.Panel2 + // + this.splitContainer.Panel2.Controls.Add(this.transcriptBox); + this.splitContainer.Panel2MinSize = 50; + this.splitContainer.Size = new System.Drawing.Size(1028, 497); + this.splitContainer.SplitterDistance = 444; + this.splitContainer.SplitterWidth = 3; + this.splitContainer.TabIndex = 2; + // + // browser + // + this.browser.ActiveForegroudColor = System.Drawing.SystemColors.ControlText; + this.browser.ActiveGetterPath = null; + this.browser.ActiveGetterTransferItem = null; + this.browser.AllColumns.Add(this.treeColumnName); + this.browser.AllColumns.Add(this.treeColumnSize); + this.browser.AllColumns.Add(this.treeColumnModified); + this.browser.AllColumns.Add(this.treeColumnOwner); + this.browser.AllColumns.Add(this.treeColumnGroup); + this.browser.AllColumns.Add(this.treeColumnPermissions); + this.browser.AllColumns.Add(this.treeColumnKind); + this.browser.AllColumns.Add(this.treeColumnExtension); + this.browser.AllColumns.Add(this.treeColumnRegion); + this.browser.AllColumns.Add(this.treeColumnVersion); + this.browser.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.browser.CellEditActivation = BrightIdeasSoftware.ObjectListView.CellEditActivateMode.F2Only; + this.browser.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.treeColumnName, + this.treeColumnSize, + this.treeColumnModified}); + this.browser.Cursor = System.Windows.Forms.Cursors.Default; + this.browser.Dock = System.Windows.Forms.DockStyle.Fill; + this.browser.FullRowSelect = true; + this.browser.InactiveForegroudColor = System.Drawing.Color.Gray; + this.browser.IsSimpleDragSource = true; + this.browser.Location = new System.Drawing.Point(0, 0); + this.browser.Name = "browser"; + this.browser.OwnerDraw = true; + this.browser.ShowGroups = false; + this.browser.Size = new System.Drawing.Size(1028, 444); + this.browser.TabIndex = 15; + this.browser.UseCompatibleStateImageBehavior = false; + this.browser.View = System.Windows.Forms.View.Details; + this.browser.VirtualMode = true; + this.browser.CellEditFinishing += new BrightIdeasSoftware.CellEditEventHandler(this.browser_CellEditFinishing); + this.browser.SelectionChanged += new System.EventHandler(this.browser_SelectionChanged); + this.browser.BeforeLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.browser_BeforeLabelEdit); + this.browser.DoubleClick += new System.EventHandler(this.browser_DoubleClick); + this.browser.KeyDown += new System.Windows.Forms.KeyEventHandler(this.browser_KeyDown); + this.browser.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.browser_KeyPress); + // + // treeColumnName + // + this.treeColumnName.CellPadding = null; + this.treeColumnName.FillsFreeSpace = true; + this.treeColumnName.Text = "Filename"; + this.treeColumnName.Width = 180; + // + // treeColumnSize + // + this.treeColumnSize.CellPadding = null; + this.treeColumnSize.HeaderTextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.treeColumnSize.IsEditable = false; + this.treeColumnSize.Text = "Size"; + this.treeColumnSize.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // treeColumnModified + // + this.treeColumnModified.CellPadding = null; + this.treeColumnModified.IsEditable = false; + this.treeColumnModified.IsTileViewColumn = true; + this.treeColumnModified.Text = "Modified"; + this.treeColumnModified.Width = 145; + // + // treeColumnOwner + // + this.treeColumnOwner.CellPadding = null; + this.treeColumnOwner.DisplayIndex = 3; + this.treeColumnOwner.IsEditable = false; + this.treeColumnOwner.IsVisible = false; + this.treeColumnOwner.Text = "Owner"; + // + // treeColumnGroup + // + this.treeColumnGroup.CellPadding = null; + this.treeColumnGroup.DisplayIndex = 4; + this.treeColumnGroup.IsEditable = false; + this.treeColumnGroup.IsVisible = false; + this.treeColumnGroup.Text = "Group"; + // + // treeColumnPermissions + // + this.treeColumnPermissions.CellPadding = null; + this.treeColumnPermissions.DisplayIndex = 5; + this.treeColumnPermissions.IsEditable = false; + this.treeColumnPermissions.IsVisible = false; + this.treeColumnPermissions.Text = "Permissions"; + // + // treeColumnKind + // + this.treeColumnKind.CellPadding = null; + this.treeColumnKind.DisplayIndex = 6; + this.treeColumnKind.IsEditable = false; + this.treeColumnKind.IsVisible = false; + this.treeColumnKind.Text = "Kind"; + // + // treeColumnExtension + // + this.treeColumnExtension.CellPadding = null; + this.treeColumnExtension.DisplayIndex = 7; + this.treeColumnExtension.IsEditable = false; + this.treeColumnExtension.IsVisible = false; + this.treeColumnExtension.Text = "Extension"; + // + // treeColumnRegion + // + this.treeColumnRegion.CellPadding = null; + this.treeColumnRegion.DisplayIndex = 8; + this.treeColumnRegion.IsEditable = false; + this.treeColumnRegion.IsVisible = false; + this.treeColumnRegion.Text = "Region"; + // + // treeColumnVersion + // + this.treeColumnVersion.CellPadding = null; + this.treeColumnVersion.DisplayIndex = 9; + this.treeColumnVersion.IsEditable = false; + this.treeColumnVersion.IsVisible = false; + this.treeColumnVersion.Text = "Version"; + // + // transcriptBox + // + this.transcriptBox.CausesValidation = false; + this.transcriptBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.transcriptBox.Location = new System.Drawing.Point(0, 0); + this.transcriptBox.Name = "transcriptBox"; + this.transcriptBox.ReadOnly = true; + this.transcriptBox.Size = new System.Drawing.Size(1028, 50); + this.transcriptBox.TabIndex = 0; + this.transcriptBox.Text = ""; + this.transcriptBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.transcriptBox_KeyDown); + // + // managedBookmarkPanel2 + // + this.managedBookmarkPanel2.Controls.Add(this.bookmarkListView); + this.managedBookmarkPanel2.Controls.Add(this.actionToolStrip); + this.managedBookmarkPanel2.Location = new System.Drawing.Point(0, 0); + this.managedBookmarkPanel2.Name = "managedBookmarkPanel2"; + this.managedBookmarkPanel2.Size = new System.Drawing.Size(0, 0); + this.managedBookmarkPanel2.Text = "managedBookmarkPanel2"; + // + // bookmarkListView + // + this.bookmarkListView.AllColumns.Add(this.bookmarkImageColumn); + this.bookmarkListView.AllColumns.Add(this.bookmarkDescriptionColumn); + this.bookmarkListView.AllColumns.Add(this.activeColumn); + this.bookmarkListView.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.bookmarkListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.bookmarkImageColumn, + this.bookmarkDescriptionColumn, + this.activeColumn}); + this.bookmarkListView.Cursor = System.Windows.Forms.Cursors.Default; + this.bookmarkListView.Dock = System.Windows.Forms.DockStyle.Fill; + this.bookmarkListView.FullRowSelect = true; + this.bookmarkListView.Location = new System.Drawing.Point(0, 0); + this.bookmarkListView.Name = "bookmarkListView"; + this.bookmarkListView.OwnerDraw = true; + this.bookmarkListView.RowHeight = 37; + this.bookmarkListView.ShowGroups = false; + this.bookmarkListView.Size = new System.Drawing.Size(0, 0); + this.bookmarkListView.TabIndex = 10; + this.bookmarkListView.UseCompatibleStateImageBehavior = false; + this.bookmarkListView.View = System.Windows.Forms.View.Details; + this.bookmarkListView.DoubleClick += new System.EventHandler(this.bookmarkListView_DoubleClick); + this.bookmarkListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.bookmarkListView_KeyDown); + // + // bookmarkImageColumn + // + this.bookmarkImageColumn.AspectName = ""; + this.bookmarkImageColumn.CellPadding = null; + this.bookmarkImageColumn.IsEditable = false; + this.bookmarkImageColumn.Text = ""; + this.bookmarkImageColumn.Width = 32; + // + // bookmarkDescriptionColumn + // + this.bookmarkDescriptionColumn.AspectName = ""; + this.bookmarkDescriptionColumn.CellPadding = null; + this.bookmarkDescriptionColumn.Text = ""; + this.bookmarkDescriptionColumn.Width = 200; + // + // activeColumn + // + this.activeColumn.CellPadding = null; + this.activeColumn.Text = ""; + // + // actionToolStrip + // + this.actionToolStrip.AutoSize = false; + this.actionToolStrip.Dock = System.Windows.Forms.DockStyle.Bottom; + this.actionToolStrip.GripMargin = new System.Windows.Forms.Padding(0); + this.actionToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.actionToolStrip.ImageScalingSize = new System.Drawing.Size(30, 30); + this.actionToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newBookmarkToolStripButton, + this.editBookmarkToolStripButton, + this.deleteBookmarkToolStripButton}); + this.actionToolStrip.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow; + this.actionToolStrip.Location = new System.Drawing.Point(0, -33); + this.actionToolStrip.Name = "actionToolStrip"; + this.actionToolStrip.ShowItemToolTips = false; + this.actionToolStrip.Size = new System.Drawing.Size(0, 33); + this.actionToolStrip.Stretch = true; + this.actionToolStrip.TabIndex = 5; + this.actionToolStrip.Text = "toolStrip1"; + // + // newBookmarkToolStripButton + // + this.newBookmarkToolStripButton.AutoSize = false; + this.newBookmarkToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.newBookmarkToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.add; + this.newBookmarkToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.newBookmarkToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.newBookmarkToolStripButton.Margin = new System.Windows.Forms.Padding(16, 1, 0, 2); + this.newBookmarkToolStripButton.Name = "newBookmarkToolStripButton"; + this.newBookmarkToolStripButton.Size = new System.Drawing.Size(23, 22); + this.newBookmarkToolStripButton.Text = "toolStripButton1"; + // + // editBookmarkToolStripButton + // + this.editBookmarkToolStripButton.AutoSize = false; + this.editBookmarkToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.editBookmarkToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.edit; + this.editBookmarkToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.editBookmarkToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.editBookmarkToolStripButton.Name = "editBookmarkToolStripButton"; + this.editBookmarkToolStripButton.Size = new System.Drawing.Size(23, 22); + this.editBookmarkToolStripButton.Text = "toolStripButton2"; + // + // deleteBookmarkToolStripButton + // + this.deleteBookmarkToolStripButton.AutoSize = false; + this.deleteBookmarkToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.deleteBookmarkToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.remove; + this.deleteBookmarkToolStripButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.deleteBookmarkToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.deleteBookmarkToolStripButton.Margin = new System.Windows.Forms.Padding(-1, 1, 0, 2); + this.deleteBookmarkToolStripButton.Name = "deleteBookmarkToolStripButton"; + this.deleteBookmarkToolStripButton.Size = new System.Drawing.Size(22, 22); + this.deleteBookmarkToolStripButton.Text = "toolStripButton3"; + // + // viewPanel + // + this.viewPanel.AutoSize = true; + this.viewPanel.BackColor = System.Drawing.Color.WhiteSmoke; + this.viewPanel.Controls.Add(this.tableLayoutPanel1); + this.viewPanel.Dock = System.Windows.Forms.DockStyle.Top; + this.viewPanel.Location = new System.Drawing.Point(0, 0); + this.viewPanel.Name = "viewPanel"; + this.viewPanel.Size = new System.Drawing.Size(1028, 31); + this.viewPanel.TabIndex = 29; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.AutoSize = true; + this.tableLayoutPanel1.BackColor = System.Drawing.SystemColors.Control; + this.tableLayoutPanel1.ColumnCount = 6; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 42F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 42F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 42F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 120F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.Controls.Add(this.viewToolStrip, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.searchTextBox, 5, 0); + this.tableLayoutPanel1.Controls.Add(this.parentPathButton, 4, 0); + this.tableLayoutPanel1.Controls.Add(this.pathComboBox, 3, 0); + this.tableLayoutPanel1.Controls.Add(this.historyForwardButton, 2, 0); + this.tableLayoutPanel1.Controls.Add(this.historyBackButton, 1, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(0, 0, 2, 0); + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(1028, 31); + this.tableLayoutPanel1.TabIndex = 16; + // + // viewToolStrip + // + this.viewToolStrip.Dock = System.Windows.Forms.DockStyle.None; + this.viewToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.viewToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.browserToolStripButton, + this.bookmarksToolStripButton, + this.historyToolStripButton, + this.bonjourToolStripButton, + this.toolStripSeparator23}); + this.viewToolStrip.Location = new System.Drawing.Point(0, 2); + this.viewToolStrip.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0); + this.viewToolStrip.Name = "viewToolStrip"; + this.viewToolStrip.RenderMode = System.Windows.Forms.ToolStripRenderMode.System; + this.viewToolStrip.Size = new System.Drawing.Size(128, 28); + this.viewToolStrip.TabIndex = 17; + this.viewToolStrip.Text = "toolStrip3"; + // + // browserToolStripButton + // + this.browserToolStripButton.AutoSize = false; + this.browserToolStripButton.AutoToolTip = false; + this.browserToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.browserToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.outline; + this.browserToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.browserToolStripButton.Margin = new System.Windows.Forms.Padding(2, 1, 2, 2); + this.browserToolStripButton.Name = "browserToolStripButton"; + this.browserToolStripButton.Size = new System.Drawing.Size(25, 25); + this.browserToolStripButton.Text = "toolStripButton3"; + this.browserToolStripButton.Click += new System.EventHandler(this.browserCheckBox_Click); + // + // bookmarksToolStripButton + // + this.bookmarksToolStripButton.AutoSize = false; + this.bookmarksToolStripButton.AutoToolTip = false; + this.bookmarksToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.bookmarksToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.bookmarks; + this.bookmarksToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.bookmarksToolStripButton.Margin = new System.Windows.Forms.Padding(2, 1, 2, 2); + this.bookmarksToolStripButton.Name = "bookmarksToolStripButton"; + this.bookmarksToolStripButton.Size = new System.Drawing.Size(25, 25); + this.bookmarksToolStripButton.Text = "toolStripButton4"; + this.bookmarksToolStripButton.Click += new System.EventHandler(this.bookmarkCheckBox_Click); + // + // historyToolStripButton + // + this.historyToolStripButton.AutoSize = false; + this.historyToolStripButton.AutoToolTip = false; + this.historyToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.historyToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.history; + this.historyToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.historyToolStripButton.Margin = new System.Windows.Forms.Padding(2, 1, 2, 2); + this.historyToolStripButton.Name = "historyToolStripButton"; + this.historyToolStripButton.Size = new System.Drawing.Size(25, 25); + this.historyToolStripButton.Text = "toolStripButton5"; + this.historyToolStripButton.Click += new System.EventHandler(this.historyCheckBox_Click); + // + // bonjourToolStripButton + // + this.bonjourToolStripButton.AutoSize = false; + this.bonjourToolStripButton.AutoToolTip = false; + this.bonjourToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.bonjourToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.rendezvous; + this.bonjourToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.bonjourToolStripButton.Margin = new System.Windows.Forms.Padding(2, 1, 5, 2); + this.bonjourToolStripButton.Name = "bonjourToolStripButton"; + this.bonjourToolStripButton.Size = new System.Drawing.Size(25, 25); + this.bonjourToolStripButton.Text = "toolStripButton6"; + this.bonjourToolStripButton.Click += new System.EventHandler(this.bonjourCheckBox_Click); + // + // toolStripSeparator23 + // + this.toolStripSeparator23.Name = "toolStripSeparator23"; + this.toolStripSeparator23.Size = new System.Drawing.Size(6, 28); + // + // searchTextBox + // + this.searchTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.searchTextBox.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.searchTextBox.Location = new System.Drawing.Point(909, 3); + this.searchTextBox.Name = "searchTextBox"; + this.searchTextBox.OptionsMenu = null; + this.searchTextBox.Size = new System.Drawing.Size(114, 24); + this.searchTextBox.TabIndex = 14; + this.searchTextBox.TextChanged += new Ch.Cyberduck.ui.winforms.controls.SearchTextBox2.TextChange(this.searchTextBox_TextChanged); + // + // parentPathButton + // + this.parentPathButton.FlatAppearance.BorderSize = 0; + this.parentPathButton.Image = global::Ch.Cyberduck.ResourcesBundle.nav_up; + this.parentPathButton.Location = new System.Drawing.Point(867, 3); + this.parentPathButton.Name = "parentPathButton"; + this.parentPathButton.Size = new System.Drawing.Size(35, 25); + this.parentPathButton.TabIndex = 7; + this.parentPathButton.UseVisualStyleBackColor = true; + // + // pathComboBox + // + this.pathComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pathComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.pathComboBox.FormattingEnabled = true; + this.pathComboBox.Location = new System.Drawing.Point(215, 3); + this.pathComboBox.Name = "pathComboBox"; + this.pathComboBox.Size = new System.Drawing.Size(646, 23); + this.pathComboBox.TabIndex = 6; + this.pathComboBox.SelectionChangeCommitted += new System.EventHandler(this.pathComboBox_SelectionChangeCommitted); + // + // historyForwardButton + // + this.historyForwardButton.FlatAppearance.BorderSize = 0; + this.historyForwardButton.Image = global::Ch.Cyberduck.ResourcesBundle.nav_forward; + this.historyForwardButton.Location = new System.Drawing.Point(173, 3); + this.historyForwardButton.Name = "historyForwardButton"; + this.historyForwardButton.Size = new System.Drawing.Size(35, 25); + this.historyForwardButton.TabIndex = 5; + this.historyForwardButton.UseVisualStyleBackColor = true; + // + // historyBackButton + // + this.historyBackButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.historyBackButton.FlatAppearance.BorderSize = 0; + this.historyBackButton.Image = global::Ch.Cyberduck.ResourcesBundle.nav_backward; + this.historyBackButton.Location = new System.Drawing.Point(132, 3); + this.historyBackButton.Name = "historyBackButton"; + this.historyBackButton.Size = new System.Drawing.Size(35, 25); + this.historyBackButton.TabIndex = 4; + this.historyBackButton.UseVisualStyleBackColor = true; + // + // bookmarkContextMenuStrip + // + this.bookmarkContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.connectBookmarkContextToolStripMenuItem, + this.toolStripSeparator29, + this.newBookmarkContextToolStripMenuItem1, + this.deleteBookmarkContextToolStripMenuItem1, + this.editBookmarkContextToolStripMenuItem1, + this.duplicateBookmarkToolStripMenuItem}); + this.bookmarkContextMenuStrip.Name = "bookmarkContextMenuStrip"; + this.bookmarkContextMenuStrip.Size = new System.Drawing.Size(182, 120); + // + // connectBookmarkContextToolStripMenuItem + // + this.connectBookmarkContextToolStripMenuItem.Name = "connectBookmarkContextToolStripMenuItem"; + this.connectBookmarkContextToolStripMenuItem.Size = new System.Drawing.Size(181, 22); + this.connectBookmarkContextToolStripMenuItem.Text = "Connect to server"; + // + // toolStripSeparator29 + // + this.toolStripSeparator29.Name = "toolStripSeparator29"; + this.toolStripSeparator29.Size = new System.Drawing.Size(178, 6); + // + // newBookmarkContextToolStripMenuItem1 + // + this.newBookmarkContextToolStripMenuItem1.Name = "newBookmarkContextToolStripMenuItem1"; + this.newBookmarkContextToolStripMenuItem1.Size = new System.Drawing.Size(181, 22); + this.newBookmarkContextToolStripMenuItem1.Text = "New Bookmark"; + // + // deleteBookmarkContextToolStripMenuItem1 + // + this.deleteBookmarkContextToolStripMenuItem1.Name = "deleteBookmarkContextToolStripMenuItem1"; + this.deleteBookmarkContextToolStripMenuItem1.Size = new System.Drawing.Size(181, 22); + this.deleteBookmarkContextToolStripMenuItem1.Text = "Delete Bookmark"; + // + // editBookmarkContextToolStripMenuItem1 + // + this.editBookmarkContextToolStripMenuItem1.Name = "editBookmarkContextToolStripMenuItem1"; + this.editBookmarkContextToolStripMenuItem1.Size = new System.Drawing.Size(181, 22); + this.editBookmarkContextToolStripMenuItem1.Text = "Edit Bookmark"; + // + // duplicateBookmarkToolStripMenuItem + // + this.duplicateBookmarkToolStripMenuItem.Name = "duplicateBookmarkToolStripMenuItem"; + this.duplicateBookmarkToolStripMenuItem.Size = new System.Drawing.Size(181, 22); + this.duplicateBookmarkToolStripMenuItem.Text = "Duplicate Bookmark"; + // + // saveFileDialog + // + this.saveFileDialog.AddExtension = false; + this.saveFileDialog.Filter = "|*.*"; + this.saveFileDialog.OverwritePrompt = false; + this.saveFileDialog.Title = "Download the selected file to…"; + // + // openFileDialog + // + this.openFileDialog.Multiselect = true; + this.openFileDialog.Title = "Upload"; + // + // vistaMenu1 + // + this.vistaMenu1.ContainerControl = this; + // + // toolbarContextMenu1 + // + this.toolbarContextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.openConnectionToolbarMenuItem, + this.menuItem91, + this.quickConnectToolbarMenuItem, + this.actionContextToolbarMenuItem, + this.menuItem94, + this.infoToolbarMenuItem, + this.refreshToolbarMenuItem, + this.menuItem97, + this.editToolbarMenuItem, + this.openInWebBrowserToolbarMenuItem, + this.openInTerminalToolbarMenuItem, + this.newFolderToolbarMenuItem, + this.deleteToolbarMenuItem, + this.menuItem102, + this.downloadToolbarMenuItem, + this.uploadToolbarMenuItem, + this.transfersToolbarMenuItem, + this.logToolbarMenuItem}); + // + // openConnectionToolbarMenuItem + // + this.openConnectionToolbarMenuItem.Index = 0; + this.openConnectionToolbarMenuItem.Text = "New Connection"; + // + // menuItem91 + // + this.menuItem91.Index = 1; + this.menuItem91.Text = "-"; + // + // quickConnectToolbarMenuItem + // + this.quickConnectToolbarMenuItem.Index = 2; + this.quickConnectToolbarMenuItem.Text = "Quick Connect"; + // + // actionContextToolbarMenuItem + // + this.actionContextToolbarMenuItem.Index = 3; + this.actionContextToolbarMenuItem.Text = "Action"; + // + // menuItem94 + // + this.menuItem94.Index = 4; + this.menuItem94.Text = "-"; + // + // infoToolbarMenuItem + // + this.infoToolbarMenuItem.Index = 5; + this.infoToolbarMenuItem.Text = "Info"; + // + // refreshToolbarMenuItem + // + this.refreshToolbarMenuItem.Index = 6; + this.refreshToolbarMenuItem.Text = "Refresh"; + // + // menuItem97 + // + this.menuItem97.Index = 7; + this.menuItem97.Text = "-"; + // + // editToolbarMenuItem + // + this.editToolbarMenuItem.Index = 8; + this.editToolbarMenuItem.Text = "Edit"; + // + // openInWebBrowserToolbarMenuItem + // + this.openInWebBrowserToolbarMenuItem.Index = 9; + this.openInWebBrowserToolbarMenuItem.Text = "Open in Web Browser"; + // + // openInTerminalToolbarMenuItem + // + this.openInTerminalToolbarMenuItem.Index = 10; + this.openInTerminalToolbarMenuItem.Text = "Open in Terminal"; + // + // newFolderToolbarMenuItem + // + this.newFolderToolbarMenuItem.Index = 11; + this.newFolderToolbarMenuItem.Text = "New Folder"; + // + // deleteToolbarMenuItem + // + this.deleteToolbarMenuItem.Index = 12; + this.deleteToolbarMenuItem.Text = "Delete"; + // + // menuItem102 + // + this.menuItem102.Index = 13; + this.menuItem102.Text = "-"; + // + // downloadToolbarMenuItem + // + this.downloadToolbarMenuItem.Index = 14; + this.downloadToolbarMenuItem.Text = "Download"; + // + // uploadToolbarMenuItem + // + this.uploadToolbarMenuItem.Index = 15; + this.uploadToolbarMenuItem.Text = "Upload"; + // + // transfersToolbarMenuItem + // + this.transfersToolbarMenuItem.Index = 16; + this.transfersToolbarMenuItem.Text = "Transfers"; + // + // logToolbarMenuItem + // + this.logToolbarMenuItem.Index = 17; + this.logToolbarMenuItem.Text = "Log"; + // + // browserContextMenu + // + this.browserContextMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.refreshBrowserContextMenuItem, + this.menuItem44, + this.newFolderBrowserContextMenuItem, + this.newFileBrowserContextMenuItem, + this.newSymlinkBrowserContextMenuItem, + this.renameBrowserContextMenuItem, + this.duplicateFileBrowserContextMenuItem, + this.menuItem96, + this.copyUrlBrowserContextMenuItem, + this.openUrlBrowserContextMenuItem, + this.editBrowserContextMenuItem, + this.infoBrowserContextMenuItem, + this.menuItem105, + this.downloadBrowserContextMenuItem, + this.downloadAsBrowserContextMenuItem, + this.downloadToBrowserContextMenuItem, + this.uploadBrowserContextMenuItem, + this.synchronizeBrowserContextMenuItem, + this.menuItem101, + this.deleteBrowserContextMenuItem, + this.revertBrowserContextMenuItem, + this.menuItem110, + this.createArchiveBrowserContextMenuItem, + this.expandArchiveBrowserContextMnuItem, + this.menuItem113, + this.newBrowserBrowserContextMenuItem, + this.newBookmarkBrowserContextMenuItem}); + // + // refreshBrowserContextMenuItem + // + this.refreshBrowserContextMenuItem.Index = 0; + this.refreshBrowserContextMenuItem.Text = "Refresh"; + // + // menuItem44 + // + this.menuItem44.Index = 1; + this.menuItem44.Text = "-"; + // + // newFolderBrowserContextMenuItem + // + this.newFolderBrowserContextMenuItem.Index = 2; + this.newFolderBrowserContextMenuItem.Text = "New Folder…"; + // + // newFileBrowserContextMenuItem + // + this.newFileBrowserContextMenuItem.Index = 3; + this.newFileBrowserContextMenuItem.Text = "New File…"; + // + // newSymlinkBrowserContextMenuItem + // + this.newSymlinkBrowserContextMenuItem.Index = 4; + this.newSymlinkBrowserContextMenuItem.Text = "New Symbolic Link…"; + // + // renameBrowserContextMenuItem + // + this.renameBrowserContextMenuItem.Index = 5; + this.renameBrowserContextMenuItem.Text = "Rename…"; + // + // duplicateFileBrowserContextMenuItem + // + this.duplicateFileBrowserContextMenuItem.Index = 6; + this.duplicateFileBrowserContextMenuItem.Text = "Duplicate…"; + // + // menuItem96 + // + this.menuItem96.Index = 7; + this.menuItem96.Text = "-"; + // + // copyUrlBrowserContextMenuItem + // + this.copyUrlBrowserContextMenuItem.Index = 8; + this.copyUrlBrowserContextMenuItem.Text = "Copy URL"; + // + // openUrlBrowserContextMenuItem + // + this.openUrlBrowserContextMenuItem.Index = 9; + this.openUrlBrowserContextMenuItem.Text = "Open URL"; + // + // editBrowserContextMenuItem + // + this.editBrowserContextMenuItem.Index = 10; + this.editBrowserContextMenuItem.Text = "Edit With"; + // + // infoBrowserContextMenuItem + // + this.infoBrowserContextMenuItem.Index = 11; + this.infoBrowserContextMenuItem.Text = "Info"; + // + // menuItem105 + // + this.menuItem105.Index = 12; + this.menuItem105.Text = "-"; + // + // downloadBrowserContextMenuItem + // + this.downloadBrowserContextMenuItem.Index = 13; + this.downloadBrowserContextMenuItem.Text = "Download"; + // + // downloadAsBrowserContextMenuItem + // + this.downloadAsBrowserContextMenuItem.Index = 14; + this.downloadAsBrowserContextMenuItem.Text = "Download As…"; + // + // downloadToBrowserContextMenuItem + // + this.downloadToBrowserContextMenuItem.Index = 15; + this.downloadToBrowserContextMenuItem.Text = "Download To…"; + // + // uploadBrowserContextMenuItem + // + this.uploadBrowserContextMenuItem.Index = 16; + this.uploadBrowserContextMenuItem.Text = "Upload…"; + // + // synchronizeBrowserContextMenuItem + // + this.synchronizeBrowserContextMenuItem.Index = 17; + this.synchronizeBrowserContextMenuItem.Text = "Synchronize…"; + // + // menuItem101 + // + this.menuItem101.Index = 18; + this.menuItem101.Text = "-"; + // + // deleteBrowserContextMenuItem + // + this.deleteBrowserContextMenuItem.Index = 19; + this.deleteBrowserContextMenuItem.Text = "Delete"; + // + // revertBrowserContextMenuItem + // + this.revertBrowserContextMenuItem.Index = 20; + this.revertBrowserContextMenuItem.Text = "Revert"; + // + // menuItem110 + // + this.menuItem110.Index = 21; + this.menuItem110.Text = "-"; + // + // createArchiveBrowserContextMenuItem + // + this.createArchiveBrowserContextMenuItem.Index = 22; + this.createArchiveBrowserContextMenuItem.Text = "Create Archive"; + // + // expandArchiveBrowserContextMnuItem + // + this.expandArchiveBrowserContextMnuItem.Index = 23; + this.expandArchiveBrowserContextMnuItem.Text = "Expand Archive"; + // + // menuItem113 + // + this.menuItem113.Index = 24; + this.menuItem113.Text = "-"; + // + // newBrowserBrowserContextMenuItem + // + this.newBrowserBrowserContextMenuItem.Index = 25; + this.newBrowserBrowserContextMenuItem.Text = "New Browser"; + // + // newBookmarkBrowserContextMenuItem + // + this.newBookmarkBrowserContextMenuItem.Index = 26; + this.newBookmarkBrowserContextMenuItem.Text = "New Bookmark"; + // + // bookmarkContextMenu + // + this.bookmarkContextMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.connectBookmarkContextMenuItem, + this.menuItem5, + this.newBookmarkContextMenuItem, + this.deleteBookmarkContextMenuItem, + this.editBookmarkContextMenuItem, + this.duplicateBookmarkContextMenuItem, + this.menuItem8, + this.menuItem9}); + // + // connectBookmarkContextMenuItem + // + this.connectBookmarkContextMenuItem.Index = 0; + this.connectBookmarkContextMenuItem.Text = "Connect to server"; + // + // menuItem5 + // + this.menuItem5.Index = 1; + this.menuItem5.Text = "-"; + // + // newBookmarkContextMenuItem + // + this.newBookmarkContextMenuItem.Index = 2; + this.newBookmarkContextMenuItem.Text = "New Bookmark"; + // + // deleteBookmarkContextMenuItem + // + this.deleteBookmarkContextMenuItem.Index = 3; + this.deleteBookmarkContextMenuItem.Text = "Delete Bookmark"; + // + // editBookmarkContextMenuItem + // + this.editBookmarkContextMenuItem.Index = 4; + this.editBookmarkContextMenuItem.Text = "Edit Bookmark"; + // + // duplicateBookmarkContextMenuItem + // + this.duplicateBookmarkContextMenuItem.Index = 5; + this.duplicateBookmarkContextMenuItem.Text = "Duplicate Bookmark"; + // + // menuItem8 + // + this.menuItem8.Index = 6; + this.menuItem8.Text = "-"; + // + // menuItem9 + // + this.menuItem9.Index = 7; + this.menuItem9.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.sortByNicknameBookmarkContextMenuItem, + this.sortByHostnameBookmarkContextMenuItem, + this.sortByProtocolBookmarkContextMenuItem}); + this.menuItem9.Text = "Sort By"; + // + // sortByNicknameBookmarkContextMenuItem + // + this.sortByNicknameBookmarkContextMenuItem.Index = 0; + this.sortByNicknameBookmarkContextMenuItem.Text = "Nickname"; + // + // sortByHostnameBookmarkContextMenuItem + // + this.sortByHostnameBookmarkContextMenuItem.Index = 1; + this.sortByHostnameBookmarkContextMenuItem.Text = "Hostname"; + // + // sortByProtocolBookmarkContextMenuItem + // + this.sortByProtocolBookmarkContextMenuItem.Index = 2; + this.sortByProtocolBookmarkContextMenuItem.Text = "Protocol"; + // + // BrowserForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1028, 606); + this.Controls.Add(this.toolStripContainer1); + this.MinimumSize = new System.Drawing.Size(457, 39); + this.Name = "BrowserForm"; + this.Text = "Cyberduck"; + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.toolbarContextMenu.ResumeLayout(false); + this.editorMenuStrip.ResumeLayout(false); + this.toolBar.ResumeLayout(false); + this.toolBar.PerformLayout(); + this.contextMenuStrip.ResumeLayout(false); + this.toolStripContainer1.BottomToolStripPanel.ResumeLayout(false); + this.toolStripContainer1.BottomToolStripPanel.PerformLayout(); + this.toolStripContainer1.ContentPanel.ResumeLayout(false); + this.toolStripContainer1.ContentPanel.PerformLayout(); + this.toolStripContainer1.TopToolStripPanel.ResumeLayout(false); + this.toolStripContainer1.TopToolStripPanel.PerformLayout(); + this.toolStripContainer1.ResumeLayout(false); + this.toolStripContainer1.PerformLayout(); + this.panelManager1.ResumeLayout(false); + this.managedBrowserPanel1.ResumeLayout(false); + this.splitContainer.Panel1.ResumeLayout(false); + this.splitContainer.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); + this.splitContainer.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.browser)).EndInit(); + this.managedBookmarkPanel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.bookmarkListView)).EndInit(); + this.actionToolStrip.ResumeLayout(false); + this.actionToolStrip.PerformLayout(); + this.viewPanel.ResumeLayout(false); + this.viewPanel.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.viewToolStrip.ResumeLayout(false); + this.viewToolStrip.PerformLayout(); + this.bookmarkContextMenuStrip.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.vistaMenu1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.ToolStripStatusLabel statusLabel; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem newBrowserToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem aboutCyberduckToolStripMenuItem; + private System.Windows.Forms.ToolStripButton openConnectionToolStripButton; + private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem goToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem bookmarkToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem windowToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem viewBookmarksToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem newBookmarkToolStripMenuItem; + private System.Windows.Forms.ImageList iconList; + private System.Windows.Forms.ToolStripComboBox quickConnectToolStripComboBox; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem refreshContextToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem infoContextToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem renameContextToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem downloadContextToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem downloadAsContextToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem downloadToContextToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem editContextToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteContextToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem duplicateFileContextToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem uploadContextToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem synchronizeContextToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem newFolderContextToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem newFileContextToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripMenuItem createArchiveContextToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem expandArchiveContextToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripMenuItem openURLContextToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; + private System.Windows.Forms.ToolStripMenuItem newBrowserContextToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem newBookmarkContextToolStripMenuItem; + private System.Windows.Forms.ToolStripContainer toolStripContainer1; + private System.Windows.Forms.SplitContainer splitContainer; + private System.Windows.Forms.RichTextBox transcriptBox; + private MulticolorTreeListView browser; + private SortComparatorOLVColumn treeColumnName; + private SortComparatorOLVColumn treeColumnSize; + private SortComparatorOLVColumn treeColumnModified; + private SortComparatorOLVColumn treeColumnOwner; + private SortComparatorOLVColumn treeColumnGroup; + private SortComparatorOLVColumn treeColumnPermissions; + private SortComparatorOLVColumn treeColumnKind; + private SortComparatorOLVColumn treeColumnExtension; + private SortComparatorOLVColumn treeColumnRegion; + private SortComparatorOLVColumn treeColumnVersion; + private System.Windows.Forms.ToolStripMenuItem infoToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem activitiyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem transfersToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openConnectionToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; + private System.Windows.Forms.ToolStripMenuItem newDownloadToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; + private System.Windows.Forms.ToolStripMenuItem newFolderToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem newFileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem renameFileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem duplicateFileToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator9; + private System.Windows.Forms.ToolStripMenuItem openWebURLToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem editWithToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator10; + private System.Windows.Forms.ToolStripMenuItem downloadToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem downloadAsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem downloadToToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem uploadToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem synchronizeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator11; + private System.Windows.Forms.ToolStripMenuItem createArchiveToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem expandArchiveToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator12; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem cutToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem copyURLToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem pasteToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator14; + private System.Windows.Forms.ToolStripMenuItem preferencesToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem showHiddenFilesToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem textEncodingToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator13; + private System.Windows.Forms.ToolStripMenuItem toggleLogDrawerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem toggleToolbarToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator15; + private System.Windows.Forms.ToolStripMenuItem refreshToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator16; + private System.Windows.Forms.ToolStripMenuItem gotoFolderToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem backToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem forwardToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem enclosingFolderToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem insideToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem searchToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator17; + private System.Windows.Forms.ToolStripMenuItem sendCommandToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator18; + private System.Windows.Forms.ToolStripMenuItem stopToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem disconnectToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteBookmarkToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem editBookmarkToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator19; + private System.Windows.Forms.ToolStripMenuItem historyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem bonjourToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem minimizeToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator20; + private System.Windows.Forms.ToolStripMenuItem cyberduckHelpToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem licenseToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem acknowledgmentsToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator21; + private System.Windows.Forms.ToolStripMenuItem reportABugToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator22; + private System.Windows.Forms.ContextMenuStrip editorMenuStrip; + private System.Windows.Forms.ToolStripMenuItem editor1ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem editor2ToolStripMenuItem; + private System.Windows.Forms.ContextMenuStrip archiveMenuStrip; + private System.Windows.Forms.ContextMenuStrip textEncodingMenuStrip; + private System.Windows.Forms.ToolStripButton refreshToolStripButton; + private System.Windows.Forms.ToolStripButton disconnectStripButton; + private System.Windows.Forms.ToolStripDropDownButton actionToolStripDropDownButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparatorAfterOpenConnection; + private System.Windows.Forms.ToolStripSeparator toolStripSeparatorAfterAction; + private System.Windows.Forms.SaveFileDialog saveFileDialog; + private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog; + private System.Windows.Forms.OpenFileDialog openFileDialog; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator25; + private System.Windows.Forms.ToolStripMenuItem revertToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator26; + private System.Windows.Forms.ToolStripMenuItem revertContxtStripMenuItem; + private System.Windows.Forms.ToolStrip actionToolStrip; + private System.Windows.Forms.ToolStripButton newBookmarkToolStripButton; + private System.Windows.Forms.ToolStripButton editBookmarkToolStripButton; + private System.Windows.Forms.ToolStripButton deleteBookmarkToolStripButton; + private BrightIdeasSoftware.OLVColumn bookmarkImageColumn; + private BrightIdeasSoftware.OLVColumn bookmarkDescriptionColumn; + private BrightIdeasSoftware.OLVColumn activeColumn; + private System.Windows.Forms.ContextMenuStrip bookmarkContextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem connectBookmarkContextToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator29; + private System.Windows.Forms.ToolStripMenuItem newBookmarkContextToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem deleteBookmarkContextToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem editBookmarkContextToolStripMenuItem1; + private LineSeparatedObjectListView bookmarkListView; + private System.Windows.Forms.Panel viewPanel; + private System.Windows.Forms.Button parentPathButton; + private System.Windows.Forms.ComboBox pathComboBox; + private System.Windows.Forms.Button historyForwardButton; + private System.Windows.Forms.Button historyBackButton; + private System.Windows.Forms.ToolStripMenuItem checkToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator28; + private System.Windows.Forms.ToolStripMenuItem columnToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem toolbarToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openConnectionToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem quickConnectToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem actionToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator30; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator31; + private System.Windows.Forms.ToolStripMenuItem infoToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem refreshToolStripMenuItem1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator32; + private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem openInWebBrowserToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openInTerminalToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator33; + private System.Windows.Forms.ToolStripMenuItem downloadToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem uploadToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem transfersToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem logToolStripMenuItem1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator34; + private System.Windows.Forms.ToolStripMenuItem printToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator35; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator36; + private System.Windows.Forms.ToolStripButton infoToolStripButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparatorAfterRefresh; + private System.Windows.Forms.ToolStripButton openInBrowserToolStripButton; + private System.Windows.Forms.ToolStripButton logToolStripButton; + private System.Windows.Forms.ToolStripButton newFolderToolStripButton; + private System.Windows.Forms.ToolStripButton deleteToolStripButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparatorAfterDelete; + private System.Windows.Forms.ToolStripButton downloadToolStripButton; + private System.Windows.Forms.ToolStripButton uploadToolStripButton; + private System.Windows.Forms.ContextMenuStrip toolbarContextMenu; + private System.Windows.Forms.ContextMenuStrip columnContextMenu; + private System.Windows.Forms.ContextMenuStrip historyMenuStrip; + private System.Windows.Forms.ContextMenuStrip bonjourMenuStrip; + private System.Windows.Forms.ToolStripStatusLabel securityToolStripStatusLabel; + private System.Windows.Forms.ToolStripMenuItem duplicateBookmarkToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem duplicateBookmarkToolStripMenuItem; + private ClickThroughMenuStrip menuStrip1; + private System.Windows.Forms.ToolStripStatusLabel toolStripProgress; + private ClickThroughToolStrip toolBar; + private ui.winforms.controls.SearchTextBox2 searchTextBox; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.MainMenu mainMenu; + private System.Windows.Forms.MenuItem menuItem1; + private System.Windows.Forms.MenuItem newBrowserMainMenuItem; + private System.Windows.Forms.MenuItem openConnectionMainMenuItem; + private System.Windows.Forms.MenuItem menuItem4; + private System.Windows.Forms.MenuItem newDownloadMainMenuItem; + private System.Windows.Forms.MenuItem menuItem6; + private System.Windows.Forms.MenuItem newFolderMainMenuItem; + private System.Windows.Forms.MenuItem newFileMainMenuItem; + private System.Windows.Forms.MenuItem renameMainMenuItem; + private System.Windows.Forms.MenuItem duplicateMainMenuItem; + private System.Windows.Forms.MenuItem menuItem11; + private System.Windows.Forms.MenuItem openUrlMainMenuItem; + private System.Windows.Forms.MenuItem editMainMenuItem; + private System.Windows.Forms.MenuItem infoMainMenuItem; + private System.Windows.Forms.MenuItem downloadMainMenuItem; + private System.Windows.Forms.MenuItem downloadAsMainMenuItem; + private System.Windows.Forms.MenuItem downloadToMainMenuItem; + private System.Windows.Forms.MenuItem uploadMainMenuItem; + private System.Windows.Forms.MenuItem synchronizeMainMenuItem; + private System.Windows.Forms.MenuItem menuItem21; + private System.Windows.Forms.MenuItem deleteMainMenuItem; + private System.Windows.Forms.MenuItem revertMainMenuItem; + private System.Windows.Forms.MenuItem menuItem24; + private System.Windows.Forms.MenuItem createArchiveMainMenuItem; + private System.Windows.Forms.MenuItem expandArchiveMainMenuItem; + private System.Windows.Forms.MenuItem menuItem27; + private System.Windows.Forms.MenuItem printMainMenuItem; + private System.Windows.Forms.MenuItem menuItem29; + private System.Windows.Forms.MenuItem exitMainMenuItem; + private System.Windows.Forms.MenuItem mainMenuItem2; + private System.Windows.Forms.MenuItem cutMainMenuItem; + private System.Windows.Forms.MenuItem copyMainMenuItem; + private System.Windows.Forms.MenuItem copyUrlMainMenuItem; + private System.Windows.Forms.MenuItem pasteMainMenuItem; + private System.Windows.Forms.MenuItem selectAllMainMenuItem; + private System.Windows.Forms.MenuItem menuItem37; + private System.Windows.Forms.MenuItem preferencesMainMenuItem; + private System.Windows.Forms.MenuItem menuItem39; + private System.Windows.Forms.MenuItem toggleToolbarMainMenuItem; + private System.Windows.Forms.MenuItem customizeToolbarMainMenuItem; + private System.Windows.Forms.MenuItem menuItem42; + private System.Windows.Forms.MenuItem menuItem43; + private System.Windows.Forms.MenuItem columnMainMenuItem; + private System.Windows.Forms.MenuItem menuItem45; + private System.Windows.Forms.MenuItem showHiddenFilesMainMenuItem; + private System.Windows.Forms.MenuItem textEncodingMainMenuItem; + private System.Windows.Forms.MenuItem menuItem48; + private System.Windows.Forms.MenuItem toggleLogDrawerMainMenuItem; + private System.Windows.Forms.MenuItem menuItem50; + private System.Windows.Forms.MenuItem refreshMainMenuItem; + private System.Windows.Forms.MenuItem menuItem52; + private System.Windows.Forms.MenuItem goToFolderMainMenuItem; + private System.Windows.Forms.MenuItem backMainMenuItem; + private System.Windows.Forms.MenuItem forwardMainMenuItem; + private System.Windows.Forms.MenuItem enclosingFolderMainMenuItem; + private System.Windows.Forms.MenuItem insideMainMenuItem; + private System.Windows.Forms.MenuItem searchMainMenuItem; + private System.Windows.Forms.MenuItem menuItem59; + private System.Windows.Forms.MenuItem sendCommandMainMenuItem; + private System.Windows.Forms.MenuItem menuItem61; + private System.Windows.Forms.MenuItem stopMainMenuItem; + private System.Windows.Forms.MenuItem disconnectMainMenuItem; + private System.Windows.Forms.MenuItem menuItem64; + private System.Windows.Forms.MenuItem toggleBookmarksMainMenuItem; + private System.Windows.Forms.MenuItem menuItem66; + private System.Windows.Forms.MenuItem newBookmarkMainMenuItem; + private System.Windows.Forms.MenuItem deleteBookmarkMainMenuItem; + private System.Windows.Forms.MenuItem editBookmarkMainMenuItem; + private System.Windows.Forms.MenuItem duplicateBookmarkMainMenuItem; + private System.Windows.Forms.MenuItem menuItem71; + private System.Windows.Forms.MenuItem historyMainMenuItem; + private System.Windows.Forms.MenuItem bonjourMainMenuItem; + private System.Windows.Forms.MenuItem menuItem74; + private System.Windows.Forms.MenuItem menuItem75; + private System.Windows.Forms.MenuItem minimizeMainMenuItem; + private System.Windows.Forms.MenuItem menuItem77; + private System.Windows.Forms.MenuItem transfersMainMenuItem; + private System.Windows.Forms.MenuItem activityMainMenuItem; + private System.Windows.Forms.MenuItem menuItem80; + private System.Windows.Forms.MenuItem helpMainMenuItem; + private System.Windows.Forms.MenuItem licenseMainMenuItem; + private System.Windows.Forms.MenuItem acknowledgmentsMainMenuItem; + private System.Windows.Forms.MenuItem menuItem84; + private System.Windows.Forms.MenuItem bugMainMenuItem; + private System.Windows.Forms.MenuItem menuItem86; + private System.Windows.Forms.MenuItem updateMainMenuItem; + private System.Windows.Forms.MenuItem menuItem88; + private System.Windows.Forms.MenuItem aboutMainMenuItem; + private VistaMenu vistaMenu1; + private System.Windows.Forms.ContextMenu toolbarContextMenu1; + private System.Windows.Forms.MenuItem openConnectionToolbarMenuItem; + private System.Windows.Forms.MenuItem menuItem91; + private System.Windows.Forms.MenuItem quickConnectToolbarMenuItem; + private System.Windows.Forms.MenuItem actionContextToolbarMenuItem; + private System.Windows.Forms.MenuItem menuItem94; + private System.Windows.Forms.MenuItem infoToolbarMenuItem; + private System.Windows.Forms.MenuItem refreshToolbarMenuItem; + private System.Windows.Forms.MenuItem menuItem97; + private System.Windows.Forms.MenuItem editToolbarMenuItem; + private System.Windows.Forms.MenuItem openInWebBrowserToolbarMenuItem; + private System.Windows.Forms.MenuItem newFolderToolbarMenuItem; + private System.Windows.Forms.MenuItem deleteToolbarMenuItem; + private System.Windows.Forms.MenuItem menuItem102; + private System.Windows.Forms.MenuItem downloadToolbarMenuItem; + private System.Windows.Forms.MenuItem uploadToolbarMenuItem; + private System.Windows.Forms.MenuItem transfersToolbarMenuItem; + private System.Windows.Forms.ContextMenu browserContextMenu; + private System.Windows.Forms.MenuItem refreshBrowserContextMenuItem; + private System.Windows.Forms.MenuItem menuItem44; + private System.Windows.Forms.MenuItem infoBrowserContextMenuItem; + private System.Windows.Forms.MenuItem editBrowserContextMenuItem; + private System.Windows.Forms.MenuItem renameBrowserContextMenuItem; + private System.Windows.Forms.MenuItem duplicateFileBrowserContextMenuItem; + private System.Windows.Forms.MenuItem menuItem96; + private System.Windows.Forms.MenuItem downloadBrowserContextMenuItem; + private System.Windows.Forms.MenuItem downloadAsBrowserContextMenuItem; + private System.Windows.Forms.MenuItem downloadToBrowserContextMenuItem; + private System.Windows.Forms.MenuItem menuItem101; + private System.Windows.Forms.MenuItem deleteBrowserContextMenuItem; + private System.Windows.Forms.MenuItem revertBrowserContextMenuItem; + private System.Windows.Forms.MenuItem menuItem105; + private System.Windows.Forms.MenuItem uploadBrowserContextMenuItem; + private System.Windows.Forms.MenuItem synchronizeBrowserContextMenuItem; + private System.Windows.Forms.MenuItem newFolderBrowserContextMenuItem; + private System.Windows.Forms.MenuItem newFileBrowserContextMenuItem; + private System.Windows.Forms.MenuItem menuItem110; + private System.Windows.Forms.MenuItem createArchiveBrowserContextMenuItem; + private System.Windows.Forms.MenuItem expandArchiveBrowserContextMnuItem; + private System.Windows.Forms.MenuItem menuItem113; + private System.Windows.Forms.MenuItem copyUrlBrowserContextMenuItem; + private System.Windows.Forms.MenuItem openUrlBrowserContextMenuItem; + private System.Windows.Forms.MenuItem newBrowserBrowserContextMenuItem; + private System.Windows.Forms.MenuItem newBookmarkBrowserContextMenuItem; + private PanelManager panelManager1; + private ManagedPanel managedBrowserPanel1; + private ManagedPanel managedBookmarkPanel2; + private System.Windows.Forms.ContextMenu bookmarkContextMenu; + private System.Windows.Forms.MenuItem connectBookmarkContextMenuItem; + private System.Windows.Forms.MenuItem menuItem5; + private System.Windows.Forms.MenuItem newBookmarkContextMenuItem; + private System.Windows.Forms.MenuItem deleteBookmarkContextMenuItem; + private System.Windows.Forms.MenuItem editBookmarkContextMenuItem; + private System.Windows.Forms.MenuItem duplicateBookmarkContextMenuItem; + private System.Windows.Forms.MenuItem menuItem2; + private ClickThroughToolStrip viewToolStrip; + private System.Windows.Forms.ToolStripButton browserToolStripButton; + private System.Windows.Forms.ToolStripButton bookmarksToolStripButton; + private System.Windows.Forms.ToolStripButton historyToolStripButton; + private System.Windows.Forms.ToolStripButton bonjourToolStripButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator23; + private System.Windows.Forms.ToolStripMenuItem copyURLContextToolStripMenuItem; + private System.Windows.Forms.ToolStripSplitButton editToolStripSplitButton; + private System.Windows.Forms.MenuItem keyMainMenuItem; + private System.Windows.Forms.MenuItem donateMainMenuItem; + private System.Windows.Forms.MenuItem menuItem7; + private System.Windows.Forms.MenuItem openInTerminalMainMenuItem; + private System.Windows.Forms.ToolStripButton openInTerminalToolStripButton; + private System.Windows.Forms.MenuItem openInTerminalToolbarMenuItem; + private System.Windows.Forms.ToolStripMenuItem newFolderToolStripMenuItem1; + private System.Windows.Forms.MenuItem menuItem3; + private System.Windows.Forms.MenuItem sortByNicknameMainMenuItem; + private System.Windows.Forms.MenuItem sortByHostnameMainMenuItem; + private System.Windows.Forms.MenuItem sortByProtocolMainMenuItem; + private System.Windows.Forms.MenuItem menuItem8; + private System.Windows.Forms.MenuItem menuItem9; + private System.Windows.Forms.MenuItem sortByNicknameBookmarkContextMenuItem; + private System.Windows.Forms.MenuItem sortByHostnameBookmarkContextMenuItem; + private System.Windows.Forms.MenuItem sortByProtocolBookmarkContextMenuItem; + private System.Windows.Forms.MenuItem newSymbolicLinkMainMenuItem; + private System.Windows.Forms.ToolStripMenuItem newSymlinkContextToolStripMenuItem; + private System.Windows.Forms.MenuItem newSymlinkBrowserContextMenuItem; + private System.Windows.Forms.ToolStripButton transfersToolStripButton; + private System.Windows.Forms.MenuItem logToolbarMenuItem; + } +} + diff --git a/source/ch/cyberduck/ui/winforms/BrowserForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BrowserForm.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/BrowserForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/BrowserForm.cs index dac43b9b8b..5b8680c1cd 100644 --- a/source/ch/cyberduck/ui/winforms/BrowserForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BrowserForm.cs @@ -1,2964 +1,2964 @@ -// -// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. -// http://cyberduck.io/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// feedback@cyberduck.io -// - -using System; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Reflection; -using System.Runtime.InteropServices; -using System.Text; -using System.Windows.Forms; -using BrightIdeasSoftware; -using ch.cyberduck.core; -using ch.cyberduck.core.aquaticprime; -using ch.cyberduck.core.bonjour; -using ch.cyberduck.core.local; -using ch.cyberduck.core.preferences; -using ch.cyberduck.ui.comparator; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Ui.Controller; -using Ch.Cyberduck.Ui.Core; -using Ch.Cyberduck.Ui.Winforms.Commondialog; -using Ch.Cyberduck.Ui.Winforms.Controls; -using Ch.Cyberduck.Ui.Winforms.Taskdialog; -using org.apache.commons.io; -using org.apache.commons.lang3; -using org.apache.log4j; -using TheCodeKing.ActiveButtons.Controls; -using Application = ch.cyberduck.core.local.Application; -using DataObject = System.Windows.Forms.DataObject; -using ToolStripRenderer = Ch.Cyberduck.Ui.Controller.ToolStripRenderer; - -namespace Ch.Cyberduck.Ui.Winforms -{ - /// - /// Main browser form. - /// - /// Menu handling: Due to the non-native look of the ToolStripMenu controls we use the old MainMenu component which renders natively. - /// The ToolStripMenu controls are still there and maintained since we need them for the shortcut handling (some of the need shortcuts are not - /// supported by MainMenu, e.g. Alt+Enter). I hope to see native rendering of the menu controls in a future version of the .NET so that we can - /// get rid of the unnecessary MainMenu components. - /// - public partial class BrowserForm : BaseForm, IBrowserView - { - private static readonly Font FixedFont = new Font(FontFamily.GenericMonospace, 8); - private static readonly Logger Log = Logger.getLogger(typeof (BrowserForm).FullName); - private static readonly TypeConverter ShortcutConverter = TypeDescriptor.GetConverter(typeof (Keys)); - private bool _browserStateRestored; - private BrowserView _currentView; - private bool _lastActivityRunning; - private ToolStripMenuItem _lastMenuItemClicked; - private bool _sorting; - - public BrowserForm() - { - InitializeComponent(); - - ToolStripManager.RenderMode = ToolStripManagerRenderMode.System; - - BookmarkMenuCollectionListener bookmarkMenuCollectionListener = new BookmarkMenuCollectionListener(this); - BookmarkCollection.defaultCollection().addListener(bookmarkMenuCollectionListener); - MenuCollectionListener historyMenuCollectionListener = new MenuCollectionListener(this, historyMainMenuItem, - HistoryCollection.defaultCollection(), - LocaleFactory.localizedString("No recently connected servers available")); - HistoryCollection.defaultCollection().addListener(historyMenuCollectionListener); - MenuCollectionListener bonjourMenuCollectionListener = new MenuCollectionListener(this, bonjourMainMenuItem, - RendezvousCollection.defaultCollection(), LocaleFactory.localizedString("No Bonjour services available")); - RendezvousCollection.defaultCollection().addListener(bonjourMenuCollectionListener); - - if (!DesignMode) - { - vistaMenu1.SetImage(newBookmarkMainMenuItem, IconCache.Instance.IconForName("bookmark", 16)); - vistaMenu1.SetImage(historyMainMenuItem, IconCache.Instance.IconForName("history", 16)); - vistaMenu1.SetImage(bonjourMainMenuItem, IconCache.Instance.IconForName("rendezvous", 16)); - vistaMenu1.SetImage(transfersMainMenuItem, IconCache.Instance.IconForName("queue", 16)); - - newFolderToolStripButton.Image = IconCache.Instance.IconForName("newfolder", 32); - } - - toolBar.ContextMenu = toolbarContextMenu1; - bookmarkListView.ContextMenu = bookmarkContextMenu; - - viewToolStrip.Renderer = new ToolStripRenderer(); - toolBar.Renderer = new ToolStripRenderer(); - actionToolStrip.Renderer = new NoGapRenderer(); - - // configure browser properties - browser.UseExplorerTheme = true; - browser.UseTranslucentSelection = true; - browser.OwnerDraw = true; - browser.UseOverlays = false; - browser.LabelEdit = true; - browser.AllowDrop = true; - - browser.ContextMenuStrip = null; - browser.ContextMenu = browserContextMenu; - browser.DropSink = new ExpandingBrowserDropSink(this); - browser.DragSource = new BrowserDragSource(this); - - browser.AllowColumnReorder = true; - browser.ShowImagesOnSubItems = true; - browser.TreeColumnRenderer = new BrowserRenderer(); - browser.SelectedRowDecoration = new ExplorerRowBorderDecoration(); - browser.ItemsChanged += (sender, args) => ItemsChanged(); - browser.BeforeSorting += BeforeSorting; - browser.CellEditStarting += (sender, args) => args.Cancel = !ValidateRenameFile(); - SetupComparators(); - - searchTextBox.PlaceHolderText = LocaleFactory.localizedString("Search…", "Main"); - - securityToolStripStatusLabel.Visible = false; - - quickConnectToolStripComboBox.ComboBox.SelectionChangeCommitted += - toolStripQuickConnect_SelectionChangeCommited; - - // directly right-click on an item leads to some deferred updating of the menu items - // since the idle event is fired after showing the menu - contextMenuStrip.Opening += (sender, args) => Commands.Validate(); - contextMenuStrip.Opening += (sender, args) => args.Cancel = !ContextMenuEnabled(); - bookmarkContextMenu.Popup += delegate { Commands.Validate(); }; - browserContextMenu.Popup += delegate { Commands.Validate(); }; - - editorMenuStrip.Opening += OnEditorActionMenuOpening; - - editMainMenuItem.MenuItems.Add(string.Empty); - editMainMenuItem.Popup += OnEditMenuItemPopup; - editBrowserContextMenuItem.MenuItems.Add(string.Empty); - editBrowserContextMenuItem.Popup += OnEditMenuItemPopup; - - // add dummy entry to force the right arrow appearing in the menu - columnContextMenu.Items.Add(string.Empty); - archiveMenuStrip.Items.Add(string.Empty); - - archiveMenuStrip.Opening += OnArchiveMenuStripOpening; - createArchiveMainMenuItem.MenuItems.Add(string.Empty); - createArchiveMainMenuItem.Popup += OnArchiveMenuItemOnPopup; - createArchiveBrowserContextMenuItem.MenuItems.Add(string.Empty); - createArchiveBrowserContextMenuItem.Popup += OnArchiveMenuItemOnPopup; - copyUrlMainMenuItem.MenuItems.Add(string.Empty); - copyUrlMainMenuItem.Popup += OnCopyUrlMenuItemPopup; - copyUrlBrowserContextMenuItem.MenuItems.Add(string.Empty); - copyUrlBrowserContextMenuItem.Popup += OnCopyUrlMenuItemPopup; - openUrlMainMenuItem.MenuItems.Add(string.Empty); - openUrlMainMenuItem.Popup += OnOpenUrlMenuItemPopup; - openUrlBrowserContextMenuItem.MenuItems.Add(string.Empty); - openUrlBrowserContextMenuItem.Popup += OnOpenUrlMenuItemPopup; - - textEncodingMenuStrip.Items.Add(string.Empty); - textEncodingMainMenuItem.MenuItems.Add(string.Empty); - - columnMainMenuItem.MenuItems.Add(string.Empty); - historyMainMenuItem.MenuItems.Add(string.Empty); - historyMenuStrip.Items.Add(string.Empty); - bonjourMenuStrip.Items.Add(string.Empty); - - UpdateBookmarks(); - - newBookmarkToolStripButton.Tag = ResourcesBundle.addPressed; - editBookmarkToolStripButton.Tag = ResourcesBundle.editPressed; - deleteBookmarkToolStripButton.Tag = ResourcesBundle.removePressed; - - browserToolStripButton.ToolTipText = LocaleFactory.localizedString("Browser", "Preferences"); - bookmarksToolStripButton.ToolTipText = LocaleFactory.localizedString("Bookmarks", "Preferences"); - historyToolStripButton.ToolTipText = LocaleFactory.localizedString("History"); - bonjourToolStripButton.ToolTipText = LocaleFactory.localizedString("Bonjour", "Browser"); - - keyMainMenuItem.Text = LicenseFactory.find().ToString(); - keyMainMenuItem.Enabled = false; - - //Terminal app menu entries - String command = PreferencesFactory.get().getProperty("terminal.command.ssh"); - String file = StringUtils.capitalize(FilenameUtils.getBaseName(System.IO.Path.GetFileName(command))); - openInTerminalMainMenuItem.Text = String.Format(LocaleFactory.localizedString("Open in {0}"), file); - openInTerminalToolStripMenuItem.Text = String.Format(LocaleFactory.localizedString("Open in {0}"), file); - ; - openInTerminalToolbarMenuItem.Text = String.Format(LocaleFactory.localizedString("Open in {0}"), file); - openInTerminalToolStripButton.Image = IconCache.Instance.IconForFilename(command, IconCache.IconSize.Large); - - ConfigureToolbar(); - ConfigureFileCommands(); - ConfigureEditCommands(); - ConfigureViewCommands(); - ConfigureGoCommands(); - ConfigureWindowCommands(); - ConfigureBookmarkCommands(); - ConfigureHelpCommands(); - ConfigureActionlessCommands(); - - // restore additional UI settings - Load += delegate - { - //correct width for disconnect button - Size preferredSize = disconnectStripButton.GetPreferredSize(Size.Empty); - disconnectStripButton.AutoSize = false; - disconnectStripButton.Width = preferredSize.Width; - splitContainer.SplitterDistance = PersistenceHandler.Get("splitter.distance", 400); - - Menu = mainMenu; - - //add menu shortcuts, needs to be done in the Load event handler - ConfigureShortcuts(); - }; - - Closed += delegate - { - //we save the state of the last browser form - //this might be improved by some other logic - if (MainController.Browsers.Count == 1) - { - SaveUiSettings(); - } - BookmarkCollection.defaultCollection().removeListener(bookmarkMenuCollectionListener); - HistoryCollection.defaultCollection().removeListener(historyMenuCollectionListener); - RendezvousCollection.defaultCollection().removeListener(bonjourMenuCollectionListener); - }; - - if (LicenseFactory.find().Equals(LicenseFactory.EMPTY_LICENSE)) - { - AddDonateButton(); - } - } - - public Image Favicon - { - set { ; } - } - - public override string[] BundleNames - { - get { return new[] {"Browser", "Main", "Localizable"}; } - } - - protected override ContextMenu[] ContextMenuCollection - { - get { return new[] {browserContextMenu, bookmarkContextMenu, toolbarContextMenu1}; } - } - - public event VoidHandler FolderUp; - public event VoidHandler HistoryBack; - public event VoidHandler HistoryForward; - public event EditWithHandler EditEvent; - public event VoidHandler ShowInspector; - public event DropHandler BrowserCanDrop; - public event ModelDropHandler BrowserModelCanDrop; - public event DropHandler BrowserDropped; - public event ModelDropHandler BrowserModelDropped; - public event ValidateCommand ValidateNewFile; - public event VoidHandler NewSymbolicLink; - public event ValidateCommand ValidateNewSymbolicLink; - public event RenamePathname RenameFile; - public event ValidateCommand ValidateRenameFile; - public event VoidHandler Delete; - public event VoidHandler NewFile; - public event VoidHandler DuplicateFile; - public event EventHandler NewBrowser; - public event ValidateCommand ValidateNewBrowser; - public event ValidateCommand ValidateDuplicateFile; - public event ValidateCommand ValidateOpenWebUrl; - public event ValidateCommand ValidateEditWith; - public event ValidateCommand ValidateDelete; - public event ArchivesHandler GetArchives; - public event CopyUrlHandler GetCopyUrls; - public event OpenUrlHandler GetOpenUrls; - public event EventHandler CreateArchive; - public event ValidateCommand ValidateCreateArchive; - public event VoidHandler ExpandArchive; - public event ValidateCommand ValidateExpandArchive; - public event VoidHandler Exit; - public event VoidHandler QuickConnect; - public event VoidHandler OpenConnection; - public event ValidateCommand ValidateOpenConnection; - public event VoidHandler NewDownload; - public event ValidateCommand ValidateNewDownload; - public event ValidateCommand ValidateShowInspector; - public event VoidHandler Download; - public event ValidateCommand ValidateDownload; - public event VoidHandler DownloadAs; - public event ValidateCommand ValidateDownloadAs; - public event VoidHandler DownloadTo; - public event ValidateCommand ValidateDownloadTo; - public event VoidHandler Upload; - public event ValidateCommand ValidateUpload; - public event VoidHandler Synchronize; - public event ValidateCommand ValidateSynchronize; - public event VoidHandler BrowserDoubleClicked; - public event VoidHandler BrowserSelectionChanged; - public event VoidHandler PathSelectionChanged; - public event VoidHandler ShowTransfers; - public event DragHandler BrowserDrag; - public event EndDragHandler BrowserEndDrag; - public event DropHandler HostCanDrop; - public event ModelDropHandler HostModelCanDrop; - public event DropHandler HostDropped; - public event ModelDropHandler HostModelDropped; - public event DragHandler HostDrag; - public event EndDragHandler HostEndDrag; - public event VoidHandler NewFolder; - public event ValidateCommand ValidateNewFolder; - public event EditorsHandler GetEditorsForSelection; - public event ValidateCommand ContextMenuEnabled; - public event VoidHandler Cut; - public event ValidateCommand ValidateCut; - public event VoidHandler Copy; - public event ValidateCommand ValidateCopy; - public event VoidHandler Paste; - public event ValidateCommand ValidatePaste; - public event ValidateCommand ValidateSelectAll; - public event VoidHandler ShowPreferences; - public event VoidHandler ToggleToolbar; - public event VoidHandler ShowHiddenFiles; - public event VoidHandler ToggleLogDrawer; - public event ValidateCommand ValidateTextEncoding; - public event VoidHandler RefreshBrowser; - public event ValidateCommand ValidateRefresh; - public event VoidHandler GotoFolder; - public event ValidateCommand ValidateGotoFolder; - public event ValidateCommand ValidateHistoryBack; - public event ValidateCommand ValidateHistoryForward; - public event ValidateCommand ValidateFolderUp; - public event VoidHandler FolderInside; - public event ValidateCommand ValidateFolderInside; - public event VoidHandler Search; - public event VoidHandler SendCustomCommand; - public event ValidateCommand ValidateSendCustomCommand; - public event VoidHandler OpenInTerminal; - public event ValidateCommand ValidateOpenInTerminal; - public event VoidHandler Stop; - public event ValidateCommand ValidateStop; - public event VoidHandler Disconnect; - public event ValidateCommand ValidateDisconnect; - public event VoidHandler SearchFieldChanged; - public event EventHandler ChangeBrowserView; - public event VoidHandler NewBookmark; - public event ValidateCommand ValidateNewBookmark; - public event VoidHandler EditBookmark; - public event ValidateCommand ValidateEditBookmark; - public event VoidHandler DeleteBookmark; - public event ValidateCommand ValidateDeleteBookmark; - public event VoidHandler DuplicateBookmark; - public event ValidateCommand ValidateDuplicateBookmark; - public event VoidHandler SortBookmarksByProtocol; - public event EventHandler ConnectBookmark; - public event ValidateCommand ValidateConnectBookmark; - public event VoidHandler OpenUrl; - public event EventHandler EncodingChanged; - public event BookmarksHandler GetBookmarks; - public event BookmarksHandler GetHistory; - public event BookmarksHandler GetBonjourHosts; - public event VoidHandler ClearHistory; - public event VoidHandler ShowCertificate; - public event VoidHandler ItemsChanged; - public event ValidateCommand ValidatePathsCombobox; - public event ValidateCommand ValidateSearchField; - public event SetComparatorHandler SetComparator; - public event VoidHandler ToggleBookmarks; - public event VoidHandler SortBookmarksByNickname; - public event VoidHandler SortBookmarksByHostname; - public event VoidHandler RevertFile; - public event ValidateCommand ValidateRevertFile; - - public void UpdateBookmarks() - { - ConfigureBookmarkList(bookmarkListView, bookmarkDescriptionColumn, bookmarkImageColumn, activeColumn); - } - - public bool ComboboxPathEnabled - { - set { pathComboBox.Enabled = value; } - } - - public bool HiddenFilesVisible - { - set { showHiddenFilesMainMenuItem.Checked = value; } - } - - public string SearchString - { - get { return searchTextBox.Text; } - set { searchTextBox.Text = value; } - } - - public String DownloadAsDialog(Local initialDirectory, string fileName) - { - saveFileDialog.FileName = fileName; - if (null != initialDirectory) - { - saveFileDialog.InitialDirectory = initialDirectory.getAbsolute(); - } - if (DialogResult.OK == saveFileDialog.ShowDialog(this)) - { - return saveFileDialog.FileName; - } - return null; - } - - public String DownloadToDialog(string description, Local initialDirectory, string selectedPath) - { - folderBrowserDialog.RootFolder = Environment.SpecialFolder.Desktop; - folderBrowserDialog.Description = description; - if (null != selectedPath) - { - folderBrowserDialog.SelectedPath = selectedPath; - } - if (DialogResult.OK == folderBrowserDialog.ShowDialog(this)) - { - return folderBrowserDialog.SelectedPath; - } - return null; - } - - public String SynchronizeDialog(string description, Local initialDirectory, string selectedPath) - { - folderBrowserDialog.RootFolder = Environment.SpecialFolder.Desktop; - folderBrowserDialog.Description = description; - if (null != selectedPath) - { - folderBrowserDialog.SelectedPath = selectedPath; - } - if (DialogResult.OK == folderBrowserDialog.ShowDialog(this)) - { - return folderBrowserDialog.SelectedPath; - } - return null; - } - - public String[] UploadDialog(Local initialDirectory) - { - SelectFileAndFolderDialog dialog = SelectFileAndFolderDialog.Instance; - dialog.AcceptFiles = true; - if (null != initialDirectory) - { - dialog.Path = initialDirectory.getAbsolute(); - } - string selectText = LocaleFactory.localizedString("Choose"); - string canelText = LocaleFactory.localizedString("Cancel"); - - dialog.FileNameLabel = selectText + ":"; - dialog.SelectLabel = "&" + selectText; - dialog.CancelLabel = "&" + canelText; - try - { - dialog.ShowDialog(); - } - catch (Exception e) - { - MessageBox(LocaleFactory.localizedString("Error"), null, e.Message, TaskDialogButtons.OK, SysIcons.Error); - Log.error("Exception while upload selection", e); - } - string[] paths = dialog.SelectedPaths; - if (paths.Length == 0) - { - return null; - } - return paths; - } - - public int NumberOfBookmarks - { - get { return bookmarkListView.GetItemCount(); } - } - - public int NumberOfFiles - { - get { return browser.GetItemCount(); } - } - - public string QuickConnectValue - { - get - { - if (null != quickConnectToolStripComboBox.SelectedItem) - { - return (string) quickConnectToolStripComboBox.SelectedItem; - } - return quickConnectToolStripComboBox.Text; - } - } - - public bool HistoryBackEnabled - { - set { historyBackButton.Enabled = value; } - } - - public bool HistoryForwardEnabled - { - set { historyForwardButton.Enabled = value; } - } - - public bool ParentPathEnabled - { - set { parentPathButton.Enabled = value; } - } - - public string SelectedComboboxPath - { - get { return pathComboBox.Text; } - } - - public Bitmap EditIcon - { - set { editToolStripSplitButton.Image = value; } - } - - public Bitmap OpenIcon - { - set { openInBrowserToolStripButton.Image = value; } - } - - public bool SecureConnectionVisible - { - set { securityToolStripStatusLabel.Visible = value; } - } - - public bool CertBasedConnection - { - set { securityToolStripStatusLabel.Enabled = value; } - } - - public bool ActivityRunning - { - set - { - if (_lastActivityRunning != value) - { - if (value && disconnectStripButton.Image != ResourcesBundle.stop) - { - disconnectStripButton.Image = ResourcesBundle.stop; - disconnectStripButton.Text = LocaleFactory.localizedString("Stop"); - } - else if (!value && disconnectStripButton.Image != ResourcesBundle.eject) - { - disconnectStripButton.Image = ResourcesBundle.eject; - disconnectStripButton.Text = LocaleFactory.localizedString("Disconnect"); - } - _lastActivityRunning = value; - } - } - } - - public bool ShowActivityEnabled - { - set { disconnectStripButton.Enabled = value; } - } - - public void PopulateQuickConnect(List nicknames) - { - quickConnectToolStripComboBox.Items.Clear(); - foreach (string nickname in nicknames) - { - quickConnectToolStripComboBox.Items.Add(nickname); - } - } - - public void BeginBrowserUpdate() - { - browser.BeginUpdate(); - } - - public void EndBrowserUpdate() - { - browser.EndUpdate(); - } - - public void SetBrowserModel(IEnumerable model) - { - // Clear the cache in order to avoid strange side effects - browser.RebuildAll(true); - browser.ClearCachedInfo(); - browser.SetObjects(model); - - //only restore the state for the first time - if (null != model && !_browserStateRestored) - { - byte[] state = PersistenceHandler.Get("tree.state", null); - if (null != state) - { - browser.RestoreState(state); - } - else - { - //by default we sort ascending by filename - browser.Sort(0); - } - _browserStateRestored = true; - } - } - - public void RefreshBrowserObject(Path path) - { - browser.RefreshObject(path); - } - - public void RefreshBrowserObjects(List list) - { - browser.RefreshObjects(list); - } - - public void BrowserActiveStateChanged() - { - browser.Invalidate(); - } - - public TypedColumn.TypedAspectGetterDelegate ModelFilenameGetter - { - set { new TypedColumn(treeColumnName) {AspectGetter = value}; } - } - - public TypedColumn.TypedImageGetterDelegate ModelIconGetter - { - set { new TypedColumn(treeColumnName) {ImageGetter = value}; } - } - - public TypedColumn.TypedAspectGetterDelegate ModelSizeGetter - { - set { new TypedColumn(treeColumnSize) {AspectGetter = value}; } - } - - public AspectToStringConverterDelegate ModelSizeAsStringGetter - { - set { treeColumnSize.AspectToStringConverter = value; } - } - - public TreeListView.CanExpandGetterDelegate ModelCanExpandDelegate - { - set { browser.CanExpandGetter = value; } - } - - public TypedColumn.TypedAspectGetterDelegate ModelModifiedGetter - { - set { new TypedColumn(treeColumnModified) {AspectGetter = value}; } - } - - public AspectToStringConverterDelegate ModelModifiedAsStringGetter - { - set { treeColumnModified.AspectToStringConverter = value; } - } - - public TypedColumn.TypedAspectGetterDelegate ModelOwnerGetter - { - set { new TypedColumn(treeColumnOwner) {AspectGetter = value}; } - } - - public TypedColumn.TypedAspectGetterDelegate ModelGroupGetter - { - set { new TypedColumn(treeColumnGroup) {AspectGetter = value}; } - } - - public TypedColumn.TypedAspectGetterDelegate ModelPermissionsGetter - { - set { new TypedColumn(treeColumnPermissions) {AspectGetter = value}; } - } - - public TypedColumn.TypedAspectGetterDelegate ModelKindGetter - { - set { new TypedColumn(treeColumnKind) {AspectGetter = value}; } - } - - public TypedColumn.TypedAspectGetterDelegate ModelExtensionGetter - { - set { new TypedColumn(treeColumnExtension) {AspectGetter = value}; } - } - - public TypedColumn.TypedAspectGetterDelegate ModelRegionGetter - { - set { new TypedColumn(treeColumnRegion) {AspectGetter = value}; } - } - - public TypedColumn.TypedAspectGetterDelegate ModelVersionGetter - { - set { new TypedColumn(treeColumnVersion) {AspectGetter = value}; } - } - - public MulticolorTreeListView.ActiveGetterPathDelegate ModelActiveGetter - { - set { browser.ActiveGetterPath = value; } - } - - public void AddTranscriptEntry(bool request, string entry) - { - transcriptBox.SelectionFont = FixedFont; - if (request) - { - transcriptBox.SelectionColor = Color.Black; - } - else - { - transcriptBox.SelectionColor = Color.DarkGray; - transcriptBox.SelectionColor = Color.DarkGray; - } - if (transcriptBox.TextLength > 0) - { - entry = Environment.NewLine + entry; - } - transcriptBox.SelectedText = entry; - ScrollToBottom(transcriptBox); - } - - public void ClearTranscript() - { - transcriptBox.Clear(); - } - - public void FocusBrowser() - { - browser.Focus(); - } - - public void RemoveDonateButton() - { - IActiveMenu menu = ActiveMenu.GetInstance(this); - menu.Items.Clear(); - } - - public ObjectListView Browser - { - get { return browser; } - } - - public TreeListView.ChildrenGetterDelegate ModelChildrenGetterDelegate - { - set { browser.ChildrenGetter = value; } - } - - public BrowserView CurrentView - { - get { return _currentView; } - set - { - if (value != _currentView) - { - _currentView = value; - switch (value) - { - case BrowserView.File: - panelManager1.SelectedPanel = managedBrowserPanel1; - browser.Focus(); - EnableViewToolStripButton(browserToolStripButton); - return; - case BrowserView.Bookmark: - panelManager1.SelectedPanel = managedBookmarkPanel2; - EnableViewToolStripButton(bookmarksToolStripButton); - bookmarkListView.Focus(); - return; - case BrowserView.History: - panelManager1.SelectedPanel = managedBookmarkPanel2; - bookmarkListView.Focus(); - EnableViewToolStripButton(historyToolStripButton); - return; - case BrowserView.Bonjour: - panelManager1.SelectedPanel = managedBookmarkPanel2; - bookmarkListView.Focus(); - EnableViewToolStripButton(bonjourToolStripButton); - return; - } - } - } - } - - public string StatusLabel - { - set { statusLabel.Text = value; } - } - - public IList SelectedPaths - { - get { return new List(new ListAdapter(browser.SelectedObjects)); } - set - { - ArrayList s = new ArrayList(); - foreach (Path path in value) - { - s.Add(path); - } - browser.SelectedObjects = s; - if (browser.SelectedItem != null) - { - browser.SelectedItem.Focused = true; - } - } - } - - public List SelectedBookmarks - { - get { return new List(new ListAdapter(bookmarkListView.SelectedObjects)); } - } - - public void EnsureBookmarkVisible(Host host) - { - bookmarkListView.EnsureModelVisible(host); - } - - public void SelectBookmark(Host host) - { - IList selected = new ArrayList(); - selected.Add(host); - bookmarkListView.SelectObjects(selected); - bookmarkListView.EnsureModelVisible(host); - bookmarkListView.Focus(); - } - - public void PopulatePaths(List paths) - { - pathComboBox.Items.Clear(); - pathComboBox.Items.AddRange(paths.ToArray()); - if (paths.Count > 0) - pathComboBox.SelectedIndex = 0; - } - - public void StartRenaming(Path path) - { - browser.EditSubItem(browser.GetItem(browser.IndexOf(path)), 0); - } - - public void StartSearch() - { - searchTextBox.Focus(); - } - - public bool SearchEnabled - { - set { searchTextBox.Enabled = value; } - } - - public IList VisiblePaths - { - get - { - int count = browser.GetItemCount(); - IList paths = new List(count); - for (int i = 0; i < browser.GetItemCount(); i++) - { - paths.Add((Path) browser.GetModelObject(i)); - } - return paths; - } - } - - public void StartActivityAnimation() - { - toolStripProgress.Visible = true; - } - - public void StopActivityAnimation() - { - toolStripProgress.Visible = false; - } - - public Filter FilenameFilter - { - set - { - if (null == value) - { - browser.UseFiltering = false; - } - else - { - browser.ModelFilter = new FilterWrapper(value); - browser.UseFiltering = true; - } - } - } - - public bool LogDrawerVisible - { - get { return !splitContainer.Panel2Collapsed; } - set { splitContainer.Panel2Collapsed = !value; } - } - - public Host SelectedBookmark - { - get { return (Host) bookmarkListView.SelectedObject; } - } - - public ImageGetterDelegate BookmarkImageGetter - { - set { bookmarkImageColumn.ImageGetter = value; } - } - - public AspectGetterDelegate BookmarkNicknameGetter - { - set { bookmarkDescriptionColumn.AspectGetter = value; } - } - - public AspectGetterDelegate BookmarkHostnameGetter - { - set { ((AbstractBookmarkRenderer) bookmarkDescriptionColumn.Renderer).HostnameAspectGetter = value; } - } - - public AspectGetterDelegate BookmarkUrlGetter - { - set { ((AbstractBookmarkRenderer) bookmarkDescriptionColumn.Renderer).UrlAspectGetter = value; } - } - - public AspectGetterDelegate BookmarkNotesGetter - { - set { ((AbstractBookmarkRenderer) bookmarkDescriptionColumn.Renderer).NotesAspectGetter = value; } - } - - public ImageGetterDelegate BookmarkStatusImageGetter - { - set { activeColumn.ImageGetter = value; } - } - - public void SetBookmarkModel(IEnumerable hosts, Host selected) - { - int index = -1; - if (null != selected) - { - OLVListItem item = bookmarkListView.ModelToItem(selected); - if (null != item) - { - index = item.Index; - } - } - bookmarkListView.SetObjects(hosts, true); - if (index != -1 && bookmarkListView.Items.Count > 0) - { - if (index >= bookmarkListView.Items.Count) - { - index = bookmarkListView.Items.Count - 1; - } - bookmarkListView.EnsureVisible(index); - } - } - - public void RefreshBookmark(Host host) - { - bookmarkListView.RefreshObject(host); - } - - public void AddBookmark(Host host) - { - bookmarkListView.AddObject(host); - } - - public void RemoveBookmark(Host host) - { - bookmarkListView.RemoveObject(host); - } - - public string WindowTitle - { - set { Text = value; } - } - - public bool ToolbarVisible - { - set - { - toolBar.Visible = value; - toggleToolbarToolStripMenuItem.Text = - LocaleFactory.localizedString(value ? "Hide Toolbar" : "Show Toolbar"); - toggleToolbarMainMenuItem.Text = LocaleFactory.localizedString(value ? "Hide Toolbar" : "Show Toolbar"); - } - get { return toolBar.Visible; } - } - - public int TopItemIndex - { - set { browser.TopItemIndex = value; } - get { return browser.TopItemIndex; } - } - - public void PopulateEncodings(List encodings) - { - textEncodingMainMenuItem.MenuItems.Clear(); - foreach (string encoding in encodings) - { - string encoding1 = encoding; - textEncodingMainMenuItem.MenuItems.Add(encoding, - (sender, args) => EncodingChanged(sender, new EncodingChangedArgs(encoding1))); - } - } - - public string SelectedEncoding - { - set - { - foreach (MenuItem item in textEncodingMainMenuItem.MenuItems) - { - item.Checked = value.Equals(item.Text); - } - } - } - - public bool SecureConnection - { - set { securityToolStripStatusLabel.Image = IconCache.Instance.IconForName(value ? "locked" : "unlocked"); } - } - - public static void ScrollToBottom(RichTextBox richTextBox) - { - NativeMethods.SendMessage(richTextBox.Handle, NativeConstants.WM_VSCROLL, NativeConstants.SB_BOTTOM, 0); - } - - private void AddDonateButton() - { - IActiveMenu menu = ActiveMenu.GetInstance(this); - ActiveButton button = new ActiveButton(); - button.Font = new Font(base.Font.FontFamily, 7.5F, FontStyle.Bold); - button.ForeColor = Color.White; - button.BackColor = Color.Firebrick; - button.FlatAppearance.BorderSize = 0; - button.FlatStyle = FlatStyle.Flat; - - button.Text = " " + LocaleFactory.localizedString("Get a donation key!", "License") + " "; - button.Click += - delegate { BrowserLauncherFactory.get().open(PreferencesFactory.get().getProperty("website.donate")); }; - menu.Items.Add(button); - } - - private void SetupComparators() - { - treeColumnName.ComparatorGetter = (SortOrder order) => new FilenameComparator(order == SortOrder.Ascending); - treeColumnSize.ComparatorGetter = (SortOrder order) => new SizeComparator(order == SortOrder.Ascending); - treeColumnModified.ComparatorGetter = - (SortOrder order) => new TimestampComparator(order == SortOrder.Ascending); - treeColumnOwner.ComparatorGetter = (SortOrder order) => new OwnerComparator(order == SortOrder.Ascending); - treeColumnGroup.ComparatorGetter = (SortOrder order) => new GroupComparator(order == SortOrder.Ascending); - treeColumnPermissions.ComparatorGetter = - (SortOrder order) => new PermissionsComparator(order == SortOrder.Ascending); - treeColumnKind.ComparatorGetter = (SortOrder order) => new FileTypeComparator(order == SortOrder.Ascending); - treeColumnExtension.ComparatorGetter = - (SortOrder order) => new ExtensionComparator(order == SortOrder.Ascending); - treeColumnRegion.ComparatorGetter = (SortOrder order) => new RegionComparator(order == SortOrder.Ascending); - treeColumnVersion.ComparatorGetter = - (SortOrder order) => new VersionComparator(order == SortOrder.Ascending); - } - - private void BeforeSorting(object sender, BeforeSortingEventArgs args) - { - args.Handled = true; - if (_sorting || null == args.ColumnToSort) return; - try - { - _sorting = true; - SetComparator(((SortComparatorOLVColumn) args.ColumnToSort).ComparatorGetter(args.SortOrder)); - } - finally - { - _sorting = false; - } - } - - private void OnEditMenuItemPopup(object sender, EventArgs e) - { - MenuItem mainItem = sender as MenuItem; - mainItem.MenuItems.Clear(); - - //Add default entry - { - MenuItem item = mainItem.MenuItems.Add(LocaleFactory.localizedString("Default")); - item.Click += delegate { EditEvent(null); }; - //todo refactor! no direct IconCache access. - vistaMenu1.SetImage(item, IconCache.ResizeImage(editToolStripSplitButton.Image, new Size(16, 16))); - SetShortcutText(item, editWithToolStripMenuItem, null); - } - IList editors = GetEditorsForSelection(); - if (editors.Count > 0) - { - mainItem.MenuItems.Add("-"); - } - foreach (Application app in editors) - { - MenuItem item = mainItem.MenuItems.Add(app.getName()); - item.Tag = app.getIdentifier(); - item.Click += delegate { EditEvent(item.Tag as String); }; - vistaMenu1.UpdateParent(mainItem); - vistaMenu1.SetImage(item, - IconCache.Instance.ExtractIconFromExecutable(app.getIdentifier(), IconCache.IconSize.Small)); - } - vistaMenu1.UpdateParent(browserContextMenu); - } - - private void OnArchiveMenuStripOpening(object sender, CancelEventArgs e) - { - archiveMenuStrip.Items.Clear(); - foreach (string archive in GetArchives()) - { - ToolStripMenuItem item = new ToolStripMenuItem(archive); - string archiveName = archive; - item.Click += delegate { CreateArchive(this, new CreateArchiveEventArgs(archiveName)); }; - archiveMenuStrip.Items.Add(item); - } - } - - private void OnEditorActionMenuOpening(object sender, EventArgs e) - { - editorMenuStrip.Items.Clear(); - foreach (Application app in GetEditorsForSelection()) - { - ToolStripItem item = new ToolStripMenuItem(app.getName()); - item.Tag = app.getIdentifier(); - item.Image = IconCache.Instance.ExtractIconFromExecutable(app.getIdentifier(), IconCache.IconSize.Small); - item.Click += (o, args) => EditEvent(item.Tag as String); - editorMenuStrip.Items.Add(item); - } - if (editorMenuStrip.Items.Count == 0) - { - //Add default entry - ToolStripItem item = new ToolStripMenuItem(LocaleFactory.localizedString("Default")); - item.Image = editToolStripSplitButton.Image; - item.Click += (o, args) => EditEvent(null); - editorMenuStrip.Items.Add(item); - } - } - - private void OnCopyUrlMenuItemPopup(object sender, EventArgs e) - { - PopulateCopyUrlMenuItemPopup(sender as MenuItem, GetCopyUrls()); - } - - private void PopulateCopyUrlMenuItemPopup(MenuItem mainItem, IList>> items) - { - mainItem.MenuItems.Clear(); - int c = 0; - foreach (KeyValuePair> pair in items) - { - if (c > 0) - { - //add separator - mainItem.MenuItems.Add("-"); - } - MenuItem item = mainItem.MenuItems.Add(pair.Key); - if (pair.Value.Count > 0) - { - KeyValuePair> pair1 = pair; - item.Click += delegate - { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < pair1.Value.Count; i++) - { - if (i > 0) sb.Append(Environment.NewLine); - sb.Append(pair1.Value[i]); - } - try - { - Clipboard.SetDataObject(sb.ToString(), true, 5, 25); - } - catch (ExternalException exception) - { - Log.error("Could not copy URL to clipboard"); - } - }; - foreach (string url in pair.Value) - { - mainItem.MenuItems.Add(url).Enabled = false; - } - } - else - { - item.Enabled = false; - } - c++; - } - } - - private void OnOpenUrlMenuItemPopup(object sender, EventArgs e) - { - PopulateOpenUrlMenuItemPopup(sender as MenuItem, GetOpenUrls()); - } - - private void PopulateOpenUrlMenuItemPopup(MenuItem mainItem, IList>> items) - { - mainItem.MenuItems.Clear(); - int c = 0; - foreach (KeyValuePair> pair in items) - { - if (c > 0) - { - //add separator - mainItem.MenuItems.Add("-"); - } - MenuItem item = mainItem.MenuItems.Add(pair.Key); - if (pair.Value.Count > 0) - { - KeyValuePair> pair1 = pair; - item.Click += delegate - { - for (int i = 0; i < pair1.Value.Count; i++) - { - BrowserLauncherFactory.get().open(pair1.Value[i]); - } - }; - foreach (string url in pair.Value) - { - mainItem.MenuItems.Add(url).Enabled = false; - } - } - else - { - item.Enabled = false; - } - c++; - } - } - - private void SetShortcutText(MenuItem target, ToolStripMenuItem source, string shortCutText) - { - if (-1 == target.Text.IndexOf('\t')) - { - target.Text = String.Format("{0}\t{1}", target.Text, ShortcutToText(source.ShortcutKeys, shortCutText)); - } - } - - private void ConfigureActionlessCommands() - { - Commands.Add(pathComboBox, () => ValidatePathsCombobox()); - Commands.Add(searchTextBox, () => ValidateSearchField()); - } - - private void UpdateSeparators() - { - toolStripSeparatorAfterOpenConnection.Visible = openConnectionToolStripMenuItem1.Checked; - toolStripSeparatorAfterAction.Visible = quickConnectToolStripMenuItem.Checked || - actionToolStripMenuItem.Checked; - toolStripSeparatorAfterRefresh.Visible = infoToolStripMenuItem1.Checked || refreshToolStripMenuItem1.Checked; - toolStripSeparatorAfterDelete.Visible = editToolStripMenuItem1.Checked || - openInWebBrowserToolStripMenuItem.Checked || - newFolderToolStripMenuItem1.Checked || - openInTerminalToolStripMenuItem.Checked || - deleteToolStripMenuItem1.Checked; - - //new - toolStripSeparatorAfterOpenConnection.Visible = openConnectionToolbarMenuItem.Checked; - toolStripSeparatorAfterAction.Visible = quickConnectToolbarMenuItem.Checked || - actionContextToolbarMenuItem.Checked; - toolStripSeparatorAfterRefresh.Visible = infoToolbarMenuItem.Checked || refreshToolbarMenuItem.Checked; - toolStripSeparatorAfterDelete.Visible = editToolbarMenuItem.Checked || - openInWebBrowserToolbarMenuItem.Checked || - newFolderToolbarMenuItem.Checked || - openInTerminalToolbarMenuItem.Checked || - deleteToolbarMenuItem.Checked; - } - - internal static string ShortcutToText(Keys shortcutKeys, string shortcutKeyDisplayString) - { - if (!string.IsNullOrEmpty(shortcutKeyDisplayString)) - { - return shortcutKeyDisplayString; - } - if (shortcutKeys == Keys.None) - { - return String.Empty; - } - return ShortcutConverter.ConvertToString(shortcutKeys); - } - - private void ConfigureToolbar() - { - //new - customizeToolbarMainMenuItem.MenuItems.Clear(); - - EventHandler h; - MenuItem m; - - openConnectionToolStripMenuItem1.CheckOnClick = true; - h = delegate - { - openConnectionToolbarMenuItem.Checked = !openConnectionToolbarMenuItem.Checked; - openConnectionToolStripButton.Visible = !openConnectionToolStripButton.Visible; - UpdateSeparators(); - PreferencesFactory.get() - .setProperty("browser.toolbar.openconnection", openConnectionToolStripButton.Visible); - }; - openConnectionToolStripMenuItem1.Click += h; - openConnectionToolbarMenuItem.Click += h; - m = new MenuItem(openConnectionToolbarMenuItem.Text, h); - m.Tag = openConnectionToolbarMenuItem; - customizeToolbarMainMenuItem.MenuItems.Add(m); - customizeToolbarMainMenuItem.MenuItems.Add("-"); - - quickConnectToolStripMenuItem.CheckOnClick = true; - h = delegate - { - quickConnectToolbarMenuItem.Checked = !quickConnectToolbarMenuItem.Checked; - quickConnectToolStripComboBox.Visible = !quickConnectToolStripComboBox.Visible; - UpdateSeparators(); - PreferencesFactory.get() - .setProperty("browser.toolbar.quickconnect", quickConnectToolStripComboBox.Visible); - }; - quickConnectToolStripMenuItem.Click += h; - quickConnectToolbarMenuItem.Click += h; - m = new MenuItem(quickConnectToolbarMenuItem.Text, h); - m.Tag = quickConnectToolbarMenuItem; - customizeToolbarMainMenuItem.MenuItems.Add(m); - - actionToolStripMenuItem.CheckOnClick = true; - h = delegate - { - actionContextToolbarMenuItem.Checked = !actionContextToolbarMenuItem.Checked; - actionToolStripDropDownButton.Visible = !actionToolStripDropDownButton.Visible; - UpdateSeparators(); - PreferencesFactory.get().setProperty("browser.toolbar.action", actionToolStripDropDownButton.Visible); - }; - actionToolStripMenuItem.Click += h; - actionContextToolbarMenuItem.Click += h; - m = new MenuItem(actionContextToolbarMenuItem.Text, h); - m.Tag = actionContextToolbarMenuItem; - customizeToolbarMainMenuItem.MenuItems.Add(m); - customizeToolbarMainMenuItem.MenuItems.Add("-"); - - infoToolStripMenuItem1.CheckOnClick = true; - h = delegate - { - infoToolbarMenuItem.Checked = !infoToolbarMenuItem.Checked; - infoToolStripButton.Visible = !infoToolStripButton.Visible; - UpdateSeparators(); - PreferencesFactory.get().setProperty("browser.toolbar.info", infoToolStripButton.Visible); - }; - infoToolStripMenuItem1.Click += h; - infoToolbarMenuItem.Click += h; - m = new MenuItem(infoToolbarMenuItem.Text, h); - m.Tag = infoToolbarMenuItem; - customizeToolbarMainMenuItem.MenuItems.Add(m); - - refreshToolStripMenuItem1.CheckOnClick = true; - h = delegate - { - refreshToolbarMenuItem.Checked = !refreshToolbarMenuItem.Checked; - refreshToolStripButton.Visible = !refreshToolStripButton.Visible; - UpdateSeparators(); - PreferencesFactory.get().setProperty("browser.toolbar.refresh", refreshToolStripButton.Visible); - }; - refreshToolStripMenuItem1.Click += h; - refreshToolbarMenuItem.Click += h; - m = new MenuItem(refreshToolbarMenuItem.Text, h); - m.Tag = refreshToolbarMenuItem; - customizeToolbarMainMenuItem.MenuItems.Add(m); - customizeToolbarMainMenuItem.MenuItems.Add("-"); - - editToolStripMenuItem1.CheckOnClick = true; - h = delegate - { - editToolbarMenuItem.Checked = !editToolbarMenuItem.Checked; - editToolStripSplitButton.Visible = !editToolStripSplitButton.Visible; - UpdateSeparators(); - PreferencesFactory.get().setProperty("browser.toolbar.edit", editToolStripSplitButton.Visible); - }; - editToolStripMenuItem1.Click += h; - editToolbarMenuItem.Click += h; - m = new MenuItem(editToolbarMenuItem.Text, h); - m.Tag = editToolbarMenuItem; - customizeToolbarMainMenuItem.MenuItems.Add(m); - - openInWebBrowserToolStripMenuItem.CheckOnClick = true; - h = delegate - { - openInWebBrowserToolbarMenuItem.Checked = !openInWebBrowserToolbarMenuItem.Checked; - openInBrowserToolStripButton.Visible = !openInBrowserToolStripButton.Visible; - UpdateSeparators(); - PreferencesFactory.get() - .setProperty("browser.toolbar.openinbrowser", openInBrowserToolStripButton.Visible); - }; - openInWebBrowserToolStripMenuItem.Click += h; - openInWebBrowserToolbarMenuItem.Click += h; - m = new MenuItem(openInWebBrowserToolbarMenuItem.Text, h); - m.Tag = openInWebBrowserToolbarMenuItem; - customizeToolbarMainMenuItem.MenuItems.Add(m); - - openInTerminalToolStripMenuItem.CheckOnClick = true; - h = delegate - { - openInTerminalToolbarMenuItem.Checked = !openInTerminalToolbarMenuItem.Checked; - openInTerminalToolStripButton.Visible = !openInTerminalToolStripButton.Visible; - UpdateSeparators(); - PreferencesFactory.get() - .setProperty("browser.toolbar.openinterminal", openInTerminalToolStripButton.Visible); - }; - openInTerminalToolStripMenuItem.Click += h; - openInTerminalToolbarMenuItem.Click += h; - m = new MenuItem(openInTerminalToolbarMenuItem.Text, h); - m.Tag = openInTerminalToolbarMenuItem; - customizeToolbarMainMenuItem.MenuItems.Add(m); - - newFolderToolStripMenuItem1.CheckOnClick = true; - h = delegate - { - newFolderToolbarMenuItem.Checked = !newFolderToolbarMenuItem.Checked; - newFolderToolStripButton.Visible = !newFolderToolStripButton.Visible; - UpdateSeparators(); - PreferencesFactory.get().setProperty("browser.toolbar.newfolder", newFolderToolStripButton.Visible); - }; - newFolderToolStripMenuItem1.Click += h; - newFolderToolbarMenuItem.Click += h; - m = new MenuItem(newFolderToolbarMenuItem.Text, h); - m.Tag = newFolderToolbarMenuItem; - customizeToolbarMainMenuItem.MenuItems.Add(m); - - deleteToolStripMenuItem1.CheckOnClick = true; - h = delegate - { - deleteToolbarMenuItem.Checked = !deleteToolbarMenuItem.Checked; - deleteToolStripButton.Visible = !deleteToolStripButton.Visible; - UpdateSeparators(); - PreferencesFactory.get().setProperty("browser.toolbar.delete", deleteToolStripButton.Visible); - }; - deleteToolStripMenuItem1.Click += h; - deleteToolbarMenuItem.Click += h; - m = new MenuItem(deleteToolbarMenuItem.Text, h); - m.Tag = deleteToolbarMenuItem; - customizeToolbarMainMenuItem.MenuItems.Add(m); - customizeToolbarMainMenuItem.MenuItems.Add("-"); - - downloadToolStripMenuItem1.CheckOnClick = true; - h = delegate - { - downloadToolbarMenuItem.Checked = !downloadToolbarMenuItem.Checked; - downloadToolStripButton.Visible = !downloadToolStripButton.Visible; - UpdateSeparators(); - PreferencesFactory.get().setProperty("browser.toolbar.download", downloadToolStripButton.Visible); - }; - downloadToolStripMenuItem1.Click += h; - downloadToolbarMenuItem.Click += h; - m = new MenuItem(downloadToolbarMenuItem.Text, h); - m.Tag = downloadToolbarMenuItem; - customizeToolbarMainMenuItem.MenuItems.Add(m); - - uploadToolStripMenuItem1.CheckOnClick = true; - h = delegate - { - uploadToolbarMenuItem.Checked = !uploadToolbarMenuItem.Checked; - uploadToolStripButton.Visible = !uploadToolStripButton.Visible; - UpdateSeparators(); - PreferencesFactory.get().setProperty("browser.toolbar.upload", uploadToolStripButton.Visible); - }; - uploadToolStripMenuItem1.Click += h; - uploadToolbarMenuItem.Click += h; - m = new MenuItem(uploadToolbarMenuItem.Text, h); - m.Tag = uploadToolbarMenuItem; - customizeToolbarMainMenuItem.MenuItems.Add(m); - - transfersToolStripMenuItem1.CheckOnClick = true; - h = delegate - { - transfersToolbarMenuItem.Checked = !transfersToolbarMenuItem.Checked; - transfersToolStripButton.Visible = !transfersToolStripButton.Visible; - UpdateSeparators(); - PreferencesFactory.get().setProperty("browser.toolbar.transfers", transfersToolStripButton.Visible); - }; - transfersToolStripMenuItem1.Click += h; - transfersToolbarMenuItem.Click += h; - m = new MenuItem(transfersToolbarMenuItem.Text, h); - m.Tag = transfersToolbarMenuItem; - customizeToolbarMainMenuItem.MenuItems.Add(m); - - logToolStripMenuItem1.CheckOnClick = true; - h = delegate - { - logToolbarMenuItem.Checked = !logToolbarMenuItem.Checked; - logToolStripButton.Visible = !logToolStripButton.Visible; - UpdateSeparators(); - PreferencesFactory.get().setProperty("browser.toolbar.log", logToolStripButton.Visible); - }; - logToolStripMenuItem1.Click += h; - logToolbarMenuItem.Click += h; - m = new MenuItem(logToolbarMenuItem.Text, h); - m.Tag = logToolbarMenuItem; - customizeToolbarMainMenuItem.MenuItems.Add(m); - - bool b1 = - openConnectionToolStripButton.Visible = - PreferencesFactory.get().getBoolean("browser.toolbar.openconnection"); - bool b2 = - quickConnectToolStripComboBox.Visible = - PreferencesFactory.get().getBoolean("browser.toolbar.quickconnect"); - bool b3 = - actionToolStripDropDownButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.action"); - bool b4 = infoToolStripButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.info"); - bool b5 = refreshToolStripButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.refresh"); - bool b6 = editToolStripSplitButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.edit"); - bool b7 = - openInBrowserToolStripButton.Visible = - PreferencesFactory.get().getBoolean("browser.toolbar.openinbrowser"); - bool b8 = - openInTerminalToolStripButton.Visible = - PreferencesFactory.get().getBoolean("browser.toolbar.openinterminal"); - bool b9 = - newFolderToolStripButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.newfolder"); - bool b10 = deleteToolStripButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.delete"); - bool b11 = downloadToolStripButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.download"); - bool b12 = uploadToolStripButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.upload"); - bool b13 = - transfersToolStripButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.transfers"); - bool b14 = logToolStripButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.log"); - - // update menu entries - openConnectionToolStripMenuItem1.Checked = b1; - quickConnectToolStripMenuItem.Checked = b2; - actionToolStripMenuItem.Checked = b3; - infoToolStripMenuItem1.Checked = b4; - refreshToolStripMenuItem1.Checked = b5; - editToolStripMenuItem1.Checked = b6; - openInWebBrowserToolStripMenuItem.Checked = b7; - openInTerminalToolStripMenuItem.Checked = b8; - newFolderToolStripMenuItem1.Checked = b9; - deleteToolStripMenuItem1.Checked = b10; - downloadToolStripMenuItem1.Checked = b11; - uploadToolStripMenuItem1.Checked = b12; - transfersToolStripMenuItem1.Checked = b13; - logToolStripMenuItem1.Checked = b14; - - openConnectionToolbarMenuItem.Checked = b1; - quickConnectToolbarMenuItem.Checked = b2; - actionContextToolbarMenuItem.Checked = b3; - infoToolbarMenuItem.Checked = b4; - refreshToolbarMenuItem.Checked = b5; - editToolbarMenuItem.Checked = b6; - openInWebBrowserToolbarMenuItem.Checked = b7; - openInTerminalToolbarMenuItem.Checked = b8; - newFolderToolbarMenuItem.Checked = b9; - deleteToolbarMenuItem.Checked = b10; - downloadToolbarMenuItem.Checked = b11; - uploadToolbarMenuItem.Checked = b12; - transfersToolbarMenuItem.Checked = b13; - logToolbarMenuItem.Checked = b14; - - UpdateSeparators(); - } - - public event VoidHandler OpenDownloadFolderEvent; - - private void ConfigureBookmarkCommands() - { - Commands.Add(new ToolStripItem[] {viewBookmarksToolStripMenuItem}, new[] {toggleBookmarksMainMenuItem}, - (sender, args) => ToggleBookmarks(), () => true); - Commands.Add(new ToolStripItem[] {}, - new[] {sortByHostnameMainMenuItem, sortByHostnameBookmarkContextMenuItem}, - (sender, args) => SortBookmarksByHostname(), () => true); - Commands.Add(new ToolStripItem[] {}, - new[] {sortByNicknameMainMenuItem, sortByNicknameBookmarkContextMenuItem}, - (sender, args) => SortBookmarksByNickname(), () => true); - Commands.Add(new ToolStripItem[] {}, - new[] {sortByProtocolMainMenuItem, sortByProtocolBookmarkContextMenuItem}, - (sender, args) => SortBookmarksByProtocol(), () => true); - Commands.Add(new ToolStripItem[] {connectBookmarkContextToolStripMenuItem,}, - new[] {connectBookmarkContextMenuItem}, - (sender, args) => - ConnectBookmark(this, new ConnectBookmarkArgs(bookmarkListView.SelectedObject as Host)), - () => ValidateConnectBookmark()); - Commands.Add( - new ToolStripItem[] - { - newBookmarkToolStripMenuItem, newBookmarkContextToolStripMenuItem, newBookmarkContextToolStripMenuItem1, - newBookmarkToolStripButton - }, - new[] {newBookmarkContextMenuItem, newBookmarkMainMenuItem, newBookmarkBrowserContextMenuItem}, - (sender, args) => NewBookmark(), () => ValidateNewBookmark()); - Commands.Add( - new ToolStripItem[] - {editBookmarkToolStripMenuItem, editBookmarkContextToolStripMenuItem1, editBookmarkToolStripButton}, - new[] {editBookmarkMainMenuItem, editBookmarkContextMenuItem}, (sender, args) => EditBookmark(), - () => ValidateEditBookmark()); - Commands.Add( - new ToolStripItem[] - { - deleteBookmarkToolStripMenuItem, deleteBookmarkContextToolStripMenuItem1, deleteBookmarkToolStripButton - }, new[] {deleteBookmarkContextMenuItem, deleteBookmarkMainMenuItem}, (sender, args) => DeleteBookmark(), - () => ValidateDeleteBookmark()); - Commands.Add(new ToolStripItem[] {duplicateBookmarkToolStripMenuItem1, duplicateBookmarkToolStripMenuItem}, - new[] {duplicateBookmarkContextMenuItem, duplicateBookmarkMainMenuItem}, - (sender, args) => DuplicateBookmark(), () => ValidateDuplicateBookmark()); - } - - private void ConfigureBookmarkList(ObjectListView l, OLVColumn descColumn, OLVColumn imageColumn, - OLVColumn activeColumn) - { - l.ShowGroups = false; - l.UseOverlays = false; - l.OwnerDraw = true; - l.FullRowSelect = true; - l.MultiSelect = true; - l.HeaderStyle = ColumnHeaderStyle.None; - l.HideSelection = false; - l.AllowDrop = true; - l.DropSink = new HostDropSink(this); - l.DragSource = new HostDragSource(this); - - int size = PreferencesFactory.get().getInteger("bookmark.icon.size"); - AbstractBookmarkRenderer previous = (AbstractBookmarkRenderer) descColumn.Renderer; - - AbstractBookmarkRenderer r; - Font f; - switch (size) - { - case BookmarkController.SmallBookmarkSize: - r = new SmallBookmarkRenderer(); - r.NicknameFont = new Font(bookmarkListView.Font, FontStyle.Bold); - - l.RowHeight = 24; - imageColumn.Width = 25; - f = new Font(bookmarkListView.Font.FontFamily, bookmarkListView.Font.Size - 1); - break; - case BookmarkController.MediumBookmarkSize: - r = new MediumBookmarkRenderer(); - l.RowHeight = 42; - imageColumn.Width = 40; - f = new Font(bookmarkListView.Font.FontFamily, bookmarkListView.Font.Size - 2); - - break; - case BookmarkController.LargeBookmarkSize: - default: - r = new LargeBookmarkRenderer(); - - l.RowHeight = 72; - imageColumn.Width = 90; - f = new Font(bookmarkListView.Font.FontFamily, bookmarkListView.Font.Size - 1); - break; - } - r.NicknameFont = new Font(f, FontStyle.Bold); - r.HostnameFont = f; - r.UrlFont = f; - r.NotesFont = f; - r.UrlNotesSpace = 3; - - descColumn.Renderer = r; - descColumn.FillsFreeSpace = true; - - - imageColumn.TextAlign = HorizontalAlignment.Center; - imageColumn.CellVerticalAlignment = StringAlignment.Center; - imageColumn.Renderer = new FixedImageRenderer(); - - activeColumn.CellVerticalAlignment = StringAlignment.Center; - activeColumn.Renderer = new FixedImageRenderer(); - - if (previous != null) - { - r.HostnameAspectGetter = previous.HostnameAspectGetter; - r.NotesAspectGetter = previous.NotesAspectGetter; - r.UrlAspectGetter = previous.UrlAspectGetter; - l.RebuildColumns(); - } - } - - private void EnableViewToolStripButton(ToolStripButton cb) - { - browserToolStripButton.Checked = false; - bookmarksToolStripButton.Checked = false; - historyToolStripButton.Checked = false; - bonjourToolStripButton.Checked = false; - - cb.Checked = true; - } - - private void ConfigureHelpCommands() - { - //direct commands - Commands.Add(new ToolStripItem[] {acknowledgmentsToolStripMenuItem}, new[] {acknowledgmentsMainMenuItem}, - (sender, args) => ApplicationLauncherFactory.get().open(LocalFactory.get("Acknowledgments.rtf")), - () => true); - Commands.Add(new ToolStripItem[] {cyberduckHelpToolStripMenuItem}, new[] {helpMainMenuItem}, - (sender, args) => - BrowserLauncherFactory.get().open(PreferencesFactory.get().getProperty("website.help")), () => true); - Commands.Add(new ToolStripItem[] {cyberduckHelpToolStripMenuItem}, new[] {donateMainMenuItem}, - (sender, args) => - BrowserLauncherFactory.get().open(PreferencesFactory.get().getProperty("website.donate")), - () => true); - Commands.Add(new ToolStripItem[] {reportABugToolStripMenuItem}, new[] {bugMainMenuItem}, - (sender, args) => - BrowserLauncherFactory.get() - .open(String.Format(PreferencesFactory.get().getProperty("website.bug"), - PreferencesFactory.get().getProperty("application.version"))), () => true); - Commands.Add(new ToolStripItem[] {aboutCyberduckToolStripMenuItem}, new[] {aboutMainMenuItem}, - (sender, args) => new AboutBox().ShowDialog(), () => true); - Commands.Add(new ToolStripItem[] {licenseToolStripMenuItem}, new[] {licenseMainMenuItem}, - (sender, args) => ApplicationLauncherFactory.get().open(LocalFactory.get("License.txt")), () => true); - Commands.Add(new ToolStripItem[] {checkToolStripMenuItem}, new[] {updateMainMenuItem}, - (sender, args) => UpdateController.Instance.ForceCheckForUpdates(false), () => true); - } - - private void ConfigureGoCommands() - { - Commands.Add( - new ToolStripItem[] {refreshToolStripMenuItem, refreshContextToolStripMenuItem, refreshToolStripButton}, - new[] {refreshMainMenuItem, refreshBrowserContextMenuItem}, (sender, args) => RefreshBrowser(), - () => ValidateRefresh()); - Commands.Add(new ToolStripItem[] {gotoFolderToolStripMenuItem}, new[] {goToFolderMainMenuItem}, - (sender, args) => GotoFolder(), () => ValidateGotoFolder()); - Commands.Add(new ToolStripItem[] {backToolStripMenuItem}, new Control[] {historyBackButton}, - new[] {backMainMenuItem}, (sender, args) => HistoryBack(), () => ValidateHistoryBack()); - Commands.Add(new ToolStripItem[] {forwardToolStripMenuItem}, new Control[] {historyForwardButton}, - new[] {forwardMainMenuItem}, (sender, args) => HistoryForward(), () => ValidateHistoryForward()); - Commands.Add(new ToolStripItem[] {enclosingFolderToolStripMenuItem}, new Control[] {parentPathButton}, - new[] {enclosingFolderMainMenuItem}, (sender, args) => FolderUp(), () => ValidateFolderUp()); - Commands.Add(new ToolStripItem[] {insideToolStripMenuItem}, new[] {insideMainMenuItem}, - (sender, args) => FolderInside(), () => ValidateFolderInside()); - Commands.Add(new ToolStripItem[] {searchToolStripMenuItem}, new[] {searchMainMenuItem}, - (sender, args) => Search(), () => ValidateSearchField()); - Commands.Add(new ToolStripItem[] {sendCommandToolStripMenuItem}, new[] {sendCommandMainMenuItem}, - (sender, args) => SendCustomCommand(), () => ValidateSendCustomCommand()); - Commands.Add(new ToolStripItem[] {openInTerminalToolStripButton}, new[] {openInTerminalMainMenuItem}, - (sender, args) => OpenInTerminal(), () => ValidateOpenInTerminal()); - Commands.Add(new ToolStripItem[] {stopToolStripMenuItem}, new[] {stopMainMenuItem}, (sender, args) => Stop(), - () => ValidateStop()); - Commands.Add(new ToolStripItem[] {disconnectToolStripMenuItem, disconnectStripButton}, - new[] {disconnectMainMenuItem}, (sender, args) => Disconnect(), () => ValidateDisconnect()); - - vistaMenu1.SetImage(refreshMainMenuItem, IconCache.Instance.IconForName("reload", 16)); - vistaMenu1.SetImage(refreshBrowserContextMenuItem, IconCache.Instance.IconForName("reload", 16)); - refreshContextToolStripMenuItem.Image = IconCache.Instance.IconForName("reload", 16); - vistaMenu1.SetImage(stopMainMenuItem, IconCache.Instance.IconForName("stop", 16)); - vistaMenu1.SetImage(disconnectMainMenuItem, IconCache.Instance.IconForName("eject", 16)); - } - - private void ConfigureViewCommands() - { - Commands.Add(new ToolStripItem[] {toggleToolbarToolStripMenuItem}, new[] {toggleToolbarMainMenuItem}, - (sender, args) => ToggleToolbar(), () => true); - Commands.Add(new ToolStripItem[] {showHiddenFilesToolStripMenuItem}, new[] {showHiddenFilesMainMenuItem}, - (sender, args) => ShowHiddenFiles(), () => true); - Commands.Add(new ToolStripItem[] {textEncodingToolStripMenuItem}, new[] {textEncodingMainMenuItem}, null, - () => ValidateTextEncoding()); - Commands.Add(new ToolStripItem[] {toggleLogDrawerToolStripMenuItem, logToolStripButton}, - new[] {toggleLogDrawerMainMenuItem}, (sender, args) => ToggleLogDrawer(), () => true); - } - - private void ConfigureWindowCommands() - { - Commands.Add(new ToolStripItem[] {transfersToolStripMenuItem, transfersToolStripButton}, - new[] {transfersMainMenuItem}, (sender, args) => ShowTransfers(), () => true); - Commands.Add(new ToolStripItem[] {activitiyToolStripMenuItem,}, new[] {activityMainMenuItem}, - (sender, args) => ((Form) ActivityController.Instance.View).Show(), () => false); - Commands.Add(new ToolStripItem[] {minimizeToolStripMenuItem,}, new[] {minimizeMainMenuItem}, - (sender, args) => WindowState = FormWindowState.Minimized, () => true); - } - - private void ConfigureEditCommands() - { - Commands.Add(new ToolStripItem[] {cutToolStripMenuItem}, new[] {cutMainMenuItem}, (sender, args) => Cut(), - () => ValidateCut()); - Commands.Add(new ToolStripItem[] {copyToolStripMenuItem}, new[] {copyMainMenuItem}, (sender, args) => Copy(), - () => ValidateCopy()); - Commands.Add(new ToolStripItem[] {pasteToolStripMenuItem}, new[] {pasteMainMenuItem}, - (sender, args) => Paste(), () => ValidatePaste()); - Commands.Add(new ToolStripItem[] {selectAllToolStripMenuItem}, new[] {selectAllMainMenuItem}, - (o, eventArgs) => { }, () => true); // Tree component handles the selectAll command - Commands.Add(new ToolStripItem[] {preferencesToolStripMenuItem}, new[] {preferencesMainMenuItem}, - (o, eventArgs) => ShowPreferences(), () => true); - } - - private void ConfigureShortcut(ToolStripMenuItem toolstripItem, MenuItem menuItem, Keys keys) - { - ConfigureShortcut(toolstripItem, menuItem, keys, null); - } - - private void ConfigureShortcut(ToolStripMenuItem toolstripItem, MenuItem menuItem, Keys keys, - String shortCutText) - { - toolstripItem.ShortcutKeys = keys; - if (null != menuItem) - { - SetShortcutText(menuItem, toolstripItem, shortCutText); - } - } - - private void ConfigureShortcuts() - { - #region Shortcuts - Files - - ConfigureShortcut(newBrowserToolStripMenuItem, newBrowserMainMenuItem, Keys.Control | Keys.N); - ConfigureShortcut(openConnectionToolStripMenuItem, openConnectionMainMenuItem, Keys.Control | Keys.O); - ConfigureShortcut(newDownloadToolStripMenuItem, newDownloadMainMenuItem, Keys.Control | Keys.Alt | Keys.Down); - ConfigureShortcut(newFolderToolStripMenuItem, newFolderMainMenuItem, Keys.Control | Keys.Shift | Keys.N); - ConfigureShortcut(newFileToolStripMenuItem, newFileMainMenuItem, Keys.Control | Keys.Shift | Keys.F); - ConfigureShortcut(duplicateFileToolStripMenuItem, duplicateMainMenuItem, Keys.Control | Keys.D); - ConfigureShortcut(editWithToolStripMenuItem, null, Keys.Control | Keys.K); - ConfigureShortcut(infoToolStripMenuItem, infoMainMenuItem, Keys.Alt | Keys.Enter); - ConfigureShortcut(downloadToolStripMenuItem, downloadMainMenuItem, Keys.Alt | Keys.Down); - ConfigureShortcut(downloadAsToolStripMenuItem, downloadAsMainMenuItem, Keys.Alt | Keys.Shift | Keys.Down); - ConfigureShortcut(uploadToolStripMenuItem, uploadMainMenuItem, Keys.Alt | Keys.Up); - ConfigureShortcut(deleteToolStripMenuItem, deleteMainMenuItem, Keys.None, - ShortcutToText(Keys.Delete, String.Empty)); - ConfigureShortcut(exitToolStripMenuItem, exitMainMenuItem, Keys.Control | Keys.Q); - - #endregion - - #region Shortcuts - Edit - - ConfigureShortcut(cutToolStripMenuItem, cutMainMenuItem, Keys.Control | Keys.X); - ConfigureShortcut(copyToolStripMenuItem, copyMainMenuItem, Keys.Control | Keys.C); - //todo - //ConfigureShortcut(copyURLToolStripMenuItem, copyUrlMainMenuItem, Keys.Control | Keys.Shift | Keys.C); - ConfigureShortcut(pasteToolStripMenuItem, pasteMainMenuItem, Keys.Control | Keys.V); - ConfigureShortcut(selectAllToolStripMenuItem, selectAllMainMenuItem, Keys.None, - ShortcutToText(Keys.Control | Keys.A, String.Empty)); - ConfigureShortcut(preferencesToolStripMenuItem, preferencesMainMenuItem, Keys.Control | Keys.Oemcomma, - "Ctrl+,"); - - #endregion - - #region Shortcuts - View - - ConfigureShortcut(showHiddenFilesToolStripMenuItem, showHiddenFilesMainMenuItem, - Keys.Control | Keys.Shift | Keys.R); - ConfigureShortcut(toggleLogDrawerToolStripMenuItem, toggleLogDrawerMainMenuItem, Keys.Control | Keys.L); - - #endregion - - #region Shortcuts - Go - - ConfigureShortcut(refreshToolStripMenuItem, refreshMainMenuItem, Keys.Control | Keys.R); - ConfigureShortcut(gotoFolderToolStripMenuItem, goToFolderMainMenuItem, Keys.Control | Keys.G); - ConfigureShortcut(backToolStripMenuItem, backMainMenuItem, Keys.Control | Keys.Left); - ConfigureShortcut(forwardToolStripMenuItem, forwardMainMenuItem, Keys.Control | Keys.Right); - ConfigureShortcut(enclosingFolderToolStripMenuItem, enclosingFolderMainMenuItem, Keys.Control | Keys.Up); - ConfigureShortcut(insideToolStripMenuItem, insideMainMenuItem, Keys.Control | Keys.Down); - ConfigureShortcut(searchToolStripMenuItem, searchMainMenuItem, Keys.Control | Keys.F); - ConfigureShortcut(sendCommandToolStripMenuItem, sendCommandMainMenuItem, Keys.Control | Keys.Alt | Keys.C); - ConfigureShortcut(stopToolStripMenuItem, stopMainMenuItem, Keys.Control | Keys.OemPeriod, "Ctrl+."); - ConfigureShortcut(disconnectToolStripMenuItem, disconnectMainMenuItem, Keys.Control | Keys.Y); - - #endregion - - #region Shortcurs - Bookmark - - ConfigureShortcut(viewBookmarksToolStripMenuItem, toggleBookmarksMainMenuItem, Keys.Control | Keys.B); - ConfigureShortcut(newBookmarkToolStripMenuItem, newBookmarkMainMenuItem, Keys.Control | Keys.Shift | Keys.B); - ConfigureShortcut(editBookmarkToolStripMenuItem, editBookmarkMainMenuItem, Keys.Control | Keys.E); - - #endregion - - #region Shortcuts - Window - - ConfigureShortcut(minimizeToolStripMenuItem, minimizeMainMenuItem, Keys.Control | Keys.M); - ConfigureShortcut(activitiyToolStripMenuItem, activityMainMenuItem, Keys.Control | Keys.D0); - ConfigureShortcut(transfersToolStripMenuItem, transfersMainMenuItem, Keys.Control | Keys.T); - - #endregion - - #region Shortcuts - Browser Context - - //All doubly assigned shortcuts are falsely active in all child forms - EventHandler activated = delegate - { - ConfigureShortcut(refreshContextToolStripMenuItem, refreshBrowserContextMenuItem, - refreshToolStripMenuItem.ShortcutKeys); - ConfigureShortcut(infoContextToolStripMenuItem, infoBrowserContextMenuItem, - infoToolStripMenuItem.ShortcutKeys); - ConfigureShortcut(editContextToolStripMenuItem, editBrowserContextMenuItem, - editWithToolStripMenuItem.ShortcutKeys); - ConfigureShortcut(downloadContextToolStripMenuItem, downloadBrowserContextMenuItem, - downloadToolStripMenuItem.ShortcutKeys); - ConfigureShortcut(downloadAsContextToolStripMenuItem, downloadAsBrowserContextMenuItem, - downloadAsToolStripMenuItem.ShortcutKeys); - ConfigureShortcut(deleteContextToolStripMenuItem, deleteBrowserContextMenuItem, - deleteToolStripMenuItem.ShortcutKeys); - ConfigureShortcut(duplicateFileContextToolStripMenuItem, duplicateFileBrowserContextMenuItem, - duplicateFileToolStripMenuItem.ShortcutKeys); - ConfigureShortcut(uploadContextToolStripMenuItem, uploadBrowserContextMenuItem, - uploadToolStripMenuItem.ShortcutKeys); - ConfigureShortcut(newFolderContextToolStripMenuItem, newFolderBrowserContextMenuItem, - newFolderToolStripMenuItem.ShortcutKeys); - ConfigureShortcut(newFileContextToolStripMenuItem, newFileBrowserContextMenuItem, - newFileToolStripMenuItem.ShortcutKeys); - ConfigureShortcut(newBookmarkContextToolStripMenuItem, newBookmarkBrowserContextMenuItem, - newBookmarkToolStripMenuItem.ShortcutKeys); - }; - Activated += activated; - activated(this, EventArgs.Empty); - - Deactivate += delegate - { - foreach (ToolStripItem item in contextMenuStrip.Items) - { - if (item is ToolStripMenuItem) - { - (item as ToolStripMenuItem).ShortcutKeys = Keys.None; - } - } - }; - - #endregion - - #region Shortcuts - Bookmarks Context - - //All doubly assigned shortcuts are falsely active in all child forms - activated = delegate - { - ConfigureShortcut(connectBookmarkContextToolStripMenuItem, connectBookmarkContextMenuItem, Keys.None, - ShortcutToText(Keys.Enter, String.Empty)); - ConfigureShortcut(newBookmarkContextToolStripMenuItem1, newBookmarkContextMenuItem, - newBookmarkToolStripMenuItem.ShortcutKeys); - ConfigureShortcut(editBookmarkContextToolStripMenuItem1, editBookmarkContextMenuItem, - editBookmarkToolStripMenuItem.ShortcutKeys); - //todo deleteBookmarkContextToolStripMenuItem1.ShortcutKeys = - }; - Activated += activated; - activated(this, EventArgs.Empty); - - Deactivate += delegate - { - foreach (ToolStripItem item in bookmarkContextMenuStrip.Items) - { - if (item is ToolStripMenuItem) - { - (item as ToolStripMenuItem).ShortcutKeys = Keys.None; - } - } - }; - - #endregion - } - - private void OnArchiveMenuItemOnPopup(object sender, EventArgs eventArgs) - { - MenuItem mainItem = sender as MenuItem; - mainItem.MenuItems.Clear(); - foreach (string archive in GetArchives()) - { - MenuItem item = mainItem.MenuItems.Add(archive); - string archiveName = archive; - item.Click += delegate { CreateArchive(this, new CreateArchiveEventArgs(archiveName)); }; - } - } - - /// - /// Setup event and validation handler for the file menu items - /// - private void ConfigureFileCommands() - { - Commands.Add(new ToolStripItem[] {newBrowserToolStripMenuItem}, new[] {newBrowserMainMenuItem}, - (sender, args) => NewBrowser(this, new NewBrowserEventArgs(false)), () => true); - Commands.Add(new ToolStripItem[] {newBrowserContextToolStripMenuItem}, - new[] {newBrowserBrowserContextMenuItem}, - (sender, args) => NewBrowser(this, new NewBrowserEventArgs(true)), () => ValidateNewBrowser()); - Commands.Add(new ToolStripItem[] {openConnectionToolStripMenuItem, openConnectionToolStripButton}, - new[] {openConnectionMainMenuItem}, (sender, args) => OpenConnection(), () => ValidateOpenConnection()); - Commands.Add(new ToolStripItem[] {newDownloadToolStripMenuItem}, new[] {newDownloadMainMenuItem}, - (sender, args) => NewDownload(), () => ValidateNewDownload()); - Commands.Add( - new ToolStripItem[] - {newFolderToolStripMenuItem, newFolderContextToolStripMenuItem, newFolderToolStripButton}, - new[] {newFolderMainMenuItem, newFolderBrowserContextMenuItem}, (sender, args) => NewFolder(), - () => ValidateNewFolder()); - Commands.Add(new ToolStripItem[] {newFileToolStripMenuItem, newFileContextToolStripMenuItem}, - new[] {newFileMainMenuItem, newFileBrowserContextMenuItem}, (sender, args) => NewFile(), - () => ValidateNewFile()); - Commands.Add(new ToolStripItem[] {newSymlinkContextToolStripMenuItem}, - new[] {newSymbolicLinkMainMenuItem, newSymlinkBrowserContextMenuItem}, - (sender, args) => NewSymbolicLink(), () => ValidateNewSymbolicLink()); - Commands.Add(new ToolStripItem[] {renameFileToolStripMenuItem, renameContextToolStripMenuItem}, - new[] {renameMainMenuItem, renameBrowserContextMenuItem}, - (o, eventArgs) => browser.EditSubItem((OLVListItem) browser.FocusedItem, 0), () => ValidateRenameFile()); - Commands.Add(new ToolStripItem[] {duplicateFileToolStripMenuItem, duplicateFileContextToolStripMenuItem}, - new[] {duplicateMainMenuItem, duplicateFileBrowserContextMenuItem}, (sender, args) => DuplicateFile(), - () => ValidateDuplicateFile()); - Commands.Add( - new ToolStripItem[] - {openWebURLToolStripMenuItem, openURLContextToolStripMenuItem, openInBrowserToolStripButton}, - new MenuItem[] {}, (sender, args) => OpenUrl(), () => ValidateOpenWebUrl()); - Commands.Add( - new ToolStripItem[] {editWithToolStripMenuItem, editContextToolStripMenuItem, editToolStripSplitButton}, - new[] {editMainMenuItem, editBrowserContextMenuItem}, (sender, args) => - { - if (sender == editToolStripSplitButton && editToolStripSplitButton.DropDownButtonPressed) - { - return; - } - EditEvent(null); - }, () => ValidateEditWith()); - Commands.Add( - new ToolStripItem[] {infoToolStripMenuItem, infoToolStripButton, infoContextToolStripMenuItem}, - new[] {infoMainMenuItem, infoBrowserContextMenuItem}, (sender, args) => ShowInspector(), - () => ValidateShowInspector()); - Commands.Add(new ToolStripItem[] {downloadToolStripMenuItem, downloadContextToolStripMenuItem}, - new[] {downloadMainMenuItem, downloadBrowserContextMenuItem}, (sender, args) => Download(), - () => ValidateDownload()); - Commands.Add(new ToolStripItem[] {downloadAsToolStripMenuItem, downloadAsContextToolStripMenuItem}, - new[] {downloadAsMainMenuItem, downloadAsBrowserContextMenuItem}, (sender, args) => DownloadAs(), - () => ValidateDownloadAs()); - Commands.Add( - new ToolStripItem[] - {downloadToToolStripMenuItem, downloadToContextToolStripMenuItem, downloadToolStripButton}, - new[] {downloadToMainMenuItem, downloadToBrowserContextMenuItem}, (sender, args) => DownloadTo(), - () => ValidateDownloadTo()); - Commands.Add( - new ToolStripItem[] {uploadToolStripMenuItem, uploadContextToolStripMenuItem, uploadToolStripButton}, - new[] {uploadMainMenuItem, uploadBrowserContextMenuItem}, (sender, args) => Upload(), - () => ValidateUpload()); - Commands.Add(new ToolStripItem[] {synchronizeToolStripMenuItem, synchronizeContextToolStripMenuItem}, - new[] {synchronizeMainMenuItem, synchronizeBrowserContextMenuItem}, (sender, args) => Synchronize(), - () => ValidateSynchronize()); - Commands.Add( - new ToolStripItem[] {deleteToolStripMenuItem, deleteContextToolStripMenuItem, deleteToolStripButton}, - new[] {deleteMainMenuItem, deleteBrowserContextMenuItem}, (sender, args) => Delete(), - () => ValidateDelete()); - Commands.Add(new ToolStripItem[] {revertToolStripMenuItem, revertContxtStripMenuItem}, - new[] {revertMainMenuItem, revertBrowserContextMenuItem}, (sender, args) => RevertFile(), - () => ValidateRevertFile()); - Commands.Add(new ToolStripItem[] {createArchiveToolStripMenuItem, createArchiveContextToolStripMenuItem}, - new[] {createArchiveMainMenuItem, createArchiveBrowserContextMenuItem}, (sender, args) => { }, - () => ValidateCreateArchive()); - Commands.Add(new ToolStripItem[] {expandArchiveToolStripMenuItem, expandArchiveContextToolStripMenuItem}, - new[] {expandArchiveMainMenuItem, expandArchiveBrowserContextMnuItem}, (sender, args) => ExpandArchive(), - () => ValidateExpandArchive()); - Commands.Add(new ToolStripItem[] {exitToolStripMenuItem}, new[] {exitMainMenuItem}, (sender, args) => Exit(), - () => true); - - vistaMenu1.SetImage(openConnectionMainMenuItem, IconCache.Instance.IconForName("connect", 16)); - vistaMenu1.SetImage(infoMainMenuItem, IconCache.Instance.IconForName("info", 16)); - vistaMenu1.SetImage(infoBrowserContextMenuItem, IconCache.Instance.IconForName("info", 16)); - infoContextToolStripMenuItem.Image = IconCache.Instance.IconForName("info", 16); - vistaMenu1.SetImage(editMainMenuItem, IconCache.Instance.IconForName("pencil", 16)); - vistaMenu1.SetImage(editBrowserContextMenuItem, IconCache.Instance.IconForName("pencil", 16)); - editContextToolStripMenuItem.Image = IconCache.Instance.IconForName("pencil", 16); - vistaMenu1.SetImage(deleteMainMenuItem, IconCache.Instance.IconForName("delete", 16)); - vistaMenu1.SetImage(deleteBrowserContextMenuItem, IconCache.Instance.IconForName("delete", 16)); - deleteContextToolStripMenuItem.Image = IconCache.Instance.IconForName("delete", 16); - vistaMenu1.SetImage(newFolderMainMenuItem, IconCache.Instance.IconForName("newfolder", 16)); - vistaMenu1.SetImage(newFolderBrowserContextMenuItem, IconCache.Instance.IconForName("newfolder", 16)); - newFolderContextToolStripMenuItem.Image = IconCache.Instance.IconForName("newfolder", 16); - vistaMenu1.SetImage(downloadMainMenuItem, IconCache.Instance.IconForName("download", 16)); - vistaMenu1.SetImage(downloadBrowserContextMenuItem, IconCache.Instance.IconForName("download", 16)); - downloadContextToolStripMenuItem.Image = IconCache.Instance.IconForName("download", 16); - vistaMenu1.SetImage(uploadMainMenuItem, IconCache.Instance.IconForName("upload", 16)); - vistaMenu1.SetImage(uploadBrowserContextMenuItem, IconCache.Instance.IconForName("upload", 16)); - uploadContextToolStripMenuItem.Image = IconCache.Instance.IconForName("upload", 16); - vistaMenu1.SetImage(synchronizeMainMenuItem, IconCache.Instance.IconForName("sync", 16)); - vistaMenu1.SetImage(synchronizeBrowserContextMenuItem, IconCache.Instance.IconForName("sync", 16)); - synchronizeContextToolStripMenuItem.Image = IconCache.Instance.IconForName("sync", 16); - } - - private void SaveUiSettings() - { - if (browser.Objects != null) - { - Log.debug("Saving browser state"); - PersistenceHandler.Set("tree.state", browser.SaveState()); - } - PersistenceHandler.Set("splitter.distance", splitContainer.SplitterDistance); - } - - private void browser_DoubleClick(object sender, EventArgs e) - { - BrowserDoubleClicked(); - } - - private void toolStripQuickConnect_SelectionChangeCommited(object sender, EventArgs e) - { - QuickConnect(); - } - - private void toolStripQuickConnect_KeyDown(object sender, KeyEventArgs e) - { - // KeyUp doesnt' work in conjuction with AcceptButton and modal forms because of - // http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=93673 - // http://social.msdn.microsoft.com/Forums/de-AT/visualcsharpde/thread/0557663a-6fb5-498f-8919-06446169296d - if (e.KeyCode == Keys.Enter) - { - QuickConnect(); - } - } - - private void browser_SelectionChanged(object sender, EventArgs e) - { - BrowserSelectionChanged(); - } - - private void browser_KeyDown(object sender, KeyEventArgs e) - { - if (e.KeyCode == Keys.Delete) - { - Delete(); - } - if (e.KeyCode == Keys.F5 && ValidateRefresh()) - { - RefreshBrowser(); - } - if (e.KeyCode == Keys.Back && ValidateFolderUp()) - { - FolderUp(); - } - } - - private void transcriptBox_KeyDown(object sender, KeyEventArgs e) - { - // the log drawer should be closeable from inside the textbox - if (e.KeyData == toggleLogDrawerToolStripMenuItem.ShortcutKeys) - { - ToggleLogDrawer(); - } - // handle some basic shortcuts - if ((ModifierKeys & Keys.Control) == Keys.Control) - { - if (e.KeyCode == Keys.A) - { - transcriptBox.SelectAll(); - } - if (e.KeyCode == Keys.C) - { - transcriptBox.Copy(); - } - } - } - - private void bookmarkListView_DoubleClick(object sender, EventArgs e) - { - ConnectBookmark(this, new ConnectBookmarkArgs(bookmarkListView.SelectedObject as Host)); - } - - private void bookmarkListView_KeyDown(object sender, KeyEventArgs e) - { - if (e.KeyCode == Keys.Enter) - { - ConnectBookmark(this, new ConnectBookmarkArgs(bookmarkListView.SelectedObject as Host)); - } - if (e.KeyCode == Keys.Delete) - { - DeleteBookmark(); - } - } - - private void browserCheckBox_Click(object sender, EventArgs e) - { - ChangeBrowserView(sender, new ChangeBrowserViewArgs(BrowserView.File)); - } - - private void bookmarkCheckBox_Click(object sender, EventArgs e) - { - ChangeBrowserView(sender, new ChangeBrowserViewArgs(BrowserView.Bookmark)); - } - - private void historyCheckBox_Click(object sender, EventArgs e) - { - ChangeBrowserView(sender, new ChangeBrowserViewArgs(BrowserView.History)); - } - - private void bonjourCheckBox_Click(object sender, EventArgs e) - { - ChangeBrowserView(sender, new ChangeBrowserViewArgs(BrowserView.Bonjour)); - } - - private void pathComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - PathSelectionChanged(); - } - - private void toolbarContextMenu_Closing(object sender, ToolStripDropDownClosingEventArgs e) - { - e.Cancel = (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked && _lastMenuItemClicked != null); - } - - private void toolbarContextMenu_ItemClicked(object sender, ToolStripItemClickedEventArgs e) - { - if (e.ClickedItem is ToolStripMenuItem) - { - _lastMenuItemClicked = (ToolStripMenuItem) e.ClickedItem; - } - } - - private void columnContextMenu_Opening(object sender, CancelEventArgs e) - { - //we need to remove the ItemClicked (prevent multi-registration) event as it - //will be registered again in MakeColumnSelectMenu - RemoveItemClickedEvent(columnContextMenu); - columnContextMenu.Items.Clear(); - browser.MakeColumnSelectMenu(columnContextMenu); - } - - private static void RemoveItemClickedEvent(ToolStrip b) - { - FieldInfo f1 = typeof (ToolStrip).GetField("EventItemClicked", BindingFlags.Static | BindingFlags.NonPublic); - object obj = f1.GetValue(b); - PropertyInfo pi = b.GetType().GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Instance); - EventHandlerList list = (EventHandlerList) pi.GetValue(b, null); - list.RemoveHandler(obj, list[obj]); - } - - private void textEncodingMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e) - { - EncodingChanged(sender, new EncodingChangedArgs(e.ClickedItem.Text)); - } - - /// - /// Bookmark menu handling with some optimization due to the expensive DropDownItems.Add method - /// - /// - /// - private void bookmarkToolStripMenuItem_DropDownOpening(object sender, EventArgs e) - { - IList bookmarks = GetBookmarks(); - - //all fix items - List fix = new List(); - foreach (ToolStripItem item in bookmarkToolStripMenuItem.DropDownItems) - { - if (!(item.Tag is Host)) - { - fix.Add(item); - } - } - - //clear the menu and add again the fix items - bookmarkToolStripMenuItem.DropDownItems.Clear(); - bookmarkToolStripMenuItem.DropDownItems.AddRange(fix.ToArray()); - - ImageList.ImageCollection icons = IconCache.Instance.GetProtocolIcons().Images; - - List items = new List(); - foreach (Host bookmark in bookmarks) - { - ToolStripItem item = new ToolStripMenuItem(BookmarkNameProvider.toString(bookmark), - icons[bookmark.getProtocol().getProvider()]); - item.Tag = bookmark; - item.Click += (o, args) => ConnectBookmark(this, new ConnectBookmarkArgs(item.Tag as Host)); - items.Add(item); - } - bookmarkToolStripMenuItem.DropDownItems.AddRange(items.ToArray()); - } - - private void historyMenuStrip_Opening(object sender, CancelEventArgs e) - { - IList history = GetHistory(); - - historyMenuStrip.Items.Clear(); - if (history.Count > 0) - { - ImageList.ImageCollection icons = IconCache.Instance.GetProtocolIcons().Images; - - List items = new List(); - foreach (Host h in history) - { - ToolStripItem item = new ToolStripMenuItem(BookmarkNameProvider.toString(h), - icons[h.getProtocol().getProvider()]); - item.Tag = h; - item.Click += (o, args) => ConnectBookmark(this, new ConnectBookmarkArgs(item.Tag as Host)); - items.Add(item); - } - - // separator and clear item - items.Add(new ToolStripSeparator()); - ToolStripItem clear = new ToolStripMenuItem(LocaleFactory.localizedString("Clear Menu")); - clear.Click += (o, args) => ClearHistory(); - items.Add(clear); - - // add all added items - historyMenuStrip.Items.AddRange(items.ToArray()); - } - else - { - ToolStripItem noitem = - new ToolStripMenuItem(LocaleFactory.localizedString("No recently connected servers available")); - noitem.Enabled = false; - historyMenuStrip.Items.Add(noitem); - } - } - - private void securityToolStripStatusLabel_Click(object sender, EventArgs e) - { - ShowCertificate(); - } - - private void searchTextBox_TextChanged(object sender, EventArgs e) - { - SearchFieldChanged(); - } - - private void customizeToolbarMenuItem_Popup(object sender, EventArgs e) - { - foreach (MenuItem item in customizeToolbarMainMenuItem.MenuItems) - { - if (null != item.Tag) - { - item.Checked = ((MenuItem) item.Tag).Checked; - } - } - } - - private void columnMenuItem_Popup(object sender, EventArgs e) - { - //we need to remove the ItemClicked (prevent multi-registration) event as it - //will be registered again in MakeColumnSelectMenu - RemoveItemClickedEvent(columnContextMenu); - columnContextMenu.Items.Clear(); - browser.MakeColumnSelectMenu(columnContextMenu); - columnMainMenuItem.MenuItems.Clear(); - foreach (ToolStripMenuItem item in columnContextMenu.Items) - { - ToolStripMenuItem item1 = item; - MenuItem nItem = new MenuItem(LocaleFactory.localizedString(item.Text), - delegate { item1.PerformClick(); }); - //forward click event - nItem.Checked = item.Checked; - columnMainMenuItem.MenuItems.Add(nItem); - } - } - - private void browser_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar == (char) Keys.Enter) - { - if (PreferencesFactory.get().getBoolean("browser.enterkey.rename")) - { - if (ValidateRenameFile()) - { - browser.EditSubItem((OLVListItem) browser.FocusedItem, 0); - } - } - else - { - BrowserDoubleClicked(); - } - e.Handled = true; - } - } - - private void browser_CellEditFinishing(object sender, CellEditEventArgs e) - { - if (!e.Cancel) - { - e.Cancel = RenameFile((Path) e.RowObject, (String) e.NewValue); - } - } - - private void browser_BeforeLabelEdit(object sender, LabelEditEventArgs e) - { - //we want to use the ObjectListView's cell editor - e.CancelEdit = true; - browser.StartCellEdit(browser.GetItem(e.Item), 0); - } - - private class BookmarkMenuCollectionListener : CollectionListener - { - private readonly BrowserForm _form; - private readonly ImageList.ImageCollection _icons = IconCache.Instance.GetProtocolIcons().Images; - private int _bookmarkStartPosition; - - public BookmarkMenuCollectionListener(BrowserForm f) - { - _form = f; - if (BookmarkCollection.defaultCollection().size() > 0) - { - BuildMenuItems(); - } - } - - public void collectionLoaded() - { - _form.Invoke(new AsyncController.AsyncDelegate(BuildMenuItems)); - } - - public void collectionItemAdded(object obj) - { - _form.Invoke(new AsyncController.AsyncDelegate(delegate - { - int pos = BookmarkCollection.defaultCollection().indexOf(obj); - Host h = (Host) obj; - MenuItem i = new MenuItem(BookmarkNameProvider.toString(h)); - i.Tag = h; - i.Click += (o, args) => _form.ConnectBookmark(this, new ConnectBookmarkArgs(h)); - _form.menuItem64.MenuItems.Add(_bookmarkStartPosition + pos, i); - _form.vistaMenu1.SetImage(i, _icons[h.getProtocol().getProvider()]); - })); - } - - public void collectionItemRemoved(object obj) - { - _form.Invoke(new AsyncController.AsyncDelegate(delegate - { - int pos = BookmarkCollection.defaultCollection().indexOf(obj); - Host h = (Host) obj; - MenuItem i = new MenuItem(BookmarkNameProvider.toString(h)); - i.Tag = h; - i.Click += (o, args) => _form.ConnectBookmark(this, new ConnectBookmarkArgs(h)); - _form.menuItem64.MenuItems.Add(_bookmarkStartPosition + pos, i); - _form.vistaMenu1.SetImage(i, _icons[h.getProtocol().getProvider()]); - - - foreach (MenuItem item in _form.menuItem64.MenuItems) - { - if (obj.Equals(item.Tag)) - { - _form.menuItem64.MenuItems.Remove(item); - break; - } - } - })); - } - - public void collectionItemChanged(object obj) - { - _form.Invoke(new AsyncController.AsyncDelegate(delegate - { - foreach (MenuItem item in _form.menuItem64.MenuItems) - { - if (obj.Equals(item.Tag)) - { - Host h = (Host) obj; - item.Text = BookmarkNameProvider.toString(h); - _form.vistaMenu1.SetImage(item, _icons[h.getProtocol().getProvider()]); - break; - } - } - })); - } - - public void BuildMenuItems() - { - List fix = new List(); - foreach (MenuItem item in _form.menuItem64.MenuItems) - { - if (!(item.Tag is Host)) - { - fix.Add(item); - } - } - _bookmarkStartPosition = fix.Count; - List items = new List(); - foreach (Host bookmark in BookmarkCollection.defaultCollection()) - { - MenuItem item = new MenuItem(BookmarkNameProvider.toString(bookmark)); - item.Tag = bookmark; - item.Click += (o, args) => _form.ConnectBookmark(this, new ConnectBookmarkArgs(item.Tag as Host)); - items.Add(item); - } - - using (MainMenu m1 = _form.mainMenu.CloneMenu()) - { - _form.SuspendLayout(); - _form.Menu = m1; - //clear the menu and add again the fix items - _form.menuItem64.MenuItems.Clear(); - _form.menuItem64.MenuItems.AddRange(fix.ToArray()); - _form.menuItem64.MenuItems.AddRange(items.ToArray()); - foreach (MenuItem item in items) - { - if (null != item.Tag) - _form.vistaMenu1.SetImage(item, _icons[((Host) item.Tag).getProtocol().getProvider()]); - } - _form.Menu = _form.mainMenu; - _form.ResumeLayout(); - } - } - } - - private class BrowserDragSource : SimpleDragSource - { - private readonly BrowserForm _form; - - public BrowserDragSource(BrowserForm _form) - { - this._form = _form; - } - - public override DragDropEffects GetAllowedEffects(object data) - { - return DragDropEffects.Copy | DragDropEffects.Move; - } - - public override object StartDrag(ObjectListView olv, MouseButtons button, OLVListItem item) - { - DataObject t = _form.BrowserDrag(olv); - OLVDataObject data = new OLVDataObject(olv); - data.SetData(DataFormats.FileDrop, new[] {t.GetFileDropList()[0]}); - return data; - } - - public override void EndDrag(object dragObject, DragDropEffects effect) - { - base.EndDrag(dragObject, effect); - _form.BrowserEndDrag(dragObject as DataObject); - } - } - - private class ExpandingBrowserDropSink : SimpleDropSink - { - private readonly BrowserForm _form; - private readonly Timer _timer = new Timer(); - private object _currentDropTarget; - - public ExpandingBrowserDropSink(BrowserForm form) - { - _form = form; - _timer.Tick += delegate - { - if (null != _currentDropTarget) - { - ((TreeListView) ListView).Expand(_currentDropTarget); - } - _timer.Stop(); - }; - CanDropOnBackground = true; - FeedbackColor = Color.LightBlue; - AcceptExternal = true; - } - - /// - /// Gets or sets whether this sink allows model objects to be dragged from other lists - /// - public bool AcceptExternal { get; set; } - - /// - /// Draw the feedback that shows that the background is the target - /// - /// - /// - protected override void DrawFeedbackBackgroundTarget(Graphics g, Rectangle bounds) - { - float penWidth = 4.0f; - Rectangle r = bounds; - r.Inflate((int) -penWidth/2, (int) -penWidth/2); - using (Pen p = new Pen(Color.FromArgb(128, FeedbackColor), penWidth)) - { - using (GraphicsPath path = GetRoundedRect(r, 30.0f)) - { - g.DrawPath(p, path); - } - } - } - - protected override void OnCanDrop(OlvDropEventArgs args) - { - base.OnCanDrop(args); - _form.BrowserCanDrop(args); - } - - public override void Enter(DragEventArgs e) - { - base.Enter(e); - if (!(e.Data is OLVDataObject)) - { - try - { - DropTargetHelper.DragEnter(_form.browser, e.Data, new Point(e.X, e.Y), e.Effect); - } - catch - { - //silenty catch exceptions that are thrown with some special object (e.g. WinRAR) - } - } - } - - public override void Leave() - { - base.Leave(); - DropTargetHelper.DragLeave(_form.browser); - } - - // We do not currently support drags between browsers - - protected override void OnModelCanDrop(ModelDropEventArgs args) - { - base.OnModelCanDrop(args); - - if (args.Handled) - return; - - args.Effect = CalculateStandardDropActionFromKeys(); - - // Don't allow drops from other list, if that's what's configured - if (!AcceptExternal) - { - args.Effect = DragDropEffects.None; - args.DropTargetLocation = DropTargetLocation.None; - } - else - { - _form.BrowserModelCanDrop(args); - } - args.Handled = true; - } - - protected override void OnDropped(OlvDropEventArgs args) - { - DropTargetHelper.Drop(args.DataObject as DataObject, - new Point(args.MouseLocation.X, args.MouseLocation.Y), DragDropEffects.None); - _form.BrowserDropped(args); - } - - protected override void OnModelDropped(ModelDropEventArgs args) - { - base.OnModelDropped(args); - if (!args.Handled) - { - _form.BrowserModelDropped(args); - } - args.Handled = true; - } - - public override void Over(DragEventArgs e) - { - base.Over(e); - - if (!(e.Data is OLVDataObject)) - { - DropTargetHelper.DragOver(new Point(e.X, e.Y), e.Effect); - } - - bool autoExpand = PreferencesFactory.get().getBoolean("browser.view.autoexpand"); - bool useDelay = PreferencesFactory.get().getBoolean("browser.view.autoexpand.useDelay"); - int delay = Convert.ToInt32(PreferencesFactory.get().getFloat("browser.view.autoexpand.delay")); - - if (autoExpand) - { - if (null != DropTargetItem) - { - if (_currentDropTarget != DropTargetItem.RowObject) - { - _timer.Stop(); - _currentDropTarget = DropTargetItem.RowObject; - _timer.Interval = useDelay ? delay*1000 : 0; - _timer.Start(); - } - } - else - { - _timer.Stop(); - _currentDropTarget = null; - } - } - } - } - - /// - /// Wraps a PathFilter class for the use with the ObjectListView component - /// - private class FilterWrapper : IModelFilter - { - private readonly Filter _del; - - public FilterWrapper(Filter del) - { - _del = del; - } - - public bool Filter(object modelObject) - { - return _del.accept((modelObject)); - } - } - - private class HostDragSource : SimpleDragSource - { - private readonly BrowserForm _form; - - public HostDragSource(BrowserForm _form) - { - this._form = _form; - } - - public override DragDropEffects GetAllowedEffects(object data) - { - return DragDropEffects.Copy | DragDropEffects.Move; - } - - public override object StartDrag(ObjectListView olv, MouseButtons button, OLVListItem item) - { - DataObject t = _form.HostDrag(olv); - OLVDataObject data = new OLVDataObject(olv); - data.SetData(DataFormats.FileDrop, new[] {t.GetFileDropList()[0]}); - return data; - } - - public override void EndDrag(object dragObject, DragDropEffects effect) - { - base.EndDrag(dragObject, effect); - _form.HostEndDrag(dragObject as DataObject); - } - } - - private class HostDropSink : SimpleDropSink - { - private readonly BrowserForm _form; - - public HostDropSink(BrowserForm form) - { - _form = form; - CanDropOnBackground = true; - CanDropBetween = true; - FeedbackColor = Color.LightBlue; - AcceptExternal = true; - } - - /// - /// Gets or sets whether this sink allows model objects to be dragged from other lists - /// - public bool AcceptExternal { get; set; } - - /// - /// Draw the feedback that shows that the background is the target - /// - /// - /// - protected override void DrawFeedbackBackgroundTarget(Graphics g, Rectangle bounds) - { - float penWidth = 4.0f; - Rectangle r = bounds; - r.Inflate((int) -penWidth/2, (int) -penWidth/2); - using (Pen p = new Pen(Color.FromArgb(128, FeedbackColor), penWidth)) - { - using (GraphicsPath path = GetRoundedRect(r, 30.0f)) - { - g.DrawPath(p, path); - } - } - } - - protected override void OnCanDrop(OlvDropEventArgs args) - { - base.OnCanDrop(args); - _form.HostCanDrop(args); - } - - public override void Enter(DragEventArgs e) - { - base.Enter(e); - - if (!(e.Data is OLVDataObject)) - { - DropTargetHelper.DragEnter(_form.browser, e.Data, new Point(e.X, e.Y), e.Effect); - } - } - - public override void Leave() - { - base.Leave(); - DropTargetHelper.DragLeave(_form); - } - - protected override void OnModelCanDrop(ModelDropEventArgs args) - { - base.OnModelCanDrop(args); - - args.Effect = DragDropEffects.None; - - //args.Handled = true; // OnCanDrop is not being called anymore - - if (args.Handled) - return; - - args.Effect = CalculateStandardDropActionFromKeys(); - - // Don't allow drops from other list, if that's what's configured - if (!AcceptExternal) - { - args.Effect = DragDropEffects.None; - args.DropTargetLocation = DropTargetLocation.None; - } - else - { - _form.HostModelCanDrop(args); - } - args.Handled = true; - } - - protected override void OnDropped(OlvDropEventArgs args) - { - DropTargetHelper.Drop(args.DataObject as DataObject, - new Point(args.MouseLocation.X, args.MouseLocation.Y), DragDropEffects.None); - _form.HostDropped(args); - } - - protected override void OnModelDropped(ModelDropEventArgs args) - { - base.OnModelDropped(args); - if (!args.Handled) - { - _form.HostModelDropped(args); - } - args.Handled = true; - } - - public override void Over(DragEventArgs e) - { - base.Over(e); - if (!(e.Data is OLVDataObject)) - { - DropTargetHelper.DragOver(new Point(e.X, e.Y), e.Effect); - } - } - } - - private class MenuCollectionListener : CollectionListener - { - private readonly AbstractHostCollection _collection; - private readonly String _empty; - private readonly BrowserForm _form; - private readonly ImageList.ImageCollection _icons = IconCache.Instance.GetProtocolIcons().Images; - private readonly MenuItem _menu; - - public MenuCollectionListener(BrowserForm f, MenuItem menu, AbstractHostCollection collection, String empty) - { - _form = f; - _menu = menu; - _collection = collection; - _empty = empty; - if (_collection.size() > 0) - { - BuildMenuItems(); - } - } - - public void collectionLoaded() - { - _form.Invoke(new AsyncController.AsyncDelegate(BuildMenuItems)); - } - - public void collectionItemAdded(object obj) - { - _form.Invoke(new AsyncController.AsyncDelegate(delegate - { - if (_collection.size() == 1) - { - BuildMenuItems(); - } - else - { - int pos = _collection.indexOf(obj); - Host h = (Host) obj; - MenuItem i = new MenuItem(BookmarkNameProvider.toString(h)); - i.Tag = h; - i.Click += (o, args) => _form.ConnectBookmark(this, new ConnectBookmarkArgs(h)); - _menu.MenuItems.Add(pos, i); - _form.vistaMenu1.SetImage(i, _icons[h.getProtocol().getProvider()]); - } - })); - } - - public void collectionItemRemoved(object obj) - { - _form.Invoke(new AsyncController.AsyncDelegate(delegate - { - foreach (MenuItem item in _menu.MenuItems) - { - if (obj.Equals(item.Tag)) - { - _menu.MenuItems.Remove(item); - break; - } - } - if (_collection.size() == 0) - { - BuildMenuItems(); - } - })); - } - - public void collectionItemChanged(object obj) - { - _form.Invoke(new AsyncController.AsyncDelegate(delegate - { - foreach (MenuItem item in _menu.MenuItems) - { - if (obj.Equals(item.Tag)) - { - Host h = (Host) obj; - item.Text = BookmarkNameProvider.toString(h); - _form.vistaMenu1.SetImage(item, _icons[h.getProtocol().getIdentifier()]); - break; - } - } - })); - } - - public void BuildMenuItems() - { - _menu.MenuItems.Clear(); - if (_collection.size() > 0) - { - List items = new List(); - foreach (Host bookmark in _collection) - { - MenuItem item = new MenuItem(BookmarkNameProvider.toString(bookmark)); - item.Tag = bookmark; - item.Click += - (o, args) => _form.ConnectBookmark(this, new ConnectBookmarkArgs(item.Tag as Host)); - items.Add(item); - } - //TODO - // separator and clear item -// items.Add(new MenuItem("-")); -// MenuItem clear = new MenuItem(LocaleFactory.localizedString("Clear Menu")); -// clear.Click += (o, args) => _form.ClearHistory(); -// items.Add(clear); - - _menu.MenuItems.AddRange(items.ToArray()); - foreach (MenuItem item in items) - { - if (null != item.Tag) - _form.vistaMenu1.SetImage(item, _icons[((Host) item.Tag).getProtocol().getProvider()]); - } - } - else - { - MenuItem noitem = new MenuItem(_empty); - noitem.Enabled = false; - _menu.MenuItems.Add(noitem); - } - } - } - - private class NoGapRenderer : ToolStripProfessionalRenderer - { - public NoGapRenderer() - { - RoundedEdges = false; - } - - protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) - { - Rectangle rect = e.AffectedBounds; - using (SolidBrush brush = new SolidBrush(Color.FromKnownColor(KnownColor.Control))) - { - e.Graphics.FillRectangle(brush, rect); - } - } - - protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) - { - //no highlighting - return; - } - - protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) - { - base.OnRenderToolStripBorder(e); - using (Pen pen = new Pen(Color.Gray)) - { - Rectangle bounds = new Rectangle(Point.Empty, e.ToolStrip.Size); - e.Graphics.DrawLine(pen, bounds.Left, bounds.Top, bounds.Right, bounds.Top); - } - } - - protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e) - { - Image img; - if (!e.Item.Enabled) - { - if (null == e.Image.Tag) - { - e.Image.Tag = CreateDisabledImage(e.Image); - } - img = (Image) e.Image.Tag; - } - else - { - img = e.Item.Pressed && e.Item.Selected ? e.Item.Tag as Image : e.Image; - } - Rectangle rect = new Rectangle(new Point(e.ImageRectangle.Left - 2, e.ImageRectangle.Top - 2), - new Size(img.Width, img.Height)); - e.Graphics.DrawImage(img, rect); - } - } - } +// +// Copyright (c) 2010-2015 Yves Langisch. All rights reserved. +// http://cyberduck.io/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// feedback@cyberduck.io +// + +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows.Forms; +using BrightIdeasSoftware; +using ch.cyberduck.core; +using ch.cyberduck.core.aquaticprime; +using ch.cyberduck.core.bonjour; +using ch.cyberduck.core.local; +using ch.cyberduck.core.preferences; +using ch.cyberduck.ui.comparator; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Ui.Controller; +using Ch.Cyberduck.Ui.Core; +using Ch.Cyberduck.Ui.Winforms.Commondialog; +using Ch.Cyberduck.Ui.Winforms.Controls; +using Ch.Cyberduck.Ui.Winforms.Taskdialog; +using org.apache.commons.io; +using org.apache.commons.lang3; +using org.apache.log4j; +using TheCodeKing.ActiveButtons.Controls; +using Application = ch.cyberduck.core.local.Application; +using DataObject = System.Windows.Forms.DataObject; +using ToolStripRenderer = Ch.Cyberduck.Ui.Controller.ToolStripRenderer; + +namespace Ch.Cyberduck.Ui.Winforms +{ + /// + /// Main browser form. + /// + /// Menu handling: Due to the non-native look of the ToolStripMenu controls we use the old MainMenu component which renders natively. + /// The ToolStripMenu controls are still there and maintained since we need them for the shortcut handling (some of the need shortcuts are not + /// supported by MainMenu, e.g. Alt+Enter). I hope to see native rendering of the menu controls in a future version of the .NET so that we can + /// get rid of the unnecessary MainMenu components. + /// + public partial class BrowserForm : BaseForm, IBrowserView + { + private static readonly Font FixedFont = new Font(FontFamily.GenericMonospace, 8); + private static readonly Logger Log = Logger.getLogger(typeof (BrowserForm).FullName); + private static readonly TypeConverter ShortcutConverter = TypeDescriptor.GetConverter(typeof (Keys)); + private bool _browserStateRestored; + private BrowserView _currentView; + private bool _lastActivityRunning; + private ToolStripMenuItem _lastMenuItemClicked; + private bool _sorting; + + public BrowserForm() + { + InitializeComponent(); + + ToolStripManager.RenderMode = ToolStripManagerRenderMode.System; + + BookmarkMenuCollectionListener bookmarkMenuCollectionListener = new BookmarkMenuCollectionListener(this); + BookmarkCollection.defaultCollection().addListener(bookmarkMenuCollectionListener); + MenuCollectionListener historyMenuCollectionListener = new MenuCollectionListener(this, historyMainMenuItem, + HistoryCollection.defaultCollection(), + LocaleFactory.localizedString("No recently connected servers available")); + HistoryCollection.defaultCollection().addListener(historyMenuCollectionListener); + MenuCollectionListener bonjourMenuCollectionListener = new MenuCollectionListener(this, bonjourMainMenuItem, + RendezvousCollection.defaultCollection(), LocaleFactory.localizedString("No Bonjour services available")); + RendezvousCollection.defaultCollection().addListener(bonjourMenuCollectionListener); + + if (!DesignMode) + { + vistaMenu1.SetImage(newBookmarkMainMenuItem, IconCache.Instance.IconForName("bookmark", 16)); + vistaMenu1.SetImage(historyMainMenuItem, IconCache.Instance.IconForName("history", 16)); + vistaMenu1.SetImage(bonjourMainMenuItem, IconCache.Instance.IconForName("rendezvous", 16)); + vistaMenu1.SetImage(transfersMainMenuItem, IconCache.Instance.IconForName("queue", 16)); + + newFolderToolStripButton.Image = IconCache.Instance.IconForName("newfolder", 32); + } + + toolBar.ContextMenu = toolbarContextMenu1; + bookmarkListView.ContextMenu = bookmarkContextMenu; + + viewToolStrip.Renderer = new ToolStripRenderer(); + toolBar.Renderer = new ToolStripRenderer(); + actionToolStrip.Renderer = new NoGapRenderer(); + + // configure browser properties + browser.UseExplorerTheme = true; + browser.UseTranslucentSelection = true; + browser.OwnerDraw = true; + browser.UseOverlays = false; + browser.LabelEdit = true; + browser.AllowDrop = true; + + browser.ContextMenuStrip = null; + browser.ContextMenu = browserContextMenu; + browser.DropSink = new ExpandingBrowserDropSink(this); + browser.DragSource = new BrowserDragSource(this); + + browser.AllowColumnReorder = true; + browser.ShowImagesOnSubItems = true; + browser.TreeColumnRenderer = new BrowserRenderer(); + browser.SelectedRowDecoration = new ExplorerRowBorderDecoration(); + browser.ItemsChanged += (sender, args) => ItemsChanged(); + browser.BeforeSorting += BeforeSorting; + browser.CellEditStarting += (sender, args) => args.Cancel = !ValidateRenameFile(); + SetupComparators(); + + searchTextBox.PlaceHolderText = LocaleFactory.localizedString("Search…", "Main"); + + securityToolStripStatusLabel.Visible = false; + + quickConnectToolStripComboBox.ComboBox.SelectionChangeCommitted += + toolStripQuickConnect_SelectionChangeCommited; + + // directly right-click on an item leads to some deferred updating of the menu items + // since the idle event is fired after showing the menu + contextMenuStrip.Opening += (sender, args) => Commands.Validate(); + contextMenuStrip.Opening += (sender, args) => args.Cancel = !ContextMenuEnabled(); + bookmarkContextMenu.Popup += delegate { Commands.Validate(); }; + browserContextMenu.Popup += delegate { Commands.Validate(); }; + + editorMenuStrip.Opening += OnEditorActionMenuOpening; + + editMainMenuItem.MenuItems.Add(string.Empty); + editMainMenuItem.Popup += OnEditMenuItemPopup; + editBrowserContextMenuItem.MenuItems.Add(string.Empty); + editBrowserContextMenuItem.Popup += OnEditMenuItemPopup; + + // add dummy entry to force the right arrow appearing in the menu + columnContextMenu.Items.Add(string.Empty); + archiveMenuStrip.Items.Add(string.Empty); + + archiveMenuStrip.Opening += OnArchiveMenuStripOpening; + createArchiveMainMenuItem.MenuItems.Add(string.Empty); + createArchiveMainMenuItem.Popup += OnArchiveMenuItemOnPopup; + createArchiveBrowserContextMenuItem.MenuItems.Add(string.Empty); + createArchiveBrowserContextMenuItem.Popup += OnArchiveMenuItemOnPopup; + copyUrlMainMenuItem.MenuItems.Add(string.Empty); + copyUrlMainMenuItem.Popup += OnCopyUrlMenuItemPopup; + copyUrlBrowserContextMenuItem.MenuItems.Add(string.Empty); + copyUrlBrowserContextMenuItem.Popup += OnCopyUrlMenuItemPopup; + openUrlMainMenuItem.MenuItems.Add(string.Empty); + openUrlMainMenuItem.Popup += OnOpenUrlMenuItemPopup; + openUrlBrowserContextMenuItem.MenuItems.Add(string.Empty); + openUrlBrowserContextMenuItem.Popup += OnOpenUrlMenuItemPopup; + + textEncodingMenuStrip.Items.Add(string.Empty); + textEncodingMainMenuItem.MenuItems.Add(string.Empty); + + columnMainMenuItem.MenuItems.Add(string.Empty); + historyMainMenuItem.MenuItems.Add(string.Empty); + historyMenuStrip.Items.Add(string.Empty); + bonjourMenuStrip.Items.Add(string.Empty); + + UpdateBookmarks(); + + newBookmarkToolStripButton.Tag = ResourcesBundle.addPressed; + editBookmarkToolStripButton.Tag = ResourcesBundle.editPressed; + deleteBookmarkToolStripButton.Tag = ResourcesBundle.removePressed; + + browserToolStripButton.ToolTipText = LocaleFactory.localizedString("Browser", "Preferences"); + bookmarksToolStripButton.ToolTipText = LocaleFactory.localizedString("Bookmarks", "Preferences"); + historyToolStripButton.ToolTipText = LocaleFactory.localizedString("History"); + bonjourToolStripButton.ToolTipText = LocaleFactory.localizedString("Bonjour", "Browser"); + + keyMainMenuItem.Text = LicenseFactory.find().ToString(); + keyMainMenuItem.Enabled = false; + + //Terminal app menu entries + String command = PreferencesFactory.get().getProperty("terminal.command.ssh"); + String file = StringUtils.capitalize(FilenameUtils.getBaseName(System.IO.Path.GetFileName(command))); + openInTerminalMainMenuItem.Text = String.Format(LocaleFactory.localizedString("Open in {0}"), file); + openInTerminalToolStripMenuItem.Text = String.Format(LocaleFactory.localizedString("Open in {0}"), file); + ; + openInTerminalToolbarMenuItem.Text = String.Format(LocaleFactory.localizedString("Open in {0}"), file); + openInTerminalToolStripButton.Image = IconCache.Instance.IconForFilename(command, IconCache.IconSize.Large); + + ConfigureToolbar(); + ConfigureFileCommands(); + ConfigureEditCommands(); + ConfigureViewCommands(); + ConfigureGoCommands(); + ConfigureWindowCommands(); + ConfigureBookmarkCommands(); + ConfigureHelpCommands(); + ConfigureActionlessCommands(); + + // restore additional UI settings + Load += delegate + { + //correct width for disconnect button + Size preferredSize = disconnectStripButton.GetPreferredSize(Size.Empty); + disconnectStripButton.AutoSize = false; + disconnectStripButton.Width = preferredSize.Width; + splitContainer.SplitterDistance = PersistenceHandler.Get("splitter.distance", 400); + + Menu = mainMenu; + + //add menu shortcuts, needs to be done in the Load event handler + ConfigureShortcuts(); + }; + + Closed += delegate + { + //we save the state of the last browser form + //this might be improved by some other logic + if (MainController.Browsers.Count == 1) + { + SaveUiSettings(); + } + BookmarkCollection.defaultCollection().removeListener(bookmarkMenuCollectionListener); + HistoryCollection.defaultCollection().removeListener(historyMenuCollectionListener); + RendezvousCollection.defaultCollection().removeListener(bonjourMenuCollectionListener); + }; + + if (LicenseFactory.find().Equals(LicenseFactory.EMPTY_LICENSE)) + { + AddDonateButton(); + } + } + + public Image Favicon + { + set { ; } + } + + public override string[] BundleNames + { + get { return new[] {"Browser", "Main", "Localizable"}; } + } + + protected override ContextMenu[] ContextMenuCollection + { + get { return new[] {browserContextMenu, bookmarkContextMenu, toolbarContextMenu1}; } + } + + public event VoidHandler FolderUp; + public event VoidHandler HistoryBack; + public event VoidHandler HistoryForward; + public event EditWithHandler EditEvent; + public event VoidHandler ShowInspector; + public event DropHandler BrowserCanDrop; + public event ModelDropHandler BrowserModelCanDrop; + public event DropHandler BrowserDropped; + public event ModelDropHandler BrowserModelDropped; + public event ValidateCommand ValidateNewFile; + public event VoidHandler NewSymbolicLink; + public event ValidateCommand ValidateNewSymbolicLink; + public event RenamePathname RenameFile; + public event ValidateCommand ValidateRenameFile; + public event VoidHandler Delete; + public event VoidHandler NewFile; + public event VoidHandler DuplicateFile; + public event EventHandler NewBrowser; + public event ValidateCommand ValidateNewBrowser; + public event ValidateCommand ValidateDuplicateFile; + public event ValidateCommand ValidateOpenWebUrl; + public event ValidateCommand ValidateEditWith; + public event ValidateCommand ValidateDelete; + public event ArchivesHandler GetArchives; + public event CopyUrlHandler GetCopyUrls; + public event OpenUrlHandler GetOpenUrls; + public event EventHandler CreateArchive; + public event ValidateCommand ValidateCreateArchive; + public event VoidHandler ExpandArchive; + public event ValidateCommand ValidateExpandArchive; + public event VoidHandler Exit; + public event VoidHandler QuickConnect; + public event VoidHandler OpenConnection; + public event ValidateCommand ValidateOpenConnection; + public event VoidHandler NewDownload; + public event ValidateCommand ValidateNewDownload; + public event ValidateCommand ValidateShowInspector; + public event VoidHandler Download; + public event ValidateCommand ValidateDownload; + public event VoidHandler DownloadAs; + public event ValidateCommand ValidateDownloadAs; + public event VoidHandler DownloadTo; + public event ValidateCommand ValidateDownloadTo; + public event VoidHandler Upload; + public event ValidateCommand ValidateUpload; + public event VoidHandler Synchronize; + public event ValidateCommand ValidateSynchronize; + public event VoidHandler BrowserDoubleClicked; + public event VoidHandler BrowserSelectionChanged; + public event VoidHandler PathSelectionChanged; + public event VoidHandler ShowTransfers; + public event DragHandler BrowserDrag; + public event EndDragHandler BrowserEndDrag; + public event DropHandler HostCanDrop; + public event ModelDropHandler HostModelCanDrop; + public event DropHandler HostDropped; + public event ModelDropHandler HostModelDropped; + public event DragHandler HostDrag; + public event EndDragHandler HostEndDrag; + public event VoidHandler NewFolder; + public event ValidateCommand ValidateNewFolder; + public event EditorsHandler GetEditorsForSelection; + public event ValidateCommand ContextMenuEnabled; + public event VoidHandler Cut; + public event ValidateCommand ValidateCut; + public event VoidHandler Copy; + public event ValidateCommand ValidateCopy; + public event VoidHandler Paste; + public event ValidateCommand ValidatePaste; + public event ValidateCommand ValidateSelectAll; + public event VoidHandler ShowPreferences; + public event VoidHandler ToggleToolbar; + public event VoidHandler ShowHiddenFiles; + public event VoidHandler ToggleLogDrawer; + public event ValidateCommand ValidateTextEncoding; + public event VoidHandler RefreshBrowser; + public event ValidateCommand ValidateRefresh; + public event VoidHandler GotoFolder; + public event ValidateCommand ValidateGotoFolder; + public event ValidateCommand ValidateHistoryBack; + public event ValidateCommand ValidateHistoryForward; + public event ValidateCommand ValidateFolderUp; + public event VoidHandler FolderInside; + public event ValidateCommand ValidateFolderInside; + public event VoidHandler Search; + public event VoidHandler SendCustomCommand; + public event ValidateCommand ValidateSendCustomCommand; + public event VoidHandler OpenInTerminal; + public event ValidateCommand ValidateOpenInTerminal; + public event VoidHandler Stop; + public event ValidateCommand ValidateStop; + public event VoidHandler Disconnect; + public event ValidateCommand ValidateDisconnect; + public event VoidHandler SearchFieldChanged; + public event EventHandler ChangeBrowserView; + public event VoidHandler NewBookmark; + public event ValidateCommand ValidateNewBookmark; + public event VoidHandler EditBookmark; + public event ValidateCommand ValidateEditBookmark; + public event VoidHandler DeleteBookmark; + public event ValidateCommand ValidateDeleteBookmark; + public event VoidHandler DuplicateBookmark; + public event ValidateCommand ValidateDuplicateBookmark; + public event VoidHandler SortBookmarksByProtocol; + public event EventHandler ConnectBookmark; + public event ValidateCommand ValidateConnectBookmark; + public event VoidHandler OpenUrl; + public event EventHandler EncodingChanged; + public event BookmarksHandler GetBookmarks; + public event BookmarksHandler GetHistory; + public event BookmarksHandler GetBonjourHosts; + public event VoidHandler ClearHistory; + public event VoidHandler ShowCertificate; + public event VoidHandler ItemsChanged; + public event ValidateCommand ValidatePathsCombobox; + public event ValidateCommand ValidateSearchField; + public event SetComparatorHandler SetComparator; + public event VoidHandler ToggleBookmarks; + public event VoidHandler SortBookmarksByNickname; + public event VoidHandler SortBookmarksByHostname; + public event VoidHandler RevertFile; + public event ValidateCommand ValidateRevertFile; + + public void UpdateBookmarks() + { + ConfigureBookmarkList(bookmarkListView, bookmarkDescriptionColumn, bookmarkImageColumn, activeColumn); + } + + public bool ComboboxPathEnabled + { + set { pathComboBox.Enabled = value; } + } + + public bool HiddenFilesVisible + { + set { showHiddenFilesMainMenuItem.Checked = value; } + } + + public string SearchString + { + get { return searchTextBox.Text; } + set { searchTextBox.Text = value; } + } + + public String DownloadAsDialog(Local initialDirectory, string fileName) + { + saveFileDialog.FileName = fileName; + if (null != initialDirectory) + { + saveFileDialog.InitialDirectory = initialDirectory.getAbsolute(); + } + if (DialogResult.OK == saveFileDialog.ShowDialog(this)) + { + return saveFileDialog.FileName; + } + return null; + } + + public String DownloadToDialog(string description, Local initialDirectory, string selectedPath) + { + folderBrowserDialog.RootFolder = Environment.SpecialFolder.Desktop; + folderBrowserDialog.Description = description; + if (null != selectedPath) + { + folderBrowserDialog.SelectedPath = selectedPath; + } + if (DialogResult.OK == folderBrowserDialog.ShowDialog(this)) + { + return folderBrowserDialog.SelectedPath; + } + return null; + } + + public String SynchronizeDialog(string description, Local initialDirectory, string selectedPath) + { + folderBrowserDialog.RootFolder = Environment.SpecialFolder.Desktop; + folderBrowserDialog.Description = description; + if (null != selectedPath) + { + folderBrowserDialog.SelectedPath = selectedPath; + } + if (DialogResult.OK == folderBrowserDialog.ShowDialog(this)) + { + return folderBrowserDialog.SelectedPath; + } + return null; + } + + public String[] UploadDialog(Local initialDirectory) + { + SelectFileAndFolderDialog dialog = SelectFileAndFolderDialog.Instance; + dialog.AcceptFiles = true; + if (null != initialDirectory) + { + dialog.Path = initialDirectory.getAbsolute(); + } + string selectText = LocaleFactory.localizedString("Choose"); + string canelText = LocaleFactory.localizedString("Cancel"); + + dialog.FileNameLabel = selectText + ":"; + dialog.SelectLabel = "&" + selectText; + dialog.CancelLabel = "&" + canelText; + try + { + dialog.ShowDialog(); + } + catch (Exception e) + { + MessageBox(LocaleFactory.localizedString("Error"), null, e.Message, TaskDialogButtons.OK, SysIcons.Error); + Log.error("Exception while upload selection", e); + } + string[] paths = dialog.SelectedPaths; + if (paths.Length == 0) + { + return null; + } + return paths; + } + + public int NumberOfBookmarks + { + get { return bookmarkListView.GetItemCount(); } + } + + public int NumberOfFiles + { + get { return browser.GetItemCount(); } + } + + public string QuickConnectValue + { + get + { + if (null != quickConnectToolStripComboBox.SelectedItem) + { + return (string) quickConnectToolStripComboBox.SelectedItem; + } + return quickConnectToolStripComboBox.Text; + } + } + + public bool HistoryBackEnabled + { + set { historyBackButton.Enabled = value; } + } + + public bool HistoryForwardEnabled + { + set { historyForwardButton.Enabled = value; } + } + + public bool ParentPathEnabled + { + set { parentPathButton.Enabled = value; } + } + + public string SelectedComboboxPath + { + get { return pathComboBox.Text; } + } + + public Bitmap EditIcon + { + set { editToolStripSplitButton.Image = value; } + } + + public Bitmap OpenIcon + { + set { openInBrowserToolStripButton.Image = value; } + } + + public bool SecureConnectionVisible + { + set { securityToolStripStatusLabel.Visible = value; } + } + + public bool CertBasedConnection + { + set { securityToolStripStatusLabel.Enabled = value; } + } + + public bool ActivityRunning + { + set + { + if (_lastActivityRunning != value) + { + if (value && disconnectStripButton.Image != ResourcesBundle.stop) + { + disconnectStripButton.Image = ResourcesBundle.stop; + disconnectStripButton.Text = LocaleFactory.localizedString("Stop"); + } + else if (!value && disconnectStripButton.Image != ResourcesBundle.eject) + { + disconnectStripButton.Image = ResourcesBundle.eject; + disconnectStripButton.Text = LocaleFactory.localizedString("Disconnect"); + } + _lastActivityRunning = value; + } + } + } + + public bool ShowActivityEnabled + { + set { disconnectStripButton.Enabled = value; } + } + + public void PopulateQuickConnect(List nicknames) + { + quickConnectToolStripComboBox.Items.Clear(); + foreach (string nickname in nicknames) + { + quickConnectToolStripComboBox.Items.Add(nickname); + } + } + + public void BeginBrowserUpdate() + { + browser.BeginUpdate(); + } + + public void EndBrowserUpdate() + { + browser.EndUpdate(); + } + + public void SetBrowserModel(IEnumerable model) + { + // Clear the cache in order to avoid strange side effects + browser.RebuildAll(true); + browser.ClearCachedInfo(); + browser.SetObjects(model); + + //only restore the state for the first time + if (null != model && !_browserStateRestored) + { + byte[] state = PersistenceHandler.Get("tree.state", null); + if (null != state) + { + browser.RestoreState(state); + } + else + { + //by default we sort ascending by filename + browser.Sort(0); + } + _browserStateRestored = true; + } + } + + public void RefreshBrowserObject(Path path) + { + browser.RefreshObject(path); + } + + public void RefreshBrowserObjects(List list) + { + browser.RefreshObjects(list); + } + + public void BrowserActiveStateChanged() + { + browser.Invalidate(); + } + + public TypedColumn.TypedAspectGetterDelegate ModelFilenameGetter + { + set { new TypedColumn(treeColumnName) {AspectGetter = value}; } + } + + public TypedColumn.TypedImageGetterDelegate ModelIconGetter + { + set { new TypedColumn(treeColumnName) {ImageGetter = value}; } + } + + public TypedColumn.TypedAspectGetterDelegate ModelSizeGetter + { + set { new TypedColumn(treeColumnSize) {AspectGetter = value}; } + } + + public AspectToStringConverterDelegate ModelSizeAsStringGetter + { + set { treeColumnSize.AspectToStringConverter = value; } + } + + public TreeListView.CanExpandGetterDelegate ModelCanExpandDelegate + { + set { browser.CanExpandGetter = value; } + } + + public TypedColumn.TypedAspectGetterDelegate ModelModifiedGetter + { + set { new TypedColumn(treeColumnModified) {AspectGetter = value}; } + } + + public AspectToStringConverterDelegate ModelModifiedAsStringGetter + { + set { treeColumnModified.AspectToStringConverter = value; } + } + + public TypedColumn.TypedAspectGetterDelegate ModelOwnerGetter + { + set { new TypedColumn(treeColumnOwner) {AspectGetter = value}; } + } + + public TypedColumn.TypedAspectGetterDelegate ModelGroupGetter + { + set { new TypedColumn(treeColumnGroup) {AspectGetter = value}; } + } + + public TypedColumn.TypedAspectGetterDelegate ModelPermissionsGetter + { + set { new TypedColumn(treeColumnPermissions) {AspectGetter = value}; } + } + + public TypedColumn.TypedAspectGetterDelegate ModelKindGetter + { + set { new TypedColumn(treeColumnKind) {AspectGetter = value}; } + } + + public TypedColumn.TypedAspectGetterDelegate ModelExtensionGetter + { + set { new TypedColumn(treeColumnExtension) {AspectGetter = value}; } + } + + public TypedColumn.TypedAspectGetterDelegate ModelRegionGetter + { + set { new TypedColumn(treeColumnRegion) {AspectGetter = value}; } + } + + public TypedColumn.TypedAspectGetterDelegate ModelVersionGetter + { + set { new TypedColumn(treeColumnVersion) {AspectGetter = value}; } + } + + public MulticolorTreeListView.ActiveGetterPathDelegate ModelActiveGetter + { + set { browser.ActiveGetterPath = value; } + } + + public void AddTranscriptEntry(bool request, string entry) + { + transcriptBox.SelectionFont = FixedFont; + if (request) + { + transcriptBox.SelectionColor = Color.Black; + } + else + { + transcriptBox.SelectionColor = Color.DarkGray; + transcriptBox.SelectionColor = Color.DarkGray; + } + if (transcriptBox.TextLength > 0) + { + entry = Environment.NewLine + entry; + } + transcriptBox.SelectedText = entry; + ScrollToBottom(transcriptBox); + } + + public void ClearTranscript() + { + transcriptBox.Clear(); + } + + public void FocusBrowser() + { + browser.Focus(); + } + + public void RemoveDonateButton() + { + IActiveMenu menu = ActiveMenu.GetInstance(this); + menu.Items.Clear(); + } + + public ObjectListView Browser + { + get { return browser; } + } + + public TreeListView.ChildrenGetterDelegate ModelChildrenGetterDelegate + { + set { browser.ChildrenGetter = value; } + } + + public BrowserView CurrentView + { + get { return _currentView; } + set + { + if (value != _currentView) + { + _currentView = value; + switch (value) + { + case BrowserView.File: + panelManager1.SelectedPanel = managedBrowserPanel1; + browser.Focus(); + EnableViewToolStripButton(browserToolStripButton); + return; + case BrowserView.Bookmark: + panelManager1.SelectedPanel = managedBookmarkPanel2; + EnableViewToolStripButton(bookmarksToolStripButton); + bookmarkListView.Focus(); + return; + case BrowserView.History: + panelManager1.SelectedPanel = managedBookmarkPanel2; + bookmarkListView.Focus(); + EnableViewToolStripButton(historyToolStripButton); + return; + case BrowserView.Bonjour: + panelManager1.SelectedPanel = managedBookmarkPanel2; + bookmarkListView.Focus(); + EnableViewToolStripButton(bonjourToolStripButton); + return; + } + } + } + } + + public string StatusLabel + { + set { statusLabel.Text = value; } + } + + public IList SelectedPaths + { + get { return new List(new ListAdapter(browser.SelectedObjects)); } + set + { + ArrayList s = new ArrayList(); + foreach (Path path in value) + { + s.Add(path); + } + browser.SelectedObjects = s; + if (browser.SelectedItem != null) + { + browser.SelectedItem.Focused = true; + } + } + } + + public List SelectedBookmarks + { + get { return new List(new ListAdapter(bookmarkListView.SelectedObjects)); } + } + + public void EnsureBookmarkVisible(Host host) + { + bookmarkListView.EnsureModelVisible(host); + } + + public void SelectBookmark(Host host) + { + IList selected = new ArrayList(); + selected.Add(host); + bookmarkListView.SelectObjects(selected); + bookmarkListView.EnsureModelVisible(host); + bookmarkListView.Focus(); + } + + public void PopulatePaths(List paths) + { + pathComboBox.Items.Clear(); + pathComboBox.Items.AddRange(paths.ToArray()); + if (paths.Count > 0) + pathComboBox.SelectedIndex = 0; + } + + public void StartRenaming(Path path) + { + browser.EditSubItem(browser.GetItem(browser.IndexOf(path)), 0); + } + + public void StartSearch() + { + searchTextBox.Focus(); + } + + public bool SearchEnabled + { + set { searchTextBox.Enabled = value; } + } + + public IList VisiblePaths + { + get + { + int count = browser.GetItemCount(); + IList paths = new List(count); + for (int i = 0; i < browser.GetItemCount(); i++) + { + paths.Add((Path) browser.GetModelObject(i)); + } + return paths; + } + } + + public void StartActivityAnimation() + { + toolStripProgress.Visible = true; + } + + public void StopActivityAnimation() + { + toolStripProgress.Visible = false; + } + + public Filter FilenameFilter + { + set + { + if (null == value) + { + browser.UseFiltering = false; + } + else + { + browser.ModelFilter = new FilterWrapper(value); + browser.UseFiltering = true; + } + } + } + + public bool LogDrawerVisible + { + get { return !splitContainer.Panel2Collapsed; } + set { splitContainer.Panel2Collapsed = !value; } + } + + public Host SelectedBookmark + { + get { return (Host) bookmarkListView.SelectedObject; } + } + + public ImageGetterDelegate BookmarkImageGetter + { + set { bookmarkImageColumn.ImageGetter = value; } + } + + public AspectGetterDelegate BookmarkNicknameGetter + { + set { bookmarkDescriptionColumn.AspectGetter = value; } + } + + public AspectGetterDelegate BookmarkHostnameGetter + { + set { ((AbstractBookmarkRenderer) bookmarkDescriptionColumn.Renderer).HostnameAspectGetter = value; } + } + + public AspectGetterDelegate BookmarkUrlGetter + { + set { ((AbstractBookmarkRenderer) bookmarkDescriptionColumn.Renderer).UrlAspectGetter = value; } + } + + public AspectGetterDelegate BookmarkNotesGetter + { + set { ((AbstractBookmarkRenderer) bookmarkDescriptionColumn.Renderer).NotesAspectGetter = value; } + } + + public ImageGetterDelegate BookmarkStatusImageGetter + { + set { activeColumn.ImageGetter = value; } + } + + public void SetBookmarkModel(IEnumerable hosts, Host selected) + { + int index = -1; + if (null != selected) + { + OLVListItem item = bookmarkListView.ModelToItem(selected); + if (null != item) + { + index = item.Index; + } + } + bookmarkListView.SetObjects(hosts, true); + if (index != -1 && bookmarkListView.Items.Count > 0) + { + if (index >= bookmarkListView.Items.Count) + { + index = bookmarkListView.Items.Count - 1; + } + bookmarkListView.EnsureVisible(index); + } + } + + public void RefreshBookmark(Host host) + { + bookmarkListView.RefreshObject(host); + } + + public void AddBookmark(Host host) + { + bookmarkListView.AddObject(host); + } + + public void RemoveBookmark(Host host) + { + bookmarkListView.RemoveObject(host); + } + + public string WindowTitle + { + set { Text = value; } + } + + public bool ToolbarVisible + { + set + { + toolBar.Visible = value; + toggleToolbarToolStripMenuItem.Text = + LocaleFactory.localizedString(value ? "Hide Toolbar" : "Show Toolbar"); + toggleToolbarMainMenuItem.Text = LocaleFactory.localizedString(value ? "Hide Toolbar" : "Show Toolbar"); + } + get { return toolBar.Visible; } + } + + public int TopItemIndex + { + set { browser.TopItemIndex = value; } + get { return browser.TopItemIndex; } + } + + public void PopulateEncodings(List encodings) + { + textEncodingMainMenuItem.MenuItems.Clear(); + foreach (string encoding in encodings) + { + string encoding1 = encoding; + textEncodingMainMenuItem.MenuItems.Add(encoding, + (sender, args) => EncodingChanged(sender, new EncodingChangedArgs(encoding1))); + } + } + + public string SelectedEncoding + { + set + { + foreach (MenuItem item in textEncodingMainMenuItem.MenuItems) + { + item.Checked = value.Equals(item.Text); + } + } + } + + public bool SecureConnection + { + set { securityToolStripStatusLabel.Image = IconCache.Instance.IconForName(value ? "locked" : "unlocked"); } + } + + public static void ScrollToBottom(RichTextBox richTextBox) + { + NativeMethods.SendMessage(richTextBox.Handle, NativeConstants.WM_VSCROLL, NativeConstants.SB_BOTTOM, 0); + } + + private void AddDonateButton() + { + IActiveMenu menu = ActiveMenu.GetInstance(this); + ActiveButton button = new ActiveButton(); + button.Font = new Font(base.Font.FontFamily, 7.5F, FontStyle.Bold); + button.ForeColor = Color.White; + button.BackColor = Color.Firebrick; + button.FlatAppearance.BorderSize = 0; + button.FlatStyle = FlatStyle.Flat; + + button.Text = " " + LocaleFactory.localizedString("Get a donation key!", "License") + " "; + button.Click += + delegate { BrowserLauncherFactory.get().open(PreferencesFactory.get().getProperty("website.donate")); }; + menu.Items.Add(button); + } + + private void SetupComparators() + { + treeColumnName.ComparatorGetter = (SortOrder order) => new FilenameComparator(order == SortOrder.Ascending); + treeColumnSize.ComparatorGetter = (SortOrder order) => new SizeComparator(order == SortOrder.Ascending); + treeColumnModified.ComparatorGetter = + (SortOrder order) => new TimestampComparator(order == SortOrder.Ascending); + treeColumnOwner.ComparatorGetter = (SortOrder order) => new OwnerComparator(order == SortOrder.Ascending); + treeColumnGroup.ComparatorGetter = (SortOrder order) => new GroupComparator(order == SortOrder.Ascending); + treeColumnPermissions.ComparatorGetter = + (SortOrder order) => new PermissionsComparator(order == SortOrder.Ascending); + treeColumnKind.ComparatorGetter = (SortOrder order) => new FileTypeComparator(order == SortOrder.Ascending); + treeColumnExtension.ComparatorGetter = + (SortOrder order) => new ExtensionComparator(order == SortOrder.Ascending); + treeColumnRegion.ComparatorGetter = (SortOrder order) => new RegionComparator(order == SortOrder.Ascending); + treeColumnVersion.ComparatorGetter = + (SortOrder order) => new VersionComparator(order == SortOrder.Ascending); + } + + private void BeforeSorting(object sender, BeforeSortingEventArgs args) + { + args.Handled = true; + if (_sorting || null == args.ColumnToSort) return; + try + { + _sorting = true; + SetComparator(((SortComparatorOLVColumn) args.ColumnToSort).ComparatorGetter(args.SortOrder)); + } + finally + { + _sorting = false; + } + } + + private void OnEditMenuItemPopup(object sender, EventArgs e) + { + MenuItem mainItem = sender as MenuItem; + mainItem.MenuItems.Clear(); + + //Add default entry + { + MenuItem item = mainItem.MenuItems.Add(LocaleFactory.localizedString("Default")); + item.Click += delegate { EditEvent(null); }; + //todo refactor! no direct IconCache access. + vistaMenu1.SetImage(item, IconCache.ResizeImage(editToolStripSplitButton.Image, new Size(16, 16))); + SetShortcutText(item, editWithToolStripMenuItem, null); + } + IList editors = GetEditorsForSelection(); + if (editors.Count > 0) + { + mainItem.MenuItems.Add("-"); + } + foreach (Application app in editors) + { + MenuItem item = mainItem.MenuItems.Add(app.getName()); + item.Tag = app.getIdentifier(); + item.Click += delegate { EditEvent(item.Tag as String); }; + vistaMenu1.UpdateParent(mainItem); + vistaMenu1.SetImage(item, + IconCache.Instance.ExtractIconFromExecutable(app.getIdentifier(), IconCache.IconSize.Small)); + } + vistaMenu1.UpdateParent(browserContextMenu); + } + + private void OnArchiveMenuStripOpening(object sender, CancelEventArgs e) + { + archiveMenuStrip.Items.Clear(); + foreach (string archive in GetArchives()) + { + ToolStripMenuItem item = new ToolStripMenuItem(archive); + string archiveName = archive; + item.Click += delegate { CreateArchive(this, new CreateArchiveEventArgs(archiveName)); }; + archiveMenuStrip.Items.Add(item); + } + } + + private void OnEditorActionMenuOpening(object sender, EventArgs e) + { + editorMenuStrip.Items.Clear(); + foreach (Application app in GetEditorsForSelection()) + { + ToolStripItem item = new ToolStripMenuItem(app.getName()); + item.Tag = app.getIdentifier(); + item.Image = IconCache.Instance.ExtractIconFromExecutable(app.getIdentifier(), IconCache.IconSize.Small); + item.Click += (o, args) => EditEvent(item.Tag as String); + editorMenuStrip.Items.Add(item); + } + if (editorMenuStrip.Items.Count == 0) + { + //Add default entry + ToolStripItem item = new ToolStripMenuItem(LocaleFactory.localizedString("Default")); + item.Image = editToolStripSplitButton.Image; + item.Click += (o, args) => EditEvent(null); + editorMenuStrip.Items.Add(item); + } + } + + private void OnCopyUrlMenuItemPopup(object sender, EventArgs e) + { + PopulateCopyUrlMenuItemPopup(sender as MenuItem, GetCopyUrls()); + } + + private void PopulateCopyUrlMenuItemPopup(MenuItem mainItem, IList>> items) + { + mainItem.MenuItems.Clear(); + int c = 0; + foreach (KeyValuePair> pair in items) + { + if (c > 0) + { + //add separator + mainItem.MenuItems.Add("-"); + } + MenuItem item = mainItem.MenuItems.Add(pair.Key); + if (pair.Value.Count > 0) + { + KeyValuePair> pair1 = pair; + item.Click += delegate + { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < pair1.Value.Count; i++) + { + if (i > 0) sb.Append(Environment.NewLine); + sb.Append(pair1.Value[i]); + } + try + { + Clipboard.SetDataObject(sb.ToString(), true, 5, 25); + } + catch (ExternalException exception) + { + Log.error("Could not copy URL to clipboard"); + } + }; + foreach (string url in pair.Value) + { + mainItem.MenuItems.Add(url).Enabled = false; + } + } + else + { + item.Enabled = false; + } + c++; + } + } + + private void OnOpenUrlMenuItemPopup(object sender, EventArgs e) + { + PopulateOpenUrlMenuItemPopup(sender as MenuItem, GetOpenUrls()); + } + + private void PopulateOpenUrlMenuItemPopup(MenuItem mainItem, IList>> items) + { + mainItem.MenuItems.Clear(); + int c = 0; + foreach (KeyValuePair> pair in items) + { + if (c > 0) + { + //add separator + mainItem.MenuItems.Add("-"); + } + MenuItem item = mainItem.MenuItems.Add(pair.Key); + if (pair.Value.Count > 0) + { + KeyValuePair> pair1 = pair; + item.Click += delegate + { + for (int i = 0; i < pair1.Value.Count; i++) + { + BrowserLauncherFactory.get().open(pair1.Value[i]); + } + }; + foreach (string url in pair.Value) + { + mainItem.MenuItems.Add(url).Enabled = false; + } + } + else + { + item.Enabled = false; + } + c++; + } + } + + private void SetShortcutText(MenuItem target, ToolStripMenuItem source, string shortCutText) + { + if (-1 == target.Text.IndexOf('\t')) + { + target.Text = String.Format("{0}\t{1}", target.Text, ShortcutToText(source.ShortcutKeys, shortCutText)); + } + } + + private void ConfigureActionlessCommands() + { + Commands.Add(pathComboBox, () => ValidatePathsCombobox()); + Commands.Add(searchTextBox, () => ValidateSearchField()); + } + + private void UpdateSeparators() + { + toolStripSeparatorAfterOpenConnection.Visible = openConnectionToolStripMenuItem1.Checked; + toolStripSeparatorAfterAction.Visible = quickConnectToolStripMenuItem.Checked || + actionToolStripMenuItem.Checked; + toolStripSeparatorAfterRefresh.Visible = infoToolStripMenuItem1.Checked || refreshToolStripMenuItem1.Checked; + toolStripSeparatorAfterDelete.Visible = editToolStripMenuItem1.Checked || + openInWebBrowserToolStripMenuItem.Checked || + newFolderToolStripMenuItem1.Checked || + openInTerminalToolStripMenuItem.Checked || + deleteToolStripMenuItem1.Checked; + + //new + toolStripSeparatorAfterOpenConnection.Visible = openConnectionToolbarMenuItem.Checked; + toolStripSeparatorAfterAction.Visible = quickConnectToolbarMenuItem.Checked || + actionContextToolbarMenuItem.Checked; + toolStripSeparatorAfterRefresh.Visible = infoToolbarMenuItem.Checked || refreshToolbarMenuItem.Checked; + toolStripSeparatorAfterDelete.Visible = editToolbarMenuItem.Checked || + openInWebBrowserToolbarMenuItem.Checked || + newFolderToolbarMenuItem.Checked || + openInTerminalToolbarMenuItem.Checked || + deleteToolbarMenuItem.Checked; + } + + internal static string ShortcutToText(Keys shortcutKeys, string shortcutKeyDisplayString) + { + if (!string.IsNullOrEmpty(shortcutKeyDisplayString)) + { + return shortcutKeyDisplayString; + } + if (shortcutKeys == Keys.None) + { + return String.Empty; + } + return ShortcutConverter.ConvertToString(shortcutKeys); + } + + private void ConfigureToolbar() + { + //new + customizeToolbarMainMenuItem.MenuItems.Clear(); + + EventHandler h; + MenuItem m; + + openConnectionToolStripMenuItem1.CheckOnClick = true; + h = delegate + { + openConnectionToolbarMenuItem.Checked = !openConnectionToolbarMenuItem.Checked; + openConnectionToolStripButton.Visible = !openConnectionToolStripButton.Visible; + UpdateSeparators(); + PreferencesFactory.get() + .setProperty("browser.toolbar.openconnection", openConnectionToolStripButton.Visible); + }; + openConnectionToolStripMenuItem1.Click += h; + openConnectionToolbarMenuItem.Click += h; + m = new MenuItem(openConnectionToolbarMenuItem.Text, h); + m.Tag = openConnectionToolbarMenuItem; + customizeToolbarMainMenuItem.MenuItems.Add(m); + customizeToolbarMainMenuItem.MenuItems.Add("-"); + + quickConnectToolStripMenuItem.CheckOnClick = true; + h = delegate + { + quickConnectToolbarMenuItem.Checked = !quickConnectToolbarMenuItem.Checked; + quickConnectToolStripComboBox.Visible = !quickConnectToolStripComboBox.Visible; + UpdateSeparators(); + PreferencesFactory.get() + .setProperty("browser.toolbar.quickconnect", quickConnectToolStripComboBox.Visible); + }; + quickConnectToolStripMenuItem.Click += h; + quickConnectToolbarMenuItem.Click += h; + m = new MenuItem(quickConnectToolbarMenuItem.Text, h); + m.Tag = quickConnectToolbarMenuItem; + customizeToolbarMainMenuItem.MenuItems.Add(m); + + actionToolStripMenuItem.CheckOnClick = true; + h = delegate + { + actionContextToolbarMenuItem.Checked = !actionContextToolbarMenuItem.Checked; + actionToolStripDropDownButton.Visible = !actionToolStripDropDownButton.Visible; + UpdateSeparators(); + PreferencesFactory.get().setProperty("browser.toolbar.action", actionToolStripDropDownButton.Visible); + }; + actionToolStripMenuItem.Click += h; + actionContextToolbarMenuItem.Click += h; + m = new MenuItem(actionContextToolbarMenuItem.Text, h); + m.Tag = actionContextToolbarMenuItem; + customizeToolbarMainMenuItem.MenuItems.Add(m); + customizeToolbarMainMenuItem.MenuItems.Add("-"); + + infoToolStripMenuItem1.CheckOnClick = true; + h = delegate + { + infoToolbarMenuItem.Checked = !infoToolbarMenuItem.Checked; + infoToolStripButton.Visible = !infoToolStripButton.Visible; + UpdateSeparators(); + PreferencesFactory.get().setProperty("browser.toolbar.info", infoToolStripButton.Visible); + }; + infoToolStripMenuItem1.Click += h; + infoToolbarMenuItem.Click += h; + m = new MenuItem(infoToolbarMenuItem.Text, h); + m.Tag = infoToolbarMenuItem; + customizeToolbarMainMenuItem.MenuItems.Add(m); + + refreshToolStripMenuItem1.CheckOnClick = true; + h = delegate + { + refreshToolbarMenuItem.Checked = !refreshToolbarMenuItem.Checked; + refreshToolStripButton.Visible = !refreshToolStripButton.Visible; + UpdateSeparators(); + PreferencesFactory.get().setProperty("browser.toolbar.refresh", refreshToolStripButton.Visible); + }; + refreshToolStripMenuItem1.Click += h; + refreshToolbarMenuItem.Click += h; + m = new MenuItem(refreshToolbarMenuItem.Text, h); + m.Tag = refreshToolbarMenuItem; + customizeToolbarMainMenuItem.MenuItems.Add(m); + customizeToolbarMainMenuItem.MenuItems.Add("-"); + + editToolStripMenuItem1.CheckOnClick = true; + h = delegate + { + editToolbarMenuItem.Checked = !editToolbarMenuItem.Checked; + editToolStripSplitButton.Visible = !editToolStripSplitButton.Visible; + UpdateSeparators(); + PreferencesFactory.get().setProperty("browser.toolbar.edit", editToolStripSplitButton.Visible); + }; + editToolStripMenuItem1.Click += h; + editToolbarMenuItem.Click += h; + m = new MenuItem(editToolbarMenuItem.Text, h); + m.Tag = editToolbarMenuItem; + customizeToolbarMainMenuItem.MenuItems.Add(m); + + openInWebBrowserToolStripMenuItem.CheckOnClick = true; + h = delegate + { + openInWebBrowserToolbarMenuItem.Checked = !openInWebBrowserToolbarMenuItem.Checked; + openInBrowserToolStripButton.Visible = !openInBrowserToolStripButton.Visible; + UpdateSeparators(); + PreferencesFactory.get() + .setProperty("browser.toolbar.openinbrowser", openInBrowserToolStripButton.Visible); + }; + openInWebBrowserToolStripMenuItem.Click += h; + openInWebBrowserToolbarMenuItem.Click += h; + m = new MenuItem(openInWebBrowserToolbarMenuItem.Text, h); + m.Tag = openInWebBrowserToolbarMenuItem; + customizeToolbarMainMenuItem.MenuItems.Add(m); + + openInTerminalToolStripMenuItem.CheckOnClick = true; + h = delegate + { + openInTerminalToolbarMenuItem.Checked = !openInTerminalToolbarMenuItem.Checked; + openInTerminalToolStripButton.Visible = !openInTerminalToolStripButton.Visible; + UpdateSeparators(); + PreferencesFactory.get() + .setProperty("browser.toolbar.openinterminal", openInTerminalToolStripButton.Visible); + }; + openInTerminalToolStripMenuItem.Click += h; + openInTerminalToolbarMenuItem.Click += h; + m = new MenuItem(openInTerminalToolbarMenuItem.Text, h); + m.Tag = openInTerminalToolbarMenuItem; + customizeToolbarMainMenuItem.MenuItems.Add(m); + + newFolderToolStripMenuItem1.CheckOnClick = true; + h = delegate + { + newFolderToolbarMenuItem.Checked = !newFolderToolbarMenuItem.Checked; + newFolderToolStripButton.Visible = !newFolderToolStripButton.Visible; + UpdateSeparators(); + PreferencesFactory.get().setProperty("browser.toolbar.newfolder", newFolderToolStripButton.Visible); + }; + newFolderToolStripMenuItem1.Click += h; + newFolderToolbarMenuItem.Click += h; + m = new MenuItem(newFolderToolbarMenuItem.Text, h); + m.Tag = newFolderToolbarMenuItem; + customizeToolbarMainMenuItem.MenuItems.Add(m); + + deleteToolStripMenuItem1.CheckOnClick = true; + h = delegate + { + deleteToolbarMenuItem.Checked = !deleteToolbarMenuItem.Checked; + deleteToolStripButton.Visible = !deleteToolStripButton.Visible; + UpdateSeparators(); + PreferencesFactory.get().setProperty("browser.toolbar.delete", deleteToolStripButton.Visible); + }; + deleteToolStripMenuItem1.Click += h; + deleteToolbarMenuItem.Click += h; + m = new MenuItem(deleteToolbarMenuItem.Text, h); + m.Tag = deleteToolbarMenuItem; + customizeToolbarMainMenuItem.MenuItems.Add(m); + customizeToolbarMainMenuItem.MenuItems.Add("-"); + + downloadToolStripMenuItem1.CheckOnClick = true; + h = delegate + { + downloadToolbarMenuItem.Checked = !downloadToolbarMenuItem.Checked; + downloadToolStripButton.Visible = !downloadToolStripButton.Visible; + UpdateSeparators(); + PreferencesFactory.get().setProperty("browser.toolbar.download", downloadToolStripButton.Visible); + }; + downloadToolStripMenuItem1.Click += h; + downloadToolbarMenuItem.Click += h; + m = new MenuItem(downloadToolbarMenuItem.Text, h); + m.Tag = downloadToolbarMenuItem; + customizeToolbarMainMenuItem.MenuItems.Add(m); + + uploadToolStripMenuItem1.CheckOnClick = true; + h = delegate + { + uploadToolbarMenuItem.Checked = !uploadToolbarMenuItem.Checked; + uploadToolStripButton.Visible = !uploadToolStripButton.Visible; + UpdateSeparators(); + PreferencesFactory.get().setProperty("browser.toolbar.upload", uploadToolStripButton.Visible); + }; + uploadToolStripMenuItem1.Click += h; + uploadToolbarMenuItem.Click += h; + m = new MenuItem(uploadToolbarMenuItem.Text, h); + m.Tag = uploadToolbarMenuItem; + customizeToolbarMainMenuItem.MenuItems.Add(m); + + transfersToolStripMenuItem1.CheckOnClick = true; + h = delegate + { + transfersToolbarMenuItem.Checked = !transfersToolbarMenuItem.Checked; + transfersToolStripButton.Visible = !transfersToolStripButton.Visible; + UpdateSeparators(); + PreferencesFactory.get().setProperty("browser.toolbar.transfers", transfersToolStripButton.Visible); + }; + transfersToolStripMenuItem1.Click += h; + transfersToolbarMenuItem.Click += h; + m = new MenuItem(transfersToolbarMenuItem.Text, h); + m.Tag = transfersToolbarMenuItem; + customizeToolbarMainMenuItem.MenuItems.Add(m); + + logToolStripMenuItem1.CheckOnClick = true; + h = delegate + { + logToolbarMenuItem.Checked = !logToolbarMenuItem.Checked; + logToolStripButton.Visible = !logToolStripButton.Visible; + UpdateSeparators(); + PreferencesFactory.get().setProperty("browser.toolbar.log", logToolStripButton.Visible); + }; + logToolStripMenuItem1.Click += h; + logToolbarMenuItem.Click += h; + m = new MenuItem(logToolbarMenuItem.Text, h); + m.Tag = logToolbarMenuItem; + customizeToolbarMainMenuItem.MenuItems.Add(m); + + bool b1 = + openConnectionToolStripButton.Visible = + PreferencesFactory.get().getBoolean("browser.toolbar.openconnection"); + bool b2 = + quickConnectToolStripComboBox.Visible = + PreferencesFactory.get().getBoolean("browser.toolbar.quickconnect"); + bool b3 = + actionToolStripDropDownButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.action"); + bool b4 = infoToolStripButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.info"); + bool b5 = refreshToolStripButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.refresh"); + bool b6 = editToolStripSplitButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.edit"); + bool b7 = + openInBrowserToolStripButton.Visible = + PreferencesFactory.get().getBoolean("browser.toolbar.openinbrowser"); + bool b8 = + openInTerminalToolStripButton.Visible = + PreferencesFactory.get().getBoolean("browser.toolbar.openinterminal"); + bool b9 = + newFolderToolStripButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.newfolder"); + bool b10 = deleteToolStripButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.delete"); + bool b11 = downloadToolStripButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.download"); + bool b12 = uploadToolStripButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.upload"); + bool b13 = + transfersToolStripButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.transfers"); + bool b14 = logToolStripButton.Visible = PreferencesFactory.get().getBoolean("browser.toolbar.log"); + + // update menu entries + openConnectionToolStripMenuItem1.Checked = b1; + quickConnectToolStripMenuItem.Checked = b2; + actionToolStripMenuItem.Checked = b3; + infoToolStripMenuItem1.Checked = b4; + refreshToolStripMenuItem1.Checked = b5; + editToolStripMenuItem1.Checked = b6; + openInWebBrowserToolStripMenuItem.Checked = b7; + openInTerminalToolStripMenuItem.Checked = b8; + newFolderToolStripMenuItem1.Checked = b9; + deleteToolStripMenuItem1.Checked = b10; + downloadToolStripMenuItem1.Checked = b11; + uploadToolStripMenuItem1.Checked = b12; + transfersToolStripMenuItem1.Checked = b13; + logToolStripMenuItem1.Checked = b14; + + openConnectionToolbarMenuItem.Checked = b1; + quickConnectToolbarMenuItem.Checked = b2; + actionContextToolbarMenuItem.Checked = b3; + infoToolbarMenuItem.Checked = b4; + refreshToolbarMenuItem.Checked = b5; + editToolbarMenuItem.Checked = b6; + openInWebBrowserToolbarMenuItem.Checked = b7; + openInTerminalToolbarMenuItem.Checked = b8; + newFolderToolbarMenuItem.Checked = b9; + deleteToolbarMenuItem.Checked = b10; + downloadToolbarMenuItem.Checked = b11; + uploadToolbarMenuItem.Checked = b12; + transfersToolbarMenuItem.Checked = b13; + logToolbarMenuItem.Checked = b14; + + UpdateSeparators(); + } + + public event VoidHandler OpenDownloadFolderEvent; + + private void ConfigureBookmarkCommands() + { + Commands.Add(new ToolStripItem[] {viewBookmarksToolStripMenuItem}, new[] {toggleBookmarksMainMenuItem}, + (sender, args) => ToggleBookmarks(), () => true); + Commands.Add(new ToolStripItem[] {}, + new[] {sortByHostnameMainMenuItem, sortByHostnameBookmarkContextMenuItem}, + (sender, args) => SortBookmarksByHostname(), () => true); + Commands.Add(new ToolStripItem[] {}, + new[] {sortByNicknameMainMenuItem, sortByNicknameBookmarkContextMenuItem}, + (sender, args) => SortBookmarksByNickname(), () => true); + Commands.Add(new ToolStripItem[] {}, + new[] {sortByProtocolMainMenuItem, sortByProtocolBookmarkContextMenuItem}, + (sender, args) => SortBookmarksByProtocol(), () => true); + Commands.Add(new ToolStripItem[] {connectBookmarkContextToolStripMenuItem,}, + new[] {connectBookmarkContextMenuItem}, + (sender, args) => + ConnectBookmark(this, new ConnectBookmarkArgs(bookmarkListView.SelectedObject as Host)), + () => ValidateConnectBookmark()); + Commands.Add( + new ToolStripItem[] + { + newBookmarkToolStripMenuItem, newBookmarkContextToolStripMenuItem, newBookmarkContextToolStripMenuItem1, + newBookmarkToolStripButton + }, + new[] {newBookmarkContextMenuItem, newBookmarkMainMenuItem, newBookmarkBrowserContextMenuItem}, + (sender, args) => NewBookmark(), () => ValidateNewBookmark()); + Commands.Add( + new ToolStripItem[] + {editBookmarkToolStripMenuItem, editBookmarkContextToolStripMenuItem1, editBookmarkToolStripButton}, + new[] {editBookmarkMainMenuItem, editBookmarkContextMenuItem}, (sender, args) => EditBookmark(), + () => ValidateEditBookmark()); + Commands.Add( + new ToolStripItem[] + { + deleteBookmarkToolStripMenuItem, deleteBookmarkContextToolStripMenuItem1, deleteBookmarkToolStripButton + }, new[] {deleteBookmarkContextMenuItem, deleteBookmarkMainMenuItem}, (sender, args) => DeleteBookmark(), + () => ValidateDeleteBookmark()); + Commands.Add(new ToolStripItem[] {duplicateBookmarkToolStripMenuItem1, duplicateBookmarkToolStripMenuItem}, + new[] {duplicateBookmarkContextMenuItem, duplicateBookmarkMainMenuItem}, + (sender, args) => DuplicateBookmark(), () => ValidateDuplicateBookmark()); + } + + private void ConfigureBookmarkList(ObjectListView l, OLVColumn descColumn, OLVColumn imageColumn, + OLVColumn activeColumn) + { + l.ShowGroups = false; + l.UseOverlays = false; + l.OwnerDraw = true; + l.FullRowSelect = true; + l.MultiSelect = true; + l.HeaderStyle = ColumnHeaderStyle.None; + l.HideSelection = false; + l.AllowDrop = true; + l.DropSink = new HostDropSink(this); + l.DragSource = new HostDragSource(this); + + int size = PreferencesFactory.get().getInteger("bookmark.icon.size"); + AbstractBookmarkRenderer previous = (AbstractBookmarkRenderer) descColumn.Renderer; + + AbstractBookmarkRenderer r; + Font f; + switch (size) + { + case BookmarkController.SmallBookmarkSize: + r = new SmallBookmarkRenderer(); + r.NicknameFont = new Font(bookmarkListView.Font, FontStyle.Bold); + + l.RowHeight = 24; + imageColumn.Width = 25; + f = new Font(bookmarkListView.Font.FontFamily, bookmarkListView.Font.Size - 1); + break; + case BookmarkController.MediumBookmarkSize: + r = new MediumBookmarkRenderer(); + l.RowHeight = 42; + imageColumn.Width = 40; + f = new Font(bookmarkListView.Font.FontFamily, bookmarkListView.Font.Size - 2); + + break; + case BookmarkController.LargeBookmarkSize: + default: + r = new LargeBookmarkRenderer(); + + l.RowHeight = 72; + imageColumn.Width = 90; + f = new Font(bookmarkListView.Font.FontFamily, bookmarkListView.Font.Size - 1); + break; + } + r.NicknameFont = new Font(f, FontStyle.Bold); + r.HostnameFont = f; + r.UrlFont = f; + r.NotesFont = f; + r.UrlNotesSpace = 3; + + descColumn.Renderer = r; + descColumn.FillsFreeSpace = true; + + + imageColumn.TextAlign = HorizontalAlignment.Center; + imageColumn.CellVerticalAlignment = StringAlignment.Center; + imageColumn.Renderer = new FixedImageRenderer(); + + activeColumn.CellVerticalAlignment = StringAlignment.Center; + activeColumn.Renderer = new FixedImageRenderer(); + + if (previous != null) + { + r.HostnameAspectGetter = previous.HostnameAspectGetter; + r.NotesAspectGetter = previous.NotesAspectGetter; + r.UrlAspectGetter = previous.UrlAspectGetter; + l.RebuildColumns(); + } + } + + private void EnableViewToolStripButton(ToolStripButton cb) + { + browserToolStripButton.Checked = false; + bookmarksToolStripButton.Checked = false; + historyToolStripButton.Checked = false; + bonjourToolStripButton.Checked = false; + + cb.Checked = true; + } + + private void ConfigureHelpCommands() + { + //direct commands + Commands.Add(new ToolStripItem[] {acknowledgmentsToolStripMenuItem}, new[] {acknowledgmentsMainMenuItem}, + (sender, args) => ApplicationLauncherFactory.get().open(LocalFactory.get("Acknowledgments.rtf")), + () => true); + Commands.Add(new ToolStripItem[] {cyberduckHelpToolStripMenuItem}, new[] {helpMainMenuItem}, + (sender, args) => + BrowserLauncherFactory.get().open(PreferencesFactory.get().getProperty("website.help")), () => true); + Commands.Add(new ToolStripItem[] {cyberduckHelpToolStripMenuItem}, new[] {donateMainMenuItem}, + (sender, args) => + BrowserLauncherFactory.get().open(PreferencesFactory.get().getProperty("website.donate")), + () => true); + Commands.Add(new ToolStripItem[] {reportABugToolStripMenuItem}, new[] {bugMainMenuItem}, + (sender, args) => + BrowserLauncherFactory.get() + .open(String.Format(PreferencesFactory.get().getProperty("website.bug"), + PreferencesFactory.get().getProperty("application.version"))), () => true); + Commands.Add(new ToolStripItem[] {aboutCyberduckToolStripMenuItem}, new[] {aboutMainMenuItem}, + (sender, args) => new AboutBox().ShowDialog(), () => true); + Commands.Add(new ToolStripItem[] {licenseToolStripMenuItem}, new[] {licenseMainMenuItem}, + (sender, args) => ApplicationLauncherFactory.get().open(LocalFactory.get("License.txt")), () => true); + Commands.Add(new ToolStripItem[] {checkToolStripMenuItem}, new[] {updateMainMenuItem}, + (sender, args) => UpdateController.Instance.ForceCheckForUpdates(false), () => true); + } + + private void ConfigureGoCommands() + { + Commands.Add( + new ToolStripItem[] {refreshToolStripMenuItem, refreshContextToolStripMenuItem, refreshToolStripButton}, + new[] {refreshMainMenuItem, refreshBrowserContextMenuItem}, (sender, args) => RefreshBrowser(), + () => ValidateRefresh()); + Commands.Add(new ToolStripItem[] {gotoFolderToolStripMenuItem}, new[] {goToFolderMainMenuItem}, + (sender, args) => GotoFolder(), () => ValidateGotoFolder()); + Commands.Add(new ToolStripItem[] {backToolStripMenuItem}, new Control[] {historyBackButton}, + new[] {backMainMenuItem}, (sender, args) => HistoryBack(), () => ValidateHistoryBack()); + Commands.Add(new ToolStripItem[] {forwardToolStripMenuItem}, new Control[] {historyForwardButton}, + new[] {forwardMainMenuItem}, (sender, args) => HistoryForward(), () => ValidateHistoryForward()); + Commands.Add(new ToolStripItem[] {enclosingFolderToolStripMenuItem}, new Control[] {parentPathButton}, + new[] {enclosingFolderMainMenuItem}, (sender, args) => FolderUp(), () => ValidateFolderUp()); + Commands.Add(new ToolStripItem[] {insideToolStripMenuItem}, new[] {insideMainMenuItem}, + (sender, args) => FolderInside(), () => ValidateFolderInside()); + Commands.Add(new ToolStripItem[] {searchToolStripMenuItem}, new[] {searchMainMenuItem}, + (sender, args) => Search(), () => ValidateSearchField()); + Commands.Add(new ToolStripItem[] {sendCommandToolStripMenuItem}, new[] {sendCommandMainMenuItem}, + (sender, args) => SendCustomCommand(), () => ValidateSendCustomCommand()); + Commands.Add(new ToolStripItem[] {openInTerminalToolStripButton}, new[] {openInTerminalMainMenuItem}, + (sender, args) => OpenInTerminal(), () => ValidateOpenInTerminal()); + Commands.Add(new ToolStripItem[] {stopToolStripMenuItem}, new[] {stopMainMenuItem}, (sender, args) => Stop(), + () => ValidateStop()); + Commands.Add(new ToolStripItem[] {disconnectToolStripMenuItem, disconnectStripButton}, + new[] {disconnectMainMenuItem}, (sender, args) => Disconnect(), () => ValidateDisconnect()); + + vistaMenu1.SetImage(refreshMainMenuItem, IconCache.Instance.IconForName("reload", 16)); + vistaMenu1.SetImage(refreshBrowserContextMenuItem, IconCache.Instance.IconForName("reload", 16)); + refreshContextToolStripMenuItem.Image = IconCache.Instance.IconForName("reload", 16); + vistaMenu1.SetImage(stopMainMenuItem, IconCache.Instance.IconForName("stop", 16)); + vistaMenu1.SetImage(disconnectMainMenuItem, IconCache.Instance.IconForName("eject", 16)); + } + + private void ConfigureViewCommands() + { + Commands.Add(new ToolStripItem[] {toggleToolbarToolStripMenuItem}, new[] {toggleToolbarMainMenuItem}, + (sender, args) => ToggleToolbar(), () => true); + Commands.Add(new ToolStripItem[] {showHiddenFilesToolStripMenuItem}, new[] {showHiddenFilesMainMenuItem}, + (sender, args) => ShowHiddenFiles(), () => true); + Commands.Add(new ToolStripItem[] {textEncodingToolStripMenuItem}, new[] {textEncodingMainMenuItem}, null, + () => ValidateTextEncoding()); + Commands.Add(new ToolStripItem[] {toggleLogDrawerToolStripMenuItem, logToolStripButton}, + new[] {toggleLogDrawerMainMenuItem}, (sender, args) => ToggleLogDrawer(), () => true); + } + + private void ConfigureWindowCommands() + { + Commands.Add(new ToolStripItem[] {transfersToolStripMenuItem, transfersToolStripButton}, + new[] {transfersMainMenuItem}, (sender, args) => ShowTransfers(), () => true); + Commands.Add(new ToolStripItem[] {activitiyToolStripMenuItem,}, new[] {activityMainMenuItem}, + (sender, args) => ((Form) ActivityController.Instance.View).Show(), () => false); + Commands.Add(new ToolStripItem[] {minimizeToolStripMenuItem,}, new[] {minimizeMainMenuItem}, + (sender, args) => WindowState = FormWindowState.Minimized, () => true); + } + + private void ConfigureEditCommands() + { + Commands.Add(new ToolStripItem[] {cutToolStripMenuItem}, new[] {cutMainMenuItem}, (sender, args) => Cut(), + () => ValidateCut()); + Commands.Add(new ToolStripItem[] {copyToolStripMenuItem}, new[] {copyMainMenuItem}, (sender, args) => Copy(), + () => ValidateCopy()); + Commands.Add(new ToolStripItem[] {pasteToolStripMenuItem}, new[] {pasteMainMenuItem}, + (sender, args) => Paste(), () => ValidatePaste()); + Commands.Add(new ToolStripItem[] {selectAllToolStripMenuItem}, new[] {selectAllMainMenuItem}, + (o, eventArgs) => { }, () => true); // Tree component handles the selectAll command + Commands.Add(new ToolStripItem[] {preferencesToolStripMenuItem}, new[] {preferencesMainMenuItem}, + (o, eventArgs) => ShowPreferences(), () => true); + } + + private void ConfigureShortcut(ToolStripMenuItem toolstripItem, MenuItem menuItem, Keys keys) + { + ConfigureShortcut(toolstripItem, menuItem, keys, null); + } + + private void ConfigureShortcut(ToolStripMenuItem toolstripItem, MenuItem menuItem, Keys keys, + String shortCutText) + { + toolstripItem.ShortcutKeys = keys; + if (null != menuItem) + { + SetShortcutText(menuItem, toolstripItem, shortCutText); + } + } + + private void ConfigureShortcuts() + { + #region Shortcuts - Files + + ConfigureShortcut(newBrowserToolStripMenuItem, newBrowserMainMenuItem, Keys.Control | Keys.N); + ConfigureShortcut(openConnectionToolStripMenuItem, openConnectionMainMenuItem, Keys.Control | Keys.O); + ConfigureShortcut(newDownloadToolStripMenuItem, newDownloadMainMenuItem, Keys.Control | Keys.Alt | Keys.Down); + ConfigureShortcut(newFolderToolStripMenuItem, newFolderMainMenuItem, Keys.Control | Keys.Shift | Keys.N); + ConfigureShortcut(newFileToolStripMenuItem, newFileMainMenuItem, Keys.Control | Keys.Shift | Keys.F); + ConfigureShortcut(duplicateFileToolStripMenuItem, duplicateMainMenuItem, Keys.Control | Keys.D); + ConfigureShortcut(editWithToolStripMenuItem, null, Keys.Control | Keys.K); + ConfigureShortcut(infoToolStripMenuItem, infoMainMenuItem, Keys.Alt | Keys.Enter); + ConfigureShortcut(downloadToolStripMenuItem, downloadMainMenuItem, Keys.Alt | Keys.Down); + ConfigureShortcut(downloadAsToolStripMenuItem, downloadAsMainMenuItem, Keys.Alt | Keys.Shift | Keys.Down); + ConfigureShortcut(uploadToolStripMenuItem, uploadMainMenuItem, Keys.Alt | Keys.Up); + ConfigureShortcut(deleteToolStripMenuItem, deleteMainMenuItem, Keys.None, + ShortcutToText(Keys.Delete, String.Empty)); + ConfigureShortcut(exitToolStripMenuItem, exitMainMenuItem, Keys.Control | Keys.Q); + + #endregion + + #region Shortcuts - Edit + + ConfigureShortcut(cutToolStripMenuItem, cutMainMenuItem, Keys.Control | Keys.X); + ConfigureShortcut(copyToolStripMenuItem, copyMainMenuItem, Keys.Control | Keys.C); + //todo + //ConfigureShortcut(copyURLToolStripMenuItem, copyUrlMainMenuItem, Keys.Control | Keys.Shift | Keys.C); + ConfigureShortcut(pasteToolStripMenuItem, pasteMainMenuItem, Keys.Control | Keys.V); + ConfigureShortcut(selectAllToolStripMenuItem, selectAllMainMenuItem, Keys.None, + ShortcutToText(Keys.Control | Keys.A, String.Empty)); + ConfigureShortcut(preferencesToolStripMenuItem, preferencesMainMenuItem, Keys.Control | Keys.Oemcomma, + "Ctrl+,"); + + #endregion + + #region Shortcuts - View + + ConfigureShortcut(showHiddenFilesToolStripMenuItem, showHiddenFilesMainMenuItem, + Keys.Control | Keys.Shift | Keys.R); + ConfigureShortcut(toggleLogDrawerToolStripMenuItem, toggleLogDrawerMainMenuItem, Keys.Control | Keys.L); + + #endregion + + #region Shortcuts - Go + + ConfigureShortcut(refreshToolStripMenuItem, refreshMainMenuItem, Keys.Control | Keys.R); + ConfigureShortcut(gotoFolderToolStripMenuItem, goToFolderMainMenuItem, Keys.Control | Keys.G); + ConfigureShortcut(backToolStripMenuItem, backMainMenuItem, Keys.Control | Keys.Left); + ConfigureShortcut(forwardToolStripMenuItem, forwardMainMenuItem, Keys.Control | Keys.Right); + ConfigureShortcut(enclosingFolderToolStripMenuItem, enclosingFolderMainMenuItem, Keys.Control | Keys.Up); + ConfigureShortcut(insideToolStripMenuItem, insideMainMenuItem, Keys.Control | Keys.Down); + ConfigureShortcut(searchToolStripMenuItem, searchMainMenuItem, Keys.Control | Keys.F); + ConfigureShortcut(sendCommandToolStripMenuItem, sendCommandMainMenuItem, Keys.Control | Keys.Alt | Keys.C); + ConfigureShortcut(stopToolStripMenuItem, stopMainMenuItem, Keys.Control | Keys.OemPeriod, "Ctrl+."); + ConfigureShortcut(disconnectToolStripMenuItem, disconnectMainMenuItem, Keys.Control | Keys.Y); + + #endregion + + #region Shortcurs - Bookmark + + ConfigureShortcut(viewBookmarksToolStripMenuItem, toggleBookmarksMainMenuItem, Keys.Control | Keys.B); + ConfigureShortcut(newBookmarkToolStripMenuItem, newBookmarkMainMenuItem, Keys.Control | Keys.Shift | Keys.B); + ConfigureShortcut(editBookmarkToolStripMenuItem, editBookmarkMainMenuItem, Keys.Control | Keys.E); + + #endregion + + #region Shortcuts - Window + + ConfigureShortcut(minimizeToolStripMenuItem, minimizeMainMenuItem, Keys.Control | Keys.M); + ConfigureShortcut(activitiyToolStripMenuItem, activityMainMenuItem, Keys.Control | Keys.D0); + ConfigureShortcut(transfersToolStripMenuItem, transfersMainMenuItem, Keys.Control | Keys.T); + + #endregion + + #region Shortcuts - Browser Context + + //All doubly assigned shortcuts are falsely active in all child forms + EventHandler activated = delegate + { + ConfigureShortcut(refreshContextToolStripMenuItem, refreshBrowserContextMenuItem, + refreshToolStripMenuItem.ShortcutKeys); + ConfigureShortcut(infoContextToolStripMenuItem, infoBrowserContextMenuItem, + infoToolStripMenuItem.ShortcutKeys); + ConfigureShortcut(editContextToolStripMenuItem, editBrowserContextMenuItem, + editWithToolStripMenuItem.ShortcutKeys); + ConfigureShortcut(downloadContextToolStripMenuItem, downloadBrowserContextMenuItem, + downloadToolStripMenuItem.ShortcutKeys); + ConfigureShortcut(downloadAsContextToolStripMenuItem, downloadAsBrowserContextMenuItem, + downloadAsToolStripMenuItem.ShortcutKeys); + ConfigureShortcut(deleteContextToolStripMenuItem, deleteBrowserContextMenuItem, + deleteToolStripMenuItem.ShortcutKeys); + ConfigureShortcut(duplicateFileContextToolStripMenuItem, duplicateFileBrowserContextMenuItem, + duplicateFileToolStripMenuItem.ShortcutKeys); + ConfigureShortcut(uploadContextToolStripMenuItem, uploadBrowserContextMenuItem, + uploadToolStripMenuItem.ShortcutKeys); + ConfigureShortcut(newFolderContextToolStripMenuItem, newFolderBrowserContextMenuItem, + newFolderToolStripMenuItem.ShortcutKeys); + ConfigureShortcut(newFileContextToolStripMenuItem, newFileBrowserContextMenuItem, + newFileToolStripMenuItem.ShortcutKeys); + ConfigureShortcut(newBookmarkContextToolStripMenuItem, newBookmarkBrowserContextMenuItem, + newBookmarkToolStripMenuItem.ShortcutKeys); + }; + Activated += activated; + activated(this, EventArgs.Empty); + + Deactivate += delegate + { + foreach (ToolStripItem item in contextMenuStrip.Items) + { + if (item is ToolStripMenuItem) + { + (item as ToolStripMenuItem).ShortcutKeys = Keys.None; + } + } + }; + + #endregion + + #region Shortcuts - Bookmarks Context + + //All doubly assigned shortcuts are falsely active in all child forms + activated = delegate + { + ConfigureShortcut(connectBookmarkContextToolStripMenuItem, connectBookmarkContextMenuItem, Keys.None, + ShortcutToText(Keys.Enter, String.Empty)); + ConfigureShortcut(newBookmarkContextToolStripMenuItem1, newBookmarkContextMenuItem, + newBookmarkToolStripMenuItem.ShortcutKeys); + ConfigureShortcut(editBookmarkContextToolStripMenuItem1, editBookmarkContextMenuItem, + editBookmarkToolStripMenuItem.ShortcutKeys); + //todo deleteBookmarkContextToolStripMenuItem1.ShortcutKeys = + }; + Activated += activated; + activated(this, EventArgs.Empty); + + Deactivate += delegate + { + foreach (ToolStripItem item in bookmarkContextMenuStrip.Items) + { + if (item is ToolStripMenuItem) + { + (item as ToolStripMenuItem).ShortcutKeys = Keys.None; + } + } + }; + + #endregion + } + + private void OnArchiveMenuItemOnPopup(object sender, EventArgs eventArgs) + { + MenuItem mainItem = sender as MenuItem; + mainItem.MenuItems.Clear(); + foreach (string archive in GetArchives()) + { + MenuItem item = mainItem.MenuItems.Add(archive); + string archiveName = archive; + item.Click += delegate { CreateArchive(this, new CreateArchiveEventArgs(archiveName)); }; + } + } + + /// + /// Setup event and validation handler for the file menu items + /// + private void ConfigureFileCommands() + { + Commands.Add(new ToolStripItem[] {newBrowserToolStripMenuItem}, new[] {newBrowserMainMenuItem}, + (sender, args) => NewBrowser(this, new NewBrowserEventArgs(false)), () => true); + Commands.Add(new ToolStripItem[] {newBrowserContextToolStripMenuItem}, + new[] {newBrowserBrowserContextMenuItem}, + (sender, args) => NewBrowser(this, new NewBrowserEventArgs(true)), () => ValidateNewBrowser()); + Commands.Add(new ToolStripItem[] {openConnectionToolStripMenuItem, openConnectionToolStripButton}, + new[] {openConnectionMainMenuItem}, (sender, args) => OpenConnection(), () => ValidateOpenConnection()); + Commands.Add(new ToolStripItem[] {newDownloadToolStripMenuItem}, new[] {newDownloadMainMenuItem}, + (sender, args) => NewDownload(), () => ValidateNewDownload()); + Commands.Add( + new ToolStripItem[] + {newFolderToolStripMenuItem, newFolderContextToolStripMenuItem, newFolderToolStripButton}, + new[] {newFolderMainMenuItem, newFolderBrowserContextMenuItem}, (sender, args) => NewFolder(), + () => ValidateNewFolder()); + Commands.Add(new ToolStripItem[] {newFileToolStripMenuItem, newFileContextToolStripMenuItem}, + new[] {newFileMainMenuItem, newFileBrowserContextMenuItem}, (sender, args) => NewFile(), + () => ValidateNewFile()); + Commands.Add(new ToolStripItem[] {newSymlinkContextToolStripMenuItem}, + new[] {newSymbolicLinkMainMenuItem, newSymlinkBrowserContextMenuItem}, + (sender, args) => NewSymbolicLink(), () => ValidateNewSymbolicLink()); + Commands.Add(new ToolStripItem[] {renameFileToolStripMenuItem, renameContextToolStripMenuItem}, + new[] {renameMainMenuItem, renameBrowserContextMenuItem}, + (o, eventArgs) => browser.EditSubItem((OLVListItem) browser.FocusedItem, 0), () => ValidateRenameFile()); + Commands.Add(new ToolStripItem[] {duplicateFileToolStripMenuItem, duplicateFileContextToolStripMenuItem}, + new[] {duplicateMainMenuItem, duplicateFileBrowserContextMenuItem}, (sender, args) => DuplicateFile(), + () => ValidateDuplicateFile()); + Commands.Add( + new ToolStripItem[] + {openWebURLToolStripMenuItem, openURLContextToolStripMenuItem, openInBrowserToolStripButton}, + new MenuItem[] {}, (sender, args) => OpenUrl(), () => ValidateOpenWebUrl()); + Commands.Add( + new ToolStripItem[] {editWithToolStripMenuItem, editContextToolStripMenuItem, editToolStripSplitButton}, + new[] {editMainMenuItem, editBrowserContextMenuItem}, (sender, args) => + { + if (sender == editToolStripSplitButton && editToolStripSplitButton.DropDownButtonPressed) + { + return; + } + EditEvent(null); + }, () => ValidateEditWith()); + Commands.Add( + new ToolStripItem[] {infoToolStripMenuItem, infoToolStripButton, infoContextToolStripMenuItem}, + new[] {infoMainMenuItem, infoBrowserContextMenuItem}, (sender, args) => ShowInspector(), + () => ValidateShowInspector()); + Commands.Add(new ToolStripItem[] {downloadToolStripMenuItem, downloadContextToolStripMenuItem}, + new[] {downloadMainMenuItem, downloadBrowserContextMenuItem}, (sender, args) => Download(), + () => ValidateDownload()); + Commands.Add(new ToolStripItem[] {downloadAsToolStripMenuItem, downloadAsContextToolStripMenuItem}, + new[] {downloadAsMainMenuItem, downloadAsBrowserContextMenuItem}, (sender, args) => DownloadAs(), + () => ValidateDownloadAs()); + Commands.Add( + new ToolStripItem[] + {downloadToToolStripMenuItem, downloadToContextToolStripMenuItem, downloadToolStripButton}, + new[] {downloadToMainMenuItem, downloadToBrowserContextMenuItem}, (sender, args) => DownloadTo(), + () => ValidateDownloadTo()); + Commands.Add( + new ToolStripItem[] {uploadToolStripMenuItem, uploadContextToolStripMenuItem, uploadToolStripButton}, + new[] {uploadMainMenuItem, uploadBrowserContextMenuItem}, (sender, args) => Upload(), + () => ValidateUpload()); + Commands.Add(new ToolStripItem[] {synchronizeToolStripMenuItem, synchronizeContextToolStripMenuItem}, + new[] {synchronizeMainMenuItem, synchronizeBrowserContextMenuItem}, (sender, args) => Synchronize(), + () => ValidateSynchronize()); + Commands.Add( + new ToolStripItem[] {deleteToolStripMenuItem, deleteContextToolStripMenuItem, deleteToolStripButton}, + new[] {deleteMainMenuItem, deleteBrowserContextMenuItem}, (sender, args) => Delete(), + () => ValidateDelete()); + Commands.Add(new ToolStripItem[] {revertToolStripMenuItem, revertContxtStripMenuItem}, + new[] {revertMainMenuItem, revertBrowserContextMenuItem}, (sender, args) => RevertFile(), + () => ValidateRevertFile()); + Commands.Add(new ToolStripItem[] {createArchiveToolStripMenuItem, createArchiveContextToolStripMenuItem}, + new[] {createArchiveMainMenuItem, createArchiveBrowserContextMenuItem}, (sender, args) => { }, + () => ValidateCreateArchive()); + Commands.Add(new ToolStripItem[] {expandArchiveToolStripMenuItem, expandArchiveContextToolStripMenuItem}, + new[] {expandArchiveMainMenuItem, expandArchiveBrowserContextMnuItem}, (sender, args) => ExpandArchive(), + () => ValidateExpandArchive()); + Commands.Add(new ToolStripItem[] {exitToolStripMenuItem}, new[] {exitMainMenuItem}, (sender, args) => Exit(), + () => true); + + vistaMenu1.SetImage(openConnectionMainMenuItem, IconCache.Instance.IconForName("connect", 16)); + vistaMenu1.SetImage(infoMainMenuItem, IconCache.Instance.IconForName("info", 16)); + vistaMenu1.SetImage(infoBrowserContextMenuItem, IconCache.Instance.IconForName("info", 16)); + infoContextToolStripMenuItem.Image = IconCache.Instance.IconForName("info", 16); + vistaMenu1.SetImage(editMainMenuItem, IconCache.Instance.IconForName("pencil", 16)); + vistaMenu1.SetImage(editBrowserContextMenuItem, IconCache.Instance.IconForName("pencil", 16)); + editContextToolStripMenuItem.Image = IconCache.Instance.IconForName("pencil", 16); + vistaMenu1.SetImage(deleteMainMenuItem, IconCache.Instance.IconForName("delete", 16)); + vistaMenu1.SetImage(deleteBrowserContextMenuItem, IconCache.Instance.IconForName("delete", 16)); + deleteContextToolStripMenuItem.Image = IconCache.Instance.IconForName("delete", 16); + vistaMenu1.SetImage(newFolderMainMenuItem, IconCache.Instance.IconForName("newfolder", 16)); + vistaMenu1.SetImage(newFolderBrowserContextMenuItem, IconCache.Instance.IconForName("newfolder", 16)); + newFolderContextToolStripMenuItem.Image = IconCache.Instance.IconForName("newfolder", 16); + vistaMenu1.SetImage(downloadMainMenuItem, IconCache.Instance.IconForName("download", 16)); + vistaMenu1.SetImage(downloadBrowserContextMenuItem, IconCache.Instance.IconForName("download", 16)); + downloadContextToolStripMenuItem.Image = IconCache.Instance.IconForName("download", 16); + vistaMenu1.SetImage(uploadMainMenuItem, IconCache.Instance.IconForName("upload", 16)); + vistaMenu1.SetImage(uploadBrowserContextMenuItem, IconCache.Instance.IconForName("upload", 16)); + uploadContextToolStripMenuItem.Image = IconCache.Instance.IconForName("upload", 16); + vistaMenu1.SetImage(synchronizeMainMenuItem, IconCache.Instance.IconForName("sync", 16)); + vistaMenu1.SetImage(synchronizeBrowserContextMenuItem, IconCache.Instance.IconForName("sync", 16)); + synchronizeContextToolStripMenuItem.Image = IconCache.Instance.IconForName("sync", 16); + } + + private void SaveUiSettings() + { + if (browser.Objects != null) + { + Log.debug("Saving browser state"); + PersistenceHandler.Set("tree.state", browser.SaveState()); + } + PersistenceHandler.Set("splitter.distance", splitContainer.SplitterDistance); + } + + private void browser_DoubleClick(object sender, EventArgs e) + { + BrowserDoubleClicked(); + } + + private void toolStripQuickConnect_SelectionChangeCommited(object sender, EventArgs e) + { + QuickConnect(); + } + + private void toolStripQuickConnect_KeyDown(object sender, KeyEventArgs e) + { + // KeyUp doesnt' work in conjuction with AcceptButton and modal forms because of + // http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=93673 + // http://social.msdn.microsoft.com/Forums/de-AT/visualcsharpde/thread/0557663a-6fb5-498f-8919-06446169296d + if (e.KeyCode == Keys.Enter) + { + QuickConnect(); + } + } + + private void browser_SelectionChanged(object sender, EventArgs e) + { + BrowserSelectionChanged(); + } + + private void browser_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Delete) + { + Delete(); + } + if (e.KeyCode == Keys.F5 && ValidateRefresh()) + { + RefreshBrowser(); + } + if (e.KeyCode == Keys.Back && ValidateFolderUp()) + { + FolderUp(); + } + } + + private void transcriptBox_KeyDown(object sender, KeyEventArgs e) + { + // the log drawer should be closeable from inside the textbox + if (e.KeyData == toggleLogDrawerToolStripMenuItem.ShortcutKeys) + { + ToggleLogDrawer(); + } + // handle some basic shortcuts + if ((ModifierKeys & Keys.Control) == Keys.Control) + { + if (e.KeyCode == Keys.A) + { + transcriptBox.SelectAll(); + } + if (e.KeyCode == Keys.C) + { + transcriptBox.Copy(); + } + } + } + + private void bookmarkListView_DoubleClick(object sender, EventArgs e) + { + ConnectBookmark(this, new ConnectBookmarkArgs(bookmarkListView.SelectedObject as Host)); + } + + private void bookmarkListView_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + ConnectBookmark(this, new ConnectBookmarkArgs(bookmarkListView.SelectedObject as Host)); + } + if (e.KeyCode == Keys.Delete) + { + DeleteBookmark(); + } + } + + private void browserCheckBox_Click(object sender, EventArgs e) + { + ChangeBrowserView(sender, new ChangeBrowserViewArgs(BrowserView.File)); + } + + private void bookmarkCheckBox_Click(object sender, EventArgs e) + { + ChangeBrowserView(sender, new ChangeBrowserViewArgs(BrowserView.Bookmark)); + } + + private void historyCheckBox_Click(object sender, EventArgs e) + { + ChangeBrowserView(sender, new ChangeBrowserViewArgs(BrowserView.History)); + } + + private void bonjourCheckBox_Click(object sender, EventArgs e) + { + ChangeBrowserView(sender, new ChangeBrowserViewArgs(BrowserView.Bonjour)); + } + + private void pathComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + PathSelectionChanged(); + } + + private void toolbarContextMenu_Closing(object sender, ToolStripDropDownClosingEventArgs e) + { + e.Cancel = (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked && _lastMenuItemClicked != null); + } + + private void toolbarContextMenu_ItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + if (e.ClickedItem is ToolStripMenuItem) + { + _lastMenuItemClicked = (ToolStripMenuItem) e.ClickedItem; + } + } + + private void columnContextMenu_Opening(object sender, CancelEventArgs e) + { + //we need to remove the ItemClicked (prevent multi-registration) event as it + //will be registered again in MakeColumnSelectMenu + RemoveItemClickedEvent(columnContextMenu); + columnContextMenu.Items.Clear(); + browser.MakeColumnSelectMenu(columnContextMenu); + } + + private static void RemoveItemClickedEvent(ToolStrip b) + { + FieldInfo f1 = typeof (ToolStrip).GetField("EventItemClicked", BindingFlags.Static | BindingFlags.NonPublic); + object obj = f1.GetValue(b); + PropertyInfo pi = b.GetType().GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Instance); + EventHandlerList list = (EventHandlerList) pi.GetValue(b, null); + list.RemoveHandler(obj, list[obj]); + } + + private void textEncodingMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + EncodingChanged(sender, new EncodingChangedArgs(e.ClickedItem.Text)); + } + + /// + /// Bookmark menu handling with some optimization due to the expensive DropDownItems.Add method + /// + /// + /// + private void bookmarkToolStripMenuItem_DropDownOpening(object sender, EventArgs e) + { + IList bookmarks = GetBookmarks(); + + //all fix items + List fix = new List(); + foreach (ToolStripItem item in bookmarkToolStripMenuItem.DropDownItems) + { + if (!(item.Tag is Host)) + { + fix.Add(item); + } + } + + //clear the menu and add again the fix items + bookmarkToolStripMenuItem.DropDownItems.Clear(); + bookmarkToolStripMenuItem.DropDownItems.AddRange(fix.ToArray()); + + ImageList.ImageCollection icons = IconCache.Instance.GetProtocolIcons().Images; + + List items = new List(); + foreach (Host bookmark in bookmarks) + { + ToolStripItem item = new ToolStripMenuItem(BookmarkNameProvider.toString(bookmark), + icons[bookmark.getProtocol().getProvider()]); + item.Tag = bookmark; + item.Click += (o, args) => ConnectBookmark(this, new ConnectBookmarkArgs(item.Tag as Host)); + items.Add(item); + } + bookmarkToolStripMenuItem.DropDownItems.AddRange(items.ToArray()); + } + + private void historyMenuStrip_Opening(object sender, CancelEventArgs e) + { + IList history = GetHistory(); + + historyMenuStrip.Items.Clear(); + if (history.Count > 0) + { + ImageList.ImageCollection icons = IconCache.Instance.GetProtocolIcons().Images; + + List items = new List(); + foreach (Host h in history) + { + ToolStripItem item = new ToolStripMenuItem(BookmarkNameProvider.toString(h), + icons[h.getProtocol().getProvider()]); + item.Tag = h; + item.Click += (o, args) => ConnectBookmark(this, new ConnectBookmarkArgs(item.Tag as Host)); + items.Add(item); + } + + // separator and clear item + items.Add(new ToolStripSeparator()); + ToolStripItem clear = new ToolStripMenuItem(LocaleFactory.localizedString("Clear Menu")); + clear.Click += (o, args) => ClearHistory(); + items.Add(clear); + + // add all added items + historyMenuStrip.Items.AddRange(items.ToArray()); + } + else + { + ToolStripItem noitem = + new ToolStripMenuItem(LocaleFactory.localizedString("No recently connected servers available")); + noitem.Enabled = false; + historyMenuStrip.Items.Add(noitem); + } + } + + private void securityToolStripStatusLabel_Click(object sender, EventArgs e) + { + ShowCertificate(); + } + + private void searchTextBox_TextChanged(object sender, EventArgs e) + { + SearchFieldChanged(); + } + + private void customizeToolbarMenuItem_Popup(object sender, EventArgs e) + { + foreach (MenuItem item in customizeToolbarMainMenuItem.MenuItems) + { + if (null != item.Tag) + { + item.Checked = ((MenuItem) item.Tag).Checked; + } + } + } + + private void columnMenuItem_Popup(object sender, EventArgs e) + { + //we need to remove the ItemClicked (prevent multi-registration) event as it + //will be registered again in MakeColumnSelectMenu + RemoveItemClickedEvent(columnContextMenu); + columnContextMenu.Items.Clear(); + browser.MakeColumnSelectMenu(columnContextMenu); + columnMainMenuItem.MenuItems.Clear(); + foreach (ToolStripMenuItem item in columnContextMenu.Items) + { + ToolStripMenuItem item1 = item; + MenuItem nItem = new MenuItem(LocaleFactory.localizedString(item.Text), + delegate { item1.PerformClick(); }); + //forward click event + nItem.Checked = item.Checked; + columnMainMenuItem.MenuItems.Add(nItem); + } + } + + private void browser_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == (char) Keys.Enter) + { + if (PreferencesFactory.get().getBoolean("browser.enterkey.rename")) + { + if (ValidateRenameFile()) + { + browser.EditSubItem((OLVListItem) browser.FocusedItem, 0); + } + } + else + { + BrowserDoubleClicked(); + } + e.Handled = true; + } + } + + private void browser_CellEditFinishing(object sender, CellEditEventArgs e) + { + if (!e.Cancel) + { + e.Cancel = RenameFile((Path) e.RowObject, (String) e.NewValue); + } + } + + private void browser_BeforeLabelEdit(object sender, LabelEditEventArgs e) + { + //we want to use the ObjectListView's cell editor + e.CancelEdit = true; + browser.StartCellEdit(browser.GetItem(e.Item), 0); + } + + private class BookmarkMenuCollectionListener : CollectionListener + { + private readonly BrowserForm _form; + private readonly ImageList.ImageCollection _icons = IconCache.Instance.GetProtocolIcons().Images; + private int _bookmarkStartPosition; + + public BookmarkMenuCollectionListener(BrowserForm f) + { + _form = f; + if (BookmarkCollection.defaultCollection().size() > 0) + { + BuildMenuItems(); + } + } + + public void collectionLoaded() + { + _form.Invoke(new AsyncController.AsyncDelegate(BuildMenuItems)); + } + + public void collectionItemAdded(object obj) + { + _form.Invoke(new AsyncController.AsyncDelegate(delegate + { + int pos = BookmarkCollection.defaultCollection().indexOf(obj); + Host h = (Host) obj; + MenuItem i = new MenuItem(BookmarkNameProvider.toString(h)); + i.Tag = h; + i.Click += (o, args) => _form.ConnectBookmark(this, new ConnectBookmarkArgs(h)); + _form.menuItem64.MenuItems.Add(_bookmarkStartPosition + pos, i); + _form.vistaMenu1.SetImage(i, _icons[h.getProtocol().getProvider()]); + })); + } + + public void collectionItemRemoved(object obj) + { + _form.Invoke(new AsyncController.AsyncDelegate(delegate + { + int pos = BookmarkCollection.defaultCollection().indexOf(obj); + Host h = (Host) obj; + MenuItem i = new MenuItem(BookmarkNameProvider.toString(h)); + i.Tag = h; + i.Click += (o, args) => _form.ConnectBookmark(this, new ConnectBookmarkArgs(h)); + _form.menuItem64.MenuItems.Add(_bookmarkStartPosition + pos, i); + _form.vistaMenu1.SetImage(i, _icons[h.getProtocol().getProvider()]); + + + foreach (MenuItem item in _form.menuItem64.MenuItems) + { + if (obj.Equals(item.Tag)) + { + _form.menuItem64.MenuItems.Remove(item); + break; + } + } + })); + } + + public void collectionItemChanged(object obj) + { + _form.Invoke(new AsyncController.AsyncDelegate(delegate + { + foreach (MenuItem item in _form.menuItem64.MenuItems) + { + if (obj.Equals(item.Tag)) + { + Host h = (Host) obj; + item.Text = BookmarkNameProvider.toString(h); + _form.vistaMenu1.SetImage(item, _icons[h.getProtocol().getProvider()]); + break; + } + } + })); + } + + public void BuildMenuItems() + { + List fix = new List(); + foreach (MenuItem item in _form.menuItem64.MenuItems) + { + if (!(item.Tag is Host)) + { + fix.Add(item); + } + } + _bookmarkStartPosition = fix.Count; + List items = new List(); + foreach (Host bookmark in BookmarkCollection.defaultCollection()) + { + MenuItem item = new MenuItem(BookmarkNameProvider.toString(bookmark)); + item.Tag = bookmark; + item.Click += (o, args) => _form.ConnectBookmark(this, new ConnectBookmarkArgs(item.Tag as Host)); + items.Add(item); + } + + using (MainMenu m1 = _form.mainMenu.CloneMenu()) + { + _form.SuspendLayout(); + _form.Menu = m1; + //clear the menu and add again the fix items + _form.menuItem64.MenuItems.Clear(); + _form.menuItem64.MenuItems.AddRange(fix.ToArray()); + _form.menuItem64.MenuItems.AddRange(items.ToArray()); + foreach (MenuItem item in items) + { + if (null != item.Tag) + _form.vistaMenu1.SetImage(item, _icons[((Host) item.Tag).getProtocol().getProvider()]); + } + _form.Menu = _form.mainMenu; + _form.ResumeLayout(); + } + } + } + + private class BrowserDragSource : SimpleDragSource + { + private readonly BrowserForm _form; + + public BrowserDragSource(BrowserForm _form) + { + this._form = _form; + } + + public override DragDropEffects GetAllowedEffects(object data) + { + return DragDropEffects.Copy | DragDropEffects.Move; + } + + public override object StartDrag(ObjectListView olv, MouseButtons button, OLVListItem item) + { + DataObject t = _form.BrowserDrag(olv); + OLVDataObject data = new OLVDataObject(olv); + data.SetData(DataFormats.FileDrop, new[] {t.GetFileDropList()[0]}); + return data; + } + + public override void EndDrag(object dragObject, DragDropEffects effect) + { + base.EndDrag(dragObject, effect); + _form.BrowserEndDrag(dragObject as DataObject); + } + } + + private class ExpandingBrowserDropSink : SimpleDropSink + { + private readonly BrowserForm _form; + private readonly Timer _timer = new Timer(); + private object _currentDropTarget; + + public ExpandingBrowserDropSink(BrowserForm form) + { + _form = form; + _timer.Tick += delegate + { + if (null != _currentDropTarget) + { + ((TreeListView) ListView).Expand(_currentDropTarget); + } + _timer.Stop(); + }; + CanDropOnBackground = true; + FeedbackColor = Color.LightBlue; + AcceptExternal = true; + } + + /// + /// Gets or sets whether this sink allows model objects to be dragged from other lists + /// + public bool AcceptExternal { get; set; } + + /// + /// Draw the feedback that shows that the background is the target + /// + /// + /// + protected override void DrawFeedbackBackgroundTarget(Graphics g, Rectangle bounds) + { + float penWidth = 4.0f; + Rectangle r = bounds; + r.Inflate((int) -penWidth/2, (int) -penWidth/2); + using (Pen p = new Pen(Color.FromArgb(128, FeedbackColor), penWidth)) + { + using (GraphicsPath path = GetRoundedRect(r, 30.0f)) + { + g.DrawPath(p, path); + } + } + } + + protected override void OnCanDrop(OlvDropEventArgs args) + { + base.OnCanDrop(args); + _form.BrowserCanDrop(args); + } + + public override void Enter(DragEventArgs e) + { + base.Enter(e); + if (!(e.Data is OLVDataObject)) + { + try + { + DropTargetHelper.DragEnter(_form.browser, e.Data, new Point(e.X, e.Y), e.Effect); + } + catch + { + //silenty catch exceptions that are thrown with some special object (e.g. WinRAR) + } + } + } + + public override void Leave() + { + base.Leave(); + DropTargetHelper.DragLeave(_form.browser); + } + + // We do not currently support drags between browsers + + protected override void OnModelCanDrop(ModelDropEventArgs args) + { + base.OnModelCanDrop(args); + + if (args.Handled) + return; + + args.Effect = CalculateStandardDropActionFromKeys(); + + // Don't allow drops from other list, if that's what's configured + if (!AcceptExternal) + { + args.Effect = DragDropEffects.None; + args.DropTargetLocation = DropTargetLocation.None; + } + else + { + _form.BrowserModelCanDrop(args); + } + args.Handled = true; + } + + protected override void OnDropped(OlvDropEventArgs args) + { + DropTargetHelper.Drop(args.DataObject as DataObject, + new Point(args.MouseLocation.X, args.MouseLocation.Y), DragDropEffects.None); + _form.BrowserDropped(args); + } + + protected override void OnModelDropped(ModelDropEventArgs args) + { + base.OnModelDropped(args); + if (!args.Handled) + { + _form.BrowserModelDropped(args); + } + args.Handled = true; + } + + public override void Over(DragEventArgs e) + { + base.Over(e); + + if (!(e.Data is OLVDataObject)) + { + DropTargetHelper.DragOver(new Point(e.X, e.Y), e.Effect); + } + + bool autoExpand = PreferencesFactory.get().getBoolean("browser.view.autoexpand"); + bool useDelay = PreferencesFactory.get().getBoolean("browser.view.autoexpand.useDelay"); + int delay = Convert.ToInt32(PreferencesFactory.get().getFloat("browser.view.autoexpand.delay")); + + if (autoExpand) + { + if (null != DropTargetItem) + { + if (_currentDropTarget != DropTargetItem.RowObject) + { + _timer.Stop(); + _currentDropTarget = DropTargetItem.RowObject; + _timer.Interval = useDelay ? delay*1000 : 0; + _timer.Start(); + } + } + else + { + _timer.Stop(); + _currentDropTarget = null; + } + } + } + } + + /// + /// Wraps a PathFilter class for the use with the ObjectListView component + /// + private class FilterWrapper : IModelFilter + { + private readonly Filter _del; + + public FilterWrapper(Filter del) + { + _del = del; + } + + public bool Filter(object modelObject) + { + return _del.accept((modelObject)); + } + } + + private class HostDragSource : SimpleDragSource + { + private readonly BrowserForm _form; + + public HostDragSource(BrowserForm _form) + { + this._form = _form; + } + + public override DragDropEffects GetAllowedEffects(object data) + { + return DragDropEffects.Copy | DragDropEffects.Move; + } + + public override object StartDrag(ObjectListView olv, MouseButtons button, OLVListItem item) + { + DataObject t = _form.HostDrag(olv); + OLVDataObject data = new OLVDataObject(olv); + data.SetData(DataFormats.FileDrop, new[] {t.GetFileDropList()[0]}); + return data; + } + + public override void EndDrag(object dragObject, DragDropEffects effect) + { + base.EndDrag(dragObject, effect); + _form.HostEndDrag(dragObject as DataObject); + } + } + + private class HostDropSink : SimpleDropSink + { + private readonly BrowserForm _form; + + public HostDropSink(BrowserForm form) + { + _form = form; + CanDropOnBackground = true; + CanDropBetween = true; + FeedbackColor = Color.LightBlue; + AcceptExternal = true; + } + + /// + /// Gets or sets whether this sink allows model objects to be dragged from other lists + /// + public bool AcceptExternal { get; set; } + + /// + /// Draw the feedback that shows that the background is the target + /// + /// + /// + protected override void DrawFeedbackBackgroundTarget(Graphics g, Rectangle bounds) + { + float penWidth = 4.0f; + Rectangle r = bounds; + r.Inflate((int) -penWidth/2, (int) -penWidth/2); + using (Pen p = new Pen(Color.FromArgb(128, FeedbackColor), penWidth)) + { + using (GraphicsPath path = GetRoundedRect(r, 30.0f)) + { + g.DrawPath(p, path); + } + } + } + + protected override void OnCanDrop(OlvDropEventArgs args) + { + base.OnCanDrop(args); + _form.HostCanDrop(args); + } + + public override void Enter(DragEventArgs e) + { + base.Enter(e); + + if (!(e.Data is OLVDataObject)) + { + DropTargetHelper.DragEnter(_form.browser, e.Data, new Point(e.X, e.Y), e.Effect); + } + } + + public override void Leave() + { + base.Leave(); + DropTargetHelper.DragLeave(_form); + } + + protected override void OnModelCanDrop(ModelDropEventArgs args) + { + base.OnModelCanDrop(args); + + args.Effect = DragDropEffects.None; + + //args.Handled = true; // OnCanDrop is not being called anymore + + if (args.Handled) + return; + + args.Effect = CalculateStandardDropActionFromKeys(); + + // Don't allow drops from other list, if that's what's configured + if (!AcceptExternal) + { + args.Effect = DragDropEffects.None; + args.DropTargetLocation = DropTargetLocation.None; + } + else + { + _form.HostModelCanDrop(args); + } + args.Handled = true; + } + + protected override void OnDropped(OlvDropEventArgs args) + { + DropTargetHelper.Drop(args.DataObject as DataObject, + new Point(args.MouseLocation.X, args.MouseLocation.Y), DragDropEffects.None); + _form.HostDropped(args); + } + + protected override void OnModelDropped(ModelDropEventArgs args) + { + base.OnModelDropped(args); + if (!args.Handled) + { + _form.HostModelDropped(args); + } + args.Handled = true; + } + + public override void Over(DragEventArgs e) + { + base.Over(e); + if (!(e.Data is OLVDataObject)) + { + DropTargetHelper.DragOver(new Point(e.X, e.Y), e.Effect); + } + } + } + + private class MenuCollectionListener : CollectionListener + { + private readonly AbstractHostCollection _collection; + private readonly String _empty; + private readonly BrowserForm _form; + private readonly ImageList.ImageCollection _icons = IconCache.Instance.GetProtocolIcons().Images; + private readonly MenuItem _menu; + + public MenuCollectionListener(BrowserForm f, MenuItem menu, AbstractHostCollection collection, String empty) + { + _form = f; + _menu = menu; + _collection = collection; + _empty = empty; + if (_collection.size() > 0) + { + BuildMenuItems(); + } + } + + public void collectionLoaded() + { + _form.Invoke(new AsyncController.AsyncDelegate(BuildMenuItems)); + } + + public void collectionItemAdded(object obj) + { + _form.Invoke(new AsyncController.AsyncDelegate(delegate + { + if (_collection.size() == 1) + { + BuildMenuItems(); + } + else + { + int pos = _collection.indexOf(obj); + Host h = (Host) obj; + MenuItem i = new MenuItem(BookmarkNameProvider.toString(h)); + i.Tag = h; + i.Click += (o, args) => _form.ConnectBookmark(this, new ConnectBookmarkArgs(h)); + _menu.MenuItems.Add(pos, i); + _form.vistaMenu1.SetImage(i, _icons[h.getProtocol().getProvider()]); + } + })); + } + + public void collectionItemRemoved(object obj) + { + _form.Invoke(new AsyncController.AsyncDelegate(delegate + { + foreach (MenuItem item in _menu.MenuItems) + { + if (obj.Equals(item.Tag)) + { + _menu.MenuItems.Remove(item); + break; + } + } + if (_collection.size() == 0) + { + BuildMenuItems(); + } + })); + } + + public void collectionItemChanged(object obj) + { + _form.Invoke(new AsyncController.AsyncDelegate(delegate + { + foreach (MenuItem item in _menu.MenuItems) + { + if (obj.Equals(item.Tag)) + { + Host h = (Host) obj; + item.Text = BookmarkNameProvider.toString(h); + _form.vistaMenu1.SetImage(item, _icons[h.getProtocol().getIdentifier()]); + break; + } + } + })); + } + + public void BuildMenuItems() + { + _menu.MenuItems.Clear(); + if (_collection.size() > 0) + { + List items = new List(); + foreach (Host bookmark in _collection) + { + MenuItem item = new MenuItem(BookmarkNameProvider.toString(bookmark)); + item.Tag = bookmark; + item.Click += + (o, args) => _form.ConnectBookmark(this, new ConnectBookmarkArgs(item.Tag as Host)); + items.Add(item); + } + //TODO + // separator and clear item +// items.Add(new MenuItem("-")); +// MenuItem clear = new MenuItem(LocaleFactory.localizedString("Clear Menu")); +// clear.Click += (o, args) => _form.ClearHistory(); +// items.Add(clear); + + _menu.MenuItems.AddRange(items.ToArray()); + foreach (MenuItem item in items) + { + if (null != item.Tag) + _form.vistaMenu1.SetImage(item, _icons[((Host) item.Tag).getProtocol().getProvider()]); + } + } + else + { + MenuItem noitem = new MenuItem(_empty); + noitem.Enabled = false; + _menu.MenuItems.Add(noitem); + } + } + } + + private class NoGapRenderer : ToolStripProfessionalRenderer + { + public NoGapRenderer() + { + RoundedEdges = false; + } + + protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) + { + Rectangle rect = e.AffectedBounds; + using (SolidBrush brush = new SolidBrush(Color.FromKnownColor(KnownColor.Control))) + { + e.Graphics.FillRectangle(brush, rect); + } + } + + protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) + { + //no highlighting + return; + } + + protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) + { + base.OnRenderToolStripBorder(e); + using (Pen pen = new Pen(Color.Gray)) + { + Rectangle bounds = new Rectangle(Point.Empty, e.ToolStrip.Size); + e.Graphics.DrawLine(pen, bounds.Left, bounds.Top, bounds.Right, bounds.Top); + } + } + + protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e) + { + Image img; + if (!e.Item.Enabled) + { + if (null == e.Image.Tag) + { + e.Image.Tag = CreateDisabledImage(e.Image); + } + img = (Image) e.Image.Tag; + } + else + { + img = e.Item.Pressed && e.Item.Selected ? e.Item.Tag as Image : e.Image; + } + Rectangle rect = new Rectangle(new Point(e.ImageRectangle.Left - 2, e.ImageRectangle.Top - 2), + new Size(img.Width, img.Height)); + e.Graphics.DrawImage(img, rect); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/BrowserForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BrowserForm.resx similarity index 98% rename from source/ch/cyberduck/ui/winforms/BrowserForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/BrowserForm.resx index 9c3d65628e..5567472e76 100644 --- a/source/ch/cyberduck/ui/winforms/BrowserForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/BrowserForm.resx @@ -1,192 +1,192 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 448, 95 - - - 17, 17 - - - 126, 17 - - - 1070, 17 - - - 1107, 56 - - - 17, 95 - - - 146, 56 - - - 962, 56 - - - 297, 95 - - - 929, 17 - - - 241, 17 - - - 439, 17 - - - 346, 17 - - - 622, 56 - - - 746, 95 - - - 756, 56 - - - 17, 56 - - - 326, 56 - - - 489, 56 - - - 183, 95 - - - 163 - - - 588, 17 - - - 760, 17 - - - 565, 95 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 448, 95 + + + 17, 17 + + + 126, 17 + + + 1070, 17 + + + 1107, 56 + + + 17, 95 + + + 146, 56 + + + 962, 56 + + + 297, 95 + + + 929, 17 + + + 241, 17 + + + 439, 17 + + + 346, 17 + + + 622, 56 + + + 746, 95 + + + 756, 56 + + + 17, 56 + + + 326, 56 + + + 489, 56 + + + 183, 95 + + + 163 + + + 588, 17 + + + 760, 17 + + + 565, 95 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/CommandForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CommandForm.Designer.cs similarity index 98% rename from source/ch/cyberduck/ui/winforms/CommandForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/CommandForm.Designer.cs index f9e82e3efc..05111671f3 100644 --- a/source/ch/cyberduck/ui/winforms/CommandForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CommandForm.Designer.cs @@ -1,170 +1,170 @@ -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class CommandForm - { - /// - /// 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.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.transcriptBox = new System.Windows.Forms.RichTextBox(); - this.pictureBox = new System.Windows.Forms.PictureBox(); - this.label1 = new System.Windows.Forms.Label(); - this.commandBox = new System.Windows.Forms.TextBox(); - this.sendButton = new System.Windows.Forms.Button(); - this.animation = new System.Windows.Forms.PictureBox(); - this.closeButton = new System.Windows.Forms.Button(); - this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.animation)).BeginInit(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 3; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 45F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.transcriptBox, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.pictureBox, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.label1, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.commandBox, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.sendButton, 2, 1); - this.tableLayoutPanel1.Controls.Add(this.animation, 1, 3); - this.tableLayoutPanel1.Controls.Add(this.closeButton, 2, 3); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10, 5, 10, 10); - this.tableLayoutPanel1.RowCount = 4; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(825, 393); - this.tableLayoutPanel1.TabIndex = 0; - // - // transcriptBox - // - this.tableLayoutPanel1.SetColumnSpan(this.transcriptBox, 2); - this.transcriptBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.transcriptBox.Location = new System.Drawing.Point(58, 68); - this.transcriptBox.Name = "transcriptBox"; - this.transcriptBox.ReadOnly = true; - this.transcriptBox.Size = new System.Drawing.Size(754, 282); - this.transcriptBox.TabIndex = 5; - this.transcriptBox.Text = ""; - // - // pictureBox - // - this.pictureBox.Dock = System.Windows.Forms.DockStyle.Bottom; - this.pictureBox.Location = new System.Drawing.Point(13, 8); - this.pictureBox.Name = "pictureBox"; - this.tableLayoutPanel1.SetRowSpan(this.pictureBox, 2); - this.pictureBox.Size = new System.Drawing.Size(39, 54); - this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; - this.pictureBox.TabIndex = 1; - this.pictureBox.TabStop = false; - // - // label1 - // - this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(58, 20); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(225, 15); - this.label1.TabIndex = 2; - this.label1.Text = "Enter the command to send to the server:"; - // - // commandBox - // - this.commandBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.commandBox.Location = new System.Drawing.Point(58, 38); - this.commandBox.Name = "commandBox"; - this.commandBox.Size = new System.Drawing.Size(673, 23); - this.commandBox.TabIndex = 3; - // - // sendButton - // - this.sendButton.Location = new System.Drawing.Point(737, 38); - this.sendButton.Name = "sendButton"; - this.sendButton.Size = new System.Drawing.Size(75, 23); - this.sendButton.TabIndex = 4; - this.sendButton.Text = "Send"; - this.sendButton.UseVisualStyleBackColor = true; - this.sendButton.Click += new System.EventHandler(this.button1_Click); - // - // animation - // - this.animation.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; - this.animation.Location = new System.Drawing.Point(58, 356); - this.animation.Name = "animation"; - this.animation.Size = new System.Drawing.Size(24, 20); - this.animation.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.animation.TabIndex = 46; - this.animation.TabStop = false; - this.animation.Visible = false; - // - // closeButton - // - this.closeButton.DialogResult = System.Windows.Forms.DialogResult.OK; - this.closeButton.Location = new System.Drawing.Point(737, 356); - this.closeButton.Name = "closeButton"; - this.closeButton.Size = new System.Drawing.Size(75, 23); - this.closeButton.TabIndex = 47; - this.closeButton.Text = "Close"; - this.closeButton.UseVisualStyleBackColor = true; - // - // CommandForm - // - this.AcceptButton = this.sendButton; - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.closeButton; - this.ClientSize = new System.Drawing.Size(825, 393); - this.Controls.Add(this.tableLayoutPanel1); - this.Name = "CommandForm"; - this.Text = "Send Command"; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.animation)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - protected System.Windows.Forms.PictureBox pictureBox; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox commandBox; - private System.Windows.Forms.Button sendButton; - private System.Windows.Forms.RichTextBox transcriptBox; - private System.Windows.Forms.PictureBox animation; - private System.Windows.Forms.Button closeButton; - } +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class CommandForm + { + /// + /// 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.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.transcriptBox = new System.Windows.Forms.RichTextBox(); + this.pictureBox = new System.Windows.Forms.PictureBox(); + this.label1 = new System.Windows.Forms.Label(); + this.commandBox = new System.Windows.Forms.TextBox(); + this.sendButton = new System.Windows.Forms.Button(); + this.animation = new System.Windows.Forms.PictureBox(); + this.closeButton = new System.Windows.Forms.Button(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.animation)).BeginInit(); + this.SuspendLayout(); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 3; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 45F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.transcriptBox, 1, 2); + this.tableLayoutPanel1.Controls.Add(this.pictureBox, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.label1, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.commandBox, 1, 1); + this.tableLayoutPanel1.Controls.Add(this.sendButton, 2, 1); + this.tableLayoutPanel1.Controls.Add(this.animation, 1, 3); + this.tableLayoutPanel1.Controls.Add(this.closeButton, 2, 3); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10, 5, 10, 10); + this.tableLayoutPanel1.RowCount = 4; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(825, 393); + this.tableLayoutPanel1.TabIndex = 0; + // + // transcriptBox + // + this.tableLayoutPanel1.SetColumnSpan(this.transcriptBox, 2); + this.transcriptBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.transcriptBox.Location = new System.Drawing.Point(58, 68); + this.transcriptBox.Name = "transcriptBox"; + this.transcriptBox.ReadOnly = true; + this.transcriptBox.Size = new System.Drawing.Size(754, 282); + this.transcriptBox.TabIndex = 5; + this.transcriptBox.Text = ""; + // + // pictureBox + // + this.pictureBox.Dock = System.Windows.Forms.DockStyle.Bottom; + this.pictureBox.Location = new System.Drawing.Point(13, 8); + this.pictureBox.Name = "pictureBox"; + this.tableLayoutPanel1.SetRowSpan(this.pictureBox, 2); + this.pictureBox.Size = new System.Drawing.Size(39, 54); + this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.pictureBox.TabIndex = 1; + this.pictureBox.TabStop = false; + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(58, 20); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(225, 15); + this.label1.TabIndex = 2; + this.label1.Text = "Enter the command to send to the server:"; + // + // commandBox + // + this.commandBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.commandBox.Location = new System.Drawing.Point(58, 38); + this.commandBox.Name = "commandBox"; + this.commandBox.Size = new System.Drawing.Size(673, 23); + this.commandBox.TabIndex = 3; + // + // sendButton + // + this.sendButton.Location = new System.Drawing.Point(737, 38); + this.sendButton.Name = "sendButton"; + this.sendButton.Size = new System.Drawing.Size(75, 23); + this.sendButton.TabIndex = 4; + this.sendButton.Text = "Send"; + this.sendButton.UseVisualStyleBackColor = true; + this.sendButton.Click += new System.EventHandler(this.button1_Click); + // + // animation + // + this.animation.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; + this.animation.Location = new System.Drawing.Point(58, 356); + this.animation.Name = "animation"; + this.animation.Size = new System.Drawing.Size(24, 20); + this.animation.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.animation.TabIndex = 46; + this.animation.TabStop = false; + this.animation.Visible = false; + // + // closeButton + // + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.closeButton.Location = new System.Drawing.Point(737, 356); + this.closeButton.Name = "closeButton"; + this.closeButton.Size = new System.Drawing.Size(75, 23); + this.closeButton.TabIndex = 47; + this.closeButton.Text = "Close"; + this.closeButton.UseVisualStyleBackColor = true; + // + // CommandForm + // + this.AcceptButton = this.sendButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(825, 393); + this.Controls.Add(this.tableLayoutPanel1); + this.Name = "CommandForm"; + this.Text = "Send Command"; + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.animation)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + protected System.Windows.Forms.PictureBox pictureBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox commandBox; + private System.Windows.Forms.Button sendButton; + private System.Windows.Forms.RichTextBox transcriptBox; + private System.Windows.Forms.PictureBox animation; + private System.Windows.Forms.Button closeButton; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/CommandForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CommandForm.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/CommandForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/CommandForm.cs index 824adc3b8a..f1ab1c1dd0 100644 --- a/source/ch/cyberduck/ui/winforms/CommandForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CommandForm.cs @@ -1,75 +1,75 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Drawing; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Ui.Controller; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class CommandForm : BaseForm, ICommandView - { - private static readonly Font FixedFont = new Font("Courier New", 8, FontStyle.Regular); - - public CommandForm() - { - InitializeComponent(); - - pictureBox.Image = - IconCache.Instance.ExtractIconFromExecutable( - Environment.ExpandEnvironmentVariables(@"%windir%\system32\cmd.exe"), IconCache.IconSize.Large); - } - - public override string[] BundleNames - { - get { return new[] {"Command", "Localizable"}; } - } - - public string Command - { - get { return commandBox.Text; } - } - - public void AddTranscriptEntry(string message) - { - transcriptBox.SelectionFont = FixedFont; - transcriptBox.SelectionColor = Color.Black; - transcriptBox.SelectedText = message + Environment.NewLine; - transcriptBox.Select(transcriptBox.TextLength, transcriptBox.TextLength); - NativeMethods.SendMessage(transcriptBox.Handle, NativeConstants.WM_VSCROLL, NativeConstants.SB_BOTTOM, 0); - } - - public void StartActivityAnimation() - { - animation.Visible = true; - } - - public void StopActivityAnimation() - { - animation.Visible = false; - } - - public event VoidHandler SendEvent = delegate { }; - - private void button1_Click(object sender, EventArgs e) - { - SendEvent(); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Drawing; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Ui.Controller; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class CommandForm : BaseForm, ICommandView + { + private static readonly Font FixedFont = new Font("Courier New", 8, FontStyle.Regular); + + public CommandForm() + { + InitializeComponent(); + + pictureBox.Image = + IconCache.Instance.ExtractIconFromExecutable( + Environment.ExpandEnvironmentVariables(@"%windir%\system32\cmd.exe"), IconCache.IconSize.Large); + } + + public override string[] BundleNames + { + get { return new[] {"Command", "Localizable"}; } + } + + public string Command + { + get { return commandBox.Text; } + } + + public void AddTranscriptEntry(string message) + { + transcriptBox.SelectionFont = FixedFont; + transcriptBox.SelectionColor = Color.Black; + transcriptBox.SelectedText = message + Environment.NewLine; + transcriptBox.Select(transcriptBox.TextLength, transcriptBox.TextLength); + NativeMethods.SendMessage(transcriptBox.Handle, NativeConstants.WM_VSCROLL, NativeConstants.SB_BOTTOM, 0); + } + + public void StartActivityAnimation() + { + animation.Visible = true; + } + + public void StopActivityAnimation() + { + animation.Visible = false; + } + + public event VoidHandler SendEvent = delegate { }; + + private void button1_Click(object sender, EventArgs e) + { + SendEvent(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/CommandForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CommandForm.resx similarity index 97% rename from source/ch/cyberduck/ui/winforms/CommandForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/CommandForm.resx index 29dcb1b3a3..1af7de150c 100644 --- a/source/ch/cyberduck/ui/winforms/CommandForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CommandForm.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/ConnectionForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ConnectionForm.Designer.cs similarity index 98% rename from source/ch/cyberduck/ui/winforms/ConnectionForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/ConnectionForm.Designer.cs index d8a010d1b6..6e6d631b6e 100644 --- a/source/ch/cyberduck/ui/winforms/ConnectionForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ConnectionForm.Designer.cs @@ -1,549 +1,549 @@ -using System; -using Ch.Cyberduck.Ui.Controller; -using Ch.Cyberduck.Ui.Winforms.Controls; - -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class ConnectionForm - { - /// - /// 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(ConnectionForm)); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.labelPassword = new System.Windows.Forms.Label(); - this.protocol = new Ch.Cyberduck.Ui.Winforms.Controls.ImageComboBox(); - this.alertIcon = new System.Windows.Forms.PictureBox(); - this.labelURL = new System.Windows.Forms.Label(); - this.linkLabelURL = new System.Windows.Forms.LinkLabel(); - this.textBoxServer = new System.Windows.Forms.TextBox(); - this.labelServer = new System.Windows.Forms.Label(); - this.labelPort = new System.Windows.Forms.Label(); - this.labelUsername = new System.Windows.Forms.Label(); - this.textBoxUsername = new System.Windows.Forms.TextBox(); - this.textBoxPassword = new System.Windows.Forms.TextBox(); - this.anonymousCheckBox = new System.Windows.Forms.CheckBox(); - this.savePasswordCheckBox = new System.Windows.Forms.CheckBox(); - this.numericUpDownPort = new System.Windows.Forms.NumericUpDown(); - this.separatorLine = new System.Windows.Forms.Label(); - this.toggleOptionsLabel = new System.Windows.Forms.Label(); - this.imageList = new System.Windows.Forms.ImageList(this.components); - this.cancelButton = new System.Windows.Forms.Button(); - this.connectButton = new System.Windows.Forms.Button(); - this.optionsPanel = new System.Windows.Forms.TableLayoutPanel(); - this.labelEncoding = new System.Windows.Forms.Label(); - this.labelPath = new System.Windows.Forms.Label(); - this.textBoxPath = new System.Windows.Forms.TextBox(); - this.labelConnectMode = new System.Windows.Forms.Label(); - this.comboBoxConnectMode = new System.Windows.Forms.ComboBox(); - this.comboBoxEncoding = new System.Windows.Forms.ComboBox(); - this.checkBoxPKA = new System.Windows.Forms.CheckBox(); - this.pkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); - this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.alertIcon)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPort)).BeginInit(); - this.optionsPanel.SuspendLayout(); - this.tableLayoutPanel2.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 4; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 50F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.labelPassword, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.protocol, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.alertIcon, 3, 2); - this.tableLayoutPanel1.Controls.Add(this.labelURL, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.linkLabelURL, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.textBoxServer, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.labelServer, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.labelPort, 2, 1); - this.tableLayoutPanel1.Controls.Add(this.labelUsername, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.textBoxUsername, 1, 3); - this.tableLayoutPanel1.Controls.Add(this.textBoxPassword, 1, 4); - this.tableLayoutPanel1.Controls.Add(this.anonymousCheckBox, 1, 5); - this.tableLayoutPanel1.Controls.Add(this.savePasswordCheckBox, 1, 6); - this.tableLayoutPanel1.Controls.Add(this.numericUpDownPort, 3, 1); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10, 10, 10, 0); - this.tableLayoutPanel1.RowCount = 8; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 32F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(481, 206); - this.tableLayoutPanel1.TabIndex = 37; - // - // labelPassword - // - this.labelPassword.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelPassword.AutoSize = true; - this.labelPassword.Location = new System.Drawing.Point(16, 132); - this.labelPassword.Name = "labelPassword"; - this.labelPassword.Size = new System.Drawing.Size(60, 15); - this.labelPassword.TabIndex = 34; - this.labelPassword.Text = "Password:"; - this.labelPassword.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // protocol - // - this.protocol.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel1.SetColumnSpan(this.protocol, 4); - this.protocol.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; - this.protocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.protocol.FormattingEnabled = true; - this.protocol.IconMember = null; - this.protocol.ItemHeight = 20; - this.protocol.Location = new System.Drawing.Point(13, 13); - this.protocol.MaxDropDownItems = 9; - this.protocol.Name = "protocol"; - this.protocol.Size = new System.Drawing.Size(455, 26); - this.protocol.TabIndex = 0; - this.protocol.SelectionChangeCommitted += new System.EventHandler(this.protocol_SelectionChangeCommitted); - // - // alertIcon - // - this.alertIcon.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.alertIcon.Image = global::Ch.Cyberduck.ResourcesBundle.alert; - this.alertIcon.Location = new System.Drawing.Point(447, 73); - this.alertIcon.Name = "alertIcon"; - this.alertIcon.Padding = new System.Windows.Forms.Padding(0, 2, 0, 0); - this.alertIcon.Size = new System.Drawing.Size(21, 21); - this.alertIcon.TabIndex = 33; - this.alertIcon.TabStop = false; - this.alertIcon.Visible = false; - // - // labelURL - // - this.labelURL.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelURL.AutoSize = true; - this.labelURL.Location = new System.Drawing.Point(45, 76); - this.labelURL.Name = "labelURL"; - this.labelURL.Size = new System.Drawing.Size(31, 15); - this.labelURL.TabIndex = 3; - this.labelURL.Text = "URL:"; - this.labelURL.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // linkLabelURL - // - this.linkLabelURL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.linkLabelURL.AutoEllipsis = true; - this.tableLayoutPanel1.SetColumnSpan(this.linkLabelURL, 2); - this.linkLabelURL.Location = new System.Drawing.Point(82, 76); - this.linkLabelURL.Margin = new System.Windows.Forms.Padding(3); - this.linkLabelURL.Name = "linkLabelURL"; - this.linkLabelURL.Size = new System.Drawing.Size(310, 15); - this.linkLabelURL.TabIndex = 4; - this.linkLabelURL.TabStop = true; - this.linkLabelURL.Text = "default"; - this.linkLabelURL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelURL_LinkClicked); - // - // textBoxServer - // - this.textBoxServer.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxServer.Location = new System.Drawing.Point(82, 45); - this.textBoxServer.Name = "textBoxServer"; - this.textBoxServer.Size = new System.Drawing.Size(260, 23); - this.textBoxServer.TabIndex = 6; - this.textBoxServer.TextChanged += new System.EventHandler(this.textBoxServer_TextChanged); - // - // labelServer - // - this.labelServer.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelServer.AutoSize = true; - this.labelServer.Location = new System.Drawing.Point(34, 48); - this.labelServer.Name = "labelServer"; - this.labelServer.Size = new System.Drawing.Size(42, 15); - this.labelServer.TabIndex = 5; - this.labelServer.Text = "Server:"; - this.labelServer.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // labelPort - // - this.labelPort.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelPort.AutoSize = true; - this.labelPort.Location = new System.Drawing.Point(360, 48); - this.labelPort.Name = "labelPort"; - this.labelPort.Size = new System.Drawing.Size(32, 15); - this.labelPort.TabIndex = 7; - this.labelPort.Text = "Port:"; - this.labelPort.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // labelUsername - // - this.labelUsername.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelUsername.AutoSize = true; - this.labelUsername.Location = new System.Drawing.Point(13, 104); - this.labelUsername.Name = "labelUsername"; - this.labelUsername.Size = new System.Drawing.Size(63, 15); - this.labelUsername.TabIndex = 29; - this.labelUsername.Text = "Username:"; - this.labelUsername.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // textBoxUsername - // - this.textBoxUsername.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel1.SetColumnSpan(this.textBoxUsername, 3); - this.textBoxUsername.Location = new System.Drawing.Point(82, 101); - this.textBoxUsername.Name = "textBoxUsername"; - this.textBoxUsername.Size = new System.Drawing.Size(386, 23); - this.textBoxUsername.TabIndex = 30; - this.textBoxUsername.TextChanged += new System.EventHandler(this.textBoxUsername_TextChanged); - // - // textBoxPassword - // - this.textBoxPassword.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel1.SetColumnSpan(this.textBoxPassword, 3); - this.textBoxPassword.Location = new System.Drawing.Point(82, 129); - this.textBoxPassword.Name = "textBoxPassword"; - this.textBoxPassword.Size = new System.Drawing.Size(386, 23); - this.textBoxPassword.TabIndex = 35; - this.textBoxPassword.UseSystemPasswordChar = true; - // - // anonymousCheckBox - // - this.anonymousCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel1.SetColumnSpan(this.anonymousCheckBox, 3); - this.anonymousCheckBox.Location = new System.Drawing.Point(82, 157); - this.anonymousCheckBox.Name = "anonymousCheckBox"; - this.anonymousCheckBox.Size = new System.Drawing.Size(386, 19); - this.anonymousCheckBox.TabIndex = 36; - this.anonymousCheckBox.Text = "Anonymous Login"; - this.anonymousCheckBox.UseVisualStyleBackColor = true; - this.anonymousCheckBox.CheckedChanged += new System.EventHandler(this.anonymousCheckBox_CheckedChanged); - // - // savePasswordCheckBox - // - this.savePasswordCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel1.SetColumnSpan(this.savePasswordCheckBox, 3); - this.savePasswordCheckBox.Location = new System.Drawing.Point(82, 182); - this.savePasswordCheckBox.Name = "savePasswordCheckBox"; - this.savePasswordCheckBox.Size = new System.Drawing.Size(386, 19); - this.savePasswordCheckBox.TabIndex = 37; - this.savePasswordCheckBox.Text = "Save Password"; - this.savePasswordCheckBox.UseVisualStyleBackColor = true; - this.savePasswordCheckBox.CheckedChanged += new System.EventHandler(this.savePasswordCheckBox_CheckedChanged); - // - // numericUpDownPort - // - this.numericUpDownPort.Location = new System.Drawing.Point(398, 45); - this.numericUpDownPort.Maximum = new decimal(new int[] { - 65535, - 0, - 0, - 0}); - this.numericUpDownPort.Name = "numericUpDownPort"; - this.numericUpDownPort.Size = new System.Drawing.Size(70, 23); - this.numericUpDownPort.TabIndex = 7; - this.numericUpDownPort.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; - this.numericUpDownPort.TextChanged += new System.EventHandler(this.numericUpDownPort_TextChanged); - // - // separatorLine - // - this.separatorLine.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.separatorLine.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.tableLayoutPanel2.SetColumnSpan(this.separatorLine, 3); - this.separatorLine.Location = new System.Drawing.Point(16, 56); - this.separatorLine.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); - this.separatorLine.Name = "separatorLine"; - this.separatorLine.Size = new System.Drawing.Size(452, 2); - this.separatorLine.TabIndex = 42; - // - // toggleOptionsLabel - // - this.toggleOptionsLabel.AutoSize = true; - this.toggleOptionsLabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.toggleOptionsLabel.ImageIndex = 3; - this.toggleOptionsLabel.ImageList = this.imageList; - this.toggleOptionsLabel.Location = new System.Drawing.Point(13, 31); - this.toggleOptionsLabel.MinimumSize = new System.Drawing.Size(0, 25); - this.toggleOptionsLabel.Name = "toggleOptionsLabel"; - this.toggleOptionsLabel.Size = new System.Drawing.Size(124, 25); - this.toggleOptionsLabel.TabIndex = 41; - this.toggleOptionsLabel.Text = " Toggle Transcript"; - this.toggleOptionsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // imageList - // - this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream"))); - this.imageList.TransparentColor = System.Drawing.Color.Fuchsia; - this.imageList.Images.SetKeyName(0, "arrow_up_bw.bmp"); - this.imageList.Images.SetKeyName(1, "arrow_up_color.bmp"); - this.imageList.Images.SetKeyName(2, "arrow_up_color_pressed.bmp"); - this.imageList.Images.SetKeyName(3, "arrow_down_bw.bmp"); - this.imageList.Images.SetKeyName(4, "arrow_down_color.bmp"); - this.imageList.Images.SetKeyName(5, "arrow_down_color_pressed.bmp"); - this.imageList.Images.SetKeyName(6, "green_arrow.bmp"); - // - // cancelButton - // - this.cancelButton.AutoSize = true; - this.cancelButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancelButton.Location = new System.Drawing.Point(415, 3); - this.cancelButton.Name = "cancelButton"; - this.cancelButton.Size = new System.Drawing.Size(53, 25); - this.cancelButton.TabIndex = 43; - this.cancelButton.Text = "Cancel"; - this.cancelButton.UseVisualStyleBackColor = true; - // - // connectButton - // - this.connectButton.AutoSize = true; - this.connectButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.connectButton.DialogResult = System.Windows.Forms.DialogResult.OK; - this.connectButton.Location = new System.Drawing.Point(347, 3); - this.connectButton.Name = "connectButton"; - this.connectButton.Size = new System.Drawing.Size(62, 25); - this.connectButton.TabIndex = 44; - this.connectButton.Text = "Connect"; - this.connectButton.UseVisualStyleBackColor = true; - // - // optionsPanel - // - this.optionsPanel.ColumnCount = 4; - this.optionsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.optionsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.optionsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.optionsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.optionsPanel.Controls.Add(this.labelEncoding, 0, 2); - this.optionsPanel.Controls.Add(this.labelPath, 0, 0); - this.optionsPanel.Controls.Add(this.textBoxPath, 1, 0); - this.optionsPanel.Controls.Add(this.labelConnectMode, 0, 1); - this.optionsPanel.Controls.Add(this.comboBoxConnectMode, 1, 1); - this.optionsPanel.Controls.Add(this.comboBoxEncoding, 1, 2); - this.optionsPanel.Controls.Add(this.checkBoxPKA, 1, 3); - this.optionsPanel.Controls.Add(this.pkLabel, 1, 4); - this.optionsPanel.Dock = System.Windows.Forms.DockStyle.Top; - this.optionsPanel.Location = new System.Drawing.Point(0, 269); - this.optionsPanel.Name = "optionsPanel"; - this.optionsPanel.Padding = new System.Windows.Forms.Padding(10, 0, 10, 0); - this.optionsPanel.RowCount = 5; - this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.optionsPanel.Size = new System.Drawing.Size(481, 133); - this.optionsPanel.TabIndex = 45; - // - // labelEncoding - // - this.labelEncoding.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelEncoding.AutoSize = true; - this.labelEncoding.Location = new System.Drawing.Point(42, 65); - this.labelEncoding.Name = "labelEncoding"; - this.labelEncoding.Size = new System.Drawing.Size(60, 15); - this.labelEncoding.TabIndex = 49; - this.labelEncoding.Text = "Encoding:"; - this.labelEncoding.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // labelPath - // - this.labelPath.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelPath.AutoSize = true; - this.labelPath.Location = new System.Drawing.Point(68, 7); - this.labelPath.Name = "labelPath"; - this.labelPath.Size = new System.Drawing.Size(34, 15); - this.labelPath.TabIndex = 45; - this.labelPath.Text = "Path:"; - this.labelPath.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // textBoxPath - // - this.textBoxPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.optionsPanel.SetColumnSpan(this.textBoxPath, 3); - this.textBoxPath.Location = new System.Drawing.Point(108, 3); - this.textBoxPath.Name = "textBoxPath"; - this.textBoxPath.Size = new System.Drawing.Size(360, 23); - this.textBoxPath.TabIndex = 46; - this.textBoxPath.TextChanged += new System.EventHandler(this.textBoxPath_TextChanged); - // - // labelConnectMode - // - this.labelConnectMode.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelConnectMode.AutoSize = true; - this.labelConnectMode.Location = new System.Drawing.Point(13, 36); - this.labelConnectMode.Name = "labelConnectMode"; - this.labelConnectMode.Size = new System.Drawing.Size(89, 15); - this.labelConnectMode.TabIndex = 47; - this.labelConnectMode.Text = "Connect Mode:"; - this.labelConnectMode.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // comboBoxConnectMode - // - this.comboBoxConnectMode.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.optionsPanel.SetColumnSpan(this.comboBoxConnectMode, 3); - this.comboBoxConnectMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBoxConnectMode.FormattingEnabled = true; - this.comboBoxConnectMode.Location = new System.Drawing.Point(108, 32); - this.comboBoxConnectMode.Name = "comboBoxConnectMode"; - this.comboBoxConnectMode.Size = new System.Drawing.Size(360, 23); - this.comboBoxConnectMode.TabIndex = 48; - this.comboBoxConnectMode.SelectionChangeCommitted += new System.EventHandler(this.comboBoxConnectMode_SelectionChangeCommitted); - // - // comboBoxEncoding - // - this.comboBoxEncoding.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.optionsPanel.SetColumnSpan(this.comboBoxEncoding, 3); - this.comboBoxEncoding.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBoxEncoding.FormattingEnabled = true; - this.comboBoxEncoding.Location = new System.Drawing.Point(108, 61); - this.comboBoxEncoding.Name = "comboBoxEncoding"; - this.comboBoxEncoding.Size = new System.Drawing.Size(360, 23); - this.comboBoxEncoding.TabIndex = 50; - this.comboBoxEncoding.SelectionChangeCommitted += new System.EventHandler(this.comboBoxEncoding_SelectionChangeCommitted); - // - // checkBoxPKA - // - this.checkBoxPKA.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.checkBoxPKA.AutoSize = true; - this.optionsPanel.SetColumnSpan(this.checkBoxPKA, 3); - this.checkBoxPKA.Location = new System.Drawing.Point(108, 90); - this.checkBoxPKA.Name = "checkBoxPKA"; - this.checkBoxPKA.Size = new System.Drawing.Size(185, 19); - this.checkBoxPKA.TabIndex = 51; - this.checkBoxPKA.Text = "Use Public Key Authentication"; - this.checkBoxPKA.UseVisualStyleBackColor = true; - this.checkBoxPKA.CheckedChanged += new System.EventHandler(this.checkBoxPKA_CheckedChanged); - // - // pkLabel - // - this.pkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.pkLabel.AutoSize = true; - this.optionsPanel.SetColumnSpan(this.pkLabel, 3); - this.pkLabel.Location = new System.Drawing.Point(125, 112); - this.pkLabel.Margin = new System.Windows.Forms.Padding(20, 0, 3, 0); - this.pkLabel.MinimumSize = new System.Drawing.Size(0, 25); - this.pkLabel.Name = "pkLabel"; - this.pkLabel.Size = new System.Drawing.Size(343, 25); - this.pkLabel.TabIndex = 52; - this.pkLabel.Text = "No private key selected"; - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.ColumnCount = 3; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.Controls.Add(this.separatorLine, 0, 2); - this.tableLayoutPanel2.Controls.Add(this.toggleOptionsLabel, 0, 1); - this.tableLayoutPanel2.Controls.Add(this.cancelButton, 2, 0); - this.tableLayoutPanel2.Controls.Add(this.connectButton, 1, 0); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Top; - this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 206); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.Padding = new System.Windows.Forms.Padding(10, 0, 10, 0); - this.tableLayoutPanel2.RowCount = 3; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F)); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 6F)); - this.tableLayoutPanel2.Size = new System.Drawing.Size(481, 63); - this.tableLayoutPanel2.TabIndex = 46; - // - // ConnectionForm - // - this.AcceptButton = this.connectButton; - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.cancelButton; - this.ClientSize = new System.Drawing.Size(481, 410); - this.Controls.Add(this.optionsPanel); - this.Controls.Add(this.tableLayoutPanel2); - this.Controls.Add(this.tableLayoutPanel1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; - this.Name = "ConnectionForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "New Connection"; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.alertIcon)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPort)).EndInit(); - this.optionsPanel.ResumeLayout(false); - this.optionsPanel.PerformLayout(); - this.tableLayoutPanel2.ResumeLayout(false); - this.tableLayoutPanel2.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label labelPassword; - private ImageComboBox protocol; - private System.Windows.Forms.PictureBox alertIcon; - private System.Windows.Forms.Label labelURL; - private System.Windows.Forms.LinkLabel linkLabelURL; - private System.Windows.Forms.TextBox textBoxServer; - private System.Windows.Forms.Label labelServer; - private System.Windows.Forms.Label labelPort; - private System.Windows.Forms.Label labelUsername; - private System.Windows.Forms.TextBox textBoxUsername; - private System.Windows.Forms.TextBox textBoxPassword; - private System.Windows.Forms.CheckBox anonymousCheckBox; - private System.Windows.Forms.CheckBox savePasswordCheckBox; - private System.Windows.Forms.Label separatorLine; - private System.Windows.Forms.Label toggleOptionsLabel; - private System.Windows.Forms.ImageList imageList; - private System.Windows.Forms.Button cancelButton; - private System.Windows.Forms.Button connectButton; - private System.Windows.Forms.TableLayoutPanel optionsPanel; - private System.Windows.Forms.Label labelPath; - private System.Windows.Forms.TextBox textBoxPath; - private System.Windows.Forms.Label labelConnectMode; - private System.Windows.Forms.ComboBox comboBoxConnectMode; - private System.Windows.Forms.Label labelEncoding; - private System.Windows.Forms.ComboBox comboBoxEncoding; - private System.Windows.Forms.CheckBox checkBoxPKA; - private EllipsisLabel pkLabel; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private System.Windows.Forms.OpenFileDialog openFileDialog; - private System.Windows.Forms.NumericUpDown numericUpDownPort; - public event EventHandler ChangedPrivateKey; - } +using System; +using Ch.Cyberduck.Ui.Controller; +using Ch.Cyberduck.Ui.Winforms.Controls; + +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class ConnectionForm + { + /// + /// 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(ConnectionForm)); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.labelPassword = new System.Windows.Forms.Label(); + this.protocol = new Ch.Cyberduck.Ui.Winforms.Controls.ImageComboBox(); + this.alertIcon = new System.Windows.Forms.PictureBox(); + this.labelURL = new System.Windows.Forms.Label(); + this.linkLabelURL = new System.Windows.Forms.LinkLabel(); + this.textBoxServer = new System.Windows.Forms.TextBox(); + this.labelServer = new System.Windows.Forms.Label(); + this.labelPort = new System.Windows.Forms.Label(); + this.labelUsername = new System.Windows.Forms.Label(); + this.textBoxUsername = new System.Windows.Forms.TextBox(); + this.textBoxPassword = new System.Windows.Forms.TextBox(); + this.anonymousCheckBox = new System.Windows.Forms.CheckBox(); + this.savePasswordCheckBox = new System.Windows.Forms.CheckBox(); + this.numericUpDownPort = new System.Windows.Forms.NumericUpDown(); + this.separatorLine = new System.Windows.Forms.Label(); + this.toggleOptionsLabel = new System.Windows.Forms.Label(); + this.imageList = new System.Windows.Forms.ImageList(this.components); + this.cancelButton = new System.Windows.Forms.Button(); + this.connectButton = new System.Windows.Forms.Button(); + this.optionsPanel = new System.Windows.Forms.TableLayoutPanel(); + this.labelEncoding = new System.Windows.Forms.Label(); + this.labelPath = new System.Windows.Forms.Label(); + this.textBoxPath = new System.Windows.Forms.TextBox(); + this.labelConnectMode = new System.Windows.Forms.Label(); + this.comboBoxConnectMode = new System.Windows.Forms.ComboBox(); + this.comboBoxEncoding = new System.Windows.Forms.ComboBox(); + this.checkBoxPKA = new System.Windows.Forms.CheckBox(); + this.pkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.alertIcon)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPort)).BeginInit(); + this.optionsPanel.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 4; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 50F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.labelPassword, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.protocol, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.alertIcon, 3, 2); + this.tableLayoutPanel1.Controls.Add(this.labelURL, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.linkLabelURL, 1, 2); + this.tableLayoutPanel1.Controls.Add(this.textBoxServer, 1, 1); + this.tableLayoutPanel1.Controls.Add(this.labelServer, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.labelPort, 2, 1); + this.tableLayoutPanel1.Controls.Add(this.labelUsername, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.textBoxUsername, 1, 3); + this.tableLayoutPanel1.Controls.Add(this.textBoxPassword, 1, 4); + this.tableLayoutPanel1.Controls.Add(this.anonymousCheckBox, 1, 5); + this.tableLayoutPanel1.Controls.Add(this.savePasswordCheckBox, 1, 6); + this.tableLayoutPanel1.Controls.Add(this.numericUpDownPort, 3, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10, 10, 10, 0); + this.tableLayoutPanel1.RowCount = 8; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 32F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(481, 206); + this.tableLayoutPanel1.TabIndex = 37; + // + // labelPassword + // + this.labelPassword.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelPassword.AutoSize = true; + this.labelPassword.Location = new System.Drawing.Point(16, 132); + this.labelPassword.Name = "labelPassword"; + this.labelPassword.Size = new System.Drawing.Size(60, 15); + this.labelPassword.TabIndex = 34; + this.labelPassword.Text = "Password:"; + this.labelPassword.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // protocol + // + this.protocol.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.protocol, 4); + this.protocol.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.protocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.protocol.FormattingEnabled = true; + this.protocol.IconMember = null; + this.protocol.ItemHeight = 20; + this.protocol.Location = new System.Drawing.Point(13, 13); + this.protocol.MaxDropDownItems = 9; + this.protocol.Name = "protocol"; + this.protocol.Size = new System.Drawing.Size(455, 26); + this.protocol.TabIndex = 0; + this.protocol.SelectionChangeCommitted += new System.EventHandler(this.protocol_SelectionChangeCommitted); + // + // alertIcon + // + this.alertIcon.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.alertIcon.Image = global::Ch.Cyberduck.ResourcesBundle.alert; + this.alertIcon.Location = new System.Drawing.Point(447, 73); + this.alertIcon.Name = "alertIcon"; + this.alertIcon.Padding = new System.Windows.Forms.Padding(0, 2, 0, 0); + this.alertIcon.Size = new System.Drawing.Size(21, 21); + this.alertIcon.TabIndex = 33; + this.alertIcon.TabStop = false; + this.alertIcon.Visible = false; + // + // labelURL + // + this.labelURL.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelURL.AutoSize = true; + this.labelURL.Location = new System.Drawing.Point(45, 76); + this.labelURL.Name = "labelURL"; + this.labelURL.Size = new System.Drawing.Size(31, 15); + this.labelURL.TabIndex = 3; + this.labelURL.Text = "URL:"; + this.labelURL.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // linkLabelURL + // + this.linkLabelURL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.linkLabelURL.AutoEllipsis = true; + this.tableLayoutPanel1.SetColumnSpan(this.linkLabelURL, 2); + this.linkLabelURL.Location = new System.Drawing.Point(82, 76); + this.linkLabelURL.Margin = new System.Windows.Forms.Padding(3); + this.linkLabelURL.Name = "linkLabelURL"; + this.linkLabelURL.Size = new System.Drawing.Size(310, 15); + this.linkLabelURL.TabIndex = 4; + this.linkLabelURL.TabStop = true; + this.linkLabelURL.Text = "default"; + this.linkLabelURL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelURL_LinkClicked); + // + // textBoxServer + // + this.textBoxServer.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxServer.Location = new System.Drawing.Point(82, 45); + this.textBoxServer.Name = "textBoxServer"; + this.textBoxServer.Size = new System.Drawing.Size(260, 23); + this.textBoxServer.TabIndex = 6; + this.textBoxServer.TextChanged += new System.EventHandler(this.textBoxServer_TextChanged); + // + // labelServer + // + this.labelServer.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelServer.AutoSize = true; + this.labelServer.Location = new System.Drawing.Point(34, 48); + this.labelServer.Name = "labelServer"; + this.labelServer.Size = new System.Drawing.Size(42, 15); + this.labelServer.TabIndex = 5; + this.labelServer.Text = "Server:"; + this.labelServer.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // labelPort + // + this.labelPort.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelPort.AutoSize = true; + this.labelPort.Location = new System.Drawing.Point(360, 48); + this.labelPort.Name = "labelPort"; + this.labelPort.Size = new System.Drawing.Size(32, 15); + this.labelPort.TabIndex = 7; + this.labelPort.Text = "Port:"; + this.labelPort.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // labelUsername + // + this.labelUsername.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelUsername.AutoSize = true; + this.labelUsername.Location = new System.Drawing.Point(13, 104); + this.labelUsername.Name = "labelUsername"; + this.labelUsername.Size = new System.Drawing.Size(63, 15); + this.labelUsername.TabIndex = 29; + this.labelUsername.Text = "Username:"; + this.labelUsername.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // textBoxUsername + // + this.textBoxUsername.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.textBoxUsername, 3); + this.textBoxUsername.Location = new System.Drawing.Point(82, 101); + this.textBoxUsername.Name = "textBoxUsername"; + this.textBoxUsername.Size = new System.Drawing.Size(386, 23); + this.textBoxUsername.TabIndex = 30; + this.textBoxUsername.TextChanged += new System.EventHandler(this.textBoxUsername_TextChanged); + // + // textBoxPassword + // + this.textBoxPassword.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.textBoxPassword, 3); + this.textBoxPassword.Location = new System.Drawing.Point(82, 129); + this.textBoxPassword.Name = "textBoxPassword"; + this.textBoxPassword.Size = new System.Drawing.Size(386, 23); + this.textBoxPassword.TabIndex = 35; + this.textBoxPassword.UseSystemPasswordChar = true; + // + // anonymousCheckBox + // + this.anonymousCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.anonymousCheckBox, 3); + this.anonymousCheckBox.Location = new System.Drawing.Point(82, 157); + this.anonymousCheckBox.Name = "anonymousCheckBox"; + this.anonymousCheckBox.Size = new System.Drawing.Size(386, 19); + this.anonymousCheckBox.TabIndex = 36; + this.anonymousCheckBox.Text = "Anonymous Login"; + this.anonymousCheckBox.UseVisualStyleBackColor = true; + this.anonymousCheckBox.CheckedChanged += new System.EventHandler(this.anonymousCheckBox_CheckedChanged); + // + // savePasswordCheckBox + // + this.savePasswordCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.savePasswordCheckBox, 3); + this.savePasswordCheckBox.Location = new System.Drawing.Point(82, 182); + this.savePasswordCheckBox.Name = "savePasswordCheckBox"; + this.savePasswordCheckBox.Size = new System.Drawing.Size(386, 19); + this.savePasswordCheckBox.TabIndex = 37; + this.savePasswordCheckBox.Text = "Save Password"; + this.savePasswordCheckBox.UseVisualStyleBackColor = true; + this.savePasswordCheckBox.CheckedChanged += new System.EventHandler(this.savePasswordCheckBox_CheckedChanged); + // + // numericUpDownPort + // + this.numericUpDownPort.Location = new System.Drawing.Point(398, 45); + this.numericUpDownPort.Maximum = new decimal(new int[] { + 65535, + 0, + 0, + 0}); + this.numericUpDownPort.Name = "numericUpDownPort"; + this.numericUpDownPort.Size = new System.Drawing.Size(70, 23); + this.numericUpDownPort.TabIndex = 7; + this.numericUpDownPort.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownPort.TextChanged += new System.EventHandler(this.numericUpDownPort_TextChanged); + // + // separatorLine + // + this.separatorLine.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.separatorLine.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.tableLayoutPanel2.SetColumnSpan(this.separatorLine, 3); + this.separatorLine.Location = new System.Drawing.Point(16, 56); + this.separatorLine.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.separatorLine.Name = "separatorLine"; + this.separatorLine.Size = new System.Drawing.Size(452, 2); + this.separatorLine.TabIndex = 42; + // + // toggleOptionsLabel + // + this.toggleOptionsLabel.AutoSize = true; + this.toggleOptionsLabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.toggleOptionsLabel.ImageIndex = 3; + this.toggleOptionsLabel.ImageList = this.imageList; + this.toggleOptionsLabel.Location = new System.Drawing.Point(13, 31); + this.toggleOptionsLabel.MinimumSize = new System.Drawing.Size(0, 25); + this.toggleOptionsLabel.Name = "toggleOptionsLabel"; + this.toggleOptionsLabel.Size = new System.Drawing.Size(124, 25); + this.toggleOptionsLabel.TabIndex = 41; + this.toggleOptionsLabel.Text = " Toggle Transcript"; + this.toggleOptionsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // imageList + // + this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream"))); + this.imageList.TransparentColor = System.Drawing.Color.Fuchsia; + this.imageList.Images.SetKeyName(0, "arrow_up_bw.bmp"); + this.imageList.Images.SetKeyName(1, "arrow_up_color.bmp"); + this.imageList.Images.SetKeyName(2, "arrow_up_color_pressed.bmp"); + this.imageList.Images.SetKeyName(3, "arrow_down_bw.bmp"); + this.imageList.Images.SetKeyName(4, "arrow_down_color.bmp"); + this.imageList.Images.SetKeyName(5, "arrow_down_color_pressed.bmp"); + this.imageList.Images.SetKeyName(6, "green_arrow.bmp"); + // + // cancelButton + // + this.cancelButton.AutoSize = true; + this.cancelButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(415, 3); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(53, 25); + this.cancelButton.TabIndex = 43; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + // + // connectButton + // + this.connectButton.AutoSize = true; + this.connectButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.connectButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.connectButton.Location = new System.Drawing.Point(347, 3); + this.connectButton.Name = "connectButton"; + this.connectButton.Size = new System.Drawing.Size(62, 25); + this.connectButton.TabIndex = 44; + this.connectButton.Text = "Connect"; + this.connectButton.UseVisualStyleBackColor = true; + // + // optionsPanel + // + this.optionsPanel.ColumnCount = 4; + this.optionsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.optionsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.optionsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.optionsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.optionsPanel.Controls.Add(this.labelEncoding, 0, 2); + this.optionsPanel.Controls.Add(this.labelPath, 0, 0); + this.optionsPanel.Controls.Add(this.textBoxPath, 1, 0); + this.optionsPanel.Controls.Add(this.labelConnectMode, 0, 1); + this.optionsPanel.Controls.Add(this.comboBoxConnectMode, 1, 1); + this.optionsPanel.Controls.Add(this.comboBoxEncoding, 1, 2); + this.optionsPanel.Controls.Add(this.checkBoxPKA, 1, 3); + this.optionsPanel.Controls.Add(this.pkLabel, 1, 4); + this.optionsPanel.Dock = System.Windows.Forms.DockStyle.Top; + this.optionsPanel.Location = new System.Drawing.Point(0, 269); + this.optionsPanel.Name = "optionsPanel"; + this.optionsPanel.Padding = new System.Windows.Forms.Padding(10, 0, 10, 0); + this.optionsPanel.RowCount = 5; + this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.optionsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.optionsPanel.Size = new System.Drawing.Size(481, 133); + this.optionsPanel.TabIndex = 45; + // + // labelEncoding + // + this.labelEncoding.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelEncoding.AutoSize = true; + this.labelEncoding.Location = new System.Drawing.Point(42, 65); + this.labelEncoding.Name = "labelEncoding"; + this.labelEncoding.Size = new System.Drawing.Size(60, 15); + this.labelEncoding.TabIndex = 49; + this.labelEncoding.Text = "Encoding:"; + this.labelEncoding.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // labelPath + // + this.labelPath.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelPath.AutoSize = true; + this.labelPath.Location = new System.Drawing.Point(68, 7); + this.labelPath.Name = "labelPath"; + this.labelPath.Size = new System.Drawing.Size(34, 15); + this.labelPath.TabIndex = 45; + this.labelPath.Text = "Path:"; + this.labelPath.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // textBoxPath + // + this.textBoxPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.optionsPanel.SetColumnSpan(this.textBoxPath, 3); + this.textBoxPath.Location = new System.Drawing.Point(108, 3); + this.textBoxPath.Name = "textBoxPath"; + this.textBoxPath.Size = new System.Drawing.Size(360, 23); + this.textBoxPath.TabIndex = 46; + this.textBoxPath.TextChanged += new System.EventHandler(this.textBoxPath_TextChanged); + // + // labelConnectMode + // + this.labelConnectMode.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelConnectMode.AutoSize = true; + this.labelConnectMode.Location = new System.Drawing.Point(13, 36); + this.labelConnectMode.Name = "labelConnectMode"; + this.labelConnectMode.Size = new System.Drawing.Size(89, 15); + this.labelConnectMode.TabIndex = 47; + this.labelConnectMode.Text = "Connect Mode:"; + this.labelConnectMode.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // comboBoxConnectMode + // + this.comboBoxConnectMode.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.optionsPanel.SetColumnSpan(this.comboBoxConnectMode, 3); + this.comboBoxConnectMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxConnectMode.FormattingEnabled = true; + this.comboBoxConnectMode.Location = new System.Drawing.Point(108, 32); + this.comboBoxConnectMode.Name = "comboBoxConnectMode"; + this.comboBoxConnectMode.Size = new System.Drawing.Size(360, 23); + this.comboBoxConnectMode.TabIndex = 48; + this.comboBoxConnectMode.SelectionChangeCommitted += new System.EventHandler(this.comboBoxConnectMode_SelectionChangeCommitted); + // + // comboBoxEncoding + // + this.comboBoxEncoding.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.optionsPanel.SetColumnSpan(this.comboBoxEncoding, 3); + this.comboBoxEncoding.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxEncoding.FormattingEnabled = true; + this.comboBoxEncoding.Location = new System.Drawing.Point(108, 61); + this.comboBoxEncoding.Name = "comboBoxEncoding"; + this.comboBoxEncoding.Size = new System.Drawing.Size(360, 23); + this.comboBoxEncoding.TabIndex = 50; + this.comboBoxEncoding.SelectionChangeCommitted += new System.EventHandler(this.comboBoxEncoding_SelectionChangeCommitted); + // + // checkBoxPKA + // + this.checkBoxPKA.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.checkBoxPKA.AutoSize = true; + this.optionsPanel.SetColumnSpan(this.checkBoxPKA, 3); + this.checkBoxPKA.Location = new System.Drawing.Point(108, 90); + this.checkBoxPKA.Name = "checkBoxPKA"; + this.checkBoxPKA.Size = new System.Drawing.Size(185, 19); + this.checkBoxPKA.TabIndex = 51; + this.checkBoxPKA.Text = "Use Public Key Authentication"; + this.checkBoxPKA.UseVisualStyleBackColor = true; + this.checkBoxPKA.CheckedChanged += new System.EventHandler(this.checkBoxPKA_CheckedChanged); + // + // pkLabel + // + this.pkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pkLabel.AutoSize = true; + this.optionsPanel.SetColumnSpan(this.pkLabel, 3); + this.pkLabel.Location = new System.Drawing.Point(125, 112); + this.pkLabel.Margin = new System.Windows.Forms.Padding(20, 0, 3, 0); + this.pkLabel.MinimumSize = new System.Drawing.Size(0, 25); + this.pkLabel.Name = "pkLabel"; + this.pkLabel.Size = new System.Drawing.Size(343, 25); + this.pkLabel.TabIndex = 52; + this.pkLabel.Text = "No private key selected"; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.ColumnCount = 3; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.separatorLine, 0, 2); + this.tableLayoutPanel2.Controls.Add(this.toggleOptionsLabel, 0, 1); + this.tableLayoutPanel2.Controls.Add(this.cancelButton, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.connectButton, 1, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Top; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 206); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.Padding = new System.Windows.Forms.Padding(10, 0, 10, 0); + this.tableLayoutPanel2.RowCount = 3; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 6F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(481, 63); + this.tableLayoutPanel2.TabIndex = 46; + // + // ConnectionForm + // + this.AcceptButton = this.connectButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(481, 410); + this.Controls.Add(this.optionsPanel); + this.Controls.Add(this.tableLayoutPanel2); + this.Controls.Add(this.tableLayoutPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; + this.Name = "ConnectionForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "New Connection"; + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.alertIcon)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPort)).EndInit(); + this.optionsPanel.ResumeLayout(false); + this.optionsPanel.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Label labelPassword; + private ImageComboBox protocol; + private System.Windows.Forms.PictureBox alertIcon; + private System.Windows.Forms.Label labelURL; + private System.Windows.Forms.LinkLabel linkLabelURL; + private System.Windows.Forms.TextBox textBoxServer; + private System.Windows.Forms.Label labelServer; + private System.Windows.Forms.Label labelPort; + private System.Windows.Forms.Label labelUsername; + private System.Windows.Forms.TextBox textBoxUsername; + private System.Windows.Forms.TextBox textBoxPassword; + private System.Windows.Forms.CheckBox anonymousCheckBox; + private System.Windows.Forms.CheckBox savePasswordCheckBox; + private System.Windows.Forms.Label separatorLine; + private System.Windows.Forms.Label toggleOptionsLabel; + private System.Windows.Forms.ImageList imageList; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Button connectButton; + private System.Windows.Forms.TableLayoutPanel optionsPanel; + private System.Windows.Forms.Label labelPath; + private System.Windows.Forms.TextBox textBoxPath; + private System.Windows.Forms.Label labelConnectMode; + private System.Windows.Forms.ComboBox comboBoxConnectMode; + private System.Windows.Forms.Label labelEncoding; + private System.Windows.Forms.ComboBox comboBoxEncoding; + private System.Windows.Forms.CheckBox checkBoxPKA; + private EllipsisLabel pkLabel; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private System.Windows.Forms.OpenFileDialog openFileDialog; + private System.Windows.Forms.NumericUpDown numericUpDownPort; + public event EventHandler ChangedPrivateKey; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/ConnectionForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ConnectionForm.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/ConnectionForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/ConnectionForm.cs index 627ca7c117..f763f322a7 100644 --- a/source/ch/cyberduck/ui/winforms/ConnectionForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ConnectionForm.cs @@ -1,446 +1,446 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; -using ch.cyberduck.core; -using ch.cyberduck.core.ftp; -using Ch.Cyberduck.Ui.Controller; -using Ch.Cyberduck.Ui.Winforms.Controls; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class ConnectionForm : BaseForm, IConnectionView - { - private bool _expanded = true; - - public ConnectionForm() - { - InitializeComponent(); - - //focus nickname - Load += (sender, args) => textBoxServer.Focus(); - - protocol.ICImageList = IconCache.Instance.GetProtocolIcons(); - - toggleOptionsLabel.Text = " " + LocaleFactory.localizedString("More Options", "Bookmark"); - toggleOptionsLabel.ImageIndex = (_expanded ? 1 : 4); - - openFileDialog.Title = LocaleFactory.localizedString("Select the private key in PEM or PuTTY format", - "Credentials"); - - openFileDialog.Filter = "Private Key Files (*.pem;*.crt;*.ppk)|*.pem;*.crt;*.ppk|All Files (*.*)|*.*"; - openFileDialog.FilterIndex = 1; - - SetMinMaxSize(Height); - ConfigureToggleOptions(); - - numericUpDownPort.GotFocus += delegate { numericUpDownPort.Select(0, numericUpDownPort.Text.Length); }; - } - - public override string[] BundleNames - { - get { return new[] {"Connection", "Keychain", "Localizable"}; } - } - - public Image Favicon - { - set { ; } - } - - public bool ConnectModeFieldEnabled - { - set { comboBoxConnectMode.Enabled = value; } - } - - public bool EncodingFieldEnabled - { - set { comboBoxEncoding.Enabled = value; } - } - - public bool WebUrlFieldEnabled - { - set { ; } - } - - public bool TimezoneFieldEnabled - { - set { ; } - } - - public bool AlertIconEnabled - { - set { alertIcon.Visible = value; } - } - - public bool OptionsVisible - { - get { return _expanded; } - set - { - if (_expanded != value) - { - _expanded = value; - - if (_expanded) - { - SetMinMaxSize(Height + optionsPanel.Height); - Height += optionsPanel.Height; - } - else - { - SetMinMaxSize(Height - optionsPanel.Height); - Height -= optionsPanel.Height; - } - optionsPanel.Visible = _expanded; - toggleOptionsLabel.ImageIndex = (_expanded ? 1 : 4); - } - } - } - - public string Nickname - { - get { return string.Empty; } - set { ; } - } - - public string URL - { - set { linkLabelURL.Text = value; } - get { return linkLabelURL.Text; } - } - - public string DownloadFolder - { - set { ; } - } - - public FTPConnectMode SelectedConnectMode - { - get { return (FTPConnectMode) comboBoxConnectMode.SelectedValue; } - set { comboBoxConnectMode.SelectedValue = value; } - } - - public string SelectedEncoding - { - get { return comboBoxEncoding.Text; } - set { comboBoxEncoding.Text = value; } - } - - public Host.TransferType SelectedTransferMode - { - get { return null; } - set { ; } - } - - public string SelectedDownloadFolder - { - get { return string.Empty; } - } - - public string WebURL - { - get { return string.Empty; } - set { ; } - } - - public string WebUrlButtonToolTip - { - set { ; } - } - - public string Notes - { - get { return string.Empty; } - set { ; } - } - - public string SelectedTimezone - { - get { return string.Empty; } - set { ; } - } - - public string WindowTitle - { - set { ; } - } - - public bool PkCheckboxState - { - get { return checkBoxPKA.Checked; } - set { checkBoxPKA.Checked = value; } - } - - public string PkLabel - { - set - { - pkLabel.Text = value; - pkLabel.ForeColor = checkBoxPKA.Checked ? Color.FromKnownColor(KnownColor.ControlText) : Color.Gray; - } - get { return pkLabel.Text; } - } - - public string UsernameLabel - { - set { labelUsername.Text = value; } - } - - public string PasswordLabel - { - set { labelPassword.Text = value; } - } - - public bool HostFieldEnabled - { - set { textBoxServer.Enabled = value; } - get { return textBoxServer.Enabled; } - } - - public bool PortFieldEnabled - { - set { numericUpDownPort.Enabled = value; } - } - - public bool PkCheckboxEnabled - { - set { checkBoxPKA.Enabled = value; } - } - - public Protocol SelectedProtocol - { - get { return (Protocol) protocol.SelectedValue; } - set { protocol.SelectedValue = value; } - } - - public string Hostname - { - get { return textBoxServer.Text; } - set { textBoxServer.Text = value; } - } - - public string Port - { - get { return numericUpDownPort.Text; } - set { numericUpDownPort.Text = value; } - } - - public string Username - { - get { return textBoxUsername.Text; } - set { textBoxUsername.Text = value; } - } - - public bool UsernameEnabled - { - set { textBoxUsername.Enabled = value; } - } - - public string Password - { - get { return textBoxPassword.Text; } - set { textBoxPassword.Text = value; } - } - - public bool PasswordEnabled - { - set { textBoxPassword.Enabled = value; } - } - - public string Path - { - get { return textBoxPath.Text; } - set { textBoxPath.Text = value; } - } - - public bool PathEnabled - { - get { return textBoxPath.Enabled; } - set { textBoxPath.Enabled = value; } - } - - public bool SavePasswordChecked - { - get { return savePasswordCheckBox.Checked; } - set { savePasswordCheckBox.Checked = value; } - } - - public bool SavePasswordEnabled - { - set { savePasswordCheckBox.Enabled = value; } - } - - public bool AnonymousChecked - { - get { return anonymousCheckBox.Checked; } - set { anonymousCheckBox.Checked = value; } - } - - public bool AnonymousEnabled - { - get { return anonymousCheckBox.Enabled; } - set { anonymousCheckBox.Enabled = value; } - } - - public void PopulateProtocols(List> protocols) - { - protocol.DataSource = protocols; - protocol.ValueMember = "Key"; - protocol.DisplayMember = "Value"; - protocol.IconMember = "IconKey"; - } - - public void PopulateEncodings(List encodings) - { - comboBoxEncoding.DataSource = encodings; - } - - public void PopulateTimezones(List timezones) - { - // - } - - public void PopulateConnectModes(List> modes) - { - comboBoxConnectMode.DataSource = null; - comboBoxConnectMode.DataSource = modes; - comboBoxConnectMode.ValueMember = "Value"; - comboBoxConnectMode.DisplayMember = "Key"; - } - - public void PopulateTransferModes(List> modes) - { - // - } - - public void ShowDownloadFolderBrowser(string path) - { - // - } - - public void ShowPrivateKeyBrowser(string path) - { - openFileDialog.InitialDirectory = path; - openFileDialog.FileName = String.Empty; - if (DialogResult.OK == openFileDialog.ShowDialog()) - { - ChangedPrivateKey(this, new PrivateKeyArgs(openFileDialog.FileName)); - } - else - { - ChangedPrivateKey(this, new PrivateKeyArgs(null)); - } - } - - public event VoidHandler ChangedEncodingEvent = delegate { }; - public event VoidHandler ChangedNicknameEvent = delegate { }; - public event VoidHandler ChangedTimezoneEvent = delegate { }; - public event VoidHandler ChangedConnectModeEvent = delegate { }; - public event VoidHandler ChangedTransferEvent = delegate { }; - public event VoidHandler ChangedWebURLEvent = delegate { }; - public event VoidHandler ChangedCommentEvent = delegate { }; - public event VoidHandler ChangedBrowserDownloadPathEvent = delegate { }; - public event VoidHandler ChangedProtocolEvent = delegate { }; - public event VoidHandler ChangedPortEvent = delegate { }; - public event VoidHandler ChangedServerEvent = delegate { }; - public event VoidHandler ChangedUsernameEvent = delegate { }; - public event VoidHandler ChangedPathEvent = delegate { }; - public event VoidHandler ChangedAnonymousCheckboxEvent = delegate { }; - public event VoidHandler ChangedSavePasswordCheckboxEvent = delegate { }; - public event VoidHandler ChangedPublicKeyCheckboxEvent = delegate { }; - public event VoidHandler OpenUrl = delegate { }; - public event VoidHandler OpenWebUrl = delegate { }; - public event VoidHandler OpenDownloadFolderBrowserEvent = delegate { }; - public event VoidHandler OpenDownloadFolderEvent = delegate { }; - public event VoidHandler LaunchNetworkAssistantEvent = delegate { }; - public event VoidHandler ToggleOptions = delegate { }; - - private void ConfigureToggleOptions() - { - toggleOptionsLabel.Click += (sender, args) => ToggleOptions(); - toggleOptionsLabel.MouseDown += delegate { toggleOptionsLabel.ImageIndex = (_expanded ? 2 : 5); }; - toggleOptionsLabel.MouseEnter += delegate { toggleOptionsLabel.ImageIndex = (_expanded ? 1 : 4); }; - toggleOptionsLabel.MouseLeave += delegate { toggleOptionsLabel.ImageIndex = (_expanded ? 0 : 3); }; - toggleOptionsLabel.MouseUp += delegate { toggleOptionsLabel.ImageIndex = (_expanded ? 1 : 4); }; - } - - private void SetMinMaxSize(int height) - { - MinimumSize = new Size(450, height); - MaximumSize = new Size(800, height); - } - - private void protocol_SelectionChangeCommitted(object sender, EventArgs e) - { - ChangedProtocolEvent(); - } - - private void textBoxServer_TextChanged(object sender, EventArgs e) - { - ChangedServerEvent(); - } - - private void linkLabelURL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - OpenUrl(); - } - - private void textBoxUsername_TextChanged(object sender, EventArgs e) - { - ChangedUsernameEvent(); - } - - private void anonymousCheckBox_CheckedChanged(object sender, EventArgs e) - { - ChangedAnonymousCheckboxEvent(); - } - - private void savePasswordCheckBox_CheckedChanged(object sender, EventArgs e) - { - ChangedSavePasswordCheckboxEvent(); - } - - private void textBoxPath_TextChanged(object sender, EventArgs e) - { - ChangedPathEvent(); - } - - private void comboBoxConnectMode_SelectionChangeCommitted(object sender, EventArgs e) - { - ChangedConnectModeEvent(); - } - - private void comboBoxEncoding_SelectionChangeCommitted(object sender, EventArgs e) - { - ChangedEncodingEvent(); - } - - private void checkBoxPKA_CheckedChanged(object sender, EventArgs e) - { - ChangedPublicKeyCheckboxEvent(); - } - - private void numericUpDownPort_TextChanged(object sender, EventArgs e) - { - ChangedPortEvent(); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using ch.cyberduck.core; +using ch.cyberduck.core.ftp; +using Ch.Cyberduck.Ui.Controller; +using Ch.Cyberduck.Ui.Winforms.Controls; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class ConnectionForm : BaseForm, IConnectionView + { + private bool _expanded = true; + + public ConnectionForm() + { + InitializeComponent(); + + //focus nickname + Load += (sender, args) => textBoxServer.Focus(); + + protocol.ICImageList = IconCache.Instance.GetProtocolIcons(); + + toggleOptionsLabel.Text = " " + LocaleFactory.localizedString("More Options", "Bookmark"); + toggleOptionsLabel.ImageIndex = (_expanded ? 1 : 4); + + openFileDialog.Title = LocaleFactory.localizedString("Select the private key in PEM or PuTTY format", + "Credentials"); + + openFileDialog.Filter = "Private Key Files (*.pem;*.crt;*.ppk)|*.pem;*.crt;*.ppk|All Files (*.*)|*.*"; + openFileDialog.FilterIndex = 1; + + SetMinMaxSize(Height); + ConfigureToggleOptions(); + + numericUpDownPort.GotFocus += delegate { numericUpDownPort.Select(0, numericUpDownPort.Text.Length); }; + } + + public override string[] BundleNames + { + get { return new[] {"Connection", "Keychain", "Localizable"}; } + } + + public Image Favicon + { + set { ; } + } + + public bool ConnectModeFieldEnabled + { + set { comboBoxConnectMode.Enabled = value; } + } + + public bool EncodingFieldEnabled + { + set { comboBoxEncoding.Enabled = value; } + } + + public bool WebUrlFieldEnabled + { + set { ; } + } + + public bool TimezoneFieldEnabled + { + set { ; } + } + + public bool AlertIconEnabled + { + set { alertIcon.Visible = value; } + } + + public bool OptionsVisible + { + get { return _expanded; } + set + { + if (_expanded != value) + { + _expanded = value; + + if (_expanded) + { + SetMinMaxSize(Height + optionsPanel.Height); + Height += optionsPanel.Height; + } + else + { + SetMinMaxSize(Height - optionsPanel.Height); + Height -= optionsPanel.Height; + } + optionsPanel.Visible = _expanded; + toggleOptionsLabel.ImageIndex = (_expanded ? 1 : 4); + } + } + } + + public string Nickname + { + get { return string.Empty; } + set { ; } + } + + public string URL + { + set { linkLabelURL.Text = value; } + get { return linkLabelURL.Text; } + } + + public string DownloadFolder + { + set { ; } + } + + public FTPConnectMode SelectedConnectMode + { + get { return (FTPConnectMode) comboBoxConnectMode.SelectedValue; } + set { comboBoxConnectMode.SelectedValue = value; } + } + + public string SelectedEncoding + { + get { return comboBoxEncoding.Text; } + set { comboBoxEncoding.Text = value; } + } + + public Host.TransferType SelectedTransferMode + { + get { return null; } + set { ; } + } + + public string SelectedDownloadFolder + { + get { return string.Empty; } + } + + public string WebURL + { + get { return string.Empty; } + set { ; } + } + + public string WebUrlButtonToolTip + { + set { ; } + } + + public string Notes + { + get { return string.Empty; } + set { ; } + } + + public string SelectedTimezone + { + get { return string.Empty; } + set { ; } + } + + public string WindowTitle + { + set { ; } + } + + public bool PkCheckboxState + { + get { return checkBoxPKA.Checked; } + set { checkBoxPKA.Checked = value; } + } + + public string PkLabel + { + set + { + pkLabel.Text = value; + pkLabel.ForeColor = checkBoxPKA.Checked ? Color.FromKnownColor(KnownColor.ControlText) : Color.Gray; + } + get { return pkLabel.Text; } + } + + public string UsernameLabel + { + set { labelUsername.Text = value; } + } + + public string PasswordLabel + { + set { labelPassword.Text = value; } + } + + public bool HostFieldEnabled + { + set { textBoxServer.Enabled = value; } + get { return textBoxServer.Enabled; } + } + + public bool PortFieldEnabled + { + set { numericUpDownPort.Enabled = value; } + } + + public bool PkCheckboxEnabled + { + set { checkBoxPKA.Enabled = value; } + } + + public Protocol SelectedProtocol + { + get { return (Protocol) protocol.SelectedValue; } + set { protocol.SelectedValue = value; } + } + + public string Hostname + { + get { return textBoxServer.Text; } + set { textBoxServer.Text = value; } + } + + public string Port + { + get { return numericUpDownPort.Text; } + set { numericUpDownPort.Text = value; } + } + + public string Username + { + get { return textBoxUsername.Text; } + set { textBoxUsername.Text = value; } + } + + public bool UsernameEnabled + { + set { textBoxUsername.Enabled = value; } + } + + public string Password + { + get { return textBoxPassword.Text; } + set { textBoxPassword.Text = value; } + } + + public bool PasswordEnabled + { + set { textBoxPassword.Enabled = value; } + } + + public string Path + { + get { return textBoxPath.Text; } + set { textBoxPath.Text = value; } + } + + public bool PathEnabled + { + get { return textBoxPath.Enabled; } + set { textBoxPath.Enabled = value; } + } + + public bool SavePasswordChecked + { + get { return savePasswordCheckBox.Checked; } + set { savePasswordCheckBox.Checked = value; } + } + + public bool SavePasswordEnabled + { + set { savePasswordCheckBox.Enabled = value; } + } + + public bool AnonymousChecked + { + get { return anonymousCheckBox.Checked; } + set { anonymousCheckBox.Checked = value; } + } + + public bool AnonymousEnabled + { + get { return anonymousCheckBox.Enabled; } + set { anonymousCheckBox.Enabled = value; } + } + + public void PopulateProtocols(List> protocols) + { + protocol.DataSource = protocols; + protocol.ValueMember = "Key"; + protocol.DisplayMember = "Value"; + protocol.IconMember = "IconKey"; + } + + public void PopulateEncodings(List encodings) + { + comboBoxEncoding.DataSource = encodings; + } + + public void PopulateTimezones(List timezones) + { + // + } + + public void PopulateConnectModes(List> modes) + { + comboBoxConnectMode.DataSource = null; + comboBoxConnectMode.DataSource = modes; + comboBoxConnectMode.ValueMember = "Value"; + comboBoxConnectMode.DisplayMember = "Key"; + } + + public void PopulateTransferModes(List> modes) + { + // + } + + public void ShowDownloadFolderBrowser(string path) + { + // + } + + public void ShowPrivateKeyBrowser(string path) + { + openFileDialog.InitialDirectory = path; + openFileDialog.FileName = String.Empty; + if (DialogResult.OK == openFileDialog.ShowDialog()) + { + ChangedPrivateKey(this, new PrivateKeyArgs(openFileDialog.FileName)); + } + else + { + ChangedPrivateKey(this, new PrivateKeyArgs(null)); + } + } + + public event VoidHandler ChangedEncodingEvent = delegate { }; + public event VoidHandler ChangedNicknameEvent = delegate { }; + public event VoidHandler ChangedTimezoneEvent = delegate { }; + public event VoidHandler ChangedConnectModeEvent = delegate { }; + public event VoidHandler ChangedTransferEvent = delegate { }; + public event VoidHandler ChangedWebURLEvent = delegate { }; + public event VoidHandler ChangedCommentEvent = delegate { }; + public event VoidHandler ChangedBrowserDownloadPathEvent = delegate { }; + public event VoidHandler ChangedProtocolEvent = delegate { }; + public event VoidHandler ChangedPortEvent = delegate { }; + public event VoidHandler ChangedServerEvent = delegate { }; + public event VoidHandler ChangedUsernameEvent = delegate { }; + public event VoidHandler ChangedPathEvent = delegate { }; + public event VoidHandler ChangedAnonymousCheckboxEvent = delegate { }; + public event VoidHandler ChangedSavePasswordCheckboxEvent = delegate { }; + public event VoidHandler ChangedPublicKeyCheckboxEvent = delegate { }; + public event VoidHandler OpenUrl = delegate { }; + public event VoidHandler OpenWebUrl = delegate { }; + public event VoidHandler OpenDownloadFolderBrowserEvent = delegate { }; + public event VoidHandler OpenDownloadFolderEvent = delegate { }; + public event VoidHandler LaunchNetworkAssistantEvent = delegate { }; + public event VoidHandler ToggleOptions = delegate { }; + + private void ConfigureToggleOptions() + { + toggleOptionsLabel.Click += (sender, args) => ToggleOptions(); + toggleOptionsLabel.MouseDown += delegate { toggleOptionsLabel.ImageIndex = (_expanded ? 2 : 5); }; + toggleOptionsLabel.MouseEnter += delegate { toggleOptionsLabel.ImageIndex = (_expanded ? 1 : 4); }; + toggleOptionsLabel.MouseLeave += delegate { toggleOptionsLabel.ImageIndex = (_expanded ? 0 : 3); }; + toggleOptionsLabel.MouseUp += delegate { toggleOptionsLabel.ImageIndex = (_expanded ? 1 : 4); }; + } + + private void SetMinMaxSize(int height) + { + MinimumSize = new Size(450, height); + MaximumSize = new Size(800, height); + } + + private void protocol_SelectionChangeCommitted(object sender, EventArgs e) + { + ChangedProtocolEvent(); + } + + private void textBoxServer_TextChanged(object sender, EventArgs e) + { + ChangedServerEvent(); + } + + private void linkLabelURL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + OpenUrl(); + } + + private void textBoxUsername_TextChanged(object sender, EventArgs e) + { + ChangedUsernameEvent(); + } + + private void anonymousCheckBox_CheckedChanged(object sender, EventArgs e) + { + ChangedAnonymousCheckboxEvent(); + } + + private void savePasswordCheckBox_CheckedChanged(object sender, EventArgs e) + { + ChangedSavePasswordCheckboxEvent(); + } + + private void textBoxPath_TextChanged(object sender, EventArgs e) + { + ChangedPathEvent(); + } + + private void comboBoxConnectMode_SelectionChangeCommitted(object sender, EventArgs e) + { + ChangedConnectModeEvent(); + } + + private void comboBoxEncoding_SelectionChangeCommitted(object sender, EventArgs e) + { + ChangedEncodingEvent(); + } + + private void checkBoxPKA_CheckedChanged(object sender, EventArgs e) + { + ChangedPublicKeyCheckboxEvent(); + } + + private void numericUpDownPort_TextChanged(object sender, EventArgs e) + { + ChangedPortEvent(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/ConnectionForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ConnectionForm.resx similarity index 98% rename from source/ch/cyberduck/ui/winforms/ConnectionForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/ConnectionForm.resx index 9fb102d534..369da7d71b 100644 --- a/source/ch/cyberduck/ui/winforms/ConnectionForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ConnectionForm.resx @@ -1,347 +1,347 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 17, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD0 - MQAAAk1TRnQBSQFMAgEBBwEAAVwBAwFcAQMBEwEAARMBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFM - AwABJgMAAQEBAAEgBQABIAEtKgAB1QG/AaIB/wHCAZ4BgQH/AbcBigEAAf8BsQGBAQAB/wG3AYoBAAH/ - AcIBngGBAf8B1QG/AaIB/zAAAcUBswGbAf8BpgGIARIB/wGVAYEBAAH/AYsBEwEAAf8BlQGBAQAB/wGm - AYgBEgH/AcUBswGbAf/AAAHRAbcBlQH/AbQBhAEAAf8BzgGuAYMB/wHgAc0BsgH/AeoB3wHOAf8B7wHp - AdwB/wHpAd8BzQH/Ad4BzAGxAf8BzAGtAYIB/wG0AYQBAAH/AdEBtwGVAf8gAAG9AakBjQH/AYwBFAEA - Af8BnAGBAQAB/wGzAY4BAAH/AcQBngELAf8BzQGoARIB/wHJAaIBDgH/AbsBlQEEAf8BpgGBAQAB/wGO - AYEBAAH/Ab0BqQGNAf+0AAHLAa4BhgH/AcgBpAGBAf8B7wHlAdUB/wH0Ae0B4gH/AfAB4gHIAf8B7AHV - Aa0B/wHpAc8BnwH/AeoB1AGsAf8B7QHfAcUB/wHvAekB3QH/AeoB4AHQAf8BxQGiAYEB/wHLAa4BhgH/ - GAABtQGdAYEB/wGTAYEBAAH/Ab0BmQEKAf8B0QGrAYEB/wHTAa4BgQH/AdMBrgGBAf8B0wGtAYEB/wHS - Aa0BgQH/AdIBrQGBAf8B0gGtAYEB/wHLAaYBFAH/AaEBgQEAAf8BtQGdAYEB/6wAAcsBrgGGAf8B1AG3 - AY4B/wH5AfIB5gH/AfQB5QHKAf8B7wHVAaUB/wHvAdUBpQH/Ae4B1AGlAf8B7QHTAaQB/wHrAdIBowH/ - AekB0AGhAf8B6QHQAaEB/wHtAd8BxAH/AfAB6QHeAf8BzwGyAYoB/wHLAa4BhgH/EAABtQGdAYEB/wGW - AYEBAAH/AcYBpAGAAf8B2AG0AYEB/wHaAbYBgQH/AdoBtgGBAf8B2QG1AYEB/wHYAbQBgQH/AdYBswGB - Af8B1QGxAYEB/wHVAbEBgQH/AdUBsQGBAf8B1QGxAYEB/wGtAYcBAAH/AbUBnQGBAf+kAAHQAbgBlwH/ - AcsBpwGBAf8B+wH0AegB/wH1AeABuQH/AfMB2gGqAf8B8wHaAaoB/wHyAdkBqgH/AfIB2QGqAf8B8QHY - AakB/wHwAdcBqAH/Ae4B1QGnAf8B6wHTAaUB/wHqAdIBpAH/AesB1wGxAf8B8AHpAd4B/wHGAaMBgQH/ - AdABuAGXAf8IAAG+AakBjwH/AY4BgQEAAf8BvwGeARQB/wHbAbgBgQH/AeABvAGBAf8B4AG8AYEB/wHg - AbsBgQH/AeABuwGBAf8B3wG7AYEB/wHeAboBgQH/AdwBuAGBAf8B2QG2AYEB/wHYAbUBgQH/AdgBtQGB - Af8B2AG1AYEB/wGkAYEBAAH/Ab4BqQGPAf8kAAGBAeMBAAH/AYEB5AEAAf8B8AH8AewB/3AAAbUBhQEA - Af8B9gHsAdsB/wH7AewB0QH/AfgB3gGwAf8B+AHeAbAB/wH3Ad0BsAH/AfcB3QGwAf8B+wHrAdAB/wH8 - AfQB5gH/AfkB6gHPAf8B9AHbAa4B/wHxAdgBqwH/Ae0B1QGpAf8B7AHUAagB/wHuAeABxgH/AeoB4AHQ - Af8BtAGEAQAB/wgAAYsBFAEAAf8BqgGMAQkB/wHVAbQBgQH/AeUBwgGCAf8B5gHDAYIB/wHlAcIBggH/ - AeUBwgGCAf8B8AHbAbUB/wH3AewB2AH/Ae4B2gG0Af8B4gHAAYEB/wHgAb4BgQH/AdwBuwGBAf8B2wG6 - AYEB/wHbAboBgQH/AdMBsQGBAf8BjgGBAQAB/yAAAbIB8QGcAf8BAAHbAQAB/wEAAdsBAAH/AQcB4AEA - Af8B8gH9Ae4B/2gAAdYBwQGmAf8B0QGxAYUB/wH+AfgB7gH/AfoB4wG5Af8B+gHiAbgB/wH6AeIBtQH/ - AfoB4QG0Af8B/AHtAdMB/wH9AfYB6AH/AwAB/wH9AfUB5wH/AfsB7AHSAf8B9gHdAbEB/wHyAdoBrgH/ - Ae4B1gGsAf8B7QHWAasB/wHxAeoB4AH/AcsBqwGBAf8B1gHBAaYB/wHGAbUBnwH/AZIBgQEAAf8BxAGo - AYEB/wHjAcUBjAH/AesBzAGQAf8B6gHKAYwB/wHqAckBigH/AfIB3wG6Af8B+AHuAdsB/wMAAf8B+AHu - AdoB/wHxAd4BuQH/AeYBxgGIAf8B4wHDAYYB/wHfAcABhAH/Ad4BvwGDAf8B3gG/AYMB/wGqAYUBAAH/ - AcYBtQGfAf8hAAHeAQAB/wEAAdsBAAH/AQAB2wEAAf8BCwHhAQAB/wHvAfwB6wH/ZAABwgGeAYEB/wHp - AdgBvwH/Af0B8gHfAf8B/AHnAcEB/wH7AeYBwAH/AfsB5QG8Af8B/QHuAdUB/wH+AfYB6QH/AwAB/wMA - Af8DAAH/Af0B9gHpAf8B+wHtAdQB/wH2Ad8BtAH/AfIB2wGyAf8B7gHXAa8B/wHwAeMBzAH/AeABzwG2 - Af8BwQGcAYEB/wGmAYgBEgH/AaEBhgEOAf8B0wG6AY0B/wHsAdEBngH/Ae8B0gGeAf8B7gHQAZgB/wH0 - AeIBvwH/AfkB8AHdAf8DAAH/AwAB/wMAAf8B+QHvAd0B/wHzAeABvgH/AegByQGPAf8B5QHGAY0B/wHh - AcMBiwH/AeEBwwGLAf8ByAGoAYEB/wGlAYcBEAH/JQAB1wEAAf8BAAHTAQAB/wEAAdMBAAH/AQYB2gEA - Af8B8wH8AfAB/2AAAbcBigEAAf8B9wHuAeEB/wH9Ae4B0gH/Af0B6gHIAf8B/AHpAcUB/wH9AfEB2QH/ - Af4B9wHqAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wH+AfcB6gH/AfsB7QHVAf8B9QHfAbYB/wHxAdsBswH/ - Ae8B3QG8Af8B6wHhAdIB/wG3AYoBAAH/AZUBgQEAAf8BrQGXAYEB/wHZAcMBmwH/AfEB2QGrAf8B8QHY - AacB/wH2AeYBxwH/AfoB8QHgAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wH6AfAB3wH/AfMB4gHAAf8B6AHL - AZQB/wHlAcgBkQH/AeMBxgGQAf8B2gG8AYYB/wGVAYEBAAH/EAABgQHZAQEB/wGBAd0BEgH/AYEB3gGB - Af8BjAHhAYEB/wGYAeQBgwH/AQAB0AEAAf8BAAHIAQAB/wEAAcgBAAH/AQAByAEAAf8BAQHSAQAB/wHu - AfsB6wH/XAABswGCAQAB/wH8AfgB8AH/Af4B7QHSAf8B/QHsAc4B/wH+AfMB4AH/Af4B+AHtAf8DAAH/ - AwAB/wMAAf8B/gH3AesB/wMAAf8DAAH/AwAB/wH9AfYB6gH/AfsB7QHWAf8B9AHeAbcB/wHxAdwBuAH/ - Ae8B6QHfAf8BswGCAQAB/wGOAYEBAAH/AbcBqgGUAf8B3wHSAboB/wH1AegBzwH/AfsB8gHiAf8B/QH4 - Ae8B/wMAAf8DAAH/AwAB/wH8AfcB7QH/AwAB/wMAAf8DAAH/AfsB9gHsAf8B9gHsAdkB/wHtAd0BvQH/ - AeoB2gG7Af8B5AHTAbMB/wGOAYEBAAH/DQABuwEAAf8BAAG7AQAB/wEAAbsBAAH/AQABuwEAAf8BAAG7 - AQAB/wEAAbsBAAH/AQABuwEAAf8BAAG7AQAB/wEAAbsBAAH/AQABuwEAAf8BAAG7AQAB/wEAAcEBAAH/ - A/sB/1gAAbcBigEAAf8B9wHwAeYB/wH9AfYB6QH/Af0B9AHkAf8B/gH7AfYB/wMAAf8DAAH/AwAB/wH+ - AfoB8wH/Af0B9gHoAf8B/gH6AfMB/wMAAf8DAAH/AwAB/wH9AfkB8gH/AfQB6AHSAf8B8QHoAdUB/wHs - AeQB2QH/AbcBigEAAf8BlQGBAQAB/wG1AacBkQH/AdoBzwG7Af8B8wHoAdMB/wH9AfkB8gH/AwAB/wMA - Af8DAAH/Af0B+AHvAf8B+wHxAeAB/wH9AfgB7wH/AwAB/wMAAf8DAAH/AfsB9gHtAf8B7wHhAcQB/wHs - Ad4BwQH/AdsBygGrAf8BlQGBAQAB/w0AAasBAAH/AQABqwEAAf8BAAGrAQAB/wEAAasBAAH/AQABqwEA - Af8BAAGrAQAB/wEAAasBAAH/AQABqwEAAf8BAAGrAQAB/wEAAasBAAH/AQABqwEAAf8BAAGzAQAB/wP7 - Af9YAAHCAZ4BgQH/AekB2gHGAf8B/gH6AfMB/wH9AfYB6AH/Af4B/AH3Af8DAAH/AwAB/wH+AfsB9AH/ - Af0B9wHqAf8B/AHxAdwB/wH9AfcB6gH/Af4B+wH0Af8DAAH/AwAB/wH9AfkB8wH/AfUB6gHWAf8B8wHt - AeMB/wHhAdEBvAH/AcIBngGBAf8BpgGIARIB/wGsAZkBgQH/AdIByAG3Af8B7gHkAdMB/wH9AfoB9AH/ - AwAB/wMAAf8B/QH5AfAB/wH7AfIB4gH/AfgB6gHPAf8B+wHyAeIB/wH9AfgB8AH/AwAB/wMAAf8B+wH3 - Ae8B/wHxAeQByQH/Ae0B4AHGAf8BxQGxAY8B/wGmAYgBEgH/EAABAwG3AQAB/wERAb0BDQH/AYEBvwES - Af8BgQHGAYEB/wGFAc0BggH/AQABqAEAAf8BAAGZAQAB/wEAAZkBAAH/AQABmQEAAf8BAAGpAQAB/wHk - AfQB4wH/XAAB1gHBAaYB/wHRAbMBigH/Af4B/QH6Af8B/QH3AesB/wH+AfoB8gH/Af4B/AH4Af8B/gH8 - AfcB/wH9AfgB7gH/AfwB8wHgAf8B/AHyAeAB/wH8AfIB4AH/Af0B9wHsAf8B/gH7AfUB/wH9AfoB9AH/ - AfsB9QHqAf8B9QHrAdkB/wH2AfQB7wH/Ac0BrwGFAf8B1gHBAaYB/wHGAbUBnwH/AZ0BgQEMAf8ByAG/ - AbAB/wHkAdwBzQH/AfsB9QHsAf8B/gH7AfUB/wH9AfoB9AH/AfsB9QHoAf8B+QHuAdcB/wH5Ae0B1gH/ - AfkB7QHWAf8B+wH0AeYB/wH9AfkB8gH/Af0B+QHxAf8B+QHyAeQB/wHyAeYBzwH/AesB4AHJAf8BpgGI - ARAB/wHGAbUBnwH/JQABlwEAAf8BAAGNAQAB/wEAAY0BAAH/AQABnwEAAf8B7AH3AewB/2QAAbUBhQEA - Af8B9gHwAecB/wH+AfsB9QH/Af0B+AHtAf8B/QH3AewB/wH9AfYB6QH/Af0B9QHnAf8B/AH1AeYB/wH8 - AfQB5QH/AfwB9AHkAf8B/AH0AeQB/wH8AfMB4wH/AfsB8gHhAf8B+AHvAd4B/wH3AfIB6QH/AfAB6QHe - Af8BtAGFAQAB/wgAAY0BgQEAAf8BugGuAZ0B/wHVAc0BwAH/AewB5QHYAf8B+QHyAeQB/wH7AfMB4wH/ - AfsB8gHhAf8B+wHxAd8B/wH6AfEB3QH/AfoB8AHdAf8B+gHwAdwB/wH6Ae8B2wH/AfkB7gHZAf8B9gHr - AdcB/wHwAeUB0QH/AdIBwwGqAf8BjQGBAQAB/yUAAZIBAAH/AQABjQEAAf8BAAGNAQAB/wEAAZ0BAAH/ - AeoB9gHqAf9oAAHRAbkBmQH/AcsBqgGBAf8B/gH9AfsB/wH+AfoB8wH/Af4B+AHvAf8B/gH4Ae4B/wH+ - AfcB7AH/Af0B9gHrAf8B/QH2AeoB/wH9AfYB6QH/Af0B9QHoAf8B/QH1AeYB/wH8AfMB5AH/AfoB8wHn - Af8B+gH4AfQB/wHIAaYBgQH/AdEBuQGZAf8IAAG/AasBkQH/AZwBgQEHAf8BxgG/AbIB/wHZAdMBxwH/ - Ae0B5wHbAf8B+AHyAeYB/wH7AfUB6AH/AfwB9QHnAf8B/AH0AeYB/wH8AfQB5AH/AfsB8wHjAf8B+wHz - AeEB/wH5AfAB3gH/AfIB6QHWAf8B3QHUAcAB/wGaAYEBAQH/Ab8BqwGRAf8gAAGdAdMBngH/AQABjQEA - Af8BAAGNAQAB/wEAAZwBAAH/AfEB+QHxAf9wAAHLAa4BhgH/AdUBugGWAf8B/gH9AfwB/wH+AfwB+AH/ - Af4B+QHxAf8B/gH4AfAB/wH+AfgB7wH/Af0B9wHuAf8B/QH3AewB/wH9AfYB6wH/Af0B9gHqAf8B/gH6 - AfMB/wH8AfoB9wH/AdUBugGWAf8BywGuAYYB/xAAAbUBnQGBAf8BowGKAYEB/wHGAcABswH/AdUBzwHD - Af8B5QHgAdQB/wHwAeoB3wH/AfYB8AHlAf8B+gH0AecB/wH7AfQB5wH/AfkB8gHkAf8B9AHrAdwB/wHp - AeABzwH/AdMBygG4Af8BnwGEARAB/wG1AZ0BgQH/KQABpgEAAf8BAAGnAQAB/wH0AfoB9AH/eAABywGu - AYYB/wHJAacBgQH/AfcB8gHqAf8C/gH8Af8B/gH8AfgB/wH+AfoB8wH/Af4B+AHwAf8B/QH6AfIB/wH+ - AfsB9gH/Af4B/QH6Af8B9wHxAegB/wHJAacBgQH/AcsBrgGGAf8YAAG1AZ0BgQH/AZsBgQEFAf8BvAGy - AaIB/wHJAcIBtwH/AdMBzQHCAf8B3AHWAcsB/wHiAdsB0AH/AeMB3AHQAf8B3QHVAcgB/wHQAcgBuQH/ - AbcBqgGVAf8BkwGBAQAB/wG1AZ0BgQH/tAAB0AG4AZcB/wG1AYUBAAH/AdIBtQGNAf8B6AHaAcYB/wH1 - Ae8B5QH/Av4B+wH/AfUB7gHlAf8B6AHZAcUB/wHSAbQBjQH/AbUBhQEAAf8B0AG4AZcB/yAAAb4BqQGP - Af8BjQGBAQAB/wGeAYMBEAH/Aa0BnAGEAf8BtgGqAZgB/wG7AbMBpQH/AbMBpgGSAf8BpgGUAYEB/wGW - AYEBBQH/AYwBgAEAAf8BvgGpAY8B/8AAAdUBwAGjAf8BwwGfAYEB/wG4AYwBAgH/AbEBgQEAAf8BuAGM - AQIB/wHDAZ8BgQH/AdUBwAGjAf8wAAHFAbQBnQH/AagBigGAAf8BlwGBAQAB/wGLARMBAAH/AZcBgQEA - Af8BqAGKAYAB/wHFAbQBnQH/yAADxQH/A6cB/wOWAf8DjAH/A5YB/wOnAf8DxQH/MAAB1QG/AaIB/wHC - AZ4BgQH/AbcBigEAAf8BsQGBAQAB/wG3AYoBAAH/AcIBngGBAf8B1QG/AaIB/zAAAcUBswGbAf8BpgGI - ARIB/wGVAYEBAAH/AYsBEwEAAf8BlQGBAQAB/wGmAYgBEgH/AcUBswGbAf8wAAPFAf8DpwH/A5YB/wOM - Af8DlgH/A6cB/wPFAf8oAAO+Af8DkAH/A7UB/wPQAf8D3wH/A+cB/wPeAf8DzgH/A7QB/wOQAf8DvgH/ - IAAB0QG3AZUB/wG0AYQBAAH/Ac4BrgGDAf8B4AHNAbIB/wHqAd8BzgH/Ae8B6QHcAf8B6QHfAc0B/wHe - AcwBsQH/AcwBrQGCAf8BtAGEAQAB/wHRAbcBlQH/IAABvQGpAY0B/wGMARQBAAH/AZwBgQEAAf8BswGO - AQAB/wHEAZ4BCwH/Ac0BqAESAf8ByQGiAQ4B/wG7AZUBBAH/AaYBgQEAAf8BjgGBAQAB/wG9AakBjQH/ - IAADvgH/A5AB/wO1Af8D0AH/A98B/wPnAf8D3gH/A84B/wO0Af8DkAH/A74B/xwAA7UB/wOsAf8D5AH/ - A+sB/wPdAf8DzwH/A8YB/wPNAf8D2gH/A+cB/wPgAf8DqgH/A7UB/xgAAcsBrgGGAf8ByAGkAYEB/wHv - AeUB1QH/AfQB7QHiAf8B8AHiAcgB/wHsAdUBrQH/AekBzwGfAf8B6gHUAawB/wHtAd8BxQH/Ae8B6QHd - Af8B6gHgAdAB/wHFAaIBgQH/AcsBrgGGAf8YAAG1AZ0BgQH/AZMBgQEAAf8BvQGZAQoB/wHRAasBgQH/ - AdMBrgGBAf8B0wGuAYEB/wHTAa0BgQH/AdIBrQGBAf8B0gGtAYEB/wHSAa0BgQH/AcsBpgEUAf8BoQGB - AQAB/wG1AZ0BgQH/GAADtQH/A6wB/wPkAf8D6wH/A90B/wPPAf8DxgH/A80B/wPaAf8D5wH/A+AB/wOq - Af8DtQH/FAADtQH/A7wB/wPvAf8D4AH/A8sB/wPLAf8DygH/A8oB/wPIAf8DxgH/A8YB/wPZAf8D5wH/ - A7gB/wO1Af8QAAHLAa4BhgH/AdQBtwGOAf8B+QHyAeYB/wH0AeUBygH/Ae8B1QGlAf8B7wHVAaUB/wHu - AdQBpQH/Ae0B0wGkAf8B6wHSAaMB/wHpAdABoQH/AekB0AGhAf8B7QHfAcQB/wHwAekB3gH/Ac8BsgGK - Af8BywGuAYYB/xAAAbUBnQGBAf8BlgGBAQAB/wHGAaQBgAH/AdgBtAGBAf8B2gG2AYEB/wHaAbYBgQH/ - AdkBtQGBAf8B2AG0AYEB/wHWAbMBgQH/AdUBsQGBAf8B1QGxAYEB/wHVAbEBgQH/AdUBsQGBAf8BrQGH - AQAB/wG1AZ0BgQH/EAADtQH/A7wB/wPvAf8D4AH/A8sB/wPLAf8DygH/A8oB/wPIAf8DxgH/A8YB/wPZ - Af8D5wH/A7gB/wO1Af8MAAO+Af8DrwH/A/IB/wPYAf8D0AH/A9AB/wPPAf8DzwH/A84B/wPNAf8DzAH/ - A8kB/wPIAf8D0AH/A+gB/wOrAf8DvgH/CAAB0AG4AZcB/wHLAacBgQH/AfsB9AHoAf8B9QHgAbkB/wHz - AdoBqgH/AfMB2gGqAf8B8gHZAaoB/wHyAdkBqgH/AfEB2AGpAf8B8AHXAagB/wHuAdUBpwH/AesB0wGl - Af8B6gHSAaQB/wHrAdcBsQH/AfAB6QHeAf8BxgGjAYEB/wHQAbgBlwH/CAABvgGpAY8B/wGOAYEBAAH/ - Ab8BngEUAf8B2wG4AYEB/wHgAbwBgQH/AeABvAGBAf8B4AG7AYEB/wHgAbsBgQH/Ad8BuwGBAf8B3gG6 - AYEB/wHcAbgBgQH/AdkBtgGBAf8B2AG1AYEB/wHYAbUBgQH/AdgBtQGBAf8BpAGBAQAB/wG+AakBjwH/ - CAADvgH/A68B/wPyAf8D2AH/A9AB/wPQAf8DzwH/A88B/wPOAf8DzQH/A8wB/wPJAf8DyAH/A9AB/wPo - Af8DqwH/A74B/wgAA5EB/wPqAf8D5gH/A9QB/wPUAf8D0wH/A9MB/wPTAf8D0gH/A9IB/wPRAf8DzgH/ - A8sB/wPKAf8D2gH/A98B/wOQAf8IAAG1AYUBAAH/AfYB7AHbAf8B+wHsAdEB/wH4Ad4BsAH/AfgB3gGw - Af8B9wHdAbAB/wH3Ad0BsAH/AfcB3QGwAf8B9gHcAa8B/wH1AdwBrgH/AfQB2wGuAf8B8QHYAasB/wHt - AdUBqQH/AewB1AGoAf8B7gHgAcYB/wHqAeAB0AH/AbQBhAEAAf8IAAGLARQBAAH/AaoBjAEJAf8B1QG0 - AYEB/wHlAcIBggH/AeYBwwGCAf8B5QHCAYIB/wHlAcIBggH/AeUBwgGCAf8B5AHCAYEB/wHjAcEBgQH/ - AeIBwAGBAf8B4AG+AYEB/wHcAbsBgQH/AdsBugGBAf8B2wG6AYEB/wHTAbEBgQH/AY4BgQEAAf8IAAOR - Af8D6gH/A+YB/wPUAf8D1AH/A9MB/wPTAf8D5QH/A/EB/wPkAf8D0QH/A84B/wPLAf8DygH/A9oB/wPf - Af8DkAH/BAADxwH/A7gB/wP2Af8D2gH/A+gB/wPzAf8D8wH/A+cB/wPXAf8D1gH/A9YB/wPmAf8D8gH/ - A/AB/wPiAf8DzAH/A+kB/wOyAf8DxwH/AdYBwQGmAf8B0QGxAYUB/wH+AfgB7gH/AfoB4wG5Af8B/AHu - AdUB/wH9AfYB6AH/Af0B9gHoAf8B/AHtAdMB/wH6AeEBtAH/AfkB4AGzAf8B+QHgAbMB/wH7AewB0gH/ - AfwB9AHnAf8B+wH0AeYB/wH1AeYBzgH/Ae0B1gGrAf8B8QHqAeAB/wHLAasBgQH/AdYBwQGmAf8BxgG1 - AZ8B/wGSAYEBAAH/AcQBqAGBAf8B4wHFAYwB/wHzAeEBvQH/AfgB7wHbAf8B+AHuAdsB/wHyAd8BugH/ - AeoByQGKAf8B6QHIAYkB/wHpAcgBiQH/AfEB3gG5Af8B9wHtAdoB/wH2AewB2gH/AewB2QG2Af8B3gG/ - AYMB/wHeAb8BgwH/AaoBhQEAAf8BxgG1AZ8B/wPHAf8DuAH/A/YB/wPaAf8D2QH/A9gB/wPXAf8D5wH/ - A/MB/wMAAf8D8gH/A+YB/wPUAf8D0AH/A80B/wPMAf8D6QH/A7IB/wPHAf8DpwH/A9oB/wPuAf8D3gH/ - A/QB/wMAAf8DAAH/A/MB/wPoAf8D2QH/A+gB/wPzAf8DAAH/AwAB/wPxAf8DzgH/A94B/wPRAf8DpgH/ - AcIBngGBAf8B6QHYAb8B/wH9AfIB3wH/AfwB5wHBAf8B/gH3AesB/wMAAf8DAAH/Af4B9gHpAf8B/QHu - AdUB/wH7AeMBuAH/Af0B7gHVAf8B/QH2AekB/wMAAf8DAAH/AfsB9AHnAf8B7gHXAa8B/wHwAeMBzAH/ - AeABzwG2Af8BwQGcAYEB/wGmAYgBEgH/AaEBhgEOAf8B0wG6AY0B/wHsAdEBngH/AfoB8QHhAf8DAAH/ - AwAB/wH5AfAB3QH/AfQB4gG+Af8B7QHNAZIB/wH0AeIBvgH/AfkB7wHdAf8DAAH/AwAB/wH3Ae0B3AH/ - AeEBwwGLAf8B4QHDAYsB/wHIAagBgQH/AaUBhwEQAf8DpwH/A9oB/wPuAf8D3gH/A90B/wPbAf8D6AH/ - A/MB/wMAAf8DAAH/AwAB/wPzAf8D5wH/A9UB/wPRAf8DzgH/A94B/wPRAf8DpgH/A5YB/wPuAf8D5wH/ - A+IB/wP1Af8DAAH/AwAB/wMAAf8D9AH/A+oB/wP0Af8DAAH/AwAB/wMAAf8D8gH/A9IB/wPWAf8D4AH/ - A5YB/wG3AYoBAAH/AfcB7gHhAf8B/QHuAdIB/wH9AeoByAH/Af4B+AHtAf8DAAH/AwAB/wMAAf8B/gH3 - AeoB/wH9AfAB1wH/Af4B9wHqAf8DAAH/AwAB/wMAAf8B/AH1AegB/wHxAdsBswH/Ae8B3QG8Af8B6wHh - AdIB/wG3AYoBAAH/AZUBgQEAAf8BrQGXAYEB/wHZAcMBmwH/AfEB2QGrAf8B+wHzAeQB/wMAAf8DAAH/ - AwAB/wH6AfEB3wH/AfUB5AHCAf8B+gHxAd8B/wMAAf8DAAH/AwAB/wH4Ae8B3gH/AeUByAGRAf8B4wHG - AZAB/wHaAbwBhgH/AZUBgQEAAf8DlgH/A+4B/wPnAf8D4gH/A+AB/wPsAf8D9AH/AwAB/wMAAf8DAAH/ - AwAB/wMAAf8D9AH/A+gB/wPVAf8D0gH/A9YB/wPgAf8DlgH/A48B/wP2Af8D5wH/A+UB/wPuAf8D9QH/ - AwAB/wMAAf8DAAH/A/QB/wMAAf8DAAH/AwAB/wP0Af8D6AH/A9UB/wPUAf8D5wH/A48B/wGzAYIBAAH/ - AfwB+AHwAf8B/gHtAdIB/wH9AewBzgH/Af4B8wHgAf8B/gH4Ae0B/wMAAf8DAAH/AwAB/wH+AfcB6wH/ - AwAB/wMAAf8DAAH/Af0B9gHqAf8B+wHtAdYB/wH0Ad4BtwH/AfEB3AG4Af8B7wHpAd8B/wGzAYIBAAH/ - AY4BgQEAAf8BtwGqAZQB/wHfAdIBugH/AfUB6AHPAf8B+wHyAeIB/wH9AfgB7wH/AwAB/wMAAf8DAAH/ - AfwB9wHtAf8DAAH/AwAB/wMAAf8B+wH2AewB/wH2AewB2QH/Ae0B3QG9Af8B6gHaAbsB/wHkAdMBswH/ - AY4BgQEAAf8DjwH/A/YB/wPnAf8D5QH/A+4B/wP1Af8DAAH/AwAB/wMAAf8D9AH/AwAB/wMAAf8DAAH/ - A/QB/wPoAf8D1QH/A9QB/wPnAf8DjwH/A5YB/wPxAf8D8wH/A/EB/wPvAf8D9QH/A/kB/wMAAf8DAAH/ - AwAB/wMAAf8DAAH/A/kB/wPyAf8D5gH/A+QB/wPkAf8D5QH/A5YB/wG3AYoBAAH/AfcB8AHmAf8B/QH2 - AekB/wH9AfQB5AH/Af0B8wHhAf8B/QH3AewB/wH+AfsB9AH/AwAB/wMAAf8DAAH/AwAB/wMAAf8B/gH6 - AfMB/wH8AfUB5wH/AfcB6wHVAf8B9AHoAdIB/wHxAegB1QH/AewB5AHZAf8BtwGKAQAB/wGVAYEBAAH/ - AbUBpwGRAf8B2gHPAbsB/wHzAegB0wH/AfkB7QHWAf8B+wHzAeQB/wH9AfgB7wH/AwAB/wMAAf8DAAH/ - AwAB/wMAAf8B/QH4Ae8B/wH5AfAB3gH/AfIB4wHGAf8B7wHhAcQB/wHsAd4BwQH/AdsBygGrAf8BlQGB - AQAB/wOWAf8D8QH/A/MB/wPxAf8D+gH/AwAB/wMAAf8DAAH/A/kB/wPzAf8D+QH/AwAB/wMAAf8DAAH/ - A/cB/wPkAf8D5AH/A+UB/wOWAf8DpwH/A94B/wP5Af8D8wH/A/IB/wPwAf8D9QH/A/kB/wMAAf8DAAH/ - AwAB/wP5Af8D9AH/A+sB/wPoAf8D5gH/A+sB/wPUAf8DpwH/AcIBngGBAf8B6QHaAcYB/wH+AfoB8wH/ - Af0B9gHoAf8B/QH1AeYB/wH9AfMB4gH/Af0B9wHsAf8B/gH7AfQB/wMAAf8DAAH/AwAB/wH+AfsB9AH/ - Af0B9wHqAf8B+gHvAdoB/wH3AewB2AH/AfUB6gHWAf8B8wHtAeMB/wHhAdEBvAH/AcIBngGBAf8BpgGI - ARIB/wGsAZkBgQH/AdIByAG3Af8B7gHkAdMB/wH5Ae8B3AH/AfkB7gHXAf8B+wH0AeUB/wH9AfkB8AH/ - AwAB/wMAAf8DAAH/Af0B+AHwAf8B+wHyAeIB/wH2AegBzQH/AfMB5QHLAf8B8QHkAckB/wHtAeABxgH/ - AcUBsQGPAf8BpgGIARIB/wOnAf8D3gH/A/kB/wPzAf8D+wH/AwAB/wMAAf8D+QH/A/QB/wPtAf8D9AH/ - A/kB/wMAAf8DAAH/A/gB/wPmAf8D6wH/A9QB/wOnAf8DxwH/A7sB/wP9Af8D9QH/A/QB/wPyAf8D8QH/ - A/UB/wP6Af8DAAH/A/oB/wP1Af8D7gH/A+wB/wPqAf8D5wH/A/MB/wO2Af8DxwH/AdYBwQGmAf8B0QGz - AYoB/wH+Af0B+gH/Af0B9wHrAf8B/QH2AeoB/wH9AfUB5wH/AfwB9AHkAf8B/QH4Ae4B/wH+AfsB9QH/ - AwAB/wH+AfsB9QH/Af0B9wHsAf8B/AHyAd8B/wH6AfAB3QH/AfgB7gHcAf8B9QHrAdkB/wH2AfQB7wH/ - Ac0BrwGFAf8B1gHBAaYB/wHGAbUBnwH/AZ0BgQEMAf8ByAG/AbAB/wHkAdwBzQH/AfcB7wHfAf8B+wHy - AeAB/wH6AfAB2wH/AfsB9QHoAf8B/QH6AfMB/wMAAf8B/QH5AfIB/wH7AfQB5gH/AfkB7QHVAf8B9wHr - AdMB/wH1AekB0gH/AfIB5gHPAf8B6wHgAckB/wGmAYgBEAH/AcYBtQGfAf8DxwH/A7sB/wP9Af8D9QH/ - A/kB/wP7Af8D+wH/A/UB/wPvAf8D7gH/A+4B/wP1Af8D+gH/A/kB/wPyAf8D5wH/A/MB/wO2Af8DxwH/ - BAADkQH/A/EB/wP6Af8D9QH/A/QB/wPzAf8D8gH/A/cB/wP7Af8D9gH/A/AB/wPvAf8D7gH/A+sB/wPw - Af8D6QH/A5EB/wgAAbUBhQEAAf8B9gHwAecB/wH+AfsB9QH/Af0B+AHtAf8B/QH3AewB/wH9AfYB6QH/ - Af0B9QHnAf8B/QH5AfAB/wH+AfwB9wH/Af0B+QHvAf8B/AH0AeQB/wH8AfMB4wH/AfsB8gHhAf8B+AHv - Ad4B/wH3AfIB6QH/AfAB6QHeAf8BtAGFAQAB/wgAAY0BgQEAAf8BugGuAZ0B/wHVAc0BwAH/AewB5QHY - Af8B+QHyAeQB/wH7AfMB4wH/AfsB8gHhAf8B/QH3AewB/wH9AfsB9AH/AfwB9gHrAf8B+gHwAdwB/wH6 - Ae8B2wH/AfkB7gHZAf8B9gHrAdcB/wHwAeUB0QH/AdIBwwGqAf8BjQGBAQAB/wgAA5EB/wPxAf8D+gH/ - A/UB/wP0Af8D8wH/A/IB/wPxAf8D8QH/A/AB/wPwAf8D7wH/A+4B/wPrAf8D8AH/A+kB/wORAf8IAAPA - Af8DswH/A/0B/wP4Af8D9gH/A/UB/wP0Af8D8wH/A/MB/wPyAf8D8gH/A/EB/wPvAf8D8AH/A/cB/wOv - Af8DwAH/CAAB0QG5AZkB/wHLAaoBgQH/Af4B/QH7Af8B/gH6AfMB/wH+AfgB7wH/Af4B+AHuAf8B/gH3 - AewB/wH9AfYB6wH/Af0B9gHqAf8B/QH2AekB/wH9AfUB6AH/Af0B9QHmAf8B/AHzAeQB/wH6AfMB5wH/ - AfoB+AH0Af8ByAGmAYEB/wHRAbkBmQH/CAABvwGrAZEB/wGcAYEBBwH/AcYBvwGyAf8B2QHTAccB/wHt - AecB2wH/AfgB8gHmAf8B+wH1AegB/wH8AfUB5wH/AfwB9AHmAf8B/AH0AeQB/wH7AfMB4wH/AfsB8wHh - Af8B+QHwAd4B/wHyAekB1gH/Ad0B1AHAAf8BmgGBAQEB/wG/AasBkQH/CAADwAH/A7MB/wP9Af8D+AH/ - A/YB/wP1Af8D9AH/A/MB/wPzAf8D8gH/A/IB/wPxAf8D7wH/A/AB/wP3Af8DrwH/A8AB/wwAA7UB/wPB - Af8D/QH/A/oB/wP2Af8D9gH/A/UB/wP0Af8D9AH/A/MB/wPyAf8D9wH/A/kB/wPAAf8DtQH/EAABywGu - AYYB/wHVAboBlgH/Af4B/QH8Af8B/gH8AfgB/wH+AfkB8QH/Af4B+AHwAf8B/gH4Ae8B/wH9AfcB7gH/ - Af0B9wHsAf8B/QH2AesB/wH9AfYB6gH/Af4B+gHzAf8B/AH6AfcB/wHVAboBlgH/AcsBrgGGAf8QAAG1 - AZ0BgQH/AaMBigGBAf8BxgHAAbMB/wHVAc8BwwH/AeUB4AHUAf8B8AHqAd8B/wH2AfAB5QH/AfoB9AHn - Af8B+wH0AecB/wH5AfIB5AH/AfQB6wHcAf8B6QHgAc8B/wHTAcoBuAH/AZ8BhAEQAf8BtQGdAYEB/xAA - A7UB/wPBAf8D/QH/A/oB/wP2Af8D9gH/A/UB/wP0Af8D9AH/A/MB/wPyAf8D9wH/A/kB/wPAAf8DtQH/ - FAADtQH/A7AB/wPyAf8D/QH/A/sB/wP4Af8D9gH/A/cB/wP5Af8D/AH/A/EB/wOvAf8DtQH/GAABywGu - AYYB/wHJAacBgQH/AfcB8gHqAf8C/gH8Af8B/gH8AfgB/wH+AfoB8wH/Af4B+AHwAf8B/QH6AfIB/wH+ - AfsB9gH/Af4B/QH6Af8B9wHxAegB/wHJAacBgQH/AcsBrgGGAf8YAAG1AZ0BgQH/AZsBgQEFAf8BvAGy - AaIB/wHJAcIBtwH/AdMBzQHCAf8B3AHWAcsB/wHiAdsB0AH/AeMB3AHQAf8B3QHVAcgB/wHQAcgBuQH/ - AbcBqgGVAf8BkwGBAQAB/wG1AZ0BgQH/GAADtQH/A7AB/wPyAf8D/QH/A/sB/wP4Af8D9gH/A/cB/wP5 - Af8D/AH/A/EB/wOvAf8DtQH/HAADvgH/A5EB/wO8Af8D3QH/A/AB/wP9Af8D8AH/A90B/wO7Af8DkQH/ - A74B/yAAAdABuAGXAf8BtQGFAQAB/wHSAbUBjQH/AegB2gHGAf8B9QHvAeUB/wL+AfsB/wH1Ae4B5QH/ - AegB2QHFAf8B0gG0AY0B/wG1AYUBAAH/AdABuAGXAf8gAAG+AakBjwH/AY0BgQEAAf8BngGDARAB/wGt - AZwBhAH/AbYBqgGYAf8BuwGzAaUB/wGzAaYBkgH/AaYBlAGBAf8BlgGBAQUB/wGMAYABAAH/Ab4BqQGP - Af8gAAO+Af8DkQH/A7wB/wPdAf8D8AH/A/0B/wPwAf8D3QH/A7sB/wORAf8DvgH/KAADxQH/A6gB/wOY - Af8DjAH/A5gB/wOoAf8DxQH/MAAB1QHAAaMB/wHDAZ8BgQH/AbgBjAECAf8BsQGBAQAB/wG4AYwBAgH/ - AcMBnwGBAf8B1QHAAaMB/zAAAcUBtAGdAf8BqAGKAYAB/wGXAYEBAAH/AYsBEwEAAf8BlwGBAQAB/wGo - AYoBgAH/AcUBtAGdAf8wAAPFAf8DqAH/A5gB/wOMAf8DmAH/A6gB/wPFAf8YAAFCAU0BPgcAAT4DAAEo - AwABTAMAASYDAAEBAQABAQUAAcgBARYAA/8BAAH8AQcB/wGAA/8BgAQAAfABAQH+AQABPwL/AYAEAAHg - AQAB/AEAAR8C/wGABAABwAEAAXgBAAEPAv8BgAQAAYABAAEwAQABBwH8AX8BgAQAAYABAAEwAQABBwH4 - AT8BgAgAAQMB/AEfAYAIAAEDAf4BDwGACAABAwHAAQcBgAgAAQMBgAEDAYAIAAEDAYABAwGACAABAwHA - AQcBgAgAAQMB/gEPAYAEAAGAAQABMAEAAQcB/AEfAYAEAAGAAQABMAEAAQcB+AE/AYAEAAHAAQABeAEA - AQ8B/AF/AYAEAAHgAQAB/AEAAR8C/wGABAAB8AEBAf4BAAE/Av8BgAQAAfwBBwH/AYAD/wGABAAB/AEH - Af8BgAH/AfABHwH+AQMB8AIAAfABAQH+AQABPwHAAQcB+AEAAfACAAHgAQAB/AEAAR8BgAEDAfABAAFw - AgABwAEAAXgBAAEPAQABAQHgAQABMAIAAYABAAEwAQABBgIAAcABAAEQAgABgAEAATABAAEGAgABwAEA - ARBWAAGAAQABMAEAAQYCAAHAAQABEAIAAYABAAEwAQABBgIAAcABAAEQAgABwAEAAXgBAAEPAQABAQHg - AQABMAIAAeABAAH8AQABHwGAAQMB8AEAAXACAAHwAQEB/gEAAT8BwAEHAfgBAAHwAgAB/AEHAf8BgAH/ - AfABHwH+AQMB8AIACw== - - - - 120, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD0 + MQAAAk1TRnQBSQFMAgEBBwEAAVwBAwFcAQMBEwEAARMBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFM + AwABJgMAAQEBAAEgBQABIAEtKgAB1QG/AaIB/wHCAZ4BgQH/AbcBigEAAf8BsQGBAQAB/wG3AYoBAAH/ + AcIBngGBAf8B1QG/AaIB/zAAAcUBswGbAf8BpgGIARIB/wGVAYEBAAH/AYsBEwEAAf8BlQGBAQAB/wGm + AYgBEgH/AcUBswGbAf/AAAHRAbcBlQH/AbQBhAEAAf8BzgGuAYMB/wHgAc0BsgH/AeoB3wHOAf8B7wHp + AdwB/wHpAd8BzQH/Ad4BzAGxAf8BzAGtAYIB/wG0AYQBAAH/AdEBtwGVAf8gAAG9AakBjQH/AYwBFAEA + Af8BnAGBAQAB/wGzAY4BAAH/AcQBngELAf8BzQGoARIB/wHJAaIBDgH/AbsBlQEEAf8BpgGBAQAB/wGO + AYEBAAH/Ab0BqQGNAf+0AAHLAa4BhgH/AcgBpAGBAf8B7wHlAdUB/wH0Ae0B4gH/AfAB4gHIAf8B7AHV + Aa0B/wHpAc8BnwH/AeoB1AGsAf8B7QHfAcUB/wHvAekB3QH/AeoB4AHQAf8BxQGiAYEB/wHLAa4BhgH/ + GAABtQGdAYEB/wGTAYEBAAH/Ab0BmQEKAf8B0QGrAYEB/wHTAa4BgQH/AdMBrgGBAf8B0wGtAYEB/wHS + Aa0BgQH/AdIBrQGBAf8B0gGtAYEB/wHLAaYBFAH/AaEBgQEAAf8BtQGdAYEB/6wAAcsBrgGGAf8B1AG3 + AY4B/wH5AfIB5gH/AfQB5QHKAf8B7wHVAaUB/wHvAdUBpQH/Ae4B1AGlAf8B7QHTAaQB/wHrAdIBowH/ + AekB0AGhAf8B6QHQAaEB/wHtAd8BxAH/AfAB6QHeAf8BzwGyAYoB/wHLAa4BhgH/EAABtQGdAYEB/wGW + AYEBAAH/AcYBpAGAAf8B2AG0AYEB/wHaAbYBgQH/AdoBtgGBAf8B2QG1AYEB/wHYAbQBgQH/AdYBswGB + Af8B1QGxAYEB/wHVAbEBgQH/AdUBsQGBAf8B1QGxAYEB/wGtAYcBAAH/AbUBnQGBAf+kAAHQAbgBlwH/ + AcsBpwGBAf8B+wH0AegB/wH1AeABuQH/AfMB2gGqAf8B8wHaAaoB/wHyAdkBqgH/AfIB2QGqAf8B8QHY + AakB/wHwAdcBqAH/Ae4B1QGnAf8B6wHTAaUB/wHqAdIBpAH/AesB1wGxAf8B8AHpAd4B/wHGAaMBgQH/ + AdABuAGXAf8IAAG+AakBjwH/AY4BgQEAAf8BvwGeARQB/wHbAbgBgQH/AeABvAGBAf8B4AG8AYEB/wHg + AbsBgQH/AeABuwGBAf8B3wG7AYEB/wHeAboBgQH/AdwBuAGBAf8B2QG2AYEB/wHYAbUBgQH/AdgBtQGB + Af8B2AG1AYEB/wGkAYEBAAH/Ab4BqQGPAf8kAAGBAeMBAAH/AYEB5AEAAf8B8AH8AewB/3AAAbUBhQEA + Af8B9gHsAdsB/wH7AewB0QH/AfgB3gGwAf8B+AHeAbAB/wH3Ad0BsAH/AfcB3QGwAf8B+wHrAdAB/wH8 + AfQB5gH/AfkB6gHPAf8B9AHbAa4B/wHxAdgBqwH/Ae0B1QGpAf8B7AHUAagB/wHuAeABxgH/AeoB4AHQ + Af8BtAGEAQAB/wgAAYsBFAEAAf8BqgGMAQkB/wHVAbQBgQH/AeUBwgGCAf8B5gHDAYIB/wHlAcIBggH/ + AeUBwgGCAf8B8AHbAbUB/wH3AewB2AH/Ae4B2gG0Af8B4gHAAYEB/wHgAb4BgQH/AdwBuwGBAf8B2wG6 + AYEB/wHbAboBgQH/AdMBsQGBAf8BjgGBAQAB/yAAAbIB8QGcAf8BAAHbAQAB/wEAAdsBAAH/AQcB4AEA + Af8B8gH9Ae4B/2gAAdYBwQGmAf8B0QGxAYUB/wH+AfgB7gH/AfoB4wG5Af8B+gHiAbgB/wH6AeIBtQH/ + AfoB4QG0Af8B/AHtAdMB/wH9AfYB6AH/AwAB/wH9AfUB5wH/AfsB7AHSAf8B9gHdAbEB/wHyAdoBrgH/ + Ae4B1gGsAf8B7QHWAasB/wHxAeoB4AH/AcsBqwGBAf8B1gHBAaYB/wHGAbUBnwH/AZIBgQEAAf8BxAGo + AYEB/wHjAcUBjAH/AesBzAGQAf8B6gHKAYwB/wHqAckBigH/AfIB3wG6Af8B+AHuAdsB/wMAAf8B+AHu + AdoB/wHxAd4BuQH/AeYBxgGIAf8B4wHDAYYB/wHfAcABhAH/Ad4BvwGDAf8B3gG/AYMB/wGqAYUBAAH/ + AcYBtQGfAf8hAAHeAQAB/wEAAdsBAAH/AQAB2wEAAf8BCwHhAQAB/wHvAfwB6wH/ZAABwgGeAYEB/wHp + AdgBvwH/Af0B8gHfAf8B/AHnAcEB/wH7AeYBwAH/AfsB5QG8Af8B/QHuAdUB/wH+AfYB6QH/AwAB/wMA + Af8DAAH/Af0B9gHpAf8B+wHtAdQB/wH2Ad8BtAH/AfIB2wGyAf8B7gHXAa8B/wHwAeMBzAH/AeABzwG2 + Af8BwQGcAYEB/wGmAYgBEgH/AaEBhgEOAf8B0wG6AY0B/wHsAdEBngH/Ae8B0gGeAf8B7gHQAZgB/wH0 + AeIBvwH/AfkB8AHdAf8DAAH/AwAB/wMAAf8B+QHvAd0B/wHzAeABvgH/AegByQGPAf8B5QHGAY0B/wHh + AcMBiwH/AeEBwwGLAf8ByAGoAYEB/wGlAYcBEAH/JQAB1wEAAf8BAAHTAQAB/wEAAdMBAAH/AQYB2gEA + Af8B8wH8AfAB/2AAAbcBigEAAf8B9wHuAeEB/wH9Ae4B0gH/Af0B6gHIAf8B/AHpAcUB/wH9AfEB2QH/ + Af4B9wHqAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wH+AfcB6gH/AfsB7QHVAf8B9QHfAbYB/wHxAdsBswH/ + Ae8B3QG8Af8B6wHhAdIB/wG3AYoBAAH/AZUBgQEAAf8BrQGXAYEB/wHZAcMBmwH/AfEB2QGrAf8B8QHY + AacB/wH2AeYBxwH/AfoB8QHgAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wH6AfAB3wH/AfMB4gHAAf8B6AHL + AZQB/wHlAcgBkQH/AeMBxgGQAf8B2gG8AYYB/wGVAYEBAAH/EAABgQHZAQEB/wGBAd0BEgH/AYEB3gGB + Af8BjAHhAYEB/wGYAeQBgwH/AQAB0AEAAf8BAAHIAQAB/wEAAcgBAAH/AQAByAEAAf8BAQHSAQAB/wHu + AfsB6wH/XAABswGCAQAB/wH8AfgB8AH/Af4B7QHSAf8B/QHsAc4B/wH+AfMB4AH/Af4B+AHtAf8DAAH/ + AwAB/wMAAf8B/gH3AesB/wMAAf8DAAH/AwAB/wH9AfYB6gH/AfsB7QHWAf8B9AHeAbcB/wHxAdwBuAH/ + Ae8B6QHfAf8BswGCAQAB/wGOAYEBAAH/AbcBqgGUAf8B3wHSAboB/wH1AegBzwH/AfsB8gHiAf8B/QH4 + Ae8B/wMAAf8DAAH/AwAB/wH8AfcB7QH/AwAB/wMAAf8DAAH/AfsB9gHsAf8B9gHsAdkB/wHtAd0BvQH/ + AeoB2gG7Af8B5AHTAbMB/wGOAYEBAAH/DQABuwEAAf8BAAG7AQAB/wEAAbsBAAH/AQABuwEAAf8BAAG7 + AQAB/wEAAbsBAAH/AQABuwEAAf8BAAG7AQAB/wEAAbsBAAH/AQABuwEAAf8BAAG7AQAB/wEAAcEBAAH/ + A/sB/1gAAbcBigEAAf8B9wHwAeYB/wH9AfYB6QH/Af0B9AHkAf8B/gH7AfYB/wMAAf8DAAH/AwAB/wH+ + AfoB8wH/Af0B9gHoAf8B/gH6AfMB/wMAAf8DAAH/AwAB/wH9AfkB8gH/AfQB6AHSAf8B8QHoAdUB/wHs + AeQB2QH/AbcBigEAAf8BlQGBAQAB/wG1AacBkQH/AdoBzwG7Af8B8wHoAdMB/wH9AfkB8gH/AwAB/wMA + Af8DAAH/Af0B+AHvAf8B+wHxAeAB/wH9AfgB7wH/AwAB/wMAAf8DAAH/AfsB9gHtAf8B7wHhAcQB/wHs + Ad4BwQH/AdsBygGrAf8BlQGBAQAB/w0AAasBAAH/AQABqwEAAf8BAAGrAQAB/wEAAasBAAH/AQABqwEA + Af8BAAGrAQAB/wEAAasBAAH/AQABqwEAAf8BAAGrAQAB/wEAAasBAAH/AQABqwEAAf8BAAGzAQAB/wP7 + Af9YAAHCAZ4BgQH/AekB2gHGAf8B/gH6AfMB/wH9AfYB6AH/Af4B/AH3Af8DAAH/AwAB/wH+AfsB9AH/ + Af0B9wHqAf8B/AHxAdwB/wH9AfcB6gH/Af4B+wH0Af8DAAH/AwAB/wH9AfkB8wH/AfUB6gHWAf8B8wHt + AeMB/wHhAdEBvAH/AcIBngGBAf8BpgGIARIB/wGsAZkBgQH/AdIByAG3Af8B7gHkAdMB/wH9AfoB9AH/ + AwAB/wMAAf8B/QH5AfAB/wH7AfIB4gH/AfgB6gHPAf8B+wHyAeIB/wH9AfgB8AH/AwAB/wMAAf8B+wH3 + Ae8B/wHxAeQByQH/Ae0B4AHGAf8BxQGxAY8B/wGmAYgBEgH/EAABAwG3AQAB/wERAb0BDQH/AYEBvwES + Af8BgQHGAYEB/wGFAc0BggH/AQABqAEAAf8BAAGZAQAB/wEAAZkBAAH/AQABmQEAAf8BAAGpAQAB/wHk + AfQB4wH/XAAB1gHBAaYB/wHRAbMBigH/Af4B/QH6Af8B/QH3AesB/wH+AfoB8gH/Af4B/AH4Af8B/gH8 + AfcB/wH9AfgB7gH/AfwB8wHgAf8B/AHyAeAB/wH8AfIB4AH/Af0B9wHsAf8B/gH7AfUB/wH9AfoB9AH/ + AfsB9QHqAf8B9QHrAdkB/wH2AfQB7wH/Ac0BrwGFAf8B1gHBAaYB/wHGAbUBnwH/AZ0BgQEMAf8ByAG/ + AbAB/wHkAdwBzQH/AfsB9QHsAf8B/gH7AfUB/wH9AfoB9AH/AfsB9QHoAf8B+QHuAdcB/wH5Ae0B1gH/ + AfkB7QHWAf8B+wH0AeYB/wH9AfkB8gH/Af0B+QHxAf8B+QHyAeQB/wHyAeYBzwH/AesB4AHJAf8BpgGI + ARAB/wHGAbUBnwH/JQABlwEAAf8BAAGNAQAB/wEAAY0BAAH/AQABnwEAAf8B7AH3AewB/2QAAbUBhQEA + Af8B9gHwAecB/wH+AfsB9QH/Af0B+AHtAf8B/QH3AewB/wH9AfYB6QH/Af0B9QHnAf8B/AH1AeYB/wH8 + AfQB5QH/AfwB9AHkAf8B/AH0AeQB/wH8AfMB4wH/AfsB8gHhAf8B+AHvAd4B/wH3AfIB6QH/AfAB6QHe + Af8BtAGFAQAB/wgAAY0BgQEAAf8BugGuAZ0B/wHVAc0BwAH/AewB5QHYAf8B+QHyAeQB/wH7AfMB4wH/ + AfsB8gHhAf8B+wHxAd8B/wH6AfEB3QH/AfoB8AHdAf8B+gHwAdwB/wH6Ae8B2wH/AfkB7gHZAf8B9gHr + AdcB/wHwAeUB0QH/AdIBwwGqAf8BjQGBAQAB/yUAAZIBAAH/AQABjQEAAf8BAAGNAQAB/wEAAZ0BAAH/ + AeoB9gHqAf9oAAHRAbkBmQH/AcsBqgGBAf8B/gH9AfsB/wH+AfoB8wH/Af4B+AHvAf8B/gH4Ae4B/wH+ + AfcB7AH/Af0B9gHrAf8B/QH2AeoB/wH9AfYB6QH/Af0B9QHoAf8B/QH1AeYB/wH8AfMB5AH/AfoB8wHn + Af8B+gH4AfQB/wHIAaYBgQH/AdEBuQGZAf8IAAG/AasBkQH/AZwBgQEHAf8BxgG/AbIB/wHZAdMBxwH/ + Ae0B5wHbAf8B+AHyAeYB/wH7AfUB6AH/AfwB9QHnAf8B/AH0AeYB/wH8AfQB5AH/AfsB8wHjAf8B+wHz + AeEB/wH5AfAB3gH/AfIB6QHWAf8B3QHUAcAB/wGaAYEBAQH/Ab8BqwGRAf8gAAGdAdMBngH/AQABjQEA + Af8BAAGNAQAB/wEAAZwBAAH/AfEB+QHxAf9wAAHLAa4BhgH/AdUBugGWAf8B/gH9AfwB/wH+AfwB+AH/ + Af4B+QHxAf8B/gH4AfAB/wH+AfgB7wH/Af0B9wHuAf8B/QH3AewB/wH9AfYB6wH/Af0B9gHqAf8B/gH6 + AfMB/wH8AfoB9wH/AdUBugGWAf8BywGuAYYB/xAAAbUBnQGBAf8BowGKAYEB/wHGAcABswH/AdUBzwHD + Af8B5QHgAdQB/wHwAeoB3wH/AfYB8AHlAf8B+gH0AecB/wH7AfQB5wH/AfkB8gHkAf8B9AHrAdwB/wHp + AeABzwH/AdMBygG4Af8BnwGEARAB/wG1AZ0BgQH/KQABpgEAAf8BAAGnAQAB/wH0AfoB9AH/eAABywGu + AYYB/wHJAacBgQH/AfcB8gHqAf8C/gH8Af8B/gH8AfgB/wH+AfoB8wH/Af4B+AHwAf8B/QH6AfIB/wH+ + AfsB9gH/Af4B/QH6Af8B9wHxAegB/wHJAacBgQH/AcsBrgGGAf8YAAG1AZ0BgQH/AZsBgQEFAf8BvAGy + AaIB/wHJAcIBtwH/AdMBzQHCAf8B3AHWAcsB/wHiAdsB0AH/AeMB3AHQAf8B3QHVAcgB/wHQAcgBuQH/ + AbcBqgGVAf8BkwGBAQAB/wG1AZ0BgQH/tAAB0AG4AZcB/wG1AYUBAAH/AdIBtQGNAf8B6AHaAcYB/wH1 + Ae8B5QH/Av4B+wH/AfUB7gHlAf8B6AHZAcUB/wHSAbQBjQH/AbUBhQEAAf8B0AG4AZcB/yAAAb4BqQGP + Af8BjQGBAQAB/wGeAYMBEAH/Aa0BnAGEAf8BtgGqAZgB/wG7AbMBpQH/AbMBpgGSAf8BpgGUAYEB/wGW + AYEBBQH/AYwBgAEAAf8BvgGpAY8B/8AAAdUBwAGjAf8BwwGfAYEB/wG4AYwBAgH/AbEBgQEAAf8BuAGM + AQIB/wHDAZ8BgQH/AdUBwAGjAf8wAAHFAbQBnQH/AagBigGAAf8BlwGBAQAB/wGLARMBAAH/AZcBgQEA + Af8BqAGKAYAB/wHFAbQBnQH/yAADxQH/A6cB/wOWAf8DjAH/A5YB/wOnAf8DxQH/MAAB1QG/AaIB/wHC + AZ4BgQH/AbcBigEAAf8BsQGBAQAB/wG3AYoBAAH/AcIBngGBAf8B1QG/AaIB/zAAAcUBswGbAf8BpgGI + ARIB/wGVAYEBAAH/AYsBEwEAAf8BlQGBAQAB/wGmAYgBEgH/AcUBswGbAf8wAAPFAf8DpwH/A5YB/wOM + Af8DlgH/A6cB/wPFAf8oAAO+Af8DkAH/A7UB/wPQAf8D3wH/A+cB/wPeAf8DzgH/A7QB/wOQAf8DvgH/ + IAAB0QG3AZUB/wG0AYQBAAH/Ac4BrgGDAf8B4AHNAbIB/wHqAd8BzgH/Ae8B6QHcAf8B6QHfAc0B/wHe + AcwBsQH/AcwBrQGCAf8BtAGEAQAB/wHRAbcBlQH/IAABvQGpAY0B/wGMARQBAAH/AZwBgQEAAf8BswGO + AQAB/wHEAZ4BCwH/Ac0BqAESAf8ByQGiAQ4B/wG7AZUBBAH/AaYBgQEAAf8BjgGBAQAB/wG9AakBjQH/ + IAADvgH/A5AB/wO1Af8D0AH/A98B/wPnAf8D3gH/A84B/wO0Af8DkAH/A74B/xwAA7UB/wOsAf8D5AH/ + A+sB/wPdAf8DzwH/A8YB/wPNAf8D2gH/A+cB/wPgAf8DqgH/A7UB/xgAAcsBrgGGAf8ByAGkAYEB/wHv + AeUB1QH/AfQB7QHiAf8B8AHiAcgB/wHsAdUBrQH/AekBzwGfAf8B6gHUAawB/wHtAd8BxQH/Ae8B6QHd + Af8B6gHgAdAB/wHFAaIBgQH/AcsBrgGGAf8YAAG1AZ0BgQH/AZMBgQEAAf8BvQGZAQoB/wHRAasBgQH/ + AdMBrgGBAf8B0wGuAYEB/wHTAa0BgQH/AdIBrQGBAf8B0gGtAYEB/wHSAa0BgQH/AcsBpgEUAf8BoQGB + AQAB/wG1AZ0BgQH/GAADtQH/A6wB/wPkAf8D6wH/A90B/wPPAf8DxgH/A80B/wPaAf8D5wH/A+AB/wOq + Af8DtQH/FAADtQH/A7wB/wPvAf8D4AH/A8sB/wPLAf8DygH/A8oB/wPIAf8DxgH/A8YB/wPZAf8D5wH/ + A7gB/wO1Af8QAAHLAa4BhgH/AdQBtwGOAf8B+QHyAeYB/wH0AeUBygH/Ae8B1QGlAf8B7wHVAaUB/wHu + AdQBpQH/Ae0B0wGkAf8B6wHSAaMB/wHpAdABoQH/AekB0AGhAf8B7QHfAcQB/wHwAekB3gH/Ac8BsgGK + Af8BywGuAYYB/xAAAbUBnQGBAf8BlgGBAQAB/wHGAaQBgAH/AdgBtAGBAf8B2gG2AYEB/wHaAbYBgQH/ + AdkBtQGBAf8B2AG0AYEB/wHWAbMBgQH/AdUBsQGBAf8B1QGxAYEB/wHVAbEBgQH/AdUBsQGBAf8BrQGH + AQAB/wG1AZ0BgQH/EAADtQH/A7wB/wPvAf8D4AH/A8sB/wPLAf8DygH/A8oB/wPIAf8DxgH/A8YB/wPZ + Af8D5wH/A7gB/wO1Af8MAAO+Af8DrwH/A/IB/wPYAf8D0AH/A9AB/wPPAf8DzwH/A84B/wPNAf8DzAH/ + A8kB/wPIAf8D0AH/A+gB/wOrAf8DvgH/CAAB0AG4AZcB/wHLAacBgQH/AfsB9AHoAf8B9QHgAbkB/wHz + AdoBqgH/AfMB2gGqAf8B8gHZAaoB/wHyAdkBqgH/AfEB2AGpAf8B8AHXAagB/wHuAdUBpwH/AesB0wGl + Af8B6gHSAaQB/wHrAdcBsQH/AfAB6QHeAf8BxgGjAYEB/wHQAbgBlwH/CAABvgGpAY8B/wGOAYEBAAH/ + Ab8BngEUAf8B2wG4AYEB/wHgAbwBgQH/AeABvAGBAf8B4AG7AYEB/wHgAbsBgQH/Ad8BuwGBAf8B3gG6 + AYEB/wHcAbgBgQH/AdkBtgGBAf8B2AG1AYEB/wHYAbUBgQH/AdgBtQGBAf8BpAGBAQAB/wG+AakBjwH/ + CAADvgH/A68B/wPyAf8D2AH/A9AB/wPQAf8DzwH/A88B/wPOAf8DzQH/A8wB/wPJAf8DyAH/A9AB/wPo + Af8DqwH/A74B/wgAA5EB/wPqAf8D5gH/A9QB/wPUAf8D0wH/A9MB/wPTAf8D0gH/A9IB/wPRAf8DzgH/ + A8sB/wPKAf8D2gH/A98B/wOQAf8IAAG1AYUBAAH/AfYB7AHbAf8B+wHsAdEB/wH4Ad4BsAH/AfgB3gGw + Af8B9wHdAbAB/wH3Ad0BsAH/AfcB3QGwAf8B9gHcAa8B/wH1AdwBrgH/AfQB2wGuAf8B8QHYAasB/wHt + AdUBqQH/AewB1AGoAf8B7gHgAcYB/wHqAeAB0AH/AbQBhAEAAf8IAAGLARQBAAH/AaoBjAEJAf8B1QG0 + AYEB/wHlAcIBggH/AeYBwwGCAf8B5QHCAYIB/wHlAcIBggH/AeUBwgGCAf8B5AHCAYEB/wHjAcEBgQH/ + AeIBwAGBAf8B4AG+AYEB/wHcAbsBgQH/AdsBugGBAf8B2wG6AYEB/wHTAbEBgQH/AY4BgQEAAf8IAAOR + Af8D6gH/A+YB/wPUAf8D1AH/A9MB/wPTAf8D5QH/A/EB/wPkAf8D0QH/A84B/wPLAf8DygH/A9oB/wPf + Af8DkAH/BAADxwH/A7gB/wP2Af8D2gH/A+gB/wPzAf8D8wH/A+cB/wPXAf8D1gH/A9YB/wPmAf8D8gH/ + A/AB/wPiAf8DzAH/A+kB/wOyAf8DxwH/AdYBwQGmAf8B0QGxAYUB/wH+AfgB7gH/AfoB4wG5Af8B/AHu + AdUB/wH9AfYB6AH/Af0B9gHoAf8B/AHtAdMB/wH6AeEBtAH/AfkB4AGzAf8B+QHgAbMB/wH7AewB0gH/ + AfwB9AHnAf8B+wH0AeYB/wH1AeYBzgH/Ae0B1gGrAf8B8QHqAeAB/wHLAasBgQH/AdYBwQGmAf8BxgG1 + AZ8B/wGSAYEBAAH/AcQBqAGBAf8B4wHFAYwB/wHzAeEBvQH/AfgB7wHbAf8B+AHuAdsB/wHyAd8BugH/ + AeoByQGKAf8B6QHIAYkB/wHpAcgBiQH/AfEB3gG5Af8B9wHtAdoB/wH2AewB2gH/AewB2QG2Af8B3gG/ + AYMB/wHeAb8BgwH/AaoBhQEAAf8BxgG1AZ8B/wPHAf8DuAH/A/YB/wPaAf8D2QH/A9gB/wPXAf8D5wH/ + A/MB/wMAAf8D8gH/A+YB/wPUAf8D0AH/A80B/wPMAf8D6QH/A7IB/wPHAf8DpwH/A9oB/wPuAf8D3gH/ + A/QB/wMAAf8DAAH/A/MB/wPoAf8D2QH/A+gB/wPzAf8DAAH/AwAB/wPxAf8DzgH/A94B/wPRAf8DpgH/ + AcIBngGBAf8B6QHYAb8B/wH9AfIB3wH/AfwB5wHBAf8B/gH3AesB/wMAAf8DAAH/Af4B9gHpAf8B/QHu + AdUB/wH7AeMBuAH/Af0B7gHVAf8B/QH2AekB/wMAAf8DAAH/AfsB9AHnAf8B7gHXAa8B/wHwAeMBzAH/ + AeABzwG2Af8BwQGcAYEB/wGmAYgBEgH/AaEBhgEOAf8B0wG6AY0B/wHsAdEBngH/AfoB8QHhAf8DAAH/ + AwAB/wH5AfAB3QH/AfQB4gG+Af8B7QHNAZIB/wH0AeIBvgH/AfkB7wHdAf8DAAH/AwAB/wH3Ae0B3AH/ + AeEBwwGLAf8B4QHDAYsB/wHIAagBgQH/AaUBhwEQAf8DpwH/A9oB/wPuAf8D3gH/A90B/wPbAf8D6AH/ + A/MB/wMAAf8DAAH/AwAB/wPzAf8D5wH/A9UB/wPRAf8DzgH/A94B/wPRAf8DpgH/A5YB/wPuAf8D5wH/ + A+IB/wP1Af8DAAH/AwAB/wMAAf8D9AH/A+oB/wP0Af8DAAH/AwAB/wMAAf8D8gH/A9IB/wPWAf8D4AH/ + A5YB/wG3AYoBAAH/AfcB7gHhAf8B/QHuAdIB/wH9AeoByAH/Af4B+AHtAf8DAAH/AwAB/wMAAf8B/gH3 + AeoB/wH9AfAB1wH/Af4B9wHqAf8DAAH/AwAB/wMAAf8B/AH1AegB/wHxAdsBswH/Ae8B3QG8Af8B6wHh + AdIB/wG3AYoBAAH/AZUBgQEAAf8BrQGXAYEB/wHZAcMBmwH/AfEB2QGrAf8B+wHzAeQB/wMAAf8DAAH/ + AwAB/wH6AfEB3wH/AfUB5AHCAf8B+gHxAd8B/wMAAf8DAAH/AwAB/wH4Ae8B3gH/AeUByAGRAf8B4wHG + AZAB/wHaAbwBhgH/AZUBgQEAAf8DlgH/A+4B/wPnAf8D4gH/A+AB/wPsAf8D9AH/AwAB/wMAAf8DAAH/ + AwAB/wMAAf8D9AH/A+gB/wPVAf8D0gH/A9YB/wPgAf8DlgH/A48B/wP2Af8D5wH/A+UB/wPuAf8D9QH/ + AwAB/wMAAf8DAAH/A/QB/wMAAf8DAAH/AwAB/wP0Af8D6AH/A9UB/wPUAf8D5wH/A48B/wGzAYIBAAH/ + AfwB+AHwAf8B/gHtAdIB/wH9AewBzgH/Af4B8wHgAf8B/gH4Ae0B/wMAAf8DAAH/AwAB/wH+AfcB6wH/ + AwAB/wMAAf8DAAH/Af0B9gHqAf8B+wHtAdYB/wH0Ad4BtwH/AfEB3AG4Af8B7wHpAd8B/wGzAYIBAAH/ + AY4BgQEAAf8BtwGqAZQB/wHfAdIBugH/AfUB6AHPAf8B+wHyAeIB/wH9AfgB7wH/AwAB/wMAAf8DAAH/ + AfwB9wHtAf8DAAH/AwAB/wMAAf8B+wH2AewB/wH2AewB2QH/Ae0B3QG9Af8B6gHaAbsB/wHkAdMBswH/ + AY4BgQEAAf8DjwH/A/YB/wPnAf8D5QH/A+4B/wP1Af8DAAH/AwAB/wMAAf8D9AH/AwAB/wMAAf8DAAH/ + A/QB/wPoAf8D1QH/A9QB/wPnAf8DjwH/A5YB/wPxAf8D8wH/A/EB/wPvAf8D9QH/A/kB/wMAAf8DAAH/ + AwAB/wMAAf8DAAH/A/kB/wPyAf8D5gH/A+QB/wPkAf8D5QH/A5YB/wG3AYoBAAH/AfcB8AHmAf8B/QH2 + AekB/wH9AfQB5AH/Af0B8wHhAf8B/QH3AewB/wH+AfsB9AH/AwAB/wMAAf8DAAH/AwAB/wMAAf8B/gH6 + AfMB/wH8AfUB5wH/AfcB6wHVAf8B9AHoAdIB/wHxAegB1QH/AewB5AHZAf8BtwGKAQAB/wGVAYEBAAH/ + AbUBpwGRAf8B2gHPAbsB/wHzAegB0wH/AfkB7QHWAf8B+wHzAeQB/wH9AfgB7wH/AwAB/wMAAf8DAAH/ + AwAB/wMAAf8B/QH4Ae8B/wH5AfAB3gH/AfIB4wHGAf8B7wHhAcQB/wHsAd4BwQH/AdsBygGrAf8BlQGB + AQAB/wOWAf8D8QH/A/MB/wPxAf8D+gH/AwAB/wMAAf8DAAH/A/kB/wPzAf8D+QH/AwAB/wMAAf8DAAH/ + A/cB/wPkAf8D5AH/A+UB/wOWAf8DpwH/A94B/wP5Af8D8wH/A/IB/wPwAf8D9QH/A/kB/wMAAf8DAAH/ + AwAB/wP5Af8D9AH/A+sB/wPoAf8D5gH/A+sB/wPUAf8DpwH/AcIBngGBAf8B6QHaAcYB/wH+AfoB8wH/ + Af0B9gHoAf8B/QH1AeYB/wH9AfMB4gH/Af0B9wHsAf8B/gH7AfQB/wMAAf8DAAH/AwAB/wH+AfsB9AH/ + Af0B9wHqAf8B+gHvAdoB/wH3AewB2AH/AfUB6gHWAf8B8wHtAeMB/wHhAdEBvAH/AcIBngGBAf8BpgGI + ARIB/wGsAZkBgQH/AdIByAG3Af8B7gHkAdMB/wH5Ae8B3AH/AfkB7gHXAf8B+wH0AeUB/wH9AfkB8AH/ + AwAB/wMAAf8DAAH/Af0B+AHwAf8B+wHyAeIB/wH2AegBzQH/AfMB5QHLAf8B8QHkAckB/wHtAeABxgH/ + AcUBsQGPAf8BpgGIARIB/wOnAf8D3gH/A/kB/wPzAf8D+wH/AwAB/wMAAf8D+QH/A/QB/wPtAf8D9AH/ + A/kB/wMAAf8DAAH/A/gB/wPmAf8D6wH/A9QB/wOnAf8DxwH/A7sB/wP9Af8D9QH/A/QB/wPyAf8D8QH/ + A/UB/wP6Af8DAAH/A/oB/wP1Af8D7gH/A+wB/wPqAf8D5wH/A/MB/wO2Af8DxwH/AdYBwQGmAf8B0QGz + AYoB/wH+Af0B+gH/Af0B9wHrAf8B/QH2AeoB/wH9AfUB5wH/AfwB9AHkAf8B/QH4Ae4B/wH+AfsB9QH/ + AwAB/wH+AfsB9QH/Af0B9wHsAf8B/AHyAd8B/wH6AfAB3QH/AfgB7gHcAf8B9QHrAdkB/wH2AfQB7wH/ + Ac0BrwGFAf8B1gHBAaYB/wHGAbUBnwH/AZ0BgQEMAf8ByAG/AbAB/wHkAdwBzQH/AfcB7wHfAf8B+wHy + AeAB/wH6AfAB2wH/AfsB9QHoAf8B/QH6AfMB/wMAAf8B/QH5AfIB/wH7AfQB5gH/AfkB7QHVAf8B9wHr + AdMB/wH1AekB0gH/AfIB5gHPAf8B6wHgAckB/wGmAYgBEAH/AcYBtQGfAf8DxwH/A7sB/wP9Af8D9QH/ + A/kB/wP7Af8D+wH/A/UB/wPvAf8D7gH/A+4B/wP1Af8D+gH/A/kB/wPyAf8D5wH/A/MB/wO2Af8DxwH/ + BAADkQH/A/EB/wP6Af8D9QH/A/QB/wPzAf8D8gH/A/cB/wP7Af8D9gH/A/AB/wPvAf8D7gH/A+sB/wPw + Af8D6QH/A5EB/wgAAbUBhQEAAf8B9gHwAecB/wH+AfsB9QH/Af0B+AHtAf8B/QH3AewB/wH9AfYB6QH/ + Af0B9QHnAf8B/QH5AfAB/wH+AfwB9wH/Af0B+QHvAf8B/AH0AeQB/wH8AfMB4wH/AfsB8gHhAf8B+AHv + Ad4B/wH3AfIB6QH/AfAB6QHeAf8BtAGFAQAB/wgAAY0BgQEAAf8BugGuAZ0B/wHVAc0BwAH/AewB5QHY + Af8B+QHyAeQB/wH7AfMB4wH/AfsB8gHhAf8B/QH3AewB/wH9AfsB9AH/AfwB9gHrAf8B+gHwAdwB/wH6 + Ae8B2wH/AfkB7gHZAf8B9gHrAdcB/wHwAeUB0QH/AdIBwwGqAf8BjQGBAQAB/wgAA5EB/wPxAf8D+gH/ + A/UB/wP0Af8D8wH/A/IB/wPxAf8D8QH/A/AB/wPwAf8D7wH/A+4B/wPrAf8D8AH/A+kB/wORAf8IAAPA + Af8DswH/A/0B/wP4Af8D9gH/A/UB/wP0Af8D8wH/A/MB/wPyAf8D8gH/A/EB/wPvAf8D8AH/A/cB/wOv + Af8DwAH/CAAB0QG5AZkB/wHLAaoBgQH/Af4B/QH7Af8B/gH6AfMB/wH+AfgB7wH/Af4B+AHuAf8B/gH3 + AewB/wH9AfYB6wH/Af0B9gHqAf8B/QH2AekB/wH9AfUB6AH/Af0B9QHmAf8B/AHzAeQB/wH6AfMB5wH/ + AfoB+AH0Af8ByAGmAYEB/wHRAbkBmQH/CAABvwGrAZEB/wGcAYEBBwH/AcYBvwGyAf8B2QHTAccB/wHt + AecB2wH/AfgB8gHmAf8B+wH1AegB/wH8AfUB5wH/AfwB9AHmAf8B/AH0AeQB/wH7AfMB4wH/AfsB8wHh + Af8B+QHwAd4B/wHyAekB1gH/Ad0B1AHAAf8BmgGBAQEB/wG/AasBkQH/CAADwAH/A7MB/wP9Af8D+AH/ + A/YB/wP1Af8D9AH/A/MB/wPzAf8D8gH/A/IB/wPxAf8D7wH/A/AB/wP3Af8DrwH/A8AB/wwAA7UB/wPB + Af8D/QH/A/oB/wP2Af8D9gH/A/UB/wP0Af8D9AH/A/MB/wPyAf8D9wH/A/kB/wPAAf8DtQH/EAABywGu + AYYB/wHVAboBlgH/Af4B/QH8Af8B/gH8AfgB/wH+AfkB8QH/Af4B+AHwAf8B/gH4Ae8B/wH9AfcB7gH/ + Af0B9wHsAf8B/QH2AesB/wH9AfYB6gH/Af4B+gHzAf8B/AH6AfcB/wHVAboBlgH/AcsBrgGGAf8QAAG1 + AZ0BgQH/AaMBigGBAf8BxgHAAbMB/wHVAc8BwwH/AeUB4AHUAf8B8AHqAd8B/wH2AfAB5QH/AfoB9AHn + Af8B+wH0AecB/wH5AfIB5AH/AfQB6wHcAf8B6QHgAc8B/wHTAcoBuAH/AZ8BhAEQAf8BtQGdAYEB/xAA + A7UB/wPBAf8D/QH/A/oB/wP2Af8D9gH/A/UB/wP0Af8D9AH/A/MB/wPyAf8D9wH/A/kB/wPAAf8DtQH/ + FAADtQH/A7AB/wPyAf8D/QH/A/sB/wP4Af8D9gH/A/cB/wP5Af8D/AH/A/EB/wOvAf8DtQH/GAABywGu + AYYB/wHJAacBgQH/AfcB8gHqAf8C/gH8Af8B/gH8AfgB/wH+AfoB8wH/Af4B+AHwAf8B/QH6AfIB/wH+ + AfsB9gH/Af4B/QH6Af8B9wHxAegB/wHJAacBgQH/AcsBrgGGAf8YAAG1AZ0BgQH/AZsBgQEFAf8BvAGy + AaIB/wHJAcIBtwH/AdMBzQHCAf8B3AHWAcsB/wHiAdsB0AH/AeMB3AHQAf8B3QHVAcgB/wHQAcgBuQH/ + AbcBqgGVAf8BkwGBAQAB/wG1AZ0BgQH/GAADtQH/A7AB/wPyAf8D/QH/A/sB/wP4Af8D9gH/A/cB/wP5 + Af8D/AH/A/EB/wOvAf8DtQH/HAADvgH/A5EB/wO8Af8D3QH/A/AB/wP9Af8D8AH/A90B/wO7Af8DkQH/ + A74B/yAAAdABuAGXAf8BtQGFAQAB/wHSAbUBjQH/AegB2gHGAf8B9QHvAeUB/wL+AfsB/wH1Ae4B5QH/ + AegB2QHFAf8B0gG0AY0B/wG1AYUBAAH/AdABuAGXAf8gAAG+AakBjwH/AY0BgQEAAf8BngGDARAB/wGt + AZwBhAH/AbYBqgGYAf8BuwGzAaUB/wGzAaYBkgH/AaYBlAGBAf8BlgGBAQUB/wGMAYABAAH/Ab4BqQGP + Af8gAAO+Af8DkQH/A7wB/wPdAf8D8AH/A/0B/wPwAf8D3QH/A7sB/wORAf8DvgH/KAADxQH/A6gB/wOY + Af8DjAH/A5gB/wOoAf8DxQH/MAAB1QHAAaMB/wHDAZ8BgQH/AbgBjAECAf8BsQGBAQAB/wG4AYwBAgH/ + AcMBnwGBAf8B1QHAAaMB/zAAAcUBtAGdAf8BqAGKAYAB/wGXAYEBAAH/AYsBEwEAAf8BlwGBAQAB/wGo + AYoBgAH/AcUBtAGdAf8wAAPFAf8DqAH/A5gB/wOMAf8DmAH/A6gB/wPFAf8YAAFCAU0BPgcAAT4DAAEo + AwABTAMAASYDAAEBAQABAQUAAcgBARYAA/8BAAH8AQcB/wGAA/8BgAQAAfABAQH+AQABPwL/AYAEAAHg + AQAB/AEAAR8C/wGABAABwAEAAXgBAAEPAv8BgAQAAYABAAEwAQABBwH8AX8BgAQAAYABAAEwAQABBwH4 + AT8BgAgAAQMB/AEfAYAIAAEDAf4BDwGACAABAwHAAQcBgAgAAQMBgAEDAYAIAAEDAYABAwGACAABAwHA + AQcBgAgAAQMB/gEPAYAEAAGAAQABMAEAAQcB/AEfAYAEAAGAAQABMAEAAQcB+AE/AYAEAAHAAQABeAEA + AQ8B/AF/AYAEAAHgAQAB/AEAAR8C/wGABAAB8AEBAf4BAAE/Av8BgAQAAfwBBwH/AYAD/wGABAAB/AEH + Af8BgAH/AfABHwH+AQMB8AIAAfABAQH+AQABPwHAAQcB+AEAAfACAAHgAQAB/AEAAR8BgAEDAfABAAFw + AgABwAEAAXgBAAEPAQABAQHgAQABMAIAAYABAAEwAQABBgIAAcABAAEQAgABgAEAATABAAEGAgABwAEA + ARBWAAGAAQABMAEAAQYCAAHAAQABEAIAAYABAAEwAQABBgIAAcABAAEQAgABwAEAAXgBAAEPAQABAQHg + AQABMAIAAeABAAH8AQABHwGAAQMB8AEAAXACAAHwAQEB/gEAAT8BwAEHAfgBAAHwAgAB/AEHAf8BgAH/ + AfABHwH+AQMB8AIACw== + + + + 120, 17 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/CreateFilePromptForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateFilePromptForm.Designer.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/CreateFilePromptForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateFilePromptForm.Designer.cs index 1309438c29..d166164ccb 100644 --- a/source/ch/cyberduck/ui/winforms/CreateFilePromptForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateFilePromptForm.Designer.cs @@ -1,47 +1,47 @@ -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class CreateFilePromptForm - { - /// - /// 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.SuspendLayout(); - // - // NewFilePromptForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(396, 115); - this.Name = "CreateFilePromptForm"; - this.Text = "Create new file"; - this.ResumeLayout(false); - - } - - #endregion - - } +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class CreateFilePromptForm + { + /// + /// 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.SuspendLayout(); + // + // NewFilePromptForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(396, 115); + this.Name = "CreateFilePromptForm"; + this.Text = "Create new file"; + this.ResumeLayout(false); + + } + + #endregion + + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/CreateFilePromptForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateFilePromptForm.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/CreateFilePromptForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateFilePromptForm.cs index a40aead5e0..d914a8f2b0 100644 --- a/source/ch/cyberduck/ui/winforms/CreateFilePromptForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateFilePromptForm.cs @@ -1,55 +1,55 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Drawing; -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Controller; -using ch.cyberduck.core; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class CreateFilePromptForm : PromptForm, ICreateFilePromptView - { - public CreateFilePromptForm() - { - InitializeComponent(); - - Text = LocaleFactory.localizedString("Create new file", "File"); - Button cancelBtn = new Button - { - AutoSize = true, - Size = new Size(75, okButton.Size.Height), - TabIndex = 5, - Text = LocaleFactory.localizedString("Cancel"), - UseVisualStyleBackColor = true, - Anchor = AnchorStyles.Bottom | AnchorStyles.Left - }; - tableLayoutPanel.Controls.Add(cancelBtn, 1, 2); - - pictureBox.Padding = new Padding(0, 0, 0, 5); - label.Text = LocaleFactory.localizedString("Enter the name for the new file:", "File"); - okButton.Text = LocaleFactory.localizedString("Create", "File"); - - // cancelButton is the 'Edit' button now - cancelButton.DialogResult = DialogResult.Yes; - cancelButton.Text = LocaleFactory.localizedString("Edit", "File"); - - CancelButton = cancelBtn; - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Drawing; +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Controller; +using ch.cyberduck.core; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class CreateFilePromptForm : PromptForm, ICreateFilePromptView + { + public CreateFilePromptForm() + { + InitializeComponent(); + + Text = LocaleFactory.localizedString("Create new file", "File"); + Button cancelBtn = new Button + { + AutoSize = true, + Size = new Size(75, okButton.Size.Height), + TabIndex = 5, + Text = LocaleFactory.localizedString("Cancel"), + UseVisualStyleBackColor = true, + Anchor = AnchorStyles.Bottom | AnchorStyles.Left + }; + tableLayoutPanel.Controls.Add(cancelBtn, 1, 2); + + pictureBox.Padding = new Padding(0, 0, 0, 5); + label.Text = LocaleFactory.localizedString("Enter the name for the new file:", "File"); + okButton.Text = LocaleFactory.localizedString("Create", "File"); + + // cancelButton is the 'Edit' button now + cancelButton.DialogResult = DialogResult.Yes; + cancelButton.Text = LocaleFactory.localizedString("Edit", "File"); + + CancelButton = cancelBtn; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/CreateFilePromptForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateFilePromptForm.resx similarity index 97% rename from source/ch/cyberduck/ui/winforms/CreateFilePromptForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateFilePromptForm.resx index ff31a6db56..19dc0dd8b3 100644 --- a/source/ch/cyberduck/ui/winforms/CreateFilePromptForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateFilePromptForm.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.Designer.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.Designer.cs index 184065088e..cf9962fa06 100644 --- a/source/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.Designer.cs @@ -1,47 +1,47 @@ -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class CreateSymlinkPromptForm - { - /// - /// 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.SuspendLayout(); - // - // CreateSymlinkPromptForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(462, 133); - this.MinimumSize = new System.Drawing.Size(464, 167); - this.Name = "CreateSymlinkPromptForm"; - this.Text = "Create new symbolic link"; - this.ResumeLayout(false); - - } - - #endregion - } +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class CreateSymlinkPromptForm + { + /// + /// 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.SuspendLayout(); + // + // CreateSymlinkPromptForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(462, 133); + this.MinimumSize = new System.Drawing.Size(464, 167); + this.Name = "CreateSymlinkPromptForm"; + this.Text = "Create new symbolic link"; + this.ResumeLayout(false); + + } + + #endregion + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.cs index 4933a8e9d0..7136224b9f 100644 --- a/source/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.cs @@ -1,44 +1,44 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using Ch.Cyberduck.Ui.Controller; -using ch.cyberduck.core; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class CreateSymlinkPromptForm : PromptForm, ICreateSymlinkPromptView - { - public CreateSymlinkPromptForm() - { - InitializeComponent(); - Text = LocaleFactory.localizedString("Create new symbolic link", "File"); - } - - public string LinkForFile - { - set - { - label.Text = - String.Format( - LocaleFactory.localizedString("Enter the name for the new symbolic link for {0}:", "File"), - value); - } - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using Ch.Cyberduck.Ui.Controller; +using ch.cyberduck.core; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class CreateSymlinkPromptForm : PromptForm, ICreateSymlinkPromptView + { + public CreateSymlinkPromptForm() + { + InitializeComponent(); + Text = LocaleFactory.localizedString("Create new symbolic link", "File"); + } + + public string LinkForFile + { + set + { + label.Text = + String.Format( + LocaleFactory.localizedString("Enter the name for the new symbolic link for {0}:", "File"), + value); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.resx similarity index 97% rename from source/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.resx index c7e0d4bdf1..d58980a38d 100644 --- a/source/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/CreateSymlinkPromptForm.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/DialogLimitedListProgressListener.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/DialogLimitedListProgressListener.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/DialogLimitedListProgressListener.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/DialogLimitedListProgressListener.cs index 65e2a7ce6c..9afa10df08 100644 --- a/source/ch/cyberduck/ui/winforms/DialogLimitedListProgressListener.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/DialogLimitedListProgressListener.cs @@ -1,92 +1,92 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Ui.Controller; -using Ch.Cyberduck.Ui.Winforms.Taskdialog; -using ch.cyberduck.core; -using ch.cyberduck.core.exception; -using java.lang; - -namespace Ch.Cyberduck.Ui.Winforms -{ - internal class DialogLimitedListProgressListener : LimitedListProgressListener - { - private readonly WindowController _controller; - private bool _supressed; - - public DialogLimitedListProgressListener(WindowController controller) - : base(controller) - { - _controller = controller; - } - - public override void chunk(Path parent, AttributedList list) - { - if (_supressed) - { - return; - } - try - { - base.chunk(parent, list); - } - catch (ListCanceledException e) - { - if (_controller.Visible) - { - AtomicBoolean c = new AtomicBoolean(true); - AsyncController.AsyncDelegate d = delegate - { - _controller.CommandBox( - string.Format(LocaleFactory.localizedString("Listing directory {0}", "Status"), - string.Empty), - string.Format(LocaleFactory.localizedString("Listing directory {0}", "Status"), - string.Empty), - string.Format( - LocaleFactory.localizedString( - "Continue listing directory with more than {0} files.", "Alert"), - e.getChunk().size()), - string.Format("{0}|{1}", LocaleFactory.localizedString("Continue", "Credentials"), - LocaleFactory.localizedString("Cancel")), - false, - LocaleFactory.localizedString("Always"), - SysIcons.Warning, - delegate(int option, bool verificationChecked) - { - if (option == 1) - { - c.SetValue(false); - } - if (verificationChecked) - { - _supressed = true; - disable(); - } - }); - }; - _controller.Invoke(d, true); - if (!c.Value) - { - throw e; - } - } - } - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Ui.Controller; +using Ch.Cyberduck.Ui.Winforms.Taskdialog; +using ch.cyberduck.core; +using ch.cyberduck.core.exception; +using java.lang; + +namespace Ch.Cyberduck.Ui.Winforms +{ + internal class DialogLimitedListProgressListener : LimitedListProgressListener + { + private readonly WindowController _controller; + private bool _supressed; + + public DialogLimitedListProgressListener(WindowController controller) + : base(controller) + { + _controller = controller; + } + + public override void chunk(Path parent, AttributedList list) + { + if (_supressed) + { + return; + } + try + { + base.chunk(parent, list); + } + catch (ListCanceledException e) + { + if (_controller.Visible) + { + AtomicBoolean c = new AtomicBoolean(true); + AsyncController.AsyncDelegate d = delegate + { + _controller.CommandBox( + string.Format(LocaleFactory.localizedString("Listing directory {0}", "Status"), + string.Empty), + string.Format(LocaleFactory.localizedString("Listing directory {0}", "Status"), + string.Empty), + string.Format( + LocaleFactory.localizedString( + "Continue listing directory with more than {0} files.", "Alert"), + e.getChunk().size()), + string.Format("{0}|{1}", LocaleFactory.localizedString("Continue", "Credentials"), + LocaleFactory.localizedString("Cancel")), + false, + LocaleFactory.localizedString("Always"), + SysIcons.Warning, + delegate(int option, bool verificationChecked) + { + if (option == 1) + { + c.SetValue(false); + } + if (verificationChecked) + { + _supressed = true; + disable(); + } + }); + }; + _controller.Invoke(d, true); + if (!c.Value) + { + throw e; + } + } + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/DonationForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/DonationForm.Designer.cs similarity index 98% rename from source/ch/cyberduck/ui/winforms/DonationForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/DonationForm.Designer.cs index f69b91dbe0..d7b5772117 100644 --- a/source/ch/cyberduck/ui/winforms/DonationForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/DonationForm.Designer.cs @@ -1,206 +1,206 @@ -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class DonationForm - { - /// - /// 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.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); - this.pictureBox = new System.Windows.Forms.PictureBox(); - this.label = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.laterButton = new System.Windows.Forms.Button(); - this.donateButton = new System.Windows.Forms.Button(); - this.neverShowDonationCheckBox = new System.Windows.Forms.CheckBox(); - this.tableLayoutPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit(); - this.SuspendLayout(); - // - // tableLayoutPanel - // - this.tableLayoutPanel.ColumnCount = 4; - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel.Controls.Add(this.pictureBox, 0, 0); - this.tableLayoutPanel.Controls.Add(this.label, 1, 0); - this.tableLayoutPanel.Controls.Add(this.label1, 1, 1); - this.tableLayoutPanel.Controls.Add(this.label2, 1, 2); - this.tableLayoutPanel.Controls.Add(this.label3, 1, 3); - this.tableLayoutPanel.Controls.Add(this.label4, 1, 4); - this.tableLayoutPanel.Controls.Add(this.laterButton, 2, 6); - this.tableLayoutPanel.Controls.Add(this.donateButton, 3, 6); - this.tableLayoutPanel.Controls.Add(this.neverShowDonationCheckBox, 1, 5); - this.tableLayoutPanel.Location = new System.Drawing.Point(12, 12); - this.tableLayoutPanel.Name = "tableLayoutPanel"; - this.tableLayoutPanel.RowCount = 7; - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 60F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel.Size = new System.Drawing.Size(487, 305); - this.tableLayoutPanel.TabIndex = 5; - // - // pictureBox - // - this.pictureBox.Location = new System.Drawing.Point(3, 3); - this.pictureBox.Name = "pictureBox"; - this.tableLayoutPanel.SetRowSpan(this.pictureBox, 3); - this.pictureBox.Size = new System.Drawing.Size(75, 74); - this.pictureBox.TabIndex = 0; - this.pictureBox.TabStop = false; - // - // label - // - this.label.AutoSize = true; - this.tableLayoutPanel.SetColumnSpan(this.label, 3); - this.label.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold); - this.label.Location = new System.Drawing.Point(84, 0); - this.label.Name = "label"; - this.label.Size = new System.Drawing.Size(222, 19); - this.label.TabIndex = 1; - this.label.Text = "Thank you for using Cyberduck!"; - // - // label1 - // - this.label1.AutoSize = true; - this.tableLayoutPanel.SetColumnSpan(this.label1, 3); - this.label1.Location = new System.Drawing.Point(84, 35); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(395, 45); - this.label1.TabIndex = 2; - this.label1.Text = "It has taken many nights to develop this application. If you enjoy using it, plea" + - "se consider a donation to the author of this software. It will help to make Cybe" + - "rduck even better!"; - // - // label2 - // - this.label2.AutoSize = true; - this.tableLayoutPanel.SetColumnSpan(this.label2, 3); - this.label2.Font = new System.Drawing.Font("Segoe UI", 8F); - this.label2.Location = new System.Drawing.Point(84, 95); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(400, 26); - this.label2.TabIndex = 3; - this.label2.Text = "The payment can be made simply and safely using Paypal. You don\'t need to open an" + - " account."; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold); - this.label3.Location = new System.Drawing.Point(84, 140); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(99, 19); - this.label3.TabIndex = 4; - this.label3.Text = "Donation Key"; - // - // label4 - // - this.label4.AutoSize = true; - this.tableLayoutPanel.SetColumnSpan(this.label4, 3); - this.label4.Location = new System.Drawing.Point(84, 175); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(385, 30); - this.label4.TabIndex = 5; - this.label4.Text = "As a contributor to Cyberduck, you receive a donation key that disables this prom" + - "pt."; - // - // laterButton - // - this.laterButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.laterButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.laterButton.Location = new System.Drawing.Point(304, 275); - this.laterButton.Name = "laterButton"; - this.laterButton.Size = new System.Drawing.Size(87, 27); - this.laterButton.TabIndex = 1; - this.laterButton.Text = "Later"; - this.laterButton.UseVisualStyleBackColor = true; - // - // donateButton - // - this.donateButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.donateButton.DialogResult = System.Windows.Forms.DialogResult.OK; - this.donateButton.Location = new System.Drawing.Point(397, 275); - this.donateButton.Name = "donateButton"; - this.donateButton.Size = new System.Drawing.Size(87, 27); - this.donateButton.TabIndex = 0; - this.donateButton.Text = "Donate!"; - this.donateButton.UseVisualStyleBackColor = true; - // - // neverShowDonationCheckBox - // - this.neverShowDonationCheckBox.AutoSize = true; - this.tableLayoutPanel.SetColumnSpan(this.neverShowDonationCheckBox, 3); - this.neverShowDonationCheckBox.Location = new System.Drawing.Point(84, 223); - this.neverShowDonationCheckBox.Name = "neverShowDonationCheckBox"; - this.neverShowDonationCheckBox.Padding = new System.Windows.Forms.Padding(2, 0, 0, 0); - this.neverShowDonationCheckBox.Size = new System.Drawing.Size(204, 19); - this.neverShowDonationCheckBox.TabIndex = 6; - this.neverShowDonationCheckBox.Text = "Don\'t show again for this version."; - this.neverShowDonationCheckBox.UseVisualStyleBackColor = true; - // - // DonationForm - // - this.AcceptButton = this.donateButton; - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(505, 324); - this.Controls.Add(this.tableLayoutPanel); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.Name = "DonationForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Please Donate"; - this.tableLayoutPanel.ResumeLayout(false); - this.tableLayoutPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - protected System.Windows.Forms.TableLayoutPanel tableLayoutPanel; - protected System.Windows.Forms.PictureBox pictureBox; - protected System.Windows.Forms.Label label; - protected System.Windows.Forms.Button donateButton; - protected System.Windows.Forms.Button laterButton; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.CheckBox neverShowDonationCheckBox; - } +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class DonationForm + { + /// + /// 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.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBox = new System.Windows.Forms.PictureBox(); + this.label = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.laterButton = new System.Windows.Forms.Button(); + this.donateButton = new System.Windows.Forms.Button(); + this.neverShowDonationCheckBox = new System.Windows.Forms.CheckBox(); + this.tableLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit(); + this.SuspendLayout(); + // + // tableLayoutPanel + // + this.tableLayoutPanel.ColumnCount = 4; + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel.Controls.Add(this.pictureBox, 0, 0); + this.tableLayoutPanel.Controls.Add(this.label, 1, 0); + this.tableLayoutPanel.Controls.Add(this.label1, 1, 1); + this.tableLayoutPanel.Controls.Add(this.label2, 1, 2); + this.tableLayoutPanel.Controls.Add(this.label3, 1, 3); + this.tableLayoutPanel.Controls.Add(this.label4, 1, 4); + this.tableLayoutPanel.Controls.Add(this.laterButton, 2, 6); + this.tableLayoutPanel.Controls.Add(this.donateButton, 3, 6); + this.tableLayoutPanel.Controls.Add(this.neverShowDonationCheckBox, 1, 5); + this.tableLayoutPanel.Location = new System.Drawing.Point(12, 12); + this.tableLayoutPanel.Name = "tableLayoutPanel"; + this.tableLayoutPanel.RowCount = 7; + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 60F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel.Size = new System.Drawing.Size(487, 305); + this.tableLayoutPanel.TabIndex = 5; + // + // pictureBox + // + this.pictureBox.Location = new System.Drawing.Point(3, 3); + this.pictureBox.Name = "pictureBox"; + this.tableLayoutPanel.SetRowSpan(this.pictureBox, 3); + this.pictureBox.Size = new System.Drawing.Size(75, 74); + this.pictureBox.TabIndex = 0; + this.pictureBox.TabStop = false; + // + // label + // + this.label.AutoSize = true; + this.tableLayoutPanel.SetColumnSpan(this.label, 3); + this.label.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold); + this.label.Location = new System.Drawing.Point(84, 0); + this.label.Name = "label"; + this.label.Size = new System.Drawing.Size(222, 19); + this.label.TabIndex = 1; + this.label.Text = "Thank you for using Cyberduck!"; + // + // label1 + // + this.label1.AutoSize = true; + this.tableLayoutPanel.SetColumnSpan(this.label1, 3); + this.label1.Location = new System.Drawing.Point(84, 35); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(395, 45); + this.label1.TabIndex = 2; + this.label1.Text = "It has taken many nights to develop this application. If you enjoy using it, plea" + + "se consider a donation to the author of this software. It will help to make Cybe" + + "rduck even better!"; + // + // label2 + // + this.label2.AutoSize = true; + this.tableLayoutPanel.SetColumnSpan(this.label2, 3); + this.label2.Font = new System.Drawing.Font("Segoe UI", 8F); + this.label2.Location = new System.Drawing.Point(84, 95); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(400, 26); + this.label2.TabIndex = 3; + this.label2.Text = "The payment can be made simply and safely using Paypal. You don\'t need to open an" + + " account."; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold); + this.label3.Location = new System.Drawing.Point(84, 140); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(99, 19); + this.label3.TabIndex = 4; + this.label3.Text = "Donation Key"; + // + // label4 + // + this.label4.AutoSize = true; + this.tableLayoutPanel.SetColumnSpan(this.label4, 3); + this.label4.Location = new System.Drawing.Point(84, 175); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(385, 30); + this.label4.TabIndex = 5; + this.label4.Text = "As a contributor to Cyberduck, you receive a donation key that disables this prom" + + "pt."; + // + // laterButton + // + this.laterButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.laterButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.laterButton.Location = new System.Drawing.Point(304, 275); + this.laterButton.Name = "laterButton"; + this.laterButton.Size = new System.Drawing.Size(87, 27); + this.laterButton.TabIndex = 1; + this.laterButton.Text = "Later"; + this.laterButton.UseVisualStyleBackColor = true; + // + // donateButton + // + this.donateButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.donateButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.donateButton.Location = new System.Drawing.Point(397, 275); + this.donateButton.Name = "donateButton"; + this.donateButton.Size = new System.Drawing.Size(87, 27); + this.donateButton.TabIndex = 0; + this.donateButton.Text = "Donate!"; + this.donateButton.UseVisualStyleBackColor = true; + // + // neverShowDonationCheckBox + // + this.neverShowDonationCheckBox.AutoSize = true; + this.tableLayoutPanel.SetColumnSpan(this.neverShowDonationCheckBox, 3); + this.neverShowDonationCheckBox.Location = new System.Drawing.Point(84, 223); + this.neverShowDonationCheckBox.Name = "neverShowDonationCheckBox"; + this.neverShowDonationCheckBox.Padding = new System.Windows.Forms.Padding(2, 0, 0, 0); + this.neverShowDonationCheckBox.Size = new System.Drawing.Size(204, 19); + this.neverShowDonationCheckBox.TabIndex = 6; + this.neverShowDonationCheckBox.Text = "Don\'t show again for this version."; + this.neverShowDonationCheckBox.UseVisualStyleBackColor = true; + // + // DonationForm + // + this.AcceptButton = this.donateButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(505, 324); + this.Controls.Add(this.tableLayoutPanel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Name = "DonationForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Please Donate"; + this.tableLayoutPanel.ResumeLayout(false); + this.tableLayoutPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + protected System.Windows.Forms.TableLayoutPanel tableLayoutPanel; + protected System.Windows.Forms.PictureBox pictureBox; + protected System.Windows.Forms.Label label; + protected System.Windows.Forms.Button donateButton; + protected System.Windows.Forms.Button laterButton; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.CheckBox neverShowDonationCheckBox; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/DonationForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/DonationForm.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/DonationForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/DonationForm.cs index f8a5d75f81..6bb5f927d4 100644 --- a/source/ch/cyberduck/ui/winforms/DonationForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/DonationForm.cs @@ -1,47 +1,47 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using Ch.Cyberduck.Ui.Controller; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class DonationForm : BaseForm, IDonationView - { - public DonationForm() - { - InitializeComponent(); - - pictureBox.Image = IconCache.Instance.IconForName("cyberduck", 64); - } - - public override string[] BundleNames - { - get { return new[] {"Donate"}; } - } - - public bool NeverShowDonation - { - get { return neverShowDonationCheckBox.Checked; } - set { neverShowDonationCheckBox.Checked = value; } - } - - public string Title - { - set { Text = value; } - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using Ch.Cyberduck.Ui.Controller; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class DonationForm : BaseForm, IDonationView + { + public DonationForm() + { + InitializeComponent(); + + pictureBox.Image = IconCache.Instance.IconForName("cyberduck", 64); + } + + public override string[] BundleNames + { + get { return new[] {"Donate"}; } + } + + public bool NeverShowDonation + { + get { return neverShowDonationCheckBox.Checked; } + set { neverShowDonationCheckBox.Checked = value; } + } + + public string Title + { + set { Text = value; } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/DonationForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/DonationForm.resx similarity index 97% rename from source/ch/cyberduck/ui/winforms/DonationForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/DonationForm.resx index c7e0d4bdf1..d58980a38d 100644 --- a/source/ch/cyberduck/ui/winforms/DonationForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/DonationForm.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/DuplicateFilePromptForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/DuplicateFilePromptForm.Designer.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/DuplicateFilePromptForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/DuplicateFilePromptForm.Designer.cs index b5c645d235..28ea108ad1 100644 --- a/source/ch/cyberduck/ui/winforms/DuplicateFilePromptForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/DuplicateFilePromptForm.Designer.cs @@ -1,38 +1,38 @@ -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class DuplicateFilePromptForm - { - /// - /// 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(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Text = "DuplicateFilePromptForm"; - } - - #endregion - } +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class DuplicateFilePromptForm + { + /// + /// 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(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Text = "DuplicateFilePromptForm"; + } + + #endregion + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/DuplicateFilePromptForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/DuplicateFilePromptForm.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/DuplicateFilePromptForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/DuplicateFilePromptForm.cs index 1da28a3afd..8cd7d75960 100644 --- a/source/ch/cyberduck/ui/winforms/DuplicateFilePromptForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/DuplicateFilePromptForm.cs @@ -1,38 +1,38 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using Ch.Cyberduck.Ui.Controller; -using ch.cyberduck.core; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class DuplicateFilePromptForm : PromptForm, IDuplicateFilePromptView - { - public DuplicateFilePromptForm() - { - InitializeComponent(); - - Text = LocaleFactory.localizedString("Duplicate File", "Duplicate"); - - pictureBox.Width = 32; - label.Text = LocaleFactory.localizedString("Enter the name for the new file:", "Duplicate"); - okButton.Text = LocaleFactory.localizedString("Duplicate", "Duplicate"); - cancelButton.Text = LocaleFactory.localizedString("Cancel", "Duplicate"); - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using Ch.Cyberduck.Ui.Controller; +using ch.cyberduck.core; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class DuplicateFilePromptForm : PromptForm, IDuplicateFilePromptView + { + public DuplicateFilePromptForm() + { + InitializeComponent(); + + Text = LocaleFactory.localizedString("Duplicate File", "Duplicate"); + + pictureBox.Width = 32; + label.Text = LocaleFactory.localizedString("Enter the name for the new file:", "Duplicate"); + okButton.Text = LocaleFactory.localizedString("Duplicate", "Duplicate"); + cancelButton.Text = LocaleFactory.localizedString("Cancel", "Duplicate"); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/ErrorForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ErrorForm.Designer.cs similarity index 98% rename from source/ch/cyberduck/ui/winforms/ErrorForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/ErrorForm.Designer.cs index 1e284f15ba..f340922a5f 100644 --- a/source/ch/cyberduck/ui/winforms/ErrorForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ErrorForm.Designer.cs @@ -1,220 +1,220 @@ -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class ErrorForm - { - /// - /// 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(ErrorForm)); - this.imageList = new System.Windows.Forms.ImageList(this.components); - this.detailPanel = new System.Windows.Forms.Panel(); - this.detailTextBox = new System.Windows.Forms.TextBox(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.separatorLine = new System.Windows.Forms.Label(); - this.toggleTranscriptLabel = new System.Windows.Forms.Label(); - this.introLabel = new System.Windows.Forms.Label(); - this.okButton = new System.Windows.Forms.Button(); - this.errorListView = new BrightIdeasSoftware.ObjectListView(); - this.errorColumn = new BrightIdeasSoftware.OLVColumn(); - this.cancelButton = new System.Windows.Forms.Button(); - this.detailPanel.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.errorListView)).BeginInit(); - this.SuspendLayout(); - // - // imageList - // - this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream"))); - this.imageList.TransparentColor = System.Drawing.Color.Fuchsia; - this.imageList.Images.SetKeyName(0, "arrow_up_bw.bmp"); - this.imageList.Images.SetKeyName(1, "arrow_up_color.bmp"); - this.imageList.Images.SetKeyName(2, "arrow_up_color_pressed.bmp"); - this.imageList.Images.SetKeyName(3, "arrow_down_bw.bmp"); - this.imageList.Images.SetKeyName(4, "arrow_down_color.bmp"); - this.imageList.Images.SetKeyName(5, "arrow_down_color_pressed.bmp"); - this.imageList.Images.SetKeyName(6, "green_arrow.bmp"); - // - // detailPanel - // - this.detailPanel.Controls.Add(this.detailTextBox); - this.detailPanel.Dock = System.Windows.Forms.DockStyle.Bottom; - this.detailPanel.Location = new System.Drawing.Point(0, 214); - this.detailPanel.Name = "detailPanel"; - this.detailPanel.Padding = new System.Windows.Forms.Padding(13, 0, 13, 13); - this.detailPanel.Size = new System.Drawing.Size(570, 148); - this.detailPanel.TabIndex = 7; - // - // detailTextBox - // - this.detailTextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.detailTextBox.Location = new System.Drawing.Point(13, 0); - this.detailTextBox.Multiline = true; - this.detailTextBox.Name = "detailTextBox"; - this.detailTextBox.ReadOnly = true; - this.detailTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.detailTextBox.Size = new System.Drawing.Size(544, 135); - this.detailTextBox.TabIndex = 0; - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 3; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.separatorLine, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.toggleTranscriptLabel, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.introLabel, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.okButton, 2, 2); - this.tableLayoutPanel1.Controls.Add(this.errorListView, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.cancelButton, 1, 2); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10, 10, 10, 0); - this.tableLayoutPanel1.RowCount = 4; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(570, 214); - this.tableLayoutPanel1.TabIndex = 12; - // - // separatorLine - // - this.separatorLine.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.separatorLine.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.tableLayoutPanel1.SetColumnSpan(this.separatorLine, 3); - this.separatorLine.Location = new System.Drawing.Point(16, 204); - this.separatorLine.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); - this.separatorLine.Name = "separatorLine"; - this.separatorLine.Size = new System.Drawing.Size(541, 2); - this.separatorLine.TabIndex = 43; - // - // toggleTranscriptLabel - // - this.toggleTranscriptLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.toggleTranscriptLabel.AutoSize = true; - this.toggleTranscriptLabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.toggleTranscriptLabel.ImageIndex = 3; - this.toggleTranscriptLabel.ImageList = this.imageList; - this.toggleTranscriptLabel.Location = new System.Drawing.Point(13, 176); - this.toggleTranscriptLabel.MinimumSize = new System.Drawing.Size(0, 25); - this.toggleTranscriptLabel.Name = "toggleTranscriptLabel"; - this.toggleTranscriptLabel.Size = new System.Drawing.Size(124, 25); - this.toggleTranscriptLabel.TabIndex = 7; - this.toggleTranscriptLabel.Text = " Toggle Transcript"; - this.toggleTranscriptLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // introLabel - // - this.introLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel1.SetColumnSpan(this.introLabel, 3); - this.introLabel.Location = new System.Drawing.Point(13, 10); - this.introLabel.Name = "introLabel"; - this.introLabel.Size = new System.Drawing.Size(544, 17); - this.introLabel.TabIndex = 8; - this.introLabel.Text = "The last action could not be completed due to the following errors:"; - // - // okButton - // - this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.okButton.AutoSize = true; - this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; - this.okButton.Location = new System.Drawing.Point(470, 176); - this.okButton.Name = "okButton"; - this.okButton.Size = new System.Drawing.Size(87, 25); - this.okButton.TabIndex = 10; - this.okButton.Text = "Try Again"; - this.okButton.UseVisualStyleBackColor = true; - // - // errorListView - // - this.errorListView.AllColumns.Add(this.errorColumn); - this.errorListView.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.errorListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.errorColumn}); - this.tableLayoutPanel1.SetColumnSpan(this.errorListView, 3); - this.errorListView.Location = new System.Drawing.Point(13, 30); - this.errorListView.Name = "errorListView"; - this.errorListView.Size = new System.Drawing.Size(544, 140); - this.errorListView.TabIndex = 6; - this.errorListView.UseCompatibleStateImageBehavior = false; - this.errorListView.View = System.Windows.Forms.View.Details; - // - // cancelButton - // - this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.cancelButton.AutoSize = true; - this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancelButton.Location = new System.Drawing.Point(377, 176); - this.cancelButton.Name = "cancelButton"; - this.cancelButton.Size = new System.Drawing.Size(87, 25); - this.cancelButton.TabIndex = 9; - this.cancelButton.Text = "Cancel"; - this.cancelButton.UseVisualStyleBackColor = true; - // - // ErrorForm - // - this.AcceptButton = this.okButton; - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.cancelButton; - this.ClientSize = new System.Drawing.Size(570, 362); - this.Controls.Add(this.tableLayoutPanel1); - this.Controls.Add(this.detailPanel); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; - this.Name = "ErrorForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Failures"; - this.detailPanel.ResumeLayout(false); - this.detailPanel.PerformLayout(); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.errorListView)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.ImageList imageList; - private System.Windows.Forms.Panel detailPanel; - private System.Windows.Forms.TextBox detailTextBox; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label separatorLine; - private System.Windows.Forms.Label toggleTranscriptLabel; - private System.Windows.Forms.Label introLabel; - private System.Windows.Forms.Button okButton; - private BrightIdeasSoftware.ObjectListView errorListView; - private BrightIdeasSoftware.OLVColumn errorColumn; - private System.Windows.Forms.Button cancelButton; - } +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class ErrorForm + { + /// + /// 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(ErrorForm)); + this.imageList = new System.Windows.Forms.ImageList(this.components); + this.detailPanel = new System.Windows.Forms.Panel(); + this.detailTextBox = new System.Windows.Forms.TextBox(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.separatorLine = new System.Windows.Forms.Label(); + this.toggleTranscriptLabel = new System.Windows.Forms.Label(); + this.introLabel = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.errorListView = new BrightIdeasSoftware.ObjectListView(); + this.errorColumn = new BrightIdeasSoftware.OLVColumn(); + this.cancelButton = new System.Windows.Forms.Button(); + this.detailPanel.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.errorListView)).BeginInit(); + this.SuspendLayout(); + // + // imageList + // + this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream"))); + this.imageList.TransparentColor = System.Drawing.Color.Fuchsia; + this.imageList.Images.SetKeyName(0, "arrow_up_bw.bmp"); + this.imageList.Images.SetKeyName(1, "arrow_up_color.bmp"); + this.imageList.Images.SetKeyName(2, "arrow_up_color_pressed.bmp"); + this.imageList.Images.SetKeyName(3, "arrow_down_bw.bmp"); + this.imageList.Images.SetKeyName(4, "arrow_down_color.bmp"); + this.imageList.Images.SetKeyName(5, "arrow_down_color_pressed.bmp"); + this.imageList.Images.SetKeyName(6, "green_arrow.bmp"); + // + // detailPanel + // + this.detailPanel.Controls.Add(this.detailTextBox); + this.detailPanel.Dock = System.Windows.Forms.DockStyle.Bottom; + this.detailPanel.Location = new System.Drawing.Point(0, 214); + this.detailPanel.Name = "detailPanel"; + this.detailPanel.Padding = new System.Windows.Forms.Padding(13, 0, 13, 13); + this.detailPanel.Size = new System.Drawing.Size(570, 148); + this.detailPanel.TabIndex = 7; + // + // detailTextBox + // + this.detailTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.detailTextBox.Location = new System.Drawing.Point(13, 0); + this.detailTextBox.Multiline = true; + this.detailTextBox.Name = "detailTextBox"; + this.detailTextBox.ReadOnly = true; + this.detailTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.detailTextBox.Size = new System.Drawing.Size(544, 135); + this.detailTextBox.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 3; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.separatorLine, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.toggleTranscriptLabel, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.introLabel, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.okButton, 2, 2); + this.tableLayoutPanel1.Controls.Add(this.errorListView, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.cancelButton, 1, 2); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10, 10, 10, 0); + this.tableLayoutPanel1.RowCount = 4; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(570, 214); + this.tableLayoutPanel1.TabIndex = 12; + // + // separatorLine + // + this.separatorLine.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.separatorLine.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.tableLayoutPanel1.SetColumnSpan(this.separatorLine, 3); + this.separatorLine.Location = new System.Drawing.Point(16, 204); + this.separatorLine.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.separatorLine.Name = "separatorLine"; + this.separatorLine.Size = new System.Drawing.Size(541, 2); + this.separatorLine.TabIndex = 43; + // + // toggleTranscriptLabel + // + this.toggleTranscriptLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.toggleTranscriptLabel.AutoSize = true; + this.toggleTranscriptLabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.toggleTranscriptLabel.ImageIndex = 3; + this.toggleTranscriptLabel.ImageList = this.imageList; + this.toggleTranscriptLabel.Location = new System.Drawing.Point(13, 176); + this.toggleTranscriptLabel.MinimumSize = new System.Drawing.Size(0, 25); + this.toggleTranscriptLabel.Name = "toggleTranscriptLabel"; + this.toggleTranscriptLabel.Size = new System.Drawing.Size(124, 25); + this.toggleTranscriptLabel.TabIndex = 7; + this.toggleTranscriptLabel.Text = " Toggle Transcript"; + this.toggleTranscriptLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // introLabel + // + this.introLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.introLabel, 3); + this.introLabel.Location = new System.Drawing.Point(13, 10); + this.introLabel.Name = "introLabel"; + this.introLabel.Size = new System.Drawing.Size(544, 17); + this.introLabel.TabIndex = 8; + this.introLabel.Text = "The last action could not be completed due to the following errors:"; + // + // okButton + // + this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.okButton.AutoSize = true; + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(470, 176); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(87, 25); + this.okButton.TabIndex = 10; + this.okButton.Text = "Try Again"; + this.okButton.UseVisualStyleBackColor = true; + // + // errorListView + // + this.errorListView.AllColumns.Add(this.errorColumn); + this.errorListView.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.errorListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.errorColumn}); + this.tableLayoutPanel1.SetColumnSpan(this.errorListView, 3); + this.errorListView.Location = new System.Drawing.Point(13, 30); + this.errorListView.Name = "errorListView"; + this.errorListView.Size = new System.Drawing.Size(544, 140); + this.errorListView.TabIndex = 6; + this.errorListView.UseCompatibleStateImageBehavior = false; + this.errorListView.View = System.Windows.Forms.View.Details; + // + // cancelButton + // + this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.cancelButton.AutoSize = true; + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(377, 176); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(87, 25); + this.cancelButton.TabIndex = 9; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + // + // ErrorForm + // + this.AcceptButton = this.okButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(570, 362); + this.Controls.Add(this.tableLayoutPanel1); + this.Controls.Add(this.detailPanel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; + this.Name = "ErrorForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Failures"; + this.detailPanel.ResumeLayout(false); + this.detailPanel.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.errorListView)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ImageList imageList; + private System.Windows.Forms.Panel detailPanel; + private System.Windows.Forms.TextBox detailTextBox; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Label separatorLine; + private System.Windows.Forms.Label toggleTranscriptLabel; + private System.Windows.Forms.Label introLabel; + private System.Windows.Forms.Button okButton; + private BrightIdeasSoftware.ObjectListView errorListView; + private BrightIdeasSoftware.OLVColumn errorColumn; + private System.Windows.Forms.Button cancelButton; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/ErrorForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ErrorForm.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/ErrorForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/ErrorForm.cs index c8f62ed0bd..62f21cd6fc 100644 --- a/source/ch/cyberduck/ui/winforms/ErrorForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ErrorForm.cs @@ -1,143 +1,143 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; -using BrightIdeasSoftware; -using Ch.Cyberduck.Ui.Controller; -using ch.cyberduck.core; -using ch.cyberduck.core.exception; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class ErrorForm : BaseForm, IErrorView - { - private static readonly int MaxHeight = 800; - private static readonly int MaxWidth = 800; - private static readonly int MinHeight = 250; - private static readonly int MinWidth = 450; - private readonly ErrorRenderer _renderer = new ErrorRenderer(); - private bool _expanded = true; - - public ErrorForm() - { - InitializeComponent(); - - Load += delegate { okButton.Focus(); }; - - MaximumSize = new Size(MaxWidth, MaxHeight + detailPanel.Height); - MinimumSize = new Size(MinWidth, MinHeight + detailPanel.Height); - - detailTextBox.Font = new Font(FontFamily.GenericMonospace, 8); - - toggleTranscriptLabel.Text = " " + LocaleFactory.localizedString("Toggle Transcript"); - toggleTranscriptLabel.ImageIndex = (_expanded ? 1 : 4); - - // configure error listview - errorListView.OwnerDraw = true; - errorListView.UseOverlays = false; - errorListView.FullRowSelect = true; - errorListView.RowHeight = 60; - errorListView.UseAlternatingBackColors = true; - errorListView.AlternateRowBackColor = Color.WhiteSmoke; - errorListView.MultiSelect = false; - errorListView.HeaderStyle = ColumnHeaderStyle.None; - errorListView.ShowGroups = false; - - errorColumn.Renderer = _renderer; - errorColumn.FillsFreeSpace = true; - _renderer.CellPadding = new Size(2, 4); - _renderer.ErrorFont = new Font(errorListView.Font, FontStyle.Bold); - _renderer.DescriptionFont = new Font(errorListView.Font, FontStyle.Bold); - _renderer.HostFont = new Font(FontFamily.GenericMonospace, 8); - _renderer.ErrorHostSpace = 1; - _renderer.HostDescriptionSpace = 6; - - toggleTranscriptLabel.Click += delegate { ToggleTranscriptEvent(); }; - toggleTranscriptLabel.MouseDown += delegate { toggleTranscriptLabel.ImageIndex = (_expanded ? 2 : 5); }; - toggleTranscriptLabel.MouseEnter += delegate { toggleTranscriptLabel.ImageIndex = (_expanded ? 1 : 4); }; - toggleTranscriptLabel.MouseLeave += delegate { toggleTranscriptLabel.ImageIndex = (_expanded ? 0 : 3); }; - toggleTranscriptLabel.MouseUp += delegate { toggleTranscriptLabel.ImageIndex = (_expanded ? 1 : 4); }; - } - - public override string[] BundleNames - { - get { return new[] {"Error"}; } - } - - public AspectGetterDelegate ModelHostGetter - { - set { errorColumn.AspectGetter = value; } - } - - public AspectGetterDelegate ModelDescriptionGetter - { - set { _renderer.DescriptionAspectGetter = value; } - } - - public AspectGetterDelegate ModelErrorMessageGetter - { - set { _renderer.ErrorAspectGetter = value; } - } - - public void SetModel(IEnumerable model) - { - errorListView.SetObjects(model); - } - - public string Transcript - { - set { detailTextBox.Text = value; } - } - - public bool TranscriptEnabled - { - set { toggleTranscriptLabel.Enabled = value; } - } - - public bool TranscriptVisible - { - get { return _expanded; } - set - { - if (_expanded != value) - { - _expanded = value; - - if (_expanded) - { - MaximumSize = new Size(MaxWidth, MaxHeight + detailPanel.Height); - Height += detailPanel.Height; - MinimumSize = new Size(MinWidth, MinHeight + detailPanel.Height); - } - else - { - MinimumSize = new Size(MinWidth, MinHeight); - Height -= detailPanel.Height; - MaximumSize = new Size(MaxWidth, MaxHeight); - } - detailPanel.Visible = _expanded; - toggleTranscriptLabel.ImageIndex = (_expanded ? 1 : 4); - } - } - } - - public event VoidHandler ToggleTranscriptEvent; - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using BrightIdeasSoftware; +using Ch.Cyberduck.Ui.Controller; +using ch.cyberduck.core; +using ch.cyberduck.core.exception; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class ErrorForm : BaseForm, IErrorView + { + private static readonly int MaxHeight = 800; + private static readonly int MaxWidth = 800; + private static readonly int MinHeight = 250; + private static readonly int MinWidth = 450; + private readonly ErrorRenderer _renderer = new ErrorRenderer(); + private bool _expanded = true; + + public ErrorForm() + { + InitializeComponent(); + + Load += delegate { okButton.Focus(); }; + + MaximumSize = new Size(MaxWidth, MaxHeight + detailPanel.Height); + MinimumSize = new Size(MinWidth, MinHeight + detailPanel.Height); + + detailTextBox.Font = new Font(FontFamily.GenericMonospace, 8); + + toggleTranscriptLabel.Text = " " + LocaleFactory.localizedString("Toggle Transcript"); + toggleTranscriptLabel.ImageIndex = (_expanded ? 1 : 4); + + // configure error listview + errorListView.OwnerDraw = true; + errorListView.UseOverlays = false; + errorListView.FullRowSelect = true; + errorListView.RowHeight = 60; + errorListView.UseAlternatingBackColors = true; + errorListView.AlternateRowBackColor = Color.WhiteSmoke; + errorListView.MultiSelect = false; + errorListView.HeaderStyle = ColumnHeaderStyle.None; + errorListView.ShowGroups = false; + + errorColumn.Renderer = _renderer; + errorColumn.FillsFreeSpace = true; + _renderer.CellPadding = new Size(2, 4); + _renderer.ErrorFont = new Font(errorListView.Font, FontStyle.Bold); + _renderer.DescriptionFont = new Font(errorListView.Font, FontStyle.Bold); + _renderer.HostFont = new Font(FontFamily.GenericMonospace, 8); + _renderer.ErrorHostSpace = 1; + _renderer.HostDescriptionSpace = 6; + + toggleTranscriptLabel.Click += delegate { ToggleTranscriptEvent(); }; + toggleTranscriptLabel.MouseDown += delegate { toggleTranscriptLabel.ImageIndex = (_expanded ? 2 : 5); }; + toggleTranscriptLabel.MouseEnter += delegate { toggleTranscriptLabel.ImageIndex = (_expanded ? 1 : 4); }; + toggleTranscriptLabel.MouseLeave += delegate { toggleTranscriptLabel.ImageIndex = (_expanded ? 0 : 3); }; + toggleTranscriptLabel.MouseUp += delegate { toggleTranscriptLabel.ImageIndex = (_expanded ? 1 : 4); }; + } + + public override string[] BundleNames + { + get { return new[] {"Error"}; } + } + + public AspectGetterDelegate ModelHostGetter + { + set { errorColumn.AspectGetter = value; } + } + + public AspectGetterDelegate ModelDescriptionGetter + { + set { _renderer.DescriptionAspectGetter = value; } + } + + public AspectGetterDelegate ModelErrorMessageGetter + { + set { _renderer.ErrorAspectGetter = value; } + } + + public void SetModel(IEnumerable model) + { + errorListView.SetObjects(model); + } + + public string Transcript + { + set { detailTextBox.Text = value; } + } + + public bool TranscriptEnabled + { + set { toggleTranscriptLabel.Enabled = value; } + } + + public bool TranscriptVisible + { + get { return _expanded; } + set + { + if (_expanded != value) + { + _expanded = value; + + if (_expanded) + { + MaximumSize = new Size(MaxWidth, MaxHeight + detailPanel.Height); + Height += detailPanel.Height; + MinimumSize = new Size(MinWidth, MinHeight + detailPanel.Height); + } + else + { + MinimumSize = new Size(MinWidth, MinHeight); + Height -= detailPanel.Height; + MaximumSize = new Size(MaxWidth, MaxHeight); + } + detailPanel.Visible = _expanded; + toggleTranscriptLabel.ImageIndex = (_expanded ? 1 : 4); + } + } + } + + public event VoidHandler ToggleTranscriptEvent; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/ErrorForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ErrorForm.resx similarity index 98% rename from source/ch/cyberduck/ui/winforms/ErrorForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/ErrorForm.resx index c6689cf1f5..c29d355720 100644 --- a/source/ch/cyberduck/ui/winforms/ErrorForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ErrorForm.resx @@ -1,344 +1,344 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAC - MgAAAk1TRnQBSQFMAgEBBwEAARQBAQEUAQEBEwEAARMBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFM - AwABJgMAAQEBAAEgBQABIAEtKgAB1QG/AaIB/wHCAZ4BgQH/AbcBigFHAf8BsQGBATYB/wG3AYoBRwH/ - AcIBngGBAf8B1QG/AaIB/zAAAcUBswGbAf8BpgGIAVsB/wGVAYEBOQH/AYsBXAEmAf8BlQGBATkB/wGm - AYgBWwH/AcUBswGbAf/AAAHRAbcBlQH/AbQBhAE+Af8BzgGuAYMB/wHgAc0BsgH/AeoB3wHOAf8B7wHp - AdwB/wHpAd8BzQH/Ad4BzAGxAf8BzAGtAYIB/wG0AYQBPgH/AdEBtwGVAf8gAAG9AakBjQH/AYwBXQEn - Af8BnAGBATcB/wGzAY4BSAH/AcQBngFUAf8BzQGoAVsB/wHJAaIBVwH/AbsBlQFNAf8BpgGBATwB/wGO - AYEBKAH/Ab0BqQGNAf+0AAHLAa4BhgH/AcgBpAGBAf8B7wHlAdUB/wH0Ae0B4gH/AfAB4gHIAf8B7AHV - Aa0B/wHpAc8BnwH/AeoB1AGsAf8B7QHfAcUB/wHvAekB3QH/AeoB4AHQAf8BxQGiAYEB/wHLAa4BhgH/ - GAABtQGdAYEB/wGTAYEBMAH/Ab0BmQFTAf8B0QGrAYEB/wHTAa4BgQH/AdMBrgGBAf8B0wGtAYEB/wHS - Aa0BgQH/AdIBrQGBAf8B0gGtAYEB/wHLAaYBXQH/AaEBgQE5Af8BtQGdAYEB/6wAAcsBrgGGAf8B1AG3 - AY4B/wH5AfIB5gH/AfQB5QHKAf8B7wHVAaUB/wHvAdUBpQH/Ae4B1AGlAf8B7QHTAaQB/wHrAdIBowH/ - AekB0AGhAf8B6QHQAaEB/wHtAd8BxAH/AfAB6QHeAf8BzwGyAYoB/wHLAa4BhgH/EAABtQGdAYEB/wGW - AYEBNQH/AcYBpAGAAf8B2AG0AYEB/wHaAbYBgQH/AdoBtgGBAf8B2QG1AYEB/wHYAbQBgQH/AdYBswGB - Af8B1QGxAYEB/wHVAbEBgQH/AdUBsQGBAf8B1QGxAYEB/wGtAYcBRQH/AbUBnQGBAf+kAAHQAbgBlwH/ - AcsBpwGBAf8B+wH0AegB/wH1AeABuQH/AfMB2gGqAf8B8wHaAaoB/wHyAdkBqgH/AfIB2QGqAf8B8QHY - AakB/wHwAdcBqAH/Ae4B1QGnAf8B6wHTAaUB/wHqAdIBpAH/AesB1wGxAf8B8AHpAd4B/wHGAaMBgQH/ - AdABuAGXAf8IAAG+AakBjwH/AY4BgQEvAf8BvwGeAV0B/wHbAbgBgQH/AeABvAGBAf8B4AG8AYEB/wHg - AbsBgQH/AeABuwGBAf8B3wG7AYEB/wHeAboBgQH/AdwBuAGBAf8B2QG2AYEB/wHYAbUBgQH/AdgBtQGB - Af8B2AG1AYEB/wGkAYEBPgH/Ab4BqQGPAf8kAAGBAeMBNgH/AYEB5AE4Af8B8AH8AewB/3AAAbUBhQE+ - Af8B9gHsAdsB/wH7AewB0QH/AfgB3gGwAf8B+AHeAbAB/wH3Ad0BsAH/AfcB3QGwAf8B+wHrAdAB/wH8 - AfQB5gH/AfkB6gHPAf8B9AHbAa4B/wHxAdgBqwH/Ae0B1QGpAf8B7AHUAagB/wHuAeABxgH/AeoB4AHQ - Af8BtAGEAT4B/wgAAYsBXQEnAf8BqgGMAVIB/wHVAbQBgQH/AeUBwgGCAf8B5gHDAYIB/wHlAcIBggH/ - AeUBwgGCAf8B8AHbAbUB/wH3AewB2AH/Ae4B2gG0Af8B4gHAAYEB/wHgAb4BgQH/AdwBuwGBAf8B2wG6 - AYEB/wHbAboBgQH/AdMBsQGBAf8BjgGBASkB/yAAAbIB8QGcAf8BMwHbAQAB/wEzAdsBAAH/AVAB4AEf - Af8B8gH9Ae4B/2gAAdYBwQGmAf8B0QGxAYUB/wH+AfgB7gH/AfoB4wG5Af8B+gHiAbgB/wH6AeIBtQH/ - AfoB4QG0Af8B/AHtAdMB/wH9AfYB6AH/Ay0B/wH9AfUB5wH/AfsB7AHSAf8B9gHdAbEB/wHyAdoBrgH/ - Ae4B1gGsAf8B7QHWAasB/wHxAeoB4AH/AcsBqwGBAf8B1gHBAaYB/wHGAbUBnwH/AZIBgQE6Af8BxAGo - AYEB/wHjAcUBjAH/AesBzAGQAf8B6gHKAYwB/wHqAckBigH/AfIB3wG6Af8B+AHuAdsB/wMtAf8B+AHu - AdoB/wHxAd4BuQH/AeYBxgGIAf8B4wHDAYYB/wHfAcABhAH/Ad4BvwGDAf8B3gG/AYMB/wGqAYUBRwH/ - AcYBtQGfAf8gAAFFAd4BEQH/ATMB2wEAAf8BMwHbAQAB/wFUAeEBJAH/Ae8B/AHrAf9kAAHCAZ4BgQH/ - AekB2AG/Af8B/QHyAd8B/wH8AecBwQH/AfsB5gHAAf8B+wHlAbwB/wH9Ae4B1QH/Af4B9gHpAf8DLQH/ - Ay0B/wMtAf8B/QH2AekB/wH7Ae0B1AH/AfYB3wG0Af8B8gHbAbIB/wHuAdcBrwH/AfAB4wHMAf8B4AHP - AbYB/wHBAZwBgQH/AaYBiAFbAf8BoQGGAVcB/wHTAboBjQH/AewB0QGeAf8B7wHSAZ4B/wHuAdABmAH/ - AfQB4gG/Af8B+QHwAd0B/wMtAf8DLQH/Ay0B/wH5Ae8B3QH/AfMB4AG+Af8B6AHJAY8B/wHlAcYBjQH/ - AeEBwwGLAf8B4QHDAYsB/wHIAagBgQH/AaUBhwFZAf8kAAE/AdcBEQH/AS0B0wEAAf8BLQHTAQAB/wFP - AdoBJAH/AfMB/AHwAf9gAAG3AYoBRwH/AfcB7gHhAf8B/QHuAdIB/wH9AeoByAH/AfwB6QHFAf8B/QHx - AdkB/wH+AfcB6gH/Ay0B/wMtAf8DLQH/Ay0B/wMtAf8B/gH3AeoB/wH7Ae0B1QH/AfUB3wG2Af8B8QHb - AbMB/wHvAd0BvAH/AesB4QHSAf8BtwGKAUcB/wGVAYEBOQH/Aa0BlwGBAf8B2QHDAZsB/wHxAdkBqwH/ - AfEB2AGnAf8B9gHmAccB/wH6AfEB4AH/Ay0B/wMtAf8DLQH/Ay0B/wMtAf8B+gHwAd8B/wHzAeIBwAH/ - AegBywGUAf8B5QHIAZEB/wHjAcYBkAH/AdoBvAGGAf8BlQGBATkB/xAAAYEB2QFKAf8BgQHdAVsB/wGB - Ad4BgQH/AYwB4QGBAf8BmAHkAYMB/wFDAdABHwH/ASUByAEAAf8BJQHIAQAB/wElAcgBAAH/AUoB0gEo - Af8B7gH7AesB/1wAAbMBggE7Af8B/AH4AfAB/wH+Ae0B0gH/Af0B7AHOAf8B/gHzAeAB/wH+AfgB7QH/ - Ay0B/wMtAf8DLQH/Af4B9wHrAf8DLQH/Ay0B/wMtAf8B/QH2AeoB/wH7Ae0B1gH/AfQB3gG3Af8B8QHc - AbgB/wHvAekB3wH/AbMBggE7Af8BjgGBASsB/wG3AaoBlAH/Ad8B0gG6Af8B9QHoAc8B/wH7AfIB4gH/ - Af0B+AHvAf8DLQH/Ay0B/wMtAf8B/AH3Ae0B/wMtAf8DLQH/Ay0B/wH7AfYB7AH/AfYB7AHZAf8B7QHd - Ab0B/wHqAdoBuwH/AeQB0wGzAf8BjgGBASsB/wwAARwBuwEAAf8BHAG7AQAB/wEcAbsBAAH/ARwBuwEA - Af8BHAG7AQAB/wEcAbsBAAH/ARwBuwEAAf8BHAG7AQAB/wEcAbsBAAH/ARwBuwEAAf8BHAG7AQAB/wEx - AcEBEwH/A/sB/1gAAbcBigFHAf8B9wHwAeYB/wH9AfYB6QH/Af0B9AHkAf8B/gH7AfYB/wMtAf8DLQH/ - Ay0B/wH+AfoB8wH/Af0B9gHoAf8B/gH6AfMB/wMtAf8DLQH/Ay0B/wH9AfkB8gH/AfQB6AHSAf8B8QHo - AdUB/wHsAeQB2QH/AbcBigFHAf8BlQGBATkB/wG1AacBkQH/AdoBzwG7Af8B8wHoAdMB/wH9AfkB8gH/ - Ay0B/wMtAf8DLQH/Af0B+AHvAf8B+wHxAeAB/wH9AfgB7wH/Ay0B/wMtAf8DLQH/AfsB9gHtAf8B7wHh - AcQB/wHsAd4BwQH/AdsBygGrAf8BlQGBATkB/wwAARABqwEAAf8BEAGrAQAB/wEQAasBAAH/ARABqwEA - Af8BEAGrAQAB/wEQAasBAAH/ARABqwEAAf8BEAGrAQAB/wEQAasBAAH/ARABqwEAAf8BEAGrAQAB/wEl - AbMBEwH/A/sB/1gAAcIBngGBAf8B6QHaAcYB/wH+AfoB8wH/Af0B9gHoAf8B/gH8AfcB/wMtAf8DLQH/ - Af4B+wH0Af8B/QH3AeoB/wH8AfEB3AH/Af0B9wHqAf8B/gH7AfQB/wMtAf8DLQH/Af0B+QHzAf8B9QHq - AdYB/wHzAe0B4wH/AeEB0QG8Af8BwgGeAYEB/wGmAYgBWwH/AawBmQGBAf8B0gHIAbcB/wHuAeQB0wH/ - Af0B+gH0Af8DLQH/Ay0B/wH9AfkB8AH/AfsB8gHiAf8B+AHqAc8B/wH7AfIB4gH/Af0B+AHwAf8DLQH/ - Ay0B/wH7AfcB7wH/AfEB5AHJAf8B7QHgAcYB/wHFAbEBjwH/AaYBiAFbAf8QAAFMAbcBSAH/AVoBvQFW - Af8BgQG/AVsB/wGBAcYBgQH/AYUBzQGCAf8BJwGoASIB/wEDAZkBAAH/AQMBmQEAAf8BAwGZAQAB/wEr - AakBJgH/AeQB9AHjAf9cAAHWAcEBpgH/AdEBswGKAf8B/gH9AfoB/wH9AfcB6wH/Af4B+gHyAf8B/gH8 - AfgB/wH+AfwB9wH/Af0B+AHuAf8B/AHzAeAB/wH8AfIB4AH/AfwB8gHgAf8B/QH3AewB/wH+AfsB9QH/ - Af0B+gH0Af8B+wH1AeoB/wH1AesB2QH/AfYB9AHvAf8BzQGvAYUB/wHWAcEBpgH/AcYBtQGfAf8BnQGB - AVUB/wHIAb8BsAH/AeQB3AHNAf8B+wH1AewB/wH+AfsB9QH/Af0B+gH0Af8B+wH1AegB/wH5Ae4B1wH/ - AfkB7QHWAf8B+QHtAdYB/wH7AfQB5gH/Af0B+QHyAf8B/QH5AfEB/wH5AfIB5AH/AfIB5gHPAf8B6wHg - AckB/wGmAYgBWQH/AcYBtQGfAf8kAAEQAZcBEwH/AQABjQEAAf8BAAGNAQAB/wEjAZ8BJgH/AewB9wHs - Af9kAAG1AYUBPwH/AfYB8AHnAf8B/gH7AfUB/wH9AfgB7QH/Af0B9wHsAf8B/QH2AekB/wH9AfUB5wH/ - AfwB9QHmAf8B/AH0AeUB/wH8AfQB5AH/AfwB9AHkAf8B/AHzAeMB/wH7AfIB4QH/AfgB7wHeAf8B9wHy - AekB/wHwAekB3gH/AbQBhQE+Af8IAAGNAYEBKwH/AboBrgGdAf8B1QHNAcAB/wHsAeUB2AH/AfkB8gHk - Af8B+wHzAeMB/wH7AfIB4QH/AfsB8QHfAf8B+gHxAd0B/wH6AfAB3QH/AfoB8AHcAf8B+gHvAdsB/wH5 - Ae4B2QH/AfYB6wHXAf8B8AHlAdEB/wHSAcMBqgH/AY0BgQErAf8kAAEFAZIBCAH/AQABjQEAAf8BAAGN - AQAB/wEeAZ0BIQH/AeoB9gHqAf9oAAHRAbkBmQH/AcsBqgGBAf8B/gH9AfsB/wH+AfoB8wH/Af4B+AHv - Af8B/gH4Ae4B/wH+AfcB7AH/Af0B9gHrAf8B/QH2AeoB/wH9AfYB6QH/Af0B9QHoAf8B/QH1AeYB/wH8 - AfMB5AH/AfoB8wHnAf8B+gH4AfQB/wHIAaYBgQH/AdEBuQGZAf8IAAG/AasBkQH/AZwBgQFQAf8BxgG/ - AbIB/wHZAdMBxwH/Ae0B5wHbAf8B+AHyAeYB/wH7AfUB6AH/AfwB9QHnAf8B/AH0AeYB/wH8AfQB5AH/ - AfsB8wHjAf8B+wHzAeEB/wH5AfAB3gH/AfIB6QHWAf8B3QHUAcAB/wGaAYEBSgH/Ab8BqwGRAf8gAAGd - AdMBngH/AQABjQEAAf8BAAGNAQAB/wEbAZwBHgH/AfEB+QHxAf9wAAHLAa4BhgH/AdUBugGWAf8B/gH9 - AfwB/wH+AfwB+AH/Af4B+QHxAf8B/gH4AfAB/wH+AfgB7wH/Af0B9wHuAf8B/QH3AewB/wH9AfYB6wH/ - Af0B9gHqAf8B/gH6AfMB/wH8AfoB9wH/AdUBugGWAf8BywGuAYYB/xAAAbUBnQGBAf8BowGKAYEB/wHG - AcABswH/AdUBzwHDAf8B5QHgAdQB/wHwAeoB3wH/AfYB8AHlAf8B+gH0AecB/wH7AfQB5wH/AfkB8gHk - Af8B9AHrAdwB/wHpAeABzwH/AdMBygG4Af8BnwGEAVkB/wG1AZ0BgQH/KAABMgGmATQB/wE1AacBNwH/ - AfQB+gH0Af94AAHLAa4BhgH/AckBpwGBAf8B9wHyAeoB/wL+AfwB/wH+AfwB+AH/Af4B+gHzAf8B/gH4 - AfAB/wH9AfoB8gH/Af4B+wH2Af8B/gH9AfoB/wH3AfEB6AH/AckBpwGBAf8BywGuAYYB/xgAAbUBnQGB - Af8BmwGBAU4B/wG8AbIBogH/AckBwgG3Af8B0wHNAcIB/wHcAdYBywH/AeIB2wHQAf8B4wHcAdAB/wHd - AdUByAH/AdAByAG5Af8BtwGqAZUB/wGTAYEBQgH/AbUBnQGBAf+0AAHQAbgBlwH/AbUBhQE/Af8B0gG1 - AY0B/wHoAdoBxgH/AfUB7wHlAf8C/gH7Af8B9QHuAeUB/wHoAdkBxQH/AdIBtAGNAf8BtQGFAT8B/wHQ - AbgBlwH/IAABvgGpAY8B/wGNAYEBLAH/AZ4BgwFZAf8BrQGcAYQB/wG2AaoBmAH/AbsBswGlAf8BswGm - AZIB/wGmAZQBgQH/AZYBgQFOAf8BjAGAASoB/wG+AakBjwH/wAAB1QHAAaMB/wHDAZ8BgQH/AbgBjAFL - Af8BsQGBATYB/wG4AYwBSwH/AcMBnwGBAf8B1QHAAaMB/zAAAcUBtAGdAf8BqAGKAYAB/wGXAYEBPQH/ - AYsBXAEmAf8BlwGBAT0B/wGoAYoBgAH/AcUBtAGdAf/IAAPFAf8DpwH/A5YB/wOMAf8DlgH/A6cB/wPF - Af8wAAHVAb8BogH/AcIBngGBAf8BtwGKAUcB/wGxAYEBNgH/AbcBigFHAf8BwgGeAYEB/wHVAb8BogH/ - MAABxQGzAZsB/wGmAYgBWwH/AZUBgQE5Af8BiwFcASYB/wGVAYEBOQH/AaYBiAFbAf8BxQGzAZsB/zAA - A8UB/wOnAf8DlgH/A4wB/wOWAf8DpwH/A8UB/ygAA74B/wOQAf8DtQH/A9AB/wPfAf8D5wH/A94B/wPO - Af8DtAH/A5AB/wO+Af8gAAHRAbcBlQH/AbQBhAE+Af8BzgGuAYMB/wHgAc0BsgH/AeoB3wHOAf8B7wHp - AdwB/wHpAd8BzQH/Ad4BzAGxAf8BzAGtAYIB/wG0AYQBPgH/AdEBtwGVAf8gAAG9AakBjQH/AYwBXQEn - Af8BnAGBATcB/wGzAY4BSAH/AcQBngFUAf8BzQGoAVsB/wHJAaIBVwH/AbsBlQFNAf8BpgGBATwB/wGO - AYEBKAH/Ab0BqQGNAf8gAAO+Af8DkAH/A7UB/wPQAf8D3wH/A+cB/wPeAf8DzgH/A7QB/wOQAf8DvgH/ - HAADtQH/A6wB/wPkAf8D6wH/A90B/wPPAf8DxgH/A80B/wPaAf8D5wH/A+AB/wOqAf8DtQH/GAABywGu - AYYB/wHIAaQBgQH/Ae8B5QHVAf8B9AHtAeIB/wHwAeIByAH/AewB1QGtAf8B6QHPAZ8B/wHqAdQBrAH/ - Ae0B3wHFAf8B7wHpAd0B/wHqAeAB0AH/AcUBogGBAf8BywGuAYYB/xgAAbUBnQGBAf8BkwGBATAB/wG9 - AZkBUwH/AdEBqwGBAf8B0wGuAYEB/wHTAa4BgQH/AdMBrQGBAf8B0gGtAYEB/wHSAa0BgQH/AdIBrQGB - Af8BywGmAV0B/wGhAYEBOQH/AbUBnQGBAf8YAAO1Af8DrAH/A+QB/wPrAf8D3QH/A88B/wPGAf8DzQH/ - A9oB/wPnAf8D4AH/A6oB/wO1Af8UAAO1Af8DvAH/A+8B/wPgAf8DywH/A8sB/wPKAf8DygH/A8gB/wPG - Af8DxgH/A9kB/wPnAf8DuAH/A7UB/xAAAcsBrgGGAf8B1AG3AY4B/wH5AfIB5gH/AfQB5QHKAf8B7wHV - AaUB/wHvAdUBpQH/Ae4B1AGlAf8B7QHTAaQB/wHrAdIBowH/AekB0AGhAf8B6QHQAaEB/wHtAd8BxAH/ - AfAB6QHeAf8BzwGyAYoB/wHLAa4BhgH/EAABtQGdAYEB/wGWAYEBNQH/AcYBpAGAAf8B2AG0AYEB/wHa - AbYBgQH/AdoBtgGBAf8B2QG1AYEB/wHYAbQBgQH/AdYBswGBAf8B1QGxAYEB/wHVAbEBgQH/AdUBsQGB - Af8B1QGxAYEB/wGtAYcBRQH/AbUBnQGBAf8QAAO1Af8DvAH/A+8B/wPgAf8DywH/A8sB/wPKAf8DygH/ - A8gB/wPGAf8DxgH/A9kB/wPnAf8DuAH/A7UB/wwAA74B/wOvAf8D8gH/A9gB/wPQAf8D0AH/A88B/wPP - Af8DzgH/A80B/wPMAf8DyQH/A8gB/wPQAf8D6AH/A6sB/wO+Af8IAAHQAbgBlwH/AcsBpwGBAf8B+wH0 - AegB/wH1AeABuQH/AfMB2gGqAf8B8wHaAaoB/wHyAdkBqgH/AfIB2QGqAf8B8QHYAakB/wHwAdcBqAH/ - Ae4B1QGnAf8B6wHTAaUB/wHqAdIBpAH/AesB1wGxAf8B8AHpAd4B/wHGAaMBgQH/AdABuAGXAf8IAAG+ - AakBjwH/AY4BgQEvAf8BvwGeAV0B/wHbAbgBgQH/AeABvAGBAf8B4AG8AYEB/wHgAbsBgQH/AeABuwGB - Af8B3wG7AYEB/wHeAboBgQH/AdwBuAGBAf8B2QG2AYEB/wHYAbUBgQH/AdgBtQGBAf8B2AG1AYEB/wGk - AYEBPgH/Ab4BqQGPAf8IAAO+Af8DrwH/A/IB/wPYAf8D0AH/A9AB/wPPAf8DzwH/A84B/wPNAf8DzAH/ - A8kB/wPIAf8D0AH/A+gB/wOrAf8DvgH/CAADkQH/A+oB/wPmAf8D1AH/A9QB/wPTAf8D0wH/A9MB/wPS - Af8D0gH/A9EB/wPOAf8DywH/A8oB/wPaAf8D3wH/A5AB/wgAAbUBhQE+Af8B9gHsAdsB/wH7AewB0QH/ - AfgB3gGwAf8B+AHeAbAB/wH3Ad0BsAH/AfcB3QGwAf8B9wHdAbAB/wH2AdwBrwH/AfUB3AGuAf8B9AHb - Aa4B/wHxAdgBqwH/Ae0B1QGpAf8B7AHUAagB/wHuAeABxgH/AeoB4AHQAf8BtAGEAT4B/wgAAYsBXQEn - Af8BqgGMAVIB/wHVAbQBgQH/AeUBwgGCAf8B5gHDAYIB/wHlAcIBggH/AeUBwgGCAf8B5QHCAYIB/wHk - AcIBgQH/AeMBwQGBAf8B4gHAAYEB/wHgAb4BgQH/AdwBuwGBAf8B2wG6AYEB/wHbAboBgQH/AdMBsQGB - Af8BjgGBASkB/wgAA5EB/wPqAf8D5gH/A9QB/wPUAf8D0wH/A9MB/wPlAf8D8QH/A+QB/wPRAf8DzgH/ - A8sB/wPKAf8D2gH/A98B/wOQAf8EAAPHAf8DuAH/A/YB/wPaAf8D6AH/A/MB/wPzAf8D5wH/A9cB/wPW - Af8D1gH/A+YB/wPyAf8D8AH/A+IB/wPMAf8D6QH/A7IB/wPHAf8B1gHBAaYB/wHRAbEBhQH/Af4B+AHu - Af8B+gHjAbkB/wH8Ae4B1QH/Af0B9gHoAf8B/QH2AegB/wH8Ae0B0wH/AfoB4QG0Af8B+QHgAbMB/wH5 - AeABswH/AfsB7AHSAf8B/AH0AecB/wH7AfQB5gH/AfUB5gHOAf8B7QHWAasB/wHxAeoB4AH/AcsBqwGB - Af8B1gHBAaYB/wHGAbUBnwH/AZIBgQE6Af8BxAGoAYEB/wHjAcUBjAH/AfMB4QG9Af8B+AHvAdsB/wH4 - Ae4B2wH/AfIB3wG6Af8B6gHJAYoB/wHpAcgBiQH/AekByAGJAf8B8QHeAbkB/wH3Ae0B2gH/AfYB7AHa - Af8B7AHZAbYB/wHeAb8BgwH/Ad4BvwGDAf8BqgGFAUcB/wHGAbUBnwH/A8cB/wO4Af8D9gH/A9oB/wPZ - Af8D2AH/A9cB/wPnAf8D8wH/Ay0B/wPyAf8D5gH/A9QB/wPQAf8DzQH/A8wB/wPpAf8DsgH/A8cB/wOn - Af8D2gH/A+4B/wPeAf8D9AH/Ay0B/wMtAf8D8wH/A+gB/wPZAf8D6AH/A/MB/wMtAf8DLQH/A/EB/wPO - Af8D3gH/A9EB/wOmAf8BwgGeAYEB/wHpAdgBvwH/Af0B8gHfAf8B/AHnAcEB/wH+AfcB6wH/Ay0B/wMt - Af8B/gH2AekB/wH9Ae4B1QH/AfsB4wG4Af8B/QHuAdUB/wH9AfYB6QH/Ay0B/wMtAf8B+wH0AecB/wHu - AdcBrwH/AfAB4wHMAf8B4AHPAbYB/wHBAZwBgQH/AaYBiAFbAf8BoQGGAVcB/wHTAboBjQH/AewB0QGe - Af8B+gHxAeEB/wMtAf8DLQH/AfkB8AHdAf8B9AHiAb4B/wHtAc0BkgH/AfQB4gG+Af8B+QHvAd0B/wMt - Af8DLQH/AfcB7QHcAf8B4QHDAYsB/wHhAcMBiwH/AcgBqAGBAf8BpQGHAVkB/wOnAf8D2gH/A+4B/wPe - Af8D3QH/A9sB/wPoAf8D8wH/Ay0B/wMtAf8DLQH/A/MB/wPnAf8D1QH/A9EB/wPOAf8D3gH/A9EB/wOm - Af8DlgH/A+4B/wPnAf8D4gH/A/UB/wMtAf8DLQH/Ay0B/wP0Af8D6gH/A/QB/wMtAf8DLQH/Ay0B/wPy - Af8D0gH/A9YB/wPgAf8DlgH/AbcBigFHAf8B9wHuAeEB/wH9Ae4B0gH/Af0B6gHIAf8B/gH4Ae0B/wMt - Af8DLQH/Ay0B/wH+AfcB6gH/Af0B8AHXAf8B/gH3AeoB/wMtAf8DLQH/Ay0B/wH8AfUB6AH/AfEB2wGz - Af8B7wHdAbwB/wHrAeEB0gH/AbcBigFHAf8BlQGBATkB/wGtAZcBgQH/AdkBwwGbAf8B8QHZAasB/wH7 - AfMB5AH/Ay0B/wMtAf8DLQH/AfoB8QHfAf8B9QHkAcIB/wH6AfEB3wH/Ay0B/wMtAf8DLQH/AfgB7wHe - Af8B5QHIAZEB/wHjAcYBkAH/AdoBvAGGAf8BlQGBATkB/wOWAf8D7gH/A+cB/wPiAf8D4AH/A+wB/wP0 - Af8DLQH/Ay0B/wMtAf8DLQH/Ay0B/wP0Af8D6AH/A9UB/wPSAf8D1gH/A+AB/wOWAf8DjwH/A/YB/wPn - Af8D5QH/A+4B/wP1Af8DLQH/Ay0B/wMtAf8D9AH/Ay0B/wMtAf8DLQH/A/QB/wPoAf8D1QH/A9QB/wPn - Af8DjwH/AbMBggE7Af8B/AH4AfAB/wH+Ae0B0gH/Af0B7AHOAf8B/gHzAeAB/wH+AfgB7QH/Ay0B/wMt - Af8DLQH/Af4B9wHrAf8DLQH/Ay0B/wMtAf8B/QH2AeoB/wH7Ae0B1gH/AfQB3gG3Af8B8QHcAbgB/wHv - AekB3wH/AbMBggE7Af8BjgGBASsB/wG3AaoBlAH/Ad8B0gG6Af8B9QHoAc8B/wH7AfIB4gH/Af0B+AHv - Af8DLQH/Ay0B/wMtAf8B/AH3Ae0B/wMtAf8DLQH/Ay0B/wH7AfYB7AH/AfYB7AHZAf8B7QHdAb0B/wHq - AdoBuwH/AeQB0wGzAf8BjgGBASsB/wOPAf8D9gH/A+cB/wPlAf8D7gH/A/UB/wMtAf8DLQH/Ay0B/wP0 - Af8DLQH/Ay0B/wMtAf8D9AH/A+gB/wPVAf8D1AH/A+cB/wOPAf8DlgH/A/EB/wPzAf8D8QH/A+8B/wP1 - Af8D+QH/Ay0B/wMtAf8DLQH/Ay0B/wMtAf8D+QH/A/IB/wPmAf8D5AH/A+QB/wPlAf8DlgH/AbcBigFH - Af8B9wHwAeYB/wH9AfYB6QH/Af0B9AHkAf8B/QHzAeEB/wH9AfcB7AH/Af4B+wH0Af8DLQH/Ay0B/wMt - Af8DLQH/Ay0B/wH+AfoB8wH/AfwB9QHnAf8B9wHrAdUB/wH0AegB0gH/AfEB6AHVAf8B7AHkAdkB/wG3 - AYoBRwH/AZUBgQE5Af8BtQGnAZEB/wHaAc8BuwH/AfMB6AHTAf8B+QHtAdYB/wH7AfMB5AH/Af0B+AHv - Af8DLQH/Ay0B/wMtAf8DLQH/Ay0B/wH9AfgB7wH/AfkB8AHeAf8B8gHjAcYB/wHvAeEBxAH/AewB3gHB - Af8B2wHKAasB/wGVAYEBOQH/A5YB/wPxAf8D8wH/A/EB/wP6Af8DLQH/Ay0B/wMtAf8D+QH/A/MB/wP5 - Af8DLQH/Ay0B/wMtAf8D9wH/A+QB/wPkAf8D5QH/A5YB/wOnAf8D3gH/A/kB/wPzAf8D8gH/A/AB/wP1 - Af8D+QH/Ay0B/wMtAf8DLQH/A/kB/wP0Af8D6wH/A+gB/wPmAf8D6wH/A9QB/wOnAf8BwgGeAYEB/wHp - AdoBxgH/Af4B+gHzAf8B/QH2AegB/wH9AfUB5gH/Af0B8wHiAf8B/QH3AewB/wH+AfsB9AH/Ay0B/wMt - Af8DLQH/Af4B+wH0Af8B/QH3AeoB/wH6Ae8B2gH/AfcB7AHYAf8B9QHqAdYB/wHzAe0B4wH/AeEB0QG8 - Af8BwgGeAYEB/wGmAYgBWwH/AawBmQGBAf8B0gHIAbcB/wHuAeQB0wH/AfkB7wHcAf8B+QHuAdcB/wH7 - AfQB5QH/Af0B+QHwAf8DLQH/Ay0B/wMtAf8B/QH4AfAB/wH7AfIB4gH/AfYB6AHNAf8B8wHlAcsB/wHx - AeQByQH/Ae0B4AHGAf8BxQGxAY8B/wGmAYgBWwH/A6cB/wPeAf8D+QH/A/MB/wP7Af8DLQH/Ay0B/wP5 - Af8D9AH/A+0B/wP0Af8D+QH/Ay0B/wMtAf8D+AH/A+YB/wPrAf8D1AH/A6cB/wPHAf8DuwH/A/0B/wP1 - Af8D9AH/A/IB/wPxAf8D9QH/A/oB/wMtAf8D+gH/A/UB/wPuAf8D7AH/A+oB/wPnAf8D8wH/A7YB/wPH - Af8B1gHBAaYB/wHRAbMBigH/Af4B/QH6Af8B/QH3AesB/wH9AfYB6gH/Af0B9QHnAf8B/AH0AeQB/wH9 - AfgB7gH/Af4B+wH1Af8DLQH/Af4B+wH1Af8B/QH3AewB/wH8AfIB3wH/AfoB8AHdAf8B+AHuAdwB/wH1 - AesB2QH/AfYB9AHvAf8BzQGvAYUB/wHWAcEBpgH/AcYBtQGfAf8BnQGBAVUB/wHIAb8BsAH/AeQB3AHN - Af8B9wHvAd8B/wH7AfIB4AH/AfoB8AHbAf8B+wH1AegB/wH9AfoB8wH/Ay0B/wH9AfkB8gH/AfsB9AHm - Af8B+QHtAdUB/wH3AesB0wH/AfUB6QHSAf8B8gHmAc8B/wHrAeAByQH/AaYBiAFZAf8BxgG1AZ8B/wPH - Af8DuwH/A/0B/wP1Af8D+QH/A/sB/wP7Af8D9QH/A+8B/wPuAf8D7gH/A/UB/wP6Af8D+QH/A/IB/wPn - Af8D8wH/A7YB/wPHAf8EAAORAf8D8QH/A/oB/wP1Af8D9AH/A/MB/wPyAf8D9wH/A/sB/wP2Af8D8AH/ - A+8B/wPuAf8D6wH/A/AB/wPpAf8DkQH/CAABtQGFAT8B/wH2AfAB5wH/Af4B+wH1Af8B/QH4Ae0B/wH9 - AfcB7AH/Af0B9gHpAf8B/QH1AecB/wH9AfkB8AH/Af4B/AH3Af8B/QH5Ae8B/wH8AfQB5AH/AfwB8wHj - Af8B+wHyAeEB/wH4Ae8B3gH/AfcB8gHpAf8B8AHpAd4B/wG0AYUBPgH/CAABjQGBASsB/wG6Aa4BnQH/ - AdUBzQHAAf8B7AHlAdgB/wH5AfIB5AH/AfsB8wHjAf8B+wHyAeEB/wH9AfcB7AH/Af0B+wH0Af8B/AH2 - AesB/wH6AfAB3AH/AfoB7wHbAf8B+QHuAdkB/wH2AesB1wH/AfAB5QHRAf8B0gHDAaoB/wGNAYEBKwH/ - CAADkQH/A/EB/wP6Af8D9QH/A/QB/wPzAf8D8gH/A/EB/wPxAf8D8AH/A/AB/wPvAf8D7gH/A+sB/wPw - Af8D6QH/A5EB/wgAA8AB/wOzAf8D/QH/A/gB/wP2Af8D9QH/A/QB/wPzAf8D8wH/A/IB/wPyAf8D8QH/ - A+8B/wPwAf8D9wH/A68B/wPAAf8IAAHRAbkBmQH/AcsBqgGBAf8B/gH9AfsB/wH+AfoB8wH/Af4B+AHv - Af8B/gH4Ae4B/wH+AfcB7AH/Af0B9gHrAf8B/QH2AeoB/wH9AfYB6QH/Af0B9QHoAf8B/QH1AeYB/wH8 - AfMB5AH/AfoB8wHnAf8B+gH4AfQB/wHIAaYBgQH/AdEBuQGZAf8IAAG/AasBkQH/AZwBgQFQAf8BxgG/ - AbIB/wHZAdMBxwH/Ae0B5wHbAf8B+AHyAeYB/wH7AfUB6AH/AfwB9QHnAf8B/AH0AeYB/wH8AfQB5AH/ - AfsB8wHjAf8B+wHzAeEB/wH5AfAB3gH/AfIB6QHWAf8B3QHUAcAB/wGaAYEBSgH/Ab8BqwGRAf8IAAPA - Af8DswH/A/0B/wP4Af8D9gH/A/UB/wP0Af8D8wH/A/MB/wPyAf8D8gH/A/EB/wPvAf8D8AH/A/cB/wOv - Af8DwAH/DAADtQH/A8EB/wP9Af8D+gH/A/YB/wP2Af8D9QH/A/QB/wP0Af8D8wH/A/IB/wP3Af8D+QH/ - A8AB/wO1Af8QAAHLAa4BhgH/AdUBugGWAf8B/gH9AfwB/wH+AfwB+AH/Af4B+QHxAf8B/gH4AfAB/wH+ - AfgB7wH/Af0B9wHuAf8B/QH3AewB/wH9AfYB6wH/Af0B9gHqAf8B/gH6AfMB/wH8AfoB9wH/AdUBugGW - Af8BywGuAYYB/xAAAbUBnQGBAf8BowGKAYEB/wHGAcABswH/AdUBzwHDAf8B5QHgAdQB/wHwAeoB3wH/ - AfYB8AHlAf8B+gH0AecB/wH7AfQB5wH/AfkB8gHkAf8B9AHrAdwB/wHpAeABzwH/AdMBygG4Af8BnwGE - AVkB/wG1AZ0BgQH/EAADtQH/A8EB/wP9Af8D+gH/A/YB/wP2Af8D9QH/A/QB/wP0Af8D8wH/A/IB/wP3 - Af8D+QH/A8AB/wO1Af8UAAO1Af8DsAH/A/IB/wP9Af8D+wH/A/gB/wP2Af8D9wH/A/kB/wP8Af8D8QH/ - A68B/wO1Af8YAAHLAa4BhgH/AckBpwGBAf8B9wHyAeoB/wL+AfwB/wH+AfwB+AH/Af4B+gHzAf8B/gH4 - AfAB/wH9AfoB8gH/Af4B+wH2Af8B/gH9AfoB/wH3AfEB6AH/AckBpwGBAf8BywGuAYYB/xgAAbUBnQGB - Af8BmwGBAU4B/wG8AbIBogH/AckBwgG3Af8B0wHNAcIB/wHcAdYBywH/AeIB2wHQAf8B4wHcAdAB/wHd - AdUByAH/AdAByAG5Af8BtwGqAZUB/wGTAYEBQgH/AbUBnQGBAf8YAAO1Af8DsAH/A/IB/wP9Af8D+wH/ - A/gB/wP2Af8D9wH/A/kB/wP8Af8D8QH/A68B/wO1Af8cAAO+Af8DkQH/A7wB/wPdAf8D8AH/A/0B/wPw - Af8D3QH/A7sB/wORAf8DvgH/IAAB0AG4AZcB/wG1AYUBPwH/AdIBtQGNAf8B6AHaAcYB/wH1Ae8B5QH/ - Av4B+wH/AfUB7gHlAf8B6AHZAcUB/wHSAbQBjQH/AbUBhQE/Af8B0AG4AZcB/yAAAb4BqQGPAf8BjQGB - ASwB/wGeAYMBWQH/Aa0BnAGEAf8BtgGqAZgB/wG7AbMBpQH/AbMBpgGSAf8BpgGUAYEB/wGWAYEBTgH/ - AYwBgAEqAf8BvgGpAY8B/yAAA74B/wORAf8DvAH/A90B/wPwAf8D/QH/A/AB/wPdAf8DuwH/A5EB/wO+ - Af8oAAPFAf8DqAH/A5gB/wOMAf8DmAH/A6gB/wPFAf8wAAHVAcABowH/AcMBnwGBAf8BuAGMAUsB/wGx - AYEBNgH/AbgBjAFLAf8BwwGfAYEB/wHVAcABowH/MAABxQG0AZ0B/wGoAYoBgAH/AZcBgQE9Af8BiwFc - ASYB/wGXAYEBPQH/AagBigGAAf8BxQG0AZ0B/zAAA8UB/wOoAf8DmAH/A4wB/wOYAf8DqAH/A8UB/xgA - AUIBTQE+BwABPgMAASgDAAFMAwABJgMAAQEBAAEBBQAByAEBFgAD/wEAAfwBBwH/AYAD/wGABAAB8AEB - Af4BAAE/Av8BgAQAAeABAAH8AQABHwL/AYAEAAHAAQABeAEAAQ8C/wGABAABgAEAATABAAEHAfwBfwGA - BAABgAEAATABAAEHAfgBPwGACAABAwH8AR8BgAgAAQMB/gEPAYAIAAEDAcABBwGACAABAwGAAQMBgAgA - AQMBgAEDAYAIAAEDAcABBwGACAABAwH+AQ8BgAQAAYABAAEwAQABBwH8AR8BgAQAAYABAAEwAQABBwH4 - AT8BgAQAAcABAAF4AQABDwH8AX8BgAQAAeABAAH8AQABHwL/AYAEAAHwAQEB/gEAAT8C/wGABAAB/AEH - Af8BgAP/AYAEAAH8AQcB/wGAAf8B8AEfAf4BAwHwAgAB8AEBAf4BAAE/AcABBwH4AQAB8AIAAeABAAH8 - AQABHwGAAQMB8AEAAXACAAHAAQABeAEAAQ8BAAEBAeABAAEwAgABgAEAATABAAEGAgABwAEAARACAAGA - AQABMAEAAQYCAAHAAQABEFYAAYABAAEwAQABBgIAAcABAAEQAgABgAEAATABAAEGAgABwAEAARACAAHA - AQABeAEAAQ8BAAEBAeABAAEwAgAB4AEAAfwBAAEfAYABAwHwAQABcAIAAfABAQH+AQABPwHAAQcB+AEA - AfACAAH8AQcB/wGAAf8B8AEfAf4BAwHwAgAL - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAC + MgAAAk1TRnQBSQFMAgEBBwEAARQBAQEUAQEBEwEAARMBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFM + AwABJgMAAQEBAAEgBQABIAEtKgAB1QG/AaIB/wHCAZ4BgQH/AbcBigFHAf8BsQGBATYB/wG3AYoBRwH/ + AcIBngGBAf8B1QG/AaIB/zAAAcUBswGbAf8BpgGIAVsB/wGVAYEBOQH/AYsBXAEmAf8BlQGBATkB/wGm + AYgBWwH/AcUBswGbAf/AAAHRAbcBlQH/AbQBhAE+Af8BzgGuAYMB/wHgAc0BsgH/AeoB3wHOAf8B7wHp + AdwB/wHpAd8BzQH/Ad4BzAGxAf8BzAGtAYIB/wG0AYQBPgH/AdEBtwGVAf8gAAG9AakBjQH/AYwBXQEn + Af8BnAGBATcB/wGzAY4BSAH/AcQBngFUAf8BzQGoAVsB/wHJAaIBVwH/AbsBlQFNAf8BpgGBATwB/wGO + AYEBKAH/Ab0BqQGNAf+0AAHLAa4BhgH/AcgBpAGBAf8B7wHlAdUB/wH0Ae0B4gH/AfAB4gHIAf8B7AHV + Aa0B/wHpAc8BnwH/AeoB1AGsAf8B7QHfAcUB/wHvAekB3QH/AeoB4AHQAf8BxQGiAYEB/wHLAa4BhgH/ + GAABtQGdAYEB/wGTAYEBMAH/Ab0BmQFTAf8B0QGrAYEB/wHTAa4BgQH/AdMBrgGBAf8B0wGtAYEB/wHS + Aa0BgQH/AdIBrQGBAf8B0gGtAYEB/wHLAaYBXQH/AaEBgQE5Af8BtQGdAYEB/6wAAcsBrgGGAf8B1AG3 + AY4B/wH5AfIB5gH/AfQB5QHKAf8B7wHVAaUB/wHvAdUBpQH/Ae4B1AGlAf8B7QHTAaQB/wHrAdIBowH/ + AekB0AGhAf8B6QHQAaEB/wHtAd8BxAH/AfAB6QHeAf8BzwGyAYoB/wHLAa4BhgH/EAABtQGdAYEB/wGW + AYEBNQH/AcYBpAGAAf8B2AG0AYEB/wHaAbYBgQH/AdoBtgGBAf8B2QG1AYEB/wHYAbQBgQH/AdYBswGB + Af8B1QGxAYEB/wHVAbEBgQH/AdUBsQGBAf8B1QGxAYEB/wGtAYcBRQH/AbUBnQGBAf+kAAHQAbgBlwH/ + AcsBpwGBAf8B+wH0AegB/wH1AeABuQH/AfMB2gGqAf8B8wHaAaoB/wHyAdkBqgH/AfIB2QGqAf8B8QHY + AakB/wHwAdcBqAH/Ae4B1QGnAf8B6wHTAaUB/wHqAdIBpAH/AesB1wGxAf8B8AHpAd4B/wHGAaMBgQH/ + AdABuAGXAf8IAAG+AakBjwH/AY4BgQEvAf8BvwGeAV0B/wHbAbgBgQH/AeABvAGBAf8B4AG8AYEB/wHg + AbsBgQH/AeABuwGBAf8B3wG7AYEB/wHeAboBgQH/AdwBuAGBAf8B2QG2AYEB/wHYAbUBgQH/AdgBtQGB + Af8B2AG1AYEB/wGkAYEBPgH/Ab4BqQGPAf8kAAGBAeMBNgH/AYEB5AE4Af8B8AH8AewB/3AAAbUBhQE+ + Af8B9gHsAdsB/wH7AewB0QH/AfgB3gGwAf8B+AHeAbAB/wH3Ad0BsAH/AfcB3QGwAf8B+wHrAdAB/wH8 + AfQB5gH/AfkB6gHPAf8B9AHbAa4B/wHxAdgBqwH/Ae0B1QGpAf8B7AHUAagB/wHuAeABxgH/AeoB4AHQ + Af8BtAGEAT4B/wgAAYsBXQEnAf8BqgGMAVIB/wHVAbQBgQH/AeUBwgGCAf8B5gHDAYIB/wHlAcIBggH/ + AeUBwgGCAf8B8AHbAbUB/wH3AewB2AH/Ae4B2gG0Af8B4gHAAYEB/wHgAb4BgQH/AdwBuwGBAf8B2wG6 + AYEB/wHbAboBgQH/AdMBsQGBAf8BjgGBASkB/yAAAbIB8QGcAf8BMwHbAQAB/wEzAdsBAAH/AVAB4AEf + Af8B8gH9Ae4B/2gAAdYBwQGmAf8B0QGxAYUB/wH+AfgB7gH/AfoB4wG5Af8B+gHiAbgB/wH6AeIBtQH/ + AfoB4QG0Af8B/AHtAdMB/wH9AfYB6AH/Ay0B/wH9AfUB5wH/AfsB7AHSAf8B9gHdAbEB/wHyAdoBrgH/ + Ae4B1gGsAf8B7QHWAasB/wHxAeoB4AH/AcsBqwGBAf8B1gHBAaYB/wHGAbUBnwH/AZIBgQE6Af8BxAGo + AYEB/wHjAcUBjAH/AesBzAGQAf8B6gHKAYwB/wHqAckBigH/AfIB3wG6Af8B+AHuAdsB/wMtAf8B+AHu + AdoB/wHxAd4BuQH/AeYBxgGIAf8B4wHDAYYB/wHfAcABhAH/Ad4BvwGDAf8B3gG/AYMB/wGqAYUBRwH/ + AcYBtQGfAf8gAAFFAd4BEQH/ATMB2wEAAf8BMwHbAQAB/wFUAeEBJAH/Ae8B/AHrAf9kAAHCAZ4BgQH/ + AekB2AG/Af8B/QHyAd8B/wH8AecBwQH/AfsB5gHAAf8B+wHlAbwB/wH9Ae4B1QH/Af4B9gHpAf8DLQH/ + Ay0B/wMtAf8B/QH2AekB/wH7Ae0B1AH/AfYB3wG0Af8B8gHbAbIB/wHuAdcBrwH/AfAB4wHMAf8B4AHP + AbYB/wHBAZwBgQH/AaYBiAFbAf8BoQGGAVcB/wHTAboBjQH/AewB0QGeAf8B7wHSAZ4B/wHuAdABmAH/ + AfQB4gG/Af8B+QHwAd0B/wMtAf8DLQH/Ay0B/wH5Ae8B3QH/AfMB4AG+Af8B6AHJAY8B/wHlAcYBjQH/ + AeEBwwGLAf8B4QHDAYsB/wHIAagBgQH/AaUBhwFZAf8kAAE/AdcBEQH/AS0B0wEAAf8BLQHTAQAB/wFP + AdoBJAH/AfMB/AHwAf9gAAG3AYoBRwH/AfcB7gHhAf8B/QHuAdIB/wH9AeoByAH/AfwB6QHFAf8B/QHx + AdkB/wH+AfcB6gH/Ay0B/wMtAf8DLQH/Ay0B/wMtAf8B/gH3AeoB/wH7Ae0B1QH/AfUB3wG2Af8B8QHb + AbMB/wHvAd0BvAH/AesB4QHSAf8BtwGKAUcB/wGVAYEBOQH/Aa0BlwGBAf8B2QHDAZsB/wHxAdkBqwH/ + AfEB2AGnAf8B9gHmAccB/wH6AfEB4AH/Ay0B/wMtAf8DLQH/Ay0B/wMtAf8B+gHwAd8B/wHzAeIBwAH/ + AegBywGUAf8B5QHIAZEB/wHjAcYBkAH/AdoBvAGGAf8BlQGBATkB/xAAAYEB2QFKAf8BgQHdAVsB/wGB + Ad4BgQH/AYwB4QGBAf8BmAHkAYMB/wFDAdABHwH/ASUByAEAAf8BJQHIAQAB/wElAcgBAAH/AUoB0gEo + Af8B7gH7AesB/1wAAbMBggE7Af8B/AH4AfAB/wH+Ae0B0gH/Af0B7AHOAf8B/gHzAeAB/wH+AfgB7QH/ + Ay0B/wMtAf8DLQH/Af4B9wHrAf8DLQH/Ay0B/wMtAf8B/QH2AeoB/wH7Ae0B1gH/AfQB3gG3Af8B8QHc + AbgB/wHvAekB3wH/AbMBggE7Af8BjgGBASsB/wG3AaoBlAH/Ad8B0gG6Af8B9QHoAc8B/wH7AfIB4gH/ + Af0B+AHvAf8DLQH/Ay0B/wMtAf8B/AH3Ae0B/wMtAf8DLQH/Ay0B/wH7AfYB7AH/AfYB7AHZAf8B7QHd + Ab0B/wHqAdoBuwH/AeQB0wGzAf8BjgGBASsB/wwAARwBuwEAAf8BHAG7AQAB/wEcAbsBAAH/ARwBuwEA + Af8BHAG7AQAB/wEcAbsBAAH/ARwBuwEAAf8BHAG7AQAB/wEcAbsBAAH/ARwBuwEAAf8BHAG7AQAB/wEx + AcEBEwH/A/sB/1gAAbcBigFHAf8B9wHwAeYB/wH9AfYB6QH/Af0B9AHkAf8B/gH7AfYB/wMtAf8DLQH/ + Ay0B/wH+AfoB8wH/Af0B9gHoAf8B/gH6AfMB/wMtAf8DLQH/Ay0B/wH9AfkB8gH/AfQB6AHSAf8B8QHo + AdUB/wHsAeQB2QH/AbcBigFHAf8BlQGBATkB/wG1AacBkQH/AdoBzwG7Af8B8wHoAdMB/wH9AfkB8gH/ + Ay0B/wMtAf8DLQH/Af0B+AHvAf8B+wHxAeAB/wH9AfgB7wH/Ay0B/wMtAf8DLQH/AfsB9gHtAf8B7wHh + AcQB/wHsAd4BwQH/AdsBygGrAf8BlQGBATkB/wwAARABqwEAAf8BEAGrAQAB/wEQAasBAAH/ARABqwEA + Af8BEAGrAQAB/wEQAasBAAH/ARABqwEAAf8BEAGrAQAB/wEQAasBAAH/ARABqwEAAf8BEAGrAQAB/wEl + AbMBEwH/A/sB/1gAAcIBngGBAf8B6QHaAcYB/wH+AfoB8wH/Af0B9gHoAf8B/gH8AfcB/wMtAf8DLQH/ + Af4B+wH0Af8B/QH3AeoB/wH8AfEB3AH/Af0B9wHqAf8B/gH7AfQB/wMtAf8DLQH/Af0B+QHzAf8B9QHq + AdYB/wHzAe0B4wH/AeEB0QG8Af8BwgGeAYEB/wGmAYgBWwH/AawBmQGBAf8B0gHIAbcB/wHuAeQB0wH/ + Af0B+gH0Af8DLQH/Ay0B/wH9AfkB8AH/AfsB8gHiAf8B+AHqAc8B/wH7AfIB4gH/Af0B+AHwAf8DLQH/ + Ay0B/wH7AfcB7wH/AfEB5AHJAf8B7QHgAcYB/wHFAbEBjwH/AaYBiAFbAf8QAAFMAbcBSAH/AVoBvQFW + Af8BgQG/AVsB/wGBAcYBgQH/AYUBzQGCAf8BJwGoASIB/wEDAZkBAAH/AQMBmQEAAf8BAwGZAQAB/wEr + AakBJgH/AeQB9AHjAf9cAAHWAcEBpgH/AdEBswGKAf8B/gH9AfoB/wH9AfcB6wH/Af4B+gHyAf8B/gH8 + AfgB/wH+AfwB9wH/Af0B+AHuAf8B/AHzAeAB/wH8AfIB4AH/AfwB8gHgAf8B/QH3AewB/wH+AfsB9QH/ + Af0B+gH0Af8B+wH1AeoB/wH1AesB2QH/AfYB9AHvAf8BzQGvAYUB/wHWAcEBpgH/AcYBtQGfAf8BnQGB + AVUB/wHIAb8BsAH/AeQB3AHNAf8B+wH1AewB/wH+AfsB9QH/Af0B+gH0Af8B+wH1AegB/wH5Ae4B1wH/ + AfkB7QHWAf8B+QHtAdYB/wH7AfQB5gH/Af0B+QHyAf8B/QH5AfEB/wH5AfIB5AH/AfIB5gHPAf8B6wHg + AckB/wGmAYgBWQH/AcYBtQGfAf8kAAEQAZcBEwH/AQABjQEAAf8BAAGNAQAB/wEjAZ8BJgH/AewB9wHs + Af9kAAG1AYUBPwH/AfYB8AHnAf8B/gH7AfUB/wH9AfgB7QH/Af0B9wHsAf8B/QH2AekB/wH9AfUB5wH/ + AfwB9QHmAf8B/AH0AeUB/wH8AfQB5AH/AfwB9AHkAf8B/AHzAeMB/wH7AfIB4QH/AfgB7wHeAf8B9wHy + AekB/wHwAekB3gH/AbQBhQE+Af8IAAGNAYEBKwH/AboBrgGdAf8B1QHNAcAB/wHsAeUB2AH/AfkB8gHk + Af8B+wHzAeMB/wH7AfIB4QH/AfsB8QHfAf8B+gHxAd0B/wH6AfAB3QH/AfoB8AHcAf8B+gHvAdsB/wH5 + Ae4B2QH/AfYB6wHXAf8B8AHlAdEB/wHSAcMBqgH/AY0BgQErAf8kAAEFAZIBCAH/AQABjQEAAf8BAAGN + AQAB/wEeAZ0BIQH/AeoB9gHqAf9oAAHRAbkBmQH/AcsBqgGBAf8B/gH9AfsB/wH+AfoB8wH/Af4B+AHv + Af8B/gH4Ae4B/wH+AfcB7AH/Af0B9gHrAf8B/QH2AeoB/wH9AfYB6QH/Af0B9QHoAf8B/QH1AeYB/wH8 + AfMB5AH/AfoB8wHnAf8B+gH4AfQB/wHIAaYBgQH/AdEBuQGZAf8IAAG/AasBkQH/AZwBgQFQAf8BxgG/ + AbIB/wHZAdMBxwH/Ae0B5wHbAf8B+AHyAeYB/wH7AfUB6AH/AfwB9QHnAf8B/AH0AeYB/wH8AfQB5AH/ + AfsB8wHjAf8B+wHzAeEB/wH5AfAB3gH/AfIB6QHWAf8B3QHUAcAB/wGaAYEBSgH/Ab8BqwGRAf8gAAGd + AdMBngH/AQABjQEAAf8BAAGNAQAB/wEbAZwBHgH/AfEB+QHxAf9wAAHLAa4BhgH/AdUBugGWAf8B/gH9 + AfwB/wH+AfwB+AH/Af4B+QHxAf8B/gH4AfAB/wH+AfgB7wH/Af0B9wHuAf8B/QH3AewB/wH9AfYB6wH/ + Af0B9gHqAf8B/gH6AfMB/wH8AfoB9wH/AdUBugGWAf8BywGuAYYB/xAAAbUBnQGBAf8BowGKAYEB/wHG + AcABswH/AdUBzwHDAf8B5QHgAdQB/wHwAeoB3wH/AfYB8AHlAf8B+gH0AecB/wH7AfQB5wH/AfkB8gHk + Af8B9AHrAdwB/wHpAeABzwH/AdMBygG4Af8BnwGEAVkB/wG1AZ0BgQH/KAABMgGmATQB/wE1AacBNwH/ + AfQB+gH0Af94AAHLAa4BhgH/AckBpwGBAf8B9wHyAeoB/wL+AfwB/wH+AfwB+AH/Af4B+gHzAf8B/gH4 + AfAB/wH9AfoB8gH/Af4B+wH2Af8B/gH9AfoB/wH3AfEB6AH/AckBpwGBAf8BywGuAYYB/xgAAbUBnQGB + Af8BmwGBAU4B/wG8AbIBogH/AckBwgG3Af8B0wHNAcIB/wHcAdYBywH/AeIB2wHQAf8B4wHcAdAB/wHd + AdUByAH/AdAByAG5Af8BtwGqAZUB/wGTAYEBQgH/AbUBnQGBAf+0AAHQAbgBlwH/AbUBhQE/Af8B0gG1 + AY0B/wHoAdoBxgH/AfUB7wHlAf8C/gH7Af8B9QHuAeUB/wHoAdkBxQH/AdIBtAGNAf8BtQGFAT8B/wHQ + AbgBlwH/IAABvgGpAY8B/wGNAYEBLAH/AZ4BgwFZAf8BrQGcAYQB/wG2AaoBmAH/AbsBswGlAf8BswGm + AZIB/wGmAZQBgQH/AZYBgQFOAf8BjAGAASoB/wG+AakBjwH/wAAB1QHAAaMB/wHDAZ8BgQH/AbgBjAFL + Af8BsQGBATYB/wG4AYwBSwH/AcMBnwGBAf8B1QHAAaMB/zAAAcUBtAGdAf8BqAGKAYAB/wGXAYEBPQH/ + AYsBXAEmAf8BlwGBAT0B/wGoAYoBgAH/AcUBtAGdAf/IAAPFAf8DpwH/A5YB/wOMAf8DlgH/A6cB/wPF + Af8wAAHVAb8BogH/AcIBngGBAf8BtwGKAUcB/wGxAYEBNgH/AbcBigFHAf8BwgGeAYEB/wHVAb8BogH/ + MAABxQGzAZsB/wGmAYgBWwH/AZUBgQE5Af8BiwFcASYB/wGVAYEBOQH/AaYBiAFbAf8BxQGzAZsB/zAA + A8UB/wOnAf8DlgH/A4wB/wOWAf8DpwH/A8UB/ygAA74B/wOQAf8DtQH/A9AB/wPfAf8D5wH/A94B/wPO + Af8DtAH/A5AB/wO+Af8gAAHRAbcBlQH/AbQBhAE+Af8BzgGuAYMB/wHgAc0BsgH/AeoB3wHOAf8B7wHp + AdwB/wHpAd8BzQH/Ad4BzAGxAf8BzAGtAYIB/wG0AYQBPgH/AdEBtwGVAf8gAAG9AakBjQH/AYwBXQEn + Af8BnAGBATcB/wGzAY4BSAH/AcQBngFUAf8BzQGoAVsB/wHJAaIBVwH/AbsBlQFNAf8BpgGBATwB/wGO + AYEBKAH/Ab0BqQGNAf8gAAO+Af8DkAH/A7UB/wPQAf8D3wH/A+cB/wPeAf8DzgH/A7QB/wOQAf8DvgH/ + HAADtQH/A6wB/wPkAf8D6wH/A90B/wPPAf8DxgH/A80B/wPaAf8D5wH/A+AB/wOqAf8DtQH/GAABywGu + AYYB/wHIAaQBgQH/Ae8B5QHVAf8B9AHtAeIB/wHwAeIByAH/AewB1QGtAf8B6QHPAZ8B/wHqAdQBrAH/ + Ae0B3wHFAf8B7wHpAd0B/wHqAeAB0AH/AcUBogGBAf8BywGuAYYB/xgAAbUBnQGBAf8BkwGBATAB/wG9 + AZkBUwH/AdEBqwGBAf8B0wGuAYEB/wHTAa4BgQH/AdMBrQGBAf8B0gGtAYEB/wHSAa0BgQH/AdIBrQGB + Af8BywGmAV0B/wGhAYEBOQH/AbUBnQGBAf8YAAO1Af8DrAH/A+QB/wPrAf8D3QH/A88B/wPGAf8DzQH/ + A9oB/wPnAf8D4AH/A6oB/wO1Af8UAAO1Af8DvAH/A+8B/wPgAf8DywH/A8sB/wPKAf8DygH/A8gB/wPG + Af8DxgH/A9kB/wPnAf8DuAH/A7UB/xAAAcsBrgGGAf8B1AG3AY4B/wH5AfIB5gH/AfQB5QHKAf8B7wHV + AaUB/wHvAdUBpQH/Ae4B1AGlAf8B7QHTAaQB/wHrAdIBowH/AekB0AGhAf8B6QHQAaEB/wHtAd8BxAH/ + AfAB6QHeAf8BzwGyAYoB/wHLAa4BhgH/EAABtQGdAYEB/wGWAYEBNQH/AcYBpAGAAf8B2AG0AYEB/wHa + AbYBgQH/AdoBtgGBAf8B2QG1AYEB/wHYAbQBgQH/AdYBswGBAf8B1QGxAYEB/wHVAbEBgQH/AdUBsQGB + Af8B1QGxAYEB/wGtAYcBRQH/AbUBnQGBAf8QAAO1Af8DvAH/A+8B/wPgAf8DywH/A8sB/wPKAf8DygH/ + A8gB/wPGAf8DxgH/A9kB/wPnAf8DuAH/A7UB/wwAA74B/wOvAf8D8gH/A9gB/wPQAf8D0AH/A88B/wPP + Af8DzgH/A80B/wPMAf8DyQH/A8gB/wPQAf8D6AH/A6sB/wO+Af8IAAHQAbgBlwH/AcsBpwGBAf8B+wH0 + AegB/wH1AeABuQH/AfMB2gGqAf8B8wHaAaoB/wHyAdkBqgH/AfIB2QGqAf8B8QHYAakB/wHwAdcBqAH/ + Ae4B1QGnAf8B6wHTAaUB/wHqAdIBpAH/AesB1wGxAf8B8AHpAd4B/wHGAaMBgQH/AdABuAGXAf8IAAG+ + AakBjwH/AY4BgQEvAf8BvwGeAV0B/wHbAbgBgQH/AeABvAGBAf8B4AG8AYEB/wHgAbsBgQH/AeABuwGB + Af8B3wG7AYEB/wHeAboBgQH/AdwBuAGBAf8B2QG2AYEB/wHYAbUBgQH/AdgBtQGBAf8B2AG1AYEB/wGk + AYEBPgH/Ab4BqQGPAf8IAAO+Af8DrwH/A/IB/wPYAf8D0AH/A9AB/wPPAf8DzwH/A84B/wPNAf8DzAH/ + A8kB/wPIAf8D0AH/A+gB/wOrAf8DvgH/CAADkQH/A+oB/wPmAf8D1AH/A9QB/wPTAf8D0wH/A9MB/wPS + Af8D0gH/A9EB/wPOAf8DywH/A8oB/wPaAf8D3wH/A5AB/wgAAbUBhQE+Af8B9gHsAdsB/wH7AewB0QH/ + AfgB3gGwAf8B+AHeAbAB/wH3Ad0BsAH/AfcB3QGwAf8B9wHdAbAB/wH2AdwBrwH/AfUB3AGuAf8B9AHb + Aa4B/wHxAdgBqwH/Ae0B1QGpAf8B7AHUAagB/wHuAeABxgH/AeoB4AHQAf8BtAGEAT4B/wgAAYsBXQEn + Af8BqgGMAVIB/wHVAbQBgQH/AeUBwgGCAf8B5gHDAYIB/wHlAcIBggH/AeUBwgGCAf8B5QHCAYIB/wHk + AcIBgQH/AeMBwQGBAf8B4gHAAYEB/wHgAb4BgQH/AdwBuwGBAf8B2wG6AYEB/wHbAboBgQH/AdMBsQGB + Af8BjgGBASkB/wgAA5EB/wPqAf8D5gH/A9QB/wPUAf8D0wH/A9MB/wPlAf8D8QH/A+QB/wPRAf8DzgH/ + A8sB/wPKAf8D2gH/A98B/wOQAf8EAAPHAf8DuAH/A/YB/wPaAf8D6AH/A/MB/wPzAf8D5wH/A9cB/wPW + Af8D1gH/A+YB/wPyAf8D8AH/A+IB/wPMAf8D6QH/A7IB/wPHAf8B1gHBAaYB/wHRAbEBhQH/Af4B+AHu + Af8B+gHjAbkB/wH8Ae4B1QH/Af0B9gHoAf8B/QH2AegB/wH8Ae0B0wH/AfoB4QG0Af8B+QHgAbMB/wH5 + AeABswH/AfsB7AHSAf8B/AH0AecB/wH7AfQB5gH/AfUB5gHOAf8B7QHWAasB/wHxAeoB4AH/AcsBqwGB + Af8B1gHBAaYB/wHGAbUBnwH/AZIBgQE6Af8BxAGoAYEB/wHjAcUBjAH/AfMB4QG9Af8B+AHvAdsB/wH4 + Ae4B2wH/AfIB3wG6Af8B6gHJAYoB/wHpAcgBiQH/AekByAGJAf8B8QHeAbkB/wH3Ae0B2gH/AfYB7AHa + Af8B7AHZAbYB/wHeAb8BgwH/Ad4BvwGDAf8BqgGFAUcB/wHGAbUBnwH/A8cB/wO4Af8D9gH/A9oB/wPZ + Af8D2AH/A9cB/wPnAf8D8wH/Ay0B/wPyAf8D5gH/A9QB/wPQAf8DzQH/A8wB/wPpAf8DsgH/A8cB/wOn + Af8D2gH/A+4B/wPeAf8D9AH/Ay0B/wMtAf8D8wH/A+gB/wPZAf8D6AH/A/MB/wMtAf8DLQH/A/EB/wPO + Af8D3gH/A9EB/wOmAf8BwgGeAYEB/wHpAdgBvwH/Af0B8gHfAf8B/AHnAcEB/wH+AfcB6wH/Ay0B/wMt + Af8B/gH2AekB/wH9Ae4B1QH/AfsB4wG4Af8B/QHuAdUB/wH9AfYB6QH/Ay0B/wMtAf8B+wH0AecB/wHu + AdcBrwH/AfAB4wHMAf8B4AHPAbYB/wHBAZwBgQH/AaYBiAFbAf8BoQGGAVcB/wHTAboBjQH/AewB0QGe + Af8B+gHxAeEB/wMtAf8DLQH/AfkB8AHdAf8B9AHiAb4B/wHtAc0BkgH/AfQB4gG+Af8B+QHvAd0B/wMt + Af8DLQH/AfcB7QHcAf8B4QHDAYsB/wHhAcMBiwH/AcgBqAGBAf8BpQGHAVkB/wOnAf8D2gH/A+4B/wPe + Af8D3QH/A9sB/wPoAf8D8wH/Ay0B/wMtAf8DLQH/A/MB/wPnAf8D1QH/A9EB/wPOAf8D3gH/A9EB/wOm + Af8DlgH/A+4B/wPnAf8D4gH/A/UB/wMtAf8DLQH/Ay0B/wP0Af8D6gH/A/QB/wMtAf8DLQH/Ay0B/wPy + Af8D0gH/A9YB/wPgAf8DlgH/AbcBigFHAf8B9wHuAeEB/wH9Ae4B0gH/Af0B6gHIAf8B/gH4Ae0B/wMt + Af8DLQH/Ay0B/wH+AfcB6gH/Af0B8AHXAf8B/gH3AeoB/wMtAf8DLQH/Ay0B/wH8AfUB6AH/AfEB2wGz + Af8B7wHdAbwB/wHrAeEB0gH/AbcBigFHAf8BlQGBATkB/wGtAZcBgQH/AdkBwwGbAf8B8QHZAasB/wH7 + AfMB5AH/Ay0B/wMtAf8DLQH/AfoB8QHfAf8B9QHkAcIB/wH6AfEB3wH/Ay0B/wMtAf8DLQH/AfgB7wHe + Af8B5QHIAZEB/wHjAcYBkAH/AdoBvAGGAf8BlQGBATkB/wOWAf8D7gH/A+cB/wPiAf8D4AH/A+wB/wP0 + Af8DLQH/Ay0B/wMtAf8DLQH/Ay0B/wP0Af8D6AH/A9UB/wPSAf8D1gH/A+AB/wOWAf8DjwH/A/YB/wPn + Af8D5QH/A+4B/wP1Af8DLQH/Ay0B/wMtAf8D9AH/Ay0B/wMtAf8DLQH/A/QB/wPoAf8D1QH/A9QB/wPn + Af8DjwH/AbMBggE7Af8B/AH4AfAB/wH+Ae0B0gH/Af0B7AHOAf8B/gHzAeAB/wH+AfgB7QH/Ay0B/wMt + Af8DLQH/Af4B9wHrAf8DLQH/Ay0B/wMtAf8B/QH2AeoB/wH7Ae0B1gH/AfQB3gG3Af8B8QHcAbgB/wHv + AekB3wH/AbMBggE7Af8BjgGBASsB/wG3AaoBlAH/Ad8B0gG6Af8B9QHoAc8B/wH7AfIB4gH/Af0B+AHv + Af8DLQH/Ay0B/wMtAf8B/AH3Ae0B/wMtAf8DLQH/Ay0B/wH7AfYB7AH/AfYB7AHZAf8B7QHdAb0B/wHq + AdoBuwH/AeQB0wGzAf8BjgGBASsB/wOPAf8D9gH/A+cB/wPlAf8D7gH/A/UB/wMtAf8DLQH/Ay0B/wP0 + Af8DLQH/Ay0B/wMtAf8D9AH/A+gB/wPVAf8D1AH/A+cB/wOPAf8DlgH/A/EB/wPzAf8D8QH/A+8B/wP1 + Af8D+QH/Ay0B/wMtAf8DLQH/Ay0B/wMtAf8D+QH/A/IB/wPmAf8D5AH/A+QB/wPlAf8DlgH/AbcBigFH + Af8B9wHwAeYB/wH9AfYB6QH/Af0B9AHkAf8B/QHzAeEB/wH9AfcB7AH/Af4B+wH0Af8DLQH/Ay0B/wMt + Af8DLQH/Ay0B/wH+AfoB8wH/AfwB9QHnAf8B9wHrAdUB/wH0AegB0gH/AfEB6AHVAf8B7AHkAdkB/wG3 + AYoBRwH/AZUBgQE5Af8BtQGnAZEB/wHaAc8BuwH/AfMB6AHTAf8B+QHtAdYB/wH7AfMB5AH/Af0B+AHv + Af8DLQH/Ay0B/wMtAf8DLQH/Ay0B/wH9AfgB7wH/AfkB8AHeAf8B8gHjAcYB/wHvAeEBxAH/AewB3gHB + Af8B2wHKAasB/wGVAYEBOQH/A5YB/wPxAf8D8wH/A/EB/wP6Af8DLQH/Ay0B/wMtAf8D+QH/A/MB/wP5 + Af8DLQH/Ay0B/wMtAf8D9wH/A+QB/wPkAf8D5QH/A5YB/wOnAf8D3gH/A/kB/wPzAf8D8gH/A/AB/wP1 + Af8D+QH/Ay0B/wMtAf8DLQH/A/kB/wP0Af8D6wH/A+gB/wPmAf8D6wH/A9QB/wOnAf8BwgGeAYEB/wHp + AdoBxgH/Af4B+gHzAf8B/QH2AegB/wH9AfUB5gH/Af0B8wHiAf8B/QH3AewB/wH+AfsB9AH/Ay0B/wMt + Af8DLQH/Af4B+wH0Af8B/QH3AeoB/wH6Ae8B2gH/AfcB7AHYAf8B9QHqAdYB/wHzAe0B4wH/AeEB0QG8 + Af8BwgGeAYEB/wGmAYgBWwH/AawBmQGBAf8B0gHIAbcB/wHuAeQB0wH/AfkB7wHcAf8B+QHuAdcB/wH7 + AfQB5QH/Af0B+QHwAf8DLQH/Ay0B/wMtAf8B/QH4AfAB/wH7AfIB4gH/AfYB6AHNAf8B8wHlAcsB/wHx + AeQByQH/Ae0B4AHGAf8BxQGxAY8B/wGmAYgBWwH/A6cB/wPeAf8D+QH/A/MB/wP7Af8DLQH/Ay0B/wP5 + Af8D9AH/A+0B/wP0Af8D+QH/Ay0B/wMtAf8D+AH/A+YB/wPrAf8D1AH/A6cB/wPHAf8DuwH/A/0B/wP1 + Af8D9AH/A/IB/wPxAf8D9QH/A/oB/wMtAf8D+gH/A/UB/wPuAf8D7AH/A+oB/wPnAf8D8wH/A7YB/wPH + Af8B1gHBAaYB/wHRAbMBigH/Af4B/QH6Af8B/QH3AesB/wH9AfYB6gH/Af0B9QHnAf8B/AH0AeQB/wH9 + AfgB7gH/Af4B+wH1Af8DLQH/Af4B+wH1Af8B/QH3AewB/wH8AfIB3wH/AfoB8AHdAf8B+AHuAdwB/wH1 + AesB2QH/AfYB9AHvAf8BzQGvAYUB/wHWAcEBpgH/AcYBtQGfAf8BnQGBAVUB/wHIAb8BsAH/AeQB3AHN + Af8B9wHvAd8B/wH7AfIB4AH/AfoB8AHbAf8B+wH1AegB/wH9AfoB8wH/Ay0B/wH9AfkB8gH/AfsB9AHm + Af8B+QHtAdUB/wH3AesB0wH/AfUB6QHSAf8B8gHmAc8B/wHrAeAByQH/AaYBiAFZAf8BxgG1AZ8B/wPH + Af8DuwH/A/0B/wP1Af8D+QH/A/sB/wP7Af8D9QH/A+8B/wPuAf8D7gH/A/UB/wP6Af8D+QH/A/IB/wPn + Af8D8wH/A7YB/wPHAf8EAAORAf8D8QH/A/oB/wP1Af8D9AH/A/MB/wPyAf8D9wH/A/sB/wP2Af8D8AH/ + A+8B/wPuAf8D6wH/A/AB/wPpAf8DkQH/CAABtQGFAT8B/wH2AfAB5wH/Af4B+wH1Af8B/QH4Ae0B/wH9 + AfcB7AH/Af0B9gHpAf8B/QH1AecB/wH9AfkB8AH/Af4B/AH3Af8B/QH5Ae8B/wH8AfQB5AH/AfwB8wHj + Af8B+wHyAeEB/wH4Ae8B3gH/AfcB8gHpAf8B8AHpAd4B/wG0AYUBPgH/CAABjQGBASsB/wG6Aa4BnQH/ + AdUBzQHAAf8B7AHlAdgB/wH5AfIB5AH/AfsB8wHjAf8B+wHyAeEB/wH9AfcB7AH/Af0B+wH0Af8B/AH2 + AesB/wH6AfAB3AH/AfoB7wHbAf8B+QHuAdkB/wH2AesB1wH/AfAB5QHRAf8B0gHDAaoB/wGNAYEBKwH/ + CAADkQH/A/EB/wP6Af8D9QH/A/QB/wPzAf8D8gH/A/EB/wPxAf8D8AH/A/AB/wPvAf8D7gH/A+sB/wPw + Af8D6QH/A5EB/wgAA8AB/wOzAf8D/QH/A/gB/wP2Af8D9QH/A/QB/wPzAf8D8wH/A/IB/wPyAf8D8QH/ + A+8B/wPwAf8D9wH/A68B/wPAAf8IAAHRAbkBmQH/AcsBqgGBAf8B/gH9AfsB/wH+AfoB8wH/Af4B+AHv + Af8B/gH4Ae4B/wH+AfcB7AH/Af0B9gHrAf8B/QH2AeoB/wH9AfYB6QH/Af0B9QHoAf8B/QH1AeYB/wH8 + AfMB5AH/AfoB8wHnAf8B+gH4AfQB/wHIAaYBgQH/AdEBuQGZAf8IAAG/AasBkQH/AZwBgQFQAf8BxgG/ + AbIB/wHZAdMBxwH/Ae0B5wHbAf8B+AHyAeYB/wH7AfUB6AH/AfwB9QHnAf8B/AH0AeYB/wH8AfQB5AH/ + AfsB8wHjAf8B+wHzAeEB/wH5AfAB3gH/AfIB6QHWAf8B3QHUAcAB/wGaAYEBSgH/Ab8BqwGRAf8IAAPA + Af8DswH/A/0B/wP4Af8D9gH/A/UB/wP0Af8D8wH/A/MB/wPyAf8D8gH/A/EB/wPvAf8D8AH/A/cB/wOv + Af8DwAH/DAADtQH/A8EB/wP9Af8D+gH/A/YB/wP2Af8D9QH/A/QB/wP0Af8D8wH/A/IB/wP3Af8D+QH/ + A8AB/wO1Af8QAAHLAa4BhgH/AdUBugGWAf8B/gH9AfwB/wH+AfwB+AH/Af4B+QHxAf8B/gH4AfAB/wH+ + AfgB7wH/Af0B9wHuAf8B/QH3AewB/wH9AfYB6wH/Af0B9gHqAf8B/gH6AfMB/wH8AfoB9wH/AdUBugGW + Af8BywGuAYYB/xAAAbUBnQGBAf8BowGKAYEB/wHGAcABswH/AdUBzwHDAf8B5QHgAdQB/wHwAeoB3wH/ + AfYB8AHlAf8B+gH0AecB/wH7AfQB5wH/AfkB8gHkAf8B9AHrAdwB/wHpAeABzwH/AdMBygG4Af8BnwGE + AVkB/wG1AZ0BgQH/EAADtQH/A8EB/wP9Af8D+gH/A/YB/wP2Af8D9QH/A/QB/wP0Af8D8wH/A/IB/wP3 + Af8D+QH/A8AB/wO1Af8UAAO1Af8DsAH/A/IB/wP9Af8D+wH/A/gB/wP2Af8D9wH/A/kB/wP8Af8D8QH/ + A68B/wO1Af8YAAHLAa4BhgH/AckBpwGBAf8B9wHyAeoB/wL+AfwB/wH+AfwB+AH/Af4B+gHzAf8B/gH4 + AfAB/wH9AfoB8gH/Af4B+wH2Af8B/gH9AfoB/wH3AfEB6AH/AckBpwGBAf8BywGuAYYB/xgAAbUBnQGB + Af8BmwGBAU4B/wG8AbIBogH/AckBwgG3Af8B0wHNAcIB/wHcAdYBywH/AeIB2wHQAf8B4wHcAdAB/wHd + AdUByAH/AdAByAG5Af8BtwGqAZUB/wGTAYEBQgH/AbUBnQGBAf8YAAO1Af8DsAH/A/IB/wP9Af8D+wH/ + A/gB/wP2Af8D9wH/A/kB/wP8Af8D8QH/A68B/wO1Af8cAAO+Af8DkQH/A7wB/wPdAf8D8AH/A/0B/wPw + Af8D3QH/A7sB/wORAf8DvgH/IAAB0AG4AZcB/wG1AYUBPwH/AdIBtQGNAf8B6AHaAcYB/wH1Ae8B5QH/ + Av4B+wH/AfUB7gHlAf8B6AHZAcUB/wHSAbQBjQH/AbUBhQE/Af8B0AG4AZcB/yAAAb4BqQGPAf8BjQGB + ASwB/wGeAYMBWQH/Aa0BnAGEAf8BtgGqAZgB/wG7AbMBpQH/AbMBpgGSAf8BpgGUAYEB/wGWAYEBTgH/ + AYwBgAEqAf8BvgGpAY8B/yAAA74B/wORAf8DvAH/A90B/wPwAf8D/QH/A/AB/wPdAf8DuwH/A5EB/wO+ + Af8oAAPFAf8DqAH/A5gB/wOMAf8DmAH/A6gB/wPFAf8wAAHVAcABowH/AcMBnwGBAf8BuAGMAUsB/wGx + AYEBNgH/AbgBjAFLAf8BwwGfAYEB/wHVAcABowH/MAABxQG0AZ0B/wGoAYoBgAH/AZcBgQE9Af8BiwFc + ASYB/wGXAYEBPQH/AagBigGAAf8BxQG0AZ0B/zAAA8UB/wOoAf8DmAH/A4wB/wOYAf8DqAH/A8UB/xgA + AUIBTQE+BwABPgMAASgDAAFMAwABJgMAAQEBAAEBBQAByAEBFgAD/wEAAfwBBwH/AYAD/wGABAAB8AEB + Af4BAAE/Av8BgAQAAeABAAH8AQABHwL/AYAEAAHAAQABeAEAAQ8C/wGABAABgAEAATABAAEHAfwBfwGA + BAABgAEAATABAAEHAfgBPwGACAABAwH8AR8BgAgAAQMB/gEPAYAIAAEDAcABBwGACAABAwGAAQMBgAgA + AQMBgAEDAYAIAAEDAcABBwGACAABAwH+AQ8BgAQAAYABAAEwAQABBwH8AR8BgAQAAYABAAEwAQABBwH4 + AT8BgAQAAcABAAF4AQABDwH8AX8BgAQAAeABAAH8AQABHwL/AYAEAAHwAQEB/gEAAT8C/wGABAAB/AEH + Af8BgAP/AYAEAAH8AQcB/wGAAf8B8AEfAf4BAwHwAgAB8AEBAf4BAAE/AcABBwH4AQAB8AIAAeABAAH8 + AQABHwGAAQMB8AEAAXACAAHAAQABeAEAAQ8BAAEBAeABAAEwAgABgAEAATABAAEGAgABwAEAARACAAGA + AQABMAEAAQYCAAHAAQABEFYAAYABAAEwAQABBgIAAcABAAEQAgABgAEAATABAAEGAgABwAEAARACAAHA + AQABeAEAAQ8BAAEBAeABAAEwAgAB4AEAAfwBAAEfAYABAwHwAQABcAIAAfABAQH+AQABPwHAAQcB+AEA + AfACAAH8AQcB/wGAAf8B8AEfAf4BAwHwAgAL + + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/GotoPromptForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/GotoPromptForm.Designer.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/GotoPromptForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/GotoPromptForm.Designer.cs index 570a7a079a..a4a46bc606 100644 --- a/source/ch/cyberduck/ui/winforms/GotoPromptForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/GotoPromptForm.Designer.cs @@ -1,38 +1,38 @@ -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class GotoPromptForm - { - /// - /// 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(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Text = "GotoPromptForm"; - } - - #endregion - } +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class GotoPromptForm + { + /// + /// 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(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Text = "GotoPromptForm"; + } + + #endregion + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/GotoPromptForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/GotoPromptForm.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/GotoPromptForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/GotoPromptForm.cs index e30255efd7..74ea31da43 100644 --- a/source/ch/cyberduck/ui/winforms/GotoPromptForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/GotoPromptForm.cs @@ -1,38 +1,38 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Controller; -using ch.cyberduck.core; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class GotoPromptForm : PromptForm, IGotoPromptView - { - public GotoPromptForm() - { - InitializeComponent(); - - Text = LocaleFactory.localizedString("Go to folder", "Goto"); - pictureBox.Padding = new Padding(0, 0, 0, 5); - - label.Text = LocaleFactory.localizedString("Enter the pathname to list:", "Goto"); - okButton.Text = LocaleFactory.localizedString("Go", "Goto"); - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Controller; +using ch.cyberduck.core; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class GotoPromptForm : PromptForm, IGotoPromptView + { + public GotoPromptForm() + { + InitializeComponent(); + + Text = LocaleFactory.localizedString("Go to folder", "Goto"); + pictureBox.Padding = new Padding(0, 0, 0, 5); + + label.Text = LocaleFactory.localizedString("Enter the pathname to list:", "Goto"); + okButton.Text = LocaleFactory.localizedString("Go", "Goto"); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/InfoForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/InfoForm.Designer.cs similarity index 98% rename from source/ch/cyberduck/ui/winforms/InfoForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/InfoForm.Designer.cs index 5ce2904bd3..88ba70397b 100644 --- a/source/ch/cyberduck/ui/winforms/InfoForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/InfoForm.Designer.cs @@ -1,2158 +1,2158 @@ -using Ch.Cyberduck.Ui.Winforms.Controls; - -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class InfoForm - { - /// - /// 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(); - this.toolStrip = new Ch.Cyberduck.Ui.Winforms.Controls.ClickThroughToolStrip(); - this.generalButton = new System.Windows.Forms.ToolStripButton(); - this.permissionsButton = new System.Windows.Forms.ToolStripButton(); - this.metadataButton = new System.Windows.Forms.ToolStripButton(); - this.distributionButton = new System.Windows.Forms.ToolStripButton(); - this.s3Button = new System.Windows.Forms.ToolStripButton(); - this.distributionLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); - this.label14 = new System.Windows.Forms.Label(); - this.label15 = new System.Windows.Forms.Label(); - this.label16 = new System.Windows.Forms.Label(); - this.label17 = new System.Windows.Forms.Label(); - this.deliveryMethodComboBox = new System.Windows.Forms.ComboBox(); - this.distributionEnableCheckBox = new System.Windows.Forms.CheckBox(); - this.distributionLoggingCheckBox = new System.Windows.Forms.CheckBox(); - this.statusLabel = new System.Windows.Forms.Label(); - this.distributionCnameTextBox = new System.Windows.Forms.TextBox(); - this.whereLinkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); - this.distributionAnimation = new System.Windows.Forms.PictureBox(); - this.cnameUrlLinkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); - this.label25 = new System.Windows.Forms.Label(); - this.defaultRootComboBox = new System.Windows.Forms.ComboBox(); - this.label13 = new System.Windows.Forms.Label(); - this.invalidationStatus = new System.Windows.Forms.Label(); - this.label24 = new System.Windows.Forms.Label(); - this.invalidateButton = new System.Windows.Forms.Button(); - this.label27 = new System.Windows.Forms.Label(); - this.originLinkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); - this.label28 = new System.Windows.Forms.Label(); - this.label29 = new System.Windows.Forms.Label(); - this.distributionLoggingComboBox = new System.Windows.Forms.ComboBox(); - this.label37 = new System.Windows.Forms.Label(); - this.distributionAnalyticsCheckBox = new System.Windows.Forms.CheckBox(); - this.distributionAnalyticsSetupUrlLinkLabel = new System.Windows.Forms.LinkLabel(); - this.generalLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); - this.icon = new System.Windows.Forms.PictureBox(); - this.filenameTextbox = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.label8 = new System.Windows.Forms.Label(); - this.label9 = new System.Windows.Forms.Label(); - this.sizeLabel = new System.Windows.Forms.Label(); - this.pathLabel = new System.Windows.Forms.Label(); - this.weburlLabel = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); - this.kindLabel = new System.Windows.Forms.Label(); - this.permissionsLabel = new System.Windows.Forms.Label(); - this.ownerLabel = new System.Windows.Forms.Label(); - this.groupLabel = new System.Windows.Forms.Label(); - this.modifiedLabel = new System.Windows.Forms.Label(); - this.calculateButton = new System.Windows.Forms.Button(); - this.sizeAnimation = new System.Windows.Forms.PictureBox(); - this.label22 = new System.Windows.Forms.Label(); - this.createdLabel = new System.Windows.Forms.Label(); - this.checksumTextBox = new System.Windows.Forms.TextBox(); - this.s3LayoutPanel = new System.Windows.Forms.TableLayoutPanel(); - this.s3Animation = new System.Windows.Forms.PictureBox(); - this.label18 = new System.Windows.Forms.Label(); - this.label19 = new System.Windows.Forms.Label(); - this.label20 = new System.Windows.Forms.Label(); - this.bucketLocationLabel = new System.Windows.Forms.Label(); - this.s3PublicUrlLinkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); - this.s3TorrentUrlLinkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); - this.label26 = new System.Windows.Forms.Label(); - this.s3PublicUrlValidityLabel = new System.Windows.Forms.Label(); - this.storageClassComboBox = new System.Windows.Forms.ComboBox(); - this.bucketLoggingCheckBox = new System.Windows.Forms.CheckBox(); - this.bucketVersioningCheckBox = new System.Windows.Forms.CheckBox(); - this.label21 = new System.Windows.Forms.Label(); - this.bucketMfaCheckBox = new System.Windows.Forms.CheckBox(); - this.label31 = new System.Windows.Forms.Label(); - this.label32 = new System.Windows.Forms.Label(); - this.label33 = new System.Windows.Forms.Label(); - this.bucketLoggingComboBox = new System.Windows.Forms.ComboBox(); - this.label34 = new System.Windows.Forms.Label(); - this.encryptionCheckBox = new System.Windows.Forms.CheckBox(); - this.label35 = new System.Windows.Forms.Label(); - this.bucketAnalyticsCheckBox = new System.Windows.Forms.CheckBox(); - this.bucketAnalyticsSetupUrlLinkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); - this.label36 = new System.Windows.Forms.Label(); - this.lifecycleTransitionCheckBox = new System.Windows.Forms.CheckBox(); - this.label38 = new System.Windows.Forms.Label(); - this.lifecycleTransitionComboBox = new System.Windows.Forms.ComboBox(); - this.lifecycleDeleteCheckBox = new System.Windows.Forms.CheckBox(); - this.lifecycleDeleteComboBox = new System.Windows.Forms.ComboBox(); - this.toolTip = new System.Windows.Forms.ToolTip(this.components); - this.panelManager = new Ch.Cyberduck.Ui.Winforms.Controls.PanelManager(); - this.managedDistributionPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.managedGeneralPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.managedMetadataPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.metadataTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); - this.label30 = new System.Windows.Forms.Label(); - this.metadataDataGridView = new System.Windows.Forms.DataGridView(); - this.addHeaderButton = new Ch.Cyberduck.Ui.Winforms.Controls.SplitButton(); - this.addMetadataContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem(); - this.metadataAnimation = new System.Windows.Forms.PictureBox(); - this.managedPermissionsPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.panelManagerPermissions = new Ch.Cyberduck.Ui.Winforms.Controls.PanelManager(); - this.nonCloudManagedPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.permissionsLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); - this.label10 = new System.Windows.Forms.Label(); - this.ownerrCheckBox = new System.Windows.Forms.CheckBox(); - this.ownerwCheckBox = new System.Windows.Forms.CheckBox(); - this.ownerxCheckBox = new System.Windows.Forms.CheckBox(); - this.label11 = new System.Windows.Forms.Label(); - this.grouprCheckbox = new System.Windows.Forms.CheckBox(); - this.groupwCheckbox = new System.Windows.Forms.CheckBox(); - this.groupxCheckbox = new System.Windows.Forms.CheckBox(); - this.label12 = new System.Windows.Forms.Label(); - this.otherwCheckbox = new System.Windows.Forms.CheckBox(); - this.otherxCheckbox = new System.Windows.Forms.CheckBox(); - this.permissionAnimation = new System.Windows.Forms.PictureBox(); - this.otherrCheckbox = new System.Windows.Forms.CheckBox(); - this.applyRecursivePermissionsButton = new System.Windows.Forms.Button(); - this.label23 = new System.Windows.Forms.Label(); - this.octalTextBox = new System.Windows.Forms.TextBox(); - this.cloudManagedPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.AclLabel = new System.Windows.Forms.Label(); - this.aclDataGridView = new System.Windows.Forms.DataGridView(); - this.addAclButton = new Ch.Cyberduck.Ui.Winforms.Controls.SplitButton(); - this.addAclContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.yvesOwnerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.canoncalUserIDToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.removeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.authenticatedLabel = new System.Windows.Forms.Label(); - this.authenticatedUrlLinkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); - this.aclAnimation = new System.Windows.Forms.PictureBox(); - this.managedS3Panel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.toolStrip.SuspendLayout(); - this.distributionLayoutPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.distributionAnimation)).BeginInit(); - this.generalLayoutPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.icon)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.sizeAnimation)).BeginInit(); - this.s3LayoutPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.s3Animation)).BeginInit(); - this.panelManager.SuspendLayout(); - this.managedDistributionPanel.SuspendLayout(); - this.managedGeneralPanel.SuspendLayout(); - this.managedMetadataPanel.SuspendLayout(); - this.metadataTableLayoutPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.metadataDataGridView)).BeginInit(); - this.addMetadataContextMenuStrip.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.metadataAnimation)).BeginInit(); - this.managedPermissionsPanel.SuspendLayout(); - this.panelManagerPermissions.SuspendLayout(); - this.nonCloudManagedPanel.SuspendLayout(); - this.permissionsLayoutPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.permissionAnimation)).BeginInit(); - this.cloudManagedPanel.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.aclDataGridView)).BeginInit(); - this.addAclContextMenuStrip.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.aclAnimation)).BeginInit(); - this.managedS3Panel.SuspendLayout(); - this.SuspendLayout(); - // - // toolStrip - // - this.toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; - this.toolStrip.ImageScalingSize = new System.Drawing.Size(32, 32); - this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.generalButton, - this.permissionsButton, - this.metadataButton, - this.distributionButton, - this.s3Button}); - this.toolStrip.Location = new System.Drawing.Point(0, 0); - this.toolStrip.MinimumSize = new System.Drawing.Size(0, 56); - this.toolStrip.Name = "toolStrip"; - this.toolStrip.Size = new System.Drawing.Size(500, 56); - this.toolStrip.TabIndex = 0; - this.toolStrip.Text = "toolStrip1"; - // - // generalButton - // - this.generalButton.Image = global::Ch.Cyberduck.ResourcesBundle.info; - this.generalButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.generalButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.generalButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.generalButton.Name = "generalButton"; - this.generalButton.Size = new System.Drawing.Size(51, 56); - this.generalButton.Text = "General"; - this.generalButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.generalButton.Click += new System.EventHandler(this.generalButton_Click); - // - // permissionsButton - // - this.permissionsButton.Image = global::Ch.Cyberduck.ResourcesBundle.permissions; - this.permissionsButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.permissionsButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.permissionsButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.permissionsButton.Name = "permissionsButton"; - this.permissionsButton.Size = new System.Drawing.Size(74, 56); - this.permissionsButton.Text = "Permissions"; - this.permissionsButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.permissionsButton.Click += new System.EventHandler(this.permissionsButton_Click); - // - // metadataButton - // - this.metadataButton.Image = global::Ch.Cyberduck.ResourcesBundle.pencil; - this.metadataButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.metadataButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.metadataButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.metadataButton.Name = "metadataButton"; - this.metadataButton.Size = new System.Drawing.Size(61, 56); - this.metadataButton.Text = "Metadata"; - this.metadataButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.metadataButton.Click += new System.EventHandler(this.metadataButton_Click); - // - // distributionButton - // - this.distributionButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.distributionButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.distributionButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.distributionButton.Name = "distributionButton"; - this.distributionButton.Size = new System.Drawing.Size(109, 56); - this.distributionButton.Text = "Distribution (CDN)"; - this.distributionButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.distributionButton.Click += new System.EventHandler(this.distributionButton_Click); - // - // s3Button - // - this.s3Button.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.s3Button.ImageTransparentColor = System.Drawing.Color.Magenta; - this.s3Button.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.s3Button.Name = "s3Button"; - this.s3Button.Size = new System.Drawing.Size(23, 56); - this.s3Button.Text = "S3"; - this.s3Button.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.s3Button.Click += new System.EventHandler(this.s3Button_Click); - // - // distributionLayoutPanel - // - this.distributionLayoutPanel.AutoSize = true; - this.distributionLayoutPanel.ColumnCount = 3; - this.distributionLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.distributionLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.distributionLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.distributionLayoutPanel.Controls.Add(this.label14, 0, 0); - this.distributionLayoutPanel.Controls.Add(this.label15, 0, 3); - this.distributionLayoutPanel.Controls.Add(this.label16, 0, 15); - this.distributionLayoutPanel.Controls.Add(this.label17, 0, 17); - this.distributionLayoutPanel.Controls.Add(this.deliveryMethodComboBox, 1, 0); - this.distributionLayoutPanel.Controls.Add(this.distributionEnableCheckBox, 1, 1); - this.distributionLayoutPanel.Controls.Add(this.distributionLoggingCheckBox, 1, 4); - this.distributionLayoutPanel.Controls.Add(this.statusLabel, 1, 3); - this.distributionLayoutPanel.Controls.Add(this.distributionCnameTextBox, 1, 17); - this.distributionLayoutPanel.Controls.Add(this.whereLinkLabel, 1, 15); - this.distributionLayoutPanel.Controls.Add(this.distributionAnimation, 2, 1); - this.distributionLayoutPanel.Controls.Add(this.cnameUrlLinkLabel, 1, 18); - this.distributionLayoutPanel.Controls.Add(this.label25, 0, 20); - this.distributionLayoutPanel.Controls.Add(this.defaultRootComboBox, 1, 20); - this.distributionLayoutPanel.Controls.Add(this.label13, 0, 21); - this.distributionLayoutPanel.Controls.Add(this.invalidationStatus, 1, 21); - this.distributionLayoutPanel.Controls.Add(this.label24, 1, 22); - this.distributionLayoutPanel.Controls.Add(this.invalidateButton, 1, 23); - this.distributionLayoutPanel.Controls.Add(this.label27, 0, 13); - this.distributionLayoutPanel.Controls.Add(this.originLinkLabel, 1, 13); - this.distributionLayoutPanel.Controls.Add(this.label28, 0, 4); - this.distributionLayoutPanel.Controls.Add(this.label29, 1, 5); - this.distributionLayoutPanel.Controls.Add(this.distributionLoggingComboBox, 1, 6); - this.distributionLayoutPanel.Controls.Add(this.label37, 0, 8); - this.distributionLayoutPanel.Controls.Add(this.distributionAnalyticsCheckBox, 1, 8); - this.distributionLayoutPanel.Controls.Add(this.distributionAnalyticsSetupUrlLinkLabel, 1, 9); - this.distributionLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.distributionLayoutPanel.Location = new System.Drawing.Point(0, 0); - this.distributionLayoutPanel.Name = "distributionLayoutPanel"; - this.distributionLayoutPanel.Padding = new System.Windows.Forms.Padding(10); - this.distributionLayoutPanel.RowCount = 24; - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.distributionLayoutPanel.Size = new System.Drawing.Size(0, 0); - this.distributionLayoutPanel.TabIndex = 0; - // - // label14 - // - this.label14.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(13, 17); - this.label14.Name = "label14"; - this.label14.Size = new System.Drawing.Size(94, 15); - this.label14.TabIndex = 0; - this.label14.Text = "Delivery Method"; - this.label14.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label15 - // - this.label15.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.label15.AutoSize = true; - this.label15.Location = new System.Drawing.Point(13, 76); - this.label15.Name = "label15"; - this.label15.Size = new System.Drawing.Size(39, 15); - this.label15.TabIndex = 1; - this.label15.Text = "Status"; - this.label15.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label16 - // - this.label16.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.label16.AutoSize = true; - this.label16.Location = new System.Drawing.Point(13, 290); - this.label16.Name = "label16"; - this.label16.Size = new System.Drawing.Size(41, 15); - this.label16.TabIndex = 2; - this.label16.Text = "Where"; - this.label16.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label17 - // - this.label17.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label17.AutoSize = true; - this.label17.Location = new System.Drawing.Point(13, 322); - this.label17.Name = "label17"; - this.label17.Size = new System.Drawing.Size(49, 15); - this.label17.TabIndex = 3; - this.label17.Text = "CNAME"; - this.label17.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // deliveryMethodComboBox - // - this.deliveryMethodComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.distributionLayoutPanel.SetColumnSpan(this.deliveryMethodComboBox, 2); - this.deliveryMethodComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.deliveryMethodComboBox.FormattingEnabled = true; - this.deliveryMethodComboBox.Location = new System.Drawing.Point(113, 13); - this.deliveryMethodComboBox.Name = "deliveryMethodComboBox"; - this.deliveryMethodComboBox.Size = new System.Drawing.Size(1, 23); - this.deliveryMethodComboBox.TabIndex = 4; - this.deliveryMethodComboBox.SelectionChangeCommitted += new System.EventHandler(this.deliveryMethodComboBox_SelectionChangeCommitted); - // - // distributionEnableCheckBox - // - this.distributionEnableCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.distributionEnableCheckBox.AutoSize = true; - this.distributionEnableCheckBox.Location = new System.Drawing.Point(113, 42); - this.distributionEnableCheckBox.MinimumSize = new System.Drawing.Size(0, 21); - this.distributionEnableCheckBox.Name = "distributionEnableCheckBox"; - this.distributionEnableCheckBox.Size = new System.Drawing.Size(1, 21); - this.distributionEnableCheckBox.TabIndex = 5; - this.distributionEnableCheckBox.Text = "Enable Amazon CloudFront Distribution"; - this.distributionEnableCheckBox.UseVisualStyleBackColor = true; - this.distributionEnableCheckBox.CheckedChanged += new System.EventHandler(this.distributionEnableCheckBox_CheckedChanged); - // - // distributionLoggingCheckBox - // - this.distributionLoggingCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.distributionLoggingCheckBox.AutoSize = true; - this.distributionLayoutPanel.SetColumnSpan(this.distributionLoggingCheckBox, 2); - this.distributionLoggingCheckBox.Location = new System.Drawing.Point(113, 94); - this.distributionLoggingCheckBox.Name = "distributionLoggingCheckBox"; - this.distributionLoggingCheckBox.Size = new System.Drawing.Size(1, 19); - this.distributionLoggingCheckBox.TabIndex = 6; - this.distributionLoggingCheckBox.Text = "Distribution Access Logging"; - this.distributionLoggingCheckBox.UseVisualStyleBackColor = true; - this.distributionLoggingCheckBox.CheckedChanged += new System.EventHandler(this.distributionLoggingCheckBox_CheckedChanged); - // - // statusLabel - // - this.statusLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.statusLabel.AutoSize = true; - this.distributionLayoutPanel.SetColumnSpan(this.statusLabel, 2); - this.statusLabel.Location = new System.Drawing.Point(113, 76); - this.statusLabel.Name = "statusLabel"; - this.statusLabel.Size = new System.Drawing.Size(0, 15); - this.statusLabel.TabIndex = 7; - this.statusLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // distributionCnameTextBox - // - this.distributionCnameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.distributionLayoutPanel.SetColumnSpan(this.distributionCnameTextBox, 2); - this.distributionCnameTextBox.Location = new System.Drawing.Point(113, 318); - this.distributionCnameTextBox.Name = "distributionCnameTextBox"; - this.distributionCnameTextBox.Size = new System.Drawing.Size(1, 23); - this.distributionCnameTextBox.TabIndex = 9; - this.distributionCnameTextBox.Validated += new System.EventHandler(this.distributionCnameTextBox_Validated); - // - // whereLinkLabel - // - this.whereLinkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.whereLinkLabel.AutoSize = true; - this.distributionLayoutPanel.SetColumnSpan(this.whereLinkLabel, 2); - this.whereLinkLabel.Location = new System.Drawing.Point(113, 290); - this.whereLinkLabel.Name = "whereLinkLabel"; - this.whereLinkLabel.Size = new System.Drawing.Size(0, 15); - this.whereLinkLabel.TabIndex = 10; - this.whereLinkLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // distributionAnimation - // - this.distributionAnimation.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.distributionAnimation.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; - this.distributionAnimation.Location = new System.Drawing.Point(-22, 42); - this.distributionAnimation.Name = "distributionAnimation"; - this.distributionAnimation.Size = new System.Drawing.Size(30, 20); - this.distributionAnimation.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.distributionAnimation.TabIndex = 25; - this.distributionAnimation.TabStop = false; - this.distributionAnimation.Visible = false; - // - // cnameUrlLinkLabel - // - this.cnameUrlLinkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.cnameUrlLinkLabel.AutoSize = true; - this.cnameUrlLinkLabel.Location = new System.Drawing.Point(113, 344); - this.cnameUrlLinkLabel.Name = "cnameUrlLinkLabel"; - this.cnameUrlLinkLabel.Size = new System.Drawing.Size(0, 15); - this.cnameUrlLinkLabel.TabIndex = 26; - this.cnameUrlLinkLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label25 - // - this.label25.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label25.AutoSize = true; - this.label25.Location = new System.Drawing.Point(13, 376); - this.label25.Name = "label25"; - this.label25.Size = new System.Drawing.Size(56, 15); - this.label25.TabIndex = 27; - this.label25.Text = "Index File"; - // - // defaultRootComboBox - // - this.defaultRootComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.distributionLayoutPanel.SetColumnSpan(this.defaultRootComboBox, 2); - this.defaultRootComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.defaultRootComboBox.FormattingEnabled = true; - this.defaultRootComboBox.Location = new System.Drawing.Point(113, 372); - this.defaultRootComboBox.Name = "defaultRootComboBox"; - this.defaultRootComboBox.Size = new System.Drawing.Size(1, 23); - this.defaultRootComboBox.TabIndex = 28; - this.defaultRootComboBox.SelectionChangeCommitted += new System.EventHandler(this.defaultRootComboBox_SelectionChangeCommitted); - // - // label13 - // - this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(13, 398); - this.label13.Name = "label13"; - this.label13.Size = new System.Drawing.Size(69, 15); - this.label13.TabIndex = 29; - this.label13.Text = "Invalidation"; - // - // invalidationStatus - // - this.invalidationStatus.AutoSize = true; - this.distributionLayoutPanel.SetColumnSpan(this.invalidationStatus, 2); - this.invalidationStatus.Location = new System.Drawing.Point(113, 398); - this.invalidationStatus.Name = "invalidationStatus"; - this.invalidationStatus.Size = new System.Drawing.Size(0, 15); - this.invalidationStatus.TabIndex = 30; - // - // label24 - // - this.label24.AutoSize = true; - this.distributionLayoutPanel.SetColumnSpan(this.label24, 2); - this.label24.ForeColor = System.Drawing.SystemColors.GrayText; - this.label24.Location = new System.Drawing.Point(113, 413); - this.label24.Name = "label24"; - this.label24.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.label24.Size = new System.Drawing.Size(1, 5); - this.label24.TabIndex = 31; - this.label24.Text = "Remove selected files from distribution cache."; - // - // invalidateButton - // - this.invalidateButton.AutoSize = true; - this.invalidateButton.Location = new System.Drawing.Point(113, 421); - this.invalidateButton.Name = "invalidateButton"; - this.invalidateButton.Size = new System.Drawing.Size(1, 27); - this.invalidateButton.TabIndex = 32; - this.invalidateButton.Text = "Invalidate"; - this.invalidateButton.UseVisualStyleBackColor = true; - this.invalidateButton.Click += new System.EventHandler(this.invalidateButton_Click); - // - // label27 - // - this.label27.AutoSize = true; - this.label27.Location = new System.Drawing.Point(13, 265); - this.label27.Name = "label27"; - this.label27.Size = new System.Drawing.Size(40, 15); - this.label27.TabIndex = 33; - this.label27.Text = "Origin"; - // - // originLinkLabel - // - this.originLinkLabel.AutoSize = true; - this.distributionLayoutPanel.SetColumnSpan(this.originLinkLabel, 2); - this.originLinkLabel.Location = new System.Drawing.Point(113, 265); - this.originLinkLabel.Name = "originLinkLabel"; - this.originLinkLabel.Size = new System.Drawing.Size(0, 15); - this.originLinkLabel.TabIndex = 34; - // - // label28 - // - this.label28.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.label28.AutoSize = true; - this.label28.Location = new System.Drawing.Point(13, 91); - this.label28.Name = "label28"; - this.label28.Size = new System.Drawing.Size(51, 25); - this.label28.TabIndex = 35; - this.label28.Text = "Logging"; - this.label28.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label29 - // - this.label29.AutoSize = true; - this.distributionLayoutPanel.SetColumnSpan(this.label29, 2); - this.label29.ForeColor = System.Drawing.SystemColors.GrayText; - this.label29.Location = new System.Drawing.Point(113, 116); - this.label29.Name = "label29"; - this.label29.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.label29.Size = new System.Drawing.Size(1, 5); - this.label29.TabIndex = 36; - this.label29.Text = "Write access logs to selected container."; - // - // distributionLoggingComboBox - // - this.distributionLoggingComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.distributionLayoutPanel.SetColumnSpan(this.distributionLoggingComboBox, 2); - this.distributionLoggingComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.distributionLoggingComboBox.FormattingEnabled = true; - this.distributionLoggingComboBox.Location = new System.Drawing.Point(113, 124); - this.distributionLoggingComboBox.Name = "distributionLoggingComboBox"; - this.distributionLoggingComboBox.Size = new System.Drawing.Size(1, 23); - this.distributionLoggingComboBox.TabIndex = 37; - this.distributionLoggingComboBox.SelectionChangeCommitted += new System.EventHandler(this.distributionLoggingComboBox_SelectionChangeCommitted); - // - // label37 - // - this.label37.AutoSize = true; - this.label37.Location = new System.Drawing.Point(13, 170); - this.label37.Name = "label37"; - this.label37.Size = new System.Drawing.Size(55, 15); - this.label37.TabIndex = 38; - this.label37.Text = "Analytics"; - // - // distributionAnalyticsCheckBox - // - this.distributionAnalyticsCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.distributionAnalyticsCheckBox.AutoSize = true; - this.distributionLayoutPanel.SetColumnSpan(this.distributionAnalyticsCheckBox, 2); - this.distributionAnalyticsCheckBox.Location = new System.Drawing.Point(113, 173); - this.distributionAnalyticsCheckBox.Name = "distributionAnalyticsCheckBox"; - this.distributionAnalyticsCheckBox.Size = new System.Drawing.Size(1, 19); - this.distributionAnalyticsCheckBox.TabIndex = 39; - this.distributionAnalyticsCheckBox.Text = "Read Access for Qloudstat"; - this.distributionAnalyticsCheckBox.UseVisualStyleBackColor = true; - this.distributionAnalyticsCheckBox.CheckedChanged += new System.EventHandler(this.distributionAnalyticsCheckBox_CheckedChanged); - // - // distributionAnalyticsSetupUrlLinkLabel - // - this.distributionAnalyticsSetupUrlLinkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.distributionAnalyticsSetupUrlLinkLabel.AutoEllipsis = true; - this.distributionLayoutPanel.SetColumnSpan(this.distributionAnalyticsSetupUrlLinkLabel, 2); - this.distributionAnalyticsSetupUrlLinkLabel.Location = new System.Drawing.Point(113, 198); - this.distributionAnalyticsSetupUrlLinkLabel.Name = "distributionAnalyticsSetupUrlLinkLabel"; - this.distributionAnalyticsSetupUrlLinkLabel.Size = new System.Drawing.Size(1, 13); - this.distributionAnalyticsSetupUrlLinkLabel.TabIndex = 40; - this.distributionAnalyticsSetupUrlLinkLabel.TabStop = true; - this.distributionAnalyticsSetupUrlLinkLabel.Text = "linkLabel1"; - // - // generalLayoutPanel - // - this.generalLayoutPanel.AutoSize = true; - this.generalLayoutPanel.ColumnCount = 5; - this.generalLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 70F)); - this.generalLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.generalLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.generalLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 23F)); - this.generalLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.generalLayoutPanel.Controls.Add(this.icon, 0, 0); - this.generalLayoutPanel.Controls.Add(this.filenameTextbox, 1, 0); - this.generalLayoutPanel.Controls.Add(this.label1, 1, 1); - this.generalLayoutPanel.Controls.Add(this.label2, 1, 2); - this.generalLayoutPanel.Controls.Add(this.label3, 1, 3); - this.generalLayoutPanel.Controls.Add(this.label4, 1, 4); - this.generalLayoutPanel.Controls.Add(this.label5, 1, 5); - this.generalLayoutPanel.Controls.Add(this.label6, 1, 6); - this.generalLayoutPanel.Controls.Add(this.label7, 1, 7); - this.generalLayoutPanel.Controls.Add(this.label8, 1, 9); - this.generalLayoutPanel.Controls.Add(this.label9, 1, 10); - this.generalLayoutPanel.Controls.Add(this.sizeLabel, 2, 1); - this.generalLayoutPanel.Controls.Add(this.pathLabel, 2, 2); - this.generalLayoutPanel.Controls.Add(this.weburlLabel, 2, 3); - this.generalLayoutPanel.Controls.Add(this.kindLabel, 2, 4); - this.generalLayoutPanel.Controls.Add(this.permissionsLabel, 2, 5); - this.generalLayoutPanel.Controls.Add(this.ownerLabel, 2, 6); - this.generalLayoutPanel.Controls.Add(this.groupLabel, 2, 7); - this.generalLayoutPanel.Controls.Add(this.modifiedLabel, 2, 9); - this.generalLayoutPanel.Controls.Add(this.calculateButton, 4, 1); - this.generalLayoutPanel.Controls.Add(this.sizeAnimation, 3, 1); - this.generalLayoutPanel.Controls.Add(this.label22, 1, 8); - this.generalLayoutPanel.Controls.Add(this.createdLabel, 2, 8); - this.generalLayoutPanel.Controls.Add(this.checksumTextBox, 2, 10); - this.generalLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.generalLayoutPanel.Location = new System.Drawing.Point(0, 0); - this.generalLayoutPanel.Name = "generalLayoutPanel"; - this.generalLayoutPanel.Padding = new System.Windows.Forms.Padding(10); - this.generalLayoutPanel.RowCount = 12; - this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); - this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.generalLayoutPanel.Size = new System.Drawing.Size(0, 0); - this.generalLayoutPanel.TabIndex = 0; - // - // icon - // - this.icon.Location = new System.Drawing.Point(13, 13); - this.icon.Name = "icon"; - this.icon.Size = new System.Drawing.Size(63, 51); - this.icon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.icon.TabIndex = 0; - this.icon.TabStop = false; - // - // filenameTextbox - // - this.filenameTextbox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.generalLayoutPanel.SetColumnSpan(this.filenameTextbox, 4); - this.filenameTextbox.Location = new System.Drawing.Point(83, 27); - this.filenameTextbox.Name = "filenameTextbox"; - this.filenameTextbox.Size = new System.Drawing.Size(1, 23); - this.filenameTextbox.TabIndex = 1; - this.filenameTextbox.Validated += new System.EventHandler(this.filenameTextbox_Validated); - // - // label1 - // - this.label1.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(83, 70); - this.label1.MinimumSize = new System.Drawing.Size(0, 21); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(27, 21); - this.label1.TabIndex = 2; - this.label1.Text = "Size"; - this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label2 - // - this.label2.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(83, 96); - this.label2.MinimumSize = new System.Drawing.Size(0, 21); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(41, 21); - this.label2.TabIndex = 3; - this.label2.Text = "Where"; - this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label3 - // - this.label3.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(83, 119); - this.label3.MinimumSize = new System.Drawing.Size(0, 21); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(55, 21); - this.label3.TabIndex = 4; - this.label3.Text = "Web URL"; - this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label4 - // - this.label4.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(83, 142); - this.label4.MinimumSize = new System.Drawing.Size(0, 21); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(31, 21); - this.label4.TabIndex = 5; - this.label4.Text = "Kind"; - this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label5 - // - this.label5.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(83, 165); - this.label5.MinimumSize = new System.Drawing.Size(0, 21); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(70, 21); - this.label5.TabIndex = 6; - this.label5.Text = "Permissions"; - this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label6 - // - this.label6.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(83, 188); - this.label6.MinimumSize = new System.Drawing.Size(0, 21); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(42, 21); - this.label6.TabIndex = 7; - this.label6.Text = "Owner"; - this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label7 - // - this.label7.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(83, 211); - this.label7.MinimumSize = new System.Drawing.Size(0, 21); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(40, 21); - this.label7.TabIndex = 8; - this.label7.Text = "Group"; - this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label8 - // - this.label8.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(83, 257); - this.label8.MinimumSize = new System.Drawing.Size(0, 21); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(55, 21); - this.label8.TabIndex = 9; - this.label8.Text = "Modified"; - this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label9 - // - this.label9.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(83, 279); - this.label9.MinimumSize = new System.Drawing.Size(0, 21); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(63, 21); - this.label9.TabIndex = 10; - this.label9.Text = "Checksum"; - this.label9.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // sizeLabel - // - this.sizeLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.sizeLabel.AutoEllipsis = true; - this.sizeLabel.AutoSize = true; - this.sizeLabel.Location = new System.Drawing.Point(159, 69); - this.sizeLabel.MinimumSize = new System.Drawing.Size(0, 23); - this.sizeLabel.Name = "sizeLabel"; - this.sizeLabel.Size = new System.Drawing.Size(1, 23); - this.sizeLabel.TabIndex = 11; - this.sizeLabel.Text = "ellipsisLabel1"; - this.sizeLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // pathLabel - // - this.pathLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.pathLabel.AutoEllipsis = true; - this.pathLabel.AutoSize = true; - this.generalLayoutPanel.SetColumnSpan(this.pathLabel, 2); - this.pathLabel.Location = new System.Drawing.Point(159, 95); - this.pathLabel.MinimumSize = new System.Drawing.Size(0, 23); - this.pathLabel.Name = "pathLabel"; - this.pathLabel.Size = new System.Drawing.Size(1, 23); - this.pathLabel.TabIndex = 12; - this.pathLabel.Text = "ellipsisLabel2"; - this.pathLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // weburlLabel - // - this.weburlLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.weburlLabel.AutoEllipsis = true; - this.weburlLabel.AutoSize = true; - this.generalLayoutPanel.SetColumnSpan(this.weburlLabel, 3); - this.weburlLabel.Location = new System.Drawing.Point(159, 118); - this.weburlLabel.MinimumSize = new System.Drawing.Size(0, 23); - this.weburlLabel.Name = "weburlLabel"; - this.weburlLabel.Size = new System.Drawing.Size(1, 23); - this.weburlLabel.TabIndex = 13; - this.weburlLabel.TabStop = true; - this.weburlLabel.Text = "linkLabel1"; - this.weburlLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // kindLabel - // - this.kindLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.kindLabel.AutoEllipsis = true; - this.kindLabel.AutoSize = true; - this.generalLayoutPanel.SetColumnSpan(this.kindLabel, 3); - this.kindLabel.Location = new System.Drawing.Point(159, 141); - this.kindLabel.MinimumSize = new System.Drawing.Size(0, 23); - this.kindLabel.Name = "kindLabel"; - this.kindLabel.Size = new System.Drawing.Size(1, 23); - this.kindLabel.TabIndex = 14; - this.kindLabel.Text = "ellipsisLabel3"; - this.kindLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // permissionsLabel - // - this.permissionsLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.permissionsLabel.AutoEllipsis = true; - this.permissionsLabel.AutoSize = true; - this.generalLayoutPanel.SetColumnSpan(this.permissionsLabel, 3); - this.permissionsLabel.Location = new System.Drawing.Point(159, 164); - this.permissionsLabel.MinimumSize = new System.Drawing.Size(0, 23); - this.permissionsLabel.Name = "permissionsLabel"; - this.permissionsLabel.Size = new System.Drawing.Size(1, 23); - this.permissionsLabel.TabIndex = 15; - this.permissionsLabel.Text = "ellipsisLabel4"; - this.permissionsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // ownerLabel - // - this.ownerLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.ownerLabel.AutoEllipsis = true; - this.ownerLabel.AutoSize = true; - this.generalLayoutPanel.SetColumnSpan(this.ownerLabel, 3); - this.ownerLabel.Location = new System.Drawing.Point(159, 187); - this.ownerLabel.MinimumSize = new System.Drawing.Size(0, 23); - this.ownerLabel.Name = "ownerLabel"; - this.ownerLabel.Size = new System.Drawing.Size(1, 23); - this.ownerLabel.TabIndex = 16; - this.ownerLabel.Text = "ellipsisLabel5"; - this.ownerLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // groupLabel - // - this.groupLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.groupLabel.AutoEllipsis = true; - this.groupLabel.AutoSize = true; - this.generalLayoutPanel.SetColumnSpan(this.groupLabel, 3); - this.groupLabel.Location = new System.Drawing.Point(159, 210); - this.groupLabel.MinimumSize = new System.Drawing.Size(0, 23); - this.groupLabel.Name = "groupLabel"; - this.groupLabel.Size = new System.Drawing.Size(1, 23); - this.groupLabel.TabIndex = 17; - this.groupLabel.Text = "ellipsisLabel6"; - this.groupLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // modifiedLabel - // - this.modifiedLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.modifiedLabel.AutoEllipsis = true; - this.modifiedLabel.AutoSize = true; - this.generalLayoutPanel.SetColumnSpan(this.modifiedLabel, 3); - this.modifiedLabel.Location = new System.Drawing.Point(159, 256); - this.modifiedLabel.MinimumSize = new System.Drawing.Size(0, 23); - this.modifiedLabel.Name = "modifiedLabel"; - this.modifiedLabel.Size = new System.Drawing.Size(1, 23); - this.modifiedLabel.TabIndex = 19; - this.modifiedLabel.Text = "ellipsisLabel8"; - this.modifiedLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // calculateButton - // - this.calculateButton.AutoSize = true; - this.calculateButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.calculateButton.Location = new System.Drawing.Point(-58, 70); - this.calculateButton.Name = "calculateButton"; - this.generalLayoutPanel.SetRowSpan(this.calculateButton, 2); - this.calculateButton.Size = new System.Drawing.Size(66, 25); - this.calculateButton.TabIndex = 21; - this.calculateButton.Text = "Calculate"; - this.calculateButton.UseVisualStyleBackColor = true; - this.calculateButton.Click += new System.EventHandler(this.calculateButton_Click); - // - // sizeAnimation - // - this.sizeAnimation.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.sizeAnimation.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; - this.sizeAnimation.Location = new System.Drawing.Point(-81, 70); - this.sizeAnimation.Name = "sizeAnimation"; - this.sizeAnimation.Size = new System.Drawing.Size(17, 21); - this.sizeAnimation.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.sizeAnimation.TabIndex = 22; - this.sizeAnimation.TabStop = false; - this.sizeAnimation.Visible = false; - // - // label22 - // - this.label22.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label22.AutoSize = true; - this.label22.Location = new System.Drawing.Point(83, 234); - this.label22.MinimumSize = new System.Drawing.Size(0, 21); - this.label22.Name = "label22"; - this.label22.Size = new System.Drawing.Size(48, 21); - this.label22.TabIndex = 23; - this.label22.Text = "Created"; - this.label22.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // createdLabel - // - this.createdLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.createdLabel.AutoEllipsis = true; - this.createdLabel.AutoSize = true; - this.generalLayoutPanel.SetColumnSpan(this.createdLabel, 3); - this.createdLabel.Location = new System.Drawing.Point(159, 233); - this.createdLabel.MinimumSize = new System.Drawing.Size(0, 23); - this.createdLabel.Name = "createdLabel"; - this.createdLabel.Size = new System.Drawing.Size(1, 23); - this.createdLabel.TabIndex = 24; - this.createdLabel.Text = "ellipsisLabel8"; - this.createdLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // checksumTextBox - // - this.checksumTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.checksumTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.generalLayoutPanel.SetColumnSpan(this.checksumTextBox, 3); - this.checksumTextBox.Location = new System.Drawing.Point(162, 282); - this.checksumTextBox.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3); - this.checksumTextBox.Name = "checksumTextBox"; - this.checksumTextBox.ReadOnly = true; - this.checksumTextBox.Size = new System.Drawing.Size(1, 16); - this.checksumTextBox.TabIndex = 25; - this.checksumTextBox.TabStop = false; - // - // s3LayoutPanel - // - this.s3LayoutPanel.ColumnCount = 4; - this.s3LayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.s3LayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.s3LayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.s3LayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 37F)); - this.s3LayoutPanel.Controls.Add(this.s3Animation, 3, 0); - this.s3LayoutPanel.Controls.Add(this.label18, 0, 0); - this.s3LayoutPanel.Controls.Add(this.label19, 0, 6); - this.s3LayoutPanel.Controls.Add(this.label20, 0, 9); - this.s3LayoutPanel.Controls.Add(this.bucketLocationLabel, 2, 0); - this.s3LayoutPanel.Controls.Add(this.s3PublicUrlLinkLabel, 2, 6); - this.s3LayoutPanel.Controls.Add(this.s3TorrentUrlLinkLabel, 2, 9); - this.s3LayoutPanel.Controls.Add(this.label26, 0, 2); - this.s3LayoutPanel.Controls.Add(this.s3PublicUrlValidityLabel, 2, 7); - this.s3LayoutPanel.Controls.Add(this.storageClassComboBox, 2, 2); - this.s3LayoutPanel.Controls.Add(this.bucketLoggingCheckBox, 2, 11); - this.s3LayoutPanel.Controls.Add(this.bucketVersioningCheckBox, 2, 19); - this.s3LayoutPanel.Controls.Add(this.label21, 2, 20); - this.s3LayoutPanel.Controls.Add(this.bucketMfaCheckBox, 2, 22); - this.s3LayoutPanel.Controls.Add(this.label31, 0, 11); - this.s3LayoutPanel.Controls.Add(this.label32, 0, 19); - this.s3LayoutPanel.Controls.Add(this.label33, 2, 12); - this.s3LayoutPanel.Controls.Add(this.bucketLoggingComboBox, 2, 13); - this.s3LayoutPanel.Controls.Add(this.label34, 0, 4); - this.s3LayoutPanel.Controls.Add(this.encryptionCheckBox, 2, 4); - this.s3LayoutPanel.Controls.Add(this.label35, 0, 15); - this.s3LayoutPanel.Controls.Add(this.bucketAnalyticsCheckBox, 2, 15); - this.s3LayoutPanel.Controls.Add(this.bucketAnalyticsSetupUrlLinkLabel, 2, 16); - this.s3LayoutPanel.Controls.Add(this.label36, 2, 17); - this.s3LayoutPanel.Controls.Add(this.lifecycleTransitionCheckBox, 2, 24); - this.s3LayoutPanel.Controls.Add(this.label38, 0, 24); - this.s3LayoutPanel.Controls.Add(this.lifecycleTransitionComboBox, 2, 25); - this.s3LayoutPanel.Controls.Add(this.lifecycleDeleteCheckBox, 2, 26); - this.s3LayoutPanel.Controls.Add(this.lifecycleDeleteComboBox, 2, 27); - this.s3LayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.s3LayoutPanel.Location = new System.Drawing.Point(0, 0); - this.s3LayoutPanel.Name = "s3LayoutPanel"; - this.s3LayoutPanel.Padding = new System.Windows.Forms.Padding(10); - this.s3LayoutPanel.RowCount = 29; - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 5F)); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); - this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.s3LayoutPanel.Size = new System.Drawing.Size(500, 548); - this.s3LayoutPanel.TabIndex = 0; - // - // s3Animation - // - this.s3Animation.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.s3Animation.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; - this.s3Animation.Location = new System.Drawing.Point(463, 13); - this.s3Animation.Name = "s3Animation"; - this.s3Animation.Size = new System.Drawing.Size(24, 18); - this.s3Animation.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.s3Animation.TabIndex = 24; - this.s3Animation.TabStop = false; - this.s3Animation.Visible = false; - // - // label18 - // - this.label18.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label18.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.label18, 2); - this.label18.Location = new System.Drawing.Point(13, 10); - this.label18.MinimumSize = new System.Drawing.Size(0, 25); - this.label18.Name = "label18"; - this.label18.Size = new System.Drawing.Size(53, 25); - this.label18.TabIndex = 0; - this.label18.Text = "Location"; - this.label18.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label19 - // - this.label19.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label19.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.label19, 2); - this.label19.Location = new System.Drawing.Point(13, 114); - this.label19.Name = "label19"; - this.label19.Size = new System.Drawing.Size(67, 15); - this.label19.TabIndex = 1; - this.label19.Text = "Signed URL"; - this.label19.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label20 - // - this.label20.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label20.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.label20, 2); - this.label20.Location = new System.Drawing.Point(13, 154); - this.label20.Name = "label20"; - this.label20.Size = new System.Drawing.Size(70, 15); - this.label20.TabIndex = 2; - this.label20.Text = "Torrent URL"; - this.label20.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // bucketLocationLabel - // - this.bucketLocationLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.bucketLocationLabel.AutoSize = true; - this.bucketLocationLabel.Location = new System.Drawing.Point(96, 10); - this.bucketLocationLabel.MinimumSize = new System.Drawing.Size(0, 25); - this.bucketLocationLabel.Name = "bucketLocationLabel"; - this.bucketLocationLabel.Size = new System.Drawing.Size(44, 25); - this.bucketLocationLabel.TabIndex = 5; - this.bucketLocationLabel.Text = "label22"; - this.bucketLocationLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // s3PublicUrlLinkLabel - // - this.s3PublicUrlLinkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.s3PublicUrlLinkLabel.AutoEllipsis = true; - this.s3LayoutPanel.SetColumnSpan(this.s3PublicUrlLinkLabel, 2); - this.s3PublicUrlLinkLabel.Location = new System.Drawing.Point(96, 115); - this.s3PublicUrlLinkLabel.Name = "s3PublicUrlLinkLabel"; - this.s3PublicUrlLinkLabel.Size = new System.Drawing.Size(391, 13); - this.s3PublicUrlLinkLabel.TabIndex = 6; - this.s3PublicUrlLinkLabel.TabStop = true; - this.s3PublicUrlLinkLabel.Text = "linkLabel1"; - this.s3PublicUrlLinkLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // s3TorrentUrlLinkLabel - // - this.s3TorrentUrlLinkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.s3TorrentUrlLinkLabel.AutoEllipsis = true; - this.s3LayoutPanel.SetColumnSpan(this.s3TorrentUrlLinkLabel, 2); - this.s3TorrentUrlLinkLabel.Location = new System.Drawing.Point(96, 155); - this.s3TorrentUrlLinkLabel.Name = "s3TorrentUrlLinkLabel"; - this.s3TorrentUrlLinkLabel.Size = new System.Drawing.Size(391, 13); - this.s3TorrentUrlLinkLabel.TabIndex = 7; - this.s3TorrentUrlLinkLabel.TabStop = true; - this.s3TorrentUrlLinkLabel.Text = "linkLabel2"; - this.s3TorrentUrlLinkLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label26 - // - this.label26.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label26.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.label26, 2); - this.label26.Location = new System.Drawing.Point(13, 47); - this.label26.Name = "label26"; - this.label26.Size = new System.Drawing.Size(77, 15); - this.label26.TabIndex = 25; - this.label26.Text = "Storage Class"; - // - // s3PublicUrlValidityLabel - // - this.s3PublicUrlValidityLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.s3PublicUrlValidityLabel.AutoSize = true; - this.s3PublicUrlValidityLabel.Location = new System.Drawing.Point(96, 129); - this.s3PublicUrlValidityLabel.Name = "s3PublicUrlValidityLabel"; - this.s3PublicUrlValidityLabel.Size = new System.Drawing.Size(44, 15); - this.s3PublicUrlValidityLabel.TabIndex = 26; - this.s3PublicUrlValidityLabel.Text = "label27"; - // - // storageClassComboBox - // - this.storageClassComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.s3LayoutPanel.SetColumnSpan(this.storageClassComboBox, 2); - this.storageClassComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.storageClassComboBox.FormattingEnabled = true; - this.storageClassComboBox.Location = new System.Drawing.Point(96, 43); - this.storageClassComboBox.Name = "storageClassComboBox"; - this.storageClassComboBox.Size = new System.Drawing.Size(391, 23); - this.storageClassComboBox.TabIndex = 30; - this.storageClassComboBox.SelectionChangeCommitted += new System.EventHandler(this.storageClassComboBox_SelectionChangeCommitted); - // - // bucketLoggingCheckBox - // - this.bucketLoggingCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.bucketLoggingCheckBox.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.bucketLoggingCheckBox, 2); - this.bucketLoggingCheckBox.Location = new System.Drawing.Point(96, 182); - this.bucketLoggingCheckBox.Name = "bucketLoggingCheckBox"; - this.bucketLoggingCheckBox.Size = new System.Drawing.Size(148, 19); - this.bucketLoggingCheckBox.TabIndex = 4; - this.bucketLoggingCheckBox.Text = "Bucket Access Logging"; - this.bucketLoggingCheckBox.UseVisualStyleBackColor = true; - this.bucketLoggingCheckBox.CheckedChanged += new System.EventHandler(this.bucketLoggingCheckBox_CheckedChanged); - // - // bucketVersioningCheckBox - // - this.bucketVersioningCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.bucketVersioningCheckBox.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.bucketVersioningCheckBox, 2); - this.bucketVersioningCheckBox.Location = new System.Drawing.Point(96, 334); - this.bucketVersioningCheckBox.Name = "bucketVersioningCheckBox"; - this.bucketVersioningCheckBox.Size = new System.Drawing.Size(121, 19); - this.bucketVersioningCheckBox.TabIndex = 27; - this.bucketVersioningCheckBox.Text = "Bucket Versioning"; - this.bucketVersioningCheckBox.UseVisualStyleBackColor = true; - this.bucketVersioningCheckBox.CheckedChanged += new System.EventHandler(this.bucketVersioningCheckBox_CheckedChanged); - // - // label21 - // - this.label21.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label21.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.label21, 2); - this.label21.ForeColor = System.Drawing.SystemColors.GrayText; - this.label21.Location = new System.Drawing.Point(96, 356); - this.label21.Name = "label21"; - this.label21.Size = new System.Drawing.Size(373, 30); - this.label21.TabIndex = 28; - this.label21.Text = "You can view all revisions of a file in the browser by choosing View → Show Hidde" + - "n Files."; - // - // bucketMfaCheckBox - // - this.bucketMfaCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.bucketMfaCheckBox.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.bucketMfaCheckBox, 2); - this.bucketMfaCheckBox.Location = new System.Drawing.Point(96, 399); - this.bucketMfaCheckBox.Name = "bucketMfaCheckBox"; - this.bucketMfaCheckBox.Size = new System.Drawing.Size(246, 19); - this.bucketMfaCheckBox.TabIndex = 29; - this.bucketMfaCheckBox.Text = "Multi-Factor Authentication (MFA) Delete"; - this.bucketMfaCheckBox.UseVisualStyleBackColor = true; - this.bucketMfaCheckBox.CheckedChanged += new System.EventHandler(this.bucketMfaCheckBox_CheckedChanged); - // - // label31 - // - this.label31.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label31.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.label31, 2); - this.label31.Location = new System.Drawing.Point(13, 184); - this.label31.Name = "label31"; - this.label31.Size = new System.Drawing.Size(51, 15); - this.label31.TabIndex = 31; - this.label31.Text = "Logging"; - this.label31.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label32 - // - this.label32.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label32.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.label32, 2); - this.label32.Location = new System.Drawing.Point(13, 336); - this.label32.Name = "label32"; - this.label32.Size = new System.Drawing.Size(63, 15); - this.label32.TabIndex = 32; - this.label32.Text = "Versioning"; - this.label32.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label33 - // - this.label33.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.label33, 2); - this.label33.ForeColor = System.Drawing.SystemColors.GrayText; - this.label33.Location = new System.Drawing.Point(96, 204); - this.label33.Name = "label33"; - this.label33.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.label33.Size = new System.Drawing.Size(213, 20); - this.label33.TabIndex = 37; - this.label33.Text = "Write access logs to selected container."; - // - // bucketLoggingComboBox - // - this.bucketLoggingComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.s3LayoutPanel.SetColumnSpan(this.bucketLoggingComboBox, 2); - this.bucketLoggingComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.bucketLoggingComboBox.FormattingEnabled = true; - this.bucketLoggingComboBox.Location = new System.Drawing.Point(96, 227); - this.bucketLoggingComboBox.Name = "bucketLoggingComboBox"; - this.bucketLoggingComboBox.Size = new System.Drawing.Size(391, 23); - this.bucketLoggingComboBox.TabIndex = 38; - this.bucketLoggingComboBox.SelectionChangeCommitted += new System.EventHandler(this.bucketLoggingComboBox_SelectionChangeCommitted); - // - // label34 - // - this.label34.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label34.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.label34, 2); - this.label34.Location = new System.Drawing.Point(13, 84); - this.label34.Name = "label34"; - this.label34.Size = new System.Drawing.Size(64, 15); - this.label34.TabIndex = 39; - this.label34.Text = "Encryption"; - this.label34.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // encryptionCheckBox - // - this.encryptionCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.encryptionCheckBox.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.encryptionCheckBox, 2); - this.encryptionCheckBox.Location = new System.Drawing.Point(96, 82); - this.encryptionCheckBox.Name = "encryptionCheckBox"; - this.encryptionCheckBox.Size = new System.Drawing.Size(143, 19); - this.encryptionCheckBox.TabIndex = 31; - this.encryptionCheckBox.Text = "Server Side Encryption"; - this.encryptionCheckBox.UseVisualStyleBackColor = true; - this.encryptionCheckBox.CheckedChanged += new System.EventHandler(this.encryptionCheckBox_CheckedChanged); - // - // label35 - // - this.label35.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label35.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.label35, 2); - this.label35.Location = new System.Drawing.Point(13, 268); - this.label35.Name = "label35"; - this.label35.Size = new System.Drawing.Size(55, 15); - this.label35.TabIndex = 40; - this.label35.Text = "Analytics"; - this.label35.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // bucketAnalyticsCheckBox - // - this.bucketAnalyticsCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.bucketAnalyticsCheckBox.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.bucketAnalyticsCheckBox, 2); - this.bucketAnalyticsCheckBox.Location = new System.Drawing.Point(96, 266); - this.bucketAnalyticsCheckBox.Name = "bucketAnalyticsCheckBox"; - this.bucketAnalyticsCheckBox.Size = new System.Drawing.Size(164, 19); - this.bucketAnalyticsCheckBox.TabIndex = 41; - this.bucketAnalyticsCheckBox.Text = "Read Access for Qloudstat"; - this.bucketAnalyticsCheckBox.UseVisualStyleBackColor = true; - this.bucketAnalyticsCheckBox.CheckedChanged += new System.EventHandler(this.bucketAnalyticsCheckBox_CheckedChanged); - // - // bucketAnalyticsSetupUrlLinkLabel - // - this.bucketAnalyticsSetupUrlLinkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.bucketAnalyticsSetupUrlLinkLabel.AutoEllipsis = true; - this.s3LayoutPanel.SetColumnSpan(this.bucketAnalyticsSetupUrlLinkLabel, 2); - this.bucketAnalyticsSetupUrlLinkLabel.Location = new System.Drawing.Point(96, 288); - this.bucketAnalyticsSetupUrlLinkLabel.Margin = new System.Windows.Forms.Padding(3, 0, 3, 5); - this.bucketAnalyticsSetupUrlLinkLabel.Name = "bucketAnalyticsSetupUrlLinkLabel"; - this.bucketAnalyticsSetupUrlLinkLabel.Size = new System.Drawing.Size(391, 13); - this.bucketAnalyticsSetupUrlLinkLabel.TabIndex = 42; - this.bucketAnalyticsSetupUrlLinkLabel.TabStop = true; - this.bucketAnalyticsSetupUrlLinkLabel.Text = "linkLabel2"; - this.bucketAnalyticsSetupUrlLinkLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label36 - // - this.label36.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label36.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.label36, 2); - this.label36.ForeColor = System.Drawing.SystemColors.GrayText; - this.label36.Location = new System.Drawing.Point(96, 306); - this.label36.Name = "label36"; - this.label36.Size = new System.Drawing.Size(279, 15); - this.label36.TabIndex = 43; - this.label36.Text = "Open the URL to setup log analytics with Qloudstat."; - // - // lifecycleTransitionCheckBox - // - this.lifecycleTransitionCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.lifecycleTransitionCheckBox.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.lifecycleTransitionCheckBox, 2); - this.lifecycleTransitionCheckBox.Location = new System.Drawing.Point(96, 434); - this.lifecycleTransitionCheckBox.Name = "lifecycleTransitionCheckBox"; - this.lifecycleTransitionCheckBox.Size = new System.Drawing.Size(132, 19); - this.lifecycleTransitionCheckBox.TabIndex = 45; - this.lifecycleTransitionCheckBox.Text = "Transition to Glacier"; - this.lifecycleTransitionCheckBox.UseVisualStyleBackColor = true; - this.lifecycleTransitionCheckBox.CheckedChanged += new System.EventHandler(this.lifecycleTransitionCheckBox_CheckedChanged); - // - // label38 - // - this.label38.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label38.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.label38, 2); - this.label38.Location = new System.Drawing.Point(13, 436); - this.label38.Name = "label38"; - this.label38.Size = new System.Drawing.Size(53, 15); - this.label38.TabIndex = 44; - this.label38.Text = "Lifecycle"; - this.label38.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // lifecycleTransitionComboBox - // - this.lifecycleTransitionComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.s3LayoutPanel.SetColumnSpan(this.lifecycleTransitionComboBox, 2); - this.lifecycleTransitionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.lifecycleTransitionComboBox.FormattingEnabled = true; - this.lifecycleTransitionComboBox.Location = new System.Drawing.Point(96, 459); - this.lifecycleTransitionComboBox.Name = "lifecycleTransitionComboBox"; - this.lifecycleTransitionComboBox.Size = new System.Drawing.Size(391, 23); - this.lifecycleTransitionComboBox.TabIndex = 46; - this.lifecycleTransitionComboBox.SelectionChangeCommitted += new System.EventHandler(this.lifecycleTransitionComboBox_SelectionChangeCommitted); - // - // lifecycleDeleteCheckBox - // - this.lifecycleDeleteCheckBox.AutoSize = true; - this.s3LayoutPanel.SetColumnSpan(this.lifecycleDeleteCheckBox, 2); - this.lifecycleDeleteCheckBox.Location = new System.Drawing.Point(96, 488); - this.lifecycleDeleteCheckBox.Name = "lifecycleDeleteCheckBox"; - this.lifecycleDeleteCheckBox.Size = new System.Drawing.Size(83, 19); - this.lifecycleDeleteCheckBox.TabIndex = 47; - this.lifecycleDeleteCheckBox.Text = "Delete files"; - this.lifecycleDeleteCheckBox.UseVisualStyleBackColor = true; - this.lifecycleDeleteCheckBox.CheckedChanged += new System.EventHandler(this.lifecycleDeleteCheckBox_CheckedChanged); - // - // lifecycleDeleteComboBox - // - this.lifecycleDeleteComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.s3LayoutPanel.SetColumnSpan(this.lifecycleDeleteComboBox, 2); - this.lifecycleDeleteComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.lifecycleDeleteComboBox.FormattingEnabled = true; - this.lifecycleDeleteComboBox.Location = new System.Drawing.Point(96, 513); - this.lifecycleDeleteComboBox.Name = "lifecycleDeleteComboBox"; - this.lifecycleDeleteComboBox.Size = new System.Drawing.Size(391, 23); - this.lifecycleDeleteComboBox.TabIndex = 48; - this.lifecycleDeleteComboBox.SelectionChangeCommitted += new System.EventHandler(this.lifecycleDeleteComboBox_SelectionChangeCommitted); - // - // panelManager - // - this.panelManager.Controls.Add(this.managedDistributionPanel); - this.panelManager.Controls.Add(this.managedGeneralPanel); - this.panelManager.Controls.Add(this.managedMetadataPanel); - this.panelManager.Controls.Add(this.managedPermissionsPanel); - this.panelManager.Controls.Add(this.managedS3Panel); - this.panelManager.Dock = System.Windows.Forms.DockStyle.Fill; - this.panelManager.Location = new System.Drawing.Point(0, 56); - this.panelManager.Name = "panelManager"; - this.panelManager.SelectedIndex = 4; - this.panelManager.SelectedPanel = this.managedS3Panel; - this.panelManager.Size = new System.Drawing.Size(500, 548); - this.panelManager.TabIndex = 2; - // - // managedDistributionPanel - // - this.managedDistributionPanel.Controls.Add(this.distributionLayoutPanel); - this.managedDistributionPanel.Location = new System.Drawing.Point(0, 0); - this.managedDistributionPanel.Name = "managedDistributionPanel"; - this.managedDistributionPanel.Size = new System.Drawing.Size(0, 0); - this.managedDistributionPanel.Text = "managedPanel1"; - // - // managedGeneralPanel - // - this.managedGeneralPanel.Controls.Add(this.generalLayoutPanel); - this.managedGeneralPanel.Location = new System.Drawing.Point(0, 0); - this.managedGeneralPanel.Name = "managedGeneralPanel"; - this.managedGeneralPanel.Size = new System.Drawing.Size(0, 0); - this.managedGeneralPanel.Text = "managedPanel1"; - // - // managedMetadataPanel - // - this.managedMetadataPanel.Controls.Add(this.metadataTableLayoutPanel); - this.managedMetadataPanel.Location = new System.Drawing.Point(0, 0); - this.managedMetadataPanel.Name = "managedMetadataPanel"; - this.managedMetadataPanel.Size = new System.Drawing.Size(0, 0); - this.managedMetadataPanel.Text = "managedPanel1"; - // - // metadataTableLayoutPanel - // - this.metadataTableLayoutPanel.ColumnCount = 4; - this.metadataTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 140F)); - this.metadataTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33332F)); - this.metadataTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); - this.metadataTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); - this.metadataTableLayoutPanel.Controls.Add(this.label30, 0, 0); - this.metadataTableLayoutPanel.Controls.Add(this.metadataDataGridView, 0, 2); - this.metadataTableLayoutPanel.Controls.Add(this.addHeaderButton, 0, 3); - this.metadataTableLayoutPanel.Controls.Add(this.metadataAnimation, 3, 0); - this.metadataTableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.metadataTableLayoutPanel.Location = new System.Drawing.Point(0, 0); - this.metadataTableLayoutPanel.Name = "metadataTableLayoutPanel"; - this.metadataTableLayoutPanel.Padding = new System.Windows.Forms.Padding(10); - this.metadataTableLayoutPanel.RowCount = 4; - this.metadataTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F)); - this.metadataTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.metadataTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.metadataTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.metadataTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.metadataTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.metadataTableLayoutPanel.Size = new System.Drawing.Size(0, 0); - this.metadataTableLayoutPanel.TabIndex = 1; - // - // label30 - // - this.label30.AutoSize = true; - this.metadataTableLayoutPanel.SetColumnSpan(this.label30, 3); - this.label30.Location = new System.Drawing.Point(13, 10); - this.label30.Name = "label30"; - this.label30.Padding = new System.Windows.Forms.Padding(0, 10, 0, 0); - this.label30.Size = new System.Drawing.Size(41, 25); - this.label30.TabIndex = 27; - this.label30.Text = "Headers"; - // - // metadataDataGridView - // - this.metadataDataGridView.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.metadataDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.metadataTableLayoutPanel.SetColumnSpan(this.metadataDataGridView, 4); - this.metadataDataGridView.Dock = System.Windows.Forms.DockStyle.Fill; - this.metadataDataGridView.Location = new System.Drawing.Point(13, 38); - this.metadataDataGridView.Name = "metadataDataGridView"; - this.metadataDataGridView.Size = new System.Drawing.Size(1, 1); - this.metadataDataGridView.TabIndex = 29; - // - // addHeaderButton - // - this.addHeaderButton.AutoSize = true; - this.addHeaderButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.addHeaderButton.ContextMenuStrip = this.addMetadataContextMenuStrip; - this.addHeaderButton.Image = global::Ch.Cyberduck.ResourcesBundle.gear; - this.addHeaderButton.Location = new System.Drawing.Point(13, -16); - this.addHeaderButton.Name = "addHeaderButton"; - this.addHeaderButton.Size = new System.Drawing.Size(38, 24); - this.addHeaderButton.SplitMenuStrip = this.addMetadataContextMenuStrip; - this.addHeaderButton.TabIndex = 30; - this.addHeaderButton.UseVisualStyleBackColor = true; - // - // addMetadataContextMenuStrip - // - this.addMetadataContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripMenuItem1, - this.toolStripMenuItem2, - this.toolStripSeparator2, - this.toolStripMenuItem3}); - this.addMetadataContextMenuStrip.Name = "contextMenuStrip1"; - this.addMetadataContextMenuStrip.Size = new System.Drawing.Size(165, 76); - this.addMetadataContextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.addMetadataContextMenuStrip_Opening); - // - // toolStripMenuItem1 - // - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(164, 22); - this.toolStripMenuItem1.Text = "yves (Owner)"; - // - // toolStripMenuItem2 - // - this.toolStripMenuItem2.Name = "toolStripMenuItem2"; - this.toolStripMenuItem2.Size = new System.Drawing.Size(164, 22); - this.toolStripMenuItem2.Text = "Canoncal User ID"; - // - // toolStripSeparator2 - // - this.toolStripSeparator2.Name = "toolStripSeparator2"; - this.toolStripSeparator2.Size = new System.Drawing.Size(161, 6); - // - // toolStripMenuItem3 - // - this.toolStripMenuItem3.Name = "toolStripMenuItem3"; - this.toolStripMenuItem3.Size = new System.Drawing.Size(164, 22); - this.toolStripMenuItem3.Text = "Remove"; - // - // metadataAnimation - // - this.metadataAnimation.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.metadataAnimation.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; - this.metadataAnimation.Location = new System.Drawing.Point(61, 13); - this.metadataAnimation.Name = "metadataAnimation"; - this.metadataAnimation.Size = new System.Drawing.Size(1, 18); - this.metadataAnimation.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.metadataAnimation.TabIndex = 31; - this.metadataAnimation.TabStop = false; - this.metadataAnimation.Visible = false; - // - // managedPermissionsPanel - // - this.managedPermissionsPanel.Controls.Add(this.panelManagerPermissions); - this.managedPermissionsPanel.Location = new System.Drawing.Point(0, 0); - this.managedPermissionsPanel.Name = "managedPermissionsPanel"; - this.managedPermissionsPanel.Size = new System.Drawing.Size(0, 0); - this.managedPermissionsPanel.Text = "managedPanel2"; - // - // panelManagerPermissions - // - this.panelManagerPermissions.Controls.Add(this.nonCloudManagedPanel); - this.panelManagerPermissions.Controls.Add(this.cloudManagedPanel); - this.panelManagerPermissions.Dock = System.Windows.Forms.DockStyle.Fill; - this.panelManagerPermissions.Location = new System.Drawing.Point(0, 0); - this.panelManagerPermissions.Name = "panelManagerPermissions"; - this.panelManagerPermissions.SelectedIndex = 0; - this.panelManagerPermissions.SelectedPanel = this.nonCloudManagedPanel; - this.panelManagerPermissions.Size = new System.Drawing.Size(0, 0); - this.panelManagerPermissions.TabIndex = 1; - // - // nonCloudManagedPanel - // - this.nonCloudManagedPanel.Controls.Add(this.permissionsLayoutPanel); - this.nonCloudManagedPanel.Location = new System.Drawing.Point(0, 0); - this.nonCloudManagedPanel.Name = "nonCloudManagedPanel"; - this.nonCloudManagedPanel.Size = new System.Drawing.Size(0, 0); - // - // permissionsLayoutPanel - // - this.permissionsLayoutPanel.ColumnCount = 4; - this.permissionsLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 140F)); - this.permissionsLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33332F)); - this.permissionsLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); - this.permissionsLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); - this.permissionsLayoutPanel.Controls.Add(this.label10, 0, 2); - this.permissionsLayoutPanel.Controls.Add(this.ownerrCheckBox, 1, 2); - this.permissionsLayoutPanel.Controls.Add(this.ownerwCheckBox, 2, 2); - this.permissionsLayoutPanel.Controls.Add(this.ownerxCheckBox, 3, 2); - this.permissionsLayoutPanel.Controls.Add(this.label11, 0, 3); - this.permissionsLayoutPanel.Controls.Add(this.grouprCheckbox, 1, 3); - this.permissionsLayoutPanel.Controls.Add(this.groupwCheckbox, 2, 3); - this.permissionsLayoutPanel.Controls.Add(this.groupxCheckbox, 3, 3); - this.permissionsLayoutPanel.Controls.Add(this.label12, 0, 4); - this.permissionsLayoutPanel.Controls.Add(this.otherwCheckbox, 2, 4); - this.permissionsLayoutPanel.Controls.Add(this.otherxCheckbox, 3, 4); - this.permissionsLayoutPanel.Controls.Add(this.permissionAnimation, 3, 0); - this.permissionsLayoutPanel.Controls.Add(this.otherrCheckbox, 1, 4); - this.permissionsLayoutPanel.Controls.Add(this.applyRecursivePermissionsButton, 2, 6); - this.permissionsLayoutPanel.Controls.Add(this.label23, 0, 0); - this.permissionsLayoutPanel.Controls.Add(this.octalTextBox, 1, 0); - this.permissionsLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.permissionsLayoutPanel.Location = new System.Drawing.Point(0, 0); - this.permissionsLayoutPanel.Name = "permissionsLayoutPanel"; - this.permissionsLayoutPanel.Padding = new System.Windows.Forms.Padding(10); - this.permissionsLayoutPanel.RowCount = 7; - this.permissionsLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.permissionsLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.permissionsLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.permissionsLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.permissionsLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.permissionsLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.permissionsLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.permissionsLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.permissionsLayoutPanel.Size = new System.Drawing.Size(0, 0); - this.permissionsLayoutPanel.TabIndex = 0; - // - // label10 - // - this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(13, 59); - this.label10.Name = "label10"; - this.label10.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.label10.Size = new System.Drawing.Size(42, 20); - this.label10.TabIndex = 0; - this.label10.Text = "Owner"; - // - // ownerrCheckBox - // - this.ownerrCheckBox.AutoSize = true; - this.ownerrCheckBox.Location = new System.Drawing.Point(153, 62); - this.ownerrCheckBox.Name = "ownerrCheckBox"; - this.ownerrCheckBox.Size = new System.Drawing.Size(1, 19); - this.ownerrCheckBox.TabIndex = 1; - this.ownerrCheckBox.Text = "Read"; - this.ownerrCheckBox.ThreeState = true; - this.ownerrCheckBox.UseVisualStyleBackColor = true; - this.ownerrCheckBox.CheckStateChanged += new System.EventHandler(this.ownerrCheckBox_CheckStateChanged); - // - // ownerwCheckBox - // - this.ownerwCheckBox.AutoSize = true; - this.ownerwCheckBox.Location = new System.Drawing.Point(107, 62); - this.ownerwCheckBox.Name = "ownerwCheckBox"; - this.ownerwCheckBox.Size = new System.Drawing.Size(1, 19); - this.ownerwCheckBox.TabIndex = 2; - this.ownerwCheckBox.Text = "Write"; - this.ownerwCheckBox.ThreeState = true; - this.ownerwCheckBox.UseVisualStyleBackColor = true; - this.ownerwCheckBox.CheckStateChanged += new System.EventHandler(this.ownerwCheckBox_CheckStateChanged); - // - // ownerxCheckBox - // - this.ownerxCheckBox.AutoSize = true; - this.ownerxCheckBox.Location = new System.Drawing.Point(61, 62); - this.ownerxCheckBox.Name = "ownerxCheckBox"; - this.ownerxCheckBox.Size = new System.Drawing.Size(1, 19); - this.ownerxCheckBox.TabIndex = 3; - this.ownerxCheckBox.Text = "Execute"; - this.ownerxCheckBox.ThreeState = true; - this.ownerxCheckBox.UseVisualStyleBackColor = true; - this.ownerxCheckBox.CheckStateChanged += new System.EventHandler(this.ownerxCheckBox_CheckStateChanged); - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(13, 84); - this.label11.Name = "label11"; - this.label11.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.label11.Size = new System.Drawing.Size(40, 20); - this.label11.TabIndex = 4; - this.label11.Text = "Group"; - // - // grouprCheckbox - // - this.grouprCheckbox.AutoSize = true; - this.grouprCheckbox.Location = new System.Drawing.Point(153, 87); - this.grouprCheckbox.Name = "grouprCheckbox"; - this.grouprCheckbox.Size = new System.Drawing.Size(1, 19); - this.grouprCheckbox.TabIndex = 5; - this.grouprCheckbox.Text = "Read"; - this.grouprCheckbox.ThreeState = true; - this.grouprCheckbox.UseVisualStyleBackColor = true; - this.grouprCheckbox.CheckStateChanged += new System.EventHandler(this.grouprCheckbox_CheckStateChanged); - // - // groupwCheckbox - // - this.groupwCheckbox.AutoSize = true; - this.groupwCheckbox.Location = new System.Drawing.Point(107, 87); - this.groupwCheckbox.Name = "groupwCheckbox"; - this.groupwCheckbox.Size = new System.Drawing.Size(1, 19); - this.groupwCheckbox.TabIndex = 6; - this.groupwCheckbox.Text = "Write"; - this.groupwCheckbox.ThreeState = true; - this.groupwCheckbox.UseVisualStyleBackColor = true; - this.groupwCheckbox.CheckStateChanged += new System.EventHandler(this.groupwCheckbox_CheckStateChanged); - // - // groupxCheckbox - // - this.groupxCheckbox.AutoSize = true; - this.groupxCheckbox.Location = new System.Drawing.Point(61, 87); - this.groupxCheckbox.Name = "groupxCheckbox"; - this.groupxCheckbox.Size = new System.Drawing.Size(1, 19); - this.groupxCheckbox.TabIndex = 7; - this.groupxCheckbox.Text = "Execute"; - this.groupxCheckbox.ThreeState = true; - this.groupxCheckbox.UseVisualStyleBackColor = true; - this.groupxCheckbox.CheckStateChanged += new System.EventHandler(this.groupxCheckbox_CheckStateChanged); - // - // label12 - // - this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(13, 109); - this.label12.Name = "label12"; - this.label12.Padding = new System.Windows.Forms.Padding(0, 6, 0, 0); - this.label12.Size = new System.Drawing.Size(42, 21); - this.label12.TabIndex = 8; - this.label12.Text = "Others"; - // - // otherwCheckbox - // - this.otherwCheckbox.AutoSize = true; - this.otherwCheckbox.Location = new System.Drawing.Point(107, 112); - this.otherwCheckbox.Name = "otherwCheckbox"; - this.otherwCheckbox.Size = new System.Drawing.Size(1, 19); - this.otherwCheckbox.TabIndex = 10; - this.otherwCheckbox.Text = "Write"; - this.otherwCheckbox.ThreeState = true; - this.otherwCheckbox.UseVisualStyleBackColor = true; - this.otherwCheckbox.CheckStateChanged += new System.EventHandler(this.otherwCheckbox_CheckStateChanged); - // - // otherxCheckbox - // - this.otherxCheckbox.AutoSize = true; - this.otherxCheckbox.Location = new System.Drawing.Point(61, 112); - this.otherxCheckbox.Name = "otherxCheckbox"; - this.otherxCheckbox.Size = new System.Drawing.Size(1, 19); - this.otherxCheckbox.TabIndex = 11; - this.otherxCheckbox.Text = "Execute"; - this.otherxCheckbox.ThreeState = true; - this.otherxCheckbox.UseVisualStyleBackColor = true; - this.otherxCheckbox.CheckStateChanged += new System.EventHandler(this.otherxCheckbox_CheckStateChanged); - // - // permissionAnimation - // - this.permissionAnimation.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.permissionAnimation.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; - this.permissionAnimation.Location = new System.Drawing.Point(61, 13); - this.permissionAnimation.Name = "permissionAnimation"; - this.permissionAnimation.Size = new System.Drawing.Size(1, 18); - this.permissionAnimation.TabIndex = 23; - this.permissionAnimation.TabStop = false; - this.permissionAnimation.Visible = false; - // - // otherrCheckbox - // - this.otherrCheckbox.AutoSize = true; - this.otherrCheckbox.Location = new System.Drawing.Point(153, 112); - this.otherrCheckbox.Name = "otherrCheckbox"; - this.otherrCheckbox.Size = new System.Drawing.Size(1, 19); - this.otherrCheckbox.TabIndex = 9; - this.otherrCheckbox.Text = "Read"; - this.otherrCheckbox.ThreeState = true; - this.otherrCheckbox.UseVisualStyleBackColor = true; - this.otherrCheckbox.CheckStateChanged += new System.EventHandler(this.otherrCheckbox_CheckStateChanged); - // - // applyRecursivePermissionsButton - // - this.applyRecursivePermissionsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.applyRecursivePermissionsButton.AutoSize = true; - this.permissionsLayoutPanel.SetColumnSpan(this.applyRecursivePermissionsButton, 2); - this.applyRecursivePermissionsButton.Location = new System.Drawing.Point(107, 137); - this.applyRecursivePermissionsButton.Name = "applyRecursivePermissionsButton"; - this.applyRecursivePermissionsButton.Size = new System.Drawing.Size(1, 27); - this.applyRecursivePermissionsButton.TabIndex = 28; - this.applyRecursivePermissionsButton.Text = "Apply changes recursively"; - this.applyRecursivePermissionsButton.UseVisualStyleBackColor = true; - this.applyRecursivePermissionsButton.Click += new System.EventHandler(this.applyRecursivePermissionsButton_Click); - // - // label23 - // - this.label23.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label23.AutoSize = true; - this.label23.Location = new System.Drawing.Point(13, 17); - this.label23.Name = "label23"; - this.label23.Size = new System.Drawing.Size(96, 15); - this.label23.TabIndex = 25; - this.label23.Text = "Unix Permissions"; - // - // octalTextBox - // - this.octalTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.octalTextBox.Location = new System.Drawing.Point(156, 13); - this.octalTextBox.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3); - this.octalTextBox.Name = "octalTextBox"; - this.octalTextBox.Size = new System.Drawing.Size(1, 23); - this.octalTextBox.TabIndex = 24; - this.octalTextBox.Validated += new System.EventHandler(this.octalTextBox_Validated); - // - // cloudManagedPanel - // - this.cloudManagedPanel.Controls.Add(this.tableLayoutPanel1); - this.cloudManagedPanel.Location = new System.Drawing.Point(0, 0); - this.cloudManagedPanel.Name = "cloudManagedPanel"; - this.cloudManagedPanel.Size = new System.Drawing.Size(0, 0); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 2; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 24F)); - this.tableLayoutPanel1.Controls.Add(this.AclLabel, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.aclDataGridView, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.addAclButton, 0, 5); - this.tableLayoutPanel1.Controls.Add(this.authenticatedLabel, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.authenticatedUrlLinkLabel, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.aclAnimation, 1, 1); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel1.RowCount = 6; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 5F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(0, 0); - this.tableLayoutPanel1.TabIndex = 0; - // - // AclLabel - // - this.AclLabel.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.AclLabel, 2); - this.AclLabel.Location = new System.Drawing.Point(13, 63); - this.AclLabel.Name = "AclLabel"; - this.AclLabel.Padding = new System.Windows.Forms.Padding(0, 10, 0, 0); - this.AclLabel.Size = new System.Drawing.Size(1, 10); - this.AclLabel.TabIndex = 27; - this.AclLabel.Text = "Access Control List (ACL)"; - // - // aclDataGridView - // - this.aclDataGridView.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.aclDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.tableLayoutPanel1.SetColumnSpan(this.aclDataGridView, 2); - this.aclDataGridView.Dock = System.Windows.Forms.DockStyle.Fill; - this.aclDataGridView.Location = new System.Drawing.Point(13, 76); - this.aclDataGridView.Name = "aclDataGridView"; - this.aclDataGridView.Size = new System.Drawing.Size(1, 1); - this.aclDataGridView.TabIndex = 29; - // - // addAclButton - // - this.addAclButton.AutoSize = true; - this.addAclButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.addAclButton.ContextMenuStrip = this.addAclContextMenuStrip; - this.addAclButton.Image = global::Ch.Cyberduck.ResourcesBundle.gear; - this.addAclButton.Location = new System.Drawing.Point(13, -16); - this.addAclButton.Name = "addAclButton"; - this.addAclButton.Size = new System.Drawing.Size(1, 24); - this.addAclButton.SplitMenuStrip = this.addAclContextMenuStrip; - this.addAclButton.TabIndex = 30; - this.addAclButton.UseVisualStyleBackColor = true; - // - // addAclContextMenuStrip - // - this.addAclContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.yvesOwnerToolStripMenuItem, - this.canoncalUserIDToolStripMenuItem, - this.toolStripSeparator1, - this.removeToolStripMenuItem}); - this.addAclContextMenuStrip.Name = "contextMenuStrip1"; - this.addAclContextMenuStrip.Size = new System.Drawing.Size(165, 76); - this.addAclContextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.addAclContextMenuStrip_Opening); - // - // yvesOwnerToolStripMenuItem - // - this.yvesOwnerToolStripMenuItem.Name = "yvesOwnerToolStripMenuItem"; - this.yvesOwnerToolStripMenuItem.Size = new System.Drawing.Size(164, 22); - this.yvesOwnerToolStripMenuItem.Text = "yves (Owner)"; - // - // canoncalUserIDToolStripMenuItem - // - this.canoncalUserIDToolStripMenuItem.Name = "canoncalUserIDToolStripMenuItem"; - this.canoncalUserIDToolStripMenuItem.Size = new System.Drawing.Size(164, 22); - this.canoncalUserIDToolStripMenuItem.Text = "Canoncal User ID"; - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(161, 6); - // - // removeToolStripMenuItem - // - this.removeToolStripMenuItem.Name = "removeToolStripMenuItem"; - this.removeToolStripMenuItem.Size = new System.Drawing.Size(164, 22); - this.removeToolStripMenuItem.Text = "Remove"; - // - // authenticatedLabel - // - this.authenticatedLabel.AutoSize = true; - this.authenticatedLabel.Location = new System.Drawing.Point(13, 15); - this.authenticatedLabel.MinimumSize = new System.Drawing.Size(0, 28); - this.authenticatedLabel.Name = "authenticatedLabel"; - this.authenticatedLabel.Size = new System.Drawing.Size(1, 28); - this.authenticatedLabel.TabIndex = 31; - this.authenticatedLabel.Text = "Authenticated URL"; - // - // authenticatedUrlLinkLabel - // - this.authenticatedUrlLinkLabel.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.authenticatedUrlLinkLabel, 2); - this.authenticatedUrlLinkLabel.Location = new System.Drawing.Point(13, 43); - this.authenticatedUrlLinkLabel.MinimumSize = new System.Drawing.Size(0, 20); - this.authenticatedUrlLinkLabel.Name = "authenticatedUrlLinkLabel"; - this.authenticatedUrlLinkLabel.Size = new System.Drawing.Size(1, 20); - this.authenticatedUrlLinkLabel.TabIndex = 32; - this.authenticatedUrlLinkLabel.TabStop = true; - this.authenticatedUrlLinkLabel.Text = "linkLabel1"; - // - // aclAnimation - // - this.aclAnimation.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.aclAnimation.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; - this.aclAnimation.Location = new System.Drawing.Point(-10, 18); - this.aclAnimation.Name = "aclAnimation"; - this.aclAnimation.Size = new System.Drawing.Size(18, 21); - this.aclAnimation.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.aclAnimation.TabIndex = 33; - this.aclAnimation.TabStop = false; - this.aclAnimation.Visible = false; - // - // managedS3Panel - // - this.managedS3Panel.Controls.Add(this.s3LayoutPanel); - this.managedS3Panel.Location = new System.Drawing.Point(0, 0); - this.managedS3Panel.Name = "managedS3Panel"; - this.managedS3Panel.Size = new System.Drawing.Size(500, 548); - this.managedS3Panel.Text = "managedPanel1"; - // - // InfoForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.AutoSize = true; - this.ClientSize = new System.Drawing.Size(500, 604); - this.Controls.Add(this.panelManager); - this.Controls.Add(this.toolStrip); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; - this.HelpButton = true; - this.MaximizeBox = false; - this.MaximumSize = new System.Drawing.Size(998, 799); - this.MinimizeBox = false; - this.MinimumSize = new System.Drawing.Size(499, 643); - this.Name = "InfoForm"; - this.Text = "Info"; - this.toolStrip.ResumeLayout(false); - this.toolStrip.PerformLayout(); - this.distributionLayoutPanel.ResumeLayout(false); - this.distributionLayoutPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.distributionAnimation)).EndInit(); - this.generalLayoutPanel.ResumeLayout(false); - this.generalLayoutPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.icon)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.sizeAnimation)).EndInit(); - this.s3LayoutPanel.ResumeLayout(false); - this.s3LayoutPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.s3Animation)).EndInit(); - this.panelManager.ResumeLayout(false); - this.managedDistributionPanel.ResumeLayout(false); - this.managedDistributionPanel.PerformLayout(); - this.managedGeneralPanel.ResumeLayout(false); - this.managedGeneralPanel.PerformLayout(); - this.managedMetadataPanel.ResumeLayout(false); - this.metadataTableLayoutPanel.ResumeLayout(false); - this.metadataTableLayoutPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.metadataDataGridView)).EndInit(); - this.addMetadataContextMenuStrip.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.metadataAnimation)).EndInit(); - this.managedPermissionsPanel.ResumeLayout(false); - this.panelManagerPermissions.ResumeLayout(false); - this.nonCloudManagedPanel.ResumeLayout(false); - this.permissionsLayoutPanel.ResumeLayout(false); - this.permissionsLayoutPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.permissionAnimation)).EndInit(); - this.cloudManagedPanel.ResumeLayout(false); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.aclDataGridView)).EndInit(); - this.addAclContextMenuStrip.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.aclAnimation)).EndInit(); - this.managedS3Panel.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.ToolStripButton generalButton; - private System.Windows.Forms.ToolStripButton permissionsButton; - private System.Windows.Forms.TableLayoutPanel generalLayoutPanel; - private System.Windows.Forms.PictureBox icon; - private System.Windows.Forms.TextBox filenameTextbox; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.Label label9; - private ClickLinkLabel weburlLabel; - private System.Windows.Forms.Button calculateButton; - private System.Windows.Forms.PictureBox sizeAnimation; - private System.Windows.Forms.ToolTip toolTip; - private System.Windows.Forms.ToolStripButton distributionButton; - private System.Windows.Forms.ToolStripButton s3Button; - private System.Windows.Forms.TableLayoutPanel distributionLayoutPanel; - private System.Windows.Forms.Label label14; - private System.Windows.Forms.Label label15; - private System.Windows.Forms.Label label16; - private System.Windows.Forms.Label label17; - private System.Windows.Forms.ComboBox deliveryMethodComboBox; - private System.Windows.Forms.CheckBox distributionEnableCheckBox; - private System.Windows.Forms.CheckBox distributionLoggingCheckBox; - private System.Windows.Forms.Label statusLabel; - private System.Windows.Forms.TextBox distributionCnameTextBox; - private System.Windows.Forms.TableLayoutPanel s3LayoutPanel; - private System.Windows.Forms.Label label18; - private System.Windows.Forms.Label label19; - private System.Windows.Forms.Label label20; - private System.Windows.Forms.CheckBox bucketLoggingCheckBox; - private System.Windows.Forms.Label bucketLocationLabel; - private ClickLinkLabel s3PublicUrlLinkLabel; - private ClickLinkLabel s3TorrentUrlLinkLabel; - private ClickLinkLabel whereLinkLabel; - private System.Windows.Forms.PictureBox s3Animation; - private System.Windows.Forms.PictureBox distributionAnimation; - private ClickLinkLabel cnameUrlLinkLabel; - private System.Windows.Forms.ToolStripButton metadataButton; - private PanelManager panelManager; - private ManagedPanel managedGeneralPanel; - private ManagedPanel managedPermissionsPanel; - private ManagedPanel managedMetadataPanel; - private ManagedPanel managedDistributionPanel; - private ManagedPanel managedS3Panel; - private System.Windows.Forms.Label label22; - private System.Windows.Forms.Label sizeLabel; - private System.Windows.Forms.Label pathLabel; - private System.Windows.Forms.Label kindLabel; - private System.Windows.Forms.Label permissionsLabel; - private System.Windows.Forms.Label ownerLabel; - private System.Windows.Forms.Label groupLabel; - private System.Windows.Forms.Label modifiedLabel; - private System.Windows.Forms.Label createdLabel; - private System.Windows.Forms.TableLayoutPanel permissionsLayoutPanel; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.CheckBox ownerrCheckBox; - private System.Windows.Forms.CheckBox ownerwCheckBox; - private System.Windows.Forms.CheckBox ownerxCheckBox; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.CheckBox grouprCheckbox; - private System.Windows.Forms.CheckBox groupwCheckbox; - private System.Windows.Forms.CheckBox groupxCheckbox; - private System.Windows.Forms.Label label12; - private System.Windows.Forms.CheckBox otherwCheckbox; - private System.Windows.Forms.CheckBox otherxCheckbox; - private System.Windows.Forms.TextBox octalTextBox; - private System.Windows.Forms.PictureBox permissionAnimation; - private System.Windows.Forms.CheckBox otherrCheckbox; - private System.Windows.Forms.Label label23; - private System.Windows.Forms.Label AclLabel; - private System.Windows.Forms.Button applyRecursivePermissionsButton; - private System.Windows.Forms.DataGridView aclDataGridView; - private SplitButton addAclButton; - private System.Windows.Forms.ContextMenuStrip addAclContextMenuStrip; - private System.Windows.Forms.ToolStripMenuItem yvesOwnerToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem canoncalUserIDToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.ToolStripMenuItem removeToolStripMenuItem; - private System.Windows.Forms.TableLayoutPanel metadataTableLayoutPanel; - private System.Windows.Forms.Label label30; - private System.Windows.Forms.DataGridView metadataDataGridView; - private SplitButton addHeaderButton; - private System.Windows.Forms.ContextMenuStrip addMetadataContextMenuStrip; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3; - private System.Windows.Forms.PictureBox metadataAnimation; - private System.Windows.Forms.Label label25; - private System.Windows.Forms.ComboBox defaultRootComboBox; - private System.Windows.Forms.Label label26; - private System.Windows.Forms.Label s3PublicUrlValidityLabel; - private System.Windows.Forms.CheckBox bucketVersioningCheckBox; - private System.Windows.Forms.CheckBox bucketMfaCheckBox; - private System.Windows.Forms.Label label21; - private System.Windows.Forms.ComboBox storageClassComboBox; - private PanelManager panelManagerPermissions; - private ManagedPanel nonCloudManagedPanel; - private ManagedPanel cloudManagedPanel; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label authenticatedLabel; - private ClickLinkLabel authenticatedUrlLinkLabel; - private System.Windows.Forms.PictureBox aclAnimation; - private ClickThroughToolStrip toolStrip; - private System.Windows.Forms.TextBox checksumTextBox; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.Label invalidationStatus; - private System.Windows.Forms.Label label24; - private System.Windows.Forms.Button invalidateButton; - private System.Windows.Forms.Label label27; - private ClickLinkLabel originLinkLabel; - private System.Windows.Forms.Label label28; - private System.Windows.Forms.Label label29; - private System.Windows.Forms.ComboBox distributionLoggingComboBox; - private System.Windows.Forms.Label label31; - private System.Windows.Forms.Label label32; - private System.Windows.Forms.Label label33; - private System.Windows.Forms.ComboBox bucketLoggingComboBox; - private System.Windows.Forms.Label label34; - private System.Windows.Forms.CheckBox encryptionCheckBox; - private System.Windows.Forms.Label label35; - private System.Windows.Forms.CheckBox bucketAnalyticsCheckBox; - private ClickLinkLabel bucketAnalyticsSetupUrlLinkLabel; - private System.Windows.Forms.Label label36; - private System.Windows.Forms.Label label37; - private System.Windows.Forms.CheckBox distributionAnalyticsCheckBox; - private System.Windows.Forms.LinkLabel distributionAnalyticsSetupUrlLinkLabel; - private System.Windows.Forms.CheckBox lifecycleTransitionCheckBox; - private System.Windows.Forms.Label label38; - private System.Windows.Forms.ComboBox lifecycleTransitionComboBox; - private System.Windows.Forms.CheckBox lifecycleDeleteCheckBox; - private System.Windows.Forms.ComboBox lifecycleDeleteComboBox; - } +using Ch.Cyberduck.Ui.Winforms.Controls; + +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class InfoForm + { + /// + /// 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(); + this.toolStrip = new Ch.Cyberduck.Ui.Winforms.Controls.ClickThroughToolStrip(); + this.generalButton = new System.Windows.Forms.ToolStripButton(); + this.permissionsButton = new System.Windows.Forms.ToolStripButton(); + this.metadataButton = new System.Windows.Forms.ToolStripButton(); + this.distributionButton = new System.Windows.Forms.ToolStripButton(); + this.s3Button = new System.Windows.Forms.ToolStripButton(); + this.distributionLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.label14 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.deliveryMethodComboBox = new System.Windows.Forms.ComboBox(); + this.distributionEnableCheckBox = new System.Windows.Forms.CheckBox(); + this.distributionLoggingCheckBox = new System.Windows.Forms.CheckBox(); + this.statusLabel = new System.Windows.Forms.Label(); + this.distributionCnameTextBox = new System.Windows.Forms.TextBox(); + this.whereLinkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); + this.distributionAnimation = new System.Windows.Forms.PictureBox(); + this.cnameUrlLinkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); + this.label25 = new System.Windows.Forms.Label(); + this.defaultRootComboBox = new System.Windows.Forms.ComboBox(); + this.label13 = new System.Windows.Forms.Label(); + this.invalidationStatus = new System.Windows.Forms.Label(); + this.label24 = new System.Windows.Forms.Label(); + this.invalidateButton = new System.Windows.Forms.Button(); + this.label27 = new System.Windows.Forms.Label(); + this.originLinkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); + this.label28 = new System.Windows.Forms.Label(); + this.label29 = new System.Windows.Forms.Label(); + this.distributionLoggingComboBox = new System.Windows.Forms.ComboBox(); + this.label37 = new System.Windows.Forms.Label(); + this.distributionAnalyticsCheckBox = new System.Windows.Forms.CheckBox(); + this.distributionAnalyticsSetupUrlLinkLabel = new System.Windows.Forms.LinkLabel(); + this.generalLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.icon = new System.Windows.Forms.PictureBox(); + this.filenameTextbox = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.sizeLabel = new System.Windows.Forms.Label(); + this.pathLabel = new System.Windows.Forms.Label(); + this.weburlLabel = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); + this.kindLabel = new System.Windows.Forms.Label(); + this.permissionsLabel = new System.Windows.Forms.Label(); + this.ownerLabel = new System.Windows.Forms.Label(); + this.groupLabel = new System.Windows.Forms.Label(); + this.modifiedLabel = new System.Windows.Forms.Label(); + this.calculateButton = new System.Windows.Forms.Button(); + this.sizeAnimation = new System.Windows.Forms.PictureBox(); + this.label22 = new System.Windows.Forms.Label(); + this.createdLabel = new System.Windows.Forms.Label(); + this.checksumTextBox = new System.Windows.Forms.TextBox(); + this.s3LayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.s3Animation = new System.Windows.Forms.PictureBox(); + this.label18 = new System.Windows.Forms.Label(); + this.label19 = new System.Windows.Forms.Label(); + this.label20 = new System.Windows.Forms.Label(); + this.bucketLocationLabel = new System.Windows.Forms.Label(); + this.s3PublicUrlLinkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); + this.s3TorrentUrlLinkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); + this.label26 = new System.Windows.Forms.Label(); + this.s3PublicUrlValidityLabel = new System.Windows.Forms.Label(); + this.storageClassComboBox = new System.Windows.Forms.ComboBox(); + this.bucketLoggingCheckBox = new System.Windows.Forms.CheckBox(); + this.bucketVersioningCheckBox = new System.Windows.Forms.CheckBox(); + this.label21 = new System.Windows.Forms.Label(); + this.bucketMfaCheckBox = new System.Windows.Forms.CheckBox(); + this.label31 = new System.Windows.Forms.Label(); + this.label32 = new System.Windows.Forms.Label(); + this.label33 = new System.Windows.Forms.Label(); + this.bucketLoggingComboBox = new System.Windows.Forms.ComboBox(); + this.label34 = new System.Windows.Forms.Label(); + this.encryptionCheckBox = new System.Windows.Forms.CheckBox(); + this.label35 = new System.Windows.Forms.Label(); + this.bucketAnalyticsCheckBox = new System.Windows.Forms.CheckBox(); + this.bucketAnalyticsSetupUrlLinkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); + this.label36 = new System.Windows.Forms.Label(); + this.lifecycleTransitionCheckBox = new System.Windows.Forms.CheckBox(); + this.label38 = new System.Windows.Forms.Label(); + this.lifecycleTransitionComboBox = new System.Windows.Forms.ComboBox(); + this.lifecycleDeleteCheckBox = new System.Windows.Forms.CheckBox(); + this.lifecycleDeleteComboBox = new System.Windows.Forms.ComboBox(); + this.toolTip = new System.Windows.Forms.ToolTip(this.components); + this.panelManager = new Ch.Cyberduck.Ui.Winforms.Controls.PanelManager(); + this.managedDistributionPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.managedGeneralPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.managedMetadataPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.metadataTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.label30 = new System.Windows.Forms.Label(); + this.metadataDataGridView = new System.Windows.Forms.DataGridView(); + this.addHeaderButton = new Ch.Cyberduck.Ui.Winforms.Controls.SplitButton(); + this.addMetadataContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem(); + this.metadataAnimation = new System.Windows.Forms.PictureBox(); + this.managedPermissionsPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.panelManagerPermissions = new Ch.Cyberduck.Ui.Winforms.Controls.PanelManager(); + this.nonCloudManagedPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.permissionsLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.label10 = new System.Windows.Forms.Label(); + this.ownerrCheckBox = new System.Windows.Forms.CheckBox(); + this.ownerwCheckBox = new System.Windows.Forms.CheckBox(); + this.ownerxCheckBox = new System.Windows.Forms.CheckBox(); + this.label11 = new System.Windows.Forms.Label(); + this.grouprCheckbox = new System.Windows.Forms.CheckBox(); + this.groupwCheckbox = new System.Windows.Forms.CheckBox(); + this.groupxCheckbox = new System.Windows.Forms.CheckBox(); + this.label12 = new System.Windows.Forms.Label(); + this.otherwCheckbox = new System.Windows.Forms.CheckBox(); + this.otherxCheckbox = new System.Windows.Forms.CheckBox(); + this.permissionAnimation = new System.Windows.Forms.PictureBox(); + this.otherrCheckbox = new System.Windows.Forms.CheckBox(); + this.applyRecursivePermissionsButton = new System.Windows.Forms.Button(); + this.label23 = new System.Windows.Forms.Label(); + this.octalTextBox = new System.Windows.Forms.TextBox(); + this.cloudManagedPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.AclLabel = new System.Windows.Forms.Label(); + this.aclDataGridView = new System.Windows.Forms.DataGridView(); + this.addAclButton = new Ch.Cyberduck.Ui.Winforms.Controls.SplitButton(); + this.addAclContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.yvesOwnerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.canoncalUserIDToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.removeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.authenticatedLabel = new System.Windows.Forms.Label(); + this.authenticatedUrlLinkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); + this.aclAnimation = new System.Windows.Forms.PictureBox(); + this.managedS3Panel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.toolStrip.SuspendLayout(); + this.distributionLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.distributionAnimation)).BeginInit(); + this.generalLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.icon)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.sizeAnimation)).BeginInit(); + this.s3LayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.s3Animation)).BeginInit(); + this.panelManager.SuspendLayout(); + this.managedDistributionPanel.SuspendLayout(); + this.managedGeneralPanel.SuspendLayout(); + this.managedMetadataPanel.SuspendLayout(); + this.metadataTableLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.metadataDataGridView)).BeginInit(); + this.addMetadataContextMenuStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.metadataAnimation)).BeginInit(); + this.managedPermissionsPanel.SuspendLayout(); + this.panelManagerPermissions.SuspendLayout(); + this.nonCloudManagedPanel.SuspendLayout(); + this.permissionsLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.permissionAnimation)).BeginInit(); + this.cloudManagedPanel.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.aclDataGridView)).BeginInit(); + this.addAclContextMenuStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.aclAnimation)).BeginInit(); + this.managedS3Panel.SuspendLayout(); + this.SuspendLayout(); + // + // toolStrip + // + this.toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.toolStrip.ImageScalingSize = new System.Drawing.Size(32, 32); + this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.generalButton, + this.permissionsButton, + this.metadataButton, + this.distributionButton, + this.s3Button}); + this.toolStrip.Location = new System.Drawing.Point(0, 0); + this.toolStrip.MinimumSize = new System.Drawing.Size(0, 56); + this.toolStrip.Name = "toolStrip"; + this.toolStrip.Size = new System.Drawing.Size(500, 56); + this.toolStrip.TabIndex = 0; + this.toolStrip.Text = "toolStrip1"; + // + // generalButton + // + this.generalButton.Image = global::Ch.Cyberduck.ResourcesBundle.info; + this.generalButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.generalButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.generalButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.generalButton.Name = "generalButton"; + this.generalButton.Size = new System.Drawing.Size(51, 56); + this.generalButton.Text = "General"; + this.generalButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.generalButton.Click += new System.EventHandler(this.generalButton_Click); + // + // permissionsButton + // + this.permissionsButton.Image = global::Ch.Cyberduck.ResourcesBundle.permissions; + this.permissionsButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.permissionsButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.permissionsButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.permissionsButton.Name = "permissionsButton"; + this.permissionsButton.Size = new System.Drawing.Size(74, 56); + this.permissionsButton.Text = "Permissions"; + this.permissionsButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.permissionsButton.Click += new System.EventHandler(this.permissionsButton_Click); + // + // metadataButton + // + this.metadataButton.Image = global::Ch.Cyberduck.ResourcesBundle.pencil; + this.metadataButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.metadataButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.metadataButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.metadataButton.Name = "metadataButton"; + this.metadataButton.Size = new System.Drawing.Size(61, 56); + this.metadataButton.Text = "Metadata"; + this.metadataButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.metadataButton.Click += new System.EventHandler(this.metadataButton_Click); + // + // distributionButton + // + this.distributionButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.distributionButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.distributionButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.distributionButton.Name = "distributionButton"; + this.distributionButton.Size = new System.Drawing.Size(109, 56); + this.distributionButton.Text = "Distribution (CDN)"; + this.distributionButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.distributionButton.Click += new System.EventHandler(this.distributionButton_Click); + // + // s3Button + // + this.s3Button.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.s3Button.ImageTransparentColor = System.Drawing.Color.Magenta; + this.s3Button.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.s3Button.Name = "s3Button"; + this.s3Button.Size = new System.Drawing.Size(23, 56); + this.s3Button.Text = "S3"; + this.s3Button.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.s3Button.Click += new System.EventHandler(this.s3Button_Click); + // + // distributionLayoutPanel + // + this.distributionLayoutPanel.AutoSize = true; + this.distributionLayoutPanel.ColumnCount = 3; + this.distributionLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.distributionLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.distributionLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.distributionLayoutPanel.Controls.Add(this.label14, 0, 0); + this.distributionLayoutPanel.Controls.Add(this.label15, 0, 3); + this.distributionLayoutPanel.Controls.Add(this.label16, 0, 15); + this.distributionLayoutPanel.Controls.Add(this.label17, 0, 17); + this.distributionLayoutPanel.Controls.Add(this.deliveryMethodComboBox, 1, 0); + this.distributionLayoutPanel.Controls.Add(this.distributionEnableCheckBox, 1, 1); + this.distributionLayoutPanel.Controls.Add(this.distributionLoggingCheckBox, 1, 4); + this.distributionLayoutPanel.Controls.Add(this.statusLabel, 1, 3); + this.distributionLayoutPanel.Controls.Add(this.distributionCnameTextBox, 1, 17); + this.distributionLayoutPanel.Controls.Add(this.whereLinkLabel, 1, 15); + this.distributionLayoutPanel.Controls.Add(this.distributionAnimation, 2, 1); + this.distributionLayoutPanel.Controls.Add(this.cnameUrlLinkLabel, 1, 18); + this.distributionLayoutPanel.Controls.Add(this.label25, 0, 20); + this.distributionLayoutPanel.Controls.Add(this.defaultRootComboBox, 1, 20); + this.distributionLayoutPanel.Controls.Add(this.label13, 0, 21); + this.distributionLayoutPanel.Controls.Add(this.invalidationStatus, 1, 21); + this.distributionLayoutPanel.Controls.Add(this.label24, 1, 22); + this.distributionLayoutPanel.Controls.Add(this.invalidateButton, 1, 23); + this.distributionLayoutPanel.Controls.Add(this.label27, 0, 13); + this.distributionLayoutPanel.Controls.Add(this.originLinkLabel, 1, 13); + this.distributionLayoutPanel.Controls.Add(this.label28, 0, 4); + this.distributionLayoutPanel.Controls.Add(this.label29, 1, 5); + this.distributionLayoutPanel.Controls.Add(this.distributionLoggingComboBox, 1, 6); + this.distributionLayoutPanel.Controls.Add(this.label37, 0, 8); + this.distributionLayoutPanel.Controls.Add(this.distributionAnalyticsCheckBox, 1, 8); + this.distributionLayoutPanel.Controls.Add(this.distributionAnalyticsSetupUrlLinkLabel, 1, 9); + this.distributionLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.distributionLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.distributionLayoutPanel.Name = "distributionLayoutPanel"; + this.distributionLayoutPanel.Padding = new System.Windows.Forms.Padding(10); + this.distributionLayoutPanel.RowCount = 24; + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.distributionLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.distributionLayoutPanel.Size = new System.Drawing.Size(0, 0); + this.distributionLayoutPanel.TabIndex = 0; + // + // label14 + // + this.label14.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(13, 17); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(94, 15); + this.label14.TabIndex = 0; + this.label14.Text = "Delivery Method"; + this.label14.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label15 + // + this.label15.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(13, 76); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(39, 15); + this.label15.TabIndex = 1; + this.label15.Text = "Status"; + this.label15.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label16 + // + this.label16.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(13, 290); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(41, 15); + this.label16.TabIndex = 2; + this.label16.Text = "Where"; + this.label16.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label17 + // + this.label17.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(13, 322); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(49, 15); + this.label17.TabIndex = 3; + this.label17.Text = "CNAME"; + this.label17.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // deliveryMethodComboBox + // + this.deliveryMethodComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.distributionLayoutPanel.SetColumnSpan(this.deliveryMethodComboBox, 2); + this.deliveryMethodComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.deliveryMethodComboBox.FormattingEnabled = true; + this.deliveryMethodComboBox.Location = new System.Drawing.Point(113, 13); + this.deliveryMethodComboBox.Name = "deliveryMethodComboBox"; + this.deliveryMethodComboBox.Size = new System.Drawing.Size(1, 23); + this.deliveryMethodComboBox.TabIndex = 4; + this.deliveryMethodComboBox.SelectionChangeCommitted += new System.EventHandler(this.deliveryMethodComboBox_SelectionChangeCommitted); + // + // distributionEnableCheckBox + // + this.distributionEnableCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.distributionEnableCheckBox.AutoSize = true; + this.distributionEnableCheckBox.Location = new System.Drawing.Point(113, 42); + this.distributionEnableCheckBox.MinimumSize = new System.Drawing.Size(0, 21); + this.distributionEnableCheckBox.Name = "distributionEnableCheckBox"; + this.distributionEnableCheckBox.Size = new System.Drawing.Size(1, 21); + this.distributionEnableCheckBox.TabIndex = 5; + this.distributionEnableCheckBox.Text = "Enable Amazon CloudFront Distribution"; + this.distributionEnableCheckBox.UseVisualStyleBackColor = true; + this.distributionEnableCheckBox.CheckedChanged += new System.EventHandler(this.distributionEnableCheckBox_CheckedChanged); + // + // distributionLoggingCheckBox + // + this.distributionLoggingCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.distributionLoggingCheckBox.AutoSize = true; + this.distributionLayoutPanel.SetColumnSpan(this.distributionLoggingCheckBox, 2); + this.distributionLoggingCheckBox.Location = new System.Drawing.Point(113, 94); + this.distributionLoggingCheckBox.Name = "distributionLoggingCheckBox"; + this.distributionLoggingCheckBox.Size = new System.Drawing.Size(1, 19); + this.distributionLoggingCheckBox.TabIndex = 6; + this.distributionLoggingCheckBox.Text = "Distribution Access Logging"; + this.distributionLoggingCheckBox.UseVisualStyleBackColor = true; + this.distributionLoggingCheckBox.CheckedChanged += new System.EventHandler(this.distributionLoggingCheckBox_CheckedChanged); + // + // statusLabel + // + this.statusLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.statusLabel.AutoSize = true; + this.distributionLayoutPanel.SetColumnSpan(this.statusLabel, 2); + this.statusLabel.Location = new System.Drawing.Point(113, 76); + this.statusLabel.Name = "statusLabel"; + this.statusLabel.Size = new System.Drawing.Size(0, 15); + this.statusLabel.TabIndex = 7; + this.statusLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // distributionCnameTextBox + // + this.distributionCnameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.distributionLayoutPanel.SetColumnSpan(this.distributionCnameTextBox, 2); + this.distributionCnameTextBox.Location = new System.Drawing.Point(113, 318); + this.distributionCnameTextBox.Name = "distributionCnameTextBox"; + this.distributionCnameTextBox.Size = new System.Drawing.Size(1, 23); + this.distributionCnameTextBox.TabIndex = 9; + this.distributionCnameTextBox.Validated += new System.EventHandler(this.distributionCnameTextBox_Validated); + // + // whereLinkLabel + // + this.whereLinkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.whereLinkLabel.AutoSize = true; + this.distributionLayoutPanel.SetColumnSpan(this.whereLinkLabel, 2); + this.whereLinkLabel.Location = new System.Drawing.Point(113, 290); + this.whereLinkLabel.Name = "whereLinkLabel"; + this.whereLinkLabel.Size = new System.Drawing.Size(0, 15); + this.whereLinkLabel.TabIndex = 10; + this.whereLinkLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // distributionAnimation + // + this.distributionAnimation.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.distributionAnimation.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; + this.distributionAnimation.Location = new System.Drawing.Point(-22, 42); + this.distributionAnimation.Name = "distributionAnimation"; + this.distributionAnimation.Size = new System.Drawing.Size(30, 20); + this.distributionAnimation.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.distributionAnimation.TabIndex = 25; + this.distributionAnimation.TabStop = false; + this.distributionAnimation.Visible = false; + // + // cnameUrlLinkLabel + // + this.cnameUrlLinkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.cnameUrlLinkLabel.AutoSize = true; + this.cnameUrlLinkLabel.Location = new System.Drawing.Point(113, 344); + this.cnameUrlLinkLabel.Name = "cnameUrlLinkLabel"; + this.cnameUrlLinkLabel.Size = new System.Drawing.Size(0, 15); + this.cnameUrlLinkLabel.TabIndex = 26; + this.cnameUrlLinkLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label25 + // + this.label25.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label25.AutoSize = true; + this.label25.Location = new System.Drawing.Point(13, 376); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(56, 15); + this.label25.TabIndex = 27; + this.label25.Text = "Index File"; + // + // defaultRootComboBox + // + this.defaultRootComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.distributionLayoutPanel.SetColumnSpan(this.defaultRootComboBox, 2); + this.defaultRootComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.defaultRootComboBox.FormattingEnabled = true; + this.defaultRootComboBox.Location = new System.Drawing.Point(113, 372); + this.defaultRootComboBox.Name = "defaultRootComboBox"; + this.defaultRootComboBox.Size = new System.Drawing.Size(1, 23); + this.defaultRootComboBox.TabIndex = 28; + this.defaultRootComboBox.SelectionChangeCommitted += new System.EventHandler(this.defaultRootComboBox_SelectionChangeCommitted); + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(13, 398); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(69, 15); + this.label13.TabIndex = 29; + this.label13.Text = "Invalidation"; + // + // invalidationStatus + // + this.invalidationStatus.AutoSize = true; + this.distributionLayoutPanel.SetColumnSpan(this.invalidationStatus, 2); + this.invalidationStatus.Location = new System.Drawing.Point(113, 398); + this.invalidationStatus.Name = "invalidationStatus"; + this.invalidationStatus.Size = new System.Drawing.Size(0, 15); + this.invalidationStatus.TabIndex = 30; + // + // label24 + // + this.label24.AutoSize = true; + this.distributionLayoutPanel.SetColumnSpan(this.label24, 2); + this.label24.ForeColor = System.Drawing.SystemColors.GrayText; + this.label24.Location = new System.Drawing.Point(113, 413); + this.label24.Name = "label24"; + this.label24.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); + this.label24.Size = new System.Drawing.Size(1, 5); + this.label24.TabIndex = 31; + this.label24.Text = "Remove selected files from distribution cache."; + // + // invalidateButton + // + this.invalidateButton.AutoSize = true; + this.invalidateButton.Location = new System.Drawing.Point(113, 421); + this.invalidateButton.Name = "invalidateButton"; + this.invalidateButton.Size = new System.Drawing.Size(1, 27); + this.invalidateButton.TabIndex = 32; + this.invalidateButton.Text = "Invalidate"; + this.invalidateButton.UseVisualStyleBackColor = true; + this.invalidateButton.Click += new System.EventHandler(this.invalidateButton_Click); + // + // label27 + // + this.label27.AutoSize = true; + this.label27.Location = new System.Drawing.Point(13, 265); + this.label27.Name = "label27"; + this.label27.Size = new System.Drawing.Size(40, 15); + this.label27.TabIndex = 33; + this.label27.Text = "Origin"; + // + // originLinkLabel + // + this.originLinkLabel.AutoSize = true; + this.distributionLayoutPanel.SetColumnSpan(this.originLinkLabel, 2); + this.originLinkLabel.Location = new System.Drawing.Point(113, 265); + this.originLinkLabel.Name = "originLinkLabel"; + this.originLinkLabel.Size = new System.Drawing.Size(0, 15); + this.originLinkLabel.TabIndex = 34; + // + // label28 + // + this.label28.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.label28.AutoSize = true; + this.label28.Location = new System.Drawing.Point(13, 91); + this.label28.Name = "label28"; + this.label28.Size = new System.Drawing.Size(51, 25); + this.label28.TabIndex = 35; + this.label28.Text = "Logging"; + this.label28.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label29 + // + this.label29.AutoSize = true; + this.distributionLayoutPanel.SetColumnSpan(this.label29, 2); + this.label29.ForeColor = System.Drawing.SystemColors.GrayText; + this.label29.Location = new System.Drawing.Point(113, 116); + this.label29.Name = "label29"; + this.label29.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); + this.label29.Size = new System.Drawing.Size(1, 5); + this.label29.TabIndex = 36; + this.label29.Text = "Write access logs to selected container."; + // + // distributionLoggingComboBox + // + this.distributionLoggingComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.distributionLayoutPanel.SetColumnSpan(this.distributionLoggingComboBox, 2); + this.distributionLoggingComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.distributionLoggingComboBox.FormattingEnabled = true; + this.distributionLoggingComboBox.Location = new System.Drawing.Point(113, 124); + this.distributionLoggingComboBox.Name = "distributionLoggingComboBox"; + this.distributionLoggingComboBox.Size = new System.Drawing.Size(1, 23); + this.distributionLoggingComboBox.TabIndex = 37; + this.distributionLoggingComboBox.SelectionChangeCommitted += new System.EventHandler(this.distributionLoggingComboBox_SelectionChangeCommitted); + // + // label37 + // + this.label37.AutoSize = true; + this.label37.Location = new System.Drawing.Point(13, 170); + this.label37.Name = "label37"; + this.label37.Size = new System.Drawing.Size(55, 15); + this.label37.TabIndex = 38; + this.label37.Text = "Analytics"; + // + // distributionAnalyticsCheckBox + // + this.distributionAnalyticsCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.distributionAnalyticsCheckBox.AutoSize = true; + this.distributionLayoutPanel.SetColumnSpan(this.distributionAnalyticsCheckBox, 2); + this.distributionAnalyticsCheckBox.Location = new System.Drawing.Point(113, 173); + this.distributionAnalyticsCheckBox.Name = "distributionAnalyticsCheckBox"; + this.distributionAnalyticsCheckBox.Size = new System.Drawing.Size(1, 19); + this.distributionAnalyticsCheckBox.TabIndex = 39; + this.distributionAnalyticsCheckBox.Text = "Read Access for Qloudstat"; + this.distributionAnalyticsCheckBox.UseVisualStyleBackColor = true; + this.distributionAnalyticsCheckBox.CheckedChanged += new System.EventHandler(this.distributionAnalyticsCheckBox_CheckedChanged); + // + // distributionAnalyticsSetupUrlLinkLabel + // + this.distributionAnalyticsSetupUrlLinkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.distributionAnalyticsSetupUrlLinkLabel.AutoEllipsis = true; + this.distributionLayoutPanel.SetColumnSpan(this.distributionAnalyticsSetupUrlLinkLabel, 2); + this.distributionAnalyticsSetupUrlLinkLabel.Location = new System.Drawing.Point(113, 198); + this.distributionAnalyticsSetupUrlLinkLabel.Name = "distributionAnalyticsSetupUrlLinkLabel"; + this.distributionAnalyticsSetupUrlLinkLabel.Size = new System.Drawing.Size(1, 13); + this.distributionAnalyticsSetupUrlLinkLabel.TabIndex = 40; + this.distributionAnalyticsSetupUrlLinkLabel.TabStop = true; + this.distributionAnalyticsSetupUrlLinkLabel.Text = "linkLabel1"; + // + // generalLayoutPanel + // + this.generalLayoutPanel.AutoSize = true; + this.generalLayoutPanel.ColumnCount = 5; + this.generalLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 70F)); + this.generalLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.generalLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.generalLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 23F)); + this.generalLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.generalLayoutPanel.Controls.Add(this.icon, 0, 0); + this.generalLayoutPanel.Controls.Add(this.filenameTextbox, 1, 0); + this.generalLayoutPanel.Controls.Add(this.label1, 1, 1); + this.generalLayoutPanel.Controls.Add(this.label2, 1, 2); + this.generalLayoutPanel.Controls.Add(this.label3, 1, 3); + this.generalLayoutPanel.Controls.Add(this.label4, 1, 4); + this.generalLayoutPanel.Controls.Add(this.label5, 1, 5); + this.generalLayoutPanel.Controls.Add(this.label6, 1, 6); + this.generalLayoutPanel.Controls.Add(this.label7, 1, 7); + this.generalLayoutPanel.Controls.Add(this.label8, 1, 9); + this.generalLayoutPanel.Controls.Add(this.label9, 1, 10); + this.generalLayoutPanel.Controls.Add(this.sizeLabel, 2, 1); + this.generalLayoutPanel.Controls.Add(this.pathLabel, 2, 2); + this.generalLayoutPanel.Controls.Add(this.weburlLabel, 2, 3); + this.generalLayoutPanel.Controls.Add(this.kindLabel, 2, 4); + this.generalLayoutPanel.Controls.Add(this.permissionsLabel, 2, 5); + this.generalLayoutPanel.Controls.Add(this.ownerLabel, 2, 6); + this.generalLayoutPanel.Controls.Add(this.groupLabel, 2, 7); + this.generalLayoutPanel.Controls.Add(this.modifiedLabel, 2, 9); + this.generalLayoutPanel.Controls.Add(this.calculateButton, 4, 1); + this.generalLayoutPanel.Controls.Add(this.sizeAnimation, 3, 1); + this.generalLayoutPanel.Controls.Add(this.label22, 1, 8); + this.generalLayoutPanel.Controls.Add(this.createdLabel, 2, 8); + this.generalLayoutPanel.Controls.Add(this.checksumTextBox, 2, 10); + this.generalLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.generalLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.generalLayoutPanel.Name = "generalLayoutPanel"; + this.generalLayoutPanel.Padding = new System.Windows.Forms.Padding(10); + this.generalLayoutPanel.RowCount = 12; + this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F)); + this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.generalLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.generalLayoutPanel.Size = new System.Drawing.Size(0, 0); + this.generalLayoutPanel.TabIndex = 0; + // + // icon + // + this.icon.Location = new System.Drawing.Point(13, 13); + this.icon.Name = "icon"; + this.icon.Size = new System.Drawing.Size(63, 51); + this.icon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.icon.TabIndex = 0; + this.icon.TabStop = false; + // + // filenameTextbox + // + this.filenameTextbox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.generalLayoutPanel.SetColumnSpan(this.filenameTextbox, 4); + this.filenameTextbox.Location = new System.Drawing.Point(83, 27); + this.filenameTextbox.Name = "filenameTextbox"; + this.filenameTextbox.Size = new System.Drawing.Size(1, 23); + this.filenameTextbox.TabIndex = 1; + this.filenameTextbox.Validated += new System.EventHandler(this.filenameTextbox_Validated); + // + // label1 + // + this.label1.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(83, 70); + this.label1.MinimumSize = new System.Drawing.Size(0, 21); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(27, 21); + this.label1.TabIndex = 2; + this.label1.Text = "Size"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label2 + // + this.label2.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(83, 96); + this.label2.MinimumSize = new System.Drawing.Size(0, 21); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(41, 21); + this.label2.TabIndex = 3; + this.label2.Text = "Where"; + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label3 + // + this.label3.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(83, 119); + this.label3.MinimumSize = new System.Drawing.Size(0, 21); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(55, 21); + this.label3.TabIndex = 4; + this.label3.Text = "Web URL"; + this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label4 + // + this.label4.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(83, 142); + this.label4.MinimumSize = new System.Drawing.Size(0, 21); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(31, 21); + this.label4.TabIndex = 5; + this.label4.Text = "Kind"; + this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label5 + // + this.label5.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(83, 165); + this.label5.MinimumSize = new System.Drawing.Size(0, 21); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(70, 21); + this.label5.TabIndex = 6; + this.label5.Text = "Permissions"; + this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label6 + // + this.label6.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(83, 188); + this.label6.MinimumSize = new System.Drawing.Size(0, 21); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(42, 21); + this.label6.TabIndex = 7; + this.label6.Text = "Owner"; + this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label7 + // + this.label7.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(83, 211); + this.label7.MinimumSize = new System.Drawing.Size(0, 21); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(40, 21); + this.label7.TabIndex = 8; + this.label7.Text = "Group"; + this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label8 + // + this.label8.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(83, 257); + this.label8.MinimumSize = new System.Drawing.Size(0, 21); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(55, 21); + this.label8.TabIndex = 9; + this.label8.Text = "Modified"; + this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label9 + // + this.label9.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(83, 279); + this.label9.MinimumSize = new System.Drawing.Size(0, 21); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(63, 21); + this.label9.TabIndex = 10; + this.label9.Text = "Checksum"; + this.label9.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // sizeLabel + // + this.sizeLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.sizeLabel.AutoEllipsis = true; + this.sizeLabel.AutoSize = true; + this.sizeLabel.Location = new System.Drawing.Point(159, 69); + this.sizeLabel.MinimumSize = new System.Drawing.Size(0, 23); + this.sizeLabel.Name = "sizeLabel"; + this.sizeLabel.Size = new System.Drawing.Size(1, 23); + this.sizeLabel.TabIndex = 11; + this.sizeLabel.Text = "ellipsisLabel1"; + this.sizeLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // pathLabel + // + this.pathLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.pathLabel.AutoEllipsis = true; + this.pathLabel.AutoSize = true; + this.generalLayoutPanel.SetColumnSpan(this.pathLabel, 2); + this.pathLabel.Location = new System.Drawing.Point(159, 95); + this.pathLabel.MinimumSize = new System.Drawing.Size(0, 23); + this.pathLabel.Name = "pathLabel"; + this.pathLabel.Size = new System.Drawing.Size(1, 23); + this.pathLabel.TabIndex = 12; + this.pathLabel.Text = "ellipsisLabel2"; + this.pathLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // weburlLabel + // + this.weburlLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.weburlLabel.AutoEllipsis = true; + this.weburlLabel.AutoSize = true; + this.generalLayoutPanel.SetColumnSpan(this.weburlLabel, 3); + this.weburlLabel.Location = new System.Drawing.Point(159, 118); + this.weburlLabel.MinimumSize = new System.Drawing.Size(0, 23); + this.weburlLabel.Name = "weburlLabel"; + this.weburlLabel.Size = new System.Drawing.Size(1, 23); + this.weburlLabel.TabIndex = 13; + this.weburlLabel.TabStop = true; + this.weburlLabel.Text = "linkLabel1"; + this.weburlLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kindLabel + // + this.kindLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.kindLabel.AutoEllipsis = true; + this.kindLabel.AutoSize = true; + this.generalLayoutPanel.SetColumnSpan(this.kindLabel, 3); + this.kindLabel.Location = new System.Drawing.Point(159, 141); + this.kindLabel.MinimumSize = new System.Drawing.Size(0, 23); + this.kindLabel.Name = "kindLabel"; + this.kindLabel.Size = new System.Drawing.Size(1, 23); + this.kindLabel.TabIndex = 14; + this.kindLabel.Text = "ellipsisLabel3"; + this.kindLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // permissionsLabel + // + this.permissionsLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.permissionsLabel.AutoEllipsis = true; + this.permissionsLabel.AutoSize = true; + this.generalLayoutPanel.SetColumnSpan(this.permissionsLabel, 3); + this.permissionsLabel.Location = new System.Drawing.Point(159, 164); + this.permissionsLabel.MinimumSize = new System.Drawing.Size(0, 23); + this.permissionsLabel.Name = "permissionsLabel"; + this.permissionsLabel.Size = new System.Drawing.Size(1, 23); + this.permissionsLabel.TabIndex = 15; + this.permissionsLabel.Text = "ellipsisLabel4"; + this.permissionsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ownerLabel + // + this.ownerLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.ownerLabel.AutoEllipsis = true; + this.ownerLabel.AutoSize = true; + this.generalLayoutPanel.SetColumnSpan(this.ownerLabel, 3); + this.ownerLabel.Location = new System.Drawing.Point(159, 187); + this.ownerLabel.MinimumSize = new System.Drawing.Size(0, 23); + this.ownerLabel.Name = "ownerLabel"; + this.ownerLabel.Size = new System.Drawing.Size(1, 23); + this.ownerLabel.TabIndex = 16; + this.ownerLabel.Text = "ellipsisLabel5"; + this.ownerLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // groupLabel + // + this.groupLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.groupLabel.AutoEllipsis = true; + this.groupLabel.AutoSize = true; + this.generalLayoutPanel.SetColumnSpan(this.groupLabel, 3); + this.groupLabel.Location = new System.Drawing.Point(159, 210); + this.groupLabel.MinimumSize = new System.Drawing.Size(0, 23); + this.groupLabel.Name = "groupLabel"; + this.groupLabel.Size = new System.Drawing.Size(1, 23); + this.groupLabel.TabIndex = 17; + this.groupLabel.Text = "ellipsisLabel6"; + this.groupLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // modifiedLabel + // + this.modifiedLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.modifiedLabel.AutoEllipsis = true; + this.modifiedLabel.AutoSize = true; + this.generalLayoutPanel.SetColumnSpan(this.modifiedLabel, 3); + this.modifiedLabel.Location = new System.Drawing.Point(159, 256); + this.modifiedLabel.MinimumSize = new System.Drawing.Size(0, 23); + this.modifiedLabel.Name = "modifiedLabel"; + this.modifiedLabel.Size = new System.Drawing.Size(1, 23); + this.modifiedLabel.TabIndex = 19; + this.modifiedLabel.Text = "ellipsisLabel8"; + this.modifiedLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // calculateButton + // + this.calculateButton.AutoSize = true; + this.calculateButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.calculateButton.Location = new System.Drawing.Point(-58, 70); + this.calculateButton.Name = "calculateButton"; + this.generalLayoutPanel.SetRowSpan(this.calculateButton, 2); + this.calculateButton.Size = new System.Drawing.Size(66, 25); + this.calculateButton.TabIndex = 21; + this.calculateButton.Text = "Calculate"; + this.calculateButton.UseVisualStyleBackColor = true; + this.calculateButton.Click += new System.EventHandler(this.calculateButton_Click); + // + // sizeAnimation + // + this.sizeAnimation.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.sizeAnimation.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; + this.sizeAnimation.Location = new System.Drawing.Point(-81, 70); + this.sizeAnimation.Name = "sizeAnimation"; + this.sizeAnimation.Size = new System.Drawing.Size(17, 21); + this.sizeAnimation.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.sizeAnimation.TabIndex = 22; + this.sizeAnimation.TabStop = false; + this.sizeAnimation.Visible = false; + // + // label22 + // + this.label22.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label22.AutoSize = true; + this.label22.Location = new System.Drawing.Point(83, 234); + this.label22.MinimumSize = new System.Drawing.Size(0, 21); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(48, 21); + this.label22.TabIndex = 23; + this.label22.Text = "Created"; + this.label22.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // createdLabel + // + this.createdLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.createdLabel.AutoEllipsis = true; + this.createdLabel.AutoSize = true; + this.generalLayoutPanel.SetColumnSpan(this.createdLabel, 3); + this.createdLabel.Location = new System.Drawing.Point(159, 233); + this.createdLabel.MinimumSize = new System.Drawing.Size(0, 23); + this.createdLabel.Name = "createdLabel"; + this.createdLabel.Size = new System.Drawing.Size(1, 23); + this.createdLabel.TabIndex = 24; + this.createdLabel.Text = "ellipsisLabel8"; + this.createdLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // checksumTextBox + // + this.checksumTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.checksumTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.generalLayoutPanel.SetColumnSpan(this.checksumTextBox, 3); + this.checksumTextBox.Location = new System.Drawing.Point(162, 282); + this.checksumTextBox.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3); + this.checksumTextBox.Name = "checksumTextBox"; + this.checksumTextBox.ReadOnly = true; + this.checksumTextBox.Size = new System.Drawing.Size(1, 16); + this.checksumTextBox.TabIndex = 25; + this.checksumTextBox.TabStop = false; + // + // s3LayoutPanel + // + this.s3LayoutPanel.ColumnCount = 4; + this.s3LayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.s3LayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.s3LayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.s3LayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 37F)); + this.s3LayoutPanel.Controls.Add(this.s3Animation, 3, 0); + this.s3LayoutPanel.Controls.Add(this.label18, 0, 0); + this.s3LayoutPanel.Controls.Add(this.label19, 0, 6); + this.s3LayoutPanel.Controls.Add(this.label20, 0, 9); + this.s3LayoutPanel.Controls.Add(this.bucketLocationLabel, 2, 0); + this.s3LayoutPanel.Controls.Add(this.s3PublicUrlLinkLabel, 2, 6); + this.s3LayoutPanel.Controls.Add(this.s3TorrentUrlLinkLabel, 2, 9); + this.s3LayoutPanel.Controls.Add(this.label26, 0, 2); + this.s3LayoutPanel.Controls.Add(this.s3PublicUrlValidityLabel, 2, 7); + this.s3LayoutPanel.Controls.Add(this.storageClassComboBox, 2, 2); + this.s3LayoutPanel.Controls.Add(this.bucketLoggingCheckBox, 2, 11); + this.s3LayoutPanel.Controls.Add(this.bucketVersioningCheckBox, 2, 19); + this.s3LayoutPanel.Controls.Add(this.label21, 2, 20); + this.s3LayoutPanel.Controls.Add(this.bucketMfaCheckBox, 2, 22); + this.s3LayoutPanel.Controls.Add(this.label31, 0, 11); + this.s3LayoutPanel.Controls.Add(this.label32, 0, 19); + this.s3LayoutPanel.Controls.Add(this.label33, 2, 12); + this.s3LayoutPanel.Controls.Add(this.bucketLoggingComboBox, 2, 13); + this.s3LayoutPanel.Controls.Add(this.label34, 0, 4); + this.s3LayoutPanel.Controls.Add(this.encryptionCheckBox, 2, 4); + this.s3LayoutPanel.Controls.Add(this.label35, 0, 15); + this.s3LayoutPanel.Controls.Add(this.bucketAnalyticsCheckBox, 2, 15); + this.s3LayoutPanel.Controls.Add(this.bucketAnalyticsSetupUrlLinkLabel, 2, 16); + this.s3LayoutPanel.Controls.Add(this.label36, 2, 17); + this.s3LayoutPanel.Controls.Add(this.lifecycleTransitionCheckBox, 2, 24); + this.s3LayoutPanel.Controls.Add(this.label38, 0, 24); + this.s3LayoutPanel.Controls.Add(this.lifecycleTransitionComboBox, 2, 25); + this.s3LayoutPanel.Controls.Add(this.lifecycleDeleteCheckBox, 2, 26); + this.s3LayoutPanel.Controls.Add(this.lifecycleDeleteComboBox, 2, 27); + this.s3LayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.s3LayoutPanel.Location = new System.Drawing.Point(0, 0); + this.s3LayoutPanel.Name = "s3LayoutPanel"; + this.s3LayoutPanel.Padding = new System.Windows.Forms.Padding(10); + this.s3LayoutPanel.RowCount = 29; + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 5F)); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 10F)); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); + this.s3LayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.s3LayoutPanel.Size = new System.Drawing.Size(500, 548); + this.s3LayoutPanel.TabIndex = 0; + // + // s3Animation + // + this.s3Animation.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.s3Animation.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; + this.s3Animation.Location = new System.Drawing.Point(463, 13); + this.s3Animation.Name = "s3Animation"; + this.s3Animation.Size = new System.Drawing.Size(24, 18); + this.s3Animation.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.s3Animation.TabIndex = 24; + this.s3Animation.TabStop = false; + this.s3Animation.Visible = false; + // + // label18 + // + this.label18.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label18.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.label18, 2); + this.label18.Location = new System.Drawing.Point(13, 10); + this.label18.MinimumSize = new System.Drawing.Size(0, 25); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(53, 25); + this.label18.TabIndex = 0; + this.label18.Text = "Location"; + this.label18.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label19 + // + this.label19.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label19.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.label19, 2); + this.label19.Location = new System.Drawing.Point(13, 114); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(67, 15); + this.label19.TabIndex = 1; + this.label19.Text = "Signed URL"; + this.label19.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label20 + // + this.label20.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label20.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.label20, 2); + this.label20.Location = new System.Drawing.Point(13, 154); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(70, 15); + this.label20.TabIndex = 2; + this.label20.Text = "Torrent URL"; + this.label20.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // bucketLocationLabel + // + this.bucketLocationLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.bucketLocationLabel.AutoSize = true; + this.bucketLocationLabel.Location = new System.Drawing.Point(96, 10); + this.bucketLocationLabel.MinimumSize = new System.Drawing.Size(0, 25); + this.bucketLocationLabel.Name = "bucketLocationLabel"; + this.bucketLocationLabel.Size = new System.Drawing.Size(44, 25); + this.bucketLocationLabel.TabIndex = 5; + this.bucketLocationLabel.Text = "label22"; + this.bucketLocationLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // s3PublicUrlLinkLabel + // + this.s3PublicUrlLinkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.s3PublicUrlLinkLabel.AutoEllipsis = true; + this.s3LayoutPanel.SetColumnSpan(this.s3PublicUrlLinkLabel, 2); + this.s3PublicUrlLinkLabel.Location = new System.Drawing.Point(96, 115); + this.s3PublicUrlLinkLabel.Name = "s3PublicUrlLinkLabel"; + this.s3PublicUrlLinkLabel.Size = new System.Drawing.Size(391, 13); + this.s3PublicUrlLinkLabel.TabIndex = 6; + this.s3PublicUrlLinkLabel.TabStop = true; + this.s3PublicUrlLinkLabel.Text = "linkLabel1"; + this.s3PublicUrlLinkLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // s3TorrentUrlLinkLabel + // + this.s3TorrentUrlLinkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.s3TorrentUrlLinkLabel.AutoEllipsis = true; + this.s3LayoutPanel.SetColumnSpan(this.s3TorrentUrlLinkLabel, 2); + this.s3TorrentUrlLinkLabel.Location = new System.Drawing.Point(96, 155); + this.s3TorrentUrlLinkLabel.Name = "s3TorrentUrlLinkLabel"; + this.s3TorrentUrlLinkLabel.Size = new System.Drawing.Size(391, 13); + this.s3TorrentUrlLinkLabel.TabIndex = 7; + this.s3TorrentUrlLinkLabel.TabStop = true; + this.s3TorrentUrlLinkLabel.Text = "linkLabel2"; + this.s3TorrentUrlLinkLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label26 + // + this.label26.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label26.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.label26, 2); + this.label26.Location = new System.Drawing.Point(13, 47); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(77, 15); + this.label26.TabIndex = 25; + this.label26.Text = "Storage Class"; + // + // s3PublicUrlValidityLabel + // + this.s3PublicUrlValidityLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.s3PublicUrlValidityLabel.AutoSize = true; + this.s3PublicUrlValidityLabel.Location = new System.Drawing.Point(96, 129); + this.s3PublicUrlValidityLabel.Name = "s3PublicUrlValidityLabel"; + this.s3PublicUrlValidityLabel.Size = new System.Drawing.Size(44, 15); + this.s3PublicUrlValidityLabel.TabIndex = 26; + this.s3PublicUrlValidityLabel.Text = "label27"; + // + // storageClassComboBox + // + this.storageClassComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.s3LayoutPanel.SetColumnSpan(this.storageClassComboBox, 2); + this.storageClassComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.storageClassComboBox.FormattingEnabled = true; + this.storageClassComboBox.Location = new System.Drawing.Point(96, 43); + this.storageClassComboBox.Name = "storageClassComboBox"; + this.storageClassComboBox.Size = new System.Drawing.Size(391, 23); + this.storageClassComboBox.TabIndex = 30; + this.storageClassComboBox.SelectionChangeCommitted += new System.EventHandler(this.storageClassComboBox_SelectionChangeCommitted); + // + // bucketLoggingCheckBox + // + this.bucketLoggingCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.bucketLoggingCheckBox.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.bucketLoggingCheckBox, 2); + this.bucketLoggingCheckBox.Location = new System.Drawing.Point(96, 182); + this.bucketLoggingCheckBox.Name = "bucketLoggingCheckBox"; + this.bucketLoggingCheckBox.Size = new System.Drawing.Size(148, 19); + this.bucketLoggingCheckBox.TabIndex = 4; + this.bucketLoggingCheckBox.Text = "Bucket Access Logging"; + this.bucketLoggingCheckBox.UseVisualStyleBackColor = true; + this.bucketLoggingCheckBox.CheckedChanged += new System.EventHandler(this.bucketLoggingCheckBox_CheckedChanged); + // + // bucketVersioningCheckBox + // + this.bucketVersioningCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.bucketVersioningCheckBox.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.bucketVersioningCheckBox, 2); + this.bucketVersioningCheckBox.Location = new System.Drawing.Point(96, 334); + this.bucketVersioningCheckBox.Name = "bucketVersioningCheckBox"; + this.bucketVersioningCheckBox.Size = new System.Drawing.Size(121, 19); + this.bucketVersioningCheckBox.TabIndex = 27; + this.bucketVersioningCheckBox.Text = "Bucket Versioning"; + this.bucketVersioningCheckBox.UseVisualStyleBackColor = true; + this.bucketVersioningCheckBox.CheckedChanged += new System.EventHandler(this.bucketVersioningCheckBox_CheckedChanged); + // + // label21 + // + this.label21.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label21.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.label21, 2); + this.label21.ForeColor = System.Drawing.SystemColors.GrayText; + this.label21.Location = new System.Drawing.Point(96, 356); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(373, 30); + this.label21.TabIndex = 28; + this.label21.Text = "You can view all revisions of a file in the browser by choosing View → Show Hidde" + + "n Files."; + // + // bucketMfaCheckBox + // + this.bucketMfaCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.bucketMfaCheckBox.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.bucketMfaCheckBox, 2); + this.bucketMfaCheckBox.Location = new System.Drawing.Point(96, 399); + this.bucketMfaCheckBox.Name = "bucketMfaCheckBox"; + this.bucketMfaCheckBox.Size = new System.Drawing.Size(246, 19); + this.bucketMfaCheckBox.TabIndex = 29; + this.bucketMfaCheckBox.Text = "Multi-Factor Authentication (MFA) Delete"; + this.bucketMfaCheckBox.UseVisualStyleBackColor = true; + this.bucketMfaCheckBox.CheckedChanged += new System.EventHandler(this.bucketMfaCheckBox_CheckedChanged); + // + // label31 + // + this.label31.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label31.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.label31, 2); + this.label31.Location = new System.Drawing.Point(13, 184); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(51, 15); + this.label31.TabIndex = 31; + this.label31.Text = "Logging"; + this.label31.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label32 + // + this.label32.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label32.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.label32, 2); + this.label32.Location = new System.Drawing.Point(13, 336); + this.label32.Name = "label32"; + this.label32.Size = new System.Drawing.Size(63, 15); + this.label32.TabIndex = 32; + this.label32.Text = "Versioning"; + this.label32.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label33 + // + this.label33.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.label33, 2); + this.label33.ForeColor = System.Drawing.SystemColors.GrayText; + this.label33.Location = new System.Drawing.Point(96, 204); + this.label33.Name = "label33"; + this.label33.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); + this.label33.Size = new System.Drawing.Size(213, 20); + this.label33.TabIndex = 37; + this.label33.Text = "Write access logs to selected container."; + // + // bucketLoggingComboBox + // + this.bucketLoggingComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.s3LayoutPanel.SetColumnSpan(this.bucketLoggingComboBox, 2); + this.bucketLoggingComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.bucketLoggingComboBox.FormattingEnabled = true; + this.bucketLoggingComboBox.Location = new System.Drawing.Point(96, 227); + this.bucketLoggingComboBox.Name = "bucketLoggingComboBox"; + this.bucketLoggingComboBox.Size = new System.Drawing.Size(391, 23); + this.bucketLoggingComboBox.TabIndex = 38; + this.bucketLoggingComboBox.SelectionChangeCommitted += new System.EventHandler(this.bucketLoggingComboBox_SelectionChangeCommitted); + // + // label34 + // + this.label34.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label34.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.label34, 2); + this.label34.Location = new System.Drawing.Point(13, 84); + this.label34.Name = "label34"; + this.label34.Size = new System.Drawing.Size(64, 15); + this.label34.TabIndex = 39; + this.label34.Text = "Encryption"; + this.label34.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // encryptionCheckBox + // + this.encryptionCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.encryptionCheckBox.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.encryptionCheckBox, 2); + this.encryptionCheckBox.Location = new System.Drawing.Point(96, 82); + this.encryptionCheckBox.Name = "encryptionCheckBox"; + this.encryptionCheckBox.Size = new System.Drawing.Size(143, 19); + this.encryptionCheckBox.TabIndex = 31; + this.encryptionCheckBox.Text = "Server Side Encryption"; + this.encryptionCheckBox.UseVisualStyleBackColor = true; + this.encryptionCheckBox.CheckedChanged += new System.EventHandler(this.encryptionCheckBox_CheckedChanged); + // + // label35 + // + this.label35.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label35.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.label35, 2); + this.label35.Location = new System.Drawing.Point(13, 268); + this.label35.Name = "label35"; + this.label35.Size = new System.Drawing.Size(55, 15); + this.label35.TabIndex = 40; + this.label35.Text = "Analytics"; + this.label35.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // bucketAnalyticsCheckBox + // + this.bucketAnalyticsCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.bucketAnalyticsCheckBox.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.bucketAnalyticsCheckBox, 2); + this.bucketAnalyticsCheckBox.Location = new System.Drawing.Point(96, 266); + this.bucketAnalyticsCheckBox.Name = "bucketAnalyticsCheckBox"; + this.bucketAnalyticsCheckBox.Size = new System.Drawing.Size(164, 19); + this.bucketAnalyticsCheckBox.TabIndex = 41; + this.bucketAnalyticsCheckBox.Text = "Read Access for Qloudstat"; + this.bucketAnalyticsCheckBox.UseVisualStyleBackColor = true; + this.bucketAnalyticsCheckBox.CheckedChanged += new System.EventHandler(this.bucketAnalyticsCheckBox_CheckedChanged); + // + // bucketAnalyticsSetupUrlLinkLabel + // + this.bucketAnalyticsSetupUrlLinkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.bucketAnalyticsSetupUrlLinkLabel.AutoEllipsis = true; + this.s3LayoutPanel.SetColumnSpan(this.bucketAnalyticsSetupUrlLinkLabel, 2); + this.bucketAnalyticsSetupUrlLinkLabel.Location = new System.Drawing.Point(96, 288); + this.bucketAnalyticsSetupUrlLinkLabel.Margin = new System.Windows.Forms.Padding(3, 0, 3, 5); + this.bucketAnalyticsSetupUrlLinkLabel.Name = "bucketAnalyticsSetupUrlLinkLabel"; + this.bucketAnalyticsSetupUrlLinkLabel.Size = new System.Drawing.Size(391, 13); + this.bucketAnalyticsSetupUrlLinkLabel.TabIndex = 42; + this.bucketAnalyticsSetupUrlLinkLabel.TabStop = true; + this.bucketAnalyticsSetupUrlLinkLabel.Text = "linkLabel2"; + this.bucketAnalyticsSetupUrlLinkLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label36 + // + this.label36.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label36.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.label36, 2); + this.label36.ForeColor = System.Drawing.SystemColors.GrayText; + this.label36.Location = new System.Drawing.Point(96, 306); + this.label36.Name = "label36"; + this.label36.Size = new System.Drawing.Size(279, 15); + this.label36.TabIndex = 43; + this.label36.Text = "Open the URL to setup log analytics with Qloudstat."; + // + // lifecycleTransitionCheckBox + // + this.lifecycleTransitionCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lifecycleTransitionCheckBox.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.lifecycleTransitionCheckBox, 2); + this.lifecycleTransitionCheckBox.Location = new System.Drawing.Point(96, 434); + this.lifecycleTransitionCheckBox.Name = "lifecycleTransitionCheckBox"; + this.lifecycleTransitionCheckBox.Size = new System.Drawing.Size(132, 19); + this.lifecycleTransitionCheckBox.TabIndex = 45; + this.lifecycleTransitionCheckBox.Text = "Transition to Glacier"; + this.lifecycleTransitionCheckBox.UseVisualStyleBackColor = true; + this.lifecycleTransitionCheckBox.CheckedChanged += new System.EventHandler(this.lifecycleTransitionCheckBox_CheckedChanged); + // + // label38 + // + this.label38.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label38.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.label38, 2); + this.label38.Location = new System.Drawing.Point(13, 436); + this.label38.Name = "label38"; + this.label38.Size = new System.Drawing.Size(53, 15); + this.label38.TabIndex = 44; + this.label38.Text = "Lifecycle"; + this.label38.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lifecycleTransitionComboBox + // + this.lifecycleTransitionComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.s3LayoutPanel.SetColumnSpan(this.lifecycleTransitionComboBox, 2); + this.lifecycleTransitionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.lifecycleTransitionComboBox.FormattingEnabled = true; + this.lifecycleTransitionComboBox.Location = new System.Drawing.Point(96, 459); + this.lifecycleTransitionComboBox.Name = "lifecycleTransitionComboBox"; + this.lifecycleTransitionComboBox.Size = new System.Drawing.Size(391, 23); + this.lifecycleTransitionComboBox.TabIndex = 46; + this.lifecycleTransitionComboBox.SelectionChangeCommitted += new System.EventHandler(this.lifecycleTransitionComboBox_SelectionChangeCommitted); + // + // lifecycleDeleteCheckBox + // + this.lifecycleDeleteCheckBox.AutoSize = true; + this.s3LayoutPanel.SetColumnSpan(this.lifecycleDeleteCheckBox, 2); + this.lifecycleDeleteCheckBox.Location = new System.Drawing.Point(96, 488); + this.lifecycleDeleteCheckBox.Name = "lifecycleDeleteCheckBox"; + this.lifecycleDeleteCheckBox.Size = new System.Drawing.Size(83, 19); + this.lifecycleDeleteCheckBox.TabIndex = 47; + this.lifecycleDeleteCheckBox.Text = "Delete files"; + this.lifecycleDeleteCheckBox.UseVisualStyleBackColor = true; + this.lifecycleDeleteCheckBox.CheckedChanged += new System.EventHandler(this.lifecycleDeleteCheckBox_CheckedChanged); + // + // lifecycleDeleteComboBox + // + this.lifecycleDeleteComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.s3LayoutPanel.SetColumnSpan(this.lifecycleDeleteComboBox, 2); + this.lifecycleDeleteComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.lifecycleDeleteComboBox.FormattingEnabled = true; + this.lifecycleDeleteComboBox.Location = new System.Drawing.Point(96, 513); + this.lifecycleDeleteComboBox.Name = "lifecycleDeleteComboBox"; + this.lifecycleDeleteComboBox.Size = new System.Drawing.Size(391, 23); + this.lifecycleDeleteComboBox.TabIndex = 48; + this.lifecycleDeleteComboBox.SelectionChangeCommitted += new System.EventHandler(this.lifecycleDeleteComboBox_SelectionChangeCommitted); + // + // panelManager + // + this.panelManager.Controls.Add(this.managedDistributionPanel); + this.panelManager.Controls.Add(this.managedGeneralPanel); + this.panelManager.Controls.Add(this.managedMetadataPanel); + this.panelManager.Controls.Add(this.managedPermissionsPanel); + this.panelManager.Controls.Add(this.managedS3Panel); + this.panelManager.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelManager.Location = new System.Drawing.Point(0, 56); + this.panelManager.Name = "panelManager"; + this.panelManager.SelectedIndex = 4; + this.panelManager.SelectedPanel = this.managedS3Panel; + this.panelManager.Size = new System.Drawing.Size(500, 548); + this.panelManager.TabIndex = 2; + // + // managedDistributionPanel + // + this.managedDistributionPanel.Controls.Add(this.distributionLayoutPanel); + this.managedDistributionPanel.Location = new System.Drawing.Point(0, 0); + this.managedDistributionPanel.Name = "managedDistributionPanel"; + this.managedDistributionPanel.Size = new System.Drawing.Size(0, 0); + this.managedDistributionPanel.Text = "managedPanel1"; + // + // managedGeneralPanel + // + this.managedGeneralPanel.Controls.Add(this.generalLayoutPanel); + this.managedGeneralPanel.Location = new System.Drawing.Point(0, 0); + this.managedGeneralPanel.Name = "managedGeneralPanel"; + this.managedGeneralPanel.Size = new System.Drawing.Size(0, 0); + this.managedGeneralPanel.Text = "managedPanel1"; + // + // managedMetadataPanel + // + this.managedMetadataPanel.Controls.Add(this.metadataTableLayoutPanel); + this.managedMetadataPanel.Location = new System.Drawing.Point(0, 0); + this.managedMetadataPanel.Name = "managedMetadataPanel"; + this.managedMetadataPanel.Size = new System.Drawing.Size(0, 0); + this.managedMetadataPanel.Text = "managedPanel1"; + // + // metadataTableLayoutPanel + // + this.metadataTableLayoutPanel.ColumnCount = 4; + this.metadataTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 140F)); + this.metadataTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33332F)); + this.metadataTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); + this.metadataTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); + this.metadataTableLayoutPanel.Controls.Add(this.label30, 0, 0); + this.metadataTableLayoutPanel.Controls.Add(this.metadataDataGridView, 0, 2); + this.metadataTableLayoutPanel.Controls.Add(this.addHeaderButton, 0, 3); + this.metadataTableLayoutPanel.Controls.Add(this.metadataAnimation, 3, 0); + this.metadataTableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.metadataTableLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.metadataTableLayoutPanel.Name = "metadataTableLayoutPanel"; + this.metadataTableLayoutPanel.Padding = new System.Windows.Forms.Padding(10); + this.metadataTableLayoutPanel.RowCount = 4; + this.metadataTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F)); + this.metadataTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.metadataTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.metadataTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.metadataTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.metadataTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.metadataTableLayoutPanel.Size = new System.Drawing.Size(0, 0); + this.metadataTableLayoutPanel.TabIndex = 1; + // + // label30 + // + this.label30.AutoSize = true; + this.metadataTableLayoutPanel.SetColumnSpan(this.label30, 3); + this.label30.Location = new System.Drawing.Point(13, 10); + this.label30.Name = "label30"; + this.label30.Padding = new System.Windows.Forms.Padding(0, 10, 0, 0); + this.label30.Size = new System.Drawing.Size(41, 25); + this.label30.TabIndex = 27; + this.label30.Text = "Headers"; + // + // metadataDataGridView + // + this.metadataDataGridView.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.metadataDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.metadataTableLayoutPanel.SetColumnSpan(this.metadataDataGridView, 4); + this.metadataDataGridView.Dock = System.Windows.Forms.DockStyle.Fill; + this.metadataDataGridView.Location = new System.Drawing.Point(13, 38); + this.metadataDataGridView.Name = "metadataDataGridView"; + this.metadataDataGridView.Size = new System.Drawing.Size(1, 1); + this.metadataDataGridView.TabIndex = 29; + // + // addHeaderButton + // + this.addHeaderButton.AutoSize = true; + this.addHeaderButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.addHeaderButton.ContextMenuStrip = this.addMetadataContextMenuStrip; + this.addHeaderButton.Image = global::Ch.Cyberduck.ResourcesBundle.gear; + this.addHeaderButton.Location = new System.Drawing.Point(13, -16); + this.addHeaderButton.Name = "addHeaderButton"; + this.addHeaderButton.Size = new System.Drawing.Size(38, 24); + this.addHeaderButton.SplitMenuStrip = this.addMetadataContextMenuStrip; + this.addHeaderButton.TabIndex = 30; + this.addHeaderButton.UseVisualStyleBackColor = true; + // + // addMetadataContextMenuStrip + // + this.addMetadataContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItem1, + this.toolStripMenuItem2, + this.toolStripSeparator2, + this.toolStripMenuItem3}); + this.addMetadataContextMenuStrip.Name = "contextMenuStrip1"; + this.addMetadataContextMenuStrip.Size = new System.Drawing.Size(165, 76); + this.addMetadataContextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.addMetadataContextMenuStrip_Opening); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(164, 22); + this.toolStripMenuItem1.Text = "yves (Owner)"; + // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Size = new System.Drawing.Size(164, 22); + this.toolStripMenuItem2.Text = "Canoncal User ID"; + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(161, 6); + // + // toolStripMenuItem3 + // + this.toolStripMenuItem3.Name = "toolStripMenuItem3"; + this.toolStripMenuItem3.Size = new System.Drawing.Size(164, 22); + this.toolStripMenuItem3.Text = "Remove"; + // + // metadataAnimation + // + this.metadataAnimation.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.metadataAnimation.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; + this.metadataAnimation.Location = new System.Drawing.Point(61, 13); + this.metadataAnimation.Name = "metadataAnimation"; + this.metadataAnimation.Size = new System.Drawing.Size(1, 18); + this.metadataAnimation.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.metadataAnimation.TabIndex = 31; + this.metadataAnimation.TabStop = false; + this.metadataAnimation.Visible = false; + // + // managedPermissionsPanel + // + this.managedPermissionsPanel.Controls.Add(this.panelManagerPermissions); + this.managedPermissionsPanel.Location = new System.Drawing.Point(0, 0); + this.managedPermissionsPanel.Name = "managedPermissionsPanel"; + this.managedPermissionsPanel.Size = new System.Drawing.Size(0, 0); + this.managedPermissionsPanel.Text = "managedPanel2"; + // + // panelManagerPermissions + // + this.panelManagerPermissions.Controls.Add(this.nonCloudManagedPanel); + this.panelManagerPermissions.Controls.Add(this.cloudManagedPanel); + this.panelManagerPermissions.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelManagerPermissions.Location = new System.Drawing.Point(0, 0); + this.panelManagerPermissions.Name = "panelManagerPermissions"; + this.panelManagerPermissions.SelectedIndex = 0; + this.panelManagerPermissions.SelectedPanel = this.nonCloudManagedPanel; + this.panelManagerPermissions.Size = new System.Drawing.Size(0, 0); + this.panelManagerPermissions.TabIndex = 1; + // + // nonCloudManagedPanel + // + this.nonCloudManagedPanel.Controls.Add(this.permissionsLayoutPanel); + this.nonCloudManagedPanel.Location = new System.Drawing.Point(0, 0); + this.nonCloudManagedPanel.Name = "nonCloudManagedPanel"; + this.nonCloudManagedPanel.Size = new System.Drawing.Size(0, 0); + // + // permissionsLayoutPanel + // + this.permissionsLayoutPanel.ColumnCount = 4; + this.permissionsLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 140F)); + this.permissionsLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33332F)); + this.permissionsLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); + this.permissionsLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); + this.permissionsLayoutPanel.Controls.Add(this.label10, 0, 2); + this.permissionsLayoutPanel.Controls.Add(this.ownerrCheckBox, 1, 2); + this.permissionsLayoutPanel.Controls.Add(this.ownerwCheckBox, 2, 2); + this.permissionsLayoutPanel.Controls.Add(this.ownerxCheckBox, 3, 2); + this.permissionsLayoutPanel.Controls.Add(this.label11, 0, 3); + this.permissionsLayoutPanel.Controls.Add(this.grouprCheckbox, 1, 3); + this.permissionsLayoutPanel.Controls.Add(this.groupwCheckbox, 2, 3); + this.permissionsLayoutPanel.Controls.Add(this.groupxCheckbox, 3, 3); + this.permissionsLayoutPanel.Controls.Add(this.label12, 0, 4); + this.permissionsLayoutPanel.Controls.Add(this.otherwCheckbox, 2, 4); + this.permissionsLayoutPanel.Controls.Add(this.otherxCheckbox, 3, 4); + this.permissionsLayoutPanel.Controls.Add(this.permissionAnimation, 3, 0); + this.permissionsLayoutPanel.Controls.Add(this.otherrCheckbox, 1, 4); + this.permissionsLayoutPanel.Controls.Add(this.applyRecursivePermissionsButton, 2, 6); + this.permissionsLayoutPanel.Controls.Add(this.label23, 0, 0); + this.permissionsLayoutPanel.Controls.Add(this.octalTextBox, 1, 0); + this.permissionsLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.permissionsLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.permissionsLayoutPanel.Name = "permissionsLayoutPanel"; + this.permissionsLayoutPanel.Padding = new System.Windows.Forms.Padding(10); + this.permissionsLayoutPanel.RowCount = 7; + this.permissionsLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.permissionsLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.permissionsLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.permissionsLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.permissionsLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.permissionsLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.permissionsLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.permissionsLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.permissionsLayoutPanel.Size = new System.Drawing.Size(0, 0); + this.permissionsLayoutPanel.TabIndex = 0; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(13, 59); + this.label10.Name = "label10"; + this.label10.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); + this.label10.Size = new System.Drawing.Size(42, 20); + this.label10.TabIndex = 0; + this.label10.Text = "Owner"; + // + // ownerrCheckBox + // + this.ownerrCheckBox.AutoSize = true; + this.ownerrCheckBox.Location = new System.Drawing.Point(153, 62); + this.ownerrCheckBox.Name = "ownerrCheckBox"; + this.ownerrCheckBox.Size = new System.Drawing.Size(1, 19); + this.ownerrCheckBox.TabIndex = 1; + this.ownerrCheckBox.Text = "Read"; + this.ownerrCheckBox.ThreeState = true; + this.ownerrCheckBox.UseVisualStyleBackColor = true; + this.ownerrCheckBox.CheckStateChanged += new System.EventHandler(this.ownerrCheckBox_CheckStateChanged); + // + // ownerwCheckBox + // + this.ownerwCheckBox.AutoSize = true; + this.ownerwCheckBox.Location = new System.Drawing.Point(107, 62); + this.ownerwCheckBox.Name = "ownerwCheckBox"; + this.ownerwCheckBox.Size = new System.Drawing.Size(1, 19); + this.ownerwCheckBox.TabIndex = 2; + this.ownerwCheckBox.Text = "Write"; + this.ownerwCheckBox.ThreeState = true; + this.ownerwCheckBox.UseVisualStyleBackColor = true; + this.ownerwCheckBox.CheckStateChanged += new System.EventHandler(this.ownerwCheckBox_CheckStateChanged); + // + // ownerxCheckBox + // + this.ownerxCheckBox.AutoSize = true; + this.ownerxCheckBox.Location = new System.Drawing.Point(61, 62); + this.ownerxCheckBox.Name = "ownerxCheckBox"; + this.ownerxCheckBox.Size = new System.Drawing.Size(1, 19); + this.ownerxCheckBox.TabIndex = 3; + this.ownerxCheckBox.Text = "Execute"; + this.ownerxCheckBox.ThreeState = true; + this.ownerxCheckBox.UseVisualStyleBackColor = true; + this.ownerxCheckBox.CheckStateChanged += new System.EventHandler(this.ownerxCheckBox_CheckStateChanged); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(13, 84); + this.label11.Name = "label11"; + this.label11.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); + this.label11.Size = new System.Drawing.Size(40, 20); + this.label11.TabIndex = 4; + this.label11.Text = "Group"; + // + // grouprCheckbox + // + this.grouprCheckbox.AutoSize = true; + this.grouprCheckbox.Location = new System.Drawing.Point(153, 87); + this.grouprCheckbox.Name = "grouprCheckbox"; + this.grouprCheckbox.Size = new System.Drawing.Size(1, 19); + this.grouprCheckbox.TabIndex = 5; + this.grouprCheckbox.Text = "Read"; + this.grouprCheckbox.ThreeState = true; + this.grouprCheckbox.UseVisualStyleBackColor = true; + this.grouprCheckbox.CheckStateChanged += new System.EventHandler(this.grouprCheckbox_CheckStateChanged); + // + // groupwCheckbox + // + this.groupwCheckbox.AutoSize = true; + this.groupwCheckbox.Location = new System.Drawing.Point(107, 87); + this.groupwCheckbox.Name = "groupwCheckbox"; + this.groupwCheckbox.Size = new System.Drawing.Size(1, 19); + this.groupwCheckbox.TabIndex = 6; + this.groupwCheckbox.Text = "Write"; + this.groupwCheckbox.ThreeState = true; + this.groupwCheckbox.UseVisualStyleBackColor = true; + this.groupwCheckbox.CheckStateChanged += new System.EventHandler(this.groupwCheckbox_CheckStateChanged); + // + // groupxCheckbox + // + this.groupxCheckbox.AutoSize = true; + this.groupxCheckbox.Location = new System.Drawing.Point(61, 87); + this.groupxCheckbox.Name = "groupxCheckbox"; + this.groupxCheckbox.Size = new System.Drawing.Size(1, 19); + this.groupxCheckbox.TabIndex = 7; + this.groupxCheckbox.Text = "Execute"; + this.groupxCheckbox.ThreeState = true; + this.groupxCheckbox.UseVisualStyleBackColor = true; + this.groupxCheckbox.CheckStateChanged += new System.EventHandler(this.groupxCheckbox_CheckStateChanged); + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(13, 109); + this.label12.Name = "label12"; + this.label12.Padding = new System.Windows.Forms.Padding(0, 6, 0, 0); + this.label12.Size = new System.Drawing.Size(42, 21); + this.label12.TabIndex = 8; + this.label12.Text = "Others"; + // + // otherwCheckbox + // + this.otherwCheckbox.AutoSize = true; + this.otherwCheckbox.Location = new System.Drawing.Point(107, 112); + this.otherwCheckbox.Name = "otherwCheckbox"; + this.otherwCheckbox.Size = new System.Drawing.Size(1, 19); + this.otherwCheckbox.TabIndex = 10; + this.otherwCheckbox.Text = "Write"; + this.otherwCheckbox.ThreeState = true; + this.otherwCheckbox.UseVisualStyleBackColor = true; + this.otherwCheckbox.CheckStateChanged += new System.EventHandler(this.otherwCheckbox_CheckStateChanged); + // + // otherxCheckbox + // + this.otherxCheckbox.AutoSize = true; + this.otherxCheckbox.Location = new System.Drawing.Point(61, 112); + this.otherxCheckbox.Name = "otherxCheckbox"; + this.otherxCheckbox.Size = new System.Drawing.Size(1, 19); + this.otherxCheckbox.TabIndex = 11; + this.otherxCheckbox.Text = "Execute"; + this.otherxCheckbox.ThreeState = true; + this.otherxCheckbox.UseVisualStyleBackColor = true; + this.otherxCheckbox.CheckStateChanged += new System.EventHandler(this.otherxCheckbox_CheckStateChanged); + // + // permissionAnimation + // + this.permissionAnimation.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.permissionAnimation.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; + this.permissionAnimation.Location = new System.Drawing.Point(61, 13); + this.permissionAnimation.Name = "permissionAnimation"; + this.permissionAnimation.Size = new System.Drawing.Size(1, 18); + this.permissionAnimation.TabIndex = 23; + this.permissionAnimation.TabStop = false; + this.permissionAnimation.Visible = false; + // + // otherrCheckbox + // + this.otherrCheckbox.AutoSize = true; + this.otherrCheckbox.Location = new System.Drawing.Point(153, 112); + this.otherrCheckbox.Name = "otherrCheckbox"; + this.otherrCheckbox.Size = new System.Drawing.Size(1, 19); + this.otherrCheckbox.TabIndex = 9; + this.otherrCheckbox.Text = "Read"; + this.otherrCheckbox.ThreeState = true; + this.otherrCheckbox.UseVisualStyleBackColor = true; + this.otherrCheckbox.CheckStateChanged += new System.EventHandler(this.otherrCheckbox_CheckStateChanged); + // + // applyRecursivePermissionsButton + // + this.applyRecursivePermissionsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.applyRecursivePermissionsButton.AutoSize = true; + this.permissionsLayoutPanel.SetColumnSpan(this.applyRecursivePermissionsButton, 2); + this.applyRecursivePermissionsButton.Location = new System.Drawing.Point(107, 137); + this.applyRecursivePermissionsButton.Name = "applyRecursivePermissionsButton"; + this.applyRecursivePermissionsButton.Size = new System.Drawing.Size(1, 27); + this.applyRecursivePermissionsButton.TabIndex = 28; + this.applyRecursivePermissionsButton.Text = "Apply changes recursively"; + this.applyRecursivePermissionsButton.UseVisualStyleBackColor = true; + this.applyRecursivePermissionsButton.Click += new System.EventHandler(this.applyRecursivePermissionsButton_Click); + // + // label23 + // + this.label23.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label23.AutoSize = true; + this.label23.Location = new System.Drawing.Point(13, 17); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(96, 15); + this.label23.TabIndex = 25; + this.label23.Text = "Unix Permissions"; + // + // octalTextBox + // + this.octalTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.octalTextBox.Location = new System.Drawing.Point(156, 13); + this.octalTextBox.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3); + this.octalTextBox.Name = "octalTextBox"; + this.octalTextBox.Size = new System.Drawing.Size(1, 23); + this.octalTextBox.TabIndex = 24; + this.octalTextBox.Validated += new System.EventHandler(this.octalTextBox_Validated); + // + // cloudManagedPanel + // + this.cloudManagedPanel.Controls.Add(this.tableLayoutPanel1); + this.cloudManagedPanel.Location = new System.Drawing.Point(0, 0); + this.cloudManagedPanel.Name = "cloudManagedPanel"; + this.cloudManagedPanel.Size = new System.Drawing.Size(0, 0); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 24F)); + this.tableLayoutPanel1.Controls.Add(this.AclLabel, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.aclDataGridView, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.addAclButton, 0, 5); + this.tableLayoutPanel1.Controls.Add(this.authenticatedLabel, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.authenticatedUrlLinkLabel, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.aclAnimation, 1, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10); + this.tableLayoutPanel1.RowCount = 6; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 5F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(0, 0); + this.tableLayoutPanel1.TabIndex = 0; + // + // AclLabel + // + this.AclLabel.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.AclLabel, 2); + this.AclLabel.Location = new System.Drawing.Point(13, 63); + this.AclLabel.Name = "AclLabel"; + this.AclLabel.Padding = new System.Windows.Forms.Padding(0, 10, 0, 0); + this.AclLabel.Size = new System.Drawing.Size(1, 10); + this.AclLabel.TabIndex = 27; + this.AclLabel.Text = "Access Control List (ACL)"; + // + // aclDataGridView + // + this.aclDataGridView.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.aclDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.tableLayoutPanel1.SetColumnSpan(this.aclDataGridView, 2); + this.aclDataGridView.Dock = System.Windows.Forms.DockStyle.Fill; + this.aclDataGridView.Location = new System.Drawing.Point(13, 76); + this.aclDataGridView.Name = "aclDataGridView"; + this.aclDataGridView.Size = new System.Drawing.Size(1, 1); + this.aclDataGridView.TabIndex = 29; + // + // addAclButton + // + this.addAclButton.AutoSize = true; + this.addAclButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.addAclButton.ContextMenuStrip = this.addAclContextMenuStrip; + this.addAclButton.Image = global::Ch.Cyberduck.ResourcesBundle.gear; + this.addAclButton.Location = new System.Drawing.Point(13, -16); + this.addAclButton.Name = "addAclButton"; + this.addAclButton.Size = new System.Drawing.Size(1, 24); + this.addAclButton.SplitMenuStrip = this.addAclContextMenuStrip; + this.addAclButton.TabIndex = 30; + this.addAclButton.UseVisualStyleBackColor = true; + // + // addAclContextMenuStrip + // + this.addAclContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.yvesOwnerToolStripMenuItem, + this.canoncalUserIDToolStripMenuItem, + this.toolStripSeparator1, + this.removeToolStripMenuItem}); + this.addAclContextMenuStrip.Name = "contextMenuStrip1"; + this.addAclContextMenuStrip.Size = new System.Drawing.Size(165, 76); + this.addAclContextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.addAclContextMenuStrip_Opening); + // + // yvesOwnerToolStripMenuItem + // + this.yvesOwnerToolStripMenuItem.Name = "yvesOwnerToolStripMenuItem"; + this.yvesOwnerToolStripMenuItem.Size = new System.Drawing.Size(164, 22); + this.yvesOwnerToolStripMenuItem.Text = "yves (Owner)"; + // + // canoncalUserIDToolStripMenuItem + // + this.canoncalUserIDToolStripMenuItem.Name = "canoncalUserIDToolStripMenuItem"; + this.canoncalUserIDToolStripMenuItem.Size = new System.Drawing.Size(164, 22); + this.canoncalUserIDToolStripMenuItem.Text = "Canoncal User ID"; + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(161, 6); + // + // removeToolStripMenuItem + // + this.removeToolStripMenuItem.Name = "removeToolStripMenuItem"; + this.removeToolStripMenuItem.Size = new System.Drawing.Size(164, 22); + this.removeToolStripMenuItem.Text = "Remove"; + // + // authenticatedLabel + // + this.authenticatedLabel.AutoSize = true; + this.authenticatedLabel.Location = new System.Drawing.Point(13, 15); + this.authenticatedLabel.MinimumSize = new System.Drawing.Size(0, 28); + this.authenticatedLabel.Name = "authenticatedLabel"; + this.authenticatedLabel.Size = new System.Drawing.Size(1, 28); + this.authenticatedLabel.TabIndex = 31; + this.authenticatedLabel.Text = "Authenticated URL"; + // + // authenticatedUrlLinkLabel + // + this.authenticatedUrlLinkLabel.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.authenticatedUrlLinkLabel, 2); + this.authenticatedUrlLinkLabel.Location = new System.Drawing.Point(13, 43); + this.authenticatedUrlLinkLabel.MinimumSize = new System.Drawing.Size(0, 20); + this.authenticatedUrlLinkLabel.Name = "authenticatedUrlLinkLabel"; + this.authenticatedUrlLinkLabel.Size = new System.Drawing.Size(1, 20); + this.authenticatedUrlLinkLabel.TabIndex = 32; + this.authenticatedUrlLinkLabel.TabStop = true; + this.authenticatedUrlLinkLabel.Text = "linkLabel1"; + // + // aclAnimation + // + this.aclAnimation.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.aclAnimation.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; + this.aclAnimation.Location = new System.Drawing.Point(-10, 18); + this.aclAnimation.Name = "aclAnimation"; + this.aclAnimation.Size = new System.Drawing.Size(18, 21); + this.aclAnimation.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.aclAnimation.TabIndex = 33; + this.aclAnimation.TabStop = false; + this.aclAnimation.Visible = false; + // + // managedS3Panel + // + this.managedS3Panel.Controls.Add(this.s3LayoutPanel); + this.managedS3Panel.Location = new System.Drawing.Point(0, 0); + this.managedS3Panel.Name = "managedS3Panel"; + this.managedS3Panel.Size = new System.Drawing.Size(500, 548); + this.managedS3Panel.Text = "managedPanel1"; + // + // InfoForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.ClientSize = new System.Drawing.Size(500, 604); + this.Controls.Add(this.panelManager); + this.Controls.Add(this.toolStrip); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; + this.HelpButton = true; + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(998, 799); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(499, 643); + this.Name = "InfoForm"; + this.Text = "Info"; + this.toolStrip.ResumeLayout(false); + this.toolStrip.PerformLayout(); + this.distributionLayoutPanel.ResumeLayout(false); + this.distributionLayoutPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.distributionAnimation)).EndInit(); + this.generalLayoutPanel.ResumeLayout(false); + this.generalLayoutPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.icon)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.sizeAnimation)).EndInit(); + this.s3LayoutPanel.ResumeLayout(false); + this.s3LayoutPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.s3Animation)).EndInit(); + this.panelManager.ResumeLayout(false); + this.managedDistributionPanel.ResumeLayout(false); + this.managedDistributionPanel.PerformLayout(); + this.managedGeneralPanel.ResumeLayout(false); + this.managedGeneralPanel.PerformLayout(); + this.managedMetadataPanel.ResumeLayout(false); + this.metadataTableLayoutPanel.ResumeLayout(false); + this.metadataTableLayoutPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.metadataDataGridView)).EndInit(); + this.addMetadataContextMenuStrip.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.metadataAnimation)).EndInit(); + this.managedPermissionsPanel.ResumeLayout(false); + this.panelManagerPermissions.ResumeLayout(false); + this.nonCloudManagedPanel.ResumeLayout(false); + this.permissionsLayoutPanel.ResumeLayout(false); + this.permissionsLayoutPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.permissionAnimation)).EndInit(); + this.cloudManagedPanel.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.aclDataGridView)).EndInit(); + this.addAclContextMenuStrip.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.aclAnimation)).EndInit(); + this.managedS3Panel.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStripButton generalButton; + private System.Windows.Forms.ToolStripButton permissionsButton; + private System.Windows.Forms.TableLayoutPanel generalLayoutPanel; + private System.Windows.Forms.PictureBox icon; + private System.Windows.Forms.TextBox filenameTextbox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label9; + private ClickLinkLabel weburlLabel; + private System.Windows.Forms.Button calculateButton; + private System.Windows.Forms.PictureBox sizeAnimation; + private System.Windows.Forms.ToolTip toolTip; + private System.Windows.Forms.ToolStripButton distributionButton; + private System.Windows.Forms.ToolStripButton s3Button; + private System.Windows.Forms.TableLayoutPanel distributionLayoutPanel; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.ComboBox deliveryMethodComboBox; + private System.Windows.Forms.CheckBox distributionEnableCheckBox; + private System.Windows.Forms.CheckBox distributionLoggingCheckBox; + private System.Windows.Forms.Label statusLabel; + private System.Windows.Forms.TextBox distributionCnameTextBox; + private System.Windows.Forms.TableLayoutPanel s3LayoutPanel; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.CheckBox bucketLoggingCheckBox; + private System.Windows.Forms.Label bucketLocationLabel; + private ClickLinkLabel s3PublicUrlLinkLabel; + private ClickLinkLabel s3TorrentUrlLinkLabel; + private ClickLinkLabel whereLinkLabel; + private System.Windows.Forms.PictureBox s3Animation; + private System.Windows.Forms.PictureBox distributionAnimation; + private ClickLinkLabel cnameUrlLinkLabel; + private System.Windows.Forms.ToolStripButton metadataButton; + private PanelManager panelManager; + private ManagedPanel managedGeneralPanel; + private ManagedPanel managedPermissionsPanel; + private ManagedPanel managedMetadataPanel; + private ManagedPanel managedDistributionPanel; + private ManagedPanel managedS3Panel; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.Label sizeLabel; + private System.Windows.Forms.Label pathLabel; + private System.Windows.Forms.Label kindLabel; + private System.Windows.Forms.Label permissionsLabel; + private System.Windows.Forms.Label ownerLabel; + private System.Windows.Forms.Label groupLabel; + private System.Windows.Forms.Label modifiedLabel; + private System.Windows.Forms.Label createdLabel; + private System.Windows.Forms.TableLayoutPanel permissionsLayoutPanel; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.CheckBox ownerrCheckBox; + private System.Windows.Forms.CheckBox ownerwCheckBox; + private System.Windows.Forms.CheckBox ownerxCheckBox; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.CheckBox grouprCheckbox; + private System.Windows.Forms.CheckBox groupwCheckbox; + private System.Windows.Forms.CheckBox groupxCheckbox; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.CheckBox otherwCheckbox; + private System.Windows.Forms.CheckBox otherxCheckbox; + private System.Windows.Forms.TextBox octalTextBox; + private System.Windows.Forms.PictureBox permissionAnimation; + private System.Windows.Forms.CheckBox otherrCheckbox; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Label AclLabel; + private System.Windows.Forms.Button applyRecursivePermissionsButton; + private System.Windows.Forms.DataGridView aclDataGridView; + private SplitButton addAclButton; + private System.Windows.Forms.ContextMenuStrip addAclContextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem yvesOwnerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem canoncalUserIDToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem removeToolStripMenuItem; + private System.Windows.Forms.TableLayoutPanel metadataTableLayoutPanel; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.DataGridView metadataDataGridView; + private SplitButton addHeaderButton; + private System.Windows.Forms.ContextMenuStrip addMetadataContextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3; + private System.Windows.Forms.PictureBox metadataAnimation; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.ComboBox defaultRootComboBox; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.Label s3PublicUrlValidityLabel; + private System.Windows.Forms.CheckBox bucketVersioningCheckBox; + private System.Windows.Forms.CheckBox bucketMfaCheckBox; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.ComboBox storageClassComboBox; + private PanelManager panelManagerPermissions; + private ManagedPanel nonCloudManagedPanel; + private ManagedPanel cloudManagedPanel; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Label authenticatedLabel; + private ClickLinkLabel authenticatedUrlLinkLabel; + private System.Windows.Forms.PictureBox aclAnimation; + private ClickThroughToolStrip toolStrip; + private System.Windows.Forms.TextBox checksumTextBox; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label invalidationStatus; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.Button invalidateButton; + private System.Windows.Forms.Label label27; + private ClickLinkLabel originLinkLabel; + private System.Windows.Forms.Label label28; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.ComboBox distributionLoggingComboBox; + private System.Windows.Forms.Label label31; + private System.Windows.Forms.Label label32; + private System.Windows.Forms.Label label33; + private System.Windows.Forms.ComboBox bucketLoggingComboBox; + private System.Windows.Forms.Label label34; + private System.Windows.Forms.CheckBox encryptionCheckBox; + private System.Windows.Forms.Label label35; + private System.Windows.Forms.CheckBox bucketAnalyticsCheckBox; + private ClickLinkLabel bucketAnalyticsSetupUrlLinkLabel; + private System.Windows.Forms.Label label36; + private System.Windows.Forms.Label label37; + private System.Windows.Forms.CheckBox distributionAnalyticsCheckBox; + private System.Windows.Forms.LinkLabel distributionAnalyticsSetupUrlLinkLabel; + private System.Windows.Forms.CheckBox lifecycleTransitionCheckBox; + private System.Windows.Forms.Label label38; + private System.Windows.Forms.ComboBox lifecycleTransitionComboBox; + private System.Windows.Forms.CheckBox lifecycleDeleteCheckBox; + private System.Windows.Forms.ComboBox lifecycleDeleteComboBox; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/InfoForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/InfoForm.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/InfoForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/InfoForm.cs index a1a0268303..d324f20811 100644 --- a/source/ch/cyberduck/ui/winforms/InfoForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/InfoForm.cs @@ -1,1415 +1,1415 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Controller; -using Ch.Cyberduck.Ui.Winforms.Controls; -using ch.cyberduck.core; -using ch.cyberduck.core.cdn; -using java.lang; -using String = System.String; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class InfoForm : ToolbarBaseForm, IInfoView - { - private String lastCname; - - public InfoForm() - { - InitializeComponent(); - - Load += delegate - { - int minWidth = 10; // border etc. - foreach (ToolStripItem item in toolStrip.Items) - { - minWidth += item.Size.Width + item.Margin.Left + item.Margin.Right; - } - MinimumSize = new Size(minWidth, MinimumSize.Height); - }; - - TopMost = false; - TopLevel = true; - - toolStrip.Renderer = new FirefoxStyleRenderer(); - - ConfigureHelp(); - InitAclGrid(); - InitMetadataGrid(); - - panelManager.SelectedIndexChanged += (sender, args) => ActiveTabChanged(); - - generalButton_Click(this, EventArgs.Empty); - - LocalizationCompleted += ResizeForm; - - //some font tweaking - statusLabel.Font = DefaultFontBold; - authenticatedLabel.Font = DefaultFontBold; - AclLabel.Font = DefaultFontBold; - - whereLinkLabel.Text = String.Empty; - cnameUrlLinkLabel.Text = String.Empty; - - MaximumSize = new Size(1000, Height + 30); - } - - /// - /// Activate Double-Buffering for _all_ controls on a form - /// - /// - /// - /// - protected override CreateParams CreateParams - { - get - { - CreateParams cp = base.CreateParams; - cp.ExStyle |= 0x02000000; - return cp; - } - } - - public override ToolStrip ToolStrip - { - get { return toolStrip; } - } - - public override string[] BundleNames - { - get { return new[] {"Info"}; } - } - - public event EventHandler ShowHelp; - - public bool ToolbarDistributionEnabled - { - set { distributionButton.Enabled = value; } - } - - public bool ToolbarS3Enabled - { - set { s3Button.Enabled = value; } - } - - public Image ToolbarS3Image - { - set { s3Button.Image = value; } - } - - public String ToolbarS3Label - { - set { s3Button.Text = value; } - } - - public bool ToolbarPermissionsEnabled - { - set { permissionsButton.Enabled = value; } - } - - public bool ToolbarMetadataEnabled - { - set { metadataButton.Enabled = value; } - } - - public InfoTab ActiveTab - { - get - { - if (panelManager.SelectedPanel == managedGeneralPanel) - { - return InfoTab.General; - } - if (panelManager.SelectedPanel == managedPermissionsPanel) - { - if (panelManagerPermissions.SelectedPanel == cloudManagedPanel) - { - return InfoTab.Acl; - } - return InfoTab.Permissions; - } - if (panelManager.SelectedPanel == managedDistributionPanel) - { - return InfoTab.Distribution; - } - if (panelManager.SelectedPanel == managedS3Panel) - { - return InfoTab.S3; - } - if (panelManager.SelectedPanel == managedMetadataPanel) - { - return InfoTab.Metadata; - } - throw new IllegalArgumentException("Invalid state"); - } - set - { - if (value == InfoTab.General) - { - generalButton_Click(this, EventArgs.Empty); - } - if (value == InfoTab.Permissions || value == InfoTab.Acl) - { - //inner panel is already set - permissionsButton_Click(this, EventArgs.Empty); - } - if (value == InfoTab.Distribution) - { - distributionButton_Click(this, EventArgs.Empty); - } - if (value == InfoTab.S3) - { - s3Button_Click(this, EventArgs.Empty); - } - if (value == InfoTab.Metadata) - { - metadataButton_Click(this, EventArgs.Empty); - } - } - } - - public Image ToolbarDistributionImage - { - set { distributionButton.Image = value; } - } - - public Image FileIcon - { - set { icon.Image = value; } - } - - public string Filename - { - get { return filenameTextbox.Text; } - set - { - filenameTextbox.Text = value; - Text = String.Format("{0} - {1}", LocaleFactory.localizedString("Info", "Info"), value); - } - } - - public bool FilenameEnabled - { - set { filenameTextbox.Enabled = value; } - } - - public bool SizeButtonEnabled - { - set { calculateButton.Enabled = value; } - } - - public bool SizeAnimationActive - { - set { sizeAnimation.Visible = value; } - } - - public bool PermissionAnimationActive - { - set { permissionAnimation.Visible = value; } - } - - public string FileSize - { - set { sizeLabel.Text = value; } - } - - public string Path - { - set { pathLabel.Text = value; } - } - - public string PathToolTip - { - set { toolTip.SetToolTip(pathLabel, value); } - } - - public string WebUrl - { - set { weburlLabel.Text = value; } - } - - public string WebUrlTooltip - { - set { toolTip.SetToolTip(weburlLabel, value); } - } - - public string Kind - { - set { kindLabel.Text = value; } - } - - public string Permissions - { - set { permissionsLabel.Text = value; } - } - - public string FileOwner - { - set { ownerLabel.Text = value; } - } - - public string Group - { - set { groupLabel.Text = value; } - } - - public string FileCreated - { - set { createdLabel.Text = value; } - } - - public string Modified - { - set { modifiedLabel.Text = value; } - } - - public string Checksum - { - set { checksumTextBox.Text = value; } - } - - public bool LifecycleTransitionCheckboxEnabled - { - set { lifecycleTransitionCheckBox.Enabled = value; } - } - - public bool LifecycleDeleteCheckbox - { - get { return lifecycleDeleteCheckBox.Checked; } - set { lifecycleDeleteCheckBox.Checked = value; } - } - - public bool LifecycleDeleteCheckboxEnabled - { - set { lifecycleDeleteCheckBox.Enabled = value; } - } - - public string LifecycleTransition - { - get { return (string) lifecycleTransitionComboBox.SelectedValue; } - set { lifecycleTransitionComboBox.SelectedValue = value; } - } - - public bool LifecycleTransitionPopupEnabled - { - set { lifecycleTransitionComboBox.Enabled = value; } - } - - public string LifecycleDelete - { - get { return (string) lifecycleDeleteComboBox.SelectedValue; } - set { lifecycleDeleteComboBox.SelectedValue = value; } - } - - public bool LifecycleDeletePopupEnabled - { - set { lifecycleDeleteComboBox.Enabled = value; } - } - - public event VoidHandler FilenameChanged = delegate { }; - - public CheckState OwnerRead - { - get { return ownerrCheckBox.CheckState; } - set { ownerrCheckBox.CheckState = value; } - } - - public bool OwnerReadEnabled - { - get { return ownerrCheckBox.Enabled; } - set { ownerrCheckBox.Enabled = value; } - } - - public CheckState OwnerWrite - { - get { return ownerwCheckBox.CheckState; } - set { ownerwCheckBox.CheckState = value; } - } - - public bool OwnerWriteEnabled - { - get { return ownerwCheckBox.Enabled; } - set { ownerwCheckBox.Enabled = value; } - } - - public CheckState OwnerExecute - { - get { return ownerxCheckBox.CheckState; } - set { ownerxCheckBox.CheckState = value; } - } - - public bool OwnerExecuteEnabled - { - get { return ownerxCheckBox.Enabled; } - set { ownerxCheckBox.Enabled = value; } - } - - public CheckState GroupRead - { - get { return grouprCheckbox.CheckState; } - set { grouprCheckbox.CheckState = value; } - } - - public bool GroupReadEnabled - { - get { return grouprCheckbox.Enabled; } - set { grouprCheckbox.Enabled = value; } - } - - public CheckState GroupWrite - { - get { return groupwCheckbox.CheckState; } - set { groupwCheckbox.CheckState = value; } - } - - public bool GroupWriteEnabled - { - get { return groupwCheckbox.Enabled; } - set { groupwCheckbox.Enabled = value; } - } - - public CheckState GroupExecute - { - get { return groupxCheckbox.CheckState; } - set { groupxCheckbox.CheckState = value; } - } - - public bool GroupExecuteEnabled - { - get { return groupxCheckbox.Enabled; } - set { groupxCheckbox.Enabled = value; } - } - - public CheckState OtherRead - { - get { return otherrCheckbox.CheckState; } - set { otherrCheckbox.CheckState = value; } - } - - public bool OtherReadEnabled - { - get { return otherrCheckbox.Enabled; } - set { otherrCheckbox.Enabled = value; } - } - - public CheckState OtherWrite - { - get { return otherwCheckbox.CheckState; } - set { otherwCheckbox.CheckState = value; } - } - - public bool OtherWriteEnabled - { - get { return otherwCheckbox.Enabled; } - set { otherwCheckbox.Enabled = value; } - } - - public CheckState OtherExecute - { - get { return otherxCheckbox.CheckState; } - set { otherxCheckbox.CheckState = value; } - } - - public bool OtherExecuteEnabled - { - get { return otherxCheckbox.Enabled; } - set { otherxCheckbox.Enabled = value; } - } - - public bool RecursivePermissionsEnabled - { - set { applyRecursivePermissionsButton.Enabled = value; } - } - - public string OctalPermissions - { - get { return octalTextBox.Text; } - set { octalTextBox.Text = value; } - } - - public bool OctalPermissionsEnabled - { - set { octalTextBox.Enabled = value; } - } - - public List SelectedAclEntries - { - get - { - List selected = new List(); - DataGridViewSelectedRowCollection rows = aclDataGridView.SelectedRows; - foreach (DataGridViewRow row in rows) - { - selected.Add(row.DataBoundItem as InfoController.UserAndRoleEntry); - } - return selected; - } - } - - public bool AclPanel - { - set { panelManagerPermissions.SelectedPanel = value ? cloudManagedPanel : nonCloudManagedPanel; } - } - - public BindingList AclDataSource - { - set { aclDataGridView.DataSource = value; } - } - - public bool AclTableEnabled - { - set { aclDataGridView.Enabled = value; } - } - - public bool AclAddEnabled - { - set { addAclButton.Enabled = value; } - } - - public bool AclRemoveEnabled - { - set { addAclContextMenuStrip.Items[addAclContextMenuStrip.Items.Count - 1].Enabled = value; } - } - - public void EditAclRow(InfoController.UserAndRoleEntry aclEntry, bool selectRole) - { - foreach (DataGridViewRow row in aclDataGridView.Rows) - { - if (row.DataBoundItem == aclEntry) - { - aclDataGridView.CurrentCell = selectRole - ? row.Cells[AclColumnName.Role.ToString()] - : row.Cells[AclColumnName.User.ToString()]; - break; - } - } - aclDataGridView.BeginEdit(true); - } - - public void EditMetadataRow(InfoController.CustomHeaderEntry headerEntry, bool selectValue) - { - foreach (DataGridViewRow row in metadataDataGridView.Rows) - { - if (row.DataBoundItem == headerEntry) - { - metadataDataGridView.CurrentCell = selectValue - ? row.Cells[MetadataColumName.Value.ToString()] - : row.Cells[MetadataColumName.Name.ToString()]; - break; - } - } - metadataDataGridView.BeginEdit(true); - } - - public Distribution.Method DistributionDeliveryMethod - { - get { return (Distribution.Method) deliveryMethodComboBox.SelectedValue; } - set { deliveryMethodComboBox.SelectedValue = value; } - } - - public bool DistributionCnameUrlEnabled - { - set { cnameUrlLinkLabel.Enabled = value; } - } - - public string DistributionCnameUrlTooltip - { - set { toolTip.SetToolTip(cnameUrlLinkLabel, value); } - } - - public bool DistributionCnameEnabled - { - set { distributionCnameTextBox.Enabled = value; } - } - - public bool DistributionAnimationActive - { - set { distributionAnimation.Visible = value; } - } - - public string DistributionDefaultRoot - { - get { return (String) defaultRootComboBox.SelectedValue; } - set { defaultRootComboBox.SelectedValue = value; } - } - - public event VoidHandler CalculateSize = delegate { }; - - public void PopulateAclUsers(IDictionary users) - { - addAclContextMenuStrip.Items.Clear(); - ToolStripItem[] items = new ToolStripItem[users.Count + 1]; - - int i = 0; - foreach (KeyValuePair user in users) - { - ToolStripMenuItem item = new ToolStripMenuItem(user.Key); - KeyValuePair userDelegate = user; - item.Click += delegate { userDelegate.Value(); }; - items[i] = item; - i++; - - if ((users.Count - 1) == i) - { - items[i++] = new ToolStripSeparator(); - } - } - addAclContextMenuStrip.Items.AddRange(items); - } - - public void PopulateAclRoles(IList roles) - { - ((DataGridViewComboBoxColumn) aclDataGridView.Columns[AclColumnName.Role.ToString()]).DataSource = roles; - } - - public bool AclAnimationActive - { - set { aclAnimation.Visible = value; } - } - - public string AclUrl - { - set { authenticatedUrlLinkLabel.Text = value; } - } - - public bool AclUrlEnabled - { - set { authenticatedUrlLinkLabel.Enabled = value; } - } - - public string AclUrlTooltip - { - set { toolTip.SetToolTip(authenticatedUrlLinkLabel, value); } - } - - public event VoidHandler OwnerReadChanged = delegate { }; - public event VoidHandler OwnerWriteChanged = delegate { }; - public event VoidHandler OwnerExecuteChanged = delegate { }; - public event VoidHandler GroupReadChanged = delegate { }; - public event VoidHandler GroupWriteChanged = delegate { }; - public event VoidHandler GroupExecuteChanged = delegate { }; - public event VoidHandler OtherReadChanged = delegate { }; - public event VoidHandler OtherWriteChanged = delegate { }; - public event VoidHandler OtherExecuteChanged = delegate { }; - public event VoidHandler ApplyRecursivePermissions = delegate { }; - public event VoidHandler OctalPermissionsChanged = delegate { }; - - - public bool DistributionDefaultRootEnabled - { - set { defaultRootComboBox.Enabled = value; } - } - - public string DistributionInvalidationStatus - { - set { invalidationStatus.Text = value; } - } - - public string DistributionInvalidateObjectsTooltip - { - set { toolTip.SetToolTip(invalidateButton, value); } - } - - public bool DistributionInvalidateObjectsEnabled - { - set { invalidateButton.Enabled = value; } - } - - public void PopulateDistributionDeliveryMethod(IList> methods) - { - deliveryMethodComboBox.DataSource = null; - deliveryMethodComboBox.DataSource = methods; - deliveryMethodComboBox.DisplayMember = "Key"; - deliveryMethodComboBox.ValueMember = "Value"; - } - - public void PopulateDefaultRoot(IList> roots) - { - defaultRootComboBox.DataSource = null; - defaultRootComboBox.DataSource = roots; - defaultRootComboBox.DisplayMember = "Key"; - defaultRootComboBox.ValueMember = "Value"; - } - - public void PopulateBucketLogging(IList buckets) - { - bucketLoggingComboBox.DataSource = buckets; - } - - public void PopulateDistributionLogging(IList buckets) - { - distributionLoggingComboBox.DataSource = buckets; - } - - public void PopulateLifecycleTransitionPeriod(IList> periods) - { - lifecycleTransitionComboBox.DataSource = null; - lifecycleTransitionComboBox.DataSource = periods; - lifecycleTransitionComboBox.DisplayMember = "Key"; - lifecycleTransitionComboBox.ValueMember = "Value"; - } - - public void PopulateLifecycleDeletePeriod(IList> periods) - { - lifecycleDeleteComboBox.DataSource = null; - lifecycleDeleteComboBox.DataSource = periods; - lifecycleDeleteComboBox.DisplayMember = "Key"; - lifecycleDeleteComboBox.ValueMember = "Value"; - } - - public bool DistributionDeliveryMethodEnabled - { - set { deliveryMethodComboBox.Enabled = value; } - } - - public bool Distribution - { - get { return distributionEnableCheckBox.Checked; } - set { distributionEnableCheckBox.Checked = value; } - } - - public bool DistributionEnabled - { - set { distributionEnableCheckBox.Enabled = value; } - } - - public string DistributionTitle - { - set { distributionEnableCheckBox.Text = value; } - } - - public string DistributionStatus - { - set { statusLabel.Text = value; } - } - - public bool DistributionLoggingCheckbox - { - get { return distributionLoggingCheckBox.Checked; } - set { distributionLoggingCheckBox.Checked = value; } - } - - public bool DistributionLoggingCheckboxEnabled - { - set { distributionLoggingCheckBox.Enabled = value; } - } - - public string DistributionLoggingPopup - { - get { return distributionLoggingComboBox.Text; } - set { distributionLoggingComboBox.Text = value; } - } - - public bool DistributionLoggingPopupEnabled - { - set { distributionLoggingComboBox.Enabled = value; } - } - - public string DistributionUrl - { - set { whereLinkLabel.Text = value; } - } - - public string DistributionUrlTooltip - { - set { toolTip.SetToolTip(whereLinkLabel, value); } - } - - public bool DistributionUrlEnabled - { - set { whereLinkLabel.Enabled = value; } - } - - public string DistributionOrigin - { - set { originLinkLabel.Text = value; } - } - - public string DistributionCname - { - get { return distributionCnameTextBox.Text; } - set - { - distributionCnameTextBox.Text = value; - lastCname = value; - } - } - - public string DistributionCnameUrl - { - set { cnameUrlLinkLabel.Text = value; } - } - - public event VoidHandler DistributionDeliveryMethodChanged = delegate { }; - public event VoidHandler DistributionEnabledChanged = delegate { }; - public event VoidHandler DistributionLoggingCheckboxChanged = delegate { }; - public event VoidHandler DistributionLoggingPopupChanged = delegate { }; - public event VoidHandler DistributionCnameChanged = delegate { }; - public event VoidHandler DistributionInvalidateObjects = delegate { }; - - public void PopulateStorageClass(IList> classes) - { - storageClassComboBox.DataSource = null; - storageClassComboBox.DataSource = classes; - storageClassComboBox.DisplayMember = "Key"; - storageClassComboBox.ValueMember = "Value"; - } - - public string BucketLocation - { - set { bucketLocationLabel.Text = value; } - } - - public bool Encryption - { - set { encryptionCheckBox.Checked = value; } - get { return encryptionCheckBox.Checked; } - } - - public bool EncryptionEnabled - { - get { return encryptionCheckBox.Enabled; } - set { encryptionCheckBox.Enabled = value; } - } - - public string StorageClass - { - get { return (string) storageClassComboBox.SelectedValue; } - set { storageClassComboBox.SelectedValue = value; } - } - - public bool StorageClassEnabled - { - set { storageClassComboBox.Enabled = value; } - } - - public string BucketLoggingPopup - { - get { return bucketLoggingComboBox.Text; } - set { bucketLoggingComboBox.Text = value; } - } - - public bool BucketLoggingPopupEnabled - { - set { bucketLoggingComboBox.Enabled = value; } - } - - public string S3PublicUrl - { - set { s3PublicUrlLinkLabel.Text = value; } - } - - public bool S3PublicUrlEnabled - { - set { s3PublicUrlLinkLabel.Enabled = value; } - } - - public string S3PublicUrlValidity - { - set { s3PublicUrlValidityLabel.Text = value; } - } - - public string S3TorrentUrl - { - set { s3TorrentUrlLinkLabel.Text = value; } - } - - public bool S3TorrentUrlEnabled - { - set { s3TorrentUrlLinkLabel.Enabled = value; } - } - - public string S3PublicUrlTooltip - { - set { toolTip.SetToolTip(s3PublicUrlLinkLabel, value); } - } - - public string S3TorrentUrlTooltip - { - set { toolTip.SetToolTip(s3TorrentUrlLinkLabel, value); } - } - - public bool S3AnimationActive - { - set { s3Animation.Visible = value; } - } - - public bool BucketLoggingCheckbox - { - get { return bucketLoggingCheckBox.Checked; } - set { bucketLoggingCheckBox.Checked = value; } - } - - public string BucketLoggingTooltip - { - set { toolTip.SetToolTip(bucketLoggingCheckBox, value); } - } - - public bool BucketLoggingCheckboxEnabled - { - set { bucketLoggingCheckBox.Enabled = value; } - } - - public bool BucketAnalyticsCheckbox - { - get { return bucketAnalyticsCheckBox.Checked; } - set { bucketAnalyticsCheckBox.Checked = value; } - } - - public bool BucketAnalyticsCheckboxEnabled - { - set { bucketAnalyticsCheckBox.Enabled = value; } - } - - public string BucketAnalyticsSetupUrl - { - set { bucketAnalyticsSetupUrlLinkLabel.Text = value; } - } - - public bool BucketAnalyticsSetupUrlEnabled - { - set { bucketAnalyticsSetupUrlLinkLabel.Enabled = value; } - } - - public bool BucketVersioning - { - get { return bucketVersioningCheckBox.Checked; } - set { bucketVersioningCheckBox.Checked = value; } - } - - public bool BucketVersioningEnabled - { - set { bucketVersioningCheckBox.Enabled = value; } - } - - public bool BucketMfa - { - set { bucketMfaCheckBox.Checked = value; } - get { return bucketMfaCheckBox.Checked; } - } - - public bool BucketMfaEnabled - { - set { bucketMfaCheckBox.Enabled = value; } - } - - public bool LifecycleTransitionCheckbox - { - get { return lifecycleTransitionCheckBox.Checked; } - set { lifecycleTransitionCheckBox.Checked = value; } - } - - public event VoidHandler BucketLoggingCheckboxChanged = delegate { }; - public event VoidHandler BucketLoggingPopupChanged = delegate { }; - public event VoidHandler EncryptionChanged = delegate { }; - public event VoidHandler StorageClassChanged = delegate { }; - public event VoidHandler BucketVersioningChanged = delegate { }; - public event VoidHandler BucketMfaChanged = delegate { }; - public event VoidHandler LifecycleTransitionCheckboxChanged = delegate { }; - public event VoidHandler LifecycleTransitionPopupChanged = delegate { }; - public event VoidHandler LifecycleDeleteCheckboxChanged = delegate { }; - public event VoidHandler LifecycleDeletePopupChanged = delegate { }; - public event VoidHandler ActiveTabChanged = delegate { }; - public event VoidHandler BucketAnalyticsCheckboxChanged = delegate { }; - public event VoidHandler DistributionAnalyticsCheckboxChanged = delegate { }; - - public bool DistributionAnalyticsCheckbox - { - get { return distributionAnalyticsCheckBox.Checked; } - set { distributionAnalyticsCheckBox.Checked = value; } - } - - public bool DistributionAnalyticsCheckboxEnabled - { - set { distributionAnalyticsCheckBox.Enabled = value; } - } - - public string DistributionAnalyticsSetupUrl - { - set { distributionAnalyticsSetupUrlLinkLabel.Text = value; } - } - - public bool DistributionAnalyticsSetupUrlEnabled - { - set { distributionAnalyticsSetupUrlLinkLabel.Enabled = value; } - } - - public bool MetadataTableEnabled - { - set { metadataDataGridView.Enabled = value; } - } - - public bool MetadataAddEnabled - { - set { addHeaderButton.Enabled = value; } - } - - public bool MetadataRemoveEnabled - { - set { addMetadataContextMenuStrip.Items[addMetadataContextMenuStrip.Items.Count - 1].Enabled = value; } - } - - public bool MetadataAnimationActive - { - set { metadataAnimation.Visible = value; } - } - - public BindingList MetadataDataSource - { - set { metadataDataGridView.DataSource = value; } - } - - public void PopulateMetadata(IDictionary metadata) - { - addMetadataContextMenuStrip.Items.Clear(); - ToolStripItem[] items = new ToolStripItem[metadata.Count + 2]; - - int i = 0; - foreach (KeyValuePair header in metadata) - { - ToolStripMenuItem item = new ToolStripMenuItem(header.Key); - KeyValuePair header1 = header; - item.Click += delegate { header1.Value(); }; - items[i] = item; - i++; - - if (1 == i || (metadata.Count) == i) - { - items[i++] = new ToolStripSeparator(); - } - } - addMetadataContextMenuStrip.Items.AddRange(items); - } - - public List SelectedMetadataEntries - { - get - { - List selected = new List(); - DataGridViewSelectedRowCollection rows = metadataDataGridView.SelectedRows; - foreach (DataGridViewRow row in rows) - { - selected.Add((InfoController.CustomHeaderEntry) row.DataBoundItem); - } - return selected; - } - } - - public event VoidHandler DistributionDefaultRootChanged = delegate { }; - - private void InitMetadataGrid() - { - metadataDataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - metadataDataGridView.MultiSelect = true; - metadataDataGridView.RowHeadersVisible = false; - metadataDataGridView.AutoGenerateColumns = false; - metadataDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; - metadataDataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; - - DataGridViewTextBoxColumn nameColumn = new DataGridViewTextBoxColumn(); - nameColumn.HeaderText = "Name"; - nameColumn.DataPropertyName = MetadataColumName.Name.ToString(); - nameColumn.Name = MetadataColumName.Name.ToString(); - - DataGridViewTextBoxColumn valueColumn = new DataGridViewTextBoxColumn(); - valueColumn.DataPropertyName = MetadataColumName.Value.ToString(); - valueColumn.HeaderText = "Value"; - valueColumn.Name = MetadataColumName.Value.ToString(); - - metadataDataGridView.Columns.Add(nameColumn); - metadataDataGridView.Columns.Add(valueColumn); - } - - private void HandleHelpRequest() - { - ManagedPanel selected = panelManager.SelectedPanel; - if (selected == managedGeneralPanel) - { - ShowHelp(this, new InfoHelpArgs(InfoHelpArgs.Context.General)); - } - if (selected == managedPermissionsPanel) - { - ShowHelp(this, new InfoHelpArgs(InfoHelpArgs.Context.Permissions)); - } - if (selected == managedMetadataPanel) - { - ShowHelp(this, new InfoHelpArgs(InfoHelpArgs.Context.Metdadata)); - } - if (selected == managedDistributionPanel) - { - ShowHelp(this, new InfoHelpArgs(InfoHelpArgs.Context.Cdn)); - } - if (selected == managedS3Panel) - { - ShowHelp(this, new InfoHelpArgs(InfoHelpArgs.Context.S3)); - } - } - - private void ConfigureHelp() - { - HelpButtonClicked += (sender, args) => HandleHelpRequest(); - HelpRequested += (sender, hlpevent) => HandleHelpRequest(); - } - - private void InitAclGrid() - { - aclDataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - aclDataGridView.MultiSelect = true; - aclDataGridView.RowHeadersVisible = false; - aclDataGridView.AutoGenerateColumns = false; - aclDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; - aclDataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; - - aclDataGridView.CellFormatting += delegate(object sender, DataGridViewCellFormattingEventArgs args) - { - if (null != aclDataGridView.DataSource) - { - if (aclDataGridView.IsCurrentCellInEditMode || - args.ColumnIndex != 0) - { - return; - } - if (String.IsNullOrEmpty(args.Value as String)) - { - args.Value = - ((InfoController.UserAndRoleEntry) - aclDataGridView.Rows[args.RowIndex].DataBoundItem). - getUser().getPlaceholder(); - args.CellStyle.ForeColor = Color.Gray; - args.CellStyle.Font = new Font(args.CellStyle.Font, - FontStyle.Italic); - } - } - }; - - - //make combobox directly editable without multiple clicks - aclDataGridView.CellClick += delegate(object o, DataGridViewCellEventArgs a) - { - if (a.RowIndex < 0) - { - return; // Header - } - if (a.ColumnIndex != 1) - { - return; // Filter out other columns - } - - aclDataGridView.BeginEdit(true); - ComboBox comboBox = (ComboBox) aclDataGridView.EditingControl; - comboBox.DroppedDown = true; - }; - - aclDataGridView.CellBeginEdit += delegate(object sender, DataGridViewCellCancelEventArgs args) - { - if (args.ColumnIndex == 0) - { - args.Cancel = - !((InfoController.UserAndRoleEntry) - aclDataGridView.Rows[args.RowIndex].DataBoundItem). - getUser().isEditable(); - } - }; - - DataGridViewTextBoxColumn userColumn = new DataGridViewTextBoxColumn(); - userColumn.HeaderText = "Grantee"; - userColumn.DataPropertyName = AclColumnName.User.ToString(); - userColumn.DefaultCellStyle.NullValue = String.Empty; - userColumn.Name = AclColumnName.User.ToString(); - - DataGridViewComboBoxColumn rolesColumn = new DataGridViewComboBoxColumn(); - rolesColumn.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing; - rolesColumn.DataPropertyName = AclColumnName.Role.ToString(); - rolesColumn.HeaderText = "Permission"; - rolesColumn.Name = AclColumnName.Role.ToString(); - - aclDataGridView.Columns.Add(userColumn); - aclDataGridView.Columns.Add(rolesColumn); - } - - protected void ResizeForm(object sender, EventArgs e) - { - int size = 0; - foreach (ToolStripItem item in toolStrip.Items) - { - size += item.GetPreferredSize(Size.Empty).Width + item.Margin.Left + item.Margin.Right; - } - // add border - size += 20; - if (size > Width) - { - Width = size; - } - } - - private void DisableAll() - { - foreach (var item in toolStrip.Items) - { - if (item is ToolStripButton) - { - (item as ToolStripButton).Checked = false; - } - } - } - - private void generalButton_Click(object sender, EventArgs e) - { - if (!generalButton.Checked) - { - DisableAll(); - generalButton.Checked = true; - panelManager.SelectedPanel = managedGeneralPanel; - } - } - - private void permissionsButton_Click(object sender, EventArgs e) - { - if (!permissionsButton.Checked) - { - DisableAll(); - permissionsButton.Checked = true; - panelManager.SelectedPanel = managedPermissionsPanel; - } - } - - private void octalTextBox_Validated(object sender, EventArgs e) - { - OctalPermissionsChanged(); - } - - private void ownerrCheckBox_CheckStateChanged(object sender, EventArgs e) - { - OwnerReadChanged(); - } - - private void ownerwCheckBox_CheckStateChanged(object sender, EventArgs e) - { - OwnerWriteChanged(); - } - - private void ownerxCheckBox_CheckStateChanged(object sender, EventArgs e) - { - OwnerExecuteChanged(); - } - - private void grouprCheckbox_CheckStateChanged(object sender, EventArgs e) - { - GroupReadChanged(); - } - - private void groupwCheckbox_CheckStateChanged(object sender, EventArgs e) - { - GroupWriteChanged(); - } - - private void groupxCheckbox_CheckStateChanged(object sender, EventArgs e) - { - GroupExecuteChanged(); - } - - private void otherrCheckbox_CheckStateChanged(object sender, EventArgs e) - { - OtherReadChanged(); - } - - private void otherwCheckbox_CheckStateChanged(object sender, EventArgs e) - { - OtherWriteChanged(); - } - - private void otherxCheckbox_CheckStateChanged(object sender, EventArgs e) - { - OtherExecuteChanged(); - } - - private void s3Button_Click(object sender, EventArgs e) - { - if (!s3Button.Checked) - { - DisableAll(); - s3Button.Checked = true; - panelManager.SelectedPanel = managedS3Panel; - //ResizeForm(s3LayoutPanel, true); - } - } - - private void distributionButton_Click(object sender, EventArgs e) - { - if (!distributionButton.Checked) - { - DisableAll(); - distributionButton.Checked = true; - panelManager.SelectedPanel = managedDistributionPanel; - //ResizeForm(distributionLayoutPanel, true); - } - } - - private void deliveryMethodComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - DistributionDeliveryMethodChanged(); - } - - private void distributionEnableCheckBox_CheckedChanged(object sender, EventArgs e) - { - DistributionEnabledChanged(); - } - - private void distributionLoggingCheckBox_CheckedChanged(object sender, EventArgs e) - { - DistributionLoggingCheckboxChanged(); - } - - private void bucketLoggingCheckBox_CheckedChanged(object sender, EventArgs e) - { - BucketLoggingCheckboxChanged(); - } - - private void filenameTextbox_Validated(object sender, EventArgs e) - { - FilenameChanged(); - } - - private void calculateButton_Click(object sender, EventArgs e) - { - CalculateSize(); - } - - private void applyRecursivePermissionsButton_Click(object sender, EventArgs e) - { - ApplyRecursivePermissions(); - } - - private void metadataButton_Click(object sender, EventArgs e) - { - if (!metadataButton.Checked) - { - DisableAll(); - metadataButton.Checked = true; - panelManager.SelectedPanel = managedMetadataPanel; - } - } - - private void defaultRootComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - DistributionDefaultRootChanged(); - } - - private void storageClassComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - StorageClassChanged(); - } - - private void bucketVersioningCheckBox_CheckedChanged(object sender, EventArgs e) - { - BucketVersioningChanged(); - } - - private void bucketMfaCheckBox_CheckedChanged(object sender, EventArgs e) - { - BucketMfaChanged(); - } - - private void addAclContextMenuStrip_Opening(object sender, CancelEventArgs e) - { - addAclContextMenuStrip.Items[addAclContextMenuStrip.Items.Count - 1].Enabled = - aclDataGridView.SelectedRows.Count > 0; - } - - private void addMetadataContextMenuStrip_Opening(object sender, CancelEventArgs e) - { - addMetadataContextMenuStrip.Items[addMetadataContextMenuStrip.Items.Count - 1].Enabled = - metadataDataGridView.SelectedRows.Count > 0; - } - - private void distributionCnameTextBox_Validated(object sender, EventArgs e) - { - if (!distributionCnameTextBox.Text.Equals(lastCname)) - { - DistributionCnameChanged(); - } - } - - private void invalidateButton_Click(object sender, EventArgs e) - { - DistributionInvalidateObjects(); - } - - private void bucketLoggingComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - BucketLoggingPopupChanged(); - } - - private void distributionLoggingComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - DistributionLoggingPopupChanged(); - } - - private void encryptionCheckBox_CheckedChanged(object sender, EventArgs e) - { - EncryptionChanged(); - } - - private void bucketAnalyticsCheckBox_CheckedChanged(object sender, EventArgs e) - { - BucketAnalyticsCheckboxChanged(); - } - - private void distributionAnalyticsCheckBox_CheckedChanged(object sender, EventArgs e) - { - DistributionAnalyticsCheckboxChanged(); - } - - private void lifecycleTransitionCheckBox_CheckedChanged(object sender, EventArgs e) - { - LifecycleTransitionCheckboxChanged(); - } - - private void lifecycleTransitionComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - LifecycleTransitionPopupChanged(); - } - - private void lifecycleDeleteCheckBox_CheckedChanged(object sender, EventArgs e) - { - LifecycleDeleteCheckboxChanged(); - } - - private void lifecycleDeleteComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - LifecycleDeletePopupChanged(); - } - - private enum AclColumnName - { - User, - Role - } - - private enum MetadataColumName - { - Name, - Value - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Controller; +using Ch.Cyberduck.Ui.Winforms.Controls; +using ch.cyberduck.core; +using ch.cyberduck.core.cdn; +using java.lang; +using String = System.String; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class InfoForm : ToolbarBaseForm, IInfoView + { + private String lastCname; + + public InfoForm() + { + InitializeComponent(); + + Load += delegate + { + int minWidth = 10; // border etc. + foreach (ToolStripItem item in toolStrip.Items) + { + minWidth += item.Size.Width + item.Margin.Left + item.Margin.Right; + } + MinimumSize = new Size(minWidth, MinimumSize.Height); + }; + + TopMost = false; + TopLevel = true; + + toolStrip.Renderer = new FirefoxStyleRenderer(); + + ConfigureHelp(); + InitAclGrid(); + InitMetadataGrid(); + + panelManager.SelectedIndexChanged += (sender, args) => ActiveTabChanged(); + + generalButton_Click(this, EventArgs.Empty); + + LocalizationCompleted += ResizeForm; + + //some font tweaking + statusLabel.Font = DefaultFontBold; + authenticatedLabel.Font = DefaultFontBold; + AclLabel.Font = DefaultFontBold; + + whereLinkLabel.Text = String.Empty; + cnameUrlLinkLabel.Text = String.Empty; + + MaximumSize = new Size(1000, Height + 30); + } + + /// + /// Activate Double-Buffering for _all_ controls on a form + /// + /// + /// + /// + protected override CreateParams CreateParams + { + get + { + CreateParams cp = base.CreateParams; + cp.ExStyle |= 0x02000000; + return cp; + } + } + + public override ToolStrip ToolStrip + { + get { return toolStrip; } + } + + public override string[] BundleNames + { + get { return new[] {"Info"}; } + } + + public event EventHandler ShowHelp; + + public bool ToolbarDistributionEnabled + { + set { distributionButton.Enabled = value; } + } + + public bool ToolbarS3Enabled + { + set { s3Button.Enabled = value; } + } + + public Image ToolbarS3Image + { + set { s3Button.Image = value; } + } + + public String ToolbarS3Label + { + set { s3Button.Text = value; } + } + + public bool ToolbarPermissionsEnabled + { + set { permissionsButton.Enabled = value; } + } + + public bool ToolbarMetadataEnabled + { + set { metadataButton.Enabled = value; } + } + + public InfoTab ActiveTab + { + get + { + if (panelManager.SelectedPanel == managedGeneralPanel) + { + return InfoTab.General; + } + if (panelManager.SelectedPanel == managedPermissionsPanel) + { + if (panelManagerPermissions.SelectedPanel == cloudManagedPanel) + { + return InfoTab.Acl; + } + return InfoTab.Permissions; + } + if (panelManager.SelectedPanel == managedDistributionPanel) + { + return InfoTab.Distribution; + } + if (panelManager.SelectedPanel == managedS3Panel) + { + return InfoTab.S3; + } + if (panelManager.SelectedPanel == managedMetadataPanel) + { + return InfoTab.Metadata; + } + throw new IllegalArgumentException("Invalid state"); + } + set + { + if (value == InfoTab.General) + { + generalButton_Click(this, EventArgs.Empty); + } + if (value == InfoTab.Permissions || value == InfoTab.Acl) + { + //inner panel is already set + permissionsButton_Click(this, EventArgs.Empty); + } + if (value == InfoTab.Distribution) + { + distributionButton_Click(this, EventArgs.Empty); + } + if (value == InfoTab.S3) + { + s3Button_Click(this, EventArgs.Empty); + } + if (value == InfoTab.Metadata) + { + metadataButton_Click(this, EventArgs.Empty); + } + } + } + + public Image ToolbarDistributionImage + { + set { distributionButton.Image = value; } + } + + public Image FileIcon + { + set { icon.Image = value; } + } + + public string Filename + { + get { return filenameTextbox.Text; } + set + { + filenameTextbox.Text = value; + Text = String.Format("{0} - {1}", LocaleFactory.localizedString("Info", "Info"), value); + } + } + + public bool FilenameEnabled + { + set { filenameTextbox.Enabled = value; } + } + + public bool SizeButtonEnabled + { + set { calculateButton.Enabled = value; } + } + + public bool SizeAnimationActive + { + set { sizeAnimation.Visible = value; } + } + + public bool PermissionAnimationActive + { + set { permissionAnimation.Visible = value; } + } + + public string FileSize + { + set { sizeLabel.Text = value; } + } + + public string Path + { + set { pathLabel.Text = value; } + } + + public string PathToolTip + { + set { toolTip.SetToolTip(pathLabel, value); } + } + + public string WebUrl + { + set { weburlLabel.Text = value; } + } + + public string WebUrlTooltip + { + set { toolTip.SetToolTip(weburlLabel, value); } + } + + public string Kind + { + set { kindLabel.Text = value; } + } + + public string Permissions + { + set { permissionsLabel.Text = value; } + } + + public string FileOwner + { + set { ownerLabel.Text = value; } + } + + public string Group + { + set { groupLabel.Text = value; } + } + + public string FileCreated + { + set { createdLabel.Text = value; } + } + + public string Modified + { + set { modifiedLabel.Text = value; } + } + + public string Checksum + { + set { checksumTextBox.Text = value; } + } + + public bool LifecycleTransitionCheckboxEnabled + { + set { lifecycleTransitionCheckBox.Enabled = value; } + } + + public bool LifecycleDeleteCheckbox + { + get { return lifecycleDeleteCheckBox.Checked; } + set { lifecycleDeleteCheckBox.Checked = value; } + } + + public bool LifecycleDeleteCheckboxEnabled + { + set { lifecycleDeleteCheckBox.Enabled = value; } + } + + public string LifecycleTransition + { + get { return (string) lifecycleTransitionComboBox.SelectedValue; } + set { lifecycleTransitionComboBox.SelectedValue = value; } + } + + public bool LifecycleTransitionPopupEnabled + { + set { lifecycleTransitionComboBox.Enabled = value; } + } + + public string LifecycleDelete + { + get { return (string) lifecycleDeleteComboBox.SelectedValue; } + set { lifecycleDeleteComboBox.SelectedValue = value; } + } + + public bool LifecycleDeletePopupEnabled + { + set { lifecycleDeleteComboBox.Enabled = value; } + } + + public event VoidHandler FilenameChanged = delegate { }; + + public CheckState OwnerRead + { + get { return ownerrCheckBox.CheckState; } + set { ownerrCheckBox.CheckState = value; } + } + + public bool OwnerReadEnabled + { + get { return ownerrCheckBox.Enabled; } + set { ownerrCheckBox.Enabled = value; } + } + + public CheckState OwnerWrite + { + get { return ownerwCheckBox.CheckState; } + set { ownerwCheckBox.CheckState = value; } + } + + public bool OwnerWriteEnabled + { + get { return ownerwCheckBox.Enabled; } + set { ownerwCheckBox.Enabled = value; } + } + + public CheckState OwnerExecute + { + get { return ownerxCheckBox.CheckState; } + set { ownerxCheckBox.CheckState = value; } + } + + public bool OwnerExecuteEnabled + { + get { return ownerxCheckBox.Enabled; } + set { ownerxCheckBox.Enabled = value; } + } + + public CheckState GroupRead + { + get { return grouprCheckbox.CheckState; } + set { grouprCheckbox.CheckState = value; } + } + + public bool GroupReadEnabled + { + get { return grouprCheckbox.Enabled; } + set { grouprCheckbox.Enabled = value; } + } + + public CheckState GroupWrite + { + get { return groupwCheckbox.CheckState; } + set { groupwCheckbox.CheckState = value; } + } + + public bool GroupWriteEnabled + { + get { return groupwCheckbox.Enabled; } + set { groupwCheckbox.Enabled = value; } + } + + public CheckState GroupExecute + { + get { return groupxCheckbox.CheckState; } + set { groupxCheckbox.CheckState = value; } + } + + public bool GroupExecuteEnabled + { + get { return groupxCheckbox.Enabled; } + set { groupxCheckbox.Enabled = value; } + } + + public CheckState OtherRead + { + get { return otherrCheckbox.CheckState; } + set { otherrCheckbox.CheckState = value; } + } + + public bool OtherReadEnabled + { + get { return otherrCheckbox.Enabled; } + set { otherrCheckbox.Enabled = value; } + } + + public CheckState OtherWrite + { + get { return otherwCheckbox.CheckState; } + set { otherwCheckbox.CheckState = value; } + } + + public bool OtherWriteEnabled + { + get { return otherwCheckbox.Enabled; } + set { otherwCheckbox.Enabled = value; } + } + + public CheckState OtherExecute + { + get { return otherxCheckbox.CheckState; } + set { otherxCheckbox.CheckState = value; } + } + + public bool OtherExecuteEnabled + { + get { return otherxCheckbox.Enabled; } + set { otherxCheckbox.Enabled = value; } + } + + public bool RecursivePermissionsEnabled + { + set { applyRecursivePermissionsButton.Enabled = value; } + } + + public string OctalPermissions + { + get { return octalTextBox.Text; } + set { octalTextBox.Text = value; } + } + + public bool OctalPermissionsEnabled + { + set { octalTextBox.Enabled = value; } + } + + public List SelectedAclEntries + { + get + { + List selected = new List(); + DataGridViewSelectedRowCollection rows = aclDataGridView.SelectedRows; + foreach (DataGridViewRow row in rows) + { + selected.Add(row.DataBoundItem as InfoController.UserAndRoleEntry); + } + return selected; + } + } + + public bool AclPanel + { + set { panelManagerPermissions.SelectedPanel = value ? cloudManagedPanel : nonCloudManagedPanel; } + } + + public BindingList AclDataSource + { + set { aclDataGridView.DataSource = value; } + } + + public bool AclTableEnabled + { + set { aclDataGridView.Enabled = value; } + } + + public bool AclAddEnabled + { + set { addAclButton.Enabled = value; } + } + + public bool AclRemoveEnabled + { + set { addAclContextMenuStrip.Items[addAclContextMenuStrip.Items.Count - 1].Enabled = value; } + } + + public void EditAclRow(InfoController.UserAndRoleEntry aclEntry, bool selectRole) + { + foreach (DataGridViewRow row in aclDataGridView.Rows) + { + if (row.DataBoundItem == aclEntry) + { + aclDataGridView.CurrentCell = selectRole + ? row.Cells[AclColumnName.Role.ToString()] + : row.Cells[AclColumnName.User.ToString()]; + break; + } + } + aclDataGridView.BeginEdit(true); + } + + public void EditMetadataRow(InfoController.CustomHeaderEntry headerEntry, bool selectValue) + { + foreach (DataGridViewRow row in metadataDataGridView.Rows) + { + if (row.DataBoundItem == headerEntry) + { + metadataDataGridView.CurrentCell = selectValue + ? row.Cells[MetadataColumName.Value.ToString()] + : row.Cells[MetadataColumName.Name.ToString()]; + break; + } + } + metadataDataGridView.BeginEdit(true); + } + + public Distribution.Method DistributionDeliveryMethod + { + get { return (Distribution.Method) deliveryMethodComboBox.SelectedValue; } + set { deliveryMethodComboBox.SelectedValue = value; } + } + + public bool DistributionCnameUrlEnabled + { + set { cnameUrlLinkLabel.Enabled = value; } + } + + public string DistributionCnameUrlTooltip + { + set { toolTip.SetToolTip(cnameUrlLinkLabel, value); } + } + + public bool DistributionCnameEnabled + { + set { distributionCnameTextBox.Enabled = value; } + } + + public bool DistributionAnimationActive + { + set { distributionAnimation.Visible = value; } + } + + public string DistributionDefaultRoot + { + get { return (String) defaultRootComboBox.SelectedValue; } + set { defaultRootComboBox.SelectedValue = value; } + } + + public event VoidHandler CalculateSize = delegate { }; + + public void PopulateAclUsers(IDictionary users) + { + addAclContextMenuStrip.Items.Clear(); + ToolStripItem[] items = new ToolStripItem[users.Count + 1]; + + int i = 0; + foreach (KeyValuePair user in users) + { + ToolStripMenuItem item = new ToolStripMenuItem(user.Key); + KeyValuePair userDelegate = user; + item.Click += delegate { userDelegate.Value(); }; + items[i] = item; + i++; + + if ((users.Count - 1) == i) + { + items[i++] = new ToolStripSeparator(); + } + } + addAclContextMenuStrip.Items.AddRange(items); + } + + public void PopulateAclRoles(IList roles) + { + ((DataGridViewComboBoxColumn) aclDataGridView.Columns[AclColumnName.Role.ToString()]).DataSource = roles; + } + + public bool AclAnimationActive + { + set { aclAnimation.Visible = value; } + } + + public string AclUrl + { + set { authenticatedUrlLinkLabel.Text = value; } + } + + public bool AclUrlEnabled + { + set { authenticatedUrlLinkLabel.Enabled = value; } + } + + public string AclUrlTooltip + { + set { toolTip.SetToolTip(authenticatedUrlLinkLabel, value); } + } + + public event VoidHandler OwnerReadChanged = delegate { }; + public event VoidHandler OwnerWriteChanged = delegate { }; + public event VoidHandler OwnerExecuteChanged = delegate { }; + public event VoidHandler GroupReadChanged = delegate { }; + public event VoidHandler GroupWriteChanged = delegate { }; + public event VoidHandler GroupExecuteChanged = delegate { }; + public event VoidHandler OtherReadChanged = delegate { }; + public event VoidHandler OtherWriteChanged = delegate { }; + public event VoidHandler OtherExecuteChanged = delegate { }; + public event VoidHandler ApplyRecursivePermissions = delegate { }; + public event VoidHandler OctalPermissionsChanged = delegate { }; + + + public bool DistributionDefaultRootEnabled + { + set { defaultRootComboBox.Enabled = value; } + } + + public string DistributionInvalidationStatus + { + set { invalidationStatus.Text = value; } + } + + public string DistributionInvalidateObjectsTooltip + { + set { toolTip.SetToolTip(invalidateButton, value); } + } + + public bool DistributionInvalidateObjectsEnabled + { + set { invalidateButton.Enabled = value; } + } + + public void PopulateDistributionDeliveryMethod(IList> methods) + { + deliveryMethodComboBox.DataSource = null; + deliveryMethodComboBox.DataSource = methods; + deliveryMethodComboBox.DisplayMember = "Key"; + deliveryMethodComboBox.ValueMember = "Value"; + } + + public void PopulateDefaultRoot(IList> roots) + { + defaultRootComboBox.DataSource = null; + defaultRootComboBox.DataSource = roots; + defaultRootComboBox.DisplayMember = "Key"; + defaultRootComboBox.ValueMember = "Value"; + } + + public void PopulateBucketLogging(IList buckets) + { + bucketLoggingComboBox.DataSource = buckets; + } + + public void PopulateDistributionLogging(IList buckets) + { + distributionLoggingComboBox.DataSource = buckets; + } + + public void PopulateLifecycleTransitionPeriod(IList> periods) + { + lifecycleTransitionComboBox.DataSource = null; + lifecycleTransitionComboBox.DataSource = periods; + lifecycleTransitionComboBox.DisplayMember = "Key"; + lifecycleTransitionComboBox.ValueMember = "Value"; + } + + public void PopulateLifecycleDeletePeriod(IList> periods) + { + lifecycleDeleteComboBox.DataSource = null; + lifecycleDeleteComboBox.DataSource = periods; + lifecycleDeleteComboBox.DisplayMember = "Key"; + lifecycleDeleteComboBox.ValueMember = "Value"; + } + + public bool DistributionDeliveryMethodEnabled + { + set { deliveryMethodComboBox.Enabled = value; } + } + + public bool Distribution + { + get { return distributionEnableCheckBox.Checked; } + set { distributionEnableCheckBox.Checked = value; } + } + + public bool DistributionEnabled + { + set { distributionEnableCheckBox.Enabled = value; } + } + + public string DistributionTitle + { + set { distributionEnableCheckBox.Text = value; } + } + + public string DistributionStatus + { + set { statusLabel.Text = value; } + } + + public bool DistributionLoggingCheckbox + { + get { return distributionLoggingCheckBox.Checked; } + set { distributionLoggingCheckBox.Checked = value; } + } + + public bool DistributionLoggingCheckboxEnabled + { + set { distributionLoggingCheckBox.Enabled = value; } + } + + public string DistributionLoggingPopup + { + get { return distributionLoggingComboBox.Text; } + set { distributionLoggingComboBox.Text = value; } + } + + public bool DistributionLoggingPopupEnabled + { + set { distributionLoggingComboBox.Enabled = value; } + } + + public string DistributionUrl + { + set { whereLinkLabel.Text = value; } + } + + public string DistributionUrlTooltip + { + set { toolTip.SetToolTip(whereLinkLabel, value); } + } + + public bool DistributionUrlEnabled + { + set { whereLinkLabel.Enabled = value; } + } + + public string DistributionOrigin + { + set { originLinkLabel.Text = value; } + } + + public string DistributionCname + { + get { return distributionCnameTextBox.Text; } + set + { + distributionCnameTextBox.Text = value; + lastCname = value; + } + } + + public string DistributionCnameUrl + { + set { cnameUrlLinkLabel.Text = value; } + } + + public event VoidHandler DistributionDeliveryMethodChanged = delegate { }; + public event VoidHandler DistributionEnabledChanged = delegate { }; + public event VoidHandler DistributionLoggingCheckboxChanged = delegate { }; + public event VoidHandler DistributionLoggingPopupChanged = delegate { }; + public event VoidHandler DistributionCnameChanged = delegate { }; + public event VoidHandler DistributionInvalidateObjects = delegate { }; + + public void PopulateStorageClass(IList> classes) + { + storageClassComboBox.DataSource = null; + storageClassComboBox.DataSource = classes; + storageClassComboBox.DisplayMember = "Key"; + storageClassComboBox.ValueMember = "Value"; + } + + public string BucketLocation + { + set { bucketLocationLabel.Text = value; } + } + + public bool Encryption + { + set { encryptionCheckBox.Checked = value; } + get { return encryptionCheckBox.Checked; } + } + + public bool EncryptionEnabled + { + get { return encryptionCheckBox.Enabled; } + set { encryptionCheckBox.Enabled = value; } + } + + public string StorageClass + { + get { return (string) storageClassComboBox.SelectedValue; } + set { storageClassComboBox.SelectedValue = value; } + } + + public bool StorageClassEnabled + { + set { storageClassComboBox.Enabled = value; } + } + + public string BucketLoggingPopup + { + get { return bucketLoggingComboBox.Text; } + set { bucketLoggingComboBox.Text = value; } + } + + public bool BucketLoggingPopupEnabled + { + set { bucketLoggingComboBox.Enabled = value; } + } + + public string S3PublicUrl + { + set { s3PublicUrlLinkLabel.Text = value; } + } + + public bool S3PublicUrlEnabled + { + set { s3PublicUrlLinkLabel.Enabled = value; } + } + + public string S3PublicUrlValidity + { + set { s3PublicUrlValidityLabel.Text = value; } + } + + public string S3TorrentUrl + { + set { s3TorrentUrlLinkLabel.Text = value; } + } + + public bool S3TorrentUrlEnabled + { + set { s3TorrentUrlLinkLabel.Enabled = value; } + } + + public string S3PublicUrlTooltip + { + set { toolTip.SetToolTip(s3PublicUrlLinkLabel, value); } + } + + public string S3TorrentUrlTooltip + { + set { toolTip.SetToolTip(s3TorrentUrlLinkLabel, value); } + } + + public bool S3AnimationActive + { + set { s3Animation.Visible = value; } + } + + public bool BucketLoggingCheckbox + { + get { return bucketLoggingCheckBox.Checked; } + set { bucketLoggingCheckBox.Checked = value; } + } + + public string BucketLoggingTooltip + { + set { toolTip.SetToolTip(bucketLoggingCheckBox, value); } + } + + public bool BucketLoggingCheckboxEnabled + { + set { bucketLoggingCheckBox.Enabled = value; } + } + + public bool BucketAnalyticsCheckbox + { + get { return bucketAnalyticsCheckBox.Checked; } + set { bucketAnalyticsCheckBox.Checked = value; } + } + + public bool BucketAnalyticsCheckboxEnabled + { + set { bucketAnalyticsCheckBox.Enabled = value; } + } + + public string BucketAnalyticsSetupUrl + { + set { bucketAnalyticsSetupUrlLinkLabel.Text = value; } + } + + public bool BucketAnalyticsSetupUrlEnabled + { + set { bucketAnalyticsSetupUrlLinkLabel.Enabled = value; } + } + + public bool BucketVersioning + { + get { return bucketVersioningCheckBox.Checked; } + set { bucketVersioningCheckBox.Checked = value; } + } + + public bool BucketVersioningEnabled + { + set { bucketVersioningCheckBox.Enabled = value; } + } + + public bool BucketMfa + { + set { bucketMfaCheckBox.Checked = value; } + get { return bucketMfaCheckBox.Checked; } + } + + public bool BucketMfaEnabled + { + set { bucketMfaCheckBox.Enabled = value; } + } + + public bool LifecycleTransitionCheckbox + { + get { return lifecycleTransitionCheckBox.Checked; } + set { lifecycleTransitionCheckBox.Checked = value; } + } + + public event VoidHandler BucketLoggingCheckboxChanged = delegate { }; + public event VoidHandler BucketLoggingPopupChanged = delegate { }; + public event VoidHandler EncryptionChanged = delegate { }; + public event VoidHandler StorageClassChanged = delegate { }; + public event VoidHandler BucketVersioningChanged = delegate { }; + public event VoidHandler BucketMfaChanged = delegate { }; + public event VoidHandler LifecycleTransitionCheckboxChanged = delegate { }; + public event VoidHandler LifecycleTransitionPopupChanged = delegate { }; + public event VoidHandler LifecycleDeleteCheckboxChanged = delegate { }; + public event VoidHandler LifecycleDeletePopupChanged = delegate { }; + public event VoidHandler ActiveTabChanged = delegate { }; + public event VoidHandler BucketAnalyticsCheckboxChanged = delegate { }; + public event VoidHandler DistributionAnalyticsCheckboxChanged = delegate { }; + + public bool DistributionAnalyticsCheckbox + { + get { return distributionAnalyticsCheckBox.Checked; } + set { distributionAnalyticsCheckBox.Checked = value; } + } + + public bool DistributionAnalyticsCheckboxEnabled + { + set { distributionAnalyticsCheckBox.Enabled = value; } + } + + public string DistributionAnalyticsSetupUrl + { + set { distributionAnalyticsSetupUrlLinkLabel.Text = value; } + } + + public bool DistributionAnalyticsSetupUrlEnabled + { + set { distributionAnalyticsSetupUrlLinkLabel.Enabled = value; } + } + + public bool MetadataTableEnabled + { + set { metadataDataGridView.Enabled = value; } + } + + public bool MetadataAddEnabled + { + set { addHeaderButton.Enabled = value; } + } + + public bool MetadataRemoveEnabled + { + set { addMetadataContextMenuStrip.Items[addMetadataContextMenuStrip.Items.Count - 1].Enabled = value; } + } + + public bool MetadataAnimationActive + { + set { metadataAnimation.Visible = value; } + } + + public BindingList MetadataDataSource + { + set { metadataDataGridView.DataSource = value; } + } + + public void PopulateMetadata(IDictionary metadata) + { + addMetadataContextMenuStrip.Items.Clear(); + ToolStripItem[] items = new ToolStripItem[metadata.Count + 2]; + + int i = 0; + foreach (KeyValuePair header in metadata) + { + ToolStripMenuItem item = new ToolStripMenuItem(header.Key); + KeyValuePair header1 = header; + item.Click += delegate { header1.Value(); }; + items[i] = item; + i++; + + if (1 == i || (metadata.Count) == i) + { + items[i++] = new ToolStripSeparator(); + } + } + addMetadataContextMenuStrip.Items.AddRange(items); + } + + public List SelectedMetadataEntries + { + get + { + List selected = new List(); + DataGridViewSelectedRowCollection rows = metadataDataGridView.SelectedRows; + foreach (DataGridViewRow row in rows) + { + selected.Add((InfoController.CustomHeaderEntry) row.DataBoundItem); + } + return selected; + } + } + + public event VoidHandler DistributionDefaultRootChanged = delegate { }; + + private void InitMetadataGrid() + { + metadataDataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + metadataDataGridView.MultiSelect = true; + metadataDataGridView.RowHeadersVisible = false; + metadataDataGridView.AutoGenerateColumns = false; + metadataDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + metadataDataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; + + DataGridViewTextBoxColumn nameColumn = new DataGridViewTextBoxColumn(); + nameColumn.HeaderText = "Name"; + nameColumn.DataPropertyName = MetadataColumName.Name.ToString(); + nameColumn.Name = MetadataColumName.Name.ToString(); + + DataGridViewTextBoxColumn valueColumn = new DataGridViewTextBoxColumn(); + valueColumn.DataPropertyName = MetadataColumName.Value.ToString(); + valueColumn.HeaderText = "Value"; + valueColumn.Name = MetadataColumName.Value.ToString(); + + metadataDataGridView.Columns.Add(nameColumn); + metadataDataGridView.Columns.Add(valueColumn); + } + + private void HandleHelpRequest() + { + ManagedPanel selected = panelManager.SelectedPanel; + if (selected == managedGeneralPanel) + { + ShowHelp(this, new InfoHelpArgs(InfoHelpArgs.Context.General)); + } + if (selected == managedPermissionsPanel) + { + ShowHelp(this, new InfoHelpArgs(InfoHelpArgs.Context.Permissions)); + } + if (selected == managedMetadataPanel) + { + ShowHelp(this, new InfoHelpArgs(InfoHelpArgs.Context.Metdadata)); + } + if (selected == managedDistributionPanel) + { + ShowHelp(this, new InfoHelpArgs(InfoHelpArgs.Context.Cdn)); + } + if (selected == managedS3Panel) + { + ShowHelp(this, new InfoHelpArgs(InfoHelpArgs.Context.S3)); + } + } + + private void ConfigureHelp() + { + HelpButtonClicked += (sender, args) => HandleHelpRequest(); + HelpRequested += (sender, hlpevent) => HandleHelpRequest(); + } + + private void InitAclGrid() + { + aclDataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + aclDataGridView.MultiSelect = true; + aclDataGridView.RowHeadersVisible = false; + aclDataGridView.AutoGenerateColumns = false; + aclDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + aclDataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; + + aclDataGridView.CellFormatting += delegate(object sender, DataGridViewCellFormattingEventArgs args) + { + if (null != aclDataGridView.DataSource) + { + if (aclDataGridView.IsCurrentCellInEditMode || + args.ColumnIndex != 0) + { + return; + } + if (String.IsNullOrEmpty(args.Value as String)) + { + args.Value = + ((InfoController.UserAndRoleEntry) + aclDataGridView.Rows[args.RowIndex].DataBoundItem). + getUser().getPlaceholder(); + args.CellStyle.ForeColor = Color.Gray; + args.CellStyle.Font = new Font(args.CellStyle.Font, + FontStyle.Italic); + } + } + }; + + + //make combobox directly editable without multiple clicks + aclDataGridView.CellClick += delegate(object o, DataGridViewCellEventArgs a) + { + if (a.RowIndex < 0) + { + return; // Header + } + if (a.ColumnIndex != 1) + { + return; // Filter out other columns + } + + aclDataGridView.BeginEdit(true); + ComboBox comboBox = (ComboBox) aclDataGridView.EditingControl; + comboBox.DroppedDown = true; + }; + + aclDataGridView.CellBeginEdit += delegate(object sender, DataGridViewCellCancelEventArgs args) + { + if (args.ColumnIndex == 0) + { + args.Cancel = + !((InfoController.UserAndRoleEntry) + aclDataGridView.Rows[args.RowIndex].DataBoundItem). + getUser().isEditable(); + } + }; + + DataGridViewTextBoxColumn userColumn = new DataGridViewTextBoxColumn(); + userColumn.HeaderText = "Grantee"; + userColumn.DataPropertyName = AclColumnName.User.ToString(); + userColumn.DefaultCellStyle.NullValue = String.Empty; + userColumn.Name = AclColumnName.User.ToString(); + + DataGridViewComboBoxColumn rolesColumn = new DataGridViewComboBoxColumn(); + rolesColumn.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing; + rolesColumn.DataPropertyName = AclColumnName.Role.ToString(); + rolesColumn.HeaderText = "Permission"; + rolesColumn.Name = AclColumnName.Role.ToString(); + + aclDataGridView.Columns.Add(userColumn); + aclDataGridView.Columns.Add(rolesColumn); + } + + protected void ResizeForm(object sender, EventArgs e) + { + int size = 0; + foreach (ToolStripItem item in toolStrip.Items) + { + size += item.GetPreferredSize(Size.Empty).Width + item.Margin.Left + item.Margin.Right; + } + // add border + size += 20; + if (size > Width) + { + Width = size; + } + } + + private void DisableAll() + { + foreach (var item in toolStrip.Items) + { + if (item is ToolStripButton) + { + (item as ToolStripButton).Checked = false; + } + } + } + + private void generalButton_Click(object sender, EventArgs e) + { + if (!generalButton.Checked) + { + DisableAll(); + generalButton.Checked = true; + panelManager.SelectedPanel = managedGeneralPanel; + } + } + + private void permissionsButton_Click(object sender, EventArgs e) + { + if (!permissionsButton.Checked) + { + DisableAll(); + permissionsButton.Checked = true; + panelManager.SelectedPanel = managedPermissionsPanel; + } + } + + private void octalTextBox_Validated(object sender, EventArgs e) + { + OctalPermissionsChanged(); + } + + private void ownerrCheckBox_CheckStateChanged(object sender, EventArgs e) + { + OwnerReadChanged(); + } + + private void ownerwCheckBox_CheckStateChanged(object sender, EventArgs e) + { + OwnerWriteChanged(); + } + + private void ownerxCheckBox_CheckStateChanged(object sender, EventArgs e) + { + OwnerExecuteChanged(); + } + + private void grouprCheckbox_CheckStateChanged(object sender, EventArgs e) + { + GroupReadChanged(); + } + + private void groupwCheckbox_CheckStateChanged(object sender, EventArgs e) + { + GroupWriteChanged(); + } + + private void groupxCheckbox_CheckStateChanged(object sender, EventArgs e) + { + GroupExecuteChanged(); + } + + private void otherrCheckbox_CheckStateChanged(object sender, EventArgs e) + { + OtherReadChanged(); + } + + private void otherwCheckbox_CheckStateChanged(object sender, EventArgs e) + { + OtherWriteChanged(); + } + + private void otherxCheckbox_CheckStateChanged(object sender, EventArgs e) + { + OtherExecuteChanged(); + } + + private void s3Button_Click(object sender, EventArgs e) + { + if (!s3Button.Checked) + { + DisableAll(); + s3Button.Checked = true; + panelManager.SelectedPanel = managedS3Panel; + //ResizeForm(s3LayoutPanel, true); + } + } + + private void distributionButton_Click(object sender, EventArgs e) + { + if (!distributionButton.Checked) + { + DisableAll(); + distributionButton.Checked = true; + panelManager.SelectedPanel = managedDistributionPanel; + //ResizeForm(distributionLayoutPanel, true); + } + } + + private void deliveryMethodComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + DistributionDeliveryMethodChanged(); + } + + private void distributionEnableCheckBox_CheckedChanged(object sender, EventArgs e) + { + DistributionEnabledChanged(); + } + + private void distributionLoggingCheckBox_CheckedChanged(object sender, EventArgs e) + { + DistributionLoggingCheckboxChanged(); + } + + private void bucketLoggingCheckBox_CheckedChanged(object sender, EventArgs e) + { + BucketLoggingCheckboxChanged(); + } + + private void filenameTextbox_Validated(object sender, EventArgs e) + { + FilenameChanged(); + } + + private void calculateButton_Click(object sender, EventArgs e) + { + CalculateSize(); + } + + private void applyRecursivePermissionsButton_Click(object sender, EventArgs e) + { + ApplyRecursivePermissions(); + } + + private void metadataButton_Click(object sender, EventArgs e) + { + if (!metadataButton.Checked) + { + DisableAll(); + metadataButton.Checked = true; + panelManager.SelectedPanel = managedMetadataPanel; + } + } + + private void defaultRootComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + DistributionDefaultRootChanged(); + } + + private void storageClassComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + StorageClassChanged(); + } + + private void bucketVersioningCheckBox_CheckedChanged(object sender, EventArgs e) + { + BucketVersioningChanged(); + } + + private void bucketMfaCheckBox_CheckedChanged(object sender, EventArgs e) + { + BucketMfaChanged(); + } + + private void addAclContextMenuStrip_Opening(object sender, CancelEventArgs e) + { + addAclContextMenuStrip.Items[addAclContextMenuStrip.Items.Count - 1].Enabled = + aclDataGridView.SelectedRows.Count > 0; + } + + private void addMetadataContextMenuStrip_Opening(object sender, CancelEventArgs e) + { + addMetadataContextMenuStrip.Items[addMetadataContextMenuStrip.Items.Count - 1].Enabled = + metadataDataGridView.SelectedRows.Count > 0; + } + + private void distributionCnameTextBox_Validated(object sender, EventArgs e) + { + if (!distributionCnameTextBox.Text.Equals(lastCname)) + { + DistributionCnameChanged(); + } + } + + private void invalidateButton_Click(object sender, EventArgs e) + { + DistributionInvalidateObjects(); + } + + private void bucketLoggingComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + BucketLoggingPopupChanged(); + } + + private void distributionLoggingComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + DistributionLoggingPopupChanged(); + } + + private void encryptionCheckBox_CheckedChanged(object sender, EventArgs e) + { + EncryptionChanged(); + } + + private void bucketAnalyticsCheckBox_CheckedChanged(object sender, EventArgs e) + { + BucketAnalyticsCheckboxChanged(); + } + + private void distributionAnalyticsCheckBox_CheckedChanged(object sender, EventArgs e) + { + DistributionAnalyticsCheckboxChanged(); + } + + private void lifecycleTransitionCheckBox_CheckedChanged(object sender, EventArgs e) + { + LifecycleTransitionCheckboxChanged(); + } + + private void lifecycleTransitionComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + LifecycleTransitionPopupChanged(); + } + + private void lifecycleDeleteCheckBox_CheckedChanged(object sender, EventArgs e) + { + LifecycleDeleteCheckboxChanged(); + } + + private void lifecycleDeleteComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + LifecycleDeletePopupChanged(); + } + + private enum AclColumnName + { + User, + Role + } + + private enum MetadataColumName + { + Name, + Value + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/InfoForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/InfoForm.resx similarity index 98% rename from source/ch/cyberduck/ui/winforms/InfoForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/InfoForm.resx index dce3f94c27..2468f8a542 100644 --- a/source/ch/cyberduck/ui/winforms/InfoForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/InfoForm.resx @@ -1,132 +1,132 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 17, 17 - - - 115, 17 - - - 393, 17 - - - 205, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + + 115, 17 + + + 393, 17 + + + 205, 17 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/LoginForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/LoginForm.Designer.cs similarity index 98% rename from source/ch/cyberduck/ui/winforms/LoginForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/LoginForm.Designer.cs index 15d9493dbd..7b24b2d177 100644 --- a/source/ch/cyberduck/ui/winforms/LoginForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/LoginForm.Designer.cs @@ -1,282 +1,282 @@ -using System; -using System.Drawing; -using Ch.Cyberduck.Ui.Winforms.Controls; - -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class LoginForm - { - /// - /// 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.openFileDialog = new System.Windows.Forms.OpenFileDialog(); - this.loginButton = new System.Windows.Forms.Button(); - this.cancelButton = new System.Windows.Forms.Button(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.labelUsername = new System.Windows.Forms.Label(); - this.textBoxUsername = new System.Windows.Forms.TextBox(); - this.checkBoxPkAuthentication = new System.Windows.Forms.CheckBox(); - this.labelPassword = new System.Windows.Forms.Label(); - this.checkBoxAnonymous = new System.Windows.Forms.CheckBox(); - this.textBoxPassword = new System.Windows.Forms.TextBox(); - this.pkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); - this.diskPictureBox = new System.Windows.Forms.PictureBox(); - this.checkBoxSavePassword = new System.Windows.Forms.CheckBox(); - this.labelMessageLabel = new System.Windows.Forms.Label(); - this.labelMessageLink = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); - this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.diskPictureBox)).BeginInit(); - this.SuspendLayout(); - // - // loginButton - // - this.loginButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.loginButton.AutoSize = true; - this.loginButton.DialogResult = System.Windows.Forms.DialogResult.OK; - this.loginButton.Location = new System.Drawing.Point(371, 198); - this.loginButton.Name = "loginButton"; - this.loginButton.Size = new System.Drawing.Size(50, 27); - this.loginButton.TabIndex = 7; - this.loginButton.Text = "Login"; - this.loginButton.UseVisualStyleBackColor = true; - // - // cancelButton - // - this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.cancelButton.AutoSize = true; - this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancelButton.Location = new System.Drawing.Point(427, 198); - this.cancelButton.Name = "cancelButton"; - this.cancelButton.Size = new System.Drawing.Size(58, 27); - this.cancelButton.TabIndex = 8; - this.cancelButton.Text = "Cancel"; - this.cancelButton.UseVisualStyleBackColor = true; - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.AutoSize = true; - this.tableLayoutPanel1.ColumnCount = 5; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 82F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.cancelButton, 4, 6); - this.tableLayoutPanel1.Controls.Add(this.labelUsername, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.textBoxUsername, 2, 1); - this.tableLayoutPanel1.Controls.Add(this.checkBoxPkAuthentication, 2, 4); - this.tableLayoutPanel1.Controls.Add(this.labelPassword, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.checkBoxAnonymous, 2, 3); - this.tableLayoutPanel1.Controls.Add(this.textBoxPassword, 2, 2); - this.tableLayoutPanel1.Controls.Add(this.pkLabel, 2, 5); - this.tableLayoutPanel1.Controls.Add(this.loginButton, 3, 6); - this.tableLayoutPanel1.Controls.Add(this.diskPictureBox, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.checkBoxSavePassword, 0, 6); - this.tableLayoutPanel1.Controls.Add(this.labelMessageLabel, 1, 3); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel1.RowCount = 7; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(498, 238); - this.tableLayoutPanel1.TabIndex = 10; - // - // labelUsername - // - this.labelUsername.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelUsername.AutoSize = true; - this.labelUsername.Location = new System.Drawing.Point(100, 52); - this.labelUsername.Name = "labelUsername"; - this.labelUsername.Size = new System.Drawing.Size(63, 15); - this.labelUsername.TabIndex = 0; - this.labelUsername.Text = "Username:"; - this.labelUsername.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // textBoxUsername - // - this.textBoxUsername.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel1.SetColumnSpan(this.textBoxUsername, 3); - this.textBoxUsername.Location = new System.Drawing.Point(169, 48); - this.textBoxUsername.Name = "textBoxUsername"; - this.textBoxUsername.Size = new System.Drawing.Size(316, 23); - this.textBoxUsername.TabIndex = 1; - this.textBoxUsername.TextChanged += new System.EventHandler(this.textBoxUsername_TextChanged); - // - // checkBoxPkAuthentication - // - this.checkBoxPkAuthentication.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBoxPkAuthentication, 3); - this.checkBoxPkAuthentication.Location = new System.Drawing.Point(169, 131); - this.checkBoxPkAuthentication.Name = "checkBoxPkAuthentication"; - this.checkBoxPkAuthentication.Size = new System.Drawing.Size(185, 19); - this.checkBoxPkAuthentication.TabIndex = 6; - this.checkBoxPkAuthentication.Text = "Use Public Key Authentication"; - this.checkBoxPkAuthentication.UseVisualStyleBackColor = true; - this.checkBoxPkAuthentication.CheckedChanged += new System.EventHandler(this.checkBoxPkAuthentication_CheckedChanged); - // - // labelPassword - // - this.labelPassword.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.labelPassword.AutoSize = true; - this.labelPassword.Location = new System.Drawing.Point(103, 81); - this.labelPassword.Name = "labelPassword"; - this.labelPassword.Size = new System.Drawing.Size(60, 15); - this.labelPassword.TabIndex = 2; - this.labelPassword.Text = "Password:"; - this.labelPassword.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // checkBoxAnonymous - // - this.checkBoxAnonymous.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBoxAnonymous, 3); - this.checkBoxAnonymous.Location = new System.Drawing.Point(169, 106); - this.checkBoxAnonymous.Name = "checkBoxAnonymous"; - this.checkBoxAnonymous.Size = new System.Drawing.Size(124, 19); - this.checkBoxAnonymous.TabIndex = 5; - this.checkBoxAnonymous.Text = "Anonymous Login"; - this.checkBoxAnonymous.UseVisualStyleBackColor = true; - this.checkBoxAnonymous.CheckedChanged += new System.EventHandler(this.checkBoxAnonymous_CheckedChanged); - // - // textBoxPassword - // - this.textBoxPassword.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel1.SetColumnSpan(this.textBoxPassword, 3); - this.textBoxPassword.Location = new System.Drawing.Point(169, 77); - this.textBoxPassword.Name = "textBoxPassword"; - this.textBoxPassword.Size = new System.Drawing.Size(316, 23); - this.textBoxPassword.TabIndex = 3; - this.textBoxPassword.UseSystemPasswordChar = true; - this.textBoxPassword.TextChanged += new System.EventHandler(this.textBoxPassword_TextChanged); - // - // pkLabel - // - this.pkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.pkLabel.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.pkLabel, 3); - this.pkLabel.Location = new System.Drawing.Point(186, 153); - this.pkLabel.Margin = new System.Windows.Forms.Padding(20, 0, 3, 0); - this.pkLabel.MinimumSize = new System.Drawing.Size(0, 30); - this.pkLabel.Name = "pkLabel"; - this.pkLabel.Size = new System.Drawing.Size(299, 30); - this.pkLabel.TabIndex = 10; - this.pkLabel.Text = "No private key selected"; - // - // diskPictureBox - // - this.diskPictureBox.Location = new System.Drawing.Point(13, 13); - this.diskPictureBox.MinimumSize = new System.Drawing.Size(55, 55); - this.diskPictureBox.Name = "diskPictureBox"; - this.tableLayoutPanel1.SetRowSpan(this.diskPictureBox, 5); - this.diskPictureBox.Size = new System.Drawing.Size(55, 55); - this.diskPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; - this.diskPictureBox.TabIndex = 11; - this.diskPictureBox.TabStop = false; - // - // checkBoxSavePassword - // - this.checkBoxSavePassword.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.checkBoxSavePassword.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBoxSavePassword, 3); - this.checkBoxSavePassword.Location = new System.Drawing.Point(13, 206); - this.checkBoxSavePassword.Name = "checkBoxSavePassword"; - this.checkBoxSavePassword.Size = new System.Drawing.Size(103, 19); - this.checkBoxSavePassword.TabIndex = 4; - this.checkBoxSavePassword.Text = "Save password"; - this.checkBoxSavePassword.UseVisualStyleBackColor = true; - this.checkBoxSavePassword.CheckedChanged += new System.EventHandler(this.checkBoxSavePassword_CheckedChanged); - // - // labelMessageLabel - // - this.labelMessageLabel.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelMessageLabel.Location = new System.Drawing.Point(95, 103); - this.labelMessageLabel.Name = "labelMessageLabel"; - this.labelMessageLabel.Size = new System.Drawing.Size(68, 25); - this.labelMessageLabel.TabIndex = 12; - this.labelMessageLabel.Text = "label1"; - // - // labelMessageLink - // - this.labelMessageLink.AutoEllipsis = true; - this.labelMessageLink.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelMessageLink.Location = new System.Drawing.Point(92, 10); - this.labelMessageLink.Margin = new System.Windows.Forms.Padding(0); - this.labelMessageLink.Name = "labelMessageLink"; - this.labelMessageLink.Size = new System.Drawing.Size(396, 35); - this.labelMessageLink.TabIndex = 9; - this.labelMessageLink.TabStop = true; - this.labelMessageLink.Text = "label1"; - // - // LoginForm - // - this.AcceptButton = this.loginButton; - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.AutoSize = true; - this.CancelButton = this.cancelButton; - this.ClientSize = new System.Drawing.Size(498, 238); - this.Controls.Add(this.tableLayoutPanel1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.Name = "LoginForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Login"; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.diskPictureBox)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label labelUsername; - private System.Windows.Forms.TextBox textBoxUsername; - private System.Windows.Forms.Label labelPassword; - private System.Windows.Forms.TextBox textBoxPassword; - private System.Windows.Forms.CheckBox checkBoxSavePassword; - private System.Windows.Forms.CheckBox checkBoxAnonymous; - private System.Windows.Forms.CheckBox checkBoxPkAuthentication; - private System.Windows.Forms.Button loginButton; - private System.Windows.Forms.Button cancelButton; - private ClickLinkLabel labelMessageLink; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private EllipsisLabel pkLabel; - private System.Windows.Forms.OpenFileDialog openFileDialog; - private System.Windows.Forms.PictureBox diskPictureBox; - private System.Windows.Forms.Label labelMessageLabel; - } +using System; +using System.Drawing; +using Ch.Cyberduck.Ui.Winforms.Controls; + +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class LoginForm + { + /// + /// 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.openFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.loginButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.labelUsername = new System.Windows.Forms.Label(); + this.textBoxUsername = new System.Windows.Forms.TextBox(); + this.checkBoxPkAuthentication = new System.Windows.Forms.CheckBox(); + this.labelPassword = new System.Windows.Forms.Label(); + this.checkBoxAnonymous = new System.Windows.Forms.CheckBox(); + this.textBoxPassword = new System.Windows.Forms.TextBox(); + this.pkLabel = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); + this.diskPictureBox = new System.Windows.Forms.PictureBox(); + this.checkBoxSavePassword = new System.Windows.Forms.CheckBox(); + this.labelMessageLabel = new System.Windows.Forms.Label(); + this.labelMessageLink = new Ch.Cyberduck.Ui.Winforms.Controls.ClickLinkLabel(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.diskPictureBox)).BeginInit(); + this.SuspendLayout(); + // + // loginButton + // + this.loginButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.loginButton.AutoSize = true; + this.loginButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.loginButton.Location = new System.Drawing.Point(371, 198); + this.loginButton.Name = "loginButton"; + this.loginButton.Size = new System.Drawing.Size(50, 27); + this.loginButton.TabIndex = 7; + this.loginButton.Text = "Login"; + this.loginButton.UseVisualStyleBackColor = true; + // + // cancelButton + // + this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.cancelButton.AutoSize = true; + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(427, 198); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(58, 27); + this.cancelButton.TabIndex = 8; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.AutoSize = true; + this.tableLayoutPanel1.ColumnCount = 5; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 82F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.cancelButton, 4, 6); + this.tableLayoutPanel1.Controls.Add(this.labelUsername, 1, 1); + this.tableLayoutPanel1.Controls.Add(this.textBoxUsername, 2, 1); + this.tableLayoutPanel1.Controls.Add(this.checkBoxPkAuthentication, 2, 4); + this.tableLayoutPanel1.Controls.Add(this.labelPassword, 1, 2); + this.tableLayoutPanel1.Controls.Add(this.checkBoxAnonymous, 2, 3); + this.tableLayoutPanel1.Controls.Add(this.textBoxPassword, 2, 2); + this.tableLayoutPanel1.Controls.Add(this.pkLabel, 2, 5); + this.tableLayoutPanel1.Controls.Add(this.loginButton, 3, 6); + this.tableLayoutPanel1.Controls.Add(this.diskPictureBox, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.checkBoxSavePassword, 0, 6); + this.tableLayoutPanel1.Controls.Add(this.labelMessageLabel, 1, 3); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10); + this.tableLayoutPanel1.RowCount = 7; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(498, 238); + this.tableLayoutPanel1.TabIndex = 10; + // + // labelUsername + // + this.labelUsername.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelUsername.AutoSize = true; + this.labelUsername.Location = new System.Drawing.Point(100, 52); + this.labelUsername.Name = "labelUsername"; + this.labelUsername.Size = new System.Drawing.Size(63, 15); + this.labelUsername.TabIndex = 0; + this.labelUsername.Text = "Username:"; + this.labelUsername.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // textBoxUsername + // + this.textBoxUsername.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.textBoxUsername, 3); + this.textBoxUsername.Location = new System.Drawing.Point(169, 48); + this.textBoxUsername.Name = "textBoxUsername"; + this.textBoxUsername.Size = new System.Drawing.Size(316, 23); + this.textBoxUsername.TabIndex = 1; + this.textBoxUsername.TextChanged += new System.EventHandler(this.textBoxUsername_TextChanged); + // + // checkBoxPkAuthentication + // + this.checkBoxPkAuthentication.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.checkBoxPkAuthentication, 3); + this.checkBoxPkAuthentication.Location = new System.Drawing.Point(169, 131); + this.checkBoxPkAuthentication.Name = "checkBoxPkAuthentication"; + this.checkBoxPkAuthentication.Size = new System.Drawing.Size(185, 19); + this.checkBoxPkAuthentication.TabIndex = 6; + this.checkBoxPkAuthentication.Text = "Use Public Key Authentication"; + this.checkBoxPkAuthentication.UseVisualStyleBackColor = true; + this.checkBoxPkAuthentication.CheckedChanged += new System.EventHandler(this.checkBoxPkAuthentication_CheckedChanged); + // + // labelPassword + // + this.labelPassword.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.labelPassword.AutoSize = true; + this.labelPassword.Location = new System.Drawing.Point(103, 81); + this.labelPassword.Name = "labelPassword"; + this.labelPassword.Size = new System.Drawing.Size(60, 15); + this.labelPassword.TabIndex = 2; + this.labelPassword.Text = "Password:"; + this.labelPassword.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // checkBoxAnonymous + // + this.checkBoxAnonymous.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.checkBoxAnonymous, 3); + this.checkBoxAnonymous.Location = new System.Drawing.Point(169, 106); + this.checkBoxAnonymous.Name = "checkBoxAnonymous"; + this.checkBoxAnonymous.Size = new System.Drawing.Size(124, 19); + this.checkBoxAnonymous.TabIndex = 5; + this.checkBoxAnonymous.Text = "Anonymous Login"; + this.checkBoxAnonymous.UseVisualStyleBackColor = true; + this.checkBoxAnonymous.CheckedChanged += new System.EventHandler(this.checkBoxAnonymous_CheckedChanged); + // + // textBoxPassword + // + this.textBoxPassword.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.textBoxPassword, 3); + this.textBoxPassword.Location = new System.Drawing.Point(169, 77); + this.textBoxPassword.Name = "textBoxPassword"; + this.textBoxPassword.Size = new System.Drawing.Size(316, 23); + this.textBoxPassword.TabIndex = 3; + this.textBoxPassword.UseSystemPasswordChar = true; + this.textBoxPassword.TextChanged += new System.EventHandler(this.textBoxPassword_TextChanged); + // + // pkLabel + // + this.pkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pkLabel.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.pkLabel, 3); + this.pkLabel.Location = new System.Drawing.Point(186, 153); + this.pkLabel.Margin = new System.Windows.Forms.Padding(20, 0, 3, 0); + this.pkLabel.MinimumSize = new System.Drawing.Size(0, 30); + this.pkLabel.Name = "pkLabel"; + this.pkLabel.Size = new System.Drawing.Size(299, 30); + this.pkLabel.TabIndex = 10; + this.pkLabel.Text = "No private key selected"; + // + // diskPictureBox + // + this.diskPictureBox.Location = new System.Drawing.Point(13, 13); + this.diskPictureBox.MinimumSize = new System.Drawing.Size(55, 55); + this.diskPictureBox.Name = "diskPictureBox"; + this.tableLayoutPanel1.SetRowSpan(this.diskPictureBox, 5); + this.diskPictureBox.Size = new System.Drawing.Size(55, 55); + this.diskPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.diskPictureBox.TabIndex = 11; + this.diskPictureBox.TabStop = false; + // + // checkBoxSavePassword + // + this.checkBoxSavePassword.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.checkBoxSavePassword.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.checkBoxSavePassword, 3); + this.checkBoxSavePassword.Location = new System.Drawing.Point(13, 206); + this.checkBoxSavePassword.Name = "checkBoxSavePassword"; + this.checkBoxSavePassword.Size = new System.Drawing.Size(103, 19); + this.checkBoxSavePassword.TabIndex = 4; + this.checkBoxSavePassword.Text = "Save password"; + this.checkBoxSavePassword.UseVisualStyleBackColor = true; + this.checkBoxSavePassword.CheckedChanged += new System.EventHandler(this.checkBoxSavePassword_CheckedChanged); + // + // labelMessageLabel + // + this.labelMessageLabel.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelMessageLabel.Location = new System.Drawing.Point(95, 103); + this.labelMessageLabel.Name = "labelMessageLabel"; + this.labelMessageLabel.Size = new System.Drawing.Size(68, 25); + this.labelMessageLabel.TabIndex = 12; + this.labelMessageLabel.Text = "label1"; + // + // labelMessageLink + // + this.labelMessageLink.AutoEllipsis = true; + this.labelMessageLink.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelMessageLink.Location = new System.Drawing.Point(92, 10); + this.labelMessageLink.Margin = new System.Windows.Forms.Padding(0); + this.labelMessageLink.Name = "labelMessageLink"; + this.labelMessageLink.Size = new System.Drawing.Size(396, 35); + this.labelMessageLink.TabIndex = 9; + this.labelMessageLink.TabStop = true; + this.labelMessageLink.Text = "label1"; + // + // LoginForm + // + this.AcceptButton = this.loginButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(498, 238); + this.Controls.Add(this.tableLayoutPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Name = "LoginForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Login"; + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.diskPictureBox)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label labelUsername; + private System.Windows.Forms.TextBox textBoxUsername; + private System.Windows.Forms.Label labelPassword; + private System.Windows.Forms.TextBox textBoxPassword; + private System.Windows.Forms.CheckBox checkBoxSavePassword; + private System.Windows.Forms.CheckBox checkBoxAnonymous; + private System.Windows.Forms.CheckBox checkBoxPkAuthentication; + private System.Windows.Forms.Button loginButton; + private System.Windows.Forms.Button cancelButton; + private ClickLinkLabel labelMessageLink; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private EllipsisLabel pkLabel; + private System.Windows.Forms.OpenFileDialog openFileDialog; + private System.Windows.Forms.PictureBox diskPictureBox; + private System.Windows.Forms.Label labelMessageLabel; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/LoginForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/LoginForm.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/LoginForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/LoginForm.cs index 3ea167ba46..487678be14 100644 --- a/source/ch/cyberduck/ui/winforms/LoginForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/LoginForm.cs @@ -1,224 +1,224 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Drawing; -using System.Media; -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Controller; -using ch.cyberduck.core; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class LoginForm : BaseForm, ILoginView - { - public LoginForm() - { - InitializeComponent(); - - openFileDialog.Title = LocaleFactory.localizedString("Select the private key in PEM or PuTTY format", - "Credentials"); - labelMessageLink.Font = DefaultFontBold; - - openFileDialog.Filter = "Private Key Files (*.pem;*.crt;*.ppk)|*.pem;*.crt;*.ppk|All Files (*.*)|*.*"; - openFileDialog.FilterIndex = 1; - - FormClosing += delegate(object sender, FormClosingEventArgs args) - { - bool cancel = DialogResult != DialogResult.Cancel && !ValidateInput(); - if (cancel) - { - args.Cancel = true; - SystemSounds.Beep.Play(); - } - }; - } - - public string Title - { - set { Text = value; } - } - - public string Message - { - set - { - labelMessageLabel.Visible = false; - labelMessageLink.Visible = false; - tableLayoutPanel1.Controls.Remove(labelMessageLink); - tableLayoutPanel1.Controls.Remove(labelMessageLabel); - if (value.StartsWith(Scheme.http.name())) - { - try - { - new Uri(value); - tableLayoutPanel1.Controls.Add(labelMessageLink, 1, 0); - labelMessageLink.Visible = true; - labelMessageLink.Text = value; - tableLayoutPanel1.SetColumnSpan(labelMessageLink, 4); - } - catch (UriFormatException) - { - tableLayoutPanel1.Controls.Add(labelMessageLabel, 1, 0); - tableLayoutPanel1.SetColumnSpan(labelMessageLabel, 4); - labelMessageLabel.Visible = true; - labelMessageLabel.Text = value; - } - } - else - { - tableLayoutPanel1.Controls.Add(labelMessageLabel, 1, 0); - tableLayoutPanel1.SetColumnSpan(labelMessageLabel, 4); - labelMessageLabel.Visible = true; - labelMessageLabel.Text = value; - } - } - } - - public string Username - { - get { return textBoxUsername.Text; } - set { textBoxUsername.Text = value; } - } - - public string Password - { - get { return textBoxPassword.Text; } - set { textBoxPassword.Text = value; } - } - - public bool SavePasswordState - { - get { return checkBoxSavePassword.Checked; } - set { checkBoxSavePassword.Checked = value; } - } - - public bool SavePasswordEnabled - { - set { checkBoxSavePassword.Enabled = value; } - } - - public bool UsernameEnabled - { - set { textBoxUsername.Enabled = value; } - } - - public bool PasswordEnabled - { - set { textBoxPassword.Enabled = value; } - } - - public bool AnonymousState - { - get { return checkBoxAnonymous.Checked; } - set { checkBoxAnonymous.Checked = value; } - } - - public bool PkCheckboxState - { - get { return checkBoxPkAuthentication.Checked; } - set { checkBoxPkAuthentication.Checked = value; } - } - - public bool PkCheckboxEnabled - { - set { checkBoxPkAuthentication.Enabled = value; } - } - - public string PkLabel - { - set - { - pkLabel.Text = value; - pkLabel.ForeColor = checkBoxPkAuthentication.Checked - ? Color.FromKnownColor(KnownColor.ControlText) - : Color.Gray; - } - get { return pkLabel.Text; } - } - - public string PasswordLabel - { - set { labelPassword.Text = value; } - } - - public string UsernameLabel - { - set { labelUsername.Text = value; } - } - - public void ShowPrivateKeyBrowser(string path) - { - if (!Visible) return; - - openFileDialog.InitialDirectory = path; - openFileDialog.FileName = String.Empty; - if (DialogResult.OK == openFileDialog.ShowDialog()) - { - ChangedPrivateKey(this, new PrivateKeyArgs(openFileDialog.FileName)); - } - else - { - ChangedPrivateKey(this, new PrivateKeyArgs(null)); - } - } - - public Image DiskIcon - { - set { diskPictureBox.Image = value; } - } - - public bool AnonymousEnabled - { - set { checkBoxAnonymous.Enabled = value; } - } - - public event VoidHandler ChangedUsernameEvent; - public event VoidHandler ChangedPasswordEvent; - public event VoidHandler ChangedSavePasswordCheckboxEvent; - public event VoidHandler ChangedAnonymousCheckboxEvent; - public event VoidHandler ChangedPkCheckboxEvent; - public event EventHandler ChangedPrivateKey; - public event ValidateInputHandler ValidateInput; - - private void textBoxUsername_TextChanged(object sender, EventArgs e) - { - ChangedUsernameEvent(); - } - - private void textBoxPassword_TextChanged(object sender, EventArgs e) - { - ChangedPasswordEvent(); - } - - private void checkBoxSavePassword_CheckedChanged(object sender, EventArgs e) - { - ChangedSavePasswordCheckboxEvent(); - } - - private void checkBoxAnonymous_CheckedChanged(object sender, EventArgs e) - { - ChangedAnonymousCheckboxEvent(); - } - - private void checkBoxPkAuthentication_CheckedChanged(object sender, EventArgs e) - { - ChangedPkCheckboxEvent(); - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Drawing; +using System.Media; +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Controller; +using ch.cyberduck.core; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class LoginForm : BaseForm, ILoginView + { + public LoginForm() + { + InitializeComponent(); + + openFileDialog.Title = LocaleFactory.localizedString("Select the private key in PEM or PuTTY format", + "Credentials"); + labelMessageLink.Font = DefaultFontBold; + + openFileDialog.Filter = "Private Key Files (*.pem;*.crt;*.ppk)|*.pem;*.crt;*.ppk|All Files (*.*)|*.*"; + openFileDialog.FilterIndex = 1; + + FormClosing += delegate(object sender, FormClosingEventArgs args) + { + bool cancel = DialogResult != DialogResult.Cancel && !ValidateInput(); + if (cancel) + { + args.Cancel = true; + SystemSounds.Beep.Play(); + } + }; + } + + public string Title + { + set { Text = value; } + } + + public string Message + { + set + { + labelMessageLabel.Visible = false; + labelMessageLink.Visible = false; + tableLayoutPanel1.Controls.Remove(labelMessageLink); + tableLayoutPanel1.Controls.Remove(labelMessageLabel); + if (value.StartsWith(Scheme.http.name())) + { + try + { + new Uri(value); + tableLayoutPanel1.Controls.Add(labelMessageLink, 1, 0); + labelMessageLink.Visible = true; + labelMessageLink.Text = value; + tableLayoutPanel1.SetColumnSpan(labelMessageLink, 4); + } + catch (UriFormatException) + { + tableLayoutPanel1.Controls.Add(labelMessageLabel, 1, 0); + tableLayoutPanel1.SetColumnSpan(labelMessageLabel, 4); + labelMessageLabel.Visible = true; + labelMessageLabel.Text = value; + } + } + else + { + tableLayoutPanel1.Controls.Add(labelMessageLabel, 1, 0); + tableLayoutPanel1.SetColumnSpan(labelMessageLabel, 4); + labelMessageLabel.Visible = true; + labelMessageLabel.Text = value; + } + } + } + + public string Username + { + get { return textBoxUsername.Text; } + set { textBoxUsername.Text = value; } + } + + public string Password + { + get { return textBoxPassword.Text; } + set { textBoxPassword.Text = value; } + } + + public bool SavePasswordState + { + get { return checkBoxSavePassword.Checked; } + set { checkBoxSavePassword.Checked = value; } + } + + public bool SavePasswordEnabled + { + set { checkBoxSavePassword.Enabled = value; } + } + + public bool UsernameEnabled + { + set { textBoxUsername.Enabled = value; } + } + + public bool PasswordEnabled + { + set { textBoxPassword.Enabled = value; } + } + + public bool AnonymousState + { + get { return checkBoxAnonymous.Checked; } + set { checkBoxAnonymous.Checked = value; } + } + + public bool PkCheckboxState + { + get { return checkBoxPkAuthentication.Checked; } + set { checkBoxPkAuthentication.Checked = value; } + } + + public bool PkCheckboxEnabled + { + set { checkBoxPkAuthentication.Enabled = value; } + } + + public string PkLabel + { + set + { + pkLabel.Text = value; + pkLabel.ForeColor = checkBoxPkAuthentication.Checked + ? Color.FromKnownColor(KnownColor.ControlText) + : Color.Gray; + } + get { return pkLabel.Text; } + } + + public string PasswordLabel + { + set { labelPassword.Text = value; } + } + + public string UsernameLabel + { + set { labelUsername.Text = value; } + } + + public void ShowPrivateKeyBrowser(string path) + { + if (!Visible) return; + + openFileDialog.InitialDirectory = path; + openFileDialog.FileName = String.Empty; + if (DialogResult.OK == openFileDialog.ShowDialog()) + { + ChangedPrivateKey(this, new PrivateKeyArgs(openFileDialog.FileName)); + } + else + { + ChangedPrivateKey(this, new PrivateKeyArgs(null)); + } + } + + public Image DiskIcon + { + set { diskPictureBox.Image = value; } + } + + public bool AnonymousEnabled + { + set { checkBoxAnonymous.Enabled = value; } + } + + public event VoidHandler ChangedUsernameEvent; + public event VoidHandler ChangedPasswordEvent; + public event VoidHandler ChangedSavePasswordCheckboxEvent; + public event VoidHandler ChangedAnonymousCheckboxEvent; + public event VoidHandler ChangedPkCheckboxEvent; + public event EventHandler ChangedPrivateKey; + public event ValidateInputHandler ValidateInput; + + private void textBoxUsername_TextChanged(object sender, EventArgs e) + { + ChangedUsernameEvent(); + } + + private void textBoxPassword_TextChanged(object sender, EventArgs e) + { + ChangedPasswordEvent(); + } + + private void checkBoxSavePassword_CheckedChanged(object sender, EventArgs e) + { + ChangedSavePasswordCheckboxEvent(); + } + + private void checkBoxAnonymous_CheckedChanged(object sender, EventArgs e) + { + ChangedAnonymousCheckboxEvent(); + } + + private void checkBoxPkAuthentication_CheckedChanged(object sender, EventArgs e) + { + ChangedPkCheckboxEvent(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/LoginForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/LoginForm.resx similarity index 97% rename from source/ch/cyberduck/ui/winforms/LoginForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/LoginForm.resx index cf5bbc6652..f003e42529 100644 --- a/source/ch/cyberduck/ui/winforms/LoginForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/LoginForm.resx @@ -1,123 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 17, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/NewFolderPromptForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/NewFolderPromptForm.Designer.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/NewFolderPromptForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/NewFolderPromptForm.Designer.cs index 070bbd4571..d4f4f13991 100644 --- a/source/ch/cyberduck/ui/winforms/NewFolderPromptForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/NewFolderPromptForm.Designer.cs @@ -1,46 +1,46 @@ -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class NewFolderPromptForm - { - /// - /// 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.SuspendLayout(); - // - // NewFolderPromptForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(462, 133); - this.MinimumSize = new System.Drawing.Size(464, 167); - this.Name = "NewFolderPromptForm"; - this.ResumeLayout(false); - - } - - #endregion - } +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class NewFolderPromptForm + { + /// + /// 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.SuspendLayout(); + // + // NewFolderPromptForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(462, 133); + this.MinimumSize = new System.Drawing.Size(464, 167); + this.Name = "NewFolderPromptForm"; + this.ResumeLayout(false); + + } + + #endregion + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/NewFolderPromptForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/NewFolderPromptForm.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/NewFolderPromptForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/NewFolderPromptForm.cs index 6946d84e80..39160916a4 100644 --- a/source/ch/cyberduck/ui/winforms/NewFolderPromptForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/NewFolderPromptForm.cs @@ -1,83 +1,83 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Controller; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class NewFolderPromptForm : PromptForm, INewFolderPromptView - { - private ComboBox regionComboBox; - - public NewFolderPromptForm() - { - InitializeComponent(); - } - - public bool RegionsEnabled - { - set - { - if (value && regionComboBox == null) - { - regionComboBox = new ComboBox(); - regionComboBox.FormattingEnabled = true; - regionComboBox.Location = new Point(84, 70); - regionComboBox.Name = "regionComboBox"; - regionComboBox.Size = new Size(121, 23); - regionComboBox.DropDownStyle = ComboBoxStyle.DropDownList; - regionComboBox.TabIndex = 3; - regionComboBox.Anchor = (((AnchorStyles.Left | AnchorStyles.Right))); - Height += regionComboBox.Height + 10; - tableLayoutPanel.RowCount++; - tableLayoutPanel.RowStyles.Insert(2, new RowStyle(SizeType.AutoSize)); - tableLayoutPanel.SetRow(okButton, 3); - tableLayoutPanel.SetRow(cancelButton, 3); - tableLayoutPanel.Controls.Add(regionComboBox, 1, 2); - tableLayoutPanel.SetColumnSpan(regionComboBox, 3); - } - } - private get { return regionComboBox != null; } - } - - public string Region - { - get { return regionComboBox != null ? (string) regionComboBox.SelectedValue : null; } - set - { - if (regionComboBox != null) - { - regionComboBox.SelectedValue = value; - } - } - } - - public void PopulateRegions(IList> regions) - { - if (regionComboBox != null) - { - regionComboBox.DataSource = regions; - regionComboBox.ValueMember = "Key"; - regionComboBox.DisplayMember = "Value"; - } - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Controller; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class NewFolderPromptForm : PromptForm, INewFolderPromptView + { + private ComboBox regionComboBox; + + public NewFolderPromptForm() + { + InitializeComponent(); + } + + public bool RegionsEnabled + { + set + { + if (value && regionComboBox == null) + { + regionComboBox = new ComboBox(); + regionComboBox.FormattingEnabled = true; + regionComboBox.Location = new Point(84, 70); + regionComboBox.Name = "regionComboBox"; + regionComboBox.Size = new Size(121, 23); + regionComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + regionComboBox.TabIndex = 3; + regionComboBox.Anchor = (((AnchorStyles.Left | AnchorStyles.Right))); + Height += regionComboBox.Height + 10; + tableLayoutPanel.RowCount++; + tableLayoutPanel.RowStyles.Insert(2, new RowStyle(SizeType.AutoSize)); + tableLayoutPanel.SetRow(okButton, 3); + tableLayoutPanel.SetRow(cancelButton, 3); + tableLayoutPanel.Controls.Add(regionComboBox, 1, 2); + tableLayoutPanel.SetColumnSpan(regionComboBox, 3); + } + } + private get { return regionComboBox != null; } + } + + public string Region + { + get { return regionComboBox != null ? (string) regionComboBox.SelectedValue : null; } + set + { + if (regionComboBox != null) + { + regionComboBox.SelectedValue = value; + } + } + } + + public void PopulateRegions(IList> regions) + { + if (regionComboBox != null) + { + regionComboBox.DataSource = regions; + regionComboBox.ValueMember = "Key"; + regionComboBox.DisplayMember = "Value"; + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/NewFolderPromptForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/NewFolderPromptForm.resx similarity index 97% rename from source/ch/cyberduck/ui/winforms/NewFolderPromptForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/NewFolderPromptForm.resx index c7e0d4bdf1..d58980a38d 100644 --- a/source/ch/cyberduck/ui/winforms/NewFolderPromptForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/NewFolderPromptForm.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/PreferencesForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/PreferencesForm.Designer.cs similarity index 98% rename from source/ch/cyberduck/ui/winforms/PreferencesForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/PreferencesForm.Designer.cs index fb14074be5..ecbb75a7ea 100644 --- a/source/ch/cyberduck/ui/winforms/PreferencesForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/PreferencesForm.Designer.cs @@ -1,3700 +1,3700 @@ -using Ch.Cyberduck.Ui.Winforms.Controls; - -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class PreferencesForm - { - /// - /// 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(); - this.iconList = new System.Windows.Forms.ImageList(this.components); - this.downloadFolderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); - this.editorOpenFileDialog = new System.Windows.Forms.OpenFileDialog(); - this.panelManager = new Ch.Cyberduck.Ui.Winforms.Controls.PanelManager(); - this.managedGeneralPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.tableLayoutPanelGeneral = new System.Windows.Forms.TableLayoutPanel(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.keychainCheckbox = new System.Windows.Forms.CheckBox(); - this.labelKeychain = new System.Windows.Forms.Label(); - this.confirmDisconnectCheckbox = new System.Windows.Forms.CheckBox(); - this.label7 = new System.Windows.Forms.Label(); - this.labelConfirmDisconnect = new System.Windows.Forms.Label(); - this.defaultProtocolCombobox = new Ch.Cyberduck.Ui.Winforms.Controls.ImageComboBox(); - this.browserGroupbox = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.saveWorkspaceCheckbox = new System.Windows.Forms.CheckBox(); - this.labelOpenEmtpyBrowser = new System.Windows.Forms.Label(); - this.connectBookmarkCombobox = new Ch.Cyberduck.Ui.Winforms.Controls.ImageComboBox(); - this.label4 = new System.Windows.Forms.Label(); - this.labelSaveWorkspace = new System.Windows.Forms.Label(); - this.newBrowserOnStartupCheckbox = new System.Windows.Forms.CheckBox(); - this.managedSftpPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.tableLayoutPanel25 = new System.Windows.Forms.TableLayoutPanel(); - this.groupBox18 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel27 = new System.Windows.Forms.TableLayoutPanel(); - this.label27 = new System.Windows.Forms.Label(); - this.sshTransfersCombobox = new System.Windows.Forms.ComboBox(); - this.label28 = new System.Windows.Forms.Label(); - this.managedS3Panel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.tableLayoutPanel28 = new System.Windows.Forms.TableLayoutPanel(); - this.groupBox19 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel29 = new System.Windows.Forms.TableLayoutPanel(); - this.label29 = new System.Windows.Forms.Label(); - this.defaultBucketLocationCombobox = new System.Windows.Forms.ComboBox(); - this.groupBox22 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel30 = new System.Windows.Forms.TableLayoutPanel(); - this.defaultStorageClassComboBox = new System.Windows.Forms.ComboBox(); - this.label3 = new System.Windows.Forms.Label(); - this.groupBox3 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel20 = new System.Windows.Forms.TableLayoutPanel(); - this.defaultEncryptionComboBox = new System.Windows.Forms.ComboBox(); - this.label8 = new System.Windows.Forms.Label(); - this.managedGoogleDocsPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.tableLayoutPanel31 = new System.Windows.Forms.TableLayoutPanel(); - this.groupBox23 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel32 = new System.Windows.Forms.TableLayoutPanel(); - this.gdDocumentsComboBox = new System.Windows.Forms.ComboBox(); - this.gdSpreadsheetsComboBox = new System.Windows.Forms.ComboBox(); - this.gdPresentationsComboBox = new System.Windows.Forms.ComboBox(); - this.label5 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.label9 = new System.Windows.Forms.Label(); - this.label13 = new System.Windows.Forms.Label(); - this.groupBox24 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel33 = new System.Windows.Forms.TableLayoutPanel(); - this.gdConvertCheckBox = new System.Windows.Forms.CheckBox(); - this.labelConvert = new System.Windows.Forms.Label(); - this.gdOCRcheckBox = new System.Windows.Forms.CheckBox(); - this.labelOcr = new System.Windows.Forms.Label(); - this.managedBandwidthPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.tableLayoutPanel34 = new System.Windows.Forms.TableLayoutPanel(); - this.groupBox25 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel35 = new System.Windows.Forms.TableLayoutPanel(); - this.label31 = new System.Windows.Forms.Label(); - this.defaultDownloadThrottleCombobox = new System.Windows.Forms.ComboBox(); - this.groupBox26 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel36 = new System.Windows.Forms.TableLayoutPanel(); - this.defaultUploadThrottleCombobox = new System.Windows.Forms.ComboBox(); - this.label32 = new System.Windows.Forms.Label(); - this.managedConnectionPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.tableLayoutPanel37 = new System.Windows.Forms.TableLayoutPanel(); - this.groupBox21 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel39 = new System.Windows.Forms.TableLayoutPanel(); - this.connectionTimeoutUpDown = new System.Windows.Forms.NumericUpDown(); - this.retriesUpDown = new System.Windows.Forms.NumericUpDown(); - this.retryCheckbox = new System.Windows.Forms.CheckBox(); - this.label34 = new System.Windows.Forms.Label(); - this.label36 = new System.Windows.Forms.Label(); - this.retryDelayUpDown = new System.Windows.Forms.NumericUpDown(); - this.label16 = new System.Windows.Forms.Label(); - this.groupBox4 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel38 = new System.Windows.Forms.TableLayoutPanel(); - this.label2 = new System.Windows.Forms.Label(); - this.defaultEncodingCombobox = new System.Windows.Forms.ComboBox(); - this.groupBox20 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel40 = new System.Windows.Forms.TableLayoutPanel(); - this.systemProxyCheckBox = new System.Windows.Forms.CheckBox(); - this.changeSystemProxyButton = new System.Windows.Forms.Button(); - this.managedUpdatePanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.tableLayoutPanel41 = new System.Windows.Forms.TableLayoutPanel(); - this.groupBox27 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel42 = new System.Windows.Forms.TableLayoutPanel(); - this.updateCheckBox = new System.Windows.Forms.CheckBox(); - this.updateCheckButton = new System.Windows.Forms.Button(); - this.lastUpdateLabel = new System.Windows.Forms.Label(); - this.updateFeedComboBox = new System.Windows.Forms.ComboBox(); - this.managedLanguagePanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.tableLayoutPanel43 = new System.Windows.Forms.TableLayoutPanel(); - this.groupBox28 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel44 = new System.Windows.Forms.TableLayoutPanel(); - this.languageComboBox = new System.Windows.Forms.ComboBox(); - this.label18 = new System.Windows.Forms.Label(); - this.managedEditorPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); - this.label14 = new System.Windows.Forms.Label(); - this.editorComboBox = new Ch.Cyberduck.Ui.Winforms.Controls.ImageComboBox(); - this.alwaysUseDefaultEditorCheckBox = new System.Windows.Forms.CheckBox(); - this.managedTransfersPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.transfersTabControl = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); - this.groupBox6 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel8 = new System.Windows.Forms.TableLayoutPanel(); - this.label12 = new System.Windows.Forms.Label(); - this.duplicateUploadOverwriteCheckbox = new System.Windows.Forms.CheckBox(); - this.duplicateUploadCombobox = new System.Windows.Forms.ComboBox(); - this.uploadTemporaryNameCheckBox = new System.Windows.Forms.CheckBox(); - this.groupBox5 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel7 = new System.Windows.Forms.TableLayoutPanel(); - this.openAfterDownloadCheckbox = new System.Windows.Forms.CheckBox(); - this.duplicateDownloadCombobox = new System.Windows.Forms.ComboBox(); - this.label11 = new System.Windows.Forms.Label(); - this.downloadFolderLabel = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); - this.label10 = new System.Windows.Forms.Label(); - this.duplicateDownloadOverwriteCheckbox = new System.Windows.Forms.CheckBox(); - this.showDownloadFolderDialogButton = new System.Windows.Forms.Button(); - this.groupBox29 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel6 = new System.Windows.Forms.TableLayoutPanel(); - this.transfersToFrontCheckbox = new System.Windows.Forms.CheckBox(); - this.removeFromTransfersCheckbox = new System.Windows.Forms.CheckBox(); - this.transferFilesCombobox = new System.Windows.Forms.ComboBox(); - this.transfersToBackCheckbox = new System.Windows.Forms.CheckBox(); - this.label1 = new System.Windows.Forms.Label(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.tableLayoutPanel9 = new System.Windows.Forms.TableLayoutPanel(); - this.groupBox7 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel10 = new System.Windows.Forms.TableLayoutPanel(); - this.chmodDownloadCheckbox = new System.Windows.Forms.CheckBox(); - this.chmodDownloadCustomRadioButton = new System.Windows.Forms.RadioButton(); - this.chmodDownloadDefaultRadioButton = new System.Windows.Forms.RadioButton(); - this.chmodDownloadTypeCombobox = new System.Windows.Forms.ComboBox(); - this.tableLayoutPanel11 = new System.Windows.Forms.TableLayoutPanel(); - this.ownerDownloadLabel = new System.Windows.Forms.Label(); - this.dotherxCheckbox = new System.Windows.Forms.CheckBox(); - this.groupDownloadLabel = new System.Windows.Forms.Label(); - this.dotherwCheckbox = new System.Windows.Forms.CheckBox(); - this.othersDownloadLabel = new System.Windows.Forms.Label(); - this.dgroupxCheckbox = new System.Windows.Forms.CheckBox(); - this.dotherrCheckbox = new System.Windows.Forms.CheckBox(); - this.dgroupwCheckbox = new System.Windows.Forms.CheckBox(); - this.downerrCheckbox = new System.Windows.Forms.CheckBox(); - this.downerwCheckbox = new System.Windows.Forms.CheckBox(); - this.downerxCheckbox = new System.Windows.Forms.CheckBox(); - this.dgrouprCheckbox = new System.Windows.Forms.CheckBox(); - this.groupBox8 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel12 = new System.Windows.Forms.TableLayoutPanel(); - this.chmodUploadCheckbox = new System.Windows.Forms.CheckBox(); - this.chmodUploadCustomRadioButton = new System.Windows.Forms.RadioButton(); - this.chmodUploadDefaultRadioButton = new System.Windows.Forms.RadioButton(); - this.chmodUploadTypeCombobox = new System.Windows.Forms.ComboBox(); - this.tableLayoutPanel13 = new System.Windows.Forms.TableLayoutPanel(); - this.ownerUploadLabel = new System.Windows.Forms.Label(); - this.uotherxCheckbox = new System.Windows.Forms.CheckBox(); - this.uownerrCheckbox = new System.Windows.Forms.CheckBox(); - this.uotherwCheckbox = new System.Windows.Forms.CheckBox(); - this.uownerwCheckbox = new System.Windows.Forms.CheckBox(); - this.uotherrCheckbox = new System.Windows.Forms.CheckBox(); - this.uownerxCheckbox = new System.Windows.Forms.CheckBox(); - this.othersUploadLabel = new System.Windows.Forms.Label(); - this.groupUploadLabel = new System.Windows.Forms.Label(); - this.ugroupxCheckbox = new System.Windows.Forms.CheckBox(); - this.ugrouprCheckbox = new System.Windows.Forms.CheckBox(); - this.ugroupwCheckbox = new System.Windows.Forms.CheckBox(); - this.tabPage3 = new System.Windows.Forms.TabPage(); - this.tableLayoutPanel14 = new System.Windows.Forms.TableLayoutPanel(); - this.groupBox9 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel15 = new System.Windows.Forms.TableLayoutPanel(); - this.preserveModificationDownloadCheckbox = new System.Windows.Forms.CheckBox(); - this.groupBox10 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel16 = new System.Windows.Forms.TableLayoutPanel(); - this.preserveModificationUploadCheckbox = new System.Windows.Forms.CheckBox(); - this.tabPage4 = new System.Windows.Forms.TabPage(); - this.tableLayoutPanel17 = new System.Windows.Forms.TableLayoutPanel(); - this.groupBox11 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel18 = new System.Windows.Forms.TableLayoutPanel(); - this.downloadSkipCheckbox = new System.Windows.Forms.CheckBox(); - this.downloadSkipRegexRichTextbox = new System.Windows.Forms.RichTextBox(); - this.downloadSkipRegexDefaultButton = new System.Windows.Forms.Button(); - this.groupBox12 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel19 = new System.Windows.Forms.TableLayoutPanel(); - this.uploadSkipCheckbox = new System.Windows.Forms.CheckBox(); - this.uploadSkipRegexRichTextbox = new System.Windows.Forms.RichTextBox(); - this.uploadSkipRegexDefaultButton = new System.Windows.Forms.Button(); - this.managedBrowserPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); - this.tableLayoutPanel21 = new System.Windows.Forms.TableLayoutPanel(); - this.groupBox13 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel22 = new System.Windows.Forms.TableLayoutPanel(); - this.label15 = new System.Windows.Forms.Label(); - this.bookmarkSizeComboBox = new System.Windows.Forms.ComboBox(); - this.groupBox14 = new System.Windows.Forms.GroupBox(); - this.tableLayoutPanel23 = new System.Windows.Forms.TableLayoutPanel(); - this.infoWindowCheckbox = new System.Windows.Forms.CheckBox(); - this.showHiddenFilesCheckbox = new System.Windows.Forms.CheckBox(); - this.returnKeyCheckbox = new System.Windows.Forms.CheckBox(); - this.doubleClickEditorCheckbox = new System.Windows.Forms.CheckBox(); - this.toolStrip = new Ch.Cyberduck.Ui.Winforms.Controls.ClickThroughToolStrip(); - this.generalButton = new System.Windows.Forms.ToolStripButton(); - this.browserButton = new System.Windows.Forms.ToolStripButton(); - this.transfersButton = new System.Windows.Forms.ToolStripButton(); - this.editStripButton = new System.Windows.Forms.ToolStripButton(); - this.sftpButton = new System.Windows.Forms.ToolStripButton(); - this.s3Button = new System.Windows.Forms.ToolStripButton(); - this.googleDocsButton = new System.Windows.Forms.ToolStripButton(); - this.bandwidthButton = new System.Windows.Forms.ToolStripButton(); - this.connectionButton = new System.Windows.Forms.ToolStripButton(); - this.updateButton = new System.Windows.Forms.ToolStripButton(); - this.languageButton = new System.Windows.Forms.ToolStripButton(); - this.panelManager.SuspendLayout(); - this.managedGeneralPanel.SuspendLayout(); - this.tableLayoutPanelGeneral.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.tableLayoutPanel2.SuspendLayout(); - this.browserGroupbox.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); - this.managedSftpPanel.SuspendLayout(); - this.tableLayoutPanel25.SuspendLayout(); - this.groupBox18.SuspendLayout(); - this.tableLayoutPanel27.SuspendLayout(); - this.managedS3Panel.SuspendLayout(); - this.tableLayoutPanel28.SuspendLayout(); - this.groupBox19.SuspendLayout(); - this.tableLayoutPanel29.SuspendLayout(); - this.groupBox22.SuspendLayout(); - this.tableLayoutPanel30.SuspendLayout(); - this.groupBox3.SuspendLayout(); - this.tableLayoutPanel20.SuspendLayout(); - this.managedGoogleDocsPanel.SuspendLayout(); - this.tableLayoutPanel31.SuspendLayout(); - this.groupBox23.SuspendLayout(); - this.tableLayoutPanel32.SuspendLayout(); - this.groupBox24.SuspendLayout(); - this.tableLayoutPanel33.SuspendLayout(); - this.managedBandwidthPanel.SuspendLayout(); - this.tableLayoutPanel34.SuspendLayout(); - this.groupBox25.SuspendLayout(); - this.tableLayoutPanel35.SuspendLayout(); - this.groupBox26.SuspendLayout(); - this.tableLayoutPanel36.SuspendLayout(); - this.managedConnectionPanel.SuspendLayout(); - this.tableLayoutPanel37.SuspendLayout(); - this.groupBox21.SuspendLayout(); - this.tableLayoutPanel39.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.connectionTimeoutUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.retriesUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.retryDelayUpDown)).BeginInit(); - this.groupBox4.SuspendLayout(); - this.tableLayoutPanel38.SuspendLayout(); - this.groupBox20.SuspendLayout(); - this.tableLayoutPanel40.SuspendLayout(); - this.managedUpdatePanel.SuspendLayout(); - this.tableLayoutPanel41.SuspendLayout(); - this.groupBox27.SuspendLayout(); - this.tableLayoutPanel42.SuspendLayout(); - this.managedLanguagePanel.SuspendLayout(); - this.tableLayoutPanel43.SuspendLayout(); - this.groupBox28.SuspendLayout(); - this.tableLayoutPanel44.SuspendLayout(); - this.managedEditorPanel.SuspendLayout(); - this.tableLayoutPanel3.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.tableLayoutPanel4.SuspendLayout(); - this.managedTransfersPanel.SuspendLayout(); - this.transfersTabControl.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.tableLayoutPanel5.SuspendLayout(); - this.groupBox6.SuspendLayout(); - this.tableLayoutPanel8.SuspendLayout(); - this.groupBox5.SuspendLayout(); - this.tableLayoutPanel7.SuspendLayout(); - this.groupBox29.SuspendLayout(); - this.tableLayoutPanel6.SuspendLayout(); - this.tabPage2.SuspendLayout(); - this.tableLayoutPanel9.SuspendLayout(); - this.groupBox7.SuspendLayout(); - this.tableLayoutPanel10.SuspendLayout(); - this.tableLayoutPanel11.SuspendLayout(); - this.groupBox8.SuspendLayout(); - this.tableLayoutPanel12.SuspendLayout(); - this.tableLayoutPanel13.SuspendLayout(); - this.tabPage3.SuspendLayout(); - this.tableLayoutPanel14.SuspendLayout(); - this.groupBox9.SuspendLayout(); - this.tableLayoutPanel15.SuspendLayout(); - this.groupBox10.SuspendLayout(); - this.tableLayoutPanel16.SuspendLayout(); - this.tabPage4.SuspendLayout(); - this.tableLayoutPanel17.SuspendLayout(); - this.groupBox11.SuspendLayout(); - this.tableLayoutPanel18.SuspendLayout(); - this.groupBox12.SuspendLayout(); - this.tableLayoutPanel19.SuspendLayout(); - this.managedBrowserPanel.SuspendLayout(); - this.tableLayoutPanel21.SuspendLayout(); - this.groupBox13.SuspendLayout(); - this.tableLayoutPanel22.SuspendLayout(); - this.groupBox14.SuspendLayout(); - this.tableLayoutPanel23.SuspendLayout(); - this.toolStrip.SuspendLayout(); - this.SuspendLayout(); - // - // iconList - // - this.iconList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; - this.iconList.ImageSize = new System.Drawing.Size(16, 16); - this.iconList.TransparentColor = System.Drawing.Color.Transparent; - // - // editorOpenFileDialog - // - this.editorOpenFileDialog.Filter = "|*.exe;*.com;*.cmd;*.bat"; - // - // panelManager - // - this.panelManager.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.panelManager.Controls.Add(this.managedGeneralPanel); - this.panelManager.Controls.Add(this.managedSftpPanel); - this.panelManager.Controls.Add(this.managedS3Panel); - this.panelManager.Controls.Add(this.managedGoogleDocsPanel); - this.panelManager.Controls.Add(this.managedBandwidthPanel); - this.panelManager.Controls.Add(this.managedConnectionPanel); - this.panelManager.Controls.Add(this.managedUpdatePanel); - this.panelManager.Controls.Add(this.managedLanguagePanel); - this.panelManager.Controls.Add(this.managedEditorPanel); - this.panelManager.Controls.Add(this.managedTransfersPanel); - this.panelManager.Controls.Add(this.managedBrowserPanel); - this.panelManager.Location = new System.Drawing.Point(12, 76); - this.panelManager.Name = "panelManager"; - this.panelManager.SelectedIndex = 10; - this.panelManager.SelectedPanel = this.managedBrowserPanel; - this.panelManager.Size = new System.Drawing.Size(654, 479); - this.panelManager.TabIndex = 1; - // - // managedGeneralPanel - // - this.managedGeneralPanel.Controls.Add(this.tableLayoutPanelGeneral); - this.managedGeneralPanel.Location = new System.Drawing.Point(0, 0); - this.managedGeneralPanel.Name = "managedGeneralPanel"; - this.managedGeneralPanel.Size = new System.Drawing.Size(0, 0); - this.managedGeneralPanel.Text = "managedPanel1"; - // - // tableLayoutPanelGeneral - // - this.tableLayoutPanelGeneral.AutoSize = true; - this.tableLayoutPanelGeneral.ColumnCount = 1; - this.tableLayoutPanelGeneral.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanelGeneral.Controls.Add(this.groupBox1, 0, 1); - this.tableLayoutPanelGeneral.Controls.Add(this.browserGroupbox, 0, 0); - this.tableLayoutPanelGeneral.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanelGeneral.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanelGeneral.Name = "tableLayoutPanelGeneral"; - this.tableLayoutPanelGeneral.RowCount = 3; - this.tableLayoutPanelGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanelGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanelGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanelGeneral.Size = new System.Drawing.Size(0, 0); - this.tableLayoutPanelGeneral.TabIndex = 7; - // - // groupBox1 - // - this.groupBox1.AutoSize = true; - this.groupBox1.Controls.Add(this.tableLayoutPanel2); - this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox1.Location = new System.Drawing.Point(3, 171); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(1, 152); - this.groupBox1.TabIndex = 1; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "Connection"; - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.AutoSize = true; - this.tableLayoutPanel2.ColumnCount = 2; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 199F)); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.Controls.Add(this.keychainCheckbox, 0, 0); - this.tableLayoutPanel2.Controls.Add(this.labelKeychain, 0, 1); - this.tableLayoutPanel2.Controls.Add(this.confirmDisconnectCheckbox, 0, 2); - this.tableLayoutPanel2.Controls.Add(this.label7, 0, 4); - this.tableLayoutPanel2.Controls.Add(this.labelConfirmDisconnect, 0, 3); - this.tableLayoutPanel2.Controls.Add(this.defaultProtocolCombobox, 1, 4); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel2.RowCount = 6; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.Size = new System.Drawing.Size(0, 130); - this.tableLayoutPanel2.TabIndex = 10; - // - // keychainCheckbox - // - this.keychainCheckbox.AutoSize = true; - this.tableLayoutPanel2.SetColumnSpan(this.keychainCheckbox, 2); - this.keychainCheckbox.Location = new System.Drawing.Point(8, 8); - this.keychainCheckbox.Name = "keychainCheckbox"; - this.keychainCheckbox.Size = new System.Drawing.Size(96, 19); - this.keychainCheckbox.TabIndex = 0; - this.keychainCheckbox.Text = "Use Keychain"; - this.keychainCheckbox.UseVisualStyleBackColor = true; - this.keychainCheckbox.CheckedChanged += new System.EventHandler(this.keychainCheckbox_CheckedChanged); - // - // labelKeychain - // - this.labelKeychain.AutoEllipsis = true; - this.labelKeychain.AutoSize = true; - this.tableLayoutPanel2.SetColumnSpan(this.labelKeychain, 2); - this.labelKeychain.ForeColor = System.Drawing.SystemColors.GrayText; - this.labelKeychain.Location = new System.Drawing.Point(8, 30); - this.labelKeychain.Name = "labelKeychain"; - this.labelKeychain.Size = new System.Drawing.Size(551, 15); - this.labelKeychain.TabIndex = 6; - this.labelKeychain.Text = "Search for passwords in the Keychain. Save passwords upon successful login in the" + - " Keychain by default."; - // - // confirmDisconnectCheckbox - // - this.confirmDisconnectCheckbox.AutoSize = true; - this.confirmDisconnectCheckbox.Location = new System.Drawing.Point(8, 48); - this.confirmDisconnectCheckbox.Name = "confirmDisconnectCheckbox"; - this.confirmDisconnectCheckbox.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.confirmDisconnectCheckbox.Size = new System.Drawing.Size(131, 24); - this.confirmDisconnectCheckbox.TabIndex = 7; - this.confirmDisconnectCheckbox.Text = "Confirm disconnect"; - this.confirmDisconnectCheckbox.UseVisualStyleBackColor = true; - this.confirmDisconnectCheckbox.CheckedChanged += new System.EventHandler(this.confirmDisconnectCheckbox_CheckedChanged); - // - // label7 - // - this.label7.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label7.AutoEllipsis = true; - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(105, 102); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(96, 15); - this.label7.TabIndex = 6; - this.label7.Text = "Default protocol:"; - this.label7.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // labelConfirmDisconnect - // - this.labelConfirmDisconnect.AutoEllipsis = true; - this.labelConfirmDisconnect.AutoSize = true; - this.tableLayoutPanel2.SetColumnSpan(this.labelConfirmDisconnect, 2); - this.labelConfirmDisconnect.ForeColor = System.Drawing.SystemColors.GrayText; - this.labelConfirmDisconnect.Location = new System.Drawing.Point(8, 75); - this.labelConfirmDisconnect.Name = "labelConfirmDisconnect"; - this.labelConfirmDisconnect.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); - this.labelConfirmDisconnect.Size = new System.Drawing.Size(265, 20); - this.labelConfirmDisconnect.TabIndex = 6; - this.labelConfirmDisconnect.Text = "Ask before closing a connected browser window."; - // - // defaultProtocolCombobox - // - this.defaultProtocolCombobox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.defaultProtocolCombobox.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; - this.defaultProtocolCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.defaultProtocolCombobox.FormattingEnabled = true; - this.defaultProtocolCombobox.IconMember = null; - this.defaultProtocolCombobox.ItemHeight = 18; - this.defaultProtocolCombobox.Location = new System.Drawing.Point(207, 98); - this.defaultProtocolCombobox.Name = "defaultProtocolCombobox"; - this.defaultProtocolCombobox.Size = new System.Drawing.Size(427, 24); - this.defaultProtocolCombobox.TabIndex = 6; - this.defaultProtocolCombobox.SelectionChangeCommitted += new System.EventHandler(this.defaultProtocolCombobox_SelectionChangeCommitted); - // - // browserGroupbox - // - this.browserGroupbox.AutoSize = true; - this.browserGroupbox.Controls.Add(this.tableLayoutPanel1); - this.browserGroupbox.Dock = System.Windows.Forms.DockStyle.Fill; - this.browserGroupbox.Location = new System.Drawing.Point(3, 3); - this.browserGroupbox.Name = "browserGroupbox"; - this.browserGroupbox.Size = new System.Drawing.Size(1, 162); - this.browserGroupbox.TabIndex = 0; - this.browserGroupbox.TabStop = false; - this.browserGroupbox.Text = "Browser"; - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.AutoSize = true; - this.tableLayoutPanel1.ColumnCount = 2; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 199F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 428F)); - this.tableLayoutPanel1.Controls.Add(this.saveWorkspaceCheckbox, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.labelOpenEmtpyBrowser, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.connectBookmarkCombobox, 1, 3); - this.tableLayoutPanel1.Controls.Add(this.label4, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.labelSaveWorkspace, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.newBrowserOnStartupCheckbox, 0, 2); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel1.RowCount = 9; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(0, 140); - this.tableLayoutPanel1.TabIndex = 6; - // - // saveWorkspaceCheckbox - // - this.saveWorkspaceCheckbox.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.saveWorkspaceCheckbox, 2); - this.saveWorkspaceCheckbox.Location = new System.Drawing.Point(8, 8); - this.saveWorkspaceCheckbox.Name = "saveWorkspaceCheckbox"; - this.saveWorkspaceCheckbox.Size = new System.Drawing.Size(111, 19); - this.saveWorkspaceCheckbox.TabIndex = 0; - this.saveWorkspaceCheckbox.Text = "Save Workspace"; - this.saveWorkspaceCheckbox.UseVisualStyleBackColor = true; - this.saveWorkspaceCheckbox.CheckedChanged += new System.EventHandler(this.saveWorkspaceCheckbox_CheckedChanged); - // - // labelOpenEmtpyBrowser - // - this.labelOpenEmtpyBrowser.AutoEllipsis = true; - this.labelOpenEmtpyBrowser.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.labelOpenEmtpyBrowser, 2); - this.labelOpenEmtpyBrowser.ForeColor = System.Drawing.SystemColors.GrayText; - this.labelOpenEmtpyBrowser.Location = new System.Drawing.Point(8, 105); - this.labelOpenEmtpyBrowser.Name = "labelOpenEmtpyBrowser"; - this.labelOpenEmtpyBrowser.Size = new System.Drawing.Size(618, 30); - this.labelOpenEmtpyBrowser.TabIndex = 3; - this.labelOpenEmtpyBrowser.Text = "Open an empty browser when opening the application. A connection to the selected " + - "bookmark is opened for a new browser."; - // - // connectBookmarkCombobox - // - this.connectBookmarkCombobox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.connectBookmarkCombobox.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; - this.connectBookmarkCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.connectBookmarkCombobox.FormattingEnabled = true; - this.connectBookmarkCombobox.IconMember = null; - this.connectBookmarkCombobox.ItemHeight = 18; - this.connectBookmarkCombobox.Location = new System.Drawing.Point(207, 78); - this.connectBookmarkCombobox.Name = "connectBookmarkCombobox"; - this.connectBookmarkCombobox.Size = new System.Drawing.Size(422, 24); - this.connectBookmarkCombobox.TabIndex = 4; - this.connectBookmarkCombobox.SelectionChangeCommitted += new System.EventHandler(this.connectBookmarkCombobox_SelectionChangeCommitted); - // - // label4 - // - this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.label4.AutoEllipsis = true; - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(8, 82); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(193, 15); - this.label4.TabIndex = 5; - this.label4.Text = "Connect to bookmark:"; - this.label4.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // labelSaveWorkspace - // - this.labelSaveWorkspace.AutoEllipsis = true; - this.labelSaveWorkspace.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.labelSaveWorkspace, 2); - this.labelSaveWorkspace.ForeColor = System.Drawing.SystemColors.GrayText; - this.labelSaveWorkspace.Location = new System.Drawing.Point(8, 30); - this.labelSaveWorkspace.Name = "labelSaveWorkspace"; - this.labelSaveWorkspace.Size = new System.Drawing.Size(458, 15); - this.labelSaveWorkspace.TabIndex = 1; - this.labelSaveWorkspace.Text = "Will save all open browsers when quitting and restore the connections upon relaun" + - "ch."; - // - // newBrowserOnStartupCheckbox - // - this.newBrowserOnStartupCheckbox.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.newBrowserOnStartupCheckbox, 2); - this.newBrowserOnStartupCheckbox.Enabled = false; - this.newBrowserOnStartupCheckbox.Location = new System.Drawing.Point(8, 48); - this.newBrowserOnStartupCheckbox.Name = "newBrowserOnStartupCheckbox"; - this.newBrowserOnStartupCheckbox.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.newBrowserOnStartupCheckbox.Size = new System.Drawing.Size(227, 24); - this.newBrowserOnStartupCheckbox.TabIndex = 2; - this.newBrowserOnStartupCheckbox.Text = "Open new browser window on startup"; - this.newBrowserOnStartupCheckbox.UseVisualStyleBackColor = true; - this.newBrowserOnStartupCheckbox.CheckedChanged += new System.EventHandler(this.newBrowserOnStartupCheckbox_CheckedChanged); - // - // managedSftpPanel - // - this.managedSftpPanel.Controls.Add(this.tableLayoutPanel25); - this.managedSftpPanel.Location = new System.Drawing.Point(0, 0); - this.managedSftpPanel.Name = "managedSftpPanel"; - this.managedSftpPanel.Size = new System.Drawing.Size(0, 0); - this.managedSftpPanel.Text = "managedPanel1"; - // - // tableLayoutPanel25 - // - this.tableLayoutPanel25.AutoSize = true; - this.tableLayoutPanel25.ColumnCount = 1; - this.tableLayoutPanel25.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel25.Controls.Add(this.groupBox18, 0, 0); - this.tableLayoutPanel25.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel25.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel25.Name = "tableLayoutPanel25"; - this.tableLayoutPanel25.RowCount = 2; - this.tableLayoutPanel25.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel25.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel25.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel25.Size = new System.Drawing.Size(0, 0); - this.tableLayoutPanel25.TabIndex = 0; - // - // groupBox18 - // - this.groupBox18.AutoSize = true; - this.groupBox18.Controls.Add(this.tableLayoutPanel27); - this.groupBox18.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox18.Location = new System.Drawing.Point(3, 3); - this.groupBox18.Name = "groupBox18"; - this.groupBox18.Size = new System.Drawing.Size(1, 81); - this.groupBox18.TabIndex = 2; - this.groupBox18.TabStop = false; - this.groupBox18.Text = "File Transfers"; - // - // tableLayoutPanel27 - // - this.tableLayoutPanel27.AutoSize = true; - this.tableLayoutPanel27.ColumnCount = 2; - this.tableLayoutPanel27.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel27.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel27.Controls.Add(this.label27, 0, 0); - this.tableLayoutPanel27.Controls.Add(this.sshTransfersCombobox, 1, 1); - this.tableLayoutPanel27.Controls.Add(this.label28, 0, 1); - this.tableLayoutPanel27.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel27.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel27.Name = "tableLayoutPanel27"; - this.tableLayoutPanel27.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel27.RowCount = 2; - this.tableLayoutPanel27.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel27.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel27.Size = new System.Drawing.Size(0, 59); - this.tableLayoutPanel27.TabIndex = 4; - // - // label27 - // - this.label27.AutoSize = true; - this.tableLayoutPanel27.SetColumnSpan(this.label27, 2); - this.label27.ForeColor = System.Drawing.SystemColors.GrayText; - this.label27.Location = new System.Drawing.Point(8, 5); - this.label27.Name = "label27"; - this.label27.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); - this.label27.Size = new System.Drawing.Size(1, 5); - this.label27.TabIndex = 1; - this.label27.Text = "SSH supports both file transfers over SFTP or SCP."; - // - // sshTransfersCombobox - // - this.sshTransfersCombobox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.sshTransfersCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.sshTransfersCombobox.FormattingEnabled = true; - this.sshTransfersCombobox.Location = new System.Drawing.Point(8, 20); - this.sshTransfersCombobox.Name = "sshTransfersCombobox"; - this.sshTransfersCombobox.Size = new System.Drawing.Size(1, 23); - this.sshTransfersCombobox.TabIndex = 2; - // - // label28 - // - this.label28.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label28.AutoSize = true; - this.label28.Location = new System.Drawing.Point(8, 24); - this.label28.Name = "label28"; - this.label28.Size = new System.Drawing.Size(1, 15); - this.label28.TabIndex = 3; - this.label28.Text = "Transfer Files using:"; - this.label28.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // managedS3Panel - // - this.managedS3Panel.Controls.Add(this.tableLayoutPanel28); - this.managedS3Panel.Location = new System.Drawing.Point(0, 0); - this.managedS3Panel.Name = "managedS3Panel"; - this.managedS3Panel.Size = new System.Drawing.Size(0, 0); - this.managedS3Panel.Text = "managedPanel1"; - // - // tableLayoutPanel28 - // - this.tableLayoutPanel28.AutoSize = true; - this.tableLayoutPanel28.ColumnCount = 1; - this.tableLayoutPanel28.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel28.Controls.Add(this.groupBox19, 0, 0); - this.tableLayoutPanel28.Controls.Add(this.groupBox22, 0, 1); - this.tableLayoutPanel28.Controls.Add(this.groupBox3, 0, 2); - this.tableLayoutPanel28.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel28.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel28.Name = "tableLayoutPanel28"; - this.tableLayoutPanel28.RowCount = 4; - this.tableLayoutPanel28.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel28.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel28.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel28.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel28.Size = new System.Drawing.Size(0, 0); - this.tableLayoutPanel28.TabIndex = 0; - // - // groupBox19 - // - this.groupBox19.AutoSize = true; - this.groupBox19.Controls.Add(this.tableLayoutPanel29); - this.groupBox19.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox19.Location = new System.Drawing.Point(3, 3); - this.groupBox19.Name = "groupBox19"; - this.groupBox19.Size = new System.Drawing.Size(1, 81); - this.groupBox19.TabIndex = 0; - this.groupBox19.TabStop = false; - this.groupBox19.Text = "Default Bucket Location"; - // - // tableLayoutPanel29 - // - this.tableLayoutPanel29.AutoSize = true; - this.tableLayoutPanel29.ColumnCount = 1; - this.tableLayoutPanel29.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 632F)); - this.tableLayoutPanel29.Controls.Add(this.label29, 0, 0); - this.tableLayoutPanel29.Controls.Add(this.defaultBucketLocationCombobox, 0, 1); - this.tableLayoutPanel29.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel29.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel29.Name = "tableLayoutPanel29"; - this.tableLayoutPanel29.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel29.RowCount = 2; - this.tableLayoutPanel29.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel29.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel29.Size = new System.Drawing.Size(0, 59); - this.tableLayoutPanel29.TabIndex = 2; - // - // label29 - // - this.label29.AutoSize = true; - this.label29.ForeColor = System.Drawing.SystemColors.GrayText; - this.label29.Location = new System.Drawing.Point(8, 5); - this.label29.Name = "label29"; - this.label29.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); - this.label29.Size = new System.Drawing.Size(366, 20); - this.label29.TabIndex = 0; - this.label29.Text = "The geographic location in which buckets will be created by default."; - // - // defaultBucketLocationCombobox - // - this.defaultBucketLocationCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.defaultBucketLocationCombobox.FormattingEnabled = true; - this.defaultBucketLocationCombobox.Location = new System.Drawing.Point(8, 28); - this.defaultBucketLocationCombobox.Name = "defaultBucketLocationCombobox"; - this.defaultBucketLocationCombobox.Size = new System.Drawing.Size(279, 23); - this.defaultBucketLocationCombobox.TabIndex = 1; - this.defaultBucketLocationCombobox.SelectionChangeCommitted += new System.EventHandler(this.defaultBucketLocationCombobox_SelectionChangeCommitted); - // - // groupBox22 - // - this.groupBox22.AutoSize = true; - this.groupBox22.Controls.Add(this.tableLayoutPanel30); - this.groupBox22.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox22.Location = new System.Drawing.Point(3, 90); - this.groupBox22.Name = "groupBox22"; - this.groupBox22.Size = new System.Drawing.Size(1, 102); - this.groupBox22.TabIndex = 1; - this.groupBox22.TabStop = false; - this.groupBox22.Text = "Default Storage Class"; - // - // tableLayoutPanel30 - // - this.tableLayoutPanel30.AutoSize = true; - this.tableLayoutPanel30.ColumnCount = 1; - this.tableLayoutPanel30.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 632F)); - this.tableLayoutPanel30.Controls.Add(this.defaultStorageClassComboBox, 0, 1); - this.tableLayoutPanel30.Controls.Add(this.label3, 0, 0); - this.tableLayoutPanel30.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel30.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel30.Name = "tableLayoutPanel30"; - this.tableLayoutPanel30.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel30.RowCount = 2; - this.tableLayoutPanel30.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel30.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel30.Size = new System.Drawing.Size(0, 80); - this.tableLayoutPanel30.TabIndex = 0; - // - // defaultStorageClassComboBox - // - this.defaultStorageClassComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.defaultStorageClassComboBox.FormattingEnabled = true; - this.defaultStorageClassComboBox.Location = new System.Drawing.Point(8, 43); - this.defaultStorageClassComboBox.Name = "defaultStorageClassComboBox"; - this.defaultStorageClassComboBox.Size = new System.Drawing.Size(279, 23); - this.defaultStorageClassComboBox.TabIndex = 2; - this.defaultStorageClassComboBox.SelectionChangeCommitted += new System.EventHandler(this.defaultStorageClassComboBox_SelectionChangeCommitted); - // - // label3 - // - this.label3.AutoSize = true; - this.label3.ForeColor = System.Drawing.SystemColors.GrayText; - this.label3.Location = new System.Drawing.Point(8, 5); - this.label3.Name = "label3"; - this.label3.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); - this.label3.Size = new System.Drawing.Size(620, 35); - this.label3.TabIndex = 0; - this.label3.Text = "Choose Reduced Reduncancy Storage (RRS) to reduce costs by storing non-critical, " + - "reproducible data at lower levels of redundancy."; - // - // groupBox3 - // - this.groupBox3.AutoSize = true; - this.groupBox3.Controls.Add(this.tableLayoutPanel20); - this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox3.Location = new System.Drawing.Point(3, 198); - this.groupBox3.Name = "groupBox3"; - this.groupBox3.Size = new System.Drawing.Size(1, 81); - this.groupBox3.TabIndex = 2; - this.groupBox3.TabStop = false; - this.groupBox3.Text = "Encryption"; - // - // tableLayoutPanel20 - // - this.tableLayoutPanel20.AutoSize = true; - this.tableLayoutPanel20.ColumnCount = 1; - this.tableLayoutPanel20.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 632F)); - this.tableLayoutPanel20.Controls.Add(this.defaultEncryptionComboBox, 0, 1); - this.tableLayoutPanel20.Controls.Add(this.label8, 0, 0); - this.tableLayoutPanel20.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel20.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel20.Name = "tableLayoutPanel20"; - this.tableLayoutPanel20.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel20.RowCount = 2; - this.tableLayoutPanel20.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel20.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel20.Size = new System.Drawing.Size(0, 59); - this.tableLayoutPanel20.TabIndex = 0; - // - // defaultEncryptionComboBox - // - this.defaultEncryptionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.defaultEncryptionComboBox.FormattingEnabled = true; - this.defaultEncryptionComboBox.Location = new System.Drawing.Point(8, 28); - this.defaultEncryptionComboBox.Name = "defaultEncryptionComboBox"; - this.defaultEncryptionComboBox.Size = new System.Drawing.Size(279, 23); - this.defaultEncryptionComboBox.TabIndex = 3; - this.defaultEncryptionComboBox.SelectionChangeCommitted += new System.EventHandler(this.defaultEncryptionComboBox_SelectionChangeCommitted); - // - // label8 - // - this.label8.AutoSize = true; - this.label8.ForeColor = System.Drawing.SystemColors.GrayText; - this.label8.Location = new System.Drawing.Point(8, 5); - this.label8.Name = "label8"; - this.label8.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); - this.label8.Size = new System.Drawing.Size(289, 20); - this.label8.TabIndex = 1; - this.label8.Text = "Choose the algorithm to encrypt files with on upload."; - // - // managedGoogleDocsPanel - // - this.managedGoogleDocsPanel.Controls.Add(this.tableLayoutPanel31); - this.managedGoogleDocsPanel.Location = new System.Drawing.Point(0, 0); - this.managedGoogleDocsPanel.Name = "managedGoogleDocsPanel"; - this.managedGoogleDocsPanel.Size = new System.Drawing.Size(0, 0); - this.managedGoogleDocsPanel.Text = "managedPan"; - // - // tableLayoutPanel31 - // - this.tableLayoutPanel31.AutoSize = true; - this.tableLayoutPanel31.ColumnCount = 1; - this.tableLayoutPanel31.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel31.Controls.Add(this.groupBox23, 0, 0); - this.tableLayoutPanel31.Controls.Add(this.groupBox24, 0, 1); - this.tableLayoutPanel31.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel31.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel31.Name = "tableLayoutPanel31"; - this.tableLayoutPanel31.RowCount = 3; - this.tableLayoutPanel31.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel31.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel31.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel31.Size = new System.Drawing.Size(0, 0); - this.tableLayoutPanel31.TabIndex = 0; - // - // groupBox23 - // - this.groupBox23.AutoSize = true; - this.groupBox23.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.groupBox23.Controls.Add(this.tableLayoutPanel32); - this.groupBox23.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox23.Location = new System.Drawing.Point(3, 3); - this.groupBox23.Name = "groupBox23"; - this.groupBox23.Size = new System.Drawing.Size(1, 149); - this.groupBox23.TabIndex = 0; - this.groupBox23.TabStop = false; - this.groupBox23.Text = "Downloads"; - // - // tableLayoutPanel32 - // - this.tableLayoutPanel32.AutoSize = true; - this.tableLayoutPanel32.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel32.ColumnCount = 2; - this.tableLayoutPanel32.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 150F)); - this.tableLayoutPanel32.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 428F)); - this.tableLayoutPanel32.Controls.Add(this.gdDocumentsComboBox, 1, 1); - this.tableLayoutPanel32.Controls.Add(this.gdSpreadsheetsComboBox, 1, 3); - this.tableLayoutPanel32.Controls.Add(this.gdPresentationsComboBox, 1, 2); - this.tableLayoutPanel32.Controls.Add(this.label5, 0, 0); - this.tableLayoutPanel32.Controls.Add(this.label6, 0, 1); - this.tableLayoutPanel32.Controls.Add(this.label9, 0, 2); - this.tableLayoutPanel32.Controls.Add(this.label13, 0, 3); - this.tableLayoutPanel32.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel32.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel32.Name = "tableLayoutPanel32"; - this.tableLayoutPanel32.Padding = new System.Windows.Forms.Padding(5, 5, 5, 0); - this.tableLayoutPanel32.RowCount = 5; - this.tableLayoutPanel32.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel32.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel32.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel32.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel32.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel32.Size = new System.Drawing.Size(0, 127); - this.tableLayoutPanel32.TabIndex = 0; - // - // gdDocumentsComboBox - // - this.gdDocumentsComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.gdDocumentsComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.gdDocumentsComboBox.FormattingEnabled = true; - this.gdDocumentsComboBox.Location = new System.Drawing.Point(158, 43); - this.gdDocumentsComboBox.Name = "gdDocumentsComboBox"; - this.gdDocumentsComboBox.Size = new System.Drawing.Size(422, 23); - this.gdDocumentsComboBox.TabIndex = 7; - this.gdDocumentsComboBox.SelectionChangeCommitted += new System.EventHandler(this.gdDocumentsComboBox_SelectionChangeCommitted); - // - // gdSpreadsheetsComboBox - // - this.gdSpreadsheetsComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.gdSpreadsheetsComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.gdSpreadsheetsComboBox.FormattingEnabled = true; - this.gdSpreadsheetsComboBox.Location = new System.Drawing.Point(158, 101); - this.gdSpreadsheetsComboBox.Name = "gdSpreadsheetsComboBox"; - this.gdSpreadsheetsComboBox.Size = new System.Drawing.Size(422, 23); - this.gdSpreadsheetsComboBox.TabIndex = 6; - this.gdSpreadsheetsComboBox.SelectionChangeCommitted += new System.EventHandler(this.gdSpreadsheetsComboBox_SelectionChangeCommitted); - // - // gdPresentationsComboBox - // - this.gdPresentationsComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.gdPresentationsComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.gdPresentationsComboBox.FormattingEnabled = true; - this.gdPresentationsComboBox.Location = new System.Drawing.Point(158, 72); - this.gdPresentationsComboBox.Name = "gdPresentationsComboBox"; - this.gdPresentationsComboBox.Size = new System.Drawing.Size(422, 23); - this.gdPresentationsComboBox.TabIndex = 5; - this.gdPresentationsComboBox.SelectionChangeCommitted += new System.EventHandler(this.gdPresentationsComboBox_SelectionChangeCommitted); - // - // label5 - // - this.label5.AutoSize = true; - this.tableLayoutPanel32.SetColumnSpan(this.label5, 2); - this.label5.ForeColor = System.Drawing.SystemColors.GrayText; - this.label5.Location = new System.Drawing.Point(8, 5); - this.label5.Name = "label5"; - this.label5.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); - this.label5.Size = new System.Drawing.Size(565, 35); - this.label5.TabIndex = 0; - this.label5.Text = "Google Docs supports exporting documents in different file formats. Choose the de" + - "fault export format for documents downloaded."; - // - // label6 - // - this.label6.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(81, 47); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(71, 15); - this.label6.TabIndex = 1; - this.label6.Text = "Documents:"; - // - // label9 - // - this.label9.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(71, 76); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(81, 15); - this.label9.TabIndex = 2; - this.label9.Text = "Presentations:"; - // - // label13 - // - this.label13.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(73, 105); - this.label13.Name = "label13"; - this.label13.Size = new System.Drawing.Size(79, 15); - this.label13.TabIndex = 3; - this.label13.Text = "Spreadsheets:"; - // - // groupBox24 - // - this.groupBox24.AutoSize = true; - this.groupBox24.Controls.Add(this.tableLayoutPanel33); - this.groupBox24.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox24.Location = new System.Drawing.Point(3, 158); - this.groupBox24.Name = "groupBox24"; - this.groupBox24.Size = new System.Drawing.Size(1, 142); - this.groupBox24.TabIndex = 1; - this.groupBox24.TabStop = false; - this.groupBox24.Text = "Uploads"; - // - // tableLayoutPanel33 - // - this.tableLayoutPanel33.AutoSize = true; - this.tableLayoutPanel33.ColumnCount = 1; - this.tableLayoutPanel33.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 577F)); - this.tableLayoutPanel33.Controls.Add(this.gdConvertCheckBox, 0, 0); - this.tableLayoutPanel33.Controls.Add(this.labelConvert, 0, 1); - this.tableLayoutPanel33.Controls.Add(this.gdOCRcheckBox, 0, 2); - this.tableLayoutPanel33.Controls.Add(this.labelOcr, 0, 3); - this.tableLayoutPanel33.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel33.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel33.Name = "tableLayoutPanel33"; - this.tableLayoutPanel33.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel33.RowCount = 4; - this.tableLayoutPanel33.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel33.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel33.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel33.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel33.Size = new System.Drawing.Size(0, 120); - this.tableLayoutPanel33.TabIndex = 0; - // - // gdConvertCheckBox - // - this.gdConvertCheckBox.AutoSize = true; - this.gdConvertCheckBox.Location = new System.Drawing.Point(8, 8); - this.gdConvertCheckBox.Name = "gdConvertCheckBox"; - this.gdConvertCheckBox.Size = new System.Drawing.Size(191, 19); - this.gdConvertCheckBox.TabIndex = 0; - this.gdConvertCheckBox.Text = "Convert to Google Docs format"; - this.gdConvertCheckBox.UseVisualStyleBackColor = true; - this.gdConvertCheckBox.CheckedChanged += new System.EventHandler(this.gdConvertCheckBox_CheckedChanged); - // - // labelConvert - // - this.labelConvert.AutoSize = true; - this.labelConvert.ForeColor = System.Drawing.SystemColors.GrayText; - this.labelConvert.Location = new System.Drawing.Point(8, 30); - this.labelConvert.Name = "labelConvert"; - this.labelConvert.Padding = new System.Windows.Forms.Padding(0, 0, 0, 15); - this.labelConvert.Size = new System.Drawing.Size(545, 45); - this.labelConvert.TabIndex = 1; - this.labelConvert.Text = "You can simply store the uploaded files in Google Docs, or convert text documents" + - ", presentations and spreadsheets to Google Docs format so you can later edit con" + - "tent online."; - // - // gdOCRcheckBox - // - this.gdOCRcheckBox.AutoSize = true; - this.gdOCRcheckBox.Location = new System.Drawing.Point(8, 78); - this.gdOCRcheckBox.Name = "gdOCRcheckBox"; - this.gdOCRcheckBox.Size = new System.Drawing.Size(220, 19); - this.gdOCRcheckBox.TabIndex = 2; - this.gdOCRcheckBox.Text = "Optical Character Recognition (OCR)"; - this.gdOCRcheckBox.UseVisualStyleBackColor = true; - this.gdOCRcheckBox.CheckedChanged += new System.EventHandler(this.gdOCRcheckBox_CheckedChanged); - // - // labelOcr - // - this.labelOcr.AutoSize = true; - this.labelOcr.ForeColor = System.Drawing.SystemColors.GrayText; - this.labelOcr.Location = new System.Drawing.Point(8, 100); - this.labelOcr.Name = "labelOcr"; - this.labelOcr.Size = new System.Drawing.Size(502, 15); - this.labelOcr.TabIndex = 3; - this.labelOcr.Text = "Attempt to extract text and create a new document from PNG, JPEG and GIF images u" + - "ploaded."; - // - // managedBandwidthPanel - // - this.managedBandwidthPanel.Controls.Add(this.tableLayoutPanel34); - this.managedBandwidthPanel.Location = new System.Drawing.Point(0, 0); - this.managedBandwidthPanel.Name = "managedBandwidthPanel"; - this.managedBandwidthPanel.Size = new System.Drawing.Size(0, 0); - this.managedBandwidthPanel.Text = "managedPanel1"; - // - // tableLayoutPanel34 - // - this.tableLayoutPanel34.AutoSize = true; - this.tableLayoutPanel34.ColumnCount = 1; - this.tableLayoutPanel34.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel34.Controls.Add(this.groupBox25, 0, 0); - this.tableLayoutPanel34.Controls.Add(this.groupBox26, 0, 1); - this.tableLayoutPanel34.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel34.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel34.Name = "tableLayoutPanel34"; - this.tableLayoutPanel34.RowCount = 3; - this.tableLayoutPanel34.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel34.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel34.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel34.Size = new System.Drawing.Size(0, 0); - this.tableLayoutPanel34.TabIndex = 0; - // - // groupBox25 - // - this.groupBox25.AutoSize = true; - this.groupBox25.Controls.Add(this.tableLayoutPanel35); - this.groupBox25.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox25.Location = new System.Drawing.Point(3, 3); - this.groupBox25.Name = "groupBox25"; - this.groupBox25.Size = new System.Drawing.Size(1, 61); - this.groupBox25.TabIndex = 0; - this.groupBox25.TabStop = false; - this.groupBox25.Text = "Downloads"; - // - // tableLayoutPanel35 - // - this.tableLayoutPanel35.AutoSize = true; - this.tableLayoutPanel35.ColumnCount = 2; - this.tableLayoutPanel35.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 250F)); - this.tableLayoutPanel35.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel35.Controls.Add(this.label31, 0, 0); - this.tableLayoutPanel35.Controls.Add(this.defaultDownloadThrottleCombobox, 1, 0); - this.tableLayoutPanel35.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel35.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel35.Name = "tableLayoutPanel35"; - this.tableLayoutPanel35.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel35.RowCount = 1; - this.tableLayoutPanel35.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel35.Size = new System.Drawing.Size(0, 39); - this.tableLayoutPanel35.TabIndex = 0; - // - // label31 - // - this.label31.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label31.AutoSize = true; - this.label31.Location = new System.Drawing.Point(121, 12); - this.label31.Name = "label31"; - this.label31.Size = new System.Drawing.Size(131, 15); - this.label31.TabIndex = 2; - this.label31.Text = "Maximum Throughput:"; - this.label31.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // defaultDownloadThrottleCombobox - // - this.defaultDownloadThrottleCombobox.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.defaultDownloadThrottleCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.defaultDownloadThrottleCombobox.FormattingEnabled = true; - this.defaultDownloadThrottleCombobox.Location = new System.Drawing.Point(258, 8); - this.defaultDownloadThrottleCombobox.Name = "defaultDownloadThrottleCombobox"; - this.defaultDownloadThrottleCombobox.Size = new System.Drawing.Size(272, 23); - this.defaultDownloadThrottleCombobox.TabIndex = 1; - this.defaultDownloadThrottleCombobox.SelectionChangeCommitted += new System.EventHandler(this.defaultDownloadThrottleCombobox_SelectionChangeCommitted); - // - // groupBox26 - // - this.groupBox26.AutoSize = true; - this.groupBox26.Controls.Add(this.tableLayoutPanel36); - this.groupBox26.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox26.Location = new System.Drawing.Point(3, 70); - this.groupBox26.Name = "groupBox26"; - this.groupBox26.Size = new System.Drawing.Size(1, 61); - this.groupBox26.TabIndex = 1; - this.groupBox26.TabStop = false; - this.groupBox26.Text = "Uploads"; - // - // tableLayoutPanel36 - // - this.tableLayoutPanel36.AutoSize = true; - this.tableLayoutPanel36.ColumnCount = 2; - this.tableLayoutPanel36.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 250F)); - this.tableLayoutPanel36.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel36.Controls.Add(this.defaultUploadThrottleCombobox, 1, 0); - this.tableLayoutPanel36.Controls.Add(this.label32, 0, 0); - this.tableLayoutPanel36.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel36.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel36.Name = "tableLayoutPanel36"; - this.tableLayoutPanel36.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel36.RowCount = 1; - this.tableLayoutPanel36.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel36.Size = new System.Drawing.Size(0, 39); - this.tableLayoutPanel36.TabIndex = 0; - // - // defaultUploadThrottleCombobox - // - this.defaultUploadThrottleCombobox.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.defaultUploadThrottleCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.defaultUploadThrottleCombobox.FormattingEnabled = true; - this.defaultUploadThrottleCombobox.Location = new System.Drawing.Point(258, 8); - this.defaultUploadThrottleCombobox.Name = "defaultUploadThrottleCombobox"; - this.defaultUploadThrottleCombobox.Size = new System.Drawing.Size(272, 23); - this.defaultUploadThrottleCombobox.TabIndex = 4; - this.defaultUploadThrottleCombobox.SelectionChangeCommitted += new System.EventHandler(this.defaultUploadThrottleCombobox_SelectionChangeCommitted); - // - // label32 - // - this.label32.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label32.AutoSize = true; - this.label32.Location = new System.Drawing.Point(121, 12); - this.label32.Name = "label32"; - this.label32.Size = new System.Drawing.Size(131, 15); - this.label32.TabIndex = 5; - this.label32.Text = "Maximum Throughput:"; - this.label32.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // managedConnectionPanel - // - this.managedConnectionPanel.Controls.Add(this.tableLayoutPanel37); - this.managedConnectionPanel.Location = new System.Drawing.Point(0, 0); - this.managedConnectionPanel.Name = "managedConnectionPanel"; - this.managedConnectionPanel.Size = new System.Drawing.Size(0, 0); - this.managedConnectionPanel.Text = "managedPanel1"; - // - // tableLayoutPanel37 - // - this.tableLayoutPanel37.AutoSize = true; - this.tableLayoutPanel37.ColumnCount = 1; - this.tableLayoutPanel37.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel37.Controls.Add(this.groupBox21, 0, 1); - this.tableLayoutPanel37.Controls.Add(this.groupBox4, 0, 0); - this.tableLayoutPanel37.Controls.Add(this.groupBox20, 0, 2); - this.tableLayoutPanel37.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel37.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel37.Name = "tableLayoutPanel37"; - this.tableLayoutPanel37.RowCount = 4; - this.tableLayoutPanel37.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel37.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel37.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel37.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel37.Size = new System.Drawing.Size(0, 0); - this.tableLayoutPanel37.TabIndex = 0; - // - // groupBox21 - // - this.groupBox21.AutoSize = true; - this.groupBox21.Controls.Add(this.tableLayoutPanel39); - this.groupBox21.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox21.Location = new System.Drawing.Point(3, 105); - this.groupBox21.Name = "groupBox21"; - this.groupBox21.Size = new System.Drawing.Size(1, 144); - this.groupBox21.TabIndex = 0; - this.groupBox21.TabStop = false; - this.groupBox21.Text = "Timeouts"; - // - // tableLayoutPanel39 - // - this.tableLayoutPanel39.AutoSize = true; - this.tableLayoutPanel39.ColumnCount = 2; - this.tableLayoutPanel39.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel39.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel39.Controls.Add(this.connectionTimeoutUpDown, 1, 0); - this.tableLayoutPanel39.Controls.Add(this.retriesUpDown, 1, 3); - this.tableLayoutPanel39.Controls.Add(this.retryCheckbox, 0, 1); - this.tableLayoutPanel39.Controls.Add(this.label34, 0, 3); - this.tableLayoutPanel39.Controls.Add(this.label36, 0, 0); - this.tableLayoutPanel39.Controls.Add(this.retryDelayUpDown, 1, 2); - this.tableLayoutPanel39.Controls.Add(this.label16, 0, 2); - this.tableLayoutPanel39.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel39.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel39.Name = "tableLayoutPanel39"; - this.tableLayoutPanel39.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel39.RowCount = 4; - this.tableLayoutPanel39.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel39.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel39.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel39.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel39.Size = new System.Drawing.Size(0, 122); - this.tableLayoutPanel39.TabIndex = 12; - // - // connectionTimeoutUpDown - // - this.connectionTimeoutUpDown.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.connectionTimeoutUpDown.AutoSize = true; - this.connectionTimeoutUpDown.Location = new System.Drawing.Point(8, 8); - this.connectionTimeoutUpDown.Maximum = new decimal(new int[] { - 60, - 0, - 0, - 0}); - this.connectionTimeoutUpDown.Minimum = new decimal(new int[] { - 10, - 0, - 0, - 0}); - this.connectionTimeoutUpDown.Name = "connectionTimeoutUpDown"; - this.connectionTimeoutUpDown.Size = new System.Drawing.Size(1, 23); - this.connectionTimeoutUpDown.TabIndex = 6; - this.connectionTimeoutUpDown.Value = new decimal(new int[] { - 10, - 0, - 0, - 0}); - this.connectionTimeoutUpDown.ValueChanged += new System.EventHandler(this.connectionTimeoutUpDown_ValueChanged); - // - // retriesUpDown - // - this.retriesUpDown.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.retriesUpDown.AutoSize = true; - this.retriesUpDown.Location = new System.Drawing.Point(8, 91); - this.retriesUpDown.Maximum = new decimal(new int[] { - 9, - 0, - 0, - 0}); - this.retriesUpDown.Name = "retriesUpDown"; - this.retriesUpDown.Size = new System.Drawing.Size(1, 23); - this.retriesUpDown.TabIndex = 11; - this.retriesUpDown.Value = new decimal(new int[] { - 9, - 0, - 0, - 0}); - this.retriesUpDown.ValueChanged += new System.EventHandler(this.retriesUpDown_ValueChanged); - // - // retryCheckbox - // - this.retryCheckbox.AutoSize = true; - this.retryCheckbox.Location = new System.Drawing.Point(8, 37); - this.retryCheckbox.Name = "retryCheckbox"; - this.retryCheckbox.Size = new System.Drawing.Size(1, 19); - this.retryCheckbox.TabIndex = 7; - this.retryCheckbox.Text = "Repeat failed networking tasks"; - this.retryCheckbox.UseVisualStyleBackColor = true; - this.retryCheckbox.CheckedChanged += new System.EventHandler(this.retryCheckbox_CheckedChanged); - // - // label34 - // - this.label34.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label34.AutoSize = true; - this.label34.Location = new System.Drawing.Point(8, 95); - this.label34.Name = "label34"; - this.label34.Size = new System.Drawing.Size(1, 15); - this.label34.TabIndex = 10; - this.label34.Text = "Number of retries:"; - this.label34.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // label36 - // - this.label36.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.label36.AutoSize = true; - this.label36.Location = new System.Drawing.Point(8, 12); - this.label36.Name = "label36"; - this.label36.Size = new System.Drawing.Size(1, 15); - this.label36.TabIndex = 2; - this.label36.Text = "Timeout for opening connections (seconds):"; - this.label36.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // retryDelayUpDown - // - this.retryDelayUpDown.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.retryDelayUpDown.AutoSize = true; - this.retryDelayUpDown.Location = new System.Drawing.Point(8, 62); - this.retryDelayUpDown.Maximum = new decimal(new int[] { - 30, - 0, - 0, - 0}); - this.retryDelayUpDown.Name = "retryDelayUpDown"; - this.retryDelayUpDown.Size = new System.Drawing.Size(1, 23); - this.retryDelayUpDown.TabIndex = 9; - this.retryDelayUpDown.Value = new decimal(new int[] { - 10, - 0, - 0, - 0}); - this.retryDelayUpDown.ValueChanged += new System.EventHandler(this.retryDelayUpDown_ValueChanged); - // - // label16 - // - this.label16.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label16.AutoSize = true; - this.label16.Location = new System.Drawing.Point(8, 66); - this.label16.Name = "label16"; - this.label16.Size = new System.Drawing.Size(1, 15); - this.label16.TabIndex = 12; - this.label16.Text = "with delay (seconds):"; - // - // groupBox4 - // - this.groupBox4.AutoSize = true; - this.groupBox4.Controls.Add(this.tableLayoutPanel38); - this.groupBox4.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox4.Location = new System.Drawing.Point(3, 3); - this.groupBox4.Name = "groupBox4"; - this.groupBox4.Size = new System.Drawing.Size(1, 96); - this.groupBox4.TabIndex = 2; - this.groupBox4.TabStop = false; - this.groupBox4.Text = "Text Encoding"; - // - // tableLayoutPanel38 - // - this.tableLayoutPanel38.AutoSize = true; - this.tableLayoutPanel38.ColumnCount = 1; - this.tableLayoutPanel38.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 628F)); - this.tableLayoutPanel38.Controls.Add(this.label2, 0, 0); - this.tableLayoutPanel38.Controls.Add(this.defaultEncodingCombobox, 0, 1); - this.tableLayoutPanel38.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel38.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel38.Name = "tableLayoutPanel38"; - this.tableLayoutPanel38.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel38.RowCount = 2; - this.tableLayoutPanel38.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel38.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel38.Size = new System.Drawing.Size(0, 74); - this.tableLayoutPanel38.TabIndex = 6; - // - // label2 - // - this.label2.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label2.AutoEllipsis = true; - this.label2.AutoSize = true; - this.label2.ForeColor = System.Drawing.SystemColors.GrayText; - this.label2.Location = new System.Drawing.Point(8, 5); - this.label2.Name = "label2"; - this.label2.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); - this.label2.Size = new System.Drawing.Size(609, 35); - this.label2.TabIndex = 0; - this.label2.Text = "The selected default text encoding is used to convert characters in filenames dis" + - "played in the browser. This should match the text encoding used on the server."; - // - // defaultEncodingCombobox - // - this.defaultEncodingCombobox.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.defaultEncodingCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.defaultEncodingCombobox.FormattingEnabled = true; - this.defaultEncodingCombobox.ItemHeight = 15; - this.defaultEncodingCombobox.Location = new System.Drawing.Point(8, 43); - this.defaultEncodingCombobox.Name = "defaultEncodingCombobox"; - this.defaultEncodingCombobox.Size = new System.Drawing.Size(206, 23); - this.defaultEncodingCombobox.TabIndex = 5; - this.defaultEncodingCombobox.SelectionChangeCommitted += new System.EventHandler(this.defaultEncodingCombobox_SelectionChangeCommitted); - // - // groupBox20 - // - this.groupBox20.AutoSize = true; - this.groupBox20.Controls.Add(this.tableLayoutPanel40); - this.groupBox20.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox20.Location = new System.Drawing.Point(3, 255); - this.groupBox20.Name = "groupBox20"; - this.groupBox20.Size = new System.Drawing.Size(1, 88); - this.groupBox20.TabIndex = 3; - this.groupBox20.TabStop = false; - this.groupBox20.Text = "Proxies"; - // - // tableLayoutPanel40 - // - this.tableLayoutPanel40.AutoSize = true; - this.tableLayoutPanel40.ColumnCount = 1; - this.tableLayoutPanel40.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel40.Controls.Add(this.systemProxyCheckBox, 0, 0); - this.tableLayoutPanel40.Controls.Add(this.changeSystemProxyButton, 0, 1); - this.tableLayoutPanel40.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel40.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel40.Name = "tableLayoutPanel40"; - this.tableLayoutPanel40.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel40.RowCount = 2; - this.tableLayoutPanel40.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel40.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel40.Size = new System.Drawing.Size(0, 66); - this.tableLayoutPanel40.TabIndex = 0; - // - // systemProxyCheckBox - // - this.systemProxyCheckBox.AutoSize = true; - this.systemProxyCheckBox.Location = new System.Drawing.Point(8, 8); - this.systemProxyCheckBox.Name = "systemProxyCheckBox"; - this.systemProxyCheckBox.Size = new System.Drawing.Size(1, 19); - this.systemProxyCheckBox.TabIndex = 0; - this.systemProxyCheckBox.Text = "Use system proxy settings"; - this.systemProxyCheckBox.UseVisualStyleBackColor = true; - this.systemProxyCheckBox.CheckStateChanged += new System.EventHandler(this.systemProxyCheckBox_CheckStateChanged); - // - // changeSystemProxyButton - // - this.changeSystemProxyButton.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.changeSystemProxyButton.AutoSize = true; - this.changeSystemProxyButton.Location = new System.Drawing.Point(8, 33); - this.changeSystemProxyButton.Name = "changeSystemProxyButton"; - this.changeSystemProxyButton.Size = new System.Drawing.Size(1, 25); - this.changeSystemProxyButton.TabIndex = 1; - this.changeSystemProxyButton.Text = "Change Settings…"; - this.changeSystemProxyButton.UseVisualStyleBackColor = true; - this.changeSystemProxyButton.Click += new System.EventHandler(this.changeSystemProxyButton_Click); - // - // managedUpdatePanel - // - this.managedUpdatePanel.Controls.Add(this.tableLayoutPanel41); - this.managedUpdatePanel.Location = new System.Drawing.Point(0, 0); - this.managedUpdatePanel.Name = "managedUpdatePanel"; - this.managedUpdatePanel.Size = new System.Drawing.Size(0, 0); - this.managedUpdatePanel.Text = "managedPanel1"; - // - // tableLayoutPanel41 - // - this.tableLayoutPanel41.ColumnCount = 1; - this.tableLayoutPanel41.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel41.Controls.Add(this.groupBox27, 0, 0); - this.tableLayoutPanel41.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel41.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel41.Name = "tableLayoutPanel41"; - this.tableLayoutPanel41.RowCount = 2; - this.tableLayoutPanel41.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel41.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel41.Size = new System.Drawing.Size(0, 0); - this.tableLayoutPanel41.TabIndex = 0; - // - // groupBox27 - // - this.groupBox27.AutoSize = true; - this.groupBox27.Controls.Add(this.tableLayoutPanel42); - this.groupBox27.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox27.Location = new System.Drawing.Point(3, 3); - this.groupBox27.Name = "groupBox27"; - this.groupBox27.Size = new System.Drawing.Size(1, 112); - this.groupBox27.TabIndex = 0; - this.groupBox27.TabStop = false; - this.groupBox27.Text = "Update"; - // - // tableLayoutPanel42 - // - this.tableLayoutPanel42.AutoSize = true; - this.tableLayoutPanel42.ColumnCount = 2; - this.tableLayoutPanel42.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel42.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel42.Controls.Add(this.updateCheckBox, 0, 0); - this.tableLayoutPanel42.Controls.Add(this.updateCheckButton, 0, 1); - this.tableLayoutPanel42.Controls.Add(this.lastUpdateLabel, 0, 3); - this.tableLayoutPanel42.Controls.Add(this.updateFeedComboBox, 1, 0); - this.tableLayoutPanel42.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel42.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel42.Name = "tableLayoutPanel42"; - this.tableLayoutPanel42.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel42.RowCount = 4; - this.tableLayoutPanel42.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel42.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel42.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 5F)); - this.tableLayoutPanel42.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel42.Size = new System.Drawing.Size(0, 90); - this.tableLayoutPanel42.TabIndex = 0; - // - // updateCheckBox - // - this.updateCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.updateCheckBox.AutoSize = true; - this.updateCheckBox.Location = new System.Drawing.Point(8, 10); - this.updateCheckBox.Name = "updateCheckBox"; - this.updateCheckBox.Size = new System.Drawing.Size(210, 19); - this.updateCheckBox.TabIndex = 0; - this.updateCheckBox.Text = "Automatically check for updates in"; - this.updateCheckBox.UseVisualStyleBackColor = true; - this.updateCheckBox.CheckedChanged += new System.EventHandler(this.updateCheckBox_CheckedChanged); - // - // updateCheckButton - // - this.updateCheckButton.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.updateCheckButton.AutoSize = true; - this.updateCheckButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel42.SetColumnSpan(this.updateCheckButton, 2); - this.updateCheckButton.Location = new System.Drawing.Point(161, 37); - this.updateCheckButton.Name = "updateCheckButton"; - this.updateCheckButton.Size = new System.Drawing.Size(137, 25); - this.updateCheckButton.TabIndex = 1; - this.updateCheckButton.Text = "Check for Update Now"; - this.updateCheckButton.UseVisualStyleBackColor = true; - this.updateCheckButton.Click += new System.EventHandler(this.updateCheckButton_Click); - // - // lastUpdateLabel - // - this.lastUpdateLabel.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.lastUpdateLabel.AutoSize = true; - this.tableLayoutPanel42.SetColumnSpan(this.lastUpdateLabel, 2); - this.lastUpdateLabel.Location = new System.Drawing.Point(207, 70); - this.lastUpdateLabel.Name = "lastUpdateLabel"; - this.lastUpdateLabel.Size = new System.Drawing.Size(44, 15); - this.lastUpdateLabel.TabIndex = 2; - this.lastUpdateLabel.Text = "label17"; - // - // updateFeedComboBox - // - this.updateFeedComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.updateFeedComboBox.FormattingEnabled = true; - this.updateFeedComboBox.Location = new System.Drawing.Point(224, 8); - this.updateFeedComboBox.Name = "updateFeedComboBox"; - this.updateFeedComboBox.Size = new System.Drawing.Size(227, 23); - this.updateFeedComboBox.TabIndex = 3; - this.updateFeedComboBox.SelectionChangeCommitted += new System.EventHandler(this.updateFeedComboBox_SelectionChangeCommitted); - // - // managedLanguagePanel - // - this.managedLanguagePanel.Controls.Add(this.tableLayoutPanel43); - this.managedLanguagePanel.Location = new System.Drawing.Point(0, 0); - this.managedLanguagePanel.Name = "managedLanguagePanel"; - this.managedLanguagePanel.Size = new System.Drawing.Size(0, 0); - this.managedLanguagePanel.Text = "managedPanel1"; - // - // tableLayoutPanel43 - // - this.tableLayoutPanel43.AutoSize = true; - this.tableLayoutPanel43.ColumnCount = 1; - this.tableLayoutPanel43.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel43.Controls.Add(this.groupBox28, 0, 0); - this.tableLayoutPanel43.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel43.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel43.Name = "tableLayoutPanel43"; - this.tableLayoutPanel43.RowCount = 2; - this.tableLayoutPanel43.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel43.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel43.Size = new System.Drawing.Size(0, 0); - this.tableLayoutPanel43.TabIndex = 0; - // - // groupBox28 - // - this.groupBox28.AutoSize = true; - this.groupBox28.Controls.Add(this.tableLayoutPanel44); - this.groupBox28.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox28.Location = new System.Drawing.Point(3, 3); - this.groupBox28.Name = "groupBox28"; - this.groupBox28.Size = new System.Drawing.Size(1, 81); - this.groupBox28.TabIndex = 0; - this.groupBox28.TabStop = false; - this.groupBox28.Text = "Language"; - // - // tableLayoutPanel44 - // - this.tableLayoutPanel44.AutoSize = true; - this.tableLayoutPanel44.ColumnCount = 1; - this.tableLayoutPanel44.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 577F)); - this.tableLayoutPanel44.Controls.Add(this.languageComboBox, 0, 1); - this.tableLayoutPanel44.Controls.Add(this.label18, 0, 0); - this.tableLayoutPanel44.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel44.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel44.Name = "tableLayoutPanel44"; - this.tableLayoutPanel44.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel44.RowCount = 2; - this.tableLayoutPanel44.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel44.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel44.Size = new System.Drawing.Size(0, 59); - this.tableLayoutPanel44.TabIndex = 0; - // - // languageComboBox - // - this.languageComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.languageComboBox.Location = new System.Drawing.Point(8, 28); - this.languageComboBox.Name = "languageComboBox"; - this.languageComboBox.Size = new System.Drawing.Size(308, 23); - this.languageComboBox.TabIndex = 2; - this.languageComboBox.SelectionChangeCommitted += new System.EventHandler(this.languageComboBox_SelectionChangeCommitted); - // - // label18 - // - this.label18.AutoSize = true; - this.label18.ForeColor = System.Drawing.SystemColors.GrayText; - this.label18.Location = new System.Drawing.Point(8, 5); - this.label18.Name = "label18"; - this.label18.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); - this.label18.Size = new System.Drawing.Size(321, 20); - this.label18.TabIndex = 0; - this.label18.Text = "Changes take effect the next time you open the application."; - // - // managedEditorPanel - // - this.managedEditorPanel.Controls.Add(this.tableLayoutPanel3); - this.managedEditorPanel.Location = new System.Drawing.Point(0, 0); - this.managedEditorPanel.Name = "managedEditorPanel"; - this.managedEditorPanel.Size = new System.Drawing.Size(0, 0); - this.managedEditorPanel.Text = "managedPanel1"; - // - // tableLayoutPanel3 - // - this.tableLayoutPanel3.ColumnCount = 1; - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel3.Controls.Add(this.groupBox2, 0, 0); - this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - this.tableLayoutPanel3.RowCount = 2; - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel3.Size = new System.Drawing.Size(0, 0); - this.tableLayoutPanel3.TabIndex = 0; - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.tableLayoutPanel4); - this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox2.Location = new System.Drawing.Point(3, 3); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(1, 1); - this.groupBox2.TabIndex = 0; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "Editor"; - // - // tableLayoutPanel4 - // - this.tableLayoutPanel4.ColumnCount = 1; - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel4.Controls.Add(this.label14, 0, 0); - this.tableLayoutPanel4.Controls.Add(this.editorComboBox, 0, 1); - this.tableLayoutPanel4.Controls.Add(this.alwaysUseDefaultEditorCheckBox, 0, 2); - this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel4.Name = "tableLayoutPanel4"; - this.tableLayoutPanel4.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel4.RowCount = 3; - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel4.Size = new System.Drawing.Size(0, 0); - this.tableLayoutPanel4.TabIndex = 0; - // - // label14 - // - this.label14.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label14.AutoEllipsis = true; - this.label14.AutoSize = true; - this.label14.ForeColor = System.Drawing.SystemColors.GrayText; - this.label14.Location = new System.Drawing.Point(8, 5); - this.label14.Name = "label14"; - this.label14.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); - this.label14.Size = new System.Drawing.Size(1, 5); - this.label14.TabIndex = 1; - this.label14.Text = "Select a text editor to open files with by default if no other application instal" + - "led can be found to edit a given file type."; - // - // editorComboBox - // - this.editorComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.editorComboBox.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; - this.editorComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.editorComboBox.FormattingEnabled = true; - this.editorComboBox.IconMember = null; - this.editorComboBox.Location = new System.Drawing.Point(8, 13); - this.editorComboBox.Name = "editorComboBox"; - this.editorComboBox.Size = new System.Drawing.Size(1, 24); - this.editorComboBox.TabIndex = 2; - this.editorComboBox.SelectionChangeCommitted += new System.EventHandler(this.editorComboBox_SelectionChangeCommitted); - // - // alwaysUseDefaultEditorCheckBox - // - this.alwaysUseDefaultEditorCheckBox.AutoSize = true; - this.alwaysUseDefaultEditorCheckBox.Location = new System.Drawing.Point(8, 43); - this.alwaysUseDefaultEditorCheckBox.Name = "alwaysUseDefaultEditorCheckBox"; - this.alwaysUseDefaultEditorCheckBox.Size = new System.Drawing.Size(1, 19); - this.alwaysUseDefaultEditorCheckBox.TabIndex = 3; - this.alwaysUseDefaultEditorCheckBox.Text = "Always use this application"; - this.alwaysUseDefaultEditorCheckBox.UseVisualStyleBackColor = true; - this.alwaysUseDefaultEditorCheckBox.CheckedChanged += new System.EventHandler(this.alwaysUseDefaultEditorCheckBox_CheckedChanged); - // - // managedTransfersPanel - // - this.managedTransfersPanel.Controls.Add(this.transfersTabControl); - this.managedTransfersPanel.Location = new System.Drawing.Point(0, 0); - this.managedTransfersPanel.Name = "managedTransfersPanel"; - this.managedTransfersPanel.Size = new System.Drawing.Size(654, 479); - this.managedTransfersPanel.Text = "managedPanel1"; - // - // transfersTabControl - // - this.transfersTabControl.Appearance = System.Windows.Forms.TabAppearance.FlatButtons; - this.transfersTabControl.Controls.Add(this.tabPage1); - this.transfersTabControl.Controls.Add(this.tabPage2); - this.transfersTabControl.Controls.Add(this.tabPage3); - this.transfersTabControl.Controls.Add(this.tabPage4); - this.transfersTabControl.Dock = System.Windows.Forms.DockStyle.Fill; - this.transfersTabControl.Location = new System.Drawing.Point(0, 0); - this.transfersTabControl.Name = "transfersTabControl"; - this.transfersTabControl.SelectedIndex = 0; - this.transfersTabControl.Size = new System.Drawing.Size(654, 479); - this.transfersTabControl.TabIndex = 0; - // - // tabPage1 - // - this.tabPage1.Controls.Add(this.tableLayoutPanel5); - this.tabPage1.Location = new System.Drawing.Point(4, 27); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Size = new System.Drawing.Size(646, 448); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "General"; - this.tabPage1.UseVisualStyleBackColor = true; - // - // tableLayoutPanel5 - // - this.tableLayoutPanel5.AutoSize = true; - this.tableLayoutPanel5.ColumnCount = 1; - this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel5.Controls.Add(this.groupBox6, 0, 2); - this.tableLayoutPanel5.Controls.Add(this.groupBox5, 0, 1); - this.tableLayoutPanel5.Controls.Add(this.groupBox29, 0, 0); - this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel5.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel5.Name = "tableLayoutPanel5"; - this.tableLayoutPanel5.RowCount = 4; - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel5.Size = new System.Drawing.Size(646, 448); - this.tableLayoutPanel5.TabIndex = 7; - // - // groupBox6 - // - this.groupBox6.AutoSize = true; - this.groupBox6.Controls.Add(this.tableLayoutPanel8); - this.groupBox6.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox6.Location = new System.Drawing.Point(3, 293); - this.groupBox6.Name = "groupBox6"; - this.groupBox6.Size = new System.Drawing.Size(640, 115); - this.groupBox6.TabIndex = 6; - this.groupBox6.TabStop = false; - this.groupBox6.Text = "Uploads"; - // - // tableLayoutPanel8 - // - this.tableLayoutPanel8.AutoSize = true; - this.tableLayoutPanel8.ColumnCount = 2; - this.tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 150F)); - this.tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 570F)); - this.tableLayoutPanel8.Controls.Add(this.label12, 0, 1); - this.tableLayoutPanel8.Controls.Add(this.duplicateUploadOverwriteCheckbox, 1, 2); - this.tableLayoutPanel8.Controls.Add(this.duplicateUploadCombobox, 1, 1); - this.tableLayoutPanel8.Controls.Add(this.uploadTemporaryNameCheckBox, 0, 0); - this.tableLayoutPanel8.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel8.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel8.Name = "tableLayoutPanel8"; - this.tableLayoutPanel8.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel8.RowCount = 3; - this.tableLayoutPanel8.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel8.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel8.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel8.Size = new System.Drawing.Size(634, 93); - this.tableLayoutPanel8.TabIndex = 8; - // - // label12 - // - this.label12.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(76, 37); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(76, 15); - this.label12.TabIndex = 5; - this.label12.Text = "Existing Files:"; - this.label12.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // duplicateUploadOverwriteCheckbox - // - this.duplicateUploadOverwriteCheckbox.AutoSize = true; - this.duplicateUploadOverwriteCheckbox.Location = new System.Drawing.Point(158, 62); - this.duplicateUploadOverwriteCheckbox.Name = "duplicateUploadOverwriteCheckbox"; - this.duplicateUploadOverwriteCheckbox.Size = new System.Drawing.Size(200, 19); - this.duplicateUploadOverwriteCheckbox.TabIndex = 7; - this.duplicateUploadOverwriteCheckbox.Text = "Always overwrite when reloading"; - this.duplicateUploadOverwriteCheckbox.UseVisualStyleBackColor = true; - this.duplicateUploadOverwriteCheckbox.CheckedChanged += new System.EventHandler(this.duplicateUploadOverwriteCheckbox_CheckedChanged); - // - // duplicateUploadCombobox - // - this.duplicateUploadCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.duplicateUploadCombobox.FormattingEnabled = true; - this.duplicateUploadCombobox.Location = new System.Drawing.Point(158, 33); - this.duplicateUploadCombobox.Name = "duplicateUploadCombobox"; - this.duplicateUploadCombobox.Size = new System.Drawing.Size(286, 23); - this.duplicateUploadCombobox.TabIndex = 4; - this.duplicateUploadCombobox.SelectionChangeCommitted += new System.EventHandler(this.duplicateUploadCombobox_SelectionChangeCommitted); - // - // uploadTemporaryNameCheckBox - // - this.uploadTemporaryNameCheckBox.AutoSize = true; - this.tableLayoutPanel8.SetColumnSpan(this.uploadTemporaryNameCheckBox, 2); - this.uploadTemporaryNameCheckBox.Location = new System.Drawing.Point(8, 8); - this.uploadTemporaryNameCheckBox.Name = "uploadTemporaryNameCheckBox"; - this.uploadTemporaryNameCheckBox.Size = new System.Drawing.Size(197, 19); - this.uploadTemporaryNameCheckBox.TabIndex = 8; - this.uploadTemporaryNameCheckBox.Text = "Upload with temporary filename"; - this.uploadTemporaryNameCheckBox.UseVisualStyleBackColor = true; - this.uploadTemporaryNameCheckBox.CheckedChanged += new System.EventHandler(this.uploadTemporaryNameCheckBox_CheckedChanged); - // - // groupBox5 - // - this.groupBox5.AutoSize = true; - this.groupBox5.Controls.Add(this.tableLayoutPanel7); - this.groupBox5.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox5.Location = new System.Drawing.Point(3, 145); - this.groupBox5.Name = "groupBox5"; - this.groupBox5.Size = new System.Drawing.Size(640, 142); - this.groupBox5.TabIndex = 5; - this.groupBox5.TabStop = false; - this.groupBox5.Text = "Downloads"; - // - // tableLayoutPanel7 - // - this.tableLayoutPanel7.AutoSize = true; - this.tableLayoutPanel7.ColumnCount = 3; - this.tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 150F)); - this.tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel7.Controls.Add(this.openAfterDownloadCheckbox, 0, 0); - this.tableLayoutPanel7.Controls.Add(this.duplicateDownloadCombobox, 1, 2); - this.tableLayoutPanel7.Controls.Add(this.label11, 0, 2); - this.tableLayoutPanel7.Controls.Add(this.downloadFolderLabel, 1, 1); - this.tableLayoutPanel7.Controls.Add(this.label10, 0, 1); - this.tableLayoutPanel7.Controls.Add(this.duplicateDownloadOverwriteCheckbox, 1, 3); - this.tableLayoutPanel7.Controls.Add(this.showDownloadFolderDialogButton, 2, 1); - this.tableLayoutPanel7.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel7.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel7.Name = "tableLayoutPanel7"; - this.tableLayoutPanel7.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel7.RowCount = 4; - this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel7.Size = new System.Drawing.Size(634, 120); - this.tableLayoutPanel7.TabIndex = 10; - // - // openAfterDownloadCheckbox - // - this.openAfterDownloadCheckbox.AutoSize = true; - this.tableLayoutPanel7.SetColumnSpan(this.openAfterDownloadCheckbox, 3); - this.openAfterDownloadCheckbox.Location = new System.Drawing.Point(8, 8); - this.openAfterDownloadCheckbox.Name = "openAfterDownloadCheckbox"; - this.openAfterDownloadCheckbox.Size = new System.Drawing.Size(276, 19); - this.openAfterDownloadCheckbox.TabIndex = 0; - this.openAfterDownloadCheckbox.Text = "Open downloaded files with default application"; - this.openAfterDownloadCheckbox.UseVisualStyleBackColor = true; - this.openAfterDownloadCheckbox.CheckedChanged += new System.EventHandler(this.openAfterDownloadCheckbox_CheckedChanged); - // - // duplicateDownloadCombobox - // - this.duplicateDownloadCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.duplicateDownloadCombobox.FormattingEnabled = true; - this.duplicateDownloadCombobox.Location = new System.Drawing.Point(158, 64); - this.duplicateDownloadCombobox.Name = "duplicateDownloadCombobox"; - this.duplicateDownloadCombobox.Size = new System.Drawing.Size(286, 23); - this.duplicateDownloadCombobox.TabIndex = 4; - this.duplicateDownloadCombobox.SelectionChangeCommitted += new System.EventHandler(this.duplicateDownloadCombobox_SelectionChangeCommitted); - // - // label11 - // - this.label11.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(76, 68); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(76, 15); - this.label11.TabIndex = 5; - this.label11.Text = "Existing Files:"; - this.label11.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // downloadFolderLabel - // - this.downloadFolderLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.downloadFolderLabel.AutoSize = true; - this.downloadFolderLabel.Location = new System.Drawing.Point(158, 38); - this.downloadFolderLabel.Name = "downloadFolderLabel"; - this.downloadFolderLabel.Size = new System.Drawing.Size(76, 15); - this.downloadFolderLabel.TabIndex = 9; - this.downloadFolderLabel.Text = "ellipsisLabel1"; - // - // label10 - // - this.label10.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(52, 38); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(100, 15); - this.label10.TabIndex = 3; - this.label10.Text = "Download Folder:"; - this.label10.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // duplicateDownloadOverwriteCheckbox - // - this.duplicateDownloadOverwriteCheckbox.AutoSize = true; - this.duplicateDownloadOverwriteCheckbox.Location = new System.Drawing.Point(158, 93); - this.duplicateDownloadOverwriteCheckbox.Name = "duplicateDownloadOverwriteCheckbox"; - this.duplicateDownloadOverwriteCheckbox.Size = new System.Drawing.Size(200, 19); - this.duplicateDownloadOverwriteCheckbox.TabIndex = 6; - this.duplicateDownloadOverwriteCheckbox.Text = "Always overwrite when reloading"; - this.duplicateDownloadOverwriteCheckbox.UseVisualStyleBackColor = true; - this.duplicateDownloadOverwriteCheckbox.CheckedChanged += new System.EventHandler(this.duplicateDownloadOverwriteCheckbox_CheckedChanged); - // - // showDownloadFolderDialogButton - // - this.showDownloadFolderDialogButton.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.showDownloadFolderDialogButton.AutoSize = true; - this.showDownloadFolderDialogButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.showDownloadFolderDialogButton.Location = new System.Drawing.Point(560, 33); - this.showDownloadFolderDialogButton.Name = "showDownloadFolderDialogButton"; - this.showDownloadFolderDialogButton.Size = new System.Drawing.Size(66, 25); - this.showDownloadFolderDialogButton.TabIndex = 8; - this.showDownloadFolderDialogButton.Text = "Choose…"; - this.showDownloadFolderDialogButton.UseVisualStyleBackColor = true; - this.showDownloadFolderDialogButton.Click += new System.EventHandler(this.showDownloadFolderDialogButton_Click); - // - // groupBox29 - // - this.groupBox29.AutoSize = true; - this.groupBox29.Controls.Add(this.tableLayoutPanel6); - this.groupBox29.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox29.Location = new System.Drawing.Point(3, 3); - this.groupBox29.Name = "groupBox29"; - this.groupBox29.Size = new System.Drawing.Size(640, 136); - this.groupBox29.TabIndex = 7; - this.groupBox29.TabStop = false; - this.groupBox29.Text = "Transfers"; - // - // tableLayoutPanel6 - // - this.tableLayoutPanel6.AutoSize = true; - this.tableLayoutPanel6.ColumnCount = 2; - this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 150F)); - this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 570F)); - this.tableLayoutPanel6.Controls.Add(this.transfersToFrontCheckbox, 0, 1); - this.tableLayoutPanel6.Controls.Add(this.removeFromTransfersCheckbox, 0, 3); - this.tableLayoutPanel6.Controls.Add(this.transferFilesCombobox, 1, 0); - this.tableLayoutPanel6.Controls.Add(this.transfersToBackCheckbox, 0, 2); - this.tableLayoutPanel6.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel6.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel6.Name = "tableLayoutPanel6"; - this.tableLayoutPanel6.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel6.RowCount = 4; - this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel6.Size = new System.Drawing.Size(634, 114); - this.tableLayoutPanel6.TabIndex = 0; - // - // transfersToFrontCheckbox - // - this.transfersToFrontCheckbox.AutoSize = true; - this.tableLayoutPanel6.SetColumnSpan(this.transfersToFrontCheckbox, 2); - this.transfersToFrontCheckbox.Location = new System.Drawing.Point(8, 37); - this.transfersToFrontCheckbox.Name = "transfersToFrontCheckbox"; - this.transfersToFrontCheckbox.Size = new System.Drawing.Size(248, 19); - this.transfersToFrontCheckbox.TabIndex = 2; - this.transfersToFrontCheckbox.Text = "Bring window to front when transfer starts"; - this.transfersToFrontCheckbox.UseVisualStyleBackColor = true; - this.transfersToFrontCheckbox.CheckedChanged += new System.EventHandler(this.transfersToFrontCheckbox_CheckedChanged); - // - // removeFromTransfersCheckbox - // - this.removeFromTransfersCheckbox.AutoSize = true; - this.tableLayoutPanel6.SetColumnSpan(this.removeFromTransfersCheckbox, 2); - this.removeFromTransfersCheckbox.Location = new System.Drawing.Point(8, 87); - this.removeFromTransfersCheckbox.Name = "removeFromTransfersCheckbox"; - this.removeFromTransfersCheckbox.Size = new System.Drawing.Size(202, 19); - this.removeFromTransfersCheckbox.TabIndex = 4; - this.removeFromTransfersCheckbox.Text = "Remove when transfer completes"; - this.removeFromTransfersCheckbox.UseVisualStyleBackColor = true; - this.removeFromTransfersCheckbox.CheckedChanged += new System.EventHandler(this.removeFromTransfersCheckbox_CheckedChanged); - // - // transferFilesCombobox - // - this.transferFilesCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.transferFilesCombobox.FormattingEnabled = true; - this.transferFilesCombobox.Location = new System.Drawing.Point(158, 8); - this.transferFilesCombobox.Name = "transferFilesCombobox"; - this.transferFilesCombobox.Size = new System.Drawing.Size(286, 23); - this.transferFilesCombobox.TabIndex = 0; - this.transferFilesCombobox.SelectionChangeCommitted += new System.EventHandler(this.transferFilesCombobox_SelectionChangeCommitted); - // - // transfersToBackCheckbox - // - this.transfersToBackCheckbox.AutoSize = true; - this.tableLayoutPanel6.SetColumnSpan(this.transfersToBackCheckbox, 2); - this.transfersToBackCheckbox.Location = new System.Drawing.Point(8, 62); - this.transfersToBackCheckbox.Name = "transfersToBackCheckbox"; - this.transfersToBackCheckbox.Size = new System.Drawing.Size(233, 19); - this.transfersToBackCheckbox.TabIndex = 3; - this.transfersToBackCheckbox.Text = "Close window when transfer completes"; - this.transfersToBackCheckbox.UseVisualStyleBackColor = true; - this.transfersToBackCheckbox.CheckedChanged += new System.EventHandler(this.transfersToBackCheckbox_CheckedChanged); - // - // label1 - // - this.label1.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(73, 12); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(79, 15); - this.label1.TabIndex = 5; - this.label1.Text = "Transfer Files:"; - // - // tabPage2 - // - this.tabPage2.Controls.Add(this.tableLayoutPanel9); - this.tabPage2.Location = new System.Drawing.Point(4, 27); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Size = new System.Drawing.Size(646, 448); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = "Permissions"; - this.tabPage2.UseVisualStyleBackColor = true; - // - // tableLayoutPanel9 - // - this.tableLayoutPanel9.AutoSize = true; - this.tableLayoutPanel9.ColumnCount = 1; - this.tableLayoutPanel9.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel9.Controls.Add(this.groupBox7, 0, 0); - this.tableLayoutPanel9.Controls.Add(this.groupBox8, 0, 1); - this.tableLayoutPanel9.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel9.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel9.Name = "tableLayoutPanel9"; - this.tableLayoutPanel9.RowCount = 3; - this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel9.Size = new System.Drawing.Size(646, 448); - this.tableLayoutPanel9.TabIndex = 2; - // - // groupBox7 - // - this.groupBox7.AutoSize = true; - this.groupBox7.Controls.Add(this.tableLayoutPanel10); - this.groupBox7.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox7.Enabled = false; - this.groupBox7.Location = new System.Drawing.Point(3, 3); - this.groupBox7.Name = "groupBox7"; - this.groupBox7.Size = new System.Drawing.Size(640, 181); - this.groupBox7.TabIndex = 0; - this.groupBox7.TabStop = false; - this.groupBox7.Text = "Downloads"; - this.groupBox7.Visible = false; - // - // tableLayoutPanel10 - // - this.tableLayoutPanel10.AutoSize = true; - this.tableLayoutPanel10.ColumnCount = 2; - this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel10.Controls.Add(this.chmodDownloadCheckbox, 0, 0); - this.tableLayoutPanel10.Controls.Add(this.chmodDownloadCustomRadioButton, 0, 1); - this.tableLayoutPanel10.Controls.Add(this.chmodDownloadDefaultRadioButton, 0, 2); - this.tableLayoutPanel10.Controls.Add(this.chmodDownloadTypeCombobox, 1, 2); - this.tableLayoutPanel10.Controls.Add(this.tableLayoutPanel11, 0, 3); - this.tableLayoutPanel10.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel10.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel10.Name = "tableLayoutPanel10"; - this.tableLayoutPanel10.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel10.RowCount = 4; - this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel10.Size = new System.Drawing.Size(634, 159); - this.tableLayoutPanel10.TabIndex = 16; - this.tableLayoutPanel10.Visible = false; - // - // chmodDownloadCheckbox - // - this.chmodDownloadCheckbox.AutoSize = true; - this.tableLayoutPanel10.SetColumnSpan(this.chmodDownloadCheckbox, 2); - this.chmodDownloadCheckbox.Location = new System.Drawing.Point(8, 8); - this.chmodDownloadCheckbox.Name = "chmodDownloadCheckbox"; - this.chmodDownloadCheckbox.Size = new System.Drawing.Size(133, 19); - this.chmodDownloadCheckbox.TabIndex = 0; - this.chmodDownloadCheckbox.Text = "Change permissions"; - this.chmodDownloadCheckbox.UseVisualStyleBackColor = true; - this.chmodDownloadCheckbox.CheckedChanged += new System.EventHandler(this.chmodDownloadCheckbox_CheckedChanged); - // - // chmodDownloadCustomRadioButton - // - this.chmodDownloadCustomRadioButton.AutoSize = true; - this.tableLayoutPanel10.SetColumnSpan(this.chmodDownloadCustomRadioButton, 2); - this.chmodDownloadCustomRadioButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chmodDownloadCustomRadioButton.Location = new System.Drawing.Point(8, 33); - this.chmodDownloadCustomRadioButton.Name = "chmodDownloadCustomRadioButton"; - this.chmodDownloadCustomRadioButton.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0); - this.chmodDownloadCustomRadioButton.Size = new System.Drawing.Size(251, 17); - this.chmodDownloadCustomRadioButton.TabIndex = 1; - this.chmodDownloadCustomRadioButton.TabStop = true; - this.chmodDownloadCustomRadioButton.Text = "to the permissions of the remote file or folder"; - this.chmodDownloadCustomRadioButton.UseVisualStyleBackColor = true; - // - // chmodDownloadDefaultRadioButton - // - this.chmodDownloadDefaultRadioButton.AutoSize = true; - this.chmodDownloadDefaultRadioButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chmodDownloadDefaultRadioButton.Location = new System.Drawing.Point(8, 56); - this.chmodDownloadDefaultRadioButton.Name = "chmodDownloadDefaultRadioButton"; - this.chmodDownloadDefaultRadioButton.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0); - this.chmodDownloadDefaultRadioButton.Size = new System.Drawing.Size(143, 17); - this.chmodDownloadDefaultRadioButton.TabIndex = 2; - this.chmodDownloadDefaultRadioButton.TabStop = true; - this.chmodDownloadDefaultRadioButton.Text = "to these permissions:"; - this.chmodDownloadDefaultRadioButton.UseVisualStyleBackColor = true; - this.chmodDownloadDefaultRadioButton.CheckedChanged += new System.EventHandler(this.chmodDownloadDefaultRadioButton_CheckedChanged); - // - // chmodDownloadTypeCombobox - // - this.chmodDownloadTypeCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.chmodDownloadTypeCombobox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chmodDownloadTypeCombobox.FormattingEnabled = true; - this.chmodDownloadTypeCombobox.Location = new System.Drawing.Point(157, 56); - this.chmodDownloadTypeCombobox.MinimumSize = new System.Drawing.Size(150, 0); - this.chmodDownloadTypeCombobox.Name = "chmodDownloadTypeCombobox"; - this.chmodDownloadTypeCombobox.Size = new System.Drawing.Size(150, 20); - this.chmodDownloadTypeCombobox.TabIndex = 3; - this.chmodDownloadTypeCombobox.SelectionChangeCommitted += new System.EventHandler(this.chmodDownloadTypeCombobox_SelectionChangeCommitted); - // - // tableLayoutPanel11 - // - this.tableLayoutPanel11.AutoSize = true; - this.tableLayoutPanel11.ColumnCount = 6; - this.tableLayoutPanel10.SetColumnSpan(this.tableLayoutPanel11, 2); - this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 50F)); - this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel11.Controls.Add(this.ownerDownloadLabel, 1, 0); - this.tableLayoutPanel11.Controls.Add(this.dotherxCheckbox, 4, 2); - this.tableLayoutPanel11.Controls.Add(this.groupDownloadLabel, 1, 1); - this.tableLayoutPanel11.Controls.Add(this.dotherwCheckbox, 3, 2); - this.tableLayoutPanel11.Controls.Add(this.othersDownloadLabel, 1, 2); - this.tableLayoutPanel11.Controls.Add(this.dgroupxCheckbox, 4, 1); - this.tableLayoutPanel11.Controls.Add(this.dotherrCheckbox, 2, 2); - this.tableLayoutPanel11.Controls.Add(this.dgroupwCheckbox, 3, 1); - this.tableLayoutPanel11.Controls.Add(this.downerrCheckbox, 2, 0); - this.tableLayoutPanel11.Controls.Add(this.downerwCheckbox, 3, 0); - this.tableLayoutPanel11.Controls.Add(this.downerxCheckbox, 4, 0); - this.tableLayoutPanel11.Controls.Add(this.dgrouprCheckbox, 2, 1); - this.tableLayoutPanel11.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel11.Location = new System.Drawing.Point(8, 82); - this.tableLayoutPanel11.Name = "tableLayoutPanel11"; - this.tableLayoutPanel11.RowCount = 3; - this.tableLayoutPanel11.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel11.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel11.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel11.Size = new System.Drawing.Size(618, 69); - this.tableLayoutPanel11.TabIndex = 4; - // - // ownerDownloadLabel - // - this.ownerDownloadLabel.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.ownerDownloadLabel.AutoSize = true; - this.ownerDownloadLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ownerDownloadLabel.Location = new System.Drawing.Point(54, 5); - this.ownerDownloadLabel.Name = "ownerDownloadLabel"; - this.ownerDownloadLabel.Size = new System.Drawing.Size(43, 13); - this.ownerDownloadLabel.TabIndex = 4; - this.ownerDownloadLabel.Text = "Owner"; - this.ownerDownloadLabel.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // dotherxCheckbox - // - this.dotherxCheckbox.AutoSize = true; - this.dotherxCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.dotherxCheckbox.Location = new System.Drawing.Point(215, 49); - this.dotherxCheckbox.Name = "dotherxCheckbox"; - this.dotherxCheckbox.Size = new System.Drawing.Size(64, 17); - this.dotherxCheckbox.TabIndex = 15; - this.dotherxCheckbox.Text = "Execute"; - this.dotherxCheckbox.UseVisualStyleBackColor = true; - this.dotherxCheckbox.CheckedChanged += new System.EventHandler(this.dotherxCheckbox_CheckedChanged); - // - // groupDownloadLabel - // - this.groupDownloadLabel.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.groupDownloadLabel.AutoSize = true; - this.groupDownloadLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.groupDownloadLabel.Location = new System.Drawing.Point(56, 28); - this.groupDownloadLabel.Name = "groupDownloadLabel"; - this.groupDownloadLabel.Size = new System.Drawing.Size(41, 13); - this.groupDownloadLabel.TabIndex = 8; - this.groupDownloadLabel.Text = "Group"; - this.groupDownloadLabel.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // dotherwCheckbox - // - this.dotherwCheckbox.AutoSize = true; - this.dotherwCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.dotherwCheckbox.Location = new System.Drawing.Point(160, 49); - this.dotherwCheckbox.Name = "dotherwCheckbox"; - this.dotherwCheckbox.Size = new System.Drawing.Size(49, 17); - this.dotherwCheckbox.TabIndex = 14; - this.dotherwCheckbox.Text = "Write"; - this.dotherwCheckbox.UseVisualStyleBackColor = true; - this.dotherwCheckbox.CheckedChanged += new System.EventHandler(this.dotherwCheckbox_CheckedChanged); - // - // othersDownloadLabel - // - this.othersDownloadLabel.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.othersDownloadLabel.AutoSize = true; - this.othersDownloadLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.othersDownloadLabel.Location = new System.Drawing.Point(53, 51); - this.othersDownloadLabel.Name = "othersDownloadLabel"; - this.othersDownloadLabel.Size = new System.Drawing.Size(44, 13); - this.othersDownloadLabel.TabIndex = 12; - this.othersDownloadLabel.Text = "Others"; - this.othersDownloadLabel.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // dgroupxCheckbox - // - this.dgroupxCheckbox.AutoSize = true; - this.dgroupxCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.dgroupxCheckbox.Location = new System.Drawing.Point(215, 26); - this.dgroupxCheckbox.Name = "dgroupxCheckbox"; - this.dgroupxCheckbox.Size = new System.Drawing.Size(64, 17); - this.dgroupxCheckbox.TabIndex = 11; - this.dgroupxCheckbox.Text = "Execute"; - this.dgroupxCheckbox.UseVisualStyleBackColor = true; - this.dgroupxCheckbox.CheckedChanged += new System.EventHandler(this.dgroupxCheckbox_CheckedChanged); - // - // dotherrCheckbox - // - this.dotherrCheckbox.AutoSize = true; - this.dotherrCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.dotherrCheckbox.Location = new System.Drawing.Point(103, 49); - this.dotherrCheckbox.Name = "dotherrCheckbox"; - this.dotherrCheckbox.Size = new System.Drawing.Size(51, 17); - this.dotherrCheckbox.TabIndex = 13; - this.dotherrCheckbox.Text = "Read"; - this.dotherrCheckbox.UseVisualStyleBackColor = true; - this.dotherrCheckbox.CheckedChanged += new System.EventHandler(this.dotherrCheckbox_CheckedChanged); - // - // dgroupwCheckbox - // - this.dgroupwCheckbox.AutoSize = true; - this.dgroupwCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.dgroupwCheckbox.Location = new System.Drawing.Point(160, 26); - this.dgroupwCheckbox.Name = "dgroupwCheckbox"; - this.dgroupwCheckbox.Size = new System.Drawing.Size(49, 17); - this.dgroupwCheckbox.TabIndex = 10; - this.dgroupwCheckbox.Text = "Write"; - this.dgroupwCheckbox.UseVisualStyleBackColor = true; - this.dgroupwCheckbox.CheckedChanged += new System.EventHandler(this.dgroupwCheckbox_CheckedChanged); - // - // downerrCheckbox - // - this.downerrCheckbox.AutoSize = true; - this.downerrCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.downerrCheckbox.Location = new System.Drawing.Point(103, 3); - this.downerrCheckbox.Name = "downerrCheckbox"; - this.downerrCheckbox.Size = new System.Drawing.Size(51, 17); - this.downerrCheckbox.TabIndex = 5; - this.downerrCheckbox.Text = "Read"; - this.downerrCheckbox.UseVisualStyleBackColor = true; - this.downerrCheckbox.CheckedChanged += new System.EventHandler(this.downerrCheckbox_CheckedChanged); - // - // downerwCheckbox - // - this.downerwCheckbox.AutoSize = true; - this.downerwCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.downerwCheckbox.Location = new System.Drawing.Point(160, 3); - this.downerwCheckbox.Name = "downerwCheckbox"; - this.downerwCheckbox.Size = new System.Drawing.Size(49, 17); - this.downerwCheckbox.TabIndex = 6; - this.downerwCheckbox.Text = "Write"; - this.downerwCheckbox.UseVisualStyleBackColor = true; - this.downerwCheckbox.CheckedChanged += new System.EventHandler(this.downerwCheckbox_CheckedChanged); - // - // downerxCheckbox - // - this.downerxCheckbox.AutoSize = true; - this.downerxCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.downerxCheckbox.Location = new System.Drawing.Point(215, 3); - this.downerxCheckbox.Name = "downerxCheckbox"; - this.downerxCheckbox.Size = new System.Drawing.Size(64, 17); - this.downerxCheckbox.TabIndex = 7; - this.downerxCheckbox.Text = "Execute"; - this.downerxCheckbox.UseVisualStyleBackColor = true; - this.downerxCheckbox.CheckedChanged += new System.EventHandler(this.downerxCheckbox_CheckedChanged); - // - // dgrouprCheckbox - // - this.dgrouprCheckbox.AutoSize = true; - this.dgrouprCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.dgrouprCheckbox.Location = new System.Drawing.Point(103, 26); - this.dgrouprCheckbox.Name = "dgrouprCheckbox"; - this.dgrouprCheckbox.Size = new System.Drawing.Size(51, 17); - this.dgrouprCheckbox.TabIndex = 9; - this.dgrouprCheckbox.Text = "Read"; - this.dgrouprCheckbox.UseVisualStyleBackColor = true; - this.dgrouprCheckbox.CheckedChanged += new System.EventHandler(this.dgrouprCheckbox_CheckedChanged); - // - // groupBox8 - // - this.groupBox8.AutoSize = true; - this.groupBox8.Controls.Add(this.tableLayoutPanel12); - this.groupBox8.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox8.Location = new System.Drawing.Point(3, 190); - this.groupBox8.Name = "groupBox8"; - this.groupBox8.Size = new System.Drawing.Size(640, 181); - this.groupBox8.TabIndex = 1; - this.groupBox8.TabStop = false; - this.groupBox8.Text = "Uploads"; - // - // tableLayoutPanel12 - // - this.tableLayoutPanel12.AutoSize = true; - this.tableLayoutPanel12.ColumnCount = 2; - this.tableLayoutPanel12.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel12.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel12.Controls.Add(this.chmodUploadCheckbox, 0, 0); - this.tableLayoutPanel12.Controls.Add(this.chmodUploadCustomRadioButton, 0, 1); - this.tableLayoutPanel12.Controls.Add(this.chmodUploadDefaultRadioButton, 0, 2); - this.tableLayoutPanel12.Controls.Add(this.chmodUploadTypeCombobox, 1, 2); - this.tableLayoutPanel12.Controls.Add(this.tableLayoutPanel13, 0, 3); - this.tableLayoutPanel12.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel12.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel12.Name = "tableLayoutPanel12"; - this.tableLayoutPanel12.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel12.RowCount = 4; - this.tableLayoutPanel12.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel12.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel12.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel12.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel12.Size = new System.Drawing.Size(634, 159); - this.tableLayoutPanel12.TabIndex = 16; - // - // chmodUploadCheckbox - // - this.chmodUploadCheckbox.AutoSize = true; - this.tableLayoutPanel12.SetColumnSpan(this.chmodUploadCheckbox, 2); - this.chmodUploadCheckbox.Location = new System.Drawing.Point(8, 8); - this.chmodUploadCheckbox.Name = "chmodUploadCheckbox"; - this.chmodUploadCheckbox.Size = new System.Drawing.Size(133, 19); - this.chmodUploadCheckbox.TabIndex = 0; - this.chmodUploadCheckbox.Text = "Change permissions"; - this.chmodUploadCheckbox.UseVisualStyleBackColor = true; - this.chmodUploadCheckbox.CheckedChanged += new System.EventHandler(this.chmodUploadCheckbox_CheckedChanged); - // - // chmodUploadCustomRadioButton - // - this.chmodUploadCustomRadioButton.AutoSize = true; - this.tableLayoutPanel12.SetColumnSpan(this.chmodUploadCustomRadioButton, 2); - this.chmodUploadCustomRadioButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chmodUploadCustomRadioButton.Location = new System.Drawing.Point(8, 33); - this.chmodUploadCustomRadioButton.Name = "chmodUploadCustomRadioButton"; - this.chmodUploadCustomRadioButton.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0); - this.chmodUploadCustomRadioButton.Size = new System.Drawing.Size(240, 17); - this.chmodUploadCustomRadioButton.TabIndex = 1; - this.chmodUploadCustomRadioButton.TabStop = true; - this.chmodUploadCustomRadioButton.Text = "to the permissions of the local file or folder"; - this.chmodUploadCustomRadioButton.UseVisualStyleBackColor = true; - this.chmodUploadCustomRadioButton.Visible = false; - // - // chmodUploadDefaultRadioButton - // - this.chmodUploadDefaultRadioButton.AutoSize = true; - this.chmodUploadDefaultRadioButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chmodUploadDefaultRadioButton.Location = new System.Drawing.Point(8, 56); - this.chmodUploadDefaultRadioButton.Name = "chmodUploadDefaultRadioButton"; - this.chmodUploadDefaultRadioButton.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0); - this.chmodUploadDefaultRadioButton.Size = new System.Drawing.Size(143, 17); - this.chmodUploadDefaultRadioButton.TabIndex = 2; - this.chmodUploadDefaultRadioButton.TabStop = true; - this.chmodUploadDefaultRadioButton.Text = "to these permissions:"; - this.chmodUploadDefaultRadioButton.UseVisualStyleBackColor = true; - this.chmodUploadDefaultRadioButton.CheckedChanged += new System.EventHandler(this.chmodUploadDefaultRadioButton_CheckedChanged); - // - // chmodUploadTypeCombobox - // - this.chmodUploadTypeCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.chmodUploadTypeCombobox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chmodUploadTypeCombobox.FormattingEnabled = true; - this.chmodUploadTypeCombobox.Location = new System.Drawing.Point(157, 56); - this.chmodUploadTypeCombobox.Name = "chmodUploadTypeCombobox"; - this.chmodUploadTypeCombobox.Size = new System.Drawing.Size(150, 20); - this.chmodUploadTypeCombobox.TabIndex = 3; - this.chmodUploadTypeCombobox.SelectionChangeCommitted += new System.EventHandler(this.chmodUploadTypeCombobox_SelectionChangeCommitted); - // - // tableLayoutPanel13 - // - this.tableLayoutPanel13.AutoSize = true; - this.tableLayoutPanel13.ColumnCount = 6; - this.tableLayoutPanel12.SetColumnSpan(this.tableLayoutPanel13, 2); - this.tableLayoutPanel13.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 50F)); - this.tableLayoutPanel13.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel13.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel13.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel13.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel13.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel13.Controls.Add(this.ownerUploadLabel, 1, 0); - this.tableLayoutPanel13.Controls.Add(this.uotherxCheckbox, 4, 2); - this.tableLayoutPanel13.Controls.Add(this.uownerrCheckbox, 2, 0); - this.tableLayoutPanel13.Controls.Add(this.uotherwCheckbox, 3, 2); - this.tableLayoutPanel13.Controls.Add(this.uownerwCheckbox, 3, 0); - this.tableLayoutPanel13.Controls.Add(this.uotherrCheckbox, 2, 2); - this.tableLayoutPanel13.Controls.Add(this.uownerxCheckbox, 4, 0); - this.tableLayoutPanel13.Controls.Add(this.othersUploadLabel, 1, 2); - this.tableLayoutPanel13.Controls.Add(this.groupUploadLabel, 1, 1); - this.tableLayoutPanel13.Controls.Add(this.ugroupxCheckbox, 4, 1); - this.tableLayoutPanel13.Controls.Add(this.ugrouprCheckbox, 2, 1); - this.tableLayoutPanel13.Controls.Add(this.ugroupwCheckbox, 3, 1); - this.tableLayoutPanel13.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel13.Location = new System.Drawing.Point(8, 82); - this.tableLayoutPanel13.Name = "tableLayoutPanel13"; - this.tableLayoutPanel13.RowCount = 3; - this.tableLayoutPanel13.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel13.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel13.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel13.Size = new System.Drawing.Size(618, 69); - this.tableLayoutPanel13.TabIndex = 4; - // - // ownerUploadLabel - // - this.ownerUploadLabel.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.ownerUploadLabel.AutoSize = true; - this.ownerUploadLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ownerUploadLabel.Location = new System.Drawing.Point(54, 5); - this.ownerUploadLabel.Name = "ownerUploadLabel"; - this.ownerUploadLabel.Size = new System.Drawing.Size(43, 13); - this.ownerUploadLabel.TabIndex = 4; - this.ownerUploadLabel.Text = "Owner"; - this.ownerUploadLabel.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // uotherxCheckbox - // - this.uotherxCheckbox.AutoSize = true; - this.uotherxCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.uotherxCheckbox.Location = new System.Drawing.Point(215, 49); - this.uotherxCheckbox.Name = "uotherxCheckbox"; - this.uotherxCheckbox.Size = new System.Drawing.Size(64, 17); - this.uotherxCheckbox.TabIndex = 15; - this.uotherxCheckbox.Text = "Execute"; - this.uotherxCheckbox.UseVisualStyleBackColor = true; - this.uotherxCheckbox.CheckedChanged += new System.EventHandler(this.uotherxCheckbox_CheckedChanged); - // - // uownerrCheckbox - // - this.uownerrCheckbox.AutoSize = true; - this.uownerrCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.uownerrCheckbox.Location = new System.Drawing.Point(103, 3); - this.uownerrCheckbox.Name = "uownerrCheckbox"; - this.uownerrCheckbox.Size = new System.Drawing.Size(51, 17); - this.uownerrCheckbox.TabIndex = 5; - this.uownerrCheckbox.Text = "Read"; - this.uownerrCheckbox.UseVisualStyleBackColor = true; - this.uownerrCheckbox.CheckedChanged += new System.EventHandler(this.uownerrCheckbox_CheckedChanged); - // - // uotherwCheckbox - // - this.uotherwCheckbox.AutoSize = true; - this.uotherwCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.uotherwCheckbox.Location = new System.Drawing.Point(160, 49); - this.uotherwCheckbox.Name = "uotherwCheckbox"; - this.uotherwCheckbox.Size = new System.Drawing.Size(49, 17); - this.uotherwCheckbox.TabIndex = 14; - this.uotherwCheckbox.Text = "Write"; - this.uotherwCheckbox.UseVisualStyleBackColor = true; - this.uotherwCheckbox.CheckedChanged += new System.EventHandler(this.uotherwCheckbox_CheckedChanged); - // - // uownerwCheckbox - // - this.uownerwCheckbox.AutoSize = true; - this.uownerwCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.uownerwCheckbox.Location = new System.Drawing.Point(160, 3); - this.uownerwCheckbox.Name = "uownerwCheckbox"; - this.uownerwCheckbox.Size = new System.Drawing.Size(49, 17); - this.uownerwCheckbox.TabIndex = 6; - this.uownerwCheckbox.Text = "Write"; - this.uownerwCheckbox.UseVisualStyleBackColor = true; - this.uownerwCheckbox.CheckedChanged += new System.EventHandler(this.uownerwCheckbox_CheckedChanged); - // - // uotherrCheckbox - // - this.uotherrCheckbox.AutoSize = true; - this.uotherrCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.uotherrCheckbox.Location = new System.Drawing.Point(103, 49); - this.uotherrCheckbox.Name = "uotherrCheckbox"; - this.uotherrCheckbox.Size = new System.Drawing.Size(51, 17); - this.uotherrCheckbox.TabIndex = 13; - this.uotherrCheckbox.Text = "Read"; - this.uotherrCheckbox.UseVisualStyleBackColor = true; - this.uotherrCheckbox.CheckedChanged += new System.EventHandler(this.uotherrCheckbox_CheckedChanged); - // - // uownerxCheckbox - // - this.uownerxCheckbox.AutoSize = true; - this.uownerxCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.uownerxCheckbox.Location = new System.Drawing.Point(215, 3); - this.uownerxCheckbox.Name = "uownerxCheckbox"; - this.uownerxCheckbox.Size = new System.Drawing.Size(64, 17); - this.uownerxCheckbox.TabIndex = 7; - this.uownerxCheckbox.Text = "Execute"; - this.uownerxCheckbox.UseVisualStyleBackColor = true; - this.uownerxCheckbox.CheckedChanged += new System.EventHandler(this.uownerxCheckbox_CheckedChanged); - // - // othersUploadLabel - // - this.othersUploadLabel.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.othersUploadLabel.AutoSize = true; - this.othersUploadLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.othersUploadLabel.Location = new System.Drawing.Point(53, 51); - this.othersUploadLabel.Name = "othersUploadLabel"; - this.othersUploadLabel.Size = new System.Drawing.Size(44, 13); - this.othersUploadLabel.TabIndex = 12; - this.othersUploadLabel.Text = "Others"; - this.othersUploadLabel.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // groupUploadLabel - // - this.groupUploadLabel.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.groupUploadLabel.AutoSize = true; - this.groupUploadLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.groupUploadLabel.Location = new System.Drawing.Point(56, 28); - this.groupUploadLabel.Name = "groupUploadLabel"; - this.groupUploadLabel.Size = new System.Drawing.Size(41, 13); - this.groupUploadLabel.TabIndex = 8; - this.groupUploadLabel.Text = "Group"; - this.groupUploadLabel.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // ugroupxCheckbox - // - this.ugroupxCheckbox.AutoSize = true; - this.ugroupxCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ugroupxCheckbox.Location = new System.Drawing.Point(215, 26); - this.ugroupxCheckbox.Name = "ugroupxCheckbox"; - this.ugroupxCheckbox.Size = new System.Drawing.Size(64, 17); - this.ugroupxCheckbox.TabIndex = 11; - this.ugroupxCheckbox.Text = "Execute"; - this.ugroupxCheckbox.UseVisualStyleBackColor = true; - this.ugroupxCheckbox.CheckedChanged += new System.EventHandler(this.ugroupxCheckbox_CheckedChanged); - // - // ugrouprCheckbox - // - this.ugrouprCheckbox.AutoSize = true; - this.ugrouprCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ugrouprCheckbox.Location = new System.Drawing.Point(103, 26); - this.ugrouprCheckbox.Name = "ugrouprCheckbox"; - this.ugrouprCheckbox.Size = new System.Drawing.Size(51, 17); - this.ugrouprCheckbox.TabIndex = 9; - this.ugrouprCheckbox.Text = "Read"; - this.ugrouprCheckbox.UseVisualStyleBackColor = true; - this.ugrouprCheckbox.CheckedChanged += new System.EventHandler(this.ugrouprCheckbox_CheckedChanged); - // - // ugroupwCheckbox - // - this.ugroupwCheckbox.AutoSize = true; - this.ugroupwCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ugroupwCheckbox.Location = new System.Drawing.Point(160, 26); - this.ugroupwCheckbox.Name = "ugroupwCheckbox"; - this.ugroupwCheckbox.Size = new System.Drawing.Size(49, 17); - this.ugroupwCheckbox.TabIndex = 10; - this.ugroupwCheckbox.Text = "Write"; - this.ugroupwCheckbox.UseVisualStyleBackColor = true; - this.ugroupwCheckbox.CheckedChanged += new System.EventHandler(this.ugroupwCheckbox_CheckedChanged); - // - // tabPage3 - // - this.tabPage3.Controls.Add(this.tableLayoutPanel14); - this.tabPage3.Location = new System.Drawing.Point(4, 27); - this.tabPage3.Name = "tabPage3"; - this.tabPage3.Size = new System.Drawing.Size(646, 448); - this.tabPage3.TabIndex = 2; - this.tabPage3.Text = "Timestamps"; - this.tabPage3.UseVisualStyleBackColor = true; - // - // tableLayoutPanel14 - // - this.tableLayoutPanel14.AutoSize = true; - this.tableLayoutPanel14.ColumnCount = 1; - this.tableLayoutPanel14.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel14.Controls.Add(this.groupBox9, 0, 0); - this.tableLayoutPanel14.Controls.Add(this.groupBox10, 0, 1); - this.tableLayoutPanel14.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel14.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel14.Name = "tableLayoutPanel14"; - this.tableLayoutPanel14.RowCount = 3; - this.tableLayoutPanel14.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel14.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel14.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel14.Size = new System.Drawing.Size(646, 448); - this.tableLayoutPanel14.TabIndex = 2; - // - // groupBox9 - // - this.groupBox9.AutoSize = true; - this.groupBox9.Controls.Add(this.tableLayoutPanel15); - this.groupBox9.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox9.Location = new System.Drawing.Point(3, 3); - this.groupBox9.Name = "groupBox9"; - this.groupBox9.Size = new System.Drawing.Size(640, 57); - this.groupBox9.TabIndex = 0; - this.groupBox9.TabStop = false; - this.groupBox9.Text = "Downloads"; - // - // tableLayoutPanel15 - // - this.tableLayoutPanel15.AutoSize = true; - this.tableLayoutPanel15.ColumnCount = 1; - this.tableLayoutPanel15.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel15.Controls.Add(this.preserveModificationDownloadCheckbox, 0, 0); - this.tableLayoutPanel15.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel15.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel15.Name = "tableLayoutPanel15"; - this.tableLayoutPanel15.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel15.RowCount = 1; - this.tableLayoutPanel15.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel15.Size = new System.Drawing.Size(634, 35); - this.tableLayoutPanel15.TabIndex = 1; - // - // preserveModificationDownloadCheckbox - // - this.preserveModificationDownloadCheckbox.AutoSize = true; - this.preserveModificationDownloadCheckbox.Location = new System.Drawing.Point(8, 8); - this.preserveModificationDownloadCheckbox.Name = "preserveModificationDownloadCheckbox"; - this.preserveModificationDownloadCheckbox.Size = new System.Drawing.Size(167, 19); - this.preserveModificationDownloadCheckbox.TabIndex = 0; - this.preserveModificationDownloadCheckbox.Text = "Preserve modification date"; - this.preserveModificationDownloadCheckbox.UseVisualStyleBackColor = true; - this.preserveModificationDownloadCheckbox.CheckedChanged += new System.EventHandler(this.preserveModificationDownloadCheckbox_CheckedChanged); - // - // groupBox10 - // - this.groupBox10.AutoSize = true; - this.groupBox10.Controls.Add(this.tableLayoutPanel16); - this.groupBox10.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox10.Location = new System.Drawing.Point(3, 66); - this.groupBox10.Name = "groupBox10"; - this.groupBox10.Size = new System.Drawing.Size(640, 57); - this.groupBox10.TabIndex = 1; - this.groupBox10.TabStop = false; - this.groupBox10.Text = "Uploads"; - // - // tableLayoutPanel16 - // - this.tableLayoutPanel16.AutoSize = true; - this.tableLayoutPanel16.ColumnCount = 1; - this.tableLayoutPanel16.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel16.Controls.Add(this.preserveModificationUploadCheckbox, 0, 0); - this.tableLayoutPanel16.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel16.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel16.Name = "tableLayoutPanel16"; - this.tableLayoutPanel16.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel16.RowCount = 1; - this.tableLayoutPanel16.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel16.Size = new System.Drawing.Size(634, 35); - this.tableLayoutPanel16.TabIndex = 1; - // - // preserveModificationUploadCheckbox - // - this.preserveModificationUploadCheckbox.AutoSize = true; - this.preserveModificationUploadCheckbox.Location = new System.Drawing.Point(8, 8); - this.preserveModificationUploadCheckbox.Name = "preserveModificationUploadCheckbox"; - this.preserveModificationUploadCheckbox.Size = new System.Drawing.Size(167, 19); - this.preserveModificationUploadCheckbox.TabIndex = 0; - this.preserveModificationUploadCheckbox.Text = "Preserve modification date"; - this.preserveModificationUploadCheckbox.UseVisualStyleBackColor = true; - this.preserveModificationUploadCheckbox.CheckedChanged += new System.EventHandler(this.preserveModificationUploadCheckbox_CheckedChanged); - // - // tabPage4 - // - this.tabPage4.Controls.Add(this.tableLayoutPanel17); - this.tabPage4.Location = new System.Drawing.Point(4, 27); - this.tabPage4.Name = "tabPage4"; - this.tabPage4.Size = new System.Drawing.Size(646, 448); - this.tabPage4.TabIndex = 3; - this.tabPage4.Text = "Filter"; - this.tabPage4.UseVisualStyleBackColor = true; - // - // tableLayoutPanel17 - // - this.tableLayoutPanel17.AutoSize = true; - this.tableLayoutPanel17.ColumnCount = 1; - this.tableLayoutPanel17.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel17.Controls.Add(this.groupBox11, 0, 0); - this.tableLayoutPanel17.Controls.Add(this.groupBox12, 0, 1); - this.tableLayoutPanel17.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel17.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel17.Name = "tableLayoutPanel17"; - this.tableLayoutPanel17.RowCount = 3; - this.tableLayoutPanel17.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel17.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel17.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel17.Size = new System.Drawing.Size(646, 448); - this.tableLayoutPanel17.TabIndex = 3; - // - // groupBox11 - // - this.groupBox11.AutoSize = true; - this.groupBox11.Controls.Add(this.tableLayoutPanel18); - this.groupBox11.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox11.Location = new System.Drawing.Point(3, 3); - this.groupBox11.Name = "groupBox11"; - this.groupBox11.Size = new System.Drawing.Size(640, 163); - this.groupBox11.TabIndex = 1; - this.groupBox11.TabStop = false; - this.groupBox11.Text = "Downloads"; - // - // tableLayoutPanel18 - // - this.tableLayoutPanel18.AutoSize = true; - this.tableLayoutPanel18.ColumnCount = 2; - this.tableLayoutPanel18.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel18.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel18.Controls.Add(this.downloadSkipCheckbox, 0, 0); - this.tableLayoutPanel18.Controls.Add(this.downloadSkipRegexRichTextbox, 0, 1); - this.tableLayoutPanel18.Controls.Add(this.downloadSkipRegexDefaultButton, 1, 0); - this.tableLayoutPanel18.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel18.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel18.Name = "tableLayoutPanel18"; - this.tableLayoutPanel18.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel18.RowCount = 2; - this.tableLayoutPanel18.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel18.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel18.Size = new System.Drawing.Size(634, 141); - this.tableLayoutPanel18.TabIndex = 3; - // - // downloadSkipCheckbox - // - this.downloadSkipCheckbox.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.downloadSkipCheckbox.AutoSize = true; - this.downloadSkipCheckbox.Location = new System.Drawing.Point(8, 10); - this.downloadSkipCheckbox.Name = "downloadSkipCheckbox"; - this.downloadSkipCheckbox.Size = new System.Drawing.Size(247, 19); - this.downloadSkipCheckbox.TabIndex = 0; - this.downloadSkipCheckbox.Text = "Skip files matching the regular expression:"; - this.downloadSkipCheckbox.UseVisualStyleBackColor = true; - this.downloadSkipCheckbox.CheckedChanged += new System.EventHandler(this.downloadSkipCheckbox_CheckedChanged); - // - // downloadSkipRegexRichTextbox - // - this.tableLayoutPanel18.SetColumnSpan(this.downloadSkipRegexRichTextbox, 2); - this.downloadSkipRegexRichTextbox.Dock = System.Windows.Forms.DockStyle.Fill; - this.downloadSkipRegexRichTextbox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.downloadSkipRegexRichTextbox.Location = new System.Drawing.Point(8, 37); - this.downloadSkipRegexRichTextbox.Name = "downloadSkipRegexRichTextbox"; - this.downloadSkipRegexRichTextbox.Size = new System.Drawing.Size(618, 96); - this.downloadSkipRegexRichTextbox.TabIndex = 1; - this.downloadSkipRegexRichTextbox.Text = ""; - this.downloadSkipRegexRichTextbox.TextChanged += new System.EventHandler(this.downloadSkipRegexRichTextbox_TextChanged); - // - // downloadSkipRegexDefaultButton - // - this.downloadSkipRegexDefaultButton.AutoSize = true; - this.downloadSkipRegexDefaultButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.downloadSkipRegexDefaultButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.downloadSkipRegexDefaultButton.Location = new System.Drawing.Point(575, 8); - this.downloadSkipRegexDefaultButton.Name = "downloadSkipRegexDefaultButton"; - this.downloadSkipRegexDefaultButton.Size = new System.Drawing.Size(51, 23); - this.downloadSkipRegexDefaultButton.TabIndex = 2; - this.downloadSkipRegexDefaultButton.Text = "Default"; - this.downloadSkipRegexDefaultButton.UseVisualStyleBackColor = true; - this.downloadSkipRegexDefaultButton.Click += new System.EventHandler(this.downloadSkipRegexDefaultButton_Click); - // - // groupBox12 - // - this.groupBox12.AutoSize = true; - this.groupBox12.Controls.Add(this.tableLayoutPanel19); - this.groupBox12.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox12.Location = new System.Drawing.Point(3, 172); - this.groupBox12.Name = "groupBox12"; - this.groupBox12.Size = new System.Drawing.Size(640, 163); - this.groupBox12.TabIndex = 2; - this.groupBox12.TabStop = false; - this.groupBox12.Text = "Uploads"; - // - // tableLayoutPanel19 - // - this.tableLayoutPanel19.AutoSize = true; - this.tableLayoutPanel19.ColumnCount = 2; - this.tableLayoutPanel19.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel19.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel19.Controls.Add(this.uploadSkipCheckbox, 0, 0); - this.tableLayoutPanel19.Controls.Add(this.uploadSkipRegexRichTextbox, 0, 1); - this.tableLayoutPanel19.Controls.Add(this.uploadSkipRegexDefaultButton, 1, 0); - this.tableLayoutPanel19.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel19.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel19.Name = "tableLayoutPanel19"; - this.tableLayoutPanel19.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel19.RowCount = 2; - this.tableLayoutPanel19.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel19.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel19.Size = new System.Drawing.Size(634, 141); - this.tableLayoutPanel19.TabIndex = 3; - // - // uploadSkipCheckbox - // - this.uploadSkipCheckbox.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.uploadSkipCheckbox.AutoSize = true; - this.uploadSkipCheckbox.Location = new System.Drawing.Point(8, 10); - this.uploadSkipCheckbox.Name = "uploadSkipCheckbox"; - this.uploadSkipCheckbox.Size = new System.Drawing.Size(247, 19); - this.uploadSkipCheckbox.TabIndex = 0; - this.uploadSkipCheckbox.Text = "Skip files matching the regular expression:"; - this.uploadSkipCheckbox.UseVisualStyleBackColor = true; - this.uploadSkipCheckbox.CheckedChanged += new System.EventHandler(this.uploadSkipCheckbox_CheckedChanged); - // - // uploadSkipRegexRichTextbox - // - this.tableLayoutPanel19.SetColumnSpan(this.uploadSkipRegexRichTextbox, 2); - this.uploadSkipRegexRichTextbox.Dock = System.Windows.Forms.DockStyle.Fill; - this.uploadSkipRegexRichTextbox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.uploadSkipRegexRichTextbox.Location = new System.Drawing.Point(8, 37); - this.uploadSkipRegexRichTextbox.Name = "uploadSkipRegexRichTextbox"; - this.uploadSkipRegexRichTextbox.Size = new System.Drawing.Size(618, 96); - this.uploadSkipRegexRichTextbox.TabIndex = 1; - this.uploadSkipRegexRichTextbox.Text = ""; - this.uploadSkipRegexRichTextbox.TextChanged += new System.EventHandler(this.uploadSkipRegexRichTextbox_TextChanged); - // - // uploadSkipRegexDefaultButton - // - this.uploadSkipRegexDefaultButton.AutoSize = true; - this.uploadSkipRegexDefaultButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.uploadSkipRegexDefaultButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.uploadSkipRegexDefaultButton.Location = new System.Drawing.Point(575, 8); - this.uploadSkipRegexDefaultButton.Name = "uploadSkipRegexDefaultButton"; - this.uploadSkipRegexDefaultButton.Size = new System.Drawing.Size(51, 23); - this.uploadSkipRegexDefaultButton.TabIndex = 2; - this.uploadSkipRegexDefaultButton.Text = "Default"; - this.uploadSkipRegexDefaultButton.UseVisualStyleBackColor = true; - this.uploadSkipRegexDefaultButton.Click += new System.EventHandler(this.uploadSkipRegexDefaultButton_Click); - // - // managedBrowserPanel - // - this.managedBrowserPanel.Controls.Add(this.tableLayoutPanel21); - this.managedBrowserPanel.Location = new System.Drawing.Point(0, 0); - this.managedBrowserPanel.Name = "managedBrowserPanel"; - this.managedBrowserPanel.Size = new System.Drawing.Size(654, 479); - this.managedBrowserPanel.Text = "managedBrowserPanel"; - // - // tableLayoutPanel21 - // - this.tableLayoutPanel21.AutoSize = true; - this.tableLayoutPanel21.ColumnCount = 1; - this.tableLayoutPanel21.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel21.Controls.Add(this.groupBox13, 0, 1); - this.tableLayoutPanel21.Controls.Add(this.groupBox14, 0, 0); - this.tableLayoutPanel21.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel21.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel21.Name = "tableLayoutPanel21"; - this.tableLayoutPanel21.RowCount = 3; - this.tableLayoutPanel21.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel21.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel21.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel21.Size = new System.Drawing.Size(654, 479); - this.tableLayoutPanel21.TabIndex = 8; - // - // groupBox13 - // - this.groupBox13.AutoSize = true; - this.groupBox13.Controls.Add(this.tableLayoutPanel22); - this.groupBox13.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox13.Location = new System.Drawing.Point(3, 151); - this.groupBox13.Name = "groupBox13"; - this.groupBox13.Size = new System.Drawing.Size(648, 77); - this.groupBox13.TabIndex = 1; - this.groupBox13.TabStop = false; - this.groupBox13.Text = "Bookmarks"; - // - // tableLayoutPanel22 - // - this.tableLayoutPanel22.AutoSize = true; - this.tableLayoutPanel22.ColumnCount = 2; - this.tableLayoutPanel22.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 199F)); - this.tableLayoutPanel22.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel22.Controls.Add(this.label15, 0, 1); - this.tableLayoutPanel22.Controls.Add(this.bookmarkSizeComboBox, 0, 4); - this.tableLayoutPanel22.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel22.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel22.Name = "tableLayoutPanel22"; - this.tableLayoutPanel22.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel22.RowCount = 6; - this.tableLayoutPanel22.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel22.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel22.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel22.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel22.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel22.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel22.Size = new System.Drawing.Size(642, 55); - this.tableLayoutPanel22.TabIndex = 10; - // - // label15 - // - this.label15.AutoEllipsis = true; - this.label15.AutoSize = true; - this.tableLayoutPanel22.SetColumnSpan(this.label15, 2); - this.label15.ForeColor = System.Drawing.SystemColors.GrayText; - this.label15.Location = new System.Drawing.Point(8, 5); - this.label15.Name = "label15"; - this.label15.Size = new System.Drawing.Size(394, 15); - this.label15.TabIndex = 6; - this.label15.Text = "When using small icons, only the nickname of the bookmark is displayed."; - // - // bookmarkSizeComboBox - // - this.bookmarkSizeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.bookmarkSizeComboBox.FormattingEnabled = true; - this.bookmarkSizeComboBox.ItemHeight = 18; - this.bookmarkSizeComboBox.Location = new System.Drawing.Point(8, 23); - this.bookmarkSizeComboBox.Name = "bookmarkSizeComboBox"; - this.bookmarkSizeComboBox.Size = new System.Drawing.Size(193, 24); - this.bookmarkSizeComboBox.TabIndex = 6; - this.bookmarkSizeComboBox.SelectionChangeCommitted += new System.EventHandler(this.bookmarkSizeComboBox_SelectionChangeCommitted); - // - // groupBox14 - // - this.groupBox14.AutoSize = true; - this.groupBox14.Controls.Add(this.tableLayoutPanel23); - this.groupBox14.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBox14.Location = new System.Drawing.Point(3, 3); - this.groupBox14.Name = "groupBox14"; - this.groupBox14.Size = new System.Drawing.Size(648, 142); - this.groupBox14.TabIndex = 0; - this.groupBox14.TabStop = false; - this.groupBox14.Text = "General"; - // - // tableLayoutPanel23 - // - this.tableLayoutPanel23.AutoSize = true; - this.tableLayoutPanel23.ColumnCount = 2; - this.tableLayoutPanel23.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 199F)); - this.tableLayoutPanel23.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 433F)); - this.tableLayoutPanel23.Controls.Add(this.infoWindowCheckbox, 0, 3); - this.tableLayoutPanel23.Controls.Add(this.showHiddenFilesCheckbox, 0, 0); - this.tableLayoutPanel23.Controls.Add(this.returnKeyCheckbox, 0, 2); - this.tableLayoutPanel23.Controls.Add(this.doubleClickEditorCheckbox, 0, 1); - this.tableLayoutPanel23.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel23.Location = new System.Drawing.Point(3, 19); - this.tableLayoutPanel23.Name = "tableLayoutPanel23"; - this.tableLayoutPanel23.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel23.RowCount = 4; - this.tableLayoutPanel23.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel23.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel23.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel23.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel23.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel23.Size = new System.Drawing.Size(642, 120); - this.tableLayoutPanel23.TabIndex = 6; - // - // infoWindowCheckbox - // - this.infoWindowCheckbox.AutoSize = true; - this.tableLayoutPanel23.SetColumnSpan(this.infoWindowCheckbox, 2); - this.infoWindowCheckbox.Location = new System.Drawing.Point(8, 93); - this.infoWindowCheckbox.Name = "infoWindowCheckbox"; - this.infoWindowCheckbox.Size = new System.Drawing.Size(257, 19); - this.infoWindowCheckbox.TabIndex = 3; - this.infoWindowCheckbox.Text = "Info window always shows current selection"; - this.infoWindowCheckbox.UseVisualStyleBackColor = true; - this.infoWindowCheckbox.CheckedChanged += new System.EventHandler(this.infoWindowCheckbox_CheckedChanged); - // - // showHiddenFilesCheckbox - // - this.showHiddenFilesCheckbox.AutoSize = true; - this.tableLayoutPanel23.SetColumnSpan(this.showHiddenFilesCheckbox, 2); - this.showHiddenFilesCheckbox.Location = new System.Drawing.Point(8, 8); - this.showHiddenFilesCheckbox.Name = "showHiddenFilesCheckbox"; - this.showHiddenFilesCheckbox.Padding = new System.Windows.Forms.Padding(0, 10, 0, 0); - this.showHiddenFilesCheckbox.Size = new System.Drawing.Size(119, 29); - this.showHiddenFilesCheckbox.TabIndex = 0; - this.showHiddenFilesCheckbox.Text = "Show hidden files"; - this.showHiddenFilesCheckbox.UseVisualStyleBackColor = true; - this.showHiddenFilesCheckbox.CheckedChanged += new System.EventHandler(this.showHiddenFilesCheckbox_CheckedChanged); - // - // returnKeyCheckbox - // - this.returnKeyCheckbox.AutoSize = true; - this.tableLayoutPanel23.SetColumnSpan(this.returnKeyCheckbox, 2); - this.returnKeyCheckbox.Location = new System.Drawing.Point(8, 68); - this.returnKeyCheckbox.Name = "returnKeyCheckbox"; - this.returnKeyCheckbox.Size = new System.Drawing.Size(244, 19); - this.returnKeyCheckbox.TabIndex = 2; - this.returnKeyCheckbox.Text = "Return key selects folder or file to rename"; - this.returnKeyCheckbox.UseVisualStyleBackColor = true; - this.returnKeyCheckbox.CheckedChanged += new System.EventHandler(this.returnKeyCheckbox_CheckedChanged); - // - // doubleClickEditorCheckbox - // - this.doubleClickEditorCheckbox.AutoSize = true; - this.tableLayoutPanel23.SetColumnSpan(this.doubleClickEditorCheckbox, 2); - this.doubleClickEditorCheckbox.Location = new System.Drawing.Point(8, 43); - this.doubleClickEditorCheckbox.Name = "doubleClickEditorCheckbox"; - this.doubleClickEditorCheckbox.Size = new System.Drawing.Size(236, 19); - this.doubleClickEditorCheckbox.TabIndex = 1; - this.doubleClickEditorCheckbox.Text = "Double click opens file in external editor"; - this.doubleClickEditorCheckbox.UseVisualStyleBackColor = true; - this.doubleClickEditorCheckbox.CheckedChanged += new System.EventHandler(this.doubleClickEditorCheckbox_CheckedChanged); - // - // toolStrip - // - this.toolStrip.CanOverflow = false; - this.toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; - this.toolStrip.ImageScalingSize = new System.Drawing.Size(32, 32); - this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.generalButton, - this.browserButton, - this.transfersButton, - this.editStripButton, - this.sftpButton, - this.s3Button, - this.googleDocsButton, - this.bandwidthButton, - this.connectionButton, - this.updateButton, - this.languageButton}); - this.toolStrip.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow; - this.toolStrip.Location = new System.Drawing.Point(0, 0); - this.toolStrip.MinimumSize = new System.Drawing.Size(0, 69); - this.toolStrip.Name = "toolStrip"; - this.toolStrip.Size = new System.Drawing.Size(678, 69); - this.toolStrip.TabIndex = 0; - this.toolStrip.Text = "toolStrip1"; - // - // generalButton - // - this.generalButton.AutoToolTip = false; - this.generalButton.Image = global::Ch.Cyberduck.ResourcesBundle.general; - this.generalButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.generalButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.generalButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.generalButton.Name = "generalButton"; - this.generalButton.Size = new System.Drawing.Size(51, 69); - this.generalButton.Text = "General"; - this.generalButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.generalButton.Click += new System.EventHandler(this.generalButton_Click); - // - // browserButton - // - this.browserButton.Image = global::Ch.Cyberduck.ResourcesBundle.browser; - this.browserButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.browserButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.browserButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.browserButton.Name = "browserButton"; - this.browserButton.Size = new System.Drawing.Size(53, 69); - this.browserButton.Text = "Browser"; - this.browserButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.browserButton.Click += new System.EventHandler(this.browserButton_Click); - // - // transfersButton - // - this.transfersButton.AutoToolTip = false; - this.transfersButton.Image = global::Ch.Cyberduck.ResourcesBundle.queue; - this.transfersButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.transfersButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.transfersButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.transfersButton.Name = "transfersButton"; - this.transfersButton.Size = new System.Drawing.Size(59, 69); - this.transfersButton.Text = "Transfers"; - this.transfersButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.transfersButton.Click += new System.EventHandler(this.transfersButton_Click); - // - // editStripButton - // - this.editStripButton.AutoToolTip = false; - this.editStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.pencil; - this.editStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.editStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.editStripButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.editStripButton.Name = "editStripButton"; - this.editStripButton.Size = new System.Drawing.Size(42, 69); - this.editStripButton.Text = "Editor"; - this.editStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.editStripButton.Click += new System.EventHandler(this.editStripButton_Click); - // - // sftpButton - // - this.sftpButton.AutoToolTip = false; - this.sftpButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.sftpButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.sftpButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.sftpButton.Name = "sftpButton"; - this.sftpButton.Size = new System.Drawing.Size(37, 69); - this.sftpButton.Text = "SFTP"; - this.sftpButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.sftpButton.Visible = false; - this.sftpButton.Click += new System.EventHandler(this.sftpButton_Click); - // - // s3Button - // - this.s3Button.AutoToolTip = false; - this.s3Button.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.s3Button.ImageTransparentColor = System.Drawing.Color.Magenta; - this.s3Button.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.s3Button.Name = "s3Button"; - this.s3Button.Size = new System.Drawing.Size(23, 69); - this.s3Button.Text = "S3"; - this.s3Button.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.s3Button.Click += new System.EventHandler(this.s3Button_Click); - // - // googleDocsButton - // - this.googleDocsButton.AutoToolTip = false; - this.googleDocsButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.googleDocsButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.googleDocsButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.googleDocsButton.Name = "googleDocsButton"; - this.googleDocsButton.Size = new System.Drawing.Size(78, 69); - this.googleDocsButton.Text = "Google Docs"; - this.googleDocsButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.googleDocsButton.Visible = false; - this.googleDocsButton.Click += new System.EventHandler(this.googleDocsButton_Click); - // - // bandwidthButton - // - this.bandwidthButton.AutoToolTip = false; - this.bandwidthButton.Image = global::Ch.Cyberduck.ResourcesBundle.bandwidth; - this.bandwidthButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.bandwidthButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.bandwidthButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.bandwidthButton.Name = "bandwidthButton"; - this.bandwidthButton.Size = new System.Drawing.Size(68, 69); - this.bandwidthButton.Text = "Bandwidth"; - this.bandwidthButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.bandwidthButton.Click += new System.EventHandler(this.bandwidthButton_Click); - // - // connectionButton - // - this.connectionButton.Image = global::Ch.Cyberduck.ResourcesBundle.connection; - this.connectionButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.connectionButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.connectionButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.connectionButton.Name = "connectionButton"; - this.connectionButton.Size = new System.Drawing.Size(73, 69); - this.connectionButton.Text = "Connection"; - this.connectionButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.connectionButton.Click += new System.EventHandler(this.connectionButton_Click); - // - // updateButton - // - this.updateButton.Image = global::Ch.Cyberduck.ResourcesBundle.update; - this.updateButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.updateButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.updateButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.updateButton.Name = "updateButton"; - this.updateButton.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never; - this.updateButton.Size = new System.Drawing.Size(49, 69); - this.updateButton.Text = "Update"; - this.updateButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.updateButton.Click += new System.EventHandler(this.updateButton_Click); - // - // languageButton - // - this.languageButton.Image = global::Ch.Cyberduck.ResourcesBundle.language; - this.languageButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; - this.languageButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.languageButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.languageButton.Name = "languageButton"; - this.languageButton.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never; - this.languageButton.Size = new System.Drawing.Size(63, 69); - this.languageButton.Text = "Language"; - this.languageButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.languageButton.Click += new System.EventHandler(this.languageButton_Click); - // - // PreferencesForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.AutoSize = true; - this.ClientSize = new System.Drawing.Size(678, 569); - this.Controls.Add(this.panelManager); - this.Controls.Add(this.toolStrip); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.MaximizeBox = false; - this.Name = "PreferencesForm"; - this.Text = "Preferences"; - this.panelManager.ResumeLayout(false); - this.managedGeneralPanel.ResumeLayout(false); - this.managedGeneralPanel.PerformLayout(); - this.tableLayoutPanelGeneral.ResumeLayout(false); - this.tableLayoutPanelGeneral.PerformLayout(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.tableLayoutPanel2.ResumeLayout(false); - this.tableLayoutPanel2.PerformLayout(); - this.browserGroupbox.ResumeLayout(false); - this.browserGroupbox.PerformLayout(); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.managedSftpPanel.ResumeLayout(false); - this.managedSftpPanel.PerformLayout(); - this.tableLayoutPanel25.ResumeLayout(false); - this.tableLayoutPanel25.PerformLayout(); - this.groupBox18.ResumeLayout(false); - this.groupBox18.PerformLayout(); - this.tableLayoutPanel27.ResumeLayout(false); - this.tableLayoutPanel27.PerformLayout(); - this.managedS3Panel.ResumeLayout(false); - this.managedS3Panel.PerformLayout(); - this.tableLayoutPanel28.ResumeLayout(false); - this.tableLayoutPanel28.PerformLayout(); - this.groupBox19.ResumeLayout(false); - this.groupBox19.PerformLayout(); - this.tableLayoutPanel29.ResumeLayout(false); - this.tableLayoutPanel29.PerformLayout(); - this.groupBox22.ResumeLayout(false); - this.groupBox22.PerformLayout(); - this.tableLayoutPanel30.ResumeLayout(false); - this.tableLayoutPanel30.PerformLayout(); - this.groupBox3.ResumeLayout(false); - this.groupBox3.PerformLayout(); - this.tableLayoutPanel20.ResumeLayout(false); - this.tableLayoutPanel20.PerformLayout(); - this.managedGoogleDocsPanel.ResumeLayout(false); - this.managedGoogleDocsPanel.PerformLayout(); - this.tableLayoutPanel31.ResumeLayout(false); - this.tableLayoutPanel31.PerformLayout(); - this.groupBox23.ResumeLayout(false); - this.groupBox23.PerformLayout(); - this.tableLayoutPanel32.ResumeLayout(false); - this.tableLayoutPanel32.PerformLayout(); - this.groupBox24.ResumeLayout(false); - this.groupBox24.PerformLayout(); - this.tableLayoutPanel33.ResumeLayout(false); - this.tableLayoutPanel33.PerformLayout(); - this.managedBandwidthPanel.ResumeLayout(false); - this.managedBandwidthPanel.PerformLayout(); - this.tableLayoutPanel34.ResumeLayout(false); - this.tableLayoutPanel34.PerformLayout(); - this.groupBox25.ResumeLayout(false); - this.groupBox25.PerformLayout(); - this.tableLayoutPanel35.ResumeLayout(false); - this.tableLayoutPanel35.PerformLayout(); - this.groupBox26.ResumeLayout(false); - this.groupBox26.PerformLayout(); - this.tableLayoutPanel36.ResumeLayout(false); - this.tableLayoutPanel36.PerformLayout(); - this.managedConnectionPanel.ResumeLayout(false); - this.managedConnectionPanel.PerformLayout(); - this.tableLayoutPanel37.ResumeLayout(false); - this.tableLayoutPanel37.PerformLayout(); - this.groupBox21.ResumeLayout(false); - this.groupBox21.PerformLayout(); - this.tableLayoutPanel39.ResumeLayout(false); - this.tableLayoutPanel39.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.connectionTimeoutUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.retriesUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.retryDelayUpDown)).EndInit(); - this.groupBox4.ResumeLayout(false); - this.groupBox4.PerformLayout(); - this.tableLayoutPanel38.ResumeLayout(false); - this.tableLayoutPanel38.PerformLayout(); - this.groupBox20.ResumeLayout(false); - this.groupBox20.PerformLayout(); - this.tableLayoutPanel40.ResumeLayout(false); - this.tableLayoutPanel40.PerformLayout(); - this.managedUpdatePanel.ResumeLayout(false); - this.tableLayoutPanel41.ResumeLayout(false); - this.tableLayoutPanel41.PerformLayout(); - this.groupBox27.ResumeLayout(false); - this.groupBox27.PerformLayout(); - this.tableLayoutPanel42.ResumeLayout(false); - this.tableLayoutPanel42.PerformLayout(); - this.managedLanguagePanel.ResumeLayout(false); - this.managedLanguagePanel.PerformLayout(); - this.tableLayoutPanel43.ResumeLayout(false); - this.tableLayoutPanel43.PerformLayout(); - this.groupBox28.ResumeLayout(false); - this.groupBox28.PerformLayout(); - this.tableLayoutPanel44.ResumeLayout(false); - this.tableLayoutPanel44.PerformLayout(); - this.managedEditorPanel.ResumeLayout(false); - this.tableLayoutPanel3.ResumeLayout(false); - this.groupBox2.ResumeLayout(false); - this.tableLayoutPanel4.ResumeLayout(false); - this.tableLayoutPanel4.PerformLayout(); - this.managedTransfersPanel.ResumeLayout(false); - this.transfersTabControl.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.tabPage1.PerformLayout(); - this.tableLayoutPanel5.ResumeLayout(false); - this.tableLayoutPanel5.PerformLayout(); - this.groupBox6.ResumeLayout(false); - this.groupBox6.PerformLayout(); - this.tableLayoutPanel8.ResumeLayout(false); - this.tableLayoutPanel8.PerformLayout(); - this.groupBox5.ResumeLayout(false); - this.groupBox5.PerformLayout(); - this.tableLayoutPanel7.ResumeLayout(false); - this.tableLayoutPanel7.PerformLayout(); - this.groupBox29.ResumeLayout(false); - this.groupBox29.PerformLayout(); - this.tableLayoutPanel6.ResumeLayout(false); - this.tableLayoutPanel6.PerformLayout(); - this.tabPage2.ResumeLayout(false); - this.tabPage2.PerformLayout(); - this.tableLayoutPanel9.ResumeLayout(false); - this.tableLayoutPanel9.PerformLayout(); - this.groupBox7.ResumeLayout(false); - this.groupBox7.PerformLayout(); - this.tableLayoutPanel10.ResumeLayout(false); - this.tableLayoutPanel10.PerformLayout(); - this.tableLayoutPanel11.ResumeLayout(false); - this.tableLayoutPanel11.PerformLayout(); - this.groupBox8.ResumeLayout(false); - this.groupBox8.PerformLayout(); - this.tableLayoutPanel12.ResumeLayout(false); - this.tableLayoutPanel12.PerformLayout(); - this.tableLayoutPanel13.ResumeLayout(false); - this.tableLayoutPanel13.PerformLayout(); - this.tabPage3.ResumeLayout(false); - this.tabPage3.PerformLayout(); - this.tableLayoutPanel14.ResumeLayout(false); - this.tableLayoutPanel14.PerformLayout(); - this.groupBox9.ResumeLayout(false); - this.groupBox9.PerformLayout(); - this.tableLayoutPanel15.ResumeLayout(false); - this.tableLayoutPanel15.PerformLayout(); - this.groupBox10.ResumeLayout(false); - this.groupBox10.PerformLayout(); - this.tableLayoutPanel16.ResumeLayout(false); - this.tableLayoutPanel16.PerformLayout(); - this.tabPage4.ResumeLayout(false); - this.tabPage4.PerformLayout(); - this.tableLayoutPanel17.ResumeLayout(false); - this.tableLayoutPanel17.PerformLayout(); - this.groupBox11.ResumeLayout(false); - this.groupBox11.PerformLayout(); - this.tableLayoutPanel18.ResumeLayout(false); - this.tableLayoutPanel18.PerformLayout(); - this.groupBox12.ResumeLayout(false); - this.groupBox12.PerformLayout(); - this.tableLayoutPanel19.ResumeLayout(false); - this.tableLayoutPanel19.PerformLayout(); - this.managedBrowserPanel.ResumeLayout(false); - this.managedBrowserPanel.PerformLayout(); - this.tableLayoutPanel21.ResumeLayout(false); - this.tableLayoutPanel21.PerformLayout(); - this.groupBox13.ResumeLayout(false); - this.groupBox13.PerformLayout(); - this.tableLayoutPanel22.ResumeLayout(false); - this.tableLayoutPanel22.PerformLayout(); - this.groupBox14.ResumeLayout(false); - this.groupBox14.PerformLayout(); - this.tableLayoutPanel23.ResumeLayout(false); - this.tableLayoutPanel23.PerformLayout(); - this.toolStrip.ResumeLayout(false); - this.toolStrip.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.ToolStripButton generalButton; - private System.Windows.Forms.GroupBox browserGroupbox; - private System.Windows.Forms.CheckBox saveWorkspaceCheckbox; - private System.Windows.Forms.Label labelSaveWorkspace; - private System.Windows.Forms.CheckBox newBrowserOnStartupCheckbox; - private System.Windows.Forms.Label label4; - private ImageComboBox connectBookmarkCombobox; - private System.Windows.Forms.Label labelOpenEmtpyBrowser; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.CheckBox keychainCheckbox; - private System.Windows.Forms.Label labelConfirmDisconnect; - private System.Windows.Forms.CheckBox confirmDisconnectCheckbox; - private System.Windows.Forms.Label labelKeychain; - private ImageComboBox defaultProtocolCombobox; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.ToolStripButton transfersButton; - private System.Windows.Forms.ToolStripButton sftpButton; - private System.Windows.Forms.ToolStripButton s3Button; - private System.Windows.Forms.ToolStripButton bandwidthButton; - private System.Windows.Forms.ToolStripButton connectionButton; - private System.Windows.Forms.ImageList iconList; - private System.Windows.Forms.GroupBox groupBox4; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.ComboBox defaultEncodingCombobox; - private System.Windows.Forms.TabControl transfersTabControl; - private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.TabPage tabPage2; - private System.Windows.Forms.TabPage tabPage3; - private System.Windows.Forms.TabPage tabPage4; - private System.Windows.Forms.ComboBox transferFilesCombobox; - private System.Windows.Forms.CheckBox transfersToFrontCheckbox; - private System.Windows.Forms.CheckBox transfersToBackCheckbox; - private System.Windows.Forms.CheckBox removeFromTransfersCheckbox; - private System.Windows.Forms.GroupBox groupBox5; - private System.Windows.Forms.CheckBox openAfterDownloadCheckbox; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.ComboBox duplicateDownloadCombobox; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.CheckBox duplicateDownloadOverwriteCheckbox; - private System.Windows.Forms.GroupBox groupBox6; - private System.Windows.Forms.Label label12; - private System.Windows.Forms.ComboBox duplicateUploadCombobox; - private System.Windows.Forms.CheckBox duplicateUploadOverwriteCheckbox; - private System.Windows.Forms.Button showDownloadFolderDialogButton; - private System.Windows.Forms.FolderBrowserDialog downloadFolderBrowserDialog; - private EllipsisLabel downloadFolderLabel; - private System.Windows.Forms.GroupBox groupBox7; - private System.Windows.Forms.CheckBox chmodDownloadCheckbox; - private System.Windows.Forms.RadioButton chmodDownloadCustomRadioButton; - private System.Windows.Forms.RadioButton chmodDownloadDefaultRadioButton; - private System.Windows.Forms.Label ownerDownloadLabel; - private System.Windows.Forms.ComboBox chmodDownloadTypeCombobox; - private System.Windows.Forms.CheckBox dotherxCheckbox; - private System.Windows.Forms.CheckBox dotherwCheckbox; - private System.Windows.Forms.CheckBox dotherrCheckbox; - private System.Windows.Forms.Label othersDownloadLabel; - private System.Windows.Forms.CheckBox dgroupxCheckbox; - private System.Windows.Forms.CheckBox dgroupwCheckbox; - private System.Windows.Forms.CheckBox dgrouprCheckbox; - private System.Windows.Forms.Label groupDownloadLabel; - private System.Windows.Forms.CheckBox downerxCheckbox; - private System.Windows.Forms.CheckBox downerwCheckbox; - private System.Windows.Forms.CheckBox downerrCheckbox; - private System.Windows.Forms.GroupBox groupBox8; - private System.Windows.Forms.CheckBox uotherxCheckbox; - private System.Windows.Forms.CheckBox uotherwCheckbox; - private System.Windows.Forms.CheckBox uotherrCheckbox; - private System.Windows.Forms.Label othersUploadLabel; - private System.Windows.Forms.CheckBox ugroupxCheckbox; - private System.Windows.Forms.CheckBox ugroupwCheckbox; - private System.Windows.Forms.CheckBox ugrouprCheckbox; - private System.Windows.Forms.Label groupUploadLabel; - private System.Windows.Forms.CheckBox uownerxCheckbox; - private System.Windows.Forms.CheckBox uownerwCheckbox; - private System.Windows.Forms.CheckBox uownerrCheckbox; - private System.Windows.Forms.Label ownerUploadLabel; - private System.Windows.Forms.ComboBox chmodUploadTypeCombobox; - private System.Windows.Forms.RadioButton chmodUploadDefaultRadioButton; - private System.Windows.Forms.RadioButton chmodUploadCustomRadioButton; - private System.Windows.Forms.CheckBox chmodUploadCheckbox; - private System.Windows.Forms.GroupBox groupBox10; - private System.Windows.Forms.CheckBox preserveModificationUploadCheckbox; - private System.Windows.Forms.GroupBox groupBox9; - private System.Windows.Forms.CheckBox preserveModificationDownloadCheckbox; - private System.Windows.Forms.GroupBox groupBox11; - private System.Windows.Forms.CheckBox downloadSkipCheckbox; - private System.Windows.Forms.RichTextBox downloadSkipRegexRichTextbox; - private System.Windows.Forms.Button downloadSkipRegexDefaultButton; - private System.Windows.Forms.GroupBox groupBox12; - private System.Windows.Forms.Button uploadSkipRegexDefaultButton; - private System.Windows.Forms.RichTextBox uploadSkipRegexRichTextbox; - private System.Windows.Forms.CheckBox uploadSkipCheckbox; - private System.Windows.Forms.GroupBox groupBox18; - private System.Windows.Forms.Label label28; - private System.Windows.Forms.ComboBox sshTransfersCombobox; - private System.Windows.Forms.Label label27; - private System.Windows.Forms.GroupBox groupBox19; - private System.Windows.Forms.Label label29; - private System.Windows.Forms.ComboBox defaultBucketLocationCombobox; - private System.Windows.Forms.Label label31; - private System.Windows.Forms.ComboBox defaultDownloadThrottleCombobox; - private System.Windows.Forms.Label label32; - private System.Windows.Forms.ComboBox defaultUploadThrottleCombobox; - private System.Windows.Forms.GroupBox groupBox21; - private System.Windows.Forms.NumericUpDown connectionTimeoutUpDown; - private System.Windows.Forms.Label label36; - private System.Windows.Forms.CheckBox retryCheckbox; - private System.Windows.Forms.NumericUpDown retryDelayUpDown; - private System.Windows.Forms.NumericUpDown retriesUpDown; - private System.Windows.Forms.Label label34; - private PanelManager panelManager; - private ManagedPanel managedGeneralPanel; - private ManagedPanel managedTransfersPanel; - private ManagedPanel managedSftpPanel; - private ManagedPanel managedS3Panel; - private ManagedPanel managedBandwidthPanel; - private ManagedPanel managedConnectionPanel; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanelGeneral; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel6; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel7; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel8; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel9; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel10; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel11; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel12; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel13; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel14; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel15; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel16; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel17; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel18; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel19; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel27; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel25; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel29; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel28; - private System.Windows.Forms.GroupBox groupBox22; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel30; - private System.Windows.Forms.ComboBox defaultStorageClassComboBox; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.ToolStripButton googleDocsButton; - private ManagedPanel managedGoogleDocsPanel; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel31; - private System.Windows.Forms.GroupBox groupBox23; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel32; - private System.Windows.Forms.ComboBox gdDocumentsComboBox; - private System.Windows.Forms.ComboBox gdSpreadsheetsComboBox; - private System.Windows.Forms.ComboBox gdPresentationsComboBox; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.GroupBox groupBox24; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel33; - private System.Windows.Forms.CheckBox gdConvertCheckBox; - private System.Windows.Forms.Label labelConvert; - private System.Windows.Forms.CheckBox gdOCRcheckBox; - private System.Windows.Forms.Label labelOcr; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel34; - private System.Windows.Forms.GroupBox groupBox25; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel35; - private System.Windows.Forms.GroupBox groupBox26; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel36; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel38; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel39; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel37; - private System.Windows.Forms.Label label16; - private System.Windows.Forms.GroupBox groupBox20; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel40; - private System.Windows.Forms.CheckBox systemProxyCheckBox; - private System.Windows.Forms.ToolStripButton updateButton; - private ManagedPanel managedUpdatePanel; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel41; - private System.Windows.Forms.GroupBox groupBox27; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel42; - private System.Windows.Forms.CheckBox updateCheckBox; - private System.Windows.Forms.Button updateCheckButton; - private System.Windows.Forms.Label lastUpdateLabel; - private System.Windows.Forms.ToolStripButton languageButton; - private ManagedPanel managedLanguagePanel; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel43; - private System.Windows.Forms.GroupBox groupBox28; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel44; - private System.Windows.Forms.ComboBox languageComboBox; - private System.Windows.Forms.Label label18; - private System.Windows.Forms.GroupBox groupBox29; - private ClickThroughToolStrip toolStrip; - private System.Windows.Forms.CheckBox uploadTemporaryNameCheckBox; - private System.Windows.Forms.ComboBox updateFeedComboBox; - private System.Windows.Forms.Button changeSystemProxyButton; - private ManagedPanel managedEditorPanel; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.ToolStripButton editStripButton; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4; - private System.Windows.Forms.Label label14; - private ImageComboBox editorComboBox; - private System.Windows.Forms.OpenFileDialog editorOpenFileDialog; - private System.Windows.Forms.CheckBox alwaysUseDefaultEditorCheckBox; - private System.Windows.Forms.GroupBox groupBox3; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel20; - private System.Windows.Forms.ComboBox defaultEncryptionComboBox; - private System.Windows.Forms.Label label8; - private ManagedPanel managedBrowserPanel; - private System.Windows.Forms.ToolStripButton browserButton; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel21; - private System.Windows.Forms.GroupBox groupBox13; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel22; - private System.Windows.Forms.Label label15; - private System.Windows.Forms.ComboBox bookmarkSizeComboBox; - private System.Windows.Forms.GroupBox groupBox14; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel23; - private System.Windows.Forms.CheckBox infoWindowCheckbox; - private System.Windows.Forms.CheckBox showHiddenFilesCheckbox; - private System.Windows.Forms.CheckBox returnKeyCheckbox; - private System.Windows.Forms.CheckBox doubleClickEditorCheckbox; - } +using Ch.Cyberduck.Ui.Winforms.Controls; + +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class PreferencesForm + { + /// + /// 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(); + this.iconList = new System.Windows.Forms.ImageList(this.components); + this.downloadFolderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); + this.editorOpenFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.panelManager = new Ch.Cyberduck.Ui.Winforms.Controls.PanelManager(); + this.managedGeneralPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.tableLayoutPanelGeneral = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.keychainCheckbox = new System.Windows.Forms.CheckBox(); + this.labelKeychain = new System.Windows.Forms.Label(); + this.confirmDisconnectCheckbox = new System.Windows.Forms.CheckBox(); + this.label7 = new System.Windows.Forms.Label(); + this.labelConfirmDisconnect = new System.Windows.Forms.Label(); + this.defaultProtocolCombobox = new Ch.Cyberduck.Ui.Winforms.Controls.ImageComboBox(); + this.browserGroupbox = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.saveWorkspaceCheckbox = new System.Windows.Forms.CheckBox(); + this.labelOpenEmtpyBrowser = new System.Windows.Forms.Label(); + this.connectBookmarkCombobox = new Ch.Cyberduck.Ui.Winforms.Controls.ImageComboBox(); + this.label4 = new System.Windows.Forms.Label(); + this.labelSaveWorkspace = new System.Windows.Forms.Label(); + this.newBrowserOnStartupCheckbox = new System.Windows.Forms.CheckBox(); + this.managedSftpPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.tableLayoutPanel25 = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox18 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel27 = new System.Windows.Forms.TableLayoutPanel(); + this.label27 = new System.Windows.Forms.Label(); + this.sshTransfersCombobox = new System.Windows.Forms.ComboBox(); + this.label28 = new System.Windows.Forms.Label(); + this.managedS3Panel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.tableLayoutPanel28 = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox19 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel29 = new System.Windows.Forms.TableLayoutPanel(); + this.label29 = new System.Windows.Forms.Label(); + this.defaultBucketLocationCombobox = new System.Windows.Forms.ComboBox(); + this.groupBox22 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel30 = new System.Windows.Forms.TableLayoutPanel(); + this.defaultStorageClassComboBox = new System.Windows.Forms.ComboBox(); + this.label3 = new System.Windows.Forms.Label(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel20 = new System.Windows.Forms.TableLayoutPanel(); + this.defaultEncryptionComboBox = new System.Windows.Forms.ComboBox(); + this.label8 = new System.Windows.Forms.Label(); + this.managedGoogleDocsPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.tableLayoutPanel31 = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox23 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel32 = new System.Windows.Forms.TableLayoutPanel(); + this.gdDocumentsComboBox = new System.Windows.Forms.ComboBox(); + this.gdSpreadsheetsComboBox = new System.Windows.Forms.ComboBox(); + this.gdPresentationsComboBox = new System.Windows.Forms.ComboBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.groupBox24 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel33 = new System.Windows.Forms.TableLayoutPanel(); + this.gdConvertCheckBox = new System.Windows.Forms.CheckBox(); + this.labelConvert = new System.Windows.Forms.Label(); + this.gdOCRcheckBox = new System.Windows.Forms.CheckBox(); + this.labelOcr = new System.Windows.Forms.Label(); + this.managedBandwidthPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.tableLayoutPanel34 = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox25 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel35 = new System.Windows.Forms.TableLayoutPanel(); + this.label31 = new System.Windows.Forms.Label(); + this.defaultDownloadThrottleCombobox = new System.Windows.Forms.ComboBox(); + this.groupBox26 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel36 = new System.Windows.Forms.TableLayoutPanel(); + this.defaultUploadThrottleCombobox = new System.Windows.Forms.ComboBox(); + this.label32 = new System.Windows.Forms.Label(); + this.managedConnectionPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.tableLayoutPanel37 = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox21 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel39 = new System.Windows.Forms.TableLayoutPanel(); + this.connectionTimeoutUpDown = new System.Windows.Forms.NumericUpDown(); + this.retriesUpDown = new System.Windows.Forms.NumericUpDown(); + this.retryCheckbox = new System.Windows.Forms.CheckBox(); + this.label34 = new System.Windows.Forms.Label(); + this.label36 = new System.Windows.Forms.Label(); + this.retryDelayUpDown = new System.Windows.Forms.NumericUpDown(); + this.label16 = new System.Windows.Forms.Label(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel38 = new System.Windows.Forms.TableLayoutPanel(); + this.label2 = new System.Windows.Forms.Label(); + this.defaultEncodingCombobox = new System.Windows.Forms.ComboBox(); + this.groupBox20 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel40 = new System.Windows.Forms.TableLayoutPanel(); + this.systemProxyCheckBox = new System.Windows.Forms.CheckBox(); + this.changeSystemProxyButton = new System.Windows.Forms.Button(); + this.managedUpdatePanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.tableLayoutPanel41 = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox27 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel42 = new System.Windows.Forms.TableLayoutPanel(); + this.updateCheckBox = new System.Windows.Forms.CheckBox(); + this.updateCheckButton = new System.Windows.Forms.Button(); + this.lastUpdateLabel = new System.Windows.Forms.Label(); + this.updateFeedComboBox = new System.Windows.Forms.ComboBox(); + this.managedLanguagePanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.tableLayoutPanel43 = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox28 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel44 = new System.Windows.Forms.TableLayoutPanel(); + this.languageComboBox = new System.Windows.Forms.ComboBox(); + this.label18 = new System.Windows.Forms.Label(); + this.managedEditorPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.label14 = new System.Windows.Forms.Label(); + this.editorComboBox = new Ch.Cyberduck.Ui.Winforms.Controls.ImageComboBox(); + this.alwaysUseDefaultEditorCheckBox = new System.Windows.Forms.CheckBox(); + this.managedTransfersPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.transfersTabControl = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox6 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel8 = new System.Windows.Forms.TableLayoutPanel(); + this.label12 = new System.Windows.Forms.Label(); + this.duplicateUploadOverwriteCheckbox = new System.Windows.Forms.CheckBox(); + this.duplicateUploadCombobox = new System.Windows.Forms.ComboBox(); + this.uploadTemporaryNameCheckBox = new System.Windows.Forms.CheckBox(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel7 = new System.Windows.Forms.TableLayoutPanel(); + this.openAfterDownloadCheckbox = new System.Windows.Forms.CheckBox(); + this.duplicateDownloadCombobox = new System.Windows.Forms.ComboBox(); + this.label11 = new System.Windows.Forms.Label(); + this.downloadFolderLabel = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); + this.label10 = new System.Windows.Forms.Label(); + this.duplicateDownloadOverwriteCheckbox = new System.Windows.Forms.CheckBox(); + this.showDownloadFolderDialogButton = new System.Windows.Forms.Button(); + this.groupBox29 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel6 = new System.Windows.Forms.TableLayoutPanel(); + this.transfersToFrontCheckbox = new System.Windows.Forms.CheckBox(); + this.removeFromTransfersCheckbox = new System.Windows.Forms.CheckBox(); + this.transferFilesCombobox = new System.Windows.Forms.ComboBox(); + this.transfersToBackCheckbox = new System.Windows.Forms.CheckBox(); + this.label1 = new System.Windows.Forms.Label(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.tableLayoutPanel9 = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox7 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel10 = new System.Windows.Forms.TableLayoutPanel(); + this.chmodDownloadCheckbox = new System.Windows.Forms.CheckBox(); + this.chmodDownloadCustomRadioButton = new System.Windows.Forms.RadioButton(); + this.chmodDownloadDefaultRadioButton = new System.Windows.Forms.RadioButton(); + this.chmodDownloadTypeCombobox = new System.Windows.Forms.ComboBox(); + this.tableLayoutPanel11 = new System.Windows.Forms.TableLayoutPanel(); + this.ownerDownloadLabel = new System.Windows.Forms.Label(); + this.dotherxCheckbox = new System.Windows.Forms.CheckBox(); + this.groupDownloadLabel = new System.Windows.Forms.Label(); + this.dotherwCheckbox = new System.Windows.Forms.CheckBox(); + this.othersDownloadLabel = new System.Windows.Forms.Label(); + this.dgroupxCheckbox = new System.Windows.Forms.CheckBox(); + this.dotherrCheckbox = new System.Windows.Forms.CheckBox(); + this.dgroupwCheckbox = new System.Windows.Forms.CheckBox(); + this.downerrCheckbox = new System.Windows.Forms.CheckBox(); + this.downerwCheckbox = new System.Windows.Forms.CheckBox(); + this.downerxCheckbox = new System.Windows.Forms.CheckBox(); + this.dgrouprCheckbox = new System.Windows.Forms.CheckBox(); + this.groupBox8 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel12 = new System.Windows.Forms.TableLayoutPanel(); + this.chmodUploadCheckbox = new System.Windows.Forms.CheckBox(); + this.chmodUploadCustomRadioButton = new System.Windows.Forms.RadioButton(); + this.chmodUploadDefaultRadioButton = new System.Windows.Forms.RadioButton(); + this.chmodUploadTypeCombobox = new System.Windows.Forms.ComboBox(); + this.tableLayoutPanel13 = new System.Windows.Forms.TableLayoutPanel(); + this.ownerUploadLabel = new System.Windows.Forms.Label(); + this.uotherxCheckbox = new System.Windows.Forms.CheckBox(); + this.uownerrCheckbox = new System.Windows.Forms.CheckBox(); + this.uotherwCheckbox = new System.Windows.Forms.CheckBox(); + this.uownerwCheckbox = new System.Windows.Forms.CheckBox(); + this.uotherrCheckbox = new System.Windows.Forms.CheckBox(); + this.uownerxCheckbox = new System.Windows.Forms.CheckBox(); + this.othersUploadLabel = new System.Windows.Forms.Label(); + this.groupUploadLabel = new System.Windows.Forms.Label(); + this.ugroupxCheckbox = new System.Windows.Forms.CheckBox(); + this.ugrouprCheckbox = new System.Windows.Forms.CheckBox(); + this.ugroupwCheckbox = new System.Windows.Forms.CheckBox(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.tableLayoutPanel14 = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox9 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel15 = new System.Windows.Forms.TableLayoutPanel(); + this.preserveModificationDownloadCheckbox = new System.Windows.Forms.CheckBox(); + this.groupBox10 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel16 = new System.Windows.Forms.TableLayoutPanel(); + this.preserveModificationUploadCheckbox = new System.Windows.Forms.CheckBox(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.tableLayoutPanel17 = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox11 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel18 = new System.Windows.Forms.TableLayoutPanel(); + this.downloadSkipCheckbox = new System.Windows.Forms.CheckBox(); + this.downloadSkipRegexRichTextbox = new System.Windows.Forms.RichTextBox(); + this.downloadSkipRegexDefaultButton = new System.Windows.Forms.Button(); + this.groupBox12 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel19 = new System.Windows.Forms.TableLayoutPanel(); + this.uploadSkipCheckbox = new System.Windows.Forms.CheckBox(); + this.uploadSkipRegexRichTextbox = new System.Windows.Forms.RichTextBox(); + this.uploadSkipRegexDefaultButton = new System.Windows.Forms.Button(); + this.managedBrowserPanel = new Ch.Cyberduck.Ui.Winforms.Controls.ManagedPanel(); + this.tableLayoutPanel21 = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox13 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel22 = new System.Windows.Forms.TableLayoutPanel(); + this.label15 = new System.Windows.Forms.Label(); + this.bookmarkSizeComboBox = new System.Windows.Forms.ComboBox(); + this.groupBox14 = new System.Windows.Forms.GroupBox(); + this.tableLayoutPanel23 = new System.Windows.Forms.TableLayoutPanel(); + this.infoWindowCheckbox = new System.Windows.Forms.CheckBox(); + this.showHiddenFilesCheckbox = new System.Windows.Forms.CheckBox(); + this.returnKeyCheckbox = new System.Windows.Forms.CheckBox(); + this.doubleClickEditorCheckbox = new System.Windows.Forms.CheckBox(); + this.toolStrip = new Ch.Cyberduck.Ui.Winforms.Controls.ClickThroughToolStrip(); + this.generalButton = new System.Windows.Forms.ToolStripButton(); + this.browserButton = new System.Windows.Forms.ToolStripButton(); + this.transfersButton = new System.Windows.Forms.ToolStripButton(); + this.editStripButton = new System.Windows.Forms.ToolStripButton(); + this.sftpButton = new System.Windows.Forms.ToolStripButton(); + this.s3Button = new System.Windows.Forms.ToolStripButton(); + this.googleDocsButton = new System.Windows.Forms.ToolStripButton(); + this.bandwidthButton = new System.Windows.Forms.ToolStripButton(); + this.connectionButton = new System.Windows.Forms.ToolStripButton(); + this.updateButton = new System.Windows.Forms.ToolStripButton(); + this.languageButton = new System.Windows.Forms.ToolStripButton(); + this.panelManager.SuspendLayout(); + this.managedGeneralPanel.SuspendLayout(); + this.tableLayoutPanelGeneral.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.browserGroupbox.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.managedSftpPanel.SuspendLayout(); + this.tableLayoutPanel25.SuspendLayout(); + this.groupBox18.SuspendLayout(); + this.tableLayoutPanel27.SuspendLayout(); + this.managedS3Panel.SuspendLayout(); + this.tableLayoutPanel28.SuspendLayout(); + this.groupBox19.SuspendLayout(); + this.tableLayoutPanel29.SuspendLayout(); + this.groupBox22.SuspendLayout(); + this.tableLayoutPanel30.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.tableLayoutPanel20.SuspendLayout(); + this.managedGoogleDocsPanel.SuspendLayout(); + this.tableLayoutPanel31.SuspendLayout(); + this.groupBox23.SuspendLayout(); + this.tableLayoutPanel32.SuspendLayout(); + this.groupBox24.SuspendLayout(); + this.tableLayoutPanel33.SuspendLayout(); + this.managedBandwidthPanel.SuspendLayout(); + this.tableLayoutPanel34.SuspendLayout(); + this.groupBox25.SuspendLayout(); + this.tableLayoutPanel35.SuspendLayout(); + this.groupBox26.SuspendLayout(); + this.tableLayoutPanel36.SuspendLayout(); + this.managedConnectionPanel.SuspendLayout(); + this.tableLayoutPanel37.SuspendLayout(); + this.groupBox21.SuspendLayout(); + this.tableLayoutPanel39.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.connectionTimeoutUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.retriesUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.retryDelayUpDown)).BeginInit(); + this.groupBox4.SuspendLayout(); + this.tableLayoutPanel38.SuspendLayout(); + this.groupBox20.SuspendLayout(); + this.tableLayoutPanel40.SuspendLayout(); + this.managedUpdatePanel.SuspendLayout(); + this.tableLayoutPanel41.SuspendLayout(); + this.groupBox27.SuspendLayout(); + this.tableLayoutPanel42.SuspendLayout(); + this.managedLanguagePanel.SuspendLayout(); + this.tableLayoutPanel43.SuspendLayout(); + this.groupBox28.SuspendLayout(); + this.tableLayoutPanel44.SuspendLayout(); + this.managedEditorPanel.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.tableLayoutPanel4.SuspendLayout(); + this.managedTransfersPanel.SuspendLayout(); + this.transfersTabControl.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tableLayoutPanel5.SuspendLayout(); + this.groupBox6.SuspendLayout(); + this.tableLayoutPanel8.SuspendLayout(); + this.groupBox5.SuspendLayout(); + this.tableLayoutPanel7.SuspendLayout(); + this.groupBox29.SuspendLayout(); + this.tableLayoutPanel6.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.tableLayoutPanel9.SuspendLayout(); + this.groupBox7.SuspendLayout(); + this.tableLayoutPanel10.SuspendLayout(); + this.tableLayoutPanel11.SuspendLayout(); + this.groupBox8.SuspendLayout(); + this.tableLayoutPanel12.SuspendLayout(); + this.tableLayoutPanel13.SuspendLayout(); + this.tabPage3.SuspendLayout(); + this.tableLayoutPanel14.SuspendLayout(); + this.groupBox9.SuspendLayout(); + this.tableLayoutPanel15.SuspendLayout(); + this.groupBox10.SuspendLayout(); + this.tableLayoutPanel16.SuspendLayout(); + this.tabPage4.SuspendLayout(); + this.tableLayoutPanel17.SuspendLayout(); + this.groupBox11.SuspendLayout(); + this.tableLayoutPanel18.SuspendLayout(); + this.groupBox12.SuspendLayout(); + this.tableLayoutPanel19.SuspendLayout(); + this.managedBrowserPanel.SuspendLayout(); + this.tableLayoutPanel21.SuspendLayout(); + this.groupBox13.SuspendLayout(); + this.tableLayoutPanel22.SuspendLayout(); + this.groupBox14.SuspendLayout(); + this.tableLayoutPanel23.SuspendLayout(); + this.toolStrip.SuspendLayout(); + this.SuspendLayout(); + // + // iconList + // + this.iconList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; + this.iconList.ImageSize = new System.Drawing.Size(16, 16); + this.iconList.TransparentColor = System.Drawing.Color.Transparent; + // + // editorOpenFileDialog + // + this.editorOpenFileDialog.Filter = "|*.exe;*.com;*.cmd;*.bat"; + // + // panelManager + // + this.panelManager.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.panelManager.Controls.Add(this.managedGeneralPanel); + this.panelManager.Controls.Add(this.managedSftpPanel); + this.panelManager.Controls.Add(this.managedS3Panel); + this.panelManager.Controls.Add(this.managedGoogleDocsPanel); + this.panelManager.Controls.Add(this.managedBandwidthPanel); + this.panelManager.Controls.Add(this.managedConnectionPanel); + this.panelManager.Controls.Add(this.managedUpdatePanel); + this.panelManager.Controls.Add(this.managedLanguagePanel); + this.panelManager.Controls.Add(this.managedEditorPanel); + this.panelManager.Controls.Add(this.managedTransfersPanel); + this.panelManager.Controls.Add(this.managedBrowserPanel); + this.panelManager.Location = new System.Drawing.Point(12, 76); + this.panelManager.Name = "panelManager"; + this.panelManager.SelectedIndex = 10; + this.panelManager.SelectedPanel = this.managedBrowserPanel; + this.panelManager.Size = new System.Drawing.Size(654, 479); + this.panelManager.TabIndex = 1; + // + // managedGeneralPanel + // + this.managedGeneralPanel.Controls.Add(this.tableLayoutPanelGeneral); + this.managedGeneralPanel.Location = new System.Drawing.Point(0, 0); + this.managedGeneralPanel.Name = "managedGeneralPanel"; + this.managedGeneralPanel.Size = new System.Drawing.Size(0, 0); + this.managedGeneralPanel.Text = "managedPanel1"; + // + // tableLayoutPanelGeneral + // + this.tableLayoutPanelGeneral.AutoSize = true; + this.tableLayoutPanelGeneral.ColumnCount = 1; + this.tableLayoutPanelGeneral.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelGeneral.Controls.Add(this.groupBox1, 0, 1); + this.tableLayoutPanelGeneral.Controls.Add(this.browserGroupbox, 0, 0); + this.tableLayoutPanelGeneral.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelGeneral.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanelGeneral.Name = "tableLayoutPanelGeneral"; + this.tableLayoutPanelGeneral.RowCount = 3; + this.tableLayoutPanelGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelGeneral.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelGeneral.Size = new System.Drawing.Size(0, 0); + this.tableLayoutPanelGeneral.TabIndex = 7; + // + // groupBox1 + // + this.groupBox1.AutoSize = true; + this.groupBox1.Controls.Add(this.tableLayoutPanel2); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox1.Location = new System.Drawing.Point(3, 171); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(1, 152); + this.groupBox1.TabIndex = 1; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Connection"; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.AutoSize = true; + this.tableLayoutPanel2.ColumnCount = 2; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 199F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.keychainCheckbox, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.labelKeychain, 0, 1); + this.tableLayoutPanel2.Controls.Add(this.confirmDisconnectCheckbox, 0, 2); + this.tableLayoutPanel2.Controls.Add(this.label7, 0, 4); + this.tableLayoutPanel2.Controls.Add(this.labelConfirmDisconnect, 0, 3); + this.tableLayoutPanel2.Controls.Add(this.defaultProtocolCombobox, 1, 4); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel2.RowCount = 6; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.Size = new System.Drawing.Size(0, 130); + this.tableLayoutPanel2.TabIndex = 10; + // + // keychainCheckbox + // + this.keychainCheckbox.AutoSize = true; + this.tableLayoutPanel2.SetColumnSpan(this.keychainCheckbox, 2); + this.keychainCheckbox.Location = new System.Drawing.Point(8, 8); + this.keychainCheckbox.Name = "keychainCheckbox"; + this.keychainCheckbox.Size = new System.Drawing.Size(96, 19); + this.keychainCheckbox.TabIndex = 0; + this.keychainCheckbox.Text = "Use Keychain"; + this.keychainCheckbox.UseVisualStyleBackColor = true; + this.keychainCheckbox.CheckedChanged += new System.EventHandler(this.keychainCheckbox_CheckedChanged); + // + // labelKeychain + // + this.labelKeychain.AutoEllipsis = true; + this.labelKeychain.AutoSize = true; + this.tableLayoutPanel2.SetColumnSpan(this.labelKeychain, 2); + this.labelKeychain.ForeColor = System.Drawing.SystemColors.GrayText; + this.labelKeychain.Location = new System.Drawing.Point(8, 30); + this.labelKeychain.Name = "labelKeychain"; + this.labelKeychain.Size = new System.Drawing.Size(551, 15); + this.labelKeychain.TabIndex = 6; + this.labelKeychain.Text = "Search for passwords in the Keychain. Save passwords upon successful login in the" + + " Keychain by default."; + // + // confirmDisconnectCheckbox + // + this.confirmDisconnectCheckbox.AutoSize = true; + this.confirmDisconnectCheckbox.Location = new System.Drawing.Point(8, 48); + this.confirmDisconnectCheckbox.Name = "confirmDisconnectCheckbox"; + this.confirmDisconnectCheckbox.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); + this.confirmDisconnectCheckbox.Size = new System.Drawing.Size(131, 24); + this.confirmDisconnectCheckbox.TabIndex = 7; + this.confirmDisconnectCheckbox.Text = "Confirm disconnect"; + this.confirmDisconnectCheckbox.UseVisualStyleBackColor = true; + this.confirmDisconnectCheckbox.CheckedChanged += new System.EventHandler(this.confirmDisconnectCheckbox_CheckedChanged); + // + // label7 + // + this.label7.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label7.AutoEllipsis = true; + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(105, 102); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(96, 15); + this.label7.TabIndex = 6; + this.label7.Text = "Default protocol:"; + this.label7.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // labelConfirmDisconnect + // + this.labelConfirmDisconnect.AutoEllipsis = true; + this.labelConfirmDisconnect.AutoSize = true; + this.tableLayoutPanel2.SetColumnSpan(this.labelConfirmDisconnect, 2); + this.labelConfirmDisconnect.ForeColor = System.Drawing.SystemColors.GrayText; + this.labelConfirmDisconnect.Location = new System.Drawing.Point(8, 75); + this.labelConfirmDisconnect.Name = "labelConfirmDisconnect"; + this.labelConfirmDisconnect.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); + this.labelConfirmDisconnect.Size = new System.Drawing.Size(265, 20); + this.labelConfirmDisconnect.TabIndex = 6; + this.labelConfirmDisconnect.Text = "Ask before closing a connected browser window."; + // + // defaultProtocolCombobox + // + this.defaultProtocolCombobox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.defaultProtocolCombobox.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.defaultProtocolCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.defaultProtocolCombobox.FormattingEnabled = true; + this.defaultProtocolCombobox.IconMember = null; + this.defaultProtocolCombobox.ItemHeight = 18; + this.defaultProtocolCombobox.Location = new System.Drawing.Point(207, 98); + this.defaultProtocolCombobox.Name = "defaultProtocolCombobox"; + this.defaultProtocolCombobox.Size = new System.Drawing.Size(427, 24); + this.defaultProtocolCombobox.TabIndex = 6; + this.defaultProtocolCombobox.SelectionChangeCommitted += new System.EventHandler(this.defaultProtocolCombobox_SelectionChangeCommitted); + // + // browserGroupbox + // + this.browserGroupbox.AutoSize = true; + this.browserGroupbox.Controls.Add(this.tableLayoutPanel1); + this.browserGroupbox.Dock = System.Windows.Forms.DockStyle.Fill; + this.browserGroupbox.Location = new System.Drawing.Point(3, 3); + this.browserGroupbox.Name = "browserGroupbox"; + this.browserGroupbox.Size = new System.Drawing.Size(1, 162); + this.browserGroupbox.TabIndex = 0; + this.browserGroupbox.TabStop = false; + this.browserGroupbox.Text = "Browser"; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.AutoSize = true; + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 199F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 428F)); + this.tableLayoutPanel1.Controls.Add(this.saveWorkspaceCheckbox, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.labelOpenEmtpyBrowser, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.connectBookmarkCombobox, 1, 3); + this.tableLayoutPanel1.Controls.Add(this.label4, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.labelSaveWorkspace, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.newBrowserOnStartupCheckbox, 0, 2); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel1.RowCount = 9; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(0, 140); + this.tableLayoutPanel1.TabIndex = 6; + // + // saveWorkspaceCheckbox + // + this.saveWorkspaceCheckbox.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.saveWorkspaceCheckbox, 2); + this.saveWorkspaceCheckbox.Location = new System.Drawing.Point(8, 8); + this.saveWorkspaceCheckbox.Name = "saveWorkspaceCheckbox"; + this.saveWorkspaceCheckbox.Size = new System.Drawing.Size(111, 19); + this.saveWorkspaceCheckbox.TabIndex = 0; + this.saveWorkspaceCheckbox.Text = "Save Workspace"; + this.saveWorkspaceCheckbox.UseVisualStyleBackColor = true; + this.saveWorkspaceCheckbox.CheckedChanged += new System.EventHandler(this.saveWorkspaceCheckbox_CheckedChanged); + // + // labelOpenEmtpyBrowser + // + this.labelOpenEmtpyBrowser.AutoEllipsis = true; + this.labelOpenEmtpyBrowser.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.labelOpenEmtpyBrowser, 2); + this.labelOpenEmtpyBrowser.ForeColor = System.Drawing.SystemColors.GrayText; + this.labelOpenEmtpyBrowser.Location = new System.Drawing.Point(8, 105); + this.labelOpenEmtpyBrowser.Name = "labelOpenEmtpyBrowser"; + this.labelOpenEmtpyBrowser.Size = new System.Drawing.Size(618, 30); + this.labelOpenEmtpyBrowser.TabIndex = 3; + this.labelOpenEmtpyBrowser.Text = "Open an empty browser when opening the application. A connection to the selected " + + "bookmark is opened for a new browser."; + // + // connectBookmarkCombobox + // + this.connectBookmarkCombobox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.connectBookmarkCombobox.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.connectBookmarkCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.connectBookmarkCombobox.FormattingEnabled = true; + this.connectBookmarkCombobox.IconMember = null; + this.connectBookmarkCombobox.ItemHeight = 18; + this.connectBookmarkCombobox.Location = new System.Drawing.Point(207, 78); + this.connectBookmarkCombobox.Name = "connectBookmarkCombobox"; + this.connectBookmarkCombobox.Size = new System.Drawing.Size(422, 24); + this.connectBookmarkCombobox.TabIndex = 4; + this.connectBookmarkCombobox.SelectionChangeCommitted += new System.EventHandler(this.connectBookmarkCombobox_SelectionChangeCommitted); + // + // label4 + // + this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.label4.AutoEllipsis = true; + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(8, 82); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(193, 15); + this.label4.TabIndex = 5; + this.label4.Text = "Connect to bookmark:"; + this.label4.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // labelSaveWorkspace + // + this.labelSaveWorkspace.AutoEllipsis = true; + this.labelSaveWorkspace.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.labelSaveWorkspace, 2); + this.labelSaveWorkspace.ForeColor = System.Drawing.SystemColors.GrayText; + this.labelSaveWorkspace.Location = new System.Drawing.Point(8, 30); + this.labelSaveWorkspace.Name = "labelSaveWorkspace"; + this.labelSaveWorkspace.Size = new System.Drawing.Size(458, 15); + this.labelSaveWorkspace.TabIndex = 1; + this.labelSaveWorkspace.Text = "Will save all open browsers when quitting and restore the connections upon relaun" + + "ch."; + // + // newBrowserOnStartupCheckbox + // + this.newBrowserOnStartupCheckbox.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.newBrowserOnStartupCheckbox, 2); + this.newBrowserOnStartupCheckbox.Enabled = false; + this.newBrowserOnStartupCheckbox.Location = new System.Drawing.Point(8, 48); + this.newBrowserOnStartupCheckbox.Name = "newBrowserOnStartupCheckbox"; + this.newBrowserOnStartupCheckbox.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); + this.newBrowserOnStartupCheckbox.Size = new System.Drawing.Size(227, 24); + this.newBrowserOnStartupCheckbox.TabIndex = 2; + this.newBrowserOnStartupCheckbox.Text = "Open new browser window on startup"; + this.newBrowserOnStartupCheckbox.UseVisualStyleBackColor = true; + this.newBrowserOnStartupCheckbox.CheckedChanged += new System.EventHandler(this.newBrowserOnStartupCheckbox_CheckedChanged); + // + // managedSftpPanel + // + this.managedSftpPanel.Controls.Add(this.tableLayoutPanel25); + this.managedSftpPanel.Location = new System.Drawing.Point(0, 0); + this.managedSftpPanel.Name = "managedSftpPanel"; + this.managedSftpPanel.Size = new System.Drawing.Size(0, 0); + this.managedSftpPanel.Text = "managedPanel1"; + // + // tableLayoutPanel25 + // + this.tableLayoutPanel25.AutoSize = true; + this.tableLayoutPanel25.ColumnCount = 1; + this.tableLayoutPanel25.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel25.Controls.Add(this.groupBox18, 0, 0); + this.tableLayoutPanel25.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel25.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel25.Name = "tableLayoutPanel25"; + this.tableLayoutPanel25.RowCount = 2; + this.tableLayoutPanel25.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel25.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel25.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel25.Size = new System.Drawing.Size(0, 0); + this.tableLayoutPanel25.TabIndex = 0; + // + // groupBox18 + // + this.groupBox18.AutoSize = true; + this.groupBox18.Controls.Add(this.tableLayoutPanel27); + this.groupBox18.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox18.Location = new System.Drawing.Point(3, 3); + this.groupBox18.Name = "groupBox18"; + this.groupBox18.Size = new System.Drawing.Size(1, 81); + this.groupBox18.TabIndex = 2; + this.groupBox18.TabStop = false; + this.groupBox18.Text = "File Transfers"; + // + // tableLayoutPanel27 + // + this.tableLayoutPanel27.AutoSize = true; + this.tableLayoutPanel27.ColumnCount = 2; + this.tableLayoutPanel27.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel27.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel27.Controls.Add(this.label27, 0, 0); + this.tableLayoutPanel27.Controls.Add(this.sshTransfersCombobox, 1, 1); + this.tableLayoutPanel27.Controls.Add(this.label28, 0, 1); + this.tableLayoutPanel27.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel27.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel27.Name = "tableLayoutPanel27"; + this.tableLayoutPanel27.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel27.RowCount = 2; + this.tableLayoutPanel27.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel27.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel27.Size = new System.Drawing.Size(0, 59); + this.tableLayoutPanel27.TabIndex = 4; + // + // label27 + // + this.label27.AutoSize = true; + this.tableLayoutPanel27.SetColumnSpan(this.label27, 2); + this.label27.ForeColor = System.Drawing.SystemColors.GrayText; + this.label27.Location = new System.Drawing.Point(8, 5); + this.label27.Name = "label27"; + this.label27.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); + this.label27.Size = new System.Drawing.Size(1, 5); + this.label27.TabIndex = 1; + this.label27.Text = "SSH supports both file transfers over SFTP or SCP."; + // + // sshTransfersCombobox + // + this.sshTransfersCombobox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.sshTransfersCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.sshTransfersCombobox.FormattingEnabled = true; + this.sshTransfersCombobox.Location = new System.Drawing.Point(8, 20); + this.sshTransfersCombobox.Name = "sshTransfersCombobox"; + this.sshTransfersCombobox.Size = new System.Drawing.Size(1, 23); + this.sshTransfersCombobox.TabIndex = 2; + // + // label28 + // + this.label28.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label28.AutoSize = true; + this.label28.Location = new System.Drawing.Point(8, 24); + this.label28.Name = "label28"; + this.label28.Size = new System.Drawing.Size(1, 15); + this.label28.TabIndex = 3; + this.label28.Text = "Transfer Files using:"; + this.label28.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // managedS3Panel + // + this.managedS3Panel.Controls.Add(this.tableLayoutPanel28); + this.managedS3Panel.Location = new System.Drawing.Point(0, 0); + this.managedS3Panel.Name = "managedS3Panel"; + this.managedS3Panel.Size = new System.Drawing.Size(0, 0); + this.managedS3Panel.Text = "managedPanel1"; + // + // tableLayoutPanel28 + // + this.tableLayoutPanel28.AutoSize = true; + this.tableLayoutPanel28.ColumnCount = 1; + this.tableLayoutPanel28.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel28.Controls.Add(this.groupBox19, 0, 0); + this.tableLayoutPanel28.Controls.Add(this.groupBox22, 0, 1); + this.tableLayoutPanel28.Controls.Add(this.groupBox3, 0, 2); + this.tableLayoutPanel28.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel28.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel28.Name = "tableLayoutPanel28"; + this.tableLayoutPanel28.RowCount = 4; + this.tableLayoutPanel28.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel28.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel28.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel28.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel28.Size = new System.Drawing.Size(0, 0); + this.tableLayoutPanel28.TabIndex = 0; + // + // groupBox19 + // + this.groupBox19.AutoSize = true; + this.groupBox19.Controls.Add(this.tableLayoutPanel29); + this.groupBox19.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox19.Location = new System.Drawing.Point(3, 3); + this.groupBox19.Name = "groupBox19"; + this.groupBox19.Size = new System.Drawing.Size(1, 81); + this.groupBox19.TabIndex = 0; + this.groupBox19.TabStop = false; + this.groupBox19.Text = "Default Bucket Location"; + // + // tableLayoutPanel29 + // + this.tableLayoutPanel29.AutoSize = true; + this.tableLayoutPanel29.ColumnCount = 1; + this.tableLayoutPanel29.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 632F)); + this.tableLayoutPanel29.Controls.Add(this.label29, 0, 0); + this.tableLayoutPanel29.Controls.Add(this.defaultBucketLocationCombobox, 0, 1); + this.tableLayoutPanel29.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel29.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel29.Name = "tableLayoutPanel29"; + this.tableLayoutPanel29.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel29.RowCount = 2; + this.tableLayoutPanel29.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel29.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel29.Size = new System.Drawing.Size(0, 59); + this.tableLayoutPanel29.TabIndex = 2; + // + // label29 + // + this.label29.AutoSize = true; + this.label29.ForeColor = System.Drawing.SystemColors.GrayText; + this.label29.Location = new System.Drawing.Point(8, 5); + this.label29.Name = "label29"; + this.label29.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); + this.label29.Size = new System.Drawing.Size(366, 20); + this.label29.TabIndex = 0; + this.label29.Text = "The geographic location in which buckets will be created by default."; + // + // defaultBucketLocationCombobox + // + this.defaultBucketLocationCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.defaultBucketLocationCombobox.FormattingEnabled = true; + this.defaultBucketLocationCombobox.Location = new System.Drawing.Point(8, 28); + this.defaultBucketLocationCombobox.Name = "defaultBucketLocationCombobox"; + this.defaultBucketLocationCombobox.Size = new System.Drawing.Size(279, 23); + this.defaultBucketLocationCombobox.TabIndex = 1; + this.defaultBucketLocationCombobox.SelectionChangeCommitted += new System.EventHandler(this.defaultBucketLocationCombobox_SelectionChangeCommitted); + // + // groupBox22 + // + this.groupBox22.AutoSize = true; + this.groupBox22.Controls.Add(this.tableLayoutPanel30); + this.groupBox22.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox22.Location = new System.Drawing.Point(3, 90); + this.groupBox22.Name = "groupBox22"; + this.groupBox22.Size = new System.Drawing.Size(1, 102); + this.groupBox22.TabIndex = 1; + this.groupBox22.TabStop = false; + this.groupBox22.Text = "Default Storage Class"; + // + // tableLayoutPanel30 + // + this.tableLayoutPanel30.AutoSize = true; + this.tableLayoutPanel30.ColumnCount = 1; + this.tableLayoutPanel30.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 632F)); + this.tableLayoutPanel30.Controls.Add(this.defaultStorageClassComboBox, 0, 1); + this.tableLayoutPanel30.Controls.Add(this.label3, 0, 0); + this.tableLayoutPanel30.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel30.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel30.Name = "tableLayoutPanel30"; + this.tableLayoutPanel30.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel30.RowCount = 2; + this.tableLayoutPanel30.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel30.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel30.Size = new System.Drawing.Size(0, 80); + this.tableLayoutPanel30.TabIndex = 0; + // + // defaultStorageClassComboBox + // + this.defaultStorageClassComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.defaultStorageClassComboBox.FormattingEnabled = true; + this.defaultStorageClassComboBox.Location = new System.Drawing.Point(8, 43); + this.defaultStorageClassComboBox.Name = "defaultStorageClassComboBox"; + this.defaultStorageClassComboBox.Size = new System.Drawing.Size(279, 23); + this.defaultStorageClassComboBox.TabIndex = 2; + this.defaultStorageClassComboBox.SelectionChangeCommitted += new System.EventHandler(this.defaultStorageClassComboBox_SelectionChangeCommitted); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.ForeColor = System.Drawing.SystemColors.GrayText; + this.label3.Location = new System.Drawing.Point(8, 5); + this.label3.Name = "label3"; + this.label3.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); + this.label3.Size = new System.Drawing.Size(620, 35); + this.label3.TabIndex = 0; + this.label3.Text = "Choose Reduced Reduncancy Storage (RRS) to reduce costs by storing non-critical, " + + "reproducible data at lower levels of redundancy."; + // + // groupBox3 + // + this.groupBox3.AutoSize = true; + this.groupBox3.Controls.Add(this.tableLayoutPanel20); + this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox3.Location = new System.Drawing.Point(3, 198); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(1, 81); + this.groupBox3.TabIndex = 2; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "Encryption"; + // + // tableLayoutPanel20 + // + this.tableLayoutPanel20.AutoSize = true; + this.tableLayoutPanel20.ColumnCount = 1; + this.tableLayoutPanel20.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 632F)); + this.tableLayoutPanel20.Controls.Add(this.defaultEncryptionComboBox, 0, 1); + this.tableLayoutPanel20.Controls.Add(this.label8, 0, 0); + this.tableLayoutPanel20.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel20.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel20.Name = "tableLayoutPanel20"; + this.tableLayoutPanel20.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel20.RowCount = 2; + this.tableLayoutPanel20.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel20.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel20.Size = new System.Drawing.Size(0, 59); + this.tableLayoutPanel20.TabIndex = 0; + // + // defaultEncryptionComboBox + // + this.defaultEncryptionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.defaultEncryptionComboBox.FormattingEnabled = true; + this.defaultEncryptionComboBox.Location = new System.Drawing.Point(8, 28); + this.defaultEncryptionComboBox.Name = "defaultEncryptionComboBox"; + this.defaultEncryptionComboBox.Size = new System.Drawing.Size(279, 23); + this.defaultEncryptionComboBox.TabIndex = 3; + this.defaultEncryptionComboBox.SelectionChangeCommitted += new System.EventHandler(this.defaultEncryptionComboBox_SelectionChangeCommitted); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.ForeColor = System.Drawing.SystemColors.GrayText; + this.label8.Location = new System.Drawing.Point(8, 5); + this.label8.Name = "label8"; + this.label8.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); + this.label8.Size = new System.Drawing.Size(289, 20); + this.label8.TabIndex = 1; + this.label8.Text = "Choose the algorithm to encrypt files with on upload."; + // + // managedGoogleDocsPanel + // + this.managedGoogleDocsPanel.Controls.Add(this.tableLayoutPanel31); + this.managedGoogleDocsPanel.Location = new System.Drawing.Point(0, 0); + this.managedGoogleDocsPanel.Name = "managedGoogleDocsPanel"; + this.managedGoogleDocsPanel.Size = new System.Drawing.Size(0, 0); + this.managedGoogleDocsPanel.Text = "managedPan"; + // + // tableLayoutPanel31 + // + this.tableLayoutPanel31.AutoSize = true; + this.tableLayoutPanel31.ColumnCount = 1; + this.tableLayoutPanel31.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel31.Controls.Add(this.groupBox23, 0, 0); + this.tableLayoutPanel31.Controls.Add(this.groupBox24, 0, 1); + this.tableLayoutPanel31.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel31.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel31.Name = "tableLayoutPanel31"; + this.tableLayoutPanel31.RowCount = 3; + this.tableLayoutPanel31.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel31.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel31.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel31.Size = new System.Drawing.Size(0, 0); + this.tableLayoutPanel31.TabIndex = 0; + // + // groupBox23 + // + this.groupBox23.AutoSize = true; + this.groupBox23.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBox23.Controls.Add(this.tableLayoutPanel32); + this.groupBox23.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox23.Location = new System.Drawing.Point(3, 3); + this.groupBox23.Name = "groupBox23"; + this.groupBox23.Size = new System.Drawing.Size(1, 149); + this.groupBox23.TabIndex = 0; + this.groupBox23.TabStop = false; + this.groupBox23.Text = "Downloads"; + // + // tableLayoutPanel32 + // + this.tableLayoutPanel32.AutoSize = true; + this.tableLayoutPanel32.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel32.ColumnCount = 2; + this.tableLayoutPanel32.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 150F)); + this.tableLayoutPanel32.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 428F)); + this.tableLayoutPanel32.Controls.Add(this.gdDocumentsComboBox, 1, 1); + this.tableLayoutPanel32.Controls.Add(this.gdSpreadsheetsComboBox, 1, 3); + this.tableLayoutPanel32.Controls.Add(this.gdPresentationsComboBox, 1, 2); + this.tableLayoutPanel32.Controls.Add(this.label5, 0, 0); + this.tableLayoutPanel32.Controls.Add(this.label6, 0, 1); + this.tableLayoutPanel32.Controls.Add(this.label9, 0, 2); + this.tableLayoutPanel32.Controls.Add(this.label13, 0, 3); + this.tableLayoutPanel32.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel32.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel32.Name = "tableLayoutPanel32"; + this.tableLayoutPanel32.Padding = new System.Windows.Forms.Padding(5, 5, 5, 0); + this.tableLayoutPanel32.RowCount = 5; + this.tableLayoutPanel32.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel32.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel32.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel32.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel32.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel32.Size = new System.Drawing.Size(0, 127); + this.tableLayoutPanel32.TabIndex = 0; + // + // gdDocumentsComboBox + // + this.gdDocumentsComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.gdDocumentsComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.gdDocumentsComboBox.FormattingEnabled = true; + this.gdDocumentsComboBox.Location = new System.Drawing.Point(158, 43); + this.gdDocumentsComboBox.Name = "gdDocumentsComboBox"; + this.gdDocumentsComboBox.Size = new System.Drawing.Size(422, 23); + this.gdDocumentsComboBox.TabIndex = 7; + this.gdDocumentsComboBox.SelectionChangeCommitted += new System.EventHandler(this.gdDocumentsComboBox_SelectionChangeCommitted); + // + // gdSpreadsheetsComboBox + // + this.gdSpreadsheetsComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.gdSpreadsheetsComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.gdSpreadsheetsComboBox.FormattingEnabled = true; + this.gdSpreadsheetsComboBox.Location = new System.Drawing.Point(158, 101); + this.gdSpreadsheetsComboBox.Name = "gdSpreadsheetsComboBox"; + this.gdSpreadsheetsComboBox.Size = new System.Drawing.Size(422, 23); + this.gdSpreadsheetsComboBox.TabIndex = 6; + this.gdSpreadsheetsComboBox.SelectionChangeCommitted += new System.EventHandler(this.gdSpreadsheetsComboBox_SelectionChangeCommitted); + // + // gdPresentationsComboBox + // + this.gdPresentationsComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.gdPresentationsComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.gdPresentationsComboBox.FormattingEnabled = true; + this.gdPresentationsComboBox.Location = new System.Drawing.Point(158, 72); + this.gdPresentationsComboBox.Name = "gdPresentationsComboBox"; + this.gdPresentationsComboBox.Size = new System.Drawing.Size(422, 23); + this.gdPresentationsComboBox.TabIndex = 5; + this.gdPresentationsComboBox.SelectionChangeCommitted += new System.EventHandler(this.gdPresentationsComboBox_SelectionChangeCommitted); + // + // label5 + // + this.label5.AutoSize = true; + this.tableLayoutPanel32.SetColumnSpan(this.label5, 2); + this.label5.ForeColor = System.Drawing.SystemColors.GrayText; + this.label5.Location = new System.Drawing.Point(8, 5); + this.label5.Name = "label5"; + this.label5.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); + this.label5.Size = new System.Drawing.Size(565, 35); + this.label5.TabIndex = 0; + this.label5.Text = "Google Docs supports exporting documents in different file formats. Choose the de" + + "fault export format for documents downloaded."; + // + // label6 + // + this.label6.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(81, 47); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(71, 15); + this.label6.TabIndex = 1; + this.label6.Text = "Documents:"; + // + // label9 + // + this.label9.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(71, 76); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(81, 15); + this.label9.TabIndex = 2; + this.label9.Text = "Presentations:"; + // + // label13 + // + this.label13.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(73, 105); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(79, 15); + this.label13.TabIndex = 3; + this.label13.Text = "Spreadsheets:"; + // + // groupBox24 + // + this.groupBox24.AutoSize = true; + this.groupBox24.Controls.Add(this.tableLayoutPanel33); + this.groupBox24.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox24.Location = new System.Drawing.Point(3, 158); + this.groupBox24.Name = "groupBox24"; + this.groupBox24.Size = new System.Drawing.Size(1, 142); + this.groupBox24.TabIndex = 1; + this.groupBox24.TabStop = false; + this.groupBox24.Text = "Uploads"; + // + // tableLayoutPanel33 + // + this.tableLayoutPanel33.AutoSize = true; + this.tableLayoutPanel33.ColumnCount = 1; + this.tableLayoutPanel33.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 577F)); + this.tableLayoutPanel33.Controls.Add(this.gdConvertCheckBox, 0, 0); + this.tableLayoutPanel33.Controls.Add(this.labelConvert, 0, 1); + this.tableLayoutPanel33.Controls.Add(this.gdOCRcheckBox, 0, 2); + this.tableLayoutPanel33.Controls.Add(this.labelOcr, 0, 3); + this.tableLayoutPanel33.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel33.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel33.Name = "tableLayoutPanel33"; + this.tableLayoutPanel33.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel33.RowCount = 4; + this.tableLayoutPanel33.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel33.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel33.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel33.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel33.Size = new System.Drawing.Size(0, 120); + this.tableLayoutPanel33.TabIndex = 0; + // + // gdConvertCheckBox + // + this.gdConvertCheckBox.AutoSize = true; + this.gdConvertCheckBox.Location = new System.Drawing.Point(8, 8); + this.gdConvertCheckBox.Name = "gdConvertCheckBox"; + this.gdConvertCheckBox.Size = new System.Drawing.Size(191, 19); + this.gdConvertCheckBox.TabIndex = 0; + this.gdConvertCheckBox.Text = "Convert to Google Docs format"; + this.gdConvertCheckBox.UseVisualStyleBackColor = true; + this.gdConvertCheckBox.CheckedChanged += new System.EventHandler(this.gdConvertCheckBox_CheckedChanged); + // + // labelConvert + // + this.labelConvert.AutoSize = true; + this.labelConvert.ForeColor = System.Drawing.SystemColors.GrayText; + this.labelConvert.Location = new System.Drawing.Point(8, 30); + this.labelConvert.Name = "labelConvert"; + this.labelConvert.Padding = new System.Windows.Forms.Padding(0, 0, 0, 15); + this.labelConvert.Size = new System.Drawing.Size(545, 45); + this.labelConvert.TabIndex = 1; + this.labelConvert.Text = "You can simply store the uploaded files in Google Docs, or convert text documents" + + ", presentations and spreadsheets to Google Docs format so you can later edit con" + + "tent online."; + // + // gdOCRcheckBox + // + this.gdOCRcheckBox.AutoSize = true; + this.gdOCRcheckBox.Location = new System.Drawing.Point(8, 78); + this.gdOCRcheckBox.Name = "gdOCRcheckBox"; + this.gdOCRcheckBox.Size = new System.Drawing.Size(220, 19); + this.gdOCRcheckBox.TabIndex = 2; + this.gdOCRcheckBox.Text = "Optical Character Recognition (OCR)"; + this.gdOCRcheckBox.UseVisualStyleBackColor = true; + this.gdOCRcheckBox.CheckedChanged += new System.EventHandler(this.gdOCRcheckBox_CheckedChanged); + // + // labelOcr + // + this.labelOcr.AutoSize = true; + this.labelOcr.ForeColor = System.Drawing.SystemColors.GrayText; + this.labelOcr.Location = new System.Drawing.Point(8, 100); + this.labelOcr.Name = "labelOcr"; + this.labelOcr.Size = new System.Drawing.Size(502, 15); + this.labelOcr.TabIndex = 3; + this.labelOcr.Text = "Attempt to extract text and create a new document from PNG, JPEG and GIF images u" + + "ploaded."; + // + // managedBandwidthPanel + // + this.managedBandwidthPanel.Controls.Add(this.tableLayoutPanel34); + this.managedBandwidthPanel.Location = new System.Drawing.Point(0, 0); + this.managedBandwidthPanel.Name = "managedBandwidthPanel"; + this.managedBandwidthPanel.Size = new System.Drawing.Size(0, 0); + this.managedBandwidthPanel.Text = "managedPanel1"; + // + // tableLayoutPanel34 + // + this.tableLayoutPanel34.AutoSize = true; + this.tableLayoutPanel34.ColumnCount = 1; + this.tableLayoutPanel34.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel34.Controls.Add(this.groupBox25, 0, 0); + this.tableLayoutPanel34.Controls.Add(this.groupBox26, 0, 1); + this.tableLayoutPanel34.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel34.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel34.Name = "tableLayoutPanel34"; + this.tableLayoutPanel34.RowCount = 3; + this.tableLayoutPanel34.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel34.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel34.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel34.Size = new System.Drawing.Size(0, 0); + this.tableLayoutPanel34.TabIndex = 0; + // + // groupBox25 + // + this.groupBox25.AutoSize = true; + this.groupBox25.Controls.Add(this.tableLayoutPanel35); + this.groupBox25.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox25.Location = new System.Drawing.Point(3, 3); + this.groupBox25.Name = "groupBox25"; + this.groupBox25.Size = new System.Drawing.Size(1, 61); + this.groupBox25.TabIndex = 0; + this.groupBox25.TabStop = false; + this.groupBox25.Text = "Downloads"; + // + // tableLayoutPanel35 + // + this.tableLayoutPanel35.AutoSize = true; + this.tableLayoutPanel35.ColumnCount = 2; + this.tableLayoutPanel35.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 250F)); + this.tableLayoutPanel35.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel35.Controls.Add(this.label31, 0, 0); + this.tableLayoutPanel35.Controls.Add(this.defaultDownloadThrottleCombobox, 1, 0); + this.tableLayoutPanel35.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel35.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel35.Name = "tableLayoutPanel35"; + this.tableLayoutPanel35.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel35.RowCount = 1; + this.tableLayoutPanel35.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel35.Size = new System.Drawing.Size(0, 39); + this.tableLayoutPanel35.TabIndex = 0; + // + // label31 + // + this.label31.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label31.AutoSize = true; + this.label31.Location = new System.Drawing.Point(121, 12); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(131, 15); + this.label31.TabIndex = 2; + this.label31.Text = "Maximum Throughput:"; + this.label31.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // defaultDownloadThrottleCombobox + // + this.defaultDownloadThrottleCombobox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.defaultDownloadThrottleCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.defaultDownloadThrottleCombobox.FormattingEnabled = true; + this.defaultDownloadThrottleCombobox.Location = new System.Drawing.Point(258, 8); + this.defaultDownloadThrottleCombobox.Name = "defaultDownloadThrottleCombobox"; + this.defaultDownloadThrottleCombobox.Size = new System.Drawing.Size(272, 23); + this.defaultDownloadThrottleCombobox.TabIndex = 1; + this.defaultDownloadThrottleCombobox.SelectionChangeCommitted += new System.EventHandler(this.defaultDownloadThrottleCombobox_SelectionChangeCommitted); + // + // groupBox26 + // + this.groupBox26.AutoSize = true; + this.groupBox26.Controls.Add(this.tableLayoutPanel36); + this.groupBox26.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox26.Location = new System.Drawing.Point(3, 70); + this.groupBox26.Name = "groupBox26"; + this.groupBox26.Size = new System.Drawing.Size(1, 61); + this.groupBox26.TabIndex = 1; + this.groupBox26.TabStop = false; + this.groupBox26.Text = "Uploads"; + // + // tableLayoutPanel36 + // + this.tableLayoutPanel36.AutoSize = true; + this.tableLayoutPanel36.ColumnCount = 2; + this.tableLayoutPanel36.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 250F)); + this.tableLayoutPanel36.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel36.Controls.Add(this.defaultUploadThrottleCombobox, 1, 0); + this.tableLayoutPanel36.Controls.Add(this.label32, 0, 0); + this.tableLayoutPanel36.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel36.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel36.Name = "tableLayoutPanel36"; + this.tableLayoutPanel36.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel36.RowCount = 1; + this.tableLayoutPanel36.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel36.Size = new System.Drawing.Size(0, 39); + this.tableLayoutPanel36.TabIndex = 0; + // + // defaultUploadThrottleCombobox + // + this.defaultUploadThrottleCombobox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.defaultUploadThrottleCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.defaultUploadThrottleCombobox.FormattingEnabled = true; + this.defaultUploadThrottleCombobox.Location = new System.Drawing.Point(258, 8); + this.defaultUploadThrottleCombobox.Name = "defaultUploadThrottleCombobox"; + this.defaultUploadThrottleCombobox.Size = new System.Drawing.Size(272, 23); + this.defaultUploadThrottleCombobox.TabIndex = 4; + this.defaultUploadThrottleCombobox.SelectionChangeCommitted += new System.EventHandler(this.defaultUploadThrottleCombobox_SelectionChangeCommitted); + // + // label32 + // + this.label32.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label32.AutoSize = true; + this.label32.Location = new System.Drawing.Point(121, 12); + this.label32.Name = "label32"; + this.label32.Size = new System.Drawing.Size(131, 15); + this.label32.TabIndex = 5; + this.label32.Text = "Maximum Throughput:"; + this.label32.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // managedConnectionPanel + // + this.managedConnectionPanel.Controls.Add(this.tableLayoutPanel37); + this.managedConnectionPanel.Location = new System.Drawing.Point(0, 0); + this.managedConnectionPanel.Name = "managedConnectionPanel"; + this.managedConnectionPanel.Size = new System.Drawing.Size(0, 0); + this.managedConnectionPanel.Text = "managedPanel1"; + // + // tableLayoutPanel37 + // + this.tableLayoutPanel37.AutoSize = true; + this.tableLayoutPanel37.ColumnCount = 1; + this.tableLayoutPanel37.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel37.Controls.Add(this.groupBox21, 0, 1); + this.tableLayoutPanel37.Controls.Add(this.groupBox4, 0, 0); + this.tableLayoutPanel37.Controls.Add(this.groupBox20, 0, 2); + this.tableLayoutPanel37.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel37.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel37.Name = "tableLayoutPanel37"; + this.tableLayoutPanel37.RowCount = 4; + this.tableLayoutPanel37.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel37.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel37.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel37.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel37.Size = new System.Drawing.Size(0, 0); + this.tableLayoutPanel37.TabIndex = 0; + // + // groupBox21 + // + this.groupBox21.AutoSize = true; + this.groupBox21.Controls.Add(this.tableLayoutPanel39); + this.groupBox21.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox21.Location = new System.Drawing.Point(3, 105); + this.groupBox21.Name = "groupBox21"; + this.groupBox21.Size = new System.Drawing.Size(1, 144); + this.groupBox21.TabIndex = 0; + this.groupBox21.TabStop = false; + this.groupBox21.Text = "Timeouts"; + // + // tableLayoutPanel39 + // + this.tableLayoutPanel39.AutoSize = true; + this.tableLayoutPanel39.ColumnCount = 2; + this.tableLayoutPanel39.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel39.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel39.Controls.Add(this.connectionTimeoutUpDown, 1, 0); + this.tableLayoutPanel39.Controls.Add(this.retriesUpDown, 1, 3); + this.tableLayoutPanel39.Controls.Add(this.retryCheckbox, 0, 1); + this.tableLayoutPanel39.Controls.Add(this.label34, 0, 3); + this.tableLayoutPanel39.Controls.Add(this.label36, 0, 0); + this.tableLayoutPanel39.Controls.Add(this.retryDelayUpDown, 1, 2); + this.tableLayoutPanel39.Controls.Add(this.label16, 0, 2); + this.tableLayoutPanel39.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel39.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel39.Name = "tableLayoutPanel39"; + this.tableLayoutPanel39.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel39.RowCount = 4; + this.tableLayoutPanel39.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel39.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel39.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel39.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel39.Size = new System.Drawing.Size(0, 122); + this.tableLayoutPanel39.TabIndex = 12; + // + // connectionTimeoutUpDown + // + this.connectionTimeoutUpDown.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.connectionTimeoutUpDown.AutoSize = true; + this.connectionTimeoutUpDown.Location = new System.Drawing.Point(8, 8); + this.connectionTimeoutUpDown.Maximum = new decimal(new int[] { + 60, + 0, + 0, + 0}); + this.connectionTimeoutUpDown.Minimum = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.connectionTimeoutUpDown.Name = "connectionTimeoutUpDown"; + this.connectionTimeoutUpDown.Size = new System.Drawing.Size(1, 23); + this.connectionTimeoutUpDown.TabIndex = 6; + this.connectionTimeoutUpDown.Value = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.connectionTimeoutUpDown.ValueChanged += new System.EventHandler(this.connectionTimeoutUpDown_ValueChanged); + // + // retriesUpDown + // + this.retriesUpDown.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.retriesUpDown.AutoSize = true; + this.retriesUpDown.Location = new System.Drawing.Point(8, 91); + this.retriesUpDown.Maximum = new decimal(new int[] { + 9, + 0, + 0, + 0}); + this.retriesUpDown.Name = "retriesUpDown"; + this.retriesUpDown.Size = new System.Drawing.Size(1, 23); + this.retriesUpDown.TabIndex = 11; + this.retriesUpDown.Value = new decimal(new int[] { + 9, + 0, + 0, + 0}); + this.retriesUpDown.ValueChanged += new System.EventHandler(this.retriesUpDown_ValueChanged); + // + // retryCheckbox + // + this.retryCheckbox.AutoSize = true; + this.retryCheckbox.Location = new System.Drawing.Point(8, 37); + this.retryCheckbox.Name = "retryCheckbox"; + this.retryCheckbox.Size = new System.Drawing.Size(1, 19); + this.retryCheckbox.TabIndex = 7; + this.retryCheckbox.Text = "Repeat failed networking tasks"; + this.retryCheckbox.UseVisualStyleBackColor = true; + this.retryCheckbox.CheckedChanged += new System.EventHandler(this.retryCheckbox_CheckedChanged); + // + // label34 + // + this.label34.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label34.AutoSize = true; + this.label34.Location = new System.Drawing.Point(8, 95); + this.label34.Name = "label34"; + this.label34.Size = new System.Drawing.Size(1, 15); + this.label34.TabIndex = 10; + this.label34.Text = "Number of retries:"; + this.label34.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // label36 + // + this.label36.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.label36.AutoSize = true; + this.label36.Location = new System.Drawing.Point(8, 12); + this.label36.Name = "label36"; + this.label36.Size = new System.Drawing.Size(1, 15); + this.label36.TabIndex = 2; + this.label36.Text = "Timeout for opening connections (seconds):"; + this.label36.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // retryDelayUpDown + // + this.retryDelayUpDown.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.retryDelayUpDown.AutoSize = true; + this.retryDelayUpDown.Location = new System.Drawing.Point(8, 62); + this.retryDelayUpDown.Maximum = new decimal(new int[] { + 30, + 0, + 0, + 0}); + this.retryDelayUpDown.Name = "retryDelayUpDown"; + this.retryDelayUpDown.Size = new System.Drawing.Size(1, 23); + this.retryDelayUpDown.TabIndex = 9; + this.retryDelayUpDown.Value = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.retryDelayUpDown.ValueChanged += new System.EventHandler(this.retryDelayUpDown_ValueChanged); + // + // label16 + // + this.label16.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(8, 66); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(1, 15); + this.label16.TabIndex = 12; + this.label16.Text = "with delay (seconds):"; + // + // groupBox4 + // + this.groupBox4.AutoSize = true; + this.groupBox4.Controls.Add(this.tableLayoutPanel38); + this.groupBox4.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox4.Location = new System.Drawing.Point(3, 3); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(1, 96); + this.groupBox4.TabIndex = 2; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "Text Encoding"; + // + // tableLayoutPanel38 + // + this.tableLayoutPanel38.AutoSize = true; + this.tableLayoutPanel38.ColumnCount = 1; + this.tableLayoutPanel38.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 628F)); + this.tableLayoutPanel38.Controls.Add(this.label2, 0, 0); + this.tableLayoutPanel38.Controls.Add(this.defaultEncodingCombobox, 0, 1); + this.tableLayoutPanel38.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel38.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel38.Name = "tableLayoutPanel38"; + this.tableLayoutPanel38.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel38.RowCount = 2; + this.tableLayoutPanel38.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel38.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel38.Size = new System.Drawing.Size(0, 74); + this.tableLayoutPanel38.TabIndex = 6; + // + // label2 + // + this.label2.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label2.AutoEllipsis = true; + this.label2.AutoSize = true; + this.label2.ForeColor = System.Drawing.SystemColors.GrayText; + this.label2.Location = new System.Drawing.Point(8, 5); + this.label2.Name = "label2"; + this.label2.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); + this.label2.Size = new System.Drawing.Size(609, 35); + this.label2.TabIndex = 0; + this.label2.Text = "The selected default text encoding is used to convert characters in filenames dis" + + "played in the browser. This should match the text encoding used on the server."; + // + // defaultEncodingCombobox + // + this.defaultEncodingCombobox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.defaultEncodingCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.defaultEncodingCombobox.FormattingEnabled = true; + this.defaultEncodingCombobox.ItemHeight = 15; + this.defaultEncodingCombobox.Location = new System.Drawing.Point(8, 43); + this.defaultEncodingCombobox.Name = "defaultEncodingCombobox"; + this.defaultEncodingCombobox.Size = new System.Drawing.Size(206, 23); + this.defaultEncodingCombobox.TabIndex = 5; + this.defaultEncodingCombobox.SelectionChangeCommitted += new System.EventHandler(this.defaultEncodingCombobox_SelectionChangeCommitted); + // + // groupBox20 + // + this.groupBox20.AutoSize = true; + this.groupBox20.Controls.Add(this.tableLayoutPanel40); + this.groupBox20.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox20.Location = new System.Drawing.Point(3, 255); + this.groupBox20.Name = "groupBox20"; + this.groupBox20.Size = new System.Drawing.Size(1, 88); + this.groupBox20.TabIndex = 3; + this.groupBox20.TabStop = false; + this.groupBox20.Text = "Proxies"; + // + // tableLayoutPanel40 + // + this.tableLayoutPanel40.AutoSize = true; + this.tableLayoutPanel40.ColumnCount = 1; + this.tableLayoutPanel40.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel40.Controls.Add(this.systemProxyCheckBox, 0, 0); + this.tableLayoutPanel40.Controls.Add(this.changeSystemProxyButton, 0, 1); + this.tableLayoutPanel40.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel40.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel40.Name = "tableLayoutPanel40"; + this.tableLayoutPanel40.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel40.RowCount = 2; + this.tableLayoutPanel40.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel40.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel40.Size = new System.Drawing.Size(0, 66); + this.tableLayoutPanel40.TabIndex = 0; + // + // systemProxyCheckBox + // + this.systemProxyCheckBox.AutoSize = true; + this.systemProxyCheckBox.Location = new System.Drawing.Point(8, 8); + this.systemProxyCheckBox.Name = "systemProxyCheckBox"; + this.systemProxyCheckBox.Size = new System.Drawing.Size(1, 19); + this.systemProxyCheckBox.TabIndex = 0; + this.systemProxyCheckBox.Text = "Use system proxy settings"; + this.systemProxyCheckBox.UseVisualStyleBackColor = true; + this.systemProxyCheckBox.CheckStateChanged += new System.EventHandler(this.systemProxyCheckBox_CheckStateChanged); + // + // changeSystemProxyButton + // + this.changeSystemProxyButton.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.changeSystemProxyButton.AutoSize = true; + this.changeSystemProxyButton.Location = new System.Drawing.Point(8, 33); + this.changeSystemProxyButton.Name = "changeSystemProxyButton"; + this.changeSystemProxyButton.Size = new System.Drawing.Size(1, 25); + this.changeSystemProxyButton.TabIndex = 1; + this.changeSystemProxyButton.Text = "Change Settings…"; + this.changeSystemProxyButton.UseVisualStyleBackColor = true; + this.changeSystemProxyButton.Click += new System.EventHandler(this.changeSystemProxyButton_Click); + // + // managedUpdatePanel + // + this.managedUpdatePanel.Controls.Add(this.tableLayoutPanel41); + this.managedUpdatePanel.Location = new System.Drawing.Point(0, 0); + this.managedUpdatePanel.Name = "managedUpdatePanel"; + this.managedUpdatePanel.Size = new System.Drawing.Size(0, 0); + this.managedUpdatePanel.Text = "managedPanel1"; + // + // tableLayoutPanel41 + // + this.tableLayoutPanel41.ColumnCount = 1; + this.tableLayoutPanel41.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel41.Controls.Add(this.groupBox27, 0, 0); + this.tableLayoutPanel41.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel41.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel41.Name = "tableLayoutPanel41"; + this.tableLayoutPanel41.RowCount = 2; + this.tableLayoutPanel41.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel41.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel41.Size = new System.Drawing.Size(0, 0); + this.tableLayoutPanel41.TabIndex = 0; + // + // groupBox27 + // + this.groupBox27.AutoSize = true; + this.groupBox27.Controls.Add(this.tableLayoutPanel42); + this.groupBox27.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox27.Location = new System.Drawing.Point(3, 3); + this.groupBox27.Name = "groupBox27"; + this.groupBox27.Size = new System.Drawing.Size(1, 112); + this.groupBox27.TabIndex = 0; + this.groupBox27.TabStop = false; + this.groupBox27.Text = "Update"; + // + // tableLayoutPanel42 + // + this.tableLayoutPanel42.AutoSize = true; + this.tableLayoutPanel42.ColumnCount = 2; + this.tableLayoutPanel42.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel42.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel42.Controls.Add(this.updateCheckBox, 0, 0); + this.tableLayoutPanel42.Controls.Add(this.updateCheckButton, 0, 1); + this.tableLayoutPanel42.Controls.Add(this.lastUpdateLabel, 0, 3); + this.tableLayoutPanel42.Controls.Add(this.updateFeedComboBox, 1, 0); + this.tableLayoutPanel42.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel42.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel42.Name = "tableLayoutPanel42"; + this.tableLayoutPanel42.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel42.RowCount = 4; + this.tableLayoutPanel42.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel42.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel42.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 5F)); + this.tableLayoutPanel42.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel42.Size = new System.Drawing.Size(0, 90); + this.tableLayoutPanel42.TabIndex = 0; + // + // updateCheckBox + // + this.updateCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.updateCheckBox.AutoSize = true; + this.updateCheckBox.Location = new System.Drawing.Point(8, 10); + this.updateCheckBox.Name = "updateCheckBox"; + this.updateCheckBox.Size = new System.Drawing.Size(210, 19); + this.updateCheckBox.TabIndex = 0; + this.updateCheckBox.Text = "Automatically check for updates in"; + this.updateCheckBox.UseVisualStyleBackColor = true; + this.updateCheckBox.CheckedChanged += new System.EventHandler(this.updateCheckBox_CheckedChanged); + // + // updateCheckButton + // + this.updateCheckButton.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.updateCheckButton.AutoSize = true; + this.updateCheckButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel42.SetColumnSpan(this.updateCheckButton, 2); + this.updateCheckButton.Location = new System.Drawing.Point(161, 37); + this.updateCheckButton.Name = "updateCheckButton"; + this.updateCheckButton.Size = new System.Drawing.Size(137, 25); + this.updateCheckButton.TabIndex = 1; + this.updateCheckButton.Text = "Check for Update Now"; + this.updateCheckButton.UseVisualStyleBackColor = true; + this.updateCheckButton.Click += new System.EventHandler(this.updateCheckButton_Click); + // + // lastUpdateLabel + // + this.lastUpdateLabel.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.lastUpdateLabel.AutoSize = true; + this.tableLayoutPanel42.SetColumnSpan(this.lastUpdateLabel, 2); + this.lastUpdateLabel.Location = new System.Drawing.Point(207, 70); + this.lastUpdateLabel.Name = "lastUpdateLabel"; + this.lastUpdateLabel.Size = new System.Drawing.Size(44, 15); + this.lastUpdateLabel.TabIndex = 2; + this.lastUpdateLabel.Text = "label17"; + // + // updateFeedComboBox + // + this.updateFeedComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.updateFeedComboBox.FormattingEnabled = true; + this.updateFeedComboBox.Location = new System.Drawing.Point(224, 8); + this.updateFeedComboBox.Name = "updateFeedComboBox"; + this.updateFeedComboBox.Size = new System.Drawing.Size(227, 23); + this.updateFeedComboBox.TabIndex = 3; + this.updateFeedComboBox.SelectionChangeCommitted += new System.EventHandler(this.updateFeedComboBox_SelectionChangeCommitted); + // + // managedLanguagePanel + // + this.managedLanguagePanel.Controls.Add(this.tableLayoutPanel43); + this.managedLanguagePanel.Location = new System.Drawing.Point(0, 0); + this.managedLanguagePanel.Name = "managedLanguagePanel"; + this.managedLanguagePanel.Size = new System.Drawing.Size(0, 0); + this.managedLanguagePanel.Text = "managedPanel1"; + // + // tableLayoutPanel43 + // + this.tableLayoutPanel43.AutoSize = true; + this.tableLayoutPanel43.ColumnCount = 1; + this.tableLayoutPanel43.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel43.Controls.Add(this.groupBox28, 0, 0); + this.tableLayoutPanel43.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel43.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel43.Name = "tableLayoutPanel43"; + this.tableLayoutPanel43.RowCount = 2; + this.tableLayoutPanel43.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel43.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel43.Size = new System.Drawing.Size(0, 0); + this.tableLayoutPanel43.TabIndex = 0; + // + // groupBox28 + // + this.groupBox28.AutoSize = true; + this.groupBox28.Controls.Add(this.tableLayoutPanel44); + this.groupBox28.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox28.Location = new System.Drawing.Point(3, 3); + this.groupBox28.Name = "groupBox28"; + this.groupBox28.Size = new System.Drawing.Size(1, 81); + this.groupBox28.TabIndex = 0; + this.groupBox28.TabStop = false; + this.groupBox28.Text = "Language"; + // + // tableLayoutPanel44 + // + this.tableLayoutPanel44.AutoSize = true; + this.tableLayoutPanel44.ColumnCount = 1; + this.tableLayoutPanel44.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 577F)); + this.tableLayoutPanel44.Controls.Add(this.languageComboBox, 0, 1); + this.tableLayoutPanel44.Controls.Add(this.label18, 0, 0); + this.tableLayoutPanel44.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel44.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel44.Name = "tableLayoutPanel44"; + this.tableLayoutPanel44.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel44.RowCount = 2; + this.tableLayoutPanel44.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel44.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel44.Size = new System.Drawing.Size(0, 59); + this.tableLayoutPanel44.TabIndex = 0; + // + // languageComboBox + // + this.languageComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.languageComboBox.Location = new System.Drawing.Point(8, 28); + this.languageComboBox.Name = "languageComboBox"; + this.languageComboBox.Size = new System.Drawing.Size(308, 23); + this.languageComboBox.TabIndex = 2; + this.languageComboBox.SelectionChangeCommitted += new System.EventHandler(this.languageComboBox_SelectionChangeCommitted); + // + // label18 + // + this.label18.AutoSize = true; + this.label18.ForeColor = System.Drawing.SystemColors.GrayText; + this.label18.Location = new System.Drawing.Point(8, 5); + this.label18.Name = "label18"; + this.label18.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); + this.label18.Size = new System.Drawing.Size(321, 20); + this.label18.TabIndex = 0; + this.label18.Text = "Changes take effect the next time you open the application."; + // + // managedEditorPanel + // + this.managedEditorPanel.Controls.Add(this.tableLayoutPanel3); + this.managedEditorPanel.Location = new System.Drawing.Point(0, 0); + this.managedEditorPanel.Name = "managedEditorPanel"; + this.managedEditorPanel.Size = new System.Drawing.Size(0, 0); + this.managedEditorPanel.Text = "managedPanel1"; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.ColumnCount = 1; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel3.Controls.Add(this.groupBox2, 0, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 2; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(0, 0); + this.tableLayoutPanel3.TabIndex = 0; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.tableLayoutPanel4); + this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox2.Location = new System.Drawing.Point(3, 3); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(1, 1); + this.groupBox2.TabIndex = 0; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Editor"; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.ColumnCount = 1; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.label14, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.editorComboBox, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.alwaysUseDefaultEditorCheckBox, 0, 2); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel4.RowCount = 3; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.Size = new System.Drawing.Size(0, 0); + this.tableLayoutPanel4.TabIndex = 0; + // + // label14 + // + this.label14.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.label14.AutoEllipsis = true; + this.label14.AutoSize = true; + this.label14.ForeColor = System.Drawing.SystemColors.GrayText; + this.label14.Location = new System.Drawing.Point(8, 5); + this.label14.Name = "label14"; + this.label14.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); + this.label14.Size = new System.Drawing.Size(1, 5); + this.label14.TabIndex = 1; + this.label14.Text = "Select a text editor to open files with by default if no other application instal" + + "led can be found to edit a given file type."; + // + // editorComboBox + // + this.editorComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.editorComboBox.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.editorComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.editorComboBox.FormattingEnabled = true; + this.editorComboBox.IconMember = null; + this.editorComboBox.Location = new System.Drawing.Point(8, 13); + this.editorComboBox.Name = "editorComboBox"; + this.editorComboBox.Size = new System.Drawing.Size(1, 24); + this.editorComboBox.TabIndex = 2; + this.editorComboBox.SelectionChangeCommitted += new System.EventHandler(this.editorComboBox_SelectionChangeCommitted); + // + // alwaysUseDefaultEditorCheckBox + // + this.alwaysUseDefaultEditorCheckBox.AutoSize = true; + this.alwaysUseDefaultEditorCheckBox.Location = new System.Drawing.Point(8, 43); + this.alwaysUseDefaultEditorCheckBox.Name = "alwaysUseDefaultEditorCheckBox"; + this.alwaysUseDefaultEditorCheckBox.Size = new System.Drawing.Size(1, 19); + this.alwaysUseDefaultEditorCheckBox.TabIndex = 3; + this.alwaysUseDefaultEditorCheckBox.Text = "Always use this application"; + this.alwaysUseDefaultEditorCheckBox.UseVisualStyleBackColor = true; + this.alwaysUseDefaultEditorCheckBox.CheckedChanged += new System.EventHandler(this.alwaysUseDefaultEditorCheckBox_CheckedChanged); + // + // managedTransfersPanel + // + this.managedTransfersPanel.Controls.Add(this.transfersTabControl); + this.managedTransfersPanel.Location = new System.Drawing.Point(0, 0); + this.managedTransfersPanel.Name = "managedTransfersPanel"; + this.managedTransfersPanel.Size = new System.Drawing.Size(654, 479); + this.managedTransfersPanel.Text = "managedPanel1"; + // + // transfersTabControl + // + this.transfersTabControl.Appearance = System.Windows.Forms.TabAppearance.FlatButtons; + this.transfersTabControl.Controls.Add(this.tabPage1); + this.transfersTabControl.Controls.Add(this.tabPage2); + this.transfersTabControl.Controls.Add(this.tabPage3); + this.transfersTabControl.Controls.Add(this.tabPage4); + this.transfersTabControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.transfersTabControl.Location = new System.Drawing.Point(0, 0); + this.transfersTabControl.Name = "transfersTabControl"; + this.transfersTabControl.SelectedIndex = 0; + this.transfersTabControl.Size = new System.Drawing.Size(654, 479); + this.transfersTabControl.TabIndex = 0; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.tableLayoutPanel5); + this.tabPage1.Location = new System.Drawing.Point(4, 27); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Size = new System.Drawing.Size(646, 448); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "General"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tableLayoutPanel5 + // + this.tableLayoutPanel5.AutoSize = true; + this.tableLayoutPanel5.ColumnCount = 1; + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel5.Controls.Add(this.groupBox6, 0, 2); + this.tableLayoutPanel5.Controls.Add(this.groupBox5, 0, 1); + this.tableLayoutPanel5.Controls.Add(this.groupBox29, 0, 0); + this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel5.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel5.Name = "tableLayoutPanel5"; + this.tableLayoutPanel5.RowCount = 4; + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel5.Size = new System.Drawing.Size(646, 448); + this.tableLayoutPanel5.TabIndex = 7; + // + // groupBox6 + // + this.groupBox6.AutoSize = true; + this.groupBox6.Controls.Add(this.tableLayoutPanel8); + this.groupBox6.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox6.Location = new System.Drawing.Point(3, 293); + this.groupBox6.Name = "groupBox6"; + this.groupBox6.Size = new System.Drawing.Size(640, 115); + this.groupBox6.TabIndex = 6; + this.groupBox6.TabStop = false; + this.groupBox6.Text = "Uploads"; + // + // tableLayoutPanel8 + // + this.tableLayoutPanel8.AutoSize = true; + this.tableLayoutPanel8.ColumnCount = 2; + this.tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 150F)); + this.tableLayoutPanel8.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 570F)); + this.tableLayoutPanel8.Controls.Add(this.label12, 0, 1); + this.tableLayoutPanel8.Controls.Add(this.duplicateUploadOverwriteCheckbox, 1, 2); + this.tableLayoutPanel8.Controls.Add(this.duplicateUploadCombobox, 1, 1); + this.tableLayoutPanel8.Controls.Add(this.uploadTemporaryNameCheckBox, 0, 0); + this.tableLayoutPanel8.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel8.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel8.Name = "tableLayoutPanel8"; + this.tableLayoutPanel8.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel8.RowCount = 3; + this.tableLayoutPanel8.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel8.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel8.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel8.Size = new System.Drawing.Size(634, 93); + this.tableLayoutPanel8.TabIndex = 8; + // + // label12 + // + this.label12.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(76, 37); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(76, 15); + this.label12.TabIndex = 5; + this.label12.Text = "Existing Files:"; + this.label12.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // duplicateUploadOverwriteCheckbox + // + this.duplicateUploadOverwriteCheckbox.AutoSize = true; + this.duplicateUploadOverwriteCheckbox.Location = new System.Drawing.Point(158, 62); + this.duplicateUploadOverwriteCheckbox.Name = "duplicateUploadOverwriteCheckbox"; + this.duplicateUploadOverwriteCheckbox.Size = new System.Drawing.Size(200, 19); + this.duplicateUploadOverwriteCheckbox.TabIndex = 7; + this.duplicateUploadOverwriteCheckbox.Text = "Always overwrite when reloading"; + this.duplicateUploadOverwriteCheckbox.UseVisualStyleBackColor = true; + this.duplicateUploadOverwriteCheckbox.CheckedChanged += new System.EventHandler(this.duplicateUploadOverwriteCheckbox_CheckedChanged); + // + // duplicateUploadCombobox + // + this.duplicateUploadCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.duplicateUploadCombobox.FormattingEnabled = true; + this.duplicateUploadCombobox.Location = new System.Drawing.Point(158, 33); + this.duplicateUploadCombobox.Name = "duplicateUploadCombobox"; + this.duplicateUploadCombobox.Size = new System.Drawing.Size(286, 23); + this.duplicateUploadCombobox.TabIndex = 4; + this.duplicateUploadCombobox.SelectionChangeCommitted += new System.EventHandler(this.duplicateUploadCombobox_SelectionChangeCommitted); + // + // uploadTemporaryNameCheckBox + // + this.uploadTemporaryNameCheckBox.AutoSize = true; + this.tableLayoutPanel8.SetColumnSpan(this.uploadTemporaryNameCheckBox, 2); + this.uploadTemporaryNameCheckBox.Location = new System.Drawing.Point(8, 8); + this.uploadTemporaryNameCheckBox.Name = "uploadTemporaryNameCheckBox"; + this.uploadTemporaryNameCheckBox.Size = new System.Drawing.Size(197, 19); + this.uploadTemporaryNameCheckBox.TabIndex = 8; + this.uploadTemporaryNameCheckBox.Text = "Upload with temporary filename"; + this.uploadTemporaryNameCheckBox.UseVisualStyleBackColor = true; + this.uploadTemporaryNameCheckBox.CheckedChanged += new System.EventHandler(this.uploadTemporaryNameCheckBox_CheckedChanged); + // + // groupBox5 + // + this.groupBox5.AutoSize = true; + this.groupBox5.Controls.Add(this.tableLayoutPanel7); + this.groupBox5.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox5.Location = new System.Drawing.Point(3, 145); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(640, 142); + this.groupBox5.TabIndex = 5; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "Downloads"; + // + // tableLayoutPanel7 + // + this.tableLayoutPanel7.AutoSize = true; + this.tableLayoutPanel7.ColumnCount = 3; + this.tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 150F)); + this.tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel7.Controls.Add(this.openAfterDownloadCheckbox, 0, 0); + this.tableLayoutPanel7.Controls.Add(this.duplicateDownloadCombobox, 1, 2); + this.tableLayoutPanel7.Controls.Add(this.label11, 0, 2); + this.tableLayoutPanel7.Controls.Add(this.downloadFolderLabel, 1, 1); + this.tableLayoutPanel7.Controls.Add(this.label10, 0, 1); + this.tableLayoutPanel7.Controls.Add(this.duplicateDownloadOverwriteCheckbox, 1, 3); + this.tableLayoutPanel7.Controls.Add(this.showDownloadFolderDialogButton, 2, 1); + this.tableLayoutPanel7.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel7.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel7.Name = "tableLayoutPanel7"; + this.tableLayoutPanel7.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel7.RowCount = 4; + this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel7.Size = new System.Drawing.Size(634, 120); + this.tableLayoutPanel7.TabIndex = 10; + // + // openAfterDownloadCheckbox + // + this.openAfterDownloadCheckbox.AutoSize = true; + this.tableLayoutPanel7.SetColumnSpan(this.openAfterDownloadCheckbox, 3); + this.openAfterDownloadCheckbox.Location = new System.Drawing.Point(8, 8); + this.openAfterDownloadCheckbox.Name = "openAfterDownloadCheckbox"; + this.openAfterDownloadCheckbox.Size = new System.Drawing.Size(276, 19); + this.openAfterDownloadCheckbox.TabIndex = 0; + this.openAfterDownloadCheckbox.Text = "Open downloaded files with default application"; + this.openAfterDownloadCheckbox.UseVisualStyleBackColor = true; + this.openAfterDownloadCheckbox.CheckedChanged += new System.EventHandler(this.openAfterDownloadCheckbox_CheckedChanged); + // + // duplicateDownloadCombobox + // + this.duplicateDownloadCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.duplicateDownloadCombobox.FormattingEnabled = true; + this.duplicateDownloadCombobox.Location = new System.Drawing.Point(158, 64); + this.duplicateDownloadCombobox.Name = "duplicateDownloadCombobox"; + this.duplicateDownloadCombobox.Size = new System.Drawing.Size(286, 23); + this.duplicateDownloadCombobox.TabIndex = 4; + this.duplicateDownloadCombobox.SelectionChangeCommitted += new System.EventHandler(this.duplicateDownloadCombobox_SelectionChangeCommitted); + // + // label11 + // + this.label11.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(76, 68); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(76, 15); + this.label11.TabIndex = 5; + this.label11.Text = "Existing Files:"; + this.label11.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // downloadFolderLabel + // + this.downloadFolderLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.downloadFolderLabel.AutoSize = true; + this.downloadFolderLabel.Location = new System.Drawing.Point(158, 38); + this.downloadFolderLabel.Name = "downloadFolderLabel"; + this.downloadFolderLabel.Size = new System.Drawing.Size(76, 15); + this.downloadFolderLabel.TabIndex = 9; + this.downloadFolderLabel.Text = "ellipsisLabel1"; + // + // label10 + // + this.label10.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(52, 38); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(100, 15); + this.label10.TabIndex = 3; + this.label10.Text = "Download Folder:"; + this.label10.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // duplicateDownloadOverwriteCheckbox + // + this.duplicateDownloadOverwriteCheckbox.AutoSize = true; + this.duplicateDownloadOverwriteCheckbox.Location = new System.Drawing.Point(158, 93); + this.duplicateDownloadOverwriteCheckbox.Name = "duplicateDownloadOverwriteCheckbox"; + this.duplicateDownloadOverwriteCheckbox.Size = new System.Drawing.Size(200, 19); + this.duplicateDownloadOverwriteCheckbox.TabIndex = 6; + this.duplicateDownloadOverwriteCheckbox.Text = "Always overwrite when reloading"; + this.duplicateDownloadOverwriteCheckbox.UseVisualStyleBackColor = true; + this.duplicateDownloadOverwriteCheckbox.CheckedChanged += new System.EventHandler(this.duplicateDownloadOverwriteCheckbox_CheckedChanged); + // + // showDownloadFolderDialogButton + // + this.showDownloadFolderDialogButton.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.showDownloadFolderDialogButton.AutoSize = true; + this.showDownloadFolderDialogButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.showDownloadFolderDialogButton.Location = new System.Drawing.Point(560, 33); + this.showDownloadFolderDialogButton.Name = "showDownloadFolderDialogButton"; + this.showDownloadFolderDialogButton.Size = new System.Drawing.Size(66, 25); + this.showDownloadFolderDialogButton.TabIndex = 8; + this.showDownloadFolderDialogButton.Text = "Choose…"; + this.showDownloadFolderDialogButton.UseVisualStyleBackColor = true; + this.showDownloadFolderDialogButton.Click += new System.EventHandler(this.showDownloadFolderDialogButton_Click); + // + // groupBox29 + // + this.groupBox29.AutoSize = true; + this.groupBox29.Controls.Add(this.tableLayoutPanel6); + this.groupBox29.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox29.Location = new System.Drawing.Point(3, 3); + this.groupBox29.Name = "groupBox29"; + this.groupBox29.Size = new System.Drawing.Size(640, 136); + this.groupBox29.TabIndex = 7; + this.groupBox29.TabStop = false; + this.groupBox29.Text = "Transfers"; + // + // tableLayoutPanel6 + // + this.tableLayoutPanel6.AutoSize = true; + this.tableLayoutPanel6.ColumnCount = 2; + this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 150F)); + this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 570F)); + this.tableLayoutPanel6.Controls.Add(this.transfersToFrontCheckbox, 0, 1); + this.tableLayoutPanel6.Controls.Add(this.removeFromTransfersCheckbox, 0, 3); + this.tableLayoutPanel6.Controls.Add(this.transferFilesCombobox, 1, 0); + this.tableLayoutPanel6.Controls.Add(this.transfersToBackCheckbox, 0, 2); + this.tableLayoutPanel6.Controls.Add(this.label1, 0, 0); + this.tableLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel6.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel6.Name = "tableLayoutPanel6"; + this.tableLayoutPanel6.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel6.RowCount = 4; + this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel6.Size = new System.Drawing.Size(634, 114); + this.tableLayoutPanel6.TabIndex = 0; + // + // transfersToFrontCheckbox + // + this.transfersToFrontCheckbox.AutoSize = true; + this.tableLayoutPanel6.SetColumnSpan(this.transfersToFrontCheckbox, 2); + this.transfersToFrontCheckbox.Location = new System.Drawing.Point(8, 37); + this.transfersToFrontCheckbox.Name = "transfersToFrontCheckbox"; + this.transfersToFrontCheckbox.Size = new System.Drawing.Size(248, 19); + this.transfersToFrontCheckbox.TabIndex = 2; + this.transfersToFrontCheckbox.Text = "Bring window to front when transfer starts"; + this.transfersToFrontCheckbox.UseVisualStyleBackColor = true; + this.transfersToFrontCheckbox.CheckedChanged += new System.EventHandler(this.transfersToFrontCheckbox_CheckedChanged); + // + // removeFromTransfersCheckbox + // + this.removeFromTransfersCheckbox.AutoSize = true; + this.tableLayoutPanel6.SetColumnSpan(this.removeFromTransfersCheckbox, 2); + this.removeFromTransfersCheckbox.Location = new System.Drawing.Point(8, 87); + this.removeFromTransfersCheckbox.Name = "removeFromTransfersCheckbox"; + this.removeFromTransfersCheckbox.Size = new System.Drawing.Size(202, 19); + this.removeFromTransfersCheckbox.TabIndex = 4; + this.removeFromTransfersCheckbox.Text = "Remove when transfer completes"; + this.removeFromTransfersCheckbox.UseVisualStyleBackColor = true; + this.removeFromTransfersCheckbox.CheckedChanged += new System.EventHandler(this.removeFromTransfersCheckbox_CheckedChanged); + // + // transferFilesCombobox + // + this.transferFilesCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.transferFilesCombobox.FormattingEnabled = true; + this.transferFilesCombobox.Location = new System.Drawing.Point(158, 8); + this.transferFilesCombobox.Name = "transferFilesCombobox"; + this.transferFilesCombobox.Size = new System.Drawing.Size(286, 23); + this.transferFilesCombobox.TabIndex = 0; + this.transferFilesCombobox.SelectionChangeCommitted += new System.EventHandler(this.transferFilesCombobox_SelectionChangeCommitted); + // + // transfersToBackCheckbox + // + this.transfersToBackCheckbox.AutoSize = true; + this.tableLayoutPanel6.SetColumnSpan(this.transfersToBackCheckbox, 2); + this.transfersToBackCheckbox.Location = new System.Drawing.Point(8, 62); + this.transfersToBackCheckbox.Name = "transfersToBackCheckbox"; + this.transfersToBackCheckbox.Size = new System.Drawing.Size(233, 19); + this.transfersToBackCheckbox.TabIndex = 3; + this.transfersToBackCheckbox.Text = "Close window when transfer completes"; + this.transfersToBackCheckbox.UseVisualStyleBackColor = true; + this.transfersToBackCheckbox.CheckedChanged += new System.EventHandler(this.transfersToBackCheckbox_CheckedChanged); + // + // label1 + // + this.label1.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(73, 12); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(79, 15); + this.label1.TabIndex = 5; + this.label1.Text = "Transfer Files:"; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.tableLayoutPanel9); + this.tabPage2.Location = new System.Drawing.Point(4, 27); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Size = new System.Drawing.Size(646, 448); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "Permissions"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // tableLayoutPanel9 + // + this.tableLayoutPanel9.AutoSize = true; + this.tableLayoutPanel9.ColumnCount = 1; + this.tableLayoutPanel9.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel9.Controls.Add(this.groupBox7, 0, 0); + this.tableLayoutPanel9.Controls.Add(this.groupBox8, 0, 1); + this.tableLayoutPanel9.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel9.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel9.Name = "tableLayoutPanel9"; + this.tableLayoutPanel9.RowCount = 3; + this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel9.Size = new System.Drawing.Size(646, 448); + this.tableLayoutPanel9.TabIndex = 2; + // + // groupBox7 + // + this.groupBox7.AutoSize = true; + this.groupBox7.Controls.Add(this.tableLayoutPanel10); + this.groupBox7.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox7.Enabled = false; + this.groupBox7.Location = new System.Drawing.Point(3, 3); + this.groupBox7.Name = "groupBox7"; + this.groupBox7.Size = new System.Drawing.Size(640, 181); + this.groupBox7.TabIndex = 0; + this.groupBox7.TabStop = false; + this.groupBox7.Text = "Downloads"; + this.groupBox7.Visible = false; + // + // tableLayoutPanel10 + // + this.tableLayoutPanel10.AutoSize = true; + this.tableLayoutPanel10.ColumnCount = 2; + this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel10.Controls.Add(this.chmodDownloadCheckbox, 0, 0); + this.tableLayoutPanel10.Controls.Add(this.chmodDownloadCustomRadioButton, 0, 1); + this.tableLayoutPanel10.Controls.Add(this.chmodDownloadDefaultRadioButton, 0, 2); + this.tableLayoutPanel10.Controls.Add(this.chmodDownloadTypeCombobox, 1, 2); + this.tableLayoutPanel10.Controls.Add(this.tableLayoutPanel11, 0, 3); + this.tableLayoutPanel10.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel10.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel10.Name = "tableLayoutPanel10"; + this.tableLayoutPanel10.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel10.RowCount = 4; + this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel10.Size = new System.Drawing.Size(634, 159); + this.tableLayoutPanel10.TabIndex = 16; + this.tableLayoutPanel10.Visible = false; + // + // chmodDownloadCheckbox + // + this.chmodDownloadCheckbox.AutoSize = true; + this.tableLayoutPanel10.SetColumnSpan(this.chmodDownloadCheckbox, 2); + this.chmodDownloadCheckbox.Location = new System.Drawing.Point(8, 8); + this.chmodDownloadCheckbox.Name = "chmodDownloadCheckbox"; + this.chmodDownloadCheckbox.Size = new System.Drawing.Size(133, 19); + this.chmodDownloadCheckbox.TabIndex = 0; + this.chmodDownloadCheckbox.Text = "Change permissions"; + this.chmodDownloadCheckbox.UseVisualStyleBackColor = true; + this.chmodDownloadCheckbox.CheckedChanged += new System.EventHandler(this.chmodDownloadCheckbox_CheckedChanged); + // + // chmodDownloadCustomRadioButton + // + this.chmodDownloadCustomRadioButton.AutoSize = true; + this.tableLayoutPanel10.SetColumnSpan(this.chmodDownloadCustomRadioButton, 2); + this.chmodDownloadCustomRadioButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.chmodDownloadCustomRadioButton.Location = new System.Drawing.Point(8, 33); + this.chmodDownloadCustomRadioButton.Name = "chmodDownloadCustomRadioButton"; + this.chmodDownloadCustomRadioButton.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0); + this.chmodDownloadCustomRadioButton.Size = new System.Drawing.Size(251, 17); + this.chmodDownloadCustomRadioButton.TabIndex = 1; + this.chmodDownloadCustomRadioButton.TabStop = true; + this.chmodDownloadCustomRadioButton.Text = "to the permissions of the remote file or folder"; + this.chmodDownloadCustomRadioButton.UseVisualStyleBackColor = true; + // + // chmodDownloadDefaultRadioButton + // + this.chmodDownloadDefaultRadioButton.AutoSize = true; + this.chmodDownloadDefaultRadioButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.chmodDownloadDefaultRadioButton.Location = new System.Drawing.Point(8, 56); + this.chmodDownloadDefaultRadioButton.Name = "chmodDownloadDefaultRadioButton"; + this.chmodDownloadDefaultRadioButton.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0); + this.chmodDownloadDefaultRadioButton.Size = new System.Drawing.Size(143, 17); + this.chmodDownloadDefaultRadioButton.TabIndex = 2; + this.chmodDownloadDefaultRadioButton.TabStop = true; + this.chmodDownloadDefaultRadioButton.Text = "to these permissions:"; + this.chmodDownloadDefaultRadioButton.UseVisualStyleBackColor = true; + this.chmodDownloadDefaultRadioButton.CheckedChanged += new System.EventHandler(this.chmodDownloadDefaultRadioButton_CheckedChanged); + // + // chmodDownloadTypeCombobox + // + this.chmodDownloadTypeCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.chmodDownloadTypeCombobox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.chmodDownloadTypeCombobox.FormattingEnabled = true; + this.chmodDownloadTypeCombobox.Location = new System.Drawing.Point(157, 56); + this.chmodDownloadTypeCombobox.MinimumSize = new System.Drawing.Size(150, 0); + this.chmodDownloadTypeCombobox.Name = "chmodDownloadTypeCombobox"; + this.chmodDownloadTypeCombobox.Size = new System.Drawing.Size(150, 20); + this.chmodDownloadTypeCombobox.TabIndex = 3; + this.chmodDownloadTypeCombobox.SelectionChangeCommitted += new System.EventHandler(this.chmodDownloadTypeCombobox_SelectionChangeCommitted); + // + // tableLayoutPanel11 + // + this.tableLayoutPanel11.AutoSize = true; + this.tableLayoutPanel11.ColumnCount = 6; + this.tableLayoutPanel10.SetColumnSpan(this.tableLayoutPanel11, 2); + this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 50F)); + this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel11.Controls.Add(this.ownerDownloadLabel, 1, 0); + this.tableLayoutPanel11.Controls.Add(this.dotherxCheckbox, 4, 2); + this.tableLayoutPanel11.Controls.Add(this.groupDownloadLabel, 1, 1); + this.tableLayoutPanel11.Controls.Add(this.dotherwCheckbox, 3, 2); + this.tableLayoutPanel11.Controls.Add(this.othersDownloadLabel, 1, 2); + this.tableLayoutPanel11.Controls.Add(this.dgroupxCheckbox, 4, 1); + this.tableLayoutPanel11.Controls.Add(this.dotherrCheckbox, 2, 2); + this.tableLayoutPanel11.Controls.Add(this.dgroupwCheckbox, 3, 1); + this.tableLayoutPanel11.Controls.Add(this.downerrCheckbox, 2, 0); + this.tableLayoutPanel11.Controls.Add(this.downerwCheckbox, 3, 0); + this.tableLayoutPanel11.Controls.Add(this.downerxCheckbox, 4, 0); + this.tableLayoutPanel11.Controls.Add(this.dgrouprCheckbox, 2, 1); + this.tableLayoutPanel11.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel11.Location = new System.Drawing.Point(8, 82); + this.tableLayoutPanel11.Name = "tableLayoutPanel11"; + this.tableLayoutPanel11.RowCount = 3; + this.tableLayoutPanel11.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel11.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel11.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel11.Size = new System.Drawing.Size(618, 69); + this.tableLayoutPanel11.TabIndex = 4; + // + // ownerDownloadLabel + // + this.ownerDownloadLabel.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.ownerDownloadLabel.AutoSize = true; + this.ownerDownloadLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ownerDownloadLabel.Location = new System.Drawing.Point(54, 5); + this.ownerDownloadLabel.Name = "ownerDownloadLabel"; + this.ownerDownloadLabel.Size = new System.Drawing.Size(43, 13); + this.ownerDownloadLabel.TabIndex = 4; + this.ownerDownloadLabel.Text = "Owner"; + this.ownerDownloadLabel.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // dotherxCheckbox + // + this.dotherxCheckbox.AutoSize = true; + this.dotherxCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.dotherxCheckbox.Location = new System.Drawing.Point(215, 49); + this.dotherxCheckbox.Name = "dotherxCheckbox"; + this.dotherxCheckbox.Size = new System.Drawing.Size(64, 17); + this.dotherxCheckbox.TabIndex = 15; + this.dotherxCheckbox.Text = "Execute"; + this.dotherxCheckbox.UseVisualStyleBackColor = true; + this.dotherxCheckbox.CheckedChanged += new System.EventHandler(this.dotherxCheckbox_CheckedChanged); + // + // groupDownloadLabel + // + this.groupDownloadLabel.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.groupDownloadLabel.AutoSize = true; + this.groupDownloadLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.groupDownloadLabel.Location = new System.Drawing.Point(56, 28); + this.groupDownloadLabel.Name = "groupDownloadLabel"; + this.groupDownloadLabel.Size = new System.Drawing.Size(41, 13); + this.groupDownloadLabel.TabIndex = 8; + this.groupDownloadLabel.Text = "Group"; + this.groupDownloadLabel.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // dotherwCheckbox + // + this.dotherwCheckbox.AutoSize = true; + this.dotherwCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.dotherwCheckbox.Location = new System.Drawing.Point(160, 49); + this.dotherwCheckbox.Name = "dotherwCheckbox"; + this.dotherwCheckbox.Size = new System.Drawing.Size(49, 17); + this.dotherwCheckbox.TabIndex = 14; + this.dotherwCheckbox.Text = "Write"; + this.dotherwCheckbox.UseVisualStyleBackColor = true; + this.dotherwCheckbox.CheckedChanged += new System.EventHandler(this.dotherwCheckbox_CheckedChanged); + // + // othersDownloadLabel + // + this.othersDownloadLabel.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.othersDownloadLabel.AutoSize = true; + this.othersDownloadLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.othersDownloadLabel.Location = new System.Drawing.Point(53, 51); + this.othersDownloadLabel.Name = "othersDownloadLabel"; + this.othersDownloadLabel.Size = new System.Drawing.Size(44, 13); + this.othersDownloadLabel.TabIndex = 12; + this.othersDownloadLabel.Text = "Others"; + this.othersDownloadLabel.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // dgroupxCheckbox + // + this.dgroupxCheckbox.AutoSize = true; + this.dgroupxCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.dgroupxCheckbox.Location = new System.Drawing.Point(215, 26); + this.dgroupxCheckbox.Name = "dgroupxCheckbox"; + this.dgroupxCheckbox.Size = new System.Drawing.Size(64, 17); + this.dgroupxCheckbox.TabIndex = 11; + this.dgroupxCheckbox.Text = "Execute"; + this.dgroupxCheckbox.UseVisualStyleBackColor = true; + this.dgroupxCheckbox.CheckedChanged += new System.EventHandler(this.dgroupxCheckbox_CheckedChanged); + // + // dotherrCheckbox + // + this.dotherrCheckbox.AutoSize = true; + this.dotherrCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.dotherrCheckbox.Location = new System.Drawing.Point(103, 49); + this.dotherrCheckbox.Name = "dotherrCheckbox"; + this.dotherrCheckbox.Size = new System.Drawing.Size(51, 17); + this.dotherrCheckbox.TabIndex = 13; + this.dotherrCheckbox.Text = "Read"; + this.dotherrCheckbox.UseVisualStyleBackColor = true; + this.dotherrCheckbox.CheckedChanged += new System.EventHandler(this.dotherrCheckbox_CheckedChanged); + // + // dgroupwCheckbox + // + this.dgroupwCheckbox.AutoSize = true; + this.dgroupwCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.dgroupwCheckbox.Location = new System.Drawing.Point(160, 26); + this.dgroupwCheckbox.Name = "dgroupwCheckbox"; + this.dgroupwCheckbox.Size = new System.Drawing.Size(49, 17); + this.dgroupwCheckbox.TabIndex = 10; + this.dgroupwCheckbox.Text = "Write"; + this.dgroupwCheckbox.UseVisualStyleBackColor = true; + this.dgroupwCheckbox.CheckedChanged += new System.EventHandler(this.dgroupwCheckbox_CheckedChanged); + // + // downerrCheckbox + // + this.downerrCheckbox.AutoSize = true; + this.downerrCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.downerrCheckbox.Location = new System.Drawing.Point(103, 3); + this.downerrCheckbox.Name = "downerrCheckbox"; + this.downerrCheckbox.Size = new System.Drawing.Size(51, 17); + this.downerrCheckbox.TabIndex = 5; + this.downerrCheckbox.Text = "Read"; + this.downerrCheckbox.UseVisualStyleBackColor = true; + this.downerrCheckbox.CheckedChanged += new System.EventHandler(this.downerrCheckbox_CheckedChanged); + // + // downerwCheckbox + // + this.downerwCheckbox.AutoSize = true; + this.downerwCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.downerwCheckbox.Location = new System.Drawing.Point(160, 3); + this.downerwCheckbox.Name = "downerwCheckbox"; + this.downerwCheckbox.Size = new System.Drawing.Size(49, 17); + this.downerwCheckbox.TabIndex = 6; + this.downerwCheckbox.Text = "Write"; + this.downerwCheckbox.UseVisualStyleBackColor = true; + this.downerwCheckbox.CheckedChanged += new System.EventHandler(this.downerwCheckbox_CheckedChanged); + // + // downerxCheckbox + // + this.downerxCheckbox.AutoSize = true; + this.downerxCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.downerxCheckbox.Location = new System.Drawing.Point(215, 3); + this.downerxCheckbox.Name = "downerxCheckbox"; + this.downerxCheckbox.Size = new System.Drawing.Size(64, 17); + this.downerxCheckbox.TabIndex = 7; + this.downerxCheckbox.Text = "Execute"; + this.downerxCheckbox.UseVisualStyleBackColor = true; + this.downerxCheckbox.CheckedChanged += new System.EventHandler(this.downerxCheckbox_CheckedChanged); + // + // dgrouprCheckbox + // + this.dgrouprCheckbox.AutoSize = true; + this.dgrouprCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.dgrouprCheckbox.Location = new System.Drawing.Point(103, 26); + this.dgrouprCheckbox.Name = "dgrouprCheckbox"; + this.dgrouprCheckbox.Size = new System.Drawing.Size(51, 17); + this.dgrouprCheckbox.TabIndex = 9; + this.dgrouprCheckbox.Text = "Read"; + this.dgrouprCheckbox.UseVisualStyleBackColor = true; + this.dgrouprCheckbox.CheckedChanged += new System.EventHandler(this.dgrouprCheckbox_CheckedChanged); + // + // groupBox8 + // + this.groupBox8.AutoSize = true; + this.groupBox8.Controls.Add(this.tableLayoutPanel12); + this.groupBox8.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox8.Location = new System.Drawing.Point(3, 190); + this.groupBox8.Name = "groupBox8"; + this.groupBox8.Size = new System.Drawing.Size(640, 181); + this.groupBox8.TabIndex = 1; + this.groupBox8.TabStop = false; + this.groupBox8.Text = "Uploads"; + // + // tableLayoutPanel12 + // + this.tableLayoutPanel12.AutoSize = true; + this.tableLayoutPanel12.ColumnCount = 2; + this.tableLayoutPanel12.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel12.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel12.Controls.Add(this.chmodUploadCheckbox, 0, 0); + this.tableLayoutPanel12.Controls.Add(this.chmodUploadCustomRadioButton, 0, 1); + this.tableLayoutPanel12.Controls.Add(this.chmodUploadDefaultRadioButton, 0, 2); + this.tableLayoutPanel12.Controls.Add(this.chmodUploadTypeCombobox, 1, 2); + this.tableLayoutPanel12.Controls.Add(this.tableLayoutPanel13, 0, 3); + this.tableLayoutPanel12.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel12.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel12.Name = "tableLayoutPanel12"; + this.tableLayoutPanel12.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel12.RowCount = 4; + this.tableLayoutPanel12.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel12.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel12.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel12.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel12.Size = new System.Drawing.Size(634, 159); + this.tableLayoutPanel12.TabIndex = 16; + // + // chmodUploadCheckbox + // + this.chmodUploadCheckbox.AutoSize = true; + this.tableLayoutPanel12.SetColumnSpan(this.chmodUploadCheckbox, 2); + this.chmodUploadCheckbox.Location = new System.Drawing.Point(8, 8); + this.chmodUploadCheckbox.Name = "chmodUploadCheckbox"; + this.chmodUploadCheckbox.Size = new System.Drawing.Size(133, 19); + this.chmodUploadCheckbox.TabIndex = 0; + this.chmodUploadCheckbox.Text = "Change permissions"; + this.chmodUploadCheckbox.UseVisualStyleBackColor = true; + this.chmodUploadCheckbox.CheckedChanged += new System.EventHandler(this.chmodUploadCheckbox_CheckedChanged); + // + // chmodUploadCustomRadioButton + // + this.chmodUploadCustomRadioButton.AutoSize = true; + this.tableLayoutPanel12.SetColumnSpan(this.chmodUploadCustomRadioButton, 2); + this.chmodUploadCustomRadioButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.chmodUploadCustomRadioButton.Location = new System.Drawing.Point(8, 33); + this.chmodUploadCustomRadioButton.Name = "chmodUploadCustomRadioButton"; + this.chmodUploadCustomRadioButton.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0); + this.chmodUploadCustomRadioButton.Size = new System.Drawing.Size(240, 17); + this.chmodUploadCustomRadioButton.TabIndex = 1; + this.chmodUploadCustomRadioButton.TabStop = true; + this.chmodUploadCustomRadioButton.Text = "to the permissions of the local file or folder"; + this.chmodUploadCustomRadioButton.UseVisualStyleBackColor = true; + this.chmodUploadCustomRadioButton.Visible = false; + // + // chmodUploadDefaultRadioButton + // + this.chmodUploadDefaultRadioButton.AutoSize = true; + this.chmodUploadDefaultRadioButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.chmodUploadDefaultRadioButton.Location = new System.Drawing.Point(8, 56); + this.chmodUploadDefaultRadioButton.Name = "chmodUploadDefaultRadioButton"; + this.chmodUploadDefaultRadioButton.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0); + this.chmodUploadDefaultRadioButton.Size = new System.Drawing.Size(143, 17); + this.chmodUploadDefaultRadioButton.TabIndex = 2; + this.chmodUploadDefaultRadioButton.TabStop = true; + this.chmodUploadDefaultRadioButton.Text = "to these permissions:"; + this.chmodUploadDefaultRadioButton.UseVisualStyleBackColor = true; + this.chmodUploadDefaultRadioButton.CheckedChanged += new System.EventHandler(this.chmodUploadDefaultRadioButton_CheckedChanged); + // + // chmodUploadTypeCombobox + // + this.chmodUploadTypeCombobox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.chmodUploadTypeCombobox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.chmodUploadTypeCombobox.FormattingEnabled = true; + this.chmodUploadTypeCombobox.Location = new System.Drawing.Point(157, 56); + this.chmodUploadTypeCombobox.Name = "chmodUploadTypeCombobox"; + this.chmodUploadTypeCombobox.Size = new System.Drawing.Size(150, 20); + this.chmodUploadTypeCombobox.TabIndex = 3; + this.chmodUploadTypeCombobox.SelectionChangeCommitted += new System.EventHandler(this.chmodUploadTypeCombobox_SelectionChangeCommitted); + // + // tableLayoutPanel13 + // + this.tableLayoutPanel13.AutoSize = true; + this.tableLayoutPanel13.ColumnCount = 6; + this.tableLayoutPanel12.SetColumnSpan(this.tableLayoutPanel13, 2); + this.tableLayoutPanel13.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 50F)); + this.tableLayoutPanel13.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel13.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel13.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel13.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel13.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel13.Controls.Add(this.ownerUploadLabel, 1, 0); + this.tableLayoutPanel13.Controls.Add(this.uotherxCheckbox, 4, 2); + this.tableLayoutPanel13.Controls.Add(this.uownerrCheckbox, 2, 0); + this.tableLayoutPanel13.Controls.Add(this.uotherwCheckbox, 3, 2); + this.tableLayoutPanel13.Controls.Add(this.uownerwCheckbox, 3, 0); + this.tableLayoutPanel13.Controls.Add(this.uotherrCheckbox, 2, 2); + this.tableLayoutPanel13.Controls.Add(this.uownerxCheckbox, 4, 0); + this.tableLayoutPanel13.Controls.Add(this.othersUploadLabel, 1, 2); + this.tableLayoutPanel13.Controls.Add(this.groupUploadLabel, 1, 1); + this.tableLayoutPanel13.Controls.Add(this.ugroupxCheckbox, 4, 1); + this.tableLayoutPanel13.Controls.Add(this.ugrouprCheckbox, 2, 1); + this.tableLayoutPanel13.Controls.Add(this.ugroupwCheckbox, 3, 1); + this.tableLayoutPanel13.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel13.Location = new System.Drawing.Point(8, 82); + this.tableLayoutPanel13.Name = "tableLayoutPanel13"; + this.tableLayoutPanel13.RowCount = 3; + this.tableLayoutPanel13.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel13.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel13.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel13.Size = new System.Drawing.Size(618, 69); + this.tableLayoutPanel13.TabIndex = 4; + // + // ownerUploadLabel + // + this.ownerUploadLabel.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.ownerUploadLabel.AutoSize = true; + this.ownerUploadLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ownerUploadLabel.Location = new System.Drawing.Point(54, 5); + this.ownerUploadLabel.Name = "ownerUploadLabel"; + this.ownerUploadLabel.Size = new System.Drawing.Size(43, 13); + this.ownerUploadLabel.TabIndex = 4; + this.ownerUploadLabel.Text = "Owner"; + this.ownerUploadLabel.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // uotherxCheckbox + // + this.uotherxCheckbox.AutoSize = true; + this.uotherxCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.uotherxCheckbox.Location = new System.Drawing.Point(215, 49); + this.uotherxCheckbox.Name = "uotherxCheckbox"; + this.uotherxCheckbox.Size = new System.Drawing.Size(64, 17); + this.uotherxCheckbox.TabIndex = 15; + this.uotherxCheckbox.Text = "Execute"; + this.uotherxCheckbox.UseVisualStyleBackColor = true; + this.uotherxCheckbox.CheckedChanged += new System.EventHandler(this.uotherxCheckbox_CheckedChanged); + // + // uownerrCheckbox + // + this.uownerrCheckbox.AutoSize = true; + this.uownerrCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.uownerrCheckbox.Location = new System.Drawing.Point(103, 3); + this.uownerrCheckbox.Name = "uownerrCheckbox"; + this.uownerrCheckbox.Size = new System.Drawing.Size(51, 17); + this.uownerrCheckbox.TabIndex = 5; + this.uownerrCheckbox.Text = "Read"; + this.uownerrCheckbox.UseVisualStyleBackColor = true; + this.uownerrCheckbox.CheckedChanged += new System.EventHandler(this.uownerrCheckbox_CheckedChanged); + // + // uotherwCheckbox + // + this.uotherwCheckbox.AutoSize = true; + this.uotherwCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.uotherwCheckbox.Location = new System.Drawing.Point(160, 49); + this.uotherwCheckbox.Name = "uotherwCheckbox"; + this.uotherwCheckbox.Size = new System.Drawing.Size(49, 17); + this.uotherwCheckbox.TabIndex = 14; + this.uotherwCheckbox.Text = "Write"; + this.uotherwCheckbox.UseVisualStyleBackColor = true; + this.uotherwCheckbox.CheckedChanged += new System.EventHandler(this.uotherwCheckbox_CheckedChanged); + // + // uownerwCheckbox + // + this.uownerwCheckbox.AutoSize = true; + this.uownerwCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.uownerwCheckbox.Location = new System.Drawing.Point(160, 3); + this.uownerwCheckbox.Name = "uownerwCheckbox"; + this.uownerwCheckbox.Size = new System.Drawing.Size(49, 17); + this.uownerwCheckbox.TabIndex = 6; + this.uownerwCheckbox.Text = "Write"; + this.uownerwCheckbox.UseVisualStyleBackColor = true; + this.uownerwCheckbox.CheckedChanged += new System.EventHandler(this.uownerwCheckbox_CheckedChanged); + // + // uotherrCheckbox + // + this.uotherrCheckbox.AutoSize = true; + this.uotherrCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.uotherrCheckbox.Location = new System.Drawing.Point(103, 49); + this.uotherrCheckbox.Name = "uotherrCheckbox"; + this.uotherrCheckbox.Size = new System.Drawing.Size(51, 17); + this.uotherrCheckbox.TabIndex = 13; + this.uotherrCheckbox.Text = "Read"; + this.uotherrCheckbox.UseVisualStyleBackColor = true; + this.uotherrCheckbox.CheckedChanged += new System.EventHandler(this.uotherrCheckbox_CheckedChanged); + // + // uownerxCheckbox + // + this.uownerxCheckbox.AutoSize = true; + this.uownerxCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.uownerxCheckbox.Location = new System.Drawing.Point(215, 3); + this.uownerxCheckbox.Name = "uownerxCheckbox"; + this.uownerxCheckbox.Size = new System.Drawing.Size(64, 17); + this.uownerxCheckbox.TabIndex = 7; + this.uownerxCheckbox.Text = "Execute"; + this.uownerxCheckbox.UseVisualStyleBackColor = true; + this.uownerxCheckbox.CheckedChanged += new System.EventHandler(this.uownerxCheckbox_CheckedChanged); + // + // othersUploadLabel + // + this.othersUploadLabel.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.othersUploadLabel.AutoSize = true; + this.othersUploadLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.othersUploadLabel.Location = new System.Drawing.Point(53, 51); + this.othersUploadLabel.Name = "othersUploadLabel"; + this.othersUploadLabel.Size = new System.Drawing.Size(44, 13); + this.othersUploadLabel.TabIndex = 12; + this.othersUploadLabel.Text = "Others"; + this.othersUploadLabel.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // groupUploadLabel + // + this.groupUploadLabel.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.groupUploadLabel.AutoSize = true; + this.groupUploadLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.groupUploadLabel.Location = new System.Drawing.Point(56, 28); + this.groupUploadLabel.Name = "groupUploadLabel"; + this.groupUploadLabel.Size = new System.Drawing.Size(41, 13); + this.groupUploadLabel.TabIndex = 8; + this.groupUploadLabel.Text = "Group"; + this.groupUploadLabel.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // ugroupxCheckbox + // + this.ugroupxCheckbox.AutoSize = true; + this.ugroupxCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ugroupxCheckbox.Location = new System.Drawing.Point(215, 26); + this.ugroupxCheckbox.Name = "ugroupxCheckbox"; + this.ugroupxCheckbox.Size = new System.Drawing.Size(64, 17); + this.ugroupxCheckbox.TabIndex = 11; + this.ugroupxCheckbox.Text = "Execute"; + this.ugroupxCheckbox.UseVisualStyleBackColor = true; + this.ugroupxCheckbox.CheckedChanged += new System.EventHandler(this.ugroupxCheckbox_CheckedChanged); + // + // ugrouprCheckbox + // + this.ugrouprCheckbox.AutoSize = true; + this.ugrouprCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ugrouprCheckbox.Location = new System.Drawing.Point(103, 26); + this.ugrouprCheckbox.Name = "ugrouprCheckbox"; + this.ugrouprCheckbox.Size = new System.Drawing.Size(51, 17); + this.ugrouprCheckbox.TabIndex = 9; + this.ugrouprCheckbox.Text = "Read"; + this.ugrouprCheckbox.UseVisualStyleBackColor = true; + this.ugrouprCheckbox.CheckedChanged += new System.EventHandler(this.ugrouprCheckbox_CheckedChanged); + // + // ugroupwCheckbox + // + this.ugroupwCheckbox.AutoSize = true; + this.ugroupwCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ugroupwCheckbox.Location = new System.Drawing.Point(160, 26); + this.ugroupwCheckbox.Name = "ugroupwCheckbox"; + this.ugroupwCheckbox.Size = new System.Drawing.Size(49, 17); + this.ugroupwCheckbox.TabIndex = 10; + this.ugroupwCheckbox.Text = "Write"; + this.ugroupwCheckbox.UseVisualStyleBackColor = true; + this.ugroupwCheckbox.CheckedChanged += new System.EventHandler(this.ugroupwCheckbox_CheckedChanged); + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.tableLayoutPanel14); + this.tabPage3.Location = new System.Drawing.Point(4, 27); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(646, 448); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "Timestamps"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // tableLayoutPanel14 + // + this.tableLayoutPanel14.AutoSize = true; + this.tableLayoutPanel14.ColumnCount = 1; + this.tableLayoutPanel14.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel14.Controls.Add(this.groupBox9, 0, 0); + this.tableLayoutPanel14.Controls.Add(this.groupBox10, 0, 1); + this.tableLayoutPanel14.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel14.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel14.Name = "tableLayoutPanel14"; + this.tableLayoutPanel14.RowCount = 3; + this.tableLayoutPanel14.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel14.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel14.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel14.Size = new System.Drawing.Size(646, 448); + this.tableLayoutPanel14.TabIndex = 2; + // + // groupBox9 + // + this.groupBox9.AutoSize = true; + this.groupBox9.Controls.Add(this.tableLayoutPanel15); + this.groupBox9.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox9.Location = new System.Drawing.Point(3, 3); + this.groupBox9.Name = "groupBox9"; + this.groupBox9.Size = new System.Drawing.Size(640, 57); + this.groupBox9.TabIndex = 0; + this.groupBox9.TabStop = false; + this.groupBox9.Text = "Downloads"; + // + // tableLayoutPanel15 + // + this.tableLayoutPanel15.AutoSize = true; + this.tableLayoutPanel15.ColumnCount = 1; + this.tableLayoutPanel15.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel15.Controls.Add(this.preserveModificationDownloadCheckbox, 0, 0); + this.tableLayoutPanel15.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel15.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel15.Name = "tableLayoutPanel15"; + this.tableLayoutPanel15.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel15.RowCount = 1; + this.tableLayoutPanel15.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel15.Size = new System.Drawing.Size(634, 35); + this.tableLayoutPanel15.TabIndex = 1; + // + // preserveModificationDownloadCheckbox + // + this.preserveModificationDownloadCheckbox.AutoSize = true; + this.preserveModificationDownloadCheckbox.Location = new System.Drawing.Point(8, 8); + this.preserveModificationDownloadCheckbox.Name = "preserveModificationDownloadCheckbox"; + this.preserveModificationDownloadCheckbox.Size = new System.Drawing.Size(167, 19); + this.preserveModificationDownloadCheckbox.TabIndex = 0; + this.preserveModificationDownloadCheckbox.Text = "Preserve modification date"; + this.preserveModificationDownloadCheckbox.UseVisualStyleBackColor = true; + this.preserveModificationDownloadCheckbox.CheckedChanged += new System.EventHandler(this.preserveModificationDownloadCheckbox_CheckedChanged); + // + // groupBox10 + // + this.groupBox10.AutoSize = true; + this.groupBox10.Controls.Add(this.tableLayoutPanel16); + this.groupBox10.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox10.Location = new System.Drawing.Point(3, 66); + this.groupBox10.Name = "groupBox10"; + this.groupBox10.Size = new System.Drawing.Size(640, 57); + this.groupBox10.TabIndex = 1; + this.groupBox10.TabStop = false; + this.groupBox10.Text = "Uploads"; + // + // tableLayoutPanel16 + // + this.tableLayoutPanel16.AutoSize = true; + this.tableLayoutPanel16.ColumnCount = 1; + this.tableLayoutPanel16.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel16.Controls.Add(this.preserveModificationUploadCheckbox, 0, 0); + this.tableLayoutPanel16.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel16.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel16.Name = "tableLayoutPanel16"; + this.tableLayoutPanel16.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel16.RowCount = 1; + this.tableLayoutPanel16.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel16.Size = new System.Drawing.Size(634, 35); + this.tableLayoutPanel16.TabIndex = 1; + // + // preserveModificationUploadCheckbox + // + this.preserveModificationUploadCheckbox.AutoSize = true; + this.preserveModificationUploadCheckbox.Location = new System.Drawing.Point(8, 8); + this.preserveModificationUploadCheckbox.Name = "preserveModificationUploadCheckbox"; + this.preserveModificationUploadCheckbox.Size = new System.Drawing.Size(167, 19); + this.preserveModificationUploadCheckbox.TabIndex = 0; + this.preserveModificationUploadCheckbox.Text = "Preserve modification date"; + this.preserveModificationUploadCheckbox.UseVisualStyleBackColor = true; + this.preserveModificationUploadCheckbox.CheckedChanged += new System.EventHandler(this.preserveModificationUploadCheckbox_CheckedChanged); + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.tableLayoutPanel17); + this.tabPage4.Location = new System.Drawing.Point(4, 27); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Size = new System.Drawing.Size(646, 448); + this.tabPage4.TabIndex = 3; + this.tabPage4.Text = "Filter"; + this.tabPage4.UseVisualStyleBackColor = true; + // + // tableLayoutPanel17 + // + this.tableLayoutPanel17.AutoSize = true; + this.tableLayoutPanel17.ColumnCount = 1; + this.tableLayoutPanel17.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel17.Controls.Add(this.groupBox11, 0, 0); + this.tableLayoutPanel17.Controls.Add(this.groupBox12, 0, 1); + this.tableLayoutPanel17.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel17.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel17.Name = "tableLayoutPanel17"; + this.tableLayoutPanel17.RowCount = 3; + this.tableLayoutPanel17.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel17.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel17.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel17.Size = new System.Drawing.Size(646, 448); + this.tableLayoutPanel17.TabIndex = 3; + // + // groupBox11 + // + this.groupBox11.AutoSize = true; + this.groupBox11.Controls.Add(this.tableLayoutPanel18); + this.groupBox11.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox11.Location = new System.Drawing.Point(3, 3); + this.groupBox11.Name = "groupBox11"; + this.groupBox11.Size = new System.Drawing.Size(640, 163); + this.groupBox11.TabIndex = 1; + this.groupBox11.TabStop = false; + this.groupBox11.Text = "Downloads"; + // + // tableLayoutPanel18 + // + this.tableLayoutPanel18.AutoSize = true; + this.tableLayoutPanel18.ColumnCount = 2; + this.tableLayoutPanel18.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel18.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel18.Controls.Add(this.downloadSkipCheckbox, 0, 0); + this.tableLayoutPanel18.Controls.Add(this.downloadSkipRegexRichTextbox, 0, 1); + this.tableLayoutPanel18.Controls.Add(this.downloadSkipRegexDefaultButton, 1, 0); + this.tableLayoutPanel18.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel18.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel18.Name = "tableLayoutPanel18"; + this.tableLayoutPanel18.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel18.RowCount = 2; + this.tableLayoutPanel18.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel18.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel18.Size = new System.Drawing.Size(634, 141); + this.tableLayoutPanel18.TabIndex = 3; + // + // downloadSkipCheckbox + // + this.downloadSkipCheckbox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.downloadSkipCheckbox.AutoSize = true; + this.downloadSkipCheckbox.Location = new System.Drawing.Point(8, 10); + this.downloadSkipCheckbox.Name = "downloadSkipCheckbox"; + this.downloadSkipCheckbox.Size = new System.Drawing.Size(247, 19); + this.downloadSkipCheckbox.TabIndex = 0; + this.downloadSkipCheckbox.Text = "Skip files matching the regular expression:"; + this.downloadSkipCheckbox.UseVisualStyleBackColor = true; + this.downloadSkipCheckbox.CheckedChanged += new System.EventHandler(this.downloadSkipCheckbox_CheckedChanged); + // + // downloadSkipRegexRichTextbox + // + this.tableLayoutPanel18.SetColumnSpan(this.downloadSkipRegexRichTextbox, 2); + this.downloadSkipRegexRichTextbox.Dock = System.Windows.Forms.DockStyle.Fill; + this.downloadSkipRegexRichTextbox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.downloadSkipRegexRichTextbox.Location = new System.Drawing.Point(8, 37); + this.downloadSkipRegexRichTextbox.Name = "downloadSkipRegexRichTextbox"; + this.downloadSkipRegexRichTextbox.Size = new System.Drawing.Size(618, 96); + this.downloadSkipRegexRichTextbox.TabIndex = 1; + this.downloadSkipRegexRichTextbox.Text = ""; + this.downloadSkipRegexRichTextbox.TextChanged += new System.EventHandler(this.downloadSkipRegexRichTextbox_TextChanged); + // + // downloadSkipRegexDefaultButton + // + this.downloadSkipRegexDefaultButton.AutoSize = true; + this.downloadSkipRegexDefaultButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.downloadSkipRegexDefaultButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.downloadSkipRegexDefaultButton.Location = new System.Drawing.Point(575, 8); + this.downloadSkipRegexDefaultButton.Name = "downloadSkipRegexDefaultButton"; + this.downloadSkipRegexDefaultButton.Size = new System.Drawing.Size(51, 23); + this.downloadSkipRegexDefaultButton.TabIndex = 2; + this.downloadSkipRegexDefaultButton.Text = "Default"; + this.downloadSkipRegexDefaultButton.UseVisualStyleBackColor = true; + this.downloadSkipRegexDefaultButton.Click += new System.EventHandler(this.downloadSkipRegexDefaultButton_Click); + // + // groupBox12 + // + this.groupBox12.AutoSize = true; + this.groupBox12.Controls.Add(this.tableLayoutPanel19); + this.groupBox12.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox12.Location = new System.Drawing.Point(3, 172); + this.groupBox12.Name = "groupBox12"; + this.groupBox12.Size = new System.Drawing.Size(640, 163); + this.groupBox12.TabIndex = 2; + this.groupBox12.TabStop = false; + this.groupBox12.Text = "Uploads"; + // + // tableLayoutPanel19 + // + this.tableLayoutPanel19.AutoSize = true; + this.tableLayoutPanel19.ColumnCount = 2; + this.tableLayoutPanel19.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel19.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel19.Controls.Add(this.uploadSkipCheckbox, 0, 0); + this.tableLayoutPanel19.Controls.Add(this.uploadSkipRegexRichTextbox, 0, 1); + this.tableLayoutPanel19.Controls.Add(this.uploadSkipRegexDefaultButton, 1, 0); + this.tableLayoutPanel19.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel19.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel19.Name = "tableLayoutPanel19"; + this.tableLayoutPanel19.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel19.RowCount = 2; + this.tableLayoutPanel19.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel19.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel19.Size = new System.Drawing.Size(634, 141); + this.tableLayoutPanel19.TabIndex = 3; + // + // uploadSkipCheckbox + // + this.uploadSkipCheckbox.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.uploadSkipCheckbox.AutoSize = true; + this.uploadSkipCheckbox.Location = new System.Drawing.Point(8, 10); + this.uploadSkipCheckbox.Name = "uploadSkipCheckbox"; + this.uploadSkipCheckbox.Size = new System.Drawing.Size(247, 19); + this.uploadSkipCheckbox.TabIndex = 0; + this.uploadSkipCheckbox.Text = "Skip files matching the regular expression:"; + this.uploadSkipCheckbox.UseVisualStyleBackColor = true; + this.uploadSkipCheckbox.CheckedChanged += new System.EventHandler(this.uploadSkipCheckbox_CheckedChanged); + // + // uploadSkipRegexRichTextbox + // + this.tableLayoutPanel19.SetColumnSpan(this.uploadSkipRegexRichTextbox, 2); + this.uploadSkipRegexRichTextbox.Dock = System.Windows.Forms.DockStyle.Fill; + this.uploadSkipRegexRichTextbox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.uploadSkipRegexRichTextbox.Location = new System.Drawing.Point(8, 37); + this.uploadSkipRegexRichTextbox.Name = "uploadSkipRegexRichTextbox"; + this.uploadSkipRegexRichTextbox.Size = new System.Drawing.Size(618, 96); + this.uploadSkipRegexRichTextbox.TabIndex = 1; + this.uploadSkipRegexRichTextbox.Text = ""; + this.uploadSkipRegexRichTextbox.TextChanged += new System.EventHandler(this.uploadSkipRegexRichTextbox_TextChanged); + // + // uploadSkipRegexDefaultButton + // + this.uploadSkipRegexDefaultButton.AutoSize = true; + this.uploadSkipRegexDefaultButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.uploadSkipRegexDefaultButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.uploadSkipRegexDefaultButton.Location = new System.Drawing.Point(575, 8); + this.uploadSkipRegexDefaultButton.Name = "uploadSkipRegexDefaultButton"; + this.uploadSkipRegexDefaultButton.Size = new System.Drawing.Size(51, 23); + this.uploadSkipRegexDefaultButton.TabIndex = 2; + this.uploadSkipRegexDefaultButton.Text = "Default"; + this.uploadSkipRegexDefaultButton.UseVisualStyleBackColor = true; + this.uploadSkipRegexDefaultButton.Click += new System.EventHandler(this.uploadSkipRegexDefaultButton_Click); + // + // managedBrowserPanel + // + this.managedBrowserPanel.Controls.Add(this.tableLayoutPanel21); + this.managedBrowserPanel.Location = new System.Drawing.Point(0, 0); + this.managedBrowserPanel.Name = "managedBrowserPanel"; + this.managedBrowserPanel.Size = new System.Drawing.Size(654, 479); + this.managedBrowserPanel.Text = "managedBrowserPanel"; + // + // tableLayoutPanel21 + // + this.tableLayoutPanel21.AutoSize = true; + this.tableLayoutPanel21.ColumnCount = 1; + this.tableLayoutPanel21.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel21.Controls.Add(this.groupBox13, 0, 1); + this.tableLayoutPanel21.Controls.Add(this.groupBox14, 0, 0); + this.tableLayoutPanel21.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel21.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel21.Name = "tableLayoutPanel21"; + this.tableLayoutPanel21.RowCount = 3; + this.tableLayoutPanel21.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel21.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel21.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel21.Size = new System.Drawing.Size(654, 479); + this.tableLayoutPanel21.TabIndex = 8; + // + // groupBox13 + // + this.groupBox13.AutoSize = true; + this.groupBox13.Controls.Add(this.tableLayoutPanel22); + this.groupBox13.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox13.Location = new System.Drawing.Point(3, 151); + this.groupBox13.Name = "groupBox13"; + this.groupBox13.Size = new System.Drawing.Size(648, 77); + this.groupBox13.TabIndex = 1; + this.groupBox13.TabStop = false; + this.groupBox13.Text = "Bookmarks"; + // + // tableLayoutPanel22 + // + this.tableLayoutPanel22.AutoSize = true; + this.tableLayoutPanel22.ColumnCount = 2; + this.tableLayoutPanel22.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 199F)); + this.tableLayoutPanel22.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel22.Controls.Add(this.label15, 0, 1); + this.tableLayoutPanel22.Controls.Add(this.bookmarkSizeComboBox, 0, 4); + this.tableLayoutPanel22.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel22.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel22.Name = "tableLayoutPanel22"; + this.tableLayoutPanel22.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel22.RowCount = 6; + this.tableLayoutPanel22.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel22.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel22.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel22.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel22.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel22.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel22.Size = new System.Drawing.Size(642, 55); + this.tableLayoutPanel22.TabIndex = 10; + // + // label15 + // + this.label15.AutoEllipsis = true; + this.label15.AutoSize = true; + this.tableLayoutPanel22.SetColumnSpan(this.label15, 2); + this.label15.ForeColor = System.Drawing.SystemColors.GrayText; + this.label15.Location = new System.Drawing.Point(8, 5); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(394, 15); + this.label15.TabIndex = 6; + this.label15.Text = "When using small icons, only the nickname of the bookmark is displayed."; + // + // bookmarkSizeComboBox + // + this.bookmarkSizeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.bookmarkSizeComboBox.FormattingEnabled = true; + this.bookmarkSizeComboBox.ItemHeight = 18; + this.bookmarkSizeComboBox.Location = new System.Drawing.Point(8, 23); + this.bookmarkSizeComboBox.Name = "bookmarkSizeComboBox"; + this.bookmarkSizeComboBox.Size = new System.Drawing.Size(193, 24); + this.bookmarkSizeComboBox.TabIndex = 6; + this.bookmarkSizeComboBox.SelectionChangeCommitted += new System.EventHandler(this.bookmarkSizeComboBox_SelectionChangeCommitted); + // + // groupBox14 + // + this.groupBox14.AutoSize = true; + this.groupBox14.Controls.Add(this.tableLayoutPanel23); + this.groupBox14.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox14.Location = new System.Drawing.Point(3, 3); + this.groupBox14.Name = "groupBox14"; + this.groupBox14.Size = new System.Drawing.Size(648, 142); + this.groupBox14.TabIndex = 0; + this.groupBox14.TabStop = false; + this.groupBox14.Text = "General"; + // + // tableLayoutPanel23 + // + this.tableLayoutPanel23.AutoSize = true; + this.tableLayoutPanel23.ColumnCount = 2; + this.tableLayoutPanel23.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 199F)); + this.tableLayoutPanel23.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 433F)); + this.tableLayoutPanel23.Controls.Add(this.infoWindowCheckbox, 0, 3); + this.tableLayoutPanel23.Controls.Add(this.showHiddenFilesCheckbox, 0, 0); + this.tableLayoutPanel23.Controls.Add(this.returnKeyCheckbox, 0, 2); + this.tableLayoutPanel23.Controls.Add(this.doubleClickEditorCheckbox, 0, 1); + this.tableLayoutPanel23.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel23.Location = new System.Drawing.Point(3, 19); + this.tableLayoutPanel23.Name = "tableLayoutPanel23"; + this.tableLayoutPanel23.Padding = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel23.RowCount = 4; + this.tableLayoutPanel23.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel23.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel23.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel23.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel23.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel23.Size = new System.Drawing.Size(642, 120); + this.tableLayoutPanel23.TabIndex = 6; + // + // infoWindowCheckbox + // + this.infoWindowCheckbox.AutoSize = true; + this.tableLayoutPanel23.SetColumnSpan(this.infoWindowCheckbox, 2); + this.infoWindowCheckbox.Location = new System.Drawing.Point(8, 93); + this.infoWindowCheckbox.Name = "infoWindowCheckbox"; + this.infoWindowCheckbox.Size = new System.Drawing.Size(257, 19); + this.infoWindowCheckbox.TabIndex = 3; + this.infoWindowCheckbox.Text = "Info window always shows current selection"; + this.infoWindowCheckbox.UseVisualStyleBackColor = true; + this.infoWindowCheckbox.CheckedChanged += new System.EventHandler(this.infoWindowCheckbox_CheckedChanged); + // + // showHiddenFilesCheckbox + // + this.showHiddenFilesCheckbox.AutoSize = true; + this.tableLayoutPanel23.SetColumnSpan(this.showHiddenFilesCheckbox, 2); + this.showHiddenFilesCheckbox.Location = new System.Drawing.Point(8, 8); + this.showHiddenFilesCheckbox.Name = "showHiddenFilesCheckbox"; + this.showHiddenFilesCheckbox.Padding = new System.Windows.Forms.Padding(0, 10, 0, 0); + this.showHiddenFilesCheckbox.Size = new System.Drawing.Size(119, 29); + this.showHiddenFilesCheckbox.TabIndex = 0; + this.showHiddenFilesCheckbox.Text = "Show hidden files"; + this.showHiddenFilesCheckbox.UseVisualStyleBackColor = true; + this.showHiddenFilesCheckbox.CheckedChanged += new System.EventHandler(this.showHiddenFilesCheckbox_CheckedChanged); + // + // returnKeyCheckbox + // + this.returnKeyCheckbox.AutoSize = true; + this.tableLayoutPanel23.SetColumnSpan(this.returnKeyCheckbox, 2); + this.returnKeyCheckbox.Location = new System.Drawing.Point(8, 68); + this.returnKeyCheckbox.Name = "returnKeyCheckbox"; + this.returnKeyCheckbox.Size = new System.Drawing.Size(244, 19); + this.returnKeyCheckbox.TabIndex = 2; + this.returnKeyCheckbox.Text = "Return key selects folder or file to rename"; + this.returnKeyCheckbox.UseVisualStyleBackColor = true; + this.returnKeyCheckbox.CheckedChanged += new System.EventHandler(this.returnKeyCheckbox_CheckedChanged); + // + // doubleClickEditorCheckbox + // + this.doubleClickEditorCheckbox.AutoSize = true; + this.tableLayoutPanel23.SetColumnSpan(this.doubleClickEditorCheckbox, 2); + this.doubleClickEditorCheckbox.Location = new System.Drawing.Point(8, 43); + this.doubleClickEditorCheckbox.Name = "doubleClickEditorCheckbox"; + this.doubleClickEditorCheckbox.Size = new System.Drawing.Size(236, 19); + this.doubleClickEditorCheckbox.TabIndex = 1; + this.doubleClickEditorCheckbox.Text = "Double click opens file in external editor"; + this.doubleClickEditorCheckbox.UseVisualStyleBackColor = true; + this.doubleClickEditorCheckbox.CheckedChanged += new System.EventHandler(this.doubleClickEditorCheckbox_CheckedChanged); + // + // toolStrip + // + this.toolStrip.CanOverflow = false; + this.toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.toolStrip.ImageScalingSize = new System.Drawing.Size(32, 32); + this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.generalButton, + this.browserButton, + this.transfersButton, + this.editStripButton, + this.sftpButton, + this.s3Button, + this.googleDocsButton, + this.bandwidthButton, + this.connectionButton, + this.updateButton, + this.languageButton}); + this.toolStrip.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow; + this.toolStrip.Location = new System.Drawing.Point(0, 0); + this.toolStrip.MinimumSize = new System.Drawing.Size(0, 69); + this.toolStrip.Name = "toolStrip"; + this.toolStrip.Size = new System.Drawing.Size(678, 69); + this.toolStrip.TabIndex = 0; + this.toolStrip.Text = "toolStrip1"; + // + // generalButton + // + this.generalButton.AutoToolTip = false; + this.generalButton.Image = global::Ch.Cyberduck.ResourcesBundle.general; + this.generalButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.generalButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.generalButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.generalButton.Name = "generalButton"; + this.generalButton.Size = new System.Drawing.Size(51, 69); + this.generalButton.Text = "General"; + this.generalButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.generalButton.Click += new System.EventHandler(this.generalButton_Click); + // + // browserButton + // + this.browserButton.Image = global::Ch.Cyberduck.ResourcesBundle.browser; + this.browserButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.browserButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.browserButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.browserButton.Name = "browserButton"; + this.browserButton.Size = new System.Drawing.Size(53, 69); + this.browserButton.Text = "Browser"; + this.browserButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.browserButton.Click += new System.EventHandler(this.browserButton_Click); + // + // transfersButton + // + this.transfersButton.AutoToolTip = false; + this.transfersButton.Image = global::Ch.Cyberduck.ResourcesBundle.queue; + this.transfersButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.transfersButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.transfersButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.transfersButton.Name = "transfersButton"; + this.transfersButton.Size = new System.Drawing.Size(59, 69); + this.transfersButton.Text = "Transfers"; + this.transfersButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.transfersButton.Click += new System.EventHandler(this.transfersButton_Click); + // + // editStripButton + // + this.editStripButton.AutoToolTip = false; + this.editStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.pencil; + this.editStripButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.editStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.editStripButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.editStripButton.Name = "editStripButton"; + this.editStripButton.Size = new System.Drawing.Size(42, 69); + this.editStripButton.Text = "Editor"; + this.editStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.editStripButton.Click += new System.EventHandler(this.editStripButton_Click); + // + // sftpButton + // + this.sftpButton.AutoToolTip = false; + this.sftpButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.sftpButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.sftpButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.sftpButton.Name = "sftpButton"; + this.sftpButton.Size = new System.Drawing.Size(37, 69); + this.sftpButton.Text = "SFTP"; + this.sftpButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.sftpButton.Visible = false; + this.sftpButton.Click += new System.EventHandler(this.sftpButton_Click); + // + // s3Button + // + this.s3Button.AutoToolTip = false; + this.s3Button.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.s3Button.ImageTransparentColor = System.Drawing.Color.Magenta; + this.s3Button.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.s3Button.Name = "s3Button"; + this.s3Button.Size = new System.Drawing.Size(23, 69); + this.s3Button.Text = "S3"; + this.s3Button.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.s3Button.Click += new System.EventHandler(this.s3Button_Click); + // + // googleDocsButton + // + this.googleDocsButton.AutoToolTip = false; + this.googleDocsButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.googleDocsButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.googleDocsButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.googleDocsButton.Name = "googleDocsButton"; + this.googleDocsButton.Size = new System.Drawing.Size(78, 69); + this.googleDocsButton.Text = "Google Docs"; + this.googleDocsButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.googleDocsButton.Visible = false; + this.googleDocsButton.Click += new System.EventHandler(this.googleDocsButton_Click); + // + // bandwidthButton + // + this.bandwidthButton.AutoToolTip = false; + this.bandwidthButton.Image = global::Ch.Cyberduck.ResourcesBundle.bandwidth; + this.bandwidthButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.bandwidthButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.bandwidthButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.bandwidthButton.Name = "bandwidthButton"; + this.bandwidthButton.Size = new System.Drawing.Size(68, 69); + this.bandwidthButton.Text = "Bandwidth"; + this.bandwidthButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.bandwidthButton.Click += new System.EventHandler(this.bandwidthButton_Click); + // + // connectionButton + // + this.connectionButton.Image = global::Ch.Cyberduck.ResourcesBundle.connection; + this.connectionButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.connectionButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.connectionButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.connectionButton.Name = "connectionButton"; + this.connectionButton.Size = new System.Drawing.Size(73, 69); + this.connectionButton.Text = "Connection"; + this.connectionButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.connectionButton.Click += new System.EventHandler(this.connectionButton_Click); + // + // updateButton + // + this.updateButton.Image = global::Ch.Cyberduck.ResourcesBundle.update; + this.updateButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.updateButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.updateButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.updateButton.Name = "updateButton"; + this.updateButton.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never; + this.updateButton.Size = new System.Drawing.Size(49, 69); + this.updateButton.Text = "Update"; + this.updateButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.updateButton.Click += new System.EventHandler(this.updateButton_Click); + // + // languageButton + // + this.languageButton.Image = global::Ch.Cyberduck.ResourcesBundle.language; + this.languageButton.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.languageButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.languageButton.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.languageButton.Name = "languageButton"; + this.languageButton.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never; + this.languageButton.Size = new System.Drawing.Size(63, 69); + this.languageButton.Text = "Language"; + this.languageButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.languageButton.Click += new System.EventHandler(this.languageButton_Click); + // + // PreferencesForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.ClientSize = new System.Drawing.Size(678, 569); + this.Controls.Add(this.panelManager); + this.Controls.Add(this.toolStrip); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "PreferencesForm"; + this.Text = "Preferences"; + this.panelManager.ResumeLayout(false); + this.managedGeneralPanel.ResumeLayout(false); + this.managedGeneralPanel.PerformLayout(); + this.tableLayoutPanelGeneral.ResumeLayout(false); + this.tableLayoutPanelGeneral.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.browserGroupbox.ResumeLayout(false); + this.browserGroupbox.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.managedSftpPanel.ResumeLayout(false); + this.managedSftpPanel.PerformLayout(); + this.tableLayoutPanel25.ResumeLayout(false); + this.tableLayoutPanel25.PerformLayout(); + this.groupBox18.ResumeLayout(false); + this.groupBox18.PerformLayout(); + this.tableLayoutPanel27.ResumeLayout(false); + this.tableLayoutPanel27.PerformLayout(); + this.managedS3Panel.ResumeLayout(false); + this.managedS3Panel.PerformLayout(); + this.tableLayoutPanel28.ResumeLayout(false); + this.tableLayoutPanel28.PerformLayout(); + this.groupBox19.ResumeLayout(false); + this.groupBox19.PerformLayout(); + this.tableLayoutPanel29.ResumeLayout(false); + this.tableLayoutPanel29.PerformLayout(); + this.groupBox22.ResumeLayout(false); + this.groupBox22.PerformLayout(); + this.tableLayoutPanel30.ResumeLayout(false); + this.tableLayoutPanel30.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.tableLayoutPanel20.ResumeLayout(false); + this.tableLayoutPanel20.PerformLayout(); + this.managedGoogleDocsPanel.ResumeLayout(false); + this.managedGoogleDocsPanel.PerformLayout(); + this.tableLayoutPanel31.ResumeLayout(false); + this.tableLayoutPanel31.PerformLayout(); + this.groupBox23.ResumeLayout(false); + this.groupBox23.PerformLayout(); + this.tableLayoutPanel32.ResumeLayout(false); + this.tableLayoutPanel32.PerformLayout(); + this.groupBox24.ResumeLayout(false); + this.groupBox24.PerformLayout(); + this.tableLayoutPanel33.ResumeLayout(false); + this.tableLayoutPanel33.PerformLayout(); + this.managedBandwidthPanel.ResumeLayout(false); + this.managedBandwidthPanel.PerformLayout(); + this.tableLayoutPanel34.ResumeLayout(false); + this.tableLayoutPanel34.PerformLayout(); + this.groupBox25.ResumeLayout(false); + this.groupBox25.PerformLayout(); + this.tableLayoutPanel35.ResumeLayout(false); + this.tableLayoutPanel35.PerformLayout(); + this.groupBox26.ResumeLayout(false); + this.groupBox26.PerformLayout(); + this.tableLayoutPanel36.ResumeLayout(false); + this.tableLayoutPanel36.PerformLayout(); + this.managedConnectionPanel.ResumeLayout(false); + this.managedConnectionPanel.PerformLayout(); + this.tableLayoutPanel37.ResumeLayout(false); + this.tableLayoutPanel37.PerformLayout(); + this.groupBox21.ResumeLayout(false); + this.groupBox21.PerformLayout(); + this.tableLayoutPanel39.ResumeLayout(false); + this.tableLayoutPanel39.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.connectionTimeoutUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.retriesUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.retryDelayUpDown)).EndInit(); + this.groupBox4.ResumeLayout(false); + this.groupBox4.PerformLayout(); + this.tableLayoutPanel38.ResumeLayout(false); + this.tableLayoutPanel38.PerformLayout(); + this.groupBox20.ResumeLayout(false); + this.groupBox20.PerformLayout(); + this.tableLayoutPanel40.ResumeLayout(false); + this.tableLayoutPanel40.PerformLayout(); + this.managedUpdatePanel.ResumeLayout(false); + this.tableLayoutPanel41.ResumeLayout(false); + this.tableLayoutPanel41.PerformLayout(); + this.groupBox27.ResumeLayout(false); + this.groupBox27.PerformLayout(); + this.tableLayoutPanel42.ResumeLayout(false); + this.tableLayoutPanel42.PerformLayout(); + this.managedLanguagePanel.ResumeLayout(false); + this.managedLanguagePanel.PerformLayout(); + this.tableLayoutPanel43.ResumeLayout(false); + this.tableLayoutPanel43.PerformLayout(); + this.groupBox28.ResumeLayout(false); + this.groupBox28.PerformLayout(); + this.tableLayoutPanel44.ResumeLayout(false); + this.tableLayoutPanel44.PerformLayout(); + this.managedEditorPanel.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + this.managedTransfersPanel.ResumeLayout(false); + this.transfersTabControl.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + this.tableLayoutPanel5.ResumeLayout(false); + this.tableLayoutPanel5.PerformLayout(); + this.groupBox6.ResumeLayout(false); + this.groupBox6.PerformLayout(); + this.tableLayoutPanel8.ResumeLayout(false); + this.tableLayoutPanel8.PerformLayout(); + this.groupBox5.ResumeLayout(false); + this.groupBox5.PerformLayout(); + this.tableLayoutPanel7.ResumeLayout(false); + this.tableLayoutPanel7.PerformLayout(); + this.groupBox29.ResumeLayout(false); + this.groupBox29.PerformLayout(); + this.tableLayoutPanel6.ResumeLayout(false); + this.tableLayoutPanel6.PerformLayout(); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); + this.tableLayoutPanel9.ResumeLayout(false); + this.tableLayoutPanel9.PerformLayout(); + this.groupBox7.ResumeLayout(false); + this.groupBox7.PerformLayout(); + this.tableLayoutPanel10.ResumeLayout(false); + this.tableLayoutPanel10.PerformLayout(); + this.tableLayoutPanel11.ResumeLayout(false); + this.tableLayoutPanel11.PerformLayout(); + this.groupBox8.ResumeLayout(false); + this.groupBox8.PerformLayout(); + this.tableLayoutPanel12.ResumeLayout(false); + this.tableLayoutPanel12.PerformLayout(); + this.tableLayoutPanel13.ResumeLayout(false); + this.tableLayoutPanel13.PerformLayout(); + this.tabPage3.ResumeLayout(false); + this.tabPage3.PerformLayout(); + this.tableLayoutPanel14.ResumeLayout(false); + this.tableLayoutPanel14.PerformLayout(); + this.groupBox9.ResumeLayout(false); + this.groupBox9.PerformLayout(); + this.tableLayoutPanel15.ResumeLayout(false); + this.tableLayoutPanel15.PerformLayout(); + this.groupBox10.ResumeLayout(false); + this.groupBox10.PerformLayout(); + this.tableLayoutPanel16.ResumeLayout(false); + this.tableLayoutPanel16.PerformLayout(); + this.tabPage4.ResumeLayout(false); + this.tabPage4.PerformLayout(); + this.tableLayoutPanel17.ResumeLayout(false); + this.tableLayoutPanel17.PerformLayout(); + this.groupBox11.ResumeLayout(false); + this.groupBox11.PerformLayout(); + this.tableLayoutPanel18.ResumeLayout(false); + this.tableLayoutPanel18.PerformLayout(); + this.groupBox12.ResumeLayout(false); + this.groupBox12.PerformLayout(); + this.tableLayoutPanel19.ResumeLayout(false); + this.tableLayoutPanel19.PerformLayout(); + this.managedBrowserPanel.ResumeLayout(false); + this.managedBrowserPanel.PerformLayout(); + this.tableLayoutPanel21.ResumeLayout(false); + this.tableLayoutPanel21.PerformLayout(); + this.groupBox13.ResumeLayout(false); + this.groupBox13.PerformLayout(); + this.tableLayoutPanel22.ResumeLayout(false); + this.tableLayoutPanel22.PerformLayout(); + this.groupBox14.ResumeLayout(false); + this.groupBox14.PerformLayout(); + this.tableLayoutPanel23.ResumeLayout(false); + this.tableLayoutPanel23.PerformLayout(); + this.toolStrip.ResumeLayout(false); + this.toolStrip.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStripButton generalButton; + private System.Windows.Forms.GroupBox browserGroupbox; + private System.Windows.Forms.CheckBox saveWorkspaceCheckbox; + private System.Windows.Forms.Label labelSaveWorkspace; + private System.Windows.Forms.CheckBox newBrowserOnStartupCheckbox; + private System.Windows.Forms.Label label4; + private ImageComboBox connectBookmarkCombobox; + private System.Windows.Forms.Label labelOpenEmtpyBrowser; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.CheckBox keychainCheckbox; + private System.Windows.Forms.Label labelConfirmDisconnect; + private System.Windows.Forms.CheckBox confirmDisconnectCheckbox; + private System.Windows.Forms.Label labelKeychain; + private ImageComboBox defaultProtocolCombobox; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.ToolStripButton transfersButton; + private System.Windows.Forms.ToolStripButton sftpButton; + private System.Windows.Forms.ToolStripButton s3Button; + private System.Windows.Forms.ToolStripButton bandwidthButton; + private System.Windows.Forms.ToolStripButton connectionButton; + private System.Windows.Forms.ImageList iconList; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.ComboBox defaultEncodingCombobox; + private System.Windows.Forms.TabControl transfersTabControl; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.ComboBox transferFilesCombobox; + private System.Windows.Forms.CheckBox transfersToFrontCheckbox; + private System.Windows.Forms.CheckBox transfersToBackCheckbox; + private System.Windows.Forms.CheckBox removeFromTransfersCheckbox; + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.CheckBox openAfterDownloadCheckbox; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.ComboBox duplicateDownloadCombobox; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.CheckBox duplicateDownloadOverwriteCheckbox; + private System.Windows.Forms.GroupBox groupBox6; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.ComboBox duplicateUploadCombobox; + private System.Windows.Forms.CheckBox duplicateUploadOverwriteCheckbox; + private System.Windows.Forms.Button showDownloadFolderDialogButton; + private System.Windows.Forms.FolderBrowserDialog downloadFolderBrowserDialog; + private EllipsisLabel downloadFolderLabel; + private System.Windows.Forms.GroupBox groupBox7; + private System.Windows.Forms.CheckBox chmodDownloadCheckbox; + private System.Windows.Forms.RadioButton chmodDownloadCustomRadioButton; + private System.Windows.Forms.RadioButton chmodDownloadDefaultRadioButton; + private System.Windows.Forms.Label ownerDownloadLabel; + private System.Windows.Forms.ComboBox chmodDownloadTypeCombobox; + private System.Windows.Forms.CheckBox dotherxCheckbox; + private System.Windows.Forms.CheckBox dotherwCheckbox; + private System.Windows.Forms.CheckBox dotherrCheckbox; + private System.Windows.Forms.Label othersDownloadLabel; + private System.Windows.Forms.CheckBox dgroupxCheckbox; + private System.Windows.Forms.CheckBox dgroupwCheckbox; + private System.Windows.Forms.CheckBox dgrouprCheckbox; + private System.Windows.Forms.Label groupDownloadLabel; + private System.Windows.Forms.CheckBox downerxCheckbox; + private System.Windows.Forms.CheckBox downerwCheckbox; + private System.Windows.Forms.CheckBox downerrCheckbox; + private System.Windows.Forms.GroupBox groupBox8; + private System.Windows.Forms.CheckBox uotherxCheckbox; + private System.Windows.Forms.CheckBox uotherwCheckbox; + private System.Windows.Forms.CheckBox uotherrCheckbox; + private System.Windows.Forms.Label othersUploadLabel; + private System.Windows.Forms.CheckBox ugroupxCheckbox; + private System.Windows.Forms.CheckBox ugroupwCheckbox; + private System.Windows.Forms.CheckBox ugrouprCheckbox; + private System.Windows.Forms.Label groupUploadLabel; + private System.Windows.Forms.CheckBox uownerxCheckbox; + private System.Windows.Forms.CheckBox uownerwCheckbox; + private System.Windows.Forms.CheckBox uownerrCheckbox; + private System.Windows.Forms.Label ownerUploadLabel; + private System.Windows.Forms.ComboBox chmodUploadTypeCombobox; + private System.Windows.Forms.RadioButton chmodUploadDefaultRadioButton; + private System.Windows.Forms.RadioButton chmodUploadCustomRadioButton; + private System.Windows.Forms.CheckBox chmodUploadCheckbox; + private System.Windows.Forms.GroupBox groupBox10; + private System.Windows.Forms.CheckBox preserveModificationUploadCheckbox; + private System.Windows.Forms.GroupBox groupBox9; + private System.Windows.Forms.CheckBox preserveModificationDownloadCheckbox; + private System.Windows.Forms.GroupBox groupBox11; + private System.Windows.Forms.CheckBox downloadSkipCheckbox; + private System.Windows.Forms.RichTextBox downloadSkipRegexRichTextbox; + private System.Windows.Forms.Button downloadSkipRegexDefaultButton; + private System.Windows.Forms.GroupBox groupBox12; + private System.Windows.Forms.Button uploadSkipRegexDefaultButton; + private System.Windows.Forms.RichTextBox uploadSkipRegexRichTextbox; + private System.Windows.Forms.CheckBox uploadSkipCheckbox; + private System.Windows.Forms.GroupBox groupBox18; + private System.Windows.Forms.Label label28; + private System.Windows.Forms.ComboBox sshTransfersCombobox; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.GroupBox groupBox19; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.ComboBox defaultBucketLocationCombobox; + private System.Windows.Forms.Label label31; + private System.Windows.Forms.ComboBox defaultDownloadThrottleCombobox; + private System.Windows.Forms.Label label32; + private System.Windows.Forms.ComboBox defaultUploadThrottleCombobox; + private System.Windows.Forms.GroupBox groupBox21; + private System.Windows.Forms.NumericUpDown connectionTimeoutUpDown; + private System.Windows.Forms.Label label36; + private System.Windows.Forms.CheckBox retryCheckbox; + private System.Windows.Forms.NumericUpDown retryDelayUpDown; + private System.Windows.Forms.NumericUpDown retriesUpDown; + private System.Windows.Forms.Label label34; + private PanelManager panelManager; + private ManagedPanel managedGeneralPanel; + private ManagedPanel managedTransfersPanel; + private ManagedPanel managedSftpPanel; + private ManagedPanel managedS3Panel; + private ManagedPanel managedBandwidthPanel; + private ManagedPanel managedConnectionPanel; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelGeneral; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel6; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel7; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel8; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel9; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel10; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel11; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel12; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel13; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel14; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel15; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel16; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel17; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel18; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel19; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel27; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel25; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel29; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel28; + private System.Windows.Forms.GroupBox groupBox22; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel30; + private System.Windows.Forms.ComboBox defaultStorageClassComboBox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.ToolStripButton googleDocsButton; + private ManagedPanel managedGoogleDocsPanel; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel31; + private System.Windows.Forms.GroupBox groupBox23; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel32; + private System.Windows.Forms.ComboBox gdDocumentsComboBox; + private System.Windows.Forms.ComboBox gdSpreadsheetsComboBox; + private System.Windows.Forms.ComboBox gdPresentationsComboBox; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.GroupBox groupBox24; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel33; + private System.Windows.Forms.CheckBox gdConvertCheckBox; + private System.Windows.Forms.Label labelConvert; + private System.Windows.Forms.CheckBox gdOCRcheckBox; + private System.Windows.Forms.Label labelOcr; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel34; + private System.Windows.Forms.GroupBox groupBox25; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel35; + private System.Windows.Forms.GroupBox groupBox26; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel36; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel38; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel39; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel37; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.GroupBox groupBox20; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel40; + private System.Windows.Forms.CheckBox systemProxyCheckBox; + private System.Windows.Forms.ToolStripButton updateButton; + private ManagedPanel managedUpdatePanel; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel41; + private System.Windows.Forms.GroupBox groupBox27; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel42; + private System.Windows.Forms.CheckBox updateCheckBox; + private System.Windows.Forms.Button updateCheckButton; + private System.Windows.Forms.Label lastUpdateLabel; + private System.Windows.Forms.ToolStripButton languageButton; + private ManagedPanel managedLanguagePanel; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel43; + private System.Windows.Forms.GroupBox groupBox28; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel44; + private System.Windows.Forms.ComboBox languageComboBox; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.GroupBox groupBox29; + private ClickThroughToolStrip toolStrip; + private System.Windows.Forms.CheckBox uploadTemporaryNameCheckBox; + private System.Windows.Forms.ComboBox updateFeedComboBox; + private System.Windows.Forms.Button changeSystemProxyButton; + private ManagedPanel managedEditorPanel; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.ToolStripButton editStripButton; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4; + private System.Windows.Forms.Label label14; + private ImageComboBox editorComboBox; + private System.Windows.Forms.OpenFileDialog editorOpenFileDialog; + private System.Windows.Forms.CheckBox alwaysUseDefaultEditorCheckBox; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel20; + private System.Windows.Forms.ComboBox defaultEncryptionComboBox; + private System.Windows.Forms.Label label8; + private ManagedPanel managedBrowserPanel; + private System.Windows.Forms.ToolStripButton browserButton; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel21; + private System.Windows.Forms.GroupBox groupBox13; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel22; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.ComboBox bookmarkSizeComboBox; + private System.Windows.Forms.GroupBox groupBox14; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel23; + private System.Windows.Forms.CheckBox infoWindowCheckbox; + private System.Windows.Forms.CheckBox showHiddenFilesCheckbox; + private System.Windows.Forms.CheckBox returnKeyCheckbox; + private System.Windows.Forms.CheckBox doubleClickEditorCheckbox; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/PreferencesForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/PreferencesForm.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/PreferencesForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/PreferencesForm.cs index df7af19665..e5c912b168 100644 --- a/source/ch/cyberduck/ui/winforms/PreferencesForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/PreferencesForm.cs @@ -1,1516 +1,1516 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; -using ch.cyberduck.core; -using ch.cyberduck.core.preferences; -using Ch.Cyberduck.Ui.Controller; -using Ch.Cyberduck.Ui.Winforms.Controls; -using Application = ch.cyberduck.core.local.Application; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class PreferencesForm : BaseForm, IPreferencesView - { - private const int MaxHeight = 800; - private const int MaxWidth = 1000; - private const int MinHeight = 250; - private const int MinWidth = 450; - private Application _lastSelectedEditor; - - public PreferencesForm() - { - InitializeComponent(); - - Load += delegate - { - int newWidth = 10; // border etc. - foreach (ToolStripItem item in toolStrip.Items) - { - newWidth += item.Size.Width + item.Margin.Left + item.Margin.Right; - } - Width = newWidth; - }; - - MaximumSize = new Size(MaxWidth, MaxHeight); - MinimumSize = new Size(MinWidth, MinHeight); - - sftpButton.Image = IconCache.Instance.IconForName("ftp", 32); - s3Button.Image = IconCache.Instance.IconForName("s3", 32); - googleDocsButton.Image = IconCache.Instance.IconForName("googledrive", 32); - - connectBookmarkCombobox.ICImageList = IconCache.Instance.GetProtocolIcons(); - defaultProtocolCombobox.ICImageList = IconCache.Instance.GetProtocolIcons(); - - showDownloadFolderDialogButton.Text = LocaleFactory.localizedString("Choose") + "…"; - - #region Font Settings - - Font smallerFont = new Font(Font.FontFamily, Font.Size - 1); - Font smallerAndBoldFont = new Font(Font.FontFamily, Font.Size - 1, FontStyle.Bold); - - #region Transfers Panel - - // Permissions Tab - chmodDownloadCustomRadioButton.Font = smallerFont; - chmodDownloadDefaultRadioButton.Font = smallerFont; - chmodDownloadTypeCombobox.Font = smallerFont; - ownerDownloadLabel.Font = smallerAndBoldFont; - othersDownloadLabel.Font = smallerAndBoldFont; - groupDownloadLabel.Font = smallerAndBoldFont; - downerrCheckbox.Font = smallerFont; - downerwCheckbox.Font = smallerFont; - downerxCheckbox.Font = smallerFont; - dgrouprCheckbox.Font = smallerFont; - dgroupwCheckbox.Font = smallerFont; - dgroupxCheckbox.Font = smallerFont; - dotherrCheckbox.Font = smallerFont; - dotherwCheckbox.Font = smallerFont; - dotherxCheckbox.Font = smallerFont; - - chmodUploadCustomRadioButton.Font = smallerFont; - chmodUploadDefaultRadioButton.Font = smallerFont; - chmodUploadTypeCombobox.Font = smallerFont; - ownerUploadLabel.Font = smallerAndBoldFont; - othersUploadLabel.Font = smallerAndBoldFont; - groupUploadLabel.Font = smallerAndBoldFont; - uownerrCheckbox.Font = smallerFont; - uownerwCheckbox.Font = smallerFont; - uownerxCheckbox.Font = smallerFont; - ugrouprCheckbox.Font = smallerFont; - ugroupwCheckbox.Font = smallerFont; - ugroupxCheckbox.Font = smallerFont; - uotherrCheckbox.Font = smallerFont; - uotherwCheckbox.Font = smallerFont; - uotherxCheckbox.Font = smallerFont; - - downloadSkipRegexDefaultButton.Font = smallerFont; - uploadSkipRegexDefaultButton.Font = smallerFont; - - #endregion - - #endregion - - generalButton_Click(this, EventArgs.Empty); - toolStrip.Renderer = new FirefoxStyleRenderer(); - - //todo - CenterToParent(); - } - - public override string[] BundleNames - { - get { return new[] {"Preferences"}; } - } - - public Application DefaultEditor - { - get { return (Application) editorComboBox.SelectedValue; } - set - { - editorComboBox.SelectedValue = value; - _lastSelectedEditor = value; - } - } - - public bool SaveWorkspace - { - get { return saveWorkspaceCheckbox.Checked; } - set { saveWorkspaceCheckbox.Checked = value; } - } - - public bool NewBrowserOnStartup - { - get { return newBrowserOnStartupCheckbox.Checked; } - set { newBrowserOnStartupCheckbox.Checked = value; } - } - - public Host DefaultBookmark - { - get { return (Host) connectBookmarkCombobox.SelectedValue; } - set - { - if (null != value) - { - connectBookmarkCombobox.SelectedValue = value; - } - else - { - // None entry - connectBookmarkCombobox.SelectedIndex = 0; - } - } - } - - public bool UseKeychain - { - get { return keychainCheckbox.Checked; } - set { keychainCheckbox.Checked = value; } - } - - public bool ConfirmDisconnect - { - get { return confirmDisconnectCheckbox.Checked; } - set { confirmDisconnectCheckbox.Checked = value; } - } - - public bool AlwaysUseDefaultEditor - { - get { return alwaysUseDefaultEditorCheckBox.Checked; } - set { alwaysUseDefaultEditorCheckBox.Checked = value; } - } - - public bool ShowHiddenFiles - { - get { return showHiddenFilesCheckbox.Checked; } - set { showHiddenFilesCheckbox.Checked = value; } - } - - public bool DoubleClickEditor - { - get { return doubleClickEditorCheckbox.Checked; } - set { doubleClickEditorCheckbox.Checked = value; } - } - - public bool ReturnKeyRenames - { - get { return returnKeyCheckbox.Checked; } - set { returnKeyCheckbox.Checked = value; } - } - - public bool InfoWindowShowsCurrentSelection - { - get { return infoWindowCheckbox.Checked; } - set { infoWindowCheckbox.Checked = value; } - } - - public bool AlternatingRowBackground - { - get { return false; } - set { ; } - } - - public bool HorizontalLines - { - get { return false; } - set { ; } - } - - public bool VerticalLines - { - get { return false; } - set { ; } - } - - public string DefaultEncoding - { - get { return defaultEncodingCombobox.Text; } - set { defaultEncodingCombobox.Text = value; } - } - - public Host.TransferType TransferMode - { - get { return (Host.TransferType) transferFilesCombobox.SelectedValue; } - set { transferFilesCombobox.SelectedValue = value; } - } - - public bool TransfersToFront - { - get { return transfersToFrontCheckbox.Checked; } - set { transfersToFrontCheckbox.Checked = value; } - } - - public bool TransfersToBack - { - get { return transfersToBackCheckbox.Checked; } - set { transfersToBackCheckbox.Checked = value; } - } - - public bool RemoveFromTransfers - { - get { return removeFromTransfersCheckbox.Checked; } - set { removeFromTransfersCheckbox.Checked = value; } - } - - public bool OpenAfterDownload - { - get { return openAfterDownloadCheckbox.Checked; } - set { openAfterDownloadCheckbox.Checked = value; } - } - - public string DownloadFolder - { - get { return downloadFolderLabel.Text; } - set { downloadFolderLabel.Text = value; } - } - - public string DuplicateDownloadAction - { - get { return duplicateDownloadCombobox.Text; } - set { duplicateDownloadCombobox.Text = value; } - } - - public string DuplicateUploadAction - { - get { return duplicateUploadCombobox.Text; } - set { duplicateUploadCombobox.Text = value; } - } - - public bool DuplicateDownloadOverwrite - { - get { return duplicateDownloadOverwriteCheckbox.Checked; } - set { duplicateDownloadOverwriteCheckbox.Checked = value; } - } - - public bool DuplicateUploadOverwrite - { - get { return duplicateUploadOverwriteCheckbox.Checked; } - set { duplicateUploadOverwriteCheckbox.Checked = value; } - } - - public bool UploadWithTemporaryFilename - { - get { return uploadTemporaryNameCheckBox.Checked; } - set { uploadTemporaryNameCheckBox.Checked = value; } - } - - public bool ChmodDownload - { - get { return chmodDownloadCheckbox.Checked; } - set { chmodDownloadCheckbox.Checked = value; } - } - - public bool ChmodDownloadUseDefault - { - get { return chmodDownloadDefaultRadioButton.Checked; } - set - { - chmodDownloadDefaultRadioButton.Checked = value; - chmodDownloadCustomRadioButton.Checked = !value; - } - } - - public string ChmodDownloadType - { - get { return chmodDownloadTypeCombobox.Text; } - set { chmodDownloadTypeCombobox.Text = value; } - } - - public bool DownloadOwnerRead - { - get { return downerrCheckbox.Checked; } - set { downerrCheckbox.Checked = value; } - } - - public bool DownloadOwnerWrite - { - get { return downerwCheckbox.Checked; } - set { downerwCheckbox.Checked = value; } - } - - public bool DownloadOwnerExecute - { - get { return downerxCheckbox.Checked; } - set { downerxCheckbox.Checked = value; } - } - - public bool DownloadGroupRead - { - get { return dgrouprCheckbox.Checked; } - set { dgrouprCheckbox.Checked = value; } - } - - public bool DownloadGroupWrite - { - get { return dgroupwCheckbox.Checked; } - set { dgroupwCheckbox.Checked = value; } - } - - public bool DownloadGroupExecute - { - get { return dgroupxCheckbox.Checked; } - set { dgroupxCheckbox.Checked = value; } - } - - public bool DownloadOtherRead - { - get { return dotherrCheckbox.Checked; } - set { dotherrCheckbox.Checked = value; } - } - - public bool DownloadOtherWrite - { - get { return dotherwCheckbox.Checked; } - set { dotherwCheckbox.Checked = value; } - } - - public bool DownloadOtherExecute - { - get { return dotherxCheckbox.Checked; } - set { dotherxCheckbox.Checked = value; } - } - - public bool ChmodDownloadEnabled - { - set - { - chmodDownloadCustomRadioButton.Enabled = value; - chmodDownloadDefaultRadioButton.Enabled = value; - chmodDownloadTypeCombobox.Enabled = value; - ChmodDownloadDefaultEnabled = value; - } - } - - public bool ChmodDownloadDefaultEnabled - { - set - { - downerrCheckbox.Enabled = value; - downerwCheckbox.Enabled = value; - downerxCheckbox.Enabled = value; - dgrouprCheckbox.Enabled = value; - dgroupwCheckbox.Enabled = value; - dgroupxCheckbox.Enabled = value; - dotherrCheckbox.Enabled = value; - dotherwCheckbox.Enabled = value; - dotherxCheckbox.Enabled = value; - } - } - - public bool ChmodUpload - { - get { return chmodUploadCheckbox.Checked; } - set { chmodUploadCheckbox.Checked = value; } - } - - public bool ChmodUploadUseDefault - { - get { return chmodUploadDefaultRadioButton.Checked; } - set - { - chmodUploadDefaultRadioButton.Checked = value; - chmodUploadCustomRadioButton.Checked = !value; - } - } - - public string ChmodUploadType - { - get { return chmodUploadTypeCombobox.Text; } - set { chmodUploadTypeCombobox.Text = value; } - } - - public bool UploadOwnerRead - { - get { return uownerrCheckbox.Checked; } - set { uownerrCheckbox.Checked = value; } - } - - public bool UploadOwnerWrite - { - get { return uownerwCheckbox.Checked; } - set { uownerwCheckbox.Checked = value; } - } - - public bool UploadOwnerExecute - { - get { return uownerxCheckbox.Checked; } - set { uownerxCheckbox.Checked = value; } - } - - public bool UploadGroupRead - { - get { return ugrouprCheckbox.Checked; } - set { ugrouprCheckbox.Checked = value; } - } - - public bool UploadGroupWrite - { - get { return ugroupwCheckbox.Checked; } - set { ugroupwCheckbox.Checked = value; } - } - - public bool UploadGroupExecute - { - get { return ugroupxCheckbox.Checked; } - set { ugroupxCheckbox.Checked = value; } - } - - public bool UploadOtherRead - { - get { return uotherrCheckbox.Checked; } - set { uotherrCheckbox.Checked = value; } - } - - public bool UploadOtherWrite - { - get { return uotherwCheckbox.Checked; } - set { uotherwCheckbox.Checked = value; } - } - - public bool UploadOtherExecute - { - get { return uotherxCheckbox.Checked; } - set { uotherxCheckbox.Checked = value; } - } - - public bool ChmodUploadEnabled - { - set - { - chmodUploadCustomRadioButton.Enabled = value; - chmodUploadDefaultRadioButton.Enabled = value; - chmodUploadTypeCombobox.Enabled = value; - ChmodUploadDefaultEnabled = value; - } - } - - public bool ChmodUploadDefaultEnabled - { - set - { - uownerrCheckbox.Enabled = value; - uownerwCheckbox.Enabled = value; - uownerxCheckbox.Enabled = value; - ugrouprCheckbox.Enabled = value; - ugroupwCheckbox.Enabled = value; - ugroupxCheckbox.Enabled = value; - uotherrCheckbox.Enabled = value; - uotherwCheckbox.Enabled = value; - uotherxCheckbox.Enabled = value; - } - } - - public bool PreserveModificationDownload - { - get { return preserveModificationDownloadCheckbox.Checked; } - set { preserveModificationDownloadCheckbox.Checked = value; } - } - - public bool PreserveModificationUpload - { - get { return preserveModificationUploadCheckbox.Checked; } - set { preserveModificationUploadCheckbox.Checked = value; } - } - - public bool DownloadSkip - { - get { return downloadSkipCheckbox.Checked; } - set { downloadSkipCheckbox.Checked = value; } - } - - public string DownloadSkipRegex - { - get { return downloadSkipRegexRichTextbox.Text; } - set { downloadSkipRegexRichTextbox.Text = value; } - } - - public bool DownloadSkipRegexEnabled - { - set { downloadSkipRegexRichTextbox.Enabled = value; } - } - - public void MarkDownloadSkipRegex(int position) - { - int currentPos = downloadSkipRegexRichTextbox.SelectionStart; - if (position >= 0) - { - downloadSkipRegexRichTextbox.SelectionStart = position; - downloadSkipRegexRichTextbox.SelectionLength = 1; - downloadSkipRegexRichTextbox.SelectionColor = Color.Red; - } - else - { - downloadSkipRegexRichTextbox.SelectionStart = 0; - downloadSkipRegexRichTextbox.SelectionLength = downloadSkipRegexRichTextbox.TextLength; - downloadSkipRegexRichTextbox.SelectionColor = Color.Black; - } - downloadSkipRegexRichTextbox.SelectionStart = currentPos; - downloadSkipRegexRichTextbox.SelectionLength = 0; - downloadSkipRegexRichTextbox.SelectionColor = Color.Black; - } - - public bool UploadSkip - { - get { return uploadSkipCheckbox.Checked; } - set { uploadSkipCheckbox.Checked = value; } - } - - public string UploadSkipRegex - { - get { return uploadSkipRegexRichTextbox.Text; } - set { uploadSkipRegexRichTextbox.Text = value; } - } - - public bool UploadSkipRegexEnabled - { - set { uploadSkipRegexRichTextbox.Enabled = value; } - } - - public void MarkUploadSkipRegex(int position) - { - int currentPos = uploadSkipRegexRichTextbox.SelectionStart; - if (position >= 0) - { - uploadSkipRegexRichTextbox.SelectionStart = position; - uploadSkipRegexRichTextbox.SelectionLength = 1; - uploadSkipRegexRichTextbox.SelectionColor = Color.Red; - } - else - { - uploadSkipRegexRichTextbox.SelectionStart = 0; - uploadSkipRegexRichTextbox.SelectionLength = uploadSkipRegexRichTextbox.TextLength; - uploadSkipRegexRichTextbox.SelectionColor = Color.Black; - } - uploadSkipRegexRichTextbox.SelectionStart = currentPos; - uploadSkipRegexRichTextbox.SelectionLength = 0; - uploadSkipRegexRichTextbox.SelectionColor = Color.Black; - } - - public string DefaultBucketLocation - { - get { return (string) defaultBucketLocationCombobox.SelectedValue; } - set { defaultBucketLocationCombobox.SelectedValue = value; } - } - - public string DefaultEncryption - { - get { return (string) defaultEncryptionComboBox.SelectedValue; } - set { defaultEncryptionComboBox.SelectedValue = value; } - } - - public float DefaultDownloadThrottle - { - get { return (float) defaultDownloadThrottleCombobox.SelectedValue; } - set { defaultDownloadThrottleCombobox.SelectedValue = value; } - } - - public float DefaultUploadThrottle - { - get { return (float) defaultUploadThrottleCombobox.SelectedValue; } - set { defaultUploadThrottleCombobox.SelectedValue = value; } - } - - public int ConnectionTimeout - { - get { return Convert.ToInt32(connectionTimeoutUpDown.Value); } - set { connectionTimeoutUpDown.Value = value; } - } - - public int RetryDelay - { - get { return Convert.ToInt32(retryDelayUpDown.Value); } - set { retryDelayUpDown.Value = value; } - } - - public int Retries - { - get { return Convert.ToInt32(retriesUpDown.Value); } - set - { - retriesUpDown.Value = value; - retryCheckbox.Checked = value != 0; - } - } - - public string LastUpdateCheck - { - set { lastUpdateLabel.Text = value; } - } - - public string UpdateFeed - { - get { return (string) updateFeedComboBox.SelectedValue; } - set { updateFeedComboBox.SelectedValue = value; } - } - - public bool UseSystemProxy - { - get { return systemProxyCheckBox.Checked; } - set { systemProxyCheckBox.Checked = value; } - } - - public event VoidHandler UseSystemProxyChangedEvent = delegate { }; - public event VoidHandler ChangeSystemProxyEvent = delegate { }; - public event VoidHandler SaveWorkspaceChangedEvent = delegate { }; - public event VoidHandler NewBrowserOnStartupChangedEvent = delegate { }; - public event VoidHandler DefaultBookmarkChangedEvent = delegate { }; - public event VoidHandler UseKeychainChangedEvent = delegate { }; - public event VoidHandler ConfirmDisconnectChangedEvent = delegate { }; - public event VoidHandler DefaultProtocolChangedEvent = delegate { }; - public event VoidHandler ShowHiddenFilesChangedEvent = delegate { }; - public event VoidHandler DoubleClickEditorChangedEvent = delegate { }; - public event VoidHandler ReturnKeyRenamesChangedEvent = delegate { }; - public event VoidHandler InfoWindowShowsCurrentSelectionChangedEvent = delegate { }; - public event VoidHandler AlternatingRowBackgroundChangedEvent = delegate { }; - public event VoidHandler HorizontalLinesChangedEvent = delegate { }; - public event VoidHandler VerticalLinesChangedEvent = delegate { }; - public event VoidHandler DefaultEncodingChangedEvent = delegate { }; - public event VoidHandler TransferModeChangedEvent = delegate { }; - public event VoidHandler TransfersToFrontChangedEvent = delegate { }; - public event VoidHandler TransfersToBackChangedEvent = delegate { }; - public event VoidHandler RemoveFromTransfersChangedEvent = delegate { }; - public event VoidHandler OpenAfterDownloadChangedEvent = delegate { }; - public event VoidHandler DownloadFolderChangedEvent = delegate { }; - public event VoidHandler DuplicateDownloadActionChangedEvent = delegate { }; - public event VoidHandler DuplicateUploadActionChangedEvent = delegate { }; - public event VoidHandler DuplicateDownloadOverwriteChangedEvent = delegate { }; - public event VoidHandler DuplicateUploadOverwriteChangedEvent = delegate { }; - public event VoidHandler DefaultEditorChangedEvent = delegate { }; - public event VoidHandler RepopulateEditorsEvent = delegate { }; - public event VoidHandler AlwaysUseDefaultEditorChangedEvent = delegate { }; - public event VoidHandler ChmodDownloadChangedEvent = delegate { }; - public event VoidHandler ChmodDownloadUseDefaultChangedEvent = delegate { }; - public event VoidHandler ChmodDownloadTypeChangedEvent = delegate { }; - public event VoidHandler DownloadOwnerReadChangedEvent = delegate { }; - public event VoidHandler DownloadOwnerWriteChangedEvent = delegate { }; - public event VoidHandler DownloadOwnerExecuteChangedEvent = delegate { }; - public event VoidHandler DownloadGroupReadChangedEvent = delegate { }; - public event VoidHandler DownloadGroupWriteChangedEvent = delegate { }; - public event VoidHandler DownloadGroupExecuteChangedEvent = delegate { }; - public event VoidHandler DownloadOtherReadChangedEvent = delegate { }; - public event VoidHandler DownloadOtherWriteChangedEvent = delegate { }; - public event VoidHandler DownloadOtherExecuteChangedEvent = delegate { }; - public event VoidHandler ChmodUploadChangedEvent = delegate { }; - public event VoidHandler ChmodUploadUseDefaultChangedEvent = delegate { }; - public event VoidHandler ChmodUploadTypeChangedEvent = delegate { }; - public event VoidHandler UploadOwnerReadChangedEvent = delegate { }; - public event VoidHandler UploadOwnerWriteChangedEvent = delegate { }; - public event VoidHandler UploadOwnerExecuteChangedEvent = delegate { }; - public event VoidHandler UploadGroupReadChangedEvent = delegate { }; - public event VoidHandler UploadGroupWriteChangedEvent = delegate { }; - public event VoidHandler UploadGroupExecuteChangedEvent = delegate { }; - public event VoidHandler UploadOtherReadChangedEvent = delegate { }; - public event VoidHandler UploadOtherWriteChangedEvent = delegate { }; - public event VoidHandler UploadOtherExecuteChangedEvent = delegate { }; - public event VoidHandler PreserveModificationDownloadChangedEvent = delegate { }; - public event VoidHandler PreserveModificationUploadChangedEvent = delegate { }; - public event VoidHandler DownloadSkipChangedEvent = delegate { }; - public event VoidHandler DownloadSkipRegexChangedEvent = delegate { }; - public event VoidHandler DownloadSkipRegexDefaultEvent = delegate { }; - public event VoidHandler UploadSkipChangedEvent = delegate { }; - public event VoidHandler UploadSkipRegexChangedEvent = delegate { }; - public event VoidHandler UploadSkipRegexDefaultEvent = delegate { }; - public event VoidHandler DefaultBucketLocationChangedEvent = delegate { }; - public event VoidHandler DefaultEncryptionChangedEvent = delegate { }; - public event VoidHandler DefaultDownloadThrottleChangedEvent = delegate { }; - public event VoidHandler DefaultUploadThrottleChangedEvent = delegate { }; - public event VoidHandler ConnectionTimeoutChangedEvent = delegate { }; - public event VoidHandler RetryDelayChangedEvent = delegate { }; - public event VoidHandler RetriesChangedEvent = delegate { }; - public event VoidHandler DefaultStorageClassChangedEvent = delegate { }; - public event VoidHandler LocaleChanged = delegate { }; - public event VoidHandler UploadWithTemporaryFilenameChangedEvent = delegate { }; - public event VoidHandler UpdateFeedChangedEvent = delegate { }; - public event VoidHandler BookmarkSizeChangedEvent = delegate { }; - - public bool AutomaticUpdateCheck - { - get { return updateCheckBox.Checked; } - set { updateCheckBox.Checked = value; } - } - - public event VoidHandler AutomaticUpdateChangedEvent = delegate { }; - public event VoidHandler CheckForUpdateEvent; - - public string DocumentExportFormat - { - get { return (string) gdDocumentsComboBox.SelectedValue; } - set { gdDocumentsComboBox.SelectedValue = value; } - } - - public string PresentationExportFormat - { - get { return (string) gdPresentationsComboBox.SelectedValue; } - set { gdPresentationsComboBox.SelectedValue = value; } - } - - public int BookmarkSize - { - get { return (int) bookmarkSizeComboBox.SelectedValue; } - set { bookmarkSizeComboBox.SelectedValue = value; } - } - - public string SpreadsheetExportFormat - { - get { return (string) gdSpreadsheetsComboBox.SelectedValue; } - set { gdSpreadsheetsComboBox.SelectedValue = value; } - } - - public bool ConvertUploads - { - get { return gdConvertCheckBox.Checked; } - set { gdConvertCheckBox.Checked = value; } - } - - public bool OcrUploads - { - get { return gdOCRcheckBox.Checked; } - set { gdOCRcheckBox.Checked = value; } - } - - public event VoidHandler DocumentExportFormatChanged = delegate { }; - public event VoidHandler PresentationExportFormatChanged = delegate { }; - public event VoidHandler SpreadsheetExportFormatChanged = delegate { }; - public event VoidHandler ConvertUploadsChanged = delegate { }; - public event VoidHandler OcrUploadsChanged = delegate { }; - - public string DefaultStorageClass - { - get { return (string) defaultStorageClassComboBox.SelectedValue; } - set { defaultStorageClassComboBox.SelectedValue = value; } - } - - public void PopulateBookmarks(List> bookmarks) - { - connectBookmarkCombobox.DataSource = bookmarks; - connectBookmarkCombobox.ValueMember = "Key"; - connectBookmarkCombobox.DisplayMember = "Value"; - connectBookmarkCombobox.IconMember = "IconKey"; - } - - public void PopulateEditors(List> editors) - { - editorComboBox.DataSource = editors; - editorComboBox.ValueMember = "Key"; - editorComboBox.DisplayMember = "Value"; - editorComboBox.IconMember = "IconKey"; - - ImageList imageList = new ImageList(); - foreach (KeyValueIconTriple triple in editors) - { - if (triple.Key.getIdentifier() != null) - { - imageList.Images.Add(triple.Value, - IconCache.Instance.GetFileIconFromExecutable(triple.Key.getIdentifier(), - IconCache.IconSize.Small)); - } - } - editorComboBox.ICImageList = imageList; - } - - public void PopulateProtocols(List> protocols) - { - defaultProtocolCombobox.DataSource = protocols; - defaultProtocolCombobox.ValueMember = "Key"; - defaultProtocolCombobox.DisplayMember = "Value"; - defaultProtocolCombobox.IconMember = "IconKey"; - } - - public void PopulateEncodings(List encodings) - { - defaultEncodingCombobox.DataSource = encodings; - } - - public void PopulateDocumentExportFormats(IList> formats) - { - gdDocumentsComboBox.DataSource = formats; - gdDocumentsComboBox.ValueMember = "Key"; - gdDocumentsComboBox.DisplayMember = "Value"; - } - - public void PopulateBookmarkSize(IList> sizes) - { - bookmarkSizeComboBox.DataSource = sizes; - bookmarkSizeComboBox.ValueMember = "Key"; - bookmarkSizeComboBox.DisplayMember = "Value"; - } - - public void PopulatePresentationExportFormats(IList> formats) - { - gdPresentationsComboBox.DataSource = formats; - gdPresentationsComboBox.ValueMember = "Key"; - gdPresentationsComboBox.DisplayMember = "Value"; - } - - public void PopulateSpreadsheetExportFormats(IList> formats) - { - gdSpreadsheetsComboBox.DataSource = formats; - gdSpreadsheetsComboBox.ValueMember = "Key"; - gdSpreadsheetsComboBox.DisplayMember = "Value"; - } - - public void PopulateTransferModes(List> modes) - { - transferFilesCombobox.DataSource = null; - transferFilesCombobox.DataSource = modes; - transferFilesCombobox.DisplayMember = "Key"; - transferFilesCombobox.ValueMember = "Value"; - } - - public void PopulateDuplicateDownloadActions(List actions) - { - duplicateDownloadCombobox.DataSource = actions; - } - - public void PopulateDuplicateUploadActions(List actions) - { - duplicateUploadCombobox.DataSource = actions; - } - - public void PopulateChmodDownloadTypes(List types) - { - chmodDownloadTypeCombobox.DataSource = types; - } - - public void PopulateChmodUploadTypes(List types) - { - chmodUploadTypeCombobox.DataSource = types; - } - - public void PopulateDefaultBucketLocations(IList> locations) - { - defaultBucketLocationCombobox.DataSource = locations; - defaultBucketLocationCombobox.ValueMember = "Key"; - defaultBucketLocationCombobox.DisplayMember = "Value"; - } - - public void PopulateDefaultStorageClasses(IList> classes) - { - defaultStorageClassComboBox.DataSource = classes; - defaultStorageClassComboBox.ValueMember = "Key"; - defaultStorageClassComboBox.DisplayMember = "Value"; - } - - public void PopulateDefaultEncryption(IList> algorithms) - { - defaultEncryptionComboBox.DataSource = algorithms; - defaultEncryptionComboBox.ValueMember = "Key"; - defaultEncryptionComboBox.DisplayMember = "Value"; - } - - public void PopulateDefaultDownloadThrottleList(IList> throttles) - { - defaultDownloadThrottleCombobox.DataSource = throttles; - defaultDownloadThrottleCombobox.ValueMember = "Key"; - defaultDownloadThrottleCombobox.DisplayMember = "Value"; - } - - public void PopulateDefaultUploadThrottleList(IList> throttles) - { - defaultUploadThrottleCombobox.DataSource = throttles; - defaultUploadThrottleCombobox.ValueMember = "Key"; - defaultUploadThrottleCombobox.DisplayMember = "Value"; - } - - public void PopulateUpdateFeeds(IList> feeds) - { - updateFeedComboBox.DataSource = feeds; - updateFeedComboBox.ValueMember = "Key"; - updateFeedComboBox.DisplayMember = "Value"; - } - - public Protocol DefaultProtocol - { - get { return (Protocol) defaultProtocolCombobox.SelectedValue; } - set { defaultProtocolCombobox.SelectedValue = value; } - } - - public string CurrentLocale - { - get { return (string) languageComboBox.SelectedValue; } - set { languageComboBox.SelectedValue = value; } - } - - public void PopulateLocales(IList> locales) - { - languageComboBox.DataSource = locales; - languageComboBox.ValueMember = "Key"; - languageComboBox.DisplayMember = "Value"; - } - - public event VoidHandler AnonymousPasswordChangedEvent = delegate { }; - public event VoidHandler DefaultTransferModeChangedEvent = delegate { }; - public event VoidHandler LineEndingChangedEvent = delegate { }; - public event VoidHandler TextFileTypeRegexChangedEvent = delegate { }; - public event VoidHandler SecureDataChannelChangedEvent = delegate { }; - public event VoidHandler FailInsecureDataChannelChangedEvent = delegate { }; - - private void generalButton_Click(object sender, EventArgs e) - { - if (!generalButton.Checked) - { - DisableAll(); - generalButton.Checked = true; - panelManager.SelectedPanel = managedGeneralPanel; - } - } - - private void DisableAll() - { - foreach (var item in toolStrip.Items) - { - if (item is ToolStripButton) - { - (item as ToolStripButton).Checked = false; - } - } - } - - private void saveWorkspaceCheckbox_CheckedChanged(object sender, EventArgs e) - { - SaveWorkspaceChangedEvent(); - } - - private void newBrowserOnStartupCheckbox_CheckedChanged(object sender, EventArgs e) - { - NewBrowserOnStartupChangedEvent(); - } - - private void connectBookmarkCombobox_SelectionChangeCommitted(object sender, EventArgs e) - { - DefaultBookmarkChangedEvent(); - } - - private void keychainCheckbox_CheckedChanged(object sender, EventArgs e) - { - UseKeychainChangedEvent(); - } - - private void confirmDisconnectCheckbox_CheckedChanged(object sender, EventArgs e) - { - ConfirmDisconnectChangedEvent(); - } - - private void defaultProtocolCombobox_SelectionChangeCommitted(object sender, EventArgs e) - { - DefaultProtocolChangedEvent(); - } - - private void defaultEncodingCombobox_SelectionChangeCommitted(object sender, EventArgs e) - { - DefaultEncodingChangedEvent(); - } - - private void showHiddenFilesCheckbox_CheckedChanged(object sender, EventArgs e) - { - ShowHiddenFilesChangedEvent(); - } - - private void doubleClickEditorCheckbox_CheckedChanged(object sender, EventArgs e) - { - DoubleClickEditorChangedEvent(); - } - - private void returnKeyCheckbox_CheckedChanged(object sender, EventArgs e) - { - ReturnKeyRenamesChangedEvent(); - } - - private void infoWindowCheckbox_CheckedChanged(object sender, EventArgs e) - { - InfoWindowShowsCurrentSelectionChangedEvent(); - } - - private void alternatingRowsCheckbox_CheckedChanged(object sender, EventArgs e) - { - AlternatingRowBackgroundChangedEvent(); - } - - private void horizontalLinesCheckbox_CheckedChanged(object sender, EventArgs e) - { - HorizontalLinesChangedEvent(); - } - - private void verticalLinesCheckbox_CheckedChanged(object sender, EventArgs e) - { - VerticalLinesChangedEvent(); - } - - private void transfersButton_Click(object sender, EventArgs e) - { - if (!transfersButton.Checked) - { - DisableAll(); - transfersButton.Checked = true; - panelManager.SelectedPanel = managedTransfersPanel; - } - } - - private void transferFilesCombobox_SelectionChangeCommitted(object sender, EventArgs e) - { - TransferModeChangedEvent(); - } - - private void transfersToFrontCheckbox_CheckedChanged(object sender, EventArgs e) - { - TransfersToFrontChangedEvent(); - } - - private void transfersToBackCheckbox_CheckedChanged(object sender, EventArgs e) - { - TransfersToBackChangedEvent(); - } - - private void removeFromTransfersCheckbox_CheckedChanged(object sender, EventArgs e) - { - RemoveFromTransfersChangedEvent(); - } - - private void openAfterDownloadCheckbox_CheckedChanged(object sender, EventArgs e) - { - OpenAfterDownloadChangedEvent(); - } - - private void showDownloadFolderDialogButton_Click(object sender, EventArgs e) - { - downloadFolderBrowserDialog.SelectedPath = DownloadFolder; - if (downloadFolderBrowserDialog.ShowDialog() == DialogResult.OK) - { - DownloadFolder = downloadFolderBrowserDialog.SelectedPath; - DownloadFolderChangedEvent(); - } - } - - private void duplicateDownloadCombobox_SelectionChangeCommitted(object sender, EventArgs e) - { - DuplicateDownloadActionChangedEvent(); - } - - private void duplicateUploadCombobox_SelectionChangeCommitted(object sender, EventArgs e) - { - DuplicateUploadActionChangedEvent(); - } - - private void duplicateDownloadOverwriteCheckbox_CheckedChanged(object sender, EventArgs e) - { - DuplicateDownloadOverwriteChangedEvent(); - } - - private void duplicateUploadOverwriteCheckbox_CheckedChanged(object sender, EventArgs e) - { - DuplicateUploadOverwriteChangedEvent(); - } - - private void chmodDownloadCheckbox_CheckedChanged(object sender, EventArgs e) - { - ChmodDownloadChangedEvent(); - } - - private void chmodUploadCheckbox_CheckedChanged(object sender, EventArgs e) - { - ChmodUploadChangedEvent(); - } - - private void chmodDownloadDefaultRadioButton_CheckedChanged(object sender, EventArgs e) - { - ChmodDownloadUseDefaultChangedEvent(); - } - - private void chmodUploadDefaultRadioButton_CheckedChanged(object sender, EventArgs e) - { - ChmodUploadUseDefaultChangedEvent(); - } - - private void chmodDownloadTypeCombobox_SelectionChangeCommitted(object sender, EventArgs e) - { - ChmodDownloadTypeChangedEvent(); - } - - private void chmodUploadTypeCombobox_SelectionChangeCommitted(object sender, EventArgs e) - { - ChmodUploadTypeChangedEvent(); - } - - private void downerrCheckbox_CheckedChanged(object sender, EventArgs e) - { - DownloadOwnerReadChangedEvent(); - } - - private void uownerrCheckbox_CheckedChanged(object sender, EventArgs e) - { - UploadOwnerReadChangedEvent(); - } - - private void downerwCheckbox_CheckedChanged(object sender, EventArgs e) - { - DownloadOwnerWriteChangedEvent(); - } - - private void uownerwCheckbox_CheckedChanged(object sender, EventArgs e) - { - UploadOwnerWriteChangedEvent(); - } - - private void downerxCheckbox_CheckedChanged(object sender, EventArgs e) - { - DownloadOwnerExecuteChangedEvent(); - } - - private void uownerxCheckbox_CheckedChanged(object sender, EventArgs e) - { - UploadOwnerExecuteChangedEvent(); - } - - private void dgrouprCheckbox_CheckedChanged(object sender, EventArgs e) - { - DownloadGroupReadChangedEvent(); - } - - private void ugrouprCheckbox_CheckedChanged(object sender, EventArgs e) - { - UploadGroupReadChangedEvent(); - } - - private void dgroupwCheckbox_CheckedChanged(object sender, EventArgs e) - { - DownloadGroupWriteChangedEvent(); - } - - private void ugroupwCheckbox_CheckedChanged(object sender, EventArgs e) - { - UploadGroupWriteChangedEvent(); - } - - private void dgroupxCheckbox_CheckedChanged(object sender, EventArgs e) - { - DownloadGroupExecuteChangedEvent(); - } - - private void ugroupxCheckbox_CheckedChanged(object sender, EventArgs e) - { - UploadGroupExecuteChangedEvent(); - } - - private void dotherrCheckbox_CheckedChanged(object sender, EventArgs e) - { - DownloadOtherReadChangedEvent(); - } - - private void uotherrCheckbox_CheckedChanged(object sender, EventArgs e) - { - UploadOtherReadChangedEvent(); - } - - private void dotherwCheckbox_CheckedChanged(object sender, EventArgs e) - { - DownloadOtherWriteChangedEvent(); - } - - private void uotherwCheckbox_CheckedChanged(object sender, EventArgs e) - { - UploadOtherWriteChangedEvent(); - } - - private void dotherxCheckbox_CheckedChanged(object sender, EventArgs e) - { - DownloadOtherReadChangedEvent(); - } - - private void uotherxCheckbox_CheckedChanged(object sender, EventArgs e) - { - UploadOtherReadChangedEvent(); - } - - private void preserveModificationDownloadCheckbox_CheckedChanged(object sender, EventArgs e) - { - PreserveModificationDownloadChangedEvent(); - } - - private void preserveModificationUploadCheckbox_CheckedChanged(object sender, EventArgs e) - { - PreserveModificationUploadChangedEvent(); - } - - private void downloadSkipRegexRichTextbox_TextChanged(object sender, EventArgs e) - { - DownloadSkipRegexChangedEvent(); - } - - private void downloadSkipCheckbox_CheckedChanged(object sender, EventArgs e) - { - DownloadSkipChangedEvent(); - } - - private void downloadSkipRegexDefaultButton_Click(object sender, EventArgs e) - { - DownloadSkipRegexDefaultEvent(); - } - - private void uploadSkipCheckbox_CheckedChanged(object sender, EventArgs e) - { - UploadSkipChangedEvent(); - } - - private void uploadSkipRegexRichTextbox_TextChanged(object sender, EventArgs e) - { - UploadSkipRegexChangedEvent(); - } - - private void uploadSkipRegexDefaultButton_Click(object sender, EventArgs e) - { - UploadSkipRegexDefaultEvent(); - } - - private void sftpButton_Click(object sender, EventArgs e) - { - if (!sftpButton.Checked) - { - DisableAll(); - sftpButton.Checked = true; - panelManager.SelectedPanel = managedSftpPanel; - } - } - - private void s3Button_Click(object sender, EventArgs e) - { - if (!s3Button.Checked) - { - DisableAll(); - s3Button.Checked = true; - panelManager.SelectedPanel = managedS3Panel; - } - } - - private void defaultBucketLocationCombobox_SelectionChangeCommitted(object sender, EventArgs e) - { - DefaultBucketLocationChangedEvent(); - } - - private void bandwidthButton_Click(object sender, EventArgs e) - { - if (!bandwidthButton.Checked) - { - DisableAll(); - bandwidthButton.Checked = true; - panelManager.SelectedPanel = managedBandwidthPanel; - } - } - - private void defaultDownloadThrottleCombobox_SelectionChangeCommitted(object sender, EventArgs e) - { - DefaultDownloadThrottleChangedEvent(); - } - - private void defaultUploadThrottleCombobox_SelectionChangeCommitted(object sender, EventArgs e) - { - DefaultUploadThrottleChangedEvent(); - } - - private void connectionButton_Click(object sender, EventArgs e) - { - if (!connectionButton.Checked) - { - DisableAll(); - connectionButton.Checked = true; - panelManager.SelectedPanel = managedConnectionPanel; - } - } - - private void retryCheckbox_CheckedChanged(object sender, EventArgs e) - { - if (retryCheckbox.Checked && retriesUpDown.Value == 0) - { - Retries = 1; - } - if (!retryCheckbox.Checked && retriesUpDown.Value != 0) - { - Retries = 0; - } - } - - private void connectionTimeoutUpDown_ValueChanged(object sender, EventArgs e) - { - ConnectionTimeoutChangedEvent(); - } - - private void retryDelayUpDown_ValueChanged(object sender, EventArgs e) - { - RetryDelayChangedEvent(); - } - - private void retriesUpDown_ValueChanged(object sender, EventArgs e) - { - if (Retries == 0 && retryCheckbox.Checked) - { - retryCheckbox.Checked = false; - } - if (Retries > 0 && !retryCheckbox.Checked) - { - retryCheckbox.Checked = true; - } - RetriesChangedEvent(); - } - - private void defaultStorageClassComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - DefaultStorageClassChangedEvent(); - } - - private void googleDocsButton_Click(object sender, EventArgs e) - { - if (!googleDocsButton.Checked) - { - DisableAll(); - googleDocsButton.Checked = true; - panelManager.SelectedPanel = managedGoogleDocsPanel; - } - } - - private void updateButton_Click(object sender, EventArgs e) - { - if (!updateButton.Checked) - { - DisableAll(); - updateButton.Checked = true; - panelManager.SelectedPanel = managedUpdatePanel; - } - } - - private void languageButton_Click(object sender, EventArgs e) - { - if (!languageButton.Checked) - { - DisableAll(); - languageButton.Checked = true; - panelManager.SelectedPanel = managedLanguagePanel; - } - } - - private void gdDocumentsComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - DocumentExportFormatChanged(); - } - - private void gdPresentationsComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - PresentationExportFormatChanged(); - } - - private void gdSpreadsheetsComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - SpreadsheetExportFormatChanged(); - } - - private void gdConvertCheckBox_CheckedChanged(object sender, EventArgs e) - { - ConvertUploadsChanged(); - } - - private void gdOCRcheckBox_CheckedChanged(object sender, EventArgs e) - { - OcrUploadsChanged(); - } - - private void languageComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - LocaleChanged(); - } - - private void updateCheckBox_CheckedChanged(object sender, EventArgs e) - { - AutomaticUpdateChangedEvent(); - } - - private void updateCheckButton_Click(object sender, EventArgs e) - { - CheckForUpdateEvent(); - } - - private void systemProxyCheckBox_CheckStateChanged(object sender, EventArgs e) - { - UseSystemProxyChangedEvent(); - } - - private void uploadTemporaryNameCheckBox_CheckedChanged(object sender, EventArgs e) - { - UploadWithTemporaryFilenameChangedEvent(); - } - - private void updateFeedComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - UpdateFeedChangedEvent(); - } - - private void changeSystemProxyButton_Click(object sender, EventArgs e) - { - ChangeSystemProxyEvent(); - } - - private void editStripButton_Click(object sender, EventArgs e) - { - if (!editStripButton.Checked) - { - DisableAll(); - editStripButton.Checked = true; - panelManager.SelectedPanel = managedEditorPanel; - } - } - - private void editorComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - Application selected = DefaultEditor; - if (selected != null && selected.getIdentifier() == null) - { - //choose dialog - editorOpenFileDialog.FileName = null; - DialogResult result = editorOpenFileDialog.ShowDialog(); - if (result == DialogResult.OK) - { - PreferencesFactory.get() - .setProperty("editor.bundleIdentifier", editorOpenFileDialog.FileName.ToLower()); - RepopulateEditorsEvent(); - } - else - { - if (_lastSelectedEditor != null) - { - DefaultEditor = _lastSelectedEditor; - } - else - { - //dummy editor which leads to an empty selection - DefaultEditor = new Application(null, null); - } - } - } - else - { - _lastSelectedEditor = DefaultEditor; - DefaultEditorChangedEvent(); - } - } - - private void alwaysUseDefaultEditorCheckBox_CheckedChanged(object sender, EventArgs e) - { - AlwaysUseDefaultEditorChangedEvent(); - } - - private void defaultEncryptionComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - DefaultEncryptionChangedEvent(); - } - - private void browserButton_Click(object sender, EventArgs e) - { - if (!browserButton.Checked) - { - DisableAll(); - browserButton.Checked = true; - panelManager.SelectedPanel = managedBrowserPanel; - } - } - - private void bookmarkSizeComboBox_SelectionChangeCommitted(object sender, EventArgs e) - { - BookmarkSizeChangedEvent(); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using ch.cyberduck.core; +using ch.cyberduck.core.preferences; +using Ch.Cyberduck.Ui.Controller; +using Ch.Cyberduck.Ui.Winforms.Controls; +using Application = ch.cyberduck.core.local.Application; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class PreferencesForm : BaseForm, IPreferencesView + { + private const int MaxHeight = 800; + private const int MaxWidth = 1000; + private const int MinHeight = 250; + private const int MinWidth = 450; + private Application _lastSelectedEditor; + + public PreferencesForm() + { + InitializeComponent(); + + Load += delegate + { + int newWidth = 10; // border etc. + foreach (ToolStripItem item in toolStrip.Items) + { + newWidth += item.Size.Width + item.Margin.Left + item.Margin.Right; + } + Width = newWidth; + }; + + MaximumSize = new Size(MaxWidth, MaxHeight); + MinimumSize = new Size(MinWidth, MinHeight); + + sftpButton.Image = IconCache.Instance.IconForName("ftp", 32); + s3Button.Image = IconCache.Instance.IconForName("s3", 32); + googleDocsButton.Image = IconCache.Instance.IconForName("googledrive", 32); + + connectBookmarkCombobox.ICImageList = IconCache.Instance.GetProtocolIcons(); + defaultProtocolCombobox.ICImageList = IconCache.Instance.GetProtocolIcons(); + + showDownloadFolderDialogButton.Text = LocaleFactory.localizedString("Choose") + "…"; + + #region Font Settings + + Font smallerFont = new Font(Font.FontFamily, Font.Size - 1); + Font smallerAndBoldFont = new Font(Font.FontFamily, Font.Size - 1, FontStyle.Bold); + + #region Transfers Panel + + // Permissions Tab + chmodDownloadCustomRadioButton.Font = smallerFont; + chmodDownloadDefaultRadioButton.Font = smallerFont; + chmodDownloadTypeCombobox.Font = smallerFont; + ownerDownloadLabel.Font = smallerAndBoldFont; + othersDownloadLabel.Font = smallerAndBoldFont; + groupDownloadLabel.Font = smallerAndBoldFont; + downerrCheckbox.Font = smallerFont; + downerwCheckbox.Font = smallerFont; + downerxCheckbox.Font = smallerFont; + dgrouprCheckbox.Font = smallerFont; + dgroupwCheckbox.Font = smallerFont; + dgroupxCheckbox.Font = smallerFont; + dotherrCheckbox.Font = smallerFont; + dotherwCheckbox.Font = smallerFont; + dotherxCheckbox.Font = smallerFont; + + chmodUploadCustomRadioButton.Font = smallerFont; + chmodUploadDefaultRadioButton.Font = smallerFont; + chmodUploadTypeCombobox.Font = smallerFont; + ownerUploadLabel.Font = smallerAndBoldFont; + othersUploadLabel.Font = smallerAndBoldFont; + groupUploadLabel.Font = smallerAndBoldFont; + uownerrCheckbox.Font = smallerFont; + uownerwCheckbox.Font = smallerFont; + uownerxCheckbox.Font = smallerFont; + ugrouprCheckbox.Font = smallerFont; + ugroupwCheckbox.Font = smallerFont; + ugroupxCheckbox.Font = smallerFont; + uotherrCheckbox.Font = smallerFont; + uotherwCheckbox.Font = smallerFont; + uotherxCheckbox.Font = smallerFont; + + downloadSkipRegexDefaultButton.Font = smallerFont; + uploadSkipRegexDefaultButton.Font = smallerFont; + + #endregion + + #endregion + + generalButton_Click(this, EventArgs.Empty); + toolStrip.Renderer = new FirefoxStyleRenderer(); + + //todo + CenterToParent(); + } + + public override string[] BundleNames + { + get { return new[] {"Preferences"}; } + } + + public Application DefaultEditor + { + get { return (Application) editorComboBox.SelectedValue; } + set + { + editorComboBox.SelectedValue = value; + _lastSelectedEditor = value; + } + } + + public bool SaveWorkspace + { + get { return saveWorkspaceCheckbox.Checked; } + set { saveWorkspaceCheckbox.Checked = value; } + } + + public bool NewBrowserOnStartup + { + get { return newBrowserOnStartupCheckbox.Checked; } + set { newBrowserOnStartupCheckbox.Checked = value; } + } + + public Host DefaultBookmark + { + get { return (Host) connectBookmarkCombobox.SelectedValue; } + set + { + if (null != value) + { + connectBookmarkCombobox.SelectedValue = value; + } + else + { + // None entry + connectBookmarkCombobox.SelectedIndex = 0; + } + } + } + + public bool UseKeychain + { + get { return keychainCheckbox.Checked; } + set { keychainCheckbox.Checked = value; } + } + + public bool ConfirmDisconnect + { + get { return confirmDisconnectCheckbox.Checked; } + set { confirmDisconnectCheckbox.Checked = value; } + } + + public bool AlwaysUseDefaultEditor + { + get { return alwaysUseDefaultEditorCheckBox.Checked; } + set { alwaysUseDefaultEditorCheckBox.Checked = value; } + } + + public bool ShowHiddenFiles + { + get { return showHiddenFilesCheckbox.Checked; } + set { showHiddenFilesCheckbox.Checked = value; } + } + + public bool DoubleClickEditor + { + get { return doubleClickEditorCheckbox.Checked; } + set { doubleClickEditorCheckbox.Checked = value; } + } + + public bool ReturnKeyRenames + { + get { return returnKeyCheckbox.Checked; } + set { returnKeyCheckbox.Checked = value; } + } + + public bool InfoWindowShowsCurrentSelection + { + get { return infoWindowCheckbox.Checked; } + set { infoWindowCheckbox.Checked = value; } + } + + public bool AlternatingRowBackground + { + get { return false; } + set { ; } + } + + public bool HorizontalLines + { + get { return false; } + set { ; } + } + + public bool VerticalLines + { + get { return false; } + set { ; } + } + + public string DefaultEncoding + { + get { return defaultEncodingCombobox.Text; } + set { defaultEncodingCombobox.Text = value; } + } + + public Host.TransferType TransferMode + { + get { return (Host.TransferType) transferFilesCombobox.SelectedValue; } + set { transferFilesCombobox.SelectedValue = value; } + } + + public bool TransfersToFront + { + get { return transfersToFrontCheckbox.Checked; } + set { transfersToFrontCheckbox.Checked = value; } + } + + public bool TransfersToBack + { + get { return transfersToBackCheckbox.Checked; } + set { transfersToBackCheckbox.Checked = value; } + } + + public bool RemoveFromTransfers + { + get { return removeFromTransfersCheckbox.Checked; } + set { removeFromTransfersCheckbox.Checked = value; } + } + + public bool OpenAfterDownload + { + get { return openAfterDownloadCheckbox.Checked; } + set { openAfterDownloadCheckbox.Checked = value; } + } + + public string DownloadFolder + { + get { return downloadFolderLabel.Text; } + set { downloadFolderLabel.Text = value; } + } + + public string DuplicateDownloadAction + { + get { return duplicateDownloadCombobox.Text; } + set { duplicateDownloadCombobox.Text = value; } + } + + public string DuplicateUploadAction + { + get { return duplicateUploadCombobox.Text; } + set { duplicateUploadCombobox.Text = value; } + } + + public bool DuplicateDownloadOverwrite + { + get { return duplicateDownloadOverwriteCheckbox.Checked; } + set { duplicateDownloadOverwriteCheckbox.Checked = value; } + } + + public bool DuplicateUploadOverwrite + { + get { return duplicateUploadOverwriteCheckbox.Checked; } + set { duplicateUploadOverwriteCheckbox.Checked = value; } + } + + public bool UploadWithTemporaryFilename + { + get { return uploadTemporaryNameCheckBox.Checked; } + set { uploadTemporaryNameCheckBox.Checked = value; } + } + + public bool ChmodDownload + { + get { return chmodDownloadCheckbox.Checked; } + set { chmodDownloadCheckbox.Checked = value; } + } + + public bool ChmodDownloadUseDefault + { + get { return chmodDownloadDefaultRadioButton.Checked; } + set + { + chmodDownloadDefaultRadioButton.Checked = value; + chmodDownloadCustomRadioButton.Checked = !value; + } + } + + public string ChmodDownloadType + { + get { return chmodDownloadTypeCombobox.Text; } + set { chmodDownloadTypeCombobox.Text = value; } + } + + public bool DownloadOwnerRead + { + get { return downerrCheckbox.Checked; } + set { downerrCheckbox.Checked = value; } + } + + public bool DownloadOwnerWrite + { + get { return downerwCheckbox.Checked; } + set { downerwCheckbox.Checked = value; } + } + + public bool DownloadOwnerExecute + { + get { return downerxCheckbox.Checked; } + set { downerxCheckbox.Checked = value; } + } + + public bool DownloadGroupRead + { + get { return dgrouprCheckbox.Checked; } + set { dgrouprCheckbox.Checked = value; } + } + + public bool DownloadGroupWrite + { + get { return dgroupwCheckbox.Checked; } + set { dgroupwCheckbox.Checked = value; } + } + + public bool DownloadGroupExecute + { + get { return dgroupxCheckbox.Checked; } + set { dgroupxCheckbox.Checked = value; } + } + + public bool DownloadOtherRead + { + get { return dotherrCheckbox.Checked; } + set { dotherrCheckbox.Checked = value; } + } + + public bool DownloadOtherWrite + { + get { return dotherwCheckbox.Checked; } + set { dotherwCheckbox.Checked = value; } + } + + public bool DownloadOtherExecute + { + get { return dotherxCheckbox.Checked; } + set { dotherxCheckbox.Checked = value; } + } + + public bool ChmodDownloadEnabled + { + set + { + chmodDownloadCustomRadioButton.Enabled = value; + chmodDownloadDefaultRadioButton.Enabled = value; + chmodDownloadTypeCombobox.Enabled = value; + ChmodDownloadDefaultEnabled = value; + } + } + + public bool ChmodDownloadDefaultEnabled + { + set + { + downerrCheckbox.Enabled = value; + downerwCheckbox.Enabled = value; + downerxCheckbox.Enabled = value; + dgrouprCheckbox.Enabled = value; + dgroupwCheckbox.Enabled = value; + dgroupxCheckbox.Enabled = value; + dotherrCheckbox.Enabled = value; + dotherwCheckbox.Enabled = value; + dotherxCheckbox.Enabled = value; + } + } + + public bool ChmodUpload + { + get { return chmodUploadCheckbox.Checked; } + set { chmodUploadCheckbox.Checked = value; } + } + + public bool ChmodUploadUseDefault + { + get { return chmodUploadDefaultRadioButton.Checked; } + set + { + chmodUploadDefaultRadioButton.Checked = value; + chmodUploadCustomRadioButton.Checked = !value; + } + } + + public string ChmodUploadType + { + get { return chmodUploadTypeCombobox.Text; } + set { chmodUploadTypeCombobox.Text = value; } + } + + public bool UploadOwnerRead + { + get { return uownerrCheckbox.Checked; } + set { uownerrCheckbox.Checked = value; } + } + + public bool UploadOwnerWrite + { + get { return uownerwCheckbox.Checked; } + set { uownerwCheckbox.Checked = value; } + } + + public bool UploadOwnerExecute + { + get { return uownerxCheckbox.Checked; } + set { uownerxCheckbox.Checked = value; } + } + + public bool UploadGroupRead + { + get { return ugrouprCheckbox.Checked; } + set { ugrouprCheckbox.Checked = value; } + } + + public bool UploadGroupWrite + { + get { return ugroupwCheckbox.Checked; } + set { ugroupwCheckbox.Checked = value; } + } + + public bool UploadGroupExecute + { + get { return ugroupxCheckbox.Checked; } + set { ugroupxCheckbox.Checked = value; } + } + + public bool UploadOtherRead + { + get { return uotherrCheckbox.Checked; } + set { uotherrCheckbox.Checked = value; } + } + + public bool UploadOtherWrite + { + get { return uotherwCheckbox.Checked; } + set { uotherwCheckbox.Checked = value; } + } + + public bool UploadOtherExecute + { + get { return uotherxCheckbox.Checked; } + set { uotherxCheckbox.Checked = value; } + } + + public bool ChmodUploadEnabled + { + set + { + chmodUploadCustomRadioButton.Enabled = value; + chmodUploadDefaultRadioButton.Enabled = value; + chmodUploadTypeCombobox.Enabled = value; + ChmodUploadDefaultEnabled = value; + } + } + + public bool ChmodUploadDefaultEnabled + { + set + { + uownerrCheckbox.Enabled = value; + uownerwCheckbox.Enabled = value; + uownerxCheckbox.Enabled = value; + ugrouprCheckbox.Enabled = value; + ugroupwCheckbox.Enabled = value; + ugroupxCheckbox.Enabled = value; + uotherrCheckbox.Enabled = value; + uotherwCheckbox.Enabled = value; + uotherxCheckbox.Enabled = value; + } + } + + public bool PreserveModificationDownload + { + get { return preserveModificationDownloadCheckbox.Checked; } + set { preserveModificationDownloadCheckbox.Checked = value; } + } + + public bool PreserveModificationUpload + { + get { return preserveModificationUploadCheckbox.Checked; } + set { preserveModificationUploadCheckbox.Checked = value; } + } + + public bool DownloadSkip + { + get { return downloadSkipCheckbox.Checked; } + set { downloadSkipCheckbox.Checked = value; } + } + + public string DownloadSkipRegex + { + get { return downloadSkipRegexRichTextbox.Text; } + set { downloadSkipRegexRichTextbox.Text = value; } + } + + public bool DownloadSkipRegexEnabled + { + set { downloadSkipRegexRichTextbox.Enabled = value; } + } + + public void MarkDownloadSkipRegex(int position) + { + int currentPos = downloadSkipRegexRichTextbox.SelectionStart; + if (position >= 0) + { + downloadSkipRegexRichTextbox.SelectionStart = position; + downloadSkipRegexRichTextbox.SelectionLength = 1; + downloadSkipRegexRichTextbox.SelectionColor = Color.Red; + } + else + { + downloadSkipRegexRichTextbox.SelectionStart = 0; + downloadSkipRegexRichTextbox.SelectionLength = downloadSkipRegexRichTextbox.TextLength; + downloadSkipRegexRichTextbox.SelectionColor = Color.Black; + } + downloadSkipRegexRichTextbox.SelectionStart = currentPos; + downloadSkipRegexRichTextbox.SelectionLength = 0; + downloadSkipRegexRichTextbox.SelectionColor = Color.Black; + } + + public bool UploadSkip + { + get { return uploadSkipCheckbox.Checked; } + set { uploadSkipCheckbox.Checked = value; } + } + + public string UploadSkipRegex + { + get { return uploadSkipRegexRichTextbox.Text; } + set { uploadSkipRegexRichTextbox.Text = value; } + } + + public bool UploadSkipRegexEnabled + { + set { uploadSkipRegexRichTextbox.Enabled = value; } + } + + public void MarkUploadSkipRegex(int position) + { + int currentPos = uploadSkipRegexRichTextbox.SelectionStart; + if (position >= 0) + { + uploadSkipRegexRichTextbox.SelectionStart = position; + uploadSkipRegexRichTextbox.SelectionLength = 1; + uploadSkipRegexRichTextbox.SelectionColor = Color.Red; + } + else + { + uploadSkipRegexRichTextbox.SelectionStart = 0; + uploadSkipRegexRichTextbox.SelectionLength = uploadSkipRegexRichTextbox.TextLength; + uploadSkipRegexRichTextbox.SelectionColor = Color.Black; + } + uploadSkipRegexRichTextbox.SelectionStart = currentPos; + uploadSkipRegexRichTextbox.SelectionLength = 0; + uploadSkipRegexRichTextbox.SelectionColor = Color.Black; + } + + public string DefaultBucketLocation + { + get { return (string) defaultBucketLocationCombobox.SelectedValue; } + set { defaultBucketLocationCombobox.SelectedValue = value; } + } + + public string DefaultEncryption + { + get { return (string) defaultEncryptionComboBox.SelectedValue; } + set { defaultEncryptionComboBox.SelectedValue = value; } + } + + public float DefaultDownloadThrottle + { + get { return (float) defaultDownloadThrottleCombobox.SelectedValue; } + set { defaultDownloadThrottleCombobox.SelectedValue = value; } + } + + public float DefaultUploadThrottle + { + get { return (float) defaultUploadThrottleCombobox.SelectedValue; } + set { defaultUploadThrottleCombobox.SelectedValue = value; } + } + + public int ConnectionTimeout + { + get { return Convert.ToInt32(connectionTimeoutUpDown.Value); } + set { connectionTimeoutUpDown.Value = value; } + } + + public int RetryDelay + { + get { return Convert.ToInt32(retryDelayUpDown.Value); } + set { retryDelayUpDown.Value = value; } + } + + public int Retries + { + get { return Convert.ToInt32(retriesUpDown.Value); } + set + { + retriesUpDown.Value = value; + retryCheckbox.Checked = value != 0; + } + } + + public string LastUpdateCheck + { + set { lastUpdateLabel.Text = value; } + } + + public string UpdateFeed + { + get { return (string) updateFeedComboBox.SelectedValue; } + set { updateFeedComboBox.SelectedValue = value; } + } + + public bool UseSystemProxy + { + get { return systemProxyCheckBox.Checked; } + set { systemProxyCheckBox.Checked = value; } + } + + public event VoidHandler UseSystemProxyChangedEvent = delegate { }; + public event VoidHandler ChangeSystemProxyEvent = delegate { }; + public event VoidHandler SaveWorkspaceChangedEvent = delegate { }; + public event VoidHandler NewBrowserOnStartupChangedEvent = delegate { }; + public event VoidHandler DefaultBookmarkChangedEvent = delegate { }; + public event VoidHandler UseKeychainChangedEvent = delegate { }; + public event VoidHandler ConfirmDisconnectChangedEvent = delegate { }; + public event VoidHandler DefaultProtocolChangedEvent = delegate { }; + public event VoidHandler ShowHiddenFilesChangedEvent = delegate { }; + public event VoidHandler DoubleClickEditorChangedEvent = delegate { }; + public event VoidHandler ReturnKeyRenamesChangedEvent = delegate { }; + public event VoidHandler InfoWindowShowsCurrentSelectionChangedEvent = delegate { }; + public event VoidHandler AlternatingRowBackgroundChangedEvent = delegate { }; + public event VoidHandler HorizontalLinesChangedEvent = delegate { }; + public event VoidHandler VerticalLinesChangedEvent = delegate { }; + public event VoidHandler DefaultEncodingChangedEvent = delegate { }; + public event VoidHandler TransferModeChangedEvent = delegate { }; + public event VoidHandler TransfersToFrontChangedEvent = delegate { }; + public event VoidHandler TransfersToBackChangedEvent = delegate { }; + public event VoidHandler RemoveFromTransfersChangedEvent = delegate { }; + public event VoidHandler OpenAfterDownloadChangedEvent = delegate { }; + public event VoidHandler DownloadFolderChangedEvent = delegate { }; + public event VoidHandler DuplicateDownloadActionChangedEvent = delegate { }; + public event VoidHandler DuplicateUploadActionChangedEvent = delegate { }; + public event VoidHandler DuplicateDownloadOverwriteChangedEvent = delegate { }; + public event VoidHandler DuplicateUploadOverwriteChangedEvent = delegate { }; + public event VoidHandler DefaultEditorChangedEvent = delegate { }; + public event VoidHandler RepopulateEditorsEvent = delegate { }; + public event VoidHandler AlwaysUseDefaultEditorChangedEvent = delegate { }; + public event VoidHandler ChmodDownloadChangedEvent = delegate { }; + public event VoidHandler ChmodDownloadUseDefaultChangedEvent = delegate { }; + public event VoidHandler ChmodDownloadTypeChangedEvent = delegate { }; + public event VoidHandler DownloadOwnerReadChangedEvent = delegate { }; + public event VoidHandler DownloadOwnerWriteChangedEvent = delegate { }; + public event VoidHandler DownloadOwnerExecuteChangedEvent = delegate { }; + public event VoidHandler DownloadGroupReadChangedEvent = delegate { }; + public event VoidHandler DownloadGroupWriteChangedEvent = delegate { }; + public event VoidHandler DownloadGroupExecuteChangedEvent = delegate { }; + public event VoidHandler DownloadOtherReadChangedEvent = delegate { }; + public event VoidHandler DownloadOtherWriteChangedEvent = delegate { }; + public event VoidHandler DownloadOtherExecuteChangedEvent = delegate { }; + public event VoidHandler ChmodUploadChangedEvent = delegate { }; + public event VoidHandler ChmodUploadUseDefaultChangedEvent = delegate { }; + public event VoidHandler ChmodUploadTypeChangedEvent = delegate { }; + public event VoidHandler UploadOwnerReadChangedEvent = delegate { }; + public event VoidHandler UploadOwnerWriteChangedEvent = delegate { }; + public event VoidHandler UploadOwnerExecuteChangedEvent = delegate { }; + public event VoidHandler UploadGroupReadChangedEvent = delegate { }; + public event VoidHandler UploadGroupWriteChangedEvent = delegate { }; + public event VoidHandler UploadGroupExecuteChangedEvent = delegate { }; + public event VoidHandler UploadOtherReadChangedEvent = delegate { }; + public event VoidHandler UploadOtherWriteChangedEvent = delegate { }; + public event VoidHandler UploadOtherExecuteChangedEvent = delegate { }; + public event VoidHandler PreserveModificationDownloadChangedEvent = delegate { }; + public event VoidHandler PreserveModificationUploadChangedEvent = delegate { }; + public event VoidHandler DownloadSkipChangedEvent = delegate { }; + public event VoidHandler DownloadSkipRegexChangedEvent = delegate { }; + public event VoidHandler DownloadSkipRegexDefaultEvent = delegate { }; + public event VoidHandler UploadSkipChangedEvent = delegate { }; + public event VoidHandler UploadSkipRegexChangedEvent = delegate { }; + public event VoidHandler UploadSkipRegexDefaultEvent = delegate { }; + public event VoidHandler DefaultBucketLocationChangedEvent = delegate { }; + public event VoidHandler DefaultEncryptionChangedEvent = delegate { }; + public event VoidHandler DefaultDownloadThrottleChangedEvent = delegate { }; + public event VoidHandler DefaultUploadThrottleChangedEvent = delegate { }; + public event VoidHandler ConnectionTimeoutChangedEvent = delegate { }; + public event VoidHandler RetryDelayChangedEvent = delegate { }; + public event VoidHandler RetriesChangedEvent = delegate { }; + public event VoidHandler DefaultStorageClassChangedEvent = delegate { }; + public event VoidHandler LocaleChanged = delegate { }; + public event VoidHandler UploadWithTemporaryFilenameChangedEvent = delegate { }; + public event VoidHandler UpdateFeedChangedEvent = delegate { }; + public event VoidHandler BookmarkSizeChangedEvent = delegate { }; + + public bool AutomaticUpdateCheck + { + get { return updateCheckBox.Checked; } + set { updateCheckBox.Checked = value; } + } + + public event VoidHandler AutomaticUpdateChangedEvent = delegate { }; + public event VoidHandler CheckForUpdateEvent; + + public string DocumentExportFormat + { + get { return (string) gdDocumentsComboBox.SelectedValue; } + set { gdDocumentsComboBox.SelectedValue = value; } + } + + public string PresentationExportFormat + { + get { return (string) gdPresentationsComboBox.SelectedValue; } + set { gdPresentationsComboBox.SelectedValue = value; } + } + + public int BookmarkSize + { + get { return (int) bookmarkSizeComboBox.SelectedValue; } + set { bookmarkSizeComboBox.SelectedValue = value; } + } + + public string SpreadsheetExportFormat + { + get { return (string) gdSpreadsheetsComboBox.SelectedValue; } + set { gdSpreadsheetsComboBox.SelectedValue = value; } + } + + public bool ConvertUploads + { + get { return gdConvertCheckBox.Checked; } + set { gdConvertCheckBox.Checked = value; } + } + + public bool OcrUploads + { + get { return gdOCRcheckBox.Checked; } + set { gdOCRcheckBox.Checked = value; } + } + + public event VoidHandler DocumentExportFormatChanged = delegate { }; + public event VoidHandler PresentationExportFormatChanged = delegate { }; + public event VoidHandler SpreadsheetExportFormatChanged = delegate { }; + public event VoidHandler ConvertUploadsChanged = delegate { }; + public event VoidHandler OcrUploadsChanged = delegate { }; + + public string DefaultStorageClass + { + get { return (string) defaultStorageClassComboBox.SelectedValue; } + set { defaultStorageClassComboBox.SelectedValue = value; } + } + + public void PopulateBookmarks(List> bookmarks) + { + connectBookmarkCombobox.DataSource = bookmarks; + connectBookmarkCombobox.ValueMember = "Key"; + connectBookmarkCombobox.DisplayMember = "Value"; + connectBookmarkCombobox.IconMember = "IconKey"; + } + + public void PopulateEditors(List> editors) + { + editorComboBox.DataSource = editors; + editorComboBox.ValueMember = "Key"; + editorComboBox.DisplayMember = "Value"; + editorComboBox.IconMember = "IconKey"; + + ImageList imageList = new ImageList(); + foreach (KeyValueIconTriple triple in editors) + { + if (triple.Key.getIdentifier() != null) + { + imageList.Images.Add(triple.Value, + IconCache.Instance.GetFileIconFromExecutable(triple.Key.getIdentifier(), + IconCache.IconSize.Small)); + } + } + editorComboBox.ICImageList = imageList; + } + + public void PopulateProtocols(List> protocols) + { + defaultProtocolCombobox.DataSource = protocols; + defaultProtocolCombobox.ValueMember = "Key"; + defaultProtocolCombobox.DisplayMember = "Value"; + defaultProtocolCombobox.IconMember = "IconKey"; + } + + public void PopulateEncodings(List encodings) + { + defaultEncodingCombobox.DataSource = encodings; + } + + public void PopulateDocumentExportFormats(IList> formats) + { + gdDocumentsComboBox.DataSource = formats; + gdDocumentsComboBox.ValueMember = "Key"; + gdDocumentsComboBox.DisplayMember = "Value"; + } + + public void PopulateBookmarkSize(IList> sizes) + { + bookmarkSizeComboBox.DataSource = sizes; + bookmarkSizeComboBox.ValueMember = "Key"; + bookmarkSizeComboBox.DisplayMember = "Value"; + } + + public void PopulatePresentationExportFormats(IList> formats) + { + gdPresentationsComboBox.DataSource = formats; + gdPresentationsComboBox.ValueMember = "Key"; + gdPresentationsComboBox.DisplayMember = "Value"; + } + + public void PopulateSpreadsheetExportFormats(IList> formats) + { + gdSpreadsheetsComboBox.DataSource = formats; + gdSpreadsheetsComboBox.ValueMember = "Key"; + gdSpreadsheetsComboBox.DisplayMember = "Value"; + } + + public void PopulateTransferModes(List> modes) + { + transferFilesCombobox.DataSource = null; + transferFilesCombobox.DataSource = modes; + transferFilesCombobox.DisplayMember = "Key"; + transferFilesCombobox.ValueMember = "Value"; + } + + public void PopulateDuplicateDownloadActions(List actions) + { + duplicateDownloadCombobox.DataSource = actions; + } + + public void PopulateDuplicateUploadActions(List actions) + { + duplicateUploadCombobox.DataSource = actions; + } + + public void PopulateChmodDownloadTypes(List types) + { + chmodDownloadTypeCombobox.DataSource = types; + } + + public void PopulateChmodUploadTypes(List types) + { + chmodUploadTypeCombobox.DataSource = types; + } + + public void PopulateDefaultBucketLocations(IList> locations) + { + defaultBucketLocationCombobox.DataSource = locations; + defaultBucketLocationCombobox.ValueMember = "Key"; + defaultBucketLocationCombobox.DisplayMember = "Value"; + } + + public void PopulateDefaultStorageClasses(IList> classes) + { + defaultStorageClassComboBox.DataSource = classes; + defaultStorageClassComboBox.ValueMember = "Key"; + defaultStorageClassComboBox.DisplayMember = "Value"; + } + + public void PopulateDefaultEncryption(IList> algorithms) + { + defaultEncryptionComboBox.DataSource = algorithms; + defaultEncryptionComboBox.ValueMember = "Key"; + defaultEncryptionComboBox.DisplayMember = "Value"; + } + + public void PopulateDefaultDownloadThrottleList(IList> throttles) + { + defaultDownloadThrottleCombobox.DataSource = throttles; + defaultDownloadThrottleCombobox.ValueMember = "Key"; + defaultDownloadThrottleCombobox.DisplayMember = "Value"; + } + + public void PopulateDefaultUploadThrottleList(IList> throttles) + { + defaultUploadThrottleCombobox.DataSource = throttles; + defaultUploadThrottleCombobox.ValueMember = "Key"; + defaultUploadThrottleCombobox.DisplayMember = "Value"; + } + + public void PopulateUpdateFeeds(IList> feeds) + { + updateFeedComboBox.DataSource = feeds; + updateFeedComboBox.ValueMember = "Key"; + updateFeedComboBox.DisplayMember = "Value"; + } + + public Protocol DefaultProtocol + { + get { return (Protocol) defaultProtocolCombobox.SelectedValue; } + set { defaultProtocolCombobox.SelectedValue = value; } + } + + public string CurrentLocale + { + get { return (string) languageComboBox.SelectedValue; } + set { languageComboBox.SelectedValue = value; } + } + + public void PopulateLocales(IList> locales) + { + languageComboBox.DataSource = locales; + languageComboBox.ValueMember = "Key"; + languageComboBox.DisplayMember = "Value"; + } + + public event VoidHandler AnonymousPasswordChangedEvent = delegate { }; + public event VoidHandler DefaultTransferModeChangedEvent = delegate { }; + public event VoidHandler LineEndingChangedEvent = delegate { }; + public event VoidHandler TextFileTypeRegexChangedEvent = delegate { }; + public event VoidHandler SecureDataChannelChangedEvent = delegate { }; + public event VoidHandler FailInsecureDataChannelChangedEvent = delegate { }; + + private void generalButton_Click(object sender, EventArgs e) + { + if (!generalButton.Checked) + { + DisableAll(); + generalButton.Checked = true; + panelManager.SelectedPanel = managedGeneralPanel; + } + } + + private void DisableAll() + { + foreach (var item in toolStrip.Items) + { + if (item is ToolStripButton) + { + (item as ToolStripButton).Checked = false; + } + } + } + + private void saveWorkspaceCheckbox_CheckedChanged(object sender, EventArgs e) + { + SaveWorkspaceChangedEvent(); + } + + private void newBrowserOnStartupCheckbox_CheckedChanged(object sender, EventArgs e) + { + NewBrowserOnStartupChangedEvent(); + } + + private void connectBookmarkCombobox_SelectionChangeCommitted(object sender, EventArgs e) + { + DefaultBookmarkChangedEvent(); + } + + private void keychainCheckbox_CheckedChanged(object sender, EventArgs e) + { + UseKeychainChangedEvent(); + } + + private void confirmDisconnectCheckbox_CheckedChanged(object sender, EventArgs e) + { + ConfirmDisconnectChangedEvent(); + } + + private void defaultProtocolCombobox_SelectionChangeCommitted(object sender, EventArgs e) + { + DefaultProtocolChangedEvent(); + } + + private void defaultEncodingCombobox_SelectionChangeCommitted(object sender, EventArgs e) + { + DefaultEncodingChangedEvent(); + } + + private void showHiddenFilesCheckbox_CheckedChanged(object sender, EventArgs e) + { + ShowHiddenFilesChangedEvent(); + } + + private void doubleClickEditorCheckbox_CheckedChanged(object sender, EventArgs e) + { + DoubleClickEditorChangedEvent(); + } + + private void returnKeyCheckbox_CheckedChanged(object sender, EventArgs e) + { + ReturnKeyRenamesChangedEvent(); + } + + private void infoWindowCheckbox_CheckedChanged(object sender, EventArgs e) + { + InfoWindowShowsCurrentSelectionChangedEvent(); + } + + private void alternatingRowsCheckbox_CheckedChanged(object sender, EventArgs e) + { + AlternatingRowBackgroundChangedEvent(); + } + + private void horizontalLinesCheckbox_CheckedChanged(object sender, EventArgs e) + { + HorizontalLinesChangedEvent(); + } + + private void verticalLinesCheckbox_CheckedChanged(object sender, EventArgs e) + { + VerticalLinesChangedEvent(); + } + + private void transfersButton_Click(object sender, EventArgs e) + { + if (!transfersButton.Checked) + { + DisableAll(); + transfersButton.Checked = true; + panelManager.SelectedPanel = managedTransfersPanel; + } + } + + private void transferFilesCombobox_SelectionChangeCommitted(object sender, EventArgs e) + { + TransferModeChangedEvent(); + } + + private void transfersToFrontCheckbox_CheckedChanged(object sender, EventArgs e) + { + TransfersToFrontChangedEvent(); + } + + private void transfersToBackCheckbox_CheckedChanged(object sender, EventArgs e) + { + TransfersToBackChangedEvent(); + } + + private void removeFromTransfersCheckbox_CheckedChanged(object sender, EventArgs e) + { + RemoveFromTransfersChangedEvent(); + } + + private void openAfterDownloadCheckbox_CheckedChanged(object sender, EventArgs e) + { + OpenAfterDownloadChangedEvent(); + } + + private void showDownloadFolderDialogButton_Click(object sender, EventArgs e) + { + downloadFolderBrowserDialog.SelectedPath = DownloadFolder; + if (downloadFolderBrowserDialog.ShowDialog() == DialogResult.OK) + { + DownloadFolder = downloadFolderBrowserDialog.SelectedPath; + DownloadFolderChangedEvent(); + } + } + + private void duplicateDownloadCombobox_SelectionChangeCommitted(object sender, EventArgs e) + { + DuplicateDownloadActionChangedEvent(); + } + + private void duplicateUploadCombobox_SelectionChangeCommitted(object sender, EventArgs e) + { + DuplicateUploadActionChangedEvent(); + } + + private void duplicateDownloadOverwriteCheckbox_CheckedChanged(object sender, EventArgs e) + { + DuplicateDownloadOverwriteChangedEvent(); + } + + private void duplicateUploadOverwriteCheckbox_CheckedChanged(object sender, EventArgs e) + { + DuplicateUploadOverwriteChangedEvent(); + } + + private void chmodDownloadCheckbox_CheckedChanged(object sender, EventArgs e) + { + ChmodDownloadChangedEvent(); + } + + private void chmodUploadCheckbox_CheckedChanged(object sender, EventArgs e) + { + ChmodUploadChangedEvent(); + } + + private void chmodDownloadDefaultRadioButton_CheckedChanged(object sender, EventArgs e) + { + ChmodDownloadUseDefaultChangedEvent(); + } + + private void chmodUploadDefaultRadioButton_CheckedChanged(object sender, EventArgs e) + { + ChmodUploadUseDefaultChangedEvent(); + } + + private void chmodDownloadTypeCombobox_SelectionChangeCommitted(object sender, EventArgs e) + { + ChmodDownloadTypeChangedEvent(); + } + + private void chmodUploadTypeCombobox_SelectionChangeCommitted(object sender, EventArgs e) + { + ChmodUploadTypeChangedEvent(); + } + + private void downerrCheckbox_CheckedChanged(object sender, EventArgs e) + { + DownloadOwnerReadChangedEvent(); + } + + private void uownerrCheckbox_CheckedChanged(object sender, EventArgs e) + { + UploadOwnerReadChangedEvent(); + } + + private void downerwCheckbox_CheckedChanged(object sender, EventArgs e) + { + DownloadOwnerWriteChangedEvent(); + } + + private void uownerwCheckbox_CheckedChanged(object sender, EventArgs e) + { + UploadOwnerWriteChangedEvent(); + } + + private void downerxCheckbox_CheckedChanged(object sender, EventArgs e) + { + DownloadOwnerExecuteChangedEvent(); + } + + private void uownerxCheckbox_CheckedChanged(object sender, EventArgs e) + { + UploadOwnerExecuteChangedEvent(); + } + + private void dgrouprCheckbox_CheckedChanged(object sender, EventArgs e) + { + DownloadGroupReadChangedEvent(); + } + + private void ugrouprCheckbox_CheckedChanged(object sender, EventArgs e) + { + UploadGroupReadChangedEvent(); + } + + private void dgroupwCheckbox_CheckedChanged(object sender, EventArgs e) + { + DownloadGroupWriteChangedEvent(); + } + + private void ugroupwCheckbox_CheckedChanged(object sender, EventArgs e) + { + UploadGroupWriteChangedEvent(); + } + + private void dgroupxCheckbox_CheckedChanged(object sender, EventArgs e) + { + DownloadGroupExecuteChangedEvent(); + } + + private void ugroupxCheckbox_CheckedChanged(object sender, EventArgs e) + { + UploadGroupExecuteChangedEvent(); + } + + private void dotherrCheckbox_CheckedChanged(object sender, EventArgs e) + { + DownloadOtherReadChangedEvent(); + } + + private void uotherrCheckbox_CheckedChanged(object sender, EventArgs e) + { + UploadOtherReadChangedEvent(); + } + + private void dotherwCheckbox_CheckedChanged(object sender, EventArgs e) + { + DownloadOtherWriteChangedEvent(); + } + + private void uotherwCheckbox_CheckedChanged(object sender, EventArgs e) + { + UploadOtherWriteChangedEvent(); + } + + private void dotherxCheckbox_CheckedChanged(object sender, EventArgs e) + { + DownloadOtherReadChangedEvent(); + } + + private void uotherxCheckbox_CheckedChanged(object sender, EventArgs e) + { + UploadOtherReadChangedEvent(); + } + + private void preserveModificationDownloadCheckbox_CheckedChanged(object sender, EventArgs e) + { + PreserveModificationDownloadChangedEvent(); + } + + private void preserveModificationUploadCheckbox_CheckedChanged(object sender, EventArgs e) + { + PreserveModificationUploadChangedEvent(); + } + + private void downloadSkipRegexRichTextbox_TextChanged(object sender, EventArgs e) + { + DownloadSkipRegexChangedEvent(); + } + + private void downloadSkipCheckbox_CheckedChanged(object sender, EventArgs e) + { + DownloadSkipChangedEvent(); + } + + private void downloadSkipRegexDefaultButton_Click(object sender, EventArgs e) + { + DownloadSkipRegexDefaultEvent(); + } + + private void uploadSkipCheckbox_CheckedChanged(object sender, EventArgs e) + { + UploadSkipChangedEvent(); + } + + private void uploadSkipRegexRichTextbox_TextChanged(object sender, EventArgs e) + { + UploadSkipRegexChangedEvent(); + } + + private void uploadSkipRegexDefaultButton_Click(object sender, EventArgs e) + { + UploadSkipRegexDefaultEvent(); + } + + private void sftpButton_Click(object sender, EventArgs e) + { + if (!sftpButton.Checked) + { + DisableAll(); + sftpButton.Checked = true; + panelManager.SelectedPanel = managedSftpPanel; + } + } + + private void s3Button_Click(object sender, EventArgs e) + { + if (!s3Button.Checked) + { + DisableAll(); + s3Button.Checked = true; + panelManager.SelectedPanel = managedS3Panel; + } + } + + private void defaultBucketLocationCombobox_SelectionChangeCommitted(object sender, EventArgs e) + { + DefaultBucketLocationChangedEvent(); + } + + private void bandwidthButton_Click(object sender, EventArgs e) + { + if (!bandwidthButton.Checked) + { + DisableAll(); + bandwidthButton.Checked = true; + panelManager.SelectedPanel = managedBandwidthPanel; + } + } + + private void defaultDownloadThrottleCombobox_SelectionChangeCommitted(object sender, EventArgs e) + { + DefaultDownloadThrottleChangedEvent(); + } + + private void defaultUploadThrottleCombobox_SelectionChangeCommitted(object sender, EventArgs e) + { + DefaultUploadThrottleChangedEvent(); + } + + private void connectionButton_Click(object sender, EventArgs e) + { + if (!connectionButton.Checked) + { + DisableAll(); + connectionButton.Checked = true; + panelManager.SelectedPanel = managedConnectionPanel; + } + } + + private void retryCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (retryCheckbox.Checked && retriesUpDown.Value == 0) + { + Retries = 1; + } + if (!retryCheckbox.Checked && retriesUpDown.Value != 0) + { + Retries = 0; + } + } + + private void connectionTimeoutUpDown_ValueChanged(object sender, EventArgs e) + { + ConnectionTimeoutChangedEvent(); + } + + private void retryDelayUpDown_ValueChanged(object sender, EventArgs e) + { + RetryDelayChangedEvent(); + } + + private void retriesUpDown_ValueChanged(object sender, EventArgs e) + { + if (Retries == 0 && retryCheckbox.Checked) + { + retryCheckbox.Checked = false; + } + if (Retries > 0 && !retryCheckbox.Checked) + { + retryCheckbox.Checked = true; + } + RetriesChangedEvent(); + } + + private void defaultStorageClassComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + DefaultStorageClassChangedEvent(); + } + + private void googleDocsButton_Click(object sender, EventArgs e) + { + if (!googleDocsButton.Checked) + { + DisableAll(); + googleDocsButton.Checked = true; + panelManager.SelectedPanel = managedGoogleDocsPanel; + } + } + + private void updateButton_Click(object sender, EventArgs e) + { + if (!updateButton.Checked) + { + DisableAll(); + updateButton.Checked = true; + panelManager.SelectedPanel = managedUpdatePanel; + } + } + + private void languageButton_Click(object sender, EventArgs e) + { + if (!languageButton.Checked) + { + DisableAll(); + languageButton.Checked = true; + panelManager.SelectedPanel = managedLanguagePanel; + } + } + + private void gdDocumentsComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + DocumentExportFormatChanged(); + } + + private void gdPresentationsComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + PresentationExportFormatChanged(); + } + + private void gdSpreadsheetsComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + SpreadsheetExportFormatChanged(); + } + + private void gdConvertCheckBox_CheckedChanged(object sender, EventArgs e) + { + ConvertUploadsChanged(); + } + + private void gdOCRcheckBox_CheckedChanged(object sender, EventArgs e) + { + OcrUploadsChanged(); + } + + private void languageComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + LocaleChanged(); + } + + private void updateCheckBox_CheckedChanged(object sender, EventArgs e) + { + AutomaticUpdateChangedEvent(); + } + + private void updateCheckButton_Click(object sender, EventArgs e) + { + CheckForUpdateEvent(); + } + + private void systemProxyCheckBox_CheckStateChanged(object sender, EventArgs e) + { + UseSystemProxyChangedEvent(); + } + + private void uploadTemporaryNameCheckBox_CheckedChanged(object sender, EventArgs e) + { + UploadWithTemporaryFilenameChangedEvent(); + } + + private void updateFeedComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + UpdateFeedChangedEvent(); + } + + private void changeSystemProxyButton_Click(object sender, EventArgs e) + { + ChangeSystemProxyEvent(); + } + + private void editStripButton_Click(object sender, EventArgs e) + { + if (!editStripButton.Checked) + { + DisableAll(); + editStripButton.Checked = true; + panelManager.SelectedPanel = managedEditorPanel; + } + } + + private void editorComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + Application selected = DefaultEditor; + if (selected != null && selected.getIdentifier() == null) + { + //choose dialog + editorOpenFileDialog.FileName = null; + DialogResult result = editorOpenFileDialog.ShowDialog(); + if (result == DialogResult.OK) + { + PreferencesFactory.get() + .setProperty("editor.bundleIdentifier", editorOpenFileDialog.FileName.ToLower()); + RepopulateEditorsEvent(); + } + else + { + if (_lastSelectedEditor != null) + { + DefaultEditor = _lastSelectedEditor; + } + else + { + //dummy editor which leads to an empty selection + DefaultEditor = new Application(null, null); + } + } + } + else + { + _lastSelectedEditor = DefaultEditor; + DefaultEditorChangedEvent(); + } + } + + private void alwaysUseDefaultEditorCheckBox_CheckedChanged(object sender, EventArgs e) + { + AlwaysUseDefaultEditorChangedEvent(); + } + + private void defaultEncryptionComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + DefaultEncryptionChangedEvent(); + } + + private void browserButton_Click(object sender, EventArgs e) + { + if (!browserButton.Checked) + { + DisableAll(); + browserButton.Checked = true; + panelManager.SelectedPanel = managedBrowserPanel; + } + } + + private void bookmarkSizeComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + BookmarkSizeChangedEvent(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/PreferencesForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/PreferencesForm.resx similarity index 98% rename from source/ch/cyberduck/ui/winforms/PreferencesForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/PreferencesForm.resx index abfab40156..4c2536817e 100644 --- a/source/ch/cyberduck/ui/winforms/PreferencesForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/PreferencesForm.resx @@ -1,135 +1,135 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 115, 17 - - - 208, 17 - - - 427, 17 - - - 17, 17 - - - 57 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 115, 17 + + + 208, 17 + + + 427, 17 + + + 17, 17 + + + 57 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/PromptForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/PromptForm.Designer.cs similarity index 98% rename from source/ch/cyberduck/ui/winforms/PromptForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/PromptForm.Designer.cs index cf592e467b..ffc2855b95 100644 --- a/source/ch/cyberduck/ui/winforms/PromptForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/PromptForm.Designer.cs @@ -1,148 +1,148 @@ -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class PromptForm - { - /// - /// 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.okButton = new System.Windows.Forms.Button(); - this.cancelButton = new System.Windows.Forms.Button(); - this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); - this.pictureBox = new System.Windows.Forms.PictureBox(); - this.label = new System.Windows.Forms.Label(); - this.inputTextBox = new System.Windows.Forms.TextBox(); - this.tableLayoutPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit(); - this.SuspendLayout(); - // - // okButton - // - this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.okButton.AutoSize = true; - this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; - this.okButton.Location = new System.Drawing.Point(344, 77); - this.okButton.Name = "okButton"; - this.okButton.Size = new System.Drawing.Size(87, 27); - this.okButton.TabIndex = 0; - this.okButton.Text = "Create"; - this.okButton.UseVisualStyleBackColor = true; - // - // cancelButton - // - this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.cancelButton.AutoSize = true; - this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancelButton.Location = new System.Drawing.Point(251, 77); - this.cancelButton.Name = "cancelButton"; - this.cancelButton.Size = new System.Drawing.Size(87, 27); - this.cancelButton.TabIndex = 1; - this.cancelButton.Text = "Cancel"; - this.cancelButton.UseVisualStyleBackColor = true; - // - // tableLayoutPanel - // - this.tableLayoutPanel.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.tableLayoutPanel.ColumnCount = 4; - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel.Controls.Add(this.pictureBox, 0, 0); - this.tableLayoutPanel.Controls.Add(this.label, 1, 0); - this.tableLayoutPanel.Controls.Add(this.okButton, 3, 2); - this.tableLayoutPanel.Controls.Add(this.cancelButton, 2, 2); - this.tableLayoutPanel.Controls.Add(this.inputTextBox, 1, 1); - this.tableLayoutPanel.Location = new System.Drawing.Point(14, 14); - this.tableLayoutPanel.Name = "tableLayoutPanel"; - this.tableLayoutPanel.RowCount = 3; - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 32F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F)); - this.tableLayoutPanel.Size = new System.Drawing.Size(434, 105); - this.tableLayoutPanel.TabIndex = 4; - // - // pictureBox - // - this.pictureBox.Dock = System.Windows.Forms.DockStyle.Bottom; - this.pictureBox.Location = new System.Drawing.Point(3, 3); - this.pictureBox.Name = "pictureBox"; - this.tableLayoutPanel.SetRowSpan(this.pictureBox, 2); - this.pictureBox.Size = new System.Drawing.Size(75, 61); - this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; - this.pictureBox.TabIndex = 0; - this.pictureBox.TabStop = false; - // - // label - // - this.label.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label.AutoSize = true; - this.tableLayoutPanel.SetColumnSpan(this.label, 3); - this.label.Location = new System.Drawing.Point(84, 20); - this.label.Name = "label"; - this.label.Size = new System.Drawing.Size(187, 15); - this.label.TabIndex = 1; - this.label.Text = "Enter the name for the new folder:"; - // - // inputTextBox - // - this.inputTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel.SetColumnSpan(this.inputTextBox, 3); - this.inputTextBox.Location = new System.Drawing.Point(84, 39); - this.inputTextBox.Name = "inputTextBox"; - this.inputTextBox.Size = new System.Drawing.Size(347, 23); - this.inputTextBox.TabIndex = 2; - // - // PromptForm - // - this.AcceptButton = this.okButton; - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.cancelButton; - this.ClientSize = new System.Drawing.Size(462, 133); - this.Controls.Add(this.tableLayoutPanel); - this.Name = "PromptForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Create new folder"; - this.Shown += new System.EventHandler(this.PromptForm_Shown); - this.tableLayoutPanel.ResumeLayout(false); - this.tableLayoutPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TextBox inputTextBox; - protected System.Windows.Forms.PictureBox pictureBox; - protected System.Windows.Forms.Label label; - protected System.Windows.Forms.Button okButton; - protected System.Windows.Forms.Button cancelButton; - protected System.Windows.Forms.TableLayoutPanel tableLayoutPanel; - } +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class PromptForm + { + /// + /// 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.okButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.pictureBox = new System.Windows.Forms.PictureBox(); + this.label = new System.Windows.Forms.Label(); + this.inputTextBox = new System.Windows.Forms.TextBox(); + this.tableLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit(); + this.SuspendLayout(); + // + // okButton + // + this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.okButton.AutoSize = true; + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(344, 77); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(87, 27); + this.okButton.TabIndex = 0; + this.okButton.Text = "Create"; + this.okButton.UseVisualStyleBackColor = true; + // + // cancelButton + // + this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.cancelButton.AutoSize = true; + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(251, 77); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(87, 27); + this.cancelButton.TabIndex = 1; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + // + // tableLayoutPanel + // + this.tableLayoutPanel.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.tableLayoutPanel.ColumnCount = 4; + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel.Controls.Add(this.pictureBox, 0, 0); + this.tableLayoutPanel.Controls.Add(this.label, 1, 0); + this.tableLayoutPanel.Controls.Add(this.okButton, 3, 2); + this.tableLayoutPanel.Controls.Add(this.cancelButton, 2, 2); + this.tableLayoutPanel.Controls.Add(this.inputTextBox, 1, 1); + this.tableLayoutPanel.Location = new System.Drawing.Point(14, 14); + this.tableLayoutPanel.Name = "tableLayoutPanel"; + this.tableLayoutPanel.RowCount = 3; + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 32F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F)); + this.tableLayoutPanel.Size = new System.Drawing.Size(434, 105); + this.tableLayoutPanel.TabIndex = 4; + // + // pictureBox + // + this.pictureBox.Dock = System.Windows.Forms.DockStyle.Bottom; + this.pictureBox.Location = new System.Drawing.Point(3, 3); + this.pictureBox.Name = "pictureBox"; + this.tableLayoutPanel.SetRowSpan(this.pictureBox, 2); + this.pictureBox.Size = new System.Drawing.Size(75, 61); + this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.pictureBox.TabIndex = 0; + this.pictureBox.TabStop = false; + // + // label + // + this.label.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label.AutoSize = true; + this.tableLayoutPanel.SetColumnSpan(this.label, 3); + this.label.Location = new System.Drawing.Point(84, 20); + this.label.Name = "label"; + this.label.Size = new System.Drawing.Size(187, 15); + this.label.TabIndex = 1; + this.label.Text = "Enter the name for the new folder:"; + // + // inputTextBox + // + this.inputTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel.SetColumnSpan(this.inputTextBox, 3); + this.inputTextBox.Location = new System.Drawing.Point(84, 39); + this.inputTextBox.Name = "inputTextBox"; + this.inputTextBox.Size = new System.Drawing.Size(347, 23); + this.inputTextBox.TabIndex = 2; + // + // PromptForm + // + this.AcceptButton = this.okButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(462, 133); + this.Controls.Add(this.tableLayoutPanel); + this.Name = "PromptForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Create new folder"; + this.Shown += new System.EventHandler(this.PromptForm_Shown); + this.tableLayoutPanel.ResumeLayout(false); + this.tableLayoutPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TextBox inputTextBox; + protected System.Windows.Forms.PictureBox pictureBox; + protected System.Windows.Forms.Label label; + protected System.Windows.Forms.Button okButton; + protected System.Windows.Forms.Button cancelButton; + protected System.Windows.Forms.TableLayoutPanel tableLayoutPanel; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/PromptForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/PromptForm.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/PromptForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/PromptForm.cs index c2ef06dad7..f378330702 100644 --- a/source/ch/cyberduck/ui/winforms/PromptForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/PromptForm.cs @@ -1,68 +1,68 @@ -// -// Copyright (c) 2010-2011 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using System.Drawing; -using System.Media; -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Controller; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class PromptForm : BaseForm, IPromptView - { - public PromptForm() - { - InitializeComponent(); - - FormClosing += delegate(object sender, FormClosingEventArgs args) - { - bool cancel = DialogResult != DialogResult.Cancel && !ValidateInput(); - if (cancel) - { - args.Cancel = true; - SystemSounds.Beep.Play(); - } - }; - MinimumSize = new Size(400, 150); - } - - public override string[] BundleNames - { - get { return new[] {"Folder"}; } - } - - public string InputText - { - get { return inputTextBox.Text; } - set { inputTextBox.Text = value; } - } - - public Bitmap IconView - { - set { pictureBox.Image = value; } - } - - public event ValidateInputHandler ValidateInput; - - private void PromptForm_Shown(object sender, EventArgs e) - { - inputTextBox.Focus(); - inputTextBox.SelectAll(); - } - } +// +// Copyright (c) 2010-2011 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using System.Drawing; +using System.Media; +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Controller; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class PromptForm : BaseForm, IPromptView + { + public PromptForm() + { + InitializeComponent(); + + FormClosing += delegate(object sender, FormClosingEventArgs args) + { + bool cancel = DialogResult != DialogResult.Cancel && !ValidateInput(); + if (cancel) + { + args.Cancel = true; + SystemSounds.Beep.Play(); + } + }; + MinimumSize = new Size(400, 150); + } + + public override string[] BundleNames + { + get { return new[] {"Folder"}; } + } + + public string InputText + { + get { return inputTextBox.Text; } + set { inputTextBox.Text = value; } + } + + public Bitmap IconView + { + set { pictureBox.Image = value; } + } + + public event ValidateInputHandler ValidateInput; + + private void PromptForm_Shown(object sender, EventArgs e) + { + inputTextBox.Focus(); + inputTextBox.SelectAll(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/PromptForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/PromptForm.resx similarity index 97% rename from source/ch/cyberduck/ui/winforms/PromptForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/PromptForm.resx index c7e0d4bdf1..d58980a38d 100644 --- a/source/ch/cyberduck/ui/winforms/PromptForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/PromptForm.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/ToolbarBaseForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ToolbarBaseForm.Designer.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/ToolbarBaseForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/ToolbarBaseForm.Designer.cs index 30e653c49e..4ada9644fa 100644 --- a/source/ch/cyberduck/ui/winforms/ToolbarBaseForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ToolbarBaseForm.Designer.cs @@ -1,36 +1,36 @@ -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class ToolbarBaseForm - { - /// - /// 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(); - } - - #endregion - } -} +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class ToolbarBaseForm + { + /// + /// 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(); + } + + #endregion + } +} diff --git a/source/ch/cyberduck/ui/winforms/ToolbarBaseForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ToolbarBaseForm.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/ToolbarBaseForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/ToolbarBaseForm.cs index b86d2a39e4..abce18be43 100644 --- a/source/ch/cyberduck/ui/winforms/ToolbarBaseForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/ToolbarBaseForm.cs @@ -1,38 +1,38 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System.Windows.Forms; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class ToolbarBaseForm : BaseForm - { - private const int NumberOfSteps = 7; - private const int UpdateInterval = 10; - private readonly object _syncroot = new object(); - - public ToolbarBaseForm() - { - InitializeComponent(); - } - - public virtual ToolStrip ToolStrip - { - get { return null; } - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System.Windows.Forms; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class ToolbarBaseForm : BaseForm + { + private const int NumberOfSteps = 7; + private const int UpdateInterval = 10; + private readonly object _syncroot = new object(); + + public ToolbarBaseForm() + { + InitializeComponent(); + } + + public virtual ToolStrip ToolStrip + { + get { return null; } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/TransferForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferForm.Designer.cs similarity index 98% rename from source/ch/cyberduck/ui/winforms/TransferForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferForm.Designer.cs index 9351c5c5f2..25e44ffcb8 100644 --- a/source/ch/cyberduck/ui/winforms/TransferForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferForm.Designer.cs @@ -1,543 +1,543 @@ -using Ch.Cyberduck.Ui.Winforms.Controls; - -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class TransferForm - { - /// - /// 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(); - this.toolbarMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.resumeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.reloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.stopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.removeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.cleanUpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.logToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.trashToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.showToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.bandwidthMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.cancelButton = new System.Windows.Forms.Button(); - this.splitContainer = new System.Windows.Forms.SplitContainer(); - this.panel2 = new System.Windows.Forms.Panel(); - this.transferListView = new Ch.Cyberduck.Ui.Winforms.Controls.ListViewControls(); - this.dummyColumn = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); - this.transferColumn = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.bandwithSplitButton = new Ch.Cyberduck.Ui.Winforms.Controls.SplitButton(); - this.fileIcon = new System.Windows.Forms.PictureBox(); - this.queueSizeUpDown = new System.Windows.Forms.NumericUpDown(); - this.label1 = new System.Windows.Forms.Label(); - this.localLabel = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); - this.label2 = new System.Windows.Forms.Label(); - this.urlLabel = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); - this.transcriptBox = new System.Windows.Forms.RichTextBox(); - this.toolStrip = new Ch.Cyberduck.Ui.Winforms.Controls.ClickThroughToolStrip(); - this.resumeToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.reloadToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.stopToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.removeToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.cleanUptoolStripButton = new System.Windows.Forms.ToolStripButton(); - this.showToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.openToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.logToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.trashToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.toolbarMenuStrip.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); - this.splitContainer.Panel1.SuspendLayout(); - this.splitContainer.Panel2.SuspendLayout(); - this.splitContainer.SuspendLayout(); - this.panel2.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.transferListView)).BeginInit(); - this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.fileIcon)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.queueSizeUpDown)).BeginInit(); - this.toolStrip.SuspendLayout(); - this.SuspendLayout(); - // - // toolbarMenuStrip - // - this.toolbarMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.resumeToolStripMenuItem, - this.reloadToolStripMenuItem, - this.stopToolStripMenuItem, - this.removeToolStripMenuItem, - this.cleanUpToolStripMenuItem, - this.logToolStripMenuItem, - this.trashToolStripMenuItem, - this.toolStripSeparator1, - this.openToolStripMenuItem, - this.showToolStripMenuItem}); - this.toolbarMenuStrip.Name = "toolbarMenuStrip"; - this.toolbarMenuStrip.Size = new System.Drawing.Size(123, 208); - this.toolbarMenuStrip.Closing += new System.Windows.Forms.ToolStripDropDownClosingEventHandler(this.toolbarMenuStrip_Closing); - this.toolbarMenuStrip.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.toolbarMenuStrip_ItemClicked); - // - // resumeToolStripMenuItem - // - this.resumeToolStripMenuItem.Name = "resumeToolStripMenuItem"; - this.resumeToolStripMenuItem.Size = new System.Drawing.Size(122, 22); - this.resumeToolStripMenuItem.Text = "Resume"; - // - // reloadToolStripMenuItem - // - this.reloadToolStripMenuItem.Name = "reloadToolStripMenuItem"; - this.reloadToolStripMenuItem.Size = new System.Drawing.Size(122, 22); - this.reloadToolStripMenuItem.Text = "Reload"; - // - // stopToolStripMenuItem - // - this.stopToolStripMenuItem.Name = "stopToolStripMenuItem"; - this.stopToolStripMenuItem.Size = new System.Drawing.Size(122, 22); - this.stopToolStripMenuItem.Text = "Stop"; - // - // removeToolStripMenuItem - // - this.removeToolStripMenuItem.Name = "removeToolStripMenuItem"; - this.removeToolStripMenuItem.Size = new System.Drawing.Size(122, 22); - this.removeToolStripMenuItem.Text = "Remove"; - // - // cleanUpToolStripMenuItem - // - this.cleanUpToolStripMenuItem.Name = "cleanUpToolStripMenuItem"; - this.cleanUpToolStripMenuItem.Size = new System.Drawing.Size(122, 22); - this.cleanUpToolStripMenuItem.Text = "Clean Up"; - // - // logToolStripMenuItem - // - this.logToolStripMenuItem.Name = "logToolStripMenuItem"; - this.logToolStripMenuItem.Size = new System.Drawing.Size(122, 22); - this.logToolStripMenuItem.Text = "Log"; - // - // trashToolStripMenuItem - // - this.trashToolStripMenuItem.Name = "trashToolStripMenuItem"; - this.trashToolStripMenuItem.Size = new System.Drawing.Size(122, 22); - this.trashToolStripMenuItem.Text = "Trash"; - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(119, 6); - // - // openToolStripMenuItem - // - this.openToolStripMenuItem.Name = "openToolStripMenuItem"; - this.openToolStripMenuItem.Size = new System.Drawing.Size(122, 22); - this.openToolStripMenuItem.Text = "Open"; - // - // showToolStripMenuItem - // - this.showToolStripMenuItem.Name = "showToolStripMenuItem"; - this.showToolStripMenuItem.Size = new System.Drawing.Size(122, 22); - this.showToolStripMenuItem.Text = "Show"; - // - // bandwidthMenuStrip - // - this.bandwidthMenuStrip.Name = "bandwidthMenuStrip"; - this.bandwidthMenuStrip.Size = new System.Drawing.Size(61, 4); - // - // cancelButton - // - this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancelButton.Location = new System.Drawing.Point(302, 12); - this.cancelButton.Name = "cancelButton"; - this.cancelButton.Size = new System.Drawing.Size(0, 0); - this.cancelButton.TabIndex = 7; - this.cancelButton.TabStop = false; - this.cancelButton.Text = "cancelButton"; - this.cancelButton.UseVisualStyleBackColor = true; - this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); - // - // splitContainer - // - this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; - this.splitContainer.Location = new System.Drawing.Point(0, 54); - this.splitContainer.Name = "splitContainer"; - this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // splitContainer.Panel1 - // - this.splitContainer.Panel1.Controls.Add(this.panel2); - // - // splitContainer.Panel2 - // - this.splitContainer.Panel2.Controls.Add(this.transcriptBox); - this.splitContainer.Size = new System.Drawing.Size(541, 478); - this.splitContainer.SplitterDistance = 324; - this.splitContainer.SplitterWidth = 5; - this.splitContainer.TabIndex = 6; - this.splitContainer.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer_SplitterMoved); - // - // panel2 - // - this.panel2.Controls.Add(this.transferListView); - this.panel2.Controls.Add(this.tableLayoutPanel1); - this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel2.Location = new System.Drawing.Point(0, 0); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(541, 324); - this.panel2.TabIndex = 7; - // - // transferListView - // - this.transferListView.AllColumns.Add(this.dummyColumn); - this.transferListView.AllColumns.Add(this.transferColumn); - this.transferListView.AlternateRowBackColor = System.Drawing.SystemColors.Menu; - this.transferListView.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.transferListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.dummyColumn, - this.transferColumn}); - this.transferListView.Cursor = System.Windows.Forms.Cursors.Default; - this.transferListView.Dock = System.Windows.Forms.DockStyle.Fill; - this.transferListView.GridLines = true; - this.transferListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; - this.transferListView.Location = new System.Drawing.Point(0, 0); - this.transferListView.Name = "transferListView"; - this.transferListView.RowHeight = 85; - this.transferListView.Size = new System.Drawing.Size(541, 280); - this.transferListView.TabIndex = 6; - this.transferListView.UseCompatibleStateImageBehavior = false; - this.transferListView.View = System.Windows.Forms.View.Details; - this.transferListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.transferListView_KeyDown); - this.transferListView.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.transferListView_KeyPress); - // - // dummyColumn - // - this.dummyColumn.CellPadding = null; - // - // transferColumn - // - this.transferColumn.CellPadding = null; - this.transferColumn.Width = 400; - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 5; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 42F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 40F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 55F)); - this.tableLayoutPanel1.Controls.Add(this.bandwithSplitButton, 4, 0); - this.tableLayoutPanel1.Controls.Add(this.fileIcon, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.queueSizeUpDown, 3, 0); - this.tableLayoutPanel1.Controls.Add(this.label1, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.localLabel, 2, 1); - this.tableLayoutPanel1.Controls.Add(this.label2, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.urlLabel, 2, 0); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 280); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(5, 5, 5, 0); - this.tableLayoutPanel1.RowCount = 2; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(541, 44); - this.tableLayoutPanel1.TabIndex = 8; - // - // bandwithSplitButton - // - this.bandwithSplitButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.bandwithSplitButton.ContextMenuStrip = this.bandwidthMenuStrip; - this.bandwithSplitButton.Location = new System.Drawing.Point(484, 13); - this.bandwithSplitButton.Name = "bandwithSplitButton"; - this.tableLayoutPanel1.SetRowSpan(this.bandwithSplitButton, 2); - this.bandwithSplitButton.Size = new System.Drawing.Size(49, 23); - this.bandwithSplitButton.SplitMenuStrip = this.bandwidthMenuStrip; - this.bandwithSplitButton.TabIndex = 7; - this.bandwithSplitButton.UseVisualStyleBackColor = true; - this.bandwithSplitButton.Click += new System.EventHandler(this.bandwithSplitButton_Click); - // - // fileIcon - // - this.fileIcon.Dock = System.Windows.Forms.DockStyle.Fill; - this.fileIcon.Location = new System.Drawing.Point(8, 5); - this.fileIcon.Margin = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.fileIcon.Name = "fileIcon"; - this.tableLayoutPanel1.SetRowSpan(this.fileIcon, 2); - this.fileIcon.Size = new System.Drawing.Size(36, 36); - this.fileIcon.TabIndex = 2; - this.fileIcon.TabStop = false; - // - // queueSizeUpDown - // - this.queueSizeUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.queueSizeUpDown.Location = new System.Drawing.Point(444, 13); - this.queueSizeUpDown.Maximum = new decimal(new int[] { - 9, - 0, - 0, - 0}); - this.queueSizeUpDown.Minimum = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.queueSizeUpDown.Name = "queueSizeUpDown"; - this.tableLayoutPanel1.SetRowSpan(this.queueSizeUpDown, 2); - this.queueSizeUpDown.Size = new System.Drawing.Size(34, 23); - this.queueSizeUpDown.TabIndex = 6; - this.queueSizeUpDown.Value = new decimal(new int[] { - 5, - 0, - 0, - 0}); - this.queueSizeUpDown.ValueChanged += new System.EventHandler(this.queueSizeUpDown_ValueChanged); - // - // label1 - // - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(50, 5); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(94, 19); - this.label1.TabIndex = 0; - this.label1.Text = "URL:"; - this.label1.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // localLabel - // - this.localLabel.AutoSize = true; - this.localLabel.Dock = System.Windows.Forms.DockStyle.Fill; - this.localLabel.Location = new System.Drawing.Point(150, 24); - this.localLabel.Name = "localLabel"; - this.localLabel.Size = new System.Drawing.Size(288, 20); - this.localLabel.TabIndex = 4; - // - // label2 - // - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(50, 24); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(94, 20); - this.label2.TabIndex = 1; - this.label2.Text = "Local File:"; - this.label2.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // urlLabel - // - this.urlLabel.Dock = System.Windows.Forms.DockStyle.Fill; - this.urlLabel.Location = new System.Drawing.Point(150, 5); - this.urlLabel.Name = "urlLabel"; - this.urlLabel.Size = new System.Drawing.Size(288, 19); - this.urlLabel.TabIndex = 3; - // - // transcriptBox - // - this.transcriptBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.transcriptBox.Location = new System.Drawing.Point(0, 0); - this.transcriptBox.Name = "transcriptBox"; - this.transcriptBox.ReadOnly = true; - this.transcriptBox.Size = new System.Drawing.Size(541, 149); - this.transcriptBox.TabIndex = 1; - this.transcriptBox.Text = ""; - // - // toolStrip - // - this.toolStrip.ContextMenuStrip = this.toolbarMenuStrip; - this.toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; - this.toolStrip.ImageScalingSize = new System.Drawing.Size(32, 32); - this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.resumeToolStripButton, - this.reloadToolStripButton, - this.stopToolStripButton, - this.removeToolStripButton, - this.cleanUptoolStripButton, - this.showToolStripButton, - this.openToolStripButton, - this.logToolStripButton, - this.trashToolStripButton}); - this.toolStrip.Location = new System.Drawing.Point(0, 0); - this.toolStrip.Name = "toolStrip"; - this.toolStrip.Size = new System.Drawing.Size(541, 54); - this.toolStrip.TabIndex = 5; - this.toolStrip.Text = "toolStrip1"; - // - // resumeToolStripButton - // - this.resumeToolStripButton.AutoToolTip = false; - this.resumeToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.resume; - this.resumeToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.resumeToolStripButton.Name = "resumeToolStripButton"; - this.resumeToolStripButton.Size = new System.Drawing.Size(53, 51); - this.resumeToolStripButton.Text = "Resume"; - this.resumeToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // reloadToolStripButton - // - this.reloadToolStripButton.AutoToolTip = false; - this.reloadToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.reload; - this.reloadToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.reloadToolStripButton.Name = "reloadToolStripButton"; - this.reloadToolStripButton.Size = new System.Drawing.Size(47, 51); - this.reloadToolStripButton.Text = "Reload"; - this.reloadToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // stopToolStripButton - // - this.stopToolStripButton.AutoToolTip = false; - this.stopToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.stop; - this.stopToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.stopToolStripButton.Name = "stopToolStripButton"; - this.stopToolStripButton.Size = new System.Drawing.Size(36, 51); - this.stopToolStripButton.Text = "Stop"; - this.stopToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // removeToolStripButton - // - this.removeToolStripButton.AutoToolTip = false; - this.removeToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.clean; - this.removeToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.removeToolStripButton.Name = "removeToolStripButton"; - this.removeToolStripButton.Size = new System.Drawing.Size(54, 51); - this.removeToolStripButton.Text = "Remove"; - this.removeToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // cleanUptoolStripButton - // - this.cleanUptoolStripButton.AutoToolTip = false; - this.cleanUptoolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.cleanall; - this.cleanUptoolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.cleanUptoolStripButton.Name = "cleanUptoolStripButton"; - this.cleanUptoolStripButton.Size = new System.Drawing.Size(59, 51); - this.cleanUptoolStripButton.Text = "Clean Up"; - this.cleanUptoolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // showToolStripButton - // - this.showToolStripButton.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.showToolStripButton.AutoToolTip = false; - this.showToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.reveal; - this.showToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.showToolStripButton.Name = "showToolStripButton"; - this.showToolStripButton.Size = new System.Drawing.Size(40, 51); - this.showToolStripButton.Text = "Show"; - this.showToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // openToolStripButton - // - this.openToolStripButton.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.openToolStripButton.AutoToolTip = false; - this.openToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.open; - this.openToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.openToolStripButton.Name = "openToolStripButton"; - this.openToolStripButton.Size = new System.Drawing.Size(40, 51); - this.openToolStripButton.Text = "Open"; - this.openToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // logToolStripButton - // - this.logToolStripButton.AutoToolTip = false; - this.logToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.log; - this.logToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.logToolStripButton.Name = "logToolStripButton"; - this.logToolStripButton.Size = new System.Drawing.Size(36, 51); - this.logToolStripButton.Text = "Log"; - this.logToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // trashToolStripButton - // - this.trashToolStripButton.AutoToolTip = false; - this.trashToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.trash; - this.trashToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.trashToolStripButton.Name = "trashToolStripButton"; - this.trashToolStripButton.Size = new System.Drawing.Size(40, 51); - this.trashToolStripButton.Text = "Trash"; - this.trashToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - // - // TransferForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.CancelButton = this.cancelButton; - this.ClientSize = new System.Drawing.Size(541, 532); - this.Controls.Add(this.splitContainer); - this.Controls.Add(this.toolStrip); - this.Controls.Add(this.cancelButton); - this.Name = "TransferForm"; - this.Text = "Transfers"; - this.toolbarMenuStrip.ResumeLayout(false); - this.splitContainer.Panel1.ResumeLayout(false); - this.splitContainer.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); - this.splitContainer.ResumeLayout(false); - this.panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.transferListView)).EndInit(); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.fileIcon)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.queueSizeUpDown)).EndInit(); - this.toolStrip.ResumeLayout(false); - this.toolStrip.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.ToolStripButton resumeToolStripButton; - private System.Windows.Forms.ToolStripButton reloadToolStripButton; - private System.Windows.Forms.ToolStripButton stopToolStripButton; - private System.Windows.Forms.ToolStripButton removeToolStripButton; - private System.Windows.Forms.ToolStripButton showToolStripButton; - private System.Windows.Forms.ToolStripButton openToolStripButton; - private System.Windows.Forms.ToolStripButton trashToolStripButton; - private System.Windows.Forms.SplitContainer splitContainer; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Panel panel2; - private ListViewControls transferListView; - private BrightIdeasSoftware.OLVColumn dummyColumn; - private BrightIdeasSoftware.OLVColumn transferColumn; - private System.Windows.Forms.RichTextBox transcriptBox; - private System.Windows.Forms.PictureBox fileIcon; - private EllipsisLabel localLabel; - private EllipsisLabel urlLabel; - private System.Windows.Forms.NumericUpDown queueSizeUpDown; - private System.Windows.Forms.ContextMenuStrip toolbarMenuStrip; - private System.Windows.Forms.ToolStripMenuItem resumeToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem reloadToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem stopToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem removeToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem cleanUpToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem logToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem showToolStripMenuItem; - private System.Windows.Forms.ToolStripButton cleanUptoolStripButton; - private SplitButton bandwithSplitButton; - private System.Windows.Forms.ContextMenuStrip bandwidthMenuStrip; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private ClickThroughToolStrip toolStrip; - private System.Windows.Forms.Button cancelButton; - private System.Windows.Forms.ToolStripButton logToolStripButton; - private System.Windows.Forms.ToolStripMenuItem trashToolStripMenuItem; - } -} +using Ch.Cyberduck.Ui.Winforms.Controls; + +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class TransferForm + { + /// + /// 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(); + this.toolbarMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.resumeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.reloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.stopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.removeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.cleanUpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.logToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.trashToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.showToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.bandwidthMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.cancelButton = new System.Windows.Forms.Button(); + this.splitContainer = new System.Windows.Forms.SplitContainer(); + this.panel2 = new System.Windows.Forms.Panel(); + this.transferListView = new Ch.Cyberduck.Ui.Winforms.Controls.ListViewControls(); + this.dummyColumn = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); + this.transferColumn = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.bandwithSplitButton = new Ch.Cyberduck.Ui.Winforms.Controls.SplitButton(); + this.fileIcon = new System.Windows.Forms.PictureBox(); + this.queueSizeUpDown = new System.Windows.Forms.NumericUpDown(); + this.label1 = new System.Windows.Forms.Label(); + this.localLabel = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); + this.label2 = new System.Windows.Forms.Label(); + this.urlLabel = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); + this.transcriptBox = new System.Windows.Forms.RichTextBox(); + this.toolStrip = new Ch.Cyberduck.Ui.Winforms.Controls.ClickThroughToolStrip(); + this.resumeToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.reloadToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.stopToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.removeToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.cleanUptoolStripButton = new System.Windows.Forms.ToolStripButton(); + this.showToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.openToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.logToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.trashToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolbarMenuStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); + this.splitContainer.Panel1.SuspendLayout(); + this.splitContainer.Panel2.SuspendLayout(); + this.splitContainer.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.transferListView)).BeginInit(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.fileIcon)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.queueSizeUpDown)).BeginInit(); + this.toolStrip.SuspendLayout(); + this.SuspendLayout(); + // + // toolbarMenuStrip + // + this.toolbarMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.resumeToolStripMenuItem, + this.reloadToolStripMenuItem, + this.stopToolStripMenuItem, + this.removeToolStripMenuItem, + this.cleanUpToolStripMenuItem, + this.logToolStripMenuItem, + this.trashToolStripMenuItem, + this.toolStripSeparator1, + this.openToolStripMenuItem, + this.showToolStripMenuItem}); + this.toolbarMenuStrip.Name = "toolbarMenuStrip"; + this.toolbarMenuStrip.Size = new System.Drawing.Size(123, 208); + this.toolbarMenuStrip.Closing += new System.Windows.Forms.ToolStripDropDownClosingEventHandler(this.toolbarMenuStrip_Closing); + this.toolbarMenuStrip.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.toolbarMenuStrip_ItemClicked); + // + // resumeToolStripMenuItem + // + this.resumeToolStripMenuItem.Name = "resumeToolStripMenuItem"; + this.resumeToolStripMenuItem.Size = new System.Drawing.Size(122, 22); + this.resumeToolStripMenuItem.Text = "Resume"; + // + // reloadToolStripMenuItem + // + this.reloadToolStripMenuItem.Name = "reloadToolStripMenuItem"; + this.reloadToolStripMenuItem.Size = new System.Drawing.Size(122, 22); + this.reloadToolStripMenuItem.Text = "Reload"; + // + // stopToolStripMenuItem + // + this.stopToolStripMenuItem.Name = "stopToolStripMenuItem"; + this.stopToolStripMenuItem.Size = new System.Drawing.Size(122, 22); + this.stopToolStripMenuItem.Text = "Stop"; + // + // removeToolStripMenuItem + // + this.removeToolStripMenuItem.Name = "removeToolStripMenuItem"; + this.removeToolStripMenuItem.Size = new System.Drawing.Size(122, 22); + this.removeToolStripMenuItem.Text = "Remove"; + // + // cleanUpToolStripMenuItem + // + this.cleanUpToolStripMenuItem.Name = "cleanUpToolStripMenuItem"; + this.cleanUpToolStripMenuItem.Size = new System.Drawing.Size(122, 22); + this.cleanUpToolStripMenuItem.Text = "Clean Up"; + // + // logToolStripMenuItem + // + this.logToolStripMenuItem.Name = "logToolStripMenuItem"; + this.logToolStripMenuItem.Size = new System.Drawing.Size(122, 22); + this.logToolStripMenuItem.Text = "Log"; + // + // trashToolStripMenuItem + // + this.trashToolStripMenuItem.Name = "trashToolStripMenuItem"; + this.trashToolStripMenuItem.Size = new System.Drawing.Size(122, 22); + this.trashToolStripMenuItem.Text = "Trash"; + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(119, 6); + // + // openToolStripMenuItem + // + this.openToolStripMenuItem.Name = "openToolStripMenuItem"; + this.openToolStripMenuItem.Size = new System.Drawing.Size(122, 22); + this.openToolStripMenuItem.Text = "Open"; + // + // showToolStripMenuItem + // + this.showToolStripMenuItem.Name = "showToolStripMenuItem"; + this.showToolStripMenuItem.Size = new System.Drawing.Size(122, 22); + this.showToolStripMenuItem.Text = "Show"; + // + // bandwidthMenuStrip + // + this.bandwidthMenuStrip.Name = "bandwidthMenuStrip"; + this.bandwidthMenuStrip.Size = new System.Drawing.Size(61, 4); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(302, 12); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(0, 0); + this.cancelButton.TabIndex = 7; + this.cancelButton.TabStop = false; + this.cancelButton.Text = "cancelButton"; + this.cancelButton.UseVisualStyleBackColor = true; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // splitContainer + // + this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer.Location = new System.Drawing.Point(0, 54); + this.splitContainer.Name = "splitContainer"; + this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer.Panel1 + // + this.splitContainer.Panel1.Controls.Add(this.panel2); + // + // splitContainer.Panel2 + // + this.splitContainer.Panel2.Controls.Add(this.transcriptBox); + this.splitContainer.Size = new System.Drawing.Size(541, 478); + this.splitContainer.SplitterDistance = 324; + this.splitContainer.SplitterWidth = 5; + this.splitContainer.TabIndex = 6; + this.splitContainer.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer_SplitterMoved); + // + // panel2 + // + this.panel2.Controls.Add(this.transferListView); + this.panel2.Controls.Add(this.tableLayoutPanel1); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(541, 324); + this.panel2.TabIndex = 7; + // + // transferListView + // + this.transferListView.AllColumns.Add(this.dummyColumn); + this.transferListView.AllColumns.Add(this.transferColumn); + this.transferListView.AlternateRowBackColor = System.Drawing.SystemColors.Menu; + this.transferListView.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.transferListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.dummyColumn, + this.transferColumn}); + this.transferListView.Cursor = System.Windows.Forms.Cursors.Default; + this.transferListView.Dock = System.Windows.Forms.DockStyle.Fill; + this.transferListView.GridLines = true; + this.transferListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; + this.transferListView.Location = new System.Drawing.Point(0, 0); + this.transferListView.Name = "transferListView"; + this.transferListView.RowHeight = 85; + this.transferListView.Size = new System.Drawing.Size(541, 280); + this.transferListView.TabIndex = 6; + this.transferListView.UseCompatibleStateImageBehavior = false; + this.transferListView.View = System.Windows.Forms.View.Details; + this.transferListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.transferListView_KeyDown); + this.transferListView.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.transferListView_KeyPress); + // + // dummyColumn + // + this.dummyColumn.CellPadding = null; + // + // transferColumn + // + this.transferColumn.CellPadding = null; + this.transferColumn.Width = 400; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 5; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 42F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 40F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 55F)); + this.tableLayoutPanel1.Controls.Add(this.bandwithSplitButton, 4, 0); + this.tableLayoutPanel1.Controls.Add(this.fileIcon, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.queueSizeUpDown, 3, 0); + this.tableLayoutPanel1.Controls.Add(this.label1, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.localLabel, 2, 1); + this.tableLayoutPanel1.Controls.Add(this.label2, 1, 1); + this.tableLayoutPanel1.Controls.Add(this.urlLabel, 2, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 280); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(5, 5, 5, 0); + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(541, 44); + this.tableLayoutPanel1.TabIndex = 8; + // + // bandwithSplitButton + // + this.bandwithSplitButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.bandwithSplitButton.ContextMenuStrip = this.bandwidthMenuStrip; + this.bandwithSplitButton.Location = new System.Drawing.Point(484, 13); + this.bandwithSplitButton.Name = "bandwithSplitButton"; + this.tableLayoutPanel1.SetRowSpan(this.bandwithSplitButton, 2); + this.bandwithSplitButton.Size = new System.Drawing.Size(49, 23); + this.bandwithSplitButton.SplitMenuStrip = this.bandwidthMenuStrip; + this.bandwithSplitButton.TabIndex = 7; + this.bandwithSplitButton.UseVisualStyleBackColor = true; + this.bandwithSplitButton.Click += new System.EventHandler(this.bandwithSplitButton_Click); + // + // fileIcon + // + this.fileIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.fileIcon.Location = new System.Drawing.Point(8, 5); + this.fileIcon.Margin = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.fileIcon.Name = "fileIcon"; + this.tableLayoutPanel1.SetRowSpan(this.fileIcon, 2); + this.fileIcon.Size = new System.Drawing.Size(36, 36); + this.fileIcon.TabIndex = 2; + this.fileIcon.TabStop = false; + // + // queueSizeUpDown + // + this.queueSizeUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.queueSizeUpDown.Location = new System.Drawing.Point(444, 13); + this.queueSizeUpDown.Maximum = new decimal(new int[] { + 9, + 0, + 0, + 0}); + this.queueSizeUpDown.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.queueSizeUpDown.Name = "queueSizeUpDown"; + this.tableLayoutPanel1.SetRowSpan(this.queueSizeUpDown, 2); + this.queueSizeUpDown.Size = new System.Drawing.Size(34, 23); + this.queueSizeUpDown.TabIndex = 6; + this.queueSizeUpDown.Value = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.queueSizeUpDown.ValueChanged += new System.EventHandler(this.queueSizeUpDown_ValueChanged); + // + // label1 + // + this.label1.Dock = System.Windows.Forms.DockStyle.Fill; + this.label1.Location = new System.Drawing.Point(50, 5); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(94, 19); + this.label1.TabIndex = 0; + this.label1.Text = "URL:"; + this.label1.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // localLabel + // + this.localLabel.AutoSize = true; + this.localLabel.Dock = System.Windows.Forms.DockStyle.Fill; + this.localLabel.Location = new System.Drawing.Point(150, 24); + this.localLabel.Name = "localLabel"; + this.localLabel.Size = new System.Drawing.Size(288, 20); + this.localLabel.TabIndex = 4; + // + // label2 + // + this.label2.Dock = System.Windows.Forms.DockStyle.Fill; + this.label2.Location = new System.Drawing.Point(50, 24); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(94, 20); + this.label2.TabIndex = 1; + this.label2.Text = "Local File:"; + this.label2.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // urlLabel + // + this.urlLabel.Dock = System.Windows.Forms.DockStyle.Fill; + this.urlLabel.Location = new System.Drawing.Point(150, 5); + this.urlLabel.Name = "urlLabel"; + this.urlLabel.Size = new System.Drawing.Size(288, 19); + this.urlLabel.TabIndex = 3; + // + // transcriptBox + // + this.transcriptBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.transcriptBox.Location = new System.Drawing.Point(0, 0); + this.transcriptBox.Name = "transcriptBox"; + this.transcriptBox.ReadOnly = true; + this.transcriptBox.Size = new System.Drawing.Size(541, 149); + this.transcriptBox.TabIndex = 1; + this.transcriptBox.Text = ""; + // + // toolStrip + // + this.toolStrip.ContextMenuStrip = this.toolbarMenuStrip; + this.toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.toolStrip.ImageScalingSize = new System.Drawing.Size(32, 32); + this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.resumeToolStripButton, + this.reloadToolStripButton, + this.stopToolStripButton, + this.removeToolStripButton, + this.cleanUptoolStripButton, + this.showToolStripButton, + this.openToolStripButton, + this.logToolStripButton, + this.trashToolStripButton}); + this.toolStrip.Location = new System.Drawing.Point(0, 0); + this.toolStrip.Name = "toolStrip"; + this.toolStrip.Size = new System.Drawing.Size(541, 54); + this.toolStrip.TabIndex = 5; + this.toolStrip.Text = "toolStrip1"; + // + // resumeToolStripButton + // + this.resumeToolStripButton.AutoToolTip = false; + this.resumeToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.resume; + this.resumeToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.resumeToolStripButton.Name = "resumeToolStripButton"; + this.resumeToolStripButton.Size = new System.Drawing.Size(53, 51); + this.resumeToolStripButton.Text = "Resume"; + this.resumeToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // reloadToolStripButton + // + this.reloadToolStripButton.AutoToolTip = false; + this.reloadToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.reload; + this.reloadToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.reloadToolStripButton.Name = "reloadToolStripButton"; + this.reloadToolStripButton.Size = new System.Drawing.Size(47, 51); + this.reloadToolStripButton.Text = "Reload"; + this.reloadToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // stopToolStripButton + // + this.stopToolStripButton.AutoToolTip = false; + this.stopToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.stop; + this.stopToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.stopToolStripButton.Name = "stopToolStripButton"; + this.stopToolStripButton.Size = new System.Drawing.Size(36, 51); + this.stopToolStripButton.Text = "Stop"; + this.stopToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // removeToolStripButton + // + this.removeToolStripButton.AutoToolTip = false; + this.removeToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.clean; + this.removeToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.removeToolStripButton.Name = "removeToolStripButton"; + this.removeToolStripButton.Size = new System.Drawing.Size(54, 51); + this.removeToolStripButton.Text = "Remove"; + this.removeToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // cleanUptoolStripButton + // + this.cleanUptoolStripButton.AutoToolTip = false; + this.cleanUptoolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.cleanall; + this.cleanUptoolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.cleanUptoolStripButton.Name = "cleanUptoolStripButton"; + this.cleanUptoolStripButton.Size = new System.Drawing.Size(59, 51); + this.cleanUptoolStripButton.Text = "Clean Up"; + this.cleanUptoolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // showToolStripButton + // + this.showToolStripButton.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.showToolStripButton.AutoToolTip = false; + this.showToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.reveal; + this.showToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.showToolStripButton.Name = "showToolStripButton"; + this.showToolStripButton.Size = new System.Drawing.Size(40, 51); + this.showToolStripButton.Text = "Show"; + this.showToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // openToolStripButton + // + this.openToolStripButton.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.openToolStripButton.AutoToolTip = false; + this.openToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.open; + this.openToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.openToolStripButton.Name = "openToolStripButton"; + this.openToolStripButton.Size = new System.Drawing.Size(40, 51); + this.openToolStripButton.Text = "Open"; + this.openToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // logToolStripButton + // + this.logToolStripButton.AutoToolTip = false; + this.logToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.log; + this.logToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.logToolStripButton.Name = "logToolStripButton"; + this.logToolStripButton.Size = new System.Drawing.Size(36, 51); + this.logToolStripButton.Text = "Log"; + this.logToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // trashToolStripButton + // + this.trashToolStripButton.AutoToolTip = false; + this.trashToolStripButton.Image = global::Ch.Cyberduck.ResourcesBundle.trash; + this.trashToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.trashToolStripButton.Name = "trashToolStripButton"; + this.trashToolStripButton.Size = new System.Drawing.Size(40, 51); + this.trashToolStripButton.Text = "Trash"; + this.trashToolStripButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + // + // TransferForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(541, 532); + this.Controls.Add(this.splitContainer); + this.Controls.Add(this.toolStrip); + this.Controls.Add(this.cancelButton); + this.Name = "TransferForm"; + this.Text = "Transfers"; + this.toolbarMenuStrip.ResumeLayout(false); + this.splitContainer.Panel1.ResumeLayout(false); + this.splitContainer.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); + this.splitContainer.ResumeLayout(false); + this.panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.transferListView)).EndInit(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.fileIcon)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.queueSizeUpDown)).EndInit(); + this.toolStrip.ResumeLayout(false); + this.toolStrip.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStripButton resumeToolStripButton; + private System.Windows.Forms.ToolStripButton reloadToolStripButton; + private System.Windows.Forms.ToolStripButton stopToolStripButton; + private System.Windows.Forms.ToolStripButton removeToolStripButton; + private System.Windows.Forms.ToolStripButton showToolStripButton; + private System.Windows.Forms.ToolStripButton openToolStripButton; + private System.Windows.Forms.ToolStripButton trashToolStripButton; + private System.Windows.Forms.SplitContainer splitContainer; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Panel panel2; + private ListViewControls transferListView; + private BrightIdeasSoftware.OLVColumn dummyColumn; + private BrightIdeasSoftware.OLVColumn transferColumn; + private System.Windows.Forms.RichTextBox transcriptBox; + private System.Windows.Forms.PictureBox fileIcon; + private EllipsisLabel localLabel; + private EllipsisLabel urlLabel; + private System.Windows.Forms.NumericUpDown queueSizeUpDown; + private System.Windows.Forms.ContextMenuStrip toolbarMenuStrip; + private System.Windows.Forms.ToolStripMenuItem resumeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem reloadToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem stopToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem removeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem cleanUpToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem logToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem showToolStripMenuItem; + private System.Windows.Forms.ToolStripButton cleanUptoolStripButton; + private SplitButton bandwithSplitButton; + private System.Windows.Forms.ContextMenuStrip bandwidthMenuStrip; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private ClickThroughToolStrip toolStrip; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.ToolStripButton logToolStripButton; + private System.Windows.Forms.ToolStripMenuItem trashToolStripMenuItem; + } +} diff --git a/source/ch/cyberduck/ui/winforms/TransferForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferForm.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/TransferForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferForm.cs index 4c95dce1e1..f7004aa060 100644 --- a/source/ch/cyberduck/ui/winforms/TransferForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferForm.cs @@ -1,418 +1,418 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; -using Windows7.DesktopIntegration; -using Windows7.DesktopIntegration.WindowsForms; -using ch.cyberduck.core.io; -using ch.cyberduck.core.preferences; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Ui.Controller; -using Ch.Cyberduck.Ui.Core; -using Ch.Cyberduck.Ui.Winforms.Controls; -using Utils = Ch.Cyberduck.Core.Utils; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class TransferForm : BaseForm, ITransferView - { - private static readonly Font FixedFont = new Font("Courier New", 8, FontStyle.Regular); - private static readonly int MaxHeight = 800; - private static readonly int MaxWidth = 800; - private static readonly int MinHeight = 250; - private static readonly int MinWidth = 450; - private string _currentImage = string.Empty; - private ToolStripMenuItem _lastMenuItemClicked; - - public TransferForm() - { - InitializeComponent(); - - MaximumSize = new Size(MaxWidth, MaxHeight); - MinimumSize = new Size(MinWidth, MinHeight); - - ConfigureToolbar(); - - bandwithSplitButton.Image = IconCache.Instance.IconForName("bandwidth", 16); - showToolStripButton.Image = IconCache.Instance.IconForName("reveal"); - - transferListView.FullRowSelect = false; - transferListView.HeaderStyle = ColumnHeaderStyle.None; - transferListView.ShowGroups = false; - transferListView.View = View.Details; - transferListView.RowHeight = 90; - transferListView.MultiSelect = true; - transferListView.GridLines = false; - transferListView.UseOverlays = false; - - dummyColumn.Width = 0; - transferColumn.FillsFreeSpace = true; - transferListView.ItemSelectionChanged += delegate(object sender, ListViewItemSelectionChangedEventArgs e) - { - TransferControl uc = ((TransferControl) transferListView.GetEmbeddedControl(1, e.ItemIndex)); - if (null != uc) - { - uc.Selected = e.IsSelected; - if (e.IsSelected && uc.FocusRemoveAllowed) - { - transferListView.Select(); - } - } - }; - transferListView.ItemSelectionChanged += (sender, e) => SelectionChangedEvent(); - transferListView.ItemsChanged += - delegate { transferListView.GridLines = transferListView.GetItemCount() > 0; }; - - //force handle creation - IntPtr intPtr = Handle; - } - - public override string[] BundleNames - { - get { return new[] {"Transfer", "Localizable"}; } - } - - public string Url - { - set { urlLabel.Text = value; } - } - - public string Local - { - set { localLabel.Text = value; } - } - - public Image FileIcon - { - set { fileIcon.Image = value; } - } - - public int TranscriptHeight - { - get { return splitContainer.Height - splitContainer.SplitterDistance; } - set - { - if (splitContainer.Height > value) - { - splitContainer.SplitterDistance = splitContainer.Height - value; - } - } - } - - public bool TranscriptVisible - { - get { return !splitContainer.Panel2Collapsed; } - set { splitContainer.Panel2Collapsed = !value; } - } - - public float Bandwidth - { - get - { - foreach (ToolStripItem item in bandwidthMenuStrip.Items) - { - if (item is ToolStripMenuItem) - { - ToolStripMenuItem m = (ToolStripMenuItem) item; - if (m.Checked) - { - return (float) m.Tag; - } - } - } - return BandwidthThrottle.UNLIMITED; - } - set - { - foreach (ToolStripItem item in bandwidthMenuStrip.Items) - { - if (item is ToolStripMenuItem) - { - ToolStripMenuItem m = (ToolStripMenuItem) item; - m.Checked = value.Equals(m.Tag); - if (m.Checked) - { - if (m.Tag.Equals(BandwidthThrottle.UNLIMITED)) - { - if (!_currentImage.Equals("bandwidth")) - { - bandwithSplitButton.Image = IconCache.Instance.IconForName("bandwidth", 16); - _currentImage = "bandwidth"; - } - } - else - { - if (!_currentImage.Equals("turtle")) - { - bandwithSplitButton.Image = IconCache.Instance.IconForName("turtle"); - _currentImage = "turtle"; - } - } - } - } - } - } - } - - public bool BandwidthEnabled - { - set { bandwithSplitButton.Enabled = value; } - } - - public int QueueSize - { - get { return Convert.ToInt32(queueSizeUpDown.Value); } - set { queueSizeUpDown.Value = value; } - } - - public void SelectTransfer(IProgressView view) - { - transferListView.DeselectAll(); - transferListView.EnsureModelVisible(view); - int index = transferListView.IndexOf(view); - transferListView.FocusedItem = transferListView.Items[index]; - transferListView.SelectedObject = view; - } - - public void AddTransfer(IProgressView view) - { - Control c = view as Control; - if (null != c) - { - transferListView.AddObject(view); - c.DoubleClick += delegate { ReloadEvent(); }; - transferListView.AddEmbeddedControl(c, 1, transferListView.GetItemCount() - 1, DockStyle.Fill); - } - } - - public void RemoveTransfer(IProgressView view) - { - var control = view as Control; - transferListView.RemoveEmbeddedControl(control); - transferListView.RemoveObject(control); - control.Dispose(); - } - - public void AddTranscriptEntry(bool request, string entry) - { - transcriptBox.SelectionFont = FixedFont; - if (request) - { - transcriptBox.SelectionColor = Color.Black; - } - else - { - transcriptBox.SelectionColor = Color.DarkGray; - } - transcriptBox.SelectedText = entry + Environment.NewLine; - transcriptBox.Select(transcriptBox.TextLength, transcriptBox.TextLength); - ScrollToBottom(transcriptBox); - } - - public IList SelectedTransfers - { - get - { - IList selected = new List(); - foreach (IProgressView o in transferListView.SelectedObjects) - { - selected.Add(o); - } - return selected; - } - } - - public event VoidHandler ResumeEvent = delegate { }; - public event VoidHandler ReloadEvent = delegate { }; - public event VoidHandler StopEvent = delegate { }; - public event VoidHandler RemoveEvent = delegate { }; - public event VoidHandler CleanEvent = delegate { }; - public event VoidHandler OpenEvent = delegate { }; - public event VoidHandler ShowEvent = delegate { }; - public event VoidHandler TrashEvent = delegate { }; - public event VoidHandler ToggleTranscriptEvent = delegate { }; - public event VoidHandler SelectionChangedEvent = delegate { }; - public event VoidHandler BandwidthChangedEvent = delegate { }; - public event VoidHandler QueueSizeChangedEvent = delegate { }; - public event VoidHandler TranscriptHeightChangedEvent = delegate { }; - public event ValidateCommand ValidateResumeEvent = () => false; - public event ValidateCommand ValidateReloadEvent = () => false; - public event ValidateCommand ValidateStopEvent = () => false; - public event ValidateCommand ValidateRemoveEvent = () => false; - public event ValidateCommand ValidateCleanEvent = () => false; - public event ValidateCommand ValidateOpenEvent = () => false; - public event ValidateCommand ValidateShowEvent = () => false; - - public void PopulateBandwidthList(IList> throttles) - { - for (int index = 0; index < throttles.Count; index++) - { - KeyValuePair throttle = throttles[index]; - ToolStripMenuItem item = new ToolStripMenuItem(throttle.Value); - item.Tag = throttle.Key; - item.Click += delegate(object sender, EventArgs args) - { - foreach (ToolStripItem i in bandwidthMenuStrip.Items) - { - if (i is ToolStripMenuItem) - { - ((ToolStripMenuItem) i).Checked = false; - } - ((ToolStripMenuItem) sender).Checked = true; - } - BandwidthChangedEvent(); - }; - - bandwidthMenuStrip.Items.Add(item); - - if (index == 0) - { - bandwidthMenuStrip.Items.Add(new ToolStripSeparator()); - } - } - } - - public void TaskbarOverlayIcon(Icon icon, string text) - { - this.SetTaskbarOverlayIcon(icon, text); - } - - public void UpdateOverallProgressState(long progress, long maximum) - { - if (Utils.IsWin7OrLater) - { - if (progress == 0 || maximum == 0) - { - Windows7Taskbar.SetProgressState(Handle, Windows7Taskbar.ThumbnailProgressState.NoProgress); - } - else - { - Windows7Taskbar.SetProgressState(Handle, Windows7Taskbar.ThumbnailProgressState.Normal); - Windows7Taskbar.SetProgressValue(Handle, (ulong) progress, (ulong) maximum); - } - } - } - - public static void ScrollToBottom(RichTextBox richTextBox) - { - NativeMethods.SendMessage(richTextBox.Handle, NativeConstants.WM_VSCROLL, NativeConstants.SB_BOTTOM, 0); - } - - private void ConfigureToolbarMenu(ToolStripMenuItem menuItem, ToolStripButton button, String property) - { - menuItem.CheckOnClick = true; - menuItem.Click += delegate - { - button.Visible = !button.Visible; - PreferencesFactory.get().setProperty(property, button.Visible); - }; - - button.Visible = menuItem.Checked = PreferencesFactory.get().getBoolean(property); - } - - private void ConfigureToolbar() - { - ConfigureToolbarMenu(resumeToolStripMenuItem, resumeToolStripButton, "transfer.toolbar.resume"); - ConfigureToolbarMenu(reloadToolStripMenuItem, reloadToolStripButton, "transfer.toolbar.reload"); - ConfigureToolbarMenu(stopToolStripMenuItem, stopToolStripButton, "transfer.toolbar.stop"); - ConfigureToolbarMenu(removeToolStripMenuItem, removeToolStripButton, "transfer.toolbar.remove"); - ConfigureToolbarMenu(cleanUpToolStripMenuItem, cleanUptoolStripButton, "transfer.toolbar.cleanup"); - ConfigureToolbarMenu(logToolStripMenuItem, logToolStripButton, "transfer.toolbar.log"); - ConfigureToolbarMenu(trashToolStripMenuItem, trashToolStripButton, "transfer.toolbar.trash"); - ConfigureToolbarMenu(openToolStripMenuItem, openToolStripButton, "transfer.toolbar.open"); - ConfigureToolbarMenu(showToolStripMenuItem, showToolStripButton, "transfer.toolbar.show"); - - Commands.Add(new ToolStripItem[] {resumeToolStripButton}, null, (sender, args) => ResumeEvent(), - () => ValidateResumeEvent()); - Commands.Add(new ToolStripItem[] {reloadToolStripButton}, null, (sender, args) => ReloadEvent(), - () => ValidateReloadEvent()); - Commands.Add(new ToolStripItem[] {stopToolStripButton}, null, (sender, args) => StopEvent(), - () => ValidateStopEvent()); - Commands.Add(new ToolStripItem[] {removeToolStripButton}, null, (sender, args) => RemoveEvent(), - () => ValidateRemoveEvent()); - Commands.Add(new ToolStripItem[] {cleanUptoolStripButton}, null, (sender, args) => CleanEvent(), - () => ValidateCleanEvent()); - Commands.Add(new ToolStripItem[] {logToolStripButton}, null, (sender, args) => ToggleTranscriptEvent(), - () => true); - Commands.Add(new ToolStripItem[] {trashToolStripButton}, null, (sender, args) => TrashEvent(), - () => ValidateShowEvent()); - Commands.Add(new ToolStripItem[] {openToolStripButton}, null, (sender, args) => OpenEvent(), - () => ValidateOpenEvent()); - Commands.Add(new ToolStripItem[] {showToolStripButton}, null, (sender, args) => ShowEvent(), - () => ValidateShowEvent()); - } - - private void queueSizeUpDown_ValueChanged(object sender, EventArgs e) - { - QueueSizeChangedEvent(); - } - - private void toolbarMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e) - { - if (e.ClickedItem is ToolStripMenuItem) - { - _lastMenuItemClicked = (ToolStripMenuItem) e.ClickedItem; - } - } - - private void toolbarMenuStrip_Closing(object sender, ToolStripDropDownClosingEventArgs e) - { - e.Cancel = (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked && _lastMenuItemClicked != null); - } - - private void bandwithSplitButton_Click(object sender, EventArgs e) - { - bandwithSplitButton.SplitMenuStrip.Show(bandwithSplitButton, new Point(0, bandwithSplitButton.Height), - ToolStripDropDownDirection.BelowRight); - } - - private void splitContainer_SplitterMoved(object sender, SplitterEventArgs e) - { - TranscriptHeightChangedEvent(); - } - - private void transferListView_KeyDown(object sender, KeyEventArgs e) - { - if (e.KeyCode == Keys.Enter) - { - ReloadEvent(); - } - if (e.KeyCode == Keys.Delete) - { - RemoveEvent(); - } - } - - private void transferListView_KeyPress(object sender, KeyPressEventArgs e) - { - //do not beep - if (e.KeyChar == (char) Keys.Enter) - { - e.Handled = true; - } - } - - private void cancelButton_Click(object sender, EventArgs e) - { - Close(); - } - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using Windows7.DesktopIntegration; +using Windows7.DesktopIntegration.WindowsForms; +using ch.cyberduck.core.io; +using ch.cyberduck.core.preferences; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Ui.Controller; +using Ch.Cyberduck.Ui.Core; +using Ch.Cyberduck.Ui.Winforms.Controls; +using Utils = Ch.Cyberduck.Core.Utils; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class TransferForm : BaseForm, ITransferView + { + private static readonly Font FixedFont = new Font("Courier New", 8, FontStyle.Regular); + private static readonly int MaxHeight = 800; + private static readonly int MaxWidth = 800; + private static readonly int MinHeight = 250; + private static readonly int MinWidth = 450; + private string _currentImage = string.Empty; + private ToolStripMenuItem _lastMenuItemClicked; + + public TransferForm() + { + InitializeComponent(); + + MaximumSize = new Size(MaxWidth, MaxHeight); + MinimumSize = new Size(MinWidth, MinHeight); + + ConfigureToolbar(); + + bandwithSplitButton.Image = IconCache.Instance.IconForName("bandwidth", 16); + showToolStripButton.Image = IconCache.Instance.IconForName("reveal"); + + transferListView.FullRowSelect = false; + transferListView.HeaderStyle = ColumnHeaderStyle.None; + transferListView.ShowGroups = false; + transferListView.View = View.Details; + transferListView.RowHeight = 90; + transferListView.MultiSelect = true; + transferListView.GridLines = false; + transferListView.UseOverlays = false; + + dummyColumn.Width = 0; + transferColumn.FillsFreeSpace = true; + transferListView.ItemSelectionChanged += delegate(object sender, ListViewItemSelectionChangedEventArgs e) + { + TransferControl uc = ((TransferControl) transferListView.GetEmbeddedControl(1, e.ItemIndex)); + if (null != uc) + { + uc.Selected = e.IsSelected; + if (e.IsSelected && uc.FocusRemoveAllowed) + { + transferListView.Select(); + } + } + }; + transferListView.ItemSelectionChanged += (sender, e) => SelectionChangedEvent(); + transferListView.ItemsChanged += + delegate { transferListView.GridLines = transferListView.GetItemCount() > 0; }; + + //force handle creation + IntPtr intPtr = Handle; + } + + public override string[] BundleNames + { + get { return new[] {"Transfer", "Localizable"}; } + } + + public string Url + { + set { urlLabel.Text = value; } + } + + public string Local + { + set { localLabel.Text = value; } + } + + public Image FileIcon + { + set { fileIcon.Image = value; } + } + + public int TranscriptHeight + { + get { return splitContainer.Height - splitContainer.SplitterDistance; } + set + { + if (splitContainer.Height > value) + { + splitContainer.SplitterDistance = splitContainer.Height - value; + } + } + } + + public bool TranscriptVisible + { + get { return !splitContainer.Panel2Collapsed; } + set { splitContainer.Panel2Collapsed = !value; } + } + + public float Bandwidth + { + get + { + foreach (ToolStripItem item in bandwidthMenuStrip.Items) + { + if (item is ToolStripMenuItem) + { + ToolStripMenuItem m = (ToolStripMenuItem) item; + if (m.Checked) + { + return (float) m.Tag; + } + } + } + return BandwidthThrottle.UNLIMITED; + } + set + { + foreach (ToolStripItem item in bandwidthMenuStrip.Items) + { + if (item is ToolStripMenuItem) + { + ToolStripMenuItem m = (ToolStripMenuItem) item; + m.Checked = value.Equals(m.Tag); + if (m.Checked) + { + if (m.Tag.Equals(BandwidthThrottle.UNLIMITED)) + { + if (!_currentImage.Equals("bandwidth")) + { + bandwithSplitButton.Image = IconCache.Instance.IconForName("bandwidth", 16); + _currentImage = "bandwidth"; + } + } + else + { + if (!_currentImage.Equals("turtle")) + { + bandwithSplitButton.Image = IconCache.Instance.IconForName("turtle"); + _currentImage = "turtle"; + } + } + } + } + } + } + } + + public bool BandwidthEnabled + { + set { bandwithSplitButton.Enabled = value; } + } + + public int QueueSize + { + get { return Convert.ToInt32(queueSizeUpDown.Value); } + set { queueSizeUpDown.Value = value; } + } + + public void SelectTransfer(IProgressView view) + { + transferListView.DeselectAll(); + transferListView.EnsureModelVisible(view); + int index = transferListView.IndexOf(view); + transferListView.FocusedItem = transferListView.Items[index]; + transferListView.SelectedObject = view; + } + + public void AddTransfer(IProgressView view) + { + Control c = view as Control; + if (null != c) + { + transferListView.AddObject(view); + c.DoubleClick += delegate { ReloadEvent(); }; + transferListView.AddEmbeddedControl(c, 1, transferListView.GetItemCount() - 1, DockStyle.Fill); + } + } + + public void RemoveTransfer(IProgressView view) + { + var control = view as Control; + transferListView.RemoveEmbeddedControl(control); + transferListView.RemoveObject(control); + control.Dispose(); + } + + public void AddTranscriptEntry(bool request, string entry) + { + transcriptBox.SelectionFont = FixedFont; + if (request) + { + transcriptBox.SelectionColor = Color.Black; + } + else + { + transcriptBox.SelectionColor = Color.DarkGray; + } + transcriptBox.SelectedText = entry + Environment.NewLine; + transcriptBox.Select(transcriptBox.TextLength, transcriptBox.TextLength); + ScrollToBottom(transcriptBox); + } + + public IList SelectedTransfers + { + get + { + IList selected = new List(); + foreach (IProgressView o in transferListView.SelectedObjects) + { + selected.Add(o); + } + return selected; + } + } + + public event VoidHandler ResumeEvent = delegate { }; + public event VoidHandler ReloadEvent = delegate { }; + public event VoidHandler StopEvent = delegate { }; + public event VoidHandler RemoveEvent = delegate { }; + public event VoidHandler CleanEvent = delegate { }; + public event VoidHandler OpenEvent = delegate { }; + public event VoidHandler ShowEvent = delegate { }; + public event VoidHandler TrashEvent = delegate { }; + public event VoidHandler ToggleTranscriptEvent = delegate { }; + public event VoidHandler SelectionChangedEvent = delegate { }; + public event VoidHandler BandwidthChangedEvent = delegate { }; + public event VoidHandler QueueSizeChangedEvent = delegate { }; + public event VoidHandler TranscriptHeightChangedEvent = delegate { }; + public event ValidateCommand ValidateResumeEvent = () => false; + public event ValidateCommand ValidateReloadEvent = () => false; + public event ValidateCommand ValidateStopEvent = () => false; + public event ValidateCommand ValidateRemoveEvent = () => false; + public event ValidateCommand ValidateCleanEvent = () => false; + public event ValidateCommand ValidateOpenEvent = () => false; + public event ValidateCommand ValidateShowEvent = () => false; + + public void PopulateBandwidthList(IList> throttles) + { + for (int index = 0; index < throttles.Count; index++) + { + KeyValuePair throttle = throttles[index]; + ToolStripMenuItem item = new ToolStripMenuItem(throttle.Value); + item.Tag = throttle.Key; + item.Click += delegate(object sender, EventArgs args) + { + foreach (ToolStripItem i in bandwidthMenuStrip.Items) + { + if (i is ToolStripMenuItem) + { + ((ToolStripMenuItem) i).Checked = false; + } + ((ToolStripMenuItem) sender).Checked = true; + } + BandwidthChangedEvent(); + }; + + bandwidthMenuStrip.Items.Add(item); + + if (index == 0) + { + bandwidthMenuStrip.Items.Add(new ToolStripSeparator()); + } + } + } + + public void TaskbarOverlayIcon(Icon icon, string text) + { + this.SetTaskbarOverlayIcon(icon, text); + } + + public void UpdateOverallProgressState(long progress, long maximum) + { + if (Utils.IsWin7OrLater) + { + if (progress == 0 || maximum == 0) + { + Windows7Taskbar.SetProgressState(Handle, Windows7Taskbar.ThumbnailProgressState.NoProgress); + } + else + { + Windows7Taskbar.SetProgressState(Handle, Windows7Taskbar.ThumbnailProgressState.Normal); + Windows7Taskbar.SetProgressValue(Handle, (ulong) progress, (ulong) maximum); + } + } + } + + public static void ScrollToBottom(RichTextBox richTextBox) + { + NativeMethods.SendMessage(richTextBox.Handle, NativeConstants.WM_VSCROLL, NativeConstants.SB_BOTTOM, 0); + } + + private void ConfigureToolbarMenu(ToolStripMenuItem menuItem, ToolStripButton button, String property) + { + menuItem.CheckOnClick = true; + menuItem.Click += delegate + { + button.Visible = !button.Visible; + PreferencesFactory.get().setProperty(property, button.Visible); + }; + + button.Visible = menuItem.Checked = PreferencesFactory.get().getBoolean(property); + } + + private void ConfigureToolbar() + { + ConfigureToolbarMenu(resumeToolStripMenuItem, resumeToolStripButton, "transfer.toolbar.resume"); + ConfigureToolbarMenu(reloadToolStripMenuItem, reloadToolStripButton, "transfer.toolbar.reload"); + ConfigureToolbarMenu(stopToolStripMenuItem, stopToolStripButton, "transfer.toolbar.stop"); + ConfigureToolbarMenu(removeToolStripMenuItem, removeToolStripButton, "transfer.toolbar.remove"); + ConfigureToolbarMenu(cleanUpToolStripMenuItem, cleanUptoolStripButton, "transfer.toolbar.cleanup"); + ConfigureToolbarMenu(logToolStripMenuItem, logToolStripButton, "transfer.toolbar.log"); + ConfigureToolbarMenu(trashToolStripMenuItem, trashToolStripButton, "transfer.toolbar.trash"); + ConfigureToolbarMenu(openToolStripMenuItem, openToolStripButton, "transfer.toolbar.open"); + ConfigureToolbarMenu(showToolStripMenuItem, showToolStripButton, "transfer.toolbar.show"); + + Commands.Add(new ToolStripItem[] {resumeToolStripButton}, null, (sender, args) => ResumeEvent(), + () => ValidateResumeEvent()); + Commands.Add(new ToolStripItem[] {reloadToolStripButton}, null, (sender, args) => ReloadEvent(), + () => ValidateReloadEvent()); + Commands.Add(new ToolStripItem[] {stopToolStripButton}, null, (sender, args) => StopEvent(), + () => ValidateStopEvent()); + Commands.Add(new ToolStripItem[] {removeToolStripButton}, null, (sender, args) => RemoveEvent(), + () => ValidateRemoveEvent()); + Commands.Add(new ToolStripItem[] {cleanUptoolStripButton}, null, (sender, args) => CleanEvent(), + () => ValidateCleanEvent()); + Commands.Add(new ToolStripItem[] {logToolStripButton}, null, (sender, args) => ToggleTranscriptEvent(), + () => true); + Commands.Add(new ToolStripItem[] {trashToolStripButton}, null, (sender, args) => TrashEvent(), + () => ValidateShowEvent()); + Commands.Add(new ToolStripItem[] {openToolStripButton}, null, (sender, args) => OpenEvent(), + () => ValidateOpenEvent()); + Commands.Add(new ToolStripItem[] {showToolStripButton}, null, (sender, args) => ShowEvent(), + () => ValidateShowEvent()); + } + + private void queueSizeUpDown_ValueChanged(object sender, EventArgs e) + { + QueueSizeChangedEvent(); + } + + private void toolbarMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + if (e.ClickedItem is ToolStripMenuItem) + { + _lastMenuItemClicked = (ToolStripMenuItem) e.ClickedItem; + } + } + + private void toolbarMenuStrip_Closing(object sender, ToolStripDropDownClosingEventArgs e) + { + e.Cancel = (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked && _lastMenuItemClicked != null); + } + + private void bandwithSplitButton_Click(object sender, EventArgs e) + { + bandwithSplitButton.SplitMenuStrip.Show(bandwithSplitButton, new Point(0, bandwithSplitButton.Height), + ToolStripDropDownDirection.BelowRight); + } + + private void splitContainer_SplitterMoved(object sender, SplitterEventArgs e) + { + TranscriptHeightChangedEvent(); + } + + private void transferListView_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + ReloadEvent(); + } + if (e.KeyCode == Keys.Delete) + { + RemoveEvent(); + } + } + + private void transferListView_KeyPress(object sender, KeyPressEventArgs e) + { + //do not beep + if (e.KeyChar == (char) Keys.Enter) + { + e.Handled = true; + } + } + + private void cancelButton_Click(object sender, EventArgs e) + { + Close(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/TransferForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferForm.resx similarity index 98% rename from source/ch/cyberduck/ui/winforms/TransferForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferForm.resx index 7944fd3020..aacbef5016 100644 --- a/source/ch/cyberduck/ui/winforms/TransferForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferForm.resx @@ -1,129 +1,129 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 115, 17 - - - 263, 17 - - - 17, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 115, 17 + + + 263, 17 + + + 17, 17 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/TransferPromptForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferPromptForm.Designer.cs similarity index 98% rename from source/ch/cyberduck/ui/winforms/TransferPromptForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferPromptForm.Designer.cs index 69d6a1a81f..7c0b0c2531 100644 --- a/source/ch/cyberduck/ui/winforms/TransferPromptForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferPromptForm.Designer.cs @@ -1,413 +1,413 @@ -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Winforms.Controls; - -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class TransferPromptForm - { - /// - /// 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(TransferPromptForm)); - this.comboBoxAction = new System.Windows.Forms.ComboBox(); - this.browser = new Ch.Cyberduck.Ui.Winforms.Controls.MulticolorTreeListView(); - this.treeColumnName = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); - this.treeColumnSize = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); - this.treeColumnWarning = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); - this.treeColumnSync = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); - this.treeColumnCreate = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); - this.localFileUrl = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); - this.localFileModificationDate = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); - this.localFileSize = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); - this.remoteFileModificationDate = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); - this.remoteFileSize = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); - this.remoteFileUrl = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); - this.label1 = new System.Windows.Forms.Label(); - this.labelRemoteFile = new System.Windows.Forms.Label(); - this.cancelButton = new System.Windows.Forms.Button(); - this.continueButton = new System.Windows.Forms.Button(); - this.mainTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); - this.animation = new System.Windows.Forms.PictureBox(); - this.separatorLine = new System.Windows.Forms.Label(); - this.statusLabel = new System.Windows.Forms.Label(); - this.toggleDetailsLabel = new System.Windows.Forms.Label(); - this.imageList = new System.Windows.Forms.ImageList(this.components); - this.detailsTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); - ((System.ComponentModel.ISupportInitialize)(this.browser)).BeginInit(); - this.mainTableLayoutPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.animation)).BeginInit(); - this.detailsTableLayoutPanel.SuspendLayout(); - this.SuspendLayout(); - // - // comboBoxAction - // - this.comboBoxAction.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.mainTableLayoutPanel.SetColumnSpan(this.comboBoxAction, 4); - this.comboBoxAction.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBoxAction.FormattingEnabled = true; - this.comboBoxAction.Location = new System.Drawing.Point(13, 13); - this.comboBoxAction.Name = "comboBoxAction"; - this.comboBoxAction.Size = new System.Drawing.Size(689, 23); - this.comboBoxAction.TabIndex = 0; - this.comboBoxAction.SelectionChangeCommitted += new System.EventHandler(this.comboBoxAction_SelectionChangeCommitted); - // - // browser - // - this.browser.ActiveForegroudColor = System.Drawing.SystemColors.ControlText; - this.browser.ActiveGetterTransferItem = null; - this.browser.ActiveGetterPath = null; - this.browser.AllColumns.Add(this.treeColumnName); - this.browser.AllColumns.Add(this.treeColumnSize); - this.browser.AllColumns.Add(this.treeColumnWarning); - this.browser.AllColumns.Add(this.treeColumnSync); - this.browser.AllColumns.Add(this.treeColumnCreate); - this.browser.CheckBoxes = true; - this.browser.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.treeColumnName, - this.treeColumnSize, - this.treeColumnWarning, - this.treeColumnSync, - this.treeColumnCreate}); - this.mainTableLayoutPanel.SetColumnSpan(this.browser, 4); - this.browser.Cursor = System.Windows.Forms.Cursors.Default; - this.browser.Dock = System.Windows.Forms.DockStyle.Fill; - this.browser.InactiveForegroudColor = System.Drawing.Color.Gray; - this.browser.Location = new System.Drawing.Point(13, 42); - this.browser.Name = "browser"; - this.browser.OwnerDraw = true; - this.browser.ShowGroups = false; - this.browser.ShowImagesOnSubItems = true; - this.browser.Size = new System.Drawing.Size(689, 234); - this.browser.TabIndex = 2; - this.browser.UseCompatibleStateImageBehavior = false; - this.browser.View = System.Windows.Forms.View.Details; - this.browser.VirtualMode = true; - this.browser.SelectionChanged += new System.EventHandler(this.browser_SelectionChanged); - // - // treeColumnName - // - this.treeColumnName.AspectName = "Name"; - this.treeColumnName.Text = "Name"; - this.treeColumnName.UseInitialLetterForGroup = true; - this.treeColumnName.Width = 350; - // - // treeColumnSize - // - this.treeColumnSize.AspectName = "Size"; - this.treeColumnSize.HeaderTextAlign = System.Windows.Forms.HorizontalAlignment.Right; - this.treeColumnSize.Text = "Size"; - this.treeColumnSize.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; - this.treeColumnSize.Width = 120; - // - // treeColumnWarning - // - this.treeColumnWarning.AspectName = ""; - this.treeColumnWarning.IsEditable = false; - this.treeColumnWarning.Text = ""; - this.treeColumnWarning.Width = 20; - // - // treeColumnSync - // - this.treeColumnSync.Width = 20; - // - // treeColumnCreate - // - this.treeColumnCreate.Width = 20; - // - // localFileUrl - // - this.localFileUrl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.localFileUrl.Location = new System.Drawing.Point(91, 51); - this.localFileUrl.Name = "localFileUrl"; - this.localFileUrl.Size = new System.Drawing.Size(611, 15); - this.localFileUrl.TabIndex = 9; - // - // localFileModificationDate - // - this.localFileModificationDate.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.localFileModificationDate.Location = new System.Drawing.Point(91, 81); - this.localFileModificationDate.Name = "localFileModificationDate"; - this.localFileModificationDate.Size = new System.Drawing.Size(611, 17); - this.localFileModificationDate.TabIndex = 8; - // - // localFileSize - // - this.localFileSize.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.localFileSize.Location = new System.Drawing.Point(91, 66); - this.localFileSize.Name = "localFileSize"; - this.localFileSize.Size = new System.Drawing.Size(611, 15); - this.localFileSize.TabIndex = 7; - // - // remoteFileModificationDate - // - this.remoteFileModificationDate.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.remoteFileModificationDate.Location = new System.Drawing.Point(91, 31); - this.remoteFileModificationDate.Name = "remoteFileModificationDate"; - this.remoteFileModificationDate.Size = new System.Drawing.Size(611, 16); - this.remoteFileModificationDate.TabIndex = 6; - // - // remoteFileSize - // - this.remoteFileSize.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.remoteFileSize.Location = new System.Drawing.Point(91, 16); - this.remoteFileSize.Name = "remoteFileSize"; - this.remoteFileSize.Size = new System.Drawing.Size(611, 15); - this.remoteFileSize.TabIndex = 5; - // - // remoteFileUrl - // - this.remoteFileUrl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.remoteFileUrl.Location = new System.Drawing.Point(91, 0); - this.remoteFileUrl.Name = "remoteFileUrl"; - this.remoteFileUrl.Size = new System.Drawing.Size(611, 16); - this.remoteFileUrl.TabIndex = 4; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(13, 51); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(59, 15); - this.label1.TabIndex = 3; - this.label1.Text = "Local File:"; - this.label1.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // labelRemoteFile - // - this.labelRemoteFile.AutoSize = true; - this.labelRemoteFile.Location = new System.Drawing.Point(13, 0); - this.labelRemoteFile.Name = "labelRemoteFile"; - this.labelRemoteFile.Size = new System.Drawing.Size(72, 15); - this.labelRemoteFile.TabIndex = 2; - this.labelRemoteFile.Text = "Remote File:"; - this.labelRemoteFile.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // cancelButton - // - this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.cancelButton.AutoSize = true; - this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancelButton.Location = new System.Drawing.Point(617, 282); - this.cancelButton.Name = "cancelButton"; - this.cancelButton.Size = new System.Drawing.Size(85, 25); - this.cancelButton.TabIndex = 1; - this.cancelButton.Text = "Cancel"; - this.cancelButton.UseVisualStyleBackColor = true; - // - // continueButton - // - this.continueButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.continueButton.AutoSize = true; - this.continueButton.DialogResult = System.Windows.Forms.DialogResult.OK; - this.continueButton.Location = new System.Drawing.Point(526, 282); - this.continueButton.Name = "continueButton"; - this.continueButton.Size = new System.Drawing.Size(85, 25); - this.continueButton.TabIndex = 0; - this.continueButton.Text = "Continue"; - this.continueButton.UseVisualStyleBackColor = true; - // - // mainTableLayoutPanel - // - this.mainTableLayoutPanel.AutoSize = true; - this.mainTableLayoutPanel.ColumnCount = 4; - this.mainTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 30F)); - this.mainTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.mainTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.mainTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.mainTableLayoutPanel.Controls.Add(this.animation, 0, 2); - this.mainTableLayoutPanel.Controls.Add(this.separatorLine, 0, 4); - this.mainTableLayoutPanel.Controls.Add(this.statusLabel, 1, 2); - this.mainTableLayoutPanel.Controls.Add(this.continueButton, 2, 2); - this.mainTableLayoutPanel.Controls.Add(this.cancelButton, 3, 2); - this.mainTableLayoutPanel.Controls.Add(this.comboBoxAction, 0, 0); - this.mainTableLayoutPanel.Controls.Add(this.browser, 0, 1); - this.mainTableLayoutPanel.Controls.Add(this.toggleDetailsLabel, 0, 3); - this.mainTableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.mainTableLayoutPanel.Location = new System.Drawing.Point(0, 0); - this.mainTableLayoutPanel.Name = "mainTableLayoutPanel"; - this.mainTableLayoutPanel.Padding = new System.Windows.Forms.Padding(10); - this.mainTableLayoutPanel.RowCount = 5; - this.mainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.mainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.mainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.mainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.mainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.mainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.mainTableLayoutPanel.Size = new System.Drawing.Size(715, 347); - this.mainTableLayoutPanel.TabIndex = 3; - // - // animation - // - this.animation.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.animation.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; - this.animation.Location = new System.Drawing.Point(13, 282); - this.animation.Name = "animation"; - this.animation.Size = new System.Drawing.Size(24, 20); - this.animation.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.animation.TabIndex = 45; - this.animation.TabStop = false; - this.animation.Visible = false; - // - // separatorLine - // - this.separatorLine.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.separatorLine.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.mainTableLayoutPanel.SetColumnSpan(this.separatorLine, 4); - this.separatorLine.Location = new System.Drawing.Point(16, 335); - this.separatorLine.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); - this.separatorLine.Name = "separatorLine"; - this.separatorLine.Size = new System.Drawing.Size(686, 2); - this.separatorLine.TabIndex = 44; - // - // statusLabel - // - this.statusLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.statusLabel.AutoSize = true; - this.statusLabel.Location = new System.Drawing.Point(43, 279); - this.statusLabel.Name = "statusLabel"; - this.statusLabel.Padding = new System.Windows.Forms.Padding(0, 4, 0, 0); - this.statusLabel.Size = new System.Drawing.Size(477, 19); - this.statusLabel.TabIndex = 3; - this.statusLabel.Text = "Anzahl Files"; - // - // toggleDetailsLabel - // - this.toggleDetailsLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.toggleDetailsLabel.AutoSize = true; - this.mainTableLayoutPanel.SetColumnSpan(this.toggleDetailsLabel, 4); - this.toggleDetailsLabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.toggleDetailsLabel.ImageIndex = 0; - this.toggleDetailsLabel.ImageList = this.imageList; - this.toggleDetailsLabel.Location = new System.Drawing.Point(13, 310); - this.toggleDetailsLabel.MinimumSize = new System.Drawing.Size(0, 25); - this.toggleDetailsLabel.Name = "toggleDetailsLabel"; - this.toggleDetailsLabel.Size = new System.Drawing.Size(124, 25); - this.toggleDetailsLabel.TabIndex = 8; - this.toggleDetailsLabel.Text = " Toggle Transcript"; - this.toggleDetailsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // imageList - // - this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream"))); - this.imageList.TransparentColor = System.Drawing.Color.Fuchsia; - this.imageList.Images.SetKeyName(0, "arrow_up_bw.bmp"); - this.imageList.Images.SetKeyName(1, "arrow_up_color.bmp"); - this.imageList.Images.SetKeyName(2, "arrow_up_color_pressed.bmp"); - this.imageList.Images.SetKeyName(3, "arrow_down_bw.bmp"); - this.imageList.Images.SetKeyName(4, "arrow_down_color.bmp"); - this.imageList.Images.SetKeyName(5, "arrow_down_color_pressed.bmp"); - this.imageList.Images.SetKeyName(6, "green_arrow.bmp"); - // - // detailsTableLayoutPanel - // - this.detailsTableLayoutPanel.AutoSize = true; - this.detailsTableLayoutPanel.ColumnCount = 2; - this.detailsTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.detailsTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.detailsTableLayoutPanel.Controls.Add(this.localFileModificationDate, 1, 6); - this.detailsTableLayoutPanel.Controls.Add(this.localFileUrl, 1, 4); - this.detailsTableLayoutPanel.Controls.Add(this.localFileSize, 1, 5); - this.detailsTableLayoutPanel.Controls.Add(this.labelRemoteFile, 0, 0); - this.detailsTableLayoutPanel.Controls.Add(this.remoteFileUrl, 1, 0); - this.detailsTableLayoutPanel.Controls.Add(this.remoteFileSize, 1, 1); - this.detailsTableLayoutPanel.Controls.Add(this.label1, 0, 4); - this.detailsTableLayoutPanel.Controls.Add(this.remoteFileModificationDate, 1, 2); - this.detailsTableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Bottom; - this.detailsTableLayoutPanel.Location = new System.Drawing.Point(0, 347); - this.detailsTableLayoutPanel.Name = "detailsTableLayoutPanel"; - this.detailsTableLayoutPanel.Padding = new System.Windows.Forms.Padding(10, 0, 10, 10); - this.detailsTableLayoutPanel.RowCount = 7; - this.detailsTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.detailsTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.detailsTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.detailsTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 4F)); - this.detailsTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.detailsTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.detailsTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.detailsTableLayoutPanel.Size = new System.Drawing.Size(715, 108); - this.detailsTableLayoutPanel.TabIndex = 4; - // - // TransferPromptForm - // - this.AcceptButton = this.continueButton; - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.cancelButton; - this.ClientSize = new System.Drawing.Size(715, 455); - this.Controls.Add(this.mainTableLayoutPanel); - this.Controls.Add(this.detailsTableLayoutPanel); - this.Name = "TransferPromptForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "TransferControl Prompt"; - ((System.ComponentModel.ISupportInitialize)(this.browser)).EndInit(); - this.mainTableLayoutPanel.ResumeLayout(false); - this.mainTableLayoutPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.animation)).EndInit(); - this.detailsTableLayoutPanel.ResumeLayout(false); - this.detailsTableLayoutPanel.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.ComboBox comboBoxAction; - private System.Windows.Forms.Button cancelButton; - private System.Windows.Forms.Button continueButton; - private MulticolorTreeListView browser; - private BrightIdeasSoftware.OLVColumn treeColumnName; - private BrightIdeasSoftware.OLVColumn treeColumnSize; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label labelRemoteFile; - private EllipsisLabel remoteFileUrl; - private EllipsisLabel remoteFileModificationDate; - private EllipsisLabel remoteFileSize; - private EllipsisLabel localFileUrl; - private EllipsisLabel localFileModificationDate; - private EllipsisLabel localFileSize; - private TableLayoutPanel mainTableLayoutPanel; - private System.Windows.Forms.Label statusLabel; - private System.Windows.Forms.Label toggleDetailsLabel; - private System.Windows.Forms.Label separatorLine; - private TableLayoutPanel detailsTableLayoutPanel; - private BrightIdeasSoftware.OLVColumn treeColumnWarning; - private BrightIdeasSoftware.OLVColumn treeColumnSync; - private BrightIdeasSoftware.OLVColumn treeColumnCreate; - private ImageList imageList; - private PictureBox animation; - } +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Winforms.Controls; + +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class TransferPromptForm + { + /// + /// 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(TransferPromptForm)); + this.comboBoxAction = new System.Windows.Forms.ComboBox(); + this.browser = new Ch.Cyberduck.Ui.Winforms.Controls.MulticolorTreeListView(); + this.treeColumnName = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); + this.treeColumnSize = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); + this.treeColumnWarning = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); + this.treeColumnSync = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); + this.treeColumnCreate = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); + this.localFileUrl = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); + this.localFileModificationDate = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); + this.localFileSize = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); + this.remoteFileModificationDate = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); + this.remoteFileSize = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); + this.remoteFileUrl = new Ch.Cyberduck.Ui.Winforms.Controls.EllipsisLabel(); + this.label1 = new System.Windows.Forms.Label(); + this.labelRemoteFile = new System.Windows.Forms.Label(); + this.cancelButton = new System.Windows.Forms.Button(); + this.continueButton = new System.Windows.Forms.Button(); + this.mainTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.animation = new System.Windows.Forms.PictureBox(); + this.separatorLine = new System.Windows.Forms.Label(); + this.statusLabel = new System.Windows.Forms.Label(); + this.toggleDetailsLabel = new System.Windows.Forms.Label(); + this.imageList = new System.Windows.Forms.ImageList(this.components); + this.detailsTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.browser)).BeginInit(); + this.mainTableLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.animation)).BeginInit(); + this.detailsTableLayoutPanel.SuspendLayout(); + this.SuspendLayout(); + // + // comboBoxAction + // + this.comboBoxAction.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.mainTableLayoutPanel.SetColumnSpan(this.comboBoxAction, 4); + this.comboBoxAction.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxAction.FormattingEnabled = true; + this.comboBoxAction.Location = new System.Drawing.Point(13, 13); + this.comboBoxAction.Name = "comboBoxAction"; + this.comboBoxAction.Size = new System.Drawing.Size(689, 23); + this.comboBoxAction.TabIndex = 0; + this.comboBoxAction.SelectionChangeCommitted += new System.EventHandler(this.comboBoxAction_SelectionChangeCommitted); + // + // browser + // + this.browser.ActiveForegroudColor = System.Drawing.SystemColors.ControlText; + this.browser.ActiveGetterTransferItem = null; + this.browser.ActiveGetterPath = null; + this.browser.AllColumns.Add(this.treeColumnName); + this.browser.AllColumns.Add(this.treeColumnSize); + this.browser.AllColumns.Add(this.treeColumnWarning); + this.browser.AllColumns.Add(this.treeColumnSync); + this.browser.AllColumns.Add(this.treeColumnCreate); + this.browser.CheckBoxes = true; + this.browser.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.treeColumnName, + this.treeColumnSize, + this.treeColumnWarning, + this.treeColumnSync, + this.treeColumnCreate}); + this.mainTableLayoutPanel.SetColumnSpan(this.browser, 4); + this.browser.Cursor = System.Windows.Forms.Cursors.Default; + this.browser.Dock = System.Windows.Forms.DockStyle.Fill; + this.browser.InactiveForegroudColor = System.Drawing.Color.Gray; + this.browser.Location = new System.Drawing.Point(13, 42); + this.browser.Name = "browser"; + this.browser.OwnerDraw = true; + this.browser.ShowGroups = false; + this.browser.ShowImagesOnSubItems = true; + this.browser.Size = new System.Drawing.Size(689, 234); + this.browser.TabIndex = 2; + this.browser.UseCompatibleStateImageBehavior = false; + this.browser.View = System.Windows.Forms.View.Details; + this.browser.VirtualMode = true; + this.browser.SelectionChanged += new System.EventHandler(this.browser_SelectionChanged); + // + // treeColumnName + // + this.treeColumnName.AspectName = "Name"; + this.treeColumnName.Text = "Name"; + this.treeColumnName.UseInitialLetterForGroup = true; + this.treeColumnName.Width = 350; + // + // treeColumnSize + // + this.treeColumnSize.AspectName = "Size"; + this.treeColumnSize.HeaderTextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.treeColumnSize.Text = "Size"; + this.treeColumnSize.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.treeColumnSize.Width = 120; + // + // treeColumnWarning + // + this.treeColumnWarning.AspectName = ""; + this.treeColumnWarning.IsEditable = false; + this.treeColumnWarning.Text = ""; + this.treeColumnWarning.Width = 20; + // + // treeColumnSync + // + this.treeColumnSync.Width = 20; + // + // treeColumnCreate + // + this.treeColumnCreate.Width = 20; + // + // localFileUrl + // + this.localFileUrl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.localFileUrl.Location = new System.Drawing.Point(91, 51); + this.localFileUrl.Name = "localFileUrl"; + this.localFileUrl.Size = new System.Drawing.Size(611, 15); + this.localFileUrl.TabIndex = 9; + // + // localFileModificationDate + // + this.localFileModificationDate.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.localFileModificationDate.Location = new System.Drawing.Point(91, 81); + this.localFileModificationDate.Name = "localFileModificationDate"; + this.localFileModificationDate.Size = new System.Drawing.Size(611, 17); + this.localFileModificationDate.TabIndex = 8; + // + // localFileSize + // + this.localFileSize.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.localFileSize.Location = new System.Drawing.Point(91, 66); + this.localFileSize.Name = "localFileSize"; + this.localFileSize.Size = new System.Drawing.Size(611, 15); + this.localFileSize.TabIndex = 7; + // + // remoteFileModificationDate + // + this.remoteFileModificationDate.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.remoteFileModificationDate.Location = new System.Drawing.Point(91, 31); + this.remoteFileModificationDate.Name = "remoteFileModificationDate"; + this.remoteFileModificationDate.Size = new System.Drawing.Size(611, 16); + this.remoteFileModificationDate.TabIndex = 6; + // + // remoteFileSize + // + this.remoteFileSize.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.remoteFileSize.Location = new System.Drawing.Point(91, 16); + this.remoteFileSize.Name = "remoteFileSize"; + this.remoteFileSize.Size = new System.Drawing.Size(611, 15); + this.remoteFileSize.TabIndex = 5; + // + // remoteFileUrl + // + this.remoteFileUrl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.remoteFileUrl.Location = new System.Drawing.Point(91, 0); + this.remoteFileUrl.Name = "remoteFileUrl"; + this.remoteFileUrl.Size = new System.Drawing.Size(611, 16); + this.remoteFileUrl.TabIndex = 4; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(13, 51); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(59, 15); + this.label1.TabIndex = 3; + this.label1.Text = "Local File:"; + this.label1.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // labelRemoteFile + // + this.labelRemoteFile.AutoSize = true; + this.labelRemoteFile.Location = new System.Drawing.Point(13, 0); + this.labelRemoteFile.Name = "labelRemoteFile"; + this.labelRemoteFile.Size = new System.Drawing.Size(72, 15); + this.labelRemoteFile.TabIndex = 2; + this.labelRemoteFile.Text = "Remote File:"; + this.labelRemoteFile.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // cancelButton + // + this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.cancelButton.AutoSize = true; + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(617, 282); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(85, 25); + this.cancelButton.TabIndex = 1; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + // + // continueButton + // + this.continueButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.continueButton.AutoSize = true; + this.continueButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.continueButton.Location = new System.Drawing.Point(526, 282); + this.continueButton.Name = "continueButton"; + this.continueButton.Size = new System.Drawing.Size(85, 25); + this.continueButton.TabIndex = 0; + this.continueButton.Text = "Continue"; + this.continueButton.UseVisualStyleBackColor = true; + // + // mainTableLayoutPanel + // + this.mainTableLayoutPanel.AutoSize = true; + this.mainTableLayoutPanel.ColumnCount = 4; + this.mainTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 30F)); + this.mainTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.mainTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.mainTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.mainTableLayoutPanel.Controls.Add(this.animation, 0, 2); + this.mainTableLayoutPanel.Controls.Add(this.separatorLine, 0, 4); + this.mainTableLayoutPanel.Controls.Add(this.statusLabel, 1, 2); + this.mainTableLayoutPanel.Controls.Add(this.continueButton, 2, 2); + this.mainTableLayoutPanel.Controls.Add(this.cancelButton, 3, 2); + this.mainTableLayoutPanel.Controls.Add(this.comboBoxAction, 0, 0); + this.mainTableLayoutPanel.Controls.Add(this.browser, 0, 1); + this.mainTableLayoutPanel.Controls.Add(this.toggleDetailsLabel, 0, 3); + this.mainTableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.mainTableLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.mainTableLayoutPanel.Name = "mainTableLayoutPanel"; + this.mainTableLayoutPanel.Padding = new System.Windows.Forms.Padding(10); + this.mainTableLayoutPanel.RowCount = 5; + this.mainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.mainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.mainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.mainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.mainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.mainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.mainTableLayoutPanel.Size = new System.Drawing.Size(715, 347); + this.mainTableLayoutPanel.TabIndex = 3; + // + // animation + // + this.animation.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.animation.Image = global::Ch.Cyberduck.ResourcesBundle.throbber_small; + this.animation.Location = new System.Drawing.Point(13, 282); + this.animation.Name = "animation"; + this.animation.Size = new System.Drawing.Size(24, 20); + this.animation.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.animation.TabIndex = 45; + this.animation.TabStop = false; + this.animation.Visible = false; + // + // separatorLine + // + this.separatorLine.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.separatorLine.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.mainTableLayoutPanel.SetColumnSpan(this.separatorLine, 4); + this.separatorLine.Location = new System.Drawing.Point(16, 335); + this.separatorLine.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.separatorLine.Name = "separatorLine"; + this.separatorLine.Size = new System.Drawing.Size(686, 2); + this.separatorLine.TabIndex = 44; + // + // statusLabel + // + this.statusLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.statusLabel.AutoSize = true; + this.statusLabel.Location = new System.Drawing.Point(43, 279); + this.statusLabel.Name = "statusLabel"; + this.statusLabel.Padding = new System.Windows.Forms.Padding(0, 4, 0, 0); + this.statusLabel.Size = new System.Drawing.Size(477, 19); + this.statusLabel.TabIndex = 3; + this.statusLabel.Text = "Anzahl Files"; + // + // toggleDetailsLabel + // + this.toggleDetailsLabel.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.toggleDetailsLabel.AutoSize = true; + this.mainTableLayoutPanel.SetColumnSpan(this.toggleDetailsLabel, 4); + this.toggleDetailsLabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.toggleDetailsLabel.ImageIndex = 0; + this.toggleDetailsLabel.ImageList = this.imageList; + this.toggleDetailsLabel.Location = new System.Drawing.Point(13, 310); + this.toggleDetailsLabel.MinimumSize = new System.Drawing.Size(0, 25); + this.toggleDetailsLabel.Name = "toggleDetailsLabel"; + this.toggleDetailsLabel.Size = new System.Drawing.Size(124, 25); + this.toggleDetailsLabel.TabIndex = 8; + this.toggleDetailsLabel.Text = " Toggle Transcript"; + this.toggleDetailsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // imageList + // + this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream"))); + this.imageList.TransparentColor = System.Drawing.Color.Fuchsia; + this.imageList.Images.SetKeyName(0, "arrow_up_bw.bmp"); + this.imageList.Images.SetKeyName(1, "arrow_up_color.bmp"); + this.imageList.Images.SetKeyName(2, "arrow_up_color_pressed.bmp"); + this.imageList.Images.SetKeyName(3, "arrow_down_bw.bmp"); + this.imageList.Images.SetKeyName(4, "arrow_down_color.bmp"); + this.imageList.Images.SetKeyName(5, "arrow_down_color_pressed.bmp"); + this.imageList.Images.SetKeyName(6, "green_arrow.bmp"); + // + // detailsTableLayoutPanel + // + this.detailsTableLayoutPanel.AutoSize = true; + this.detailsTableLayoutPanel.ColumnCount = 2; + this.detailsTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.detailsTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.detailsTableLayoutPanel.Controls.Add(this.localFileModificationDate, 1, 6); + this.detailsTableLayoutPanel.Controls.Add(this.localFileUrl, 1, 4); + this.detailsTableLayoutPanel.Controls.Add(this.localFileSize, 1, 5); + this.detailsTableLayoutPanel.Controls.Add(this.labelRemoteFile, 0, 0); + this.detailsTableLayoutPanel.Controls.Add(this.remoteFileUrl, 1, 0); + this.detailsTableLayoutPanel.Controls.Add(this.remoteFileSize, 1, 1); + this.detailsTableLayoutPanel.Controls.Add(this.label1, 0, 4); + this.detailsTableLayoutPanel.Controls.Add(this.remoteFileModificationDate, 1, 2); + this.detailsTableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Bottom; + this.detailsTableLayoutPanel.Location = new System.Drawing.Point(0, 347); + this.detailsTableLayoutPanel.Name = "detailsTableLayoutPanel"; + this.detailsTableLayoutPanel.Padding = new System.Windows.Forms.Padding(10, 0, 10, 10); + this.detailsTableLayoutPanel.RowCount = 7; + this.detailsTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.detailsTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.detailsTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.detailsTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 4F)); + this.detailsTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.detailsTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.detailsTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.detailsTableLayoutPanel.Size = new System.Drawing.Size(715, 108); + this.detailsTableLayoutPanel.TabIndex = 4; + // + // TransferPromptForm + // + this.AcceptButton = this.continueButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(715, 455); + this.Controls.Add(this.mainTableLayoutPanel); + this.Controls.Add(this.detailsTableLayoutPanel); + this.Name = "TransferPromptForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "TransferControl Prompt"; + ((System.ComponentModel.ISupportInitialize)(this.browser)).EndInit(); + this.mainTableLayoutPanel.ResumeLayout(false); + this.mainTableLayoutPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.animation)).EndInit(); + this.detailsTableLayoutPanel.ResumeLayout(false); + this.detailsTableLayoutPanel.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ComboBox comboBoxAction; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Button continueButton; + private MulticolorTreeListView browser; + private BrightIdeasSoftware.OLVColumn treeColumnName; + private BrightIdeasSoftware.OLVColumn treeColumnSize; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label labelRemoteFile; + private EllipsisLabel remoteFileUrl; + private EllipsisLabel remoteFileModificationDate; + private EllipsisLabel remoteFileSize; + private EllipsisLabel localFileUrl; + private EllipsisLabel localFileModificationDate; + private EllipsisLabel localFileSize; + private TableLayoutPanel mainTableLayoutPanel; + private System.Windows.Forms.Label statusLabel; + private System.Windows.Forms.Label toggleDetailsLabel; + private System.Windows.Forms.Label separatorLine; + private TableLayoutPanel detailsTableLayoutPanel; + private BrightIdeasSoftware.OLVColumn treeColumnWarning; + private BrightIdeasSoftware.OLVColumn treeColumnSync; + private BrightIdeasSoftware.OLVColumn treeColumnCreate; + private ImageList imageList; + private PictureBox animation; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/TransferPromptForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferPromptForm.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/TransferPromptForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferPromptForm.cs index ef24fad9dc..6597dc1652 100644 --- a/source/ch/cyberduck/ui/winforms/TransferPromptForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferPromptForm.cs @@ -1,335 +1,335 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; -using BrightIdeasSoftware; -using Ch.Cyberduck.Ui.Controller; -using Ch.Cyberduck.Ui.Winforms.Controls; -using ch.cyberduck.core; -using ch.cyberduck.core.transfer; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class TransferPromptForm : BaseForm, ITransferPromptView - { - private static readonly int MaxHeight = 800; - private static readonly int MaxWidth = 800; - private static readonly int MinHeight = 250; - private static readonly int MinWidth = 450; - private bool _expanded = true; - private ListViewItem _lastSelectedListViewItem; - - public TransferPromptForm() - { - InitializeComponent(); - - DoubleBuffered = true; - MaximumSize = new Size(MaxWidth, MaxHeight + detailsTableLayoutPanel.Height); - MinimumSize = new Size(MinWidth, MinHeight + detailsTableLayoutPanel.Height); - - browser.UseExplorerTheme = true; - browser.UseTranslucentSelection = true; - browser.OwnerDraw = true; - browser.UseOverlays = false; - browser.HeaderStyle = ColumnHeaderStyle.None; - browser.ShowGroups = false; - browser.ShowImagesOnSubItems = true; - browser.TreeColumnRenderer = new BrowserRenderer(); - browser.SelectedRowDecoration = new ExplorerRowBorderDecoration(); - browser.MultiSelect = false; - browser.FullRowSelect = true; - browser.ItemsChanged += (sender, args) => ItemsChanged(); - - //due to the checkbox feature the highlight bar is not being redrawn properly -> redraw the entire control instead - //todo report this bug to the ObjectListView forum - browser.SelectedIndexChanged += delegate - { - if (null != browser.SelectedItem) - { - browser.Invalidate(browser.SelectedItem.Bounds); - if (null != _lastSelectedListViewItem) - { - browser.Invalidate(_lastSelectedListViewItem.Bounds); - } - _lastSelectedListViewItem = browser.SelectedItem; - } - }; - - ScaledImageRenderer sir = new ScaledImageRenderer(); - - treeColumnWarning.Renderer = sir; - treeColumnCreate.Renderer = sir; - treeColumnSync.Renderer = sir; - - treeColumnName.FillsFreeSpace = true; - - toggleDetailsLabel.Text = String.Format(" {0}", LocaleFactory.localizedString("Details")); - toggleDetailsLabel.Click += delegate { ToggleDetailsEvent(); }; - toggleDetailsLabel.MouseDown += delegate { toggleDetailsLabel.ImageIndex = (_expanded ? 2 : 5); }; - toggleDetailsLabel.MouseEnter += delegate { toggleDetailsLabel.ImageIndex = (_expanded ? 1 : 4); }; - toggleDetailsLabel.MouseLeave += delegate { toggleDetailsLabel.ImageIndex = (_expanded ? 0 : 3); }; - toggleDetailsLabel.MouseUp += delegate { toggleDetailsLabel.ImageIndex = (_expanded ? 1 : 4); }; - - browser.Focus(); - } - - public override string[] BundleNames - { - get { return new[] {"Prompt"}; } - } - - public void SetModel(IEnumerable model) - { - browser.ClearCachedInfo(); - browser.SetObjects(model); - //browser.Roots = model; - } - - public void RefreshBrowserObject(TransferItem item) - { - if (item != null) - { - browser.RefreshObject(item); - } - else - { - //browser.ReloadTree(); - } - } - - public IList VisibleItems - { - get - { - int count = browser.GetItemCount(); - IList items = new List(count); - for (int i = 0; i < browser.GetItemCount(); i++) - { - items.Add((TransferItem) browser.GetModelObject(i)); - } - return items; - } - } - - public bool DetailsVisible - { - get { return _expanded; } - set - { - if (_expanded != value) - { - _expanded = value; - //todo make it flickerfree - //try http://stackoverflow.com/questions/487661/how-do-i-suspend-painting-for-a-control-and-its-children - SuspendLayout(); - if (_expanded) - { - MaximumSize = new Size(MaxWidth, MaxHeight + detailsTableLayoutPanel.Height); - Height += detailsTableLayoutPanel.Height; - MinimumSize = new Size(MinWidth, MinHeight + detailsTableLayoutPanel.Height); - ResumeLayout(); - } - else - { - MinimumSize = new Size(MinWidth, MinHeight); - Height -= detailsTableLayoutPanel.Height; - MaximumSize = new Size(MaxWidth, MaxHeight); - } - - detailsTableLayoutPanel.Visible = _expanded; - ResumeLayout(); - toggleDetailsLabel.ImageIndex = (_expanded ? 1 : 4); - } - } - } - - public int NumberOfFiles - { - get { return browser.GetItemCount(); } - } - - public void PopulateActions(IDictionary actions) - { - comboBoxAction.Items.Clear(); - comboBoxAction.DataSource = new BindingSource(actions, null); - comboBoxAction.DisplayMember = "Value"; - comboBoxAction.ValueMember = "Key"; - } - - public string Title - { - set { Text = value; } - } - - public TransferAction SelectedAction - { - get { return (TransferAction) comboBoxAction.SelectedValue; } - set { comboBoxAction.SelectedValue = value; } - } - - public TransferItem SelectedItem - { - get { return (TransferItem) browser.SelectedObject; } - set { browser.SelectedObject = value; } - } - - public string LocalFileUrl - { - set { localFileUrl.Text = value; } - } - - public string LocalFileSize - { - set { localFileSize.Text = value; } - } - - public string LocalFileModificationDate - { - set { localFileModificationDate.Text = value; } - } - - public string RemoteFileUrl - { - set { remoteFileUrl.Text = value; } - } - - public string RemoteFileSize - { - set { remoteFileSize.Text = value; } - } - - public string RemoteFileModificationDate - { - set { remoteFileModificationDate.Text = value; } - } - - public CheckStateGetterDelegate ModelCheckStateGetter - { - set { browser.CheckStateGetter = value; } - } - - public CheckStatePutterDelegate ModelCheckStateSetter - { - set { browser.CheckStatePutter = value; } - } - - public TreeListView.CanExpandGetterDelegate ModelCanExpandDelegate - { - set { browser.CanExpandGetter = value; } - } - - public TreeListView.ChildrenGetterDelegate ModelChildrenGetterDelegate - { - set { browser.ChildrenGetter = value; } - } - - public TypedColumn.TypedAspectGetterDelegate ModelFilenameGetter - { - set { new TypedColumn(treeColumnName) {AspectGetter = value}; } - } - - public TypedColumn.TypedImageGetterDelegate ModelIconGetter - { - set { new TypedColumn(treeColumnName) {ImageGetter = value}; } - } - - public TypedColumn.TypedAspectGetterDelegate ModelSizeGetter - { - set { new TypedColumn(treeColumnSize) {AspectGetter = value}; } - } - - public AspectToStringConverterDelegate ModelSizeAsStringGetter - { - set { treeColumnSize.AspectToStringConverter = value; } - } - - public TypedColumn.TypedImageGetterDelegate ModelWarningGetter - { - set { new TypedColumn(treeColumnWarning) {ImageGetter = value}; } - } - - public TypedColumn.TypedImageGetterDelegate ModelCreateGetter - { - set { new TypedColumn(treeColumnCreate) {ImageGetter = value}; } - } - - public TypedColumn.TypedImageGetterDelegate ModelSyncGetter - { - set { new TypedColumn(treeColumnSync) {ImageGetter = value}; } - } - - public MulticolorTreeListView.ActiveGetterTransferItemDelegate ModelActiveGetter - { - set { browser.ActiveGetterTransferItem = value; } - } - - public event VoidHandler ChangedActionEvent = delegate { }; - public event VoidHandler ChangedSelectionEvent = delegate { }; - public event VoidHandler ToggleDetailsEvent = delegate { }; - public event VoidHandler ItemsChanged; - - public void StartActivityAnimation() - { - animation.Visible = true; - browser.Enabled = false; - } - - public void StopActivityAnimation() - { - animation.Visible = false; - browser.Enabled = true; - } - - public string StatusLabel - { - set { statusLabel.Text = value; } - } - - private void comboBoxAction_SelectionChangeCommitted(object sender, EventArgs e) - { - ChangedActionEvent(); - } - - private void browser_SelectionChanged(object sender, EventArgs e) - { - ChangedSelectionEvent(); - } - - private class ScaledImageRenderer : BaseRenderer - { - protected override int DrawImage(Graphics g, Rectangle r, object imageSelector) - { - if (imageSelector is Image) - { - Image image = imageSelector as Image; - int top = r.Y; - if (image.Size.Height < r.Height) - top += ((r.Height - image.Size.Height)/2); - - //make sure that 72dpi images are being scaled correctly - g.DrawImage(image, new Rectangle(r.X, top, image.Width, image.Height)); - return image.Width; - } - return base.DrawImage(g, r, imageSelector); - } - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using BrightIdeasSoftware; +using Ch.Cyberduck.Ui.Controller; +using Ch.Cyberduck.Ui.Winforms.Controls; +using ch.cyberduck.core; +using ch.cyberduck.core.transfer; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class TransferPromptForm : BaseForm, ITransferPromptView + { + private static readonly int MaxHeight = 800; + private static readonly int MaxWidth = 800; + private static readonly int MinHeight = 250; + private static readonly int MinWidth = 450; + private bool _expanded = true; + private ListViewItem _lastSelectedListViewItem; + + public TransferPromptForm() + { + InitializeComponent(); + + DoubleBuffered = true; + MaximumSize = new Size(MaxWidth, MaxHeight + detailsTableLayoutPanel.Height); + MinimumSize = new Size(MinWidth, MinHeight + detailsTableLayoutPanel.Height); + + browser.UseExplorerTheme = true; + browser.UseTranslucentSelection = true; + browser.OwnerDraw = true; + browser.UseOverlays = false; + browser.HeaderStyle = ColumnHeaderStyle.None; + browser.ShowGroups = false; + browser.ShowImagesOnSubItems = true; + browser.TreeColumnRenderer = new BrowserRenderer(); + browser.SelectedRowDecoration = new ExplorerRowBorderDecoration(); + browser.MultiSelect = false; + browser.FullRowSelect = true; + browser.ItemsChanged += (sender, args) => ItemsChanged(); + + //due to the checkbox feature the highlight bar is not being redrawn properly -> redraw the entire control instead + //todo report this bug to the ObjectListView forum + browser.SelectedIndexChanged += delegate + { + if (null != browser.SelectedItem) + { + browser.Invalidate(browser.SelectedItem.Bounds); + if (null != _lastSelectedListViewItem) + { + browser.Invalidate(_lastSelectedListViewItem.Bounds); + } + _lastSelectedListViewItem = browser.SelectedItem; + } + }; + + ScaledImageRenderer sir = new ScaledImageRenderer(); + + treeColumnWarning.Renderer = sir; + treeColumnCreate.Renderer = sir; + treeColumnSync.Renderer = sir; + + treeColumnName.FillsFreeSpace = true; + + toggleDetailsLabel.Text = String.Format(" {0}", LocaleFactory.localizedString("Details")); + toggleDetailsLabel.Click += delegate { ToggleDetailsEvent(); }; + toggleDetailsLabel.MouseDown += delegate { toggleDetailsLabel.ImageIndex = (_expanded ? 2 : 5); }; + toggleDetailsLabel.MouseEnter += delegate { toggleDetailsLabel.ImageIndex = (_expanded ? 1 : 4); }; + toggleDetailsLabel.MouseLeave += delegate { toggleDetailsLabel.ImageIndex = (_expanded ? 0 : 3); }; + toggleDetailsLabel.MouseUp += delegate { toggleDetailsLabel.ImageIndex = (_expanded ? 1 : 4); }; + + browser.Focus(); + } + + public override string[] BundleNames + { + get { return new[] {"Prompt"}; } + } + + public void SetModel(IEnumerable model) + { + browser.ClearCachedInfo(); + browser.SetObjects(model); + //browser.Roots = model; + } + + public void RefreshBrowserObject(TransferItem item) + { + if (item != null) + { + browser.RefreshObject(item); + } + else + { + //browser.ReloadTree(); + } + } + + public IList VisibleItems + { + get + { + int count = browser.GetItemCount(); + IList items = new List(count); + for (int i = 0; i < browser.GetItemCount(); i++) + { + items.Add((TransferItem) browser.GetModelObject(i)); + } + return items; + } + } + + public bool DetailsVisible + { + get { return _expanded; } + set + { + if (_expanded != value) + { + _expanded = value; + //todo make it flickerfree + //try http://stackoverflow.com/questions/487661/how-do-i-suspend-painting-for-a-control-and-its-children + SuspendLayout(); + if (_expanded) + { + MaximumSize = new Size(MaxWidth, MaxHeight + detailsTableLayoutPanel.Height); + Height += detailsTableLayoutPanel.Height; + MinimumSize = new Size(MinWidth, MinHeight + detailsTableLayoutPanel.Height); + ResumeLayout(); + } + else + { + MinimumSize = new Size(MinWidth, MinHeight); + Height -= detailsTableLayoutPanel.Height; + MaximumSize = new Size(MaxWidth, MaxHeight); + } + + detailsTableLayoutPanel.Visible = _expanded; + ResumeLayout(); + toggleDetailsLabel.ImageIndex = (_expanded ? 1 : 4); + } + } + } + + public int NumberOfFiles + { + get { return browser.GetItemCount(); } + } + + public void PopulateActions(IDictionary actions) + { + comboBoxAction.Items.Clear(); + comboBoxAction.DataSource = new BindingSource(actions, null); + comboBoxAction.DisplayMember = "Value"; + comboBoxAction.ValueMember = "Key"; + } + + public string Title + { + set { Text = value; } + } + + public TransferAction SelectedAction + { + get { return (TransferAction) comboBoxAction.SelectedValue; } + set { comboBoxAction.SelectedValue = value; } + } + + public TransferItem SelectedItem + { + get { return (TransferItem) browser.SelectedObject; } + set { browser.SelectedObject = value; } + } + + public string LocalFileUrl + { + set { localFileUrl.Text = value; } + } + + public string LocalFileSize + { + set { localFileSize.Text = value; } + } + + public string LocalFileModificationDate + { + set { localFileModificationDate.Text = value; } + } + + public string RemoteFileUrl + { + set { remoteFileUrl.Text = value; } + } + + public string RemoteFileSize + { + set { remoteFileSize.Text = value; } + } + + public string RemoteFileModificationDate + { + set { remoteFileModificationDate.Text = value; } + } + + public CheckStateGetterDelegate ModelCheckStateGetter + { + set { browser.CheckStateGetter = value; } + } + + public CheckStatePutterDelegate ModelCheckStateSetter + { + set { browser.CheckStatePutter = value; } + } + + public TreeListView.CanExpandGetterDelegate ModelCanExpandDelegate + { + set { browser.CanExpandGetter = value; } + } + + public TreeListView.ChildrenGetterDelegate ModelChildrenGetterDelegate + { + set { browser.ChildrenGetter = value; } + } + + public TypedColumn.TypedAspectGetterDelegate ModelFilenameGetter + { + set { new TypedColumn(treeColumnName) {AspectGetter = value}; } + } + + public TypedColumn.TypedImageGetterDelegate ModelIconGetter + { + set { new TypedColumn(treeColumnName) {ImageGetter = value}; } + } + + public TypedColumn.TypedAspectGetterDelegate ModelSizeGetter + { + set { new TypedColumn(treeColumnSize) {AspectGetter = value}; } + } + + public AspectToStringConverterDelegate ModelSizeAsStringGetter + { + set { treeColumnSize.AspectToStringConverter = value; } + } + + public TypedColumn.TypedImageGetterDelegate ModelWarningGetter + { + set { new TypedColumn(treeColumnWarning) {ImageGetter = value}; } + } + + public TypedColumn.TypedImageGetterDelegate ModelCreateGetter + { + set { new TypedColumn(treeColumnCreate) {ImageGetter = value}; } + } + + public TypedColumn.TypedImageGetterDelegate ModelSyncGetter + { + set { new TypedColumn(treeColumnSync) {ImageGetter = value}; } + } + + public MulticolorTreeListView.ActiveGetterTransferItemDelegate ModelActiveGetter + { + set { browser.ActiveGetterTransferItem = value; } + } + + public event VoidHandler ChangedActionEvent = delegate { }; + public event VoidHandler ChangedSelectionEvent = delegate { }; + public event VoidHandler ToggleDetailsEvent = delegate { }; + public event VoidHandler ItemsChanged; + + public void StartActivityAnimation() + { + animation.Visible = true; + browser.Enabled = false; + } + + public void StopActivityAnimation() + { + animation.Visible = false; + browser.Enabled = true; + } + + public string StatusLabel + { + set { statusLabel.Text = value; } + } + + private void comboBoxAction_SelectionChangeCommitted(object sender, EventArgs e) + { + ChangedActionEvent(); + } + + private void browser_SelectionChanged(object sender, EventArgs e) + { + ChangedSelectionEvent(); + } + + private class ScaledImageRenderer : BaseRenderer + { + protected override int DrawImage(Graphics g, Rectangle r, object imageSelector) + { + if (imageSelector is Image) + { + Image image = imageSelector as Image; + int top = r.Y; + if (image.Size.Height < r.Height) + top += ((r.Height - image.Size.Height)/2); + + //make sure that 72dpi images are being scaled correctly + g.DrawImage(image, new Rectangle(r.X, top, image.Width, image.Height)); + return image.Width; + } + return base.DrawImage(g, r, imageSelector); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/TransferPromptForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferPromptForm.resx similarity index 98% rename from source/ch/cyberduck/ui/winforms/TransferPromptForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferPromptForm.resx index 7fec573568..b5d8eabfe2 100644 --- a/source/ch/cyberduck/ui/winforms/TransferPromptForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/TransferPromptForm.resx @@ -1,347 +1,347 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 17, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAA - MgAAAk1TRnQBSQFMAgEBBwEAAWwBAQFsAQEBEwEAARMBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFM - AwABJgMAAQEBAAEgBQABIAEtKgAB1QG/AaIB/wHCAZ4BgQH/AbcBigE8Af8BsQGBASsB/wG3AYoBPAH/ - AcIBngGBAf8B1QG/AaIB/zAAAcUBswGbAf8BpgGIAVAB/wGVAYEBLgH/AYsBUQEbAf8BlQGBAS4B/wGm - AYgBUAH/AcUBswGbAf/AAAHRAbcBlQH/AbQBhAEzAf8BzgGuAYMB/wHgAc0BsgH/AeoB3wHOAf8B7wHp - AdwB/wHpAd8BzQH/Ad4BzAGxAf8BzAGtAYIB/wG0AYQBMwH/AdEBtwGVAf8gAAG9AakBjQH/AYwBUgEc - Af8BnAGBASwB/wGzAY4BPQH/AcQBngFJAf8BzQGoAVAB/wHJAaIBTAH/AbsBlQFCAf8BpgGBATEB/wGO - AYEBHQH/Ab0BqQGNAf+0AAHLAa4BhgH/AcgBpAGBAf8B7wHlAdUB/wH0Ae0B4gH/AfAB4gHIAf8B7AHV - Aa0B/wHpAc8BnwH/AeoB1AGsAf8B7QHfAcUB/wHvAekB3QH/AeoB4AHQAf8BxQGiAYEB/wHLAa4BhgH/ - GAABtQGdAYEB/wGTAYEBJQH/Ab0BmQFIAf8B0QGrAYEB/wHTAa4BgQH/AdMBrgGBAf8B0wGtAYEB/wHS - Aa0BgQH/AdIBrQGBAf8B0gGtAYEB/wHLAaYBUgH/AaEBgQEuAf8BtQGdAYEB/6wAAcsBrgGGAf8B1AG3 - AY4B/wH5AfIB5gH/AfQB5QHKAf8B7wHVAaUB/wHvAdUBpQH/Ae4B1AGlAf8B7QHTAaQB/wHrAdIBowH/ - AekB0AGhAf8B6QHQAaEB/wHtAd8BxAH/AfAB6QHeAf8BzwGyAYoB/wHLAa4BhgH/EAABtQGdAYEB/wGW - AYEBKgH/AcYBpAGAAf8B2AG0AYEB/wHaAbYBgQH/AdoBtgGBAf8B2QG1AYEB/wHYAbQBgQH/AdYBswGB - Af8B1QGxAYEB/wHVAbEBgQH/AdUBsQGBAf8B1QGxAYEB/wGtAYcBOgH/AbUBnQGBAf+kAAHQAbgBlwH/ - AcsBpwGBAf8B+wH0AegB/wH1AeABuQH/AfMB2gGqAf8B8wHaAaoB/wHyAdkBqgH/AfIB2QGqAf8B8QHY - AakB/wHwAdcBqAH/Ae4B1QGnAf8B6wHTAaUB/wHqAdIBpAH/AesB1wGxAf8B8AHpAd4B/wHGAaMBgQH/ - AdABuAGXAf8IAAG+AakBjwH/AY4BgQEkAf8BvwGeAVIB/wHbAbgBgQH/AeABvAGBAf8B4AG8AYEB/wHg - AbsBgQH/AeABuwGBAf8B3wG7AYEB/wHeAboBgQH/AdwBuAGBAf8B2QG2AYEB/wHYAbUBgQH/AdgBtQGB - Af8B2AG1AYEB/wGkAYEBMwH/Ab4BqQGPAf8kAAGBAeMBKwH/AYEB5AEtAf8B8AH8AewB/3AAAbUBhQEz - Af8B9gHsAdsB/wH7AewB0QH/AfgB3gGwAf8B+AHeAbAB/wH3Ad0BsAH/AfcB3QGwAf8B+wHrAdAB/wH8 - AfQB5gH/AfkB6gHPAf8B9AHbAa4B/wHxAdgBqwH/Ae0B1QGpAf8B7AHUAagB/wHuAeABxgH/AeoB4AHQ - Af8BtAGEATMB/wgAAYsBUgEcAf8BqgGMAUcB/wHVAbQBgQH/AeUBwgGCAf8B5gHDAYIB/wHlAcIBggH/ - AeUBwgGCAf8B8AHbAbUB/wH3AewB2AH/Ae4B2gG0Af8B4gHAAYEB/wHgAb4BgQH/AdwBuwGBAf8B2wG6 - AYEB/wHbAboBgQH/AdMBsQGBAf8BjgGBAR4B/yAAAbIB8QGcAf8BKAHbAQAB/wEoAdsBAAH/AUUB4AEU - Af8B8gH9Ae4B/2gAAdYBwQGmAf8B0QGxAYUB/wH+AfgB7gH/AfoB4wG5Af8B+gHiAbgB/wH6AeIBtQH/ - AfoB4QG0Af8B/AHtAdMB/wH9AfYB6AH/AyIB/wH9AfUB5wH/AfsB7AHSAf8B9gHdAbEB/wHyAdoBrgH/ - Ae4B1gGsAf8B7QHWAasB/wHxAeoB4AH/AcsBqwGBAf8B1gHBAaYB/wHGAbUBnwH/AZIBgQEvAf8BxAGo - AYEB/wHjAcUBjAH/AesBzAGQAf8B6gHKAYwB/wHqAckBigH/AfIB3wG6Af8B+AHuAdsB/wMiAf8B+AHu - AdoB/wHxAd4BuQH/AeYBxgGIAf8B4wHDAYYB/wHfAcABhAH/Ad4BvwGDAf8B3gG/AYMB/wGqAYUBPAH/ - AcYBtQGfAf8gAAE6Ad4BBgH/ASgB2wEAAf8BKAHbAQAB/wFJAeEBGQH/Ae8B/AHrAf9kAAHCAZ4BgQH/ - AekB2AG/Af8B/QHyAd8B/wH8AecBwQH/AfsB5gHAAf8B+wHlAbwB/wH9Ae4B1QH/Af4B9gHpAf8DIgH/ - AyIB/wMiAf8B/QH2AekB/wH7Ae0B1AH/AfYB3wG0Af8B8gHbAbIB/wHuAdcBrwH/AfAB4wHMAf8B4AHP - AbYB/wHBAZwBgQH/AaYBiAFQAf8BoQGGAUwB/wHTAboBjQH/AewB0QGeAf8B7wHSAZ4B/wHuAdABmAH/ - AfQB4gG/Af8B+QHwAd0B/wMiAf8DIgH/AyIB/wH5Ae8B3QH/AfMB4AG+Af8B6AHJAY8B/wHlAcYBjQH/ - AeEBwwGLAf8B4QHDAYsB/wHIAagBgQH/AaUBhwFOAf8kAAE0AdcBBgH/ASIB0wEAAf8BIgHTAQAB/wFE - AdoBGQH/AfMB/AHwAf9gAAG3AYoBPAH/AfcB7gHhAf8B/QHuAdIB/wH9AeoByAH/AfwB6QHFAf8B/QHx - AdkB/wH+AfcB6gH/AyIB/wMiAf8DIgH/AyIB/wMiAf8B/gH3AeoB/wH7Ae0B1QH/AfUB3wG2Af8B8QHb - AbMB/wHvAd0BvAH/AesB4QHSAf8BtwGKATwB/wGVAYEBLgH/Aa0BlwGBAf8B2QHDAZsB/wHxAdkBqwH/ - AfEB2AGnAf8B9gHmAccB/wH6AfEB4AH/AyIB/wMiAf8DIgH/AyIB/wMiAf8B+gHwAd8B/wHzAeIBwAH/ - AegBywGUAf8B5QHIAZEB/wHjAcYBkAH/AdoBvAGGAf8BlQGBAS4B/xAAAYEB2QE/Af8BgQHdAVAB/wGB - Ad4BgQH/AYwB4QGBAf8BmAHkAYMB/wE4AdABFAH/ARoByAEAAf8BGgHIAQAB/wEaAcgBAAH/AT8B0gEd - Af8B7gH7AesB/1wAAbMBggEwAf8B/AH4AfAB/wH+Ae0B0gH/Af0B7AHOAf8B/gHzAeAB/wH+AfgB7QH/ - AyIB/wMiAf8DIgH/Af4B9wHrAf8DIgH/AyIB/wMiAf8B/QH2AeoB/wH7Ae0B1gH/AfQB3gG3Af8B8QHc - AbgB/wHvAekB3wH/AbMBggEwAf8BjgGBASAB/wG3AaoBlAH/Ad8B0gG6Af8B9QHoAc8B/wH7AfIB4gH/ - Af0B+AHvAf8DIgH/AyIB/wMiAf8B/AH3Ae0B/wMiAf8DIgH/AyIB/wH7AfYB7AH/AfYB7AHZAf8B7QHd - Ab0B/wHqAdoBuwH/AeQB0wGzAf8BjgGBASAB/wwAAREBuwEAAf8BEQG7AQAB/wERAbsBAAH/AREBuwEA - Af8BEQG7AQAB/wERAbsBAAH/AREBuwEAAf8BEQG7AQAB/wERAbsBAAH/AREBuwEAAf8BEQG7AQAB/wEm - AcEBCAH/A/sB/1gAAbcBigE8Af8B9wHwAeYB/wH9AfYB6QH/Af0B9AHkAf8B/gH7AfYB/wMiAf8DIgH/ - AyIB/wH+AfoB8wH/Af0B9gHoAf8B/gH6AfMB/wMiAf8DIgH/AyIB/wH9AfkB8gH/AfQB6AHSAf8B8QHo - AdUB/wHsAeQB2QH/AbcBigE8Af8BlQGBAS4B/wG1AacBkQH/AdoBzwG7Af8B8wHoAdMB/wH9AfkB8gH/ - AyIB/wMiAf8DIgH/Af0B+AHvAf8B+wHxAeAB/wH9AfgB7wH/AyIB/wMiAf8DIgH/AfsB9gHtAf8B7wHh - AcQB/wHsAd4BwQH/AdsBygGrAf8BlQGBAS4B/wwAAQUBqwEAAf8BBQGrAQAB/wEFAasBAAH/AQUBqwEA - Af8BBQGrAQAB/wEFAasBAAH/AQUBqwEAAf8BBQGrAQAB/wEFAasBAAH/AQUBqwEAAf8BBQGrAQAB/wEa - AbMBCAH/A/sB/1gAAcIBngGBAf8B6QHaAcYB/wH+AfoB8wH/Af0B9gHoAf8B/gH8AfcB/wMiAf8DIgH/ - Af4B+wH0Af8B/QH3AeoB/wH8AfEB3AH/Af0B9wHqAf8B/gH7AfQB/wMiAf8DIgH/Af0B+QHzAf8B9QHq - AdYB/wHzAe0B4wH/AeEB0QG8Af8BwgGeAYEB/wGmAYgBUAH/AawBmQGBAf8B0gHIAbcB/wHuAeQB0wH/ - Af0B+gH0Af8DIgH/AyIB/wH9AfkB8AH/AfsB8gHiAf8B+AHqAc8B/wH7AfIB4gH/Af0B+AHwAf8DIgH/ - AyIB/wH7AfcB7wH/AfEB5AHJAf8B7QHgAcYB/wHFAbEBjwH/AaYBiAFQAf8QAAFBAbcBPQH/AU8BvQFL - Af8BgQG/AVAB/wGBAcYBgQH/AYUBzQGCAf8BHAGoARcB/wEAAZkBAAH/AQABmQEAAf8BAAGZAQAB/wEg - AakBGwH/AeQB9AHjAf9cAAHWAcEBpgH/AdEBswGKAf8B/gH9AfoB/wH9AfcB6wH/Af4B+gHyAf8B/gH8 - AfgB/wH+AfwB9wH/Af0B+AHuAf8B/AHzAeAB/wH8AfIB4AH/AfwB8gHgAf8B/QH3AewB/wH+AfsB9QH/ - Af0B+gH0Af8B+wH1AeoB/wH1AesB2QH/AfYB9AHvAf8BzQGvAYUB/wHWAcEBpgH/AcYBtQGfAf8BnQGB - AUoB/wHIAb8BsAH/AeQB3AHNAf8B+wH1AewB/wH+AfsB9QH/Af0B+gH0Af8B+wH1AegB/wH5Ae4B1wH/ - AfkB7QHWAf8B+QHtAdYB/wH7AfQB5gH/Af0B+QHyAf8B/QH5AfEB/wH5AfIB5AH/AfIB5gHPAf8B6wHg - AckB/wGmAYgBTgH/AcYBtQGfAf8kAAEFAZcBCAH/AQABjQEAAf8BAAGNAQAB/wEYAZ8BGwH/AewB9wHs - Af9kAAG1AYUBNAH/AfYB8AHnAf8B/gH7AfUB/wH9AfgB7QH/Af0B9wHsAf8B/QH2AekB/wH9AfUB5wH/ - AfwB9QHmAf8B/AH0AeUB/wH8AfQB5AH/AfwB9AHkAf8B/AHzAeMB/wH7AfIB4QH/AfgB7wHeAf8B9wHy - AekB/wHwAekB3gH/AbQBhQEzAf8IAAGNAYEBIAH/AboBrgGdAf8B1QHNAcAB/wHsAeUB2AH/AfkB8gHk - Af8B+wHzAeMB/wH7AfIB4QH/AfsB8QHfAf8B+gHxAd0B/wH6AfAB3QH/AfoB8AHcAf8B+gHvAdsB/wH5 - Ae4B2QH/AfYB6wHXAf8B8AHlAdEB/wHSAcMBqgH/AY0BgQEgAf8lAAGSAQAB/wEAAY0BAAH/AQABjQEA - Af8BEwGdARYB/wHqAfYB6gH/aAAB0QG5AZkB/wHLAaoBgQH/Af4B/QH7Af8B/gH6AfMB/wH+AfgB7wH/ - Af4B+AHuAf8B/gH3AewB/wH9AfYB6wH/Af0B9gHqAf8B/QH2AekB/wH9AfUB6AH/Af0B9QHmAf8B/AHz - AeQB/wH6AfMB5wH/AfoB+AH0Af8ByAGmAYEB/wHRAbkBmQH/CAABvwGrAZEB/wGcAYEBRQH/AcYBvwGy - Af8B2QHTAccB/wHtAecB2wH/AfgB8gHmAf8B+wH1AegB/wH8AfUB5wH/AfwB9AHmAf8B/AH0AeQB/wH7 - AfMB4wH/AfsB8wHhAf8B+QHwAd4B/wHyAekB1gH/Ad0B1AHAAf8BmgGBAT8B/wG/AasBkQH/IAABnQHT - AZ4B/wEAAY0BAAH/AQABjQEAAf8BEAGcARMB/wHxAfkB8QH/cAABywGuAYYB/wHVAboBlgH/Af4B/QH8 - Af8B/gH8AfgB/wH+AfkB8QH/Af4B+AHwAf8B/gH4Ae8B/wH9AfcB7gH/Af0B9wHsAf8B/QH2AesB/wH9 - AfYB6gH/Af4B+gHzAf8B/AH6AfcB/wHVAboBlgH/AcsBrgGGAf8QAAG1AZ0BgQH/AaMBigGBAf8BxgHA - AbMB/wHVAc8BwwH/AeUB4AHUAf8B8AHqAd8B/wH2AfAB5QH/AfoB9AHnAf8B+wH0AecB/wH5AfIB5AH/ - AfQB6wHcAf8B6QHgAc8B/wHTAcoBuAH/AZ8BhAFOAf8BtQGdAYEB/ygAAScBpgEpAf8BKgGnASwB/wH0 - AfoB9AH/eAABywGuAYYB/wHJAacBgQH/AfcB8gHqAf8C/gH8Af8B/gH8AfgB/wH+AfoB8wH/Af4B+AHw - Af8B/QH6AfIB/wH+AfsB9gH/Af4B/QH6Af8B9wHxAegB/wHJAacBgQH/AcsBrgGGAf8YAAG1AZ0BgQH/ - AZsBgQFDAf8BvAGyAaIB/wHJAcIBtwH/AdMBzQHCAf8B3AHWAcsB/wHiAdsB0AH/AeMB3AHQAf8B3QHV - AcgB/wHQAcgBuQH/AbcBqgGVAf8BkwGBATcB/wG1AZ0BgQH/tAAB0AG4AZcB/wG1AYUBNAH/AdIBtQGN - Af8B6AHaAcYB/wH1Ae8B5QH/Av4B+wH/AfUB7gHlAf8B6AHZAcUB/wHSAbQBjQH/AbUBhQE0Af8B0AG4 - AZcB/yAAAb4BqQGPAf8BjQGBASEB/wGeAYMBTgH/Aa0BnAGEAf8BtgGqAZgB/wG7AbMBpQH/AbMBpgGS - Af8BpgGUAYEB/wGWAYEBQwH/AYwBgAEfAf8BvgGpAY8B/8AAAdUBwAGjAf8BwwGfAYEB/wG4AYwBQAH/ - AbEBgQErAf8BuAGMAUAB/wHDAZ8BgQH/AdUBwAGjAf8wAAHFAbQBnQH/AagBigGAAf8BlwGBATIB/wGL - AVEBGwH/AZcBgQEyAf8BqAGKAYAB/wHFAbQBnQH/yAADxQH/A6cB/wOWAf8DjAH/A5YB/wOnAf8DxQH/ - MAAB1QG/AaIB/wHCAZ4BgQH/AbcBigE8Af8BsQGBASsB/wG3AYoBPAH/AcIBngGBAf8B1QG/AaIB/zAA - AcUBswGbAf8BpgGIAVAB/wGVAYEBLgH/AYsBUQEbAf8BlQGBAS4B/wGmAYgBUAH/AcUBswGbAf8wAAPF - Af8DpwH/A5YB/wOMAf8DlgH/A6cB/wPFAf8oAAO+Af8DkAH/A7UB/wPQAf8D3wH/A+cB/wPeAf8DzgH/ - A7QB/wOQAf8DvgH/IAAB0QG3AZUB/wG0AYQBMwH/Ac4BrgGDAf8B4AHNAbIB/wHqAd8BzgH/Ae8B6QHc - Af8B6QHfAc0B/wHeAcwBsQH/AcwBrQGCAf8BtAGEATMB/wHRAbcBlQH/IAABvQGpAY0B/wGMAVIBHAH/ - AZwBgQEsAf8BswGOAT0B/wHEAZ4BSQH/Ac0BqAFQAf8ByQGiAUwB/wG7AZUBQgH/AaYBgQExAf8BjgGB - AR0B/wG9AakBjQH/IAADvgH/A5AB/wO1Af8D0AH/A98B/wPnAf8D3gH/A84B/wO0Af8DkAH/A74B/xwA - A7UB/wOsAf8D5AH/A+sB/wPdAf8DzwH/A8YB/wPNAf8D2gH/A+cB/wPgAf8DqgH/A7UB/xgAAcsBrgGG - Af8ByAGkAYEB/wHvAeUB1QH/AfQB7QHiAf8B8AHiAcgB/wHsAdUBrQH/AekBzwGfAf8B6gHUAawB/wHt - Ad8BxQH/Ae8B6QHdAf8B6gHgAdAB/wHFAaIBgQH/AcsBrgGGAf8YAAG1AZ0BgQH/AZMBgQElAf8BvQGZ - AUgB/wHRAasBgQH/AdMBrgGBAf8B0wGuAYEB/wHTAa0BgQH/AdIBrQGBAf8B0gGtAYEB/wHSAa0BgQH/ - AcsBpgFSAf8BoQGBAS4B/wG1AZ0BgQH/GAADtQH/A6wB/wPkAf8D6wH/A90B/wPPAf8DxgH/A80B/wPa - Af8D5wH/A+AB/wOqAf8DtQH/FAADtQH/A7wB/wPvAf8D4AH/A8sB/wPLAf8DygH/A8oB/wPIAf8DxgH/ - A8YB/wPZAf8D5wH/A7gB/wO1Af8QAAHLAa4BhgH/AdQBtwGOAf8B+QHyAeYB/wH0AeUBygH/Ae8B1QGl - Af8B7wHVAaUB/wHuAdQBpQH/Ae0B0wGkAf8B6wHSAaMB/wHpAdABoQH/AekB0AGhAf8B7QHfAcQB/wHw - AekB3gH/Ac8BsgGKAf8BywGuAYYB/xAAAbUBnQGBAf8BlgGBASoB/wHGAaQBgAH/AdgBtAGBAf8B2gG2 - AYEB/wHaAbYBgQH/AdkBtQGBAf8B2AG0AYEB/wHWAbMBgQH/AdUBsQGBAf8B1QGxAYEB/wHVAbEBgQH/ - AdUBsQGBAf8BrQGHAToB/wG1AZ0BgQH/EAADtQH/A7wB/wPvAf8D4AH/A8sB/wPLAf8DygH/A8oB/wPI - Af8DxgH/A8YB/wPZAf8D5wH/A7gB/wO1Af8MAAO+Af8DrwH/A/IB/wPYAf8D0AH/A9AB/wPPAf8DzwH/ - A84B/wPNAf8DzAH/A8kB/wPIAf8D0AH/A+gB/wOrAf8DvgH/CAAB0AG4AZcB/wHLAacBgQH/AfsB9AHo - Af8B9QHgAbkB/wHzAdoBqgH/AfMB2gGqAf8B8gHZAaoB/wHyAdkBqgH/AfEB2AGpAf8B8AHXAagB/wHu - AdUBpwH/AesB0wGlAf8B6gHSAaQB/wHrAdcBsQH/AfAB6QHeAf8BxgGjAYEB/wHQAbgBlwH/CAABvgGp - AY8B/wGOAYEBJAH/Ab8BngFSAf8B2wG4AYEB/wHgAbwBgQH/AeABvAGBAf8B4AG7AYEB/wHgAbsBgQH/ - Ad8BuwGBAf8B3gG6AYEB/wHcAbgBgQH/AdkBtgGBAf8B2AG1AYEB/wHYAbUBgQH/AdgBtQGBAf8BpAGB - ATMB/wG+AakBjwH/CAADvgH/A68B/wPyAf8D2AH/A9AB/wPQAf8DzwH/A88B/wPOAf8DzQH/A8wB/wPJ - Af8DyAH/A9AB/wPoAf8DqwH/A74B/wgAA5EB/wPqAf8D5gH/A9QB/wPUAf8D0wH/A9MB/wPTAf8D0gH/ - A9IB/wPRAf8DzgH/A8sB/wPKAf8D2gH/A98B/wOQAf8IAAG1AYUBMwH/AfYB7AHbAf8B+wHsAdEB/wH4 - Ad4BsAH/AfgB3gGwAf8B9wHdAbAB/wH3Ad0BsAH/AfcB3QGwAf8B9gHcAa8B/wH1AdwBrgH/AfQB2wGu - Af8B8QHYAasB/wHtAdUBqQH/AewB1AGoAf8B7gHgAcYB/wHqAeAB0AH/AbQBhAEzAf8IAAGLAVIBHAH/ - AaoBjAFHAf8B1QG0AYEB/wHlAcIBggH/AeYBwwGCAf8B5QHCAYIB/wHlAcIBggH/AeUBwgGCAf8B5AHC - AYEB/wHjAcEBgQH/AeIBwAGBAf8B4AG+AYEB/wHcAbsBgQH/AdsBugGBAf8B2wG6AYEB/wHTAbEBgQH/ - AY4BgQEeAf8IAAORAf8D6gH/A+YB/wPUAf8D1AH/A9MB/wPTAf8D5QH/A/EB/wPkAf8D0QH/A84B/wPL - Af8DygH/A9oB/wPfAf8DkAH/BAADxwH/A7gB/wP2Af8D2gH/A+gB/wPzAf8D8wH/A+cB/wPXAf8D1gH/ - A9YB/wPmAf8D8gH/A/AB/wPiAf8DzAH/A+kB/wOyAf8DxwH/AdYBwQGmAf8B0QGxAYUB/wH+AfgB7gH/ - AfoB4wG5Af8B/AHuAdUB/wH9AfYB6AH/Af0B9gHoAf8B/AHtAdMB/wH6AeEBtAH/AfkB4AGzAf8B+QHg - AbMB/wH7AewB0gH/AfwB9AHnAf8B+wH0AeYB/wH1AeYBzgH/Ae0B1gGrAf8B8QHqAeAB/wHLAasBgQH/ - AdYBwQGmAf8BxgG1AZ8B/wGSAYEBLwH/AcQBqAGBAf8B4wHFAYwB/wHzAeEBvQH/AfgB7wHbAf8B+AHu - AdsB/wHyAd8BugH/AeoByQGKAf8B6QHIAYkB/wHpAcgBiQH/AfEB3gG5Af8B9wHtAdoB/wH2AewB2gH/ - AewB2QG2Af8B3gG/AYMB/wHeAb8BgwH/AaoBhQE8Af8BxgG1AZ8B/wPHAf8DuAH/A/YB/wPaAf8D2QH/ - A9gB/wPXAf8D5wH/A/MB/wMiAf8D8gH/A+YB/wPUAf8D0AH/A80B/wPMAf8D6QH/A7IB/wPHAf8DpwH/ - A9oB/wPuAf8D3gH/A/QB/wMiAf8DIgH/A/MB/wPoAf8D2QH/A+gB/wPzAf8DIgH/AyIB/wPxAf8DzgH/ - A94B/wPRAf8DpgH/AcIBngGBAf8B6QHYAb8B/wH9AfIB3wH/AfwB5wHBAf8B/gH3AesB/wMiAf8DIgH/ - Af4B9gHpAf8B/QHuAdUB/wH7AeMBuAH/Af0B7gHVAf8B/QH2AekB/wMiAf8DIgH/AfsB9AHnAf8B7gHX - Aa8B/wHwAeMBzAH/AeABzwG2Af8BwQGcAYEB/wGmAYgBUAH/AaEBhgFMAf8B0wG6AY0B/wHsAdEBngH/ - AfoB8QHhAf8DIgH/AyIB/wH5AfAB3QH/AfQB4gG+Af8B7QHNAZIB/wH0AeIBvgH/AfkB7wHdAf8DIgH/ - AyIB/wH3Ae0B3AH/AeEBwwGLAf8B4QHDAYsB/wHIAagBgQH/AaUBhwFOAf8DpwH/A9oB/wPuAf8D3gH/ - A90B/wPbAf8D6AH/A/MB/wMiAf8DIgH/AyIB/wPzAf8D5wH/A9UB/wPRAf8DzgH/A94B/wPRAf8DpgH/ - A5YB/wPuAf8D5wH/A+IB/wP1Af8DIgH/AyIB/wMiAf8D9AH/A+oB/wP0Af8DIgH/AyIB/wMiAf8D8gH/ - A9IB/wPWAf8D4AH/A5YB/wG3AYoBPAH/AfcB7gHhAf8B/QHuAdIB/wH9AeoByAH/Af4B+AHtAf8DIgH/ - AyIB/wMiAf8B/gH3AeoB/wH9AfAB1wH/Af4B9wHqAf8DIgH/AyIB/wMiAf8B/AH1AegB/wHxAdsBswH/ - Ae8B3QG8Af8B6wHhAdIB/wG3AYoBPAH/AZUBgQEuAf8BrQGXAYEB/wHZAcMBmwH/AfEB2QGrAf8B+wHz - AeQB/wMiAf8DIgH/AyIB/wH6AfEB3wH/AfUB5AHCAf8B+gHxAd8B/wMiAf8DIgH/AyIB/wH4Ae8B3gH/ - AeUByAGRAf8B4wHGAZAB/wHaAbwBhgH/AZUBgQEuAf8DlgH/A+4B/wPnAf8D4gH/A+AB/wPsAf8D9AH/ - AyIB/wMiAf8DIgH/AyIB/wMiAf8D9AH/A+gB/wPVAf8D0gH/A9YB/wPgAf8DlgH/A48B/wP2Af8D5wH/ - A+UB/wPuAf8D9QH/AyIB/wMiAf8DIgH/A/QB/wMiAf8DIgH/AyIB/wP0Af8D6AH/A9UB/wPUAf8D5wH/ - A48B/wGzAYIBMAH/AfwB+AHwAf8B/gHtAdIB/wH9AewBzgH/Af4B8wHgAf8B/gH4Ae0B/wMiAf8DIgH/ - AyIB/wH+AfcB6wH/AyIB/wMiAf8DIgH/Af0B9gHqAf8B+wHtAdYB/wH0Ad4BtwH/AfEB3AG4Af8B7wHp - Ad8B/wGzAYIBMAH/AY4BgQEgAf8BtwGqAZQB/wHfAdIBugH/AfUB6AHPAf8B+wHyAeIB/wH9AfgB7wH/ - AyIB/wMiAf8DIgH/AfwB9wHtAf8DIgH/AyIB/wMiAf8B+wH2AewB/wH2AewB2QH/Ae0B3QG9Af8B6gHa - AbsB/wHkAdMBswH/AY4BgQEgAf8DjwH/A/YB/wPnAf8D5QH/A+4B/wP1Af8DIgH/AyIB/wMiAf8D9AH/ - AyIB/wMiAf8DIgH/A/QB/wPoAf8D1QH/A9QB/wPnAf8DjwH/A5YB/wPxAf8D8wH/A/EB/wPvAf8D9QH/ - A/kB/wMiAf8DIgH/AyIB/wMiAf8DIgH/A/kB/wPyAf8D5gH/A+QB/wPkAf8D5QH/A5YB/wG3AYoBPAH/ - AfcB8AHmAf8B/QH2AekB/wH9AfQB5AH/Af0B8wHhAf8B/QH3AewB/wH+AfsB9AH/AyIB/wMiAf8DIgH/ - AyIB/wMiAf8B/gH6AfMB/wH8AfUB5wH/AfcB6wHVAf8B9AHoAdIB/wHxAegB1QH/AewB5AHZAf8BtwGK - ATwB/wGVAYEBLgH/AbUBpwGRAf8B2gHPAbsB/wHzAegB0wH/AfkB7QHWAf8B+wHzAeQB/wH9AfgB7wH/ - AyIB/wMiAf8DIgH/AyIB/wMiAf8B/QH4Ae8B/wH5AfAB3gH/AfIB4wHGAf8B7wHhAcQB/wHsAd4BwQH/ - AdsBygGrAf8BlQGBAS4B/wOWAf8D8QH/A/MB/wPxAf8D+gH/AyIB/wMiAf8DIgH/A/kB/wPzAf8D+QH/ - AyIB/wMiAf8DIgH/A/cB/wPkAf8D5AH/A+UB/wOWAf8DpwH/A94B/wP5Af8D8wH/A/IB/wPwAf8D9QH/ - A/kB/wMiAf8DIgH/AyIB/wP5Af8D9AH/A+sB/wPoAf8D5gH/A+sB/wPUAf8DpwH/AcIBngGBAf8B6QHa - AcYB/wH+AfoB8wH/Af0B9gHoAf8B/QH1AeYB/wH9AfMB4gH/Af0B9wHsAf8B/gH7AfQB/wMiAf8DIgH/ - AyIB/wH+AfsB9AH/Af0B9wHqAf8B+gHvAdoB/wH3AewB2AH/AfUB6gHWAf8B8wHtAeMB/wHhAdEBvAH/ - AcIBngGBAf8BpgGIAVAB/wGsAZkBgQH/AdIByAG3Af8B7gHkAdMB/wH5Ae8B3AH/AfkB7gHXAf8B+wH0 - AeUB/wH9AfkB8AH/AyIB/wMiAf8DIgH/Af0B+AHwAf8B+wHyAeIB/wH2AegBzQH/AfMB5QHLAf8B8QHk - AckB/wHtAeABxgH/AcUBsQGPAf8BpgGIAVAB/wOnAf8D3gH/A/kB/wPzAf8D+wH/AyIB/wMiAf8D+QH/ - A/QB/wPtAf8D9AH/A/kB/wMiAf8DIgH/A/gB/wPmAf8D6wH/A9QB/wOnAf8DxwH/A7sB/wP9Af8D9QH/ - A/QB/wPyAf8D8QH/A/UB/wP6Af8DIgH/A/oB/wP1Af8D7gH/A+wB/wPqAf8D5wH/A/MB/wO2Af8DxwH/ - AdYBwQGmAf8B0QGzAYoB/wH+Af0B+gH/Af0B9wHrAf8B/QH2AeoB/wH9AfUB5wH/AfwB9AHkAf8B/QH4 - Ae4B/wH+AfsB9QH/AyIB/wH+AfsB9QH/Af0B9wHsAf8B/AHyAd8B/wH6AfAB3QH/AfgB7gHcAf8B9QHr - AdkB/wH2AfQB7wH/Ac0BrwGFAf8B1gHBAaYB/wHGAbUBnwH/AZ0BgQFKAf8ByAG/AbAB/wHkAdwBzQH/ - AfcB7wHfAf8B+wHyAeAB/wH6AfAB2wH/AfsB9QHoAf8B/QH6AfMB/wMiAf8B/QH5AfIB/wH7AfQB5gH/ - AfkB7QHVAf8B9wHrAdMB/wH1AekB0gH/AfIB5gHPAf8B6wHgAckB/wGmAYgBTgH/AcYBtQGfAf8DxwH/ - A7sB/wP9Af8D9QH/A/kB/wP7Af8D+wH/A/UB/wPvAf8D7gH/A+4B/wP1Af8D+gH/A/kB/wPyAf8D5wH/ - A/MB/wO2Af8DxwH/BAADkQH/A/EB/wP6Af8D9QH/A/QB/wPzAf8D8gH/A/cB/wP7Af8D9gH/A/AB/wPv - Af8D7gH/A+sB/wPwAf8D6QH/A5EB/wgAAbUBhQE0Af8B9gHwAecB/wH+AfsB9QH/Af0B+AHtAf8B/QH3 - AewB/wH9AfYB6QH/Af0B9QHnAf8B/QH5AfAB/wH+AfwB9wH/Af0B+QHvAf8B/AH0AeQB/wH8AfMB4wH/ - AfsB8gHhAf8B+AHvAd4B/wH3AfIB6QH/AfAB6QHeAf8BtAGFATMB/wgAAY0BgQEgAf8BugGuAZ0B/wHV - Ac0BwAH/AewB5QHYAf8B+QHyAeQB/wH7AfMB4wH/AfsB8gHhAf8B/QH3AewB/wH9AfsB9AH/AfwB9gHr - Af8B+gHwAdwB/wH6Ae8B2wH/AfkB7gHZAf8B9gHrAdcB/wHwAeUB0QH/AdIBwwGqAf8BjQGBASAB/wgA - A5EB/wPxAf8D+gH/A/UB/wP0Af8D8wH/A/IB/wPxAf8D8QH/A/AB/wPwAf8D7wH/A+4B/wPrAf8D8AH/ - A+kB/wORAf8IAAPAAf8DswH/A/0B/wP4Af8D9gH/A/UB/wP0Af8D8wH/A/MB/wPyAf8D8gH/A/EB/wPv - Af8D8AH/A/cB/wOvAf8DwAH/CAAB0QG5AZkB/wHLAaoBgQH/Af4B/QH7Af8B/gH6AfMB/wH+AfgB7wH/ - Af4B+AHuAf8B/gH3AewB/wH9AfYB6wH/Af0B9gHqAf8B/QH2AekB/wH9AfUB6AH/Af0B9QHmAf8B/AHz - AeQB/wH6AfMB5wH/AfoB+AH0Af8ByAGmAYEB/wHRAbkBmQH/CAABvwGrAZEB/wGcAYEBRQH/AcYBvwGy - Af8B2QHTAccB/wHtAecB2wH/AfgB8gHmAf8B+wH1AegB/wH8AfUB5wH/AfwB9AHmAf8B/AH0AeQB/wH7 - AfMB4wH/AfsB8wHhAf8B+QHwAd4B/wHyAekB1gH/Ad0B1AHAAf8BmgGBAT8B/wG/AasBkQH/CAADwAH/ - A7MB/wP9Af8D+AH/A/YB/wP1Af8D9AH/A/MB/wPzAf8D8gH/A/IB/wPxAf8D7wH/A/AB/wP3Af8DrwH/ - A8AB/wwAA7UB/wPBAf8D/QH/A/oB/wP2Af8D9gH/A/UB/wP0Af8D9AH/A/MB/wPyAf8D9wH/A/kB/wPA - Af8DtQH/EAABywGuAYYB/wHVAboBlgH/Af4B/QH8Af8B/gH8AfgB/wH+AfkB8QH/Af4B+AHwAf8B/gH4 - Ae8B/wH9AfcB7gH/Af0B9wHsAf8B/QH2AesB/wH9AfYB6gH/Af4B+gHzAf8B/AH6AfcB/wHVAboBlgH/ - AcsBrgGGAf8QAAG1AZ0BgQH/AaMBigGBAf8BxgHAAbMB/wHVAc8BwwH/AeUB4AHUAf8B8AHqAd8B/wH2 - AfAB5QH/AfoB9AHnAf8B+wH0AecB/wH5AfIB5AH/AfQB6wHcAf8B6QHgAc8B/wHTAcoBuAH/AZ8BhAFO - Af8BtQGdAYEB/xAAA7UB/wPBAf8D/QH/A/oB/wP2Af8D9gH/A/UB/wP0Af8D9AH/A/MB/wPyAf8D9wH/ - A/kB/wPAAf8DtQH/FAADtQH/A7AB/wPyAf8D/QH/A/sB/wP4Af8D9gH/A/cB/wP5Af8D/AH/A/EB/wOv - Af8DtQH/GAABywGuAYYB/wHJAacBgQH/AfcB8gHqAf8C/gH8Af8B/gH8AfgB/wH+AfoB8wH/Af4B+AHw - Af8B/QH6AfIB/wH+AfsB9gH/Af4B/QH6Af8B9wHxAegB/wHJAacBgQH/AcsBrgGGAf8YAAG1AZ0BgQH/ - AZsBgQFDAf8BvAGyAaIB/wHJAcIBtwH/AdMBzQHCAf8B3AHWAcsB/wHiAdsB0AH/AeMB3AHQAf8B3QHV - AcgB/wHQAcgBuQH/AbcBqgGVAf8BkwGBATcB/wG1AZ0BgQH/GAADtQH/A7AB/wPyAf8D/QH/A/sB/wP4 - Af8D9gH/A/cB/wP5Af8D/AH/A/EB/wOvAf8DtQH/HAADvgH/A5EB/wO8Af8D3QH/A/AB/wP9Af8D8AH/ - A90B/wO7Af8DkQH/A74B/yAAAdABuAGXAf8BtQGFATQB/wHSAbUBjQH/AegB2gHGAf8B9QHvAeUB/wL+ - AfsB/wH1Ae4B5QH/AegB2QHFAf8B0gG0AY0B/wG1AYUBNAH/AdABuAGXAf8gAAG+AakBjwH/AY0BgQEh - Af8BngGDAU4B/wGtAZwBhAH/AbYBqgGYAf8BuwGzAaUB/wGzAaYBkgH/AaYBlAGBAf8BlgGBAUMB/wGM - AYABHwH/Ab4BqQGPAf8gAAO+Af8DkQH/A7wB/wPdAf8D8AH/A/0B/wPwAf8D3QH/A7sB/wORAf8DvgH/ - KAADxQH/A6gB/wOYAf8DjAH/A5gB/wOoAf8DxQH/MAAB1QHAAaMB/wHDAZ8BgQH/AbgBjAFAAf8BsQGB - ASsB/wG4AYwBQAH/AcMBnwGBAf8B1QHAAaMB/zAAAcUBtAGdAf8BqAGKAYAB/wGXAYEBMgH/AYsBUQEb - Af8BlwGBATIB/wGoAYoBgAH/AcUBtAGdAf8wAAPFAf8DqAH/A5gB/wOMAf8DmAH/A6gB/wPFAf8YAAFC - AU0BPgcAAT4DAAEoAwABTAMAASYDAAEBAQABAQUAAcgBARYAA/8BAAH8AQcB/wGAA/8BgAQAAfABAQH+ - AQABPwL/AYAEAAHgAQAB/AEAAR8C/wGABAABwAEAAXgBAAEPAv8BgAQAAYABAAEwAQABBwH8AX8BgAQA - AYABAAEwAQABBwH4AT8BgAgAAQMB/AEfAYAIAAEDAf4BDwGACAABAwHAAQcBgAgAAQMBgAEDAYAIAAED - AYABAwGACAABAwHAAQcBgAgAAQMB/gEPAYAEAAGAAQABMAEAAQcB/AEfAYAEAAGAAQABMAEAAQcB+AE/ - AYAEAAHAAQABeAEAAQ8B/AF/AYAEAAHgAQAB/AEAAR8C/wGABAAB8AEBAf4BAAE/Av8BgAQAAfwBBwH/ - AYAD/wGABAAB/AEHAf8BgAH/AfABHwH+AQMB8AIAAfABAQH+AQABPwHAAQcB+AEAAfACAAHgAQAB/AEA - AR8BgAEDAfABAAFwAgABwAEAAXgBAAEPAQABAQHgAQABMAIAAYABAAEwAQABBgIAAcABAAEQAgABgAEA - ATABAAEGAgABwAEAARBWAAGAAQABMAEAAQYCAAHAAQABEAIAAYABAAEwAQABBgIAAcABAAEQAgABwAEA - AXgBAAEPAQABAQHgAQABMAIAAeABAAH8AQABHwGAAQMB8AEAAXACAAHwAQEB/gEAAT8BwAEHAfgBAAHw - AgAB/AEHAf8BgAH/AfABHwH+AQMB8AIACw== - - - - 58 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAA + MgAAAk1TRnQBSQFMAgEBBwEAAWwBAQFsAQEBEwEAARMBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFM + AwABJgMAAQEBAAEgBQABIAEtKgAB1QG/AaIB/wHCAZ4BgQH/AbcBigE8Af8BsQGBASsB/wG3AYoBPAH/ + AcIBngGBAf8B1QG/AaIB/zAAAcUBswGbAf8BpgGIAVAB/wGVAYEBLgH/AYsBUQEbAf8BlQGBAS4B/wGm + AYgBUAH/AcUBswGbAf/AAAHRAbcBlQH/AbQBhAEzAf8BzgGuAYMB/wHgAc0BsgH/AeoB3wHOAf8B7wHp + AdwB/wHpAd8BzQH/Ad4BzAGxAf8BzAGtAYIB/wG0AYQBMwH/AdEBtwGVAf8gAAG9AakBjQH/AYwBUgEc + Af8BnAGBASwB/wGzAY4BPQH/AcQBngFJAf8BzQGoAVAB/wHJAaIBTAH/AbsBlQFCAf8BpgGBATEB/wGO + AYEBHQH/Ab0BqQGNAf+0AAHLAa4BhgH/AcgBpAGBAf8B7wHlAdUB/wH0Ae0B4gH/AfAB4gHIAf8B7AHV + Aa0B/wHpAc8BnwH/AeoB1AGsAf8B7QHfAcUB/wHvAekB3QH/AeoB4AHQAf8BxQGiAYEB/wHLAa4BhgH/ + GAABtQGdAYEB/wGTAYEBJQH/Ab0BmQFIAf8B0QGrAYEB/wHTAa4BgQH/AdMBrgGBAf8B0wGtAYEB/wHS + Aa0BgQH/AdIBrQGBAf8B0gGtAYEB/wHLAaYBUgH/AaEBgQEuAf8BtQGdAYEB/6wAAcsBrgGGAf8B1AG3 + AY4B/wH5AfIB5gH/AfQB5QHKAf8B7wHVAaUB/wHvAdUBpQH/Ae4B1AGlAf8B7QHTAaQB/wHrAdIBowH/ + AekB0AGhAf8B6QHQAaEB/wHtAd8BxAH/AfAB6QHeAf8BzwGyAYoB/wHLAa4BhgH/EAABtQGdAYEB/wGW + AYEBKgH/AcYBpAGAAf8B2AG0AYEB/wHaAbYBgQH/AdoBtgGBAf8B2QG1AYEB/wHYAbQBgQH/AdYBswGB + Af8B1QGxAYEB/wHVAbEBgQH/AdUBsQGBAf8B1QGxAYEB/wGtAYcBOgH/AbUBnQGBAf+kAAHQAbgBlwH/ + AcsBpwGBAf8B+wH0AegB/wH1AeABuQH/AfMB2gGqAf8B8wHaAaoB/wHyAdkBqgH/AfIB2QGqAf8B8QHY + AakB/wHwAdcBqAH/Ae4B1QGnAf8B6wHTAaUB/wHqAdIBpAH/AesB1wGxAf8B8AHpAd4B/wHGAaMBgQH/ + AdABuAGXAf8IAAG+AakBjwH/AY4BgQEkAf8BvwGeAVIB/wHbAbgBgQH/AeABvAGBAf8B4AG8AYEB/wHg + AbsBgQH/AeABuwGBAf8B3wG7AYEB/wHeAboBgQH/AdwBuAGBAf8B2QG2AYEB/wHYAbUBgQH/AdgBtQGB + Af8B2AG1AYEB/wGkAYEBMwH/Ab4BqQGPAf8kAAGBAeMBKwH/AYEB5AEtAf8B8AH8AewB/3AAAbUBhQEz + Af8B9gHsAdsB/wH7AewB0QH/AfgB3gGwAf8B+AHeAbAB/wH3Ad0BsAH/AfcB3QGwAf8B+wHrAdAB/wH8 + AfQB5gH/AfkB6gHPAf8B9AHbAa4B/wHxAdgBqwH/Ae0B1QGpAf8B7AHUAagB/wHuAeABxgH/AeoB4AHQ + Af8BtAGEATMB/wgAAYsBUgEcAf8BqgGMAUcB/wHVAbQBgQH/AeUBwgGCAf8B5gHDAYIB/wHlAcIBggH/ + AeUBwgGCAf8B8AHbAbUB/wH3AewB2AH/Ae4B2gG0Af8B4gHAAYEB/wHgAb4BgQH/AdwBuwGBAf8B2wG6 + AYEB/wHbAboBgQH/AdMBsQGBAf8BjgGBAR4B/yAAAbIB8QGcAf8BKAHbAQAB/wEoAdsBAAH/AUUB4AEU + Af8B8gH9Ae4B/2gAAdYBwQGmAf8B0QGxAYUB/wH+AfgB7gH/AfoB4wG5Af8B+gHiAbgB/wH6AeIBtQH/ + AfoB4QG0Af8B/AHtAdMB/wH9AfYB6AH/AyIB/wH9AfUB5wH/AfsB7AHSAf8B9gHdAbEB/wHyAdoBrgH/ + Ae4B1gGsAf8B7QHWAasB/wHxAeoB4AH/AcsBqwGBAf8B1gHBAaYB/wHGAbUBnwH/AZIBgQEvAf8BxAGo + AYEB/wHjAcUBjAH/AesBzAGQAf8B6gHKAYwB/wHqAckBigH/AfIB3wG6Af8B+AHuAdsB/wMiAf8B+AHu + AdoB/wHxAd4BuQH/AeYBxgGIAf8B4wHDAYYB/wHfAcABhAH/Ad4BvwGDAf8B3gG/AYMB/wGqAYUBPAH/ + AcYBtQGfAf8gAAE6Ad4BBgH/ASgB2wEAAf8BKAHbAQAB/wFJAeEBGQH/Ae8B/AHrAf9kAAHCAZ4BgQH/ + AekB2AG/Af8B/QHyAd8B/wH8AecBwQH/AfsB5gHAAf8B+wHlAbwB/wH9Ae4B1QH/Af4B9gHpAf8DIgH/ + AyIB/wMiAf8B/QH2AekB/wH7Ae0B1AH/AfYB3wG0Af8B8gHbAbIB/wHuAdcBrwH/AfAB4wHMAf8B4AHP + AbYB/wHBAZwBgQH/AaYBiAFQAf8BoQGGAUwB/wHTAboBjQH/AewB0QGeAf8B7wHSAZ4B/wHuAdABmAH/ + AfQB4gG/Af8B+QHwAd0B/wMiAf8DIgH/AyIB/wH5Ae8B3QH/AfMB4AG+Af8B6AHJAY8B/wHlAcYBjQH/ + AeEBwwGLAf8B4QHDAYsB/wHIAagBgQH/AaUBhwFOAf8kAAE0AdcBBgH/ASIB0wEAAf8BIgHTAQAB/wFE + AdoBGQH/AfMB/AHwAf9gAAG3AYoBPAH/AfcB7gHhAf8B/QHuAdIB/wH9AeoByAH/AfwB6QHFAf8B/QHx + AdkB/wH+AfcB6gH/AyIB/wMiAf8DIgH/AyIB/wMiAf8B/gH3AeoB/wH7Ae0B1QH/AfUB3wG2Af8B8QHb + AbMB/wHvAd0BvAH/AesB4QHSAf8BtwGKATwB/wGVAYEBLgH/Aa0BlwGBAf8B2QHDAZsB/wHxAdkBqwH/ + AfEB2AGnAf8B9gHmAccB/wH6AfEB4AH/AyIB/wMiAf8DIgH/AyIB/wMiAf8B+gHwAd8B/wHzAeIBwAH/ + AegBywGUAf8B5QHIAZEB/wHjAcYBkAH/AdoBvAGGAf8BlQGBAS4B/xAAAYEB2QE/Af8BgQHdAVAB/wGB + Ad4BgQH/AYwB4QGBAf8BmAHkAYMB/wE4AdABFAH/ARoByAEAAf8BGgHIAQAB/wEaAcgBAAH/AT8B0gEd + Af8B7gH7AesB/1wAAbMBggEwAf8B/AH4AfAB/wH+Ae0B0gH/Af0B7AHOAf8B/gHzAeAB/wH+AfgB7QH/ + AyIB/wMiAf8DIgH/Af4B9wHrAf8DIgH/AyIB/wMiAf8B/QH2AeoB/wH7Ae0B1gH/AfQB3gG3Af8B8QHc + AbgB/wHvAekB3wH/AbMBggEwAf8BjgGBASAB/wG3AaoBlAH/Ad8B0gG6Af8B9QHoAc8B/wH7AfIB4gH/ + Af0B+AHvAf8DIgH/AyIB/wMiAf8B/AH3Ae0B/wMiAf8DIgH/AyIB/wH7AfYB7AH/AfYB7AHZAf8B7QHd + Ab0B/wHqAdoBuwH/AeQB0wGzAf8BjgGBASAB/wwAAREBuwEAAf8BEQG7AQAB/wERAbsBAAH/AREBuwEA + Af8BEQG7AQAB/wERAbsBAAH/AREBuwEAAf8BEQG7AQAB/wERAbsBAAH/AREBuwEAAf8BEQG7AQAB/wEm + AcEBCAH/A/sB/1gAAbcBigE8Af8B9wHwAeYB/wH9AfYB6QH/Af0B9AHkAf8B/gH7AfYB/wMiAf8DIgH/ + AyIB/wH+AfoB8wH/Af0B9gHoAf8B/gH6AfMB/wMiAf8DIgH/AyIB/wH9AfkB8gH/AfQB6AHSAf8B8QHo + AdUB/wHsAeQB2QH/AbcBigE8Af8BlQGBAS4B/wG1AacBkQH/AdoBzwG7Af8B8wHoAdMB/wH9AfkB8gH/ + AyIB/wMiAf8DIgH/Af0B+AHvAf8B+wHxAeAB/wH9AfgB7wH/AyIB/wMiAf8DIgH/AfsB9gHtAf8B7wHh + AcQB/wHsAd4BwQH/AdsBygGrAf8BlQGBAS4B/wwAAQUBqwEAAf8BBQGrAQAB/wEFAasBAAH/AQUBqwEA + Af8BBQGrAQAB/wEFAasBAAH/AQUBqwEAAf8BBQGrAQAB/wEFAasBAAH/AQUBqwEAAf8BBQGrAQAB/wEa + AbMBCAH/A/sB/1gAAcIBngGBAf8B6QHaAcYB/wH+AfoB8wH/Af0B9gHoAf8B/gH8AfcB/wMiAf8DIgH/ + Af4B+wH0Af8B/QH3AeoB/wH8AfEB3AH/Af0B9wHqAf8B/gH7AfQB/wMiAf8DIgH/Af0B+QHzAf8B9QHq + AdYB/wHzAe0B4wH/AeEB0QG8Af8BwgGeAYEB/wGmAYgBUAH/AawBmQGBAf8B0gHIAbcB/wHuAeQB0wH/ + Af0B+gH0Af8DIgH/AyIB/wH9AfkB8AH/AfsB8gHiAf8B+AHqAc8B/wH7AfIB4gH/Af0B+AHwAf8DIgH/ + AyIB/wH7AfcB7wH/AfEB5AHJAf8B7QHgAcYB/wHFAbEBjwH/AaYBiAFQAf8QAAFBAbcBPQH/AU8BvQFL + Af8BgQG/AVAB/wGBAcYBgQH/AYUBzQGCAf8BHAGoARcB/wEAAZkBAAH/AQABmQEAAf8BAAGZAQAB/wEg + AakBGwH/AeQB9AHjAf9cAAHWAcEBpgH/AdEBswGKAf8B/gH9AfoB/wH9AfcB6wH/Af4B+gHyAf8B/gH8 + AfgB/wH+AfwB9wH/Af0B+AHuAf8B/AHzAeAB/wH8AfIB4AH/AfwB8gHgAf8B/QH3AewB/wH+AfsB9QH/ + Af0B+gH0Af8B+wH1AeoB/wH1AesB2QH/AfYB9AHvAf8BzQGvAYUB/wHWAcEBpgH/AcYBtQGfAf8BnQGB + AUoB/wHIAb8BsAH/AeQB3AHNAf8B+wH1AewB/wH+AfsB9QH/Af0B+gH0Af8B+wH1AegB/wH5Ae4B1wH/ + AfkB7QHWAf8B+QHtAdYB/wH7AfQB5gH/Af0B+QHyAf8B/QH5AfEB/wH5AfIB5AH/AfIB5gHPAf8B6wHg + AckB/wGmAYgBTgH/AcYBtQGfAf8kAAEFAZcBCAH/AQABjQEAAf8BAAGNAQAB/wEYAZ8BGwH/AewB9wHs + Af9kAAG1AYUBNAH/AfYB8AHnAf8B/gH7AfUB/wH9AfgB7QH/Af0B9wHsAf8B/QH2AekB/wH9AfUB5wH/ + AfwB9QHmAf8B/AH0AeUB/wH8AfQB5AH/AfwB9AHkAf8B/AHzAeMB/wH7AfIB4QH/AfgB7wHeAf8B9wHy + AekB/wHwAekB3gH/AbQBhQEzAf8IAAGNAYEBIAH/AboBrgGdAf8B1QHNAcAB/wHsAeUB2AH/AfkB8gHk + Af8B+wHzAeMB/wH7AfIB4QH/AfsB8QHfAf8B+gHxAd0B/wH6AfAB3QH/AfoB8AHcAf8B+gHvAdsB/wH5 + Ae4B2QH/AfYB6wHXAf8B8AHlAdEB/wHSAcMBqgH/AY0BgQEgAf8lAAGSAQAB/wEAAY0BAAH/AQABjQEA + Af8BEwGdARYB/wHqAfYB6gH/aAAB0QG5AZkB/wHLAaoBgQH/Af4B/QH7Af8B/gH6AfMB/wH+AfgB7wH/ + Af4B+AHuAf8B/gH3AewB/wH9AfYB6wH/Af0B9gHqAf8B/QH2AekB/wH9AfUB6AH/Af0B9QHmAf8B/AHz + AeQB/wH6AfMB5wH/AfoB+AH0Af8ByAGmAYEB/wHRAbkBmQH/CAABvwGrAZEB/wGcAYEBRQH/AcYBvwGy + Af8B2QHTAccB/wHtAecB2wH/AfgB8gHmAf8B+wH1AegB/wH8AfUB5wH/AfwB9AHmAf8B/AH0AeQB/wH7 + AfMB4wH/AfsB8wHhAf8B+QHwAd4B/wHyAekB1gH/Ad0B1AHAAf8BmgGBAT8B/wG/AasBkQH/IAABnQHT + AZ4B/wEAAY0BAAH/AQABjQEAAf8BEAGcARMB/wHxAfkB8QH/cAABywGuAYYB/wHVAboBlgH/Af4B/QH8 + Af8B/gH8AfgB/wH+AfkB8QH/Af4B+AHwAf8B/gH4Ae8B/wH9AfcB7gH/Af0B9wHsAf8B/QH2AesB/wH9 + AfYB6gH/Af4B+gHzAf8B/AH6AfcB/wHVAboBlgH/AcsBrgGGAf8QAAG1AZ0BgQH/AaMBigGBAf8BxgHA + AbMB/wHVAc8BwwH/AeUB4AHUAf8B8AHqAd8B/wH2AfAB5QH/AfoB9AHnAf8B+wH0AecB/wH5AfIB5AH/ + AfQB6wHcAf8B6QHgAc8B/wHTAcoBuAH/AZ8BhAFOAf8BtQGdAYEB/ygAAScBpgEpAf8BKgGnASwB/wH0 + AfoB9AH/eAABywGuAYYB/wHJAacBgQH/AfcB8gHqAf8C/gH8Af8B/gH8AfgB/wH+AfoB8wH/Af4B+AHw + Af8B/QH6AfIB/wH+AfsB9gH/Af4B/QH6Af8B9wHxAegB/wHJAacBgQH/AcsBrgGGAf8YAAG1AZ0BgQH/ + AZsBgQFDAf8BvAGyAaIB/wHJAcIBtwH/AdMBzQHCAf8B3AHWAcsB/wHiAdsB0AH/AeMB3AHQAf8B3QHV + AcgB/wHQAcgBuQH/AbcBqgGVAf8BkwGBATcB/wG1AZ0BgQH/tAAB0AG4AZcB/wG1AYUBNAH/AdIBtQGN + Af8B6AHaAcYB/wH1Ae8B5QH/Av4B+wH/AfUB7gHlAf8B6AHZAcUB/wHSAbQBjQH/AbUBhQE0Af8B0AG4 + AZcB/yAAAb4BqQGPAf8BjQGBASEB/wGeAYMBTgH/Aa0BnAGEAf8BtgGqAZgB/wG7AbMBpQH/AbMBpgGS + Af8BpgGUAYEB/wGWAYEBQwH/AYwBgAEfAf8BvgGpAY8B/8AAAdUBwAGjAf8BwwGfAYEB/wG4AYwBQAH/ + AbEBgQErAf8BuAGMAUAB/wHDAZ8BgQH/AdUBwAGjAf8wAAHFAbQBnQH/AagBigGAAf8BlwGBATIB/wGL + AVEBGwH/AZcBgQEyAf8BqAGKAYAB/wHFAbQBnQH/yAADxQH/A6cB/wOWAf8DjAH/A5YB/wOnAf8DxQH/ + MAAB1QG/AaIB/wHCAZ4BgQH/AbcBigE8Af8BsQGBASsB/wG3AYoBPAH/AcIBngGBAf8B1QG/AaIB/zAA + AcUBswGbAf8BpgGIAVAB/wGVAYEBLgH/AYsBUQEbAf8BlQGBAS4B/wGmAYgBUAH/AcUBswGbAf8wAAPF + Af8DpwH/A5YB/wOMAf8DlgH/A6cB/wPFAf8oAAO+Af8DkAH/A7UB/wPQAf8D3wH/A+cB/wPeAf8DzgH/ + A7QB/wOQAf8DvgH/IAAB0QG3AZUB/wG0AYQBMwH/Ac4BrgGDAf8B4AHNAbIB/wHqAd8BzgH/Ae8B6QHc + Af8B6QHfAc0B/wHeAcwBsQH/AcwBrQGCAf8BtAGEATMB/wHRAbcBlQH/IAABvQGpAY0B/wGMAVIBHAH/ + AZwBgQEsAf8BswGOAT0B/wHEAZ4BSQH/Ac0BqAFQAf8ByQGiAUwB/wG7AZUBQgH/AaYBgQExAf8BjgGB + AR0B/wG9AakBjQH/IAADvgH/A5AB/wO1Af8D0AH/A98B/wPnAf8D3gH/A84B/wO0Af8DkAH/A74B/xwA + A7UB/wOsAf8D5AH/A+sB/wPdAf8DzwH/A8YB/wPNAf8D2gH/A+cB/wPgAf8DqgH/A7UB/xgAAcsBrgGG + Af8ByAGkAYEB/wHvAeUB1QH/AfQB7QHiAf8B8AHiAcgB/wHsAdUBrQH/AekBzwGfAf8B6gHUAawB/wHt + Ad8BxQH/Ae8B6QHdAf8B6gHgAdAB/wHFAaIBgQH/AcsBrgGGAf8YAAG1AZ0BgQH/AZMBgQElAf8BvQGZ + AUgB/wHRAasBgQH/AdMBrgGBAf8B0wGuAYEB/wHTAa0BgQH/AdIBrQGBAf8B0gGtAYEB/wHSAa0BgQH/ + AcsBpgFSAf8BoQGBAS4B/wG1AZ0BgQH/GAADtQH/A6wB/wPkAf8D6wH/A90B/wPPAf8DxgH/A80B/wPa + Af8D5wH/A+AB/wOqAf8DtQH/FAADtQH/A7wB/wPvAf8D4AH/A8sB/wPLAf8DygH/A8oB/wPIAf8DxgH/ + A8YB/wPZAf8D5wH/A7gB/wO1Af8QAAHLAa4BhgH/AdQBtwGOAf8B+QHyAeYB/wH0AeUBygH/Ae8B1QGl + Af8B7wHVAaUB/wHuAdQBpQH/Ae0B0wGkAf8B6wHSAaMB/wHpAdABoQH/AekB0AGhAf8B7QHfAcQB/wHw + AekB3gH/Ac8BsgGKAf8BywGuAYYB/xAAAbUBnQGBAf8BlgGBASoB/wHGAaQBgAH/AdgBtAGBAf8B2gG2 + AYEB/wHaAbYBgQH/AdkBtQGBAf8B2AG0AYEB/wHWAbMBgQH/AdUBsQGBAf8B1QGxAYEB/wHVAbEBgQH/ + AdUBsQGBAf8BrQGHAToB/wG1AZ0BgQH/EAADtQH/A7wB/wPvAf8D4AH/A8sB/wPLAf8DygH/A8oB/wPI + Af8DxgH/A8YB/wPZAf8D5wH/A7gB/wO1Af8MAAO+Af8DrwH/A/IB/wPYAf8D0AH/A9AB/wPPAf8DzwH/ + A84B/wPNAf8DzAH/A8kB/wPIAf8D0AH/A+gB/wOrAf8DvgH/CAAB0AG4AZcB/wHLAacBgQH/AfsB9AHo + Af8B9QHgAbkB/wHzAdoBqgH/AfMB2gGqAf8B8gHZAaoB/wHyAdkBqgH/AfEB2AGpAf8B8AHXAagB/wHu + AdUBpwH/AesB0wGlAf8B6gHSAaQB/wHrAdcBsQH/AfAB6QHeAf8BxgGjAYEB/wHQAbgBlwH/CAABvgGp + AY8B/wGOAYEBJAH/Ab8BngFSAf8B2wG4AYEB/wHgAbwBgQH/AeABvAGBAf8B4AG7AYEB/wHgAbsBgQH/ + Ad8BuwGBAf8B3gG6AYEB/wHcAbgBgQH/AdkBtgGBAf8B2AG1AYEB/wHYAbUBgQH/AdgBtQGBAf8BpAGB + ATMB/wG+AakBjwH/CAADvgH/A68B/wPyAf8D2AH/A9AB/wPQAf8DzwH/A88B/wPOAf8DzQH/A8wB/wPJ + Af8DyAH/A9AB/wPoAf8DqwH/A74B/wgAA5EB/wPqAf8D5gH/A9QB/wPUAf8D0wH/A9MB/wPTAf8D0gH/ + A9IB/wPRAf8DzgH/A8sB/wPKAf8D2gH/A98B/wOQAf8IAAG1AYUBMwH/AfYB7AHbAf8B+wHsAdEB/wH4 + Ad4BsAH/AfgB3gGwAf8B9wHdAbAB/wH3Ad0BsAH/AfcB3QGwAf8B9gHcAa8B/wH1AdwBrgH/AfQB2wGu + Af8B8QHYAasB/wHtAdUBqQH/AewB1AGoAf8B7gHgAcYB/wHqAeAB0AH/AbQBhAEzAf8IAAGLAVIBHAH/ + AaoBjAFHAf8B1QG0AYEB/wHlAcIBggH/AeYBwwGCAf8B5QHCAYIB/wHlAcIBggH/AeUBwgGCAf8B5AHC + AYEB/wHjAcEBgQH/AeIBwAGBAf8B4AG+AYEB/wHcAbsBgQH/AdsBugGBAf8B2wG6AYEB/wHTAbEBgQH/ + AY4BgQEeAf8IAAORAf8D6gH/A+YB/wPUAf8D1AH/A9MB/wPTAf8D5QH/A/EB/wPkAf8D0QH/A84B/wPL + Af8DygH/A9oB/wPfAf8DkAH/BAADxwH/A7gB/wP2Af8D2gH/A+gB/wPzAf8D8wH/A+cB/wPXAf8D1gH/ + A9YB/wPmAf8D8gH/A/AB/wPiAf8DzAH/A+kB/wOyAf8DxwH/AdYBwQGmAf8B0QGxAYUB/wH+AfgB7gH/ + AfoB4wG5Af8B/AHuAdUB/wH9AfYB6AH/Af0B9gHoAf8B/AHtAdMB/wH6AeEBtAH/AfkB4AGzAf8B+QHg + AbMB/wH7AewB0gH/AfwB9AHnAf8B+wH0AeYB/wH1AeYBzgH/Ae0B1gGrAf8B8QHqAeAB/wHLAasBgQH/ + AdYBwQGmAf8BxgG1AZ8B/wGSAYEBLwH/AcQBqAGBAf8B4wHFAYwB/wHzAeEBvQH/AfgB7wHbAf8B+AHu + AdsB/wHyAd8BugH/AeoByQGKAf8B6QHIAYkB/wHpAcgBiQH/AfEB3gG5Af8B9wHtAdoB/wH2AewB2gH/ + AewB2QG2Af8B3gG/AYMB/wHeAb8BgwH/AaoBhQE8Af8BxgG1AZ8B/wPHAf8DuAH/A/YB/wPaAf8D2QH/ + A9gB/wPXAf8D5wH/A/MB/wMiAf8D8gH/A+YB/wPUAf8D0AH/A80B/wPMAf8D6QH/A7IB/wPHAf8DpwH/ + A9oB/wPuAf8D3gH/A/QB/wMiAf8DIgH/A/MB/wPoAf8D2QH/A+gB/wPzAf8DIgH/AyIB/wPxAf8DzgH/ + A94B/wPRAf8DpgH/AcIBngGBAf8B6QHYAb8B/wH9AfIB3wH/AfwB5wHBAf8B/gH3AesB/wMiAf8DIgH/ + Af4B9gHpAf8B/QHuAdUB/wH7AeMBuAH/Af0B7gHVAf8B/QH2AekB/wMiAf8DIgH/AfsB9AHnAf8B7gHX + Aa8B/wHwAeMBzAH/AeABzwG2Af8BwQGcAYEB/wGmAYgBUAH/AaEBhgFMAf8B0wG6AY0B/wHsAdEBngH/ + AfoB8QHhAf8DIgH/AyIB/wH5AfAB3QH/AfQB4gG+Af8B7QHNAZIB/wH0AeIBvgH/AfkB7wHdAf8DIgH/ + AyIB/wH3Ae0B3AH/AeEBwwGLAf8B4QHDAYsB/wHIAagBgQH/AaUBhwFOAf8DpwH/A9oB/wPuAf8D3gH/ + A90B/wPbAf8D6AH/A/MB/wMiAf8DIgH/AyIB/wPzAf8D5wH/A9UB/wPRAf8DzgH/A94B/wPRAf8DpgH/ + A5YB/wPuAf8D5wH/A+IB/wP1Af8DIgH/AyIB/wMiAf8D9AH/A+oB/wP0Af8DIgH/AyIB/wMiAf8D8gH/ + A9IB/wPWAf8D4AH/A5YB/wG3AYoBPAH/AfcB7gHhAf8B/QHuAdIB/wH9AeoByAH/Af4B+AHtAf8DIgH/ + AyIB/wMiAf8B/gH3AeoB/wH9AfAB1wH/Af4B9wHqAf8DIgH/AyIB/wMiAf8B/AH1AegB/wHxAdsBswH/ + Ae8B3QG8Af8B6wHhAdIB/wG3AYoBPAH/AZUBgQEuAf8BrQGXAYEB/wHZAcMBmwH/AfEB2QGrAf8B+wHz + AeQB/wMiAf8DIgH/AyIB/wH6AfEB3wH/AfUB5AHCAf8B+gHxAd8B/wMiAf8DIgH/AyIB/wH4Ae8B3gH/ + AeUByAGRAf8B4wHGAZAB/wHaAbwBhgH/AZUBgQEuAf8DlgH/A+4B/wPnAf8D4gH/A+AB/wPsAf8D9AH/ + AyIB/wMiAf8DIgH/AyIB/wMiAf8D9AH/A+gB/wPVAf8D0gH/A9YB/wPgAf8DlgH/A48B/wP2Af8D5wH/ + A+UB/wPuAf8D9QH/AyIB/wMiAf8DIgH/A/QB/wMiAf8DIgH/AyIB/wP0Af8D6AH/A9UB/wPUAf8D5wH/ + A48B/wGzAYIBMAH/AfwB+AHwAf8B/gHtAdIB/wH9AewBzgH/Af4B8wHgAf8B/gH4Ae0B/wMiAf8DIgH/ + AyIB/wH+AfcB6wH/AyIB/wMiAf8DIgH/Af0B9gHqAf8B+wHtAdYB/wH0Ad4BtwH/AfEB3AG4Af8B7wHp + Ad8B/wGzAYIBMAH/AY4BgQEgAf8BtwGqAZQB/wHfAdIBugH/AfUB6AHPAf8B+wHyAeIB/wH9AfgB7wH/ + AyIB/wMiAf8DIgH/AfwB9wHtAf8DIgH/AyIB/wMiAf8B+wH2AewB/wH2AewB2QH/Ae0B3QG9Af8B6gHa + AbsB/wHkAdMBswH/AY4BgQEgAf8DjwH/A/YB/wPnAf8D5QH/A+4B/wP1Af8DIgH/AyIB/wMiAf8D9AH/ + AyIB/wMiAf8DIgH/A/QB/wPoAf8D1QH/A9QB/wPnAf8DjwH/A5YB/wPxAf8D8wH/A/EB/wPvAf8D9QH/ + A/kB/wMiAf8DIgH/AyIB/wMiAf8DIgH/A/kB/wPyAf8D5gH/A+QB/wPkAf8D5QH/A5YB/wG3AYoBPAH/ + AfcB8AHmAf8B/QH2AekB/wH9AfQB5AH/Af0B8wHhAf8B/QH3AewB/wH+AfsB9AH/AyIB/wMiAf8DIgH/ + AyIB/wMiAf8B/gH6AfMB/wH8AfUB5wH/AfcB6wHVAf8B9AHoAdIB/wHxAegB1QH/AewB5AHZAf8BtwGK + ATwB/wGVAYEBLgH/AbUBpwGRAf8B2gHPAbsB/wHzAegB0wH/AfkB7QHWAf8B+wHzAeQB/wH9AfgB7wH/ + AyIB/wMiAf8DIgH/AyIB/wMiAf8B/QH4Ae8B/wH5AfAB3gH/AfIB4wHGAf8B7wHhAcQB/wHsAd4BwQH/ + AdsBygGrAf8BlQGBAS4B/wOWAf8D8QH/A/MB/wPxAf8D+gH/AyIB/wMiAf8DIgH/A/kB/wPzAf8D+QH/ + AyIB/wMiAf8DIgH/A/cB/wPkAf8D5AH/A+UB/wOWAf8DpwH/A94B/wP5Af8D8wH/A/IB/wPwAf8D9QH/ + A/kB/wMiAf8DIgH/AyIB/wP5Af8D9AH/A+sB/wPoAf8D5gH/A+sB/wPUAf8DpwH/AcIBngGBAf8B6QHa + AcYB/wH+AfoB8wH/Af0B9gHoAf8B/QH1AeYB/wH9AfMB4gH/Af0B9wHsAf8B/gH7AfQB/wMiAf8DIgH/ + AyIB/wH+AfsB9AH/Af0B9wHqAf8B+gHvAdoB/wH3AewB2AH/AfUB6gHWAf8B8wHtAeMB/wHhAdEBvAH/ + AcIBngGBAf8BpgGIAVAB/wGsAZkBgQH/AdIByAG3Af8B7gHkAdMB/wH5Ae8B3AH/AfkB7gHXAf8B+wH0 + AeUB/wH9AfkB8AH/AyIB/wMiAf8DIgH/Af0B+AHwAf8B+wHyAeIB/wH2AegBzQH/AfMB5QHLAf8B8QHk + AckB/wHtAeABxgH/AcUBsQGPAf8BpgGIAVAB/wOnAf8D3gH/A/kB/wPzAf8D+wH/AyIB/wMiAf8D+QH/ + A/QB/wPtAf8D9AH/A/kB/wMiAf8DIgH/A/gB/wPmAf8D6wH/A9QB/wOnAf8DxwH/A7sB/wP9Af8D9QH/ + A/QB/wPyAf8D8QH/A/UB/wP6Af8DIgH/A/oB/wP1Af8D7gH/A+wB/wPqAf8D5wH/A/MB/wO2Af8DxwH/ + AdYBwQGmAf8B0QGzAYoB/wH+Af0B+gH/Af0B9wHrAf8B/QH2AeoB/wH9AfUB5wH/AfwB9AHkAf8B/QH4 + Ae4B/wH+AfsB9QH/AyIB/wH+AfsB9QH/Af0B9wHsAf8B/AHyAd8B/wH6AfAB3QH/AfgB7gHcAf8B9QHr + AdkB/wH2AfQB7wH/Ac0BrwGFAf8B1gHBAaYB/wHGAbUBnwH/AZ0BgQFKAf8ByAG/AbAB/wHkAdwBzQH/ + AfcB7wHfAf8B+wHyAeAB/wH6AfAB2wH/AfsB9QHoAf8B/QH6AfMB/wMiAf8B/QH5AfIB/wH7AfQB5gH/ + AfkB7QHVAf8B9wHrAdMB/wH1AekB0gH/AfIB5gHPAf8B6wHgAckB/wGmAYgBTgH/AcYBtQGfAf8DxwH/ + A7sB/wP9Af8D9QH/A/kB/wP7Af8D+wH/A/UB/wPvAf8D7gH/A+4B/wP1Af8D+gH/A/kB/wPyAf8D5wH/ + A/MB/wO2Af8DxwH/BAADkQH/A/EB/wP6Af8D9QH/A/QB/wPzAf8D8gH/A/cB/wP7Af8D9gH/A/AB/wPv + Af8D7gH/A+sB/wPwAf8D6QH/A5EB/wgAAbUBhQE0Af8B9gHwAecB/wH+AfsB9QH/Af0B+AHtAf8B/QH3 + AewB/wH9AfYB6QH/Af0B9QHnAf8B/QH5AfAB/wH+AfwB9wH/Af0B+QHvAf8B/AH0AeQB/wH8AfMB4wH/ + AfsB8gHhAf8B+AHvAd4B/wH3AfIB6QH/AfAB6QHeAf8BtAGFATMB/wgAAY0BgQEgAf8BugGuAZ0B/wHV + Ac0BwAH/AewB5QHYAf8B+QHyAeQB/wH7AfMB4wH/AfsB8gHhAf8B/QH3AewB/wH9AfsB9AH/AfwB9gHr + Af8B+gHwAdwB/wH6Ae8B2wH/AfkB7gHZAf8B9gHrAdcB/wHwAeUB0QH/AdIBwwGqAf8BjQGBASAB/wgA + A5EB/wPxAf8D+gH/A/UB/wP0Af8D8wH/A/IB/wPxAf8D8QH/A/AB/wPwAf8D7wH/A+4B/wPrAf8D8AH/ + A+kB/wORAf8IAAPAAf8DswH/A/0B/wP4Af8D9gH/A/UB/wP0Af8D8wH/A/MB/wPyAf8D8gH/A/EB/wPv + Af8D8AH/A/cB/wOvAf8DwAH/CAAB0QG5AZkB/wHLAaoBgQH/Af4B/QH7Af8B/gH6AfMB/wH+AfgB7wH/ + Af4B+AHuAf8B/gH3AewB/wH9AfYB6wH/Af0B9gHqAf8B/QH2AekB/wH9AfUB6AH/Af0B9QHmAf8B/AHz + AeQB/wH6AfMB5wH/AfoB+AH0Af8ByAGmAYEB/wHRAbkBmQH/CAABvwGrAZEB/wGcAYEBRQH/AcYBvwGy + Af8B2QHTAccB/wHtAecB2wH/AfgB8gHmAf8B+wH1AegB/wH8AfUB5wH/AfwB9AHmAf8B/AH0AeQB/wH7 + AfMB4wH/AfsB8wHhAf8B+QHwAd4B/wHyAekB1gH/Ad0B1AHAAf8BmgGBAT8B/wG/AasBkQH/CAADwAH/ + A7MB/wP9Af8D+AH/A/YB/wP1Af8D9AH/A/MB/wPzAf8D8gH/A/IB/wPxAf8D7wH/A/AB/wP3Af8DrwH/ + A8AB/wwAA7UB/wPBAf8D/QH/A/oB/wP2Af8D9gH/A/UB/wP0Af8D9AH/A/MB/wPyAf8D9wH/A/kB/wPA + Af8DtQH/EAABywGuAYYB/wHVAboBlgH/Af4B/QH8Af8B/gH8AfgB/wH+AfkB8QH/Af4B+AHwAf8B/gH4 + Ae8B/wH9AfcB7gH/Af0B9wHsAf8B/QH2AesB/wH9AfYB6gH/Af4B+gHzAf8B/AH6AfcB/wHVAboBlgH/ + AcsBrgGGAf8QAAG1AZ0BgQH/AaMBigGBAf8BxgHAAbMB/wHVAc8BwwH/AeUB4AHUAf8B8AHqAd8B/wH2 + AfAB5QH/AfoB9AHnAf8B+wH0AecB/wH5AfIB5AH/AfQB6wHcAf8B6QHgAc8B/wHTAcoBuAH/AZ8BhAFO + Af8BtQGdAYEB/xAAA7UB/wPBAf8D/QH/A/oB/wP2Af8D9gH/A/UB/wP0Af8D9AH/A/MB/wPyAf8D9wH/ + A/kB/wPAAf8DtQH/FAADtQH/A7AB/wPyAf8D/QH/A/sB/wP4Af8D9gH/A/cB/wP5Af8D/AH/A/EB/wOv + Af8DtQH/GAABywGuAYYB/wHJAacBgQH/AfcB8gHqAf8C/gH8Af8B/gH8AfgB/wH+AfoB8wH/Af4B+AHw + Af8B/QH6AfIB/wH+AfsB9gH/Af4B/QH6Af8B9wHxAegB/wHJAacBgQH/AcsBrgGGAf8YAAG1AZ0BgQH/ + AZsBgQFDAf8BvAGyAaIB/wHJAcIBtwH/AdMBzQHCAf8B3AHWAcsB/wHiAdsB0AH/AeMB3AHQAf8B3QHV + AcgB/wHQAcgBuQH/AbcBqgGVAf8BkwGBATcB/wG1AZ0BgQH/GAADtQH/A7AB/wPyAf8D/QH/A/sB/wP4 + Af8D9gH/A/cB/wP5Af8D/AH/A/EB/wOvAf8DtQH/HAADvgH/A5EB/wO8Af8D3QH/A/AB/wP9Af8D8AH/ + A90B/wO7Af8DkQH/A74B/yAAAdABuAGXAf8BtQGFATQB/wHSAbUBjQH/AegB2gHGAf8B9QHvAeUB/wL+ + AfsB/wH1Ae4B5QH/AegB2QHFAf8B0gG0AY0B/wG1AYUBNAH/AdABuAGXAf8gAAG+AakBjwH/AY0BgQEh + Af8BngGDAU4B/wGtAZwBhAH/AbYBqgGYAf8BuwGzAaUB/wGzAaYBkgH/AaYBlAGBAf8BlgGBAUMB/wGM + AYABHwH/Ab4BqQGPAf8gAAO+Af8DkQH/A7wB/wPdAf8D8AH/A/0B/wPwAf8D3QH/A7sB/wORAf8DvgH/ + KAADxQH/A6gB/wOYAf8DjAH/A5gB/wOoAf8DxQH/MAAB1QHAAaMB/wHDAZ8BgQH/AbgBjAFAAf8BsQGB + ASsB/wG4AYwBQAH/AcMBnwGBAf8B1QHAAaMB/zAAAcUBtAGdAf8BqAGKAYAB/wGXAYEBMgH/AYsBUQEb + Af8BlwGBATIB/wGoAYoBgAH/AcUBtAGdAf8wAAPFAf8DqAH/A5gB/wOMAf8DmAH/A6gB/wPFAf8YAAFC + AU0BPgcAAT4DAAEoAwABTAMAASYDAAEBAQABAQUAAcgBARYAA/8BAAH8AQcB/wGAA/8BgAQAAfABAQH+ + AQABPwL/AYAEAAHgAQAB/AEAAR8C/wGABAABwAEAAXgBAAEPAv8BgAQAAYABAAEwAQABBwH8AX8BgAQA + AYABAAEwAQABBwH4AT8BgAgAAQMB/AEfAYAIAAEDAf4BDwGACAABAwHAAQcBgAgAAQMBgAEDAYAIAAED + AYABAwGACAABAwHAAQcBgAgAAQMB/gEPAYAEAAGAAQABMAEAAQcB/AEfAYAEAAGAAQABMAEAAQcB+AE/ + AYAEAAHAAQABeAEAAQ8B/AF/AYAEAAHgAQAB/AEAAR8C/wGABAAB8AEBAf4BAAE/Av8BgAQAAfwBBwH/ + AYAD/wGABAAB/AEHAf8BgAH/AfABHwH+AQMB8AIAAfABAQH+AQABPwHAAQcB+AEAAfACAAHgAQAB/AEA + AR8BgAEDAfABAAFwAgABwAEAAXgBAAEPAQABAQHgAQABMAIAAYABAAEwAQABBgIAAcABAAEQAgABgAEA + ATABAAEGAgABwAEAARBWAAGAAQABMAEAAQYCAAHAAQABEAIAAYABAAEwAQABBgIAAcABAAEQAgABwAEA + AXgBAAEPAQABAQHgAQABMAIAAeABAAH8AQABHwGAAQMB8AEAAXACAAHwAQEB/gEAAT8BwAEHAfgBAAHw + AgAB/AEHAf8BgAH/AfABHwH+AQMB8AIACw== + + + + 58 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/UpdateForm.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/UpdateForm.Designer.cs similarity index 98% rename from source/ch/cyberduck/ui/winforms/UpdateForm.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/UpdateForm.Designer.cs index 38c6f27975..4f8cfca95e 100644 --- a/source/ch/cyberduck/ui/winforms/UpdateForm.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/UpdateForm.Designer.cs @@ -1,230 +1,230 @@ -using Ch.Cyberduck.Ui.Winforms.Controls; - -namespace Ch.Cyberduck.Ui.Winforms -{ - partial class UpdateForm - { - /// - /// 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.laterButton = new System.Windows.Forms.Button(); - this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); - this.newVersionAvailableLabel = new System.Windows.Forms.Label(); - this.versionLabel = new System.Windows.Forms.Label(); - this.releaseNotesLabel = new System.Windows.Forms.Label(); - this.installButton = new System.Windows.Forms.Button(); - this.changesTextBox = new Ch.Cyberduck.Ui.Winforms.Controls.ReadOnlyRichTextBox(); - this.updater = new wyDay.Controls.AutomaticUpdater(); - this.statusLabel = new System.Windows.Forms.Label(); - this.progressBar = new System.Windows.Forms.ProgressBar(); - this.pictureBox = new System.Windows.Forms.PictureBox(); - this.tableLayoutPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.updater)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit(); - this.SuspendLayout(); - // - // laterButton - // - this.laterButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.laterButton.AutoSize = true; - this.laterButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.laterButton.Location = new System.Drawing.Point(271, 312); - this.laterButton.Name = "laterButton"; - this.laterButton.Size = new System.Drawing.Size(107, 27); - this.laterButton.TabIndex = 1; - this.laterButton.Text = "Remind Me Later"; - this.laterButton.UseVisualStyleBackColor = true; - this.laterButton.Click += new System.EventHandler(this.laterButton_Click); - // - // tableLayoutPanel - // - this.tableLayoutPanel.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.tableLayoutPanel.ColumnCount = 3; - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel.Controls.Add(this.newVersionAvailableLabel, 0, 2); - this.tableLayoutPanel.Controls.Add(this.versionLabel, 0, 4); - this.tableLayoutPanel.Controls.Add(this.releaseNotesLabel, 0, 6); - this.tableLayoutPanel.Controls.Add(this.laterButton, 1, 10); - this.tableLayoutPanel.Controls.Add(this.installButton, 2, 10); - this.tableLayoutPanel.Controls.Add(this.changesTextBox, 0, 7); - this.tableLayoutPanel.Controls.Add(this.updater, 0, 10); - this.tableLayoutPanel.Controls.Add(this.statusLabel, 0, 8); - this.tableLayoutPanel.Controls.Add(this.progressBar, 0, 9); - this.tableLayoutPanel.Location = new System.Drawing.Point(96, 0); - this.tableLayoutPanel.Name = "tableLayoutPanel"; - this.tableLayoutPanel.Padding = new System.Windows.Forms.Padding(0, 10, 10, 10); - this.tableLayoutPanel.RowCount = 11; - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 6F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 6F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.Size = new System.Drawing.Size(486, 352); - this.tableLayoutPanel.TabIndex = 6; - // - // newVersionAvailableLabel - // - this.newVersionAvailableLabel.AutoSize = true; - this.tableLayoutPanel.SetColumnSpan(this.newVersionAvailableLabel, 3); - this.newVersionAvailableLabel.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold); - this.newVersionAvailableLabel.Location = new System.Drawing.Point(3, 10); - this.newVersionAvailableLabel.Name = "newVersionAvailableLabel"; - this.newVersionAvailableLabel.Size = new System.Drawing.Size(281, 19); - this.newVersionAvailableLabel.TabIndex = 1; - this.newVersionAvailableLabel.Text = "A new version of Cyberduck is available!"; - // - // versionLabel - // - this.versionLabel.AutoSize = true; - this.tableLayoutPanel.SetColumnSpan(this.versionLabel, 3); - this.versionLabel.Location = new System.Drawing.Point(3, 35); - this.versionLabel.Name = "versionLabel"; - this.versionLabel.Size = new System.Drawing.Size(452, 30); - this.versionLabel.TabIndex = 2; - this.versionLabel.Text = "Cyberduck /newversion/ is now available (you have /oldversion/). Would you like t" + - "o download it now?"; - // - // releaseNotesLabel - // - this.releaseNotesLabel.AutoSize = true; - this.tableLayoutPanel.SetColumnSpan(this.releaseNotesLabel, 3); - this.releaseNotesLabel.Font = new System.Drawing.Font("Segoe UI", 8F); - this.releaseNotesLabel.Location = new System.Drawing.Point(3, 71); - this.releaseNotesLabel.Name = "releaseNotesLabel"; - this.releaseNotesLabel.Size = new System.Drawing.Size(82, 13); - this.releaseNotesLabel.TabIndex = 3; - this.releaseNotesLabel.Text = "Release Notes:"; - // - // installButton - // - this.installButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.installButton.AutoSize = true; - this.installButton.Location = new System.Drawing.Point(384, 312); - this.installButton.Name = "installButton"; - this.installButton.Size = new System.Drawing.Size(89, 27); - this.installButton.TabIndex = 0; - this.installButton.Text = "Install Update"; - this.installButton.UseVisualStyleBackColor = true; - this.installButton.Click += new System.EventHandler(this.installButton_Click); - // - // changesTextBox - // - this.changesTextBox.BackColor = System.Drawing.Color.White; - this.changesTextBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.tableLayoutPanel.SetColumnSpan(this.changesTextBox, 3); - this.changesTextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.changesTextBox.Location = new System.Drawing.Point(3, 87); - this.changesTextBox.Name = "changesTextBox"; - this.changesTextBox.ReadOnly = true; - this.changesTextBox.Size = new System.Drawing.Size(470, 178); - this.changesTextBox.TabIndex = 4; - this.changesTextBox.Text = ""; - // - // updater - // - this.updater.ContainerForm = this; - this.updater.Location = new System.Drawing.Point(3, 307); - this.updater.Name = "updater"; - this.updater.Size = new System.Drawing.Size(16, 16); - this.updater.TabIndex = 9; - this.updater.wyUpdateCommandline = null; - this.updater.wyUpdateLocation = "Updater.exe"; - // - // statusLabel - // - this.statusLabel.AutoSize = true; - this.tableLayoutPanel.SetColumnSpan(this.statusLabel, 3); - this.statusLabel.Location = new System.Drawing.Point(3, 268); - this.statusLabel.Name = "statusLabel"; - this.statusLabel.Size = new System.Drawing.Size(38, 15); - this.statusLabel.TabIndex = 7; - this.statusLabel.Text = "status"; - // - // progressBar - // - this.tableLayoutPanel.SetColumnSpan(this.progressBar, 3); - this.progressBar.Dock = System.Windows.Forms.DockStyle.Fill; - this.progressBar.Location = new System.Drawing.Point(3, 286); - this.progressBar.MaximumSize = new System.Drawing.Size(0, 15); - this.progressBar.MinimumSize = new System.Drawing.Size(0, 15); - this.progressBar.Name = "progressBar"; - this.progressBar.Size = new System.Drawing.Size(470, 15); - this.progressBar.TabIndex = 8; - // - // pictureBox - // - this.pictureBox.Location = new System.Drawing.Point(12, 15); - this.pictureBox.Name = "pictureBox"; - this.pictureBox.Size = new System.Drawing.Size(74, 74); - this.pictureBox.TabIndex = 0; - this.pictureBox.TabStop = false; - // - // UpdateForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.laterButton; - this.ClientSize = new System.Drawing.Size(582, 352); - this.Controls.Add(this.tableLayoutPanel); - this.Controls.Add(this.pictureBox); - this.MinimumSize = new System.Drawing.Size(350, 350); - this.Name = "UpdateForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Cyberduck Update"; - this.tableLayoutPanel.ResumeLayout(false); - this.tableLayoutPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.updater)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - protected System.Windows.Forms.TableLayoutPanel tableLayoutPanel; - protected System.Windows.Forms.PictureBox pictureBox; - protected System.Windows.Forms.Label newVersionAvailableLabel; - private System.Windows.Forms.Label versionLabel; - private System.Windows.Forms.Label releaseNotesLabel; - protected System.Windows.Forms.Button laterButton; - protected System.Windows.Forms.Button installButton; - private ReadOnlyRichTextBox changesTextBox; - private System.Windows.Forms.Label statusLabel; - private System.Windows.Forms.ProgressBar progressBar; - private wyDay.Controls.AutomaticUpdater updater; - } +using Ch.Cyberduck.Ui.Winforms.Controls; + +namespace Ch.Cyberduck.Ui.Winforms +{ + partial class UpdateForm + { + /// + /// 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.laterButton = new System.Windows.Forms.Button(); + this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.newVersionAvailableLabel = new System.Windows.Forms.Label(); + this.versionLabel = new System.Windows.Forms.Label(); + this.releaseNotesLabel = new System.Windows.Forms.Label(); + this.installButton = new System.Windows.Forms.Button(); + this.changesTextBox = new Ch.Cyberduck.Ui.Winforms.Controls.ReadOnlyRichTextBox(); + this.updater = new wyDay.Controls.AutomaticUpdater(); + this.statusLabel = new System.Windows.Forms.Label(); + this.progressBar = new System.Windows.Forms.ProgressBar(); + this.pictureBox = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.updater)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit(); + this.SuspendLayout(); + // + // laterButton + // + this.laterButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.laterButton.AutoSize = true; + this.laterButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.laterButton.Location = new System.Drawing.Point(271, 312); + this.laterButton.Name = "laterButton"; + this.laterButton.Size = new System.Drawing.Size(107, 27); + this.laterButton.TabIndex = 1; + this.laterButton.Text = "Remind Me Later"; + this.laterButton.UseVisualStyleBackColor = true; + this.laterButton.Click += new System.EventHandler(this.laterButton_Click); + // + // tableLayoutPanel + // + this.tableLayoutPanel.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.tableLayoutPanel.ColumnCount = 3; + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel.Controls.Add(this.newVersionAvailableLabel, 0, 2); + this.tableLayoutPanel.Controls.Add(this.versionLabel, 0, 4); + this.tableLayoutPanel.Controls.Add(this.releaseNotesLabel, 0, 6); + this.tableLayoutPanel.Controls.Add(this.laterButton, 1, 10); + this.tableLayoutPanel.Controls.Add(this.installButton, 2, 10); + this.tableLayoutPanel.Controls.Add(this.changesTextBox, 0, 7); + this.tableLayoutPanel.Controls.Add(this.updater, 0, 10); + this.tableLayoutPanel.Controls.Add(this.statusLabel, 0, 8); + this.tableLayoutPanel.Controls.Add(this.progressBar, 0, 9); + this.tableLayoutPanel.Location = new System.Drawing.Point(96, 0); + this.tableLayoutPanel.Name = "tableLayoutPanel"; + this.tableLayoutPanel.Padding = new System.Windows.Forms.Padding(0, 10, 10, 10); + this.tableLayoutPanel.RowCount = 11; + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 6F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 6F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.Size = new System.Drawing.Size(486, 352); + this.tableLayoutPanel.TabIndex = 6; + // + // newVersionAvailableLabel + // + this.newVersionAvailableLabel.AutoSize = true; + this.tableLayoutPanel.SetColumnSpan(this.newVersionAvailableLabel, 3); + this.newVersionAvailableLabel.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold); + this.newVersionAvailableLabel.Location = new System.Drawing.Point(3, 10); + this.newVersionAvailableLabel.Name = "newVersionAvailableLabel"; + this.newVersionAvailableLabel.Size = new System.Drawing.Size(281, 19); + this.newVersionAvailableLabel.TabIndex = 1; + this.newVersionAvailableLabel.Text = "A new version of Cyberduck is available!"; + // + // versionLabel + // + this.versionLabel.AutoSize = true; + this.tableLayoutPanel.SetColumnSpan(this.versionLabel, 3); + this.versionLabel.Location = new System.Drawing.Point(3, 35); + this.versionLabel.Name = "versionLabel"; + this.versionLabel.Size = new System.Drawing.Size(452, 30); + this.versionLabel.TabIndex = 2; + this.versionLabel.Text = "Cyberduck /newversion/ is now available (you have /oldversion/). Would you like t" + + "o download it now?"; + // + // releaseNotesLabel + // + this.releaseNotesLabel.AutoSize = true; + this.tableLayoutPanel.SetColumnSpan(this.releaseNotesLabel, 3); + this.releaseNotesLabel.Font = new System.Drawing.Font("Segoe UI", 8F); + this.releaseNotesLabel.Location = new System.Drawing.Point(3, 71); + this.releaseNotesLabel.Name = "releaseNotesLabel"; + this.releaseNotesLabel.Size = new System.Drawing.Size(82, 13); + this.releaseNotesLabel.TabIndex = 3; + this.releaseNotesLabel.Text = "Release Notes:"; + // + // installButton + // + this.installButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.installButton.AutoSize = true; + this.installButton.Location = new System.Drawing.Point(384, 312); + this.installButton.Name = "installButton"; + this.installButton.Size = new System.Drawing.Size(89, 27); + this.installButton.TabIndex = 0; + this.installButton.Text = "Install Update"; + this.installButton.UseVisualStyleBackColor = true; + this.installButton.Click += new System.EventHandler(this.installButton_Click); + // + // changesTextBox + // + this.changesTextBox.BackColor = System.Drawing.Color.White; + this.changesTextBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tableLayoutPanel.SetColumnSpan(this.changesTextBox, 3); + this.changesTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.changesTextBox.Location = new System.Drawing.Point(3, 87); + this.changesTextBox.Name = "changesTextBox"; + this.changesTextBox.ReadOnly = true; + this.changesTextBox.Size = new System.Drawing.Size(470, 178); + this.changesTextBox.TabIndex = 4; + this.changesTextBox.Text = ""; + // + // updater + // + this.updater.ContainerForm = this; + this.updater.Location = new System.Drawing.Point(3, 307); + this.updater.Name = "updater"; + this.updater.Size = new System.Drawing.Size(16, 16); + this.updater.TabIndex = 9; + this.updater.wyUpdateCommandline = null; + this.updater.wyUpdateLocation = "Updater.exe"; + // + // statusLabel + // + this.statusLabel.AutoSize = true; + this.tableLayoutPanel.SetColumnSpan(this.statusLabel, 3); + this.statusLabel.Location = new System.Drawing.Point(3, 268); + this.statusLabel.Name = "statusLabel"; + this.statusLabel.Size = new System.Drawing.Size(38, 15); + this.statusLabel.TabIndex = 7; + this.statusLabel.Text = "status"; + // + // progressBar + // + this.tableLayoutPanel.SetColumnSpan(this.progressBar, 3); + this.progressBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.progressBar.Location = new System.Drawing.Point(3, 286); + this.progressBar.MaximumSize = new System.Drawing.Size(0, 15); + this.progressBar.MinimumSize = new System.Drawing.Size(0, 15); + this.progressBar.Name = "progressBar"; + this.progressBar.Size = new System.Drawing.Size(470, 15); + this.progressBar.TabIndex = 8; + // + // pictureBox + // + this.pictureBox.Location = new System.Drawing.Point(12, 15); + this.pictureBox.Name = "pictureBox"; + this.pictureBox.Size = new System.Drawing.Size(74, 74); + this.pictureBox.TabIndex = 0; + this.pictureBox.TabStop = false; + // + // UpdateForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.laterButton; + this.ClientSize = new System.Drawing.Size(582, 352); + this.Controls.Add(this.tableLayoutPanel); + this.Controls.Add(this.pictureBox); + this.MinimumSize = new System.Drawing.Size(350, 350); + this.Name = "UpdateForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Cyberduck Update"; + this.tableLayoutPanel.ResumeLayout(false); + this.tableLayoutPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.updater)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + protected System.Windows.Forms.TableLayoutPanel tableLayoutPanel; + protected System.Windows.Forms.PictureBox pictureBox; + protected System.Windows.Forms.Label newVersionAvailableLabel; + private System.Windows.Forms.Label versionLabel; + private System.Windows.Forms.Label releaseNotesLabel; + protected System.Windows.Forms.Button laterButton; + protected System.Windows.Forms.Button installButton; + private ReadOnlyRichTextBox changesTextBox; + private System.Windows.Forms.Label statusLabel; + private System.Windows.Forms.ProgressBar progressBar; + private wyDay.Controls.AutomaticUpdater updater; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/UpdateForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/UpdateForm.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/UpdateForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/UpdateForm.cs index 40b7df66f5..853dbad5fc 100644 --- a/source/ch/cyberduck/ui/winforms/UpdateForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/UpdateForm.cs @@ -1,265 +1,265 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Drawing; -using System.IO; -using System.Windows.Forms; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Ui.Controller; -using ch.cyberduck.core; -using ch.cyberduck.core.i18n; -using org.apache.log4j; -using wyDay.Controls; -using PreferencesFactory = ch.cyberduck.core.preferences.PreferencesFactory; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public partial class UpdateForm : BaseForm, IUpdateView - { - private static readonly Logger Log = Logger.getLogger(typeof (UpdateForm).FullName); - - private static bool _expanded; - - public UpdateForm() - { - InitializeComponent(); - - Closing += delegate - { - if (updater.UpdateStepOn == UpdateStepOn.DownloadingUpdate || - updater.UpdateStepOn == UpdateStepOn.ExtractingUpdate || - updater.UpdateStepOn == UpdateStepOn.Checking) - { - updater.Cancel(); - } - }; - - ConfigureUpdater(); - - pictureBox.Image = IconCache.Instance.IconForName("cyberduck", 64); - newVersionAvailableLabel.Text = - LocaleFactory.localizedString("A new version of %@ is available!", "Sparkle").Replace("%@", - PreferencesFactory.get(). - getProperty( - "application.name")); - //force handle creation to make the updater work - IntPtr intPtr = Handle; - OnLoad(new EventArgs()); - } - - public override string[] BundleNames - { - get { return new[] {"Sparkle"}; } - } - - public void CheckForUpdates(bool background) - { - SetFeedUrl(); - if (!background) - { - UpdateStatusLabel(LocaleFactory.localizedString("Checking for updates...", "Sparkle"), false); - tableLayoutPanel.RowStyles[7].SizeType = SizeType.AutoSize; - SetStatusChecking(true); - updater.ForceCheckForUpdate(true); - Show(); - } - else - { - updater.ForceCheckForUpdate(true); - } - } - - public bool AboutToInstallUpdate - { - get { return updater.UpdateStepOn == UpdateStepOn.UpdateReadyToInstall; } - } - - private void SetFeedUrl() - { - String currentFeed = PreferencesFactory.get().getProperty("update.feed"); - String feedUrl = PreferencesFactory.get().getProperty("update.feed." + currentFeed); - Log.debug("Setting feed URL to " + feedUrl); - updater.wyUpdateCommandline = "-server=\"" + feedUrl + "\""; - } - - public static void SetButtonShield(Button btn, bool showShield) - { - if (showShield) - { - if (!_expanded) - { - btn.Width += 20; - _expanded = true; - } - } - else - { - if (_expanded) btn.Width -= 20; - } - btn.FlatStyle = FlatStyle.System; - // BCM_SETSHIELD = 0x0000160C - NativeMethods.SendMessage(btn.Handle, 0x160C, 0, showShield ? 1 : 0); - } - - private void ConfigureUpdater() - { - if (!File.Exists("Updater.exe")) - { - //as of Beta7 the updater filename is Updater.exe. wyUpdate.exe is not automatically renamed. - updater.wyUpdateLocation = "wyUpdate.exe"; - } - - updater.ContainerForm = this; - updater.KeepHidden = true; - updater.Visible = false; - updater.UpdateType = UpdateType.DoNothing; - updater.UpdateAvailable += delegate - { - string newVersion = updater.Version; - if (newVersion == null) - { - //could not sort out why this event is triggered in some cases altough there is no new version available - return; - } - - laterButton.Visible = true; - installButton.Text = LocaleFactory.localizedString("Install and Relaunch", "Sparkle"); - if (Utils.IsVistaOrLater) - { - SetButtonShield(installButton, true); - } - - tableLayoutPanel.RowStyles[7].SizeType = SizeType.Percent; - tableLayoutPanel.RowStyles[7].Height = 100; - - string currentVersion = - PreferencesFactory.get().getProperty("application.version"); - - versionLabel.Text = LocaleFactory.localizedString( - "%1$@ %2$@ is now available (you have %3$@). Would you like to download it now?", - "Sparkle") - .Replace("%1$@", PreferencesFactory.get().getProperty("application.name")) - .Replace("%2$@", newVersion).Replace("%3$@", currentVersion); - - SetStatusChecking(false); - statusLabel.Text = "Update available"; - changesTextBox.Text = updater.Changes.Replace("\n", "\r\n"); - //installButton.Enabled = true; - Show(); - }; - - // error cases - updater.CheckingFailed += - delegate(object sender, FailArgs args) - { UpdateStatusLabel(args.ErrorTitle + Environment.NewLine + args.ErrorMessage, true); }; - - updater.UpdateFailed += - (sender, args) => - UpdateStatusLabel(args.ErrorTitle + Environment.NewLine + args.ErrorMessage, true); - - updater.DownloadingOrExtractingFailed += - (sender, args) => - UpdateStatusLabel(args.ErrorTitle + Environment.NewLine + args.ErrorMessage, true); - // end error cases - - updater.ProgressChanged += delegate(object sender, int progress) { progressBar.Value = progress; }; - - updater.BeforeDownloading += (sender, args) => - { - UpdateStatusLabel( - LocaleFactory.localizedString("Downloading update...", "Sparkle"), false); - progressBar.Style = ProgressBarStyle.Continuous; - progressBar.Value = 0; - progressBar.Visible = true; - }; - - updater.UpToDate += delegate - { - progressBar.Visible = false; - UpdateStatusLabel(LocaleFactory.localizedString("You're up to date!", "Sparkle"), false); - }; - - updater.ReadyToBeInstalled += delegate - { - progressBar.Visible = false; - statusLabel.Text = LocaleFactory.localizedString("Installing update...", - "Sparkle"); - updater.InstallNow(); - }; - - updater.BeforeChecking += delegate - { - if (Utils.IsVistaOrLater) - { - SetButtonShield(installButton, false); - } - laterButton.Visible = false; - installButton.Text = LocaleFactory.localizedString("OK", "Sparkle"); - progressBar.Style = ProgressBarStyle.Marquee; - progressBar.Visible = true; - }; - } - - private void UpdateStatusLabel(String status, bool error) - { - if (error) - { - progressBar.Visible = false; - laterButton.Visible = false; - installButton.Text = LocaleFactory.localizedString("Cancel"); - } - statusLabel.Visible = true; - statusLabel.ForeColor = error ? Color.Red : Color.FromKnownColor(KnownColor.ControlText); - statusLabel.Text = error - ? LocaleFactory.localizedString( - "An error occurred during installation. Please try again later." + " ", "Sparkle") - + status - : status; - } - - public void SetStatusChecking(bool checking) - { - statusLabel.Visible = checking; - progressBar.Visible = checking; - newVersionAvailableLabel.Visible = !checking; - versionLabel.Visible = !checking; - releaseNotesLabel.Visible = !checking; - changesTextBox.Visible = !checking; - } - - private void installButton_Click(object sender, EventArgs e) - { - if (updater.UpdateStepOn == UpdateStepOn.UpdateAvailable) - { - updater.InstallNow(); - laterButton.Enabled = false; - installButton.Enabled = false; - } - else - { - Close(); - } - } - - private void laterButton_Click(object sender, EventArgs e) - { - Close(); - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Drawing; +using System.IO; +using System.Windows.Forms; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Ui.Controller; +using ch.cyberduck.core; +using ch.cyberduck.core.i18n; +using org.apache.log4j; +using wyDay.Controls; +using PreferencesFactory = ch.cyberduck.core.preferences.PreferencesFactory; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public partial class UpdateForm : BaseForm, IUpdateView + { + private static readonly Logger Log = Logger.getLogger(typeof (UpdateForm).FullName); + + private static bool _expanded; + + public UpdateForm() + { + InitializeComponent(); + + Closing += delegate + { + if (updater.UpdateStepOn == UpdateStepOn.DownloadingUpdate || + updater.UpdateStepOn == UpdateStepOn.ExtractingUpdate || + updater.UpdateStepOn == UpdateStepOn.Checking) + { + updater.Cancel(); + } + }; + + ConfigureUpdater(); + + pictureBox.Image = IconCache.Instance.IconForName("cyberduck", 64); + newVersionAvailableLabel.Text = + LocaleFactory.localizedString("A new version of %@ is available!", "Sparkle").Replace("%@", + PreferencesFactory.get(). + getProperty( + "application.name")); + //force handle creation to make the updater work + IntPtr intPtr = Handle; + OnLoad(new EventArgs()); + } + + public override string[] BundleNames + { + get { return new[] {"Sparkle"}; } + } + + public void CheckForUpdates(bool background) + { + SetFeedUrl(); + if (!background) + { + UpdateStatusLabel(LocaleFactory.localizedString("Checking for updates...", "Sparkle"), false); + tableLayoutPanel.RowStyles[7].SizeType = SizeType.AutoSize; + SetStatusChecking(true); + updater.ForceCheckForUpdate(true); + Show(); + } + else + { + updater.ForceCheckForUpdate(true); + } + } + + public bool AboutToInstallUpdate + { + get { return updater.UpdateStepOn == UpdateStepOn.UpdateReadyToInstall; } + } + + private void SetFeedUrl() + { + String currentFeed = PreferencesFactory.get().getProperty("update.feed"); + String feedUrl = PreferencesFactory.get().getProperty("update.feed." + currentFeed); + Log.debug("Setting feed URL to " + feedUrl); + updater.wyUpdateCommandline = "-server=\"" + feedUrl + "\""; + } + + public static void SetButtonShield(Button btn, bool showShield) + { + if (showShield) + { + if (!_expanded) + { + btn.Width += 20; + _expanded = true; + } + } + else + { + if (_expanded) btn.Width -= 20; + } + btn.FlatStyle = FlatStyle.System; + // BCM_SETSHIELD = 0x0000160C + NativeMethods.SendMessage(btn.Handle, 0x160C, 0, showShield ? 1 : 0); + } + + private void ConfigureUpdater() + { + if (!File.Exists("Updater.exe")) + { + //as of Beta7 the updater filename is Updater.exe. wyUpdate.exe is not automatically renamed. + updater.wyUpdateLocation = "wyUpdate.exe"; + } + + updater.ContainerForm = this; + updater.KeepHidden = true; + updater.Visible = false; + updater.UpdateType = UpdateType.DoNothing; + updater.UpdateAvailable += delegate + { + string newVersion = updater.Version; + if (newVersion == null) + { + //could not sort out why this event is triggered in some cases altough there is no new version available + return; + } + + laterButton.Visible = true; + installButton.Text = LocaleFactory.localizedString("Install and Relaunch", "Sparkle"); + if (Utils.IsVistaOrLater) + { + SetButtonShield(installButton, true); + } + + tableLayoutPanel.RowStyles[7].SizeType = SizeType.Percent; + tableLayoutPanel.RowStyles[7].Height = 100; + + string currentVersion = + PreferencesFactory.get().getProperty("application.version"); + + versionLabel.Text = LocaleFactory.localizedString( + "%1$@ %2$@ is now available (you have %3$@). Would you like to download it now?", + "Sparkle") + .Replace("%1$@", PreferencesFactory.get().getProperty("application.name")) + .Replace("%2$@", newVersion).Replace("%3$@", currentVersion); + + SetStatusChecking(false); + statusLabel.Text = "Update available"; + changesTextBox.Text = updater.Changes.Replace("\n", "\r\n"); + //installButton.Enabled = true; + Show(); + }; + + // error cases + updater.CheckingFailed += + delegate(object sender, FailArgs args) + { UpdateStatusLabel(args.ErrorTitle + Environment.NewLine + args.ErrorMessage, true); }; + + updater.UpdateFailed += + (sender, args) => + UpdateStatusLabel(args.ErrorTitle + Environment.NewLine + args.ErrorMessage, true); + + updater.DownloadingOrExtractingFailed += + (sender, args) => + UpdateStatusLabel(args.ErrorTitle + Environment.NewLine + args.ErrorMessage, true); + // end error cases + + updater.ProgressChanged += delegate(object sender, int progress) { progressBar.Value = progress; }; + + updater.BeforeDownloading += (sender, args) => + { + UpdateStatusLabel( + LocaleFactory.localizedString("Downloading update...", "Sparkle"), false); + progressBar.Style = ProgressBarStyle.Continuous; + progressBar.Value = 0; + progressBar.Visible = true; + }; + + updater.UpToDate += delegate + { + progressBar.Visible = false; + UpdateStatusLabel(LocaleFactory.localizedString("You're up to date!", "Sparkle"), false); + }; + + updater.ReadyToBeInstalled += delegate + { + progressBar.Visible = false; + statusLabel.Text = LocaleFactory.localizedString("Installing update...", + "Sparkle"); + updater.InstallNow(); + }; + + updater.BeforeChecking += delegate + { + if (Utils.IsVistaOrLater) + { + SetButtonShield(installButton, false); + } + laterButton.Visible = false; + installButton.Text = LocaleFactory.localizedString("OK", "Sparkle"); + progressBar.Style = ProgressBarStyle.Marquee; + progressBar.Visible = true; + }; + } + + private void UpdateStatusLabel(String status, bool error) + { + if (error) + { + progressBar.Visible = false; + laterButton.Visible = false; + installButton.Text = LocaleFactory.localizedString("Cancel"); + } + statusLabel.Visible = true; + statusLabel.ForeColor = error ? Color.Red : Color.FromKnownColor(KnownColor.ControlText); + statusLabel.Text = error + ? LocaleFactory.localizedString( + "An error occurred during installation. Please try again later." + " ", "Sparkle") + + status + : status; + } + + public void SetStatusChecking(bool checking) + { + statusLabel.Visible = checking; + progressBar.Visible = checking; + newVersionAvailableLabel.Visible = !checking; + versionLabel.Visible = !checking; + releaseNotesLabel.Visible = !checking; + changesTextBox.Visible = !checking; + } + + private void installButton_Click(object sender, EventArgs e) + { + if (updater.UpdateStepOn == UpdateStepOn.UpdateAvailable) + { + updater.InstallNow(); + laterButton.Enabled = false; + installButton.Enabled = false; + } + else + { + Close(); + } + } + + private void laterButton_Click(object sender, EventArgs e) + { + Close(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/UpdateForm.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/UpdateForm.resx similarity index 97% rename from source/ch/cyberduck/ui/winforms/UpdateForm.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/UpdateForm.resx index 29dcb1b3a3..1af7de150c 100644 --- a/source/ch/cyberduck/ui/winforms/UpdateForm.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/UpdateForm.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/UserDefaultsDateFormatter.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/UserDefaultsDateFormatter.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/UserDefaultsDateFormatter.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/UserDefaultsDateFormatter.cs index 7bfbc49500..d911d7bbdf 100644 --- a/source/ch/cyberduck/ui/winforms/UserDefaultsDateFormatter.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/UserDefaultsDateFormatter.cs @@ -1,86 +1,86 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using ch.cyberduck.core; -using ch.cyberduck.core.date; - -namespace Ch.Cyberduck.Ui.Winforms -{ - public class UserDefaultsDateFormatter : AbstractUserDateFormatter - { - public override string getLongFormat(long millis, bool natural) - { - if (-1 == millis) - { - return LocaleFactory.localizedString("Unknown"); - } - return GetLongFormat(ConvertJavaMillisecondsToDateTime(millis)); - } - - /// - /// - /// - /// millis Milliseconds since January 1, 1970, 00:00:00 GMT - /// A short format string or "Unknown" if there is a problem converting the time to a string - public override string getShortFormat(long millis, bool natural) - { - if (-1 == millis) - { - return LocaleFactory.localizedString("Unknown"); - } - - return GetShortFormat(ConvertJavaMillisecondsToDateTime(millis)); - } - - public override string getMediumFormat(long millis, bool natural) - { - return getLongFormat(millis, natural); - } - - public static string GetShortFormat(DateTime d) - { - return d.ToString("G"); - } - - public static string GetLongFormat(DateTime d) - { - return d.ToString("F"); - } - - public static DateTime ConvertJavaMillisecondsToDateTime(long javaMS) - { - DateTime utcBaseTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); - DateTime dt = utcBaseTime.Add(new TimeSpan(javaMS*TimeSpan.TicksPerMillisecond)).ToLocalTime(); - return dt; - } - - public static long ConvertDateTimeToJavaMilliseconds(DateTime dateTime) - { - TimeSpan timeSpan = dateTime.ToUniversalTime().Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)); - return timeSpan.Ticks/TimeSpan.TicksPerMillisecond; - } - - public static long ConvertJavaMillisecondsToDotNetMillis(long javaMS) - { - DateTime utcBaseTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); - DateTime dt = utcBaseTime.Add(new TimeSpan(javaMS*TimeSpan.TicksPerMillisecond)).ToLocalTime(); - return dt.Ticks/TimeSpan.TicksPerMillisecond; - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using ch.cyberduck.core; +using ch.cyberduck.core.date; + +namespace Ch.Cyberduck.Ui.Winforms +{ + public class UserDefaultsDateFormatter : AbstractUserDateFormatter + { + public override string getLongFormat(long millis, bool natural) + { + if (-1 == millis) + { + return LocaleFactory.localizedString("Unknown"); + } + return GetLongFormat(ConvertJavaMillisecondsToDateTime(millis)); + } + + /// + /// + /// + /// millis Milliseconds since January 1, 1970, 00:00:00 GMT + /// A short format string or "Unknown" if there is a problem converting the time to a string + public override string getShortFormat(long millis, bool natural) + { + if (-1 == millis) + { + return LocaleFactory.localizedString("Unknown"); + } + + return GetShortFormat(ConvertJavaMillisecondsToDateTime(millis)); + } + + public override string getMediumFormat(long millis, bool natural) + { + return getLongFormat(millis, natural); + } + + public static string GetShortFormat(DateTime d) + { + return d.ToString("G"); + } + + public static string GetLongFormat(DateTime d) + { + return d.ToString("F"); + } + + public static DateTime ConvertJavaMillisecondsToDateTime(long javaMS) + { + DateTime utcBaseTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + DateTime dt = utcBaseTime.Add(new TimeSpan(javaMS*TimeSpan.TicksPerMillisecond)).ToLocalTime(); + return dt; + } + + public static long ConvertDateTimeToJavaMilliseconds(DateTime dateTime) + { + TimeSpan timeSpan = dateTime.ToUniversalTime().Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)); + return timeSpan.Ticks/TimeSpan.TicksPerMillisecond; + } + + public static long ConvertJavaMillisecondsToDotNetMillis(long javaMS) + { + DateTime utcBaseTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + DateTime dt = utcBaseTime.Add(new TimeSpan(javaMS*TimeSpan.TicksPerMillisecond)).ToLocalTime(); + return dt.Ticks/TimeSpan.TicksPerMillisecond; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/commondialog/CustomOpenFileFolderDialog.csproj b/windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/CustomOpenFileFolderDialog.csproj similarity index 97% rename from source/ch/cyberduck/ui/winforms/commondialog/CustomOpenFileFolderDialog.csproj rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/CustomOpenFileFolderDialog.csproj index 643c60d64e..3aeaf9b07c 100644 --- a/source/ch/cyberduck/ui/winforms/commondialog/CustomOpenFileFolderDialog.csproj +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/CustomOpenFileFolderDialog.csproj @@ -1,97 +1,97 @@ - - - - Debug - AnyCPU - 9.0.21022 - 2.0 - {4B3467EF-CAB0-4500-B1ED-979FAE9B9C77} - Library - Properties - Ch.Cyberduck.Ui.Winforms.Commondialog - CustomOpenFileFolderDialog - v4.0 - 512 - - - - - 3.5 - - - - - true - full - false - ..\..\..\..\..\..\lib\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - ..\..\..\..\..\..\build\ - TRACE - prompt - 4 - - - true - ..\..\..\..\..\..\build\Debug\x86\ - DEBUG;TRACE - full - x86 - prompt - false - false - false - - - ..\..\..\..\..\..\build\ - TRACE - true - pdbonly - x86 - prompt - false - false - - - - - - - - - - - - Component - - - - - - - - - - - - - $(MSBuildExtensionsPath32)\.. - $(ProgramFiles32)\Microsoft Visual Studio 11.0\VC\atlmfc\include;$(ProgramFiles32)\\Microsoft Visual Studio 11.0\VC\include - $(IntermediateOutputPath)\res1.res - - - - + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {4B3467EF-CAB0-4500-B1ED-979FAE9B9C77} + Library + Properties + Ch.Cyberduck.Ui.Winforms.Commondialog + CustomOpenFileFolderDialog + v4.0 + 512 + + + + + 3.5 + + + + + true + full + false + ..\..\..\..\..\..\lib\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\..\..\..\..\build\ + TRACE + prompt + 4 + + + true + ..\..\..\..\..\..\build\Debug\x86\ + DEBUG;TRACE + full + x86 + prompt + false + false + false + + + ..\..\..\..\..\..\build\ + TRACE + true + pdbonly + x86 + prompt + false + false + + + + + + + + + + + + Component + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\.. + $(ProgramFiles32)\Microsoft Visual Studio 11.0\VC\atlmfc\include;$(ProgramFiles32)\\Microsoft Visual Studio 11.0\VC\include + $(IntermediateOutputPath)\res1.res + + + + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/commondialog/InternalErrorException.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/InternalErrorException.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/commondialog/InternalErrorException.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/InternalErrorException.cs index 9b1b4cafb6..0cebe12667 100644 --- a/source/ch/cyberduck/ui/winforms/commondialog/InternalErrorException.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/InternalErrorException.cs @@ -1,28 +1,28 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; - -namespace Ch.Cyberduck.Ui.Winforms.Commondialog -{ - public class InternalErrorException : Exception - { - public InternalErrorException(string message) : base(message) - { - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; + +namespace Ch.Cyberduck.Ui.Winforms.Commondialog +{ + public class InternalErrorException : Exception + { + public InternalErrorException(string message) : base(message) + { + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/commondialog/InteropUtil.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/InteropUtil.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/commondialog/InteropUtil.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/InteropUtil.cs index 652aafb0a1..c5f3ff7432 100644 --- a/source/ch/cyberduck/ui/winforms/commondialog/InteropUtil.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/InteropUtil.cs @@ -1,534 +1,534 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using System.ComponentModel; -using System.Runtime.InteropServices; -using System.Text; - -namespace Ch.Cyberduck.Ui.Winforms.Commondialog -{ - internal static class InteropUtil - { - public delegate int SUBCLASSPROC - ( - IntPtr hWnd, - uint uMsg, - IntPtr wParam, - IntPtr lParam, - IntPtr uIdSubclass, - uint dwRefData - ); - - public delegate IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); - - public const int BN_CLICKED = 0; - public const uint CDM_FIRST = WM_USER + 100; - public const uint CDM_GETFILEPATH = CDM_FIRST + 0x0001; - public const uint CDM_GETFOLDERPATH = CDM_FIRST + 0x0002; - public const uint CDM_HIDECONTROL = CDM_FIRST + 0x0005; - public const uint CDN_FILEOK = (CDN_FIRST - 5); - public const uint CDN_FIRST = unchecked(0u - 601u); - public const uint CDN_FOLDERCHANGE = (CDN_FIRST - 2); - public const uint CDN_INITDONE = (CDN_FIRST - 0); - public const int DWL_MSGRESULT = 0; - public const int IDCANCEL = 2; - public const int IDD_CustomOpenDialog = 101; - public const int IDOK = 1; - public const int ID_CUSTOM_CANCEL = 1002; - public const int ID_FileList = lst2; - public const int ID_FileNameCombo = cmb13; - public const int ID_FileNameLabel = stc3; - public const int ID_FileNameTextBox = edt1; - public const int ID_FilterCombo = cmb1; - public const int ID_FilterLabel = stc2; - public const int ID_SELECT = 1001; - public const int LVIF_TEXT = 0x00000001; - public const int LVIS_SELECTED = 0x0002; - public const uint LVM_FIRST = 0x1000; - public const uint LVM_GETITEMTEXT = LVM_FIRST + 115; - public const uint LVM_GETNEXTITEM = LVM_FIRST + 12; - public const uint LVM_GETNEXTITEMINDEX = LVM_FIRST + 211; - public const uint LVM_GETSELECTEDCOUNT = LVM_FIRST + 50; //yla extension - public const int LVNI_SELECTED = 0x0002; - public const uint LVN_FIRST = unchecked(0U - 100U); - public const uint LVN_ITEMCHANGED = (LVN_FIRST - 1); - public const int NumberOfFileChars = 8192; - public const int OFN_ALLOWMULTISELECT = 0x00000200; - public const int OFN_DONTADDTORECENT = 0x02000000; - public const int OFN_ENABLEHOOK = 0x00000020; - public const int OFN_ENABLESIZING = 0x00800000; - public const int OFN_ENABLETEMPLATE = 0x00000040; - public const int OFN_EXPLORER = 0x00080000; - public const int OFN_FILEMUSTEXIST = 0x00001000; - public const int OFN_HIDEREADONLY = 0x00000004; - public const int OFN_NODEREFERENCELINKS = 0x00100000; - public const int OFN_NOTESTFILECREATE = 0x00010000; - public const int OFN_PATHMUSTEXIST = 0x00000800; - public const uint WM_CLOSE = 0x0010; - public const uint WM_COMMAND = 0x0111; - public const uint WM_CREATE = 0x0001; - public const uint WM_GETFONT = 0x0031; - public const uint WM_INITDIALOG = 0x0110; - public const uint WM_NOTIFY = 0x4E; - public const uint WM_PARENTNOTIFY = 0x0210; - public const uint WM_SETFONT = 0x0030; - public const uint WM_SETTEXT = 0x000C; - public const uint WM_SIZE = 0x0005; - public const uint WM_USER = 0x0400; - public const int cmb1 = 0x0470; - public const int cmb13 = 0x047c; - public const int edt1 = 0x0480; - public const int lst2 = 0x0461; - public const int stc2 = 0x0441; - public const int stc3 = 0x0442; - - [DllImport("comctl32.dll", EntryPoint = "SetWindowSubclass")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool SetWindowSubclass - (IntPtr hWnd, - SUBCLASSPROC pfnSubclass, - uint uIdSubclass, - uint dwRefData - ); - - - [DllImport("comctl32.dll", EntryPoint = "DefSubclassProc")] - public static extern int DefSubclassProc - (IntPtr hWnd, - uint uMsg, - IntPtr wParam, - IntPtr lParam - ); - - [DllImport("comdlg32.dll", EntryPoint = "GetOpenFileNameW")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool GetOpenFileNameW(ref OpenFileName openFileNameInfo); - - [DllImport("kernel32.dll", EntryPoint = "GetLastError")] - public static extern uint GetLastError(); - - [DllImport("user32.dll", EntryPoint = "SendMessageW", CharSet=CharSet.Unicode)] - public static extern IntPtr SendMessageIntPtr - ( - IntPtr hWnd, - UInt32 Msg, - IntPtr wParam, - IntPtr lParam - ); - - [DllImport("user32.dll", EntryPoint = "SendMessageW", CharSet=CharSet.Unicode)] - public static extern uint SendMessage - ( - [In] IntPtr hWnd, - uint Msg, - uint wParam, - uint lParam - ); - - [DllImport("user32.dll", EntryPoint = "SendMessageW", CharSet=CharSet.Unicode)] - public static extern int SendMessageInt - ( - [In] IntPtr hWnd, - uint Msg, - int wParam, - int lParam - ); - - [DllImport("user32.dll", EntryPoint = "SendMessageW")] - public static extern uint SendListViewMessage - ( - [In] IntPtr hWnd, - uint Msg, - uint wParam, - ref LVITEM lParam - ); - - [DllImport("user32.dll", EntryPoint = "SendMessageW")] - public static extern uint SendListViewMessageInt - ( - [In] IntPtr hWnd, - uint Msg, - int wParam, - ref LVITEM lParam - ); - - [DllImport("user32.dll", EntryPoint = "SendMessageW")] - public static extern uint SendMessageString - ( - [In] IntPtr hWnd, - uint Msg, - uint wParam, - [MarshalAs(UnmanagedType.LPWStr)] string str - ); - - [DllImport("user32.dll", EntryPoint = "GetDlgItem")] - public static extern IntPtr GetDlgItem - ( - [In] IntPtr hDlg, - int nIDDlgItem - ); - - [DllImport("user32.dll", EntryPoint = "GetWindowTextW")] - public static extern int GetWindowTextW - ( - [In] IntPtr hWnd, - [ - Out, - MarshalAs(UnmanagedType.LPWStr) - ] StringBuilder lpString, - int nMaxCount - ); - - public static string GetWindowTextW(IntPtr hWnd) - { - var builder = new StringBuilder(NumberOfFileChars); - if (GetWindowTextW(hWnd, builder, builder.Capacity) > 0) - { - return builder.ToString(); - } - return String.Empty; - } - - [DllImport("user32.dll", EntryPoint = "GetParent")] - public static extern IntPtr GetParent([In] IntPtr hWnd); - - [DllImport("user32.dll", EntryPoint = "EnableWindow")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool EnableWindow([In] IntPtr hWnd, [MarshalAs(UnmanagedType.Bool)] bool bEnable); - - [DllImport("user32.dll", EntryPoint = "SetWindowLongW")] - public static extern int SetWindowLongW - ( - [In] IntPtr hWnd, - int nIndex, - int dwNewLong - ); - - [DllImport("user32.dll", EntryPoint = "SetWindowTextW")] - public static extern bool SetWindowTextW - ( - [In] IntPtr hWnd, - [In] [MarshalAs(UnmanagedType.LPWStr)] string lpString - ); - - [DllImport("user32.dll", EntryPoint = "GetFocus")] - public static extern IntPtr GetFocus(); - - [DllImport("user32.dll", EntryPoint = "GetDlgCtrlID")] - public static extern int GetDlgCtrlID([In] IntPtr hWnd); - - [DllImport("user32.dll", EntryPoint = "SetFocus")] - public static extern IntPtr SetFocus([In] IntPtr hWnd); - - [DllImport("user32.dll", EntryPoint = "SetWindowPlacement")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool SetWindowPlacement - ( - [In] IntPtr hWnd, - [In] ref WINDOWPLACEMENT lpwndpl - ); - - [DllImport("user32.dll", EntryPoint = "InvalidateRect")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool InvalidateRect - ( - [In] IntPtr hWnd, - IntPtr lpRect, - [MarshalAs(UnmanagedType.Bool)] bool bErase - ); - - - public static void LoadFontFrom(IntPtr hWndDest, IntPtr hWndSrc) - { - AssumeNonZero(hWndDest); - AssumeNonZero(hWndSrc); - - var hFont = (IntPtr) unchecked((int) SendMessage(hWndSrc, WM_GETFONT, 0, 0)); - AssumeNonZero(hFont); - - SendMessage(hWndDest, WM_SETFONT, (uint) hFont, 0); - } - - public static WINDOWPLACEMENT GetWindowPlacement(IntPtr hwnd) - { - WINDOWPLACEMENT ret = WINDOWPLACEMENT.New(); - - if (!GetWindowPlacement(hwnd, ref ret)) - { - CheckForWin32Error(); - } - return ret; - } - - [DllImport("user32.dll", EntryPoint = "GetWindowPlacement")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool GetWindowPlacement - ( - [In] IntPtr hWnd, - ref WINDOWPLACEMENT lpwndpl - ); - - public static void CheckForWin32Error() - { - var error = GetLastError(); - if (error != 0) - { - throw new Win32Exception(unchecked((int) error)); - } - } - - [DllImport("gdi32.dll", EntryPoint = "CreateRectRgnIndirect")] - public static extern IntPtr CreateRectRgnIndirect - ( - [In] ref RECT lpRect - ); - - [DllImport("gdi32.dll", EntryPoint = "DeleteObject")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool DeleteObject - ( - [In] IntPtr hObject - ); - - [DllImport("user32.dll", EntryPoint = "SetWindowRgn")] - public static extern int SetWindowRgn - ( - [In] IntPtr hWnd, - [In] IntPtr hRgn, - [MarshalAs(UnmanagedType.Bool)] bool bRedraw - ); - - //What follows here are a bunch of magic constants needed for - //windows message passing. One could make an argument that it would be - //more "C#ish" to package these all up into enum types, and then to - //create appropriate overloads of the "extern" functions that take in - //enum types. - // - //However, I wanted to keep the calls to API functions as close to - //the documentation as possible. That way if you look at the stuff and wonder - //"what the hell is this" you can just look it up in MSDN and get an answer. - //I did make some things extension methods, to improve readability, but otherwise - //the code pretty much looks like it would if it were written in C. - - //=========================================================== - //Open File Name flag constants - - public static void Assume - ( - bool condition, - string message - ) - { - if (!condition) - { - throw new InternalErrorException(message); - } - } - - - public static T AssumeNotNull - (T item - ) where T : class - { - Assume(item != null, "Unexpected null value!"); - return item; - } - - public static void Assume - ( - bool condition - ) - { - Assume(condition, "The condition should not be false!"); - } - - public static IntPtr AssumeNonZero - (IntPtr item - ) - { - Assume(item != IntPtr.Zero); - return item; - } - - public static bool PathContains(string parent, string child) - { - AssumeNotNull(parent); - AssumeNotNull(child); - - if (!parent.EndsWith("\\")) - { - parent = parent + "\\"; - } - - return - child.StartsWith(parent, StringComparison.OrdinalIgnoreCase) || - parent.TrimEnd('\\').Equals(child, StringComparison.OrdinalIgnoreCase); - } - - [StructLayout(LayoutKind.Sequential)] - public struct LVITEM - { - public uint mask; - public int iItem; - public int iSubItem; - public uint state; - public uint stateMask; - public IntPtr pszText; - public int cchTextMax; - public int iImage; - public int lParam; - public int iIndent; - public int iGroupId; - public uint cColumns; - public IntPtr puColumns; - public IntPtr piColFmt; - public int iGroup; - } - - [StructLayout(LayoutKind.Sequential)] - public struct NMHDR - { - public IntPtr hwndFrom; - public uint idFrom; - public uint code; - } - - [StructLayout(LayoutKind.Sequential)] - public struct NMLISTVIEW - { - public NMHDR hdr; - public int iItem; - public int iSubItem; - public uint uNewState; - public uint uOldState; - public uint uChanged; - public Point ptAction; - public int lParam; - } - - [StructLayout(LayoutKind.Sequential)] - public struct OFNOTIFY - { - public IntPtr hdr_hwndFrom; - public IntPtr hdr_idFrom; - public uint hdr_code; - public IntPtr lpOFN; - public IntPtr pszFile; - } - - [StructLayout(LayoutKind.Sequential)] - public struct OpenFileName - { - public int lStructSize; - public IntPtr hwndOwner; - public IntPtr hInstance; - public IntPtr lpstrFilter; - public IntPtr lpstrCustomFilter; - public int nMaxCustFilter; - public int nFilterIndex; - public IntPtr lpstrFile; - public int nMaxFile; - public IntPtr lpstrFileTitle; - public int nMaxFileTitle; - [MarshalAs(UnmanagedType.LPWStr)] public string lpstrInitialDir; - [MarshalAs(UnmanagedType.LPWStr)] public string lpstrTitle; - public int Flags; - public short nFileOffset; - public short nFileExtension; - public string lpstrDefExt; - public IntPtr lCustData; - public WndProc lpfnHook; - public int templateID; - public IntPtr pvReserved; - public int dwReserved; - public int FlagsEx; - - public void Initialize() - { - lStructSize = Marshal.SizeOf(typeof (OpenFileName)); - lpstrCustomFilter = IntPtr.Zero; - lpstrFileTitle = IntPtr.Zero; - lCustData = IntPtr.Zero; - pvReserved = IntPtr.Zero; - } - } - - [StructLayout(LayoutKind.Sequential)] - public struct Point - { - public int x; - public int y; - } - - [StructLayout(LayoutKind.Sequential)] - public struct RECT - { - public int left; - public int top; - public int right; - public int bottom; - } - - [StructLayout(LayoutKind.Sequential)] - public struct WINDOWPLACEMENT - { - public static WINDOWPLACEMENT New() - { - return - new WINDOWPLACEMENT - { - length = ((uint) Marshal.SizeOf(typeof (WINDOWPLACEMENT))) - }; - } - - public uint length; - public uint flags; - public uint showCmd; - public Point ptMinPosition; - public Point ptMaxPosition; - public RECT rcNormalPosition; - - public int Left - { - get { return rcNormalPosition.left; } - set { rcNormalPosition.left = value; } - } - - public int Top - { - get { return rcNormalPosition.top; } - set { rcNormalPosition.top = value; } - } - - public int Right - { - get { return rcNormalPosition.right; } - set { rcNormalPosition.right = value; } - } - - public int Bottom - { - get { return rcNormalPosition.bottom; } - set { rcNormalPosition.bottom = value; } - } - } - } -} - -// ReSharper restore InconsistentNaming +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using System.ComponentModel; +using System.Runtime.InteropServices; +using System.Text; + +namespace Ch.Cyberduck.Ui.Winforms.Commondialog +{ + internal static class InteropUtil + { + public delegate int SUBCLASSPROC + ( + IntPtr hWnd, + uint uMsg, + IntPtr wParam, + IntPtr lParam, + IntPtr uIdSubclass, + uint dwRefData + ); + + public delegate IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); + + public const int BN_CLICKED = 0; + public const uint CDM_FIRST = WM_USER + 100; + public const uint CDM_GETFILEPATH = CDM_FIRST + 0x0001; + public const uint CDM_GETFOLDERPATH = CDM_FIRST + 0x0002; + public const uint CDM_HIDECONTROL = CDM_FIRST + 0x0005; + public const uint CDN_FILEOK = (CDN_FIRST - 5); + public const uint CDN_FIRST = unchecked(0u - 601u); + public const uint CDN_FOLDERCHANGE = (CDN_FIRST - 2); + public const uint CDN_INITDONE = (CDN_FIRST - 0); + public const int DWL_MSGRESULT = 0; + public const int IDCANCEL = 2; + public const int IDD_CustomOpenDialog = 101; + public const int IDOK = 1; + public const int ID_CUSTOM_CANCEL = 1002; + public const int ID_FileList = lst2; + public const int ID_FileNameCombo = cmb13; + public const int ID_FileNameLabel = stc3; + public const int ID_FileNameTextBox = edt1; + public const int ID_FilterCombo = cmb1; + public const int ID_FilterLabel = stc2; + public const int ID_SELECT = 1001; + public const int LVIF_TEXT = 0x00000001; + public const int LVIS_SELECTED = 0x0002; + public const uint LVM_FIRST = 0x1000; + public const uint LVM_GETITEMTEXT = LVM_FIRST + 115; + public const uint LVM_GETNEXTITEM = LVM_FIRST + 12; + public const uint LVM_GETNEXTITEMINDEX = LVM_FIRST + 211; + public const uint LVM_GETSELECTEDCOUNT = LVM_FIRST + 50; //yla extension + public const int LVNI_SELECTED = 0x0002; + public const uint LVN_FIRST = unchecked(0U - 100U); + public const uint LVN_ITEMCHANGED = (LVN_FIRST - 1); + public const int NumberOfFileChars = 8192; + public const int OFN_ALLOWMULTISELECT = 0x00000200; + public const int OFN_DONTADDTORECENT = 0x02000000; + public const int OFN_ENABLEHOOK = 0x00000020; + public const int OFN_ENABLESIZING = 0x00800000; + public const int OFN_ENABLETEMPLATE = 0x00000040; + public const int OFN_EXPLORER = 0x00080000; + public const int OFN_FILEMUSTEXIST = 0x00001000; + public const int OFN_HIDEREADONLY = 0x00000004; + public const int OFN_NODEREFERENCELINKS = 0x00100000; + public const int OFN_NOTESTFILECREATE = 0x00010000; + public const int OFN_PATHMUSTEXIST = 0x00000800; + public const uint WM_CLOSE = 0x0010; + public const uint WM_COMMAND = 0x0111; + public const uint WM_CREATE = 0x0001; + public const uint WM_GETFONT = 0x0031; + public const uint WM_INITDIALOG = 0x0110; + public const uint WM_NOTIFY = 0x4E; + public const uint WM_PARENTNOTIFY = 0x0210; + public const uint WM_SETFONT = 0x0030; + public const uint WM_SETTEXT = 0x000C; + public const uint WM_SIZE = 0x0005; + public const uint WM_USER = 0x0400; + public const int cmb1 = 0x0470; + public const int cmb13 = 0x047c; + public const int edt1 = 0x0480; + public const int lst2 = 0x0461; + public const int stc2 = 0x0441; + public const int stc3 = 0x0442; + + [DllImport("comctl32.dll", EntryPoint = "SetWindowSubclass")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool SetWindowSubclass + (IntPtr hWnd, + SUBCLASSPROC pfnSubclass, + uint uIdSubclass, + uint dwRefData + ); + + + [DllImport("comctl32.dll", EntryPoint = "DefSubclassProc")] + public static extern int DefSubclassProc + (IntPtr hWnd, + uint uMsg, + IntPtr wParam, + IntPtr lParam + ); + + [DllImport("comdlg32.dll", EntryPoint = "GetOpenFileNameW")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetOpenFileNameW(ref OpenFileName openFileNameInfo); + + [DllImport("kernel32.dll", EntryPoint = "GetLastError")] + public static extern uint GetLastError(); + + [DllImport("user32.dll", EntryPoint = "SendMessageW", CharSet=CharSet.Unicode)] + public static extern IntPtr SendMessageIntPtr + ( + IntPtr hWnd, + UInt32 Msg, + IntPtr wParam, + IntPtr lParam + ); + + [DllImport("user32.dll", EntryPoint = "SendMessageW", CharSet=CharSet.Unicode)] + public static extern uint SendMessage + ( + [In] IntPtr hWnd, + uint Msg, + uint wParam, + uint lParam + ); + + [DllImport("user32.dll", EntryPoint = "SendMessageW", CharSet=CharSet.Unicode)] + public static extern int SendMessageInt + ( + [In] IntPtr hWnd, + uint Msg, + int wParam, + int lParam + ); + + [DllImport("user32.dll", EntryPoint = "SendMessageW")] + public static extern uint SendListViewMessage + ( + [In] IntPtr hWnd, + uint Msg, + uint wParam, + ref LVITEM lParam + ); + + [DllImport("user32.dll", EntryPoint = "SendMessageW")] + public static extern uint SendListViewMessageInt + ( + [In] IntPtr hWnd, + uint Msg, + int wParam, + ref LVITEM lParam + ); + + [DllImport("user32.dll", EntryPoint = "SendMessageW")] + public static extern uint SendMessageString + ( + [In] IntPtr hWnd, + uint Msg, + uint wParam, + [MarshalAs(UnmanagedType.LPWStr)] string str + ); + + [DllImport("user32.dll", EntryPoint = "GetDlgItem")] + public static extern IntPtr GetDlgItem + ( + [In] IntPtr hDlg, + int nIDDlgItem + ); + + [DllImport("user32.dll", EntryPoint = "GetWindowTextW")] + public static extern int GetWindowTextW + ( + [In] IntPtr hWnd, + [ + Out, + MarshalAs(UnmanagedType.LPWStr) + ] StringBuilder lpString, + int nMaxCount + ); + + public static string GetWindowTextW(IntPtr hWnd) + { + var builder = new StringBuilder(NumberOfFileChars); + if (GetWindowTextW(hWnd, builder, builder.Capacity) > 0) + { + return builder.ToString(); + } + return String.Empty; + } + + [DllImport("user32.dll", EntryPoint = "GetParent")] + public static extern IntPtr GetParent([In] IntPtr hWnd); + + [DllImport("user32.dll", EntryPoint = "EnableWindow")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool EnableWindow([In] IntPtr hWnd, [MarshalAs(UnmanagedType.Bool)] bool bEnable); + + [DllImport("user32.dll", EntryPoint = "SetWindowLongW")] + public static extern int SetWindowLongW + ( + [In] IntPtr hWnd, + int nIndex, + int dwNewLong + ); + + [DllImport("user32.dll", EntryPoint = "SetWindowTextW")] + public static extern bool SetWindowTextW + ( + [In] IntPtr hWnd, + [In] [MarshalAs(UnmanagedType.LPWStr)] string lpString + ); + + [DllImport("user32.dll", EntryPoint = "GetFocus")] + public static extern IntPtr GetFocus(); + + [DllImport("user32.dll", EntryPoint = "GetDlgCtrlID")] + public static extern int GetDlgCtrlID([In] IntPtr hWnd); + + [DllImport("user32.dll", EntryPoint = "SetFocus")] + public static extern IntPtr SetFocus([In] IntPtr hWnd); + + [DllImport("user32.dll", EntryPoint = "SetWindowPlacement")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool SetWindowPlacement + ( + [In] IntPtr hWnd, + [In] ref WINDOWPLACEMENT lpwndpl + ); + + [DllImport("user32.dll", EntryPoint = "InvalidateRect")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool InvalidateRect + ( + [In] IntPtr hWnd, + IntPtr lpRect, + [MarshalAs(UnmanagedType.Bool)] bool bErase + ); + + + public static void LoadFontFrom(IntPtr hWndDest, IntPtr hWndSrc) + { + AssumeNonZero(hWndDest); + AssumeNonZero(hWndSrc); + + var hFont = (IntPtr) unchecked((int) SendMessage(hWndSrc, WM_GETFONT, 0, 0)); + AssumeNonZero(hFont); + + SendMessage(hWndDest, WM_SETFONT, (uint) hFont, 0); + } + + public static WINDOWPLACEMENT GetWindowPlacement(IntPtr hwnd) + { + WINDOWPLACEMENT ret = WINDOWPLACEMENT.New(); + + if (!GetWindowPlacement(hwnd, ref ret)) + { + CheckForWin32Error(); + } + return ret; + } + + [DllImport("user32.dll", EntryPoint = "GetWindowPlacement")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetWindowPlacement + ( + [In] IntPtr hWnd, + ref WINDOWPLACEMENT lpwndpl + ); + + public static void CheckForWin32Error() + { + var error = GetLastError(); + if (error != 0) + { + throw new Win32Exception(unchecked((int) error)); + } + } + + [DllImport("gdi32.dll", EntryPoint = "CreateRectRgnIndirect")] + public static extern IntPtr CreateRectRgnIndirect + ( + [In] ref RECT lpRect + ); + + [DllImport("gdi32.dll", EntryPoint = "DeleteObject")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool DeleteObject + ( + [In] IntPtr hObject + ); + + [DllImport("user32.dll", EntryPoint = "SetWindowRgn")] + public static extern int SetWindowRgn + ( + [In] IntPtr hWnd, + [In] IntPtr hRgn, + [MarshalAs(UnmanagedType.Bool)] bool bRedraw + ); + + //What follows here are a bunch of magic constants needed for + //windows message passing. One could make an argument that it would be + //more "C#ish" to package these all up into enum types, and then to + //create appropriate overloads of the "extern" functions that take in + //enum types. + // + //However, I wanted to keep the calls to API functions as close to + //the documentation as possible. That way if you look at the stuff and wonder + //"what the hell is this" you can just look it up in MSDN and get an answer. + //I did make some things extension methods, to improve readability, but otherwise + //the code pretty much looks like it would if it were written in C. + + //=========================================================== + //Open File Name flag constants + + public static void Assume + ( + bool condition, + string message + ) + { + if (!condition) + { + throw new InternalErrorException(message); + } + } + + + public static T AssumeNotNull + (T item + ) where T : class + { + Assume(item != null, "Unexpected null value!"); + return item; + } + + public static void Assume + ( + bool condition + ) + { + Assume(condition, "The condition should not be false!"); + } + + public static IntPtr AssumeNonZero + (IntPtr item + ) + { + Assume(item != IntPtr.Zero); + return item; + } + + public static bool PathContains(string parent, string child) + { + AssumeNotNull(parent); + AssumeNotNull(child); + + if (!parent.EndsWith("\\")) + { + parent = parent + "\\"; + } + + return + child.StartsWith(parent, StringComparison.OrdinalIgnoreCase) || + parent.TrimEnd('\\').Equals(child, StringComparison.OrdinalIgnoreCase); + } + + [StructLayout(LayoutKind.Sequential)] + public struct LVITEM + { + public uint mask; + public int iItem; + public int iSubItem; + public uint state; + public uint stateMask; + public IntPtr pszText; + public int cchTextMax; + public int iImage; + public int lParam; + public int iIndent; + public int iGroupId; + public uint cColumns; + public IntPtr puColumns; + public IntPtr piColFmt; + public int iGroup; + } + + [StructLayout(LayoutKind.Sequential)] + public struct NMHDR + { + public IntPtr hwndFrom; + public uint idFrom; + public uint code; + } + + [StructLayout(LayoutKind.Sequential)] + public struct NMLISTVIEW + { + public NMHDR hdr; + public int iItem; + public int iSubItem; + public uint uNewState; + public uint uOldState; + public uint uChanged; + public Point ptAction; + public int lParam; + } + + [StructLayout(LayoutKind.Sequential)] + public struct OFNOTIFY + { + public IntPtr hdr_hwndFrom; + public IntPtr hdr_idFrom; + public uint hdr_code; + public IntPtr lpOFN; + public IntPtr pszFile; + } + + [StructLayout(LayoutKind.Sequential)] + public struct OpenFileName + { + public int lStructSize; + public IntPtr hwndOwner; + public IntPtr hInstance; + public IntPtr lpstrFilter; + public IntPtr lpstrCustomFilter; + public int nMaxCustFilter; + public int nFilterIndex; + public IntPtr lpstrFile; + public int nMaxFile; + public IntPtr lpstrFileTitle; + public int nMaxFileTitle; + [MarshalAs(UnmanagedType.LPWStr)] public string lpstrInitialDir; + [MarshalAs(UnmanagedType.LPWStr)] public string lpstrTitle; + public int Flags; + public short nFileOffset; + public short nFileExtension; + public string lpstrDefExt; + public IntPtr lCustData; + public WndProc lpfnHook; + public int templateID; + public IntPtr pvReserved; + public int dwReserved; + public int FlagsEx; + + public void Initialize() + { + lStructSize = Marshal.SizeOf(typeof (OpenFileName)); + lpstrCustomFilter = IntPtr.Zero; + lpstrFileTitle = IntPtr.Zero; + lCustData = IntPtr.Zero; + pvReserved = IntPtr.Zero; + } + } + + [StructLayout(LayoutKind.Sequential)] + public struct Point + { + public int x; + public int y; + } + + [StructLayout(LayoutKind.Sequential)] + public struct RECT + { + public int left; + public int top; + public int right; + public int bottom; + } + + [StructLayout(LayoutKind.Sequential)] + public struct WINDOWPLACEMENT + { + public static WINDOWPLACEMENT New() + { + return + new WINDOWPLACEMENT + { + length = ((uint) Marshal.SizeOf(typeof (WINDOWPLACEMENT))) + }; + } + + public uint length; + public uint flags; + public uint showCmd; + public Point ptMinPosition; + public Point ptMaxPosition; + public RECT rcNormalPosition; + + public int Left + { + get { return rcNormalPosition.left; } + set { rcNormalPosition.left = value; } + } + + public int Top + { + get { return rcNormalPosition.top; } + set { rcNormalPosition.top = value; } + } + + public int Right + { + get { return rcNormalPosition.right; } + set { rcNormalPosition.right = value; } + } + + public int Bottom + { + get { return rcNormalPosition.bottom; } + set { rcNormalPosition.bottom = value; } + } + } + } +} + +// ReSharper restore InconsistentNaming // ReSharper restore MemberCanBePrivate.Global \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/commondialog/SelectFileAndFolderDialog.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/SelectFileAndFolderDialog.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/commondialog/SelectFileAndFolderDialog.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/SelectFileAndFolderDialog.cs index dc2a97f9c5..7b03c4f65d 100644 --- a/source/ch/cyberduck/ui/winforms/commondialog/SelectFileAndFolderDialog.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/SelectFileAndFolderDialog.cs @@ -1,996 +1,996 @@ -// -// Copyright (c) 2010-2011 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Runtime.InteropServices; -using System.Text; -using System.Windows.Forms; -using Microsoft.Win32; - -namespace Ch.Cyberduck.Ui.Winforms.Commondialog -{ - public sealed class SelectFileAndFolderDialog : CommonDialog - { - private const string HideFileExtensionKey = - @"HideFileExt"; - - private const string HideFileExtensionLocation = - @"Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"; - - private static readonly Dictionary m_calcPosMap = - new Dictionary - { - { - InteropUtil.ID_CUSTOM_CANCEL, - (SelectFileAndFolderDialog @this, int baseRight, out int right, out int width) => - { - right = baseRight; - width = @this.m_cancelWidth; - } - }, - { - InteropUtil.ID_SELECT, - (SelectFileAndFolderDialog @this, int baseRight, out int right, out int width) => - { - right = baseRight - (@this.m_cancelWidth + @this.m_buttonGap); - width = @this.m_selectWidth; - } - } - }; - - private static SelectFileAndFolderDialog _instance; - - private readonly InteropUtil.SUBCLASSPROC m_defViewSubClassDelegate; - private readonly InteropUtil.WndProc m_hookDelegate; - private readonly InteropUtil.SUBCLASSPROC m_openFileSubClassDelegate; - private List _selected = new List(); - - private int m_buttonGap; - private int m_cancelWidth; - private string m_currentFolder; - private IntPtr m_hWnd; - private bool m_hasDirChangeFired; - private int m_selectWidth; - private bool m_suppressSelectionChange; - private bool m_useCurrentDir; - - private SelectFileAndFolderDialog() - { - m_openFileSubClassDelegate = OpenFileSubClass; - m_hookDelegate = HookProc; - m_defViewSubClassDelegate = DefViewSubClass; - Path = null; - Title = null; - m_useCurrentDir = false; - AcceptFiles = true; - m_currentFolder = null; - m_useCurrentDir = false; - m_cancelWidth = 0; - m_selectWidth = 0; - m_buttonGap = 0; - m_hWnd = IntPtr.Zero; - } - - public static SelectFileAndFolderDialog Instance - { - //not thread-safe - get - { - if (_instance == null) - { - _instance = new SelectFileAndFolderDialog(); - } - return _instance; - } - } - - public string Path { get; set; } - - public string[] SelectedPaths - { - get { return _selected.ToArray(); } - } - - public string Title { get; set; } - public bool ShowReadOnly { get; set; } - public bool AcceptFiles { get; set; } - public string FileNameLabel { get; set; } - public string SelectLabel { get; set; } - public string CancelLabel { get; set; } - - public override void Reset() - { - Path = null; - Title = null; - m_useCurrentDir = false; - AcceptFiles = true; - m_currentFolder = null; - m_useCurrentDir = false; - m_cancelWidth = 0; - m_selectWidth = 0; - m_buttonGap = 0; - m_hWnd = IntPtr.Zero; - } - - protected override bool RunDialog(IntPtr hwndOwner) - { - InteropUtil.Assume(Marshal.SystemDefaultCharSize == 2, "The character size should be 2"); - - IntPtr nativeBuffer = Marshal.AllocCoTaskMem(InteropUtil.NumberOfFileChars*2); - IntPtr filterBuffer = IntPtr.Zero; - _selected = new List(); - - try - { - var openFileName = new InteropUtil.OpenFileName(); - openFileName.Initialize(); - openFileName.hwndOwner = hwndOwner; - - var chars = new char[InteropUtil.NumberOfFileChars]; - - try - { - if (File.Exists(Path)) - { - if (AcceptFiles) - { - string fileName = System.IO.Path.GetFileName(Path); - int length = Math.Min(fileName.Length, InteropUtil.NumberOfFileChars); - fileName.CopyTo(0, chars, 0, length); - openFileName.lpstrInitialDir = System.IO.Path.GetDirectoryName(Path); - } - else - { - openFileName.lpstrInitialDir = System.IO.Path.GetDirectoryName(Path); - } - } - else if (Directory.Exists(Path)) - { - openFileName.lpstrInitialDir = Path; - } - else - { - //the path does not exist. - //We don't just want to throw it away, however. - //The initial path we get is most likely provided by the user in some way. - //It could be what they typed into a text box before clicking a browse button, - //or it could be a value they had entered previously that used to be valid, but now no longer exists. - //In any case, we don't want to throw out the user's text. So, we find the first parent - //directory of Path that exists on disk. - //We will set the initial directory to that path, and then set the initial file to - //the rest of the path. The user will get an error if the click "OK"m saying that the selected path - //doesn't exist, but that's ok. If we didn't do this, and showed the path, if they clicked - //OK without making changes we would actually change the selected path, which would be bad. - //This way, if the users want's to change the folder, he actually has to change something. - string pathToShow; - InitializePathDNE(Path, out openFileName.lpstrInitialDir, out pathToShow); - pathToShow = pathToShow ?? String.Empty; - int length = Math.Min(pathToShow.Length, InteropUtil.NumberOfFileChars); - pathToShow.CopyTo(0, chars, 0, length); - } - } - catch - { - } - - Marshal.Copy(chars, 0, nativeBuffer, chars.Length); - - openFileName.lpstrFile = nativeBuffer; - - if (!AcceptFiles) - { - string str = string.Format("Folders\0*.{0}-{1}\0\0", Guid.NewGuid().ToString("N"), - Guid.NewGuid().ToString("N")); - filterBuffer = openFileName.lpstrFilter = Marshal.StringToCoTaskMemUni(str); - } - else - { - openFileName.lpstrFilter = IntPtr.Zero; - } - - openFileName.nMaxCustFilter = 0; - openFileName.nFilterIndex = 0; - openFileName.nMaxFile = InteropUtil.NumberOfFileChars; - openFileName.nMaxFileTitle = 0; - openFileName.lpstrTitle = Title; - openFileName.lpfnHook = m_hookDelegate; - openFileName.templateID = InteropUtil.IDD_CustomOpenDialog; - openFileName.hInstance = Marshal.GetHINSTANCE(typeof (SelectFileAndFolderDialog).Module); - openFileName.Flags = - InteropUtil.OFN_DONTADDTORECENT | - InteropUtil.OFN_ENABLEHOOK | - InteropUtil.OFN_ENABLESIZING | - InteropUtil.OFN_NOTESTFILECREATE | - InteropUtil.OFN_ALLOWMULTISELECT | - InteropUtil.OFN_EXPLORER | - InteropUtil.OFN_FILEMUSTEXIST | - InteropUtil.OFN_PATHMUSTEXIST | - InteropUtil.OFN_NODEREFERENCELINKS | - InteropUtil.OFN_ENABLETEMPLATE | - (ShowReadOnly ? 0 : InteropUtil.OFN_HIDEREADONLY); - - m_useCurrentDir = false; - bool hideFileExtSettingChanged = false; - - try - { - if (GetHideFileExtensionSetting()) - { - HideFileExtension(false); - hideFileExtSettingChanged = true; - } - - bool ret = false; - try - { - ret = InteropUtil.GetOpenFileNameW(ref openFileName); - } - catch (Exception e) - { - IntPtr hParent = InteropUtil.AssumeNonZero(InteropUtil.GetParent(m_hWnd)); - InteropUtil.SendMessage(hParent, InteropUtil.WM_CLOSE, 0, 0); - throw e; - } - //var extErrpr = InteropUtil.CommDlgExtendedError(); - //InteropUtil.CheckForWin32Error(); - - if (m_useCurrentDir) - { - Path = m_currentFolder; - return true; - } - else if (ret) - { - Marshal.Copy(nativeBuffer, chars, 0, chars.Length); - int firstZeroTerm = ((IList) chars).IndexOf('\0'); - if (firstZeroTerm >= 0 && firstZeroTerm <= chars.Length - 1) - { - Path = new string(chars, 0, firstZeroTerm); - } - } - return ret; - } - finally - { - //revert registry setting - if (hideFileExtSettingChanged) - { - HideFileExtension(true); - } - } - } - finally - { - Marshal.FreeCoTaskMem(nativeBuffer); - if (filterBuffer != IntPtr.Zero) - { - Marshal.FreeCoTaskMem(filterBuffer); - } - } - } - - private static bool GetHideFileExtensionSetting() - { - using (RegistryKey adv = Registry.CurrentUser.OpenSubKey(HideFileExtensionLocation)) - { - if (null != adv) - { - object hide = adv.GetValue(HideFileExtensionKey); - if (null != hide) - { - return Convert.ToBoolean(hide); - } - } - } - return false; - } - - private static void HideFileExtension(bool hide) - { - using (RegistryKey adv = Registry.CurrentUser.OpenSubKey(HideFileExtensionLocation, true)) - { - if (null != adv) - { - adv.SetValue(HideFileExtensionKey, Convert.ToInt16(hide), RegistryValueKind.DWord); - } - } - } - - private static void InitializePathDNE(string path, out string existingParent, out string initialFileNameText) - { - var stack = new Stack(); - existingParent = System.IO.Path.GetDirectoryName(path); - stack.Push(System.IO.Path.GetFileName(path)); - - while (!string.IsNullOrEmpty(existingParent) && !Directory.Exists(existingParent)) - { - stack.Push(existingParent); - existingParent = System.IO.Path.GetDirectoryName(existingParent); - } - - var builder = new StringBuilder(); - bool first = true; - while (stack.Count > 0) - { - if (!first) - { - builder.Append(System.IO.Path.PathSeparator); - } - else - { - first = false; - } - builder.Append(stack.Pop()); - } - initialFileNameText = builder.ToString(); - } - - /// - /// Defines the common dialog box hook procedure that is overridden to add specific functionality to a common dialog box. - /// - /// - /// A zero value if the default dialog box procedure processes the message; a nonzero value if the default dialog box procedure ignores the message. - /// - /// The handle to the dialog box window. The message being received. Additional information about the message. Additional information about the message. - protected override IntPtr HookProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lparam) - { - switch (unchecked((uint) msg)) - { - case InteropUtil.WM_INITDIALOG: - { - InitDialog(hWnd); - break; - } - case InteropUtil.WM_NOTIFY: - { - var notifyData = - (InteropUtil.OFNOTIFY) Marshal.PtrToStructure(lparam, typeof (InteropUtil.OFNOTIFY)); - int results = ProcessNotifyMessage(hWnd, notifyData); - if (results != 0) - { - InteropUtil.SetWindowLongW(hWnd, InteropUtil.DWL_MSGRESULT, results); - return (IntPtr) results; - } - break; - } - case InteropUtil.WM_SIZE: - { - ResizeCustomControl(hWnd); - break; - } - - case (InteropUtil.BN_CLICKED << 16) | InteropUtil.IDOK: - { - break; - } - - case InteropUtil.WM_COMMAND: - { - unchecked - { - IntPtr hParent = InteropUtil.AssumeNonZero(InteropUtil.GetParent(hWnd)); - uint code = HIGH((uint) wParam); - uint id = LOW((uint) wParam); - if (code == InteropUtil.BN_CLICKED) - { - switch (id) - { - case InteropUtil.ID_CUSTOM_CANCEL: - { - //The user clicked our custom cancel button. Close the dialog. - InteropUtil.SendMessage(hParent, InteropUtil.WM_CLOSE, 0, 0); - break; - } - case InteropUtil.ID_SELECT: - { - if (ProcessSelection(hParent, true)) - { - InteropUtil.SendMessage(hParent, InteropUtil.WM_CLOSE, 0, 0); - break; - } - //The user has not selected an existing folder. - //So we translate a click of our "Select" button into the OK button and forward the request to the - //open file dialog. - InteropUtil.SendMessage - (hParent, - InteropUtil.WM_COMMAND, - (InteropUtil.BN_CLICKED << 16) | InteropUtil.IDOK, - unchecked((uint) InteropUtil.GetDlgItem(hParent, InteropUtil.IDOK)) - ); - - - break; - } - } - } - } - break; - } - } - return base.HookProc(hWnd, msg, wParam, lparam); - } - - private bool AddSelectedItemsFromSelection(IntPtr listview) - { - uint count = InteropUtil.SendMessage(listview, - InteropUtil.LVM_GETSELECTEDCOUNT, 0, 0); - - //if there is at least one item selected we always return these ones - if (count > 0) - { - int ind = -1; - for (int i = 0; i < count; i++) - { - ind = InteropUtil.SendMessageInt(listview, InteropUtil.LVM_GETNEXTITEM, - ind, - InteropUtil.LVNI_SELECTED); - //with the index we can get the item's text - string item = GetFileNameFromSelectedItem(listview, ind); - _selected.Add(item); - } - return true; - } - return false; - } - - private bool ProcessSelection(IntPtr handle, bool preferSelection) - { - IntPtr shelldll_defview = InteropUtil.GetDlgItem(handle, - InteropUtil.ID_FileList); - IntPtr listview = InteropUtil.GetDlgItem(shelldll_defview, 1); - IntPtr focus = InteropUtil.GetFocus(); - if (listview == focus || preferSelection) - { - return AddSelectedItemsFromSelection(listview); - } - else - { - //check the content of the file combobox - IntPtr hFileName = InteropUtil.GetDlgItem(handle, - InteropUtil.ID_FileNameCombo); - string currentText = (InteropUtil.GetWindowTextW(hFileName) ?? "").Trim(); - if (!String.IsNullOrEmpty(currentText)) - { - try - { - if (System.IO.Path.IsPathRooted(currentText)) - { - if (Directory.Exists(currentText) || File.Exists(currentText)) - { - //the contents of the text box are a rooted path, that points to an existing directory. - //we interpret that to mean that the user wants to select that directory. - _selected.Add(currentText); - return true; - } - } - else if (!String.IsNullOrEmpty(m_currentFolder)) - { - string combined = System.IO.Path.Combine(m_currentFolder, - currentText); - if (Directory.Exists(combined) || File.Exists(combined)) - { - //the contents of the text box are a relative path, that points to a - //an existing directory. We interpret the users intent to mean that they wanted - //to select the existing path. - _selected.Add(combined); - return true; - } - } - } - catch (Exception) - { - //try to add the selection - if (AddSelectedItemsFromSelection(listview)) - { - return true; - } - } - } - //forward all wrong inputs to the standard mechanism - return false; - } - } - - private void InitDialog(IntPtr hWnd) - { - m_hWnd = hWnd; - - IntPtr hParent = InteropUtil.AssumeNonZero(InteropUtil.GetParent(hWnd)); - InteropUtil.SetWindowSubclass(hParent, m_openFileSubClassDelegate, 0, 0); - - //disable and hide the filter combo box - IntPtr hFilterCombo = InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(hParent, InteropUtil.ID_FilterCombo)); - InteropUtil.EnableWindow(hFilterCombo, false); - InteropUtil.SendMessage(hParent, InteropUtil.CDM_HIDECONTROL, InteropUtil.ID_FilterCombo, 0); - InteropUtil.SendMessage(hParent, InteropUtil.CDM_HIDECONTROL, InteropUtil.ID_FilterLabel, 0); - - //update the file name label - IntPtr hFileNameLabel = - InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(hParent, InteropUtil.ID_FileNameLabel)); - - if (FileNameLabel != String.Empty) - { - InteropUtil.SendMessageString(hFileNameLabel, InteropUtil.WM_SETTEXT, 0, FileNameLabel); - } - - //find the button controls in the parent - IntPtr hOkButton = InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(hParent, InteropUtil.IDOK)); - IntPtr hCancelButton = InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(hParent, InteropUtil.IDCANCEL)); - - //We don't want the accelerator keys for the ok and cancel buttons to work, because - //they are not shown on the dialog. However, we still want the buttons enabled - //so that "esc" and "enter" have the behavior they used to. So, we just - //clear out their text instead. - InteropUtil.SetWindowTextW(hOkButton, String.Empty); - InteropUtil.SetWindowTextW(hCancelButton, String.Empty); - - //find our button controls - IntPtr hSelectButton = InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(hWnd, InteropUtil.ID_SELECT)); - IntPtr hCustomCancelButton = - InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(hWnd, InteropUtil.ID_CUSTOM_CANCEL)); - - if (!String.IsNullOrEmpty(SelectLabel)) - { - InteropUtil.SetWindowTextW(hSelectButton, SelectLabel); - } - if (!String.IsNullOrEmpty(CancelLabel)) - { - InteropUtil.SetWindowTextW(hCustomCancelButton, CancelLabel); - } - - //copy the font from the parent's buttons - InteropUtil.LoadFontFrom(hSelectButton, hOkButton); - InteropUtil.LoadFontFrom(hCustomCancelButton, hCancelButton); - - InteropUtil.WINDOWPLACEMENT cancelLoc = InteropUtil.GetWindowPlacement(hCancelButton); - - //hide the ok and cancel buttons - InteropUtil.SendMessage(hParent, InteropUtil.CDM_HIDECONTROL, InteropUtil.IDOK, 0); - InteropUtil.SendMessage(hParent, InteropUtil.CDM_HIDECONTROL, InteropUtil.IDCANCEL, 0); - - //expand the file name combo to take up the space left by the OK and cancel buttons. - IntPtr hFileName = InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(hParent, InteropUtil.ID_FileNameCombo)); - InteropUtil.WINDOWPLACEMENT fileNameLoc = InteropUtil.GetWindowPlacement(hFileName); - fileNameLoc.Right = InteropUtil.GetWindowPlacement(hOkButton).Right; - InteropUtil.SetWindowPlacement(hFileName, ref fileNameLoc); - - InteropUtil.WINDOWPLACEMENT parentLoc = InteropUtil.GetWindowPlacement(hParent); - - //subtract the height of the missing cancel button - parentLoc.Bottom -= (cancelLoc.Bottom - cancelLoc.Top); - InteropUtil.SetWindowPlacement(hParent, ref parentLoc); - - //move the select and custom cancel buttons to the right hand side of the window: - - InteropUtil.WINDOWPLACEMENT selectLoc = InteropUtil.GetWindowPlacement(hSelectButton); - InteropUtil.WINDOWPLACEMENT customCancelLoc = InteropUtil.GetWindowPlacement(hCustomCancelButton); - m_cancelWidth = customCancelLoc.Right - customCancelLoc.Left; - m_selectWidth = selectLoc.Right - selectLoc.Left; - m_buttonGap = customCancelLoc.Left - selectLoc.Right; - - InteropUtil.WINDOWPLACEMENT ctrlLoc = InteropUtil.GetWindowPlacement(hWnd); - ctrlLoc.Right = fileNameLoc.Right; - - //ResizeCustomControl(hWnd, fileNameLoc.Right, hCustomCancelButton, hSelectButton); - ResizeCustomControl(hWnd); - } - - private void ResizeCustomControl(IntPtr hWnd) - { - if (hWnd == m_hWnd) - { - IntPtr hSelectButton = - InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(InteropUtil.AssumeNonZero(hWnd), - InteropUtil.ID_SELECT)); - IntPtr hOkButton = - InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(InteropUtil.AssumeNonZero(hWnd), - InteropUtil.ID_CUSTOM_CANCEL)); - - IntPtr hParent = InteropUtil.AssumeNonZero(InteropUtil.GetParent(hWnd)); - IntPtr fileName = - InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(hParent, InteropUtil.ID_FileNameCombo)); - - /*var right = fileName.GetWindowPlacement().Right; - var top = hSelectButton.GetWindowPlacement().Top;*/ - - var rect = new InteropUtil.RECT(); - InteropUtil.WINDOWPLACEMENT selectRect = InteropUtil.GetWindowPlacement(hSelectButton); - - rect.top = selectRect.Top; - rect.bottom = selectRect.Bottom; - rect.right = InteropUtil.GetWindowPlacement(fileName).Right; - rect.left = rect.right - (m_cancelWidth + m_buttonGap + m_selectWidth); - - ResizeCustomControl(hWnd, rect, hOkButton, hSelectButton); - } - } - - private void ResizeCustomControl(IntPtr hWnd, InteropUtil.RECT rect, params IntPtr[] buttons) - { - InteropUtil.Assume(buttons != null && buttons.Length > 0); - - InteropUtil.AssumeNonZero(hWnd); - - InteropUtil.WINDOWPLACEMENT wndLoc = InteropUtil.GetWindowPlacement(hWnd); - - wndLoc.Right = rect.right; - InteropUtil.SetWindowPlacement(hWnd, ref wndLoc); - - foreach (IntPtr hBtn in buttons) - { - int btnRight, btnWidth; - - m_calcPosMap[InteropUtil.GetDlgCtrlID(hBtn)](this, rect.right, out btnRight, out btnWidth); - - PositionButton(hBtn, btnRight, btnWidth); - } - - //see bug # 844 - //We clip hWnd to only draw in the rectangle around our custom buttons. - //When we supply a custom dialog template to GetOpenFileName(), it adds - //an extra HWND to the open file dialog, and then sticks all the controls - //in the dialog //template inside the HWND. It then resizes the control - //to stretch from the top of the open file dialog to the bottom of the - //window, extending the bottom of the window large enough to include the - //additional height of the dialog template. This ends up sticking our custom - //buttons at the bottom of the window, which is what we want. - // - //However, the fact that the parent window extends from the top of the open - //file dialog was causing some painting problems on Windows XP SP 3 systems. - //Basically, because the window was covering the predefined controls on the - //open file dialog, they were not getting painted. This results in a blank - //window. I tried setting an extended WS_EX_TRANSPARENT style on the dialog, - //but that didn't help. - // - //So, to fix the problem I setup a window region for the synthetic HWND. - //This clips the drawing of the window to only within the region containing - //the custom buttons, and thus avoids the problem. - // - //I'm not sure why this wasn't an issue on Vista. - IntPtr hRgn = InteropUtil.CreateRectRgnIndirect(ref rect); - try - { - if (InteropUtil.SetWindowRgn(hWnd, hRgn, true) == 0) - { - //setting the region failed, so we need to delete the region we created above. - InteropUtil.DeleteObject(hRgn); - } - } - catch - { - if (hRgn != IntPtr.Zero) - { - InteropUtil.DeleteObject(hRgn); - } - } - } - - private void PositionButton(IntPtr hWnd, int right, int width) - { - InteropUtil.AssumeNonZero(hWnd); - int id = InteropUtil.GetDlgCtrlID(hWnd); - - //hWnd.BringWindowToTop(); - - InteropUtil.WINDOWPLACEMENT buttonLoc = InteropUtil.GetWindowPlacement(hWnd); - - buttonLoc.Right = right; - buttonLoc.Left = buttonLoc.Right - width; - InteropUtil.SetWindowPlacement(hWnd, ref buttonLoc); - InteropUtil.InvalidateRect(hWnd, IntPtr.Zero, true); - } - - private int ProcessNotifyMessage(IntPtr hWnd, InteropUtil.OFNOTIFY notifyData) - { - switch (notifyData.hdr_code) - { - case InteropUtil.CDN_FOLDERCHANGE: - { - //CDM_GETFOLDERPATH returns garbage for some standard folders like 'Libraries' - //var newFolder = GetTextFromCommonDialog(InteropUtil.AssumeNonZero(InteropUtil.GetParent(hWnd)), - // InteropUtil.CDM_GETFOLDERPATH); - string newFolder = - GetTextFromCommonDialog(InteropUtil.AssumeNonZero(InteropUtil.GetParent(hWnd)), - InteropUtil.CDM_GETFILEPATH); - /* - if (m_currentFolder != null && newFolder != null && - Util.PathContains(newFolder, m_currentFolder)) - { - m_suppressSelectionChange = true; - } - */ - - m_currentFolder = newFolder; - - /* #5841 On Windows XP when changing the folder 'newFolder' contains the selected directory twice (e.g. c:\temp\i386\i386) - HACK - */ - if (!Directory.Exists(newFolder)) - { - try - { - String lastPart = System.IO.Path.GetFileName(newFolder); - String parent = Directory.GetParent(newFolder).FullName; - String parentFile = System.IO.Path.GetFileName(parent); - if (lastPart.Equals(parentFile)) - { - m_currentFolder = parent; - } - } - catch (Exception) - { - //ignore - } - } - IntPtr fileNameCombo = - InteropUtil.AssumeNonZero( - InteropUtil.GetDlgItem(InteropUtil.AssumeNonZero(InteropUtil.GetParent(hWnd)), - InteropUtil.ID_FileNameCombo)); - if (m_hasDirChangeFired) - { - InteropUtil.SetWindowTextW(fileNameCombo, String.Empty); - } - m_hasDirChangeFired = true; - - //refresh the file list to make sure that the extension is shown properly - IntPtr hParent = InteropUtil.AssumeNonZero(InteropUtil.GetParent(hWnd)); - SetForegroundWindow(hParent); - SendKeys.SendWait("{F5}"); - - break; - } - case InteropUtil.CDN_FILEOK: - { - if (!AcceptFiles) - { - return 1; - } - - IntPtr hParent = InteropUtil.AssumeNonZero(InteropUtil.GetParent(hWnd)); - ProcessSelection(hParent, false); - - break; - } - case InteropUtil.CDN_INITDONE: - { - IntPtr hParent = InteropUtil.GetParent(hWnd); - IntPtr hFile = - InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(InteropUtil.AssumeNonZero(hParent), - InteropUtil.ID_FileNameCombo)); - InteropUtil.SetFocus(hFile); - break; - } - } - return 0; - } - - private string GetTextFromCommonDialog(IntPtr hWnd, uint msg) - { - string str = null; - IntPtr buffer = Marshal.AllocCoTaskMem(2*InteropUtil.NumberOfFileChars); - try - { - InteropUtil.SendMessageIntPtr(hWnd, msg, new IntPtr(InteropUtil.NumberOfFileChars), buffer); - var chars = new char[InteropUtil.NumberOfFileChars]; - Marshal.Copy(buffer, chars, 0, chars.Length); - int firstZeroTerm = ((IList) chars).IndexOf('\0'); - - if (firstZeroTerm >= 0 && firstZeroTerm <= chars.Length - 1) - { - str = new string(chars, 0, firstZeroTerm); - } - } - finally - { - Marshal.FreeCoTaskMem(buffer); - } - return str; - } - - private int DefViewSubClass - ( - IntPtr hWnd, - uint uMsg, - IntPtr wParam, - IntPtr lParam, - IntPtr uIdSubclass, - uint dwRefData - ) - { - if (uMsg == InteropUtil.WM_NOTIFY) - { - var header = (InteropUtil.NMHDR) Marshal.PtrToStructure(lParam, typeof (InteropUtil.NMHDR)); - if (header.code == InteropUtil.LVN_ITEMCHANGED && header.hwndFrom != IntPtr.Zero && header.idFrom == 1) - { - var nmListView = - (InteropUtil.NMLISTVIEW) Marshal.PtrToStructure(lParam, typeof (InteropUtil.NMLISTVIEW)); - bool oldSelected = (nmListView.uOldState & InteropUtil.LVIS_SELECTED) != 0; - bool newSelected = (nmListView.uNewState & InteropUtil.LVIS_SELECTED) != 0; - if (!oldSelected && newSelected) - { - if (!m_suppressSelectionChange) - { - //the item went from not selected to being selected - //so we want to look and see if the selected item is a folder, and if so - //change the text of the item box to be the item on the folder. But, before we do that - //we want to make sure that the box isn't currently focused. - IntPtr hParent = InteropUtil.GetParent(hWnd); - IntPtr hFNCombo = InteropUtil.GetDlgItem(hParent, InteropUtil.ID_FileNameCombo); - IntPtr hFNEditBox = InteropUtil.GetDlgItem(hParent, InteropUtil.ID_FileNameTextBox); - IntPtr hFocus = InteropUtil.GetFocus(); - - if - ( - (hFNCombo == IntPtr.Zero || hFNCombo != hFocus) && - (hFNEditBox == IntPtr.Zero || hFNEditBox != hFocus) - ) - { - SetFileNameToSelectedItem(header.hwndFrom, hFNCombo, nmListView.iItem); - } - } - m_suppressSelectionChange = false; - } - } - } - return InteropUtil.DefSubclassProc(hWnd, uMsg, wParam, lParam); - } - - private void SetFileNameToSelectedItem(IntPtr hListView, IntPtr hFNCombo, int selectedIndex) - { - if (selectedIndex >= 0) - { - var lvitem = new InteropUtil.LVITEM(); - lvitem.mask = InteropUtil.LVIF_TEXT; - IntPtr nativeBuffer = Marshal.AllocCoTaskMem(InteropUtil.NumberOfFileChars*2); - for (int i = 0; i < InteropUtil.NumberOfFileChars; ++i) - { - Marshal.WriteInt16(nativeBuffer, i*2, '\0'); - } - string name; - - try - { - Marshal.WriteInt16(nativeBuffer, 0); - lvitem.pszText = nativeBuffer; - lvitem.cchTextMax = InteropUtil.NumberOfFileChars; - uint length = InteropUtil.SendListViewMessage(hListView, InteropUtil.LVM_GETITEMTEXT, - (uint) selectedIndex, ref lvitem); - name = Marshal.PtrToStringUni(lvitem.pszText, (int) length); - } - finally - { - Marshal.FreeCoTaskMem(nativeBuffer); - } - - if (name != null && m_currentFolder != null) - { - try - { - string path = System.IO.Path.Combine(m_currentFolder, name); - if (Directory.Exists(path)) - { - InteropUtil.SetWindowTextW(hFNCombo, name); - } - } - catch (Exception) - { - } - } - } - } - - private string GetFileNameFromSelectedItem(IntPtr hListView, int selectedIndex) - { - if (selectedIndex >= 0) - { - var lvitem = new InteropUtil.LVITEM(); - lvitem.mask = InteropUtil.LVIF_TEXT; - IntPtr nativeBuffer = Marshal.AllocCoTaskMem(InteropUtil.NumberOfFileChars*2); - for (int i = 0; i < InteropUtil.NumberOfFileChars; ++i) - { - Marshal.WriteInt16(nativeBuffer, i*2, '\0'); - } - string name; - - try - { - Marshal.WriteInt16(nativeBuffer, 0); - lvitem.pszText = nativeBuffer; - lvitem.cchTextMax = InteropUtil.NumberOfFileChars; - uint length = InteropUtil.SendListViewMessageInt(hListView, InteropUtil.LVM_GETITEMTEXT, - selectedIndex, ref lvitem); - name = Marshal.PtrToStringUni(lvitem.pszText, (int) length); - } - finally - { - Marshal.FreeCoTaskMem(nativeBuffer); - } - - if (name != null && m_currentFolder != null) - { - try - { - string path = System.IO.Path.Combine(m_currentFolder, name); - - return path; - if (Directory.Exists(path)) - { - //hFNCombo.SetWindowTextW(name); - } - } - catch (Exception) - { - } - } - - - return name; - } - return string.Empty; - } - - private int OpenFileSubClass - ( - IntPtr hWnd, - uint uMsg, - IntPtr wParam, - IntPtr lParam, - IntPtr uIdSubclass, - uint dwRefData - ) - { - switch (uMsg) - { - case InteropUtil.WM_PARENTNOTIFY: - { - unchecked - { - int id = InteropUtil.GetDlgCtrlID(lParam); - - if (LOW((uint) wParam) == InteropUtil.WM_CREATE && - (id == InteropUtil.ID_FileList || id == 0)) - { - InteropUtil.SetWindowSubclass(lParam, m_defViewSubClassDelegate, 0, 0); - } - } - break; - } - } - return InteropUtil.DefSubclassProc(hWnd, uMsg, wParam, lParam); - } - - private static uint LOW(uint x) - { - return x & 0xFFFF; - } - - private static uint HIGH(uint x) - { - return (x & 0xFFFF0000) >> 16; - } - - [DllImport("User32.dll", SetLastError = true)] - public static extern int SetForegroundWindow(IntPtr hwnd); - - private delegate void CalcPosDelegate( - SelectFileAndFolderDialog @this, int baseRight, out int right, out int width); - } +// +// Copyright (c) 2010-2011 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows.Forms; +using Microsoft.Win32; + +namespace Ch.Cyberduck.Ui.Winforms.Commondialog +{ + public sealed class SelectFileAndFolderDialog : CommonDialog + { + private const string HideFileExtensionKey = + @"HideFileExt"; + + private const string HideFileExtensionLocation = + @"Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"; + + private static readonly Dictionary m_calcPosMap = + new Dictionary + { + { + InteropUtil.ID_CUSTOM_CANCEL, + (SelectFileAndFolderDialog @this, int baseRight, out int right, out int width) => + { + right = baseRight; + width = @this.m_cancelWidth; + } + }, + { + InteropUtil.ID_SELECT, + (SelectFileAndFolderDialog @this, int baseRight, out int right, out int width) => + { + right = baseRight - (@this.m_cancelWidth + @this.m_buttonGap); + width = @this.m_selectWidth; + } + } + }; + + private static SelectFileAndFolderDialog _instance; + + private readonly InteropUtil.SUBCLASSPROC m_defViewSubClassDelegate; + private readonly InteropUtil.WndProc m_hookDelegate; + private readonly InteropUtil.SUBCLASSPROC m_openFileSubClassDelegate; + private List _selected = new List(); + + private int m_buttonGap; + private int m_cancelWidth; + private string m_currentFolder; + private IntPtr m_hWnd; + private bool m_hasDirChangeFired; + private int m_selectWidth; + private bool m_suppressSelectionChange; + private bool m_useCurrentDir; + + private SelectFileAndFolderDialog() + { + m_openFileSubClassDelegate = OpenFileSubClass; + m_hookDelegate = HookProc; + m_defViewSubClassDelegate = DefViewSubClass; + Path = null; + Title = null; + m_useCurrentDir = false; + AcceptFiles = true; + m_currentFolder = null; + m_useCurrentDir = false; + m_cancelWidth = 0; + m_selectWidth = 0; + m_buttonGap = 0; + m_hWnd = IntPtr.Zero; + } + + public static SelectFileAndFolderDialog Instance + { + //not thread-safe + get + { + if (_instance == null) + { + _instance = new SelectFileAndFolderDialog(); + } + return _instance; + } + } + + public string Path { get; set; } + + public string[] SelectedPaths + { + get { return _selected.ToArray(); } + } + + public string Title { get; set; } + public bool ShowReadOnly { get; set; } + public bool AcceptFiles { get; set; } + public string FileNameLabel { get; set; } + public string SelectLabel { get; set; } + public string CancelLabel { get; set; } + + public override void Reset() + { + Path = null; + Title = null; + m_useCurrentDir = false; + AcceptFiles = true; + m_currentFolder = null; + m_useCurrentDir = false; + m_cancelWidth = 0; + m_selectWidth = 0; + m_buttonGap = 0; + m_hWnd = IntPtr.Zero; + } + + protected override bool RunDialog(IntPtr hwndOwner) + { + InteropUtil.Assume(Marshal.SystemDefaultCharSize == 2, "The character size should be 2"); + + IntPtr nativeBuffer = Marshal.AllocCoTaskMem(InteropUtil.NumberOfFileChars*2); + IntPtr filterBuffer = IntPtr.Zero; + _selected = new List(); + + try + { + var openFileName = new InteropUtil.OpenFileName(); + openFileName.Initialize(); + openFileName.hwndOwner = hwndOwner; + + var chars = new char[InteropUtil.NumberOfFileChars]; + + try + { + if (File.Exists(Path)) + { + if (AcceptFiles) + { + string fileName = System.IO.Path.GetFileName(Path); + int length = Math.Min(fileName.Length, InteropUtil.NumberOfFileChars); + fileName.CopyTo(0, chars, 0, length); + openFileName.lpstrInitialDir = System.IO.Path.GetDirectoryName(Path); + } + else + { + openFileName.lpstrInitialDir = System.IO.Path.GetDirectoryName(Path); + } + } + else if (Directory.Exists(Path)) + { + openFileName.lpstrInitialDir = Path; + } + else + { + //the path does not exist. + //We don't just want to throw it away, however. + //The initial path we get is most likely provided by the user in some way. + //It could be what they typed into a text box before clicking a browse button, + //or it could be a value they had entered previously that used to be valid, but now no longer exists. + //In any case, we don't want to throw out the user's text. So, we find the first parent + //directory of Path that exists on disk. + //We will set the initial directory to that path, and then set the initial file to + //the rest of the path. The user will get an error if the click "OK"m saying that the selected path + //doesn't exist, but that's ok. If we didn't do this, and showed the path, if they clicked + //OK without making changes we would actually change the selected path, which would be bad. + //This way, if the users want's to change the folder, he actually has to change something. + string pathToShow; + InitializePathDNE(Path, out openFileName.lpstrInitialDir, out pathToShow); + pathToShow = pathToShow ?? String.Empty; + int length = Math.Min(pathToShow.Length, InteropUtil.NumberOfFileChars); + pathToShow.CopyTo(0, chars, 0, length); + } + } + catch + { + } + + Marshal.Copy(chars, 0, nativeBuffer, chars.Length); + + openFileName.lpstrFile = nativeBuffer; + + if (!AcceptFiles) + { + string str = string.Format("Folders\0*.{0}-{1}\0\0", Guid.NewGuid().ToString("N"), + Guid.NewGuid().ToString("N")); + filterBuffer = openFileName.lpstrFilter = Marshal.StringToCoTaskMemUni(str); + } + else + { + openFileName.lpstrFilter = IntPtr.Zero; + } + + openFileName.nMaxCustFilter = 0; + openFileName.nFilterIndex = 0; + openFileName.nMaxFile = InteropUtil.NumberOfFileChars; + openFileName.nMaxFileTitle = 0; + openFileName.lpstrTitle = Title; + openFileName.lpfnHook = m_hookDelegate; + openFileName.templateID = InteropUtil.IDD_CustomOpenDialog; + openFileName.hInstance = Marshal.GetHINSTANCE(typeof (SelectFileAndFolderDialog).Module); + openFileName.Flags = + InteropUtil.OFN_DONTADDTORECENT | + InteropUtil.OFN_ENABLEHOOK | + InteropUtil.OFN_ENABLESIZING | + InteropUtil.OFN_NOTESTFILECREATE | + InteropUtil.OFN_ALLOWMULTISELECT | + InteropUtil.OFN_EXPLORER | + InteropUtil.OFN_FILEMUSTEXIST | + InteropUtil.OFN_PATHMUSTEXIST | + InteropUtil.OFN_NODEREFERENCELINKS | + InteropUtil.OFN_ENABLETEMPLATE | + (ShowReadOnly ? 0 : InteropUtil.OFN_HIDEREADONLY); + + m_useCurrentDir = false; + bool hideFileExtSettingChanged = false; + + try + { + if (GetHideFileExtensionSetting()) + { + HideFileExtension(false); + hideFileExtSettingChanged = true; + } + + bool ret = false; + try + { + ret = InteropUtil.GetOpenFileNameW(ref openFileName); + } + catch (Exception e) + { + IntPtr hParent = InteropUtil.AssumeNonZero(InteropUtil.GetParent(m_hWnd)); + InteropUtil.SendMessage(hParent, InteropUtil.WM_CLOSE, 0, 0); + throw e; + } + //var extErrpr = InteropUtil.CommDlgExtendedError(); + //InteropUtil.CheckForWin32Error(); + + if (m_useCurrentDir) + { + Path = m_currentFolder; + return true; + } + else if (ret) + { + Marshal.Copy(nativeBuffer, chars, 0, chars.Length); + int firstZeroTerm = ((IList) chars).IndexOf('\0'); + if (firstZeroTerm >= 0 && firstZeroTerm <= chars.Length - 1) + { + Path = new string(chars, 0, firstZeroTerm); + } + } + return ret; + } + finally + { + //revert registry setting + if (hideFileExtSettingChanged) + { + HideFileExtension(true); + } + } + } + finally + { + Marshal.FreeCoTaskMem(nativeBuffer); + if (filterBuffer != IntPtr.Zero) + { + Marshal.FreeCoTaskMem(filterBuffer); + } + } + } + + private static bool GetHideFileExtensionSetting() + { + using (RegistryKey adv = Registry.CurrentUser.OpenSubKey(HideFileExtensionLocation)) + { + if (null != adv) + { + object hide = adv.GetValue(HideFileExtensionKey); + if (null != hide) + { + return Convert.ToBoolean(hide); + } + } + } + return false; + } + + private static void HideFileExtension(bool hide) + { + using (RegistryKey adv = Registry.CurrentUser.OpenSubKey(HideFileExtensionLocation, true)) + { + if (null != adv) + { + adv.SetValue(HideFileExtensionKey, Convert.ToInt16(hide), RegistryValueKind.DWord); + } + } + } + + private static void InitializePathDNE(string path, out string existingParent, out string initialFileNameText) + { + var stack = new Stack(); + existingParent = System.IO.Path.GetDirectoryName(path); + stack.Push(System.IO.Path.GetFileName(path)); + + while (!string.IsNullOrEmpty(existingParent) && !Directory.Exists(existingParent)) + { + stack.Push(existingParent); + existingParent = System.IO.Path.GetDirectoryName(existingParent); + } + + var builder = new StringBuilder(); + bool first = true; + while (stack.Count > 0) + { + if (!first) + { + builder.Append(System.IO.Path.PathSeparator); + } + else + { + first = false; + } + builder.Append(stack.Pop()); + } + initialFileNameText = builder.ToString(); + } + + /// + /// Defines the common dialog box hook procedure that is overridden to add specific functionality to a common dialog box. + /// + /// + /// A zero value if the default dialog box procedure processes the message; a nonzero value if the default dialog box procedure ignores the message. + /// + /// The handle to the dialog box window. The message being received. Additional information about the message. Additional information about the message. + protected override IntPtr HookProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lparam) + { + switch (unchecked((uint) msg)) + { + case InteropUtil.WM_INITDIALOG: + { + InitDialog(hWnd); + break; + } + case InteropUtil.WM_NOTIFY: + { + var notifyData = + (InteropUtil.OFNOTIFY) Marshal.PtrToStructure(lparam, typeof (InteropUtil.OFNOTIFY)); + int results = ProcessNotifyMessage(hWnd, notifyData); + if (results != 0) + { + InteropUtil.SetWindowLongW(hWnd, InteropUtil.DWL_MSGRESULT, results); + return (IntPtr) results; + } + break; + } + case InteropUtil.WM_SIZE: + { + ResizeCustomControl(hWnd); + break; + } + + case (InteropUtil.BN_CLICKED << 16) | InteropUtil.IDOK: + { + break; + } + + case InteropUtil.WM_COMMAND: + { + unchecked + { + IntPtr hParent = InteropUtil.AssumeNonZero(InteropUtil.GetParent(hWnd)); + uint code = HIGH((uint) wParam); + uint id = LOW((uint) wParam); + if (code == InteropUtil.BN_CLICKED) + { + switch (id) + { + case InteropUtil.ID_CUSTOM_CANCEL: + { + //The user clicked our custom cancel button. Close the dialog. + InteropUtil.SendMessage(hParent, InteropUtil.WM_CLOSE, 0, 0); + break; + } + case InteropUtil.ID_SELECT: + { + if (ProcessSelection(hParent, true)) + { + InteropUtil.SendMessage(hParent, InteropUtil.WM_CLOSE, 0, 0); + break; + } + //The user has not selected an existing folder. + //So we translate a click of our "Select" button into the OK button and forward the request to the + //open file dialog. + InteropUtil.SendMessage + (hParent, + InteropUtil.WM_COMMAND, + (InteropUtil.BN_CLICKED << 16) | InteropUtil.IDOK, + unchecked((uint) InteropUtil.GetDlgItem(hParent, InteropUtil.IDOK)) + ); + + + break; + } + } + } + } + break; + } + } + return base.HookProc(hWnd, msg, wParam, lparam); + } + + private bool AddSelectedItemsFromSelection(IntPtr listview) + { + uint count = InteropUtil.SendMessage(listview, + InteropUtil.LVM_GETSELECTEDCOUNT, 0, 0); + + //if there is at least one item selected we always return these ones + if (count > 0) + { + int ind = -1; + for (int i = 0; i < count; i++) + { + ind = InteropUtil.SendMessageInt(listview, InteropUtil.LVM_GETNEXTITEM, + ind, + InteropUtil.LVNI_SELECTED); + //with the index we can get the item's text + string item = GetFileNameFromSelectedItem(listview, ind); + _selected.Add(item); + } + return true; + } + return false; + } + + private bool ProcessSelection(IntPtr handle, bool preferSelection) + { + IntPtr shelldll_defview = InteropUtil.GetDlgItem(handle, + InteropUtil.ID_FileList); + IntPtr listview = InteropUtil.GetDlgItem(shelldll_defview, 1); + IntPtr focus = InteropUtil.GetFocus(); + if (listview == focus || preferSelection) + { + return AddSelectedItemsFromSelection(listview); + } + else + { + //check the content of the file combobox + IntPtr hFileName = InteropUtil.GetDlgItem(handle, + InteropUtil.ID_FileNameCombo); + string currentText = (InteropUtil.GetWindowTextW(hFileName) ?? "").Trim(); + if (!String.IsNullOrEmpty(currentText)) + { + try + { + if (System.IO.Path.IsPathRooted(currentText)) + { + if (Directory.Exists(currentText) || File.Exists(currentText)) + { + //the contents of the text box are a rooted path, that points to an existing directory. + //we interpret that to mean that the user wants to select that directory. + _selected.Add(currentText); + return true; + } + } + else if (!String.IsNullOrEmpty(m_currentFolder)) + { + string combined = System.IO.Path.Combine(m_currentFolder, + currentText); + if (Directory.Exists(combined) || File.Exists(combined)) + { + //the contents of the text box are a relative path, that points to a + //an existing directory. We interpret the users intent to mean that they wanted + //to select the existing path. + _selected.Add(combined); + return true; + } + } + } + catch (Exception) + { + //try to add the selection + if (AddSelectedItemsFromSelection(listview)) + { + return true; + } + } + } + //forward all wrong inputs to the standard mechanism + return false; + } + } + + private void InitDialog(IntPtr hWnd) + { + m_hWnd = hWnd; + + IntPtr hParent = InteropUtil.AssumeNonZero(InteropUtil.GetParent(hWnd)); + InteropUtil.SetWindowSubclass(hParent, m_openFileSubClassDelegate, 0, 0); + + //disable and hide the filter combo box + IntPtr hFilterCombo = InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(hParent, InteropUtil.ID_FilterCombo)); + InteropUtil.EnableWindow(hFilterCombo, false); + InteropUtil.SendMessage(hParent, InteropUtil.CDM_HIDECONTROL, InteropUtil.ID_FilterCombo, 0); + InteropUtil.SendMessage(hParent, InteropUtil.CDM_HIDECONTROL, InteropUtil.ID_FilterLabel, 0); + + //update the file name label + IntPtr hFileNameLabel = + InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(hParent, InteropUtil.ID_FileNameLabel)); + + if (FileNameLabel != String.Empty) + { + InteropUtil.SendMessageString(hFileNameLabel, InteropUtil.WM_SETTEXT, 0, FileNameLabel); + } + + //find the button controls in the parent + IntPtr hOkButton = InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(hParent, InteropUtil.IDOK)); + IntPtr hCancelButton = InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(hParent, InteropUtil.IDCANCEL)); + + //We don't want the accelerator keys for the ok and cancel buttons to work, because + //they are not shown on the dialog. However, we still want the buttons enabled + //so that "esc" and "enter" have the behavior they used to. So, we just + //clear out their text instead. + InteropUtil.SetWindowTextW(hOkButton, String.Empty); + InteropUtil.SetWindowTextW(hCancelButton, String.Empty); + + //find our button controls + IntPtr hSelectButton = InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(hWnd, InteropUtil.ID_SELECT)); + IntPtr hCustomCancelButton = + InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(hWnd, InteropUtil.ID_CUSTOM_CANCEL)); + + if (!String.IsNullOrEmpty(SelectLabel)) + { + InteropUtil.SetWindowTextW(hSelectButton, SelectLabel); + } + if (!String.IsNullOrEmpty(CancelLabel)) + { + InteropUtil.SetWindowTextW(hCustomCancelButton, CancelLabel); + } + + //copy the font from the parent's buttons + InteropUtil.LoadFontFrom(hSelectButton, hOkButton); + InteropUtil.LoadFontFrom(hCustomCancelButton, hCancelButton); + + InteropUtil.WINDOWPLACEMENT cancelLoc = InteropUtil.GetWindowPlacement(hCancelButton); + + //hide the ok and cancel buttons + InteropUtil.SendMessage(hParent, InteropUtil.CDM_HIDECONTROL, InteropUtil.IDOK, 0); + InteropUtil.SendMessage(hParent, InteropUtil.CDM_HIDECONTROL, InteropUtil.IDCANCEL, 0); + + //expand the file name combo to take up the space left by the OK and cancel buttons. + IntPtr hFileName = InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(hParent, InteropUtil.ID_FileNameCombo)); + InteropUtil.WINDOWPLACEMENT fileNameLoc = InteropUtil.GetWindowPlacement(hFileName); + fileNameLoc.Right = InteropUtil.GetWindowPlacement(hOkButton).Right; + InteropUtil.SetWindowPlacement(hFileName, ref fileNameLoc); + + InteropUtil.WINDOWPLACEMENT parentLoc = InteropUtil.GetWindowPlacement(hParent); + + //subtract the height of the missing cancel button + parentLoc.Bottom -= (cancelLoc.Bottom - cancelLoc.Top); + InteropUtil.SetWindowPlacement(hParent, ref parentLoc); + + //move the select and custom cancel buttons to the right hand side of the window: + + InteropUtil.WINDOWPLACEMENT selectLoc = InteropUtil.GetWindowPlacement(hSelectButton); + InteropUtil.WINDOWPLACEMENT customCancelLoc = InteropUtil.GetWindowPlacement(hCustomCancelButton); + m_cancelWidth = customCancelLoc.Right - customCancelLoc.Left; + m_selectWidth = selectLoc.Right - selectLoc.Left; + m_buttonGap = customCancelLoc.Left - selectLoc.Right; + + InteropUtil.WINDOWPLACEMENT ctrlLoc = InteropUtil.GetWindowPlacement(hWnd); + ctrlLoc.Right = fileNameLoc.Right; + + //ResizeCustomControl(hWnd, fileNameLoc.Right, hCustomCancelButton, hSelectButton); + ResizeCustomControl(hWnd); + } + + private void ResizeCustomControl(IntPtr hWnd) + { + if (hWnd == m_hWnd) + { + IntPtr hSelectButton = + InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(InteropUtil.AssumeNonZero(hWnd), + InteropUtil.ID_SELECT)); + IntPtr hOkButton = + InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(InteropUtil.AssumeNonZero(hWnd), + InteropUtil.ID_CUSTOM_CANCEL)); + + IntPtr hParent = InteropUtil.AssumeNonZero(InteropUtil.GetParent(hWnd)); + IntPtr fileName = + InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(hParent, InteropUtil.ID_FileNameCombo)); + + /*var right = fileName.GetWindowPlacement().Right; + var top = hSelectButton.GetWindowPlacement().Top;*/ + + var rect = new InteropUtil.RECT(); + InteropUtil.WINDOWPLACEMENT selectRect = InteropUtil.GetWindowPlacement(hSelectButton); + + rect.top = selectRect.Top; + rect.bottom = selectRect.Bottom; + rect.right = InteropUtil.GetWindowPlacement(fileName).Right; + rect.left = rect.right - (m_cancelWidth + m_buttonGap + m_selectWidth); + + ResizeCustomControl(hWnd, rect, hOkButton, hSelectButton); + } + } + + private void ResizeCustomControl(IntPtr hWnd, InteropUtil.RECT rect, params IntPtr[] buttons) + { + InteropUtil.Assume(buttons != null && buttons.Length > 0); + + InteropUtil.AssumeNonZero(hWnd); + + InteropUtil.WINDOWPLACEMENT wndLoc = InteropUtil.GetWindowPlacement(hWnd); + + wndLoc.Right = rect.right; + InteropUtil.SetWindowPlacement(hWnd, ref wndLoc); + + foreach (IntPtr hBtn in buttons) + { + int btnRight, btnWidth; + + m_calcPosMap[InteropUtil.GetDlgCtrlID(hBtn)](this, rect.right, out btnRight, out btnWidth); + + PositionButton(hBtn, btnRight, btnWidth); + } + + //see bug # 844 + //We clip hWnd to only draw in the rectangle around our custom buttons. + //When we supply a custom dialog template to GetOpenFileName(), it adds + //an extra HWND to the open file dialog, and then sticks all the controls + //in the dialog //template inside the HWND. It then resizes the control + //to stretch from the top of the open file dialog to the bottom of the + //window, extending the bottom of the window large enough to include the + //additional height of the dialog template. This ends up sticking our custom + //buttons at the bottom of the window, which is what we want. + // + //However, the fact that the parent window extends from the top of the open + //file dialog was causing some painting problems on Windows XP SP 3 systems. + //Basically, because the window was covering the predefined controls on the + //open file dialog, they were not getting painted. This results in a blank + //window. I tried setting an extended WS_EX_TRANSPARENT style on the dialog, + //but that didn't help. + // + //So, to fix the problem I setup a window region for the synthetic HWND. + //This clips the drawing of the window to only within the region containing + //the custom buttons, and thus avoids the problem. + // + //I'm not sure why this wasn't an issue on Vista. + IntPtr hRgn = InteropUtil.CreateRectRgnIndirect(ref rect); + try + { + if (InteropUtil.SetWindowRgn(hWnd, hRgn, true) == 0) + { + //setting the region failed, so we need to delete the region we created above. + InteropUtil.DeleteObject(hRgn); + } + } + catch + { + if (hRgn != IntPtr.Zero) + { + InteropUtil.DeleteObject(hRgn); + } + } + } + + private void PositionButton(IntPtr hWnd, int right, int width) + { + InteropUtil.AssumeNonZero(hWnd); + int id = InteropUtil.GetDlgCtrlID(hWnd); + + //hWnd.BringWindowToTop(); + + InteropUtil.WINDOWPLACEMENT buttonLoc = InteropUtil.GetWindowPlacement(hWnd); + + buttonLoc.Right = right; + buttonLoc.Left = buttonLoc.Right - width; + InteropUtil.SetWindowPlacement(hWnd, ref buttonLoc); + InteropUtil.InvalidateRect(hWnd, IntPtr.Zero, true); + } + + private int ProcessNotifyMessage(IntPtr hWnd, InteropUtil.OFNOTIFY notifyData) + { + switch (notifyData.hdr_code) + { + case InteropUtil.CDN_FOLDERCHANGE: + { + //CDM_GETFOLDERPATH returns garbage for some standard folders like 'Libraries' + //var newFolder = GetTextFromCommonDialog(InteropUtil.AssumeNonZero(InteropUtil.GetParent(hWnd)), + // InteropUtil.CDM_GETFOLDERPATH); + string newFolder = + GetTextFromCommonDialog(InteropUtil.AssumeNonZero(InteropUtil.GetParent(hWnd)), + InteropUtil.CDM_GETFILEPATH); + /* + if (m_currentFolder != null && newFolder != null && + Util.PathContains(newFolder, m_currentFolder)) + { + m_suppressSelectionChange = true; + } + */ + + m_currentFolder = newFolder; + + /* #5841 On Windows XP when changing the folder 'newFolder' contains the selected directory twice (e.g. c:\temp\i386\i386) + HACK + */ + if (!Directory.Exists(newFolder)) + { + try + { + String lastPart = System.IO.Path.GetFileName(newFolder); + String parent = Directory.GetParent(newFolder).FullName; + String parentFile = System.IO.Path.GetFileName(parent); + if (lastPart.Equals(parentFile)) + { + m_currentFolder = parent; + } + } + catch (Exception) + { + //ignore + } + } + IntPtr fileNameCombo = + InteropUtil.AssumeNonZero( + InteropUtil.GetDlgItem(InteropUtil.AssumeNonZero(InteropUtil.GetParent(hWnd)), + InteropUtil.ID_FileNameCombo)); + if (m_hasDirChangeFired) + { + InteropUtil.SetWindowTextW(fileNameCombo, String.Empty); + } + m_hasDirChangeFired = true; + + //refresh the file list to make sure that the extension is shown properly + IntPtr hParent = InteropUtil.AssumeNonZero(InteropUtil.GetParent(hWnd)); + SetForegroundWindow(hParent); + SendKeys.SendWait("{F5}"); + + break; + } + case InteropUtil.CDN_FILEOK: + { + if (!AcceptFiles) + { + return 1; + } + + IntPtr hParent = InteropUtil.AssumeNonZero(InteropUtil.GetParent(hWnd)); + ProcessSelection(hParent, false); + + break; + } + case InteropUtil.CDN_INITDONE: + { + IntPtr hParent = InteropUtil.GetParent(hWnd); + IntPtr hFile = + InteropUtil.AssumeNonZero(InteropUtil.GetDlgItem(InteropUtil.AssumeNonZero(hParent), + InteropUtil.ID_FileNameCombo)); + InteropUtil.SetFocus(hFile); + break; + } + } + return 0; + } + + private string GetTextFromCommonDialog(IntPtr hWnd, uint msg) + { + string str = null; + IntPtr buffer = Marshal.AllocCoTaskMem(2*InteropUtil.NumberOfFileChars); + try + { + InteropUtil.SendMessageIntPtr(hWnd, msg, new IntPtr(InteropUtil.NumberOfFileChars), buffer); + var chars = new char[InteropUtil.NumberOfFileChars]; + Marshal.Copy(buffer, chars, 0, chars.Length); + int firstZeroTerm = ((IList) chars).IndexOf('\0'); + + if (firstZeroTerm >= 0 && firstZeroTerm <= chars.Length - 1) + { + str = new string(chars, 0, firstZeroTerm); + } + } + finally + { + Marshal.FreeCoTaskMem(buffer); + } + return str; + } + + private int DefViewSubClass + ( + IntPtr hWnd, + uint uMsg, + IntPtr wParam, + IntPtr lParam, + IntPtr uIdSubclass, + uint dwRefData + ) + { + if (uMsg == InteropUtil.WM_NOTIFY) + { + var header = (InteropUtil.NMHDR) Marshal.PtrToStructure(lParam, typeof (InteropUtil.NMHDR)); + if (header.code == InteropUtil.LVN_ITEMCHANGED && header.hwndFrom != IntPtr.Zero && header.idFrom == 1) + { + var nmListView = + (InteropUtil.NMLISTVIEW) Marshal.PtrToStructure(lParam, typeof (InteropUtil.NMLISTVIEW)); + bool oldSelected = (nmListView.uOldState & InteropUtil.LVIS_SELECTED) != 0; + bool newSelected = (nmListView.uNewState & InteropUtil.LVIS_SELECTED) != 0; + if (!oldSelected && newSelected) + { + if (!m_suppressSelectionChange) + { + //the item went from not selected to being selected + //so we want to look and see if the selected item is a folder, and if so + //change the text of the item box to be the item on the folder. But, before we do that + //we want to make sure that the box isn't currently focused. + IntPtr hParent = InteropUtil.GetParent(hWnd); + IntPtr hFNCombo = InteropUtil.GetDlgItem(hParent, InteropUtil.ID_FileNameCombo); + IntPtr hFNEditBox = InteropUtil.GetDlgItem(hParent, InteropUtil.ID_FileNameTextBox); + IntPtr hFocus = InteropUtil.GetFocus(); + + if + ( + (hFNCombo == IntPtr.Zero || hFNCombo != hFocus) && + (hFNEditBox == IntPtr.Zero || hFNEditBox != hFocus) + ) + { + SetFileNameToSelectedItem(header.hwndFrom, hFNCombo, nmListView.iItem); + } + } + m_suppressSelectionChange = false; + } + } + } + return InteropUtil.DefSubclassProc(hWnd, uMsg, wParam, lParam); + } + + private void SetFileNameToSelectedItem(IntPtr hListView, IntPtr hFNCombo, int selectedIndex) + { + if (selectedIndex >= 0) + { + var lvitem = new InteropUtil.LVITEM(); + lvitem.mask = InteropUtil.LVIF_TEXT; + IntPtr nativeBuffer = Marshal.AllocCoTaskMem(InteropUtil.NumberOfFileChars*2); + for (int i = 0; i < InteropUtil.NumberOfFileChars; ++i) + { + Marshal.WriteInt16(nativeBuffer, i*2, '\0'); + } + string name; + + try + { + Marshal.WriteInt16(nativeBuffer, 0); + lvitem.pszText = nativeBuffer; + lvitem.cchTextMax = InteropUtil.NumberOfFileChars; + uint length = InteropUtil.SendListViewMessage(hListView, InteropUtil.LVM_GETITEMTEXT, + (uint) selectedIndex, ref lvitem); + name = Marshal.PtrToStringUni(lvitem.pszText, (int) length); + } + finally + { + Marshal.FreeCoTaskMem(nativeBuffer); + } + + if (name != null && m_currentFolder != null) + { + try + { + string path = System.IO.Path.Combine(m_currentFolder, name); + if (Directory.Exists(path)) + { + InteropUtil.SetWindowTextW(hFNCombo, name); + } + } + catch (Exception) + { + } + } + } + } + + private string GetFileNameFromSelectedItem(IntPtr hListView, int selectedIndex) + { + if (selectedIndex >= 0) + { + var lvitem = new InteropUtil.LVITEM(); + lvitem.mask = InteropUtil.LVIF_TEXT; + IntPtr nativeBuffer = Marshal.AllocCoTaskMem(InteropUtil.NumberOfFileChars*2); + for (int i = 0; i < InteropUtil.NumberOfFileChars; ++i) + { + Marshal.WriteInt16(nativeBuffer, i*2, '\0'); + } + string name; + + try + { + Marshal.WriteInt16(nativeBuffer, 0); + lvitem.pszText = nativeBuffer; + lvitem.cchTextMax = InteropUtil.NumberOfFileChars; + uint length = InteropUtil.SendListViewMessageInt(hListView, InteropUtil.LVM_GETITEMTEXT, + selectedIndex, ref lvitem); + name = Marshal.PtrToStringUni(lvitem.pszText, (int) length); + } + finally + { + Marshal.FreeCoTaskMem(nativeBuffer); + } + + if (name != null && m_currentFolder != null) + { + try + { + string path = System.IO.Path.Combine(m_currentFolder, name); + + return path; + if (Directory.Exists(path)) + { + //hFNCombo.SetWindowTextW(name); + } + } + catch (Exception) + { + } + } + + + return name; + } + return string.Empty; + } + + private int OpenFileSubClass + ( + IntPtr hWnd, + uint uMsg, + IntPtr wParam, + IntPtr lParam, + IntPtr uIdSubclass, + uint dwRefData + ) + { + switch (uMsg) + { + case InteropUtil.WM_PARENTNOTIFY: + { + unchecked + { + int id = InteropUtil.GetDlgCtrlID(lParam); + + if (LOW((uint) wParam) == InteropUtil.WM_CREATE && + (id == InteropUtil.ID_FileList || id == 0)) + { + InteropUtil.SetWindowSubclass(lParam, m_defViewSubClassDelegate, 0, 0); + } + } + break; + } + } + return InteropUtil.DefSubclassProc(hWnd, uMsg, wParam, lParam); + } + + private static uint LOW(uint x) + { + return x & 0xFFFF; + } + + private static uint HIGH(uint x) + { + return (x & 0xFFFF0000) >> 16; + } + + [DllImport("User32.dll", SetLastError = true)] + public static extern int SetForegroundWindow(IntPtr hwnd); + + private delegate void CalcPosDelegate( + SelectFileAndFolderDialog @this, int baseRight, out int right, out int width); + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/commondialog/res1.rc b/windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/res1.rc similarity index 95% rename from source/ch/cyberduck/ui/winforms/commondialog/res1.rc rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/res1.rc index ecd124a37e..8cf80dcfd5 100644 --- a/source/ch/cyberduck/ui/winforms/commondialog/res1.rc +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/res1.rc @@ -1,93 +1,93 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (United States) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_CustomOpenDialog DIALOGEX 0, 0, 155, 21 -STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_CAPTION | WS_TABSTOP -FONT 8, "MS Sans Serif", 0, 0, 0x0 -BEGIN - DEFPUSHBUTTON "&Select",ID_SELECT,31,0,55,14 - PUSHBUTTON "&Cancel",ID_CUSTOM_CANCEL,91,0,55,14 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_CustomOpenDialog, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 146 - TOPMARGIN, 7 - END -END -#endif // APSTUDIO_INVOKED - -#endif // English (United States) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_CustomOpenDialog DIALOGEX 0, 0, 155, 21 +STYLE DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_CAPTION | WS_TABSTOP +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "&Select",ID_SELECT,31,0,55,14 + PUSHBUTTON "&Cancel",ID_CUSTOM_CANCEL,91,0,55,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_CustomOpenDialog, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 146 + TOPMARGIN, 7 + END +END +#endif // APSTUDIO_INVOKED + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/source/ch/cyberduck/ui/winforms/commondialog/resource.h b/windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/resource.h similarity index 96% rename from source/ch/cyberduck/ui/winforms/commondialog/resource.h rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/resource.h index eaeb0d251b..f166f38ce7 100644 --- a/source/ch/cyberduck/ui/winforms/commondialog/resource.h +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/commondialog/resource.h @@ -1,19 +1,19 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by res1.rc -// -#define IDD_CustomOpenDialog 101 -#define IDI_ICON1 105 -#define ID_SELECT 1001 -#define ID_CUSTOM_CANCEL 1002 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 107 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1003 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by res1.rc +// +#define IDD_CustomOpenDialog 101 +#define IDI_ICON1 105 +#define ID_SELECT 1001 +#define ID_CUSTOM_CANCEL 1002 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 107 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1003 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/source/ch/cyberduck/ui/winforms/controls/ClickLinkLabel.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ClickLinkLabel.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/controls/ClickLinkLabel.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ClickLinkLabel.cs index d640761d8f..48dbc16b6d 100644 --- a/source/ch/cyberduck/ui/winforms/controls/ClickLinkLabel.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ClickLinkLabel.cs @@ -1,59 +1,59 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.ComponentModel; -using System.Windows.Forms; -using Ch.Cyberduck.Core; -using ch.cyberduck.core; -using ch.cyberduck.core.local; - -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - internal sealed class ClickLinkLabel : LinkLabel - { - public ClickLinkLabel() - { - if (!DesignMode) - { - ContextMenuStrip contextMenu = new ContextMenuStrip(); - ToolStripItem addItem = contextMenu.Items.Add(LocaleFactory.localizedString("Copy URL", "Browser")); - addItem.Click += (sender, args) => Clipboard.SetText(Text); - ContextMenuStrip = contextMenu; - } - } - - /// - /// - /// - /// - protected Boolean DesignMode - { - get { return (LicenseManager.UsageMode == LicenseUsageMode.Designtime); } - } - - protected override void OnLinkClicked(LinkLabelLinkClickedEventArgs e) - { - if (e.Button == MouseButtons.Left) - { - BrowserLauncherFactory.get().open(Text); - } - base.OnLinkClicked(e); - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.ComponentModel; +using System.Windows.Forms; +using Ch.Cyberduck.Core; +using ch.cyberduck.core; +using ch.cyberduck.core.local; + +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + internal sealed class ClickLinkLabel : LinkLabel + { + public ClickLinkLabel() + { + if (!DesignMode) + { + ContextMenuStrip contextMenu = new ContextMenuStrip(); + ToolStripItem addItem = contextMenu.Items.Add(LocaleFactory.localizedString("Copy URL", "Browser")); + addItem.Click += (sender, args) => Clipboard.SetText(Text); + ContextMenuStrip = contextMenu; + } + } + + /// + /// + /// + /// + protected Boolean DesignMode + { + get { return (LicenseManager.UsageMode == LicenseUsageMode.Designtime); } + } + + protected override void OnLinkClicked(LinkLabelLinkClickedEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + BrowserLauncherFactory.get().open(Text); + } + base.OnLinkClicked(e); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/ClickThroughMenuStrip.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ClickThroughMenuStrip.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/controls/ClickThroughMenuStrip.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ClickThroughMenuStrip.cs index 9584f07072..21414d81cb 100644 --- a/source/ch/cyberduck/ui/winforms/controls/ClickThroughMenuStrip.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ClickThroughMenuStrip.cs @@ -1,40 +1,40 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using System.Windows.Forms; -using Ch.Cyberduck.Core; - -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - /// - /// Menustrip component with Click Through support - /// - /// - public class ClickThroughMenuStrip : MenuStrip - { - protected override void WndProc(ref Message m) - { - base.WndProc(ref m); - if (m.Msg == NativeConstants.WM_MOUSEACTIVATE && - m.Result == (IntPtr) NativeConstants.MA_ACTIVATEANDEAT) - { - m.Result = (IntPtr) NativeConstants.MA_ACTIVATE; - } - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using System.Windows.Forms; +using Ch.Cyberduck.Core; + +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + /// + /// Menustrip component with Click Through support + /// + /// + public class ClickThroughMenuStrip : MenuStrip + { + protected override void WndProc(ref Message m) + { + base.WndProc(ref m); + if (m.Msg == NativeConstants.WM_MOUSEACTIVATE && + m.Result == (IntPtr) NativeConstants.MA_ACTIVATEANDEAT) + { + m.Result = (IntPtr) NativeConstants.MA_ACTIVATE; + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/ClickThroughToolStrip.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ClickThroughToolStrip.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/controls/ClickThroughToolStrip.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ClickThroughToolStrip.cs index a69ce64578..52ff4958f3 100644 --- a/source/ch/cyberduck/ui/winforms/controls/ClickThroughToolStrip.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ClickThroughToolStrip.cs @@ -1,40 +1,40 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using System.Windows.Forms; -using Ch.Cyberduck.Core; - -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - /// - /// Toolstrip component with Click Through support - /// - /// - public class ClickThroughToolStrip : ToolStrip - { - protected override void WndProc(ref Message m) - { - base.WndProc(ref m); - if (m.Msg == NativeConstants.WM_MOUSEACTIVATE && - m.Result == (IntPtr) NativeConstants.MA_ACTIVATEANDEAT) - { - m.Result = (IntPtr) NativeConstants.MA_ACTIVATE; - } - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using System.Windows.Forms; +using Ch.Cyberduck.Core; + +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + /// + /// Toolstrip component with Click Through support + /// + /// + public class ClickThroughToolStrip : ToolStrip + { + protected override void WndProc(ref Message m) + { + base.WndProc(ref m); + if (m.Msg == NativeConstants.WM_MOUSEACTIVATE && + m.Result == (IntPtr) NativeConstants.MA_ACTIVATEANDEAT) + { + m.Result = (IntPtr) NativeConstants.MA_ACTIVATE; + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/EllipsisLabel.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/EllipsisLabel.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/controls/EllipsisLabel.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/EllipsisLabel.cs index b5d243f1d7..b138d7ead0 100644 --- a/source/ch/cyberduck/ui/winforms/controls/EllipsisLabel.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/EllipsisLabel.cs @@ -1,105 +1,105 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Windows.Forms; - -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - public class EllipsisLabel : Label - { - public EllipsisLabel() - { - DoubleBuffered = true; - } - - protected override void OnPaint(PaintEventArgs e) - { - if (string.IsNullOrEmpty(Text)) return; - - e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; - e.Graphics.CompositingQuality = CompositingQuality.HighQuality; - e.Graphics.InterpolationMode = InterpolationMode.Low; - - SizeF drawSize = e.Graphics.MeasureString(Text, Font, new PointF(), - StringFormat.GenericDefault); - - /* - textRect = new Rectangle(Point.Empty, TextRenderer.MeasureText(Text, Font, Size, TextFormatFlags.SingleLine | TextFormatFlags.NoPrefix)); - int width = textRect.Width + 1, - height = textRect.Height + 1; - */ - - PointF point = new PointF(); - if (AutoSize) - { - point.X = Padding.Left; - point.Y = Padding.Top; - } - else - { - // Text is Left-Aligned: - if (TextAlign == ContentAlignment.TopLeft || - TextAlign == ContentAlignment.MiddleLeft || - TextAlign == ContentAlignment.BottomLeft) - point.X = Padding.Left; - - // Text is Center-Aligned - else if (TextAlign == ContentAlignment.TopCenter || - TextAlign == ContentAlignment.MiddleCenter || - TextAlign == ContentAlignment.BottomCenter) - point.X = (Width - drawSize.Width)/2; - - // Text is Right-Aligned - else point.X = Width - (Padding.Right + drawSize.Width); - - // Text is Top-Aligned - if (TextAlign == ContentAlignment.TopLeft || - TextAlign == ContentAlignment.TopCenter || - TextAlign == ContentAlignment.TopRight) - point.Y = Padding.Top; - - // Text is Middle-Aligned - else if (TextAlign == ContentAlignment.MiddleLeft || - TextAlign == ContentAlignment.MiddleCenter || - TextAlign == ContentAlignment.MiddleRight) - point.Y = (Height - drawSize.Height)/2; - - // Text is Bottom-Aligned - else point.Y = Height - (Padding.Bottom + drawSize.Height); - } - - e.Graphics.Clear(BackColor); - - StringFormat sf = StringFormat.GenericDefault; - sf.FormatFlags = StringFormatFlags.LineLimit; - sf.Trimming = StringTrimming.EllipsisPath; - //why do we have to pad in? We do not need that with TextRenderer. - RectangleF rect = new RectangleF(0, -1, Width, Height +1 ); - - using (SolidBrush brush = new SolidBrush(ForeColor)) - { - //TextFormatFlags.PathEllipsis works only for *file paths*, e.g. ftp paths do not work - //http://connect.microsoft.com/VisualStudio/feedback/details/95413/textrenderer-does-not-draw-correctly-using-textformatflags-wordellipsis-or-textformatflags-pathellipsis - //TextRenderer.DrawText(e.Graphics, Text, Font, rect, ForeColor, TextFormatFlags.PathEllipsis | TextFormatFlags.NoPrefix ); - - e.Graphics.DrawString(Text, Font, brush, rect, sf); - } - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + public class EllipsisLabel : Label + { + public EllipsisLabel() + { + DoubleBuffered = true; + } + + protected override void OnPaint(PaintEventArgs e) + { + if (string.IsNullOrEmpty(Text)) return; + + e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; + e.Graphics.CompositingQuality = CompositingQuality.HighQuality; + e.Graphics.InterpolationMode = InterpolationMode.Low; + + SizeF drawSize = e.Graphics.MeasureString(Text, Font, new PointF(), + StringFormat.GenericDefault); + + /* + textRect = new Rectangle(Point.Empty, TextRenderer.MeasureText(Text, Font, Size, TextFormatFlags.SingleLine | TextFormatFlags.NoPrefix)); + int width = textRect.Width + 1, + height = textRect.Height + 1; + */ + + PointF point = new PointF(); + if (AutoSize) + { + point.X = Padding.Left; + point.Y = Padding.Top; + } + else + { + // Text is Left-Aligned: + if (TextAlign == ContentAlignment.TopLeft || + TextAlign == ContentAlignment.MiddleLeft || + TextAlign == ContentAlignment.BottomLeft) + point.X = Padding.Left; + + // Text is Center-Aligned + else if (TextAlign == ContentAlignment.TopCenter || + TextAlign == ContentAlignment.MiddleCenter || + TextAlign == ContentAlignment.BottomCenter) + point.X = (Width - drawSize.Width)/2; + + // Text is Right-Aligned + else point.X = Width - (Padding.Right + drawSize.Width); + + // Text is Top-Aligned + if (TextAlign == ContentAlignment.TopLeft || + TextAlign == ContentAlignment.TopCenter || + TextAlign == ContentAlignment.TopRight) + point.Y = Padding.Top; + + // Text is Middle-Aligned + else if (TextAlign == ContentAlignment.MiddleLeft || + TextAlign == ContentAlignment.MiddleCenter || + TextAlign == ContentAlignment.MiddleRight) + point.Y = (Height - drawSize.Height)/2; + + // Text is Bottom-Aligned + else point.Y = Height - (Padding.Bottom + drawSize.Height); + } + + e.Graphics.Clear(BackColor); + + StringFormat sf = StringFormat.GenericDefault; + sf.FormatFlags = StringFormatFlags.LineLimit; + sf.Trimming = StringTrimming.EllipsisPath; + //why do we have to pad in? We do not need that with TextRenderer. + RectangleF rect = new RectangleF(0, -1, Width, Height +1 ); + + using (SolidBrush brush = new SolidBrush(ForeColor)) + { + //TextFormatFlags.PathEllipsis works only for *file paths*, e.g. ftp paths do not work + //http://connect.microsoft.com/VisualStudio/feedback/details/95413/textrenderer-does-not-draw-correctly-using-textformatflags-wordellipsis-or-textformatflags-pathellipsis + //TextRenderer.DrawText(e.Graphics, Text, Font, rect, ForeColor, TextFormatFlags.PathEllipsis | TextFormatFlags.NoPrefix ); + + e.Graphics.DrawString(Text, Font, brush, rect, sf); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/ImageComboBox.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ImageComboBox.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/controls/ImageComboBox.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ImageComboBox.cs index e723b036cc..81f2e944b8 100644 --- a/source/ch/cyberduck/ui/winforms/controls/ImageComboBox.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ImageComboBox.cs @@ -1,156 +1,156 @@ -// -// Copyright (c) 2010-2011 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using System.Drawing; -using System.Reflection; -using System.Text; -using System.Windows.Forms; - -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - public class ImageComboBox : ComboBox - { - private ImageList _icImagList = new ImageList(); - - public ImageComboBox() - { - DrawMode = DrawMode.OwnerDrawFixed; - DropDownStyle = ComboBoxStyle.DropDownList; - } - - public string IconMember { get; set; } - - /// - /// ImageList Property - /// - public ImageList ICImageList - { - get { return _icImagList; } - set { _icImagList = value; } - } - - /// - /// Override OnDrawItem, To Be able To Draw Images, Text, And Font Formatting - /// - /// - protected override void OnDrawItem(DrawItemEventArgs e) - { - e.DrawBackground(); - - if (e.Index < 0) - //Just Draw Indented Text - e.Graphics.DrawString(Text, e.Font, new SolidBrush(e.ForeColor), - e.Bounds.Left + _icImagList.ImageSize.Width, e.Bounds.Top); - else - { - string iconKey = IconKey(Items[e.Index]); - int yOffset = (Height - _icImagList.ImageSize.Height)/2 - Margin.Top; - int xOffset = _icImagList.ImageSize.Width + 3; - - e.Graphics.DrawRectangle(new Pen(Color.White), e.Bounds); - if (e.State == DrawItemState.Selected) - { - e.Graphics.FillRectangle(new SolidBrush(Color.FromKnownColor(KnownColor.Highlight)), e.Bounds); - } - else - { - e.Graphics.FillRectangle(new SolidBrush(e.BackColor), e.Bounds); - } - if (ICImageList.Images.ContainsKey(iconKey)) - { - ICImageList.Draw(e.Graphics, e.Bounds.Left + 1, e.Bounds.Top + yOffset, - ICImageList.Images.IndexOfKey(iconKey)); - } - else - { - xOffset = 0; - } - e.Graphics.DrawString(GetItemText(Items[e.Index]), e.Font, new SolidBrush(e.ForeColor), - e.Bounds.Left + xOffset, e.Bounds.Top + yOffset); - } - e.DrawFocusRectangle(); - } - - /// - /// Get the iconKey property via Reflection - /// - /// - /// - private string IconKey(object item) - { - PropertyInfo property = item.GetType().GetProperty(IconMember); - if (property != null) - { - return (string) property.GetValue(item, null); - } - return null; - } - } - - [Serializable] - public struct KeyValueIconTriple - { - private readonly string _iconKey; - private readonly TKey _key; - private readonly TValue _value; - - public KeyValueIconTriple(TKey key, TValue value, String iconKey) - { - _key = key; - _value = value; - _iconKey = iconKey; - } - - public TKey Key - { - get { return _key; } - } - - public TValue Value - { - get { return _value; } - } - - public string IconKey - { - get { return _iconKey; } - } - - public override string ToString() - { - StringBuilder s = new StringBuilder(); - s.Append('['); - if (Key != null) - { - s.Append(Key.ToString()); - } - s.Append(", "); - if (Value != null) - { - s.Append(Value.ToString()); - } - s.Append(", "); - if (IconKey != null) - { - s.Append(IconKey); - } - s.Append(']'); - return s.ToString(); - } - } +// +// Copyright (c) 2010-2011 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using System.Drawing; +using System.Reflection; +using System.Text; +using System.Windows.Forms; + +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + public class ImageComboBox : ComboBox + { + private ImageList _icImagList = new ImageList(); + + public ImageComboBox() + { + DrawMode = DrawMode.OwnerDrawFixed; + DropDownStyle = ComboBoxStyle.DropDownList; + } + + public string IconMember { get; set; } + + /// + /// ImageList Property + /// + public ImageList ICImageList + { + get { return _icImagList; } + set { _icImagList = value; } + } + + /// + /// Override OnDrawItem, To Be able To Draw Images, Text, And Font Formatting + /// + /// + protected override void OnDrawItem(DrawItemEventArgs e) + { + e.DrawBackground(); + + if (e.Index < 0) + //Just Draw Indented Text + e.Graphics.DrawString(Text, e.Font, new SolidBrush(e.ForeColor), + e.Bounds.Left + _icImagList.ImageSize.Width, e.Bounds.Top); + else + { + string iconKey = IconKey(Items[e.Index]); + int yOffset = (Height - _icImagList.ImageSize.Height)/2 - Margin.Top; + int xOffset = _icImagList.ImageSize.Width + 3; + + e.Graphics.DrawRectangle(new Pen(Color.White), e.Bounds); + if (e.State == DrawItemState.Selected) + { + e.Graphics.FillRectangle(new SolidBrush(Color.FromKnownColor(KnownColor.Highlight)), e.Bounds); + } + else + { + e.Graphics.FillRectangle(new SolidBrush(e.BackColor), e.Bounds); + } + if (ICImageList.Images.ContainsKey(iconKey)) + { + ICImageList.Draw(e.Graphics, e.Bounds.Left + 1, e.Bounds.Top + yOffset, + ICImageList.Images.IndexOfKey(iconKey)); + } + else + { + xOffset = 0; + } + e.Graphics.DrawString(GetItemText(Items[e.Index]), e.Font, new SolidBrush(e.ForeColor), + e.Bounds.Left + xOffset, e.Bounds.Top + yOffset); + } + e.DrawFocusRectangle(); + } + + /// + /// Get the iconKey property via Reflection + /// + /// + /// + private string IconKey(object item) + { + PropertyInfo property = item.GetType().GetProperty(IconMember); + if (property != null) + { + return (string) property.GetValue(item, null); + } + return null; + } + } + + [Serializable] + public struct KeyValueIconTriple + { + private readonly string _iconKey; + private readonly TKey _key; + private readonly TValue _value; + + public KeyValueIconTriple(TKey key, TValue value, String iconKey) + { + _key = key; + _value = value; + _iconKey = iconKey; + } + + public TKey Key + { + get { return _key; } + } + + public TValue Value + { + get { return _value; } + } + + public string IconKey + { + get { return _iconKey; } + } + + public override string ToString() + { + StringBuilder s = new StringBuilder(); + s.Append('['); + if (Key != null) + { + s.Append(Key.ToString()); + } + s.Append(", "); + if (Value != null) + { + s.Append(Value.ToString()); + } + s.Append(", "); + if (IconKey != null) + { + s.Append(IconKey); + } + s.Append(']'); + return s.ToString(); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/LineSeparatedObjectListView.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/LineSeparatedObjectListView.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/controls/LineSeparatedObjectListView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/LineSeparatedObjectListView.cs index b9a3948765..75589f0ca8 100644 --- a/source/ch/cyberduck/ui/winforms/controls/LineSeparatedObjectListView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/LineSeparatedObjectListView.cs @@ -1,46 +1,46 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using System.Drawing; -using System.Windows.Forms; -using BrightIdeasSoftware; - -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - /// - /// ListView with a line between each item - /// - public class LineSeparatedObjectListView : ObjectListView - { - protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e) - { - base.OnDrawSubItem(e); - Rectangle bounds = e.Bounds; - //we need this minus 1 to draw the line within the bounds ot the current item. Otherwise it gets - //overpainted by the next item - e.Graphics.DrawLine(_pen, bounds.Left, bounds.Bottom -1 , bounds.Right, bounds.Bottom -1); - } - - private Pen _pen = new Pen(Color.FromKnownColor(KnownColor.ControlLight), 1); - public Pen Pen - { - get { return _pen; } - set { _pen = value; } - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using System.Drawing; +using System.Windows.Forms; +using BrightIdeasSoftware; + +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + /// + /// ListView with a line between each item + /// + public class LineSeparatedObjectListView : ObjectListView + { + protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e) + { + base.OnDrawSubItem(e); + Rectangle bounds = e.Bounds; + //we need this minus 1 to draw the line within the bounds ot the current item. Otherwise it gets + //overpainted by the next item + e.Graphics.DrawLine(_pen, bounds.Left, bounds.Bottom -1 , bounds.Right, bounds.Bottom -1); + } + + private Pen _pen = new Pen(Color.FromKnownColor(KnownColor.ControlLight), 1); + public Pen Pen + { + get { return _pen; } + set { _pen = value; } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/ListViewControls.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ListViewControls.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/controls/ListViewControls.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ListViewControls.cs index c30568555f..12b4fc7a1b 100644 --- a/source/ch/cyberduck/ui/winforms/controls/ListViewControls.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ListViewControls.cs @@ -1,327 +1,327 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections; -using System.ComponentModel; -using System.Drawing; -using System.Runtime.InteropServices; -using System.Windows.Forms; -using BrightIdeasSoftware; - -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - /// - /// ListView with embedded controls support - /// - public class ListViewControls : ObjectListView - { - // ListView messages - private const int LVM_FIRST = 0x1000; - private const int LVM_GETCOLUMNORDERARRAY = (LVM_FIRST + 59); - - // Windows Messages - private const int WM_HSCROLL = 0x114; - private const int WM_PAINT = 0x000F; - private const int WM_VSCROLL = 0x115; - - private readonly ArrayList _embeddedControls = new ArrayList(); - - public ListViewControls() - { - SetStyle( - ControlStyles.AllPaintingInWmPaint | - ControlStyles.DoubleBuffer, true); - } - - [DefaultValue(View.LargeIcon)] - public new View View - { - get { return base.View; } - set - { - // Embedded controls are rendered only when we're in Details mode - foreach (EmbeddedControl ec in _embeddedControls) - ec.Control.Visible = (value == View.Details); - - base.View = value; - } - } - - [DllImport("user32.dll")] - private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wPar, IntPtr lPar); - - /// - /// Retrieve the order in which columns appear - /// - /// Current display order of column indices - protected int[] GetColumnOrder() - { - IntPtr lPar = Marshal.AllocHGlobal(Marshal.SizeOf(typeof (int))*Columns.Count); - - IntPtr res = SendMessage(Handle, LVM_GETCOLUMNORDERARRAY, new IntPtr(Columns.Count), lPar); - if (res.ToInt32() == 0) // Something went wrong - { - Marshal.FreeHGlobal(lPar); - return null; - } - - int[] order = new int[Columns.Count]; - Marshal.Copy(lPar, order, 0, Columns.Count); - - Marshal.FreeHGlobal(lPar); - - return order; - } - - /// - /// Retrieve the bounds of a ListViewSubItem - /// - /// The Item containing the SubItem - /// Index of the SubItem - /// Subitem's bounds - protected Rectangle GetSubItemBounds(ListViewItem Item, int SubItem) - { - Rectangle subItemRect = Rectangle.Empty; - - if (Item == null) - throw new ArgumentNullException("Item"); - - int[] order = GetColumnOrder(); - if (order == null) // No Columns - return subItemRect; - - if (SubItem >= order.Length) - throw new IndexOutOfRangeException("SubItem " + SubItem + " out of range"); - - // Retrieve the bounds of the entire ListViewItem (all subitems) - Rectangle lviBounds = Item.GetBounds(ItemBoundsPortion.Entire); - int subItemX = lviBounds.Left; - - // Calculate the X position of the SubItem. - // Because the columns can be reordered we have to use Columns[order[i]] instead of Columns[i] ! - ColumnHeader col; - int i; - for (i = 0; i < order.Length; i++) - { - col = Columns[order[i]]; - if (col.Index == SubItem) - break; - subItemX += col.Width; - } - - subItemRect = new Rectangle(subItemX, lviBounds.Top, Columns[order[i]].Width, lviBounds.Height); - - return subItemRect; - } - - /// - /// Add a control to the ListView - /// - /// Control to be added - /// Index of column - /// Index of row - public void AddEmbeddedControl(Control c, int col, int row) - { - AddEmbeddedControl(c, col, row, DockStyle.Fill); - } - - /// - /// Add a control to the ListView - /// - /// Control to be added - /// Index of column - /// Index of row - /// Location and resize behavior of embedded control - public void AddEmbeddedControl(Control c, int col, int row, DockStyle dock) - { - if (c == null) - throw new ArgumentNullException(); - if (col >= Columns.Count || row >= Items.Count) - throw new ArgumentOutOfRangeException(); - - EmbeddedControl ec = new EmbeddedControl(); - ec.Control = c; - ec.Column = col; - ec.Row = row; - ec.Dock = dock; - ec.Item = Items[row]; - - _embeddedControls.Add(ec); - - // Add a Click event handler to select the ListView row when an embedded control is clicked - c.Click += _embeddedControl_Click; - Controls.Add(c); - } - - /// - /// Remove all controls from the ListView - /// - public void RemoveAllEmbeddedControls() - { - foreach (EmbeddedControl control in _embeddedControls) - { - control.Control.Click -= _embeddedControl_Click; - Controls.Remove(control.Control); - } - _embeddedControls.Clear(); - } - - /// - /// Remove a control from the ListView - /// - /// Control to be removed - public void RemoveEmbeddedControl(Control c) - { - if (c == null) - throw new ArgumentNullException(); - bool found = false; - for (int i = 0; i < _embeddedControls.Count; i++) - { - EmbeddedControl ec = (EmbeddedControl) _embeddedControls[i]; - if (ec.Control == c) - { - c.Click -= _embeddedControl_Click; - Controls.Remove(c); - _embeddedControls.RemoveAt(i); - found = true; - } - if (found && i < _embeddedControls.Count) - { - ec = (EmbeddedControl) _embeddedControls[i]; - ec.Row--; - } - } - } - - /// - /// Retrieve the control embedded at a given location - /// - /// Index of Column - /// Index of Row - /// Control found at given location or null if none assigned. - public Control GetEmbeddedControl(int col, int row) - { - foreach (EmbeddedControl ec in _embeddedControls) - if (ec.Row == row && ec.Column == col) - return ec.Control; - - return null; - } - - protected override void WndProc(ref Message m) - { - switch (m.Msg) - { - case WM_HSCROLL: - case WM_VSCROLL: - case WM_PAINT: - - if (View != View.Details) - break; - - // Calculate the position of all embedded controls - foreach (EmbeddedControl ec in _embeddedControls) - { - Rectangle rc = GetSubItemBounds(ec.Item, ec.Column); - // preserve 1 pixel for the gridline - rc.Height--; - - if ((HeaderStyle != ColumnHeaderStyle.None) && - (rc.Top < Font.Height)) // Control overlaps ColumnHeader - { - ec.Control.Visible = false; - continue; - } - if (rc.Top > ClientRectangle.Height) - { - ec.Control.Visible = false; - continue; - } - ec.Control.Visible = true; - - switch (ec.Dock) - { - case DockStyle.Fill: - break; - case DockStyle.Top: - rc.Height = ec.Control.Height; - break; - case DockStyle.Left: - rc.Width = ec.Control.Width; - break; - case DockStyle.Bottom: - rc.Offset(0, rc.Height - ec.Control.Height); - rc.Height = ec.Control.Height; - break; - case DockStyle.Right: - rc.Offset(rc.Width - ec.Control.Width, 0); - rc.Width = ec.Control.Width; - break; - case DockStyle.None: - rc.Size = ec.Control.Size; - break; - } - - // Set embedded control's bounds - ec.Control.Bounds = rc; - } - break; - } - base.WndProc(ref m); - } - - private void _embeddedControl_Click(object sender, EventArgs e) - { - // When a control is clicked the ListViewItem holding it is selected - foreach (EmbeddedControl ec in _embeddedControls) - { - if (ec.Control == sender) - { - // multiselection must be possible - if (ModifierKeys != Keys.Control) - { - SelectedItems.Clear(); - ec.Item.Selected = true; - } - else - { - // last selection cannot be removed - if (!(SelectedItems.Count == 1 && ec.Item.Selected)) - { - ec.Item.Selected = !ec.Item.Selected; - } - } - ec.Item.Focused = true; - } - } - } - - /// - /// Structure to hold an embedded control's info - /// - private class EmbeddedControl - { - public int Column; - public Control Control; - public DockStyle Dock; - public ListViewItem Item; - public int Row; - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections; +using System.ComponentModel; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using BrightIdeasSoftware; + +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + /// + /// ListView with embedded controls support + /// + public class ListViewControls : ObjectListView + { + // ListView messages + private const int LVM_FIRST = 0x1000; + private const int LVM_GETCOLUMNORDERARRAY = (LVM_FIRST + 59); + + // Windows Messages + private const int WM_HSCROLL = 0x114; + private const int WM_PAINT = 0x000F; + private const int WM_VSCROLL = 0x115; + + private readonly ArrayList _embeddedControls = new ArrayList(); + + public ListViewControls() + { + SetStyle( + ControlStyles.AllPaintingInWmPaint | + ControlStyles.DoubleBuffer, true); + } + + [DefaultValue(View.LargeIcon)] + public new View View + { + get { return base.View; } + set + { + // Embedded controls are rendered only when we're in Details mode + foreach (EmbeddedControl ec in _embeddedControls) + ec.Control.Visible = (value == View.Details); + + base.View = value; + } + } + + [DllImport("user32.dll")] + private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wPar, IntPtr lPar); + + /// + /// Retrieve the order in which columns appear + /// + /// Current display order of column indices + protected int[] GetColumnOrder() + { + IntPtr lPar = Marshal.AllocHGlobal(Marshal.SizeOf(typeof (int))*Columns.Count); + + IntPtr res = SendMessage(Handle, LVM_GETCOLUMNORDERARRAY, new IntPtr(Columns.Count), lPar); + if (res.ToInt32() == 0) // Something went wrong + { + Marshal.FreeHGlobal(lPar); + return null; + } + + int[] order = new int[Columns.Count]; + Marshal.Copy(lPar, order, 0, Columns.Count); + + Marshal.FreeHGlobal(lPar); + + return order; + } + + /// + /// Retrieve the bounds of a ListViewSubItem + /// + /// The Item containing the SubItem + /// Index of the SubItem + /// Subitem's bounds + protected Rectangle GetSubItemBounds(ListViewItem Item, int SubItem) + { + Rectangle subItemRect = Rectangle.Empty; + + if (Item == null) + throw new ArgumentNullException("Item"); + + int[] order = GetColumnOrder(); + if (order == null) // No Columns + return subItemRect; + + if (SubItem >= order.Length) + throw new IndexOutOfRangeException("SubItem " + SubItem + " out of range"); + + // Retrieve the bounds of the entire ListViewItem (all subitems) + Rectangle lviBounds = Item.GetBounds(ItemBoundsPortion.Entire); + int subItemX = lviBounds.Left; + + // Calculate the X position of the SubItem. + // Because the columns can be reordered we have to use Columns[order[i]] instead of Columns[i] ! + ColumnHeader col; + int i; + for (i = 0; i < order.Length; i++) + { + col = Columns[order[i]]; + if (col.Index == SubItem) + break; + subItemX += col.Width; + } + + subItemRect = new Rectangle(subItemX, lviBounds.Top, Columns[order[i]].Width, lviBounds.Height); + + return subItemRect; + } + + /// + /// Add a control to the ListView + /// + /// Control to be added + /// Index of column + /// Index of row + public void AddEmbeddedControl(Control c, int col, int row) + { + AddEmbeddedControl(c, col, row, DockStyle.Fill); + } + + /// + /// Add a control to the ListView + /// + /// Control to be added + /// Index of column + /// Index of row + /// Location and resize behavior of embedded control + public void AddEmbeddedControl(Control c, int col, int row, DockStyle dock) + { + if (c == null) + throw new ArgumentNullException(); + if (col >= Columns.Count || row >= Items.Count) + throw new ArgumentOutOfRangeException(); + + EmbeddedControl ec = new EmbeddedControl(); + ec.Control = c; + ec.Column = col; + ec.Row = row; + ec.Dock = dock; + ec.Item = Items[row]; + + _embeddedControls.Add(ec); + + // Add a Click event handler to select the ListView row when an embedded control is clicked + c.Click += _embeddedControl_Click; + Controls.Add(c); + } + + /// + /// Remove all controls from the ListView + /// + public void RemoveAllEmbeddedControls() + { + foreach (EmbeddedControl control in _embeddedControls) + { + control.Control.Click -= _embeddedControl_Click; + Controls.Remove(control.Control); + } + _embeddedControls.Clear(); + } + + /// + /// Remove a control from the ListView + /// + /// Control to be removed + public void RemoveEmbeddedControl(Control c) + { + if (c == null) + throw new ArgumentNullException(); + bool found = false; + for (int i = 0; i < _embeddedControls.Count; i++) + { + EmbeddedControl ec = (EmbeddedControl) _embeddedControls[i]; + if (ec.Control == c) + { + c.Click -= _embeddedControl_Click; + Controls.Remove(c); + _embeddedControls.RemoveAt(i); + found = true; + } + if (found && i < _embeddedControls.Count) + { + ec = (EmbeddedControl) _embeddedControls[i]; + ec.Row--; + } + } + } + + /// + /// Retrieve the control embedded at a given location + /// + /// Index of Column + /// Index of Row + /// Control found at given location or null if none assigned. + public Control GetEmbeddedControl(int col, int row) + { + foreach (EmbeddedControl ec in _embeddedControls) + if (ec.Row == row && ec.Column == col) + return ec.Control; + + return null; + } + + protected override void WndProc(ref Message m) + { + switch (m.Msg) + { + case WM_HSCROLL: + case WM_VSCROLL: + case WM_PAINT: + + if (View != View.Details) + break; + + // Calculate the position of all embedded controls + foreach (EmbeddedControl ec in _embeddedControls) + { + Rectangle rc = GetSubItemBounds(ec.Item, ec.Column); + // preserve 1 pixel for the gridline + rc.Height--; + + if ((HeaderStyle != ColumnHeaderStyle.None) && + (rc.Top < Font.Height)) // Control overlaps ColumnHeader + { + ec.Control.Visible = false; + continue; + } + if (rc.Top > ClientRectangle.Height) + { + ec.Control.Visible = false; + continue; + } + ec.Control.Visible = true; + + switch (ec.Dock) + { + case DockStyle.Fill: + break; + case DockStyle.Top: + rc.Height = ec.Control.Height; + break; + case DockStyle.Left: + rc.Width = ec.Control.Width; + break; + case DockStyle.Bottom: + rc.Offset(0, rc.Height - ec.Control.Height); + rc.Height = ec.Control.Height; + break; + case DockStyle.Right: + rc.Offset(rc.Width - ec.Control.Width, 0); + rc.Width = ec.Control.Width; + break; + case DockStyle.None: + rc.Size = ec.Control.Size; + break; + } + + // Set embedded control's bounds + ec.Control.Bounds = rc; + } + break; + } + base.WndProc(ref m); + } + + private void _embeddedControl_Click(object sender, EventArgs e) + { + // When a control is clicked the ListViewItem holding it is selected + foreach (EmbeddedControl ec in _embeddedControls) + { + if (ec.Control == sender) + { + // multiselection must be possible + if (ModifierKeys != Keys.Control) + { + SelectedItems.Clear(); + ec.Item.Selected = true; + } + else + { + // last selection cannot be removed + if (!(SelectedItems.Count == 1 && ec.Item.Selected)) + { + ec.Item.Selected = !ec.Item.Selected; + } + } + ec.Item.Focused = true; + } + } + } + + /// + /// Structure to hold an embedded control's info + /// + private class EmbeddedControl + { + public int Column; + public Control Control; + public DockStyle Dock; + public ListViewItem Item; + public int Row; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/MulticolorTreeListView.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/MulticolorTreeListView.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/controls/MulticolorTreeListView.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/MulticolorTreeListView.cs index d592c1f3de..b86f040ac9 100644 --- a/source/ch/cyberduck/ui/winforms/controls/MulticolorTreeListView.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/MulticolorTreeListView.cs @@ -1,183 +1,183 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; -using BrightIdeasSoftware; -using ch.cyberduck.core; -using ch.cyberduck.core.transfer; -using ch.cyberduck.ui.comparator; -using org.apache.commons.io; - -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - /// - /// TreeListView that offers a different row text color based on the linked model object - /// - public class MulticolorTreeListView : TreeListView - { - public delegate bool ActiveGetterPathDelegate(Path path); - - public delegate bool ActiveGetterTransferItemDelegate(TransferItem path); - - private const int IconSize = 16; - private Color _activeForegroudColor = DefaultForeColor; - private ActiveGetterPathDelegate _activeGetterPath = reference => true; - private ActiveGetterTransferItemDelegate _activeGetterTransferItem = reference => true; - private Color _inactiveForegroudColor = Color.Gray; - - public ActiveGetterTransferItemDelegate ActiveGetterTransferItem - { - get { return _activeGetterTransferItem; } - set { _activeGetterTransferItem = value; } - } - - public ActiveGetterPathDelegate ActiveGetterPath - { - get { return _activeGetterPath; } - set { _activeGetterPath = value; } - } - - public Color ActiveForegroudColor - { - get { return _activeForegroudColor; } - set { _activeForegroudColor = value; } - } - - public Color InactiveForegroudColor - { - get { return _inactiveForegroudColor; } - set { _inactiveForegroudColor = value; } - } - - protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e) - { - object o = ((OLVListItem) e.Item).RowObject; - if (o is TransferItem) - { - TransferItem item = (TransferItem) o; - e.Item.ForeColor = ActiveGetterTransferItem(item) ? ActiveForegroudColor : InactiveForegroudColor; - } - if (o is Path) - { - Path path = (Path) o; - e.Item.ForeColor = ActiveGetterPath(path) ? ActiveForegroudColor : InactiveForegroudColor; - } - base.OnDrawSubItem(e); - } - - protected override void ShowColumnSelectMenu(Point pt) - { - ToolStripDropDown m = MakeColumnSelectMenu(new ContextMenuStrip()); - ContextMenu cm = new ContextMenu(); - foreach (ToolStripMenuItem item in m.Items) - { - ToolStripMenuItem item1 = item; - MenuItem nItem = new MenuItem(LocaleFactory.localizedString(item.Text, "Localizable"), - delegate { item1.PerformClick(); }); //forward click event - nItem.Checked = item.Checked; - cm.MenuItems.Add(nItem); - } - cm.Show(this, PointToClient(pt)); //transform coordinates - } - - protected override void OnCellEditStarting(CellEditEventArgs e) - { - e.Control.AutoSize = false; - e.Control.Bounds = new Rectangle(e.Control.Bounds.X + IconSize, e.Control.Bounds.Y, - e.Control.Bounds.Width - IconSize, e.Control.Bounds.Height); - if (e.Control is TextBox) - { - //Only select filename part w/o extension (Explorer like behavior) - TextBox tb = e.Control as TextBox; - int extensionIndex = FilenameUtils.indexOfExtension((string) e.Value); - if (extensionIndex > -1) - { - tb.Select(0, extensionIndex); - } - } - base.OnCellEditStarting(e); - } - - protected override void OnKeyDown(KeyEventArgs e) - { - OLVListItem focused = FocusedItem as OLVListItem; - if (focused == null) - { - base.OnKeyDown(e); - return; - } - switch (e.KeyCode) - { - case Keys.Left: - if (SelectedObjects.Count > 1) - { - foreach (var o in SelectedObjects) - { - Branch br = TreeModel.GetBranch(o); - if (br.IsExpanded) - Collapse(o); - } - } - else - { - // If the branch is expanded, collapse it. If it's collapsed, - // select the parent of the branch. - Branch br = TreeModel.GetBranch(focused.RowObject); - if (br.IsExpanded) - Collapse(focused.RowObject); - else - { - if (br.ParentBranch != null && br.ParentBranch.Model != null) - SelectObject(br.ParentBranch.Model, true); - } - } - e.Handled = true; - break; - - case Keys.Right: - foreach (var o in SelectedObjects) - { - Branch br = TreeModel.GetBranch(o); - if (br.IsExpanded) - { - List filtered = br.FilteredChildBranches; - if (filtered.Count > 0) - SelectObject(filtered[0].Model, true); - } - else - { - if (br.CanExpand) - Expand(o); - } - } - e.Handled = true; - break; - } - base.OnKeyDown(e); - } - } - - public class SortComparatorOLVColumn : OLVColumn - { - public delegate BrowserComparator SortComparatorDelegate(SortOrder order); - - public SortComparatorDelegate ComparatorGetter; - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using BrightIdeasSoftware; +using ch.cyberduck.core; +using ch.cyberduck.core.transfer; +using ch.cyberduck.ui.comparator; +using org.apache.commons.io; + +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + /// + /// TreeListView that offers a different row text color based on the linked model object + /// + public class MulticolorTreeListView : TreeListView + { + public delegate bool ActiveGetterPathDelegate(Path path); + + public delegate bool ActiveGetterTransferItemDelegate(TransferItem path); + + private const int IconSize = 16; + private Color _activeForegroudColor = DefaultForeColor; + private ActiveGetterPathDelegate _activeGetterPath = reference => true; + private ActiveGetterTransferItemDelegate _activeGetterTransferItem = reference => true; + private Color _inactiveForegroudColor = Color.Gray; + + public ActiveGetterTransferItemDelegate ActiveGetterTransferItem + { + get { return _activeGetterTransferItem; } + set { _activeGetterTransferItem = value; } + } + + public ActiveGetterPathDelegate ActiveGetterPath + { + get { return _activeGetterPath; } + set { _activeGetterPath = value; } + } + + public Color ActiveForegroudColor + { + get { return _activeForegroudColor; } + set { _activeForegroudColor = value; } + } + + public Color InactiveForegroudColor + { + get { return _inactiveForegroudColor; } + set { _inactiveForegroudColor = value; } + } + + protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e) + { + object o = ((OLVListItem) e.Item).RowObject; + if (o is TransferItem) + { + TransferItem item = (TransferItem) o; + e.Item.ForeColor = ActiveGetterTransferItem(item) ? ActiveForegroudColor : InactiveForegroudColor; + } + if (o is Path) + { + Path path = (Path) o; + e.Item.ForeColor = ActiveGetterPath(path) ? ActiveForegroudColor : InactiveForegroudColor; + } + base.OnDrawSubItem(e); + } + + protected override void ShowColumnSelectMenu(Point pt) + { + ToolStripDropDown m = MakeColumnSelectMenu(new ContextMenuStrip()); + ContextMenu cm = new ContextMenu(); + foreach (ToolStripMenuItem item in m.Items) + { + ToolStripMenuItem item1 = item; + MenuItem nItem = new MenuItem(LocaleFactory.localizedString(item.Text, "Localizable"), + delegate { item1.PerformClick(); }); //forward click event + nItem.Checked = item.Checked; + cm.MenuItems.Add(nItem); + } + cm.Show(this, PointToClient(pt)); //transform coordinates + } + + protected override void OnCellEditStarting(CellEditEventArgs e) + { + e.Control.AutoSize = false; + e.Control.Bounds = new Rectangle(e.Control.Bounds.X + IconSize, e.Control.Bounds.Y, + e.Control.Bounds.Width - IconSize, e.Control.Bounds.Height); + if (e.Control is TextBox) + { + //Only select filename part w/o extension (Explorer like behavior) + TextBox tb = e.Control as TextBox; + int extensionIndex = FilenameUtils.indexOfExtension((string) e.Value); + if (extensionIndex > -1) + { + tb.Select(0, extensionIndex); + } + } + base.OnCellEditStarting(e); + } + + protected override void OnKeyDown(KeyEventArgs e) + { + OLVListItem focused = FocusedItem as OLVListItem; + if (focused == null) + { + base.OnKeyDown(e); + return; + } + switch (e.KeyCode) + { + case Keys.Left: + if (SelectedObjects.Count > 1) + { + foreach (var o in SelectedObjects) + { + Branch br = TreeModel.GetBranch(o); + if (br.IsExpanded) + Collapse(o); + } + } + else + { + // If the branch is expanded, collapse it. If it's collapsed, + // select the parent of the branch. + Branch br = TreeModel.GetBranch(focused.RowObject); + if (br.IsExpanded) + Collapse(focused.RowObject); + else + { + if (br.ParentBranch != null && br.ParentBranch.Model != null) + SelectObject(br.ParentBranch.Model, true); + } + } + e.Handled = true; + break; + + case Keys.Right: + foreach (var o in SelectedObjects) + { + Branch br = TreeModel.GetBranch(o); + if (br.IsExpanded) + { + List filtered = br.FilteredChildBranches; + if (filtered.Count > 0) + SelectObject(filtered[0].Model, true); + } + else + { + if (br.CanExpand) + Expand(o); + } + } + e.Handled = true; + break; + } + base.OnKeyDown(e); + } + } + + public class SortComparatorOLVColumn : OLVColumn + { + public delegate BrowserComparator SortComparatorDelegate(SortOrder order); + + public SortComparatorDelegate ComparatorGetter; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/PanelManager.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/PanelManager.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/controls/PanelManager.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/PanelManager.cs index 1f6053a881..8376488e0a 100644 --- a/source/ch/cyberduck/ui/winforms/controls/PanelManager.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/PanelManager.cs @@ -1,459 +1,459 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.Drawing.Design; -using System.Drawing.Drawing2D; -using System.Windows.Forms; -using System.Windows.Forms.Design; - -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - [DefaultProperty("SelectedPanel")] - [DefaultEvent("SelectedIndexChanged")] - [Designer(typeof (PanelManagerDesigner))] - public class PanelManager : Control - { - /// - /// Required designer variable. - /// - private Container components; - - private ManagedPanel m_SelectedPanel; - private ManagedPanel oldSelection; - - public PanelManager() - { - // This call is required by the Windows.Forms Form Designer. - InitializeComponent(); - } - - //ManagedPanels - [Editor(typeof (ManagedPanelCollectionEditor), typeof (UITypeEditor))] - public ControlCollection ManagedPanels - { - get { return base.Controls; } - } - - - //SelectedPanel - [TypeConverter(typeof (SelectedPanelConverter))] - public ManagedPanel SelectedPanel - { - get { return m_SelectedPanel; } - set - { - if (m_SelectedPanel == value) return; - m_SelectedPanel = value; - OnSelectedPanelChanged(EventArgs.Empty); - } - } - - - //SelectedIndex - [Browsable(false)] - public int SelectedIndex - { - get { return ManagedPanels.IndexOf(SelectedPanel); } - set - { - if (value == -1) - SelectedPanel = null; - else - SelectedPanel = (ManagedPanel) ManagedPanels[value]; - } - } - - - //DefaultSize - protected override Size DefaultSize - { - get { return new Size(200, 100); } - } - - /// - /// Clean up any resources being used. - /// - protected override void Dispose(bool disposing) - { - if (disposing) - { - if (components != null) - { - components.Dispose(); - } - } - base.Dispose(disposing); - } - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - components = new Container(); - } - - public event EventHandler SelectedIndexChanged; - - - protected void OnSelectedPanelChanged(EventArgs e) - { - if (oldSelection != null) - oldSelection.Visible = false; - - if (m_SelectedPanel != null) - (m_SelectedPanel).Visible = true; - - bool tabChanged = false; - if (m_SelectedPanel == null) - tabChanged = (oldSelection != null); - else - tabChanged = (!m_SelectedPanel.Equals(oldSelection)); - - if (tabChanged && Created) - if (SelectedIndexChanged != null) - SelectedIndexChanged(this, EventArgs.Empty); - - oldSelection = m_SelectedPanel; - } - - - protected override void OnControlAdded(ControlEventArgs e) - { - if ((e.Control is ManagedPanel) == false) - throw new ArgumentException( - "Only Mangel.Controls.ManagedPanels can be added to a Mangel.Controls.PanelManger."); - - if (SelectedPanel != null) - (SelectedPanel).Visible = false; - - SelectedPanel = (ManagedPanel) e.Control; - e.Control.Visible = true; - base.OnControlAdded(e); - } - - - protected override void OnControlRemoved(ControlEventArgs e) - { - if (e.Control is ManagedPanel) - { - if (ManagedPanels.Count > 0) - SelectedIndex = 0; - else - SelectedPanel = null; - } - base.OnControlRemoved(e); - } - } - - - [Designer(typeof (ManagedPanelDesigner))] - [ToolboxItem(false)] - public class ManagedPanel : ScrollableControl - { - public ManagedPanel() - { - base.Dock = DockStyle.Fill; - SetStyle(ControlStyles.ResizeRedraw, true); - } - - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - [DefaultValue(typeof (DockStyle), "Fill")] - public override DockStyle Dock - { - get { return base.Dock; } - set { base.Dock = DockStyle.Fill; } - } - - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - [DefaultValue(typeof (AnchorStyles), "None")] - public override AnchorStyles Anchor - { - get { return AnchorStyles.None; } - set { base.Anchor = AnchorStyles.None; } - } - - - protected override void OnLocationChanged(EventArgs e) - { - base.OnLocationChanged(e); - base.Location = Point.Empty; - } - - - protected override void OnSizeChanged(EventArgs e) - { - base.OnSizeChanged(e); - if (Parent == null) - Size = Size.Empty; - else - Size = Parent.ClientSize; - } - - - protected override void OnParentChanged(EventArgs e) - { - if ((Parent is PanelManager) == false && Parent != null) - throw new ArgumentException("Managed Panels may only be added to a Panel Manager."); - base.OnParentChanged(e); - } - } - - public class PanelManagerDesigner : ParentControlDesigner - { - private readonly DesignerVerbCollection m_verbs = new DesignerVerbCollection(); - private IDesignerHost m_DesignerHost; - private ISelectionService m_SelectionService; - - - public PanelManagerDesigner() - { - DesignerVerb verb1 = new DesignerVerb("Add MangedPanel", OnAddPanel); - DesignerVerb verb2 = new DesignerVerb("Remove ManagedPanel", OnRemovePanel); - m_verbs.AddRange(new[] {verb1, verb2}); - } - - private PanelManager HostControl - { - get { return (PanelManager) Control; } - } - - - public override DesignerVerbCollection Verbs - { - get - { - if (m_verbs.Count == 2) - m_verbs[1].Enabled = HostControl.ManagedPanels.Count > 0; - return m_verbs; - } - } - - - public IDesignerHost DesignerHost - { - get - { - if (m_DesignerHost == null) - m_DesignerHost = (IDesignerHost) GetService(typeof (IDesignerHost)); - return m_DesignerHost; - } - } - - - public ISelectionService SelectionService - { - get - { - if (m_SelectionService == null) - m_SelectionService = (ISelectionService) GetService(typeof (ISelectionService)); - - return m_SelectionService; - } - } - - protected override void OnPaintAdornments(PaintEventArgs pe) - { - // Don't want DrawGrid Dots. - } - - - private void OnAddPanel(Object sender, EventArgs e) - { - Control.ControlCollection oldManagedPanels = HostControl.Controls; - - RaiseComponentChanging(TypeDescriptor.GetProperties(HostControl)["ManagedPanels"]); - - ManagedPanel P = (ManagedPanel) DesignerHost.CreateComponent(typeof (ManagedPanel)); - P.Text = P.Name; - HostControl.ManagedPanels.Add(P); - - RaiseComponentChanged(TypeDescriptor.GetProperties(HostControl)["ManagedPanels"], oldManagedPanels, - HostControl.ManagedPanels); - HostControl.SelectedPanel = P; - - SetVerbs(); - } - - - private void OnRemovePanel(Object sender, EventArgs e) - { - Control.ControlCollection oldManagedPanels = HostControl.Controls; - - if (HostControl.SelectedIndex < 0) return; - - RaiseComponentChanging(TypeDescriptor.GetProperties(HostControl)["TabPages"]); - - DesignerHost.DestroyComponent(HostControl.ManagedPanels[HostControl.SelectedIndex]); - - RaiseComponentChanged(TypeDescriptor.GetProperties(HostControl)["ManagedPanels"], oldManagedPanels, - HostControl.ManagedPanels); - - SelectionService.SetSelectedComponents(new IComponent[] {HostControl}, SelectionTypes.Auto); - - SetVerbs(); - } - - - private void SetVerbs() - { - Verbs[1].Enabled = HostControl.ManagedPanels.Count == 1; - } - - - protected override void PostFilterProperties(IDictionary properties) - { - properties.Remove("AutoScroll"); - properties.Remove("AutoScrollMargin"); - properties.Remove("AutoScrollMinSize"); - properties.Remove("Text"); - base.PostFilterProperties(properties); - } - - - [Obsolete("This method has been deprecated. Use InitializeNewComponent instead. http://go.microsoft.com/fwlink/?linkid=14202")] - public override void OnSetComponentDefaults() - { - HostControl.ManagedPanels.Add((ManagedPanel) DesignerHost.CreateComponent(typeof (ManagedPanel))); - HostControl.ManagedPanels.Add((ManagedPanel) DesignerHost.CreateComponent(typeof (ManagedPanel))); - PanelManager pm = (PanelManager) Control; - pm.ManagedPanels[0].Text = pm.ManagedPanels[0].Name; - pm.ManagedPanels[1].Text = pm.ManagedPanels[1].Name; - HostControl.SelectedIndex = 0; - } - } - - - public class ManagedPanelDesigner : ScrollableControlDesigner - { - private readonly DesignerVerbCollection m_verbs = new DesignerVerbCollection(); - private ISelectionService m_SelectionService; - - public ManagedPanelDesigner() - { - DesignerVerb verb1 = new DesignerVerb("Select PanelManager", OnSelectManager); - m_verbs.Add(verb1); - } - - private ManagedPanel HostControl - { - get { return (ManagedPanel) Control; } - } - - - public ISelectionService SelectionService - { - get - { - if (m_SelectionService == null) - m_SelectionService = (ISelectionService) GetService(typeof (ISelectionService)); - - return m_SelectionService; - } - } - - - public override SelectionRules SelectionRules - { - get { return SelectionRules.Visible; } - } - - - public override DesignerVerbCollection Verbs - { - get { return m_verbs; } - } - - private void OnSelectManager(Object sender, EventArgs e) - { - if (HostControl.Parent != null) - SelectionService.SetSelectedComponents(new Component[] {HostControl.Parent}); - } - - protected override void OnPaintAdornments(PaintEventArgs pe) - { - base.OnPaintAdornments(pe); - Color penColor; - if (Control.BackColor.GetBrightness() >= 0.5) - penColor = ControlPaint.Dark(Control.BackColor); - else - penColor = Color.White; - - Pen dashedPen = new Pen(penColor); - Rectangle borderRectangle = Control.ClientRectangle; - borderRectangle.Width -= 1; - borderRectangle.Height -= 1; - dashedPen.DashStyle = DashStyle.Dash; - pe.Graphics.DrawRectangle(dashedPen, borderRectangle); - dashedPen.Dispose(); - } - - - protected override void PostFilterProperties(IDictionary properties) - { - properties.Remove("Anchor"); - properties.Remove("TabStop"); - properties.Remove("TabIndex"); - base.PostFilterProperties(properties); - } - - - [Obsolete("This method has been deprecated. Use InitializeNewComponent instead. http://go.microsoft.com/fwlink/?linkid=14202")] - public override void OnSetComponentDefaults() - { - base.OnSetComponentDefaults(); - Control.Visible = true; - } - } - - public class ManagedPanelCollectionEditor : CollectionEditor - { - public ManagedPanelCollectionEditor(Type type) : base(type) - { - } - - protected override Type CreateCollectionItemType() - { - return typeof (ManagedPanel); - } - } - - public class SelectedPanelConverter : ReferenceConverter - { - public SelectedPanelConverter() : base(typeof (ManagedPanel)) - { - } - - protected override bool IsValueAllowed(ITypeDescriptorContext context, object value) - { - if (context != null) - { - PanelManager pm = (PanelManager) context.Instance; - return pm.ManagedPanels.Contains((ManagedPanel) value); - } - return false; - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.Drawing; +using System.Drawing.Design; +using System.Drawing.Drawing2D; +using System.Windows.Forms; +using System.Windows.Forms.Design; + +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + [DefaultProperty("SelectedPanel")] + [DefaultEvent("SelectedIndexChanged")] + [Designer(typeof (PanelManagerDesigner))] + public class PanelManager : Control + { + /// + /// Required designer variable. + /// + private Container components; + + private ManagedPanel m_SelectedPanel; + private ManagedPanel oldSelection; + + public PanelManager() + { + // This call is required by the Windows.Forms Form Designer. + InitializeComponent(); + } + + //ManagedPanels + [Editor(typeof (ManagedPanelCollectionEditor), typeof (UITypeEditor))] + public ControlCollection ManagedPanels + { + get { return base.Controls; } + } + + + //SelectedPanel + [TypeConverter(typeof (SelectedPanelConverter))] + public ManagedPanel SelectedPanel + { + get { return m_SelectedPanel; } + set + { + if (m_SelectedPanel == value) return; + m_SelectedPanel = value; + OnSelectedPanelChanged(EventArgs.Empty); + } + } + + + //SelectedIndex + [Browsable(false)] + public int SelectedIndex + { + get { return ManagedPanels.IndexOf(SelectedPanel); } + set + { + if (value == -1) + SelectedPanel = null; + else + SelectedPanel = (ManagedPanel) ManagedPanels[value]; + } + } + + + //DefaultSize + protected override Size DefaultSize + { + get { return new Size(200, 100); } + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (components != null) + { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new Container(); + } + + public event EventHandler SelectedIndexChanged; + + + protected void OnSelectedPanelChanged(EventArgs e) + { + if (oldSelection != null) + oldSelection.Visible = false; + + if (m_SelectedPanel != null) + (m_SelectedPanel).Visible = true; + + bool tabChanged = false; + if (m_SelectedPanel == null) + tabChanged = (oldSelection != null); + else + tabChanged = (!m_SelectedPanel.Equals(oldSelection)); + + if (tabChanged && Created) + if (SelectedIndexChanged != null) + SelectedIndexChanged(this, EventArgs.Empty); + + oldSelection = m_SelectedPanel; + } + + + protected override void OnControlAdded(ControlEventArgs e) + { + if ((e.Control is ManagedPanel) == false) + throw new ArgumentException( + "Only Mangel.Controls.ManagedPanels can be added to a Mangel.Controls.PanelManger."); + + if (SelectedPanel != null) + (SelectedPanel).Visible = false; + + SelectedPanel = (ManagedPanel) e.Control; + e.Control.Visible = true; + base.OnControlAdded(e); + } + + + protected override void OnControlRemoved(ControlEventArgs e) + { + if (e.Control is ManagedPanel) + { + if (ManagedPanels.Count > 0) + SelectedIndex = 0; + else + SelectedPanel = null; + } + base.OnControlRemoved(e); + } + } + + + [Designer(typeof (ManagedPanelDesigner))] + [ToolboxItem(false)] + public class ManagedPanel : ScrollableControl + { + public ManagedPanel() + { + base.Dock = DockStyle.Fill; + SetStyle(ControlStyles.ResizeRedraw, true); + } + + + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + [DefaultValue(typeof (DockStyle), "Fill")] + public override DockStyle Dock + { + get { return base.Dock; } + set { base.Dock = DockStyle.Fill; } + } + + + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + [DefaultValue(typeof (AnchorStyles), "None")] + public override AnchorStyles Anchor + { + get { return AnchorStyles.None; } + set { base.Anchor = AnchorStyles.None; } + } + + + protected override void OnLocationChanged(EventArgs e) + { + base.OnLocationChanged(e); + base.Location = Point.Empty; + } + + + protected override void OnSizeChanged(EventArgs e) + { + base.OnSizeChanged(e); + if (Parent == null) + Size = Size.Empty; + else + Size = Parent.ClientSize; + } + + + protected override void OnParentChanged(EventArgs e) + { + if ((Parent is PanelManager) == false && Parent != null) + throw new ArgumentException("Managed Panels may only be added to a Panel Manager."); + base.OnParentChanged(e); + } + } + + public class PanelManagerDesigner : ParentControlDesigner + { + private readonly DesignerVerbCollection m_verbs = new DesignerVerbCollection(); + private IDesignerHost m_DesignerHost; + private ISelectionService m_SelectionService; + + + public PanelManagerDesigner() + { + DesignerVerb verb1 = new DesignerVerb("Add MangedPanel", OnAddPanel); + DesignerVerb verb2 = new DesignerVerb("Remove ManagedPanel", OnRemovePanel); + m_verbs.AddRange(new[] {verb1, verb2}); + } + + private PanelManager HostControl + { + get { return (PanelManager) Control; } + } + + + public override DesignerVerbCollection Verbs + { + get + { + if (m_verbs.Count == 2) + m_verbs[1].Enabled = HostControl.ManagedPanels.Count > 0; + return m_verbs; + } + } + + + public IDesignerHost DesignerHost + { + get + { + if (m_DesignerHost == null) + m_DesignerHost = (IDesignerHost) GetService(typeof (IDesignerHost)); + return m_DesignerHost; + } + } + + + public ISelectionService SelectionService + { + get + { + if (m_SelectionService == null) + m_SelectionService = (ISelectionService) GetService(typeof (ISelectionService)); + + return m_SelectionService; + } + } + + protected override void OnPaintAdornments(PaintEventArgs pe) + { + // Don't want DrawGrid Dots. + } + + + private void OnAddPanel(Object sender, EventArgs e) + { + Control.ControlCollection oldManagedPanels = HostControl.Controls; + + RaiseComponentChanging(TypeDescriptor.GetProperties(HostControl)["ManagedPanels"]); + + ManagedPanel P = (ManagedPanel) DesignerHost.CreateComponent(typeof (ManagedPanel)); + P.Text = P.Name; + HostControl.ManagedPanels.Add(P); + + RaiseComponentChanged(TypeDescriptor.GetProperties(HostControl)["ManagedPanels"], oldManagedPanels, + HostControl.ManagedPanels); + HostControl.SelectedPanel = P; + + SetVerbs(); + } + + + private void OnRemovePanel(Object sender, EventArgs e) + { + Control.ControlCollection oldManagedPanels = HostControl.Controls; + + if (HostControl.SelectedIndex < 0) return; + + RaiseComponentChanging(TypeDescriptor.GetProperties(HostControl)["TabPages"]); + + DesignerHost.DestroyComponent(HostControl.ManagedPanels[HostControl.SelectedIndex]); + + RaiseComponentChanged(TypeDescriptor.GetProperties(HostControl)["ManagedPanels"], oldManagedPanels, + HostControl.ManagedPanels); + + SelectionService.SetSelectedComponents(new IComponent[] {HostControl}, SelectionTypes.Auto); + + SetVerbs(); + } + + + private void SetVerbs() + { + Verbs[1].Enabled = HostControl.ManagedPanels.Count == 1; + } + + + protected override void PostFilterProperties(IDictionary properties) + { + properties.Remove("AutoScroll"); + properties.Remove("AutoScrollMargin"); + properties.Remove("AutoScrollMinSize"); + properties.Remove("Text"); + base.PostFilterProperties(properties); + } + + + [Obsolete("This method has been deprecated. Use InitializeNewComponent instead. http://go.microsoft.com/fwlink/?linkid=14202")] + public override void OnSetComponentDefaults() + { + HostControl.ManagedPanels.Add((ManagedPanel) DesignerHost.CreateComponent(typeof (ManagedPanel))); + HostControl.ManagedPanels.Add((ManagedPanel) DesignerHost.CreateComponent(typeof (ManagedPanel))); + PanelManager pm = (PanelManager) Control; + pm.ManagedPanels[0].Text = pm.ManagedPanels[0].Name; + pm.ManagedPanels[1].Text = pm.ManagedPanels[1].Name; + HostControl.SelectedIndex = 0; + } + } + + + public class ManagedPanelDesigner : ScrollableControlDesigner + { + private readonly DesignerVerbCollection m_verbs = new DesignerVerbCollection(); + private ISelectionService m_SelectionService; + + public ManagedPanelDesigner() + { + DesignerVerb verb1 = new DesignerVerb("Select PanelManager", OnSelectManager); + m_verbs.Add(verb1); + } + + private ManagedPanel HostControl + { + get { return (ManagedPanel) Control; } + } + + + public ISelectionService SelectionService + { + get + { + if (m_SelectionService == null) + m_SelectionService = (ISelectionService) GetService(typeof (ISelectionService)); + + return m_SelectionService; + } + } + + + public override SelectionRules SelectionRules + { + get { return SelectionRules.Visible; } + } + + + public override DesignerVerbCollection Verbs + { + get { return m_verbs; } + } + + private void OnSelectManager(Object sender, EventArgs e) + { + if (HostControl.Parent != null) + SelectionService.SetSelectedComponents(new Component[] {HostControl.Parent}); + } + + protected override void OnPaintAdornments(PaintEventArgs pe) + { + base.OnPaintAdornments(pe); + Color penColor; + if (Control.BackColor.GetBrightness() >= 0.5) + penColor = ControlPaint.Dark(Control.BackColor); + else + penColor = Color.White; + + Pen dashedPen = new Pen(penColor); + Rectangle borderRectangle = Control.ClientRectangle; + borderRectangle.Width -= 1; + borderRectangle.Height -= 1; + dashedPen.DashStyle = DashStyle.Dash; + pe.Graphics.DrawRectangle(dashedPen, borderRectangle); + dashedPen.Dispose(); + } + + + protected override void PostFilterProperties(IDictionary properties) + { + properties.Remove("Anchor"); + properties.Remove("TabStop"); + properties.Remove("TabIndex"); + base.PostFilterProperties(properties); + } + + + [Obsolete("This method has been deprecated. Use InitializeNewComponent instead. http://go.microsoft.com/fwlink/?linkid=14202")] + public override void OnSetComponentDefaults() + { + base.OnSetComponentDefaults(); + Control.Visible = true; + } + } + + public class ManagedPanelCollectionEditor : CollectionEditor + { + public ManagedPanelCollectionEditor(Type type) : base(type) + { + } + + protected override Type CreateCollectionItemType() + { + return typeof (ManagedPanel); + } + } + + public class SelectedPanelConverter : ReferenceConverter + { + public SelectedPanelConverter() : base(typeof (ManagedPanel)) + { + } + + protected override bool IsValueAllowed(ITypeDescriptorContext context, object value) + { + if (context != null) + { + PanelManager pm = (PanelManager) context.Instance; + return pm.ManagedPanels.Contains((ManagedPanel) value); + } + return false; + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/ReadOnlyRichTextBox.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ReadOnlyRichTextBox.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/controls/ReadOnlyRichTextBox.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ReadOnlyRichTextBox.cs index 58f02f1e61..21bad9a905 100644 --- a/source/ch/cyberduck/ui/winforms/controls/ReadOnlyRichTextBox.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/ReadOnlyRichTextBox.cs @@ -1,60 +1,60 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using System.Drawing; -using System.Runtime.InteropServices; -using System.Windows.Forms; -using Ch.Cyberduck.Core; - -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - public class ReadOnlyRichTextBox : RichTextBox - { - public ReadOnlyRichTextBox() - { - ReadOnly = true; - //set the BackColor back to White since ReadOnly=true makes the background grey - BackColor = Color.White; - NativeMethods.SendMessage(Handle, NativeConstants.EM_SETTYPOGRAPHYOPTIONS, - NativeConstants.TO_ADVANCEDTYPOGRAPHY, - NativeConstants.TO_ADVANCEDTYPOGRAPHY); - } - - protected override CreateParams CreateParams - { - get - { - CreateParams p = base.CreateParams; - if (LoadLibrary("msftedit.dll") != IntPtr.Zero) - { - p.ClassName = "RICHEDIT50W"; - } - return p; - } - } - - [DllImport("kernel32.dll", CharSet = CharSet.Auto)] - private static extern IntPtr LoadLibrary(string lpFileName); - - protected override void WndProc(ref Message m) - { - base.WndProc(ref m); - NativeMethods.HideCaret(Handle); - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using Ch.Cyberduck.Core; + +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + public class ReadOnlyRichTextBox : RichTextBox + { + public ReadOnlyRichTextBox() + { + ReadOnly = true; + //set the BackColor back to White since ReadOnly=true makes the background grey + BackColor = Color.White; + NativeMethods.SendMessage(Handle, NativeConstants.EM_SETTYPOGRAPHYOPTIONS, + NativeConstants.TO_ADVANCEDTYPOGRAPHY, + NativeConstants.TO_ADVANCEDTYPOGRAPHY); + } + + protected override CreateParams CreateParams + { + get + { + CreateParams p = base.CreateParams; + if (LoadLibrary("msftedit.dll") != IntPtr.Zero) + { + p.ClassName = "RICHEDIT50W"; + } + return p; + } + } + + [DllImport("kernel32.dll", CharSet = CharSet.Auto)] + private static extern IntPtr LoadLibrary(string lpFileName); + + protected override void WndProc(ref Message m) + { + base.WndProc(ref m); + NativeMethods.HideCaret(Handle); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/SearchTextBox.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/SearchTextBox.Designer.cs similarity index 98% rename from source/ch/cyberduck/ui/winforms/controls/SearchTextBox.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/SearchTextBox.Designer.cs index afc42ffd79..6ebecbcda0 100644 --- a/source/ch/cyberduck/ui/winforms/controls/SearchTextBox.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/SearchTextBox.Designer.cs @@ -1,108 +1,108 @@ -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - partial class SearchTextBox - { - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing) - { - _inactiveFont.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.searchOverlayLabel = new System.Windows.Forms.Label(); - this.searchText = new System.Windows.Forms.TextBox(); - this.searchImage = new System.Windows.Forms.PictureBox(); - ((System.ComponentModel.ISupportInitialize)(this.searchImage)).BeginInit(); - this.SuspendLayout(); - // - // searchOverlayLabel - // - this.searchOverlayLabel.Anchor = - ((System.Windows.Forms.AnchorStyles) - (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.searchOverlayLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.searchOverlayLabel.AutoSize = false; - this.searchOverlayLabel.Location = new System.Drawing.Point(0, 0); - this.searchOverlayLabel.Margin = new System.Windows.Forms.Padding(0, 0, 22, 0); - this.searchOverlayLabel.Name = "searchOverlayLabel"; - this.searchOverlayLabel.Size = new System.Drawing.Size(127, 21); - this.searchOverlayLabel.TabIndex = 0; - this.searchOverlayLabel.MouseLeave += new System.EventHandler(this.searchOverlayLabel_MouseLeave); - this.searchOverlayLabel.Click += new System.EventHandler(this.searchOverlayLabel_Click); - this.searchOverlayLabel.MouseEnter += new System.EventHandler(this.searchOverlayLabel_MouseEnter); - // - // searchText - // - this.searchText.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.searchText.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.searchText.Location = new System.Drawing.Point(3, 3); - this.searchText.Margin = new System.Windows.Forms.Padding(0); - this.searchText.Name = "searchText"; - this.searchText.Size = new System.Drawing.Size(125, 15); - this.searchText.TabIndex = 0; - this.searchText.TabStop = false; - this.searchText.MouseLeave += new System.EventHandler(this.searchOverlayLabel_MouseLeave); - this.searchText.MouseEnter += new System.EventHandler(this.searchOverlayLabel_MouseEnter); - this.searchText.TextChanged += new System.EventHandler(this.searchText_TextChanged); - this.searchText.GotFocus += new System.EventHandler(this.searchText_GotFocus); - this.searchText.KeyDown += new System.Windows.Forms.KeyEventHandler(this.searchText_KeyUp); - this.searchText.LostFocus += new System.EventHandler(this.searchText_LostFocus); - // - // searchImage - // - this.searchImage.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; - this.searchImage.Anchor = - ((System.Windows.Forms.AnchorStyles) - (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Right))); - this.searchImage.Cursor = System.Windows.Forms.Cursors.Arrow; - this.searchImage.Location = new System.Drawing.Point(128, 0); - this.searchImage.Padding = new System.Windows.Forms.Padding(0,1,0,0); - this.searchImage.Margin = new System.Windows.Forms.Padding(0); - this.searchImage.Name = "searchImage"; - this.searchImage.Size = new System.Drawing.Size(23, 21); - this.searchImage.TabIndex = 1; - this.searchImage.TabStop = false; - this.searchImage.MouseLeave += new System.EventHandler(this.searchImage_MouseLeave); - this.searchImage.Click += new System.EventHandler(this.searchImage_Click); - this.searchImage.MouseEnter += new System.EventHandler(this.searchImage_MouseEnter); - // - // SearchTextBox - // - this.BackColor = System.Drawing.SystemColors.Window; - this.Controls.Add(this.searchOverlayLabel); - this.Controls.Add(this.searchText); - this.Controls.Add(this.searchImage); - this.Cursor = System.Windows.Forms.Cursors.IBeam; - this.Size = new System.Drawing.Size(152, 21); - ((System.ComponentModel.ISupportInitialize)(this.searchImage)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - } - - #endregion - - private System.Windows.Forms.Label searchOverlayLabel; - private System.Windows.Forms.TextBox searchText; - private System.Windows.Forms.PictureBox searchImage; - } -} +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + partial class SearchTextBox + { + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) + { + _inactiveFont.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.searchOverlayLabel = new System.Windows.Forms.Label(); + this.searchText = new System.Windows.Forms.TextBox(); + this.searchImage = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.searchImage)).BeginInit(); + this.SuspendLayout(); + // + // searchOverlayLabel + // + this.searchOverlayLabel.Anchor = + ((System.Windows.Forms.AnchorStyles) + (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.searchOverlayLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.searchOverlayLabel.AutoSize = false; + this.searchOverlayLabel.Location = new System.Drawing.Point(0, 0); + this.searchOverlayLabel.Margin = new System.Windows.Forms.Padding(0, 0, 22, 0); + this.searchOverlayLabel.Name = "searchOverlayLabel"; + this.searchOverlayLabel.Size = new System.Drawing.Size(127, 21); + this.searchOverlayLabel.TabIndex = 0; + this.searchOverlayLabel.MouseLeave += new System.EventHandler(this.searchOverlayLabel_MouseLeave); + this.searchOverlayLabel.Click += new System.EventHandler(this.searchOverlayLabel_Click); + this.searchOverlayLabel.MouseEnter += new System.EventHandler(this.searchOverlayLabel_MouseEnter); + // + // searchText + // + this.searchText.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.searchText.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.searchText.Location = new System.Drawing.Point(3, 3); + this.searchText.Margin = new System.Windows.Forms.Padding(0); + this.searchText.Name = "searchText"; + this.searchText.Size = new System.Drawing.Size(125, 15); + this.searchText.TabIndex = 0; + this.searchText.TabStop = false; + this.searchText.MouseLeave += new System.EventHandler(this.searchOverlayLabel_MouseLeave); + this.searchText.MouseEnter += new System.EventHandler(this.searchOverlayLabel_MouseEnter); + this.searchText.TextChanged += new System.EventHandler(this.searchText_TextChanged); + this.searchText.GotFocus += new System.EventHandler(this.searchText_GotFocus); + this.searchText.KeyDown += new System.Windows.Forms.KeyEventHandler(this.searchText_KeyUp); + this.searchText.LostFocus += new System.EventHandler(this.searchText_LostFocus); + // + // searchImage + // + this.searchImage.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.searchImage.Anchor = + ((System.Windows.Forms.AnchorStyles) + (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.searchImage.Cursor = System.Windows.Forms.Cursors.Arrow; + this.searchImage.Location = new System.Drawing.Point(128, 0); + this.searchImage.Padding = new System.Windows.Forms.Padding(0,1,0,0); + this.searchImage.Margin = new System.Windows.Forms.Padding(0); + this.searchImage.Name = "searchImage"; + this.searchImage.Size = new System.Drawing.Size(23, 21); + this.searchImage.TabIndex = 1; + this.searchImage.TabStop = false; + this.searchImage.MouseLeave += new System.EventHandler(this.searchImage_MouseLeave); + this.searchImage.Click += new System.EventHandler(this.searchImage_Click); + this.searchImage.MouseEnter += new System.EventHandler(this.searchImage_MouseEnter); + // + // SearchTextBox + // + this.BackColor = System.Drawing.SystemColors.Window; + this.Controls.Add(this.searchOverlayLabel); + this.Controls.Add(this.searchText); + this.Controls.Add(this.searchImage); + this.Cursor = System.Windows.Forms.Cursors.IBeam; + this.Size = new System.Drawing.Size(152, 21); + ((System.ComponentModel.ISupportInitialize)(this.searchImage)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + } + + #endregion + + private System.Windows.Forms.Label searchOverlayLabel; + private System.Windows.Forms.TextBox searchText; + private System.Windows.Forms.PictureBox searchImage; + } +} diff --git a/source/ch/cyberduck/ui/winforms/controls/SearchTextBox.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/SearchTextBox.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/controls/SearchTextBox.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/SearchTextBox.cs index 0975180191..1111824f5d 100644 --- a/source/ch/cyberduck/ui/winforms/controls/SearchTextBox.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/SearchTextBox.cs @@ -1,501 +1,501 @@ -// -// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.ComponentModel; -using System.Drawing; -using System.Security.Permissions; -using System.Windows.Forms; -using Ch.Cyberduck.Core; -using Ch.Cyberduck.Ui.Winforms.Controls.Design; -using ch.cyberduck.core; - -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - /// - /// Vista style search box. Thanks, Nick Berardi. - /// - /// - [Designer(typeof (SearchTextBoxDesigner))] - [DefaultEvent("TextChanged")] - [DefaultProperty("Text")] - public partial class SearchTextBox : Control - { - private const int DefaultTimerInterval = 500; - private readonly string DefaultInactiveText = LocaleFactory.localizedString("Search"); - private readonly Timer _timer; - - private bool _active; - - private Color _activeBackColor; - private Color _activeForeColor; - private Color _hoverButtonColor; - private Color _inactiveBackColor; - - private Font _inactiveFont; - private Color _inactiveForeColor; - - private string _inactiveText; - - public SearchTextBox() - { - //Load defaults - _hoverButtonColor = SystemColors.GradientInactiveCaption; - _activeBackColor = SystemColors.Window; - _activeForeColor = SystemColors.WindowText; - _inactiveBackColor = SystemColors.InactiveBorder; - _inactiveForeColor = SystemColors.GrayText; - - _inactiveFont = new Font(Font, FontStyle.Italic); - - _inactiveText = DefaultInactiveText; - - Cursor = Cursors.IBeam; - - InitializeComponent(); - - searchImage.Image = ResourcesBundle.search_inactive; - - //Load properties - BackColor = InactiveBackColor; - ForeColor = InactiveForeColor; - - searchOverlayLabel.Font = InactiveFont; - searchOverlayLabel.ForeColor = InactiveForeColor; - searchOverlayLabel.BackColor = InactiveBackColor; - searchOverlayLabel.Text = InactiveText; - - searchText.Font = Font; - searchText.ForeColor = ActiveForeColor; - searchText.BackColor = InactiveBackColor; - - StartSearchAfterDelay = true; - StartSearchOnEnter = false; - - _active = false; - - SetTextActive(false); - SetActive(false); - - _timer = new Timer(); - _timer.Interval = DefaultTimerInterval; - _timer.Tick += SearchTimer_Tick; - } - - protected override CreateParams CreateParams - { - [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] - get - { - CreateParams createParams = base.CreateParams; - createParams.ExStyle |= NativeConstants.WS_EX_CONTROLPARENT; - createParams.ExStyle &= ~NativeConstants.WS_EX_CLIENTEDGE; - - // make sure WS_BORDER is present in the style - createParams.Style |= NativeConstants.WS_BORDER; - - return createParams; - } - } - - /// Gets or sets the background Color of the button when the mouse hovers on it. - [Category("Appearance")] - [DefaultValue(typeof (Color), "GradientInactiveCaption")] - public Color HoverButtonColor - { - get { return _hoverButtonColor; } - set - { - _hoverButtonColor = value; - RefreshColors(); - } - } - - /// Gets or sets the ForeColor of the control when the search box is active. - [Category("Appearance")] - [DefaultValue(typeof (Color), "WindowText")] - public Color ActiveForeColor - { - get { return _activeForeColor; } - set - { - _activeForeColor = value; - RefreshColors(); - } - } - - /// Gets or sets the BackColor of the control when the search box is active. - [Category("Appearance")] - [DefaultValue(typeof (Color), "Window")] - public Color ActiveBackColor - { - get { return _activeBackColor; } - set - { - _activeBackColor = value; - RefreshColors(); - } - } - - /// Gets or sets the ForeColor of the control when the search box is inactive. - [Category("Appearance")] - [DefaultValue(typeof (Color), "GrayText")] - public Color InactiveForeColor - { - get { return _inactiveForeColor; } - set - { - _inactiveForeColor = value; - RefreshColors(); - } - } - - /// Gets or sets the BackColor of the control when the search box is inactive. - [Category("Appearance")] - [DefaultValue(typeof (Color), "InactiveBorder")] - public Color InactiveBackColor - { - get { return _inactiveBackColor; } - set - { - _inactiveBackColor = value; - RefreshColors(); - } - } - - /* Removed 29/03/2008, put in costructor - [Category("Appearance")] - [DefaultValue(typeof(Cursor), "IBeam")] - public override Cursor Cursor - { - get { return base.Cursor; } - set { base.Cursor = value; } - }*/ - - /// Temporary ForeColor property of the control. You should use InactiveForeColor and ActiveForeColor instead. - [Browsable(false)] - public override Color ForeColor - { - get { return base.ForeColor; } - set { base.ForeColor = value; } - } - - /// Temporary BackColor property of the control. You should use InactiveBackColor and ActiveBackColor instead. - [Browsable(false)] - public override Color BackColor - { - get { return base.BackColor; } - set { base.BackColor = value; } - } - - /// Gets or sets the text that is shown on top of the text box when the user hasn't entered any text. - [Category("Appearance")] - public string InactiveText - { - get { return _inactiveText; } - set - { - _inactiveText = value; - - searchOverlayLabel.Text = value; - } - } - - /// Gets or sets the font used in the search text box. - /// Equals to the Font property. - [Category("Appearance")] - [DefaultValue(typeof (Font), "Microsoft Sans Serif, 8.25pt")] - public Font ActiveFont - { - get { return base.Font; } - set - { - base.Font = value; - - searchText.Font = value; - } - } - - /// Gets or sets the font used to write the "inactivity label" on top of the control when the user hasn't entered any text. - [Category("Appearance")] - [DefaultValue(typeof (Font), "Microsoft Sans Serif, 8.25pt, style=Italic")] - public Font InactiveFont - { - get - { - if (_inactiveFont == null) - return Parent.Font; - else - return _inactiveFont; - } - set - { - _inactiveFont = value; - - searchOverlayLabel.Font = value; - } - } - - /// Overall Font property of the control. Property changes are forwarded to the ActiveFont property. - [Browsable(false)] - public override Font Font - { - get { return base.Font; } - set - { - base.Font = value; - ActiveFont = value; - } - } - - //[Category("Appearance")] - public override string Text - { - get { return searchText.Text; } - set { searchText.Text = value; } - } - - /// Returns true if the user entered some text in the search textbox. - protected bool TextEntered - { - get { return !String.IsNullOrEmpty(searchText.Text); } - } - - [Description("Determines the delay between when the text is edited and the search event is raised."), - Category("Behavior"), DefaultValue(DefaultTimerInterval)] - public int SearchTimer - { - get { return _timer.Interval; } - set { _timer.Interval = value; } - } - - [Description("Gets or sets whether the control raises a SearchStarted event after user input."), - Category("Behavior"), DefaultValue(true)] - public bool StartSearchAfterDelay { get; set; } - - [Description( - "Gets or sets whether the control raises a SearchStarted event when the user hits the Enter key on the text box." - ), Category("Behavior"), DefaultValue(false)] - public bool StartSearchOnEnter { get; set; } - - public new event EventHandler TextChanged - { - add { searchText.TextChanged += value; } - remove { searchText.TextChanged -= value; } - } - - [Description("Raised after an interval after the last user input."), Category("Action")] - public event EventHandler SearchStarted; - - protected virtual void OnSearchStarted(EventArgs e) - { - if (SearchStarted != null) - { - SearchStarted(this, e); - } - } - - [Description("Raised when the user clicks on the X to cancel the search."), Category("Action")] - public event EventHandler SearchCancelled; - - protected virtual void OnSearchCancelled(EventArgs e) - { - if (SearchCancelled != null) - { - SearchCancelled(this, e); - } - } - - private void SetActive(bool value) - { - if (TextEntered || searchText.Focused) - value = true; - - //if (_active == value) - // return; - - _active = value; - - RefreshColors(); - } - - - private void SetTextActive(bool value) - { - bool active = value || TextEntered; - - searchOverlayLabel.Visible = !active; - searchText.Visible = active; - - if (value && !searchText.Focused) - searchText.Select(); - } - - private void RefreshColors() - { - SuspendLayout(); - - //Set correct color - BackColor = _active ? ActiveBackColor : InactiveBackColor; - ForeColor = _active ? ActiveForeColor : InactiveForeColor; - - //Set color of children controls - searchText.ForeColor = ForeColor; - searchOverlayLabel.BackColor = BackColor; - searchText.BackColor = BackColor; - - ResumeLayout(true); - } - - /// Puts the focus on the text box and moves the caret to the end of the text, without selecting it. - public void SetFocusWithoutSelection() - { - searchText.Select(searchText.Text.Length, 0); - searchText.Focus(); - } - - protected override void OnGotFocus(EventArgs e) - { - SetTextActive(true); - SetActive(true); - - base.OnGotFocus(e); - } - - protected override void OnLostFocus(EventArgs e) - { - if (searchText.Focused) - return; - - SetTextActive(false); - SetActive(false); - - base.OnLostFocus(e); - } - - protected override void OnMouseEnter(EventArgs e) - { - SetActive(true); - - base.OnMouseEnter(e); - } - - protected override void OnMouseLeave(EventArgs e) - { - SetActive(false); - - base.OnMouseLeave(e); - } - - protected override void OnClick(EventArgs e) - { - Select(); - - base.OnClick(e); - } - - protected override void OnTextChanged(EventArgs e) - { - searchImage.Image = TextEntered - ? ResourcesBundle.search_active - : ResourcesBundle.search_inactive; - - //Start search timer - _timer.Stop(); - if (TextEntered && StartSearchAfterDelay) - _timer.Start(); - - base.OnTextChanged(e); - } - - private void searchImage_MouseEnter(object sender, EventArgs e) - { - SetActive(true); - - if (TextEntered) - searchImage.BackColor = HoverButtonColor; - } - - private void searchImage_MouseLeave(object sender, EventArgs e) - { - SetActive(false); - - searchImage.BackColor = Color.Empty; - } - - private void searchImage_Click(object sender, EventArgs e) - { - if (TextEntered) - { - searchText.ResetText(); - OnLostFocus(EventArgs.Empty); - - OnSearchCancelled(EventArgs.Empty); - - searchImage.BackColor = Color.Empty; - } - } - - private void searchText_KeyUp(object sender, KeyEventArgs e) - { - if (e.KeyCode == Keys.Enter && StartSearchOnEnter) - { - e.Handled = true; - e.SuppressKeyPress = true; - OnSearchStarted(EventArgs.Empty); - } - } - - private void searchText_TextChanged(object sender, EventArgs e) - { - OnTextChanged(e); - } - - private void searchText_LostFocus(object sender, EventArgs e) - { - OnLostFocus(e); - } - - private void searchText_GotFocus(object sender, EventArgs e) - { - OnGotFocus(e); - } - - private void searchOverlayLabel_Click(object sender, EventArgs e) - { - OnClick(EventArgs.Empty); - } - - private void searchOverlayLabel_MouseEnter(object sender, EventArgs e) - { - SetActive(true); - } - - private void searchOverlayLabel_MouseLeave(object sender, EventArgs e) - { - SetActive(false); - } - - private void SearchTimer_Tick(object sender, EventArgs e) - { - _timer.Stop(); - - OnSearchStarted(EventArgs.Empty); - } - } +// +// Copyright (c) 2010-2013 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Security.Permissions; +using System.Windows.Forms; +using Ch.Cyberduck.Core; +using Ch.Cyberduck.Ui.Winforms.Controls.Design; +using ch.cyberduck.core; + +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + /// + /// Vista style search box. Thanks, Nick Berardi. + /// + /// + [Designer(typeof (SearchTextBoxDesigner))] + [DefaultEvent("TextChanged")] + [DefaultProperty("Text")] + public partial class SearchTextBox : Control + { + private const int DefaultTimerInterval = 500; + private readonly string DefaultInactiveText = LocaleFactory.localizedString("Search"); + private readonly Timer _timer; + + private bool _active; + + private Color _activeBackColor; + private Color _activeForeColor; + private Color _hoverButtonColor; + private Color _inactiveBackColor; + + private Font _inactiveFont; + private Color _inactiveForeColor; + + private string _inactiveText; + + public SearchTextBox() + { + //Load defaults + _hoverButtonColor = SystemColors.GradientInactiveCaption; + _activeBackColor = SystemColors.Window; + _activeForeColor = SystemColors.WindowText; + _inactiveBackColor = SystemColors.InactiveBorder; + _inactiveForeColor = SystemColors.GrayText; + + _inactiveFont = new Font(Font, FontStyle.Italic); + + _inactiveText = DefaultInactiveText; + + Cursor = Cursors.IBeam; + + InitializeComponent(); + + searchImage.Image = ResourcesBundle.search_inactive; + + //Load properties + BackColor = InactiveBackColor; + ForeColor = InactiveForeColor; + + searchOverlayLabel.Font = InactiveFont; + searchOverlayLabel.ForeColor = InactiveForeColor; + searchOverlayLabel.BackColor = InactiveBackColor; + searchOverlayLabel.Text = InactiveText; + + searchText.Font = Font; + searchText.ForeColor = ActiveForeColor; + searchText.BackColor = InactiveBackColor; + + StartSearchAfterDelay = true; + StartSearchOnEnter = false; + + _active = false; + + SetTextActive(false); + SetActive(false); + + _timer = new Timer(); + _timer.Interval = DefaultTimerInterval; + _timer.Tick += SearchTimer_Tick; + } + + protected override CreateParams CreateParams + { + [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] + get + { + CreateParams createParams = base.CreateParams; + createParams.ExStyle |= NativeConstants.WS_EX_CONTROLPARENT; + createParams.ExStyle &= ~NativeConstants.WS_EX_CLIENTEDGE; + + // make sure WS_BORDER is present in the style + createParams.Style |= NativeConstants.WS_BORDER; + + return createParams; + } + } + + /// Gets or sets the background Color of the button when the mouse hovers on it. + [Category("Appearance")] + [DefaultValue(typeof (Color), "GradientInactiveCaption")] + public Color HoverButtonColor + { + get { return _hoverButtonColor; } + set + { + _hoverButtonColor = value; + RefreshColors(); + } + } + + /// Gets or sets the ForeColor of the control when the search box is active. + [Category("Appearance")] + [DefaultValue(typeof (Color), "WindowText")] + public Color ActiveForeColor + { + get { return _activeForeColor; } + set + { + _activeForeColor = value; + RefreshColors(); + } + } + + /// Gets or sets the BackColor of the control when the search box is active. + [Category("Appearance")] + [DefaultValue(typeof (Color), "Window")] + public Color ActiveBackColor + { + get { return _activeBackColor; } + set + { + _activeBackColor = value; + RefreshColors(); + } + } + + /// Gets or sets the ForeColor of the control when the search box is inactive. + [Category("Appearance")] + [DefaultValue(typeof (Color), "GrayText")] + public Color InactiveForeColor + { + get { return _inactiveForeColor; } + set + { + _inactiveForeColor = value; + RefreshColors(); + } + } + + /// Gets or sets the BackColor of the control when the search box is inactive. + [Category("Appearance")] + [DefaultValue(typeof (Color), "InactiveBorder")] + public Color InactiveBackColor + { + get { return _inactiveBackColor; } + set + { + _inactiveBackColor = value; + RefreshColors(); + } + } + + /* Removed 29/03/2008, put in costructor + [Category("Appearance")] + [DefaultValue(typeof(Cursor), "IBeam")] + public override Cursor Cursor + { + get { return base.Cursor; } + set { base.Cursor = value; } + }*/ + + /// Temporary ForeColor property of the control. You should use InactiveForeColor and ActiveForeColor instead. + [Browsable(false)] + public override Color ForeColor + { + get { return base.ForeColor; } + set { base.ForeColor = value; } + } + + /// Temporary BackColor property of the control. You should use InactiveBackColor and ActiveBackColor instead. + [Browsable(false)] + public override Color BackColor + { + get { return base.BackColor; } + set { base.BackColor = value; } + } + + /// Gets or sets the text that is shown on top of the text box when the user hasn't entered any text. + [Category("Appearance")] + public string InactiveText + { + get { return _inactiveText; } + set + { + _inactiveText = value; + + searchOverlayLabel.Text = value; + } + } + + /// Gets or sets the font used in the search text box. + /// Equals to the Font property. + [Category("Appearance")] + [DefaultValue(typeof (Font), "Microsoft Sans Serif, 8.25pt")] + public Font ActiveFont + { + get { return base.Font; } + set + { + base.Font = value; + + searchText.Font = value; + } + } + + /// Gets or sets the font used to write the "inactivity label" on top of the control when the user hasn't entered any text. + [Category("Appearance")] + [DefaultValue(typeof (Font), "Microsoft Sans Serif, 8.25pt, style=Italic")] + public Font InactiveFont + { + get + { + if (_inactiveFont == null) + return Parent.Font; + else + return _inactiveFont; + } + set + { + _inactiveFont = value; + + searchOverlayLabel.Font = value; + } + } + + /// Overall Font property of the control. Property changes are forwarded to the ActiveFont property. + [Browsable(false)] + public override Font Font + { + get { return base.Font; } + set + { + base.Font = value; + ActiveFont = value; + } + } + + //[Category("Appearance")] + public override string Text + { + get { return searchText.Text; } + set { searchText.Text = value; } + } + + /// Returns true if the user entered some text in the search textbox. + protected bool TextEntered + { + get { return !String.IsNullOrEmpty(searchText.Text); } + } + + [Description("Determines the delay between when the text is edited and the search event is raised."), + Category("Behavior"), DefaultValue(DefaultTimerInterval)] + public int SearchTimer + { + get { return _timer.Interval; } + set { _timer.Interval = value; } + } + + [Description("Gets or sets whether the control raises a SearchStarted event after user input."), + Category("Behavior"), DefaultValue(true)] + public bool StartSearchAfterDelay { get; set; } + + [Description( + "Gets or sets whether the control raises a SearchStarted event when the user hits the Enter key on the text box." + ), Category("Behavior"), DefaultValue(false)] + public bool StartSearchOnEnter { get; set; } + + public new event EventHandler TextChanged + { + add { searchText.TextChanged += value; } + remove { searchText.TextChanged -= value; } + } + + [Description("Raised after an interval after the last user input."), Category("Action")] + public event EventHandler SearchStarted; + + protected virtual void OnSearchStarted(EventArgs e) + { + if (SearchStarted != null) + { + SearchStarted(this, e); + } + } + + [Description("Raised when the user clicks on the X to cancel the search."), Category("Action")] + public event EventHandler SearchCancelled; + + protected virtual void OnSearchCancelled(EventArgs e) + { + if (SearchCancelled != null) + { + SearchCancelled(this, e); + } + } + + private void SetActive(bool value) + { + if (TextEntered || searchText.Focused) + value = true; + + //if (_active == value) + // return; + + _active = value; + + RefreshColors(); + } + + + private void SetTextActive(bool value) + { + bool active = value || TextEntered; + + searchOverlayLabel.Visible = !active; + searchText.Visible = active; + + if (value && !searchText.Focused) + searchText.Select(); + } + + private void RefreshColors() + { + SuspendLayout(); + + //Set correct color + BackColor = _active ? ActiveBackColor : InactiveBackColor; + ForeColor = _active ? ActiveForeColor : InactiveForeColor; + + //Set color of children controls + searchText.ForeColor = ForeColor; + searchOverlayLabel.BackColor = BackColor; + searchText.BackColor = BackColor; + + ResumeLayout(true); + } + + /// Puts the focus on the text box and moves the caret to the end of the text, without selecting it. + public void SetFocusWithoutSelection() + { + searchText.Select(searchText.Text.Length, 0); + searchText.Focus(); + } + + protected override void OnGotFocus(EventArgs e) + { + SetTextActive(true); + SetActive(true); + + base.OnGotFocus(e); + } + + protected override void OnLostFocus(EventArgs e) + { + if (searchText.Focused) + return; + + SetTextActive(false); + SetActive(false); + + base.OnLostFocus(e); + } + + protected override void OnMouseEnter(EventArgs e) + { + SetActive(true); + + base.OnMouseEnter(e); + } + + protected override void OnMouseLeave(EventArgs e) + { + SetActive(false); + + base.OnMouseLeave(e); + } + + protected override void OnClick(EventArgs e) + { + Select(); + + base.OnClick(e); + } + + protected override void OnTextChanged(EventArgs e) + { + searchImage.Image = TextEntered + ? ResourcesBundle.search_active + : ResourcesBundle.search_inactive; + + //Start search timer + _timer.Stop(); + if (TextEntered && StartSearchAfterDelay) + _timer.Start(); + + base.OnTextChanged(e); + } + + private void searchImage_MouseEnter(object sender, EventArgs e) + { + SetActive(true); + + if (TextEntered) + searchImage.BackColor = HoverButtonColor; + } + + private void searchImage_MouseLeave(object sender, EventArgs e) + { + SetActive(false); + + searchImage.BackColor = Color.Empty; + } + + private void searchImage_Click(object sender, EventArgs e) + { + if (TextEntered) + { + searchText.ResetText(); + OnLostFocus(EventArgs.Empty); + + OnSearchCancelled(EventArgs.Empty); + + searchImage.BackColor = Color.Empty; + } + } + + private void searchText_KeyUp(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter && StartSearchOnEnter) + { + e.Handled = true; + e.SuppressKeyPress = true; + OnSearchStarted(EventArgs.Empty); + } + } + + private void searchText_TextChanged(object sender, EventArgs e) + { + OnTextChanged(e); + } + + private void searchText_LostFocus(object sender, EventArgs e) + { + OnLostFocus(e); + } + + private void searchText_GotFocus(object sender, EventArgs e) + { + OnGotFocus(e); + } + + private void searchOverlayLabel_Click(object sender, EventArgs e) + { + OnClick(EventArgs.Empty); + } + + private void searchOverlayLabel_MouseEnter(object sender, EventArgs e) + { + SetActive(true); + } + + private void searchOverlayLabel_MouseLeave(object sender, EventArgs e) + { + SetActive(false); + } + + private void SearchTimer_Tick(object sender, EventArgs e) + { + _timer.Stop(); + + OnSearchStarted(EventArgs.Empty); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/SearchTextBox2.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/SearchTextBox2.Designer.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/controls/SearchTextBox2.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/SearchTextBox2.Designer.cs index db622cf965..144330f8ca 100644 --- a/source/ch/cyberduck/ui/winforms/controls/SearchTextBox2.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/SearchTextBox2.Designer.cs @@ -1,45 +1,45 @@ -namespace Ch.Cyberduck.ui.winforms.controls -{ - partial class SearchTextBox2 - { - System.Windows.Forms.TextBox textBox = new System.Windows.Forms.TextBox(); - System.Windows.Forms.PictureBox xPictureBox = new System.Windows.Forms.PictureBox(); - private System.Windows.Forms.Timer keyStrokeTimer = new System.Windows.Forms.Timer(); - - /// - /// 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 Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.SuspendLayout(); - // - // SearchTextBox - // - this.Name = "SearchTextBox"; - this.ResumeLayout(false); - - } - #endregion - } -} +namespace Ch.Cyberduck.ui.winforms.controls +{ + partial class SearchTextBox2 + { + System.Windows.Forms.TextBox textBox = new System.Windows.Forms.TextBox(); + System.Windows.Forms.PictureBox xPictureBox = new System.Windows.Forms.PictureBox(); + private System.Windows.Forms.Timer keyStrokeTimer = new System.Windows.Forms.Timer(); + + /// + /// 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 Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // SearchTextBox + // + this.Name = "SearchTextBox"; + this.ResumeLayout(false); + + } + #endregion + } +} diff --git a/source/ch/cyberduck/ui/winforms/controls/SearchTextBox2.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/SearchTextBox2.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/controls/SearchTextBox2.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/SearchTextBox2.cs index a55dd4a159..907996c0ce 100644 --- a/source/ch/cyberduck/ui/winforms/controls/SearchTextBox2.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/SearchTextBox2.cs @@ -1,279 +1,279 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using System.ComponentModel; -using System.Drawing; -using System.Windows.Forms; - -namespace Ch.Cyberduck.ui.winforms.controls -{ - [DefaultEvent("TextChanged")] - public partial class SearchTextBox2 : UserControl - { - #region Delegates - - public delegate void TextChange(object sender, EventArgs e); - - #endregion - - private readonly Font _defaultFont; - private readonly Font _placeHolderFont; - - private ContextMenuStrip _contextMenu; - - private string _currentText = String.Empty; - private string _placeHolderText = "Suchen"; - - public SearchTextBox2() - { - _defaultFont = SystemFonts.MessageBoxFont; - Font = _defaultFont; - _placeHolderFont = new Font(Font, FontStyle.Italic); - - InitializeComponent(); - - SuspendLayout(); - - textBox.Multiline = false; - textBox.BorderStyle = BorderStyle.None; - textBox.Enter += textBox_Enter; - textBox.Leave += textBox_Leave; - textBox.Click += textBox_Click; - textBox.KeyDown += textBox_KeyDown; - textBox.TextChanged += textBox_TextChanged; - - EnabledChanged += SearchTextBox_EnabledChanged; - - xPictureBox.Image = ResourcesBundle.search_inactive; - xPictureBox.SizeMode = PictureBoxSizeMode.CenterImage; - xPictureBox.Click += xPictureBox_Click; - xPictureBox.Visible = true; - - keyStrokeTimer.Interval = 250; - keyStrokeTimer.Tick += keyStrokeTimer_Tick; - - Controls.Add(textBox); - Controls.Add(xPictureBox); - - Paint += UserControl1_Paint; - Resize += UserControl1_Resize; - - ResumeLayout(false); - - textBox.ForeColor = Color.Gray; - textBox.Font = _placeHolderFont; - textBox.Text = _placeHolderText; - } - - [Description("The placeholder is displayed when the field is empty and does not have the focus."), - Category("SearchTextBox"), DefaultValue("Suchen")] - public string PlaceHolderText - { - get { return _placeHolderText; } - set - { - _placeHolderText = value; - textBox.ForeColor = Color.Gray; - textBox.Font = _placeHolderFont; - textBox.Text = _placeHolderText; - } - } - - [Description("Assign a context menu to set search options"), Category("SearchTextBox")] - public ContextMenuStrip OptionsMenu - { - get { return _contextMenu; } - set - { - _contextMenu = value; - //_cmPictureBox.Visible = _contextMenu != null; - } - } - - public new Font Font - { - get { return textBox.Font; } - set { textBox.Font = value; } - } - - public new string Text - { - get { return textBox.Text != _placeHolderText ? textBox.Text : String.Empty; } - set - { - if (!textBox.Focused && String.IsNullOrEmpty(value)) - { - textBox.Text = _placeHolderText; - textBox.ForeColor = Color.Gray; - textBox.Font = _placeHolderFont; - } - else - { - textBox.Text = value; - textBox.ForeColor = Color.Black; - textBox.Font = _defaultFont; - } - } - } - - [Description( - "If greater than 0, waits this amount of miliseconds after a key has been pressed before raising the TextChanged event." - ), Category("SearchTextBox"), DefaultValue(250)] - public int KeyStrokeDelay - { - get { return keyStrokeTimer.Interval; } - set { keyStrokeTimer.Interval = value; } - } - - public new event TextChange TextChanged; - - private void cmPictureBox_MouseClick(object sender, MouseEventArgs e) - { - if (_contextMenu != null) - { - Point loc = Parent.PointToScreen(Location); - _contextMenu.Show(loc.X + 3, loc.Y + Height); - } - } - - private void SearchTextBox_EnabledChanged(object sender, EventArgs e) - { - if (!Enabled) - { - BackColor = Color.LightGray; - textBox.BackColor = Color.LightGray; - } - else - { - BackColor = Color.White; - textBox.BackColor = Color.White; - } - } - - /// - /// Occurs when the Text property value changes. - /// - /// - /// - private void textBox_TextChanged(object sender, EventArgs e) - { - if (keyStrokeTimer.Enabled) - keyStrokeTimer.Stop(); - if (textBox.Text == String.Empty || textBox.Text == _placeHolderText) - { - if (_currentText != textBox.Text && textBox.Text == String.Empty && TextChanged != null) - { - _currentText = textBox.Text; - TextChanged(this, e); - } - //xPictureBox.Visible = false; - xPictureBox.Image = ResourcesBundle.search_inactive; - } - else - { - xPictureBox.Image = ResourcesBundle.search_active; - //xPictureBox.Visible = true; - if (_currentText != textBox.Text) - { - _currentText = textBox.Text; - keyStrokeTimer.Start(); - } - } - } - - private void keyStrokeTimer_Tick(object sender, EventArgs e) - { - if (textBox.Text != _placeHolderText && TextChanged != null) - TextChanged(this, e); - keyStrokeTimer.Stop(); - } - - - private void xPictureBox_Click(object sender, EventArgs e) - { - textBox.Text = String.Empty; - textBox.Focus(); - } - - private void textBox_KeyDown(object sender, KeyEventArgs e) - { - if (e.KeyCode == Keys.Escape) - { - textBox.Text = String.Empty; - } - } - - private void textBox_Click(object sender, EventArgs e) - { - textBox.SelectAll(); - } - - private void textBox_Enter(object sender, EventArgs e) - { - if (textBox.Text == _placeHolderText) - { - textBox.ForeColor = Color.Black; - textBox.Font = _defaultFont; - textBox.Text = string.Empty; - } - else - { - textBox.SelectAll(); - } - } - - private void textBox_Leave(object sender, EventArgs e) - { - if (textBox.Text == string.Empty) - { - textBox.ForeColor = Color.Gray; - textBox.Text = _placeHolderText; - textBox.Font = _placeHolderFont; - } - } - - protected override void OnEnabledChanged(EventArgs e) - { - base.OnEnabledChanged(e); - textBox.BackColor = textBox.Enabled ? Color.FromKnownColor(KnownColor.Window) : Color.WhiteSmoke; - xPictureBox.BackColor = textBox.BackColor; - } - - private void UserControl1_Resize(object sender, EventArgs e) - { - textBox.Size = new Size(Width - 22, Height - 2); - textBox.Location = new Point(3, (Height/2) - (textBox.Size.Height/2) + 1); - - xPictureBox.Size = new Size(18, Height - 2); - xPictureBox.BackColor = textBox.BackColor; - } - - private void UserControl1_Paint(object sender, PaintEventArgs e) - { - xPictureBox.Location = new Point(Width - 19, 1); - e.Graphics.FillRectangle(new SolidBrush(textBox.BackColor), 1, 1, ClientRectangle.Width - 2, - ClientRectangle.Height - 2); - ControlPaint.DrawBorder(e.Graphics, ClientRectangle, Color.Gray, ButtonBorderStyle.Solid); - } - - public void select(int start, int length) - { - textBox.Select(start, length); - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace Ch.Cyberduck.ui.winforms.controls +{ + [DefaultEvent("TextChanged")] + public partial class SearchTextBox2 : UserControl + { + #region Delegates + + public delegate void TextChange(object sender, EventArgs e); + + #endregion + + private readonly Font _defaultFont; + private readonly Font _placeHolderFont; + + private ContextMenuStrip _contextMenu; + + private string _currentText = String.Empty; + private string _placeHolderText = "Suchen"; + + public SearchTextBox2() + { + _defaultFont = SystemFonts.MessageBoxFont; + Font = _defaultFont; + _placeHolderFont = new Font(Font, FontStyle.Italic); + + InitializeComponent(); + + SuspendLayout(); + + textBox.Multiline = false; + textBox.BorderStyle = BorderStyle.None; + textBox.Enter += textBox_Enter; + textBox.Leave += textBox_Leave; + textBox.Click += textBox_Click; + textBox.KeyDown += textBox_KeyDown; + textBox.TextChanged += textBox_TextChanged; + + EnabledChanged += SearchTextBox_EnabledChanged; + + xPictureBox.Image = ResourcesBundle.search_inactive; + xPictureBox.SizeMode = PictureBoxSizeMode.CenterImage; + xPictureBox.Click += xPictureBox_Click; + xPictureBox.Visible = true; + + keyStrokeTimer.Interval = 250; + keyStrokeTimer.Tick += keyStrokeTimer_Tick; + + Controls.Add(textBox); + Controls.Add(xPictureBox); + + Paint += UserControl1_Paint; + Resize += UserControl1_Resize; + + ResumeLayout(false); + + textBox.ForeColor = Color.Gray; + textBox.Font = _placeHolderFont; + textBox.Text = _placeHolderText; + } + + [Description("The placeholder is displayed when the field is empty and does not have the focus."), + Category("SearchTextBox"), DefaultValue("Suchen")] + public string PlaceHolderText + { + get { return _placeHolderText; } + set + { + _placeHolderText = value; + textBox.ForeColor = Color.Gray; + textBox.Font = _placeHolderFont; + textBox.Text = _placeHolderText; + } + } + + [Description("Assign a context menu to set search options"), Category("SearchTextBox")] + public ContextMenuStrip OptionsMenu + { + get { return _contextMenu; } + set + { + _contextMenu = value; + //_cmPictureBox.Visible = _contextMenu != null; + } + } + + public new Font Font + { + get { return textBox.Font; } + set { textBox.Font = value; } + } + + public new string Text + { + get { return textBox.Text != _placeHolderText ? textBox.Text : String.Empty; } + set + { + if (!textBox.Focused && String.IsNullOrEmpty(value)) + { + textBox.Text = _placeHolderText; + textBox.ForeColor = Color.Gray; + textBox.Font = _placeHolderFont; + } + else + { + textBox.Text = value; + textBox.ForeColor = Color.Black; + textBox.Font = _defaultFont; + } + } + } + + [Description( + "If greater than 0, waits this amount of miliseconds after a key has been pressed before raising the TextChanged event." + ), Category("SearchTextBox"), DefaultValue(250)] + public int KeyStrokeDelay + { + get { return keyStrokeTimer.Interval; } + set { keyStrokeTimer.Interval = value; } + } + + public new event TextChange TextChanged; + + private void cmPictureBox_MouseClick(object sender, MouseEventArgs e) + { + if (_contextMenu != null) + { + Point loc = Parent.PointToScreen(Location); + _contextMenu.Show(loc.X + 3, loc.Y + Height); + } + } + + private void SearchTextBox_EnabledChanged(object sender, EventArgs e) + { + if (!Enabled) + { + BackColor = Color.LightGray; + textBox.BackColor = Color.LightGray; + } + else + { + BackColor = Color.White; + textBox.BackColor = Color.White; + } + } + + /// + /// Occurs when the Text property value changes. + /// + /// + /// + private void textBox_TextChanged(object sender, EventArgs e) + { + if (keyStrokeTimer.Enabled) + keyStrokeTimer.Stop(); + if (textBox.Text == String.Empty || textBox.Text == _placeHolderText) + { + if (_currentText != textBox.Text && textBox.Text == String.Empty && TextChanged != null) + { + _currentText = textBox.Text; + TextChanged(this, e); + } + //xPictureBox.Visible = false; + xPictureBox.Image = ResourcesBundle.search_inactive; + } + else + { + xPictureBox.Image = ResourcesBundle.search_active; + //xPictureBox.Visible = true; + if (_currentText != textBox.Text) + { + _currentText = textBox.Text; + keyStrokeTimer.Start(); + } + } + } + + private void keyStrokeTimer_Tick(object sender, EventArgs e) + { + if (textBox.Text != _placeHolderText && TextChanged != null) + TextChanged(this, e); + keyStrokeTimer.Stop(); + } + + + private void xPictureBox_Click(object sender, EventArgs e) + { + textBox.Text = String.Empty; + textBox.Focus(); + } + + private void textBox_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Escape) + { + textBox.Text = String.Empty; + } + } + + private void textBox_Click(object sender, EventArgs e) + { + textBox.SelectAll(); + } + + private void textBox_Enter(object sender, EventArgs e) + { + if (textBox.Text == _placeHolderText) + { + textBox.ForeColor = Color.Black; + textBox.Font = _defaultFont; + textBox.Text = string.Empty; + } + else + { + textBox.SelectAll(); + } + } + + private void textBox_Leave(object sender, EventArgs e) + { + if (textBox.Text == string.Empty) + { + textBox.ForeColor = Color.Gray; + textBox.Text = _placeHolderText; + textBox.Font = _placeHolderFont; + } + } + + protected override void OnEnabledChanged(EventArgs e) + { + base.OnEnabledChanged(e); + textBox.BackColor = textBox.Enabled ? Color.FromKnownColor(KnownColor.Window) : Color.WhiteSmoke; + xPictureBox.BackColor = textBox.BackColor; + } + + private void UserControl1_Resize(object sender, EventArgs e) + { + textBox.Size = new Size(Width - 22, Height - 2); + textBox.Location = new Point(3, (Height/2) - (textBox.Size.Height/2) + 1); + + xPictureBox.Size = new Size(18, Height - 2); + xPictureBox.BackColor = textBox.BackColor; + } + + private void UserControl1_Paint(object sender, PaintEventArgs e) + { + xPictureBox.Location = new Point(Width - 19, 1); + e.Graphics.FillRectangle(new SolidBrush(textBox.BackColor), 1, 1, ClientRectangle.Width - 2, + ClientRectangle.Height - 2); + ControlPaint.DrawBorder(e.Graphics, ClientRectangle, Color.Gray, ButtonBorderStyle.Solid); + } + + public void select(int start, int length) + { + textBox.Select(start, length); + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/SplitButton.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/SplitButton.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/controls/SplitButton.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/SplitButton.cs index dc4d2f76bd..a0a394ac5e 100644 --- a/source/ch/cyberduck/ui/winforms/controls/SplitButton.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/SplitButton.cs @@ -1,872 +1,872 @@ -/* - Copyright (c) 2009, wyDay - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -using System; -using System.ComponentModel; -using System.Drawing; -using System.Windows.Forms; -using System.Windows.Forms.VisualStyles; -using ContentAlignment = System.Drawing.ContentAlignment; - -//Get the latest version of SplitButton at: http://wyday.com/splitbutton/ - -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - public class SplitButton : Button - { - private const int SplitSectionWidth = 18; - - private static readonly int BorderSize = SystemInformation.Border3DSize.Width*2; - private PushButtonState _state; - private Rectangle dropDownRectangle; - private bool isMouseEntered; - - private bool isSplitMenuVisible; - - - private ContextMenu m_SplitMenu; - private ContextMenuStrip m_SplitMenuStrip; - private bool showSplit; - private bool skipNextOpen; - - private TextFormatFlags textFormatFlags = TextFormatFlags.Default; - - public SplitButton() - { - //AutoSize = true; - } - - [Browsable(false)] - public override ContextMenuStrip ContextMenuStrip - { - get { return SplitMenuStrip; } - set { SplitMenuStrip = value; } - } - - [DefaultValue(null)] - public ContextMenu SplitMenu - { - get { return m_SplitMenu; } - set - { - //remove the event handlers for the old SplitMenu - if (m_SplitMenu != null) - { - m_SplitMenu.Popup -= SplitMenu_Popup; - } - - //add the event handlers for the new SplitMenu - if (value != null) - { - ShowSplit = true; - value.Popup += SplitMenu_Popup; - } - else - ShowSplit = false; - - m_SplitMenu = value; - } - } - - [DefaultValue(null)] - public ContextMenuStrip SplitMenuStrip - { - get { return m_SplitMenuStrip; } - set - { - //remove the event handlers for the old SplitMenuStrip - if (m_SplitMenuStrip != null) - { - m_SplitMenuStrip.Closing -= SplitMenuStrip_Closing; - m_SplitMenuStrip.Opening -= SplitMenuStrip_Opening; - } - - //add the event handlers for the new SplitMenuStrip - if (value != null) - { - ShowSplit = true; - value.Closing += SplitMenuStrip_Closing; - value.Opening += SplitMenuStrip_Opening; - } - else - ShowSplit = false; - - - m_SplitMenuStrip = value; - } - } - - [DefaultValue(false)] - public bool ShowSplit - { - set - { - if (value != showSplit) - { - showSplit = value; - Invalidate(); - - if (Parent != null) - Parent.PerformLayout(); - } - } - } - - private PushButtonState State - { - get { return _state; } - set - { - if (!_state.Equals(value)) - { - _state = value; - Invalidate(); - } - } - } - - protected override bool IsInputKey(Keys keyData) - { - if (keyData.Equals(Keys.Down) && showSplit) - return true; - - return base.IsInputKey(keyData); - } - - protected override void OnGotFocus(EventArgs e) - { - if (!showSplit) - { - base.OnGotFocus(e); - return; - } - - if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled)) - { - State = PushButtonState.Default; - } - } - - protected override void OnKeyDown(KeyEventArgs kevent) - { - if (showSplit) - { - if (kevent.KeyCode.Equals(Keys.Down) && !isSplitMenuVisible) - { - ShowContextMenuStrip(); - } - - else if (kevent.KeyCode.Equals(Keys.Space) && kevent.Modifiers == Keys.None) - { - State = PushButtonState.Pressed; - } - } - - base.OnKeyDown(kevent); - } - - protected override void OnKeyUp(KeyEventArgs kevent) - { - if (kevent.KeyCode.Equals(Keys.Space)) - { - if (MouseButtons == MouseButtons.None) - { - State = PushButtonState.Normal; - } - } - else if (kevent.KeyCode.Equals(Keys.Apps)) - { - if (MouseButtons == MouseButtons.None && !isSplitMenuVisible) - { - ShowContextMenuStrip(); - } - } - - base.OnKeyUp(kevent); - } - - protected override void OnEnabledChanged(EventArgs e) - { - State = Enabled ? PushButtonState.Normal : PushButtonState.Disabled; - - base.OnEnabledChanged(e); - } - - protected override void OnLostFocus(EventArgs e) - { - if (!showSplit) - { - base.OnLostFocus(e); - return; - } - - if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled)) - { - State = PushButtonState.Normal; - } - } - - protected override void OnMouseEnter(EventArgs e) - { - if (!showSplit) - { - base.OnMouseEnter(e); - return; - } - - isMouseEntered = true; - - if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled)) - { - State = PushButtonState.Hot; - } - } - - protected override void OnMouseLeave(EventArgs e) - { - if (!showSplit) - { - base.OnMouseLeave(e); - return; - } - - isMouseEntered = false; - - if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled)) - { - State = Focused ? PushButtonState.Default : PushButtonState.Normal; - } - } - - protected override void OnMouseDown(MouseEventArgs e) - { - if (!showSplit) - { - base.OnMouseDown(e); - return; - } - - //handle ContextMenu re-clicking the drop-down region to close the menu - if (m_SplitMenu != null && e.Button == MouseButtons.Left && !isMouseEntered) - skipNextOpen = true; - - if (dropDownRectangle.Contains(e.Location) && !isSplitMenuVisible && e.Button == MouseButtons.Left) - { - ShowContextMenuStrip(); - } - else - { - State = PushButtonState.Pressed; - } - } - - protected override void OnMouseUp(MouseEventArgs mevent) - { - if (!showSplit) - { - base.OnMouseUp(mevent); - return; - } - - // if the right button was released inside the button - if (mevent.Button == MouseButtons.Right && ClientRectangle.Contains(mevent.Location) && !isSplitMenuVisible) - { - ShowContextMenuStrip(); - } - else if (m_SplitMenuStrip == null && m_SplitMenu == null || !isSplitMenuVisible) - { - SetButtonDrawState(); - - if (ClientRectangle.Contains(mevent.Location) && !dropDownRectangle.Contains(mevent.Location)) - { - OnClick(new EventArgs()); - } - } - } - - protected override void OnPaint(PaintEventArgs pevent) - { - base.OnPaint(pevent); - - if (!showSplit) - return; - - Graphics g = pevent.Graphics; - Rectangle bounds = ClientRectangle; - - // draw the button background as according to the current state. - if (State != PushButtonState.Pressed && IsDefault && !Application.RenderWithVisualStyles) - { - Rectangle backgroundBounds = bounds; - backgroundBounds.Inflate(-1, -1); - ButtonRenderer.DrawButton(g, backgroundBounds, State); - - // button renderer doesnt draw the black frame when themes are off - g.DrawRectangle(SystemPens.WindowFrame, 0, 0, bounds.Width - 1, bounds.Height - 1); - } - else - { - ButtonRenderer.DrawButton(g, bounds, State); - } - - // calculate the current dropdown rectangle. - dropDownRectangle = new Rectangle(bounds.Right - SplitSectionWidth, 0, SplitSectionWidth, bounds.Height); - - int internalBorder = BorderSize; - Rectangle focusRect = - new Rectangle(internalBorder - 1, - internalBorder - 1, - bounds.Width - dropDownRectangle.Width - internalBorder, - bounds.Height - (internalBorder*2) + 2); - - bool drawSplitLine = (State == PushButtonState.Hot || State == PushButtonState.Pressed || - !Application.RenderWithVisualStyles); - - - if (RightToLeft == RightToLeft.Yes) - { - dropDownRectangle.X = bounds.Left + 1; - focusRect.X = dropDownRectangle.Right; - - if (drawSplitLine) - { - // draw two lines at the edge of the dropdown button - g.DrawLine(SystemPens.ButtonShadow, bounds.Left + SplitSectionWidth, BorderSize, - bounds.Left + SplitSectionWidth, bounds.Bottom - BorderSize); - g.DrawLine(SystemPens.ButtonFace, bounds.Left + SplitSectionWidth + 1, BorderSize, - bounds.Left + SplitSectionWidth + 1, bounds.Bottom - BorderSize); - } - } - else - { - if (drawSplitLine) - { - // draw two lines at the edge of the dropdown button - g.DrawLine(SystemPens.ButtonShadow, bounds.Right - SplitSectionWidth, BorderSize, - bounds.Right - SplitSectionWidth, bounds.Bottom - BorderSize); - g.DrawLine(SystemPens.ButtonFace, bounds.Right - SplitSectionWidth - 1, BorderSize, - bounds.Right - SplitSectionWidth - 1, bounds.Bottom - BorderSize); - } - } - - // Draw an arrow in the correct location - PaintArrow(g, dropDownRectangle); - - //paint the image and text in the "button" part of the splitButton - PaintTextandImage(g, new Rectangle(0, 0, ClientRectangle.Width - SplitSectionWidth, ClientRectangle.Height)); - - // draw the focus rectangle. - if (State != PushButtonState.Pressed && Focused && ShowFocusCues) - { - ControlPaint.DrawFocusRectangle(g, focusRect); - } - } - - private void PaintTextandImage(Graphics g, Rectangle bounds) - { - // Figure out where our text and image should go - Rectangle text_rectangle; - Rectangle image_rectangle; - - CalculateButtonTextAndImageLayout(ref bounds, out text_rectangle, out image_rectangle); - - //draw the image - if (Image != null) - { - if (Enabled) - g.DrawImage(Image, image_rectangle.X, image_rectangle.Y, Image.Width, Image.Height); - else - ControlPaint.DrawImageDisabled(g, Image, image_rectangle.X, image_rectangle.Y, BackColor); - } - - // If we dont' use mnemonic, set formatFlag to NoPrefix as this will show ampersand. - if (!UseMnemonic) - textFormatFlags = textFormatFlags | TextFormatFlags.NoPrefix; - else if (!ShowKeyboardCues) - textFormatFlags = textFormatFlags | TextFormatFlags.HidePrefix; - - //draw the text - if (!string.IsNullOrEmpty(Text)) - { - if (Enabled) - TextRenderer.DrawText(g, Text, Font, text_rectangle, SystemColors.ControlText, textFormatFlags); - else - ControlPaint.DrawStringDisabled(g, Text, Font, BackColor, text_rectangle, textFormatFlags); - } - } - - private void PaintArrow(Graphics g, Rectangle dropDownRect) - { - Point middle = new Point(Convert.ToInt32(dropDownRect.Left + dropDownRect.Width/2), - Convert.ToInt32(dropDownRect.Top + dropDownRect.Height/2)); - - //if the width is odd - favor pushing it over one pixel right. - middle.X += (dropDownRect.Width%2); - - Point[] arrow = new[] - { - new Point(middle.X - 2, middle.Y - 1), new Point(middle.X + 3, middle.Y - 1), - new Point(middle.X, middle.Y + 2) - }; - - if (Enabled) - g.FillPolygon(SystemBrushes.ControlText, arrow); - else - g.FillPolygon(SystemBrushes.ButtonShadow, arrow); - } - - public override Size GetPreferredSize(Size proposedSize) - { - Size preferredSize = base.GetPreferredSize(proposedSize); - - //autosize correctly for splitbuttons - if (showSplit) - { - if (AutoSize) - return CalculateButtonAutoSize(); - - if (!string.IsNullOrEmpty(Text) && - TextRenderer.MeasureText(Text, Font).Width + SplitSectionWidth > preferredSize.Width) - return preferredSize + new Size(SplitSectionWidth + BorderSize*2, 0); - } - - return preferredSize; - } - - private Size CalculateButtonAutoSize() - { - Size ret_size = Size.Empty; - Size text_size = TextRenderer.MeasureText(Text, Font); - Size image_size = Image == null ? Size.Empty : Image.Size; - - // Pad the text size - if (Text.Length != 0) - { - text_size.Height += 4; - text_size.Width += 4; - } - - switch (TextImageRelation) - { - case TextImageRelation.Overlay: - ret_size.Height = Math.Max(Text.Length == 0 ? 0 : text_size.Height, image_size.Height); - ret_size.Width = Math.Max(text_size.Width, image_size.Width); - break; - case TextImageRelation.ImageAboveText: - case TextImageRelation.TextAboveImage: - ret_size.Height = text_size.Height + image_size.Height; - ret_size.Width = Math.Max(text_size.Width, image_size.Width); - break; - case TextImageRelation.ImageBeforeText: - case TextImageRelation.TextBeforeImage: - ret_size.Height = Math.Max(text_size.Height, image_size.Height); - ret_size.Width = text_size.Width + image_size.Width; - break; - } - - // Pad the result - ret_size.Height += (Padding.Vertical + 6); - ret_size.Width += (Padding.Horizontal + 6); - - //pad the splitButton arrow region - if (showSplit) - ret_size.Width += SplitSectionWidth; - - return ret_size; - } - - //The following layout functions were taken from Mono's Windows.Forms - //implementation, specifically "ThemeWin32Classic.cs", - //then modified to fit the context of this splitButton - - private void CalculateButtonTextAndImageLayout(ref Rectangle content_rect, out Rectangle textRectangle, - out Rectangle imageRectangle) - { - Size text_size = TextRenderer.MeasureText(Text, Font, content_rect.Size, textFormatFlags); - Size image_size = Image == null ? Size.Empty : Image.Size; - - textRectangle = Rectangle.Empty; - imageRectangle = Rectangle.Empty; - - switch (TextImageRelation) - { - case TextImageRelation.Overlay: - // Overlay is easy, text always goes here - textRectangle = OverlayObjectRect(ref content_rect, ref text_size, TextAlign); - // Rectangle.Inflate(content_rect, -4, -4); - - //Offset on Windows 98 style when button is pressed - if (_state == PushButtonState.Pressed && !Application.RenderWithVisualStyles) - textRectangle.Offset(1, 1); - - // Image is dependent on ImageAlign - if (Image != null) - imageRectangle = OverlayObjectRect(ref content_rect, ref image_size, ImageAlign); - - break; - case TextImageRelation.ImageAboveText: - content_rect.Inflate(-4, -4); - LayoutTextAboveOrBelowImage(content_rect, false, text_size, image_size, out textRectangle, - out imageRectangle); - break; - case TextImageRelation.TextAboveImage: - content_rect.Inflate(-4, -4); - LayoutTextAboveOrBelowImage(content_rect, true, text_size, image_size, out textRectangle, - out imageRectangle); - break; - case TextImageRelation.ImageBeforeText: - content_rect.Inflate(-4, -4); - LayoutTextBeforeOrAfterImage(content_rect, false, text_size, image_size, out textRectangle, - out imageRectangle); - break; - case TextImageRelation.TextBeforeImage: - content_rect.Inflate(-4, -4); - LayoutTextBeforeOrAfterImage(content_rect, true, text_size, image_size, out textRectangle, - out imageRectangle); - break; - } - } - - private static Rectangle OverlayObjectRect(ref Rectangle container, ref Size sizeOfObject, - ContentAlignment alignment) - { - int x, y; - - switch (alignment) - { - case ContentAlignment.TopLeft: - x = 4; - y = 4; - break; - case ContentAlignment.TopCenter: - x = (container.Width - sizeOfObject.Width)/2; - y = 4; - break; - case ContentAlignment.TopRight: - x = container.Width - sizeOfObject.Width - 4; - y = 4; - break; - case ContentAlignment.MiddleLeft: - x = 4; - y = (container.Height - sizeOfObject.Height)/2; - break; - case ContentAlignment.MiddleCenter: - x = (container.Width - sizeOfObject.Width)/2; - y = (container.Height - sizeOfObject.Height)/2; - break; - case ContentAlignment.MiddleRight: - x = container.Width - sizeOfObject.Width - 4; - y = (container.Height - sizeOfObject.Height)/2; - break; - case ContentAlignment.BottomLeft: - x = 4; - y = container.Height - sizeOfObject.Height - 4; - break; - case ContentAlignment.BottomCenter: - x = (container.Width - sizeOfObject.Width)/2; - y = container.Height - sizeOfObject.Height - 4; - break; - case ContentAlignment.BottomRight: - x = container.Width - sizeOfObject.Width - 4; - y = container.Height - sizeOfObject.Height - 4; - break; - default: - x = 4; - y = 4; - break; - } - - return new Rectangle(x, y, sizeOfObject.Width, sizeOfObject.Height); - } - - private void LayoutTextBeforeOrAfterImage(Rectangle totalArea, bool textFirst, Size textSize, Size imageSize, - out Rectangle textRect, out Rectangle imageRect) - { - int element_spacing = 0; // Spacing between the Text and the Image - int total_width = textSize.Width + element_spacing + imageSize.Width; - - if (!textFirst) - element_spacing += 2; - - // If the text is too big, chop it down to the size we have available to it - if (total_width > totalArea.Width) - { - textSize.Width = totalArea.Width - element_spacing - imageSize.Width; - total_width = totalArea.Width; - } - - int excess_width = totalArea.Width - total_width; - int offset = 0; - - Rectangle final_text_rect; - Rectangle final_image_rect; - - HorizontalAlignment h_text = GetHorizontalAlignment(TextAlign); - HorizontalAlignment h_image = GetHorizontalAlignment(ImageAlign); - - if (h_image == HorizontalAlignment.Left) - offset = 0; - else if (h_image == HorizontalAlignment.Right && h_text == HorizontalAlignment.Right) - offset = excess_width; - else if (h_image == HorizontalAlignment.Center && - (h_text == HorizontalAlignment.Left || h_text == HorizontalAlignment.Center)) - offset += excess_width/3; - else - offset += 2*(excess_width/3); - - if (textFirst) - { - final_text_rect = new Rectangle(totalArea.Left + offset, - AlignInRectangle(totalArea, textSize, TextAlign).Top, textSize.Width, - textSize.Height); - final_image_rect = new Rectangle(final_text_rect.Right + element_spacing, - AlignInRectangle(totalArea, imageSize, ImageAlign).Top, imageSize.Width, - imageSize.Height); - } - else - { - final_image_rect = new Rectangle(totalArea.Left + offset, - AlignInRectangle(totalArea, imageSize, ImageAlign).Top, imageSize.Width, - imageSize.Height); - final_text_rect = new Rectangle(final_image_rect.Right + element_spacing, - AlignInRectangle(totalArea, textSize, TextAlign).Top, textSize.Width, - textSize.Height); - } - - textRect = final_text_rect; - imageRect = final_image_rect; - } - - private void LayoutTextAboveOrBelowImage(Rectangle totalArea, bool textFirst, Size textSize, Size imageSize, - out Rectangle textRect, out Rectangle imageRect) - { - int element_spacing = 0; // Spacing between the Text and the Image - int total_height = textSize.Height + element_spacing + imageSize.Height; - - if (textFirst) - element_spacing += 2; - - if (textSize.Width > totalArea.Width) - textSize.Width = totalArea.Width; - - // If the there isn't enough room and we're text first, cut out the image - if (total_height > totalArea.Height && textFirst) - { - imageSize = Size.Empty; - total_height = totalArea.Height; - } - - int excess_height = totalArea.Height - total_height; - int offset = 0; - - Rectangle final_text_rect; - Rectangle final_image_rect; - - VerticalAlignment v_text = GetVerticalAlignment(TextAlign); - VerticalAlignment v_image = GetVerticalAlignment(ImageAlign); - - if (v_image == VerticalAlignment.Top) - offset = 0; - else if (v_image == VerticalAlignment.Bottom && v_text == VerticalAlignment.Bottom) - offset = excess_height; - else if (v_image == VerticalAlignment.Center && - (v_text == VerticalAlignment.Top || v_text == VerticalAlignment.Center)) - offset += excess_height/3; - else - offset += 2*(excess_height/3); - - if (textFirst) - { - final_text_rect = new Rectangle(AlignInRectangle(totalArea, textSize, TextAlign).Left, - totalArea.Top + offset, textSize.Width, textSize.Height); - final_image_rect = new Rectangle(AlignInRectangle(totalArea, imageSize, ImageAlign).Left, - final_text_rect.Bottom + element_spacing, imageSize.Width, - imageSize.Height); - } - else - { - final_image_rect = new Rectangle(AlignInRectangle(totalArea, imageSize, ImageAlign).Left, - totalArea.Top + offset, imageSize.Width, imageSize.Height); - final_text_rect = new Rectangle(AlignInRectangle(totalArea, textSize, TextAlign).Left, - final_image_rect.Bottom + element_spacing, textSize.Width, - textSize.Height); - - if (final_text_rect.Bottom > totalArea.Bottom) - final_text_rect.Y = totalArea.Top; - } - - textRect = final_text_rect; - imageRect = final_image_rect; - } - - private static HorizontalAlignment GetHorizontalAlignment(ContentAlignment align) - { - switch (align) - { - case ContentAlignment.BottomLeft: - case ContentAlignment.MiddleLeft: - case ContentAlignment.TopLeft: - return HorizontalAlignment.Left; - case ContentAlignment.BottomCenter: - case ContentAlignment.MiddleCenter: - case ContentAlignment.TopCenter: - return HorizontalAlignment.Center; - case ContentAlignment.BottomRight: - case ContentAlignment.MiddleRight: - case ContentAlignment.TopRight: - return HorizontalAlignment.Right; - } - - return HorizontalAlignment.Left; - } - - private static VerticalAlignment GetVerticalAlignment(ContentAlignment align) - { - switch (align) - { - case ContentAlignment.TopLeft: - case ContentAlignment.TopCenter: - case ContentAlignment.TopRight: - return VerticalAlignment.Top; - case ContentAlignment.MiddleLeft: - case ContentAlignment.MiddleCenter: - case ContentAlignment.MiddleRight: - return VerticalAlignment.Center; - case ContentAlignment.BottomLeft: - case ContentAlignment.BottomCenter: - case ContentAlignment.BottomRight: - return VerticalAlignment.Bottom; - } - - return VerticalAlignment.Top; - } - - internal static Rectangle AlignInRectangle(Rectangle outer, Size inner, ContentAlignment align) - { - int x = 0; - int y = 0; - - if (align == ContentAlignment.BottomLeft || align == ContentAlignment.MiddleLeft || - align == ContentAlignment.TopLeft) - x = outer.X; - else if (align == ContentAlignment.BottomCenter || align == ContentAlignment.MiddleCenter || - align == ContentAlignment.TopCenter) - x = Math.Max(outer.X + ((outer.Width - inner.Width)/2), outer.Left); - else if (align == ContentAlignment.BottomRight || align == ContentAlignment.MiddleRight || - align == ContentAlignment.TopRight) - x = outer.Right - inner.Width; - if (align == ContentAlignment.TopCenter || align == ContentAlignment.TopLeft || - align == ContentAlignment.TopRight) - y = outer.Y; - else if (align == ContentAlignment.MiddleCenter || align == ContentAlignment.MiddleLeft || - align == ContentAlignment.MiddleRight) - y = outer.Y + (outer.Height - inner.Height)/2; - else if (align == ContentAlignment.BottomCenter || align == ContentAlignment.BottomRight || - align == ContentAlignment.BottomLeft) - y = outer.Bottom - inner.Height; - - return new Rectangle(x, y, Math.Min(inner.Width, outer.Width), Math.Min(inner.Height, outer.Height)); - } - - private void ShowContextMenuStrip() - { - if (skipNextOpen) - { - // we were called because we're closing the context menu strip - // when clicking the dropdown button. - skipNextOpen = false; - return; - } - - State = PushButtonState.Pressed; - - if (m_SplitMenu != null) - { - m_SplitMenu.Show(this, new Point(0, Height)); - } - else if (m_SplitMenuStrip != null) - { - m_SplitMenuStrip.Show(this, new Point(0, Height), ToolStripDropDownDirection.BelowRight); - } - } - - private void SplitMenuStrip_Opening(object sender, CancelEventArgs e) - { - isSplitMenuVisible = true; - } - - private void SplitMenuStrip_Closing(object sender, ToolStripDropDownClosingEventArgs e) - { - isSplitMenuVisible = false; - - SetButtonDrawState(); - - if (e.CloseReason == ToolStripDropDownCloseReason.AppClicked) - { - skipNextOpen = (dropDownRectangle.Contains(PointToClient(Cursor.Position))) && - MouseButtons == MouseButtons.Left; - } - } - - - private void SplitMenu_Popup(object sender, EventArgs e) - { - isSplitMenuVisible = true; - } - - protected override void WndProc(ref Message m) - { - //0x0212 == WM_EXITMENULOOP - if (m.Msg == 0x0212) - { - //this message is only sent when a ContextMenu is closed (not a ContextMenuStrip) - isSplitMenuVisible = false; - SetButtonDrawState(); - } - - base.WndProc(ref m); - } - - private void SetButtonDrawState() - { - if (Bounds.Contains(Parent.PointToClient(Cursor.Position))) - { - State = PushButtonState.Hot; - } - else if (Focused) - { - State = PushButtonState.Default; - } - else if (!Enabled) - { - State = PushButtonState.Disabled; - } - else - { - State = PushButtonState.Normal; - } - } - } +/* + Copyright (c) 2009, wyDay + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; +using System.Windows.Forms.VisualStyles; +using ContentAlignment = System.Drawing.ContentAlignment; + +//Get the latest version of SplitButton at: http://wyday.com/splitbutton/ + +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + public class SplitButton : Button + { + private const int SplitSectionWidth = 18; + + private static readonly int BorderSize = SystemInformation.Border3DSize.Width*2; + private PushButtonState _state; + private Rectangle dropDownRectangle; + private bool isMouseEntered; + + private bool isSplitMenuVisible; + + + private ContextMenu m_SplitMenu; + private ContextMenuStrip m_SplitMenuStrip; + private bool showSplit; + private bool skipNextOpen; + + private TextFormatFlags textFormatFlags = TextFormatFlags.Default; + + public SplitButton() + { + //AutoSize = true; + } + + [Browsable(false)] + public override ContextMenuStrip ContextMenuStrip + { + get { return SplitMenuStrip; } + set { SplitMenuStrip = value; } + } + + [DefaultValue(null)] + public ContextMenu SplitMenu + { + get { return m_SplitMenu; } + set + { + //remove the event handlers for the old SplitMenu + if (m_SplitMenu != null) + { + m_SplitMenu.Popup -= SplitMenu_Popup; + } + + //add the event handlers for the new SplitMenu + if (value != null) + { + ShowSplit = true; + value.Popup += SplitMenu_Popup; + } + else + ShowSplit = false; + + m_SplitMenu = value; + } + } + + [DefaultValue(null)] + public ContextMenuStrip SplitMenuStrip + { + get { return m_SplitMenuStrip; } + set + { + //remove the event handlers for the old SplitMenuStrip + if (m_SplitMenuStrip != null) + { + m_SplitMenuStrip.Closing -= SplitMenuStrip_Closing; + m_SplitMenuStrip.Opening -= SplitMenuStrip_Opening; + } + + //add the event handlers for the new SplitMenuStrip + if (value != null) + { + ShowSplit = true; + value.Closing += SplitMenuStrip_Closing; + value.Opening += SplitMenuStrip_Opening; + } + else + ShowSplit = false; + + + m_SplitMenuStrip = value; + } + } + + [DefaultValue(false)] + public bool ShowSplit + { + set + { + if (value != showSplit) + { + showSplit = value; + Invalidate(); + + if (Parent != null) + Parent.PerformLayout(); + } + } + } + + private PushButtonState State + { + get { return _state; } + set + { + if (!_state.Equals(value)) + { + _state = value; + Invalidate(); + } + } + } + + protected override bool IsInputKey(Keys keyData) + { + if (keyData.Equals(Keys.Down) && showSplit) + return true; + + return base.IsInputKey(keyData); + } + + protected override void OnGotFocus(EventArgs e) + { + if (!showSplit) + { + base.OnGotFocus(e); + return; + } + + if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled)) + { + State = PushButtonState.Default; + } + } + + protected override void OnKeyDown(KeyEventArgs kevent) + { + if (showSplit) + { + if (kevent.KeyCode.Equals(Keys.Down) && !isSplitMenuVisible) + { + ShowContextMenuStrip(); + } + + else if (kevent.KeyCode.Equals(Keys.Space) && kevent.Modifiers == Keys.None) + { + State = PushButtonState.Pressed; + } + } + + base.OnKeyDown(kevent); + } + + protected override void OnKeyUp(KeyEventArgs kevent) + { + if (kevent.KeyCode.Equals(Keys.Space)) + { + if (MouseButtons == MouseButtons.None) + { + State = PushButtonState.Normal; + } + } + else if (kevent.KeyCode.Equals(Keys.Apps)) + { + if (MouseButtons == MouseButtons.None && !isSplitMenuVisible) + { + ShowContextMenuStrip(); + } + } + + base.OnKeyUp(kevent); + } + + protected override void OnEnabledChanged(EventArgs e) + { + State = Enabled ? PushButtonState.Normal : PushButtonState.Disabled; + + base.OnEnabledChanged(e); + } + + protected override void OnLostFocus(EventArgs e) + { + if (!showSplit) + { + base.OnLostFocus(e); + return; + } + + if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled)) + { + State = PushButtonState.Normal; + } + } + + protected override void OnMouseEnter(EventArgs e) + { + if (!showSplit) + { + base.OnMouseEnter(e); + return; + } + + isMouseEntered = true; + + if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled)) + { + State = PushButtonState.Hot; + } + } + + protected override void OnMouseLeave(EventArgs e) + { + if (!showSplit) + { + base.OnMouseLeave(e); + return; + } + + isMouseEntered = false; + + if (!State.Equals(PushButtonState.Pressed) && !State.Equals(PushButtonState.Disabled)) + { + State = Focused ? PushButtonState.Default : PushButtonState.Normal; + } + } + + protected override void OnMouseDown(MouseEventArgs e) + { + if (!showSplit) + { + base.OnMouseDown(e); + return; + } + + //handle ContextMenu re-clicking the drop-down region to close the menu + if (m_SplitMenu != null && e.Button == MouseButtons.Left && !isMouseEntered) + skipNextOpen = true; + + if (dropDownRectangle.Contains(e.Location) && !isSplitMenuVisible && e.Button == MouseButtons.Left) + { + ShowContextMenuStrip(); + } + else + { + State = PushButtonState.Pressed; + } + } + + protected override void OnMouseUp(MouseEventArgs mevent) + { + if (!showSplit) + { + base.OnMouseUp(mevent); + return; + } + + // if the right button was released inside the button + if (mevent.Button == MouseButtons.Right && ClientRectangle.Contains(mevent.Location) && !isSplitMenuVisible) + { + ShowContextMenuStrip(); + } + else if (m_SplitMenuStrip == null && m_SplitMenu == null || !isSplitMenuVisible) + { + SetButtonDrawState(); + + if (ClientRectangle.Contains(mevent.Location) && !dropDownRectangle.Contains(mevent.Location)) + { + OnClick(new EventArgs()); + } + } + } + + protected override void OnPaint(PaintEventArgs pevent) + { + base.OnPaint(pevent); + + if (!showSplit) + return; + + Graphics g = pevent.Graphics; + Rectangle bounds = ClientRectangle; + + // draw the button background as according to the current state. + if (State != PushButtonState.Pressed && IsDefault && !Application.RenderWithVisualStyles) + { + Rectangle backgroundBounds = bounds; + backgroundBounds.Inflate(-1, -1); + ButtonRenderer.DrawButton(g, backgroundBounds, State); + + // button renderer doesnt draw the black frame when themes are off + g.DrawRectangle(SystemPens.WindowFrame, 0, 0, bounds.Width - 1, bounds.Height - 1); + } + else + { + ButtonRenderer.DrawButton(g, bounds, State); + } + + // calculate the current dropdown rectangle. + dropDownRectangle = new Rectangle(bounds.Right - SplitSectionWidth, 0, SplitSectionWidth, bounds.Height); + + int internalBorder = BorderSize; + Rectangle focusRect = + new Rectangle(internalBorder - 1, + internalBorder - 1, + bounds.Width - dropDownRectangle.Width - internalBorder, + bounds.Height - (internalBorder*2) + 2); + + bool drawSplitLine = (State == PushButtonState.Hot || State == PushButtonState.Pressed || + !Application.RenderWithVisualStyles); + + + if (RightToLeft == RightToLeft.Yes) + { + dropDownRectangle.X = bounds.Left + 1; + focusRect.X = dropDownRectangle.Right; + + if (drawSplitLine) + { + // draw two lines at the edge of the dropdown button + g.DrawLine(SystemPens.ButtonShadow, bounds.Left + SplitSectionWidth, BorderSize, + bounds.Left + SplitSectionWidth, bounds.Bottom - BorderSize); + g.DrawLine(SystemPens.ButtonFace, bounds.Left + SplitSectionWidth + 1, BorderSize, + bounds.Left + SplitSectionWidth + 1, bounds.Bottom - BorderSize); + } + } + else + { + if (drawSplitLine) + { + // draw two lines at the edge of the dropdown button + g.DrawLine(SystemPens.ButtonShadow, bounds.Right - SplitSectionWidth, BorderSize, + bounds.Right - SplitSectionWidth, bounds.Bottom - BorderSize); + g.DrawLine(SystemPens.ButtonFace, bounds.Right - SplitSectionWidth - 1, BorderSize, + bounds.Right - SplitSectionWidth - 1, bounds.Bottom - BorderSize); + } + } + + // Draw an arrow in the correct location + PaintArrow(g, dropDownRectangle); + + //paint the image and text in the "button" part of the splitButton + PaintTextandImage(g, new Rectangle(0, 0, ClientRectangle.Width - SplitSectionWidth, ClientRectangle.Height)); + + // draw the focus rectangle. + if (State != PushButtonState.Pressed && Focused && ShowFocusCues) + { + ControlPaint.DrawFocusRectangle(g, focusRect); + } + } + + private void PaintTextandImage(Graphics g, Rectangle bounds) + { + // Figure out where our text and image should go + Rectangle text_rectangle; + Rectangle image_rectangle; + + CalculateButtonTextAndImageLayout(ref bounds, out text_rectangle, out image_rectangle); + + //draw the image + if (Image != null) + { + if (Enabled) + g.DrawImage(Image, image_rectangle.X, image_rectangle.Y, Image.Width, Image.Height); + else + ControlPaint.DrawImageDisabled(g, Image, image_rectangle.X, image_rectangle.Y, BackColor); + } + + // If we dont' use mnemonic, set formatFlag to NoPrefix as this will show ampersand. + if (!UseMnemonic) + textFormatFlags = textFormatFlags | TextFormatFlags.NoPrefix; + else if (!ShowKeyboardCues) + textFormatFlags = textFormatFlags | TextFormatFlags.HidePrefix; + + //draw the text + if (!string.IsNullOrEmpty(Text)) + { + if (Enabled) + TextRenderer.DrawText(g, Text, Font, text_rectangle, SystemColors.ControlText, textFormatFlags); + else + ControlPaint.DrawStringDisabled(g, Text, Font, BackColor, text_rectangle, textFormatFlags); + } + } + + private void PaintArrow(Graphics g, Rectangle dropDownRect) + { + Point middle = new Point(Convert.ToInt32(dropDownRect.Left + dropDownRect.Width/2), + Convert.ToInt32(dropDownRect.Top + dropDownRect.Height/2)); + + //if the width is odd - favor pushing it over one pixel right. + middle.X += (dropDownRect.Width%2); + + Point[] arrow = new[] + { + new Point(middle.X - 2, middle.Y - 1), new Point(middle.X + 3, middle.Y - 1), + new Point(middle.X, middle.Y + 2) + }; + + if (Enabled) + g.FillPolygon(SystemBrushes.ControlText, arrow); + else + g.FillPolygon(SystemBrushes.ButtonShadow, arrow); + } + + public override Size GetPreferredSize(Size proposedSize) + { + Size preferredSize = base.GetPreferredSize(proposedSize); + + //autosize correctly for splitbuttons + if (showSplit) + { + if (AutoSize) + return CalculateButtonAutoSize(); + + if (!string.IsNullOrEmpty(Text) && + TextRenderer.MeasureText(Text, Font).Width + SplitSectionWidth > preferredSize.Width) + return preferredSize + new Size(SplitSectionWidth + BorderSize*2, 0); + } + + return preferredSize; + } + + private Size CalculateButtonAutoSize() + { + Size ret_size = Size.Empty; + Size text_size = TextRenderer.MeasureText(Text, Font); + Size image_size = Image == null ? Size.Empty : Image.Size; + + // Pad the text size + if (Text.Length != 0) + { + text_size.Height += 4; + text_size.Width += 4; + } + + switch (TextImageRelation) + { + case TextImageRelation.Overlay: + ret_size.Height = Math.Max(Text.Length == 0 ? 0 : text_size.Height, image_size.Height); + ret_size.Width = Math.Max(text_size.Width, image_size.Width); + break; + case TextImageRelation.ImageAboveText: + case TextImageRelation.TextAboveImage: + ret_size.Height = text_size.Height + image_size.Height; + ret_size.Width = Math.Max(text_size.Width, image_size.Width); + break; + case TextImageRelation.ImageBeforeText: + case TextImageRelation.TextBeforeImage: + ret_size.Height = Math.Max(text_size.Height, image_size.Height); + ret_size.Width = text_size.Width + image_size.Width; + break; + } + + // Pad the result + ret_size.Height += (Padding.Vertical + 6); + ret_size.Width += (Padding.Horizontal + 6); + + //pad the splitButton arrow region + if (showSplit) + ret_size.Width += SplitSectionWidth; + + return ret_size; + } + + //The following layout functions were taken from Mono's Windows.Forms + //implementation, specifically "ThemeWin32Classic.cs", + //then modified to fit the context of this splitButton + + private void CalculateButtonTextAndImageLayout(ref Rectangle content_rect, out Rectangle textRectangle, + out Rectangle imageRectangle) + { + Size text_size = TextRenderer.MeasureText(Text, Font, content_rect.Size, textFormatFlags); + Size image_size = Image == null ? Size.Empty : Image.Size; + + textRectangle = Rectangle.Empty; + imageRectangle = Rectangle.Empty; + + switch (TextImageRelation) + { + case TextImageRelation.Overlay: + // Overlay is easy, text always goes here + textRectangle = OverlayObjectRect(ref content_rect, ref text_size, TextAlign); + // Rectangle.Inflate(content_rect, -4, -4); + + //Offset on Windows 98 style when button is pressed + if (_state == PushButtonState.Pressed && !Application.RenderWithVisualStyles) + textRectangle.Offset(1, 1); + + // Image is dependent on ImageAlign + if (Image != null) + imageRectangle = OverlayObjectRect(ref content_rect, ref image_size, ImageAlign); + + break; + case TextImageRelation.ImageAboveText: + content_rect.Inflate(-4, -4); + LayoutTextAboveOrBelowImage(content_rect, false, text_size, image_size, out textRectangle, + out imageRectangle); + break; + case TextImageRelation.TextAboveImage: + content_rect.Inflate(-4, -4); + LayoutTextAboveOrBelowImage(content_rect, true, text_size, image_size, out textRectangle, + out imageRectangle); + break; + case TextImageRelation.ImageBeforeText: + content_rect.Inflate(-4, -4); + LayoutTextBeforeOrAfterImage(content_rect, false, text_size, image_size, out textRectangle, + out imageRectangle); + break; + case TextImageRelation.TextBeforeImage: + content_rect.Inflate(-4, -4); + LayoutTextBeforeOrAfterImage(content_rect, true, text_size, image_size, out textRectangle, + out imageRectangle); + break; + } + } + + private static Rectangle OverlayObjectRect(ref Rectangle container, ref Size sizeOfObject, + ContentAlignment alignment) + { + int x, y; + + switch (alignment) + { + case ContentAlignment.TopLeft: + x = 4; + y = 4; + break; + case ContentAlignment.TopCenter: + x = (container.Width - sizeOfObject.Width)/2; + y = 4; + break; + case ContentAlignment.TopRight: + x = container.Width - sizeOfObject.Width - 4; + y = 4; + break; + case ContentAlignment.MiddleLeft: + x = 4; + y = (container.Height - sizeOfObject.Height)/2; + break; + case ContentAlignment.MiddleCenter: + x = (container.Width - sizeOfObject.Width)/2; + y = (container.Height - sizeOfObject.Height)/2; + break; + case ContentAlignment.MiddleRight: + x = container.Width - sizeOfObject.Width - 4; + y = (container.Height - sizeOfObject.Height)/2; + break; + case ContentAlignment.BottomLeft: + x = 4; + y = container.Height - sizeOfObject.Height - 4; + break; + case ContentAlignment.BottomCenter: + x = (container.Width - sizeOfObject.Width)/2; + y = container.Height - sizeOfObject.Height - 4; + break; + case ContentAlignment.BottomRight: + x = container.Width - sizeOfObject.Width - 4; + y = container.Height - sizeOfObject.Height - 4; + break; + default: + x = 4; + y = 4; + break; + } + + return new Rectangle(x, y, sizeOfObject.Width, sizeOfObject.Height); + } + + private void LayoutTextBeforeOrAfterImage(Rectangle totalArea, bool textFirst, Size textSize, Size imageSize, + out Rectangle textRect, out Rectangle imageRect) + { + int element_spacing = 0; // Spacing between the Text and the Image + int total_width = textSize.Width + element_spacing + imageSize.Width; + + if (!textFirst) + element_spacing += 2; + + // If the text is too big, chop it down to the size we have available to it + if (total_width > totalArea.Width) + { + textSize.Width = totalArea.Width - element_spacing - imageSize.Width; + total_width = totalArea.Width; + } + + int excess_width = totalArea.Width - total_width; + int offset = 0; + + Rectangle final_text_rect; + Rectangle final_image_rect; + + HorizontalAlignment h_text = GetHorizontalAlignment(TextAlign); + HorizontalAlignment h_image = GetHorizontalAlignment(ImageAlign); + + if (h_image == HorizontalAlignment.Left) + offset = 0; + else if (h_image == HorizontalAlignment.Right && h_text == HorizontalAlignment.Right) + offset = excess_width; + else if (h_image == HorizontalAlignment.Center && + (h_text == HorizontalAlignment.Left || h_text == HorizontalAlignment.Center)) + offset += excess_width/3; + else + offset += 2*(excess_width/3); + + if (textFirst) + { + final_text_rect = new Rectangle(totalArea.Left + offset, + AlignInRectangle(totalArea, textSize, TextAlign).Top, textSize.Width, + textSize.Height); + final_image_rect = new Rectangle(final_text_rect.Right + element_spacing, + AlignInRectangle(totalArea, imageSize, ImageAlign).Top, imageSize.Width, + imageSize.Height); + } + else + { + final_image_rect = new Rectangle(totalArea.Left + offset, + AlignInRectangle(totalArea, imageSize, ImageAlign).Top, imageSize.Width, + imageSize.Height); + final_text_rect = new Rectangle(final_image_rect.Right + element_spacing, + AlignInRectangle(totalArea, textSize, TextAlign).Top, textSize.Width, + textSize.Height); + } + + textRect = final_text_rect; + imageRect = final_image_rect; + } + + private void LayoutTextAboveOrBelowImage(Rectangle totalArea, bool textFirst, Size textSize, Size imageSize, + out Rectangle textRect, out Rectangle imageRect) + { + int element_spacing = 0; // Spacing between the Text and the Image + int total_height = textSize.Height + element_spacing + imageSize.Height; + + if (textFirst) + element_spacing += 2; + + if (textSize.Width > totalArea.Width) + textSize.Width = totalArea.Width; + + // If the there isn't enough room and we're text first, cut out the image + if (total_height > totalArea.Height && textFirst) + { + imageSize = Size.Empty; + total_height = totalArea.Height; + } + + int excess_height = totalArea.Height - total_height; + int offset = 0; + + Rectangle final_text_rect; + Rectangle final_image_rect; + + VerticalAlignment v_text = GetVerticalAlignment(TextAlign); + VerticalAlignment v_image = GetVerticalAlignment(ImageAlign); + + if (v_image == VerticalAlignment.Top) + offset = 0; + else if (v_image == VerticalAlignment.Bottom && v_text == VerticalAlignment.Bottom) + offset = excess_height; + else if (v_image == VerticalAlignment.Center && + (v_text == VerticalAlignment.Top || v_text == VerticalAlignment.Center)) + offset += excess_height/3; + else + offset += 2*(excess_height/3); + + if (textFirst) + { + final_text_rect = new Rectangle(AlignInRectangle(totalArea, textSize, TextAlign).Left, + totalArea.Top + offset, textSize.Width, textSize.Height); + final_image_rect = new Rectangle(AlignInRectangle(totalArea, imageSize, ImageAlign).Left, + final_text_rect.Bottom + element_spacing, imageSize.Width, + imageSize.Height); + } + else + { + final_image_rect = new Rectangle(AlignInRectangle(totalArea, imageSize, ImageAlign).Left, + totalArea.Top + offset, imageSize.Width, imageSize.Height); + final_text_rect = new Rectangle(AlignInRectangle(totalArea, textSize, TextAlign).Left, + final_image_rect.Bottom + element_spacing, textSize.Width, + textSize.Height); + + if (final_text_rect.Bottom > totalArea.Bottom) + final_text_rect.Y = totalArea.Top; + } + + textRect = final_text_rect; + imageRect = final_image_rect; + } + + private static HorizontalAlignment GetHorizontalAlignment(ContentAlignment align) + { + switch (align) + { + case ContentAlignment.BottomLeft: + case ContentAlignment.MiddleLeft: + case ContentAlignment.TopLeft: + return HorizontalAlignment.Left; + case ContentAlignment.BottomCenter: + case ContentAlignment.MiddleCenter: + case ContentAlignment.TopCenter: + return HorizontalAlignment.Center; + case ContentAlignment.BottomRight: + case ContentAlignment.MiddleRight: + case ContentAlignment.TopRight: + return HorizontalAlignment.Right; + } + + return HorizontalAlignment.Left; + } + + private static VerticalAlignment GetVerticalAlignment(ContentAlignment align) + { + switch (align) + { + case ContentAlignment.TopLeft: + case ContentAlignment.TopCenter: + case ContentAlignment.TopRight: + return VerticalAlignment.Top; + case ContentAlignment.MiddleLeft: + case ContentAlignment.MiddleCenter: + case ContentAlignment.MiddleRight: + return VerticalAlignment.Center; + case ContentAlignment.BottomLeft: + case ContentAlignment.BottomCenter: + case ContentAlignment.BottomRight: + return VerticalAlignment.Bottom; + } + + return VerticalAlignment.Top; + } + + internal static Rectangle AlignInRectangle(Rectangle outer, Size inner, ContentAlignment align) + { + int x = 0; + int y = 0; + + if (align == ContentAlignment.BottomLeft || align == ContentAlignment.MiddleLeft || + align == ContentAlignment.TopLeft) + x = outer.X; + else if (align == ContentAlignment.BottomCenter || align == ContentAlignment.MiddleCenter || + align == ContentAlignment.TopCenter) + x = Math.Max(outer.X + ((outer.Width - inner.Width)/2), outer.Left); + else if (align == ContentAlignment.BottomRight || align == ContentAlignment.MiddleRight || + align == ContentAlignment.TopRight) + x = outer.Right - inner.Width; + if (align == ContentAlignment.TopCenter || align == ContentAlignment.TopLeft || + align == ContentAlignment.TopRight) + y = outer.Y; + else if (align == ContentAlignment.MiddleCenter || align == ContentAlignment.MiddleLeft || + align == ContentAlignment.MiddleRight) + y = outer.Y + (outer.Height - inner.Height)/2; + else if (align == ContentAlignment.BottomCenter || align == ContentAlignment.BottomRight || + align == ContentAlignment.BottomLeft) + y = outer.Bottom - inner.Height; + + return new Rectangle(x, y, Math.Min(inner.Width, outer.Width), Math.Min(inner.Height, outer.Height)); + } + + private void ShowContextMenuStrip() + { + if (skipNextOpen) + { + // we were called because we're closing the context menu strip + // when clicking the dropdown button. + skipNextOpen = false; + return; + } + + State = PushButtonState.Pressed; + + if (m_SplitMenu != null) + { + m_SplitMenu.Show(this, new Point(0, Height)); + } + else if (m_SplitMenuStrip != null) + { + m_SplitMenuStrip.Show(this, new Point(0, Height), ToolStripDropDownDirection.BelowRight); + } + } + + private void SplitMenuStrip_Opening(object sender, CancelEventArgs e) + { + isSplitMenuVisible = true; + } + + private void SplitMenuStrip_Closing(object sender, ToolStripDropDownClosingEventArgs e) + { + isSplitMenuVisible = false; + + SetButtonDrawState(); + + if (e.CloseReason == ToolStripDropDownCloseReason.AppClicked) + { + skipNextOpen = (dropDownRectangle.Contains(PointToClient(Cursor.Position))) && + MouseButtons == MouseButtons.Left; + } + } + + + private void SplitMenu_Popup(object sender, EventArgs e) + { + isSplitMenuVisible = true; + } + + protected override void WndProc(ref Message m) + { + //0x0212 == WM_EXITMENULOOP + if (m.Msg == 0x0212) + { + //this message is only sent when a ContextMenu is closed (not a ContextMenuStrip) + isSplitMenuVisible = false; + SetButtonDrawState(); + } + + base.WndProc(ref m); + } + + private void SetButtonDrawState() + { + if (Bounds.Contains(Parent.PointToClient(Cursor.Position))) + { + State = PushButtonState.Hot; + } + else if (Focused) + { + State = PushButtonState.Default; + } + else if (!Enabled) + { + State = PushButtonState.Disabled; + } + else + { + State = PushButtonState.Normal; + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/TransferControl.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/TransferControl.Designer.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/controls/TransferControl.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/TransferControl.Designer.cs index b64e99758b..22389fe23a 100644 --- a/source/ch/cyberduck/ui/winforms/controls/TransferControl.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/TransferControl.Designer.cs @@ -1,147 +1,147 @@ -using System; - -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - partial class TransferControl - { - /// - /// 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 Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.progressLabel = new System.Windows.Forms.Label(); - this.statusLabel = new System.Windows.Forms.Label(); - this.filesComboBox = new System.Windows.Forms.ComboBox(); - this.messageLabel = new System.Windows.Forms.Label(); - this.progressBar = new System.Windows.Forms.ProgressBar(); - this.statusPictureBox = new System.Windows.Forms.PictureBox(); - this.directionPictureBox = new System.Windows.Forms.PictureBox(); - ((System.ComponentModel.ISupportInitialize)(this.statusPictureBox)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.directionPictureBox)).BeginInit(); - this.SuspendLayout(); - // - // progressLabel - // - this.progressLabel.AutoSize = true; - this.progressLabel.Location = new System.Drawing.Point(77, 53); - this.progressLabel.Name = "progressLabel"; - this.progressLabel.Size = new System.Drawing.Size(109, 15); - this.progressLabel.TabIndex = 1; - this.progressLabel.Text = "56.1 KB of 56.1 KB"; - // - // statusLabel - // - this.statusLabel.AutoSize = true; - this.statusLabel.Location = new System.Drawing.Point(51, 33); - this.statusLabel.Name = "statusLabel"; - this.statusLabel.Size = new System.Drawing.Size(117, 15); - this.statusLabel.TabIndex = 2; - this.statusLabel.Text = "Download complete"; - // - // filesComboBox - // - this.filesComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.filesComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.filesComboBox.FormattingEnabled = true; - this.filesComboBox.Location = new System.Drawing.Point(54, 6); - this.filesComboBox.Name = "filesComboBox"; - this.filesComboBox.Size = new System.Drawing.Size(402, 23); - this.filesComboBox.TabIndex = 3; - // - // messageLabel - // - this.messageLabel.AutoSize = true; - this.messageLabel.Location = new System.Drawing.Point(77, 71); - this.messageLabel.Name = "messageLabel"; - this.messageLabel.Size = new System.Drawing.Size(223, 15); - this.messageLabel.TabIndex = 5; - this.messageLabel.Text = "19. Februar 2010 13:21:45 GMT +01:00"; - // - // 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(54, 32); - this.progressBar.Name = "progressBar"; - this.progressBar.Size = new System.Drawing.Size(402, 15); - this.progressBar.TabIndex = 6; - // - // statusPictureBox - // - this.statusPictureBox.Image = global::Ch.Cyberduck.ResourcesBundle.statusGreen; - this.statusPictureBox.Location = new System.Drawing.Point(51, 50); - this.statusPictureBox.Name = "statusPictureBox"; - this.statusPictureBox.Size = new System.Drawing.Size(20, 20); - this.statusPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.statusPictureBox.TabIndex = 4; - this.statusPictureBox.TabStop = false; - // - // directionPictureBox - // - this.directionPictureBox.BackColor = System.Drawing.SystemColors.Control; - this.directionPictureBox.Image = global::Ch.Cyberduck.ResourcesBundle.transfer_download; - this.directionPictureBox.Location = new System.Drawing.Point(3, 3); - this.directionPictureBox.Name = "directionPictureBox"; - this.directionPictureBox.Size = new System.Drawing.Size(32, 32); - this.directionPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; - this.directionPictureBox.TabIndex = 0; - this.directionPictureBox.TabStop = false; - // - // TransferControl - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.messageLabel); - this.Controls.Add(this.statusPictureBox); - this.Controls.Add(this.filesComboBox); - this.Controls.Add(this.statusLabel); - this.Controls.Add(this.progressLabel); - this.Controls.Add(this.directionPictureBox); - this.Controls.Add(this.progressBar); - this.Name = "TransferControl"; - this.Size = new System.Drawing.Size(464, 90); - ((System.ComponentModel.ISupportInitialize)(this.statusPictureBox)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.directionPictureBox)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.PictureBox directionPictureBox; - private System.Windows.Forms.Label progressLabel; - private System.Windows.Forms.Label statusLabel; - private System.Windows.Forms.ComboBox filesComboBox; - private System.Windows.Forms.PictureBox statusPictureBox; - private System.Windows.Forms.Label messageLabel; - private System.Windows.Forms.ProgressBar progressBar; - - public void ValidateCommands() - { - throw new NotImplementedException(); - } - } -} +using System; + +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + partial class TransferControl + { + /// + /// 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 Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.progressLabel = new System.Windows.Forms.Label(); + this.statusLabel = new System.Windows.Forms.Label(); + this.filesComboBox = new System.Windows.Forms.ComboBox(); + this.messageLabel = new System.Windows.Forms.Label(); + this.progressBar = new System.Windows.Forms.ProgressBar(); + this.statusPictureBox = new System.Windows.Forms.PictureBox(); + this.directionPictureBox = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.statusPictureBox)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.directionPictureBox)).BeginInit(); + this.SuspendLayout(); + // + // progressLabel + // + this.progressLabel.AutoSize = true; + this.progressLabel.Location = new System.Drawing.Point(77, 53); + this.progressLabel.Name = "progressLabel"; + this.progressLabel.Size = new System.Drawing.Size(109, 15); + this.progressLabel.TabIndex = 1; + this.progressLabel.Text = "56.1 KB of 56.1 KB"; + // + // statusLabel + // + this.statusLabel.AutoSize = true; + this.statusLabel.Location = new System.Drawing.Point(51, 33); + this.statusLabel.Name = "statusLabel"; + this.statusLabel.Size = new System.Drawing.Size(117, 15); + this.statusLabel.TabIndex = 2; + this.statusLabel.Text = "Download complete"; + // + // filesComboBox + // + this.filesComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.filesComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.filesComboBox.FormattingEnabled = true; + this.filesComboBox.Location = new System.Drawing.Point(54, 6); + this.filesComboBox.Name = "filesComboBox"; + this.filesComboBox.Size = new System.Drawing.Size(402, 23); + this.filesComboBox.TabIndex = 3; + // + // messageLabel + // + this.messageLabel.AutoSize = true; + this.messageLabel.Location = new System.Drawing.Point(77, 71); + this.messageLabel.Name = "messageLabel"; + this.messageLabel.Size = new System.Drawing.Size(223, 15); + this.messageLabel.TabIndex = 5; + this.messageLabel.Text = "19. Februar 2010 13:21:45 GMT +01:00"; + // + // 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(54, 32); + this.progressBar.Name = "progressBar"; + this.progressBar.Size = new System.Drawing.Size(402, 15); + this.progressBar.TabIndex = 6; + // + // statusPictureBox + // + this.statusPictureBox.Image = global::Ch.Cyberduck.ResourcesBundle.statusGreen; + this.statusPictureBox.Location = new System.Drawing.Point(51, 50); + this.statusPictureBox.Name = "statusPictureBox"; + this.statusPictureBox.Size = new System.Drawing.Size(20, 20); + this.statusPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.statusPictureBox.TabIndex = 4; + this.statusPictureBox.TabStop = false; + // + // directionPictureBox + // + this.directionPictureBox.BackColor = System.Drawing.SystemColors.Control; + this.directionPictureBox.Image = global::Ch.Cyberduck.ResourcesBundle.transfer_download; + this.directionPictureBox.Location = new System.Drawing.Point(3, 3); + this.directionPictureBox.Name = "directionPictureBox"; + this.directionPictureBox.Size = new System.Drawing.Size(32, 32); + this.directionPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.directionPictureBox.TabIndex = 0; + this.directionPictureBox.TabStop = false; + // + // TransferControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.messageLabel); + this.Controls.Add(this.statusPictureBox); + this.Controls.Add(this.filesComboBox); + this.Controls.Add(this.statusLabel); + this.Controls.Add(this.progressLabel); + this.Controls.Add(this.directionPictureBox); + this.Controls.Add(this.progressBar); + this.Name = "TransferControl"; + this.Size = new System.Drawing.Size(464, 90); + ((System.ComponentModel.ISupportInitialize)(this.statusPictureBox)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.directionPictureBox)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.PictureBox directionPictureBox; + private System.Windows.Forms.Label progressLabel; + private System.Windows.Forms.Label statusLabel; + private System.Windows.Forms.ComboBox filesComboBox; + private System.Windows.Forms.PictureBox statusPictureBox; + private System.Windows.Forms.Label messageLabel; + private System.Windows.Forms.ProgressBar progressBar; + + public void ValidateCommands() + { + throw new NotImplementedException(); + } + } +} diff --git a/source/ch/cyberduck/ui/winforms/controls/TransferControl.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/TransferControl.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/controls/TransferControl.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/TransferControl.cs index cb8e793077..f829e2ecde 100644 --- a/source/ch/cyberduck/ui/winforms/controls/TransferControl.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/TransferControl.cs @@ -1,286 +1,286 @@ -// -// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Controller; -using Ch.Cyberduck.Ui.Winforms.Taskdialog; - -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - public partial class TransferControl : UserControl, IProgressView - { - private bool _focusRemoveAllowed = true; - private bool _selected; - - public TransferControl() - { - Font = SystemFonts.MessageBoxFont; - - InitializeComponent(); - - SetStyle( - ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, - true); - - // route events to parent control which is normally a ListView - statusLabel.Click += DelegateOnClick; - statusLabel.DoubleClick += DelegateOnDoubleClick; - progressLabel.Click += DelegateOnClick; - progressLabel.DoubleClick += DelegateOnDoubleClick; - messageLabel.Click += DelegateOnClick; - messageLabel.DoubleClick += DelegateOnDoubleClick; - directionPictureBox.Click += DelegateOnClick; - directionPictureBox.DoubleClick += DelegateOnDoubleClick; - statusPictureBox.Click += DelegateOnClick; - statusPictureBox.DoubleClick += DelegateOnDoubleClick; - progressBar.Click += DelegateOnClick; - progressBar.DoubleClick += DelegateOnDoubleClick; - - filesComboBox.Click += delegate - { - _focusRemoveAllowed = false; - OnClick(EventArgs.Empty); - }; - filesComboBox.LostFocus += delegate { _focusRemoveAllowed = true; }; - progressBar.MarqueeAnimationSpeed = 50; - - statusLabel.Font = new Font(statusLabel.Font, FontStyle.Bold); - Disposed += delegate { statusLabel.Font.Dispose(); }; - - // initialize colors - Selected = false; - - // force handle creation in case that the transfer form is hidden during the transfer. - // Otherwise the progress update fails due to an uninitialized control. Also refer to - // http://trac.cyberduck.ch/ticket/5691 - IntPtr intPtr = Handle; - } - - public bool FocusRemoveAllowed - { - get { return _focusRemoveAllowed; } - } - - public int ProgressMaximum - { - set { progressBar.Maximum = value; } - } - - public int ProgressValue - { - set { progressBar.Value = value; } - } - - public bool ProgressIndeterminate - { - set { progressBar.Style = value ? ProgressBarStyle.Marquee : ProgressBarStyle.Blocks; } - } - - public bool Selected - { - get { return _selected; } - set - { - Color backColor; - Color foreColor; - _selected = value; - if (value) - { - backColor = Color.FromKnownColor(KnownColor.Highlight); - foreColor = Color.FromKnownColor(KnownColor.HighlightText); - } - else - { - backColor = Color.FromKnownColor(KnownColor.Window); - foreColor = Color.FromKnownColor(KnownColor.WindowText); - } - BackColor = backColor; - statusLabel.BackColor = backColor; - statusLabel.ForeColor = foreColor; - progressLabel.BackColor = backColor; - progressLabel.ForeColor = foreColor; - messageLabel.BackColor = backColor; - messageLabel.ForeColor = foreColor; - directionPictureBox.BackColor = backColor; - statusPictureBox.BackColor = backColor; - } - } - - public void PopulateRoots(IList roots) - { - filesComboBox.DataSource = roots; - } - - public string StatusText - { - set { statusLabel.Text = value; } - } - - public string ProgressText - { - set { progressLabel.Text = value; } - } - - public string MessageText - { - set { messageLabel.Text = value; } - } - - public TransferStatus TransferStatus - { - set - { - switch (value) - { - case TransferStatus.InProgress: - progressBar.Visible = true; - statusLabel.Visible = false; - statusPictureBox.Image = ResourcesBundle.statusYellow; - break; - case TransferStatus.Complete: - progressBar.Visible = false; - statusLabel.Visible = true; - statusPictureBox.Image = ResourcesBundle.statusGreen; - break; - case TransferStatus.Incomplete: - progressBar.Visible = false; - statusLabel.Visible = true; - statusPictureBox.Image = ResourcesBundle.statusRed; - break; - } - } - } - - public TransferDirection TransferDirection - { - set - { - if (value == TransferDirection.Download) - { - directionPictureBox.Image = ResourcesBundle.transfer_download; - } - if (value == TransferDirection.Upload) - { - directionPictureBox.Image = ResourcesBundle.transfer_upload; - } - if (value == TransferDirection.Sync) - { - directionPictureBox.Image = ResourcesBundle.sync; - } - } - } - - public bool ReleaseWhenClose - { - set { ; } - } - - public void Close() - { - ; - } - - public void Show(IWin32Window owner) - { - ; - } - - public void Show(IView owner) - { - ; - } - - public void Activate() - { - ; - } - - public DialogResult ModalResult - { - get { return DialogResult.None; } - } - - public DialogResult ShowDialog() - { - return DialogResult.None; - } - - public DialogResult ShowDialog(IWin32Window owner) - { - return DialogResult.None; - } - - public DialogResult ShowDialog(IView owner) - { - return DialogResult.None; - } - - public DialogResult MessageBox(string title, string message, string content, string expandedInfo, string help, - string verificationText, DialogResponseHandler handler) - { - return DialogResult.None; - } - - public DialogResult MessageBox(string title, string message, string content, TaskDialogButtons buttons, - SysIcons icons) - { - return DialogResult.None; - } - - public DialogResult CommandBox(string title, string mainInstruction, string content, string expandedInfo, - string help, string verificationText, string commandButtons, - bool showCancelButton, SysIcons mainIcon, SysIcons footerIcon, - DialogResponseHandler handler) - { - return DialogResult.None; - } - - public event VoidHandler ViewShownEvent = delegate { }; - public event VoidHandler ViewClosedEvent = delegate { }; - public event FormClosingEventHandler ViewClosingEvent = delegate { }; - public event VoidHandler PositionSizeRestoredEvent = delegate { }; - public event VoidHandler ViewDisposedEvent; - - private void DelegateOnDoubleClick(object sender, EventArgs e) - { - OnDoubleClick(EventArgs.Empty); - } - - private void DelegateOnClick(object sender, EventArgs e) - { - OnClick(EventArgs.Empty); - } - } - - public enum TransferStatus - { - InProgress, - Complete, - Incomplete - } - - public enum TransferDirection - { - Upload, - Download, - Sync - } +// +// Copyright (c) 2010-2014 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Controller; +using Ch.Cyberduck.Ui.Winforms.Taskdialog; + +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + public partial class TransferControl : UserControl, IProgressView + { + private bool _focusRemoveAllowed = true; + private bool _selected; + + public TransferControl() + { + Font = SystemFonts.MessageBoxFont; + + InitializeComponent(); + + SetStyle( + ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, + true); + + // route events to parent control which is normally a ListView + statusLabel.Click += DelegateOnClick; + statusLabel.DoubleClick += DelegateOnDoubleClick; + progressLabel.Click += DelegateOnClick; + progressLabel.DoubleClick += DelegateOnDoubleClick; + messageLabel.Click += DelegateOnClick; + messageLabel.DoubleClick += DelegateOnDoubleClick; + directionPictureBox.Click += DelegateOnClick; + directionPictureBox.DoubleClick += DelegateOnDoubleClick; + statusPictureBox.Click += DelegateOnClick; + statusPictureBox.DoubleClick += DelegateOnDoubleClick; + progressBar.Click += DelegateOnClick; + progressBar.DoubleClick += DelegateOnDoubleClick; + + filesComboBox.Click += delegate + { + _focusRemoveAllowed = false; + OnClick(EventArgs.Empty); + }; + filesComboBox.LostFocus += delegate { _focusRemoveAllowed = true; }; + progressBar.MarqueeAnimationSpeed = 50; + + statusLabel.Font = new Font(statusLabel.Font, FontStyle.Bold); + Disposed += delegate { statusLabel.Font.Dispose(); }; + + // initialize colors + Selected = false; + + // force handle creation in case that the transfer form is hidden during the transfer. + // Otherwise the progress update fails due to an uninitialized control. Also refer to + // http://trac.cyberduck.ch/ticket/5691 + IntPtr intPtr = Handle; + } + + public bool FocusRemoveAllowed + { + get { return _focusRemoveAllowed; } + } + + public int ProgressMaximum + { + set { progressBar.Maximum = value; } + } + + public int ProgressValue + { + set { progressBar.Value = value; } + } + + public bool ProgressIndeterminate + { + set { progressBar.Style = value ? ProgressBarStyle.Marquee : ProgressBarStyle.Blocks; } + } + + public bool Selected + { + get { return _selected; } + set + { + Color backColor; + Color foreColor; + _selected = value; + if (value) + { + backColor = Color.FromKnownColor(KnownColor.Highlight); + foreColor = Color.FromKnownColor(KnownColor.HighlightText); + } + else + { + backColor = Color.FromKnownColor(KnownColor.Window); + foreColor = Color.FromKnownColor(KnownColor.WindowText); + } + BackColor = backColor; + statusLabel.BackColor = backColor; + statusLabel.ForeColor = foreColor; + progressLabel.BackColor = backColor; + progressLabel.ForeColor = foreColor; + messageLabel.BackColor = backColor; + messageLabel.ForeColor = foreColor; + directionPictureBox.BackColor = backColor; + statusPictureBox.BackColor = backColor; + } + } + + public void PopulateRoots(IList roots) + { + filesComboBox.DataSource = roots; + } + + public string StatusText + { + set { statusLabel.Text = value; } + } + + public string ProgressText + { + set { progressLabel.Text = value; } + } + + public string MessageText + { + set { messageLabel.Text = value; } + } + + public TransferStatus TransferStatus + { + set + { + switch (value) + { + case TransferStatus.InProgress: + progressBar.Visible = true; + statusLabel.Visible = false; + statusPictureBox.Image = ResourcesBundle.statusYellow; + break; + case TransferStatus.Complete: + progressBar.Visible = false; + statusLabel.Visible = true; + statusPictureBox.Image = ResourcesBundle.statusGreen; + break; + case TransferStatus.Incomplete: + progressBar.Visible = false; + statusLabel.Visible = true; + statusPictureBox.Image = ResourcesBundle.statusRed; + break; + } + } + } + + public TransferDirection TransferDirection + { + set + { + if (value == TransferDirection.Download) + { + directionPictureBox.Image = ResourcesBundle.transfer_download; + } + if (value == TransferDirection.Upload) + { + directionPictureBox.Image = ResourcesBundle.transfer_upload; + } + if (value == TransferDirection.Sync) + { + directionPictureBox.Image = ResourcesBundle.sync; + } + } + } + + public bool ReleaseWhenClose + { + set { ; } + } + + public void Close() + { + ; + } + + public void Show(IWin32Window owner) + { + ; + } + + public void Show(IView owner) + { + ; + } + + public void Activate() + { + ; + } + + public DialogResult ModalResult + { + get { return DialogResult.None; } + } + + public DialogResult ShowDialog() + { + return DialogResult.None; + } + + public DialogResult ShowDialog(IWin32Window owner) + { + return DialogResult.None; + } + + public DialogResult ShowDialog(IView owner) + { + return DialogResult.None; + } + + public DialogResult MessageBox(string title, string message, string content, string expandedInfo, string help, + string verificationText, DialogResponseHandler handler) + { + return DialogResult.None; + } + + public DialogResult MessageBox(string title, string message, string content, TaskDialogButtons buttons, + SysIcons icons) + { + return DialogResult.None; + } + + public DialogResult CommandBox(string title, string mainInstruction, string content, string expandedInfo, + string help, string verificationText, string commandButtons, + bool showCancelButton, SysIcons mainIcon, SysIcons footerIcon, + DialogResponseHandler handler) + { + return DialogResult.None; + } + + public event VoidHandler ViewShownEvent = delegate { }; + public event VoidHandler ViewClosedEvent = delegate { }; + public event FormClosingEventHandler ViewClosingEvent = delegate { }; + public event VoidHandler PositionSizeRestoredEvent = delegate { }; + public event VoidHandler ViewDisposedEvent; + + private void DelegateOnDoubleClick(object sender, EventArgs e) + { + OnDoubleClick(EventArgs.Empty); + } + + private void DelegateOnClick(object sender, EventArgs e) + { + OnClick(EventArgs.Empty); + } + } + + public enum TransferStatus + { + InProgress, + Complete, + Incomplete + } + + public enum TransferDirection + { + Upload, + Download, + Sync + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/TransferControl.resx b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/TransferControl.resx similarity index 97% rename from source/ch/cyberduck/ui/winforms/controls/TransferControl.resx rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/TransferControl.resx index 29dcb1b3a3..1af7de150c 100644 --- a/source/ch/cyberduck/ui/winforms/controls/TransferControl.resx +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/TransferControl.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/VistaMenu.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/VistaMenu.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/controls/VistaMenu.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/VistaMenu.cs index 138e76f2ad..49b2cce690 100644 --- a/source/ch/cyberduck/ui/winforms/controls/VistaMenu.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/VistaMenu.cs @@ -1,357 +1,357 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using System.Collections; -using System.ComponentModel; -using System.Drawing; -using System.Drawing.Imaging; -using System.Runtime.InteropServices; -using System.Windows.Forms; - -//VistaMenu v1.8.1, created by Wyatt O'Day -//Visit: http://wyday.com/vistamenu/ -//License: BSD - -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - //Properties for the MenuItem - internal class Properties - { - public Image Image; - public IntPtr renderBmpHbitmap = IntPtr.Zero; - } - - [ProvideProperty("Image", typeof (MenuItem))] - public partial class VistaMenu : Component, IExtenderProvider, ISupportInitialize - { - private readonly bool isVistaOrLater; - private readonly Hashtable menuParents = new Hashtable(); - private readonly MENUINFO mnuInfo = new MENUINFO(); - private readonly Hashtable properties = new Hashtable(); - private Container components; - - private bool formHasBeenIntialized; - - public VistaMenu() - { - isVistaOrLater = Environment.OSVersion.Platform == PlatformID.Win32NT && - Environment.OSVersion.Version.Major >= 6; - - InitializeComponent(); - } - - public VistaMenu(IContainer container) - : this() - { - container.Add(this); - } - - bool IExtenderProvider.CanExtend(object o) - { - if (o is MenuItem) - { - // reject the menuitem if it's a top level element on a MainMenu bar - if (((MenuItem) o).Parent != null) - return ((MenuItem) o).Parent.GetType() != typeof (MainMenu); - - // parent is null - meaning it's a context menu - return true; - } - - if (o is Form) - return true; - - return false; - } - - void ISupportInitialize.BeginInit() - { - } - - void ISupportInitialize.EndInit() - { - if (!DesignMode) - { - if (isVistaOrLater) - { - foreach (DictionaryEntry de in properties) - { - AddVistaMenuItem((MenuItem) de.Key); - } - } - else // Pre-Vista menus - { - // Declare the fonts once: - // If the user changes the menu fonts while your program is - // running, it's tough luck for the user. - // - // This keeps a cap on the memory by avoiding unnecessary Font object - // creation/destruction on every MenuItem .Measure() and .Draw() - menuBoldFont = new Font(SystemFonts.MenuFont, FontStyle.Bold); - - - if (ownerForm != null) - ownerForm.ChangeUICues += ownerForm_ChangeUICues; - - foreach (DictionaryEntry de in properties) - { - AddPreVistaMenuItem((MenuItem) de.Key); - } - - //add event handle for each menu item's measure & draw routines - foreach (DictionaryEntry parent in menuParents) - { - foreach (MenuItem mnuItem in ((Menu) parent.Key).MenuItems) - { - mnuItem.DrawItem += MenuItem_DrawItem; - mnuItem.MeasureItem += MenuItem_MeasureItem; - mnuItem.OwnerDraw = true; - } - } - } - - formHasBeenIntialized = true; - } - } - - - [DllImport("user32.dll", CharSet = CharSet.Auto)] - public static extern bool SetMenuItemInfo(HandleRef hMenu, int uItem, bool fByPosition, MENUITEMINFO_T_RW lpmii); - - [DllImport("user32.dll", CharSet = CharSet.Auto)] - public static extern bool SetMenuInfo(HandleRef hMenu, MENUINFO lpcmi); - - [DllImport("gdi32.dll")] - public static extern bool DeleteObject(IntPtr hObject); - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - components = new Container(); - } - - /// - /// Clean up any resources being used. - /// - protected override void Dispose(bool disposing) - { - if (disposing) - { - //release all the HBitmap handles created - foreach (DictionaryEntry de in properties) - { - if (((Properties) de.Value).renderBmpHbitmap != IntPtr.Zero) - DeleteObject(((Properties) de.Value).renderBmpHbitmap); - } - - - if (components != null) - components.Dispose(); - } - - base.Dispose(disposing); - } - - private Properties EnsurePropertiesExists(MenuItem key) - { - Properties p = (Properties) properties[key]; - - if (p == null) - { - p = new Properties(); - - properties[key] = p; - } - - return p; - } - - - [DefaultValue(null)] - [Description("The Image for the MenuItem")] - [Category("Appearance")] - public Image GetImage(MenuItem mnuItem) - { - return EnsurePropertiesExists(mnuItem).Image; - } - - [DefaultValue(null)] - public void SetImage(MenuItem mnuItem, Image value) - { - Properties prop = EnsurePropertiesExists(mnuItem); - - prop.Image = value; - if (!DesignMode && isVistaOrLater) - { - //Destroy old bitmap object - if (prop.renderBmpHbitmap != IntPtr.Zero) - { - DeleteObject(prop.renderBmpHbitmap); - prop.renderBmpHbitmap = IntPtr.Zero; - } - - //if there's no Image, then just bail out - if (value == null) - return; - - //convert to 32bppPArgb (the 'P' means The red, green, and blue components are premultiplied, according to the alpha component.) - using (Bitmap renderBmp = new Bitmap(value.Width, value.Height, PixelFormat.Format32bppPArgb)) - { - using (Graphics g = Graphics.FromImage(renderBmp)) - g.DrawImage(value, 0, 0, value.Width, value.Height); - - prop.renderBmpHbitmap = renderBmp.GetHbitmap(Color.FromArgb(0, 0, 0, 0)); - } - - if (formHasBeenIntialized) - AddVistaMenuItem(mnuItem); - } - - - //for every Pre-Vista Windows, add the parent of the menu item to the list of parents - if (!DesignMode && !isVistaOrLater && formHasBeenIntialized) - { - AddPreVistaMenuItem(mnuItem); - } - } - - /// - /// Added to support SetImage in the PopUp event. Needs to be called after the last SetImage invocation. - /// - /// - /// yla, 20101019 - public void UpdateParent(MenuItem parent) - { - MenuItem_Popup(parent, new EventArgs()); - } - - public void UpdateParent(ContextMenu parent) - { - MenuItem_Popup(parent, new EventArgs()); - } - - private void AddVistaMenuItem(MenuItem mnuItem) - { - //get the bitmap children of the parent - if (menuParents[mnuItem.Parent] == null) - { - if (mnuItem.Parent.GetType() == typeof (ContextMenu)) - ((ContextMenu) mnuItem.Parent).Popup += MenuItem_Popup; - else - ((MenuItem) mnuItem.Parent).Popup += MenuItem_Popup; - - MenuItem_Popup(mnuItem.Parent, new EventArgs()); - - //intialize all the topmost menus to be of type "MNS_CHECKORBMP" (for Vista classic theme) - SetMenuInfo(new HandleRef(null, mnuItem.Parent.Handle), mnuInfo); - - menuParents[mnuItem.Parent] = true; - } - } - - private void AddPreVistaMenuItem(MenuItem mnuItem) - { - //if (menuParents[mnuItem.Parent] == null) - { - menuParents[mnuItem.Parent] = true; - if (formHasBeenIntialized) - { - //add all the menu items with custom paint events - foreach (MenuItem menu in mnuItem.Parent.MenuItems) - { - //take dynamically added items into account, means removing the handlers first - menu.DrawItem -= MenuItem_DrawItem; - menu.MeasureItem -= MenuItem_MeasureItem; - - //and add them again. This way no multiple handler invocations should happen. - menu.DrawItem += MenuItem_DrawItem; - menu.MeasureItem += MenuItem_MeasureItem; - menu.OwnerDraw = true; - } - } - } - } - - private void MenuItem_Popup(object sender, EventArgs e) - { - MENUITEMINFO_T_RW menuItemInfo = new MENUITEMINFO_T_RW(); - - // get the menu items collection - Menu.MenuItemCollection mi = sender.GetType() == typeof (ContextMenu) - ? ((ContextMenu) sender).MenuItems - : ((MenuItem) sender).MenuItems; - - // we have to track the menuPosition ourselves - // because MenuItem.Index is only correct when - // all the menu items are visible. - int miOn = 0; - for (int i = 0; i < mi.Count; i++) - { - if (mi[i].Visible) - { - Properties p = ((Properties) properties[mi[i]]); - - if (p != null) - { - menuItemInfo.hbmpItem = p.renderBmpHbitmap; - - //refresh the menu item where ((Menu)sender).Handle is the parent handle - SetMenuItemInfo(new HandleRef(null, ((Menu) sender).Handle), - miOn, - true, - menuItemInfo); - } - - miOn++; - } - } - } - } - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] - public class MENUITEMINFO_T_RW - { - public int cbSize = Marshal.SizeOf(typeof (MENUITEMINFO_T_RW)); - public int fMask = 0x00000080; //MIIM_BITMAP = 0x00000080 - public int fType; - public int fState; - public int wID; - public IntPtr hSubMenu = IntPtr.Zero; - public IntPtr hbmpChecked = IntPtr.Zero; - public IntPtr hbmpUnchecked = IntPtr.Zero; - public IntPtr dwItemData = IntPtr.Zero; - public IntPtr dwTypeData = IntPtr.Zero; - public int cch; - public IntPtr hbmpItem = IntPtr.Zero; - } - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] - public class MENUINFO - { - public int cbSize = Marshal.SizeOf(typeof (MENUINFO)); - public int fMask = 0x00000010; //MIM_STYLE; - public int dwStyle = 0x04000000; //MNS_CHECKORBMP; - public uint cyMax; - public IntPtr hbrBack = IntPtr.Zero; - public int dwContextHelpID; - public IntPtr dwMenuData = IntPtr.Zero; - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using System.Collections; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Imaging; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +//VistaMenu v1.8.1, created by Wyatt O'Day +//Visit: http://wyday.com/vistamenu/ +//License: BSD + +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + //Properties for the MenuItem + internal class Properties + { + public Image Image; + public IntPtr renderBmpHbitmap = IntPtr.Zero; + } + + [ProvideProperty("Image", typeof (MenuItem))] + public partial class VistaMenu : Component, IExtenderProvider, ISupportInitialize + { + private readonly bool isVistaOrLater; + private readonly Hashtable menuParents = new Hashtable(); + private readonly MENUINFO mnuInfo = new MENUINFO(); + private readonly Hashtable properties = new Hashtable(); + private Container components; + + private bool formHasBeenIntialized; + + public VistaMenu() + { + isVistaOrLater = Environment.OSVersion.Platform == PlatformID.Win32NT && + Environment.OSVersion.Version.Major >= 6; + + InitializeComponent(); + } + + public VistaMenu(IContainer container) + : this() + { + container.Add(this); + } + + bool IExtenderProvider.CanExtend(object o) + { + if (o is MenuItem) + { + // reject the menuitem if it's a top level element on a MainMenu bar + if (((MenuItem) o).Parent != null) + return ((MenuItem) o).Parent.GetType() != typeof (MainMenu); + + // parent is null - meaning it's a context menu + return true; + } + + if (o is Form) + return true; + + return false; + } + + void ISupportInitialize.BeginInit() + { + } + + void ISupportInitialize.EndInit() + { + if (!DesignMode) + { + if (isVistaOrLater) + { + foreach (DictionaryEntry de in properties) + { + AddVistaMenuItem((MenuItem) de.Key); + } + } + else // Pre-Vista menus + { + // Declare the fonts once: + // If the user changes the menu fonts while your program is + // running, it's tough luck for the user. + // + // This keeps a cap on the memory by avoiding unnecessary Font object + // creation/destruction on every MenuItem .Measure() and .Draw() + menuBoldFont = new Font(SystemFonts.MenuFont, FontStyle.Bold); + + + if (ownerForm != null) + ownerForm.ChangeUICues += ownerForm_ChangeUICues; + + foreach (DictionaryEntry de in properties) + { + AddPreVistaMenuItem((MenuItem) de.Key); + } + + //add event handle for each menu item's measure & draw routines + foreach (DictionaryEntry parent in menuParents) + { + foreach (MenuItem mnuItem in ((Menu) parent.Key).MenuItems) + { + mnuItem.DrawItem += MenuItem_DrawItem; + mnuItem.MeasureItem += MenuItem_MeasureItem; + mnuItem.OwnerDraw = true; + } + } + } + + formHasBeenIntialized = true; + } + } + + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + public static extern bool SetMenuItemInfo(HandleRef hMenu, int uItem, bool fByPosition, MENUITEMINFO_T_RW lpmii); + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + public static extern bool SetMenuInfo(HandleRef hMenu, MENUINFO lpcmi); + + [DllImport("gdi32.dll")] + public static extern bool DeleteObject(IntPtr hObject); + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new Container(); + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool disposing) + { + if (disposing) + { + //release all the HBitmap handles created + foreach (DictionaryEntry de in properties) + { + if (((Properties) de.Value).renderBmpHbitmap != IntPtr.Zero) + DeleteObject(((Properties) de.Value).renderBmpHbitmap); + } + + + if (components != null) + components.Dispose(); + } + + base.Dispose(disposing); + } + + private Properties EnsurePropertiesExists(MenuItem key) + { + Properties p = (Properties) properties[key]; + + if (p == null) + { + p = new Properties(); + + properties[key] = p; + } + + return p; + } + + + [DefaultValue(null)] + [Description("The Image for the MenuItem")] + [Category("Appearance")] + public Image GetImage(MenuItem mnuItem) + { + return EnsurePropertiesExists(mnuItem).Image; + } + + [DefaultValue(null)] + public void SetImage(MenuItem mnuItem, Image value) + { + Properties prop = EnsurePropertiesExists(mnuItem); + + prop.Image = value; + if (!DesignMode && isVistaOrLater) + { + //Destroy old bitmap object + if (prop.renderBmpHbitmap != IntPtr.Zero) + { + DeleteObject(prop.renderBmpHbitmap); + prop.renderBmpHbitmap = IntPtr.Zero; + } + + //if there's no Image, then just bail out + if (value == null) + return; + + //convert to 32bppPArgb (the 'P' means The red, green, and blue components are premultiplied, according to the alpha component.) + using (Bitmap renderBmp = new Bitmap(value.Width, value.Height, PixelFormat.Format32bppPArgb)) + { + using (Graphics g = Graphics.FromImage(renderBmp)) + g.DrawImage(value, 0, 0, value.Width, value.Height); + + prop.renderBmpHbitmap = renderBmp.GetHbitmap(Color.FromArgb(0, 0, 0, 0)); + } + + if (formHasBeenIntialized) + AddVistaMenuItem(mnuItem); + } + + + //for every Pre-Vista Windows, add the parent of the menu item to the list of parents + if (!DesignMode && !isVistaOrLater && formHasBeenIntialized) + { + AddPreVistaMenuItem(mnuItem); + } + } + + /// + /// Added to support SetImage in the PopUp event. Needs to be called after the last SetImage invocation. + /// + /// + /// yla, 20101019 + public void UpdateParent(MenuItem parent) + { + MenuItem_Popup(parent, new EventArgs()); + } + + public void UpdateParent(ContextMenu parent) + { + MenuItem_Popup(parent, new EventArgs()); + } + + private void AddVistaMenuItem(MenuItem mnuItem) + { + //get the bitmap children of the parent + if (menuParents[mnuItem.Parent] == null) + { + if (mnuItem.Parent.GetType() == typeof (ContextMenu)) + ((ContextMenu) mnuItem.Parent).Popup += MenuItem_Popup; + else + ((MenuItem) mnuItem.Parent).Popup += MenuItem_Popup; + + MenuItem_Popup(mnuItem.Parent, new EventArgs()); + + //intialize all the topmost menus to be of type "MNS_CHECKORBMP" (for Vista classic theme) + SetMenuInfo(new HandleRef(null, mnuItem.Parent.Handle), mnuInfo); + + menuParents[mnuItem.Parent] = true; + } + } + + private void AddPreVistaMenuItem(MenuItem mnuItem) + { + //if (menuParents[mnuItem.Parent] == null) + { + menuParents[mnuItem.Parent] = true; + if (formHasBeenIntialized) + { + //add all the menu items with custom paint events + foreach (MenuItem menu in mnuItem.Parent.MenuItems) + { + //take dynamically added items into account, means removing the handlers first + menu.DrawItem -= MenuItem_DrawItem; + menu.MeasureItem -= MenuItem_MeasureItem; + + //and add them again. This way no multiple handler invocations should happen. + menu.DrawItem += MenuItem_DrawItem; + menu.MeasureItem += MenuItem_MeasureItem; + menu.OwnerDraw = true; + } + } + } + } + + private void MenuItem_Popup(object sender, EventArgs e) + { + MENUITEMINFO_T_RW menuItemInfo = new MENUITEMINFO_T_RW(); + + // get the menu items collection + Menu.MenuItemCollection mi = sender.GetType() == typeof (ContextMenu) + ? ((ContextMenu) sender).MenuItems + : ((MenuItem) sender).MenuItems; + + // we have to track the menuPosition ourselves + // because MenuItem.Index is only correct when + // all the menu items are visible. + int miOn = 0; + for (int i = 0; i < mi.Count; i++) + { + if (mi[i].Visible) + { + Properties p = ((Properties) properties[mi[i]]); + + if (p != null) + { + menuItemInfo.hbmpItem = p.renderBmpHbitmap; + + //refresh the menu item where ((Menu)sender).Handle is the parent handle + SetMenuItemInfo(new HandleRef(null, ((Menu) sender).Handle), + miOn, + true, + menuItemInfo); + } + + miOn++; + } + } + } + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + public class MENUITEMINFO_T_RW + { + public int cbSize = Marshal.SizeOf(typeof (MENUITEMINFO_T_RW)); + public int fMask = 0x00000080; //MIIM_BITMAP = 0x00000080 + public int fType; + public int fState; + public int wID; + public IntPtr hSubMenu = IntPtr.Zero; + public IntPtr hbmpChecked = IntPtr.Zero; + public IntPtr hbmpUnchecked = IntPtr.Zero; + public IntPtr dwItemData = IntPtr.Zero; + public IntPtr dwTypeData = IntPtr.Zero; + public int cch; + public IntPtr hbmpItem = IntPtr.Zero; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + public class MENUINFO + { + public int cbSize = Marshal.SizeOf(typeof (MENUINFO)); + public int fMask = 0x00000010; //MIM_STYLE; + public int dwStyle = 0x04000000; //MNS_CHECKORBMP; + public uint cyMax; + public IntPtr hbrBack = IntPtr.Zero; + public int dwContextHelpID; + public IntPtr dwMenuData = IntPtr.Zero; + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/VistaMenuOwnerDrawn.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/VistaMenuOwnerDrawn.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/controls/VistaMenuOwnerDrawn.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/VistaMenuOwnerDrawn.cs index f0431e9741..a866ed1251 100644 --- a/source/ch/cyberduck/ui/winforms/controls/VistaMenuOwnerDrawn.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/VistaMenuOwnerDrawn.cs @@ -1,281 +1,281 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Windows.Forms; - -//VistaMenu v1.8.1, created by Wyatt O'Day, slightly modified -//Visit: http://wyday.com/vistamenu/ -//License: BSD - -namespace Ch.Cyberduck.Ui.Winforms.Controls -{ - public partial class VistaMenu - { - private const int ARROW_MARGIN = 12; - private const int BORDER_VERTICAL = 4; - private const int ICON_SIZE = 16; - private const int LEFT_MARGIN = 4; - private const int RIGHT_MARGIN = 6; - private const int SEPARATOR_HEIGHT = 9; - private const int SHORTCUT_MARGIN = 20; - private static Font menuBoldFont; - private bool isUsingKeyboardAccel; - private ContainerControl ownerForm; - - public VistaMenu(ContainerControl parentControl) - : this() - { - ownerForm = parentControl; - } - - public ContainerControl ContainerControl - { - get { return ownerForm; } - set { ownerForm = value; } - } - - public override ISite Site - { - set - { - // Runs at design time, ensures designer initializes ContainerControl - base.Site = value; - if (value == null) return; - IDesignerHost service = value.GetService(typeof (IDesignerHost)) as IDesignerHost; - if (service == null) return; - IComponent rootComponent = service.RootComponent; - ContainerControl = rootComponent as ContainerControl; - } - } - - - private void ownerForm_ChangeUICues(object sender, UICuesEventArgs e) - { - isUsingKeyboardAccel = e.ShowKeyboard; - } - - - private static void MenuItem_MeasureItem(object sender, MeasureItemEventArgs e) - { - Font font = ((MenuItem) sender).DefaultItem - ? menuBoldFont - : SystemFonts.MenuFont; - - if (((MenuItem) sender).Text == "-") - e.ItemHeight = SEPARATOR_HEIGHT; - else - { - e.ItemHeight = ((SystemFonts.MenuFont.Height > ICON_SIZE) ? SystemFonts.MenuFont.Height : ICON_SIZE) - + BORDER_VERTICAL; - - e.ItemWidth = LEFT_MARGIN + ICON_SIZE + RIGHT_MARGIN - //item text width - + - TextRenderer.MeasureText(((MenuItem) sender).Text, font, Size.Empty, - TextFormatFlags.SingleLine | TextFormatFlags.NoClipping).Width - + SHORTCUT_MARGIN - //shortcut text width - + - TextRenderer.MeasureText(ShortcutToString(((MenuItem) sender).Shortcut), font, Size.Empty, - TextFormatFlags.SingleLine | TextFormatFlags.NoClipping).Width - //arrow width - + ((((MenuItem) sender).IsParent) ? ARROW_MARGIN : 0); - } - } - - private void MenuItem_DrawItem(object sender, DrawItemEventArgs e) - { - e.Graphics.CompositingQuality = CompositingQuality.HighSpeed; - e.Graphics.InterpolationMode = InterpolationMode.Low; - - bool menuSelected = (e.State & DrawItemState.Selected) == DrawItemState.Selected; - - if (menuSelected) - e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds); - else - e.Graphics.FillRectangle(SystemBrushes.Menu, e.Bounds); - - if (((MenuItem) sender).Text == "-") - { - //draw the separator - int yCenter = e.Bounds.Top + (e.Bounds.Height/2) - 1; - - e.Graphics.DrawLine(SystemPens.ControlDark, e.Bounds.Left + 1, yCenter, - (e.Bounds.Left + e.Bounds.Width - 2), yCenter); - e.Graphics.DrawLine(SystemPens.ControlLightLight, e.Bounds.Left + 1, yCenter + 1, - (e.Bounds.Left + e.Bounds.Width - 2), yCenter + 1); - } - else //regular menu items - { - //draw the item text - DrawText(sender, e, menuSelected); - - if (((MenuItem) sender).Checked) - { - if (((MenuItem) sender).RadioCheck) - { - //draw the bullet - ControlPaint.DrawMenuGlyph(e.Graphics, - e.Bounds.Left + - (LEFT_MARGIN + ICON_SIZE + RIGHT_MARGIN - - SystemInformation.MenuCheckSize.Width)/2, - e.Bounds.Top + - (e.Bounds.Height - SystemInformation.MenuCheckSize.Height)/2 + 1, - SystemInformation.MenuCheckSize.Width, - SystemInformation.MenuCheckSize.Height, - MenuGlyph.Bullet, - menuSelected ? SystemColors.HighlightText : SystemColors.MenuText, - menuSelected ? SystemColors.Highlight : SystemColors.Menu); - } - else - { - //draw the check mark - ControlPaint.DrawMenuGlyph(e.Graphics, - e.Bounds.Left + - (LEFT_MARGIN + ICON_SIZE + RIGHT_MARGIN - - SystemInformation.MenuCheckSize.Width)/2, - e.Bounds.Top + - (e.Bounds.Height - SystemInformation.MenuCheckSize.Height)/2 + 1, - SystemInformation.MenuCheckSize.Width, - SystemInformation.MenuCheckSize.Height, - MenuGlyph.Checkmark, - menuSelected ? SystemColors.HighlightText : SystemColors.MenuText, - menuSelected ? SystemColors.Highlight : SystemColors.Menu); - } - } - else - { - Image drawImg = GetImage(((MenuItem) sender)); - - if (drawImg != null) - { - //draw the image - if (((MenuItem) sender).Enabled) - e.Graphics.DrawImage(drawImg, e.Bounds.Left + LEFT_MARGIN, - e.Bounds.Top + ((e.Bounds.Height - ICON_SIZE)/2), - ICON_SIZE, ICON_SIZE); - else - ControlPaint.DrawImageDisabled(e.Graphics, drawImg, - e.Bounds.Left + LEFT_MARGIN, - e.Bounds.Top + ((e.Bounds.Height - ICON_SIZE)/2), - SystemColors.Menu); - } - } - } - } - - - private static string ShortcutToString(Shortcut shortcut) - { - if (shortcut != Shortcut.None) - { - Keys keys = (Keys) shortcut; - return TypeDescriptor.GetConverter(keys.GetType()).ConvertToString(keys); - } - - return null; - } - - private void DrawText(object sender, DrawItemEventArgs e, bool isSelected) - { - string shortcutText = ShortcutToString(((MenuItem) sender).Shortcut); - if (null == shortcutText && ((MenuItem) sender).Text.Contains("\t")) - { - string sc = ((MenuItem) sender).Text; - shortcutText = sc.Substring(sc.IndexOf('\t')+1); - } - string itemText = ((MenuItem) sender).Text; - if (itemText.Contains("\t")){ - itemText = itemText.Substring(0, itemText.IndexOf('\t')); - } - - int yPos = e.Bounds.Top + (e.Bounds.Height - SystemFonts.MenuFont.Height) / 2; - - Font font = ((MenuItem)sender).DefaultItem - ? menuBoldFont - : SystemFonts.MenuFont; - - Size textSize = TextRenderer.MeasureText(itemText, - font, Size.Empty, - TextFormatFlags.SingleLine | TextFormatFlags.NoClipping); - - Rectangle textRect = new Rectangle(e.Bounds.Left + LEFT_MARGIN + ICON_SIZE + RIGHT_MARGIN, yPos, - textSize.Width, textSize.Height); - - if (!((MenuItem)sender).Enabled && !isSelected) // disabled and not selected - { - textRect.Offset(1, 1); - - TextRenderer.DrawText(e.Graphics, itemText, font, - textRect, - SystemColors.ControlLightLight, - TextFormatFlags.SingleLine | - (isUsingKeyboardAccel ? 0 : TextFormatFlags.HidePrefix) | - TextFormatFlags.NoClipping); - - textRect.Offset(-1, -1); - } - - //Draw the menu item text - TextRenderer.DrawText(e.Graphics, itemText, font, - textRect, - ((MenuItem)sender).Enabled - ? (isSelected ? SystemColors.HighlightText : SystemColors.MenuText) - : SystemColors.GrayText, - TextFormatFlags.SingleLine | (isUsingKeyboardAccel ? 0 : TextFormatFlags.HidePrefix) | - TextFormatFlags.NoClipping); - - - //Draw the shortcut text - if (shortcutText != null) - { - textSize = TextRenderer.MeasureText(shortcutText, - font, Size.Empty, - TextFormatFlags.SingleLine | TextFormatFlags.NoClipping); - - - textRect = new Rectangle(e.Bounds.Width - textSize.Width - ARROW_MARGIN, yPos, textSize.Width, - textSize.Height); - - if (!((MenuItem)sender).Enabled && !isSelected) // disabled and not selected - { - textRect.Offset(1, 1); - - TextRenderer.DrawText(e.Graphics, shortcutText, font, - textRect, - SystemColors.ControlLightLight, - TextFormatFlags.SingleLine | - (isUsingKeyboardAccel ? 0 : TextFormatFlags.HidePrefix) | - TextFormatFlags.NoClipping); - - textRect.Offset(-1, -1); - } - - TextRenderer.DrawText(e.Graphics, shortcutText, font, - textRect, - ((MenuItem)sender).Enabled - ? (isSelected ? SystemColors.HighlightText : SystemColors.MenuText) - : SystemColors.GrayText, - TextFormatFlags.SingleLine | TextFormatFlags.NoClipping); - } - } - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System.ComponentModel; +using System.ComponentModel.Design; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +//VistaMenu v1.8.1, created by Wyatt O'Day, slightly modified +//Visit: http://wyday.com/vistamenu/ +//License: BSD + +namespace Ch.Cyberduck.Ui.Winforms.Controls +{ + public partial class VistaMenu + { + private const int ARROW_MARGIN = 12; + private const int BORDER_VERTICAL = 4; + private const int ICON_SIZE = 16; + private const int LEFT_MARGIN = 4; + private const int RIGHT_MARGIN = 6; + private const int SEPARATOR_HEIGHT = 9; + private const int SHORTCUT_MARGIN = 20; + private static Font menuBoldFont; + private bool isUsingKeyboardAccel; + private ContainerControl ownerForm; + + public VistaMenu(ContainerControl parentControl) + : this() + { + ownerForm = parentControl; + } + + public ContainerControl ContainerControl + { + get { return ownerForm; } + set { ownerForm = value; } + } + + public override ISite Site + { + set + { + // Runs at design time, ensures designer initializes ContainerControl + base.Site = value; + if (value == null) return; + IDesignerHost service = value.GetService(typeof (IDesignerHost)) as IDesignerHost; + if (service == null) return; + IComponent rootComponent = service.RootComponent; + ContainerControl = rootComponent as ContainerControl; + } + } + + + private void ownerForm_ChangeUICues(object sender, UICuesEventArgs e) + { + isUsingKeyboardAccel = e.ShowKeyboard; + } + + + private static void MenuItem_MeasureItem(object sender, MeasureItemEventArgs e) + { + Font font = ((MenuItem) sender).DefaultItem + ? menuBoldFont + : SystemFonts.MenuFont; + + if (((MenuItem) sender).Text == "-") + e.ItemHeight = SEPARATOR_HEIGHT; + else + { + e.ItemHeight = ((SystemFonts.MenuFont.Height > ICON_SIZE) ? SystemFonts.MenuFont.Height : ICON_SIZE) + + BORDER_VERTICAL; + + e.ItemWidth = LEFT_MARGIN + ICON_SIZE + RIGHT_MARGIN + //item text width + + + TextRenderer.MeasureText(((MenuItem) sender).Text, font, Size.Empty, + TextFormatFlags.SingleLine | TextFormatFlags.NoClipping).Width + + SHORTCUT_MARGIN + //shortcut text width + + + TextRenderer.MeasureText(ShortcutToString(((MenuItem) sender).Shortcut), font, Size.Empty, + TextFormatFlags.SingleLine | TextFormatFlags.NoClipping).Width + //arrow width + + ((((MenuItem) sender).IsParent) ? ARROW_MARGIN : 0); + } + } + + private void MenuItem_DrawItem(object sender, DrawItemEventArgs e) + { + e.Graphics.CompositingQuality = CompositingQuality.HighSpeed; + e.Graphics.InterpolationMode = InterpolationMode.Low; + + bool menuSelected = (e.State & DrawItemState.Selected) == DrawItemState.Selected; + + if (menuSelected) + e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds); + else + e.Graphics.FillRectangle(SystemBrushes.Menu, e.Bounds); + + if (((MenuItem) sender).Text == "-") + { + //draw the separator + int yCenter = e.Bounds.Top + (e.Bounds.Height/2) - 1; + + e.Graphics.DrawLine(SystemPens.ControlDark, e.Bounds.Left + 1, yCenter, + (e.Bounds.Left + e.Bounds.Width - 2), yCenter); + e.Graphics.DrawLine(SystemPens.ControlLightLight, e.Bounds.Left + 1, yCenter + 1, + (e.Bounds.Left + e.Bounds.Width - 2), yCenter + 1); + } + else //regular menu items + { + //draw the item text + DrawText(sender, e, menuSelected); + + if (((MenuItem) sender).Checked) + { + if (((MenuItem) sender).RadioCheck) + { + //draw the bullet + ControlPaint.DrawMenuGlyph(e.Graphics, + e.Bounds.Left + + (LEFT_MARGIN + ICON_SIZE + RIGHT_MARGIN - + SystemInformation.MenuCheckSize.Width)/2, + e.Bounds.Top + + (e.Bounds.Height - SystemInformation.MenuCheckSize.Height)/2 + 1, + SystemInformation.MenuCheckSize.Width, + SystemInformation.MenuCheckSize.Height, + MenuGlyph.Bullet, + menuSelected ? SystemColors.HighlightText : SystemColors.MenuText, + menuSelected ? SystemColors.Highlight : SystemColors.Menu); + } + else + { + //draw the check mark + ControlPaint.DrawMenuGlyph(e.Graphics, + e.Bounds.Left + + (LEFT_MARGIN + ICON_SIZE + RIGHT_MARGIN - + SystemInformation.MenuCheckSize.Width)/2, + e.Bounds.Top + + (e.Bounds.Height - SystemInformation.MenuCheckSize.Height)/2 + 1, + SystemInformation.MenuCheckSize.Width, + SystemInformation.MenuCheckSize.Height, + MenuGlyph.Checkmark, + menuSelected ? SystemColors.HighlightText : SystemColors.MenuText, + menuSelected ? SystemColors.Highlight : SystemColors.Menu); + } + } + else + { + Image drawImg = GetImage(((MenuItem) sender)); + + if (drawImg != null) + { + //draw the image + if (((MenuItem) sender).Enabled) + e.Graphics.DrawImage(drawImg, e.Bounds.Left + LEFT_MARGIN, + e.Bounds.Top + ((e.Bounds.Height - ICON_SIZE)/2), + ICON_SIZE, ICON_SIZE); + else + ControlPaint.DrawImageDisabled(e.Graphics, drawImg, + e.Bounds.Left + LEFT_MARGIN, + e.Bounds.Top + ((e.Bounds.Height - ICON_SIZE)/2), + SystemColors.Menu); + } + } + } + } + + + private static string ShortcutToString(Shortcut shortcut) + { + if (shortcut != Shortcut.None) + { + Keys keys = (Keys) shortcut; + return TypeDescriptor.GetConverter(keys.GetType()).ConvertToString(keys); + } + + return null; + } + + private void DrawText(object sender, DrawItemEventArgs e, bool isSelected) + { + string shortcutText = ShortcutToString(((MenuItem) sender).Shortcut); + if (null == shortcutText && ((MenuItem) sender).Text.Contains("\t")) + { + string sc = ((MenuItem) sender).Text; + shortcutText = sc.Substring(sc.IndexOf('\t')+1); + } + string itemText = ((MenuItem) sender).Text; + if (itemText.Contains("\t")){ + itemText = itemText.Substring(0, itemText.IndexOf('\t')); + } + + int yPos = e.Bounds.Top + (e.Bounds.Height - SystemFonts.MenuFont.Height) / 2; + + Font font = ((MenuItem)sender).DefaultItem + ? menuBoldFont + : SystemFonts.MenuFont; + + Size textSize = TextRenderer.MeasureText(itemText, + font, Size.Empty, + TextFormatFlags.SingleLine | TextFormatFlags.NoClipping); + + Rectangle textRect = new Rectangle(e.Bounds.Left + LEFT_MARGIN + ICON_SIZE + RIGHT_MARGIN, yPos, + textSize.Width, textSize.Height); + + if (!((MenuItem)sender).Enabled && !isSelected) // disabled and not selected + { + textRect.Offset(1, 1); + + TextRenderer.DrawText(e.Graphics, itemText, font, + textRect, + SystemColors.ControlLightLight, + TextFormatFlags.SingleLine | + (isUsingKeyboardAccel ? 0 : TextFormatFlags.HidePrefix) | + TextFormatFlags.NoClipping); + + textRect.Offset(-1, -1); + } + + //Draw the menu item text + TextRenderer.DrawText(e.Graphics, itemText, font, + textRect, + ((MenuItem)sender).Enabled + ? (isSelected ? SystemColors.HighlightText : SystemColors.MenuText) + : SystemColors.GrayText, + TextFormatFlags.SingleLine | (isUsingKeyboardAccel ? 0 : TextFormatFlags.HidePrefix) | + TextFormatFlags.NoClipping); + + + //Draw the shortcut text + if (shortcutText != null) + { + textSize = TextRenderer.MeasureText(shortcutText, + font, Size.Empty, + TextFormatFlags.SingleLine | TextFormatFlags.NoClipping); + + + textRect = new Rectangle(e.Bounds.Width - textSize.Width - ARROW_MARGIN, yPos, textSize.Width, + textSize.Height); + + if (!((MenuItem)sender).Enabled && !isSelected) // disabled and not selected + { + textRect.Offset(1, 1); + + TextRenderer.DrawText(e.Graphics, shortcutText, font, + textRect, + SystemColors.ControlLightLight, + TextFormatFlags.SingleLine | + (isUsingKeyboardAccel ? 0 : TextFormatFlags.HidePrefix) | + TextFormatFlags.NoClipping); + + textRect.Offset(-1, -1); + } + + TextRenderer.DrawText(e.Graphics, shortcutText, font, + textRect, + ((MenuItem)sender).Enabled + ? (isSelected ? SystemColors.HighlightText : SystemColors.MenuText) + : SystemColors.GrayText, + TextFormatFlags.SingleLine | TextFormatFlags.NoClipping); + } + } + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/controls/design/SearchTextBoxDesigner.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/design/SearchTextBoxDesigner.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/controls/design/SearchTextBoxDesigner.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/design/SearchTextBoxDesigner.cs index b444ede9c1..e633e57f32 100644 --- a/source/ch/cyberduck/ui/winforms/controls/design/SearchTextBoxDesigner.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/controls/design/SearchTextBoxDesigner.cs @@ -1,93 +1,93 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using System.Collections; -using System.ComponentModel; -using System.Windows.Forms; -using System.Windows.Forms.Design; - -namespace Ch.Cyberduck.Ui.Winforms.Controls.Design -{ - internal class SearchTextBoxDesigner : ControlDesigner - { - public SearchTextBoxDesigner() - { - base.AutoResizeHandles = false; - } - - public override SelectionRules SelectionRules - { - get { return base.SelectionRules & ~(SelectionRules.BottomSizeable | SelectionRules.TopSizeable); } - } - - private string Text - { - get { return Control.Text; } - set - { - Control.Text = value; - (Control).Select(); - } - } - - public override void InitializeNewComponent(IDictionary defaultValues) - { - base.InitializeNewComponent(defaultValues); - PropertyDescriptor textProperty = TypeDescriptor.GetProperties(base.Component)["Text"]; - if ((textProperty != null && textProperty.PropertyType == typeof (string)) && - (!textProperty.IsReadOnly && textProperty.IsBrowsable)) - textProperty.SetValue(base.Component, String.Empty); - - PropertyDescriptor cursorProperty = TypeDescriptor.GetProperties(base.Component)["Cursor"]; - if (cursorProperty != null && cursorProperty.PropertyType == typeof (Cursor)) - cursorProperty.SetValue(base.Component, Cursors.IBeam); - - PropertyDescriptor borderStyleProperty = TypeDescriptor.GetProperties(base.Component)["BorderStyle"]; - if (borderStyleProperty != null && borderStyleProperty.PropertyType == typeof (BorderStyle)) - borderStyleProperty.SetValue(base.Component, BorderStyle.FixedSingle); - } - - protected override void PreFilterProperties(IDictionary properties) - { - base.PreFilterProperties(properties); - string[] textArray = new[] {"Text"}; - Attribute[] attributes = new Attribute[0]; - for (int i = 0; i < textArray.Length; i++) - { - PropertyDescriptor oldPropertyDescriptor = (PropertyDescriptor) properties[textArray[i]]; - if (oldPropertyDescriptor != null) - { - properties[textArray[i]] = TypeDescriptor.CreateProperty(typeof (SearchTextBoxDesigner), - oldPropertyDescriptor, attributes); - } - } - } - - private void ResetText() - { - Control.Text = String.Empty; - } - - private bool ShouldSerializeText() - { - return TypeDescriptor.GetProperties(typeof (SearchTextBox))["Text"].ShouldSerializeValue(base.Component); - } - - // Properties - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.Windows.Forms.Design; + +namespace Ch.Cyberduck.Ui.Winforms.Controls.Design +{ + internal class SearchTextBoxDesigner : ControlDesigner + { + public SearchTextBoxDesigner() + { + base.AutoResizeHandles = false; + } + + public override SelectionRules SelectionRules + { + get { return base.SelectionRules & ~(SelectionRules.BottomSizeable | SelectionRules.TopSizeable); } + } + + private string Text + { + get { return Control.Text; } + set + { + Control.Text = value; + (Control).Select(); + } + } + + public override void InitializeNewComponent(IDictionary defaultValues) + { + base.InitializeNewComponent(defaultValues); + PropertyDescriptor textProperty = TypeDescriptor.GetProperties(base.Component)["Text"]; + if ((textProperty != null && textProperty.PropertyType == typeof (string)) && + (!textProperty.IsReadOnly && textProperty.IsBrowsable)) + textProperty.SetValue(base.Component, String.Empty); + + PropertyDescriptor cursorProperty = TypeDescriptor.GetProperties(base.Component)["Cursor"]; + if (cursorProperty != null && cursorProperty.PropertyType == typeof (Cursor)) + cursorProperty.SetValue(base.Component, Cursors.IBeam); + + PropertyDescriptor borderStyleProperty = TypeDescriptor.GetProperties(base.Component)["BorderStyle"]; + if (borderStyleProperty != null && borderStyleProperty.PropertyType == typeof (BorderStyle)) + borderStyleProperty.SetValue(base.Component, BorderStyle.FixedSingle); + } + + protected override void PreFilterProperties(IDictionary properties) + { + base.PreFilterProperties(properties); + string[] textArray = new[] {"Text"}; + Attribute[] attributes = new Attribute[0]; + for (int i = 0; i < textArray.Length; i++) + { + PropertyDescriptor oldPropertyDescriptor = (PropertyDescriptor) properties[textArray[i]]; + if (oldPropertyDescriptor != null) + { + properties[textArray[i]] = TypeDescriptor.CreateProperty(typeof (SearchTextBoxDesigner), + oldPropertyDescriptor, attributes); + } + } + } + + private void ResetText() + { + Control.Text = String.Empty; + } + + private bool ShouldSerializeText() + { + return TypeDescriptor.GetProperties(typeof (SearchTextBox))["Text"].ShouldSerializeValue(base.Component); + } + + // Properties + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/taskdialog/CommandButton.Designer.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/taskdialog/CommandButton.Designer.cs similarity index 96% rename from source/ch/cyberduck/ui/winforms/taskdialog/CommandButton.Designer.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/taskdialog/CommandButton.Designer.cs index 70214a224b..f5c1218912 100644 --- a/source/ch/cyberduck/ui/winforms/taskdialog/CommandButton.Designer.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/taskdialog/CommandButton.Designer.cs @@ -1,36 +1,36 @@ -namespace Ch.Cyberduck.Ui.Winforms.Taskdialog -{ - partial class CommandButton - { - /// - /// 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 Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - components = new System.ComponentModel.Container(); - } - - #endregion - } -} +namespace Ch.Cyberduck.Ui.Winforms.Taskdialog +{ + partial class CommandButton + { + /// + /// 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 Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/source/ch/cyberduck/ui/winforms/taskdialog/CommandButton.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/taskdialog/CommandButton.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/taskdialog/CommandButton.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/taskdialog/CommandButton.cs index 9e4413930e..845d1b7c4d 100644 --- a/source/ch/cyberduck/ui/winforms/taskdialog/CommandButton.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/taskdialog/CommandButton.cs @@ -1,284 +1,284 @@ -// -// Copyright (c) 2010 Yves Langisch. All rights reserved. -// http://cyberduck.ch/ -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// Bug fixes, suggestions and comments should be sent to: -// yves@cyberduck.ch -// -using System; -using System.ComponentModel; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Drawing.Text; -using System.Windows.Forms; -using Ch.Cyberduck.Ui.Controller; - -namespace Ch.Cyberduck.Ui.Winforms.Taskdialog -{ - public partial class CommandButton : Button - { - //-------------------------------------------------------------------------------- - - //-------------------------------------------------------------------------------- - - private const int ARROW_WIDTH = 19; - private const int LEFT_MARGIN = 10; - private const int TOP_MARGIN = 10; - private Image imgArrow1; - private Image imgArrow2; - - private eButtonState m_State = eButtonState.Normal; - private bool m_autoHeight = true; - - //-------------------------------------------------------------------------------- - - //-------------------------------------------------------------------------------- - // Override this to make sure the control is invalidated (repainted) when 'Text' is changed - - // SmallFont is the font used for secondary lines - private Font m_smallFont; - - public CommandButton() - { - InitializeComponent(); - base.Font = new Font("Arial", 11.75F, FontStyle.Regular, GraphicsUnit.Point, 0); - m_smallFont = new Font("Arial", 8F, FontStyle.Regular, GraphicsUnit.Point, 0); - } - - public override string Text - { - get { return base.Text; } - set - { - base.Text = value; - if (m_autoHeight) - Height = GetBestHeight(); - Invalidate(); - } - } - - public Font SmallFont - { - get { return m_smallFont; } - set { m_smallFont = value; } - } - - // AutoHeight determines whether the button automatically resizes itself to fit the Text - - [Browsable(true)] - [Category("Behavior")] - [DefaultValue(true)] - public bool AutoHeight - { - get { return m_autoHeight; } - set - { - m_autoHeight = value; - if (m_autoHeight) Invalidate(); - } - } - - //-------------------------------------------------------------------------------- - - //-------------------------------------------------------------------------------- - - //-------------------------------------------------------------------------------- - - //-------------------------------------------------------------------------------- - public int GetBestHeight() - { - return (TOP_MARGIN*2) + (int) GetSmallTextSizeF().Height + (int) GetLargeTextSizeF().Height; - } - - //-------------------------------------------------------------------------------- - - //-------------------------------------------------------------------------------- - private string GetLargeText() - { - string[] lines = Text.Split(new[] {'\n'}); - return lines[0]; - } - - private string GetSmallText() - { - if (Text.IndexOf('\n') < 0) - return String.Empty; - - string s = Text; - string[] lines = s.Split(new[] {'\n'}); - s = String.Empty; - for (int i = 1; i < lines.Length; i++) - s += lines[i] + "\n"; - return s.Trim(new[] {'\n'}); - } - - private SizeF GetLargeTextSizeF() - { - int x = LEFT_MARGIN + ARROW_WIDTH + 5; - SizeF mzSize = new SizeF(Width - x - LEFT_MARGIN, 5000.0F); // presume RIGHT_MARGIN = LEFT_MARGIN - Graphics g = Graphics.FromHwnd(Handle); - SizeF textSize = g.MeasureString(GetLargeText(), base.Font, mzSize); - return textSize; - } - - private SizeF GetSmallTextSizeF() - { - string s = GetSmallText(); - if (s == String.Empty) return new SizeF(0, 0); - int x = LEFT_MARGIN + ARROW_WIDTH + 8; // <- indent small text slightly more - SizeF mzSize = new SizeF(Width - x - LEFT_MARGIN, 5000.0F); // presume RIGHT_MARGIN = LEFT_MARGIN - Graphics g = Graphics.FromHwnd(Handle); - SizeF textSize = g.MeasureString(s, m_smallFont, mzSize); - return textSize; - } - - //-------------------------------------------------------------------------------- - - //-------------------------------------------------------------------------------- - protected override void OnCreateControl() - { - base.OnCreateControl(); - imgArrow1 = IconCache.Instance.IconForName("greenArrow1"); - imgArrow2 = IconCache.Instance.IconForName("greenArrow1"); - } - - //-------------------------------------------------------------------------------- - protected override void OnPaint(PaintEventArgs e) - { - e.Graphics.SmoothingMode = SmoothingMode.HighQuality; - e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; - - LinearGradientBrush brush; - LinearGradientMode mode = LinearGradientMode.Vertical; - - Rectangle newRect = new Rectangle(ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width - 1, - ClientRectangle.Height - 1); - Color text_color = SystemColors.WindowText; - - Image img = imgArrow1; - - if (Enabled) - { - switch (m_State) - { - case eButtonState.Normal: - e.Graphics.FillRectangle(Brushes.White, newRect); - if (base.Focused) - e.Graphics.DrawRectangle(new Pen(Color.SkyBlue, 1), newRect); - else - e.Graphics.DrawRectangle(new Pen(Color.White, 1), newRect); - text_color = Color.DarkBlue; - break; - - case eButtonState.MouseOver: - brush = new LinearGradientBrush(newRect, Color.White, Color.WhiteSmoke, mode); - e.Graphics.FillRectangle(brush, newRect); - e.Graphics.DrawRectangle(new Pen(Color.Silver, 1), newRect); - img = imgArrow2; - text_color = Color.Blue; - break; - - case eButtonState.Down: - brush = new LinearGradientBrush(newRect, Color.WhiteSmoke, Color.White, mode); - e.Graphics.FillRectangle(brush, newRect); - e.Graphics.DrawRectangle(new Pen(Color.DarkGray, 1), newRect); - text_color = Color.DarkBlue; - break; - } - } - else - { - brush = new LinearGradientBrush(newRect, Color.WhiteSmoke, Color.Gainsboro, mode); - e.Graphics.FillRectangle(brush, newRect); - e.Graphics.DrawRectangle(new Pen(Color.DarkGray, 1), newRect); - text_color = Color.DarkBlue; - } - - string largetext = GetLargeText(); - string smalltext = GetSmallText(); - - SizeF szL = GetLargeTextSizeF(); - //e.Graphics.DrawString(largetext, base.Font, new SolidBrush(text_color), new RectangleF(new PointF(LEFT_MARGIN + imgArrow1.Width + 5, TOP_MARGIN), szL)); - TextRenderer.DrawText(e.Graphics, largetext, base.Font, - new Rectangle(LEFT_MARGIN + imgArrow1.Width + 5, TOP_MARGIN, (int) szL.Width, - (int) szL.Height), text_color, TextFormatFlags.Default); - - if (smalltext != String.Empty) - { - SizeF szS = GetSmallTextSizeF(); - e.Graphics.DrawString(smalltext, m_smallFont, new SolidBrush(text_color), - new RectangleF( - new PointF(LEFT_MARGIN + imgArrow1.Width + 8, TOP_MARGIN + (int) szL.Height), - szS)); - } - - e.Graphics.DrawImage(img, new Point(LEFT_MARGIN, TOP_MARGIN + (int) (szL.Height/2) - (img.Height/2))); - } - - //-------------------------------------------------------------------------------- - protected override void OnMouseLeave(EventArgs e) - { - m_State = eButtonState.Normal; - Invalidate(); - base.OnMouseLeave(e); - } - - //-------------------------------------------------------------------------------- - protected override void OnMouseEnter(EventArgs e) - { - m_State = eButtonState.MouseOver; - Invalidate(); - base.OnMouseEnter(e); - } - - //-------------------------------------------------------------------------------- - protected override void OnMouseUp(MouseEventArgs e) - { - m_State = eButtonState.MouseOver; - Invalidate(); - base.OnMouseUp(e); - } - - //-------------------------------------------------------------------------------- - protected override void OnMouseDown(MouseEventArgs e) - { - m_State = eButtonState.Down; - Invalidate(); - base.OnMouseDown(e); - } - - //-------------------------------------------------------------------------------- - protected override void OnSizeChanged(EventArgs e) - { - if (m_autoHeight) - { - int h = GetBestHeight(); - if (Height != h) - { - Height = h; - return; - } - } - base.OnSizeChanged(e); - } - - private enum eButtonState - { - Normal, - MouseOver, - Down - } - - //-------------------------------------------------------------------------------- - } +// +// Copyright (c) 2010 Yves Langisch. All rights reserved. +// http://cyberduck.ch/ +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Bug fixes, suggestions and comments should be sent to: +// yves@cyberduck.ch +// +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Text; +using System.Windows.Forms; +using Ch.Cyberduck.Ui.Controller; + +namespace Ch.Cyberduck.Ui.Winforms.Taskdialog +{ + public partial class CommandButton : Button + { + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + + private const int ARROW_WIDTH = 19; + private const int LEFT_MARGIN = 10; + private const int TOP_MARGIN = 10; + private Image imgArrow1; + private Image imgArrow2; + + private eButtonState m_State = eButtonState.Normal; + private bool m_autoHeight = true; + + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + // Override this to make sure the control is invalidated (repainted) when 'Text' is changed + + // SmallFont is the font used for secondary lines + private Font m_smallFont; + + public CommandButton() + { + InitializeComponent(); + base.Font = new Font("Arial", 11.75F, FontStyle.Regular, GraphicsUnit.Point, 0); + m_smallFont = new Font("Arial", 8F, FontStyle.Regular, GraphicsUnit.Point, 0); + } + + public override string Text + { + get { return base.Text; } + set + { + base.Text = value; + if (m_autoHeight) + Height = GetBestHeight(); + Invalidate(); + } + } + + public Font SmallFont + { + get { return m_smallFont; } + set { m_smallFont = value; } + } + + // AutoHeight determines whether the button automatically resizes itself to fit the Text + + [Browsable(true)] + [Category("Behavior")] + [DefaultValue(true)] + public bool AutoHeight + { + get { return m_autoHeight; } + set + { + m_autoHeight = value; + if (m_autoHeight) Invalidate(); + } + } + + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + public int GetBestHeight() + { + return (TOP_MARGIN*2) + (int) GetSmallTextSizeF().Height + (int) GetLargeTextSizeF().Height; + } + + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + private string GetLargeText() + { + string[] lines = Text.Split(new[] {'\n'}); + return lines[0]; + } + + private string GetSmallText() + { + if (Text.IndexOf('\n') < 0) + return String.Empty; + + string s = Text; + string[] lines = s.Split(new[] {'\n'}); + s = String.Empty; + for (int i = 1; i < lines.Length; i++) + s += lines[i] + "\n"; + return s.Trim(new[] {'\n'}); + } + + private SizeF GetLargeTextSizeF() + { + int x = LEFT_MARGIN + ARROW_WIDTH + 5; + SizeF mzSize = new SizeF(Width - x - LEFT_MARGIN, 5000.0F); // presume RIGHT_MARGIN = LEFT_MARGIN + Graphics g = Graphics.FromHwnd(Handle); + SizeF textSize = g.MeasureString(GetLargeText(), base.Font, mzSize); + return textSize; + } + + private SizeF GetSmallTextSizeF() + { + string s = GetSmallText(); + if (s == String.Empty) return new SizeF(0, 0); + int x = LEFT_MARGIN + ARROW_WIDTH + 8; // <- indent small text slightly more + SizeF mzSize = new SizeF(Width - x - LEFT_MARGIN, 5000.0F); // presume RIGHT_MARGIN = LEFT_MARGIN + Graphics g = Graphics.FromHwnd(Handle); + SizeF textSize = g.MeasureString(s, m_smallFont, mzSize); + return textSize; + } + + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + protected override void OnCreateControl() + { + base.OnCreateControl(); + imgArrow1 = IconCache.Instance.IconForName("greenArrow1"); + imgArrow2 = IconCache.Instance.IconForName("greenArrow1"); + } + + //-------------------------------------------------------------------------------- + protected override void OnPaint(PaintEventArgs e) + { + e.Graphics.SmoothingMode = SmoothingMode.HighQuality; + e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; + + LinearGradientBrush brush; + LinearGradientMode mode = LinearGradientMode.Vertical; + + Rectangle newRect = new Rectangle(ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width - 1, + ClientRectangle.Height - 1); + Color text_color = SystemColors.WindowText; + + Image img = imgArrow1; + + if (Enabled) + { + switch (m_State) + { + case eButtonState.Normal: + e.Graphics.FillRectangle(Brushes.White, newRect); + if (base.Focused) + e.Graphics.DrawRectangle(new Pen(Color.SkyBlue, 1), newRect); + else + e.Graphics.DrawRectangle(new Pen(Color.White, 1), newRect); + text_color = Color.DarkBlue; + break; + + case eButtonState.MouseOver: + brush = new LinearGradientBrush(newRect, Color.White, Color.WhiteSmoke, mode); + e.Graphics.FillRectangle(brush, newRect); + e.Graphics.DrawRectangle(new Pen(Color.Silver, 1), newRect); + img = imgArrow2; + text_color = Color.Blue; + break; + + case eButtonState.Down: + brush = new LinearGradientBrush(newRect, Color.WhiteSmoke, Color.White, mode); + e.Graphics.FillRectangle(brush, newRect); + e.Graphics.DrawRectangle(new Pen(Color.DarkGray, 1), newRect); + text_color = Color.DarkBlue; + break; + } + } + else + { + brush = new LinearGradientBrush(newRect, Color.WhiteSmoke, Color.Gainsboro, mode); + e.Graphics.FillRectangle(brush, newRect); + e.Graphics.DrawRectangle(new Pen(Color.DarkGray, 1), newRect); + text_color = Color.DarkBlue; + } + + string largetext = GetLargeText(); + string smalltext = GetSmallText(); + + SizeF szL = GetLargeTextSizeF(); + //e.Graphics.DrawString(largetext, base.Font, new SolidBrush(text_color), new RectangleF(new PointF(LEFT_MARGIN + imgArrow1.Width + 5, TOP_MARGIN), szL)); + TextRenderer.DrawText(e.Graphics, largetext, base.Font, + new Rectangle(LEFT_MARGIN + imgArrow1.Width + 5, TOP_MARGIN, (int) szL.Width, + (int) szL.Height), text_color, TextFormatFlags.Default); + + if (smalltext != String.Empty) + { + SizeF szS = GetSmallTextSizeF(); + e.Graphics.DrawString(smalltext, m_smallFont, new SolidBrush(text_color), + new RectangleF( + new PointF(LEFT_MARGIN + imgArrow1.Width + 8, TOP_MARGIN + (int) szL.Height), + szS)); + } + + e.Graphics.DrawImage(img, new Point(LEFT_MARGIN, TOP_MARGIN + (int) (szL.Height/2) - (img.Height/2))); + } + + //-------------------------------------------------------------------------------- + protected override void OnMouseLeave(EventArgs e) + { + m_State = eButtonState.Normal; + Invalidate(); + base.OnMouseLeave(e); + } + + //-------------------------------------------------------------------------------- + protected override void OnMouseEnter(EventArgs e) + { + m_State = eButtonState.MouseOver; + Invalidate(); + base.OnMouseEnter(e); + } + + //-------------------------------------------------------------------------------- + protected override void OnMouseUp(MouseEventArgs e) + { + m_State = eButtonState.MouseOver; + Invalidate(); + base.OnMouseUp(e); + } + + //-------------------------------------------------------------------------------- + protected override void OnMouseDown(MouseEventArgs e) + { + m_State = eButtonState.Down; + Invalidate(); + base.OnMouseDown(e); + } + + //-------------------------------------------------------------------------------- + protected override void OnSizeChanged(EventArgs e) + { + if (m_autoHeight) + { + int h = GetBestHeight(); + if (Height != h) + { + Height = h; + return; + } + } + base.OnSizeChanged(e); + } + + private enum eButtonState + { + Normal, + MouseOver, + Down + } + + //-------------------------------------------------------------------------------- + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/taskdialog/TaskDialog.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/taskdialog/TaskDialog.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/taskdialog/TaskDialog.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/taskdialog/TaskDialog.cs index c428007625..b2d5829750 100644 --- a/source/ch/cyberduck/ui/winforms/taskdialog/TaskDialog.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/taskdialog/TaskDialog.cs @@ -1,546 +1,546 @@ -using System; -using System.Collections.Generic; -using System.Windows.Forms; -using ch.cyberduck.core; - -namespace Ch.Cyberduck.Ui.Winforms.Taskdialog -{ - //-------------------------------------------------------------------------------- - - #region PUBLIC enums - - //-------------------------------------------------------------------------------- - public enum SysIcons - { - Information, - Question, - Warning, - Error - } ; - - public enum TaskDialogButtons - { - YesNo, - YesNoCancel, - OKCancel, - OK, - Close, - Cancel, - None - } - - #endregion - - //-------------------------------------------------------------------------------- - public class TaskDialog - { - private int _commandButtonResult = -1; - private int _radioButtonResult = -1; - private int EmulatedFormWidth = 450; - private EventHandler OnTaskDialogShown = null; - private EventHandler OnTaskDialogClosed = null; - public Help HelpDelegate { get; set; } - private bool _verificationChecked; - - public bool VerificationChecked - { - get { return _verificationChecked; } - set { _verificationChecked = value; } - } - - public int CommandButtonResult - { - get { return _commandButtonResult; } - set { _commandButtonResult = value; } - } - - public int RadioButtonResult - { - get { return _radioButtonResult; } - set { _radioButtonResult = value; } - } - - public bool PlaySystemSounds { get; set; } - - public delegate void Help(string url); - - public TaskDialog() - { - PlaySystemSounds = true; - VerificationChecked = false; - } - - //-------------------------------------------------------------------------------- - - #region ShowTaskDialogBox - - //-------------------------------------------------------------------------------- - public DialogResult ShowTaskDialogBox(IWin32Window Owner, - string Title, - string MainInstruction, - string Content, - string ExpandedInfo, - string Footer, - string VerificationText, - string RadioButtons, - string CommandButtons, - TaskDialogButtons Buttons, - SysIcons MainIcon, - SysIcons FooterIcon, - int DefaultIndex) - - { - DialogResult result; - if (OnTaskDialogShown != null) - OnTaskDialogShown(null, EventArgs.Empty); - - if (VistaTaskDialog.IsAvailableOnThisOS) - { - // [OPTION 1] Show Vista TaskDialog - VistaTaskDialog vtd = new VistaTaskDialog(); - - vtd.WindowTitle = Title; - vtd.MainInstruction = MainInstruction; - vtd.Content = Content; - vtd.ExpandedInformation = ExpandedInfo; - vtd.Footer = Footer; - - // Radio Buttons - if (RadioButtons != String.Empty) - { - List lst = new List(); - string[] arr = RadioButtons.Split(new char[] {'|'}); - for (int i = 0; i < arr.Length; i++) - { - try - { - VistaTaskDialogButton button = new VistaTaskDialogButton(); - button.ButtonId = 1000 + i; - button.ButtonText = arr[i]; - lst.Add(button); - } - catch (FormatException) - { - } - } - vtd.RadioButtons = lst.ToArray(); - vtd.NoDefaultRadioButton = (DefaultIndex == -1); - if (DefaultIndex >= 0) - vtd.DefaultRadioButton = DefaultIndex; - } - - // Custom Buttons - if (CommandButtons != String.Empty) - { - List lst = new List(); - string[] arr = CommandButtons.Split(new char[] {'|'}); - for (int i = 0; i < arr.Length; i++) - { - try - { - VistaTaskDialogButton button = new VistaTaskDialogButton(); - button.ButtonId = 2000 + i; - button.ButtonText = arr[i]; - lst.Add(button); - } - catch (FormatException) - { - } - } - vtd.Buttons = lst.ToArray(); - if (DefaultIndex >= 0) - vtd.DefaultButton = DefaultIndex; - } - - switch (Buttons) - { - case TaskDialogButtons.YesNo: - vtd.CommonButtons = VistaTaskDialogCommonButtons.Yes | VistaTaskDialogCommonButtons.No; - break; - case TaskDialogButtons.YesNoCancel: - vtd.CommonButtons = VistaTaskDialogCommonButtons.Yes | VistaTaskDialogCommonButtons.No | - VistaTaskDialogCommonButtons.Cancel; - break; - case TaskDialogButtons.OKCancel: - vtd.CommonButtons = VistaTaskDialogCommonButtons.Ok | VistaTaskDialogCommonButtons.Cancel; - break; - case TaskDialogButtons.OK: - vtd.CommonButtons = VistaTaskDialogCommonButtons.Ok; - break; - case TaskDialogButtons.Close: - vtd.CommonButtons = VistaTaskDialogCommonButtons.Close; - break; - case TaskDialogButtons.Cancel: - vtd.CommonButtons = VistaTaskDialogCommonButtons.Cancel; - break; - default: - vtd.CommonButtons = 0; - break; - } - - switch (MainIcon) - { - case SysIcons.Information: - vtd.MainIcon = VistaTaskDialogIcon.Information; - break; - case SysIcons.Question: - vtd.MainIcon = VistaTaskDialogIcon.Question; - break; - case SysIcons.Warning: - vtd.MainIcon = VistaTaskDialogIcon.Warning; - break; - case SysIcons.Error: - vtd.MainIcon = VistaTaskDialogIcon.Error; - break; - } - - switch (FooterIcon) - { - case SysIcons.Information: - vtd.FooterIcon = VistaTaskDialogIcon.Information; - break; - case SysIcons.Question: - vtd.FooterIcon = VistaTaskDialogIcon.Question; - break; - case SysIcons.Warning: - vtd.FooterIcon = VistaTaskDialogIcon.Warning; - break; - case SysIcons.Error: - vtd.FooterIcon = VistaTaskDialogIcon.Error; - break; - } - - vtd.EnableHyperlinks = true; - vtd.ShowProgressBar = false; - vtd.AllowDialogCancellation = (Buttons == TaskDialogButtons.Cancel || - Buttons == TaskDialogButtons.Close || - Buttons == TaskDialogButtons.OKCancel || - Buttons == TaskDialogButtons.YesNoCancel); - vtd.CallbackTimer = false; - vtd.ExpandedByDefault = false; - vtd.ExpandFooterArea = false; - vtd.PositionRelativeToWindow = true; - vtd.RightToLeftLayout = false; - vtd.NoDefaultRadioButton = false; - vtd.CanBeMinimized = false; - vtd.ShowMarqueeProgressBar = false; - vtd.UseCommandLinks = (CommandButtons != String.Empty); - vtd.UseCommandLinksNoIcon = false; - vtd.VerificationText = VerificationText; - vtd.VerificationFlagChecked = false; - vtd.ExpandedControlText = LocaleFactory.localizedString("More Options", "Bookmark"); - vtd.CollapsedControlText = LocaleFactory.localizedString("More Options", "Bookmark"); - vtd.Callback = - delegate(VistaActiveTaskDialog taskDialog, VistaTaskDialogNotificationArgs args, object callbackData) - { - if (!String.IsNullOrEmpty(args.Hyperlink)) - { - HelpDelegate(args.Hyperlink); - } - return false; - }; - - // Show the Dialog - result = - (DialogResult) - vtd.Show((vtd.CanBeMinimized ? null : Owner), out _verificationChecked, out _radioButtonResult); - - // if a command button was clicked, then change return result - // to "DialogResult.OK" and set the CommandButtonResult - if ((int) result >= 2000) - { - CommandButtonResult = ((int) result - 2000); - result = DialogResult.OK; - } - if (RadioButtonResult >= 1000) - RadioButtonResult -= 1000; // deduct the ButtonID start value for radio buttons - } - else - { - // [OPTION 2] Show Emulated Form - using (TaskDialogForm td = new TaskDialogForm()) - { - td.Title = Title; - td.MainInstruction = MainInstruction; - td.Content = Content; - td.ExpandedInfo = ExpandedInfo; - td.Footer = Footer; - td.FooterLinkDelegate = HelpDelegate; - td.RadioButtons = RadioButtons; - td.CommandButtons = CommandButtons; - td.PlaySystemSounds = PlaySystemSounds; - td.Buttons = Buttons; - td.MainIcon = MainIcon; - td.FooterIcon = FooterIcon; - td.VerificationText = VerificationText; - td.Width = EmulatedFormWidth; - td.DefaultButtonIndex = DefaultIndex; - td.BuildForm(); - result = td.ShowDialog(Owner); - - RadioButtonResult = td.RadioButtonIndex; - CommandButtonResult = td.CommandButtonClickedIndex; - VerificationChecked = td.VerificationCheckBoxChecked; - } - } - if (OnTaskDialogClosed != null) - OnTaskDialogClosed(null, EventArgs.Empty); - return result; - } - - //-------------------------------------------------------------------------------- - // Overloaded versions... - //-------------------------------------------------------------------------------- - public DialogResult ShowTaskDialogBox(IWin32Window Owner, - string Title, - string MainInstruction, - string Content, - string ExpandedInfo, - string Footer, - string VerificationText, - string RadioButtons, - string CommandButtons, - TaskDialogButtons Buttons, - SysIcons MainIcon, - SysIcons FooterIcon) - { - return ShowTaskDialogBox(Owner, Title, MainInstruction, Content, ExpandedInfo, Footer, VerificationText, - RadioButtons, CommandButtons, Buttons, MainIcon, FooterIcon, 0); - } - - public DialogResult ShowTaskDialogBox(string Title, - string MainInstruction, - string Content, - string ExpandedInfo, - string Footer, - string VerificationText, - string RadioButtons, - string CommandButtons, - TaskDialogButtons Buttons, - SysIcons MainIcon, - SysIcons FooterIcon) - { - return ShowTaskDialogBox(null, Title, MainInstruction, Content, ExpandedInfo, Footer, VerificationText, - RadioButtons, CommandButtons, Buttons, MainIcon, FooterIcon, 0); - } - - #endregion - - //-------------------------------------------------------------------------------- - - #region MessageBox - - //-------------------------------------------------------------------------------- - public DialogResult MessageBox(IWin32Window Owner, - string Title, - string MainInstruction, - string Content, - string ExpandedInfo, - string Footer, - string VerificationText, - TaskDialogButtons Buttons, - SysIcons MainIcon, - SysIcons FooterIcon) - { - return ShowTaskDialogBox(Owner, Title, MainInstruction, Content, ExpandedInfo, Footer, VerificationText, String.Empty, - String.Empty, Buttons, MainIcon, FooterIcon); - } - - //-------------------------------------------------------------------------------- - // Overloaded versions... - //-------------------------------------------------------------------------------- - public DialogResult MessageBox(string Title, - string MainInstruction, - string Content, - string ExpandedInfo, - string Footer, - string VerificationText, - TaskDialogButtons Buttons, - SysIcons MainIcon, - SysIcons FooterIcon) - { - return ShowTaskDialogBox(null, Title, MainInstruction, Content, ExpandedInfo, Footer, VerificationText, String.Empty, - String.Empty, Buttons, MainIcon, FooterIcon); - } - - public DialogResult MessageBox(IWin32Window Owner, - string Title, - string MainInstruction, - string Content, - TaskDialogButtons Buttons, - SysIcons MainIcon) - { - return MessageBox(Owner, Title, MainInstruction, Content, String.Empty, String.Empty, String.Empty, Buttons, MainIcon, - SysIcons.Information); - } - - public DialogResult MessageBox(string Title, - string MainInstruction, - string Content, - TaskDialogButtons Buttons, - SysIcons MainIcon) - { - return MessageBox(null, Title, MainInstruction, Content, String.Empty, String.Empty, String.Empty, Buttons, MainIcon, SysIcons.Information); - } - - //-------------------------------------------------------------------------------- - - #endregion - - //-------------------------------------------------------------------------------- - - #region ShowRadioBox - - //-------------------------------------------------------------------------------- - public DialogResult ShowRadioBox(IWin32Window Owner, - string Title, - string MainInstruction, - string Content, - string ExpandedInfo, - string Footer, - string VerificationText, - string RadioButtons, - SysIcons MainIcon, - SysIcons FooterIcon, - int DefaultIndex) - { - return ShowTaskDialogBox(Owner, Title, MainInstruction, Content, ExpandedInfo, Footer, - VerificationText, - RadioButtons, String.Empty, TaskDialogButtons.OKCancel, MainIcon, FooterIcon, - DefaultIndex); - } - - //-------------------------------------------------------------------------------- - // Overloaded versions... - //-------------------------------------------------------------------------------- - public int ShowRadioBox(string Title, - string MainInstruction, - string Content, - string ExpandedInfo, - string Footer, - string VerificationText, - string RadioButtons, - SysIcons MainIcon, - SysIcons FooterIcon, - int DefaultIndex) - { - DialogResult res = ShowTaskDialogBox(null, Title, MainInstruction, Content, ExpandedInfo, Footer, - VerificationText, - RadioButtons, String.Empty, TaskDialogButtons.OKCancel, MainIcon, FooterIcon, - DefaultIndex); - if (res == DialogResult.OK) - return _radioButtonResult; - else - return -1; - } - - public DialogResult ShowRadioBox(IWin32Window Owner, - string Title, - string MainInstruction, - string Content, - string ExpandedInfo, - string Footer, - string VerificationText, - string RadioButtons, - SysIcons MainIcon, - SysIcons FooterIcon) - { - return ShowRadioBox(Owner, Title, MainInstruction, Content, ExpandedInfo, Footer, VerificationText, - RadioButtons, SysIcons.Question, SysIcons.Information, 0); - } - - public DialogResult ShowRadioBox(IWin32Window Owner, - string Title, - string MainInstruction, - string Content, - string RadioButtons, - int DefaultIndex) - { - return ShowRadioBox(Owner, Title, MainInstruction, Content, String.Empty, String.Empty, String.Empty, RadioButtons, SysIcons.Question, - SysIcons.Information, DefaultIndex); - } - - public DialogResult ShowRadioBox(IWin32Window Owner, - string Title, - string MainInstruction, - string Content, - string RadioButtons) - { - return ShowRadioBox(Owner, Title, MainInstruction, Content, String.Empty, String.Empty, String.Empty, RadioButtons, SysIcons.Question, - SysIcons.Information, 0); - } - - public DialogResult ShowRadioBox(string Title, - string MainInstruction, - string Content, - string RadioButtons) - { - return ShowRadioBox(null, Title, MainInstruction, Content, String.Empty, String.Empty, String.Empty, RadioButtons, SysIcons.Question, - SysIcons.Information, 0); - } - - #endregion - - //-------------------------------------------------------------------------------- - - #region ShowCommandBox - - //-------------------------------------------------------------------------------- - public DialogResult ShowCommandBox(IWin32Window Owner, - string Title, - string MainInstruction, - string Content, - string ExpandedInfo, - string Footer, - string VerificationText, - string CommandButtons, - bool ShowCancelButton, - SysIcons MainIcon, - SysIcons FooterIcon) - { - return ShowTaskDialogBox(Owner, Title, MainInstruction, Content, ExpandedInfo, Footer, - VerificationText, - "", CommandButtons, - (ShowCancelButton ? TaskDialogButtons.Cancel : TaskDialogButtons.None), - MainIcon, FooterIcon); - } - - //-------------------------------------------------------------------------------- - // Overloaded versions... - //-------------------------------------------------------------------------------- - public DialogResult ShowCommandBox(string Title, - string MainInstruction, - string Content, - string ExpandedInfo, - string Footer, - string VerificationText, - string CommandButtons, - bool ShowCancelButton, - SysIcons MainIcon, - SysIcons FooterIcon) - { - return ShowTaskDialogBox(null, Title, MainInstruction, Content, ExpandedInfo, Footer, - VerificationText, - "", CommandButtons, - (ShowCancelButton ? TaskDialogButtons.Cancel : TaskDialogButtons.None), - MainIcon, FooterIcon); - } - - public DialogResult ShowCommandBox(string Title, string MainInstruction, string Content, string CommandButtons, - bool ShowCancelButton, SysIcons MainIcon) - { - return ShowCommandBox(null, Title, MainInstruction, Content, CommandButtons, ShowCancelButton, MainIcon); - } - - public DialogResult ShowCommandBox(IWin32Window Owner, string Title, string MainInstruction, string Content, - string CommandButtons, bool ShowCancelButton, SysIcons MainIcon) - { - return ShowCommandBox(Owner, Title, MainInstruction, Content, String.Empty, String.Empty, String.Empty, CommandButtons, ShowCancelButton, - MainIcon, SysIcons.Information); - } - - #endregion - - //-------------------------------------------------------------------------------- - } +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using ch.cyberduck.core; + +namespace Ch.Cyberduck.Ui.Winforms.Taskdialog +{ + //-------------------------------------------------------------------------------- + + #region PUBLIC enums + + //-------------------------------------------------------------------------------- + public enum SysIcons + { + Information, + Question, + Warning, + Error + } ; + + public enum TaskDialogButtons + { + YesNo, + YesNoCancel, + OKCancel, + OK, + Close, + Cancel, + None + } + + #endregion + + //-------------------------------------------------------------------------------- + public class TaskDialog + { + private int _commandButtonResult = -1; + private int _radioButtonResult = -1; + private int EmulatedFormWidth = 450; + private EventHandler OnTaskDialogShown = null; + private EventHandler OnTaskDialogClosed = null; + public Help HelpDelegate { get; set; } + private bool _verificationChecked; + + public bool VerificationChecked + { + get { return _verificationChecked; } + set { _verificationChecked = value; } + } + + public int CommandButtonResult + { + get { return _commandButtonResult; } + set { _commandButtonResult = value; } + } + + public int RadioButtonResult + { + get { return _radioButtonResult; } + set { _radioButtonResult = value; } + } + + public bool PlaySystemSounds { get; set; } + + public delegate void Help(string url); + + public TaskDialog() + { + PlaySystemSounds = true; + VerificationChecked = false; + } + + //-------------------------------------------------------------------------------- + + #region ShowTaskDialogBox + + //-------------------------------------------------------------------------------- + public DialogResult ShowTaskDialogBox(IWin32Window Owner, + string Title, + string MainInstruction, + string Content, + string ExpandedInfo, + string Footer, + string VerificationText, + string RadioButtons, + string CommandButtons, + TaskDialogButtons Buttons, + SysIcons MainIcon, + SysIcons FooterIcon, + int DefaultIndex) + + { + DialogResult result; + if (OnTaskDialogShown != null) + OnTaskDialogShown(null, EventArgs.Empty); + + if (VistaTaskDialog.IsAvailableOnThisOS) + { + // [OPTION 1] Show Vista TaskDialog + VistaTaskDialog vtd = new VistaTaskDialog(); + + vtd.WindowTitle = Title; + vtd.MainInstruction = MainInstruction; + vtd.Content = Content; + vtd.ExpandedInformation = ExpandedInfo; + vtd.Footer = Footer; + + // Radio Buttons + if (RadioButtons != String.Empty) + { + List lst = new List(); + string[] arr = RadioButtons.Split(new char[] {'|'}); + for (int i = 0; i < arr.Length; i++) + { + try + { + VistaTaskDialogButton button = new VistaTaskDialogButton(); + button.ButtonId = 1000 + i; + button.ButtonText = arr[i]; + lst.Add(button); + } + catch (FormatException) + { + } + } + vtd.RadioButtons = lst.ToArray(); + vtd.NoDefaultRadioButton = (DefaultIndex == -1); + if (DefaultIndex >= 0) + vtd.DefaultRadioButton = DefaultIndex; + } + + // Custom Buttons + if (CommandButtons != String.Empty) + { + List lst = new List(); + string[] arr = CommandButtons.Split(new char[] {'|'}); + for (int i = 0; i < arr.Length; i++) + { + try + { + VistaTaskDialogButton button = new VistaTaskDialogButton(); + button.ButtonId = 2000 + i; + button.ButtonText = arr[i]; + lst.Add(button); + } + catch (FormatException) + { + } + } + vtd.Buttons = lst.ToArray(); + if (DefaultIndex >= 0) + vtd.DefaultButton = DefaultIndex; + } + + switch (Buttons) + { + case TaskDialogButtons.YesNo: + vtd.CommonButtons = VistaTaskDialogCommonButtons.Yes | VistaTaskDialogCommonButtons.No; + break; + case TaskDialogButtons.YesNoCancel: + vtd.CommonButtons = VistaTaskDialogCommonButtons.Yes | VistaTaskDialogCommonButtons.No | + VistaTaskDialogCommonButtons.Cancel; + break; + case TaskDialogButtons.OKCancel: + vtd.CommonButtons = VistaTaskDialogCommonButtons.Ok | VistaTaskDialogCommonButtons.Cancel; + break; + case TaskDialogButtons.OK: + vtd.CommonButtons = VistaTaskDialogCommonButtons.Ok; + break; + case TaskDialogButtons.Close: + vtd.CommonButtons = VistaTaskDialogCommonButtons.Close; + break; + case TaskDialogButtons.Cancel: + vtd.CommonButtons = VistaTaskDialogCommonButtons.Cancel; + break; + default: + vtd.CommonButtons = 0; + break; + } + + switch (MainIcon) + { + case SysIcons.Information: + vtd.MainIcon = VistaTaskDialogIcon.Information; + break; + case SysIcons.Question: + vtd.MainIcon = VistaTaskDialogIcon.Question; + break; + case SysIcons.Warning: + vtd.MainIcon = VistaTaskDialogIcon.Warning; + break; + case SysIcons.Error: + vtd.MainIcon = VistaTaskDialogIcon.Error; + break; + } + + switch (FooterIcon) + { + case SysIcons.Information: + vtd.FooterIcon = VistaTaskDialogIcon.Information; + break; + case SysIcons.Question: + vtd.FooterIcon = VistaTaskDialogIcon.Question; + break; + case SysIcons.Warning: + vtd.FooterIcon = VistaTaskDialogIcon.Warning; + break; + case SysIcons.Error: + vtd.FooterIcon = VistaTaskDialogIcon.Error; + break; + } + + vtd.EnableHyperlinks = true; + vtd.ShowProgressBar = false; + vtd.AllowDialogCancellation = (Buttons == TaskDialogButtons.Cancel || + Buttons == TaskDialogButtons.Close || + Buttons == TaskDialogButtons.OKCancel || + Buttons == TaskDialogButtons.YesNoCancel); + vtd.CallbackTimer = false; + vtd.ExpandedByDefault = false; + vtd.ExpandFooterArea = false; + vtd.PositionRelativeToWindow = true; + vtd.RightToLeftLayout = false; + vtd.NoDefaultRadioButton = false; + vtd.CanBeMinimized = false; + vtd.ShowMarqueeProgressBar = false; + vtd.UseCommandLinks = (CommandButtons != String.Empty); + vtd.UseCommandLinksNoIcon = false; + vtd.VerificationText = VerificationText; + vtd.VerificationFlagChecked = false; + vtd.ExpandedControlText = LocaleFactory.localizedString("More Options", "Bookmark"); + vtd.CollapsedControlText = LocaleFactory.localizedString("More Options", "Bookmark"); + vtd.Callback = + delegate(VistaActiveTaskDialog taskDialog, VistaTaskDialogNotificationArgs args, object callbackData) + { + if (!String.IsNullOrEmpty(args.Hyperlink)) + { + HelpDelegate(args.Hyperlink); + } + return false; + }; + + // Show the Dialog + result = + (DialogResult) + vtd.Show((vtd.CanBeMinimized ? null : Owner), out _verificationChecked, out _radioButtonResult); + + // if a command button was clicked, then change return result + // to "DialogResult.OK" and set the CommandButtonResult + if ((int) result >= 2000) + { + CommandButtonResult = ((int) result - 2000); + result = DialogResult.OK; + } + if (RadioButtonResult >= 1000) + RadioButtonResult -= 1000; // deduct the ButtonID start value for radio buttons + } + else + { + // [OPTION 2] Show Emulated Form + using (TaskDialogForm td = new TaskDialogForm()) + { + td.Title = Title; + td.MainInstruction = MainInstruction; + td.Content = Content; + td.ExpandedInfo = ExpandedInfo; + td.Footer = Footer; + td.FooterLinkDelegate = HelpDelegate; + td.RadioButtons = RadioButtons; + td.CommandButtons = CommandButtons; + td.PlaySystemSounds = PlaySystemSounds; + td.Buttons = Buttons; + td.MainIcon = MainIcon; + td.FooterIcon = FooterIcon; + td.VerificationText = VerificationText; + td.Width = EmulatedFormWidth; + td.DefaultButtonIndex = DefaultIndex; + td.BuildForm(); + result = td.ShowDialog(Owner); + + RadioButtonResult = td.RadioButtonIndex; + CommandButtonResult = td.CommandButtonClickedIndex; + VerificationChecked = td.VerificationCheckBoxChecked; + } + } + if (OnTaskDialogClosed != null) + OnTaskDialogClosed(null, EventArgs.Empty); + return result; + } + + //-------------------------------------------------------------------------------- + // Overloaded versions... + //-------------------------------------------------------------------------------- + public DialogResult ShowTaskDialogBox(IWin32Window Owner, + string Title, + string MainInstruction, + string Content, + string ExpandedInfo, + string Footer, + string VerificationText, + string RadioButtons, + string CommandButtons, + TaskDialogButtons Buttons, + SysIcons MainIcon, + SysIcons FooterIcon) + { + return ShowTaskDialogBox(Owner, Title, MainInstruction, Content, ExpandedInfo, Footer, VerificationText, + RadioButtons, CommandButtons, Buttons, MainIcon, FooterIcon, 0); + } + + public DialogResult ShowTaskDialogBox(string Title, + string MainInstruction, + string Content, + string ExpandedInfo, + string Footer, + string VerificationText, + string RadioButtons, + string CommandButtons, + TaskDialogButtons Buttons, + SysIcons MainIcon, + SysIcons FooterIcon) + { + return ShowTaskDialogBox(null, Title, MainInstruction, Content, ExpandedInfo, Footer, VerificationText, + RadioButtons, CommandButtons, Buttons, MainIcon, FooterIcon, 0); + } + + #endregion + + //-------------------------------------------------------------------------------- + + #region MessageBox + + //-------------------------------------------------------------------------------- + public DialogResult MessageBox(IWin32Window Owner, + string Title, + string MainInstruction, + string Content, + string ExpandedInfo, + string Footer, + string VerificationText, + TaskDialogButtons Buttons, + SysIcons MainIcon, + SysIcons FooterIcon) + { + return ShowTaskDialogBox(Owner, Title, MainInstruction, Content, ExpandedInfo, Footer, VerificationText, String.Empty, + String.Empty, Buttons, MainIcon, FooterIcon); + } + + //-------------------------------------------------------------------------------- + // Overloaded versions... + //-------------------------------------------------------------------------------- + public DialogResult MessageBox(string Title, + string MainInstruction, + string Content, + string ExpandedInfo, + string Footer, + string VerificationText, + TaskDialogButtons Buttons, + SysIcons MainIcon, + SysIcons FooterIcon) + { + return ShowTaskDialogBox(null, Title, MainInstruction, Content, ExpandedInfo, Footer, VerificationText, String.Empty, + String.Empty, Buttons, MainIcon, FooterIcon); + } + + public DialogResult MessageBox(IWin32Window Owner, + string Title, + string MainInstruction, + string Content, + TaskDialogButtons Buttons, + SysIcons MainIcon) + { + return MessageBox(Owner, Title, MainInstruction, Content, String.Empty, String.Empty, String.Empty, Buttons, MainIcon, + SysIcons.Information); + } + + public DialogResult MessageBox(string Title, + string MainInstruction, + string Content, + TaskDialogButtons Buttons, + SysIcons MainIcon) + { + return MessageBox(null, Title, MainInstruction, Content, String.Empty, String.Empty, String.Empty, Buttons, MainIcon, SysIcons.Information); + } + + //-------------------------------------------------------------------------------- + + #endregion + + //-------------------------------------------------------------------------------- + + #region ShowRadioBox + + //-------------------------------------------------------------------------------- + public DialogResult ShowRadioBox(IWin32Window Owner, + string Title, + string MainInstruction, + string Content, + string ExpandedInfo, + string Footer, + string VerificationText, + string RadioButtons, + SysIcons MainIcon, + SysIcons FooterIcon, + int DefaultIndex) + { + return ShowTaskDialogBox(Owner, Title, MainInstruction, Content, ExpandedInfo, Footer, + VerificationText, + RadioButtons, String.Empty, TaskDialogButtons.OKCancel, MainIcon, FooterIcon, + DefaultIndex); + } + + //-------------------------------------------------------------------------------- + // Overloaded versions... + //-------------------------------------------------------------------------------- + public int ShowRadioBox(string Title, + string MainInstruction, + string Content, + string ExpandedInfo, + string Footer, + string VerificationText, + string RadioButtons, + SysIcons MainIcon, + SysIcons FooterIcon, + int DefaultIndex) + { + DialogResult res = ShowTaskDialogBox(null, Title, MainInstruction, Content, ExpandedInfo, Footer, + VerificationText, + RadioButtons, String.Empty, TaskDialogButtons.OKCancel, MainIcon, FooterIcon, + DefaultIndex); + if (res == DialogResult.OK) + return _radioButtonResult; + else + return -1; + } + + public DialogResult ShowRadioBox(IWin32Window Owner, + string Title, + string MainInstruction, + string Content, + string ExpandedInfo, + string Footer, + string VerificationText, + string RadioButtons, + SysIcons MainIcon, + SysIcons FooterIcon) + { + return ShowRadioBox(Owner, Title, MainInstruction, Content, ExpandedInfo, Footer, VerificationText, + RadioButtons, SysIcons.Question, SysIcons.Information, 0); + } + + public DialogResult ShowRadioBox(IWin32Window Owner, + string Title, + string MainInstruction, + string Content, + string RadioButtons, + int DefaultIndex) + { + return ShowRadioBox(Owner, Title, MainInstruction, Content, String.Empty, String.Empty, String.Empty, RadioButtons, SysIcons.Question, + SysIcons.Information, DefaultIndex); + } + + public DialogResult ShowRadioBox(IWin32Window Owner, + string Title, + string MainInstruction, + string Content, + string RadioButtons) + { + return ShowRadioBox(Owner, Title, MainInstruction, Content, String.Empty, String.Empty, String.Empty, RadioButtons, SysIcons.Question, + SysIcons.Information, 0); + } + + public DialogResult ShowRadioBox(string Title, + string MainInstruction, + string Content, + string RadioButtons) + { + return ShowRadioBox(null, Title, MainInstruction, Content, String.Empty, String.Empty, String.Empty, RadioButtons, SysIcons.Question, + SysIcons.Information, 0); + } + + #endregion + + //-------------------------------------------------------------------------------- + + #region ShowCommandBox + + //-------------------------------------------------------------------------------- + public DialogResult ShowCommandBox(IWin32Window Owner, + string Title, + string MainInstruction, + string Content, + string ExpandedInfo, + string Footer, + string VerificationText, + string CommandButtons, + bool ShowCancelButton, + SysIcons MainIcon, + SysIcons FooterIcon) + { + return ShowTaskDialogBox(Owner, Title, MainInstruction, Content, ExpandedInfo, Footer, + VerificationText, + "", CommandButtons, + (ShowCancelButton ? TaskDialogButtons.Cancel : TaskDialogButtons.None), + MainIcon, FooterIcon); + } + + //-------------------------------------------------------------------------------- + // Overloaded versions... + //-------------------------------------------------------------------------------- + public DialogResult ShowCommandBox(string Title, + string MainInstruction, + string Content, + string ExpandedInfo, + string Footer, + string VerificationText, + string CommandButtons, + bool ShowCancelButton, + SysIcons MainIcon, + SysIcons FooterIcon) + { + return ShowTaskDialogBox(null, Title, MainInstruction, Content, ExpandedInfo, Footer, + VerificationText, + "", CommandButtons, + (ShowCancelButton ? TaskDialogButtons.Cancel : TaskDialogButtons.None), + MainIcon, FooterIcon); + } + + public DialogResult ShowCommandBox(string Title, string MainInstruction, string Content, string CommandButtons, + bool ShowCancelButton, SysIcons MainIcon) + { + return ShowCommandBox(null, Title, MainInstruction, Content, CommandButtons, ShowCancelButton, MainIcon); + } + + public DialogResult ShowCommandBox(IWin32Window Owner, string Title, string MainInstruction, string Content, + string CommandButtons, bool ShowCancelButton, SysIcons MainIcon) + { + return ShowCommandBox(Owner, Title, MainInstruction, Content, String.Empty, String.Empty, String.Empty, CommandButtons, ShowCancelButton, + MainIcon, SysIcons.Information); + } + + #endregion + + //-------------------------------------------------------------------------------- + } } \ No newline at end of file diff --git a/source/ch/cyberduck/ui/winforms/taskdialog/TaskDialogForm.cs b/windows/src/main/csharp/ch/cyberduck/ui/winforms/taskdialog/TaskDialogForm.cs similarity index 97% rename from source/ch/cyberduck/ui/winforms/taskdialog/TaskDialogForm.cs rename to windows/src/main/csharp/ch/cyberduck/ui/winforms/taskdialog/TaskDialogForm.cs index 425b53af65..04d7e8d1cf 100644 --- a/source/ch/cyberduck/ui/winforms/taskdialog/TaskDialogForm.cs +++ b/windows/src/main/csharp/ch/cyberduck/ui/winforms/taskdialog/TaskDialogForm.cs @@ -1,473 +1,473 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Text; -using System.Text.RegularExpressions; -using System.Windows.Forms; - -namespace Ch.Cyberduck.Ui.Winforms.Taskdialog -{ - public partial class TaskDialogForm : Form - { - //-------------------------------------------------------------------------------- - #region PRIVATE members - //-------------------------------------------------------------------------------- - SysIcons m_mainIcon = SysIcons.Question; - SysIcons m_footerIcon = SysIcons.Warning; - - string m_mainInstruction = "Main Instruction Text"; - int m_mainInstructionHeight = 0; - Font m_mainInstructionFont = new Font("Arial", 11.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0); - - List m_radioButtonCtrls = new List(); - string m_radioButtons = String.Empty; - int m_initialRadioButtonIndex = 0; - - List